Очистить удаленные файлы linux

Best way to free disk space from deleted files that are held open

Hi I have many files that have been deleted but for some reason the disk space associated with the deleted files is unable to be utilized until I explicitly kill the process for the file taking the disk space

$ lsof /tmp/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME cron 1623 root 5u REG 0,21 0 395919638 /tmp/tmpfPagTZ4 (deleted) 
  • why is this space not immediately freed when the file is first deleted?
  • what is the best way to get back the file space associated with the deleted files?

and please let me know any incorrect terminology I have used or any other relevant and pertinent info regarding this situation.

7 Answers 7

On unices, filenames are just pointers (inodes) that point to the memory where the file resides (which can be a hard drive or even a RAM-backed filesystem). Each file records the number of links to it: the links can be either the filename (plural, if there are multiple hard links to the same file), and also every time a file is opened, the process actually holds the «link» to the same space.

The space is physically freed only if there are no links left (therefore, it’s impossible to get to it). That’s the only sensible choice: while the file is being used, it’s not important if someone else can no longer access it: you are using it and until you close it, you still have control over it — you won’t even notice the filename is gone or moved or whatever. That’s even used for tempfiles: some implementations create a file and immediately unlink it, so it’s not visible in the filesystem, but the process that created it is using it normally. Flash plugin is especially fond of this method: all the downloaded video files are held open, but the filesystem doesn’t show them.

So, the answer is, while the processes have the files still opened, you shouldn’t expect to get the space back. It’s not freed, it’s being actively used. This is also one of the reasons that applications should really close the files when they finish using them. In normal usage, you shouldn’t think of that space as free, and this also shouldn’t be very common at all — with the exception of temporary files that are unlinked on purpose, there shouldn’t really be any files that you would consider being unused, but still open. Try to review if there is a process that does this a lot and consider how you use it, or just find more space.

Читайте также:  Архивация нескольких файлов linux

Источник

Как очистить дисковое пространство, если после удаления файла место на диске не освободилось — интерактивный bash скрипт

Восьмая колонка в восьмой колонке мы можем увидеть размер файла в байтах, но нас интересует расположение файлового дескриптора, чтобы первая часть пути к нему это вторая колонка вывода, в данном случаи 4403

2) Найдем полный путь до дескриптора

Выполним команду ниже подставив 4403 после /proc/ и имя файла в паттерн grep

ls -l /proc/4403/fd | grep "/tmp/access.log"

Вывод команды должен выглядеть примерно так:

l-wx------ 1 nginx nginx 64 Oct 30 15:21 29 -> /tmp/access.log (deleted)

Тут мы видим вторую часть пути это 9ая колонка, цифра 29

В итоге полный путь до файлового дескриптора удаленного файла выглядит так:

Также путь до файла для очистки можно получить используя следующую команду (несколько итераций awk используется для дополнительной валидации)

find /proc/*/fd -ls 2> /dev/null | grep '(deleted)' | sed 's#\ (deleted)##g' | awk '' | sort -u -k 2 | grep "/tmp/access.log" | awk ''

3) Обнулим файл

Выполним команду и чтобы очистить место на диске которое до сих пор занимает удаленный файл

truncate -s 0 /proc/4403/fd/29

Чтобы не выполнять эти действия вручную, можно воспользоваться интерактивным скриптом в виде функции, который сделает все за Вас

clean-deleted-space() < DELETED_FILES=$(cat /dev/null | grep -s deleted | grep -Po "\w+\s+\w+\s+/.*" | awk '' | sort -u | grep -v '^0') EOL ) cat END ' $ EOL ONLY_FILES=$(cat ' | grep '^/' $ EOL ) cat EOL echo "Are you sure to release space of deleted files above?" echo select CLEAN in Yes No do if [ "$CLEAN" = "Yes" ] then for DFILE in $ do echo echo File: $DFILE FILE_DESC_ADDR=$(find /proc/*/fd -ls 2> /dev/null | grep '(deleted)' | sed 's#\ (deleted)##g' | awk '' | sort -u -k 2 | grep $DFILE | awk '') if [ "$FILE_DESC_ADDR" != "" ] ; then echo "executing: truncate -s 0 $" truncate -s 0 $ echo done else echo "Truncate deleted file $DFILE is impossible, skip" fi echo done else echo Nothing to do fi break done > clean-deleted-space

Пример использования скрипта:

root@cloudmaker ~ $ clean-deleted-space Will released: 7.37246 Mb /var/log/zabbix/zabbix_agentd.log-20180916 /var/log/salt/minion-20180923 Are you sure to release space of deleted files above? 1) Yes 2) No ? 1 File: /var/log/zabbix/zabbix_agentd.log-20180916 executing: truncate -s 0 /proc/4186/fd/1 done File: /var/log/salt/minion-20180923 executing: truncate -s 0 /proc/4213/fd/6 done

