LinuxSir.cn,穿越时空的Linuxsir!

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

关於 .. 的疑问

[复制链接]
发表于 2009-12-24 12:49:20 | 显示全部楼层 |阅读模式
现有一例如下:
  1. d00m3d@BlackMesa:~$ ll TEST
  2. ls: cannot access TEST: No such file or directory
  3. d00m3d@BlackMesa:~$ mkdir /tmp/TEST
  4. d00m3d@BlackMesa:~$ ln -s /tmp/TEST TEST
  5. d00m3d@BlackMesa:~$ ll TEST
  6. lrwxrwxrwx 1 d00m3d d00m3d 9 Dec 24 12:14 TEST -> /tmp/TEST
  7. d00m3d@BlackMesa:~$ cd TEST
  8. d00m3d@BlackMesa:~/TEST$ ls -l
  9. total 0
  10. d00m3d@BlackMesa:~/TEST$ touch testfile
  11. d00m3d@BlackMesa:~/TEST$ ls -l
  12. total 0
  13. -rw-r--r-- 1 d00m3d d00m3d 0 Dec 24 12:15 testfile
  14. d00m3d@BlackMesa:~/TEST$ mv testfile ..
  15. d00m3d@BlackMesa:~/TEST$ cd ..
  16. d00m3d@BlackMesa:~$ ls -l testfile
  17. ls: cannot access testfile: No such file or directory
  18. d00m3d@BlackMesa:~$ ls -l /tmp
  19. total 4
  20. drwxr-xr-x 2 d00m3d d00m3d 4096 Dec 24 12:15 TEST
  21. -rw-r--r-- 1 d00m3d d00m3d    0 Dec 24 12:15 testfile
  22. d00m3d@BlackMesa:~$
复制代码
何以 cd 跟 mv 两个命令的解释不一样?

cd 解作当前目录的上一层,也就是相对的路径,但 mv 却解作 /tmp/TEST 的上一层,亦即是绝对路径

何以不同?不解,请高人赐教。
发表于 2009-12-24 13:43:22 | 显示全部楼层
Post by "http://zh.wikipedia.org/wiki/符号链接"
符号链接的操作是透明的:对符号链接文件进行读写的程序会表现得直接对目标文件进行操作。某些需要特别处理符号链接的程序(如备份程序)可能会识别并直接对其进行操作。


不幸的是,mv 就算是备份程序,软链接对 mv 不是透明的。
回复 支持 反对

使用道具 举报

发表于 2009-12-24 13:47:35 | 显示全部楼层
作为佐证,软链接对 cp 也不是透明的。
回复 支持 反对

使用道具 举报

发表于 2009-12-24 16:12:12 | 显示全部楼层
目录文件的符号链接 与 普通文件还是有区别的
回复 支持 反对

使用道具 举报

发表于 2009-12-24 16:31:17 | 显示全部楼层
原目录和软链接拥有不同的inode号,是两个不同的目录

cd目录不改变实际的硬盘内容,所以怎么理解 .. 是无关紧要的

mv  cp 实际操作目录inode号,应该严格按照目录的实体结构来操作的
回复 支持 反对

使用道具 举报

发表于 2009-12-24 18:45:56 | 显示全部楼层
我测试了 mv cp ln rm rmdir touch cat nano 这些命令,得出的结论是:除了 cd 和 bash complete,所有的相对地址寻址都遵从真实地址。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-24 19:22:45 | 显示全部楼层
Post by AutoXBC;2058846
[QUOTE]作者: http://zh.wikipedia.org/wiki/符号链接
符号链接的操作是透明的:对符号链接文件进行读写的程序会表现得直接对目标文件进行操作。某些需要特别处理符号链接的程序(如备份程序)可能会识别并直接对其进行操作。
不幸的是,mv 就算是备份程序,软链接对 mv 不是透明的。[/QUOTE]
谢谢 AutoXBC 兄,说明我考虑 ".." 的解说是错误的方向,应该去了解 symlink 的操作才对了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-24 19:23:56 | 显示全部楼层
Post by 飞龙在天;2058913
原目录和软链接拥有不同的inode号,是两个不同的目录

cd目录不改变实际的硬盘内容,所以怎么理解 .. 是无关紧要的

[color="Blue"]mv  cp 实际操作目录inode号,应该严格按照目录的实体结构来操作的

飞龙兄能否作详细一点的说明?
回复 支持 反对

使用道具 举报

发表于 2009-12-24 20:07:15 | 显示全部楼层
猜测的。

软链接应该是为了方便用户操作而设置的这样一种应用。

系统在文件操作时,应该有严格的规则,具有唯一性

我把软链接作为文件的应用层来看,原目录管理是底层。

这是根据对dos文件系统的理解而作的推测。ext文件文件我没做过仔细研究,应该都是差不多的原理。因为硬盘的柱面、磁头、扇区决定了不可能有太多的差异。
回复 支持 反对

使用道具 举报

发表于 2009-12-24 20:24:06 | 显示全部楼层
以前从来没注意过这个问题,幸亏从来没有这么使用相对路径和软连接,又多一个规则。

查了查 man bash, help set, help cd, echo $-。
bash 默认内嵌命令 cd 会跟随软连接,可以使用 cd -P 或 set -P 强制 cd 使用物理目录结构。

查询 inode 可以使用 ls -i 或 stat。
回复 支持 反对

使用道具 举报

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

本版积分规则

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