Вы неправильно его используете.
Во-первых, вам не нужна кошка. sed
может принимать имя файла для чтения. Примерно так:
sed 's/sole/sun/g' italian.txt
Во-вторых, вам не нужно перенаправление конвейера для следующего sed
-выражения. Если вам это нужно, это должно выглядеть так:
sed 's/sole/sun/g' italian.txt | sed 's/penna/pen/g' > english.txt
, но это дополнительная работа. sed
может обрабатывать более одного выражения. Вы можете разделить их на «;» или передайте их sed
в качестве аргументов командной строки с -e
перед каждым из них.
В итоге команда выглядит так:
sed 's/sole/sun/g; s/penna/pen/g' italian.txt > english.txt
lsof может сделать это:
lsof <filename>
например:
┌─[root@Fedora]─[~]─[02:39 pm]
└─[$]› lsof scripts/network_menu.sh
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
less 26419 root 4r REG 253,1 67271 931810 scripts/network_menu.sh
network_m 26572 root 255r REG 253,1 67271 931810 scripts/network_menu.sh
первый пример выше - это то, что я запустил "less" для файла как root, второй - это сценарий, запущенный root.
Попробуйте с помощью команды lsof / path / filename
, она покажет вам подробную информацию о процессах, использующих файл.
lsof
расскажет, у каких процессов открыт файл(ы) в данный момент времени, но если вы хотите посмотреть, сколько процессов открыли файл(ы) за определенный период времени, вы можете использовать inotifywait
или inotifywatch
.
inotifywait можно установить в режиме мониторинга, чтобы постоянно сообщать о событиях в указанных файлах:
inotifywait -m -r /lib*
inotifywatch может предоставить сводку событий за определенный период времени:
inotifywatch -t 10 -r /lib*
Поскольку вы спрашивали о процессах, открывающих файлы, вы можете добавить опцию -e open
, чтобы ограничить вывод только событиями OPEN:
inotifywait -e open -m -r /lib*