Откройте файл журнала в режиме добавления :
cmd >> log
Затем вы можете безопасно обрезать его с помощью:
: > log
С помощью в оболочке, подобной Bourne, существует 3 основных способа открытия файла для записи. В только запись (>
), чтение + запись ( <>
) или добавление (и запись -только, режим >>
).
В первых двух ядро запоминает текущую позицию, в которой вы находитесь (я имею в виду описание открытого файла , общее для всех файловых дескрипторов, которые его дублировали или унаследовали путем разветвления от одного вы открыли файл на) находятся в файле.
Когда вы делаете:
cmd > log
журнал
открыт в режиме только для записи оболочкой для стандартного вывода cmd
.
cmd
(его начальный процесс, порожденный оболочкой и всеми возможными потомками) при записи в их стандартный вывод, запись в текущей позиции курсора, удерживаемой описанием открытого файла , которое они совместно используют в этом файле .
Например, если cmd
первоначально записывает zzz
, позиция будет по смещению байта 4 в файл, а в следующий раз cmd
или его дочерние элементы записать в файл, туда будут записаны данные независимо от того, увеличился или уменьшился файл за интервал.
Если файл сжался, например, если он был усечен с помощью
: > log
и cmd
пишет xx
, те xx
будут записаны в смещение 4
, и первые 3 символа будут заменены символами NUL.
$ exec 3> log # open file on fd 3.
$ printf zzz >&3
$ od -c log
0000000 z z z
0000003
$ printf aaaa >> log # other open file description -> different cursor
$ od -c log
0000000 z z z a a a a
0000007
$ printf bb >&3 # still write at the original position
$ od -c log
0000000 z z z b b a a
0000007
$ : > log
$ wc log
0 0 0 log
$ printf x >&3
$ od -c log
0000000 \0 \0 \0 \0 \0 x
0000006
Это означает, что вы не можете обрезать файл, который был открыт в режиме только для записи (и то же самое для чтение + запись ), как если бы вы это делали, процессы, у которых были открыты файловые дескрипторы в файле, оставит символы NUL в начале файла (они, за исключением OS / X, обычно не занимают места на диске, они становятся разреженными файлами).
Вместо этого (и вы заметите, что большинство приложений делают это при записи в файлы журнала), вам следует открыть файл в режиме добавления :
cmd >> log
или
: > log && cmd >> log
, если вы хотите начать пустой файл.
В режиме добавления все записи производятся в конец файла, независимо от того, где была последняя запись:
$ exec 4>> log
$ printf aa >&4
$ printf x >> log
$ printf bb >&4
$ od -c log
0000000 a a x b b
0000005
$ : > log
$ printf cc >&4
$ od -c log
0000000 c c
0000002
Это также безопаснее, как если бы два процесса открыли (таким образом) файл по ошибке (как для instance, если вы запустили два экземпляра одного и того же демона), их вывод не будет перезаписывать друг друга.
В последних версиях Linux вы можете проверить текущую позицию и был ли открыт дескриптор файла в режиме добавления , просмотрев / proc /
:
$ cat /proc/self/fdinfo/4
pos: 2
flags: 0102001
Или с:
$ lsof +f G -p "$$" -ad 4
COMMAND PID USER FD TYPE FILE-FLAG DEVICE SIZE/OFF NODE NAME
zsh 4870 root 4w REG 0x8401;0x0 252,18 2 59431479 /home/chazelas/log
~# lsof +f g -p "$$" -ad 4
COMMAND PID USER FD TYPE FILE-FLAG DEVICE SIZE/OFF NODE NAME
zsh 4870 root 4w REG W,AP,LG 252,18 2 59431479 /home/chazelas/log
Эти флаги соответствуют флагам O ..._, переданным системному вызову open
.
$ gcc -E - <<< $'#include <fcntl.h>\nO_APPEND O_WRONLY' | tail -n1
02000 01
( O_APPEND
- 0x400 или восьмеричное 02000)
Итак, >>
оболочки открывает файл с O_WRONLY | O_APPEND
(и 0100000 здесь O_LARGEFILE что не имеет отношения к этому вопросу), а >
- это только O_WRONLY
(а <>
- только O_RDWR
).
Если вы выполните:
sudo lsof -nP +f g | grep ,AP
для поиска файлов, открытых с помощью O_APPEND
, вы найдете большинство файлов журналов, открытых в настоящее время для записи в вашей системе.
(также может быть
расширение, если это флэш-плеер на основе видео потока, или вебм или огг или что-то еще).
Чтобы найти медиа-урл, вы можете также использовать правой кнопкой мыши и "проверить элемент", а затем щелкните на видео. Для этого нужно нажать на кнопку "выделить элемент мышью" (это крайняя левая кнопка во втором ряду инспектора элементов, на изображении под синей иконкой)
Источник изображения: https://superuser.com/questions/650434/firefox-dom-inspector-highlight-element-like-chrome-firebug
вы можете прочитать решение здесь и здесь с более подробной информацией, BTW для записи хорошего звука вы НЕ ДОЛЖНЫ использовать разъем, чтобы связать аудио выход браузера с vlc
так что вскоре здесь :
sudo apt-get install pulseaudio-module-jack qjackctl
теперь вы nee d, чтобы запустить qjackctl и установить как на этой картинке.
после этого вы можете протестировать здесь следующим образом: в данном случае я использовал mp3 и x264 как кодеки, вы можете просто попробовать изменить это, если вам это нужно.
Файл будет записан в папку tmp и для остановки записи просто нажмите Ctrl+C
cd /tmp ; cvlc --jack-input-auto-connect screen:// --screen-fps=25 --input-slave pulse://jack_in --sout "#transcode{venc=x264,quality:50,scale=1,fps=25,acodec=mp3,ab=128,channels=2, samplerate=44100}:duplicate{dst=std{access=file,mux=mp4,dst=nowardev.mp4}}}"