名前や用途が似ているLinuxコマンドの整理

いろいろあるLinuxコマンドを区別するためのメモ。

w系

wログイン中のユーザについて、実行中のコマンド名も含め表示する
whoログイン中のユーザについて、ログイン時刻を表示する
usersログイン中のユーザのみを表示する
id自分の実ユーザ名、実効ユーザ名、所属グループを表示する
whoami自分の実効ユーザ名のみを表示する
last成功したログイン履歴を表示する
lastb失敗したログイン履歴を表示する(要root権限)
lastlog各ユーザの最終ログイン時刻を表示する
$ w
 22:44:42 up 12:19,  3 users,  load average: 0.03, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     pts/2    192.168.56.1     21:16    2.00s  0.77s  0.00s w

$ who
user     pts/2        2014-11-11 21:16 (192.168.56.1)

$ users
user

これらのコマンドが標準で読み込むログデータは、/var/run/utmp、/var/log/{wtmp,btmp}にある。

which系

whichコマンド名から絶対パスを得る
readlinkシンボリックリンクを解決する(-eオプションで絶対パスを得る)
whereisコマンド名などから設定ファイルやマニュアルなどのパス一式を得る
whatisコマンド名などから概要をリスト表示する(完全一致)
aproposコマンド名などから概要をリスト表示する(部分一致)
manコマンド名などからマニュアルを表示する
mandbマニュアルのインデックス情報を更新する
manpathマニュアルが置かれているパスを表示する
locateファイルデータベースから検索する(部分一致)
updatedbファイルデータベースを更新する(要root権限)
$ whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/bin/X11/passwd /usr/share/man/man1/passwd.1ssl.gz /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

$ whatis passwd
passwd (1ssl)        - compute password hashes
passwd (1)           - change user password
passwd (5)           - the password file

$ apropos passwd
chgpasswd (8)        - update group passwords in batch mode
chpasswd (8)         - update passwords in batch mode
fgetpwent_r (3)      - get passwd file entry reentrantly
...

ps系

psプロセス一覧を表示(fで親子関係を表示)
pstreeプロセスツリーを表示(-aオプションでコマンドライン表示)
pidofプロセス名からプロセスIDを得る(完全一致)
pgrepプロセス名からプロセスIDを得る(部分一致、-aオプションでコマンドライン表示)
killプロセスIDに対しシグナルを送る
killall一致するプロセス名すべてにシグナルを送る(完全一致)
pkill一致するプロセス名すべてにシグナルを送る(部分一致)
topプロセス一覧のリアルタイム表示(-cオプションでコマンドライン表示)
$ ps auxf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
root       930  0.0  0.6  61364  3060 ?        Ss   02:30   0:00 /usr/sbin/sshd -D
root      1313  0.6  0.8 103556  4148 ?        Ss   02:31   0:00  \_ sshd: user [priv]
user      1362  0.0  0.3 103556  1932 ?        S    02:31   0:00      \_ sshd: user@pts/0
user      1363  2.6  0.9  23036  4592 pts/0    Ss   02:31   0:00          \_ -bash
user      1376  0.0  0.2  18280  1360 pts/0    R+   02:31   0:00              \_ ps auxf
...

