免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5189 | 回复: 6
打印 上一主题 下一主题

[系统安装] fedora中reboot的一个奇怪现象 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-08 17:41 |只看该作者 |倒序浏览
运行下面两个操作
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

论坛徽章:
0
2 [报告]
发表于 2014-01-08 21:58 |只看该作者
这些命令后面是可以带一些参数的,谷歌搜一下

论坛徽章:
0
3 [报告]
发表于 2014-01-08 22:05 |只看该作者
狂热粉丝 发表于 2014-01-08 21:58
这些命令后面是可以带一些参数的,谷歌搜一下


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

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
4 [报告]
发表于 2014-01-09 08:44 |只看该作者
不一样的.

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

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

我没看过 systemctl 的代码, 但可以猜一下
  1. if (ARGV[0] == 'shudown') {
  2.     shutdown()
  3. } elseif (ARGV[0] == 'reboot') {
  4.     reboot()
  5. } else {
  6.     usage()
  7. }
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
5 [报告]
发表于 2014-01-09 09:10 |只看该作者
/usr/bin/systemctl  看这个的源码。

论坛徽章:
0
6
发表于 2014-01-09 09:33
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2014-01-09 15:53 |只看该作者
q1208c 发表于 2014-01-09 08:44
不一样的.

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


的确如此,已经测试,shell在执行进程时传递的argv[0],确实是连接名!多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP