普段使いできる、便利なLinuxコマンドを集めてみました。コマンドってたくさんあるし、オプションの付け方で今まで知らなかった便利な使い方ができるんですよね。
便利なコマンドはこんなもんじゃないと思いますが、ふと思いついたものを並べてみました。基本的なコマンドでもmanを眺めてみると以外なオプションがあったりするんですよね。
またネタが貯まったら放出したいと思います。
- ls -1
- パーミッション情報やオーナー情報を除いた、純粋なファイル名だけを出力する。 以下の2つは同じ。
for FN in `ls -1`; do wc -l ${FN} done
ls -1 | while read FN; do wc -l ${FN} done
- wc -l
- wc -l は、渡されたファイル名の行数を出力するコマンドだけど、オプションで渡す場合とパイプして渡す場合とで出力内容が違う。 パイプ渡しする方は数字だけの出力なので、sedやcutで加工する手間が省ける。こちらの方がよく使う。
wc -l a.txt 9 a.txt cat a.txt | wc -l 9
- cat [ファイル名] | head -n [行数] | tail -n [行数]
- 超基本のコマンドをパイプしただけのコマンドだけど、表示したい行の範囲が分かっている時(膨大な量のログファイルの一部分など)は有効。わざわざファイルをcatしたのは、さんざん加工した後のデータにも使える事を強調するため。 先のwc -lと絡めて動的に行数を指定する事も可能。
cat /var/log/httpd/access_log | head -n 100 | tail -n 20 # 先頭から100行の最後20行を表示する → 81行目から100行目 cat /var/log/httpd/access_log | wc -l # 仮に5000とする cat /var/log/httpd/access_log | tail -n 100 | head -n 20 # 末尾から100行の先頭20行を表示する → 4901行目から4920行目
- tee [ファイル名]
- このコマンドはシェルに書くのではなくて、出来上がったシェルにパイプして、標準出力を標準出力しつつファイルに保存する。リダイレクトしてしまうと保存はできるけど標準出力されないので、パッと処理だけを書きたい時は便利。
sh test.sh | tee test.log
- seq [開始番号] [終了番号]
- seqは連番を発行するコマンド。ループで連番を使いたい時に便利。
for I in `seq 1 10`; do echo ${I} done #出力結果 1 2 3 4 5 6 7 8 9 10
for I in `seq 10 15`; do echo ${I} done #出力結果 10 11 12 13 14 15
- sed -e 's/[文字]//'
- sedは文字列の置換を行うコマンド。例は指定した文字列(正規表現も可能)を「""」に置換する(要は消す)。
echo "this is a pencil." | sed -e 's/cil//' #出力結果 this is a pen.
- cut -d" " -f1
- cutは文字列を-dオプションで指定した文字で区切る。-fは出力するフィールドのことで、区切り文字で区切られた文字列の塊を1フィールドと数えて指定する。
echo "this is a pencil." | cut -d " " -f2 #出力結果 is echo "this is a pencil." | cut -d " " -f2,3 #出力結果 is a
- { }
- はぁ?って感じですが・・・。ループ処理の中でファイル出力する内容が多い場合、そのファイル出力がネックになってシェル自体の実行速度が落ちることがある。そういう場合はループ処理全体を「{}」で囲んで、リダイレクトすると、ループが終わってから出力を書き込むようになる(I/Oが発生するのが1回だけになる)。
{ ls -1 | while read FN; do wc -l ${FN} done } > a.txt
- bash -x(sh -x)
- シェルの中で使うんじゃなくて、実行する時に使う。-xはデバッグ用にif文の分岐など細かい処理の内容まで出力してくれるのでエラーが発生した時に使う。変数を展開してくれるので便利。
cat test.sh # テスト用のシェルスクリプト #! /bin/bash if [ "$1" = "test" ]; then echo "\$1 is test" else echo "\$1 is not test" fi bash -x test.sh test # 引数を付けて実行 + '[' test = test ']' + echo '$1 is test' $1 is test sh -x test.sh # 引数なしで実行 + '[' '' = test ']' + echo '$1 is not test' $1 is not test
- du -h --max-depth=1
- 今いるディレクトリ配下にあるディレクトリの容量を調べる。--max-depth=1を付けないで実行すると、ファイル数が多いとどえらい量の出力がコンソールを流れていく。--max-depth=1を付けることで検査対象を直接の子ディレクトリに限定してディレクトリ全体の容量を得ることができる。lsでは分からない情報なので結構使う。
du -h --max-dept=1 /var/log 31M ./httpd 8.0K ./ppp 16K ./mail 384K ./samba 8.0K ./setroubleshoot 3.5M ./cups 8.0K ./conman 28K ./gdm 36K ./prelink 12K ./pm 8.0K ./conman.old 8.0K ./squid 19M ./audit 65M .
- netstat -np
- -nオプションはIPアドレスで表示するオプションで、-pオプションはポートを利用しているプロセス名とプロセスIDを表示する。プロセスIDは特に便利。-nを使うのは名前解決をしない方が早い(ような気がする)から。付けない方がホスト名が出るのでわかりやすい。ちなみに-pオプションの実行はルート権限が必要。
netstat -np Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.1.1:22 192.168.1.2:61081 ESTABLISHED 31924/sshd: hogehoge tcp 0 0 192.168.1.1:445 192.168.1.3:1520 ESTABLISHED 31147/smbd tcp 0 0 192.168.1.1:445 192.168.1.4:51309 ESTABLISHED 9973/smbd
- less
- lessはmoreと同じような高機能なファイル閲覧コマンドだけど、lessが優っている点としてはzip圧縮されたファイルもいちいち展開せずに読める点がある。gzip -dするのが面倒な時(ちゃんと固めてくれてるログファイルとかね!)はlessで読むといい。
less hogehoge.gz
- zgrep
- zip絡みで便利なコマンドといえば、zipファイル用のgrep、zgrepでしょう。使い方はgrepと変わらずなので分かりやすい。普通のテキストファイルをzgrepにかけてもgrepと同じ振る舞いをしてくれるので何も考えずにxargsで流し込んでもおk。
zgrep "hogehoge" fugafuga.gz
便利なコマンドはこんなもんじゃないと思いますが、ふと思いついたものを並べてみました。基本的なコマンドでもmanを眺めてみると以外なオプションがあったりするんですよね。
またネタが貯まったら放出したいと思います。
コメント
コメントを投稿