Взгляните на ACL . С помощью этого вы можете контролировать доступ конкретного пользователя к локациям. Таким образом, вы можете ограничить доступ к основному каталогу диска с помощью:
setfacl -m u:unwelcome_guest:000 /1/2/3/the_top_of_some_fs
Надеюсь, /1/2/3/the_top_of_some_fs
понятно.
Общий вопрос о создании файлов см. в:Почему нет команды оболочки для создания файлов?
Как с > file
, так и с echo >> file
оболочка создает файл, если он еще не существует.
С помощью > file
файл усекается, если он уже существовал. Команда не указана, поэтому в файл ничего не записывается, и файл будет пустым.
echo
без аргументов выводит пустую строку. Таким образом, вывод содержит символ конца строки, обычно перевод строки (LF,\n
):
% echo | od -c
0000000 \n
0000001
Таким образом, с помощью echo >> file
в файл записывается один байт. Если бы файл уже существовал, то к нему был бы добавлен один байт, потому что вы использовали>>
(append )вместо>
(overwrite ).
touch
создает файл, если он еще не существует, и обновляет временные метки в противном случае. touch
не изменяет содержимое файла, поэтому, если он уже существует и содержит какое-то содержимое, после touch
содержимое останется прежним.
То, что вы хотите использовать, зависит от того, какой эффект вы хотите.
ответ муру хорошо объясняет различия в поведении.
В зависимости от того, что вы хотите, может быть несколько способов добиться одной и той же цели. В этом случае это может быть вопрос «вкуса» или удобочитаемости. Я предпочитаю touch
. Возможно, это безопаснее -, если файл уже существует и вы не хотите потерять его содержимое. Это тоже памятно.
Если вы пишете команды в сценарии, общее правило заключается в том, что люди читают код чаще, чем вы его пишете. т.е. вы общаетесь с людьми -, включая себя в будущем -, а не только с компьютером :-). Следующая строка кода может показаться вам -не совсем очевидной.
> file
Если вам нужно точно такое же поведение, как > file
, есть также команда с именем truncate
. truncate
предоставляется GNU coreutils.