Назад | Перейти на главную страницу

Почему ls -la не показывает, что текущий каталог является символической ссылкой?

Это скорее любопытство, но я заметил /etc/httpd/logs является символической ссылкой на /var/log/httpd, но когда я внутри /etc/httpd/logs и я делаю ls -la Я вижу:

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

Почему не . вход шоу lrwx....?

Но когда я иду в /etc/httpd и делай ls -la Я вижу:

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

Могу я ответить вопросом? Предполагая, что вы здесь устанавливаете 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  

. указывает текущий каталог. Однажды ты cd на символическую ссылку, вы находитесь в целевом каталоге. То, что вы видите, не является ошибкой или какой-либо проблемой. Вот как работают символические ссылки в системах unix. Если вы хотите видеть символическую ссылку при перечислении файлов, оставайтесь в родительском каталоге, где существует фактическая символическая ссылка.

По умолчанию, cd собирается "следовать" за символической ссылкой, но затем устанавливает PWD системная переменная с /etc/httpd/logs. Таким образом, когда вы это сделаете cd .. он использует переменную PWD для справки. ls не будет. Он получает физическое местоположение того места, где вы находитесь (/ var / log / httpd), как и /bin/pwd но встроенный pwd оболочки использует переменную $ PWD.

Поэтому, когда вы cd в / etc / httpd / logs, вы фактически переходите в / var / log / httpd. Вот почему, когда ты делаешь ls -la, ты видишь . как каталог, а не символическую ссылку. Затем, когда вы используете cd для возврата, он запоминает, что вы были в / etc / httpd, и использует его как ссылку.

Если вы это сделаете cd -P /etc/httpd/logs, где -P означает "физический", вы можете видеть, что cd устанавливает PWD в / var / log / httpd.

(извините, мой ответ был смесью вашего вопроса и jscotts вопроса)