hzy_free 发表于 2014-01-08 17:41

fedora中reboot的一个奇怪现象

运行下面两个操作
1 在终端中运行"which reboot shutdown"
发现这两个命令的二进制文件为/usr/sbin/reboot和/usr/sbin/shutdown。
2 接着用ls -l /usr/sbin/reboot /usr/sbin/shutdown
发现二者为符号连接,连接的是同一个二进制文件/usr/bin/systemctl。

现在问题来了,既然reboot和shutdown连接的同一个文件,为什么运行时却有不一样的输出和功能。
例如,在终端运行reboot --help,shutdown --help,systemctl --help这三个命令却有着不一样的输出,
且运行reboot,shutdown,systemclt也有着不一样的功能。

求大神解释啊!

注:系统为fedora20 64bit

狂热粉丝 发表于 2014-01-08 21:58

这些命令后面是可以带一些参数的,谷歌搜一下

hzy_free 发表于 2014-01-08 22:05

狂热粉丝 发表于 2014-01-08 21:58 static/image/common/back.gif
这些命令后面是可以带一些参数的,谷歌搜一下

这个我知道。可是问题是按照符号连接的意思,我在终端输入reboot或shutdown(都不带任何参数),应该等于在终端直接输入systemctl,所以结果应该是一样的,可输出的结果却完全不一样啊?联他们的帮助信息都不一样(通过 cmd --help)。难道符号连接本身已经携带了参数了吗?

q1208c 发表于 2014-01-09 08:44

不一样的.

每一个 命令都有一个 ARGV 的参数, 也就是命令本身.

通常我们都不会去使用这个参数. 但在很多的系统命令里, 这个参数是用的.

我没看过 systemctl 的代码, 但可以猜一下 :mrgreen:if (ARGV == 'shudown') {
    shutdown()
} elseif (ARGV == 'reboot') {
    reboot()
} else {
    usage()
}

wenhq 发表于 2014-01-09 09:10

/usr/bin/systemctl看这个的源码。

375710170 发表于 2014-01-09 09:33

hzy_free 发表于 2014-01-09 15:53

q1208c 发表于 2014-01-09 08:44 static/image/common/back.gif
不一样的.

每一个 命令都有一个 ARGV 的参数, 也就是命令本身.


的确如此,已经测试,shell在执行进程时传递的argv,确实是连接名!多谢!
页: [1]
查看完整版本: fedora中reboot的一个奇怪现象