web-dev-qa-db-ja.com

あなたの好きなコマンドライン機能やトリックは何ですか?

Unix/Linuxのコマンドライン機能とコツを共有します。可能であれば、シェルやディストリビューションにとらわれないようにしてください。エイリアス、ワンライナー、キーボードショートカット、小さなシェルスクリプトなどに興味があります。

93
cmcginty

これは this answer で言及されている!!トリックで多少拡張されます。実際、忘れられがちな履歴関連のコマンドがたくさんあります(人は刺しがちです) Up 代わりに、100回入力したコマンドを探します)。

  • historyコマンドは、最近実行されたコマンドのリストを左側にイベント指定子とともに表示します
  • !Nは、イベント指定子Nに関連付けられたコマンドを置き換えます
  • !-NNを置き換えます 番目 最新のコマンド。例えば!-1は最新のコマンド、!-2は2番目に新しいコマンドなどを置き換えます。
  • 他の回答で述べたように、!!!-1の省略形で、最後のコマンドをすばやく置き換えます
  • !stringは、stringで始まる最新のコマンドを置き換えます
  • !?string?は、stringを含む最新のコマンドを置き換えます

単語指定子を!履歴コマンドに追加して、結果を変更できます。コロンは、イベントとワード指定子を区切ります。 !!:0。イベント指定子!!は、Word指定子を使用する場合は!に短縮できるため、!!:0!:0と同等です。

  • !:0は、実行されたコマンドを取得します
  • !:1は最初の引数を取得します(そして!:2は2番目の引数などを取得します)
  • !:2-3は2番目と3番目の引数を取得します
  • !:^は、最初の引数を取得する別の方法です。 !:$が最後になります
  • !:*はすべての引数を取得します(ただし、コマンドはではありませんコマンド)

修飾子を!履歴コマンドに追加することもでき、それぞれの前にコロンを付けます。任意の数を積み重ねることができます(例:!:t:r:p)。

  • h-ベースファイル名に合わせます
  • t-基本ファイル名のみ
  • r-ファイル名拡張子に合わせます
  • e-ファイル名拡張子のみ
  • s/search/replacement-最初に出現するsearchreplacementで置き換えます
  • 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のブログで、これら4つの記事をご覧いただけます。

49
Moeb

Rootとして最後のコマンドを実行します。

Sudo !!
46
Alex B

これが「トリック」として数えられるかどうかはわかりませんが、人々は標準のreadlineホットキーに気づいていないようです。シェルで特に使用するもの:

  • Ctrl+U -現在の行を切り取ります
  • Ctrl+Y -カットした線を貼り付けます Ctrl+U
  • Ctrl+L -画面をクリアして現在の行を再描画します
  • Ctrl+G -新しい行を取得し、現在の行を放棄する
42
Michael Mrozek

CTRL+R 以前に実行されたコマンド(〜/ .bash_historyの内容)を検索/アクティブ化するためのBASH。

これはしばしば非常に役立ちます。このエイリアスを実行すると、ポート8000​​でHTTP(インデックス付き)を介してPWDが提供されます。

alias webserver="python -m SimpleHTTPServer"

そして、私は常にmakeを実行し、spaz outとtypeが速すぎるため、これらのエイリアスはおそらく(真剣に)最もよく使用されています。

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

そして、おそらく私の最も頻繁に使用されるBASHは、私がアップロードと呼ぶ単純なスクリプトです。私はそれを使用してあらゆる種類のコンテンツをLinodeに書き込み、結果のHTTP URLをクリップボードにコピーします(中央クリック)。 IRCのユーザーにコンテンツを貼り付ける場合に非常に便利です。

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

ほんのカップル。後でもっと投稿できますが、仕事に戻る必要があります!

36
Aaron Bockover

