Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Файловые системы Linux

Очищаем файловую систему с помощью fslint

Оригинал: Clean up your filesystems with fslint
Автор: Ben Martin
Дата: 6 октября 2008
Перевод: Александр Тарасов aka oioki
Дата перевода: 14 октября 2008

Поддержка файловых систем в пригодном состоянии всегда тяжела для системного администратора. Время от времени может потребоваться искать копии файлов; символьные ссылки, которые указывают на несуществующие файлы; временные файлы, так и оставшиеся неудаленными и бинарные файлы с невырезанной отладочной информацией. fslint может помочь вам в решении этих файловых проблем.

Пакеты с fslint есть в репозиториях Ubuntu Hardy universe и Fedora 9. Для openSUSE на данный момент нет пакета. Я собирал программу из исходников версии 2.28 на 32-битной машине с Fedora 9. fslint написан на Python и в качестве пользовательского интерфейса использует GTK+2 и libglade2, поэтому потребуется предварительно установить эти библиотеки и их привязки к Python.

Запустить fslint можно прямо из распакованного tar-архива, как показано ниже, либо как положено установить его в систему вручную - это показано в нижней половине указанных ниже команд. Команда fslint-gui вызывает графический пользовательский интерфейс на основе библиотеки GTK+2. Другие команды fslint и набор команд, начинающихся с find (к примеру, findup ищет дубликаты файлов) - все они являются консольными программами.

$ tar xzf /home/ben/Download/fslint-2.28.tar.gz
$ cd ./fslint*
$ ./fslint-gui

$ su -l

# prefix=/usr/local
# sharedir=$prefix/share/fslint

# mkdir -p $sharedir
# chmod o+rx $sharedir
# cp -av doc $sharedir
# chown root.root $sharedir
# chown -R root.root $sharedir
# chmod o=rx $sharedir
# chmod o=r $sharedir

# install -m 444 fslint.desktop $prefix/applications
# install -pm 644 fslint.glade fslint_icon.png $sharedir
# ln -s $sharedir/fslint_icon.png $prefix/share/pixmaps/fslint.png
# install -m 444 man/fslint* $prefix/man/man1
# make -C po install
# install -m 755 fslint-gui $prefix/bin
# cp -av fslint $sharedir
# chmod -R 555 $sharedir/fslint

# cd $prefix/bin
# perl -pi -e 's|^liblocation=.*$|liblocation="/usr/local/share/fslint" |' fslint-gui
# perl -pi -e 's|^locale_base=.*$|locale_base=None |' fslint-gui

Первый блок установочных команд создает новый каталог /usr/local/share/fslint и устанавливает файлы документации. Затем устанавливаются ярлыки, glade-файл и файлы руководства, а для установки файлов локализации используется команда make. Последние две команды меняют две переменные, отвечающие за пути в коде программы fslint-gui, таким образом мы указываем верное расположение glade-файла. По умолчанию glade-файл ищется в том каталоге, откуда была запущена программа. Это значение по умолчанию позволяет запускать fslint-gui сразу из распакованного tar-архива, однако чаще всего glade-файл хранится в месте, отличном от места размещения самого исполняемого файла.

Ниже показано главное окно fslint. В верхней части окна можно указать, какие каталоги нужно будет просмотреть, и нужно ли проходить по каталогам рекурсивно (галочка справа). Во вкладке Advanced search parameters можно перечислить исключения - пути, которые не нужно просматривать, а также любые другие параметры, которые будут переданы команде find. По умолчанию в списке исключений указаны каталоги /tmp, .svn, CVS, .git, /dev, /sys и /proc.

Основную часть окна занимает несколько вертикально расположенных вкладок, каждая из которых определяет какую-либо проверку. После того как вы сменили вкладку нужно перезапустить поиск с помощью кнопки Find.

