Объяснение типов файлов в 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.

Перечисление каналов в каталоге:

# 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

Файлы сокетов: это файлы, которые обеспечивают средства межпроцессного взаимодействия, но они могут передавать данные и информацию между процессами, работающими в разных средах.

Это означает, что сокеты обеспечивают передачу данных и информации между процессами, работающими на разных компьютерах в сети.

Примером работы сокетов может служить веб-браузер, устанавливающий соединение с веб-сервером.

# 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 в иерархии, начиная с корневого (/) каталога.

Список в каталоге:

# 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.

Понравилась статья? Поделиться с друзьями: