Linux のコマンドを実行する際に使える記号たち

シェアする

Linux (やUnix)でコマンドを実行する際、複数のコマンドを組み合わせてより複雑な事をしたりある記号が特殊な役割を持っている事が良くあるので知ってる物をまとめてみます。というより Evernote の奥底に眠っていたので引っ張りだしてみた。記号の類ってぐぐりにくいんですよねぇ。。。

Sponsored Links

リダイレクト

コマンドの出力結果を他のコマンドやファイルなどに出力したりします。上の2つ以外はあんまり使わないんですけどね。

> は書き出し, >> は追記
1 は標準出力, 2 は標準エラー出力
というルールは覚えておくと捗ると思う。

hoge < file 標準入力を file から読み込む
hoge > file 標準出力を file に書き出す
hoge 2> file 標準エラー出力を file に書き出す
hoge >file 2>&1 標準出力と標準エラー出力を file に書き出す
hoge >> file 標準出力を file に追記
hoge 2>> file 標準エラー出力を file に追記
hoge >> file 2>&1 標準出力と標準エラー出力を file に追記
hoge 2>&1 | fuga 標準出力と標準エラー出力をコマンド fuga の標準入力に渡す

パイプ

リダイレクトの一つだけど別にした。
コマンドの標準出力を別のコマンドに受け渡せる。よく使いますね。

コマンドを渡す先は less, xargs, grep, sort, uniq とか多いです。

$ ls -alt | head -n 5
total 24212
drwxrwxr-x 30 ryomatsu ryomatsu    4096 Jun  7 00:47 .
-rw-------  1 ryomatsu ryomatsu   65467 Jun  7 00:47 .histfile
drwx------  2 ryomatsu ryomatsu    4096 Jun  5 18:09 .w3m
-rw-------  1 ryomatsu ryomatsu   12090 Jun  5 09:54 .mysql_history

# 複数繋げれる
# /wp/archive/ へのアクセスかつステータスコードが 200 じゃないものを tail -f で表示
$ tail -f /var/log/apache2/loumo.jp.access_log | grep 'req:GET /wp/archive/' | grep -v 'status:200'

複数コマンドの同時実行

複数のコマンドを実行する際に一つ前のコマンドの状況により次のコマンドを実行するかとか指定できます。
; と & 以外はシェルスクリプト書く時ぐらいかなぁ使うの。

hoge ; fuga hoge が終わったら fuga を実行
hoge & hoge をバックグラウンドで実行
hoge && fuga hoge が成功したら fuga を実行
hoge || fuga hoge が失敗したら fuga を実行

他細々としたもの

~

ホームディレクトリを示す。cd ~/ で自分のホームディレクトリに戻ったりしますね。
~hoge のように ~ の後にユーザ名をつけるとそのユーザのホームディレクトリとなります。

$ pwd
/etc/apache2/conf.d
$ cd ~/
$ pwd
/home/ryomatsu

cd -

cd の後に - をつけると直前にいたディレクトリに移動できる。ブラウザの戻るなどと違ってずっと戻るとかできないので cd - を連打すると同じディレクトリを行ったり来たりする事に。

$ cd /etc/apache2/conf.d/
$ cd ~
$ pwd
/home/ryomatsu
$ cd -
/etc/apache2/conf.d
$ cd -
~

$_

直前に打ったコマンドの最後の引数を返す。ls で確認してから作業のためにそのディレクトリに移動するとか。

$ ls -alt ~/bin/
...
$ cd $_
$ pwd
/home/ryomatsu/bin

\

所謂エスケープ。改行をエスケープして複数行にまたがるコマンドを書いたり特殊な文字を含むファイルを操作したりする。

$ ls \
hoge \
fuga

$ ls -l hoge\ fuga
-rw-rw-r-- 1 ryomatsu ryomatsu 0 Jun  7 18:59 hoge fuga

``

コマンドを実行して、その結果を返します。返ってきた結果を他のコマンドの引数にしたりします。

# ls -t /var/log/example/* の一行目の値を tail -f で表示する。ファイル名に日時が入ってるなどでよく変わる場合に使います。
$ tail -f `ls -t /var/log/example/* | head -n 1` 

にしても自分で使わないものは全然覚えてなくて良くないなぁ。。。

Sponsored Link

シェアする

フォローする