Вкладка Duplicates позволяет найти одинаковые копии файлов. Дубликаты ищутся сначала по совпадению размеров, затем проверяется, не являются ли файлы жесткими ссылками (альтернативными именами), затем вычисляет MD5-сумму от обеих файлов. Если данный поиск находит дубликаты, тогда для каждой группы дубликатов выводится заголовок, отображающий, сколько места на диске (в байтах) занимают эти самые дубликаты. На снимке экрана выше можно видеть, как fslint показывает результат проверки на дубликаты на тестовых файлах, созданных мной специально. При нажатии правой кнопкой на файле-дубликате появляется контекстное меню, из которого можно открыть файл, скопировать его или переименовать. fslint открывает файлы с помощью xdg-open, и для большинства обычных типов файлов будет открыто привычное вам приложение.

Если открыть вкладку Installed packages и нажать кнопку Find, fslint покажет все установленные в системе пакеты. Для списка установленных пакетов нет контекстного меню. Однако если вы запустили fslint от имени пользователя root, тогда можете нажать на кнопке Delete, и выбранные пакеты будут удалены.

Вкладка Bad names позволяет найти файлы, в именах которых содержатся некорректные символы UTF-8. Вкладка Name clashes позволяет найти все псевдонимы файлов - такие файлы, которые называются так же, но расположены в других каталогах. В группу псевдонимов файла включаются также символьные и жесткие ссылки. Поиск файлов, имеющих такое же имя, но расположенных в разных каталогах, может быть полезно в том случае, когда вы хотите скопировать файлы в один каталог или на файловую систему, в которой регистр символов не имеет значения. К сожалению, опция -c консольной утилиты findsn, выполняющей этот самый поиск "Name clash", нигде в графическом интерфейсе не отображена. Нужно иметь в виду такие файлы, когда вы производите копирование на файловые системы, в которых регистр символов не имеет значения.

Вкладка Temp files позволяет найти временные файлы, которые так и остались неудаленными. Можно ограничить поиск только core-файлами, а также указать количество дней, которые должны пройти прежде, чем fslint будет отображать такие файлы. В обычном режиме fslint смотрит на имя файла и по нему определяет, является ли он временным файлом. Очень часто временные файлы заканчиваются на ~, .swp, .v или .bak, или начинаются с символа #. Хотя core-файлы также проходят проверку на имя файла (в их имени должно быть слово core), однако есть и другие тесты, достоверно определяющие, является ли этот файл отладочным core-файлом или нет.

Во вкладке Bad symlinks можно найти ссылки, которые никуда не ведут (т.е. файл, на который указывает символьная ссылка, был удален); подозрительные ссылки в виде абсолютных ссылок на подкаталоги данного каталога; избыточные ссылки (содержащие, к примеру, "/./" или "///"); можно попросту найти все абсолютные и относительные ссылки.

Вкладка Bad IDs поможет найти файлы и каталоги, чьи User ID и Group ID содержат значения, неизвестные вашей системе. Такие файлы могут быть в NFS-ресурсах или внутри tar-архивов, причем у вас нет таких же пользователей и групп, как на машине, на которой этот tar-архив создавался. Однако у меня не получилось запустить проверку на "Bad IDs" - вылезала ошибка exceptions.NameError.

Вкладка Empty directories поможет найти пустые каталоги. Поиск по Redundant whitespace позволит найти файлы с неверными отступами или имена которых в конце содержат пробелы.

Во вкладке Non stripped binaries можно найти в путях, указанных в переменной $PATH, такие исполняемые файлы, которые содержат невырезанную отладочную информацию. Если эту отладочную информацию вырезать (с помощью команды strip), можно сэкономить немного оперативной памяти и выиграть в скорости запуска приложений. Однако не нужно этого делать, если вы программист и разрабатываете приложение, которое еще нужно отлаживать.

fslint предоставляет аналоги программ для подобных проверок в командной строке. Собственно ими и пользуется графическая надстройка fslint-gui, за каждую вкладку-проверку отвечает своя консольная программа.


Еще один обзор той же утилиты fslint вы найдете в прошлогодней статье Shashank Sharma "Чистим файловую систему с помощью FSlint"