Источник

Прикладная некромантия в линукс или возвращаем из небытия удаленные файлы

Думаю, каждый из нас с вами сталкивался с проблемой, когда из-за глюка прошивки фотоаппарата, камеры, кпк, смартфона или просто из-за особого устройства /dev/hands карточка была отформатирована, данные были удалены. В свое время данную проблему я решал достаточно просто, используя Portable версию Ontrack Easy Recovery, но так как уже несколько лет являюсь пользователем linux систем, то использование данного нелицензионнного приложения через wine показалось не совсем кошерным, к тому же жажда исследований и приключений требовала найти бесплатный родной аналог для linux систем. Исследования закончились, даже не успев начаться, так как первая строчка в поиске Google привела к набору утилит TestDisk, о которых я расскажу далее подробнее.

Читайте также:  Vpn clients for linux

И так, TestDist состоит из двух утилит:
testdisk и photorec; Официальный сайт утилит.
Краткое описание:
testdisk – мощная утилита, разработанная для восстановления удаленных разделов и для восстановления загрузочных записей mbr после программных ошибок, действий некоторых вирусов, человеческих ошибок (например, когда раздел был просто удален).
Возможности testdisk:
Исправление таблицы разделов; восстановление удаленных разделов Восстановление FAT32 загрузочного сектора из бэкапа Перестроение FAT12/FAT16/FAT32 загрузочного сектора Исправление FAT tables
Перестроение NTFS загрузочного сектора Восстановление NTFS загрузочного сектора из бэкапа Исправление MFT используя MFT зеркало Нахождение ext2/ext3 Backup SuperBlock
Восстановление удаленных файлов в FAT, NTFS and ext2 файловых системах
Копирование файлов из FAT, NTFS and ext2/ext3 удаленных разделов.

photorec – утилита восстановления данных таких, как файлы видео, документы, архивы с жестких дисков и cdrom дисков, а также фото (поэтому название программы Photo Recovery) со встроенной памяти камер. Список типов файлов для восстановления весьма внушителен и с ним можно ознакомиться тут.

Обе утилиты open source, распространяются под лицензией GNU General Public License (GPL). Имеются в наличие версии для linux, unix, а также для windows платформ.

В большинстве линукс дистрибутивов уже включены в состав стандартного репозитория. Для debian-based дистрибутивов установка командой:

В моем случае требовалось восстановить фотографии с карточки фотоаппарата после того, как фотоаппарат случайно отформатировал карточку. Вставив флешку в card reader и запустив с правами рута photorec в консоли, утилита предложила мне выбрать диск, на котором требуется восстановить данные.
выбор диска
В моем случае это будет /dev/sdb.
Далее выбираем тип таблицы разделов на диске, для большинства пользователей это будет Intel/PC.
выбор типа разделов
И далее выбираем раздел или диск целиком для поиска удаленных файлов. Так как мне нужно было восстановить все удаленные файлы после форматирования, то я выбрал поиск по всему диску.
После этого photorec требуется указать тип файловой системы, в которой хранились удаленные файлы. В данном случае все просто, выбираем второй пункт.

А затем на другом диске выбираем директорию, куда утилита сохранит восстановленные файлы.

Далее нажимаем Y и программа начинает свою работу. Для 32Мб карточки ей потребовалось меньше минуты.
Теперь о результатах работы:
Честно говоря, по началу я весьма сомневался в способностях программы. Но открыв директорию с результатами работы утилиты, я с удивлением обнаружил, что были восстановлены не только нужные недавно сделанные 10 фотографий, но и еще 110 других, самая ранняя из которых была сделана 3 года назад и не была перезаписана при дальнейшем использовании карточки, хотя форматировалась карта неоднократно.
В итоге имеем очередную победу добра над злом, счастливую улыбку обладателя фотоаппарата, еще один факт доказательства того, что существует море полезных и качественных opensource утилит.

Источник

Удалить все содержимое файла (очистить файл) в Unix/Linux

Хочу описать в своей статье «Удалить все содержимое файла в Unix/Linux» как можно очистить содержимое файла. Некоторые скажут что это банально, взял удалил файл и создал заново, делов то. Но иногда это не проще и не выход.

Тем более для общего развития, та кому то и пригодиться. Я вот, например, не все методы знал.

Читайте также:  Linux дополнительные атрибуты файлов

1. Если вы хотите очистить содержимое файла вы можете просто удалить файл и создать его заново:

$ rm -rf /home/captain/file_for_delete.txt

