use*_*985 13 bash self-destruction
即使在遇到要删除自身的语句之后,bash脚本如何执行?例如,当我运行test.sh脚本时,该脚本具有以下特征:
<--some commands-->
rm test.sh
<--some more commands-->
end
Run Code Online (Sandbox Code Playgroud)
脚本在删除之前执行到结束
w00*_*00t 24
实际发生的是bash保持文件打开,rm
不会停止.
所以rm
调用libc函数"unlink()"将从它所在的目录中删除inode的"链接".这个"链接"实际上是一个文件名和一个inode号(你可以看到inode号码ls -i
).
只要程序打开,inode就存在.
您可以按如下方式轻松测试此声明:
$ echo read a> ni
$ bash ni
Run Code Online (Sandbox Code Playgroud)
而在另一个窗口:
$ pgrep -lf bash\ ni
31662 bash ni
$ lsof -p 31662|grep ni
bash 31662 wmertens 255r REG 14,2 7 12074052 /Users/wmertens/ni
$ rm ni
$ lsof -p 31662|grep ni
bash 31662 wmertens 255r REG 14,2 7 12074052 /Users/wmertens/ni
Run Code Online (Sandbox Code Playgroud)
即使您无法再在ls中看到该文件,该文件仍会打开.所以不是bash读取整个文件 - 直到bash完成它才真正消失.
归档时间: |
|
查看次数: |
7874 次 |
最近记录: |