Самый быстрый способ поиска файлов, содержащих исключительно текст

Я пытаюсь найти лучший и быстрый способ поиска файлов, контент которых конкретно « что-то »,

Вот почему: у меня есть процесс, который, я уверен, хранит его PID где-то в файле, но я не знаю, где (и я хочу узнать). Я пробовал искать имена файлов, которые могут быть использованы для хранения упомянутого pid ( /var/run/myproc.pid и т. Д.), Но пока не успешен. Я хотел бы попробовать попробовать файлы, содержимое которых является именно этим числом. Я хотел бы получить PID из ps -aux или top , или какой-нибудь инструмент, подобный этому, и затем искать файлы, содержимое которых является только этим числом.

Я искал поисковые запросы, но все ответы, похоже, объясняют, как найти файлы, содержащие « что-то » … среди его содержимого. Я хочу что-то немного другое … Я хочу, чтобы точное совпадение этого " чего-то "

Заранее спасибо.

6 Solutions collect form web for “Самый быстрый способ поиска файлов, содержащих исключительно текст”

Что-то вроде …

 ps ax|grep ntpd|cut -b1-5|xargs -I PID find /var/run/ -type f -exec grep '-l' '^PID$' {} ';' 

Обратите внимание, что шаблон grep указывает, что строка поиска должна быть единственной в строке, т. Е.

 start(^) string (PID is replace by value sent to `xargs`) end($) 

PS: Я проверил это, выполнив ps ax > /var/run/psaxdump за которым следует выше. Он нашел только ntpd.pid

Поместите нужный текст в файл, затем запустите cmp в каждом файле-кандидате.

 pgrep myproc >/tmp/the_pid find /var -type f -size $(wc -c </tmp/the_pid)c -exec cmp -s /tmp/the_pid {} \; -print 

Но для этого strace -eopen использования я бы перезапустил программу в режиме strace -eopen или с помощью правила auditd :

 auditctl -F "ppid=$$,a2&0x100" -S open /path/to/daemon 

Вы можете передать регулярное выражение в grep, попробуйте следующее: (предполагается, что PID – 67543)

grep -R '^67543$' /

В регулярном выражении символ «морковь» (sp) означает «начало строки», а знак знака «доллар» означает «конец строки», поэтому вышеописанное выражение возвращает результат, когда файл начинается и заканчивается строкой «67543», ,

 find searchtree -type f -size `stat -c%s needle`c | xargs -n1 diff -s needle 

если pcregrep доступен в вашей установке, вы можете передать ему -l (имя файла), -r (рекурсивный) и -M (многострочные) флаги, чтобы выполнить задание. Обратите внимание, что \ A и \ Z представляют собой начало и конец привязок строк. В приведенном ниже примере 12477 является поисковой строкой

 pcregrep -l -r -M '\A12477\Z' dir 

Если ваша программа не запускается при загрузке или вместе с миллионом других программ, ваш pidfile должен быть таким же старым, как и процесс, который составляет менее одной минуты в начале.

Если вы знаете PID, вы знаете, что это длина, поэтому вы можете уменьшить количество файлов для поиска еще больше:

  find -type f -mmin -1 -size 6c -exec grep 12345 {} \; 

Для 5-значного PID используйте 6c как размер, так как они содержат конечную новую строку (из ysangkok в качестве комментария).

Linux и Unix - лучшая ОС в мире.