2. Существуют и другие методы очистки файла, например методом «echo».

Чтобы очистить свой файл, просто введите следующую команду. Я использую свой php_error.log файл, например.

# echo -n > /home/captain/some_file_for_clear.txt

3. Можно удалить содержимое файла с помощью редакторов, например VI/VIM. Открываем файл, я открою его vim:

# vim /home/captain/some_file_for_clear.txt

Когда открылся редактор, нажимаем «dG» и чтобы сохранить, используем сначала «:» и наживаем «wq» после чего нажимаем энтер.

PS: Команды нужно использовать без кавычек.

4. Используем null для очистки файла:

# cat /dev/null > /home/captain/file_clean.sh
# cp /dev/null > /home/captain/file_clean.sh

5. Еще 1 интересная команда для очистки файла:

6. С помощью текстового редактора SED:

Тема «Удалить все содержимое файла (очистить файл) в Unix/Linux» завершена.

One thought on “ Удалить все содержимое файла (очистить файл) в Unix/Linux ”

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Рубрики

  • Arch Linux (167)
  • Commands (36)
  • Debian’s (635)
    • Administration tools Ubuntu (37)
    • Backups Debian’s (7)
    • Database в Ubuntu (58)
    • Games (игры) (1)
    • Monitoring в Debian и Ubuntu (49)
    • Virtualization в Ubuntu / Debian/ Linux Mint (41)
      • Docker (22)
      • Kubernetes (6)
      • KVM (4)
      • OpenVZ (3)
      • Vagrant (5)
      • VirtualBox (6)
      • ArgoCD (1)
      • Concourse (1)
      • Gitlab (1)
      • Jenkinks (4)
      • Spinnaker (1)
      • Apache (32)
      • Cherokee (1)
      • FTP-services (5)
      • Lighttpd (1)
      • Nginx (26)
      • PHP (27)
      • Proxy для Debian’s (2)
      • Tomcat (4)
      • Панели управления в Ubuntu/Debian/Mint (24)
      • Установка и настройка почты на Ubuntu/Debian (12)
      • Хранилища (clouds) (2)
      • Administration tools freeBSD (19)
      • Database во FreeBSD (52)
      • Monitoring во freeBSD (37)
      • Virtualization во FreeBSD (22)
      • VoIP (1)
      • Установка Web сервисов (91)
      • Установка и настройка почты (6)
      • Установка из ports (пакетов) (19)
      • Установка из sorce code (исходников) (23)
      • Непрерывная интеграция (CI) (27)
      • Database в MacOS (36)
      • Monitoring в Mac OS (31)
      • Security (безопасность) (12)
      • Virtualization в Mac OS (30)
        • Docker (19)
        • Kubernetes (6)
        • Vagrant (5)
        • VirtualBox (5)
        • ArgoCD (1)
        • CircleCI (1)
        • Concourse (1)
        • Gitlab (1)
        • Jenkinks (4)
        • Spinnaker (1)
        • Administration tools CentOS (49)
        • Backups RPM’s (4)
        • Database в CentOS (68)
        • Monitoring в CentOS (67)
        • Virtualization в CentOS/ Red Hat/ Fedora (42)
          • Docker (23)
          • Kubernetes (6)
          • KVM (5)
          • OpenVZ (2)
          • Vagrant (5)
          • VirtualBox (6)
          • VMWare (3)
          • ArgoCD (1)
          • Concourse (1)
          • Gitlab (1)
          • Jenkinks (4)
          • Spinnaker (1)
          • Apache (35)
          • Cherokee (1)
          • DNS (3)
          • FTP (10)
          • Nginx (33)
          • PHP (34)
          • Proxy для RedHat’s (2)
          • Tomcat (2)
          • Voice (2)
          • Панели управления в CentOS/Red Hat/Fedora (27)
          • Прокси сервер на CentOS/RHEL/Fedora (4)
          • Установка и настройка почты на CentOS/RHEL/Fedora (14)
          • Хранилища (clouds) (1)

          соц сети

          Unix-Linux- в примерах

          Unix-Linux- в примерах

          Unix-Linux- в примерах

          Архив новостей

          Свежие записи

          Свежие комментарии

          • Глеб к записи Установка Adobe Flash Player в Debian/Ubuntu/Mint
          • Максим к записи Заблокировать User Agents используя Nginx
          • Денис к записи Как включить EPEL репозиторий на CentOS
          • Гость к записи Закомментировать/Раскомментировать строки vi/vim в Unix/Linux
          • Sergey к записи Установка и настройка OpenVPN сервера на Debian/Ubuntu/Linux Mint

          Источник

Оцените статью
Adblock
detector