Создать файл в Linux? (Касание и эхо)

Взгляните на ACL . С помощью этого вы можете контролировать доступ конкретного пользователя к локациям. Таким образом, вы можете ограничить доступ к основному каталогу диска с помощью:

setfacl -m u:unwelcome_guest:000 /1/2/3/the_top_of_some_fs

Надеюсь, /1/2/3/the_top_of_some_fsпонятно.

2
21.07.2019, 15:31
2 ответа

Общий вопрос о создании файлов см. в:Почему нет команды оболочки для создания файлов?


Как с > file, так и с echo >> fileоболочка создает файл, если он еще не существует.

С помощью > fileфайл усекается, если он уже существовал. Команда не указана, поэтому в файл ничего не записывается, и файл будет пустым.

echoбез аргументов выводит пустую строку. Таким образом, вывод содержит символ конца строки, обычно перевод строки (LF,\n):

% echo | od -c
0000000  \n
0000001

Таким образом, с помощью echo >> fileв файл записывается один байт. Если бы файл уже существовал, то к нему был бы добавлен один байт, потому что вы использовали>>(append )вместо>(overwrite ).

touchсоздает файл, если он еще не существует, и обновляет временные метки в противном случае. touchне изменяет содержимое файла, поэтому, если он уже существует и содержит какое-то содержимое, после touchсодержимое останется прежним.

То, что вы хотите использовать, зависит от того, какой эффект вы хотите.

4
27.01.2020, 21:58

ответ муру хорошо объясняет различия в поведении.

В зависимости от того, что вы хотите, может быть несколько способов добиться одной и той же цели. В этом случае это может быть вопрос «вкуса» или удобочитаемости. Я предпочитаю touch. Возможно, это безопаснее -, если файл уже существует и вы не хотите потерять его содержимое. Это тоже памятно.

Если вы пишете команды в сценарии, общее правило заключается в том, что люди читают код чаще, чем вы его пишете. т.е. вы общаетесь с людьми -, включая себя в будущем -, а не только с компьютером :-). Следующая строка кода может показаться вам -не совсем очевидной.

> file

Если вам нужно точно такое же поведение, как > file, есть также команда с именем truncate. truncateпредоставляется GNU coreutils.

1
27.01.2020, 21:58

Теги

Похожие вопросы