При навигации по файловой системе в Linux, вы обязательно столкнетесь с различными типами файлов. Наиболее часто используемые и очевидные типы — это обычные файлы и каталоги. Однако помимо их в Linux также существуют еще 5 специальных типов.
Идентификация типов файлов в Linux
Для определения типа файла достаточно воспользоваться всего одной командой:
$ ls -ld <имя_файла>
Например:
$ ls -ld /etc/services
-rw-r--r-- 1 root root 19281 Feb 14 2012 /etc/services
Команда ls
отобразит тип файла в виде первого символа из списка. В данном случае этим символом будет -
, обозначающий «обычный файл». Важно отметить, что в Linux не следует путать типы файлов с расширениями файлов.
Типы файлов в Linux
Ниже представлено краткое описание 7 различных типов файлов в Linux:
-
— обычный файл;
d
— каталог;
c
— символьное устройство;
b
— блочное устройство;
s
— (локальный) сокет;
p
— именованный канал;
l
— символьная ссылка.
Обычный файл
Обозначается как -
Обычный файл — это наиболее распространенный тип файлов в Linux. Текстовые файлы, изображения, двоичные файлы, общие библиотеки и т.д. — все они относятся к обычному типу файлов. Вы можете создать обычный файл с помощью команды touch
:
diego@debian:~$ touch ravesli.txt
diego@debian:~$ ls -ld ravesli.txt
-rw-r--r-- 1 diego diego 0 фев 20 11:14 ravesli.txt
Первый символ вывода команды ls
, в данном случае -
, обозначает, что перед нами обычный файл. Для удаления обычного файла используется команда rm
(сокр. от «remove»):
diego@debian:~$ rm ravesli.txt
diego@debian:~$ ls -ld ravesli.txt
ls: невозможно получить доступ к 'ravesli.txt': Нет такого файла или каталога
Каталог
Обозначается как d
Каталог — это второй по распространенности тип файлов в Linux. Каталог можно создать с помощью команды mkdir
(сокр. от «make directory»):
diego@debian:~$ mkdir ravesli
diego@debian:~$ ls -ld ravesli
drwxr-xr-x 2 diego diego 4096 фев 20 12:14 ravesli
Как объяснялось ранее, каталогу соответствует символ d
(от «directory») выходных данных команды ls
. Для удаления пустого каталога используется команда rmdir
(сокр. от «remove directory»):
diego@debian:~$ rmdir ravesli
diego@debian:~$ ls -ld ravesli
ls: невозможно получить доступ к 'ravesli': Нет такого файла или каталога
При попытке удалить каталог, содержащий внутри себя файлы, вы получите сообщение об ошибке:
diego@debian:~$ mkdir ravesli
diego@debian:~$ touch /home/diego/ravesli/ravesli.txt
diego@debian:~$ rmdir ravesli
rmdir: не удалось удалить 'ravesli': Каталог не пуст
В этом случае вам нужно использовать команду rm -r
:
diego@debian:~$ rm -r ravesli/
diego@debian:~$ ls -ld ravesli
ls: невозможно получить доступ к 'ravesli': Нет такого файла или каталога
diego@debian:~$
Символьное устройство
Обозначается как c
Символьные и блочные файлы устройств позволяют пользователям и программам взаимодействовать с аппаратными периферийными устройствами. При этом символьные устройства обеспечивают последовательный поток ввода или вывода:
diego@debian:~$ sudo ls -ld /dev/urandom
crw-rw-rw- 1 root root 1, 9 фев 20 12:49 /dev/urandom
В этом примере символьным устройством является генератор псевдослучайных чисел.
Блочное устройство
Обозначается как b
Блочные устройства похожи на символьные. Чаще всего они управляют аппаратными устройствами, такими как: жесткие диски, память и т.д. Большинство из них располагаются в каталоге /dev
:
diego@debian:~$ ls -ld /dev/sda
brw-rw---- 1 root disk 8, 0 фев 20 12:49 /dev/sda
Локальные сокеты
Обозначаются как s
Как правило, локальные сокеты используются для связи между такими службами, как: X Window, syslog и т.д.
$ ls -ld /dev/log
srw-rw-rw- 1 root root 0 Jan 4 10:13 /dev/log
Именованные каналы
Обозначаются как p
Подобно локальным сокетам, именованные каналы позволяют осуществлять связь между двумя локальными процессами. Основное отличие от сокетов в том, что через каналы данные могут проходить одновременно только в одном направлении. Они могут быть созданы с помощью команды mknod
и удалены с помощью команды rm
.
Символьные ссылки
Обозначаются как l
С помощью символьных ссылок администратор назначает файлу или каталогу несколько идентификаторов. Символьную ссылку можно рассматривать как указатель на исходный файл.
Существует два типа символьных ссылок в Linux:
Мягкая ссылка является указателем на некоторый файл или каталог (сродни ярлыкам в Windows). Если вы переместите файл, связь с символьной ссылкой разорвётся (но сама ссылка все еще будет существовать, указывая на файл, которого нет). Если вы замените файл другим, сохранив имя, символьная ссылка будет указывать на новый файл. Символьные ссылки могут охватывать различные разделы файловой системы.
Жесткая ссылка привязывается только к файлам, охватывает только один раздел файловой системы и, по сути, является тем же файлом, на который ссылается.
Для создания символьной мягкой ссылки используется команда ln -s
:
diego@debian:~$ echo file1 > file1
diego@debian:~$ ln -s file1 file2
diego@debian:~$ cat file2
file1
diego@debian:~$ ls -ld file2
lrwxrwxrwx 1 diego diego 5 фев 20 14:11 file2 -> file1
Чтобы удалить символьную ссылку, мы можем использовать команду unlink
или rm
.
Заключение
Как системный администратор вы, в основном, будете иметь дело с обычными файлами, каталогами и символьными устройствами. Как разработчик программного обеспечения вы будете сталкиваться с сокетами и именованными каналами.