it-swarm.cn

您最喜欢的命令行功能或技巧是什么?

分享您的Unix/Linux命令行功能和技巧。尽可能使它与Shell/distro无关。有兴趣查看别名,单行代码,键盘快捷键,小型Shell脚本等。

93
cmcginty

这在 此答案 中提到的_!!_技巧上有所扩展。实际上,有一堆与历史相关的命令往往会被忘记(人们倾向于 Up 而不是寻找他们知道自己键入的命令100次)。

  • history命令将显示最近运行的命令列表,左侧带有事件指示符
  • _!N_将替换与事件指示符N相关的命令
  • _!-N_将替换N  最近的命令;例如_!-1_将替换最近的命令,_!-2_将替换第二个命令,依此类推。
  • 如另一个答案中所述,_!!_是_!-1_的简写,可以快速替换最后一个命令
  • _!string_将替换以string开头的最新命令
  • _!?string?_将替换包含string的最新命令

可以将单词指示符添加到_!_历史记录命令上,以修改结果。冒号将事件和Word代号分隔开,例如_!!:0_。使用单词指示符时,事件指示符_!!_可以缩写为_!_,因此_!!:0_等效于_!:0_。

  • _!:0_将获得已执行的命令
  • _!:1_将得到第一个参数(_!:2_将得到第二个参数,依此类推)
  • _!:2-3_将获得第二个和第三个参数
  • _!:^_是获取第一个参数的另一种方法。 _!:$_将获得最后一个
  • _!:*_将获得所有参数(但是而不是命令)

修饰符也可以附加到_!_历史记录命令的后面,每个命令都以冒号作为前缀。可以堆叠任何数字(例如_!:t:r:p_)。

  • h-排列到基本文件名
  • t-仅基本文件名
  • r-排列到文件扩展名
  • e-仅文件扩展名
  • _s/search/replacement_-用search替换replacement的第一个匹配项
  • _gs/search/replacement_-用search替换所有出现的replacement
88
Michael Mrozek

bash-插入前一行的最终参数

alt--. 有史以来最有用的组合键,尝试一下,看看,由于某种原因,没人知道这一组合。

反复按它以选择较旧的最后一个参数。

如果您想对刚才使用的参数/文件做更多的事情,那就太好了。

64
chillitom

我最喜欢的是

man 7 ascii

