- Восстановление открытых файлов но удаленных c файловой системы linux
- Предыстория
- Восстанавливаем файл
- Удаление открытого файла в Linux
- Удаление открытого файла в Linux
- Подготовка
- Свободное место и свободные иноды
- Создание файлов на диске
- Эксперимент с удалением открытого файла
- Завершение эксперимента
- Выводы
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- lsof — поиск и устранение проблем в Linux
- Команда lsof
- Что такое открытые файлы?
- Почему нам это важно?
- Принцип работы lsof?
- Что еще интересного?
- Полезные параметры lsof
Восстановление открытых файлов но удаленных c файловой системы linux
Всех с прошедшим новым годом!
В этой заметке я бы хотел поделиться как можно восстановить открытый файл в linux.
Предыстория
Зашел человек на канал посвященный debian в jabber и сказал что взломали его jabber-bot и выполнили команду:
так как это было выполнено не под рутом, особых проблем быть не должно, но конфигурационные файлы бота удалены. Бот остался запущен и задача была восстановить открытые им файлы и попробовать максимально быстро поднять всё с теми же настройками.
Восстанавливаем файл
Первым делом нам нужно убедиться что у нас стоит приложение lsof и примонтирован procfs в /proc.
В этой заметке я буду считать что в системе где будут восстанавливаться открытые файлы все нужные приложения стоят, root доступ есть, всё примонтировано как нужно.
Первым делом нам нужно найти открытый файл с помощью программы lsof:
Нас интересуют вот эти значения:
- Номер процесса (pid)
- Файловый дескриптор (file descriptor)
Здесь я выделю жирным то что нужно:
kwin 2031 4002 anton 2w REG 253,3 4486557 1835028 /home/anton/.xsession-errors
Дальше восстанавливаем его (вы можете также его сохранить в другом месте):
На этом всё, так можно восстановить открытый файл, но который по какой-то причине был удален.
UPD1: Меня спросили как найти и восстановить все открытые файлы конкретным приложением.
Предположим мы знаем 1 файл который нужно восстановить, мы его нашли с помощью
Мы знаем что 2031 — это pid процесса который держит ваш файл. Нам нужно найти все файлы которые держать открытыми данный процесс:
Мы видим все открытые приложения этим процессом, нам осталось только отобрать удаленные:
После чего просто восстанавливаем все файлы как описано выше.
UPD2: Почему я использую grep для поиска файлов вместо параметра, который работает быстрей?
Я использую grep так как там видно удален файл или нет, я считаю это более удобным (ИМХО)
UPD3: Также можно посмотреть все открытые файлы процесса через комманду ls, пометки deleted будут, пример:
Источник
Удаление открытого файла в Linux
Есть ряд каверзных вопросов по Linux, которые вводят в ступор большинство начинающих системных администраторов Linux. Их очень любят задавать на собеседованиях бывалые админы, а в интернете про ответы на них не написал только ленивый. В топе уже наверно полтора десятилетия держится вопрос про удаление открытого файла в Linux. Тем не менее кандидаты все также из раза в раз продолжают делать круглые глаза. Максимум, что от них можно услышать — это «Иноды. Я слышал про иноды, но больше про них ничего не знаю».
Чтобы раз и навсегда внести ясность в этот вопрос и была написана эта статья.
Удаление открытого файла в Linux
Чтобы проверить как работает файловая система в Linux, проведем небольшой эксперимент.
Подготовка
Для проведения всех тестов нам необходима виртуальная машина с практически любым дистрибутивом Linux и дополнительный диск. Благо в век виртуализации это сделать проще простого. Для наглядности возьмем диск в пару гигабайт и заранее подготовим его (базовые операции с дисками рассмотрим в другой статье).
Представим, что вы впервые вошли по ssh на сервер, у вас рутовые права и ваша задача просто разобраться с дисковой подсистемой.
Свободное место и свободные иноды
Первое, что мы сделаем, это проверим диски всем знакомой командой df (лишние данные убраны из вывода):
Утилита отображает занятое на файловой системе место в блоках 1К. Этой информации в большинстве случаев хватает лишь для констатации факта о % свободного места и не стоит на этом останавливать диагностику.
Проблемы с записью новых файлов может вызвать также нехватка инодов (inodes), поэтому полезно будет их проверить той же командой, но с другим ключом:
Используется 1% места на разделе. Запоминаем вывод команд, он нам понадобится для последующего анализа.
Создание файлов на диске
Далее создадим один большой файл на нашем диске. Сделать это проще всего утилитой dd, которая поставляется по умолчанию вместе с системой (предварительно создадим пару каталогов):
И ещё создадим 10 маленьких файлов, но другим способом:
Теперь снова смотрим два вывода df:
Как видно, теперь на диске занято 75%. А что с инодами?
Количество инод изменилось на 13, хотя файлов мы создали всего 11.
Эксперимент с удалением открытого файла
Теперь посмотрим на ситуацию другой утилитой, которую также обязательно нужно использовать для диагностики. Речь о du:
Примерно занят 1ГБ.
Теперь сымитируем что-то похожее на блокировку файла (если будут предупреждения, соглашайтесь):
Команда просто открывает файл на чтение и отправляет задание в бэкграунд. Теперь удаляем файл:
После этого проверяем свободно место:
И свободные иноды:
В итоге место не освободилось, хотя файл, казалось бы, удален. Инодов используется столько же. Но может быть du покажет нам что-то другое:
Занято 8Кб. Ок, есть ещё одна утилита, которая лучше других объяснит что происходит, это lsof:
Мы посмотрели все, что хотели, можно заканчивать.
Завершение эксперимента
Сворачиваем наш эксперимент — убиваем процесс, который мы ранее запустили в фоновом режиме:
Теперь снова проверяем свободное место:
Большой файл удалился, место и иноды освободились. Смысла проверять вывод du нет, она покажет то же самое, что и в предыдущий раз.
Выводы
Что все же произошло? А произошло следующее: информация от du и df до удаления большого файла была очевидной и объяснений не требует. За исключением одного момента — почему файлов создали 11, а количество инодов увеличилось на 13? Тут все просто. Наверно все слышали выражение, что все в линуксе — файл 1 ? И каталог тоже, а их мы создали два.
Далее мы удалили файл, который открыт на чтение другим процессом. Команда rm удалила ссылку на файл, которую хранит объект каталога, но не смогла удалить файл физически с диска, поскольку файл был открыт на чтение другой программой.
Хоть файл уже и не имел имени, но все ещё имел файловый дескриптор (= инод), к которому продолжала обращаться программа. Это было также хорошо заметно по выводу lsof — файл был помечен как удаленный. Как только программу остановили, файл освободился и система смогла завершить начатое — удалить файл и зависимые структуры данных на диске окончательно.
В показаниях утилиты du также нет ничего странного, ведь она считывает все перечисленные имена файлов в каталоге и оценивает их размер. Поскольку ссылку на имя большого файла удалили, du не смогла оценить его объем, зато это смогла сделать df, ведь она оценивает реальный занятый объем на диске в блоках без привязки к именам. Вот весь секрет.
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
lsof — поиск и устранение проблем в Linux
Серия статей по траблшутингу в Linux/Unix
Статьи по тематике устранение неисправностей связаны с определенным набором решений проблем. В случае с Linux и Unix полезно иметь некое руководство по доступным инструментам, облегчающим работу по поиску и устранению проблем. Это такой документ, который содержит основные важные команды, позволяющие облегчить жизнь администраторам Linux/Unix при возникновении проблем.
Команда «list open files» или команда lsof выглядит достаточно просто, но ее использование в качестве инструмента для устранения неполадок не так очевиден, как кажется на первый взгляд. Например, если у неизвестного процесса открыто несколько файлов, знание того, какие они есть, может помочь определить, является ли процесс легитимным.
В первой статье рассмотрим множество вариантов использования команды lsof.
Во второй статье рассмотрены рекомендации о том, как исправлять проблемы этим множеством вариаций данной команды.
Контрольные вопросы, которые следует задать себе при диагностике проблем, является предметом нашей третьей статьи. Это поможет навести порядок в хаосе, который создают некоторые проблемы.
Работа с базами данных Oracle — обычная задача администратора, и немного узнать о них и о том, как тестировать соединения с ними, — ценный инструмент, описанный в четвертой статье. Если проблема связана с подключением, отпадает потребность в вызове администратора баз данных.
В завершении нашего руководства приведена статья с инструкциями по командам, необходимым для управления дисками и разбиения их на разделы.
Команда lsof
Команда lsof — это нечто большее, чем вы можете себе представить. Узнайте обо всех возможностях ее применения для поиска и устранения неполадок.
lsof — команда Unix/Linux, которая отображает все открытые файлы или идентифицирует процессы, открытые конкретными файлами. Удобная для оценки безопасности ИС, а также для устранения проблем lsof предлагает широкий спектр параметров, позволяющие использовать её различными способами — иногда даже превосходя команду ps для просмотра процессов и команду netstat для исследования сетевых интерфейсов.
Что такое открытые файлы?
Для начала давайте рассмотрим, что такое открытые файлы и почему они вам могут быть интересны. Открытые файлы — это файлы, которые использует какой-либо процесс. Этот процесс может быть командой, которую вы выполняете, или приложением, запущенным на сервере, которым вы управляете. Открытые файлы могут включать файлы данных и библиотеки, которые предоставляют общие процедуры. Многие файлы открываются каждый раз, когда вы входите в систему. Вы можете быть удивлены их количеством. Если вам интересно, сколько файлов у вас открыто прямо сейчас, попробуйте эту команду:
И если вы когда-нибудь слышали, что для Unix все является файлом, вы, возможно, не слишком удивитесь, узнав, что lsof работает с такими вещами, как сетевые интерфейсы, которые большинство из нас обычно не считают файлами.
Почему нам это важно?
Иногда появляется необходимость узнать об открытых файлах, потому что вы пытаетесь удалить файл и обнаруживаете, что он уже используется. Может быть, он заполняет ваше дисковое пространство. Вам необходимо узнать, каким файлом какой процесс открыт, чтобы можно было остановить его и очистить файл. В других случаях вам понадобится узнать, что делает неизвестный подозрительный процесс, и только изучение файлов, которые открыл подозрительный процесс, может предоставить ценную информацию.
Принцип работы lsof?
При применении команды lsof без параметров в терминале выводятся все файлы, которые открыты (используются) в вашей системе. Если вы запустите lsof от своего имени, вы получите длинный список файлов, но выходные данные будут включать в себя множество сообщений об отказе в разрешении — многие из них представляют открытые файлы в файловой системе /proc, которые вам не разрешено видеть. Запустите команду от имени root, и вы увидите больше выходных данных.
Что еще интересного?
Беглый взгляд на довольно большой справочник lsof отобразит вам, что мы увидели только меньшую ее часть возможностей. lsof имеет обширный список опций.
В этой статье мы разберем наиболее полезные.
Чтобы начать работу со всеми этими параметрами, вам необходимо о том знать о возможности использования более одной опции. Для этого используйте слово OR. Таким образом, вы получаете список, объединяющий результаты указанных вами параметров. Помимо этого вы можете выбрать вариант, со служебным словом AND. В этом случае ваши опции будут применяться вместе. Другими словами, вы увидите те файлы, процессы и т. д., которые соответствуют всем указанным вами параметрам. Для применения объединения AND, добавьте в свою команду параметр -a.
Полезные параметры lsof
Примеры использования lsof с параметрами, отображены на скриншотах ниже. Они демонстрируют наиболее полезные вещи, которые вы можете применить с данной командой.
На скриншоте ниже lsof, перечисляет все процессы, у которых открыт конкретный файл:
На этом скриншоте выводится список всех процессов, у которых есть открытые файлы в определенном каталоге:
На этом скриншоте показаны файлы, открытые bash:
На этом скриншоте, но с использованием подстроки вместо полного имени процесса:
На этом скриншоте перечислены открытые файлы для определенного идентификатора процесса:
lsof помогает изучить сетевые подключения:
На скриншоте показан пример просмотра портов и/или установленных соединений.
Также можно сетевые подключения для одного конкретного источника.
Просмотр файлов пользователем
На этом скриншоте lsof просматриваем открытые файлы для конкретного пользователя:
Для просмотра открытых файлов всех пользователей, кроме определенного (здесь это root), используйте знак ^:
Перечислить идентификаторы процессов для процессов, запускаемых конкретным пользователем:
Завершить все процессы, принадлежащие конкретному пользователю:
Используйте параметр -a для использования оператора AND для объединения ваших опций вместе, помня, что это ограничивает вывод только тем, что соответствует всем указанным условиям:
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
Источник