Рассмотрим ситуацию, когда случайно/специально удалился исполняющийся bash-скрипт.
Чтобы не попадать в такие ситуации, всегда храните исходники в git — это избыточно, но бекапы никто не отменял.
Скрипт удалён с диска, но продолжает работать в фоне, значит его можно как-нибудь восстановить.
Создадим подопытный скрипт.
touch /tmp/script.sh:#!/bin/bash
sleep 1000
exit
Делаем его исполняемым
chmod +x /tmp/script.sh и запускаем в фоне /tmp/script.sh &.Символ
& может служить разделителем между командами command & command, две команды выполнятся параллельно.Скрипт запустили, он крутится в фоне. Удалим сам файл:
rm -f /tmp/script.sh Ключ
-f позволит удалить без лишних вопросов.Восстанавливаем:
lsof -c 'script.sh'
На экран выведется простыня. Нам нужна строка, где в конце указан путь к удаленному скрипту:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
script.sh 261899 root 255r REG 8,1 51 130773 /tmp/script.sh
Берем PID = 261899, берем FD = 255 и делаем так:
cat /proc/261899/fd/255
А вот и исходник скрипта:
File: /proc/261899/fd/255
#!/bin/bash
sleep 1000
exit
Вот полезная инфа, которая была использована в гайде:
man 5 proc # /proc/[pid]/fd/
man lsof