以前こんなエントリを書いていた
strace で -k を指定すると システムコール呼び出しのスタックトレースを採取できるのを知った。v4.9 から使える experimental 扱いのオプション
という内容のエントリでした。
しかしながら
CentOS7.4 の strace-4.12-4.el7 ではサポートされていない機能だ。ざんねーん ちなみに Ubuntu Xenial もだめだー。とほほー
当時、私が業務で扱っていた Linux ディストリビューションではサポートされていなかったのでした。
で、この内容を改めて思い出して、 Ubuntu Jammy で strace -k
を試してみたら 動く!
hiboma@vps:~$ strace -k -P /etc/passwd -y id openat(AT_FDCWD</home/hiboma>, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 3</etc/passwd> > /usr/lib/x86_64-linux-gnu/libc.so.6(__open64_nocancel+0x4c) [0x119bcc] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_open+0xd5) [0x8c1e5] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_fopen+0x292) [0x8c492] > /usr/lib/x86_64-linux-gnu/libc.so.6(fopen+0x7e) [0x7f72e] > /usr/lib/x86_64-linux-gnu/libc.so.6(__nss_files_fopen+0x12) [0x154e32] > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0x3e) [0x15ab4e] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683] > /usr/bin/id() [0x621e] > /usr/bin/id() [0x2fc5] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40] > /usr/bin/id() [0x32e5] newfstatat(3</etc/passwd>, "", {st_mode=S_IFREG|0644, st_size=1889, ...}, AT_EMPTY_PATH) = 0 > /usr/lib/x86_64-linux-gnu/libc.so.6(fstatat+0xe) [0x113eee] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_doallocate+0x63) [0x7ebf3] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_doallocbuf+0x50) [0x8dd60] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_seekoff+0x135) [0x8aa95] > /usr/lib/x86_64-linux-gnu/libc.so.6(fseeko+0x63) [0x88d53] > /usr/lib/x86_64-linux-gnu/libc.so.6(__nss_files_fopen+0x2c) [0x154e4c] > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0x3e) [0x15ab4e] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683] > /usr/bin/id() [0x621e] > /usr/bin/id() [0x2fc5] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40] > /usr/bin/id() [0x32e5] lseek(3</etc/passwd>, 0, SEEK_SET) = 0 > /usr/lib/x86_64-linux-gnu/libc.so.6(llseek+0xb) [0x114acb] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_seekoff+0x22d) [0x8ab8d] > /usr/lib/x86_64-linux-gnu/libc.so.6(fseeko+0x63) [0x88d53] > /usr/lib/x86_64-linux-gnu/libc.so.6(__nss_files_fopen+0x2c) [0x154e4c] > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0x3e) [0x15ab4e] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683] > /usr/bin/id() [0x621e] > /usr/bin/id() [0x2fc5] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40] > /usr/bin/id() [0x32e5] read(3</etc/passwd>, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1889 > /usr/lib/x86_64-linux-gnu/libc.so.6(__read_nocancel+0x8) [0x119cd8] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_underflow+0x186) [0x8ccb6] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_default_uflow+0x36) [0x8de16] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_getline_info+0xac) [0x8049c] > /usr/lib/x86_64-linux-gnu/libc.so.6(fgets_unlocked+0x45) [0x8a3b5] > /usr/lib/x86_64-linux-gnu/libc.so.6(__nss_readline+0x4b) [0x154ecb] > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0x82) [0x15ab92] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683] > /usr/bin/id() [0x621e] > /usr/bin/id() [0x2fc5] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40] > /usr/bin/id() [0x32e5] close(3</etc/passwd>) = 0 > /usr/lib/x86_64-linux-gnu/libc.so.6(__close_nocancel+0xb) [0x119a1b] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_close_it+0x70) [0x8bf80] > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_fclose+0x11f) [0x7ee0f] > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0xd5) [0x15abe5] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f] > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683] > /usr/bin/id() [0x621e] > /usr/bin/id() [0x2fc5] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90] > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40] > /usr/bin/id() [0x32e5] uid=1000(hiboma) gid=1000(hiboma) groups=1000(hiboma),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev) +++ exited with 0 +++
やったー! すぐにつかえる!
動作環境
hiboma@vps:~$ uname -a Linux vps 5.15.0-60-generic #66-Ubuntu SMP Fri Jan 20 14:29:49 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
hiboma@vps:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy hiboma@vps:~$
感想
- 見慣れないオプションがたくさんあるから もうちょい調べてみたい
- 最近は strace 使ってあれこれ調べるって機会、減ったなぁ