Существует большая разница между перезаписью файла и записью в файл.
Когда вы перезаписываете /dev/null, например,
$ echo Hello > /dev/null
[d5 ] ... он бесшумно отбрасывается. Для этого вам нужны права на запись в /dev/null, которые у всех есть: $ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Mar 18 13:17 /dev/null
Когда вы перезаписываете /dev/null, как и в случае с командой mv, вы заменяете специальный файл /dev/null с тем, что вы там переехали. Не делай этого! Причина, по которой вам нужны привилегии root для этого, заключается в том, что для перезаписывания файла вам нужно писать записи в , в этом случае /dev:
$ ls -ld /dev
drwxr-xr-x 16 root root 4640 Mar 18 13:17 /dev
Чтобы восстановить [ f11], выдать команды
$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3
(Также см. U & amp; L StackExchange: Как создать /dev/null)
Между ними существует существенная разница. Touch - это команда, используемая для временного штампа файла. Символом > является стандартный редиректор вывода.
Использование Touch
Если файл не существует, он будет создавать файл
Использование Touch обычно используется для создания флагов. Например, если вы хотите найти все файлы между двумя моментами в вашей системе, вы можете использовать эту последовательность команд:
$ touch -t 201609292200 starttime
$ touch -t 201609292300 endtime
Это создаст следующие файлы (или изменит отметку времени, если они существуют) :
-rw-rw-r-- 1 ljames ljames 0 Sep 29 23:00 endtime
-rw-rw-r-- 1 ljames ljames 0 Sep 29 22:00 starttime
Теперь вы можете использовать find для отображения или обработки всех файлов, которые были изменены в этот час (время между этими двумя файлами, например, с 10:00 до 23:00 от 29 сентября 2016 года) .
$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n"
Это частичный выход вышеуказанной команды find:
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com_groups.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/address_book_backups/abook.mab.bak
-rw-rw-r-- 09/29 23:00 00 /home/users/l/j/ljames/endtime
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/Temp
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi/1.337.0_0
Использование перенаправления вывода
Использование перенаправления вывода перенаправит стандартный вывод в указанный файл. В зависимости от ваших настроек clobber / noclobber, если это может быть неудачно.
Существует несколько версий вывода перенаправления, которые включают в себя:
> - Redirect standard output. Create or overwrite the existing file. >> - Redirect append. Create or append to existing file. >& - Redirect both standard output and standard error. >>& - Redirect/Append both standard output and standard errorМы могли бы использовать наш find чтобы перенаправить содержимое всех файлов, созданных в течение указанного часа, на файл, который мы могли бы зарегистрировать и изучить позже:
$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n" > ~/files.log
> - это оператор перенаправления вывода оболочки, используемый для перенаправления STDOUT предыдущих команд в файловый дескриптор, упомянутый после >. Если файл присутствует, содержимое будет усечено, как файл с open(2) - с флагом O_TRUNC, и если файл не существует, он будет создан.
Важная вещь что этот оператор перенаправления будет обрабатываться оболочкой перед выполнением предыдущей команды, поэтому это не зависит от какой-либо команды и обрабатывается самой оболочкой.
Обратите внимание, что некоторые оболочки (например, zsh) будет вести себя по-другому с пустым перенаправлением, например:
>file.txt
Типичным обходным путем является добавление команды : (true) no-op:
: >file.txt
Традиционно основной целью touch является изменение временной метки файла, а не создание файла.
touch создает файл, только когда файл (s ), указанное в аргументе, не существует, в противном случае оно изменяет время модификации файла на текущую временную метку. Вы также можете изменить время доступа и время создания inode с помощью touch.