Работа с / dev / null с помощью cat или cp vs touch

Вывод strace показывает, что 'write' работает с дескриптором файла 8. Чтобы определить, какой дескриптор файла 8, вам нужно посмотреть на / proc / ], в данном случае / proc / 9358 / fd . 9358 - это PID, который вы отслеживали, а fd содержит дескрипторы открытых файлов для PID.

Вы можете увидеть текущие файловые дескрипторы для вашего запущенного bash, если посмотрите:

/ proc / $$ / fd

Итак, если вы сделаете это выше, вы увидите 8 символьных ссылок на файл что это расслабляет. Если вам нужно больше времени, отправьте SIGSTOP процессу аудио / видео, пока вы выполняете эту работу, а затем, когда вы будете довольны, вы можете SIGCONT процесс, чтобы он мог продолжаться. со своей работой. Очевидно, что если этот процесс является частью сетевой службы, такой как веб / ftp / электронная почта, вы можете не захотеть прерывать его, поскольку это может повлиять на QoS для ваших пользователей.

Если вам повезет, вы, вероятно, сможете сделать что-то подобное, что сэкономит вам немного времени при определении идентификатора процесса.

pkill -STOP -f 'av binary name'

Там может даже быть файл конфигурации, хранящийся в / etc для вашего аудио / видео программного обеспечения, который может определять рабочий каталог.

1
15.04.2017, 00:37
2 ответа

В результате получается один и тот же пустой файл.

Можно даже просто использовать > baz2 .На мой взгляд, немного более элегантно, так как не зависит от наличия / dev / null и не требует вызова дополнительных команд / процессов.

Имейте в виду, что в отличие от touch , результатом > baz2 будет пустой файл, даже если baz2 уже существует и имеет некоторое содержимое.

$ touch foo
$ cp /dev/null bar
$ cat /dev/null >baz
$ >baz2
$ ls -l
total 0
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:40 bar
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:40 baz
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:40 baz2
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:39 foo
$
1
27.01.2020, 23:34

Разница в том, что происходит, если файл уже существует и имеет содержимое:

Например, вот файл с содержимым:

$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 6 Apr 14 18:06 ca/root-ca/db/root-ca.db
$ touch ca/root-ca/db/root-ca.db
$ ls -l ca/root-ca/db/root-ca.db       
-rw-r--r-- 1 sweh sweh 6 Apr 14 18:06 ca/root-ca/db/root-ca.db
$ cp /dev/null ca/root-ca/db/root-ca.db
$ ls -l ca/root-ca/db/root-ca.db       
-rw-r--r-- 1 sweh sweh 0 Apr 14 18:06 ca/root-ca/db/root-ca.db

Мы видим, что команда touch не опустела файл, но cp сделал.

Обычно вместо этого можно использовать команду : :

: > ca/root-ca/db/root-ca.db

например,

$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 6 Apr 14 18:08 ca/root-ca/db/root-ca.db
$ : > ca/root-ca/db/root-ca.db  
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 0 Apr 14 18:08 ca/root-ca/db/root-ca.db

Однако в обучающих заметках и курсовых работах это может быть труднее читать, это может быть сочтено опечаткой или похожий. Иногда лучше использовать более длинную командную строку: -)

1
27.01.2020, 23:34

Теги

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