为什么 ls -la 没有显示当前目录是符号链接?

为什么 ls -la 没有显示当前目录是符号链接?

这更像是一种好奇,但我注意到/etc/httpd/logs符号链接到/var/log/httpd,但是当我在里面时/etc/httpd/logsls -la看到:

drwx------ 2 root root    4096 Mar 21 14:58 .
drwxr-xr-x 9 root root    4096 Mar 17 03:10 ..

为何条目不.显示 lrwx....

但当我去看时/etc/httpdls -la看到:

lrwxrwxrwx 1 root root   19 Mar  4 17:12 logs -> ../../var/log/httpd

答案1

我可以回答一个问题吗?假设您在这里安装的是 RedHat/CentOS...

ls /etc/httpd/
  # should return something like:
  # conf  conf.d  logs  modules  run
cd /etc/httpd/logs/
  # Why does this next command fail?
ls ../conf
  # ls: cannot access ../conf: No such file or directory
  # But this next command works?
cd ../conf

简短的回答是,当你在“内部” /etc/httpd/logs(符号链接)时,你实际上是在内部/var/log/httpd,这一个目录。

cd /etc/httpd/logs/
pwd
  # /etc/httpd/logs
pwd -P
  # /var/log/httpd  

答案2

.表示当前目录。一旦您cd进入符号链接,您就进入了目标目录。您看到的不是错误,也不是任何类型的问题。这就是符号链接在 unix 系统中的工作方式。如果您想在列出文件时看到符号链接,请留在实际符号链接所在的父目录中。

答案3

默认情况下,cd将“跟随”符号链接,但它随后会使用 设置PWD系统变量/etc/httpd/logs。这样,当您这样做时,cd ..它会使用 PWD 变量作为参考。ls不会。它会获取您所在的物理位置 (/var/log/httpd),就像/bin/pwdshell 内置 pwd 使用 $PWD 变量一样。

因此,当您使用 cd 进入 /etc/httpd/logs 时,您实际上转到的是 /var/log/httpd。这就是为什么当您执行 时ls -la,您会看到 . 是一个目录,而不是符号链接。然后,当您使用 cd 退出时,它会记住您位于 /etc/httpd 中,并使用该目录作为参考。

如果您这样做cd -P /etc/httpd/logs,其中 -P 表示“物理”,您可以看到将cdPWD 设置为 /var/log/httpd。

(抱歉,我的回答混淆了你的问题和 jscotts 的问题)

相关内容