Unix/Linuxのコマンドライン機能とコツを共有します。可能であれば、シェルやディストリビューションにとらわれないようにしてください。エイリアス、ワンライナー、キーボードショートカット、小さなシェルスクリプトなどに興味があります。
これは this answer で言及されている!!
トリックで多少拡張されます。実際、忘れられがちな履歴関連のコマンドがたくさんあります(人は刺しがちです) Up 代わりに、100回入力したコマンドを探します)。
history
コマンドは、最近実行されたコマンドのリストを左側にイベント指定子とともに表示します!N
は、イベント指定子N
に関連付けられたコマンドを置き換えます!-N
はN
を置き換えます 番目 最新のコマンド。例えば!-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
-最初に出現するsearch
をreplacement
で置き換えますgs/search/replacement
-search
をすべてreplacement
に置き換えますbash-前の行の最終パラメーターを挿入
alt-. これまでで最も便利なキーの組み合わせを試してみてください。なんらかの理由で、この組み合わせについて誰も知りません。
何度も押して、古い最後のパラメータを選択します。
先ほど使用した引数/ファイルに対してさらに何かしたい場合に最適です。
私のお気に入りは
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つの記事をご覧いただけます。
Rootとして最後のコマンドを実行します。
Sudo !!
これが「トリック」として数えられるかどうかはわかりませんが、人々は標準のreadlineホットキーに気づいていないようです。シェルで特に使用するもの:
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"
}
ほんのカップル。後でもっと投稿できますが、仕事に戻る必要があります!
diff
一時ファイルを手動で作成せずに2つのコマンドを出力(bash):
diff <(ls dir1) <(ls dir2)
かなり基本的ですが、人々は知らないようで、前のディレクトリに戻ります:
cd -
ブレース拡張 :
ブレース展開は、任意の文字列を生成できるメカニズムです。
次のような面倒な行を置き換えることができます。
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
これは通常、私の起動スクリプト(.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
}
多くのキーストロークを節約する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
}
私は通常、検索する前にコマンドラインの途中にいるので(bashではCTRL-R)、. bashrcに次のようにします
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
つまり、cdと入力してから上下に押すと、cdしたすべてのオプションが表示されます。基本的に私はこれを頻繁に使用するディレクトリに使用します。 「cd w」のように、私は多くの場合使用するすべてのワークスペースを調べてしまいます。
多くの時間を節約できる1つのことは、pushd/popdコマンドです。これらの連中は、ディレクトリのスタックを作成して、入力を大幅に減らすことができます。
/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
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
と入力すると、メインセッションが存在するかどうかが確認され、それにアタッチされます。それ以外の場合は作成されます。
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
あなたが速いタイピストなら、これらは便利です:
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'
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
コマンドがstdin入力を受け取る場合、<filename
を使用してファイルから入力を読み取ることができます。これはコマンドのどこにでも表示できるため、これらの行は同等です。
cat filename
cat <filename
<filename cat
これは、式を行の最後に配置できるので、grepで特に役立ちます。 Up、ファイル名を通過するために左にスクロールする必要はありません:
<filename grep 'expression'
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
vi `which scriptname`
あなたが何かがどこに住んでいるのかわからないし、あなたも気にしないときのために。
アンパサンド。コマンドをバックグラウンドで実行するので、入力を続けることができます。
$> Sudo updatedb &
一緒に作業すると、しばらくすると次のようになります。
[1] 17403
そしてあなたのプロセスは完了です!それらが終了するのを待つ必要がないものに最適です。
タブ補完。すべてのパスのすべての文字を入力しなければならない場合、どれほどひどいでしょうか。
これは私の.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'
最後にマウントされたデバイスをアンマウント:
mount /media/whatever
...
u!mo
!mo
は、mo
で始まる最後のコマンドに展開されます(少なくともbashでは)。時々、途中でmv
を行うので、u!m
はあまり機能しません。
別の便利なZSHトリック:
コマンドの出力をファイルとして扱います。
emacs =(hg cat -r 100 somefile)
これにより、古いバージョンのMercurial追跡ファイルがemacsで開き、構文が強調表示されます。それがなければ、hg revert
、hg archive
をいじったり、一時ファイルにhg cat
出力を明示的に送信したりする必要があります。
もちろん、これはファイルを開くすべてのプログラム、および標準出力に出力するすべてのプログラムで機能します。
ZSH固有の機能はサフィックスエイリアスで、alias
に-s
国旗:
alias -s ext=program
特定の拡張子にサフィックスエイリアスがある場合、その拡張子のファイルを直接実行できます。ZSHは特定のプログラムを起動し、ファイル名を引数として渡します。したがって、上記のエイリアスが有効な場合、これらの行は同等です。
/path/to/foo.ext
program /path/to/foo.ext
私がずっと好きなZSH機能の1つは、名前付きディレクトリです。特定のパスを指す値を使用して、特定の名前の変数をエクスポートできます。
export foo=/usr/bin
これで、コマンドで~foo
を使用して/usr/bin
を参照できます。
cd ~foo
~foo/ls
cat ~foo/filename
何もしないコマンド:
のように
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
これを見てください質問。
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
を実行します
場合によっては、bashの設定でrm
がrm -i
にエイリアスされるため、削除するファイルごとに確認が必要になります。このようなアカウントでときどき作業するときは、\rm
を使用して、ユーザー構成を変更せずにrm
の元の動作を取得します。
私は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
と入力すると、バックグラウンドで実行されます。
プロンプトに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
私のお気に入りのコマンドは「検索」です。どこでも使用します...例:
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
うん、 "検索"ルール!
長いコマンドを入力した後、それを完了する前に、何か他のことを実行する必要があるために、コマンドがすぐに機能しないことに気づいたことがあります(例:git commit -m "long commit message here"
)、^A^K
行の先頭に移動して(バッファーに保存して)行を終了し、次にコマンドを実行して修正し、最後に^Y
キルしたコマンドを貼り付けて続行します。再入力の手間を大幅に省きます。もちろん、これはすべて、readline
がEmacsモードの場合です。
別の時間の節約:mkdir -p some/nested/dirs/to/be/created
不足している場合、パス内のすべてのディレクトリを作成します。
現在のプロセスツリーのニースアスキーアートを表示します。CPUを最も集中的に使用するプロセスが強調表示されます。
while true; do
clear;
pstree $( ps -eo pid --sort %cpu | tail -n 1 );
sleep 1;
done
Ctrl + C
で殺す
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
# 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}'
前のコマンドの一部を置き換えます。
^
探す^
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
[...]
人間のサイズの降順でディレクトリサイズを要約する
du -hs */ | sort -hr
例えば.
10.2G foo/
4M bar/
zshを使用した二重スター展開(これは、1つのレベルだけでなく、$(find ! -type d)
に似たディレクトリツリーを再帰的に下降します。
grep string **/*.cc
私のお気に入りの機能は色なしです! =)
TERM = xterm-monoまたはTERM = linux-mはOSに依存します...
私は白黒のIRSSI、mc、その他の「テキストユーザーインターフェイス」ツールが本当に好きです
ZSHにはグローバルエイリアスがあります。コマンドラインの任意の場所でエイリアスを展開します。これはホスト名に役立つことがわかりました:
例えば。:
alias -g sub='sub.domain.tld'
その後、私は行うことができます:
sftp sub
ssh sub
等.
実はワンライナーではありませんが、便利だと思います。多くのファイルを大文字に変換します(例: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
}
現在のディレクトリの最新のタイムスタンプを持つファイル名を取得します。
latest () { ls -lrt | tail -1 | awk '{print $NF}' }
function calc() { echo $* p | dc }
dcはRPN計算機です。この関数を使用すると、コマンドの引数として式を入力できます。
$ calc 5 3 +
8
ホスト名がboldであるプロンプトを表示します。しばらくカラープロンプトを試しましたが、背景によっては色が悪く見える場合がありました。太字は、明るい背景、暗い背景、青い背景などに適しています。
これは私の.bashrcにあります:
bold=$(tput bold)
reset=$(tput sgr0)
export PS1="\u@\[$bold\]\h\[$reset\]:\w \$ "
WindowsとUnix/Linuxを絶えず切り替えるときに、次のことが役に立ちました。
alias dir="ls -l"
alias copy="cp"
alias del="rm"
これは、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
ReTTY 。これにより、実行中のプログラムをある端末から別の端末に移動できます。このようにして、screen、tmux、またはsshの外でncursesプログラムを実行している場合、問題のプログラムを使用するターミナル内でReTTYを実行することにより、sshセッションまたはネットワークスクリーンまたはtmuxセッションに接続できます。つまり、screenとtmuxに似ていますが、(a)一度に実行できるプログラムは1つだけであり、(b)後に実行できるという例外があります子プロセスを開始します。
私のお気に入りは、pythonコマンドを使用して一時的なhttpサーバーを作成することです。
python -m SimpleHTTPServer
このマシンからLAN経由で次のようにファイルにアクセスします。
もう1つは、tarファイルを抽出形式で次のようにダウンロードすることです。
wget -qO- http://192.168.1.70:8000/test.bz2 | tar xjvf-
ここで、リンクはwww上の任意の場所にすることができ、bz2はその問題に対してgz、tgz、またはbz2自体にすることができます。
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() {
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
}
# 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 Monaco
、Anti-aliased
とiTerm2
。
KeyCue (tm)(r)(c)($)を押すだけで、実行中のほぼすべてのアプリのコンテキストが得られます command。
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
以下の「トリック」は技術的に挑戦的でも印象的でもありませんが、他の人にいくつかの影響を与えます。私たちの仕事が私たちの生活をより幸せにするために使用できない場合、私たちはいくつかのことをもう一度考えなければなりません。
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
なども使用できます。
ホームフォルダーにDocument、Downloads、Tempなどの名前が付いたフォルダーがあり、最初の文字は大文字です。ターミナルで作業しているとき、ディレクトリにcdしているときに最初のキーをシフトシフトするのは面倒です。ターミナルで次のように入力するだけで、bashが大文字と小文字を自動的に修正します。
shopt -s nocaseglob
使用する pgrep foo
の代わりに ps aux | grep foo
実行中のfooのインスタンスの数とそのpidを検索する場合:
例えばの代わりに ps aux | grep firefox
、 使用する pgrep firefox
なしでは生きられない
set editing-mode vi
set blink-matching-paren on
私の〜/ .inputrcで。
すべてのreadline対応アプリケーションでそれらをアクティブにします。シェルでのviコマンドライン編集のアクティブ化のみが次の方法で機能します。
set -o vi
したがって、ESCまたはCTRL + [を押すと、よく知られているviコマンドモードになります。そして、どこでも強力なviコマンドを使用できます!
これには素晴らしいサイトがあります: http://www.commandlinefu.com/commands/browse
私の個人的なお気に入りは
find . -name <i>filename</i> | xargs grep -in '<i>pattern to search for</i>'
上記のコマンドが行うことは、名前xのファイルを見つけ、そのファイルを検索して、探しているパターンを探します。サブディレクトリのどこかにあるファイルで特定のコードを探している場合に非常に役立ちます。
find path expr -exec ls -ld {} \;
所有権、権限、サイズ(ファイルの場合)、および「検索」式が返すもののその他の特性を確認する簡単な方法。
15分のコマンドを開始した直後に、&&
を使用してコマンドラインに他の要素を追加したいと思ったことがよくあります。すでに実行中のジョブを中断する代わりに、at
を使用して2番目のジョブをキューに入れる傾向があり、ターミナルを監視する必要がないため、時間を長くすることができます。
通常、at
は、指定された時間に実行するジョブをキューに入れます。
$ at 14:30
> myscript
> anotherscript
> <CTRL-D>
キューへのエントリはatq
で表示でき、atrm
で削除できます。
Bashプロンプトのカスタマイズに関するヒントへのもう1つの追加:プロンプトを逆にしたいと思います。これにより、長いターミナルリストでコマンド出力が開始および終了する場所の視覚的な手掛かりが得られます。これは、明るい背景と暗い背景の両方に適しています。
export PS1="\[\e[7m\][\u@\h \w]\[\e[0m\]$ "
同期;同期;同期;再起動
時々本当に役立つことがあります。注意してください !
私は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 : 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>
が逆にジャンプします。
私のお気に入りは以下です。私はそれらのほとんどを定期的に使用しています
df -k(ファイルシステムをチェック)killまたはkill -9(プロセスを強制終了)set -o vi(コマンドラインをviに設定)topas(パフォーマンスツール)マウント/マウント解除
ええ、どうすれば>(出力をファイルにリダイレクトする)を忘れるでしょうかls> /tmp/tmp.txt
他にもたくさんありますが、私の頭の上の人もいます。