Есть ли способ узнать, сколько процессов открывают файл?

Вы неправильно его используете.

Во-первых, вам не нужна кошка. 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
1
10.02.2017, 17:24
3 ответа

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.

3
27.01.2020, 23:13

Попробуйте с помощью команды lsof / path / filename

, она покажет вам подробную информацию о процессах, использующих файл.

2
27.01.2020, 23:13

lsof расскажет, у каких процессов открыт файл(ы) в данный момент времени, но если вы хотите посмотреть, сколько процессов открыли файл(ы) за определенный период времени, вы можете использовать inotifywait или inotifywatch.

inotifywait можно установить в режиме мониторинга, чтобы постоянно сообщать о событиях в указанных файлах:

inotifywait -m -r /lib*

inotifywatch может предоставить сводку событий за определенный период времени:

inotifywatch -t 10 -r /lib*

Поскольку вы спрашивали о процессах, открывающих файлы, вы можете добавить опцию -e open, чтобы ограничить вывод только событиями OPEN:

inotifywait -e open -m -r /lib*

2
27.01.2020, 23:13

Теги

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