Всем доброе утро, день, вечер, ночь. Наконец-то выходные и слак с моттермостом немного подзаткнулись. Сегодня рассмотрим ситуацию, когда ты случайно/специально удалил исполняющийся bash скрипт.
Ситуация: У меня в фоне на сервере крутится bash скрипт, который отслеживает какие-то процессы. Работает годами, но приходит коллега и случайно/специально зачищает папку /usr/local/sbin. Опа и скрипта моего больше нет. Мне чо его заново что ли писать?Блять! Жопа!
Чтобы не попадать в такие ситуации, всегда храни исходники в git. Соглашусь, что это избыточно, но подложить соломку никогда не будет лишним.
Ладно. Скрипт мой сгинул, в git я его не положил. Чо делать? Так. Скрипт удалён с диска, но продолжает крутиться в фоне, это уже хорошо. Значит его можно как-нибудь восстановить. Сейчас покажу как.
Давай создадим подопытный скрипт:
Так, скрипт запустили, он крутится у нас фоне, давай теперь удалим сам файл:
Окей. Файл удалили. Как восстановить? Выполняем:
Почему это возможно? А почему бы и нет! В следующих постах расскажу про общую концепцию удаления файлов в Linux и все станет прозрачным.
Про восстановление файлов на диске, я как-то ранее уже писал тут, но там была немного другая история (когда мы знаем physical_offset).
☑️ читать:
tags: #linux #bash
—
💩 @bashdays
Ситуация: У меня в фоне на сервере крутится 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Берем PID = 261899, берем FD = 255 и делаем сальто-мортале:
script.sh 261899 root 255r REG 8,1 51 130773 /tmp/script.sh
cat /proc/261899/fd/255Опачки, что мы видим? Исходник скрипта, который мы удалили:
File: /proc/261899/fd/255Копипастим, вставляем, сохраняем и гордимся своими охренительными скиллами.
#!/bin/bash
sleep 1000
exit
Почему это возможно? А почему бы и нет! В следующих постах расскажу про общую концепцию удаления файлов в Linux и все станет прозрачным.
Про восстановление файлов на диске, я как-то ранее уже писал тут, но там была немного другая история (когда мы знаем physical_offset).
man 5 proc # /proc/[pid]/fd/Всем хороших выходных и берегите себя!
man lsof
tags: #linux #bash
—