diff一時ファイルを手動で作成せずに2つのコマンドを出力(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

キーストロークを保存するエイリアス:mkdirおよびcdその中に:

mkcd () { mkdir -p "$@" && cd "$@"; }

そして最後に、私は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

多くのキーストロークを節約する2つのbash関数。

Cdが成功するたびに自動的にlsを実行します。

function cd {
    builtin cd "$@" && 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

多くの時間を節約できる1つのことは、pushd/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を使用する場合、このシェル関数(.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など)を表示したためにコンソールがめちゃくちゃになる場合があります。このシェル関数を使用してターミナルを復元できます。

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を忘れたときのお気に入りの1つ:

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

コマンドがstdin入力を受け取る場合、<filenameを使用してファイルから入力を読み取ることができます。これはコマンドのどこにでも表示できるため、これらの行は同等です。

cat filename
cat <filename
<filename cat

これは、式を行の最後に配置できるので、grepで特に役立ちます。 Up、ファイル名を通過するために左にスクロールする必要はありません:

<filename grep 'expression'
10
Michael Mrozek

CDPATHを使用して、PATHに相当するディレクトリを設定できます。あなたがしようとした場合cd fooで、現在のディレクトリにfooがない場合、シェルは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

そして、私はすべてのURLをクリップボードに入れています

私にもこの機能があります

function lsq(){
    ls -lh $@ | 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テキストを表示します

私も3つの色の機能があります

function blue() {
    echo -e "\x1b[34m\x1b[1m"$@"\x1b[0m";
}

function green() {
    echo -e "\x1b[32m\x1b[1m"$@"\x1b[0m";
}

function red() {
    echo -e "\x1b[31m\x1b[1m"$@"\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

別の便利なZSHトリック:

コマンドの出力をファイルとして扱います。

emacs =(hg cat -r 100 somefile)

これにより、古いバージョンのMercurial追跡ファイルがemacsで開き、構文が強調表示されます。それがなければ、hg reverthg archiveをいじったり、一時ファイルにhg cat出力を明示的に送信したりする必要があります。

もちろん、これはファイルを開くすべてのプログラム、および標準出力に出力するすべてのプログラムで機能します。

6

ZSH固有の機能はサフィックスエイリアスで、alias-s 国旗:

alias -s ext=program

特定の拡張子にサフィックスエイリアスがある場合、その拡張子のファイルを直接実行できます。ZSHは特定のプログラムを起動し、ファイル名を引数として渡します。したがって、上記のエイリアスが有効な場合、これらの行は同等です。

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

私がずっと好きなZSH機能の1つは、名前付きディレクトリです。特定のパスを指す値を使用して、特定の名前の変数をエクスポートできます。

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 () 
    { 
         :
    
    }
    
  • また、とてもいいです:here-strings

    ~$ cat <<<"here $PWD"
    here /home/yourname
    ~$
    
  • と私のお気に入り:コマンドのリストのリダイレクト

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

これを見てください質問

ps ax | grep stringを実行すると:

[steve@sage-Arch ~]$ 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'を実行すると、この問題を解消できます。

[steve@sage-Arch ~]$ 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の設定でrmrm -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\][\u@\h \[\e[34m\]\W]\[\e[0m\]\$ '

alias clear='echo -e "\e[2J\n"'と組み合わせる。やってみて!

また、Prompt_COMMAND変数は、PS1の前に毎回実行するコマンドを定義します。

もう1つはbgコマンドです。コマンドの最後に&を付け忘れた場合は、 ^Z bgと入力すると、バックグラウンドで実行されます。

3
Lucas Jones

プロンプトにGitブランチとステータスを表示する

エクスポート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

うん、 "検索"ルール!

3
D4RIO

長いコマンドを入力した後、それを完了する前に、何か他のことを実行する必要があるために、コマンドがすぐに機能しないことに気づいたことがあります(例:git commit -m "long commit message here")、^A^K行の先頭に移動して(バッファーに保存して)行を終了し、次にコマンドを実行して修正し、最後に^Yキルしたコマンドを貼り付けて続行します。再入力の手間を大幅に省きます。もちろん、これはすべて、readlineがEmacsモードの場合です。

別の時間の節約:mkdir -p some/nested/dirs/to/be/created不足している場合、パス内のすべてのディレクトリを作成します。

3
alex

現在のプロセスツリーのニースアスキーアートを表示します。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

Webページからすべてのリンクを取得する

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;$@" | 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

前のコマンドの一部を置き換えます。

^探す^replace

$ 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を使用した二重スター展開(これは、1つのレベルだけでなく、$(find ! -type d)に似たディレクトリツリーを再帰的に下降します。

grep string **/*.cc
2
Andre Holzner

私のお気に入りの機能は色なしです! =)

TERM = xterm-monoまたはTERM = linux-mはOSに依存します...

私は白黒のIRSSI、mc、その他の「テキストユーザーインターフェイス」ツールが本当に好きです

2
holms

ZSHにはグローバルエイリアスがあります。コマンドラインの任意の場所でエイリアスを展開します。これはホスト名に役立つことがわかりました:

例えば。:

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

その後、私は行うことができます:

sftp sub
ssh sub

等.

2

実はワンライナーではありませんが、便利だと思います。多くのファイルを大文字に変換します(例:file_to_upper *php *c。下位への変換、サフィックス/プレフィックスによるすべてのファイルの名前変更など、多くの類似したケースがあります。

file_to_upper ()
{
    for file in "$@"
    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

ホスト名がboldであるプロンプトを表示します。しばらくカラープロンプトを試しましたが、背景によっては色が悪く見える場合がありました。太字は、明るい背景、暗い背景、青い背景などに適しています。

これは私の.bashrcにあります:

    bold=$(tput bold)
    reset=$(tput sgr0)
    export PS1="\u@\[$bold\]\h\[$reset\]:\w \$ "
1

WindowsとUnix/Linuxを絶えず切り替えるときに、次のことが役に立ちました。

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

これは、bshやfyiではなくzsh用です(これを使用していなければ、後悔することはありません)。これは、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 。これにより、実行中のプログラムをある端末から別の端末に移動できます。このようにして、screen、tmux、またはsshの外でncursesプログラムを実行している場合、問題のプログラムを使用するターミナル内でReTTYを実行することにより、sshセッションまたはネットワークスクリーンまたはtmuxセッションに接続できます。つまり、screenとtmuxに似ていますが、(a)一度に実行できるプログラムは1つだけであり、(b)後に実行できるという例外があります子プロセスを開始します。

1
mmirate

私のお気に入りは、pythonコマンドを使用して一時的なhttpサーバーを作成することです。

python -m SimpleHTTPServer

このマシンからLAN経由で次のようにファイルにアクセスします。

http://192.168.1.70:80

もう1つは、tarファイルを抽出形式で次のようにダウンロードすることです。

wget -qO- http://192.168.1.70:8000/test.bz2 | tar 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

LinuxおよびMac OS Xと互換性のあるより安全なrm

rm() {
  local src
  local final_status=0

  for src in "$@"; 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 ../../../../../../../../../../../../../../..'

リードラインはあなたの真の神です。

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

端末フォント

膨大な数のフォントを見た後、私は14 pt MonacoAnti-aliasediTerm2

Mac(アプリ)の場合:キーバインディングを提供するこのアプリを試してください。

KeyCue (tm)(r)(c)($)を押すだけで、実行中のほぼすべてのアプリのコンテキストが得られます command

1
dhchdhd

zshの自動pushd機能:

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

ホームフォルダーにDocument、Downloads、Tempなどの名前が付いたフォルダーがあり、最初の文字は大文字です。ターミナルで作業しているとき、ディレクトリにcdしているときに最初のキーをシフトシフトするのは面倒です。ターミナルで次のように入力するだけで、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を使用して2番目のジョブをキューに入れる傾向があり、ターミナルを監視する必要がないため、時間を長くすることができます。

通常、atは、指定された時間に実行するジョブをキューに入れます。

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

キューへのエントリはatqで表示でき、atrmで削除できます。

Bashプロンプトのカスタマイズに関するヒントへのもう1つの追加:プロンプトを逆にしたいと思います。これにより、長いターミナルリストでコマンド出力が開始および終了する場所の視覚的な手掛かりが得られます。これは、明るい背景と暗い背景の両方に適しています。

export PS1="\[\e[7m\][\u@\h \w]\[\e[0m\]$ "
0
jstarek

同期;同期;同期;再起動

時々本当に役立つことがあります。注意してください !

0
Tony Lambert

私はbashのキーストロークを理解することでより効率的なシェリングにつながり、それらの多くがemacsから直接のものであることを明らかにします(つまり、meta-XXXは通常ctrl-XXXコマンドの兄弟バージョンです)。

「メタ」キーは通常「alt」キーですが、「esc」キーにすることもできます。例えばmeta-fは、alt-fまたはesc fで取得できます。

Altキーマッピングを機能させるには、コンソールオプションで「メニューアクセスキー」または同等の設定を解除する必要がある場合があります。基本的に、alt-fを押してファイルメニューのプロンプトを表示する場合は、alt-keyアクセスメニューをオフにします。

なしでは実現できないctrl-a / ctrl-e : move to start / end of lineの基本

ctrl-f, meta-f : forward char/Word alt-fを押すと、「1ワード」先にジャンプします。これは、コマンドラインではほとんどコマンドまたは引数です

ctrl-b, meta-b : backwards char/Wordはalt-fと同じですが、コマンドラインを逆方向にジャンプする逆方向

ctrl-d, meta-d : delete char/Word alt-dを押すと、カーソルの下にある現在のWordが(末尾まで)削除されます。削除を30秒間押し続けると、はるかに速くなります。途中でタブ補完を行っているときに、削除をWordの最後に転送したい場合に便利です。

ctrl-k : kill lineは行末まで削除します

ctrl-u : undo例:パスワードを入力すると、バックスペースを20回押す代わりに、ctrl-uを押すだけで、どこかで間違っていることがわかります。また、現在のコマンドラインをクリアします。

meta-# : insert commentこれは、他に何かする必要がある場合に、実行中のコマンドラインを実行する前にコメントとして保持するのに最適です。コマンド履歴には含まれますが、実行されません。

シェルの履歴を逆方向に検索するctrl-r : reverse search(次の一致までctrl-rを繰り返す)

ctrl-g : abortctrl-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(ファイルシステムをチェック)killまたはkill -9(プロセスを強制終了)set -o vi(コマンドラインをviに設定)topas(パフォーマンスツール)マウント/マウント解除

ええ、どうすれば>(出力をファイルにリダイレクトする)を忘れるでしょうかls> /tmp/tmp.txt

他にもたくさんありますが、私の頭の上の人もいます。

0
vegasbrianc