Я вроде новичок в Linux, и мне интересно , или нет , >
и touch
иметь тот же эффект. Я имею в виду, имеют ли следующие две команды одинаковый эффект ?:
$ > file.txt
$ touch file.txt
Если это так, было бы здорово знать, что я могу просто набрать `> file.txt 'для создания новых файлов.
command-line
lmiguelvargasf
источник
источник
file.txt
уже существует и не пусто, они, конечно, нет.touch
файл, содержащий данные, ничего не произойдет, но если у вас>
файл, он будет удален.Ответы:
И то
touch
и другое>
создаст новый файл, если он не существует. Как показывают следующие команды терминала, когда выtouch
используете существующий файл, время доступа / последнего изменения обновляется. Но если у вас>
есть существующий файл, он усекается, а время последнего изменения обновляется (время доступа - нет). Обратите внимание, что>
не удаляет / не связывает файл. Индекс остается тем же самым - именно поэтому>
/ илиtruncate
обычно используются для очистки файлов журнала даже с дескриптором открытого файла.Как уже упоминалось в комментариях,
touch
это внешняя команда и работает только с файлами.>
это встроенная функция оболочки, которая служит для множества различных целей. Как правило, вы увидите, что он используется какcat source.fil > target.fil
.Длинная форма для очистки файла будет выглядеть так:
Использование
> emptme.fil
выполняет то же самое в компактном формате, не перенаправляя ничего в файл.источник
> file.txt
подходит для очистки файлов журнала.ln foo bar
, а затем удаляете и воссоздаетеfoo
,bar
все еще имеете предыдущее содержимое).rm /var/log/nginx/access.log
nginx был открыт этот файл, то на нем было бы 0 ссылок, но индекс по-прежнему существовал.lsof -c nginx | grep access.log
затем с pidls -l /proc/<pid>/fd/ | grep access.log
и, наконец, cat / proc / <pid> / fd / <имя файла из предыдущей команды> `. Комментировать, хотя это старый. Надеюсь, что это имело смыслМежду ними есть существенная разница.
Touch
команда, используемая для отметки времени файла>
Символ представляет собой стандартный выходной редиректор.Использование двух объяснил
Использование Touch
Если файл не существует, он создаст файл.
Сенсорный обычно используется для создания флагов. Например, если вы хотите найти все файлы в вашей системе два раза, вы можете использовать следующую последовательность команд:
Это создаст следующие файлы (или изменит метку времени, если они существуют):
Теперь вы можете использовать find, чтобы отобразить или обработать все файлы, которые были изменены в этот час (время между этими двумя отметками времени, то есть между 22:00 и 23:00 по 29 сентября 2016 г.).
Это частичный вывод приведенной выше команды поиска:
Использование перенаправления вывода
Символ перенаправления перенаправит стандартный вывод в указанный файл. В зависимости от ваших настроек clobber / noclobber, если может произойти сбой. Noclobber создаст файл, только если он не существует.
Существует несколько версий вывода перенаправления, который включает в себя:
Мы могли бы использовать нашу
find
команду выше, чтобы перенаправить содержимое всех файлов, созданных в течение указанного часа, в файл, который мы могли бы зарегистрировать и изучить позже:источник
file.txt
существует и не является пустым, то> file.txt
очистит его содержимое, ноtouch file.txt
не очистит . Но никто не упомянул, что>> file.txt
это хорошая заменаtouch file.txt
- он создаст файл, если он не существует (при условии, что у вас есть разрешение на это), но он не будет обрезать существующий файл. См. В чем разница между «>» и «>>»?Usage of Output redirection
. Обратите внимание, говорит>>
=Redirect append>
.>> file.txt
это подходящая заменаtouch file.txt
. (Тот факт, что вы единственный человек, который упомянул>>
вообще, является причиной того, что я разместил свой комментарий под вашим ответом, а не под вопросом.)>
является оператором перенаправления вывода оболочки, используемым для перенаправления STDOUT предыдущей команды в дескриптор файла, упомянутый после>
. Если файл присутствует, его содержимое будет усечено, как файлopen(2)
сO_TRUNC
флагом -ed , а если файл не существует, он будет создан.Важно отметить, что этот оператор перенаправления будет обрабатываться оболочкой до запуска предыдущей команды, поэтому это не зависит от какой-либо команды и обрабатывается самой оболочкой.
Обратите внимание, что некоторые оболочки (например
zsh
) будут вести себя по-разному с пустым перенаправлением, как:Типичный обходной путь - добавить команду
:
(true
) no-op:Традиционно основной целью
touch
является изменение временной метки файла, а не создание файла.touch
создает файл, только когда файлов, упомянутых в аргументе, не существует, в противном случае он изменяет время изменения файла на текущую метку времени. Вы также можете изменить время доступа и время создания inode, используяtouch
.источник
zsh
поддерживает пустое перенаправление - оно действует подобно перенаправлениюcat
без аргументов в файл. По сути, все, что вы вводите, будет записано в файл до символа EOF или прерывания. Это отражаетzsh
поведение команды just<file
, которая просто печатает содержимое файла, какcat
и делает. Они могут быть настраиваемыми, я видел<file
открыть файл в пейджере.EOF
(например, делать,cat >file.txt
как вы сказали), гдеbash
достаточно просто делать>file.txt
.touch
обновляет время модификации и время доступа к файлу. Есть варианты обновления только одного или другого. (2) Unix / Linux / POSIX вообще не поддерживают «время создания инода». Некоторые типы файловых систем поддерживают это, но нет универсального способа посмотреть на него, не говоря уже о том, чтобы изменить его. Можете ли вы предоставить ссылку, в которой говорится, что существует воплощениеtouch
, позволяющее пользователю изменять время создания инода?