Объяснение типов файлов в Linux — просто и понятно, для новичка и специалиста. Если вы новичок в Linux или использовали его в течение нескольких месяцев, значит, вы слышали или читали утверждение, что «В Linux все является файлом».
Это действительно так, хотя это всего лишь концепция обобщения, в Unix и его производных, таких как Linux, все рассматривается как файл. Если что-то не является файлом, он должен быть запущен как процесс в системе.
Чтобы понять это, возьмем, например, объем пространства в корневом каталоге (/), который всегда используется различными типами файлов Linux. Когда вы создаете файл или передаете файл в вашу систему, он занимает некоторое место на физическом диске и считается, что он находится в определенном формате (тип файла).
Кроме того, система Linux не делает различий между файлами и каталогами, но каталоги выполняют одну важную работу, которая заключается в хранении других файлов в группах в иерархии для удобного расположения. Все ваши аппаратные компоненты представлены в виде файлов, и система связывается с ними с помощью этих файлов.
Это очень замечательное свойство Linux, поскольку все ресурсы ввода/вывода, такие как ваши документы, каталоги (папки в Mac OS X и Windows), клавиатура, монитор, жесткие диски, съемные носители, принтеры, модемы, виртуальные терминалы, а также межпроцессное и сетевое взаимодействие представляют собой потоки байтов, определяемые пространством файловой системы.
Заметным преимуществом того, что все является файлом, это то, что один и тот же набор инструментов, утилит и API-интерфейсов Linux можно использовать в вышеупомянутых ресурсах ввода/вывода.
Хотя в Linux все является файлом, существуют определенные специальные файлы, которые представляют собой нечто большее, чем просто файл, например, сокеты и именованные каналы.
Какие существуют типы файлов в Linux?
В Linux существует в основном три типа файлов:
- Обычные файлы
- Специальные файлы
- Справочники
Обычные Файлы
Это файлы данных, содержащие текст, данные или программные инструкции, и они являются наиболее распространенным типом файлов, которые вы можете найти в системе Linux, и включают в себя:
- Читаемые файлы
- Двоичные файлы
- Файлы изображений
- Сжатые файлы и тд.
Специальные файлы
Специальные файлы включают в себя следующее:
Блочных файлы. Это файлы устройств, которые предоставляют буферизованный доступ к компонентам оборудования системы. Они предоставляют способ связи с драйверами устройств через файловую систему.
Одним из важных аспектов блочных файлов является то, что они могут передавать большой блок данных и информации в определенный момент времени.
Список блочных файлов в каталоге:
# ls -l /dev | grep "^b"
Пример вывода
brw-rw---- 1 root disk 7, 0 May 18 10:26 loop0 brw-rw---- 1 root disk 7, 1 May 18 10:26 loop1 brw-rw---- 1 root disk 7, 2 May 18 10:26 loop2 brw-rw---- 1 root disk 7, 3 May 18 10:26 loop3 brw-rw---- 1 root disk 7, 4 May 18 10:26 loop4 brw-rw---- 1 root disk 7, 5 May 18 10:26 loop5 brw-rw---- 1 root disk 7, 6 May 18 10:26 loop6 brw-rw---- 1 root disk 7, 7 May 18 10:26 loop7 brw-rw---- 1 root disk 1, 0 May 18 10:26 ram0 brw-rw---- 1 root disk 1, 1 May 18 10:26 ram1 brw-rw---- 1 root disk 1, 10 May 18 10:26 ram10 brw-rw---- 1 root disk 1, 11 May 18 10:26 ram11 brw-rw---- 1 root disk 1, 12 May 18 10:26 ram12 brw-rw---- 1 root disk 1, 13 May 18 10:26 ram13 brw-rw---- 1 root disk 1, 14 May 18 10:26 ram14 brw-rw---- 1 root disk 1, 15 May 18 10:26 ram15 brw-rw---- 1 root disk 1, 2 May 18 10:26 ram2 brw-rw---- 1 root disk 1, 3 May 18 10:26 ram3 brw-rw---- 1 root disk 1, 4 May 18 10:26 ram4 brw-rw---- 1 root disk 1, 5 May 18 10:26 ram5 ...
Символьные файлы: это также файлы устройств, которые обеспечивают небуферизованный последовательный доступ к системным аппаратным компонентам. Они работают, предоставляя способ связи с устройствами, передавая данные по одному символу за раз.
Список символьных файлов в каталоге:
# ls -l /dev | grep "^c"
Пример вывода
crw------- 1 root root 10, 235 May 18 15:54 autofs crw------- 1 root root 10, 234 May 18 15:54 btrfs-control crw------- 1 root root 5, 1 May 18 10:26 console crw------- 1 root root 10, 60 May 18 10:26 cpu_dma_latency crw------- 1 root root 10, 203 May 18 15:54 cuse crw------- 1 root root 10, 61 May 18 10:26 ecryptfs crw-rw---- 1 root video 29, 0 May 18 10:26 fb0 crw-rw-rw- 1 root root 1, 7 May 18 10:26 full crw-rw-rw- 1 root root 10, 229 May 18 10:26 fuse crw------- 1 root root 251, 0 May 18 10:27 hidraw0 crw------- 1 root root 10, 228 May 18 10:26 hpet crw-r--r-- 1 root root 1, 11 May 18 10:26 kmsg crw-rw----+ 1 root root 10, 232 May 18 10:26 kvm crw------- 1 root root 10, 237 May 18 10:26 loop-control crw------- 1 root root 10, 227 May 18 10:26 mcelog crw------- 1 root root 249, 0 May 18 10:27 media0 crw------- 1 root root 250, 0 May 18 10:26 mei0 crw-r----- 1 root kmem 1, 1 May 18 10:26 mem crw------- 1 root root 10, 57 May 18 10:26 memory_bandwidth crw------- 1 root root 10, 59 May 18 10:26 network_latency crw------- 1 root root 10, 58 May 18 10:26 network_throughput crw-rw-rw- 1 root root 1, 3 May 18 10:26 null crw-r----- 1 root kmem 1, 4 May 18 10:26 port crw------- 1 root root 108, 0 May 18 10:26 ppp crw------- 1 root root 10, 1 May 18 10:26 psaux crw-rw-rw- 1 root tty 5, 2 May 18 17:40 ptmx crw-rw-rw- 1 root root 1, 8 May 18 10:26 random
Файлы символьных ссылок. Символическая ссылка — это ссылка на другой файл в системе, по сути ярлык. Следовательно, файлы символьных ссылок — это файлы, которые указывают на другие файлы, и они могут быть каталогами или обычными файлами.
Список символических ссылок в каталоге:
# ls -l /dev/ | grep "^l"
Пример вывода
lrwxrwxrwx 1 root root 3 May 18 10:26 cdrom -> sr0 lrwxrwxrwx 1 root root 11 May 18 15:54 core -> /proc/kcore lrwxrwxrwx 1 root root 13 May 18 15:54 fd -> /proc/self/fd lrwxrwxrwx 1 root root 4 May 18 10:26 rtc -> rtc0 lrwxrwxrwx 1 root root 8 May 18 10:26 shm -> /run/shm lrwxrwxrwx 1 root root 15 May 18 15:54 stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 May 18 15:54 stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 May 18 15:54 stdout -> /proc/self/fd/1
Вы можете создавать символические ссылки, используя утилиту ln -s в Linux, как в примере ниже.
# touch file1.txt # ln -s file1.txt /home/sedicomm/file1.txt [create symbolic link] # ls -l /home/sedicomm/ | grep "^l" [List symbolic links]
В приведенном выше примере я создал файл file1.txt в каталоге /tmp, затем создал символическую ссылку /home/sedicomm/file1.txt, указывающую на /tmp/file1.txt.
Каналы или именованные каналы. Это файлы, которые позволяют осуществлять межпроцессное взаимодействие путем подключения вывода одного процесса ко входу другого.
Именованный канал на самом деле представляет собой файл, который используется двумя процессами для взаимодействия друг с другом, и он действует как канал Linux.
Перечисление каналов в каталоге:
Продолжим наше объяснение типов файлов в Linux.
# ls -l | grep "^p"
Пример вывода
prw-rw-r-- 1 sedicomm sedicomm 0 May 18 17:47 pipe1 prw-rw-r-- 1 sedicomm sedicomm 0 May 18 17:47 pipe2 prw-rw-r-- 1 sedicomm sedicomm 0 May 18 17:47 pipe3 prw-rw-r-- 1 sedicomm sedicomm 0 May 18 17:47 pipe4 prw-rw-r-- 1 sedicomm sedicomm 0 May 18 17:47 pipe5
Вы можете использовать утилиту mkfifo для создания именованного канала в Linux следующим образом.
# mkfifo pipe1 # echo "This is named pipe1" > pipe1
В приведенном выше примере я создал именованный канал с именем pipe1, затем передал ему некоторые данные с помощью команды echo, после чего оболочка стала не интерактивной при обработке ввода.
Затем я открыл другую оболочку и выполнил другую команду, чтобы отобразить то, что было передано в канал.
# while read line ;do echo "This was passed-'$line' "; done<pipe1
Продолжим наше объяснение типов файлов в Linux.
Файлы сокетов: это файлы, которые обеспечивают средства межпроцессного взаимодействия, но они могут передавать данные и информацию между процессами, работающими в разных средах.
Это означает, что сокеты обеспечивают передачу данных и информации между процессами, работающими на разных компьютерах в сети.
Примером работы сокетов может служить веб-браузер, устанавливающий соединение с веб-сервером.
# ls -l /dev/ | grep "^s"
Пример вывода
srw-rw-rw- 1 root root 0 May 18 10:26 log
Это пример создания сокета в C с помощью системного вызова socket ().
int socket_desc= socket(AF_INET, SOCK_STREAM, 0 );
В приведенном выше:
- AF_INET — это семейство адресов (IPv4)
- SOCK_STREAM — это тип (соединение ориентировано на протокол TCP)
- 0 является протоколом (IP Protocol)
Чтобы обратиться к файлу сокета, используйте socket_desc, который совпадает с дескриптором файла, и используйте системные вызовы read () и write () для чтения и записи из сокета соответственно.
Продолжим наше объяснение типов файлов в Linux.
Директории
Это специальные файлы, которые хранят как обычные, так и другие специальные файлы, и они организованы в файловой системе Linux в иерархии, начиная с корневого (/) каталога.
Список в каталоге:
# ls -l / | grep "^d"
Пример вывода
drwxr-xr-x 2 root root 4096 May 5 15:49 bin drwxr-xr-x 4 root root 4096 May 5 15:58 boot drwxr-xr-x 2 root root 4096 Apr 11 2015 cdrom drwxr-xr-x 17 root root 4400 May 18 10:27 dev drwxr-xr-x 168 root root 12288 May 18 10:28 etc drwxr-xr-x 3 root root 4096 Apr 11 2015 home drwxr-xr-x 25 root root 4096 May 5 15:44 lib drwxr-xr-x 2 root root 4096 May 5 15:44 lib64 drwx------ 2 root root 16384 Apr 11 2015 lost+found drwxr-xr-x 3 root root 4096 Apr 10 2015 media drwxr-xr-x 3 root root 4096 Feb 23 17:54 mnt drwxr-xr-x 16 root root 4096 Apr 30 16:01 opt dr-xr-xr-x 223 root root 0 May 18 15:54 proc drwx------ 19 root root 4096 Apr 9 11:12 root drwxr-xr-x 27 root root 920 May 18 10:54 run drwxr-xr-x 2 root root 12288 May 5 15:57 sbin drwxr-xr-x 2 root root 4096 Dec 1 2014 srv dr-xr-xr-x 13 root root 0 May 18 15:54 sys drwxrwxrwt 13 root root 4096 May 18 17:55 tmp drwxr-xr-x 11 root root 4096 Mar 31 16:00 usr drwxr-xr-x 12 root root 4096 Nov 12 2015 var
Вы можете создать каталог с помощью команды mkdir.
# mkdir -m 1666 sedicomm.com # mkdir -m 1666 edu-cisco.org # mkdir -m 1775 blog.sedicomm.com
Резюме
Теперь у вас должно быть четкое понимание того, почему все в Linux является файлом, и бывают файлы разных типов, которые могут быть в вашей системы Linux.
Спасибо за уделенное время на прочтение статьи! Также вам может быть полезно узнать о Cryptmount — утилите для создания зашифрованных файловых систем в Linux.
Если возникли вопросы, задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet (программируемые сети) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco и Linux с трудоустройством!
- Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
- Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
- Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
- Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
- Если хотите индивидуальный график — обсудим и осуществим.
- Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- отредактировать резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.