回答:
これはこの答えで!!
言及されたトリックを幾分広げています。実際には、忘れられる傾向のある履歴関連のコマンドがたくさんあります(人々はUp100回刺す傾向があり、代わりに入力したコマンドを探します)。
history
コマンドは、左にイベント指示で、最近実行したコマンドの一覧が表示されます!N
イベント指定子に関連付けられたコマンドを置き換えます N
!-N
代用しますN
番目の最も最近のコマンドを。たとえば!-1
、最新のコマンド、!-2
2番目に新しいコマンドなどを置き換えます。!!
ための短縮形です!-1
!string
で始まる最新のコマンドを置き換えます string
!?string?
を含む最新のコマンドを置き換えます string
単語指定子を!
履歴コマンドに追加して、結果を変更できます。コロンは、イベントと単語指定子を区切り!!:0
ます。イベント指定子!!
は!
、単語指定子を使用する場合にのみ短縮できます。これ!!: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
!-#
どちらも使用しません。私が使うのですか!string
、それは私が正しいことを実行していることを確認する(zshの)最初の文字列で始まる最後のコマンドを実行するために、私は一般]タブ-完全
!N
するとコマンドが実行されます...」という記述は狭すぎます。実際に!N
は、コマンドによって置き換えられます...; 回答のすべての説明についても同様です。より正確で、はるかに有用な可能性を開きます!例えば、言及されたsudo !!
。
bash
です。Emacsでは、入力コマンドと値の履歴(Mxまたはその他の読み取り値)を参照するには、代わりにMeta-Rを使用しますeshell
(Emacs ではMeta-Rも使用されます)。だから私はしばしばそれらを台無しにします。
bash-前の行の最終パラメーターを挿入
alt- . これまでで最も便利なキーの組み合わせ。試してみてください。何らかの理由で誰もこのキーを知りません。
何度も何度も押して、古い最後のパラメーターを選択します。
少し前に使用した引数/ファイルに対してさらに何かをしたいときに最適です。
alt
- .
それは前のコマンドに行き、そこから最後の引数を引き出します。あなたは三つのコマンド前から最後の引数をしたいのであれば、単にヒットalt
- .
3回。
yank-last-arg
readlineコマンドのデフォルトのキーバインディングであるため、BASHやZSHだけでなく、readlineにリンクされているプログラムで動作するはずです。
私のお気に入りは
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
このWebサイトcommandlinefu.comをご覧ください。
また、Peteris Kruminsのこれら4つの記事を彼のブログで見ることができます。
これが「トリック」としてカウントされるかどうかはわかりませんが、人々は標準のreadlineホットキーをあまり知らないようです。シェルで特に使用するもの:
Ctrl+L
FormFeed ascii文字に対応します。通常、画面ウィンドウ(vim、less、mcなど)を使用してテキストアプリケーションで画面を再描画します。画面が別のプログラムからの出力によって「汚染」されている場合は素晴らしい。
CTRL+ R以前に実行されたコマンド(〜/ .bash_historyの内容)を検索/アクティブ化するためのBASHの+ 。
これはしばしば非常に役立ちます。このエイリアスを実行すると、ポート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は、uploadと呼ばれる単純なスクリプトです。これを使用して、あらゆる種類のコンテンツをLinodeにブリットし、結果のHTTP URLをクリップボードにコピーします(中央クリック)。IRCのユーザーにアイテムを貼り付けるのに非常に便利です。
scp -r $* $user@$host:public_html && {
URL="http://$host/~$user/$(basename $1)"
echo "$URL"
xselection -replace PRIMARY "$URL"
}
ほんの数人。後でもっと投稿できるので、仕事に戻らなければなりません!
alias mk=make
入力が速く、間違えにくい。それとも...ホットキーを使用して、エディタからコンパイル
alias m=make
、あるいはm=make -j6
または類似-私はすでに使用以外alias m=mutt
☺を
かなり基本的ですが、人々は知らないようで、前のディレクトリに戻ります:
cd -
cd..
... DOSは私の筋肉の記憶に染み付いているから
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
foo[123]
に展開されますfoo1 foo2 foo3
が、彼らはそのような場合には動作するようにファイル名である必要はあり
これは通常、スタートアップスクリプト(.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
}
mkcd
idに名前を付けることだけに似た機能がありmd
ます。ただし、cdの引数として「$ @」を使用することは意味がありません。複数の単一のディレクトリにcdできないためです。「$ @」はmkdirで機能しますが、mkdirとcdで引数を異なる方法で処理しているため、むしろお勧めしますmd () { mkdir -p "$1"; cd "$1" }
多くのキーストロークを節約する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
}
builtin foo
関数が定義されているのを回避するためにあなたができることに気づいたことはありませんcd
。私はchdir
自分の関数で使用しています。ハンディ
cd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
私は通常、検索する前にコマンドラインの途中にいるので(bashのCTRL-R)、. bashrcに次のものがあります
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
つまり、cdと入力してから上下に押すと、cdしたすべてのオプションが表示されます。基本的に私はこれを頻繁に使用されるディレクトリに使用します。「cd w」のように、私はよく使うすべてのワークスペースに行き着きます。
時間を大幅に節約できるのは、pushd / popdコマンドです。これらの人は、ディレクトリのスタックを作成し、入力を大幅に減らすことができます:
/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
u
とo
ここのために立ちますか?
setopt autopushd
し、すべてのディレクトリの変更に自動的にプッシュします
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
すると、メインセッションが存在するかどうかを確認し、それに接続します。それ以外の場合は、作成されます。
あなたが速いタイピストなら、これらは便利です:
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'
s/fast/sloppy/
reset
はあなたが使用する場所を使用しますrestaura
。
alias s='sudo'
alias r='rake' # i'm a ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.
忘れたときのお気に入りの1つs
:
$ s !! # last command with super user priviledges
bindkey -s '\e[12~' "sudo !!\n"
場合は、F2をバインド(この場合)して、そのコマンドを実行するなどのことができます。私が結合することを持っているので、私は何かを実行したときに、私はちょうど迷惑でF2で刺すことができ、エラーメッセージ「あなたは忘れてしまった『sudo』をだます」を参照してください
コマンドがstdin入力を受け取る場合、を使用してファイルから入力を読み取ることができます<filename
。これはコマンド内のどこにでも現れる可能性があるため、これらの行は同等です。
cat filename
cat <filename
<filename cat
これはgrepにとって特に便利です。行末に式を配置できるためUp、ファイル名を通過するために左にスクロールする必要なく、を押すことでgrepコマンドをすばやく変更できます。
<filename grep 'expression'
<input foo | bar | baz >output
、シェルループプリミティブのような、while
またはfor
途中でミキシングしようとするとうまくいきません。だから私はあきらめて、慣例に従って最後にそれを置いた。
を使用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`
あなたが何かがどこに住んでいるかわからないとき、そしてあなたも気にしません。
which
ので、自動的にvi =scriptname
$(scriptname)
アンパサンド。コマンドをバックグラウンドで実行するため、入力を続行できます。
$> sudo updatedb &
一緒に作業し、しばらくすると次のように表示されます:
[1] 17403
これでプロセスは完了です!終了するのを待つ必要がない場合に最適です。
&!
の背景に仕事をし、シェルからそれを見捨て!
bash
。
nohup
。
タブ補完。すべてのパスのすべての文字を入力する必要がある場合、それはどれほど悪いでしょうか?
rm -fr /
ます。ええ、タブ補完は非常に重要です
ls /usr/lib/game-d*/rott*
rm -rf /
ほとんどのLinuxシステムでは無効化されていませんか?
最後にマウントされたデバイスのマウント解除:
mount /media/whatever
...
u!mo
!mo
mo
(少なくともbashで)で始まる最後のコマンドに展開します。時には1はありませんmv
途中で、そのu!m
ように頻繁に動作しません。
私はこれを私の.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'
もう1つの便利なZSHトリック:
コマンドの出力をファイルとして扱う:
emacs =(hg cat -r 100 somefile)
これは、構文強調表示のためにemacsでMercurialで追跡されたファイルの古いバージョンを開きます。それがなければ、私は周りに混乱するだろうhg revert
、hg archive
または明示的に送ってhg cat
一時ファイルに出力します。
もちろん、これはファイルを開くプログラム、および標準出力に出力するプログラムで動作します。
ZSH固有の機能はalias
、次の-s
フラグを指定して設定されるサフィックスエイリアスです。
alias -s ext=program
指定された拡張子に接尾辞エイリアスがある場合、その拡張子を持つファイルを直接実行できます。ZSHは指定されたプログラムを起動し、ファイル名を引数として渡します。したがって、上記のエイリアスが有効な場合、これらの行は同等です。
/path/to/foo.ext
program /path/to/foo.ext
この質問をご覧ください。
実行すると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
は少し厄介なものです
以下を実行することでこれを取り除くことができます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
更新:または単に実行pgrep string
'[o]penbox'
)。括弧は一種のグロブとして機能するため、ディレクトリにopenboxがある場合(たとえばにいる場合/usr/bin
)、bashは単にopenboxを使用するため、grepのトリックを防ぐことができます。
何もしないコマンド:
のように、
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
ポップ/プッシュの代わりにサブシェルを使用する(スクリプトで便利)
~$ ( 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
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
で、バックグラウンドで実行されます。
bg
プログラムをバックグラウンドで実行しているときに誤って押すfg
と、それをプッシュする方法がわかりません:D
PS1
...ので、私は私が私の画面の一番下のラインにしたいもののほとんどを置く