Por que o ls -la não mostra que o diretório atual é symlink?

4

Isso é mais uma curiosidade, mas notei que /etc/httpd/logs é linkado simbolicamente para /var/log/httpd , mas quando eu estou dentro de /etc/httpd/logs e eu faço ls -la eu vejo:

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

Por que a entrada . não mostra lrwx.... ?

Mas quando vou para /etc/httpd e faço ls -la , vejo:

lrwxrwxrwx 1 root root   19 Mar  4 17:12 logs -> ../../var/log/httpd
    
por jscott 21.03.2013 / 21:03

3 respostas

6

Posso responder com uma pergunta? Assumindo que você está em uma instalação do RedHat / CentOS aqui ...

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

A resposta curta é quando você está "dentro" de /etc/httpd/logs (o link simbólico) você está dentro de /var/log/httpd , que é um diretório.

cd /etc/httpd/logs/
pwd
  # /etc/httpd/logs
pwd -P
  # /var/log/httpd  
    
por 21.03.2013 / 21:25
4

. indica o diretório atual. Uma vez que você cd para um symlink, você está no diretório de destino. O que você está vendo não é um erro ou um problema de qualquer tipo. É assim que os links simbólicos funcionam em sistemas unix. Se você quiser ver o link simbólico quando você lista arquivos, então fique no diretório pai onde o symlink atual existe.

    
por 21.03.2013 / 21:38
1

Por padrão, cd vai "seguir" o symlink, mas depois define a variável PWD systems com /etc/httpd/logs . Então, quando você usa cd .. , ele usa a variável PWD como referência. ls não. Ele pega a localização física de onde você está (/ var / log / httpd), assim como /bin/pwd , mas o shell interno pwd usa a variável $ PWD.

Então, quando você clica em / etc / httpd / logs, você realmente acessa / var / log / httpd. É por isso que quando você faz ls -la , você vê. como um diretório e não um link simbólico. Então, quando você usa o cd para voltar, ele lembra que você estava em / etc / httpd e usa isso como referência.

Se você faz cd -P /etc/httpd/logs , com -P significando 'físico', você pode ver que cd define o PWD como / var / log / httpd.

(desculpe, minha resposta foi um misto de sua pergunta e pergunta jscotts)

    
por 21.03.2013 / 21:42