Работа с каталогами и файловыми системами
На этом шаге мы рассмотрим, как использовать команду stat
с каталогами и файловыми системами. Эти знания ценны для задач администрирования системы и понимания использования хранилища.
Команда Stat с каталогами
Команда stat
работает с каталогами так же, как и с файлами. Давайте создадим тестовый каталог и изучим его метаданные:
mkdir -p ~/project/test_dir
stat ~/project/test_dir
Вы должны увидеть вывод, аналогичный тому, что мы видели для файлов, но с "directory" (каталог) вместо "regular file" (обычный файл) в поле типа файла.
Основное различие между файлами и каталогами заключается в том, что каталоги обычно имеют больше ссылок (по одной для каждого непосредственного подкаталога плюс две для самого каталога и его родительского каталога).
Давайте создадим подкаталог и посмотрим, как это повлияет на количество ссылок:
mkdir -p ~/project/test_dir/sub_dir
stat ~/project/test_dir
Вы должны заметить, что количество ссылок увеличилось на 1.
Информация о файловой системе
Команда stat
также может предоставлять информацию о файловых системах, используя опцию -f
или --file-system
. Эта опция показывает такие детали, как тип файловой системы, размер блока и статистику использования.
Давайте рассмотрим файловую систему, содержащую наш каталог проекта:
stat -f ~/project
Вывод должен включать:
- Тип файловой системы
- Размер блока
- Общее количество блоков
- Свободные блоки
- Доступные блоки (для пользователей, не являющихся root)
- Общее количество inodes (индексных дескрипторов)
- Свободные inodes
Эта информация полезна для мониторинга использования дискового пространства и планирования емкости.
Комбинирование опций
Мы можем объединить опцию файловой системы с опцией пользовательского формата для извлечения конкретной информации:
stat -f -c 'File System: %T\nTotal size: %b blocks\nFree: %f blocks\nAvailable: %a blocks' ~/project
Эта команда отображает тип файловой системы, общее количество блоков, свободные блоки и доступные блоки.
Переход по символическим ссылкам
По умолчанию, когда команда stat
встречает символическую ссылку, она показывает информацию о самой ссылке, а не о файле, на который она указывает. Давайте создадим символическую ссылку и посмотрим это в действии:
echo "Target file content" > ~/project/target_file.txt
ln -s ~/project/target_file.txt ~/project/symlink.txt
stat ~/project/symlink.txt
Вывод должен показать, что тип файла — "symbolic link" (символическая ссылка), а размер — длина пути к целевому файлу.
Чтобы увидеть информацию о целевом файле, а не о ссылке, используйте опцию -L
или --dereference
:
stat -L ~/project/symlink.txt
Теперь вывод должен показать информацию о целевом файле, включая его размер и тип как "regular file" (обычный файл).
Практическое применение: поиск больших каталогов
Одним из практических применений команды stat
является поиск больших каталогов. Давайте создадим скрипт, который вычисляет размеры каталогов:
echo '#!/bin/bash
for dir in "$@"; do
if [ -d "$dir" ]; then
size=$(du -s "$dir" | cut -f1)
echo "Directory: $dir, Size: $size KB"
else
echo "$dir is not a directory"
fi
done' > ~/project/dir_size.sh
chmod +x ~/project/dir_size.sh
Теперь давайте запустим скрипт в нашем тестовом каталоге:
~/project/dir_size.sh ~/project/test_dir
Этот скрипт использует команду du
для вычисления размеров каталогов, дополняя информацию о метаданных, предоставляемую командой stat
.
Понимая, как использовать команду stat
с каталогами и файловыми системами, вы можете получить ценную информацию об организации и использовании хранилища вашей системы Linux.