Как найти файл, соответствующий трубе, открытому процессом?

Я создал этот скрипт, который прослушивает символы, полученные на жестком канале, и пытается eval эти символы. Я вызываю свой скрипт loop_executor.sh Это все, что он содержит:

 !/bin/bash while : do x=`cat /tmp/console_test`; echo "received $x" eval $x done; 

Я выполняю свой скрипт с двойным щелчком.

Я хочу посмотреть, какие файлы этот процесс открыт:

 > $ pgrep loop_executor.sh 1234 > $ ll /proc/1234/fd dr-x------ 2 userX domain^users 0 Oct 20 17:57 ./ dr-xr-xr-x 9 userX domain^users 0 Oct 20 17:57 ../ lr-x------ 1 userX domain^users 64 Oct 20 17:57 0 -> /dev/null l-wx------ 1 userX domain^users 64 Oct 20 17:57 1 -> /dev/null l-wx------ 1 userX domain^users 64 Oct 20 17:57 2 -> /home/local/groupX/userX/.xsession-errors lr-x------ 1 userX domain^users 64 Oct 20 17:58 255 -> /home/local/groupX/userX/Desktop/loop_executor.sh* lr-x------ 1 userX domain^users 64 Oct 20 17:57 3 -> pipe:[225812] 

FD 3 указывает на «трубу». Ну, я знаю, какой файл он использует, потому что я тот, который жестко закодировал файл в скрипте, но я хотел бы получить эту информацию (если возможно) из другого источника (так как мой скрипт – это просто POC, и это может быть процессом, код которого не открыт для меня).

Я понял, что pipe:[225812] не указывает на pipe:[225812] моего файла.

 ll -i /tmp/console_test 16519395 prw-r--r-- 1 userX domain^users 0 Oct 20 18:14 /tmp/console_test| 

Поэтому мой вопрос: если processess может открывать каналы, которые являются файлами в моей системе, могу ли я определить, к каким файлам относятся эти «трубы»?

Я использую ubuntu 12.04, если это имеет значение.

[EDIT] Нашел процесс cat который читал из моей трубы. Он имеет ту же открытую трубу, что и ее родительский процесс, поэтому здесь не имеет большого значения -> я до сих пор не знаю, просто посмотрев на pipe:[225812] какой файл -f любой – это.

One Solution collect form web for “Как найти файл, соответствующий трубе, открытому процессом?”

У вашего скрипта нет /tmp/console_test . Ваш скрипт читается из трубы, которая связана с процессом cat ; вот что вы видите в своем вопросе.

Найдите процесс cat и проверьте, чтобы он вышел.

Вы, вероятно, хотите что-то вроде этого:

 while read x; do echo "received $x" eval "$x" done < /tmp/console_test 

Обратите внимание на добавленные котировки вокруг параметра для eval

  • Как мне разрешить права доступа к каталогам и посмотреть, не хватает ли прав на запись?
  • Связь между отметками времени файлов
  • Есть ли способ узнать, сколько процессов открывает файл?
  • Как определить количество подкаталогов и файлов из команды ls -ld?
  • Эффективно удалите первую пару строк из текстового файла
  • Объедините несколько текстовых файлов в один со следующей строкой для каждого файла
  • Как называется каталог верхнего уровня
  • shell или perl-скрипт для проверки группы имеют права чтения
  • Невозможно создать файл + r
  • Возможность добавлять файлы в каталог, но не удалять существующие файлы
  • Сравните 1-й столбец в 2 файлах и замените третий столбец файла 1 на 4-й столбец файла 2
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.