Bạn có thể sử dụng 'strace' để chạy tập lệnh và xem mọi thứ tập lệnh và quy trình con của nó, bao gồm tìm kiếm và mở tệp. Ví dụ:
$ cat foo.sh
#!/usr/bin/env bash
touch /tmp/foon
$ chmod +x foo.sh
$ strace -f -e execve,access,open,stat -o foo.trace ./foo.sh
$ cat foo.trace
32176 execve("./foo.sh", ["./foo.sh"], [/* 42 vars */]) = 0
32176 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
32176 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
32176 open("/usr/local/lib/tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
...
32176 execve("/bin/bash", ["bash", "./foo.sh"], [/* 42 vars */]) = 0
...
32177 execve("/usr/bin/touch", ["touch", "/tmp/foon"], [/* 41 vars */]) = 0
32177 open("/tmp/foon", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
...
32176 --- SIGCHLD (Child exited) @ 0 (0) ---
$
Tôi đã cắt rất nhiều hoạt động khác đang diễn ra ở đó (mở thư viện hệ thống; tra cứu dữ liệu miền địa phương và hơn thế nữa). Kiểm tra 'man strace' để biết chi tiết về ý nghĩa của các tùy chọn; -f, -o, và -e là những cái tôi sử dụng thường xuyên nhất.
Nguồn
2010-11-09 22:42:00
Câu hỏi thú vị - không tầm thường để trả lời. Hãy xem xét theo dõi đầu ra từ 'sh -x' (nhưng điều đó chỉ hiển thị cho bạn các lệnh được thực thi, chứ không phải những lệnh không được. –