Отвечать на вопрос в предмете:
Когда каталог B создается в Unix, он добавляется как новая запись в другой каталог A (его родительский каталог), и в B, две записи добавляются: один названный .
как жесткая ссылка на себя и один названный ..
как жесткая ссылка на A.
Это - единственные жесткие ссылки на позволенные каталоги (хотя некоторые более старые версии некоторых Нельдов действительно также позволяли произвольные ссылки).
вот почему с большинством файловых систем (btrfs
будучи существенным исключением), количество links
из каталога признак того, сколько подкаталогов он имеет (составление их ..
записи).
Когда Вы переименовываете/перемещаете каталог, если это к тому же каталогу (под другим именем), только запись имени в A
изменяется. B .
и ..
не затронут. Но если Вы перемещаетесь, это делает другой каталог, затем ..
в B
изменится. Это объясняет, почему можно переименовать каталог, на котором у Вас нет доступа для записи (предполагающий, что у Вас есть доступ для записи к родительскому каталогу), только, пока Вы не перемещаете его в другой каталог (иначе потребность измениться ..
запись препятствует тому, чтобы Вы переместили его).
Остерегайтесь хотя: /a/b/../c
не мог бы совпасть с /a/c
потому что /a/b
могла бы быть символьная ссылка на некоторый другой каталог.
Исключение к этому - когда тот путь дан cd
управляйте к некоторым оболочкам. Они cd
s обработка ..
логически игнорирование ..
записи в каталогах. Причина, почему Вы часто видите cd -P
в правильно записанных сценариях, для отключения той опции, которая могла иначе вызвать беспорядок и несоответствия.
Считать количество записей в текущем каталоге, исключая .
и ..
с bash
, можно сделать:
shopt -s nullglob dotglob
set -- *
echo "$#"
С zsh:
f=(*(ND))
echo $#f
Портативно:
find . ! -name . -prune -print | grep -c /
Вместо того, чтобы унавоживать с полномочиями /var/log
Я думаю, что пошел бы направление предоставления этих пользователей sudo
права для ограниченного набора команд.
Можно создать псевдоним команды в /etc/sudoers
файлы как так:
Cmnd_Alias RDONLY_VARLOG = tail /var/log/messages, tail /var/log/maillog, ...
Затем предоставьте пользовательский доступ к этому псевдониму команды, снова в /etc/sudoers
файл.
# single user
user1 ALL = RDONLY_VARLOG
# group of users (group1)
%group1 ALL = RDONLY_VARLOG