當你執行未知程序時,就表示你所做的這件事對系統可能造成危險。計算機病毒與蠕蟲經常是以此方式散佈。
如果程序時腳本,你便能進入一窺究竟。但如果它是像黑盒子一般的二進制影像文件,你就無從得知它的行行爲了。
這類程序通常會讓用戶覺得不安,我們多半不會以root的身份執行它。這時,有一個能追蹤系統調用的日誌就很有用了,它可以幫助你找出安裝程序究竟做了些什麼。就算你太晚知道而不乏恢復已刪除的或已更改的文件,至少你可以知道哪些文件已受到影響,如果你的文件系統備份或快照還在,便能馬上恢復此災難。
很可能你的系統裏就有一個這樣的程序,試試下面的命令:ktrace、par、strace、trace或truss。
linux:strace
$strace cat /dev/null execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0 brk(0) = 0xab1000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) ...
Solaris:truss
BSD和MAC OS X的ktrace命令有點不太一樣,它們是將追蹤結果寫成二進制文件:ktrace.out,之後再執行kdump將其轉換爲文字形式
小應用:
有些程序不正常終止時,可能會在文件系統中留下殘留數據。這些數據本應該刪除,除了浪費空間,還可能在下次執行程序時發生問題。例如daemon、郵件客戶端、編輯器、數據庫等都會產生鎖。如果非正常終止,可能會導致鎖文件沒被刪除,導致第二次啓動失敗。
下面是在Solaris上,如何找出有特定瀏覽器所產生的鎖定文件:
$truss -f -o foo.log mozilla
$grep -i lock foo.log
29028: symlink("192.168.253.187:29028", "/home/jones/.mozilla/jones/c7rboyyz.slt/lock") = 0
.....
29028: unlink("/home/jones/.mozilla/jones/c7rboyyz.slt/lock") = 0
不過鎖文件不見得總是有lock這個字在其中,所以有時你可能得更仔細審視追蹤日子,找出你要的鎖文件