我對服務器管理員的看法比開發人員更感興趣。確定正在運行的perl可執行文件的源代碼
作爲一個現實世界的例子,說我有ps的輔助線顯示:
usercom 1696 0.1 0.2 34104 4556 ? Ss 07:33 0:20 ./mail
它本質上不是很明顯,這是一個Perl腳本,但我能確定它是由做「 lsof的-p 1696" ,這使得(除其他事項外):
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
perl 1693 usercom txt REG 0,49 17326 99846241 /home/virtfs/usercom/usr/local/bin/perl
所以這告訴我,這是Perl解釋器爲這個用戶(在OpenVZ的)運行的腳本。
如果我看這個腳本的cwd,它會產生一個不包含「郵件」可執行文件的目錄。
問題什麼是確定當前正在執行的perl代碼的「來源」的一些技術(從服務器管理員的角度)。我已經認識到,確實沒有辦法絕對確定正在運行的perl腳本的「來源」,因爲$ 0很容易被操縱。此外,可以將代碼管入Perl或評估它。不過,有沒有人知道任何追蹤perl腳本根的好方法?
我明白,但是當用戶將$ sh從「sh test.sh」更改爲「bogusfile.sh」時,您會做什麼? – GoldenNewby 2012-02-13 19:05:27
您仍然可以查看'bogus.sh'的pid,並提供相同的信息(使用perl腳本進行測試和驗證)。如果$ pid的'cwd'中有多個腳本,則可以使用'bogus'或grep grep腳本來查看哪些腳本更改'$ 0'(對於Perl)。如果我錯過了某些東西,我很抱歉。 – Woody2143 2012-02-13 19:17:50
我做了一些更多的尋找;在'/ proc/$ pid /'文件'sched','stat'和'status'中包含腳本的原始名稱。我對一個改變'$ 0'的腳本進行了測試。 – Woody2143 2012-02-13 19:22:23