ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

個人的linuxコマンドチートシート -検索・表示・プロセス編-

たまによく使うコマンド及びオプションのまとめ。

環境はUbuntu18.04LTS

diff

コマンド 説明
diff fileA fileB fileAとfileBの差分を表示
diff <(ls dir1) <(ls dir2) 名前付きパイプによりコマンドの出力結果を直接diffコマンドに食わせる

名前付きパイプを使う場合の注意点として、<の前後のスペースは必ず記載のものでなくてはならない.つまり、<の左にはスペースを入れ、右にはスペースを入れてはならない.

試しにスペースを入れないでコマンドを実行すると次のようになった(dir1とdir2がカレントディレクトリにあるという前提)

diff<(ls dir1)<(ls dir2)
bash: diff/dev/fd/63/dev/fd/62: そのようなファイルやディレクトリはありません

dmesg

コマンド 説明
dmegs カーネルが起動して以降リングバッファに出力された内容を表示
dmegs -f kern カーネルから出力された内容を表示
dmegs -f daemon デーモンから出力された内容を表示
dmegs -f syslog システムログから出力された内容を表示

起動中でもカーネルモジュールをロードするとメッセージが追加される.

echo

コマンド 説明
echo "hello">/dev/pts/2 端末にメッセージを表示(おふざけ)

find

コマンド 説明
find / -name "*.txt" ルートディレクトリ以下のファイルを再帰的に検索
find / -name "*.txt" 2>/dev/null アクセス権限がないとの旨を表示せず検索
find -maxdepth 2 -name "*.txt" カレントディレクトリと直下のディレクトリ内で検索
find -type f -name ".txt" タイプを指定して検索. type:b,c,d,p,f,l,s
find / -name "*.c" | xargs grep hoge *.cというファイル内のhogeという文字列を含む行を表示

|grepを使うのは文字列を直接入力する場合.

|xargx grepを使うのは検索したいファイルのファイル名を入力する場合.

grep

コマンド 説明
grep int main.c main.c内でintを含む行を表示
grep -i int main.c 大文字小文字を区別せずに表示
grep -v int main.c intという文字列を含まない行を表示
top|grep int topの結果をリダイレクト

kill

コマンド 説明
kill 10000 PID=10000のプロセスにTERM(15)シグナルを送る
kill -15 10000 上に同じ
kill -TERM 10000 上に同じ
kill -l 使用可能なシグナル一覧を表示

主なシグナルには次のようなものがある.なお、シグナル番号はシステムによって違うらしいのであくまで自分の環境ではこんな感じだった.

シグナル名 シグナル番号 意味
HUP 1 端末がハングアップした
INT 2 キーボードからの割り込み命令(Ctrl+C)
KILL 9 プロセスの強制終了命令
TERM 15 プロセスの終了命令
CONT 18 プロセスの再開命令
STOP 19 プロセスの停止命令(Ctrl+Z)
SIGWINCH 28 ウインドウサイズが変更された

killall

コマンド 説明
killall a.out プロセス名を指定してプロセスをkillする.

killコマンドはPIDを指定するが、killallコマンドはプロセス名を指定する.指定したプロセス名と同じプロセスがすべてkillされるらしい.

ls

コマンド 説明
ls -a .で始まるファイルも表示
ls -i iノード番号も表示
ls -l ファイル名に加えファイル属性など詳細を表示
ls -t ファイル名ではなく修正時刻 (inode の `mtime')でソートして表示
ls |grep-v *.c 拡張子が.cのファイルを除外して表示
ls -F ディレクトリには先頭に/を追加して表示
ls -lF|grep -v / ディレクトリを除外して詳細表示
ls -R ディレクトリ内も再帰的に表示

lscpu

コマンド 説明
lscpu cpuの情報を表示
cat /proc/cpuinfo lscpuに同じ

ll (ls -l)

コマンド 説明
ll /proc/10000/fd PID=10000のプロセスのファイルディスクリプタを表示

ファイルディスクリプタの実体はシンボリックリンク.

パイプやソケットの確認もできる

ps

コマンド 説明
ps 実行したユーザーの現端末が制御するプロセスを表示
ps u 実行したユーザーが持つ全端末が制御するプロセスをユーザー名付きで表示
ps a 全一般ユーザーがもつ全端末が制御するプロセスを表示
ps x 実行したユーザーが起動した全プロセスを端末の有無を問わず表示
ps aux 全ユーザーの全プロセスを端末の有無を問わず表示
ps f 階層構造も表示する

-や--をつけず直接オプションを指定するBSDオプションを使用することもできる.

BSDオプションというのはあまり慣れないが、psコマンドに限って言えばBSDオプションの方が便利な気がする.

www-dataやrootなどが実行しているプロセスを表示するにはps axかps auxをする必要がある.

pstree

コマンド 説明
pstree プロセスの親子関係をツリー状に表示
pstree -p PIC付きでプロセスツリーを表示

strace

コマンド 説明
strace "echo" echoコマンドが使用するシステムコールとシグナルを監視
strace -p 10000 PID=10000のプロセスが使用するシステムコールとシグナルを監視
strace -p 10000 -f 子プロセスも監視

他にも呼び出し回数や占有時間ごとにソートするオプションなどが豊富に存在する.

tty

コマンド 説明
tty 現在の端末のttyを表示

デスクトップ環境を持つシステムの場合、/dev/ttynはデスクトップ環境自体を表していて、/dev/pts/nは仮想端末(ターミナル)を表している.例えば、Linuxで仮想端末を複数開くと/dev/pts/nファイルがオープンするが、/dev/ttynはオープンしない.

nの最大値は(すべてのユーザーが開いている仮想端末の合計)-1になる.他のユーザーでログインすると/dev/ttynファイルがオープンする.

参考