Модуль 6. Работа с файлами и каталогами. FHS
Введение
Из этого модуля вы узнаете, что такое стандарт FHS, почему «всё есть файл», и познакомитесь с необычными видами файлов, которые обитают в мире Linux. Вы узнаете, как устроена файловая система Linux изнутри и с помощью каких команд наиболее эффективно управлять объектами файловой системы.
Основные отличия в работе с файлами
Давайте вспомним, какие различия между Windows и Linux мы обсуждали в первом модуле.
Всё есть файл
Первым существенным отличием является то, что в Linux файлы — это не то, чем они кажутся. Файлы используются не только для хранения информации на диске. С их помощью реализованы, например, каталоги и ссылки. А еще интерфейс доступа к файлам используется для взаимодействия с устройствами, каналами и сокетами.
Такой подход по обеспечению доступа ко всем возможностям операционной системы через унифицированный интерфейс файловой системы получил название «всё есть файл». Этот интерфейс, конечно, может быть не всегда оптимальным для решения поставленной задачи, зато он всегда одинаковый. Для примера вспомним каталог /proc
. Мы уже говорили, что в эту точку монтируется виртуальная файловая система, которая предоставляет доступ к информации о системе и её процессах, поэтому с помощью команды cat /proc/meminfo
можно увидеть параметры использования памяти.
Если в Linux придерживаются концепции «всё есть файл», то в Windows следуют концепции «всё есть объект», то есть у всех системных ресурсов — файлов, каталогов, аппаратных устройств — есть свойства и методы, как в объектно-ориентированном программировании.
Единое пространство имен
Вторым отличием от Windows является единое пространство имен файловой системы. Если в Windows каждому блочному устройству назначается собственная буква и абсолютный путь к локальному файлу имеет вид C:\pagefile.sys
, то в *nix-подобных системах все диски встраиваются в единое пространство имен, которое начинается с косой черты /
(корня).
Например, в операционной системе Astra Linux при подключении внешнего usb-накопителя его файловая система монтируется в точку /run/user/<UID>/media/<ID устройства>
с помощью модуля FUSE (от англ. filesystem in userspace — «файловая система в пользовательском пространстве»). Более того, любые каталоги, например, /home
или /var
, могут физически располагаться на других устройствах, в том числе сетевых, и монтироваться средствами операционной системы.
Примечание
Вопросы, связанные с файловыми системами, будут подробно рассмотрены в Модуль 19. Файловая система в Linux. Работа с блочными устройствами и LVM.
Подход к хранению файлов программ
Третьим отличием является подход к хранению файлов. В системе Windows служебные файлы операционной системы находятся в каталоге C:\Windows
, а файлы приложений в каталоге C:\Program Files
, причем для каждого приложения создается отдельная папка, в которой хранятся все его файлы, организованные любым способом на усмотрение разработчиков приложения.
В Linux для организации файлов придерживаются так называемого стандарта иерархии файловых систем (Filesystem Hierarchy Standard, FHS), который унифицирует размещение файлов по их назначению. Например, исполняемые файлы приложений должны находиться в каталогах /bin
и /sbin`
(от англ. binary - бинарные), конфигурационные файлы находятся в папке /etc
(от англ. «et cetera» - прочие), а изменяемые файлы, такие как журналы, должны находиться в каталоге /var
(от англ. variable - изменчивый).
Зависимость от регистра символов
Четвертое отличие состоит в том, что файловые системы Linux традиционно учитывают регистр символов, то есть в одном каталоге одновременно могут находиться файлы test.txt
, Test.txt
и TEST.txt
, которые будут считаться совершенно разными файлами.
Если же примонтировать в Linux диск, отформатированный в NTFS или exFAT, то мы сможем создать только один из этих файлов и обращаться к нему по любому из предложенных вариантов именования, как в Windows. То есть эта особенность является особенностью файловой системы, а не операционки.
Подход к использованию ссылок
Рассмотрим пятое отличие, которое заключается в использовании ссылок.
Несмотря на то, что команда mklink
для создания ссылок появилась в системе Windows еще со времен NT, большинство пользователей Windows ограничиваются использованием ярлыков, которые представляют собой обычные файлы с расширением *.lnk
и содержат настройки для быстрого доступа к файлам и папкам. Полным аналогом lnk-файлов в Linux являются файлы *.desktop
.
В системе Linux жесткие (hard link) и мягкие ссылки (symbolic link) получили широкое распространение, поэтому изменения в одном файле могут отражаться сразу в нескольких местах, что сначала может сильно сбивать с толку.
Например, с помощью команд stat /run/cups/cups.sock
и stat /var/run/cups/cups.sock
вы можете убедиться, что эти файлы указывают на айноду с одним и тем же номером, а все потому, что папка /var/run
является мягкой ссылкой на папку /run
, что можно проверить командой ls -l /var/run
. Чуть позднее мы узнаем, что сделано так было для обеспечения обратной совместимости.
Еще интереснее, когда на один и тот же файл указывают сразу несколько жестких ссылок. Например, с помощью команд stat /usr/bin/gunzip
и stat /usr/bin/uncompress
вы можете легко убедиться, что это действительно две разные жесткие ссылки, которые указывают на одну и ту же айноду, поэтому до тех пор, пока мы не удалим обе ссылки, этот файл будет физически оставаться на диске.
Прямая косая черта в качестве разделителя
В завершение напомним, что в Linux в качестве разделителя между именами объектов файловой системы используют символ прямой косой черты «/» (слэш), например, /etc/hosts
. В Windows можно использовать слэш, но более традиционным считается все же использование обратной косой черты «\» (бэкслэш), например, C:\Windows\System32\drivers\etc\hosts
.
Устройство файловой системы Linux
Корневая файловая система и стандарт FHS
Системный диск подключается в Linux непосредственно к операционной системе, и точкой монтирования выступает та самая косая черта, которую называют еще корнем, а файловую систему системного диска, соответственно, называют корневой файловой системой. Именно к папкам корневой файловой системы в дальнейшем монтируются файловые системы других устройств.
Для того чтобы мы всегда знали, в каких каталогах искать нужные нам файлы в бессчетном множестве «аналоговнет», созданных на базе Linux, разработчикам потребовалось упорядочить структуру корневой системы, и они создали единый стандарт файловой системы (Filesystem Hierarchy Standard, FHS). Это очень странный стандарт, которого придерживаются практически все, но которому в полной мере не следует никто.
Причина такого положения вещей заключается в том, что некоторые идеи FHS уже устарели, но сообщество опасается делать резкие движения и продолжает двигаться по инерции. К слову, разработчики GoboLinux попробовали предпринять смелую попытку изменить этот статус-кво, но их похвальные усилия подверглись только насмешкам и были преданы анафеме.
Поэтому, изучая FHS, некоторые моменты лучше принять «как есть», а что-то станет понятным только в сугубо историческом контексте. А если вы думаете, что в структуре каталогов Windows нет подобных атавизмов, то вы просто еще не смотрели на нее глазами разработчиков!
Рассмотрим основные каталоги системы не в алфавитном порядке, чтобы наша история получилась более целостной:
/
– это корневой каталог системы, в эту точку монтируется системный диск./boot
– содержит конфигурационные файлы загрузчика GRUB, образы ядра системы, файлы временной файловой системы initrd, используемые ядром Linux при начальной загрузке./dev
– это каталог псевдофайловой системы devtmpfs, который содержит файлы устройств (от англ. device - устройство). Этот каталог является примером концепции «всё есть файл», поэтому в Windows подобного каталога не существует.Все устройства можно разделить на две группы:
Символьные устройства — обеспечивают последовательный поток ввода/вывода. Например, мышь является символьным устройством, и каждое нажатие кнопки приводит к отправке символа в файл
/dev/input/mouse0
, в чем можно убедиться, если сделать cat этого файла.Блочные устройства — предоставляют произвольный доступ к данным. Например, жесткий диск является блочным устройством, так как обеспечивает чтение/запись данных в произвольном порядке.
/media
– точка для автоматического монтирования сменных носителей, таких как FDD, CD-ROM, DVD-ROM. В эту категорию не попадают флешки – напомним, что внешние USB-носители монтируются в точку/run/user/<UID>/media/
средствами модуля FUSE (от англ. filesystem in userspace — «файловая система в пользовательском пространстве»)./mnt
– точка для монтирования внешних носителей вручную (от англ. mount - монтировать)./proc
– в эту точку монтируется виртуальная файловая система procfs, с помощью которой можно получать информацию о состоянии ядра операционной системы и запущенных процессах (от англ. process - процесс). Например, командаps
берет свои данные именно через файлы procfs.Отметим, что некоторыми файлами procfs можно манипулировать, чтобы изменять конфигурацию ядра. Например, если записать новое значение в файл
/proc/sys/kernel/hostname
, то можно изменить имя хоста «на лету»./sys
- в эту точку монтируется виртуальная файловая система sysfs, которая является новой реализацией procfs и постепенно заменяет ее функции (от англ. system - система)./run
– каталог содержит pid-файлы процессов, файлы временных сокетов и другие данные, описывающие систему с момента ее загрузки. Каталог размещается в TMPFS, поэтому очищается автоматически при перезагрузке системы.
Примечание
Ранее для тех же целей использовался каталог /var/run
, который все еще остался в системе для обеспечения обратной совместимости, но является теперь символической ссылкой на каталог /run
.
/bin
– содержит бинарные файлы стандартных утилит Linux, которые должны быть доступны всем пользователям системы (от англ. binaries - двоичные файлы). В системе Windows такие файлы имеют расширение*.exe
и находятся в каталогеC:\Windows\System32
. Каталог является мягкой ссылкой на каталог/usr/bin
, о чем будет далее по тексту./sbin
– каталог содержит набор системных утилит, которые необходимы для загрузки системы и ее восстановления в случае сбоя, например, init, iptables, ifconfig (от англ. system binaries - системные двоичные файлы). Запускать эти утилиты имеет право только root. Каталог является мягкой ссылкой на каталог/usr/sbin
, о чем будет далее по тексту./lib
– в этом каталоге находятся динамические библиотеки, которые нужны для работы приложений из каталогов/bin/
и/sbin
(от англ. library - библиотека). Каталог является мягкой ссылкой на каталог/usr/lib
, о чем будет далее по тексту./usr/bin
,/usr/sbin
и/usr/lib
– каталоги, на которые ссылаются/bin
,/sbin
и/lib
. Причину, по которой эти каталоги существуют в двух экземплярах, можно понять только в контексте развития вычислительной техники.Давным-давно, когда жесткие диски были размером всего в пару мегабайт, разработчики операционной системы Unix довольно быстро подошли к этому пределу, и им пришлось перенести часть файлов из каталогов bin, sbin и lib на пользовательский диск (поэтому точка монтирования и называется
/usr
, от слова user). Критерий разнесения файлов по каталогам был прост — те файлы, которые не требовались системе до монтирования пользовательского диска, переносились в каталог/usr
.В дальнейшем размер дисков кратно увеличился, и это решение потеряло актуальность, но для обеспечения обратной совместимости каталоги оставили и сделали на них мягкие ссылки. Вот и получается, что этому атавизму уже более 35 лет. И в ближайшее время вряд ли что-то изменится.
/etc
– содержит конфигурационные файлы операционной системы и всех ее служб (от лат. «et cetera» – «и другие», «и тому подобное»). Данный каталог можно сравнить с реестром Windows, который был разработан для преодоления ограничений FAT16, связанных с отсутствием возможности разграничения прав доступа и медленным доступом к большому количеству маленьких INI-файлов с настройками приложений./var
– содержит файлы, которые подвергаются наиболее частому изменению (от англ. variable - переменный):/var/cache
- каталог предназначен для хранения файлов кэша, генерация которых требует значительного количества вычислительных ресурсов и/или операций ввода-вывода. Удаление этих файлов не должно приводить к потере данных./var/lib
– содержит файлы, которые используются для передачи информации о состоянии приложения между его вызовами или для обмена информацией между несколькими экземплярами приложения, которые работают одновременно. В этом каталоге, например, находятся файлы службы SSSD после ее установки./var/lock
– файлы блокировки, указывающие на занятость устройств и других ресурсов. Эти файлы необходимы для возможности использования одного и того же ресурса несколькими приложениями./var/log
– каталог содержит файлы журналов./var/mail
– каталог содержит почтовые ящики локальных пользователей в устаревшем формате mbox, который представляет собой обычный текстовый файл. Для отправки сообщений локальным пользователям достаточно, чтобы в системе была установлена утилитаsendmail
, а, если в системе настроен модуль pam_mail, то при входе в терминал пользователи будут получать уведомления «you have new mail». Локальная почта в какой-то степени является аналогом Windows-утилиты msg.exe./var/run
– устаревший каталог, который оставлен для обратной совместимости и является теперь символической ссылкой на каталог/run
./var/spool
– задачи, ожидающие обработки (например, очередь печати или очередь входящих/исходящих писем)./var/tmp
– временные файлы, которые должны сохраняться между перезагрузками системы.
/opt
– каталог предназначен для размещения дополнительных приложений, которые отклоняются от стандарта FHS и хранят все свои файлы в одном месте (от англ. optional - дополнительный).Каждому приложению выделяется отдельный каталог
/opt/<package>
, внутри которого могут быть каталоги bin, lib, man и др. для хранения исполняемых файлов, библиотек и справочных страниц соответственно. Установка таких приложений сводится к копированию одной папки и может выполняться даже без использования пакетных менеджеров. Таким образом, каталог/opt
является ближайшим аналогом для каталогаC:\Program files
системы Windows./srv
– каталог предназначен для хранения файлов сетевых служб (от англ. service - служба). Например, если хост является веб-сервером, то в этом каталоге может размещаться папка www с файлами обслуживаемых веб-сайтов./tmp
– каталог, в котором хранятся временные файлы. Linux, в отличие от Windows, следит за временными файлами и регулярно очищает этот каталог./home
– содержит домашние каталоги обычных пользователей, в которых хранятся личные файлы, настройки программ и прочее. В системе Windows для тех же целей предназначен каталогC:\Users
./root
– домашний каталог суперпользователя. И тут пытливый камрад должен бы поинтересоваться, а почему каталог/root
лежит в корне, а не в папке/home
? И мы спешим авторитетно ответить, что это очередной артефакт из прошлого.Давным-давно, когда жесткие диски были размером… ну, вы поняли. В общем, одного жесткого диска хватало впритык для хранения файлов операционной системы, поэтому каталог
/home
почти всегда монтировали с отдельного жесткого диска. Но чтобы суперпользователь не терял доступ к своему домашнему каталогу даже в тех случаях, когда пользовательский диск не подключен, его домашний каталог был вынесен отдельно в корень системы. Как говорится, своя флешка ближе к делу./usr
– каталог предназначен для хранения прикладных программ и может быть смонтирован по сети. В нем размещаются общие файлы, которые могут совместно использоваться множеством компьютеров сразу, поэтому в нем не должно быть файлов, специфичных для конкретного хоста, а у пользователей не должно быть прав на запись в этот каталог. В Windows для получения того же эффекта мы можем подключить сетевую папку с архивом полезных приложений, не требующих установки.
Примечание
В корне Astra Linux есть еще два каталога, специфичных для этой операционной системы: parsec и parsecfs. Они связаны с подсистемой безопасности PARSEC, входящей в состав ядра ОС. Однако эти вопросы выходят за рамки данного курса.
Организации хранения данных на диске
Файловые системы Windows и Linux используют немного разные подходы к организации хранения данных на диске, понимание которых позволит избежать проблем в будущем.
В Windows основной файловой системой является NTFS. Диск разбивается на кластеры, а для хранения метаинформации о файлах используется специальная база данных, которая называется главной файловой таблицей (Master File Table, MFT). Строкам этой таблицы или так называемым записям (MFT record) соответствуют файлы, а в столбцах таблицы хранятся значения конкретных атрибутов файлов.
По мере создания новых файлов размер MFT увеличивается, и файл этой базы может стать фрагментирован. Для того чтобы избежать деградации производительности системы в связи с фрагментированностью MFT, в момент форматирования диска система резервирует под MFT 12,5% дискового пространства и удерживает его до тех пор, пока не будет исчерпано все свободное пространство диска.
Наиболее популярной файловой системой Linux является EXT4. Диск разбивается на блоки, которые являются аналогом кластеров NTFS. А для хранения метаинформации о файлах используется структура данных, которая называется айнодой (от англ. information node, inode — информационный узел) и является аналогом записей MFT.
Вывод команды ls -l /home/localadmin/hello.txt
основан на данных из айноды:
Права на файл. Права будут подробно рассмотрены в отдельном модуле этого курса.
Количество жестких ссылок на файл – о них далее.
Пользователь, являющийся владельцем файла.
Группа, являющаяся владельцем.
Размер файла в байтах.
Дата последнего изменения файла.
Полный путь до файла.
А с помощью ключа -i
утилита ls
может показать номер индексного дескриптора:
localadmin@astra:~$ ls -i /home/localadmin/hello.txt
424373 /home/localadmin/hello.txt
Используя команду stat
, можно получить ряд дополнительных атрибутов файла, хранящихся в его айноде. Одним из преимуществ команды stat
в сравнении с ls
является то, что она показывает права доступа к файлу в числовом формате, например, в приведенном ниже примере на файл hello.txt установлены права 0644:
localadmin@astra:~$ stat /home/localadmin/hello.txt
Файл: hello.txt
Размер: 14 Блоков: 8 Блок В/В: 4096 обычный файл
Устройство: 801h/2049d Inode: 671808 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: ( 1000/localadmin) Gid: ( 1000/localadmin)
Доступ: 2024-09-25 11:05:15.816000000 +0300
Модифицирован: 2024-09-25 11:05:22.532000000 +0300
Изменён: 2024-09-25 11:05:22.532000000 +0300
Создан: -
Примечание
Утилита stat
в текущих редакциях ALSE не показывает дату создания файла, но вы без труда найдете ее в графической утилите «Менеджер файлов».
Кстати открыть fly-fm в текущей директории можно командой: fly-fm .
, где символ точки – это текущий каталог, который будет отправлен как аргумент по умолчанию. Также можно открыть текущий каталог в VS Code code -n .
.
Однако, в отличие от таблицы MFT, которая может изменять свой размер динамически, количество индексных дескрипторов статично и определяется только в момент форматирования диска. С этой особенностью связана одна из распространенных проблем Linux, которая возникает, когда какое-нибудь приложение выжигает все доступные дескрипторы, создавая большое количество маленьких файлов, например, в каталоге для журналов. В этом случае свободного места остается много, но создать новый файл не получится. Давайте посмотрим, что можно с этим сделать.
Если подключить к виртуальной машине дополнительный диск объемом 32 Гб, затем создать на диске раздел с помощью утилиты fdisk
и отформатировать этот раздел в ext4 утилитой mkfs
с параметрами по умолчанию, то мы получим 8 млн. блоков по 4Кб и 2 млн. индексных дескрипторов.
$ lsblk
...
$ fdisk /dev/sdb
...
$ mkfs -t ext4 /dev/sdb1
...
Creating filesystem with 8388352 4k blocks and 2097152 inodes
...
По умолчанию размер блока составляет 4Кб, а количество дескрипторов определяется из расчета 1 дескриптор на каждые 16 384 байт дискового пространства, см. параметры blocksize и inode_ratio в конфигурационном файле /etc/mke2fs.conf
. Вы можете изменить этот конфигурационный файл или явно задать размер блока и желаемое количество дескрипторов в момент форматирования диска с помощью ключей -b
и -N
:
$ mkfs -t ext4 -b 1024 –N 5000000 /dev/sdb1
...
Creating filesystem with 33553408 1k blocks and 5000000 inodes
...
Примечание
Файловая система XFS (X File System) позволяет динамически выделять блоки индексных дескрипторов, что снимает проблему их исчерпания. Если же вы используете более традиционную систему EXT4, то на этапе планирования вам следует определить оптимальные параметры диска и периодически следить за статистикой использования айнод.
Узнать количество занятых и свободных айнод можно командой df -i
.
localadmin@astra:~$ df -i
Файловая система Iнодов IИспользовано IСвободно IИспользовано% Cмонтировано в
udev 240770 484 240286 1% /dev
tmpfs 253151 678 252473 1% /run
/dev/sda1 987360 226603 760757 23% /
tmpfs 253151 3 253148 1% /dev/shm
tmpfs 253151 4 253147 1% /run/lock
tmpfs 253151 19 253132 1% /sys/fs/cgroup
tmpfs 253151 10 253141 1% /run/user/107
tmpfs 253151 38 253113 1% /run/user/1000
Еще одним отличием является способ хранения имен файлов. Если в Windows имя файла является частью записи MFT, то в Linux хранение имен реализовано с помощью жестких ссылок.
Дело в том, что индексный дескриптор представляет собой структуру данных фиксированного размера (для ext4 это 256 байт), внутри которой может находиться только ограниченный набор атрибутов: тип файла, размер, дата создания/изменения, информация о владельце и группе, базовые права доступа rwx, ну и, конечно же, ссылки на блоки данных. Поэтому дескриптор плохо подходит для хранения имен произвольной длины. Но для этого отлично подходят специальные файлы каталогов.
В файлы каталогов записываются так называемые жесткие ссылки, которые связывают имя файла с номером индексного дескриптора. У дескриптора таких ссылок может быть сразу несколько, но все они являются равнозначными, поэтому файл будет удален с диска только в том случае, если будут удалены все его жесткие ссылки.
Для того чтобы можно было легко принимать решение об удалении файла, внутри айноды есть атрибут, с помощью которого файловая система ведет подсчет количества жестких ссылок. При создании новой ссылки значение счетчика увеличивается на единицу, при удалении — уменьшается, а если счетчик станет равен нулю, то файл будет удален.
Давайте рассмотрим процесс, как файловая система работает с айнодами, см. рис. 36. Если мы захотим прочитать файл, то система возьмет номер дескриптора из жесткой ссылки, считает метаинформацию о файле, выполнит проверку прав доступа и вернет содержимое файла, прочитав его с диска по ссылкам на блоки данных. В тех случаях, когда размер файла укладывается в 12 блоков, системе будет достаточно так называемых прямых ссылок. Для более крупных файлов есть несколько ссылок косвенной адресации, которые позволяют использовать блоки данных для хранения ссылок. Такой подход позволяет адресовать файлы размером до 16 терабайт при стандартном размере блока в 4 Кб. Структура индексного дескриптора и схема адресации блоков данных представлена на рисунке выше.
Типы индексных дескрипторов
В Linux существует семь типов айнод, пять из которых относят к специальным файлам, см. таблицу ниже.
Тип файла |
Обозначение в ls |
Назначение |
---|---|---|
Обычные файлы |
-rwxrwxrwx |
Содержат различные данные, например, тексты, картинки, архивы, скрипты, библиотеки, исполняемые файлы и т. д. |
Каталоги |
drwxrwxrwx |
Содержат жесткие ссылки, связывающие имена файлов с индексными дескрипторами. |
Специальные файлы: |
||
Символические ссылки |
lrwxrwxrwx |
Предоставляют альтернативное имя для доступа к файлам, которые расположены в любом месте файловой системы, в том числе на других носителях (аналог mklink в Windows). |
Блочные устройства |
brwxrwxrwx |
Предоставляют интерфейс для взаимодействия с аппаратным обеспечением компьютера. |
Символьные устройства |
crwxrwxrwx |
|
Каналы |
prwxrwxrwx |
Обеспечивают в Linux работу механизмов межпроцессного взаимодействия. |
Сокеты |
srwxrwxrwx |
Обычные файлы
К обычным файлам можно отнести все файлы с данными, например, тексты, картинки, архивы, скрипты, исполняемые файлы, библиотеки и т. д. Кратким обозначением обычных файлов является символ дефиса «-».
Откроем терминал и введем команду ls -l
, знакомую нам по практике из модуля по работе с терминалом. В том же модуле мы создали 2 файла – script и hello.txt:
localadmin@astra:~$ ls -l
итого 5872
lrwxrwxrwx 1 localadmin localadmin 17 мая 23 16:35 Desktop -> Desktops/Desktop1
drwx------ 6 localadmin localadmin 4096 мая 16 12:08 Desktops
-rw-r--r-- 1 localadmin localadmin 31 мая 26 12:44 hello.txt
-rwxr--r-- 1 localadmin localadmin 117 мая 25 11:09 script
lrwxrwxrwx 1 localadmin localadmin 21 мая 16 12:08 SystemWallpapers -> /usr/share/wallpapers
-r-xr-xr-x 1 localadmin localadmin 5968312 мая 20 08:48 VBoxLinuxAdditions.run
drwxr-xr-x 2 localadmin localadmin 4096 мая 16 12:08 Видео
drwxr-xr-x 2 localadmin localadmin 4096 мая 16 12:08 Документы
drwxr-xr-x 2 localadmin localadmin 4096 мая 16 12:08 Загрузки
drwxr-xr-x 3 localadmin localadmin 4096 мая 16 12:08 Изображения
drwxr-xr-x 2 localadmin localadmin 4096 мая 16 12:08 Музыка
drwxr-xr-x 2 localadmin localadmin 4096 мая 16 12:08 Общедоступные
drwxr-xr-x 2 localadmin localadmin 4096 мая 16 12:08 Шаблоны
В выводе команды мы можем увидеть несколько типов файлов, что можно определить по цвету строки и первому символу. Как вы можете заметить, символьные ссылки выделяются бирюзовым цветом, каталоги - синим, исполнимые файлы - зеленым, а обычные файлы отображаются цветом по умолчанию.
Каталоги
В Linux каталог - это особый файл, который хранит список жестких ссылок, связывающих имя дочернего файла с номером индексного дескриптора. С помощью обычных текстовых редакторов мы можем только посмотреть содержимое этих файлов, т.е. прямое редактирование файлов каталогов запрещается. Редактированием этих файлов занимается ядро операционной системы, получая команды создания, удаления, переименования файлов. Для просмотра содержимого каталога можно воспользоваться утилитами ls
, dir
или tree
.
Примечание
Утилита tree
выводит структуру каталогов в псевдографическом виде, который похож на вывод tree в cmd. Для её установки введите команду sudo apt install tree
.
Символьные ссылки
Символьная или символическая ссылка – это специальный файл, внутри которого содержится ссылка на адрес другого файла по его имени, а не индексному дескриптору. Ссылки будут подробно рассмотрены чуть дальше по тексту.
Символьные и блочные устройства
Файлы устройств предназначены для обращения к аппаратному обеспечению компьютера (дискам, принтерам, терминалам и др.). Когда происходит обращение к файлу устройства, ядро операционной системы передает запрос драйверу этого устройства.
К символьным устройствам обращение происходит последовательно. Примером символьного устройства является мышь. Блочные устройства позволяют работать с данными в произвольном порядке. Примером блочного устройства является жесткий диск.
Сокеты и каналы
И каналы, и сокеты предназначены для организации взаимодействия между процессами. Ключевое отличие канала от сокета заключается в том, что канал является однонаправленным, а сокет позволяет передавать данные сразу в двух направлениях. Примером сокетов является файл диспетчера печати /usr/lib/systemd/system/cups.socket
.
Жесткие и символические ссылки
Как мы уже знаем, в Linux есть два типа ссылок: жесткие (англ. hard link) и символические (англ. symbol link, символьная ссылка, «симлинк» или мягкая ссылка). Кроме того, в графической оболочке Fly используются ярлыки *.desktop
, которые абсолютно аналогичны ярлыкам *.lnk
Windows.
Примечание
Стоит сказать, что файловая система NTFS поддерживает жесткие и символические ссылки, а также точки соединения (англ. directory hard link, junction point). Для их создания необходимо использовать fsutil
, mklink
, PowerShell. Однако в Windows такие ссылки используются крайне редко.
Жесткая ссылка
В Linux жесткая ссылка представляет собой запись в файле каталоге, которая связывает имя файла с номером его айноды.
При создании любого файла или каталога для него создается жесткая ссылка, и счетчик ссылок становится равен единице (0 + 1 = 1). Выполним команду mkdir test
для создания папки test, перейдем в эту папку командой cd test
и выполним команды:
touch test1
для создания файла test1ls -il
для просмотра количества ссылок на объекты в текущем каталоге и номеров их индексных дескрипторов.
localadmin@astra:~$ mkdir test
localadmin@astra:~$ cd test
localadmin@astra:~/test$ touch test1
localadmin@astra:~/test$ ls -il
итого 0
453079 -rw-r--r-- 1 localadmin localadmin 0 июн 8 16:02 tes
Теперь создадим для этого файла жесткую ссылку командой ln test1 hardlink_test1
, и просмотрим ссылки еще раз ls -il
:
localadmin@astra:~/test$ ln test1 hardlink_test1
localadmin@astra:~/test$ ls -il
итого 0
453079 -rw-r--r-- 2 localadmin localadmin 0 июн 8 16:02 hardlink_test1
453079 -rw-r--r-- 2 localadmin localadmin 0 июн 8 16:02 test1
Как видим, счетчик увеличился на единицу. Создадим подкаталог командой mkdir subtest
и создадим в нем еще одну жёсткую ссылку на этот файл командой:
ln hardlink_test1 subtest/hardlink2_test1
При обращении к файлу по жесткой ссылке мы можем использовать любое имя, так как все ссылаются на одну и ту же айноду и нельзя сказать, какая из жестких ссылок была создана раньше, а какая позже. Убедиться в этом можно, выполнив команду ls -il subtest
.
Теперь обновим время последнего изменения файла командой touch hardlink_test1
и еще раз посмотрим свойства объектов в test и subtest:
localadmin@astra:~/test$ mkdir subtest
localadmin@astra:~/test$ ln hardlink_test1 subtest/hardlink2_test1
localadmin@astra:~/test$ ls -il subtest
итого 0
453079 -rw-r--r-- 3 localadmin localadmin 0 июн 8 16:02 hardlink2_test1
localadmin@astra:~/test$ touch hardlink_test1
localadmin@astra:~/test$ ls -il
итого 4
453079 -rw-r--r-- 3 localadmin localadmin 0 июн 8 16:11 hardlink_test1
453080 drwxr-xr-x 2 localadmin localadmin 4096 июн 8 16:08 subtest
453079 -rw-r--r-- 3 localadmin localadmin 0 июн 8 16:11 test1
localadmin@astra:~/test$ ls -il subtest
итого 0
453079 -rw-r--r-- 3 localadmin localadmin 0 июн 8 16:11 hardlink2_test1
При удалении файла командой rm
происходит удаление жесткой ссылки на этот файл и уменьшение счётчика жестких ссылок на единицу, но с блоками данных ничего не происходит. Если счётчик ссылок станет равен нулю, то система удалит такой файл и через какое-то время задействует освобожденные блоки данных для хранения других файлов.
Так как жесткая ссылка представляет собой просто ссылку на айноду файла, в Linux запрещено создавать жесткие ссылки на айноды за пределами устройства, на котором находится эта айнода, потому что идентификатор айноды уникален только в пределах текущей файловой системы.
Те самые «.» и «..» в относительных путях являются жесткими ссылками на текущий и родительский каталог, созданные самой операционной системой. Запрещено создавать дополнительные жесткие ссылки на каталоги, так как это может привести к зацикливанию, когда один каталог ссылается на второй, а тот в свою очередь на первый.
localadmin@astra:~/test$ ln subtest hardlink_subtest
ln: subtest: не допускается создавать жёсткие ссылки на каталоги
Примечание
У команды ln
есть специальный ключ -d
, который позволяет на ряде систем с правами суперпользователя создать жесткую ссылку на каталог, однако в Astra Linux эта операция не разрешена:
localadmin@astra:~/test$ sudo ln -d subtest hardlink_subtest
ln: не удалось создать жёсткую ссылку 'hardlink_subtest' => 'subtest': Операция не позволена
Символическая ссылка
Символическая ссылка, в отличие от жесткой, позволяет ссылаться на файлы и каталоги на любом устройстве, доступном в корневой файловой системе, потому что представляет собой файл, в котором хранится полный путь к файлу, на который ведет эта ссылка. Айноды символических ссылок не дублируют атрибуты тех файлов, на которые они указывают, поэтому на символические ссылки можно выставить свои собственные права доступа. На дополненной схеме связи между именами файлов и индексным дескриптором представлена связь между символическими ссылкам и именами файлов.
Символическая ссылка ссылается на путь к файлу или папке. Если объект, на который она ссылается, будет удален (перемещен), то ссылка будет вести на несуществующий объект, то есть станет разорванной (англ. broken link) или «битой».
Создадим несколько символических ссылок на файлы и папку с помощью команды ln
с ключом -s
(--symbolic
):
ln -s ~/test/subtest ~/subtest
– создаем ссылку subtest в домашнем каталоге на каталог subtest в каталоге test.
localadmin@astra:~$ cd ~/test
localadmin@astra:~/test$ ln -s ~/test/subtest ~/subtest
localadmin@astra:~/test$ ls -l ~/subtest
lrwxrwxrwx 1 localadmin localadmin 29 июн 9 10:38 /home/localadmin/subtest ->
/home/localadmin/test/subtest
localadmin@astra:~/test$ ln -s test1 test1_link
localadmin@astra:~/test$ ln -s hardlink_test1 hardlink_test1_link
localadmin@astra:~/test$ ls -l
итого 4
-rw-r--r-- 3 localadmin localadmin 0 июн 8 16:11 hardlink_test1
lrwxrwxrwx 1 localadmin localadmin 14 июн 9 10:41 hardlink_test1_link -> hardlink_test1
drwxr-xr-x 2 localadmin localadmin 4096 июн 8 16:08 subtest
-rw-r--r-- 3 localadmin localadmin 0 июн 8 16:11 test1
lrwxrwxrwx 1 localadmin localadmin 5 июн 9 10:40 test1_link -> test1
Попробуем получить доступ к файлам и каталогам через символьные ссылки. Выполним команды ls ~/subtest
, echo "test text" > hardlink_test1_link
и cat test1_link
:
localadmin@astra:~/test$ ls ~/subtest
hardlink2_test1
localadmin@astra:~/test$ echo "test text" > hardlink_test1_link
localadmin@astra:~/test$ cat test1_link
test text
localadmin@astra:~/test$ cat test1
test text
Как видим, с ссылками можно работать точно так же, как и с обычными файлами.
Удалим жесткую ссылку hardlink_test1 командой rm hardlink_test1
и проверим доступ до файла через жесткую и символическую ссылки командами cat hardlink_test1_link
, cat test1_link
, cat test1
:
localadmin@astra:~/test$ rm hardlink_test1
localadmin@astra:~/test$ ls -l
итого 8
lrwxrwxrwx 1 localadmin localadmin 14 июн 9 10:41 hardlink_test1_link -> hardlink_test1
drwxr-xr-x 2 localadmin localadmin 4096 июн 8 16:08 subtest
-rw-r--r-- 2 localadmin localadmin 10 июн 9 10:50 test1
lrwxrwxrwx 1 localadmin localadmin 5 июн 9 10:40 test1_link -> test1
localadmin@astra:~/test$ cat hardlink_test1_link
cat: hardlink_test1_link: Нет такого файла или каталога
localadmin@astra:~/test$ cat test1_link
test text
localadmin@astra:~/test$ cat test1
test text
Как видим, после удаления жесткой ссылки вывод команды ls
подсвечивает разорванную ссылку красным цветом, и при попытке прочитать файл мы получим сообщение, что такого файла не существует. Однако по символической ссылке на другое имя файла этот файл по-прежнему доступен, как и по другой жесткой ссылке.
В завершение отметим, что при удалении символической ссылки жесткая ссылка на файл и сами данные не удаляются.
Правила именования файлов и каталогов
Правила именования файлов и каталогов (помним, что каталог — это тоже файл) идентичны. Имя не может превышать 255 байт, а общая длина пути (включая все компоненты) не может превышать 4096 байт.
Минимальный безопасный набор символов для использования в именах файлов:
буквы (как латиницы, так и кириллицы в любом регистре);
цифры;
символ «.» (точка);
символ «_» (подчеркивание);
символ «-» (тире).
Важно
Если название файла или каталога начинается с символа точки «.», то в Linux он будет считаться скрытым. Например, в рабочей папке пользователя есть такие файлы, как .bashrc
, .profile
и др., которые обычно не отображаются. Чтобы увидеть все файлы, включая скрытые, следует использовать команду ls
с ключом -a
.
Использование спецсимволов, например, пробела, символов «*», «?», «$», «’», «”» не рекомендуется, так как их наличие в именах файлов может вызвать некорректную работу некоторых программ, хотя допустимо использовать любые символы, кроме «/», например, команда touch test\ file.txt
создаст в текущем каталоге файл, в имени которого будет содержаться пробел:
localadmin@astra:~$ touch test\ file.txt
localadmin@astra:~$ ls
...'test file.txt'...
Для решения проблем со спецсимволами в именах файлов при работе в командной строке есть несколько способов:
Экранирование спецсимволов. Для экранирования специальных символов перед ними нужно поставить символ обратной косой черты «\» или взять все имя файла в одинарные кавычки, например,
cat test\\ file.txt
илиcat 'test file.txt'
:
localadmin@astra:~$ echo text > test\ file.txt
localadmin@astra:~$ cat 'test file.txt'
text
Автодополнение по нажатию клавиши :Tab дополнит путь и автоматически сделает экранирование символов:
localadmin@astra:~$ cat test\ file.txt
Работа с файлами с символом тире в начале имени. Если в начале имени файла стоит символ тире
-
, то командный интерпретатор будет воспринимать его как параметр команды. Тут не поможет стандартное экранирование символа. Вместо него можно использовать или относительный путь к файлу, или специальный параметр--
, который сообщает команде, что это не ключ, а параметр.
localadmin@astra:~$ echo text > '-test.txt'
localadmin@astra:~$ cat -test.txt
cat: неверный ключ — «.»
localadmin@astra:~$ cat \-test.txt
cat: неверный ключ — «.»
localadmin@astra:~$ cat '-test.txt'
cat: неверный ключ — «.»
localadmin@astra:~$ cat -- -test.txt
text
localadmin@astra:~$ cat ./-test.txt
text
Примечание
Правила именования файловых объектов в Astra Linux детально рассмотрены в этой статье на wiki.astralinux.ru.
Расширения файлов
В именах файлов Linux, также как в Windows, могут использоваться расширения или так называемые суффиксы, например, *.txt
или *.doc
. Но если в Windows расширения играют ключевую роль в определении типа файла, то в Linux они игнорируются, поэтому иногда говорят, что в Linux нет расширений.
Тип файла в Linux определяется по его сигнатуре, то есть нескольким байтам в начале файла, которые однозначно указывают на тип файла и являются, таким образом, его подписью. По этой причине переименование изображения logo.png
в текстовый файл logo.txt
никак не сможет обмануть утилиту file
, которая продолжит считать его цветным PNG изображением:
localadmin@astra:~$ wget https://astralinux.ru/logo.png
--2024-09-25 11:21:05-- https://astralinux.ru/logo.png
Распознаётся astralinux.ru (astralinux.ru)… 84.201.172.233
Подключение к astralinux.ru (astralinux.ru)|84.201.172.233|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 35129 (34K) [image/png]
Сохранение в: «logo.png»
logo.png 100%[====================================>] 34,31K --.-KB/s за 0,001s
2024-09-25 11:21:05 (26,3 MB/s) - «logo.png» сохранён [35129/35129]
localadmin@astra:~$ file logo.png
logo.png: PNG image data, 2969 x 789, 8-bit/color RGBA, non-interlaced
localadmin@astra:~$ mv logo.png logo.txt
localadmin@astra:~$ file logo.txt
logo.txt: PNG image data, 2969 x 789, 8-bit/color RGBA, non-interlaced
Однако стоит заметить, что файловый менеджер Astra Linux работает с расширениями аналогично тому, как это делает проводник Windows, поэтому рекомендуется все же придерживаться общепринятых соглашений, чтобы файлы можно было открывать из графики двойным кликом.
Абсолютный и относительный путь
Путь к объектам файловой системы представляет собой цепочку символов, которые показывают место расположения файла или каталога в файловой системе. Путь может быть абсолютным и относительным. Абсолютный или полный путь указывает на одно и то же место в файловой системе вне зависимости от текущего рабочего каталога или других обстоятельств, поэтому полный путь всегда начинается с корневого каталога. Относительный путь представляет собой путь по отношению к текущему рабочему каталогу пользователя или активных приложений.
Относительные пути могут использовать символы подстановки:
Символ точки «.» в начале пути означает текущий каталог, например, введем команду
ls ./Desktop
, и она выведет содержимое каталога/home/localadmin/Desktop
. В этом можно убедиться, введя команду с абсолютным путемls /home/localadmin/Desktop
:
localadmin@astra:~$ ls ./Desktop
firefox.desktop fly-help.desktop mycomp.desktop mytrash.desktop
localadmin@astra:~$ ls /home/localadmin/Desktop
firefox.desktop fly-help.desktop mycomp.desktop mytrash.desktop
Два символа точки «..» указывают, что системе для поиска файла нужно подняться на один уровень выше. Например, если эти символы будут в самом начале пути, то они укажут на родительский каталог. Введем команду
ls ..
, и она выведет содержимое родительского каталога/home/
:
localadmin@astra:~$ ls ..
localadmin
Символ «~» подставляет полный путь к домашнему каталогу пользователя. Введем команду
cd /
, чтобы перейти в корень, а затем введем командуcd ~
, чтобы перейти обратно в домашний каталог. Командойpwd
можно проверить, в каком каталоге мы находимся, однако это не обязательно – в строке приглашения мы можем видеть текущий каталог (в данном случае символ «~» был изменен на «/», а затем обратно на «~»):
localadmin@astra:~$ cd /
localadmin@astra:/$ pwd
/
localadmin@astra:/$ cd ~
localadmin@astra:~$ pwd
/home/localadmin
Работа с файлами и каталогами
Список основных команд для работы с каталогами
К основным командам можно отнести следующие:
pwd
— вывести полный путь к текущему каталогу (от англ. print working directory - распечатать рабочий каталог).cd [<directory>]
— перейти в указанный каталог (от англ. change directory - сменить каталог).mkdir <directory>
— создать каталог.rmdir <directory>
— удалить пустой каталог (от англ. remove - удалить).rm -rf <directory>
— удалить каталог со всем его содержимым.du [<directory>]
— вывести размер каталога (от англ. disk usage - использование диска).
Рассмотрим их более подробно с примерами.
Команда pwd
Выводит полный путь к текущему каталогу, например:
localadmin@astra:~$ pwd
/home/localadmin
Команда ls
Выводит список содержимого каталога. У команды довольно много ключей, полный их список можно найти в справке man ls
.
Рассмотрим основные:
ls -a
(ls --all
) при выводе не скрывает файлы, начинающиеся с точки «.».ls -A
(ls --almost-all
) выводит список всех файлов (в том числе и скрытых), кроме «.» и «..».ls -l
– в дополнение к имени каждого файла выводится дополнительная информация: тип файла, права доступа к файлу, количество ссылок на файл, имя владельца, имя группы, размер файла в байтах и временной штамп (время последней модификации файла, если не задано другое).ls -R
– выводит информацию рекурсивно из всех подкаталогов.
Примеры использования:
localadmin@astra:~/test$ ls -a
. .. hardlink_test1_link subtest test1 test1_link
localadmin@astra:~/test$ ls -A
hardlink_test1_link subtest test1 test1_link
localadmin@astra:~/test$ ls -l
итого 8
lrwxrwxrwx 1 localadmin localadmin 14 июн 9 10:41 hardlink_test1_link hardlink_test1
drwxr-xr-x 2 localadmin localadmin 4096 июн 8 16:08 subtest
-rw-r--r-- 2 localadmin localadmin 10 июн 9 10:50 test1
lrwxrwxrwx 1 localadmin localadmin 5 июн 9 10:40 test1_link -> test1
localadmin@astra:~/test$ ls -la
итого 16
drwxr-xr-x 3 localadmin localadmin 4096 июн 9 10:55 .
drwx------ 18 localadmin localadmin 4096 июн 9 10:38 ..
lrwxrwxrwx 1 localadmin localadmin 14 июн 9 10:41 hardlink_test1_link hardlink_test1
drwxr-xr-x 2 localadmin localadmin 4096 июн 8 16:08 subtest
-rw-r--r-- 2 localadmin localadmin 10 июн 9 10:50 test1
lrwxrwxrwx 1 localadmin localadmin 5 июн 9 10:40 test1_link -> test1
localadmin@astra:~/test$ ls -R
.:
hardlink_test1_link subtest test1 test1_link
./subtest:
hardlink2_test1
Команда cd
Переходит в указанный каталог. Удобно использовать относительные пути и символ «-», означающий предыдущий каталог, из которого ранее был совершён переход.
cd
– переход в домашний каталог пользователяcd ..
– переход в родительский каталог
Примеры использования:
localadmin@astra:~/test$ cd
localadmin@astra:~$ cd test
localadmin@astra:~/test$ cd -
/home/localadmin
localadmin@astra:~$ cd /
localadmin@astra:/$ cd ~/test/subtest
localadmin@astra:~/test/subtest$ cd ..
localadmin@astra:~/test$
Команда mkdir
Команда mkdir создает каталоги
mkdir test2
– создаст каталог test2 в текущем каталоге.mkdir –p test3/subtest/subsubtest
– создаст каталог subsubtest и все недостающие родительские каталоги в пути до него.
Примеры использования:
localadmin@astra:~$ ls -l | grep ^d | grep test
drwxr-xr-x 3 localadmin localadmin 4096 июн 9 10:55 test
localadmin@astra:~$ mkdir test2
localadmin@astra:~$ ls -l | grep ^d | grep test
drwxr-xr-x 3 localadmin localadmin 4096 июн 9 10:55 test
drwxr-xr-x 2 localadmin localadmin 4096 июн 9 12:46 test2
localadmin@astra:~$ mkdir ~/test3/subtest/subsubtest
mkdir: невозможно создать каталог «/home/localadmin/test3/subtest/subsubtest»: Нет такого файла или каталога
localadmin@astra:~$ mkdir -p ~/test3/subtest/subsubtest
localadmin@astra:~$ tree test3
test3
└── subtest
└── subsubtest
2 directories, 0 files
Команда rmdir
Удаляет каталоги, если они пустые.
rmdir test2
– удалит папку test2, если она пустая. В противном случае выдаст ошибку.
Примеры использования:
localadmin@astra:~$ rmdir test2
localadmin@astra:~$ rmdir test3
rmdir: не удалось удалить 'test3': Каталог не пуст
Команда rm -rf
Команда rm -rf <путь>
удаляет папку вместе с её содержимым. Ключ -r
указывает, что требуется рекурсивно удалить вложенные каталоги, ключ -f
указывает, что не требуется запрашивать подтверждение от пользователя. Например, команда rm -rf test3
удалит каталог test3 и все его содержимое без дополнительных подтверждений.
Примеры использования:
localadmin@astra:~$ rm -rf test3
Внимание
Это одна из самых опасных команд в Linux. При неосторожном использовании особенно с правами суперпользователя можно безвозвратно удалить часть данных или всю корневую файловую систему, включая информацию на примонтированных носителях (rm –rf /
).
Список основных команд для работы с файлами
К основным командам можно отнести следующие:
touch <file>
— создать файл или изменить временные метки у существующего файла.realpath <file>
— узнать абсолютный путь к файлу.file <file>
— определить тип файла.stat <file>
— получить информацию о файле (размер файла, дата создания файла и т. д.) и проверить существование файла.cp <file1> <file2>
— копировать файл «file1» в файл с именем «file2» (от англ. copy - копировать). Если файл с таким же названием уже существует, то он будет заменён.mv <file1> <file2>
— переименовать файл «file1» в «file2» (от англ. move - переместить).mv <file> <directory>
— переместить файл в каталог.rm <file>
— удалить файл (от англ. remove - удалить).find <file>
— найти файл.sh <file>
— запустить файл со сценарием Bash../file
— запустить исполняемый файл.
Рассмотрим их более подробно с примерами.
Команда touch
Основная функция команды – обновить временные метки у файла. Однако, если требуется создать новый пустой файл, это можно сделать в том числе и этой командой.
touch
– обновляет временные метки существующего файла или создает новый файл.touch -a
– изменяет только время последнего доступа к файлу (время, когда файл был прочитан в последний раз).touch -m
– изменяет только время последнего изменения файла (время последнего изменения содержимого файла).touch -d "STRING"
– может задать время, в том числе в свободной форме, например, «next Wednesday», подробнееman touch
.touch -r <referencefile> <newfile>
– копирует значения даты и времени у указанного файла.
Примеры использования:
Подготовка для демонстрации тестового каталога
localadmin@astra:~$ mkdir test4
localadmin@astra:~$ cd test4
localadmin@astra:~/test4$ ls
Создание файла
localadmin@astra:~/test4$ touch test.txt
localadmin@astra:~/test4$ ls -l
итого 0
-rw-r--r-- 1 localadmin localadmin 0 июн 13 18:37 test.txt
localadmin@astra:~/test4$ stat test.txt
Файл: test.txt
Размер: 0 Блоков: 0 Блок В/В: 4096 пустой обычный файл
Устройство: 801h/2049d Inode: 442812 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: ( 1000/localadmin) Gid: ( 1000/localadmin)
Доступ: 2023-06-13 18:37:01.960076695 +0300
Модифицирован: 2023-06-13 18:37:01.960076695 +0300
Изменён: 2023-06-13 18:37:01.960076695 +0300
Создан: -
Обновление временных меток файла:
localadmin@astra:~/test4$ touch test.txt
localadmin@astra:~/test4$ stat test.txt
Файл: test.txt
Размер: 0 Блоков: 0 Блок В/В: 4096 пустой обычный файл
Устройство: 801h/2049d Inode: 442812 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: ( 1000/localadmin) Gid: ( 1000/localadmin)
Доступ: 2023-06-13 18:38:35.536075019 +0300
Модифицирован: 2023-06-13 18:38:35.536075019 +0300
Изменён: 2023-06-13 18:38:35.536075019 +0300
Создан: -
Обновление временной метки последнего доступа:
localadmin@astra:~/test4$ touch -a test.txt
localadmin@astra:~/test4$ stat test.txt
Файл: test.txt
Размер: 0 Блоков: 0 Блок В/В: 4096 пустой обычный файл
Устройство: 801h/2049d Inode: 442812 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: ( 1000/localadmin) Gid: ( 1000/localadmin)
Доступ: 2023-06-13 18:39:09.220074416 +0300
Модифицирован: 2023-06-13 18:38:35.536075019 +0300
Изменён: 2023-06-13 18:39:09.220074416 +0300
Создан: -
Обновление временной метки последней модификации:
localadmin@astra:~/test4$ touch -m test.txt
localadmin@astra:~/test4$ stat test.txt
Файл: test.txt
Размер: 0 Блоков: 0 Блок В/В: 4096 пустой обычный файл
Устройство: 801h/2049d Inode: 442812 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: ( 1000/localadmin) Gid: ( 1000/localadmin)
Доступ: 2023-06-13 18:39:09.220074416 +0300
Модифицирован: 2023-06-13 18:39:28.928074063 +0300
Изменён: 2023-06-13 18:39:28.928074063 +0300
Создан: -
Обновление временной метки последней модификации с выбором даты в свободной форме
localadmin@astra:~/test4$ touch –d "next Wednesday" test.txt
localadmin@astra:~/test4$ stat test.txt
Файл: test.txt
Размер: 0 Блоков: 0 Блок В/В: 4096 пустой обычный файл
Устройство: 801h/2049d Inode: 442812 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: ( 1000/localadmin) Gid: ( 1000/localadmin)
Доступ: 2023-06-14 00:00:00.000000000 +0300
Модифицирован: 2023-06-14 00:00:00.000000000 +0300
Изменён: 2023-06-13 18:43:22.472069880 +0300
Создан: -
Примечание
Можно было бы предположить, что по аналогии с командой mkdir
должна существовать специальная команда mkfile
. Действительно, например, в ОС Solaris есть такая команда, однако в Linux такой команды нет. Вместо неё принято использовать команду touch
. Пустой файл можно создать также, например, с помощью оператора > ( > file) или через текстовый редактор.
localadmin@astra:~/test$ ls
emptyfile hardlink_test1_link subtest test1 test1_link
localadmin@astra:~/test$ > emptyfile
localadmin@astra:~/test$ ls -l
итого 8
-rw-r--r-- 1 localadmin localadmin 0 июн 13 18:30 emptyfile
lrwxrwxrwx 1 localadmin localadmin 14 июн 9 10:41 hardlink_test1_link -> hardlink_test1
drwxr-xr-x 2 localadmin localadmin 4096 июн 8 16:08 subtest
-rw-r--r-- 2 localadmin localadmin 10 июн 9 10:50 test1
lrwxrwxrwx 1 localadmin localadmin 5 июн 9 10:40 test1_link -> test1
Команда realpath
Команда realpath <file>
– выводит полный путь до файла.
Примеры использования:
Вывод полного пути до файла:
localadmin@astra:~/test4$ ls
test.txt
localadmin@astra:~/test4$ realpath test.txt
/home/localadmin/test4/test.txt
Команда file
Команда file <file>
– определяет тип файла.
Примеры использования:
localadmin@astra:~$ file hello.txt
hello.txt: UTF-8 Unicode text
localadmin@astra:~$ file script
script: Bourne-Again shell script, UTF-8 Unicode text executable
localadmin@astra:~$ file VBoxLinuxAdditions.run
VBoxLinuxAdditions.run: POSIX shell script executable (binary data)
localadmin@astra:~$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically ...
localadmin@astra:~$ file ~/Изображения/Wallpapers/800x600/fly-default#5682a3.png
/home/localadmin/Изображения/Wallpapers/800x600/fly-default#5682a3.png: PNG image ...
Команда stat
Команда stat
выводит атрибуты индексного дескриптора или статус файловой системы.
stat <file>
– выводит содержимое атрибутов индексного дескриптора.stat -f <file>
– выводит статус файловой системы, на которой расположен файл.
Примеры использования:
Вывод информации из дескриптора файла:
localadmin@astra:~/test4$ stat test.txt
Файл: test.txt
Размер: 0 Блоков: 0 Блок В/В: 4096 пустой обычный файл
Устройство: 801h/2049d Inode: 442812 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: ( 1000/localadmin) Gid: ( 1000/localadmin)
Доступ: 2023-06-14 00:00:00.000000000 +0300
Модифицирован: 2023-06-14 00:00:00.000000000 +0300
Изменён: 2023-06-13 18:50:34.144062150 +0300
Создан: -
Вывод информации о файловой системе, на которой расположен файл:
localadmin@astra:~/test4$ stat -f test.txt
Файл: «test.txt»
ID: 383b368255943a03 Длина имени: 255 Тип: ext2/ext3
Размер блока: 4096 Базисный размер блока: 4096
Блоки: Всего: 3865570 Свободно: 2036428 Доступно: 1835136
Inodes: Всего: 987360 Свободно: 760820
Команда cp
Команда cp <источник> <назначение>
копирует файлы и каталоги, где источник или несколько <источников> копируются в указанное <назначение>:
cp file1 file2
– копирует файл file1 в файл file2.cp file1 destination/
– копирует файл file1 в каталог destination.cp -r source/ destination
(-r
,--recursive
) - копирует каталог source и все подкаталоги в каталог destination, если каталог destination существует. Если каталог не существует, то создаст его и скопирует содержимое каталога source.cp -rT source destination/
(-r
,--recursive
;-T
,--no-target-directory
) - копирует содержимое каталога source и все подкаталоги в каталог destination. Если каталога destination не существует, создаст его.cp -r source/* destination/
– копирует содержимое каталога source и все подкаталоги в каталог destination, если каталог destination существует. Если каталога не существует, выдаст ошибку.cp -i file1 destination/
(-i
,--interactive
) - копирует файл file1 в каталог с запросом на подтверждение перезаписи. Каталог должен существовать.cp -n file1 destination
– ключ-n
запрещает заменять существующие файлы.cp -b file1 destination
– ключ-b
создает резервную копию файла.cp slink destination
– копирует не символическую ссылку slink, а оригинальный файл.cp hlink destination
– копирует не жесткую ссылку hlink, а оригинальный файл.cp -P slink destination
– копирует символическую ссылку именно как ссылку.cp --preserve=links file1_hlink1 file1_hlink2_file destination
– если file1_hlink1 и file1_hlink2 являются жесткими ссылками на один и тот же индексный дескриптор, то утилита скопирует исходный файл и создаст для него две жесткие ссылки в каталоге destination.cp -p source/\* destination
– копирует содержимое каталога source в каталог destination с сохранением информации о владельцах и прав доступа, хранящейся в индексном дескрипторе.cp --preserve=timestamps file destination
– копирует файл в каталог destination с сохранением временных меток оригинального файла.cp -a source/* destination
– копирует структуру файловой системы 1 в 1, включая временные метки, символические и жесткие ссылки.
Примеры использования:
Подготовка для демонстрации тестового каталога с набором файлов, ссылок и подкаталогом с файлами.
localadmin@astra:~$ mkdir -p ./test_cp/destination
localadmin@astra:~$ cd test_cp
localadmin@astra:~$ mkdir ./source
localadmin@astra:~$ touch ./file{1..3}
localadmin@astra:~$ touch ./source/file{4..6}
localadmin@astra:~$ ln ./file1 ./hlink_file1
localadmin@astra:~$ ln -s $(realpath file2) ./slink_file2
localadmin@astra:~/test_cp$ tree
.
├── destination
├── file1
├── file2
├── file3
├── hlink_file1
├── slink_file2 -> /home/localadmin/file2
└── source
├── file4
├── file5
└── file6
1 directory, 8 files
Копирование файла в файл
localadmin@astra:~/test_cp$ cp file1 file1_1 localadmin@astra:~/test_cp$ ls destination file1 file1_1 file2 file3 hlink_file1 slink_file2
Копирование файла в каталог назначения. Каталог должен существовать.
localadmin@astra:~/test_cp$ cp file1 destination
localadmin@astra:~/test_cp$ ls ./destination/
file1 file4 file5 file6
Копирование каталога в каталог. Каталог должен существовать
localadmin@astra:~/test_cp$ cp -r source destination/
localadmin@astra:~/test_cp$ ls destination/
file1 source
localadmin@astra:~/test_cp$ cp -r source destination2/
localadmin@astra:~/test_cp$ ls destination2
file4 file5 file6
localadmin@astra:~/test_cp$ cp -r source destination2/
localadmin@astra:~/test_cp$ ls destination2
file4 file5 file6 source
Копирование содержимого каталога в каталог. Каталог должен существовать.
Способ 1.
localadmin@astra:~/test_cp$ cp -rT source destination/
localadmin@astra:~/test_cp$ ls destination/
file1 file4 file5 file6 source
Удаление скопированных файлов
localadmin@astra:~/test_cp$ rm ./destination/file{4..6}
localadmin@astra:~/test_cp$ ls destination/
file1 source
Способ 2.
localadmin@astra:~/test_cp$ cp source/* destination/
localadmin@astra:~/test_cp$ ls destination/
file1 file4 file5 file6 source
Копирование файла в каталог с запросом на подтверждение перезаписи. Каталог должен существовать.
localadmin@astra:~/test_cp$ cp -i file1 destination/
cp: переписать 'destination/file1'? y
localadmin@astra:~/test_cp$ stat destination/file
stat: не удалось выполнить stat для 'destination/file': Нет такого файла или каталога
localadmin@astra:~/test_cp$ stat destination/file1
Файл: destination/file1
Размер: 0 Блоков: 0 Блок В/В: 4096 пустой обычный файл
Устройство: 801h/2049d Inode: 453120 Ссылки: 1
Доступ: (0644/-rw-r--r--) Uid: ( 1000/localadmin) Gid: ( 1000/localadmin)
Доступ: 2023-06-13 22:29:16.231827158 +0300
Модифицирован: 2023-06-13 22:58:56.091795284 +0300
Изменён: 2023-06-13 22:58:56.091795284 +0300
Создан: -
Создание резервной копии файла
localadmin@astra:~/test_cp$ cp -b file1 destination
localadmin@astra:~/test_cp$ ls destination
file1 file1~ file4 file5 file6 source
Копирование символических ссылок
localadmin@astra:~/test_cp$ cp slink_file2 destination/
localadmin@astra:~/test_cp$ ls -li slink_file2
442359 lrwxrwxrwx 1 localadmin localadmin 30 июн 15 09:38
slink_file2->/home/localadmin/test_cp/file2
localadmin@astra:~/test_cp$ ls -li destination/slink_file2
442645 -rw-r--r-- 1 localadmin localadmin 0 июн 15 09:40 destination/slink_file2
localadmin@astra:~/test_cp$ cp -P slink_file2 destination/
localadmin@astra:~/test_cp$ ls -li destination/slink_file2
442645 lrwxrwxrwx 1 localadmin localadmin 30 июн 15 09:41
destination/slink_file2->/home/localadmin/test_cp/file2
Копирование жестких ссылок
localadmin@astra:~/test_cp$ rm -rf destination/file1
localadmin@astra:~/test_cp$ ls -li *file1
453106 -rw-r--r-- 2 localadmin localadmin 0 июн 13 22:05 file1
453106 -rw-r--r-- 2 localadmin localadmin 0 июн 13 22:05 hlink_file1
localadmin@astra:~/test_cp$ cp file1 hlink_file1 destination/
localadmin@astra:~/test_cp$ ls -li destination/*file1
442910 -rw-r--r-- 1 localadmin localadmin 0 июн 15 10:22 destination/file1
453100 -rw-r--r-- 1 localadmin localadmin 0 июн 15 10:22 destination/hlink_file1
localadmin@astra:~/test_cp$ rm -rf destination/*file1
localadmin@astra:~/test_cp$ cp --preserve=links file1 hlink_file1 destination/
localadmin@astra:~/test_cp$ ls -li destination/*file1
442910 -rw-r--r-- 2 localadmin localadmin 0 июн 15 10:23 destination/file1
442910 -rw-r--r-- 2 localadmin localadmin 0 июн 15 10:23 destination/hlink_file1
Сохранение атрибутов (в этом примере временных меток) при копировании
localadmin@astra:~/test_cp$ cp file2 destination/file2_1
localadmin@astra:~/test_cp$ cp --preserve=timestamps file2 destination/file2_2
localadmin@astra:~/test_cp$ ls -li file2
453107 -rw-r--r-- 1 localadmin localadmin 0 июн 13 22:05 file2
localadmin@astra:~/test_cp$ ls -li destination/file2*
453100 -rw-r--r-- 1 localadmin localadmin 0 июн 15 10:25 destination/file2_1
453108 -rw-r--r-- 1 localadmin localadmin 0 июн 13 22:05 destination/file2_2
Полное копирование с сохранением всех атрибутов
localadmin@astra:~/test_cp$ cp -a source destination/source_backup
localadmin@astra:~/test_cp$ ls -l source
итого 0
-rw-r--r-- 1 localadmin localadmin 0 июн 13 22:05 file4
-rw-r--r-- 1 localadmin localadmin 0 июн 13 22:05 file5
-rw-r--r-- 1 localadmin localadmin 0 июн 13 22:05 file6
localadmin@astra:~/test_cp$ ls -l destination/source_backup
итого 0
-rw-r--r-- 1 localadmin localadmin 0 июн 13 22:05 file4
-rw-r--r-- 1 localadmin localadmin 0 июн 13 22:05 file5
-rw-r--r-- 1 localadmin localadmin 0 июн 13 22:05 file6
Команда mv
Команда mv – перемещает (переименовывает) файлы и каталоги.
mv file destination
– перемещает файл file в каталог destination.mv directory destination
– перемещает каталог directory в каталог destination.mv file1 file2
– переименовывает файл file1 в file2.mv directory1 directory2
– переименовывает каталог directory1 в directory2.
Примеры использования:
Подготовка для демонстрации тестового каталога с набором файлов и подкаталогами с файлами.
localadmin@astra:~$ cd
localadmin@astra:~$ mkdir test_mv
localadmin@astra:~$ cd test_mv
localadmin@astra:~/test_mv$ touch ./file{1..3}
localadmin@astra:~/test_mv$ mkdir destination
localadmin@astra:~/test_mv$ mkdir source
localadmin@astra:~/test_mv$ touch ./source/file{4..5}
localadmin@astra:~/test_mv$ tree
.
├── destination
├── file1
├── file2
├── file3
└── source
├── file4
└── file5
2 directories, 5 files
Перемещение файла.
localadmin@astra:~/test_mv$ ls -il file1
453139 -rw-r--r-- 1 localadmin localadmin 0 июн 15 10:47 file1
localadmin@astra:~/test_mv$ mv file1 destination/
localadmin@astra:~/test_mv$ ls -il destination/file1
453139 -rw-r--r-- 1 localadmin localadmin 0 июн 15 10:47 destination/file1
Перемещение каталога
localadmin@astra:~/test_mv$ mv source destination/
localadmin@astra:~/test_mv$ tree
.
├── destination
│ ├── file1
│ └── source
│ ├── file4
│ └── file5
├── file2
└── file3
2 directories, 5 files
Переименование файла
localadmin@astra:~/test_mv$ ls -li file2
453140 -rw-r--r-- 1 localadmin localadmin 0 июн 15 10:47 file2
localadmin@astra:~/test_mv$ mv file2 file4
localadmin@astra:~/test_mv$ ls -li file4
453140 -rw-r--r-- 1 localadmin localadmin 0 июн 15 10:47 file4
Команда rm
Команда rm
– удаляет файлы и каталоги.
rm file
– удаляет файл file.rm -d directory
– удаляет каталог directory, если он пуст.rm -i file
– перед удалением файла file запрашивает подтверждение у пользователя.rm -I files
– запрашивает подтверждение при удалении более 3 файлов.rm -f file
– удаляет файл file, игнорирует ключ-i
и отсутствующие файлы и аргументы. Никогда не запрашивает подтверждения.rm -Ir directory
– рекурсивно удаляет каталоги и их содержимое. Запрашивает подтверждение.rm -rf directory
– рекурсивно удаляет каталоги и их содержимое. Никогда не запрашивает подтверждения!!!
Примеры использования:
Подготовка для демонстрации тестового каталога с набором файлов, ссылок и подкаталогом с файлами.
localadmin@astra:~$ cd
localadmin@astra:~$ mkdir -p test_rm/directory1/subdirectory
localadmin@astra:~$ cd test_rm/
localadmin@astra:~/test_rm$ mkdir directory2
localadmin@astra:~/test_rm$ touch file{1..3}
localadmin@astra:~/test_rm$ touch directory1/file{4..5}
localadmin@astra:~/test_rm$ touch directory1/subdirectory/file{6..7}
localadmin@astra:~/test_rm$ tree
.
├── directory1
│ ├── file4
│ ├── file5
│ └── subdirectory
│ ├── file6
│ └── file7
├── directory2
├── file1
├── file2
└── file3
3 directories, 7 files
Удаление простого файла
localadmin@astra:~/test_rm$ rm file1
Удаление простого файла с запросом на подтверждение
localadmin@astra:~/test_rm$ rm -i file2
rm: удалить пустой обычный файл 'file2'? y
localadmin@astra:~/test_rm$ rm -I file3
Удаление пустого каталога
localadmin@astra:~/test_rm$ rm directory2
rm: невозможно удалить 'directory2': Это каталог
localadmin@astra:~/test_rm$ rm -d directory2
Удаление непустого каталога
localadmin@astra:~/test_rm$ rm -d directory1/subdirectory
rm: невозможно удалить 'subdirectory': Каталог не пуст
localadmin@astra:~/test_rm$ rm -dr directory1/subdirectory
localadmin@astra:~/test_rm$ tree
.
├── directory1
├── file4
└── file5
1 directory, 4 files
Удаление непустого каталога с запросом на подтверждение
localadmin@astra:~/test_rm$ rm -drI directory1
rm: удалить 1 аргумент рекурсивно? n
localadmin@astra:~/test_rm$ rm -rI directory1
rm: удалить 1 аргумент рекурсивно? n
Удаление непустого каталога без запроса на подтверждение
localadmin@astra:~/test_rm$ rm -rf directory1
Команда find
Команда find
- ищет файлы в иерархии каталогов. Это мощное средство с большим количеством критериев поиска и возможностью совершать ряд действий с найденными файлами. Для получения полной справки используйте команду man find
.
Синтаксис команды:
find [каталог] [критерий поиска] [действие]
Где:
каталог – это отправная точка поиска,
критерий поиска можно указывать несколько критериев, применяя операторы условий:
Основные критерии поиска:
-name
– поиск по имени с учетом регистра-iname
– поиск по имени без учета регистра,-type
– поиск по типу файла (f, d, l, b, c, p, s),-size
– поиск по размеру файла («+» - больше, «-» - меньше, без знака – точное совпадение, «c» - байт, «k» – Кбайт, «M» – Мбайт, «G» - Гбайт), например, «+1G», «-1M», «24K».-empty
– поиск пустых фалов,-cmin
– поиск по времени изменения в минутах, например, для поиска файлов, измененных за последний час «-60», для поиска всех файлов, кроме тех, что были изменены за последний час «+60»,-atime
– поиск файлов по времени доступа к ним в днях, например, «+30» – поиск файлов, к которым не обращались за последние 30 дней,-user
– поиск файлов по владельцу,-perm
– поиск файлов по набору прав доступа, например, «755» или «777».
Основные операторы условий поиска:
-and
– для объединения условий логическим «и»,-or
– для объединения условий логическим «или»,-not
– для инвертирования условия.
действие – что необходимо делать с каждым найденным файлом. Основные действия:
-delete
– удаляет объекты, соответствующие результатам поиска,-ls
– выводит более подробные результаты поиска,-print
– применяется по умолчанию, если не указать другое действие, показывает полный путь к найденным файлам,-exec
– выполняет указанную команду в каждой строке результатов поиска:-exec command {} \;
Где:
command
– команда, например,cp
,{}
– файл из результата поиска, а\;
– завершение команды.
Использование команды:
find . -name file
– поиск файлов в текущем каталоге по имени или маске file.find ./directory -name file
– поиск файлов в каталоге directory по имени или маске file.find . -size +1M
– поиск файлов в текущем каталоге и подкаталогах с размером более 1МБ.find . -size +1M -exec du {} \;
– поиск файлов в текущем каталоге и подкаталогах с размером более 1МБ и вывод размеров этих файлов.find ./directory –empty
– поиск пустых файлов и каталогов в каталоге directory и подкаталогах.find ./directory -empty -delete
– поиск пустых файлов и каталогов в каталоге directory и подкаталогах и их удаление.find . -cmin -60 -size +10k
– поиск файлов и каталогов в текущем каталоге и подкаталогах, которые были изменены в течение прошлых 60 минут и у которых размер более 10КБ.find . -name file\* -or -name \*txt
– поиск файлов и каталогов в текущем каталоге и подкаталогах по маске «file*» ИЛИ «*.txt».find . -name file\* -type d
– поиск каталогов в текущем каталоге и подкаталогах по маске «file *».find /etc -type f -exec grep -iH 'nameserver' {} \\;
– поиск файлов в каталоге /etc, которые содержат подстроку nameserver.
Примеры использования:
Поиск файлов в текущем каталоге и подкаталогах по маске «test*.txt»
localadmin@astra:~$ find . -name test\*.txt
./test\.txt
./test4/test3.txt
./test4/test2.txt
./test4/test.txt
./test.txt
Поиск файлов в каталоге test4 и подкаталогах по маске «test*.txt»
localadmin@astra:~$ find ./test4 -name test\*.txt
./test4/test3.txt
./test4/test2.txt
./test4/test.txt
Поиск файлов в текущем каталоге и подкаталогах с размером более 1МБ.
localadmin@astra:~$ find . -size +1M
./VBoxLinuxAdditions.run
./.local/share/flyhelp/ru/.flyhelp/fts
./.cache/icon-cache.kcache
./.cache/mesa_shader_cache/index
Поиск файлов в текущем каталоге и подкаталогах с размером более 1МБ и вывод размеров этих файлов
localadmin@astra:~$ find . -size +1M -exec du {} \\;
5832 ./VBoxLinuxAdditions.run
3492 ./.local/share/flyhelp/ru/.flyhelp/fts
10304 ./.cache/icon-cache.kcache
68 ./.cache/mesa_shader_cache/index
Поиск пустых файлов и каталогов в указанном каталоге и его подкаталогах
localadmin@astra:~$ find ./test -empty
./test/emptyfile
Поиск пустых файлов и каталогов в указанном каталоге и его подкаталогах и их удаление
localadmin@astra:~$
find ./test -empty -delete
find ./test –empty
Поиск файлов и каталогов в текущем каталоге и подкаталогах, которые были изменены в течение последних 60 минут
localadmin@astra:~$ find . -cmin -60
./.xsession-errors
./.config/rusbitech
./.config/rusbitech/fly-term.conf
./.local/share/baloo/index
./.local/share/baloo/index-lock
./test4
./test4/test3.txt
./test4/test2.txt
./test4/test.txt
Поиск файлов и каталогов в текущем каталоге и подкаталогах, которые были изменены в течение последних 60 минут и у которых размер более 10КБ
localadmin@astra:~$ find . -cmin -60 -size +10k
./.xsession-errors
./.local/share/baloo/index
Поиск файлов и каталогов в текущем каталоге и подкаталогах по маске «test*» ИЛИ «*txt»
localadmin@astra:~$ find . -name test\* -or -name \*txt
./test
./test/test1
./test/test1_link
./Desktops/Desktop1/Новый файл.txt
./-test.txt
./.local/share/Trash/files/test
./.local/share/Trash/files/.txt
./.local/share/Trash/info/test.trashinfo
./hello.txt
./test1
./test\\.txt
./test4
./test4/test3.txt
./test4/test2.txt
./test4/test.txt
./test.txt
./test3
Поиск каталогов в текущем каталоге и подкаталогах по маске «test*»
localadmin@astra:~$ find . -name test\* -type d
./test_cp
./test
./test_cat
./test5
./test5/test_cp
./.local/share/Trash/files/test
./test4
./test_tac
./test3
./test_mv
./test_mv/test
Практика и тестирование
Заключение
В этом модуле мы узнали:
Как работать с файлами и каталогами
Структуру каталогов Linux и назначение директорий
Правила именования файлов
Какие бывают файлы в Linux
Как работать с файлами и директориями
Теперь, научившись работать с файлами и каталогами и узнав, что в Linux все есть файл, мы понимаем важность умения эффективно работать с текстовой информацией в Linux. Следующий модуль как раз посвящен этой теме. Мы познакомимся и научимся работать с текстовой информацией, используя консольные утилиты и текстовые редакторы.
Дополнительные источники информации
Правила именования файловых объектов в Astra Linux детально рассмотрены в статье на wiki.astralinux.ru.