С OS X Yosemite, используя следующие команды, я получаю следующее:
$ touch .a
$ touch b
$ /bin/ls
b
$ /bin/ls -A
.a b
$ sudo /bin/ls
.a b
Он показывает скрытые файлы (имена которых начинаются с точки) при вызове root и не показывает их (как и ожидалось) при работе от имени обычного пользователя. Это отличается от того, что ls
в Linux (тот, который приходит coreutils
) делает.
Почему так ls
себя ведет?
BSD
иOSX
здесь более уместноОтветы:
Оказывается, эта функция не специфична для Apple. Это особенность систем BSD в целом.
Изначально мне удалось отследить его до источников 4.4BSD-Lite . Он уже присутствовал в этом коммите FreeBSD 1994 года, который импортирует эти источники.
Эта функция также присутствует в OpenBSD, и ее можно найти в этом коммите 1995 года, который утверждает, что импортирует код из NetBSD, поэтому он уже присутствовал в NetBSD .
Затем обнаруживается фиксация NetBSD с 1993 года, которая утверждает, что импортирует код из 386BSD , и эта функция уже есть . Кроме того, этот коммит показывает, что он был там во время разработки 386BSD версии 0.0 в 1991 году, которая, насколько я могу судить, разветвлялась от BSD около 4.3.
Комментарий появился впервые при разработке 4.3BSD-Reno в этом коммите (27 июня 1989 г.) под названием «первая рабочая версия new ls». Оригинальный комментарий сказал:
который был изменен позже в тот же день (хотя я не уверен, что временные метки в этом репозитории полностью верны):
И только в 1992 году были добавлены заглавная буква и точка, что превратило комментарий в то, что мы имеем сейчас:
Но поведение присутствовало в 2BSD по состоянию на 9 мая 1979 года, как видно на этом снимке :
Я не могу найти никакой реальной истории тех времен, но есть также снимок 1BSD 1977 года без этих строк. И без
-A
флага на самом деле.Таким образом, кажется, что эта функция была введена где-то между ноябрем 1977 года (1BSD разрабатывается в тот момент) и выпуском 2BSD в мае 1979 года.
В ходе этого расследования я также обнаружил
-I
флаг, который был добавлен во FreeBSD в 2005 году для отмены этого поведения и был переработан чуть позже.источник
.
была простой ошибкой -ls
предполагалось, что она скрывает только.
каталог, а не все, с чего начинается.
. Перенесемся на несколько десятилетий, и он обычно используется для скрытия опасных файлов и т. Д., А также для скрытия конфигурации системы и т. Д., Поэтому имеет смысл позволить администраторам просматривать эти файлы (для поддержания конфигурации или для поиска скрытых вредоносных программ и т. Д.) ,Вот ссылка на исходный код. Примечание
/* Root is -A automatically. */
. Это функция в версии BSD от Applels
.источник
Root is -A automatically
строку для поиска улик.IIRC, была нить об этом еще в первые дни Usenet (начало 80-х). Эта функция была добавлена в качестве меры безопасности, чтобы злоумышленники не могли легко спрятать файлы / каталоги / исполняемые файлы от sysadmin / root. Теория была в основном «root имеет доступ ко всему, поэтому он должен видеть все».
источник