ls не дает мне то же как CD + ls к той же папке

Почему?

Поскольку это sudo это делает вход; это регистрирует команды sudo. В первом случае, sudo echo зарегистрирован. Во втором случае, sudo su зарегистрирован (ищите его в /var/log/auth.log).

su "пользователь переключателя", по умолчанию для укоренения. Что-либо, что Вы делаете после этого, не проходит sudo. Это - почти такое же, как будто Вы вошли в систему как корень; сам вход в систему зарегистрирован, но не каждая команда.

2
13.11.2014, 00:46
2 ответа

Да, ваша оболочка пытается быть умной при изменении на каталог символьной ссылки:

$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ pwd -P
/home/michas/a

После изменения на символьную ссылку b ваша оболочка притворяется, что вы находитесь действительно в "каталоге" b , но вместо этого символьная ссылка отправила вас в каталог .

См. pwd справки:

  -P        print the physical directory, without any symbolic links

Внешние команды (как ls) будут всегда использовать физический путь, но окружать builtins значение по умолчанию для использования виртуального пути символьной ссылки.

команда cd является встроенной оболочкой и примет значение по умолчанию к интерпретации CD. как "отпуск текущая символьная ссылка", вместо "использования физический родитель". Но можно изменить то поведение. cd справки говорит:

   -P      use the physical directory structure without following symbolic
           links: resolve symbolic links in DIR before processing instances
3
27.01.2020, 22:00

Вы можете получить реальный путь, при этом ссылки разрешаются с помощью realpath и сравнить вывод

realpath ../../../../..
cd ../../../../..
realpath .

На моей системе:

~/shared $ realpath ..
/home/avdndata/lnk
~/shared $ cd ..
~ $ realpath .
/home/anthon
1
27.01.2020, 22:00

Теги

Похожие вопросы