ααΆαααΆααααα αΆααααααααααααα»αααΆαα αααΎαααΊααΆαααΆααα±ααααααΎααααΆαααααααα·ααΈ αααααΆααααααΆαααα»αα αααΆααααα αααΎααααα»αααΆαααααΆααΆαααααΎααααα½αααΌα ααΆα
- αααααα·ααΈαααααααΎαααΆααααααΆααα’αααα’αα·αααααα ααα»αααααα·αααααααααΆαααααα»αααα α ααα»α’αααΈ?
- αααα·ααα·α αααααα·ααΈαααααααΎαααΆααααααΆαααααα»α ααα»αααααααααααααΆαα·αααααΎαααΆαααα α ααα»α’αααΈ?
αααααΊααΆααααααααααΆαααααΆααααα α»αααααα»αααΈααΆαααααα α»ααααααα·ααΈααααααΆα ααΆαααααΆααααα α»αααΆαααααΆααααΊαα·ααΆαα’αααΈαααααα·ααααΆααααΌα ααα»ααααααΆαααααΆααααα α»αααααΆαααΆαααααααΆαααΊαα·ααΆαα’αααΈα’αααααααααααΆαααΌα αα·αααα·ααααΆαα αααααΈααΆα«αααααααααα αΆααΊααΆααα α»αα‘αΌααΈααααααα ααΆααα·ααααααΆα’αααΈαααααΎαααΆαααΎαααΆαααΈααα½α αα·ααα·αααααα ααΎαααΆαααΈααα½αααααααααααΆααααααΆαααα αΆααΊαα αααα»αααα·ααααΆαα
ααΌα αααααααα½αα±ααα§αααααααααΆααααα α»αααααααΆααΌα ααΆ gdb αααα»αβααΆαβα§αααααβαααααβααααΆβαααααΆααβααΆαβααααΆααβααα α»αβααΆαβααΆααβαααααΆαα α αΎαα§αααααααααααα»αα αΌαα α·ααααααααΆαααααααααΆααααα αΆααΌα ααΆ "α ααα»α’αααΈαααααα·ααΈααααα·αααααΎαααΆααααααΆαααααα»α?" α α αααα.
ααΎβα’αααΈβαα βααΆβαααα?
αααααα·ααΈααΌαααααΆαααΊααΆααααααΆααα α’αααααααΆααααααααΌαααΆαααα strace ααΆαα½αααΉαααΆααααααααΆααΆαα½α α αΎαααΆααΉααα»αααΆαα α ααΆαααααααααααΆααα’αα (αααααΈααΆααααΌαα’ααααααα ααααΆααααΌαααα‘αΎαααΆααααααα½αα―ααααααα αααα):
$ strace echo Hello
...Snip lots of stuff...
write(1, "Hellon", 6) = 6
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
ααΎααΆαα α ααααααααααΆαααααααΆα’αααΈ? αααααΊααΆα’αααΈαα½αααΌα ααΆ API αααααΆααααΊαααααααααααααααα·ααααα·ααΆαα ααΆαααααα½α αααααα·ααΈααΆαα αΌαααααΎαααααααΆαααα ααΆαααααααααΉααααααΆααααΎαααΆαα α§ααΆα ααα ααααα·αααΎβααΆβααααΌαβααΆαβααΎααααΈβαααα αΆαβα’αααΈβαα½αβαα βααΎβα’αααααα ααΆβααΆαβαααβααΆαα½αβα αααβα¬βααΆαβα α»ααααααβαααβααΆαβααΌαβαααααΈβα’αααα αα αΆαβαααααΆααβα§αααααβααΈααα’αΌα αα αααααααααααααααα»αααααΌααααα α»αα»αααΆαααΆαααααΆαααΆααΆαααααα·αα ααΆαααΉαααααΆαααααααααααα αααααααααααα·ααΈααααααααΆαααΆααα»αααΎαααααααΉαα ααα α»αβαααα»αβαααααα·ααΈβαα½αβα’αΆα βααααΎβα±ααβα’αααβαααααβααααΆααβα α»α ααΎβαα·ααααβααααααααβααΆααααΌαα αααααΆαααα ααααα―ααα·αααα· (α¬ "ααΆαααΆαααΆαααα‘αααααα") ααΆααααα αΆααααα½ααα αααα»ααααΈααΈααΌα ααΊαααααΆαααααΆαααΆα―ααα·αααα·αααα»αα ααΆααα½αααΆαααΆαα αΌαααααΎαααΆααααααααα ααΆαααααααααΉα αααααΎααααααα·ααΈαααααΆααα·αααα·αα·α ααΆααα»α αααααααΌαααααααΎαα»αααΆαα αΌαααααΎααΈααΊααααα½α α αΎαααΎααααΈααααΎα’ααααααααααΆαα½ααααααααΉαααΆααααααΆαα α ααΆαααααααααα
αα ααααα·ααααααΈα ααΆαα α ααααααααααΊαα»αααααΆααααα·α ααααα½α ααΈααΆαα α αα»αααΆαααΆαααα ααα»αααααααααα·ααΈααΆαα αααΎαααααΎ wrapper αα αααα»ααααααΆααααααααααΆαα ααΆαααααα αααααΆααααααααααΆα POSIX C ααΆαααΆαα α αα»αααΆα ααααα ()αααααΆαααΌαααααΆααααααααααΆααααΆααααΆααα’αααααααΆααααΆαα α αααααααα ααααα.
ααα»ααα α’ααααααααααΆαα½ααααΆααααααα·ααΈ αα·αααα·ααααΆαααααααΆ (αααααααααα»αααααΌααα) ααααΌαααΆαα’αα»ααααααΆααααααΆαα α ααΆαααααααααα ααΌα ααααα αΎα αα αααααααααααα·ααΈααααΎαααΆαααΎαααΆαααΈααα½α ααα»αααααα·αααααα ααΎαααΆαααΈααα½ααααααααα ααΆααΆααΆαααα’αααα»αααΆαααΎαααααααααΆαααΆαααΆαα α ααΆαααααααααα αα·αααααΆαααααα ααα αααααΊααΆαααααΈααα ααα»α ααααααΆαααα’αΆα ααααΌαααΆααα·ααΆααααααααΎααΆαααΆαα α ααΆαααααααααα
- αα»αααΌα I/O
- αααααΆα I/O
- ααΆαα αΌαααααΎααααααααα―αααΆα αα·αα―αααΆα I/O
- αααααααααα’αΆαα»ααΆαααααααΎαααΆα
- ααΆααααααααααα’αααα αα αΆαααααα·αααΆα
- α αΌαααααΎαααααα·ααΈαααααΆα§αααααααΆααααΆαα
αααααΆααααΌαααααΎαααα?
αααα»αβααααΉβααααΈ, αααα ααααΎααΆαα½ααααααα·ααΈααΆαα½ααααα»αα αααααα’αααααααΎααααΆαα ααΈααααααααααα·ααΈααΆαα½ααααα»αα αααααα’αααααααΎααααΆααααααΌαααααααΎααΆαα α ααΆααααααααα ααΆααααΎαααΆαααΆααααααΆαααααα·αααααΆαααΆαα½ααααααα·ααΈααααα·αααΆα ααα»ααααααΆααααααΎαααΆαααΆαα½αααΆααΆααααα·ααααααααΌα ααΆ Python ααααα·αααΎα’αααα’αΆα ααΆαααααααααα‘ααααααΆαααααααααΈαααααα αα·αα’αααααααααα
αα
αααα»ααα·ααΈαα»αααΏαααααααΆα αααα αααα αΆαβαααα½αβααΆβαααα»αβααα‘α»αβαααβααααΆααβααα α»αβαααααα·ααΈβαααβααααΎαβααΆαβααΆαβααα’βαα
βααΎβαααΆαααΈαβαα½α ααα»ααααβααααΆααβαααβαααβααααΎβααΆαβααΎβαααΆαααΈαβαα½αβααα αααβαααααΎαβααΆαβαα·αβα
αααΆααααΆααβα’αααΈβα―αααΆα ααΆαβα’αα»ααααΆα α¬βααΆαβααααΆααΆαβαα·αβααΆαβααααααβαααα»αβααΆαβααααα·ααααα·βααΆαααβαααααΆβαα½αβα
ααα½α α¬βα’αααΈβαααααβααα... ααΆβααΆβααΆαβαααααααΆα ααα»ααααβααΆβαα·αβααΆαβααααααβααα αα½ααααα
αΌαααααΆαααΆαααα’ααΆαα½αααΉααααα αΆααααα·ααααααααΌα
ααΆααα α»ααααα»αααΆααααααααααΆαααα·ααααΆααααααα ααΆααααααΆααΆααΆαααΆαααΆααα½ααααα
αΌαααααΆ ααααααααααα
ααΎαβααΉαβααααΎβαααΆαααΈαααβα―αααΆαααβααΆβα§ααΆα ααα ααα»ααααβααΆαβααΆαααΆαβααΆαβα α βααΌαααααβααΆαβααααααααβα’αΆα βααααΌαβααΆαβααααΎβααΆβααΉαβααΆααβαα βααΎβαααα·ααΆβααΆααβαααααΆαβαααβαααα»αααααΆαβααΆαβαααα α’αααααααΆααααααααΌαααααΎαααΎαα§αααααααααΉαααααΌαα
α§ααΆα αααααααΆαααααΆααααα α»αααΆαααα
α αΌααα·ααΆαααΆα’αααα ααααααΎαααΆααααααα·ααΈαααΆαααΈαααααα’ααα αΆααα foo α αΎααααααΊααΆα’αααΈαααα’ααααααα αααααα
$ foo
Error opening configuration file: No such file or directory
ααΆαααΎααα ααΆαα·αα’αΆα ααααΆαα―αααΆαααααααα ααΆαααααααααααα’αααααΆααααααααα ααΆααΎαα‘αΎααααααΆαααααααααααα ααααααα’αααααααααααααααα ααα ααααααααααα·ααΈαα½α αα½αααααα·αααααΈααΆααα―αααΆααααααααΉααα»αα α αΎαααααα·αααΎα’αααααααΎααΆαααΆαααααΆαα’αααΈααΆαααα‘αΎααααααΆααααΆαα ααα αΆααα½α α’αααααααΎαα―αααΆααα»αααααΆααΆαααααα»αααΈαααααααααα’αααααααΉααα»αα αααα αΆα’αΆα ααααΌαααΆααααααααΆααααα»αααααααααΈαααΈαα·ααΆααΈ ααααα·αααΎααΆαααα α»αααααΆαααααααααααααααΌαααααΎαα―αααΆαααααααα ααΆαααααααα ααα»ααααααΆαα·αααααΎαααΆαααα ααΌα αααααααααααααααααΌαααααΎα?
ααααα·αααΎα’αααααΆααα·αααα·α αΌαααααΎααΌαααααα α’αααα’αΆα α’αΆαααΆ αα·ααααααααα’αααΈαααααααααΆαα αααααΆαααααα»ααα»αααααα’ ααα»αααααα·ααααααΆαααααααααΆαααΏααααα»ααααααα α’αααα’αΆα ααΆααα αααααααα·ααΈααααΆααααα α»ααα½αααα αΆααααααααΌα ααΆ gdb α αΎαααΎαααΆαααααα·ααΈααααΎα’αααΈ ααα»ααααααΆααΆαααααα·αααααΆαααΆααααα»αααΆαααααΎα§ααααααααααααΌαααΆααα ααΆα‘αΎαααΆαα·αααααΎααααΈαααα αΆαα’ααααααααααΆαα½αααα·ααααΆαα αααα.
ααα ααααΈααααα·ααααΆα αααα αααα ααβααΆβααΎαβαα βαα·αβα’ααβααααΆαα ααα»ααααβααααΉαβααα’βααΊβααΆβααΆβααΆαβα αααΎαβα’αΆα βααααΌαβααΆαβααβαα·αβα’αΎααΎβαααβαα»ααααα·ααΆαα ααΆααΉαααΆααααΆααΆααααααααααααα»αααΆαααααΎ -o operator ααΎααααΈαααααΆαα»αααααααααΆαααΆααα α―αααΆαααΆα ααααα‘αααα½αα
$ strace -o /tmp/trace foo
Error opening configuration file: No such file or directory
$ cat /tmp/trace
execve("foo", ["foo"], 0x7ffce98dc010 /* 16 vars */) = 0
brk(NULL) = 0x56363b3fb000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=25186, ...}) = 0
mmap(NULL, 25186, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2f12cf1000
close(3) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "177ELF2113 3 > 1 260A2 "..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1824496, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2f12cef000
mmap(NULL, 1837056, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2f12b2e000
mprotect(0x7f2f12b50000, 1658880, PROT_NONE) = 0
mmap(0x7f2f12b50000, 1343488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f2f12b50000
mmap(0x7f2f12c98000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16a000) = 0x7f2f12c98000
mmap(0x7f2f12ce5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x7f2f12ce5000
mmap(0x7f2f12ceb000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2f12ceb000
close(3) = 0
arch_prctl(ARCH_SET_FS, 0x7f2f12cf0500) = 0
mprotect(0x7f2f12ce5000, 16384, PROT_READ) = 0
mprotect(0x56363b08b000, 4096, PROT_READ) = 0
mprotect(0x7f2f12d1f000, 4096, PROT_READ) = 0
munmap(0x7f2f12cf1000, 25186) = 0
openat(AT_FDCWD, "/etc/foo/config.json", O_RDONLY) = -1 ENOENT (No such file or directory)
dup(2) = 3
fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
brk(NULL) = 0x56363b3fb000
brk(0x56363b41c000) = 0x56363b41c000
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x8), ...}) = 0
write(3, "Error opening configuration file"..., 60) = 60
close(3) = 0
exit_group(1) = ?
+++ exited with 1 +++
αααα αααααααααΈαα½αααΆααααΌααααααααα αααα - ααΆααααααΆαααααΊααΆααΆααααα αααααα·αααΆααααααΆααααΆαααΆαααααα ααα (ααΆαα α ααΌααααααα αααΎαα αααΆαα, αα·αααΆαααΆα, αα½α αααααΆααα’αααΈαααΌα ααΆααΆαααααΎαα’αααα αα αΆαααααα·αααΆα αα·ααααα αΆααααααΆαααααΆαααααα) ααΆααα·α ααα‘α»ααααααααΆααααα α»ααααααα αααα ααΆααΆααΆααααααΎααααα»αααΆαα’αΆαααΈααΈαααα ααα ααΆααΉαααΆαααΆαααααα½αααααααααΆαααααα αααααααααααα αΆαααΆαααα α»αα ααΎαααΎααα ααΆαααΎα αΎαααΎαααΆαα α αααααααααααααΆαααα α»αααααΌα - ααΆαα α ααΎαααααααα ααααα α»α ENOENT ("αααα·αααΎαα―αααΆα α¬ααα―αααΆα") αααα»αααααΆααΆαααΎα /etc/foo/config.json. αααααΆαααααααααα―αααΆαααααααα ααΆαααααααααα½ααααααα·ααα α
αααααααΆααααααΆα§ααΆα ααααα½αααα»ααααα ααα»αααααααα»αααΉααα·ααΆαααΆ 90% αααααααααΆααααααα»αααααΎ ααααααααΆαα’αααΈαα·ααΆαααααΎααΆααααααα ααΆαβαααααβαααβααΊβααΆβααααα»αααααααβααααΆααβααα α»αβααΆβααα αΆαβαααβααα αΆαβααααααα
- ααΆαααΆαααα α·ααααααααΆαααααΆααα·αα αααΆααααΆααα’αααΈαααα αΆαααααααα-y ααΈαααααα·ααΈαα½αα
- α αΆααααααΎααααααα·ααΈα‘αΎααα·αααΆαα½α αααα
- αααααααααΆαααα α»ααααα»αααααααααΆαααΆα
- α‘αΎαβαααααβαα αΌαβααΆααβααβα’αααβα α»α βααΆαβα α βααΌαααααβαααβαααΆαααβααΎαβααααΌα
ααΆααααααΆαααααααΆαα α αααααααααααα»αααα αΆαααΈ 4 ααΉααααα αΆαααΈα’αααΈααααα»αα
ααααααΆααααα½α
αα»αααααααα αΆαα’αααααΌαα§ααΆα αααααααΆαααααΆααααα α»αααααααα»αααααΆαααΆαααα αααα»αααΉααααα αΆαα’αααααΌααααα·α αα½αα ααα½ααααααΆααααΆαααααΎααααΆααααααααααααααα·αααααΆα αααα:
αα»ααααΊααΆαα·αααααααα’αααα
αα ααΎαααααααα *nix ααΆα αααΎα αααααΈααααααααααΆαα α αααααααααα ααΆααααΊαααα’αΆα ααα½αααΆααααααΆαααααΎαααΆα αα»αα syscalls. α’αααααΉαααΎαα’αααΈαααΌα ααΆ brk(2)αααααΆααααααΆααααααΆαααααααα’αΆα ααα½αααΆααααααΆαααααΎαααΆα αα»αα 2 brk.
αα»ααα½α ααΌα α αα»αα 2 fork αααα αΆααααα»αααΌαααααααααααΆααααα αα () Π² GNU libc, ααα, ααΆααααα αα, ααααΌαααΆαα’αα»αααααααααΆαα α ααΌαααααα ααααΌα(). α α ααΆαααααα·ααααΆ αα αα ααααααααααα·αααΎα’αααααααααααααα·ααΈαααααααΎ αα ()αα·αααααΎαααΆαααΆα - αααα»αααΉααα·ααααααααααΆαα α ααΌααααααααΆαα½αααα αααααα½αα±αααα½αααααΉαααΆα ααααΌα(). αα»ααα½α ααααααααααΎα±ααα’ααααααα ααα‘αααααα»ααααα ααααα·αααΎα’αααα αΆααααααΎααααααααααααααααΆαα½ααα·ααααα αααα.
ααααΎ -o ααΎααααΈαααααΆαα»ααααααααα α―αααΆα
αααα α’αΆα αααααΎααα·ααααααααΆαααΌααααΌααΆα ααΌα ααααααΆααΉαααΆααααΆααΆααααααααααααα»αααΆααααααΆαα»αααααααααΆααα αααα»αα―αααΆαααΆα ααααα‘αα (ααΌα αααα»αα§ααΆα αααααΆαααΎ)α ααααααα½ααααααΆαααΆαααΆααα ααααααΌααααααααααααα·ααΈααΆαα½αααΉααααααααααααα αααα αα αααα»ααα»αααΌαα
ααααΎ -s ααΎααααΈααΎααα·ααααααα’αΆαα»αααααααααααααα
α’ααααααα ααααΆααΆαααααααααΆααααΎαααΆ ααΆαααααααΆαααΈααΈαααααΆαααα α»ααα·αααααΌαααΆααααα αΆααααα»αα§ααΆα αααααΆαααΎααα ααΆαααααΆααα αααα ααααΆαααΎααααα αΆααα 32 ααααααΌαααα’αΆαα»αααααααααα’ααααααα»αααααα ααααα·αααΎα’αααα ααααΎααααααααααααΌαααααααα’αααΈαα½αααΌα ααΆ -s α‘α©α’.α‘α¦α¨.α‘α’α’.α¨α¨ αα ααΆαα α αααα.
-y ααααΎα±ααααΆααΆααααααΆααααα½ααααα»αααΆαααΆαααΆαα―αααΆα αααα ααΆααΎαα
"ααΆααα’ααααΊααΆα―αααΆα" ααΆααααααΆαααααααα *nix ααααΎ I/O ααΆααα’αααααααααΎαααααα·ααΈαααααΆα―αααΆα ααΆααΎααΆα’αα»ααααα ααααα―αααΆα α¬αααααΆα α¬αααααα’ααααααααΎαααΆααααααα ααΆααΆααααα½ααααααΆααααΆαααααααααααα·ααΈ ααα»ααααααααΎα±ααααΆαα·ααΆααααα»αααΆαααΆαααΆαααΌαα’αααΈααααααα»αααΎαα‘αΎααα ααααααα’αααααΎαααΆααΏαααααααΆ α’αΆα ΠΈ ααααα αα αααα»αααααααααα α ααααααααΆαααΆαα
αααααααααααααα·ααααα·αα -yα’αααααΉαααααα αααα αααααα αααΆαα’ααααααααΆα―αααΆαααΈαα½αααα αααα»ααααααααααα αααΆαα’αααΈα’αααΈαααααΆα ααα’α»ααααα αΆαα
ααααΆαααα ααααΎαααΆαααααααα»αααααΎαααΆααα½α α αΎαααΆαα½α -p**
ααΌα αααα’αααααΉαααΎαααΈα§ααΆα αααααΆαααααα αααααααα’αααααααΌαααΆαααΆααααααα·ααΈααααααα»αααααΎαααΆααα½α α αΎαα ααααα·αααΎααααΉαααΆααΆαααα»αααααΎαααΆαααΆααααΎαααΆα 1337 (αα·ααΆαα ααααΈαααααα ps) αααααΆααααα’αααα’αΆα ααΆαααΆαααΆααΌα αααα
$ strace -p 1337
...system call trace output...
α’αααα’αΆα ααααΌαααΆααα·αααα·ααΆ root α
ααααΎ -f ααΎααααΈααΆαααΆαααααΎαααΆααααααα»ααΆα
αααα ααΆαααααΆαααΎα ααΆααΆαααΆαααααΎαααΆααααα½αααα»αααααα ααααα·αααΎααααΎαααΆαααααααααΎαααααΎαααΆααα»ααΆα αααααΆαα α ααααααααααΎααααΈαααααΆααααααΎαααΆααα»ααΆαα’αΆα ααΎαααΎα ααα»ααααααΆαα α ααααααααααααΎαααΆααα»ααΆαααΉααα·αααααΌαααΆααααα αΆαααα
ααααα·αααΎα’ααααα·αααΆααα α»ααααα·ααα
αααα»αααααΎαααΆααα»ααΆα ααΌαααααΎααα
ααααΈαααααααΆααα -fααΆααΉαααΎαααΆαααΆαααΆαααααααΆα αα»ααα·ααααα·αααααΊααΆαα·αααααααΉαααααΎα±ααα’ααααααα
ααα‘αααααααα αααααΆβ αααα ααΆαααΆαααααΎαααΆααα½α α¬αααααααα‘αΆααα½α ααΆαααα αΆαααααΉαααα·ααΆαααα α
ααΌααααααααα½αα αα
ααααααααΆααΆαααΆαααααΎαααΆαααΆα
αααΎααααα»αααααααα½α α’αααα’αΆα
ααΉαααΎαααΆαα
αΆααααααΎαααααΆαα α
ααΌααααααααααααΆααααααΆααα½αα αααααΆαααα - ααΆα
αααααΆαα’αααΆαααΆααααααΆααααΆααΆααααα·ααααα·ααααααααα αΎαααΆααααααααααα - α
α»ααααα
ααααααΈαα½α <β¦foocall αααα>. α¬αααααααααααααΆαααΆααα’αααα
ααΆα―αααΆααααααααααΆ αααααααΎααααα·ααααα·αααααααα -ff (ααααααΆααααα’α·ααα
αααα»α
ααααααΆααααααααΎ -e
ααΌα
αααα’αααα’αΆα
ααΎαααααααααααΆαααΊααΆαααααα·αααααΆααααααΆαα α
ααΆααααααααααααα’αΆα
ααααΎααΆαααΆααα’ααα αααααΆαα· -e α’αααα’αΆα
ααααααΆα (ααΌαααΎα
αα·ααααααα α»αααΆααα’αααα»αααααα’αΆααααααααααα
α§ααΆα αααααΆαααα αα·αααΆααααααΊααΆαααααα·ααΈααααααααααα―αααΆααα ααααααααΆα αααΎααααα»αααααααα½α ααΌα ααΆααααααα»αααααααααααααααΆαα―αααΆααααα’αΆα ααααα·ααααα·ααΆαα
$ strace sh -c uname
...
stat("/home/user/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/bin/uname", {st_mode=S_IFREG|0755, st_size=39584, ...}) = 0
...
Heuristics ααΌα ααΆ "ααααΎααααααΆαααα α»αααααα αα»ααααααΆαααΆαααα’αααΈααα α»α" ααΊααα’αααα»αααΆααααααααααα α»ααααααΆαααααααα ααααΌαααΆααΆααααα’αΆα ααααΎααΆα ααΆααΆα‘αΌααΈαααααα»αααΆαα αΆααααααΎαααΈααΈαααα ααα
ααΆαααααααααααααααααα·ααΈ C α’αΆα αα½αα’αααα±αααααααΈααΆαα α ααΆαααααααααα
ααΆαα α
ααΆααααααααΆααα
ααΆαααααααΆααα C αα·ααααααΆααΆαα α
ααΆααααααααααα ααα»ααααααΆααααααααΆααααααααααΎαααα»αααααα ααΌα
ααααααααα·αααΎα’αααααααααΆαα αα
ααΆααααααα·α
α’αααΈαααα αα·αα’αααΈαααααααΌαααααΎαα
αααα»α C ααΆααΉαααΆααααααΆααααα½ααααααΆααα’ααααααα»αααΆααααα’αααΈααααααααααΆαα α
ααΆαααααααααα α§ααΆα ααα α’αααβααΆαβαααα αΆβαααα»αβααΆαβααααΆααβααα α»αβααΆαβα α
βααΌαααααβαα
βααααααααβαααααΆα ααΌαβααΎαβααααααβαα»ααΆαβααΌα
βααααΆα
α§ααΆα αααααααΆαααααΆααααα α»αααααααα»αααααΆαααΆααααα
αααα»αααΆααα·ααΆααα½α α αΎαααΆα§ααΆα αααααααΆαααααΆααααα α»αααΆααααααΊααΆα§ααΆα αααααα’αααΈααααααα»αααΆαα αααΎαααααΌααααααααΆααα αααααααΎααΆαααΆαα½α αααα. ααααααΆαααΆααααα αααααααααΆααααΎαα’ααααααα·αααααΆααααΊααααΌαααΆαααΆαααΆα ααΌα αααααααααΊααΆα§ααΆα αααααΆαααααααααααΆαααααΆααααα α»αααααα·ααααααααΆααααα
# crontab -e -u logs
bcrontab: Fatal: Could not create temporary file
ααααααα ααΆααααααΆ bcron ααααΆααΆααααααα―αααΆαααΆααααΆαααα½α ααα»ααααααΆαα·αααααΎαααΆα α αΎαααΆααααΉααα·αααα½αααααΆααααΆα ααα»α’αααΈαααααα ααΆαααΆααααααΆα αααα:
# strace -o /tmp/trace crontab -e -u logs
bcrontab: Fatal: Could not create temporary file
# cat /tmp/trace
...
openat(AT_FDCWD, "bcrontab.14779.1573691864.847933", O_RDONLY) = 3
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
read(3, "#Ansible: logsaggn20 14 * * * lo"..., 8192) = 150
read(3, "", 8192) = 0
munmap(0x7f82049b4000, 8192) = 0
close(3) = 0
socket(AF_UNIX, SOCK_STREAM, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/bcron-spool"}, 110) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
write(3, "156:Slogs #Ansible: logsaggn20 1"..., 161) = 161
read(3, "32:ZCould not create temporary f"..., 8192) = 36
munmap(0x7f82049b4000, 8192) = 0
close(3) = 0
write(2, "bcrontab: Fatal: Could not creat"..., 49) = 49
unlink("bcrontab.14779.1573691864.847933") = 0
exit_group(111) = ?
+++ exited with 111 +++
ααΆαααΆαααα α»ααα αα·αα α»ααααα αα αααααααα»ααααααΎααααααΆαα’αααΈαααααα ααΈαα½α αα·αααΆαααα α»ααααα»αααΆαα α αααααααααααααΆααααααα αααααΆααααααΆααΎαα‘αΎααα»ααααααα ααΈααΈα ααΆα αααΆααααΆααααΆααααααααΆαα½αααΆαααααΆααααΆααααΆαα’αΆαααΆαααα α»ααα½α α αΎαα ααΆα αΆααααΌα ααΆαααα αΆαα·ααα ααααααααααα bcrontab ααααΆααααα αΆααααΆαα‘αΎααα·αα
ααααα·αααΎα’ααααααα‘ααααΎα αα»αα 2 α’αΆαα’αααα’αΆα ααΎαααΎαααΆα’αΆαα»αααααααΈαα½α (3) ααΊααΆαααααα·ααΈαα·αααααΆα―αααΆα ααα *nix ααααΎαααααΆααααααΎαααΆα I/O ααΆααα’ααα ααΎαααα»αα’αΆα ααΉαααΆα―αααΆααα·αααααΆ 3 ααααΆαα±αααααααααααΆ? αααα»αααααΈαα·ααααααα’αααα’αΆα αααααΆαα αααα ααΆαα½αααααα·ααααα·αα -y (ααΌαααΎαααΆαααΎ) α αΎαααΆααΉαααααΆααα’ααααααααααααααααααα· ααα»ααααααΎααααΈαααααααααααα»ααΌα ααα ααΆαα·αααΆααΆααααααααααααα»αααΆαααΉαααΈααααα’αΆα αα·ααααααααααααΆαα
ααααααααααααα·ααΈαααααΆα―αααΆαα’αΆα ααΆααΆαα α ααΌαααααααα½ααααα»αα ααααααααααααααΆα αααΎα (ααΆααΆααα’ααααΊα’αΆαααααααΎα’αααΈαααα’ααααααααΆααΊαααααΆαα - αα»αααΌα αααααααααΆα α―αααΆααααα½αααΆ α¬α’αααΈαααααααα) ααα»ααααααααΌααααααααααΆααΆααααα’αΆα ααααΎααΆαα ααΆαα α ααΌαααααααααααα‘ααααα 3 (α§. ααΎαααααααα β= 3β αα αααα»αααααααααΆαααΆα)α αα αααα»ααααααααααααΆα 2 αααα»αα αααααα½ααα: ααΎα αα ααααΌααα·α αααα αα βααΆααβαβααααΆβαα ααΎα ααΎαα―αααΆαααα»αααα ααΆααα·ααααα·ααα(3) αααααΆααααααΉααααα αΆαααΆααΆαα·ααααααααα (αα»ααα½α α α―αααΆααα·αααααΆα’αΆα ααααΎα‘αΎααα·αααΆααα αααααΎα αα·ααα·α)α α α αααα () αααααα·αααααααααΆααΆα α»ααααααααΈαα»α α’αΆα ()α αΎαααΆααααααΆ bcrontab ααααΎααΆαααΆαα½αα’αααΈαα½αααΆααααααααα αααααΆαααααααΆαααααα αΆαααΆα―αααΆααα·αααααΆααααΌαααΆαααααΆααααΆαα½α αααααααααΌααΈα αα βααΆαααααΌα /var/run/bcron-spool.
ααΌα αααα ααΎαααααΌααααααααααααΎαααΆααααααΆααααααα ααααααΌααΈα αα βααααΆααααα ααΆααααα·α ααΈααααΆααααααΆαααααααααααα αααααΆααααΈααααααΆααααααααααααααΆααααΆαααααΆααααα α»αααΎααΆαααΆαααααααΆααααΆαααΈαααα ααΈαα½αααΊααααΌαααααΎ netstat α¬ααααΈααΆααααα ss (ααααΆαααΆααααα) α ααΆααααααααΆααΆααααΈααααα αΆαααΈααΆαααααΆαααααααΆαααααααααααααααααα αα·αααααα ααααΈαααααααΆααα -l ααΎααααΈαα·αααααΆα’αααΈααααααααΆαα ααααΌα ααΆααααα·ααααα·αα -p ααΎααααΈαααα αΆααααααα·ααΈαααααααΆαααα ααααααΆαααΆαααΈααααααα (ααΆααααααΎαααΆαααααααααααΆα αααΎαααα ααα»ααααααΆααααΈααααααΊαααααααααΆαααααααΆαααα·α αα ααΆααααα )
# ss -pl | grep /var/run/bcron-spool
u_str LISTEN 0 128 /var/run/bcron-spool 1466637 * 0 users:(("unixserver",pid=20629,fd=3))
ααααααα αΆαααΆα’αααααααΆααααΊααΆααΆααααααααΆ inixserverααααΎαααΆαααΆαα½αααααααααΆααααααΎαααΆα 20629α (α αΎαα ααααα ααΆααααΎαααααα·ααΈαα·αααααΆα―αααΆα 3 ααΆααααα)
α§αααααααααΆαααααααααααΈααΈααααααΆααααΆααααααααααααααΆαααΌα ααααΆααααΌαααΆαααα α ααΆ ααΌα αα. ααΆααΆααααααΈα―αααΆαααΎαααΆααα’αα (α¬α―αααΆααα·αααααΆ) αα ααΎααααααααα α¬α’αααα’αΆα ααα½αααΆαααααααΆαα’αααΈα―αααΆαααΆααααΆαααα½αα
# lsof /var/run/bcron-spool
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
unixserve 20629 cron 3u unix 0x000000005ac4bd83 0t0 1466637 /var/run/bcron-spool type=STREAM
ααααΎαααΆα 20629 ααΊααΆαααΆαααΈααααααααΆαα’αΆαα»ααΆαααΌα ααΌα ααααα’αααα’αΆα ααααΆααααΆααΆα αααα αααααααΎα’αααΈαα½αααΌα ααΆ strace -o /tmp/trace -p 20629. ααααα·αααΎα’αααααααααα½αααΆαααΆα cron αα αααα»αααααΆααΈααααααααα α’αααααΉαααα½αααΆαααααααααΆααααααΆαααα α»αα α αΎααααααΊααΆααααααα
accept(3, NULL, NULL) = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21181
close(4) = 0
accept(3, NULL, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21181, si_uid=998, si_status=0, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG|WSTOPPED, NULL) = 21181
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]}) = 43
accept(3, NULL, NULL) = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21200
close(4) = 0
accept(3, NULL, NULL) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21200, si_uid=998, si_status=111, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 111}], WNOHANG|WSTOPPED, NULL) = 21200
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]}) = 43
accept(3, NULL, NULL
(α α»αααααα ααα½ααα () ααΉααα·αααααΌαααΆααααα αααα αααααΆαααΆαα) ααΆααααΈααααααα ααΆα’αα»αα ααααααααααα·αααΆαααα α»ααααααΎααααα»ααααααααααα ααΎααα·αααΎαααΆαααΆαα½αααα bcrontag ααααΎαα α¬ααα½αααΈαααααααααα αααα½ααααα·α ααΆααααααααααααααΎαααΆααααααα (ααααΌα, αααα αΆα α€, SIGCHLD α) ααααΎαααΆαααααααααΎαααααΎαααΆααα»ααΆα αααααΆααααα’ααααααα ααααΆααααΆα ααααΎαααΆααα·αααααΆααα α αΎαααααα·αααΎα’αααααααΌαααΆαα αΆααααααΌαααααααΆα ααΌααααααααα ααΆαα α ααΌααααα ααααΌα -f. αααβααΆβα’αααΈβαααβααΎαβααΉαβααβααΎαβαα βαααβαααβααΎαβαααααβααβααΆαβααα α»αβαααα»αβααααααβααααΈβααΆαα½αβααΉαβααααβ -f -o /tmp/trace -p 20629:
21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111) = ?
21470 +++ exited with 111 +++
α₯α‘αΌαααα αααααΆα’αααΈαα½αα ααααΎαααΆα 21470 ααα½αααΆαααα α»α "ααΆαα αΌαααααΎαααΆαααααΌαααΆαααα·ααα" αα αααααααΆααΆααααααΎαα―αααΆααα ααααΌα tmp/spool.21470.1573692319.854640 (ααΆααααααΉααααααΈααΆαααΆααα αα α»αααααα) α ααααα·αααΎααΎαααΎαααααααΆαααααααΈααΆαααΆααα αα α»αααααα ααΎαααααΉαααααΆααααααΌααααααα αα·αα’αΆα ααααααααααΈααΌαα ααα»αααααααΎαααΆααα·αα’αΆα αααααΎαα―αααΆαααααααα’αΆααααααααααΆαα αααα»ααααα ααΆα’αα»αα ααααΎαααΆαααΆαα αααα½α α αΎα ααΌα ααααα’ααααα·αα’αΆα ααααΆααααααααΎααΆαααα lsof -p 21470 ααΎααααΈααααααααααα αα α»αααααα ααα»ααααα’αααα’αΆα ααααΎααΆααααα»ααα·ααα αααα»α - ααααΎαααΆαα α ααΆααααααααα PID 21470 αααααααΆααααααΌαααα (ααααα·αααΎαα·αααΆααα PID 21470 ααααΌαααααΆαααα½αααααααΈαͺαα»αααααΆαααααααΆ α αΎααααααΊααΆαααα lsof - αα αα·αα’αΆα ααααΌαααΆαααααΎαααα) ααΆαα α ααΆααααααααααααααΊ αααΈααΈ (αααααΆααααα½ααααααααααααααα½αααΈαααΆαααΈααααααααααΆαα’ααΈαααΊαα·αααααΎα)α α αΎααααααΊααΆααααααααααΆαααααααααααα αααΆααααααα’ααααΎααααααααΆαααΆα ααααααααααααΆααα ααΆαααααΆαααΈααα PID 20629α
20629 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21470
...
21470 execve("/usr/sbin/bcron-spool", ["bcron-spool"], 0x55d2460807e0 /* 27 vars */) = 0
...
21470 chdir("/var/spool/cron") = 0
...
21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111) = ?
21470 +++ exited with 111 +++
(ααααα·αααΎα’ααααααααα α’ααααααα ααααΆα
ααα’αΆαα’ααααααα»ααααααααα»α
# ls -ld /var/spool/cron/tmp/
drwxr-xr-x 2 root root 4096 Nov 6 05:33 /var/spool/cron/tmp/
# ps u -p 20629
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
cron 20629 0.0 0.0 2276 752 ? Ss Nov14 0:00 unixserver -U /var/run/bcron-spool -- bcron-spool
αααβα αΎαβααΆβααααααβαααβααααβααααΌαβααΆαβααβαααβ! αααΆαααΈαααααααΎαααΆαααΆα’αααααααΎααααΆαα cron ααα»ααααααΆααα root ααα»ααααααααααΆααα·αααα·ααααααα αα /var/spool/cron/tmp/. ααΆααααααααΆααΆαααα chown cron /var/spool/cron/tmp/ ααΉαβααααα bcron ααααΎααΆαααΆαααααΉαααααΌαα (ααααα·αααΎααααα·ααααααΆαααα αΆαα αααααΆαααααααααααααααααα»αααΊαααΌαα»ααα»ααααα·ααΆαααΊαααααΌα ααΆ SELinux α¬ AppArmor ααΌα αααααααα»αααΉααα·αα·αααααΎααααααα ααα»ααΆαααΊαααααΆαα½α dmesg.)
ααα»α
ααΆαααΆαα α ααΆαααααααααα’αΆα ααΆαα αααΎαααΎαααααααααΆααα’αααα αΆααααααΎαααααΌα ααα»αααααααα»ααααααΉαααΆαααα»αααΆααααα αΆαααΆαα½αααααΊααΆαα·ααΈαα αααααα»αααΆαααααΆαααααα αΆααΌαα ααααΆαααααΎααααΆααααΌαα α αααααααΆααααΆααΆαααααΆααααααΎαααΆααα α»ααααΎαααΆα bcronαααααααΎα§αααααααααΆααααα α»αααΆααα αΆα α α
ααΆαααααααααααααααααααααααααΆααααααααααΆααααααΆαα α ααΆαααααααααααΆαααΆαααααΆα ααα»ααααααΌα ααααααα»αααΆααα·ααΆα ααααΎααααααααααα ααΆαααααΎ αααααααα»αβααααΆααβααβααα½αβααΆαβααααααβααΆαβα αΎαβαααααβααβααα α»αβα αΆααβααααΎαβααΈβα α»αβαααα ααα αααΆαβααΆβααβααα αααα αα½ααααα»αααααααααααααΆα αααΎαααΎααΆαααααα α»αα αααα»ααααααΉαααΆααΆααΉαααΆααααααααααααααΆααα’ααααααααα
ααααα: www.habr.com