题 一个人的.bashrc可以添加什么有用的东西? [关闭]


有什么你不能没有的东西,会让我的生活变得更轻松吗?以下是我使用的一些('diskspace'和'文件夹'特别方便)。

# some more ls aliases
alias ll='ls -alh'
alias la='ls -A'
alias l='ls -CFlh'
alias woo='fortune'
alias lsd="ls -alF | grep /$"

# This is GOLD for finding out what is taking so much space on your drives!
alias diskspace="du -S | sort -n -r |more"

# Command line mplayer movie watching for the win.
alias mp="mplayer -fs"

# Show me the size (sorted) of only the folders in this directory
alias folders="find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn"

# This will keep you sane when you're about to smash the keyboard again.
alias frak="fortune"

# This is where you put your hand rolled scripts (remember to chmod them)
PATH="$HOME/bin:$PATH"

142




这应该是社区维基 - Toro
变成社区维基。请享用。 - Gareth
管道更多?我打赌你会更少或更少-F幸福 - derobert
除了在更多之前存在“排序”之外,因为排序需要完整的输入,所以较少的-F会让你更快地看到排序,我敢打赌它很快就会完全消失。 - GreenKiwi
为了防止有人感兴趣,有一项服务允许您浏览,构建列表并获取别名: alias.sh - Sam152


答案:


我有一个提取档案的小脚本,我发现它在网上的某个地方:

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
 }

81



尼斯。但是,有一个关于IDE / Vim参数的知识来自内存中的命令。虽然有很棒的剧本。肯定会进入.bashrc干杯! - Gareth
有一个很好的简单的linux命令叫做“unp”,Unpacker可以做到这一点以及更多。 - Sander Marechal
该命令有一个缺少的功能。它不能打开7z包 boost.org/doc/libs/1_39_0/more/getting_started/... 正确。你知道如何解决这个问题吗? - Léo Léopold Hertz 준영
较新版本的tar会自动检测归档类型,因此可以通过'tar xvf'提取所有支持的格式。 - Prof. Moriarty
@Sander dtrx也不错。它确保归档提取到其自己的子目录。 - Tobu


因为我使用了这么多不同的机器,我的 .bashrc 始终设置命令提示符以包括我当前登录的服务器的名称等。这样,当我在telnet / ssh中深入三级时,我不会在错误的窗口中键入错误的内容。真的很糟糕 rm -rf . 在错误的窗口! (注意:在家中,telnet在所有计算机上都被禁用。在工作中,ssh并不总是启用,我没有很多机器的root访问权限。)

我有一个脚本 ~/bin/setprompt 这是由我执行的 .bashrc, 其中包含:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

# Throw it all together 
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "

此脚本将提示符设置为后跟的主机名 :) 如果最后一个命令成功了 :( 如果最后一个命令失败。


39



$?检查是一个非常巧妙的想法,我喜欢它。 - derobert
我还在提示中显示状态,但保留数值并在非零时将其着色为红色,否则为绿色。 - pgs
有趣.... - imapollo


较少的联机帮助页的颜色使联机帮助页更容易阅读:

export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

彩色联机帮助页也可以通过安装大多数并将其用作MANPAGER env变量来获得。如果您不仅要将此寻呼机用于man,请使用PAGER变量,如下所示:

export PAGER="/usr/bin/most -s"

25





没有更多的CD ../../../ ..但是4

当数字作为参数传递时,如果没有默认情况下上升1(在stackoverflow.com中的注释中的链接中找到并稍微修改),则会增加许多目录

up(){
  local d=""
  limit=$1
  for ((i=1 ; i <= limit ; i++))
    do
      d=$d/..
    done
  d=$(echo $d | sed 's/^\///')
  if [ -z "$d" ]; then
    d=..
  fi
  cd $d
}

24



这个版本的up()似乎不必要地复杂。我使用的是这个版本:up(){cd $(eval printf'../'%6.0s {1 .. $ 1})&& pwd; }。如果您愿意,可以删除对“pwd”的调用。 - Matthew G
我使用这样的东西:#Directory navigation aliases alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' - Matt Kenefick


我处理了很多不同的机器,所以我最喜欢的是我需要经常SSH到的每台机器的别名:

alias claudius="ssh dinomite@claudius"

设置好的东西也很有用 .ssh/config 和 ssh键 使机器之间的跳跃变得更加容易。

另一个我最喜欢的别名是移动目录:

alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."

还有一些常用的变种 ls (和拼写错误):

alias ll="ls -l"
alias lo="ls -o"
alias lh="ls -lh"
alias la="ls -la"
alias sl="ls"
alias l="ls"
alias s="ls"

历史记录可能非常有用,但默认情况下,在大多数发行版中,您的历史记录会被每个退出的shell所震撼,并且它的开头并不多。我喜欢有10,000行历史:

export HISTFILESIZE=20000
export HISTSIZE=10000
shopt -s histappend
# Combine multiline commands into one in history
shopt -s cmdhist
# Ignore duplicates, ls without options and builtin commands
HISTCONTROL=ignoredups
export HISTIGNORE="&:ls:[bf]g:exit"

那样的话,如果我知道我以前做过什么但不记得细节,快点 history | grep foo 会帮我慢慢记忆。

我经常发现自己输出了输出 awk 为了获得输出的某一列,如 df -h | awk '{print $2}' 找到每个磁盘的大小。为了使这更容易,我创建了一个函数 fawk 在我的.bashrc中:

function fawk {
    first="awk '{print "
    last="}'"
    cmd="${first}\$${1}${last}"
    eval $cmd
}

我现在可以跑了 df -h|fawk 2 这节省了很多打字。

如果需要指定分隔符(例如awk -F: 对于 /etc/passwd),这个功能显然无法处理。经过略微翻修的版本 这个要点 可以任意处理 awk 字段编号之前的参数(但仍然需要从stdin输入)。


19



我也使用ssh别名和ssh键......它使每一个都很容易 - devin
+1为历史记录控制提示。 - Rene Saarsoo
您可以将.ssh / config中的主机名别名设置为相同的效果。在这种情况下,使用'username dinomite'添加条目'Host cloudius' - Sirex


GPG加密了bashrc

我相信我们所有的东西都要放在我们的bashrc中,我们不希望sudoers容易阅读。我的解决方案是:

if [ -f ~/.bash_private.gpg ]; then
   eval "$(gpg --decrypt ~/.bash_private.gpg 2>/dev/null)"
fi

我有一个GPG代理,所以我只需每隔几个小时输入一次私钥密码。您仍然需要对系统用户有一定的信任,因为您定义的变量,函数和别名可以从RAM中提取。但是,我主要用于笔记本电脑。如果它被盗,我不希望有人轻易看到以下内容:

alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:secret@server.com/latest; }

