Примеры использования tree
Самый простой способ использовать команду tree Linux — напечатать в терминале всего лишь одно слово:
Результатом станет стандартное отображение структуры папок. Размер выдачи зависит от того, сколько хлама накопилось на жестком диске. У автора его столько, что листать — не перелистать:
Немного сократить объем информации можно, попросив команду показывать только папки. Для этого служит опция -d. А чтобы отпилить от дерева еще больше ненужных веток, установим ограничение на количество файлов, которые хранятся в папках (если файлов больше, папка не попадет в выдачу). В этом нам поможет опция —filelimit.
tree -d —filelimit 26
Кстати, нельзя устанавливать лимит меньше, чем 25 файлов.
По умолчанию команда tree в linux не показывает скрытые папки. Чтобы увидеть их, следует воспользоваться опцией -a. Заодно не помешает упорядочить выдачу — например, по уровням вложенности (параметр -v). Ну и почему бы не узнать, когда тот или иной файл был изменен последний раз — добавим к команде еще и -D.
Теперь поработаем с определенной группой файлов. Для примера отберем те, у которых формат pdf — сделать это позволяет опция -P. Она дает команде понять, что нужно выводить только документы, соответствующие маске. Чтобы задать маску для любого количества символов от 0 до бесконечности используется знак *, а чтобы обозначить только 1 символ — знак ?. Название файла или папки следует заключить в одинарные кавычки.
tree -P ‘*.pdf’ —prune
Опция —prune нужна для того, чтобы исключить из выдачи папки, внутри которых нет искомых документов (по умолчанию команда выводит даже те папки, которые не имеют отношения к поисковому запросу).
Вот что получаем в итоге:
Стандартно результат команды tree направляется в терминал. Но есть возможность напечатать его в файл и сохранить для дальнейшего использования. С этой целью создадим документ txt с названием tree_command_results и поместим его в корневой каталог. После этого выполним команду следующего вида:
tree -d -o tree_command_results.txt
Опция -d использована для сокращения количества информации и ее присутствие здесь не обязательно. Опция -o отвечает за перенаправление вывода в файл.
В терминале никакой результат не отображается:
Зато в указанном файле находим перечень папок, который занимает 45 страниц:
Для получения дополнительной информации о файлах дополним команду tree опциями -h (показывает размер), -u (указывает на аккаунт, с которого файл был создан), -p (так мы узнаем, что можно делать с каждым конкретным файлом — только просматривать или также изменять его содержимое). Также используем параметр -f, чтобы видеть полный путь к каждому документу.
Полезный лайфхак — если объединить опции -P и -f, можно быстро находить файлы, затерявшиеся в памяти компьютера:
tree -f -P ‘*studio*’ —prune
Корректная процедура выполнения практического задания: работа с директориями
1. Выведите путь к вашей текущей директории.
pwd
2. Перейдите в директорию /etc.
cd /etc
3. А теперь перейдите в вашу домашнюю директорию с помощью ровно трех нажатий клавиш.
cd (и нажатие клавиши Enter)
4. Перейдите в директорию /boot/grub с помощью ровно одиннадцати нажатий клавиш.
cd /boot/grub (Используйте клавишу Tab)
5. Перейдите в родительскую директорию для текущей директории.
cd .. (Между cd и .. должен быть пробел)
6. Перейдите в корневую директорию.
cd /
7. Выведите список содержимого корневой директории.
ls
8. Выведите подробный список содержимого корневой директории.
ls -l
9. Оставаясь в текущей рабочей директории, выведите список содержимого директории /etc.
ls /etc
10. Оставаясь в текущей директории, выведите список содержимого директорий /bin и /sbin.
ls /bin /sbin
11. Оставаясь в текущей директории, выведите список содержимого директории ~.
ls ~
12. Выведите список всех файлов (включая скрытые файлы), находящихся в вашей домашней директории.
ls -al ~
13. Выведите список файлов, находящихся в директории /boot, с использованием формата величин для облегчения чтения человеком.
ls -lh /boot
14. Создайте директорию testdir в вашей домашней директории.
mkdir ~/testdir
15. Перейдите в директорию /etc и, оставаясь в ней, создайте директорию newdir в вашей домашней директории.
cd /etc ; mkdir ~/newdir
16. Создайте с помощью одной команды директории ~/dir1/dir1/dir2/dir3 (директория dir3 является поддиректорией директории dir2, а директория dir2 — поддиректорией директории dir1).
mkdir -p ~/dir1/dir2/dir3
17. Удалите директорию testdir.
rmdir testdir
18. Если позволяет время (или вы ждете момента, когда остальные студенты закончат выполнение данного практического задания), попытайтесь воспользоваться командами и и понять принцип их работы. Обратитесь к странице руководства man для командной оболочки с целью поиска информации о данных командах.
man bash # открытие страницы руководства /pushd # поиск раздела с описанием команды pushd n # переход к следующему разделу (повторите это действие два/три раза)
Командная оболочка Bash поддерживает две встроенных команды с именами pushd и popd. Обе команды предназначены для работы со стандартным стеком посещенных ранее директорий. Команда pushd позволяет поместить директорию в стек и переместиться в новую текущую директорию, команда popd удаляет директорию из стека и устанавливает предыдущую текущую директорию.
paul@debian7:/etc$ cd /bin paul@debian7:/bin$ pushd /lib /lib /bin paul@debian7:/lib$ pushd /proc /proc /lib /bin paul@debian7:/proc$ popd /lib /bin paul@debian7:/lib$ popd /bin
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 5. Страницы руководств man | Глава 7. Работа с файлами |
Утилита mv
Переименование файлов с помощью утилиты mv
Утилита используется для переименования файлов или для перемещения файлов в другие директории.
paul@debian7:~$ ls dir33 dir42 file42 file42.copy SinkoDeMayo paul@debian7:~$ mv file42 file33 paul@debian7:~$ ls dir33 dir42 file33 file42.copy SinkoDeMayo paul@debian7:~$
В том случае, если вам необходимо переименовать один файл, утилита является предпочтительным инструментом.
Переименование директорий с помощью утилиты mv
Эта же утилита может быть использована и для переименования директорий.
paul@debian7:~$ ls -l итого 8 drwxr-xr-x 2 paul paul 4096 окт 15 09:36 dir33 drwxr-xr-x 2 paul paul 4096 окт 15 09:36 dir42 -rw-r--r-- 1 paul paul 0 окт 15 09:38 file33 -rw-r--r-- 1 paul paul 0 окт 15 09:16 file42.copy -rw-r--r-- 1 paul paul 0 май 5 2005 SinkoDeMayo paul@debian7:~$ mv dir33 backup paul@debian7:~$ ls -l итого 8 drwxr-xr-x 2 paul paul 4096 окт 15 09:36 backup drwxr-xr-x 2 paul paul 4096 окт 15 09:36 dir42 -rw-r--r-- 1 paul paul 0 окт 15 09:38 file33 -rw-r--r-- 1 paul paul 0 окт 15 09:16 file42.copy -rw-r--r-- 1 paul paul 0 май 5 2005 SinkoDeMayo paul@debian7:~$
Команда mv -i
Утилита поддерживает параметр по аналогии с утилитами и .
В примере ниже показано, как при использовании команды запрашивается подтверждение перезаписи существующего файла.
paul@debian7:~$ mv -i file33 SinkoDeMayo mv: переписать "SinkoDeMayo"? no paul@debian7:~$
Основы SELinux
SELinux представляет собой систему маркировки, каждый процесс имеет метку. Каждый файл, каталог или даже пользователь в системе имеет метку. Даже портам и устройствам и именам хостов в системе присвоены метки. SELinux определяет правила доступа процесса к объектам с определенными метками. Это и называется политикой. За соблюдением правил следит ядро. Иногда это еще называется обязательный контроль доступа (Mandatory Access Control, MAC)
Владелец файла не имеет полной свободы действий над атрибутами безопасности. Стандартные атрибуты контроля доступа, такие как группа и владелец ничего не значат для SELinux. Полностью все управляется метками. Значения атрибутов могут быть установлены и без прав root, но на это нужно иметь специальные полномочия SELinux.
Теперь поговорим немного о политиках. Мы определяем метку для процессов определенного типа, а также на объекты файловой системы тоже определенного типа. Вот представьте, себе систему, в которой объекты (процессы) это кошки и собаки. Это типы процессов. И у нас есть объекты, к которым они хотят иметь доступ — еда. Но еда у них разная еда_котов и еда_собак. Нужно чтобы объекты имели доступ только к своей еде.
У собаки есть разрешение есть свою пищу, а у кошки — свою. В политиках SELinux это будет выглядеть вот так:
Теперь ядро будет следить, чтобы соблюдались эти правила. В системе SELinux все по умолчанию запрещено, таким образом, если собака попытается съесть кошачий корм, ядро не позволит это сделать.
Допустим, процесс Apache имеет метку httpd_t, а файлы, к которым у Apache должен быть доступ мы назвали httpd_sys_content. Также у нас есть данные кредитных карт, которые хранятся в базе данных mysql. Если хакер взломает процесс Apache и у него будет root доступ, то он все равно не сможет получить доступ к файлам от mysql.
SELinux может вызвать у системных администраторов большое количество проблем, многие её просто отключают, таким образом, решив проблему и уменьшив безопасность. Как уже говорилось выше, по умолчанию SELinux блокирует все и вся. Это подходит под описание строгой политики. Но чтобы облегчить системным администраторам работу, были разработаны другие стандартные политики. Во многих дистрибутивах используется целевая политика (targeted), она охватывает около 200 сетевых служб и процессов, все же остальные программы запускаются и работают свободно, к ним никакие модели SELinux не применяются.
SELinux может работать в трех режимах — отключен, система полностью отключена и не работает, режим ограничений Enforcing — программа активирована и блокирует все не соответствующие политикам действия и третий режим Permissive — только фиксировать нарушения.
Политики SELinux бывают тоже нескольких типов. Политика targeted, которую мы рассматривали выше относится к типу Type Enforcment (TE) политик, в которых управление доступом к файлам осуществляется на основе ролей. Сюда же относится политика strict. Есть ещё политики Multi-Level Security (MLS), в которых добавлены дополнительные категории, они сложные и ненужны рядовому пользователю, поэтому начинающим можно пока забыть об их существовании. Надо понять, что подсистема SELinux разработана военными для военных, поэтому обычным пользователям все её возможности вряд-ли понадобятся. В этой статье мы будем обсуждать именно политику targeted.
Теория в общих чертах рассмотрена. А теперь перейдем к практической части.
Утилита touch
Создание пустого файла
Один из простых способов создания пустого фала заключается в использовании утилиты . (Позднее в данной книге мы рассмотрим множество других способов создания файлов.)
Данный пример начинается с открытия пустой директории, в которой с помощью утилиты создаются два файла, после чего выводится список созданных файлов.
paul@debian7:~$ ls -l итого 0 paul@debian7:~$ touch file42 paul@debian7:~$ touch file33 paul@debian7:~$ ls -l итого 0 -rw-r--r-- 1 paul paul 0 окт 15 08:57 file33 -rw-r--r-- 1 paul paul 0 окт 15 08:56 file42 paul@debian7:~$
Команда touch -t
Утилита позволяет устанавливать набор значений свойств пустых файлов в процессе их создания. Удастся ли вам определить, какие значения свойств были установлены, ознакомившись с приведенным ниже примером? Если вы не смогли разобраться самостоятельно, обратитесь к странице руководства для утилиты .
paul@debian7:~$ touch -t 200505050000 SinkoDeMayo paul@debian7:~$ touch -t 130207111630 BigBattle.txt paul@debian7:~$ ls -l total 0 -rw-r--r-- 1 paul paul 0 июл 11 1302 BigBattle.txt -rw-r--r-- 1 paul paul 0 окт 15 08:57 file33 -rw-r--r-- 1 paul paul 0 окт 15 08:56 file42 -rw-r--r-- 1 paul paul 0 май 5 2005 SinkoDeMayo paul@debian7:~$
Абсолютные и относительные пути
Вы должны иметь представление об в рамках дерева директорий файловой системы. Если вы вводите путь, начинающийся с символа , подразумевается, что путь будет указан относительно файловой системы. Если же вы не начинаете ввод пути с символа слэша, подразумевается, что точкой отсчета будет текущая директория.
В примере ниже показано, что текущей директорией является директория . Для перехода из этой директории в директорию вам придется ввести команду вместо команды .
paul@debian8$ pwd /home/paul paul@debian8$ cd home bash: cd: home: Нет такого файла или каталога paul@debian8$ cd /home paul@debian8$ pwd /home
При нахождении в директории вам придется ввести команду вместо команды для перехода в поддиректорию текущей директории .
paul@debian8$ pwd /home paul@debian8$ cd /paul bash: cd: /paul: Нет такого файла или каталога paul@debian8$ cd paul paul@debian8$ pwd /home/paul
В том же случае, если вашей текущей директорией является , то и команда , и команда позволят вам переместиться в директорию .
paul@debian8$ pwd / paul@debian8$ cd home paul@debian8$ pwd /home paul@debian8$ cd / paul@debian8$ cd /home paul@debian8$ pwd /home
Этот пример был последним примером, в котором используются команды . С этого момента информация о текущей директории будет всегда выводиться в рамках приглашения командной оболочки. Далее в данной книге будут даны пояснения относительно того, как следует использовать переменную командной оболочки для вывода описанной информации.
Корректная процедура выполнения практического задания: работа с файлами
1. Выведите список файлов директории /bin.
ls /bin
2. Выведите информацию о типах файлов /bin/cat, /etc/passwd и /usr/bin/passwd.
file /bin/cat /etc/passwd /usr/bin/passwd
3a. Загрузите файлы wolf.jpg и LinuxFun.pdf с ресурса http://linux-training.be (с помощью команд wget http://linux-training.be/files/studentfiles/wolf.jpg и wget http://linux-training.be/files/books/LinuxFun.pdf)
wget http://linux-training.be/files/studentfiles/wolf.jpg wget http://linux-training.be/files/books/LinuxFun.pdf
3b. Выведите информацию о типах файлов wolf.jpg и LinuxFun.pdf.
file wolf.jpg LinuxFun.pdf
3c. Переименуйте файл wolf.jpg в wolf.pdf (с помощью команды mv).
mv wolf.jpg wolf.pdf
3d. Выведите информацию о типах файлов wolf.pdf и LinuxFun.pdf.
file wolf.pdf LinuxFun.pdf
4. Создайте директорию ~/touched и перейдите в нее.
mkdir ~/touched ; cd ~/touched
5. Создайте файлы today.txt и yesterday.txt в директории touched.
touch today.txt yesterday.txt
6. Измените дату создания файла yesterday.txt таким образом, чтобы она совпадала с датой прошлого дня.
touch -t 200810251405 yesterday.txt (замените 20081025 на дату, соответствующую вчерашнему дню)
7. Создайте копию файла yesterday.txt с именем copy.yesterday.txt.
cp yesterday.txt copy.yesterday.txt
8. Переименуйте файл copy.yesterday.txt в kim.
mv copy.yesterday.txt kim
9. Создайте директорию с именем ~/testbackup и скопируйте все файлы из директории ~/touched в нее.
mkdir ~/testbackup ; cp -r ~/touched ~/testbackup/
10. Используйте одну команду для удаления директории ~/testbackup и всех файлов из нее.
rm -rf ~/testbackup
11. Создайте директорию ~/etcbackup и скопируйте файлы с расширением .conf (*.conf) из директории /etc в нее. Проверьте, был ли осуществлен обход всех поддиректорий директории /etc?
cp -r /etc/*.conf ~/etcbackup
Будут скопированы исключительно файлы с расширением .conf (*.conf), находящиеся непосредственно в директории /etc/.
12. Используйте утилиту rename для переименования всех файлов с расширением .conf (*.conf) таким образом, чтобы расширения всех этих файлов изменились на .backup. (Если у вас есть возможность работы более чем со одним дистрибутивом, попробуйте выполнить эту операцию во всех этих дистрибутивах!).
В дистрибутиве RHEL: touch 1.conf 2.conf ; rename conf backup *.conf В дистрибутиве Debian: touch 1.conf 2.conf ; rename 's/conf/backup/' *.conf
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 6. Работа с директориями | Глава 8. Работа с содержимым файлов |
Команда TREE — графическое представление структуры папок или пути.
    Команда TREE позволяет отобразить иерархическую структуру каталогов в графическом виде. При отображении структуры, по умолчанию, используются символы псевдографики. Формат командной строки:
TREE
Параметры командной строки:
/F — Вывод имен файлов в каждой папке.
/A — Использовать символы ASCII вместо символов псевдографики.
tree /? — отобразить подсказку по использованию команды.
tree C:\users — отобразить структуру каталогов от каталога C:\users
tree /f C:\users — отобразить структуру каталогов от каталога C:\users с отображением имен файлов.
tree /a /f C:\users — отобразить структуру каталогов от каталога C:\users с отображением имен файлов без использования символов псевдографики.
tree C:\ | more — отобразить структуру каталогов от корневого каталога диска C: в постраничном режиме вывода на экран.
tree C:\ > disk_C.txt — отобразить структуру каталогов от корневого каталога диска C: с выдачей результатов в текстовый файл disk_C.txt .
При просмотре полученного файла с результатами отображения структуры каталога, необходимо учитывать, что в командной строке используется DOS-кодировка. При просмотре в редакторе MicroSoft Word, на запрос преобразования данных необходимо указать использование кодировки «Кириллица (DOS)». При использовании для просмотра программных средств, не поддерживающих символы псевдографики, можно воспользоваться параметром /A , что позволит отобразить структуру папок с использованием отображаемых символов ASCII (+,_ | и т.п.). Пример отображаемой структуры каталога C:\PROGRAM FILES\FAR MANAGER :
Если вы желаете поделиться ссылкой на эту страницу в своей социальной сети, пользуйтесь кнопкой «Поделиться»
Источник
Количество файлов в папке с помощью tree
Утилита tree выводит дерево файлов и папок, а потом подсчитывает их количество по отдельности. Кроме того, утилита имеет множество опций и настроек. Но она не поставляется в системе по умолчанию. Для ее установки в Ubuntu выполните:
Синтаксис утилиты очень прост:
$ tree опции каталог
Теперь разберем ее основные опции:
- -a — выводить все файлы, включая файлы, которые начинаются на точку;
- -d — выводить только директории;
- -l — открывать символические ссылки;
- -f — выводить полный путь к файлу;
- -x — оставаться только в пределах этого раздела, не переходить по точкам монтирования;
- -L — устанавливает максимальный уровень вложенности;
- -P — выбирать только те файлы и папки, которые подходят под регулярное выражение;
- -I — не выводить файлы, которые подходят под регулярное выражение;
- —prune — не выводить пустые папки;
- -o — записать вывод в файл;
В утилиты есть еще опции по сортировке выводимого дерева и по формату вывода имен файлов, но мы не будем их рассматривать, поскольку нас интересует только количество файлов в папке Linux. Сначала считаем количество файлов и папок во всех подпапках:
Теперь только в текущей, задаем максимальную вложенность равной единице:
Еще можем включить вывод всех файлов, включая скрытые:
Или выберем только те, которые содержат второй символ в имени «a»:
Типичная структура ФС системы Linux
Наличие тех или иных директорий может быт в зависимости от того, какой дистрибутив Вы используете. Ниже список наиболее важных и часто встречающихся:
/
/bin
/boot
/dev
/etc
/home
/lib
/lib64
/lost+found
/media
/mnt
/opt
/proc
/root
/run
/sbin
/selinux
/srv
/sys
/tmp
/usr
/var
Итак, рассмотрим все по-порядку.
/bin — главные бинарные файлы (исполняемые программы)
Содержит основные модули, утилиты и командные оболочки, которые могут обеспечить необходимый минимально уровень работоспособности ОС. Размещение этих файлов в директории /bin гарантирует, что в системе эти важные утилиты будут даже в случае, если другие файловые системы не смонтированы.
/dev — файлы устройств
В Linux все устройства предоставлены в виде специфических файлов, расположеных в этой директории. К примеру, файл /dev/sda представляет диск SATA. Также в этой директории хранятся файлы псевдо-устройств (виртуальных), для этих файлов нет соответствующего реального устройства. Например, файл /dev/random генерирует случайные числа, а файл /dev/null является специальным устройством для удаления всех входных данных.
/home — домашние директории пользователей
По идеологии UNIX для обеспечения безопасности ОС рекомендуется хранить пользовательские данные именно в этой директории. Например, если ваше имя пользователя user, то у вас есть домашняя дирекотория, которая находится в /home/user и содержит пользовательские конфигурационные файлы и личную информацию. Каждый пользователь имеет доступ на запись только в свою домашнюю директорию.
/lib — основные библиотеки
Эта директория предназначена для хранения системных библиотек и компонентов компилятора языка С, необходимых для работы программ из директорий /bin и /sbin и операционной системы в целом.
/lib64 — 64-битные основные библиотеки
Эта директория присуствует в основном на 64-битных системах, содержит набор библиотек и компонентов компилятора языка С для 64-битных программ.
/lost+found — восстановленные файлы
Присуствует во всех ОС Linux. При сбое в работе файловой системы и дальнейшей проверке файловой системы (при загрузке ОС), все найденные поврежденные файлы будут помещены в директорию lost+found, их можно попытаться восстановить.
/mnt — точка для ручного монтирования
Используется для временного ручного монтирования (с помощю команды mount) различных устройств, таких как CD-ROM, USB-накопителей и т.д.
/opt — вспомогательные пакеты программ
Находятся субдиректории для дополнительных пакетов программного обеспечения. Каталог широко используется проприетарным программным обеспечением, которое не подчиняется стандартной иерархии файловых систем.
/proc – файлы ядра и процессов
В эту директорию примонтирована виртуальная файловая система procfs. В ней находятся специальные файлы, в которых представлена информация о системе и о выполняющихся процессах. Например, в файле /proc/cpuinfo собержиться информация о процессоре.
/run – файлы состояния приложений
Является достаточно новой директорией, в которой приложениям предоставляется возможность стандартным образом хранить вспомогательные файлы, которые им требуются, например, сокеты и идентификаторы процессов. Эти файлы нельзя хранить в каталоге /tmp, поскольку эти файлы могут быть там удалены.
/sbin — бинарные файлы (программы) для администрирования системы
Директория /sbin похожа на /bin. В ней находятся важные двоичные файлы, которые, как правило, предназначены для их запуска пользователем при администрировании системы.
/selinux – виртуальная файловая система SELinux
В некоторых дистрибутивах (Red Hat, Fedora и т.п) для обеспечения безопасности используется пакет SELinux (Security-Enhanced Linux), при этом создается директория с файлами /selinux.
/srv – данные сервисных служб
Эта директория присуствует не во всех дистрибутивах, содержит «данные для сервисов, предоставляемых системой» (например сервер Apache может хранить файлы вашего сайта в этой директории). В большинстве случаев директория пуста.
/sys — виртуальная файловая система sysfs
Эта директория появилась с выходом ядра версии 2.6 и в нее примонтирована виртуальная файловая система sysfs с информацией об устройствах, драйверах, ядре ОС и т.п.
/tmp — временные файлы
Временные файлы, обычно удаляются при перезагрузке системы. Все пользователи имеют права чтения и записи в эту директорию.
Зачем нужно монтирование
С помощью такого подхода — когда любой диск может быть любой папкой в системе, можно делать очень гибкую настройку. Самый частый пример, встречающийся на практике: файлы пользователя хранятся в папке /home/имя_пользователя/, например, у меня это папка /home/mial/. При установке операционной системы я могу сделать так, что мой второй или третий диск (а не системный) будет смонтирован в точку /home/mial/. То есть вся операционная система будет располагаться на одном диске, а все мои пользовательские файлы — на другом. Что это даёт? В случае переустановки системы, я вновь настрою монтирование диска с моими файлами в папку /home/mial/ и в результате в новой, только что установленной системе, уже будут на месте все мои документы, фотографии и прочее!
Поскольку часто узким местом в мощных компьютерах является скорость чтения с диска, то на на серверах с высокой нагрузкой практикуется перенос файлов баз данных (например, /var/lib/mysql/ на другой диск), возможен перенос файлов сервера (/srv/http/) на третий диск, файлов логов (/var/log/httpd/) на ещё один диск и т. д. Это позволяет добиться того, что данные из баз данных считываются независимо от записи журналов, то есть пока выполняются операции чтения-записи для одного процесса, другому процессу не нужно ждать своей очереди — всё выполняется одновременно.
Ещё монтирование позволяет выбрать различные режимы, например, диск можно смонтировать в режиме «только чтение» — в результате с него можно будет просматривать файлы, но испортить этот диск невозможно.
В общем, несмотря на то, что монтирование является чем-то непривычным для пользователей Windows, это потрясающая функция! Причём ничего сложного в этом нет, если понять суть.
Утилита mkdir
Обход дерева директорий файловой системы Unix является интересным занятием, но еще больший интерес представляет создание ваших собственных директорий с помощью утилиты . Вам придется передавать как минимум один параметр утилите , а именно, имя новой директории, которая должна быть создана. При этом следует серьезно задумываться перед использованием начального символа / в именах директорий.
paul@debian8:~$ mkdir mydir paul@debian8:~$ cd mydir paul@debian8:~/mydir$ ls -al итого 8 drwxr-xr-x 2 paul paul 4096 сен 17 00:07 . drwxr-xr-x 48 paul paul 4096 сен 17 00:07 .. paul@debian8:~/mydir$ mkdir stuff paul@debian8:~/mydir$ mkdir otherstuff paul@debian8:~/mydir$ ls -l итого 8 drwxr-xr-x 2 paul paul 4096 сен 17 00:08 otherstuff drwxr-xr-x 2 paul paul 4096 сен 17 00:08 stuff paul@debian8:~/mydir$
Команда mkdir -p
Исполнение следующей команды закончится неудачей, так как для директории не существует.
paul@debian8:~$ mkdir mydir2/mysubdir2/threedirsdeep mkdir: невозможно создать каталог "mydir2/mysubdir2/threedirsdeep": Нет такого файла или каталога
В случае использования параметра утилиты при необходимости будут создаваться родительские директории.
paul@debian8:~$ mkdir -p mydir2/mysubdir2/threedirsdeep paul@debian8:~$ cd mydir2 paul@debian8:~/mydir2$ ls -l итого 4 drwxr-xr-x 3 paul paul 4096 сен 17 00:11 mysubdir2 paul@debian8:~/mydir2$ cd mysubdir2 paul@debian8:~/mydir2/mysubdir2$ ls -l итого 4 drwxr-xr-x 2 paul paul 4096 сен 17 00:11 threedirsdeep paul@debian8:~/mydir2/mysubdir2$ cd threedirsdeep/ paul@debian8:~/mydir2/mysubdir2/threedirsdeep$ pwd /home/paul/mydir2/mysubdir2/threedirsdeep
Как посмотреть количество файлов в папке Linux
Самый простой способ решить эту задачу — использовать утилиту ls вместе с утилитой wc. Они покажут сколько файлов находится в текущей папке:
В моем случае утилита выдала результат 21, но поскольку ls выводит размер всех файлов в папке строкой total, то у нас файлов на один меньше. Нужно учесть, что тут отображаются еще и директории. Каждая директория начинается с символа «d», а каждый файл с «-«. Для символических ссылок используется «l». Посмотрите внимательно на вывод ls:
Чтобы их отсеять используйте grep:
Эта конструкция выберет только те строки, которые начинаются на дефис. Если вас интересуют не только обычные файлы, но и скрытые, то можно использовать опцию -a:
Так можно подсчитать количество папок:
А так символических ссылок:
Если вам нужно подсчитать количество файлов во всех подпапках, то можно использовать опцию -R:
С фильтром только файлы нам уже не страшно, что команда будет выводить служебную информацию. Если вы не хотите использовать ls, можно воспользоваться утилитой find:
Если нужно смотреть не только количество файлов в папке, но и подпапок, просто не нужно использовать -type f:
Только папки отдельно:
А в случае, когда необходимо перебрать все файлы во всех подпапках, не устанавливайте параметр -maxdepth:
Все эти команды это очень хорошо, но есть еще одно, более удобное средство посчитать количество файлов linux, это утилита tree.
Поиск больших файлов командой find
Простой поиск
Команда find имеет опцию -size, которая позволяет указать размер файлов для поиска.
Найдем файлы, которые занимают больше 1Gb:
- Символ точка . после самой команды find, означает, что поиск нужно вести в текущей директории. Вместо точки вы можете указать, например, корневой раздел или путь до любой другой директории.
- -mount означает, что в процессе поиска не нужно переходить на другие файловые системы.
- -type f означает, что мы ищем файлы.
-
-size +1G означает, что нужно найти файлы, размер которых превышает 1Gb. Размер можно указать в различных форматах:
- b — блоки размером 512 байт. Числом указывается количество блоков.
- c — в байтах. Например: -size +128с
- w — в двухбайтовых словах
- k — в килобайтах
- M — в мегабайтах
- G — в гигабайтах
- 2>/dev/null используется, чтобы не показывать ошибки (например, если нет доступа к файлу).
В результате выполнения команды будет выведен список файлов без какой-либо дополнительной информации.
Вывод подробной информации
Добавим в вывод информацию о каждом файле и отсортируем список по размеру. Выполняем команду
Данная команда состоит из трех частей:
- Команда find ищет файлы, которые имеют размер больше 512 мегабайт.
- Результирующий список файлов передается команде xargs, которая, в свою очередь, запускает команду ls -lh над этим списком файлов. В результате получается таблица с файлами и информацией о файлах.
Опция -r, команды xarg, используется для того, чтобы не запускать команду ls, если команда find вернула пустой результат (не нашла файлов). Вместо -r можно использовать длинную запись — опцию —no-run-if-emptyОпция -d ’\n’ используется, чтобы разделять список файлов только по символу новой строки (по \n). А у нас так и есть — каждый файл на новой строке. Иначе неправильно будут обработаны файлы, в названии которых содержится пробел, так как по умолчанию команда xarg в качестве разделителя использует одновременно пробел, табуляцию или символ новой строки.
Примечание: Для BSD-систем вместо -d ’\n’ нужно использовать опцию −0, а у команды find вместо -print использовать -print0. Пример: find . -mount -type f -size +512M -print0 2>/dev/null | xargs -0 ls -lh | sort -k5,5 -h -r
- Затем результат команды ls передается команде sort, которая выполняет сортировку списка (таблицы) по пятой колонке — 5-я колонка содержит размеры файлов.Ключ -h означает, что результат нужно вывести в удобно-читаемом виде (human-readable).Ключ -r означает, что сортировку нужно выполнять по убыванию (reverse).
Иноды и метаданные
Файловая система должна хранить файлы, которые могут находиться в каталогах, которые, в свою очередь, могут иметь подкаталоги. При этом что-то где-то должно записывать информацию о расположении всех файлов файловой системы, имена файлов, их размер, к каким учетным записям они принадлежат, какие у них разрешения и т.д. Данная информация называется метаданными — данные, которые описывают другие данные. Метаданные хранятся в иноде файла.
Инод (или «индексный дескриптор», «inode», от англ. «index node») — это структура данных, в которой хранятся метаданные о стандартных файлах, каталогах или других объектах файловой системы. Каждый используемый инод ссылается на 1 файл. Каждый файл имеет 1 инод. Каталоги, символьные и блочные устройства — всё это является файлами, а значит у каждого из них есть по 1 иноду.
Информация об инодах хранится в специальной таблице, расположенной, обычно, в начале каждого раздела диска. Каждый раздел имеет свою, отдельную таблицу инодов.
Для каждого файла в каталоге есть запись, содержащая имя файла и связанный с ним номер инода. Вся остальная информация о файле извлекается из таблицы инодов с помощью номера инода файла.
Иноды уникальны только в границах разделов своих файловых систем. Если у вас есть два файла, которые находятся на разных разделах диска, то у них могут быть одинаковые номера инодов.
Если у вас закончатся иноды, то вы больше не сможете создавать новые файлы, даже если у вас осталось место в разделе диска.
Общий синтаксис
find <где искать> <опции>
<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».
<опции> — набор правил, по которым выполнять поиск.
* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.
Описание опций
Опция | Описание |
---|---|
-name | Поиск по имени. |
-iname | Регистронезависимый поиск по имени. |
-type |
Тип объекта поиска. Возможные варианты:
|
-size | Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»). |
-mtime | Время изменения файла. Указывается в днях. |
-mmin | Время изменения в минутах. |
-atime | Время последнего обращения к объекту в днях. |
-amin | Время последнего обращения в минутах. |
-ctime | Последнее изменение владельца или прав на объект в днях. |
-cmin | Последнее изменение владельца или прав в минутах. |
-user | Поиск по владельцу. |
-group | По группе. |
-perm | С определенными правами доступа. |
-depth | Поиск должен начаться не с корня, а с самого глубоко вложенного каталога. |
-maxdepth | Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный. |
-prune | Исключение перечисленных каталогов. |
-mount | Не переходить в другие файловые системы. |
-regex | По имени с регулярным выражением. |
-regextype <тип> | Тип регулярного выражения. |
-L или -follow | Показывает содержимое символьных ссылок (симлинк). |
-empty | Искать пустые каталоги. |
-delete | Удалить найденное. |
-ls | Вывод как ls -dgils |
Показать найденное. | |
-print0 | Путь к найденным объектам. |
-exec <команда> {} \; | Выполнить команду над найденным. |
-ok | Выдать запрос перед выполнением -exec. |
Также доступны логические операторы:
Оператор | Описание |
---|---|
-a | Логическое И. Объединяем несколько критериев поиска. |
-o | Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска. |
-not или ! | Логическое НЕ. Инвертирует критерий поиска. |
Полный набор актуальных опций можно получить командой man find.