目次
概要
システムのステータスは、多数のプログラムやメカニズムを使用して検査できます。ここではその一部について説明します。また、日常作業に役立つ一部のユーティリティとその最も重要なパラメータについても説明します。
ここでは、コマンドごとに関連出力の例を示してあります。これらの例の1行目はコマンド自体です(ドル記号(>)または#記号プロンプトの後)。省略は、大カッコ[...]で示されており、長い行は必要に応じて折り返されています。長い行の改行はバックスラッシュ(\)で示されています。
# command -x -y
output line 1
output line 2
output line 3 is annoyingly long, so long that \
we have to break it
output line 3
[...]
output line 98
output line 99
できるだけ多数のユーティリティを紹介できるように、簡潔に説明しています。すべてのコマンドの詳細は、マニュアルページで確認できます。また、ほとんどのコマンドではパラメータ--helpが認識されます。このパラメータを指定すると、使用可能なパラメータの簡略リストが表示されます。
lddコマンドを使用すると、引数として指定した動的実行可能ファイルをロードするライブラリを確認できます。
tux@mercury:~> ldd /bin/ls
linux-gate.so.1 => (0xffffe000)
librt.so.1 => /lib/librt.so.1 (0xb7f97000)
libacl.so.1 => /lib/libacl.so.1 (0xb7f91000)
libc.so.6 => /lib/libc.so.6 (0xb7e79000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7e67000)
/lib/ld-linux.so.2 (0xb7fb6000)
libattr.so.1 => /lib/libattr.so.1 (0xb7e63000)静的バイナリファイルには、動的ライブラリは不要です。
tux@mercury:~> ldd /bin/sash
not a dynamic executable
tux@mercury:~> file /bin/sash
/bin/sash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.4, statically linked, for GNU/Linux 2.6.4, stripped
コマンドltraceを使用すると、プロセスによるライブラリ呼び出しをトレースできます。このコマンドの使用方法は、straceと同様です。パラメータ-cを指定すると、発生したライブラリ呼び出しの回数と持続期間が出力されます。
tux@mercury:~> ltrace -c find ~ % time seconds usecs/call calls function ------ ----------- ----------- --------- -------------------- 34.37 6.758937 245 27554 __errno_location 33.53 6.593562 788 8358 __fprintf_chk 12.67 2.490392 144 17212 strlen 11.97 2.353302 239 9845 readdir64 2.37 0.466754 27 16716 __ctype_get_mb_cur_max 1.17 0.230765 27 8358 memcpy [...] 0.00 0.000036 36 1 textdomain ------ ----------- ----------- --------- -------------------- 100.00 19.662715 105717 total
ユーティリティstraceを使用すると、現在実行中のプロセスのシステム呼び出しをすべてトレースできます。行頭のstraceに続けてコマンドを通常どおり入力します。
tux@mercury:~> strace ls
execve("/bin/ls", ["ls"], [/* 61 vars */]) = 0
uname({sys="Linux", node="mercury", ...}) = 0
brk(0) = 0x805c000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or \
directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=89696, ...}) = 0
mmap2(NULL, 89696, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7ef2000
close(3) = 0
open("/lib/librt.so.1", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\36\0"..., 512) \
= 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=36659, ...}) = 0
[...]
stat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) \
= 0xb7ca7000
write(1, "bin Desktop Documents music\tM"..., 55bin Desktop Documents \
\ music Music public_html tmp
) = 55
close(1) = 0
munmap(0xb7ca7000, 4096) = 0
exit_group(0) = ?たとえば、特定のファイルを開く試みをすべてトレースするには、以下を入力します。
tux@mercury:~> strace -e open ls .bashrc
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/librt.so.1", O_RDONLY) = 3
open("/lib/libacl.so.1", O_RDONLY) = 3
open("/lib/libc.so.6", O_RDONLY) = 3
open("/lib/libpthread.so.0", O_RDONLY) = 3
open("/lib/libattr.so.1", O_RDONLY) = 3
[...]
すべての子プロセスをトレースするには、パラメータ-fを使用します。straceの動作と出力形式は厳密に制御できます。詳細については、man straceを参照してください。