LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 966|回复: 6

关于软链接的问题

[复制链接]
发表于 2005-2-5 13:17:04 | 显示全部楼层 |阅读模式
在redhat as 3.0中(包括很多其它linux),reboot和poweroff都是指向halt命令的软链接
reboot-->halt
poweroff-->halt
但是为什么执行reboot和poweroff的结果是不同的,一个重新启动,一个关机。
 楼主| 发表于 2005-2-7 16:49:47 | 显示全部楼层
顶一下,希望有人能回答
回复 支持 反对

使用道具 举报

发表于 2005-2-8 04:29:35 | 显示全部楼层
我也遇到了同样的问题, 真是不解呀!
回复 支持 反对

使用道具 举报

发表于 2005-2-8 19:25:01 | 显示全部楼层
我把halt作为一个集合来看.
那么reboot 连接的是halt集合中的一个重起动命令.
poweroff连接的是halt集合中的一个关闭电源命令.

实际如何我不知道.但是我认为在理解时可以这么理解.如果你只偏重应用时.
回复 支持 反对

使用道具 举报

发表于 2005-2-8 19:31:50 | 显示全部楼层
这样的情况有很多,今天我刚装好lvm.
所有相关的命令都是链接到lvm这个程序上。
可能是程序运行时会检测自身的名称以决定使用什么参数吧。
深究的话,就要看看源代码了。
[PHP]
pvchange -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 pvcreate -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 pvdisplay -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 pvmove -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 pvremove -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 pvresize -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 pvs -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 pvscan -> lvm*
vgcfgbackup -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgcfgrestore -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgchange -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgck -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgconvert -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgcreate -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgdisplay -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgexport -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgextend -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgimport -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgmerge -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgmknodes -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgreduce -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgremove -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgrename -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgs -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgscan -> lvm*
lrwxrwxrwx  1 root root      3 2005-02-08 12:00 vgsplit -> lvm*
[/PHP]
回复 支持 反对

使用道具 举报

发表于 2005-2-8 19:53:32 | 显示全部楼层
这是cat halt过滤后的信息.
大家帮忙分析下...期盼高人..

这是关于reboot 的:
]# cat halt |grep reboot
#               0 (halt) or runlevel 6 (reboot). It kills all processes,
#               unmounts file systems and then either halts or reboots.
   *reboot)
        message=$"lease stand by while rebooting the system..."
        command="/sbin/reboot"
        echo $"$0: call me as 'halt' or 'reboot' please!"
# Now halt or reboot.


这是关于poweroff的
]# cat halt |grep poweroff
[ -f /poweroff -o ! -f /halt ] && HALTARGS="$HALTARGS -p"
回复 支持 反对

使用道具 举报

发表于 2005-2-8 20:52:29 | 显示全部楼层
呵呵,有意思

刚反汇编看了下,像6692975所说在halt程序里判断了运行程式名称是否是reboot或poweroff,然后halt设置适当的参数调用/sbin/shutdown程序关机或重起

可把软连接reboot改名后运行即关机了(非重启)

部分halt反汇编代码如下

  1. t:08048F6F loc_8048F6F:                            ; CODE XREF: sub_8048F00+2F5j
  2. .text:08048F6F                 mov     ds:dword_804A1B4, eax
  3. .text:08048F74                 mov     edi, offset aReboot ; "reboot"
  4. .text:08048F79                 mov     ecx, 7
  5. .text:08048F7E                 cld
  6. .text:08048F7F                 mov     ebx, ds:dword_804A1B4
  7. .text:08048F85                 mov     esi, ebx
  8. .text:08048F87                 repe cmpsb
  9. .text:08048F89                 jnz     short loc_8048F92
  10. .text:08048F8B                 mov     [ebp+var_10], 1[color=Red]////这里设置是reboot标志[/color]
  11. .text:08048F92
  12. .text:08048F92 loc_8048F92:                            ; CODE XREF: sub_8048F00+89j
  13. .text:08048F92                 cld
  14. .text:08048F93                 mov     edi, offset aPoweroff ; "poweroff"
  15. .text:08048F98                 mov     ecx, 9
  16. .text:08048F9D                 mov     esi, ebx
  17. .text:08048F9F                 repe cmpsb
  18. .text:08048FA1                 jnz     short loc_8048FB0
  19. .text:08048FA3
  20. .text:08048FA3 loc_8048FA3:                            ; CODE XREF: sub_8048F00+D8j
  21. .text:08048FA3                                         ; DATA XREF: .rodata:08049E58o
  22. .text:08048FA3                 mov     [ebp+var_2C], 1 ; case 0x70[color=Red]//这里设置poweroff标志[/color]
  23. .text:08048FAA                 lea     esi, [esi+0]
  24. .text:08048FB0
  25. .text:08048FB0 loc_8048FB0:                            ; CODE XREF: sub_8048F00+A1j
  26. .text:08048FB0                                         ; sub_8048F00+EDj ...
  27. .text:08048FB0                 mov     edx, [ebp+arg_4]
  28. .text:08048FB3                 mov     edi, offset aIhdfnpwt ; ":ihdfnpwt:"
复制代码

下面

  1. .text:0804919B                 mov     edx, [ebp+var_10] [color=Red]//判断上面的reboot标志[/color]
  2. .text:0804919E                 mov     eax, [ebp+var_30]
  3. .text:080491A1                 test    edx, edx
  4. .text:080491A3                 mov     [esp+48h+var_44], eax
  5. .text:080491A7                 mov     eax, offset aR  ; "-r"
  6. .text:080491AC                 jnz     short loc_80491B3 [color=Red] //如果不为0,即是reboot[/color]
  7. .text:080491AE                 mov     eax, offset asc_8049E3C ; "-h"[color=Red] //所以不加-h参数[/color]
  8. .text:080491B3
  9. .text:080491B3 loc_80491B3:                            ; CODE XREF: sub_8048F00+2ACj
  10. .text:080491B3                 mov     [esp+48h+var_48], eax
  11. .text:080491B6                 call    shutdown [color=Red]//这个call里面_execv调用shutdown程序[/color]
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表