简单,所以非常有用。

   Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
   ────────────────────────────────────────────────────────────────────────
   000   0     00    NUL '\0' (null character)   100   64    40    @
   001   1     01    SOH (start of heading)      101   65    41    A
   002   2     02    STX (start of text)         102   66    42    B
   003   3     03    ETX (end of text)           103   67    43    C
   004   4     04    EOT (end of transmission)   104   68    44    D
   005   5     05    ENQ (enquiry)               105   69    45    E
   006   6     06    ACK (acknowledge)           106   70    46    F
   007   7     07    BEL '\a' (bell)             107   71    47    G
   010   8     08    BS  '\b' (backspace)        110   72    48    H
   011   9     09    HT  '\t' (horizontal tab)   111   73    49    I
   012   10    0A    LF  '\n' (new line)         112   74    4A    J
   013   11    0B    VT  '\v' (vertical tab)     113   75    4B    K
   014   12    0C    FF  '\f' (form feed)        114   76    4C    L
   015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M
   016   14    0E    SO  (shift out)             116   78    4E    N
   017   15    0F    SI  (shift in)              117   79    4F    O
   020   16    10    DLE (data link escape)      120   80    50    P
   021   17    11    DC1 (device control 1)      121   81    51    Q
   022   18    12    DC2 (device control 2)      122   82    52    R
   023   19    13    DC3 (device control 3)      123   83    53    S
   024   20    14    DC4 (device control 4)      124   84    54    T
   025   21    15    NAK (negative ack.)         125   85    55    U
   026   22    16    SYN (synchronous idle)      126   86    56    V
   027   23    17    ETB (end of trans. blk)     127   87    57    W
   030   24    18    CAN (cancel)                130   88    58    X
   031   25    19    EM  (end of medium)         131   89    59    Y
   032   26    1A    SUB (substitute)            132   90    5A    Z
   033   27    1B    ESC (escape)                133   91    5B    [
   034   28    1C    FS  (file separator)        134   92    5C    \  '\\'
   035   29    1D    GS  (group separator)       135   93    5D    ]
   036   30    1E    RS  (record separator)      136   94    5E    ^
   037   31    1F    US  (unit separator)        137   95    5F    _
   040   32    20    SPACE                       140   96    60    `
   041   33    21    !                           141   97    61    a
   042   34    22    "                           142   98    62    b
   043   35    23    #                           143   99    63    c
   044   36    24    $                           144   100   64    d
   045   37    25    %                           145   101   65    e
   046   38    26    &                           146   102   66    f
   047   39    27    '                           147   103   67    g
   050   40    28    (                           150   104   68    h
   051   41    29    )                           151   105   69    i
   052   42    2A    *                           152   106   6A    j
   053   43    2B    +                           153   107   6B    k
   054   44    2C    ,                           154   108   6C    l
   055   45    2D    -                           155   109   6D    m

   056   46    2E    .                           156   110   6E    n
   057   47    2F    /                           157   111   6F    o
   060   48    30    0                           160   112   70    p
   061   49    31    1                           161   113   71    q
   062   50    32    2                           162   114   72    r
   063   51    33    3                           163   115   73    s
   064   52    34    4                           164   116   74    t
   065   53    35    5                           165   117   75    u
   066   54    36    6                           166   118   76    v
   067   55    37    7                           167   119   77    w
   070   56    38    8                           170   120   78    x
   071   57    39    9                           171   121   79    y
   072   58    3A    :                           172   122   7A    z
   073   59    3B    ;                           173   123   7B    {
   074   60    3C    <                           174   124   7C    |
   075   61    3D    =                           175   125   7D    }
   076   62    3E    >                           176   126   7E    ~
   077   63    3F    ?                           177   127   7F    DEL

看看这个网站 commandlinefu.com

您还可以在Peteris Krumins的博客上查看这四篇文章

49
Moeb

以root用户身份执行最后一个命令:

Sudo !!
46
Alex B

不知道这是否算作“技巧”,但是人们似乎并不了解标准的readline热键。在shell中特别有用:

  • Ctrl+U -剪切当前行
  • Ctrl+Y -粘贴剪切的线 Ctrl+U
  • Ctrl+L -清除屏幕并重画当前行
  • Ctrl+G -获取新行并放弃当前行
42
Michael Mrozek

CTRL+R 在BASH中用于搜索/激活先前执行的命令(〜/ .bash_history的内容)。

这通常非常有帮助。运行此别名将通过端口8000上的HTTP(索引)为PWD提供服务:

alias webserver="python -m SimpleHTTPServer"

而且由于我一直都在运行make,并且输出速度太快并且输入速度太快,这些别名可能是我最常用的(严重):

alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make

也许我最常用的BASH是一个简单的脚本,我称之为上载。我用它将任何类型的内容复制到我的Linode中,并将生成的HTTP URL复制到我的剪贴板中(单击中键)。对于将内容粘贴到IRC中的人非常有用:

scp -r $* [email protected]$Host:public_html && {
    URL="http://$Host/~$user/$(basename $1)"
    echo "$URL"
    xselection -replace PRIMARY "$URL"
}

只是一对我以后可以发表更多文章,必须恢复工作!

36
Aaron Bockover

diff两个命令的输出,而无需手动创建临时文件(bash):

diff <(ls dir1) <(ls dir2)
31
Alex B

很基本,但人们似乎不知道,可以将您返回到上一个目录:

cd -
30
Robert Swisher

括号扩展

括号扩展是一种可以生成任意字符串的机制。

它可以让您替换乏味的行,例如:

mv loong/and/complex/file/name loong/and/complex/file/name.bacukup

实例较短

mv loong/and/complex/file/name{,backup}

其他一些用途

# to display the diff between /etc/rc.conf and /etc/rc.conf.pacsave
diff /etc/rc.conf{,.pacsave}

# to list files in both /usr/share and /usr/local/share
ls /usr/{,local}/share 

算术扩展

算术扩展允许对算术表达式进行求值并替换结果。算术扩展的格式为:

$((expression))

将该表达式视为在双引号内,但括号内的双引号未得到特殊处理。表达式中的所有标记都经过参数扩展,字符串扩展,命令替换和引号删除。算术扩展可以嵌套。

$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5
29
Stefan

这通常在我的启动脚本中(.bashrc,.profile等)

shopt天哪,请查看以下评论​​:

shopt -s cdspell        # try to correct typos in path
shopt -s dotglob        # include dotfiles in path expansion
shopt -s hostcomplete   # try to autocomplete hostnames

用来保存击键的别名:mkdircd到其中:

mkcd () { mkdir -p "[email protected]" && cd "[email protected]"; }

最后但并非最不重要的一点是,我放弃了记住tar语法,因此:

extract () {
    if [ -f $1 ] ; then
        case $1 in
            *.tar.bz2)  tar xjf $1      ;;
            *.tar.gz)   tar xzf $1      ;;
            *.bz2)      bunzip2 $1      ;;
            *.rar)      rar x $1        ;;
            *.gz)       gunzip $1       ;;
            *.tar)      tar xf $1       ;;
            *.tbz2)     tar xjf $1      ;;
            *.tgz)      tar xzf $1      ;;
            *.Zip)      unzip $1        ;;
            *.Z)        uncompress $1   ;;
            *)          echo "'$1' cannot be extracted via extract()" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}
29
Sygo

两项重击功能为我节省了许多按键。

在每次成功刻录CD之后自动执行ls:

function cd {
    builtin cd "[email protected]" && ls
}

上n个级别:

# Usage .. [n]
function .. (){
    local arg=${1:-1};
    local dir=""
    while [ $arg -gt 0 ]; do
        dir="../$dir"
        arg=$(($arg - 1));
    done
    cd $dir #>&/dev/null
}
21
Maik

由于我通常想搜索之前进入命令行(bash中的CTRL-R),因此我的.bashrc中包含以下内容

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

这意味着,如果我键入cd,然后按向上/向下键,则可以看到我已进行cd操作的所有选项。基本上,我将其用于常用的目录。就像“ cd w”一样,我最终要遍历我使用很多的所有工作区。

17
mendicant

节省大量时间的一件事是push/popd命令。这些家伙可让您创建一堆目录并减少大量输入:

/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
17
jacksonh

screen命令 。基本上,它保存了您回来时的命令行会话。它有点像一个终端管理器,就像一个窗口管理器。这样,在一个终端会话中,您可以拥有多个虚拟终端。非常酷.

如果使用screen,则此Shell函数(将其放入.bashrc)非常有用:

function scr {
    if screen -ls | grep -q Main; then
         # reattach to Main: 
         screen -xr Main
    else
         # name session "Main":
         screen -S Main
    fi
   }

输入scr后,它将检查您的主会话是否存在并将附加到该主会话。否则它将创建它。

14
user394

如果您需要在bash中编辑特别长的命令行

^X^E (Ctrl-X Ctrl-E) 

将在编辑器($ EDITOR)中将其打开。

在zsh中,可以通过将其添加到.zshrc中来获得相同的行为:

autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line 
13
redacted

如果您是快速打字员,这些将派上用场:

alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'

此宏可帮助您计算一列输出的总数:文件大小,字节,数据包,您所要做的就是指定要添加的列:

total ()
{
        if [ x$1 = x ]; then set `echo 1`; fi
        awk "{total += \$$1} END {print total}"
}

例如,您像这样使用它,不带任何参数,它将添加第一列的总数:

du | total

如果提供该参数,它将对该列求和,例如,这将为您提供/ tmp中所有C#文件使用的字节总数:

ls -l /tmp/*cs | total 5

有时由于不小心查看了二进制文件(例如,cat/bin/ls)而导致控制台混乱,您可以使用以下Shell函数恢复终端:

restaura ()
{
    Perl -e 'print "\e)B";'
}

我喜欢我的ls使用字符来区分文件的类别,并隐藏由编辑器生成的备份文件(备份文件以〜字符结尾):

alias ls='ls -FB'
12
miguel.de.icaza
alias s='Sudo'
alias r='rake' # i'm a Ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.

当我忘记s时,我的最爱之一:

$ s !! # last command with super user priviledges
11
Eimantas

如果命令接受标准输入,则可以使用<filename从文件中读取输入。它可以出现在命令中的任何位置,因此这些行是等效的:

cat filename
cat <filename
<filename cat

这对于grep尤其有用,因为它允许您将表达式放置在行的末尾,因此您可以通过按以下命令快速修改grep命令 Up,而无需向左滚动即可跳过文件名:

<filename grep 'expression'
10
Michael Mrozek

您可以使用CDPATH来建立等效于PATH的目录;如果您尝试cd foo并且当前目录中没有foo,Shell会检查CDPATH中的每个目录,寻找其中的foo,然后切换到第一个目录发现:

export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
9
Michael Mrozek
vi `which scriptname`

因为当您不知道某物在哪里居住时,您也不在乎。

9
Matt Simmons

与号。它将命令放在后台,因此您可以继续输入。

$> Sudo updatedb &

一起工作,一段时间后,您会看到:

[1] 17403

您的过程完成了!非常适合不需要等待它们终止的事情。

9
user394

制表符完成。如果您必须输入每个路径的所有字符,将有多糟糕?

8
user394

我的.bashrc中有这个

#shortcut for CTRL+C and CTRL+V
alias c-c='xclip -sel clip'
alias c-v='xclip -o -sel clip'

function find-all() {
    python -c "import re
import sys
for i in re.findall('$1', sys.stdin.read()):
    if type(i) == type(''):
        print i
    else:
        print i[0]"
}

当我在剪贴板中有html源代码并想找到我使用的所有链接时

c-v | find-all 'href="([^"]*)"' | c-c

我在剪贴板中有所有网址

我也有这个功能

function lsq(){
    ls -lh [email protected] | tr -s ' ' | cut -d' ' -f5,8
}

显示大小(可读)和文件名。

alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'

该别名用于显示温度

function separate() {
    python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}

使用此函数,我可以计算乘积或参数总和。

alias sum='separate + | bc'
alias product='separate * | bc'

function split-join() {
    python -c "import sys,re; print '$2'.join(re.split('$1', sys.stdin.read().strip()))";
}

这是有用的功能,它分割由正则表达式分隔的标准输入,然后合并结果。

function factorial() {
    seq -s* $1 | bc
}

阶乘函数

function wiki() { Dig +short txt $1.wp.dg.cx; }

此功能通过DNS显示Wiki文本

我也有三种颜色功能

function blue() {
    echo -e "\x1b[34m\x1b[1m"[email protected]"\x1b[0m";
}

function green() {
    echo -e "\x1b[32m\x1b[1m"[email protected]"\x1b[0m";
}

function red() {
    echo -e "\x1b[31m\x1b[1m"[email protected]"\x1b[0m";
}

function md5check() {
    test `md5sum $2 | cut -d' ' -f1` = "$1" && green [OK] || red [FAIL]
}

此功能验证文件md5哈希。

这将显示给定代码的错误消息

function strerror() { python -c "import os; print os.strerror($1)"; }

您可以使用以下命令打印所有消息

alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'
7
jcubic

上次安装的设备数量:

mount /media/whatever
...
u!mo

!mo扩展到以mo开头的最后一个命令(至少在bash中)。有时候,中间是mv,所以u!m不会经常工作。

7
Roberto Bonvallet

ZSH的另一个有用技巧:

将命令的输出视为文件:

emacs =(hg cat -r 100 somefile)

这将在emacs中打开Mercurial跟踪文件的旧版本,以进行语法突出显示。没有这个,我将不得不与hg reverthg archive,或明确发送hg cat输出到一个临时文件。

当然,这适用于打开文件的任何程序以及可打印到标准输出的任何程序。

6
Matthew Flaschen

ZSH特有的功能是后缀别名,可以通过给alias-s标志:

alias -s ext=program

如果给定扩展名具有后缀别名,则可以直接执行具有该扩展名的文件,并且ZSH将启动给定程序并将文件名作为参数传递。因此,如果上述别名有效,则这些行是等效的:

/path/to/foo.ext
program /path/to/foo.ext
5
Michael Mrozek

我一直以来最喜欢的ZSH功能之一是命名目录。您可以导出具有给定名称的变量,其值指向某个路径:

export foo=/usr/bin

现在您可以使用~foo在命令中引用/usr/bin

cd ~foo
~foo/ls
cat ~foo/filename
5
Michael Mrozek
  • 什么都不做的命令:

    while :; do :; done
    
  • 括号扩展与for循环结合使用:

    for c in {1..3}; do :; done
    
  • !运算符和短路运算符||&&

    [ -d /tmp/dir ] || mkdir /tmp/dir
    
    if ! ping 34.41.34.1; then :; fi
    
  • 使用子外壳而不是pop/Push(在脚本中方便使用)

    ~$ ( cd /tmp; echo $PWD )
    /tmp
    ~$
    
  • 种类what-is命令type

    ~$ type type
    type is a Shell builtin
    ~$ type ls
    ls is aliased to `ls --color=auto'
    ~$ f(){ :; }
    ~$ type f
    f is a function
    f () 
    { 
         :
    
    }
    
  • 也很好:这里的字符串

    ~$ cat <<<"here $PWD"
    here /home/yourname
    ~$
    
  • 和我最喜欢的:在命令列表上重定向

    { w; ps; ls /tmp; } 2>/dev/null |less
    