15



在这种情况下你也加密你的历史吗?为什么不加密您的$ home - Rqomey
@Rqomey,重点是我不必加密我的历史记录,因为我的密码没有显示在我的.bash_history中,因为它们被别名或函数隐藏。在它里面你会看到类似的东西 MYsql < garbagecollect.sql 代替 mysql -uadmin -psecret < garbagecollect.sql - Bruno Bronosky


这是一个很棒的资源:

告诉我们你的.bashrc


12





我曾经把这些设置在所有地方,但后来意识到最好还是记住如何“手动”进行它们,因为这意味着我会1)完全理解发生了什么,2)即使有这些功能也可以访问我的自定义.bashrc没有安装。

这些天我唯一使用别名的方法是减少真正长行的重复输入(例如。 alias myhost='ssh -T user@my.remote.host screen -dAr' )


12



同意记住长期有用的命令。我发现虽然我经常在失控的服务器上运行'磁盘空间'(即php正在整个地方进行coredumping)。 - Gareth
是的,我实际上有类似的东西(du / home / * --max-depth 1 | sort -n> /home/.sizes)每晚运行,所以我可以粗略地关注我的用户在大空间的消耗共享机器。 - pjz
但是,在您经常使用的系统上部署自定义配置很容易。 - Tobu
就像跟随你的ssh别名一样,这是我一直在做的事情。在DNS中断的情况下,我总是使用IP执行此操作。 - jwbensley


那里的一个衬里和小脚本可以永远持续下去。我推荐男人打击并自己写东西。一些不错的短暂的东西 http://www.commandlinefu.com。这是一些事情。

#use extra globing features. See man bash, search extglob.
shopt -s extglob
#include .files when globbing.
shopt -s dotglob
#When a glob expands to nothing, make it an empty string instead of the literal characters.
shopt -s nullglob
# fix spelling errors for cd, only in interactive shell
shopt -s cdspell
# vi mode
set -o vi

s() { # do sudo, or sudo the last command if no argument given
    if [[ $# == 0 ]]; then
        sudo $(history -p '!!')
    else
        sudo "$@"
    fi
}

prompt_command() {
    p=$PWD  # p is much easier to type in interactive shells
    # a special IFS should be limited to 1 liners or inside scripts.
    # Otherwise it only causes mistakes.
    unset IFS
}
PROMPT_COMMAND=prompt_command


# smart advanced completion, download from
# http://bash-completion.alioth.debian.org/
if [[ -f $HOME/local/bin/bash_completion ]]; then
    . $HOME/local/bin/bash_completion
fi


extract () { # extract files. Ignore files with improper extensions.
    local x
    ee() { # echo and execute
        echo "$@"
        $1 "$2"
    }
    for x in "$@"; do
        [[ -f $x ]] || continue
        case "$x" in
            *.tar.bz2 | *.tbz2 )    ee "tar xvjf" "$x"  ;;
            *.tar.gz | *.tgz ) ee "tar xvzf" "$x"   ;;
            *.bz2 )             ee "bunzip2" "$x"   ;;
            *.rar )             ee "unrar x" "$x"   ;;
            *.gz )              ee "gunzip" "$x"    ;;
            *.tar )             ee "tar xvf" "$x"   ;;
            *.zip )             ee "unzip" "$x"     ;;
            *.Z )               ee "uncompress" "$x" ;;
            *.7z )              ee "7z x" "$x"      ;;
        esac
    done
}

9



我喜欢你的 history -p 特技。 - Tobu


如果你是一个系统管理员并且使用root权限,那么给Bash一个小小的提示:

shopt -o noclobber

如果重定向输出(> filename),这将防止您意外破坏现有文件的内容。您始终可以使用> | filename强制覆盖。


9