Если выполнение сценария удара, это появится в моем ps
вывод как
# ps -e
[...]
10043 pts/1 00:00:00 bash
[...]
Как я узнаю точные выполняемые команды?
Спасибо,
Нет действительно хорошего способа видеть, что точные команды выполняются в интерпретаторе удара от точки зрения постороннего до моего знания. Однако существует несколько вещей, которые можно сделать для получения дополнительной информации о рабочем процессе.
strace(1)
как пользователь root, чтобы соединиться с идентификатором процесса и распечатать системные вызовы, в которых процесс делает. Можно ограничить объем того, что производится strace
с -e
опция. Например, для наблюдения только операций записи, которые обычно являются вещами как stdout
из запущенного скрипта: strace -p 10043 -s99999 -e write
/proc
файловая система для получения дополнительной информации о процессе. Например, для PID 10043
Вы можете cd /proc/10043
. Это будет содержать интересные файлы как: environ
файл - Содержит среду рабочего процесса. Для просмотра переменных набора, можно работать: tr '\0' '\n' < ./environ
cmdline
файл - покажет Вам точно параметры командной строки рабочего процесса. Можно просмотреть эти аргументы как: tr '\0' ' ' < /proc/19774/cmdline | sed 's/ $/\n/'
. ps(1)
управляйте также отображает этот вид информации как ps -up 19774
.fd
папка - содержит открытые дескрипторы файлов рабочего процесса. Для просмотра файлов, открытых процессом, Вы можете ls -l ./fd/
. lsof(8)
управляйте также отображает этот вид информации. Для сценариев удара, дескриптора файла 255
обычно содержит под управлением сценарий (т.е. /proc/19774/fd/255
). Это не всегда имеет место.pstree(1)
просмотреть процесс и его дочерние процессы для понимания местоположение, выполняющееся в рамках сценария. например. pstree -ap 10043
Создайте a /tmp/daemonwait
с содержанием:
cat > /tmp/daemonwait <<'EOF'
while sleep 1;do echo hello;done
EOF
Как обычный пользователь запускает скрипт.
bash /tmp/daemonwait > /dev/null &
#save the PID for later use
pid=$!
Поскольку Вы запустили процесс как пользователь, можно читать /proc
файловая система этого процесса.
Вот некоторые примеры из вышеупомянутого описания для попытки.
#view the running bash script; press q for quit
less /proc/$pid/fd/255
#view the environment of the running bash script
tr '\0' '\n' < /proc/$pid/environ | less
#watch the process write to stdout or stderr; requires root
sudo strace -p $pid -s99999 -e write
#list the process, child processes, and their args
pstree -ap $pid
Исследование, когда дескриптор файла 255
не запущенный скрипт.
#view all open files of the process
ls -l /proc/$pid/fd/
#notice the daemonwait script is file descriptor 255
Давайте теперь рассматривать daemonwait
как исполняемый сценарий.Примечание: если Вы не будете использовать удар в качестве своей оболочки по умолчанию затем, то необходимо будет добавить #!/bin/bash
к началу /tmp/daemonwait
сценарий.
kill $pid
chmod 755 /tmp/daemonwait
/tmp/daemonwait > /dev/null &
pid=$!
Давайте посмотрим снова на дескрипторы файлов для рабочего процесса.
ls -l /proc/$pid/fd/
#notice the daemonwait script is now file descriptor 254
Вымойтесь, когда Вы будете сделаны, играя вокруг.
kill $pid
rm /tmp/daemonwait
Опция 1: Запустите свой сценарий с bash -x /path/to/your/script.sh
. Bash затем распечатает каждую строку, которую он выполняет, снабженный префиксом +.
Опция 2: используйте strace: strace -p 10043
(замена 10043 с фактическим идентификатором процесса того сценария). Это скажет Вам, что под управлением сценарий делает, вероятно, в намного большем количестве деталей, в которых Вы нуждаетесь.