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

Странное поведение с разрешением на выполнение

Для упражнения - я удалил разрешение на выполнение для других из / bin / pwd:

$ chmod o-x /bin/pwd
$ ls -l /bin/pwd
-rwxr--r-- 1 root root 26568 Apr 28  2010 /bin/pwd

и, поскольку зарегистрировано как matt, я не могу выполнить / bin / pwd, как ожидалось:

$ /bin/pwd
$ -bash: /bin/pwd: Permission denied

но внезапно он может быть выполнен, если не абсолютный:

$ pwd
/home/matt

Зачем? Спасибо!

pwd - это встроенная оболочка. Вы можете увидеть это с

$ type pwd
pwd is a shell builtin

pwd встроен в большинство оболочек. Одна из причин этого заключается в том, что это очень простая команда, которая используется довольно часто (и запуск встроенной программы происходит быстрее, чем запуск внешнего процесса). Другая причина в том, что он позволяет оболочке отслеживать символические ссылки, так что cd /foo/bar; pwd показывает /foo/bar даже если bar является символом /wibble (в bash и многих других оболочках вы можете использовать pwd -P показывать /foo/bar и pwd -L показывать /wibble; по умолчанию контролируется -o physical вариант).