4
artistoex

看到这个问题

当您运行ps ax | grep string

[[email protected] ~]$ ps ax | grep 'openbox'
 3363 ?        Ss     0:00 /usr/bin/openbox
 3382 ?        Ss     0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
 3386 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3388 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3389 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3390 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 5100 pts/0    S+     0:00 grep openbox

包含grep的最后一行有点anoying

您可以通过运行ps ax | grep '[s]tring'

[[email protected] ~]$ ps ax | grep '[o]penbox'
 3363 ?        Ss     0:00 /usr/bin/openbox
 3382 ?        Ss     0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
 3386 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3388 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3389 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3390 ?        S      0:00 /bin/sh /usr/bin/openbox-session

update:或只运行pgrep string

4
Stefan

有时bash设置会使rm别名为rm -i,因此需要确认每个要删除的文件。当我偶尔使用这种帐户工作时,我会使用\rm来检索rm的原始行为,而无需更改用户配置。

3
mouviciel

我喜欢把尽可能多的东西塞进我的PS1中。一些有用的事情要记住:

\e[s\e[u分别保存和取消保存光标位置。我用它在屏幕顶部创建了一个“信息栏”,该栏长了几行,可以容纳更多东西。例:

PS1='\[\e[s\e[7m\e[1;1H\]\w\n\t        \j / \! / \#\[\e[u\e[0m\e[33;1m\][\[email protected]\h \[\e[34m\]\W]\[\e[0m\]\$ '

结合 alias clear='echo -e "\e[2J\n"'。试试看!

另外,Prompt_COMMAND变量定义每次在PS1之前执行的命令。

另一个是bg命令。如果您忘记输入&在命令末尾,只需按 ^Z 并输入bg,它会在后台运行。

3
Lucas Jones

在提示中显示Git分支和状态

 export GIT_PS1_SHOWDIRTYSTATE = true 
 
 if [“ $ color_Prompt” = yes];然后
 PS1 ='$ {debian_chroot:+($ debian_chroot)}\[\ 033 [01; 32m \]\u @\h\[\ 033 [00m \]:\ [\ 033 [01; 34m \]\w\[\ 033 [00m \] $(__ git_ps1“#%s”)\ $'
 else 
 PS1 ='$ {debian_chroot:+($ debian_chroot)} \\ u @\h:\ w $(__ git_ps1“#%s”)\ $'
 fi 
3
Bauna

我最喜欢的命令是“查找”,我在各处使用它...示例:

find . -name "*.log" -exec ls -l {} \; | grep "$(find . -name "*.log" -exec ls -l {} \;| nawk '{print $5}' | sort -n | tail )"

仅以ls -l(长)格式显示最重的文件。

然后,如果您需要具有0640权限的代码,只需搜索:

find . \( \( ! -perm 0640 \) -a \( -name "*.cpp" -o -name "*.h" \) \) -ls | nawk '{print $3"\t"$11}'

或替换:

find . \( -name "*.cpp" -o -name "*.h" \) | xargs chmod 640

然后,您需要一个符号,不知道它在哪里吗?

(
  for myObj in $(find . -name "*.o"); do
    gotSym=$(dump -Xany -t $myObj | grep .MY_SYMBOL)
    if ! test "x$gotSym" = "x"
    then
      echo "OBJECT [$myObj] ========================"
      echo "$gotSym"
      echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"^
    fi
  done
)

比XFILE更新的文件?

find . -newer XFILE -type f

是的,“找到” rulez!

3
D4RIO

在输入长命令之前经常这样做,在完成之前,您已经意识到它不会立即生效,因为您需要先执行其他操作(例如,输入git commit -m "long commit message here"),您可以按^A^K转到该行的开头并将其杀死(保存到缓冲区中),然后运行命令修复问题,最后^Y粘贴终止的命令,然后继续。节省大量的重新键入。当然,所有这一切都在readline处于Emacs模式下时进行。

另一个节省时间的时间:mkdir -p some/nested/dirs/to/be/created会在路径中创建所有缺少的目录。

3
alex

显示当前处理树的尼斯ASCII艺术,并突出显示最耗费CPU的过程。

while true; do 
  clear; 
  pstree $( ps -eo pid --sort %cpu | tail -n 1 ); 
  sleep 1;
done

Ctrl + C杀死它

3
Stefan

查看命令输出每n秒更新一次

watch -n 60 df -h (displays df -h every 60 seconds)

显示有关网络设备wlan0的统计信息

ip -s link ls wlan0

显示设备eth1的路由表

ip route ls dev eth1

显示所有通过路由器到达主机的路由器的统计信息

mtr --interval 5 HOSTNAME

在网络上查询反向DNS记录以获取主机名

nmap -sL NETWORK

对网站进行基准测试

ab

从网页获取所有链接

lynx -dump http://www.yahoo.com | awk '/http/{print $2}'

显示默认网关

netstat -rn | awk '/UG/{print $2}'

将标准错误写入文件

foo 2> errors.txt

将stderr重定向到stdout

foo 2>&1

将stderr和stdout都重定向到同一文件。

foo > file.txt 2>&1
2
boardstretcher
# change chmod to file dowloaded --> $_

wget -c http://link/to/file -O /path/to/save/namefile && chmod 0755 $_

# extract tar.bz2 or tar.gz whit less work
# this avoids having to unpack and then move the files to another location, in this case have # already extracted in the desired location

tar jxvf file.tar.bz2 -C /pat/to/extract

# calculator with bc - in bashrc
calc(){ echo "scale=2;[email protected]" | bc;}

# set magic-space in bashrc
bind Space:magic-space                 # !pin<space>  expand last cmd pin...

# alias to open last edited file in vim
alias lvim="vim -c \"normal '0\""

# alias to show your path set
alias path='echo -e ${PATH//:/\\n}'
2
SergioAraujo

替换先前命令的一部分:

^搜索^更换

$ echo a b c d
a b c d
$ ^b c^X
echo a X d
a X d

非常适合错别字:

$ mkae
-bash: mkae: command not found
$ ^ka^ak
make
[...]
2
user6362

汇总目录大小,并以人为大小递减

du -hs */ | sort -hr

例如.

10.2G   foo/
4M      bar/
2
Eric Fortis

使用zsh进行双星扩展(它递归降级到目录树,而不仅仅是一个层次,类似于$(find ! -type d)

grep string **/*.cc
2
Andre Holzner

我最喜欢的功能是没有颜色! =)

TERM = xterm-mono或TERM = linux-m取决于操作系统...

我真的很喜欢黑白IRSSI,mc和其他“文本用户界面”工具

2
holms

ZSH具有全局别名。它将别名扩展到命令行中的任何位置。我发现这对于主机名很有用:

例如。:

alias -g sub='sub.domain.tld'

然后,我可以例如:

sftp sub
ssh sub

等等.

2
Matthew Flaschen

并不是真正的一线客,但我认为这很有用。将许多文件转换为大写,例如file_to_upper *php *c。有许多类似的情况,例如转换为较低的文件,通过后缀/前缀重命名所有文件等。

file_to_upper ()
{
    for file in "[email protected]"
    do
        if [ ! -f "$file" ]; then
            echo "File $file does not exist";
        else
            mv -f "$file" "`echo "$file" | tr '[a-z]' '[A-Z]'`"
        fi
    done

    return 0
}
1
sakisk

获取当前目录中带有最新时间戳的文件名:

latest () { ls -lrt | tail -1 | awk '{print $NF}' }

1
Moses Xu
function calc() { echo $* p | dc }

dc是RPN计算器;此函数使我可以将表达式键入为命令参数:

$ calc 5 3 +
8
1
André Paramés

在主机名为粗体的地方显示提示。我尝试了一段时间的颜色提示,但是根据背景的不同,颜色有时看起来不好。粗体为我处理浅色背景,深色背景,蓝色背景等。

这是在我的.bashrc中:

    bold=$(tput bold)
    reset=$(tput sgr0)
    export PS1="\[email protected]\[$bold\]\h\[$reset\]:\w \$ "
1
Stefan Lasiewski

在Windows和Unix/Linux之间不断切换时,我发现以下有用的东西:

alias dir="ls -l"
alias copy="cp"
alias del="rm"
1
artdanil

这是针对zsh,而不是bash,fyi(如果您未使用过,则不会后悔尝试)。这对于快速键入用于scp传输的长路径非常有用。就像用来完成或列出可用的文件名/目录一样。

scp [email protected]:/home/webdev/domains/example.com/http.public/long<tab>

将完成/home/webdev/domains/example.com/http.public/longdirname

我不擅长示例,但这应该可以给您带来启发。尝试一下,它确实可以使您省去打字的麻烦。

# SSH Completion
zstyle ':completion:*:scp:*' tag-order \
   files users 'hosts:-Host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:scp:*' group-order \
   files all-files users hosts-domain hosts-Host hosts-ipaddr
zstyle ':completion:*:ssh:*' tag-order \
   users 'hosts:-Host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:ssh:*' group-order \
   hosts-domain hosts-Host users hosts-ipaddr
zstyle '*' single-ignored show
1
pho3nixf1re

ReTTY ,使您可以将正在运行的程序从一个终端移到另一终端。这样,如果您的ncurses程序在屏幕,tmux或ssh之外运行,则可以通过在要使用该程序的终端内运行ReTTY,将其附加到ssh会话,网络屏幕或tmux会话。换句话说,它与screen和tmux相似,但不同之处在于(a)一次只能运行一个程序,并且(b)可以在之后运行,您将启动子进程。

1
mmirate

我最喜欢的是使用python)命令制作临时http服务器:

python -m SimpleHTTPServer

并通过lan通过以下方式从本机访问文件:

http://192.168.1.70:80

另一个是下载解压缩后的tar文件,如下所示:

wget -qO- http://192.168.1.70:8000/test.bz2 |焦油xjvf-

这里的链接可以是www上的任何链接,bz2可以是gz,tgz或bz2本身。

1
SHW

自动备份您的奇特的点文件

模块化.bashrc-> .bashrc.d

mkdir -p ~/.bashrc.d
cat<<'EOF' >> ~/.bashrc
echo ""
echo -n ".bashrc.d warming up: "
for script in ~/.bashrc.d/* ; do
  if [ -x "$script" ] ; then
    echo -n "${script##*/} "
    . "$script"
  fi
done
echo ""
echo ""
echo "  All systems are go."
echo ""
EOF

Rm更安全,与Linux和Mac OS X兼容

rm() {
  local src
  local final_status=0

  for src in "[email protected]"; do
    # Process only non command-line arguments.
    if [[ "$src" != -* ]]; then
      local trash="$HOME/.Trash"
      if [ ! -e "$src" ]; then
        echo "Safer rm: $src: No such file or directory."
        final_status=1
      fi
      # Create the trash directory if needed.
      if [ ! -d "$trash" ]; then
        # Assume Mac trash, but it'll work on *nix too.
        mkdir -p "$trash"
        if [ ! -d "$trash" ]; then
          echo "Safer rm: Unable to create trash directory $trash"
          echo ""
          echo "   Nothing moved or deleted.  Consider carefully:"
          echo ""
          echo "      /bin/rm -rf $src"
          return 1
        fi
      fi
      local dest="$trash/${src##*/}"

      # Find a filename combination which does not already exist.
      if [ -e "$dest" ]; then
        # Try appending ISO datetime.
        dest="$dest.$(date +%Y-%m-%dT%H-%M-%S)"
        if [ -e "$dest" ]; then
          local n=1
          # Try increasing monotony.
          while [ -e "$dest.$n" ]; do
            n = $[n + 1]
          done
          dest="$dest.$n"
        fi
      fi
      echo -n "Safer rm: Trashing $src to $dest ..."
      /bin/mv "$src" "$dest"
      echo " done."
      echo ""
      echo "  To restore:  /bin/mv     '$dest' '$src'"
      echo ""
      echo "  To purge:  /bin/rm -rf '$dest'"
      echo ""
      echo ""
    fi
  done
  return $final_status
}

超级热“ CD”起来的动作

# Don't ask why I need 15 levels of cd ..

alias ..='cd ..'
alias .2='cd ../..'
alias ...='.2'
alias .3='cd ../../..'
alias .4='cd ../../../..'
alias .5='cd ../../../../..'
alias .6='cd ../../../../../..'
alias .7='cd ../../../../../../..'
alias .8='cd ../../../../../../../..'
alias .9='cd ../../../../../../../../..'
alias .10='cd ../../../../../../../../../..'
alias .11='cd ../../../../../../../../../../..'
alias .12='cd ../../../../../../../../../../../..'
alias .13='cd ../../../../../../../../../../../../..'
alias .14='cd ../../../../../../../../../../../../../..'
alias .15='cd ../../../../../../../../../../../../../../..'

Readline是您真正的上帝。

bind -p | egrep -v '(not|self)' # No existential jokes included.

终端字体

看了无数种字体后,我使用14 pt MonacoAnti-aliasediTerm2

在Mac上(应用程序):尝试使用提供按键绑定的应用程序。

关键提示 (tm)(r)(c)($)只需按住即可提供几乎任何正在运行的应用程序的上下文 command

1
dhchdhd

zsh的自动推送功能:

setopt autopushd

以及:

alias dirs='dirs -v'

这样一来,我随时可以输入dirs并得到我去过的地方的历史记录:

0   /var/log
1   /tmp
2   /usr/local/bin
3   ~

然后我可以cd回到例如/usr/local/bin键入:

cd ~2
1
Andre Holzner

以下“技巧”在技术上都不具有挑战性或令人印象深刻,但它们会对其他人产生一定的影响。如果我们不能利用工作来使我们的生活更幸福,那么我们应该重新考虑一些事情。

我喜欢alias。我最喜欢的技巧是在我的gf丢失时在其计算机上编辑〜/ .bash_aliases并添加如下行:

alias gfname='echo Myname is thinking of you'

或其他浪漫语录。

我特别喜欢的另一个“技巧”是:

#!/bin/bash
xaa=123`
for ((a=1; a <= xaa; a++))
do
#sleep 1;
mail -s "Happy Birthday $a" [email protected] < mails.txt
done
exit 0`

其中123是我希望向其生日快乐的人的邮箱,而mails.txt包含我想写为电子邮件正文的消息。睡觉1;有时有必要,因为fork()受到限制。您也可以使用命令行参数$1等...

1
Dimitris Leventeas

我的主文件夹中的文件夹名为Document,Downloads,Temp等,首字母大写。当我在终端上工作时,切换到目录时按第一个键很烦。只需在终端中键入以下内容,bash就会为您自动纠正这种情况。

shopt -s nocaseglob
1
tsudot

采用 pgrep foo 代替 ps aux | grep foo如果要查找正在运行的foo实例及其pid的数量,请执行以下操作:

例如代替 ps aux | grep firefox, 采用 pgrep firefox

1
user1888

我不能没有

set editing-mode vi
set blink-matching-paren on

在我的〜/ .inputrc中。

在每个启用了readline的应用程序中激活它们。只有在命令行管理程序中激活vi命令行编辑才能通过以下方式起作用:

set -o vi

因此,按ESC或CTRL + [将获得众所周知的vi命令模式。而且您可以在任何地方使用强大的vi命令!

1
maxschlepzig

有一个不错的网站,网址为: http://www.commandlinefu.com/commands/browse

1
Andrew Stern

我个人最喜欢的是

find . -name <i>filename</i> | xargs grep -in '<i>pattern to search for</i>'

上面的命令所做的是找到一个名为x的文件,然后在该文件中搜索您要查找的任何模式。如果您要在子目录中某个文件中寻找特定的代码位,这将非常有用。

0
Mark D
find path expr -exec ls -ld {} \;

查看所有权,权限,大小(如果有文件)以及“查找”表达式返回的其他特征的简便方法。

0
TCKMusing

在开始执行15分钟的命令后,我经常注意到,我本来想使用&&向命令行添加其他内容。为了避免打乱已经在运行的工作,我倾向于使用at将第二个工作排队,从而使我有更长的时间不需要看终端。

通常,at在给定的时间将作业排队等待执行:

$ at 14:30
> myscript
> anotherscript
> <CTRL-D>

可以使用atq查看队列的条目,并可以使用atrm删除队列的条目。

Bash Prompt自定义提示的另一个补充:我喜欢反转Prompt,因为它提供了良好的视觉提示,命令输出在长终端列表中开始和结束。这对于明亮和深色背景都适用。

export PS1="\[\e[7m\][\[email protected]\h \w]\[\e[0m\]$ "
0
jstarek

同步;同步;同步;重启

有时候真的很有用。小心 !

0
Tony Lambert

我发现了解bash击键可以提高脱壳效率,并且很多来自emacs直接说明了它们的用法(即meta-XXXctrl-XXX命令的老大哥版本)。

“元”键通常是“ alt”键,但也可以是“ esc”键。例如meta-falt-f均可获得esc f

为了使alt键映射起作用,您可能必须在控制台选项中取消设置“菜单访问键”或其等效项。基本上,如果您按alt-f并显示文件菜单提示,请关闭alt键访问菜单。

ctrl-a / ctrl-e : move to start / end of line基本知识

ctrl-f, meta-f : forward char/Word按alt -f可使您前进“ 1 Word”,这在命令行上几乎是命令或自变量

ctrl-b, meta-b : backwards char/Word与alt-f相同,但后退以通过命令行后退

ctrl-d, meta-d : delete char/Word按alt-d将删除光标下的当前Word(至此)。然后按住Delete键30秒钟快得多。当您在某件事中间完成制表符并且想将删除转发到Word的末尾时很有用。

ctrl-k : kill line删除到行尾

ctrl-u : undo例如键入密码,您就会知道某个地方输入错了,而不是按20次退格键,只需按ctrl-u。同时清除当前命令行。

meta-# : insert comment如果要先执行其他操作,则可以在运行之前保留要建立的命令行作为注释,这非常有用。它将进入您的命令历史记录,但不会运行。

ctrl-r : reverse search向后搜索您的Shell历史记录(对于下一场比赛,重复ctrl-r)

ctrl-g : abort如果您位于ctrl-r的中间,并且只想回到输入的位置,只需使用ctrl-g中止搜索

meta-space / ctrl-x ctrl-x : set mark and jump to mark如果需​​要快速跳到命令行中的某个位置,请先设置标记,然后使用ctrl-x ctrl-x跳回到该位置。请注意,您可能必须使用esc-space来获得标记集,因为alt-space通常必须调低控制台菜单。

ctrl-] <char> : quick jump to <char>向前跳到命令行上ctrl-]之后键入的字符。哥哥Meta-ctrl-] <char>向后跳。

0
markf

我的最爱在下面。我经常使用它们中的大多数

df -k(检查文件系统)杀死或杀死-9(杀死进程)set -o vi(将命令行设置为vi)topas(性能工具)安装/卸载

哦,是的,我怎么忘了>(将输出重定向到文件)ls> /tmp/tmp.txt

还有更多,但有些不在我的脑海中。

0
vegasbrianc