Всем доброе утро, день, вечер, ночь. Наконец-то выходные, и Slack с Mattermost немного подзаткнулись. Сегодня рассмотрим ситуацию, когда ты случайно или специально удалил исполняющийся Bash-скрипт.
Ситуация: у меня в фоне на сервере крутится Bash-скрипт, который отслеживает какие-то процессы. Работает годами, но приходит коллега и случайно или специально зачищает папку /usr/local/sbin. Опа, и скрипта моего больше нет. Мне чё, его заново, что ли, писать? Блядь! Жопа!
Чтобы не попадать в такие ситуации, всегда храни исходники в Git. Соглашусь, что это избыточно, но подложить соломку никогда не будет лишним.
Ладно. Скрипт мой сгинул, в 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, то есть force, удалит без лишних вопросов.
Окей. Файл удалили. Как восстановить? Выполняем:
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
Опачки, что мы видим? Исходник скрипта, который мы удалили:
#!/bin/bash
sleep 1000
exit
Почему это возможно? А почему бы и нет! В следующих постах расскажу про общую концепцию удаления файлов в Linux, и всё станет прозрачным.
Про восстановление файлов на диске я как-то ранее уже писал тут, но там была немного другая история, когда мы знаем physical_offset.
Читать:
man 5 proc # /proc/[pid]/fd/
man lsof
Всем хороших выходных и берегите себя!








Комментарии