$ pstree
init─┬─acpid
     ├─apache2───2*[apache2───26*[{apache2}]]
     ├─atd
     ├─cron
     ├─dbus-daemon
     ├─dhclient
     ├─docker.io───6*[{docker.io}]
     ├─6*[getty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd───sshd───sshd───bash───pstree
     ├─systemd-logind
     ├─systemd-udevd
     ├─upstart-file-br
     ├─upstart-socket-
     └─upstart-udev-br

$ pstree -a
init
  ├─acpid -c /etc/acpi/events -s /var/run/acpid.socket
  ├─apache2 -k start
  │   ├─apache2 -k start
  │   │   └─26*[{apache2}]
  │   └─apache2 -k start
  │       └─26*[{apache2}]
  ├─atd
  ├─cron
  ├─dbus-daemon --system --fork
  ├─dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
  ├─docker.io -d
  │   └─6*[{docker.io}]
  ├─getty -8 38400 tty4
  ├─getty -8 38400 tty5
  ├─getty -8 38400 tty2
  ├─getty -8 38400 tty3
  ├─getty -8 38400 tty6
  ├─getty -8 38400 tty1
  ├─rsyslogd
  │   └─3*[{rsyslogd}]
  ├─sshd -D
  │   └─sshd
  │       └─sshd
  │           └─bash
  │               └─pstree -a
  ├─systemd-logind
  ├─systemd-udevd --daemon
  ├─upstart-file-br --daemon
  ├─upstart-socket- --daemon
  └─upstart-udev-br --daemon

$ pidof sh

$ pgrep -a sh
127 kdmflush
130 kdmflush
930 /usr/sbin/sshd -D
1313 sshd: user [priv]
1362 sshd: user@pts/0
1363 -bash

topコマンドでは、xでソートカラムのハイライト、<>でソートカラムの移動、cコマンドラインの表示切り替えができる。

hexdump系

od8進ダンプ(`-Ax -tx1z`で16進ascii view付きダンプ)
hexdump16進ダンプ、printfライクなフォーマット指定が可能
hd16進ascii view付きダンプ(`hd -C`と同じ)
xxd16進ダンプ、バイナリへの逆変換が可能

od -Ax -tx1zhdはほぼ同じ出力となる。

$ echo hoge | od -Ax -tx1z
000000 68 6f 67 65 0a                                   >hoge.<
000005

$ echo hoge | hd
00000000  68 6f 67 65 0a                                    |hoge.|
00000005

hexdumpはフォーマット文字列を指定することで、エスケープ文字列の生成などに使える。

$ echo hoge | hexdump -ve '/1 "_%02x"' | sed 's/_/\\x/g'
\x68\x6f\x67\x65\x0a

xxdは出力結果をバイナリに戻すことができるため、バイナリ編集に使える。

$ echo hoge | xxd | tee dump.txt
0000000: 686f 6765 0a                             hoge.

$ sed 's/6[0-9a-f]/61/g' dump.txt | tee dump2.txt
0000000: 6161 6161 0a                             hoge.

$ xxd -r dump2.txt
aaaa

*stat系

netstatTCPUDPUnixドメインソケットの利用状況(`-an`)、ルーティングテーブル(`-rn`)などを表示
vmstatメモリ、CPUなどの利用状況を表示
freeメモリ、swapの利用状況を表示
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 192248  35296 214808    0    0    45    30   42  617  0  1 98  1  0

$ free
             total       used       free     shared    buffers     cached
Mem:        501788     309540     192248        684      35296     214808
-/+ buffers/cache:      59436     442352
Swap:       524284          0     524284

sysstatパッケージをインストールすると、以下のコマンドも使える。 引数を与えることで、定期的に表示させることもできる。

iostatCPU、ディスクのIO状況を表示(-pオプションでパーティションごとの詳細も表示)
mpstatCPUプロセッサごとの利用状況を表示(`-P ALL`ですべて表示)
pidstatプロセスごとのCPU、メモリ使用量などを表示
$ iostat -p
Linux 3.13.0-32-generic (vm-ubuntu64)   11/12/2014      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.36    0.00    0.87    0.66    0.00   98.11

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.95        42.92        30.14     239600     168258
sda1              0.06         0.21         0.00       1149          6
sda2              0.00         0.00         0.00          2          0
sda5              1.75        42.58        30.14     237709     168252
dm-0              3.17        42.36        30.14     236493     168252
dm-1              0.04         0.16         0.00        896          0

$ mpstat -P ALL
Linux 3.13.0-32-generic (vm-ubuntu64)   11/12/2014      _x86_64_        (1 CPU)

04:03:58 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
04:03:58 AM  all    0.36    0.00    0.68    0.66    0.19    0.00    0.00    0.00    0.00   98.11
04:03:58 AM    0    0.36    0.00    0.68    0.66    0.19    0.00    0.00    0.00    0.00   98.11

$ pidstat
Linux 3.13.0-32-generic (vm-ubuntu64)   11/12/2014      _x86_64_        (1 CPU)

04:04:02 AM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
04:04:02 AM     0         1    0.01    0.01    0.00    0.02     0  init
04:04:02 AM     0         3    0.00    0.00    0.00    0.00     0  ksoftirqd/0
04:04:02 AM     0         7    0.00    0.01    0.00    0.01     0  rcu_sched
04:04:02 AM     0         8    0.00    0.02    0.00    0.02     0  rcuos/0
...

ls*系

lsof各プロセスが開いているファイルの一覧を表示(`lsof -in`でソケット利用状況のみを表示)
lsmod読み込まれているカーネルモジュールの一覧を表示
lsblkブロックデバイスの一覧を表示
lspciPCIデバイスの一覧を表示
lsusbUSBデバイスの一覧を表示
lscpuCPUの詳細を表示
lshwハードウェアの詳細を表示
$ sudo lsof
COMMAND    PID  TID       USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              252,0     4096          2 /
init         1            root  rtd       DIR              252,0     4096          2 /
init         1            root  txt       REG              252,0   265848    1962283 /sbin/init
init         1            root  mem       REG              252,0    47712    1051256 /lib/x86_64-linux-gnu/libnss_files-2.19.so
...

$ lsblk
NAME                               MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                                  8:0    0    40G  0 disk
├─sda1                               8:1    0   243M  0 part /boot
├─sda2                               8:2    0     1K  0 part
└─sda5                               8:5    0  39.8G  0 part
  ├─vm--ubuntu64--vg-root (dm-0)   252:0    0  38.8G  0 lvm  /
  └─vm--ubuntu64--vg-swap_1 (dm-1) 252:1    0     1G  0 lvm  [SWAP]
sr0                                 11:0    1  1024M  0 rom

$ sudo lshw
vm-ubuntu64
    description: Computer
    product: VirtualBox ()
    vendor: innotek GmbH
    version: 1.2
...

host系

hostDNS問い合わせを行う(-aオプションで詳細表示)
hostname自分のホスト名を表示する(-Iオプションで持っているIPアドレスをすべて表示する)
nslookupDNS問い合わせを行う(非推奨)
dig詳細なDNS問い合わせを行う(+norecオプションで再帰問い合わせをオフ、+shortで簡易表示)
$ hostname
vm-ubuntu64

$ hostname -I
10.0.2.15 192.168.56.2 172.17.42.1

$ host www.example.com
www.example.com has address 93.184.216.119

$ host -a www.example.com
Trying "www.example.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65301
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.example.com.               IN      ANY

;; ANSWER SECTION:
www.example.com.        49262   IN      AAAA    2606:2800:220:6d:26bf:1447:1097:aa7
www.example.com.        41920   IN      A       93.184.216.119

Received 77 bytes from 192.168.0.1#53 in 15 ms

$ dig +norec www.example.com

; <<>> DiG 9.9.5-3-Ubuntu <<>> +norec www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58718
;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;www.example.com.               IN      A

;; ANSWER SECTION:
www.example.com.        51107   IN      A       93.184.216.119

;; Query time: 17 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Sun Nov 09 07:31:28 JST 2014
;; MSG SIZE  rcvd: 60

$ dig +short www.example.com
93.184.216.119

ldnsutilsパッケージをインストールすると、drillコマンドも使える。

drill詳細なDNS問い合わせを行う(DNSSEC用オプションあり)
$ drill -S good-A.test.dnssec-tools.org @8.8.8.8
;; Chasing: good-a.test.dnssec-tools.org. A
Warning: No trusted keys specified


DNSSEC Trust tree:
good-A.test.dnssec-tools.org. (A)
|---test.dnssec-tools.org. (DNSKEY keytag: 19442 alg: 5 flags: 256)
    |---test.dnssec-tools.org. (DNSKEY keytag: 28827 alg: 5 flags: 257)
    |---test.dnssec-tools.org. (DNSKEY keytag: 55926 alg: 5 flags: 257)
    |---test.dnssec-tools.org. (DS keytag: 28827 digest type: 2)
    |   |---dnssec-tools.org. (DNSKEY keytag: 3147 alg: 5 flags: 256)
    |       |---dnssec-tools.org. (DNSKEY keytag: 34816 alg: 5 flags: 257)
    |       |---dnssec-tools.org. (DS keytag: 34816 digest type: 2)
    |           |---DNSSEC signature not incepted yet:
dnssec-tools.org.       21514   IN      RRSIG   DS 7 2 86400 20141130154950 20141109144950 60764 org. Y81ZkDb5VATulj+EykyOG9lir+mn9t9mMslqxTYc2PabXLXrl+i7H3Qo2i7zazI3uLwqb2Ash0GQVBaaQ5yPyhw+v7mmPw=
For RRset:
dnssec-tools.org.       21514   IN      DS      34816 5 2 bf59736eab4d7080065a8c96a714b86c23383478f69d9f7d887cbe9930b7a7a0
With key:
org.    448     IN      DNSKEY  256 3 7 AwEAAXQRcjCcYDIZTLZZq46iF8oUX+c15GVdbszCa2RrrPz7yWEWAhu1A2ca8fWm9RR5uBS/cO0zC/NQYWrmjp0Ci/h5ENrkFZlTLxOUC39zcKtYkymNXZ1Jv5GQ0D40AO2FYUdkMCR+EDJoGxCjv+W9j96I}
    |           |---org. (DNSKEY keytag: 60764 alg: 7 flags: 256)
(snip)
You have not provided any trusted keys.
;; Chase successful

関連リンク