Chr*_*urm 7 executable symlink filenames
一直困扰我一段时间的一件事是:
% which halt
/sbin/halt
% file /sbin/halt
/sbin/halt: symbolic link to `reboot'
Run Code Online (Sandbox Code Playgroud)
但是,执行sudo halt
当然不会重新启动系统。这是为什么?
例如,还有其他几个程序以这种方式工作pdflatex
。
Mik*_*kel 13
每个程序都可以看到用于运行它的完整命令行(除了通配符和变量,shell 扩展了它们)。
在 C 程序中,命令行存储在 中argv
,它是参数向量的缩写。
程序的名称是 的第一个元素argv
,即argv[0]
。
很明显,在halt
和的情况下reboot
,程序正在根据 改变其行为argv[0]
。
从 bash 中,您可以看到用于使用ps -p <pid> -o cmd
或运行程序的完整命令行cat /proc/<pid>/cmdline
。
请注意,还有另一种称为硬链接的链接将具有相同的效果。在我的示例系统,sudo
并sudoedit
与两个不同的名字,不同的行为相同的文件。
ls -i
可以帮助您找到这些命令,例如:
$ ls -il | awk '$3 != 1 { print }'
total 156872
2491111 -rwsr-xr-x 2 root root 127560 2011-01-20 05:03 sudo
2491111 -rwsr-xr-x 2 root root 127560 2011-01-20 05:03 sudoedit
Run Code Online (Sandbox Code Playgroud)
man ln
如果您不熟悉硬链接,请参阅有关硬链接的更多详细信息。
归档时间: |
|
查看次数: |
1086 次 |
最近记录: |