Почему?
Поскольку это sudo
это делает вход; это регистрирует команды sudo. В первом случае, sudo echo
зарегистрирован. Во втором случае, sudo su
зарегистрирован (ищите его в /var/log/auth.log
).
su
"пользователь переключателя", по умолчанию для укоренения. Что-либо, что Вы делаете после этого, не проходит sudo
. Это - почти такое же, как будто Вы вошли в систему как корень; сам вход в систему зарегистрирован, но не каждая команда.
Да, ваша оболочка пытается быть умной при изменении на каталог символьной ссылки:
$ 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
Вы можете получить реальный путь, при этом ссылки разрешаются с помощью realpath
и сравнить вывод
realpath ../../../../..
cd ../../../../..
realpath .
На моей системе:
~/shared $ realpath ..
/home/avdndata/lnk
~/shared $ cd ..
~ $ realpath .
/home/anthon