Linux ls тип файла

Обновлено: 07.07.2024

Команда ls выводит список файлов и каталогов в файловой системе и показывает подробную информацию о них. Это часть пакета основных утилит GNU, который установлен во всех дистрибутивах Linux.

Эта статья покажет вам, как использовать команду ls, на практических примерах и подробных объяснениях наиболее распространенных параметров ls.

Как использовать команду ls

Синтаксис команды ls следующий:

При использовании без параметров и аргументов ls отображает список имен всех файлов в текущем рабочем каталоге :

Файлы перечислены в алфавитном порядке в столько столбцов, сколько может поместиться на вашем терминале:

Чтобы вывести список файлов в определенном каталоге, передайте путь к каталогу в качестве аргумента команде ls . Например, чтобы отобразить содержимое каталога /etc , введите:

Вы также можете передать несколько каталогов и файлов, разделенных пробелом:

У команды ls есть несколько опций. В следующих разделах мы рассмотрим наиболее часто используемые варианты.

Формат длинных списков

По умолчанию вывод команды ls показывает только имена файлов и каталогов, что не очень информативно.

Параметр -l (нижний регистр L) указывает ls печатать файлы в формате длинного списка.

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

  • Тип файла.
  • Права доступа к файлу.
  • Количество жестких ссылок на файл.
  • Владелец файла.
  • Файловая группа.
  • Размер файла.
  • Дата и время.
  • Имя файла.

Давайте объясним самые важные столбцы вывода.

Первый символ показывает тип файла. В этом примере первый символ - , что указывает на обычный файл. Значения для других типов файлов следующие:

Следующие два поля root root показывают владельца файла и группу, за которыми следует размер файла ( 337 ), показанный в байтах. Используйте параметр -h если вы хотите печатать размеры в удобочитаемом формате. Вы можете изменить владельца файла с помощью команды chown .

Показать скрытые файлы

Чтобы отобразить все файлы, включая скрытые, используйте параметр -a :

Сортировка вывода

Как мы уже упоминали, по умолчанию команда ls перечисляет файлы в алфавитном порядке.

Параметр --sort позволяет сортировать вывод по расширению, размеру, времени и версии:

Если вы хотите получить результаты в обратном порядке сортировки, используйте параметр -r .

Например, чтобы отсортировать файлы в каталоге /var по времени модификации в обратном порядке, вы должны использовать:

Стоит отметить, что команда ls не показывает общее пространство, занятое содержимым каталога. Чтобы узнать размер каталога , используйте команду du .

Рекурсивный список подкаталогов

Параметр -R указывает команде ls рекурсивно отображать содержимое подкаталогов:

Выводы

Команда ls отображает информацию о файлах и каталогах.

Для получения дополнительной информации о ls посетите страницу GNU Coreutils или введите man ls в свой терминал.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

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

Обычные (regular) файлы и каталоги (directory) обеспечивают сохранение информации на тех или, иных носителях.

Специальные файлы устройств (special device file) позволяют обмениваться информацией с тем или иным аппаратным устройством ввода-вывода, а именованные каналы и файловые сокеты предназначены для обмена информацией между процессом одной программы и процессами других, программ.

В примере ниже в полном (-l, long) выводе команды ls проиллюстрирован признак типа файла.

Символом — обозначается обычный файл, символами b или с — специальные файлы блочного (block) или символьного (character) устройств, символом р — именованный канал (pipe), символом s сокет (socket), а символом l — символическая ссылка (link).

Признак типа файлов ls

$ ls -l /bin/ls /dev/sda /dev/tty /sbin/halt

-rwxr-xr-x 1 john john 104508 нояб. 20 2017 /bin/ls

crw-rw-rw- 1 root tty 6, 0 марта 27 13:47 /dev/tty

lrwxrwxrwx 1 root root 5 янв. 18 2018 /sbin/halt -> reboot

$ ls -l /run/screen/S-john/11322.pts-5.ubuntu /run/udev/control

srwxr-xr-x 1 root root 0 марта 23 23:45 /run/udev/control

Обычные файлы

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

За структуру содержания и имена обычных файлов ответственны прикладные программы, а операционная система не накладывает никаких ограничений.

Содержание обычных файлов

$ file /usr/share/man/man1/file.1.gz

/usr/share/man/manl/file. 1.gz: gzlp compressed data, from Unix, max compression

$ file /etc/passwd

/etc/passwd: ASCII text

$ file /etc/ls

/bin/ls: ELF 32-blt LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2,6.24,

$ file /usr/share/sounds/alsa/Noise.wav

/usr/share/sounds/alsa/Noise.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM,

16 bit, mono 48000 Hz

$ file /usr/share/backgrounds/Floorboards_by_Dawe. jpg

Создать обычный файл можно при помощи любой программы, сохраняющей информацию в файл, например посредством текстовых редакторов vi, nano или mcedit. Для создания пустого обычного файла можно воспользоваться командой touch. Для удаления обычного файла предназначается команда rm.

Каталоги

Файлы-каталоги, в отличие от обычных файлов, имеют служебное для операционной системы содержимое — таблицу имен файлов и соответствующих им номеров индексных дескрипторов (inode, index node), проиллюстрированных ниже.

Имена и номера индексных дескрипторов файлов

$ ls -ai
20332580 . 20318930 .bash_logout 20320866 examples.desktop
20316161 . . 20320868 .bashrc 20320867 .profile
20320797 .bash_history 20332712 .cache

Каждый индексный дескриптор содержит метаданные — список стандартных свойств файла, в том числе указывающих местоположение данных файла (набора блоков) на файловой системе.

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

Метаданные файла

$ stat .profile

Модифицирован: 2016-03-18 13:54:10.000000000 +0400

Для создания каталогов предназначена команда mkdir, а для удаления rmdir, при этом удалению подлежат только пустые каталоги.

Имена, данные, метаданные и индексные дескрипторы

Каждый раз, когда используется путевое (абсолютное или относительное) имя файла, производится итеративный поиск файла в дереве путем последовательного разбора на имя —> метаданные —> данные первого каталога пути, содержащего в свою очередь имена —> метаданные —> данные второго и т. д., пока в конце поиска не будут найдены имя —> метаданные -> данные указанного файла.

Такая ссылочность позволяет сформировать удобную древовидную структуру для каталогизации файлов (называемую деревом каталогов), однако сам поиск является относительно длительной операцией.

Ссылки

Каталог как файл-список имен других файлов, которым сопоставлены номера индексных дескрипторов, не запрещает иметь два разных имени файла, указывающих на одни и те же метаданные . Такой эффект носит название жесткой ссылки, создать которую можно при помощи команды ln.

Жесткая ссылка

$ touch readme

$ ls -li readme

20318653 -rw-r—r— 1 john john 0 ноя. 1 01:32 readme

$ ln readme readme.txt

$ touch README

$ ls -li readne readme.txt README

20318653 -rw-r—r— 2 john john 0 ноя. 1 01:32 readme

20319121 -rw-r—r— 1 john john 0 ноя. 1 01:33 README

20318653 -rw-r—r— 2 john john 0 ноя. 1 01:32 readme.txt

Более того, оба имени являются равнозначными, и нет возможности узнать, какое из них создано первым, из чего нужно заключить, что первое и единственное имя файла уже является его жесткой ссылкой (на номер индексного дескриптора).

При добавлении файлу нового имени (жесткой ссылки) в его метаданных увеличивается счетчик количества имен, а при удалении файла сначала удаляется имя и уменьшается счетчик количества имен, и только при удалении последнего имени высвобождаются метаданные и данные файла.

Символическая ссылка

$ ln -s read.me readme.1st

$ ls -li read*

20318653 -rw-r—r— 1 john john 0 ноя. 1 01:32 read.me

20319944 lrwxrwxrwx 1 john john 6 ноя. 2 00:02 readme.1st -> read.me

В случае с символической ссылкой при удалении целевого файла сама ссылка будет указывать в никуда и называться «сиротой» (orhpan). Попытка прочитать такую ссылку приводит к странным, на первый взгляд, результатам: файл «существует» для команды ls, но команда просмотра содержимого Cat говорит об обратном. Ничего удивительного, если помнить, что ls работает с именами файлов, a cat — с их данными (которые действительно не существуют).

Специальные файлы устройств Linux

Специальные файлы устройств предназначены для ввода данных с аппаратных устройств и вывода данных на них. Настоящую работу но вводу и выводу данных проделывает драйвер устройства, а специальные файлы играют роль своеобразных «порталов» связи с драйверами.

Различают символьные и блочные специальные файлы устройств, у которых минимальной единицей обмена информацией с драйверами является блок (обычно размером в 512 байт) или символ (1 байт), соответственно.

Специальные файлы устройств

$ ls -l /dev/sd* /dev/input/mouse* /dev/video* /dev/snd/pcm*
crw-r—— 1 root root 13, 32 марта 24 23:47 /dev/input/mouse0
brw-rw—- 1 root disk 8, 0 марта 27 15:02 /dev/sda
brw-rw—- 1 root disk 8, 1 марта 24 23:48 /dev/sda1
brw-rw—- 1 root disk 8, 2 марта 24 23:47 /dev/sda2

brw-rw—- 1 root disk 8, 5 марта 24 23:45 /dev/sda5
crw-rw—T+ 1 root audio 116, 4 марта 27 19:02 /dev/snd/pcmC0D0c
crw-rw—T+ 1 root audio 116, 3 марта 27 13:48 /dev/snd/pcmC0D0p
crw-rw—T+ 1 root audio 116, 2 марта 24 23:47 /dev/snd/pcmC0D3p
crw-rw—-+ 1 root video 81, 0 марта 24 23:45 /dev/videoO

Все драйверы ядра пронумерованы главными (мажорными, major) числами , а аппаратные устройства, находящиеся под их управлением, — дополнительными (минорными, minor) числами.

Именованные каналы и файловые сокеты

Именованные каналы и файловые сокеты являются простейшими средствами межпроцессного взаимодействия (IPC, InterProcess Communication) и служат программам для обмена информацией между собой.

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

Предоставить процессам возможность использовать файловые операции для эффективного! взаимодействия между собой призваны именованные каналы (named pipe) pipe, они же FIFО-файлы (first in first out) fifo и файловые сокеты (socket) unix. Каналы и сокеты используют для передачи данных от процесса к процессу оперативную память ядра операционной системы, а «не память накопителя, как обычные файлы.

Именованный канал обычно, используют при взаимодействии процессов по схеме «поставщик — потребитель» (producer-consumer), когда один потребитель принимает информацию от одного поставщика (на самом деле от разных, но в различные моменты времени). Например (в некоторых реализациях), программы shutdown, reboot, poweroff и telinit передают посредством именованного канала /dev/initctl команды перезагрузки, выключения питания и пр. диспетчеру init, который выполняет соответствующие действия.

При перемещениях по файловой системе Linux вы обязательно столкнетесь с различными типами файлов. Наиболее часто используемые и очевидные - это обычные файлы и директории. Тем не менее операционная система Linux может предложить больше с точки зрения типов файлов, так как она включает еще другие 5 типов файлов. В этой короткой статье мы покажем, как распознавать 7 типов файлов, встречающиеся в Linux.

2. Идентификация типов файлов в Linux

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

Ниже пример вывода этой команды.

Команда ls показывает тип файла в кодированном виде как первый символ части вывода, показывающего права доступа. В данном случае это "-", что значит "обычный файл". Важно отметить, что в Linux невозможно изменить тип файла, ошибочно присвоив ему другое расширение. Давайте посмотрим на краткое описание всех семи различных типов файлов в Linux и их идентификаторы для команды ls:

- : обычный файл
d : директория
c : файл символьного устройства
b : файл блочного устройства
s : файл локального сокета
p : именованный канал
l : символическая ссылка

2.1. Обычный файл

Обычный файл - это самый распространенный тип файлов в системе Linux. Он объединяет самые различные виды файлов, такие как текст, изображения, бинарные файлы, библиотеки и т.д. Обычный файл вы можете создать с помощью команды:

Первый символ в выводе команды ls, в данном случае "-", представляет собой код идентификации для обычного файла. Для удаления обычного файла используется команда:

2.2. Директория

Директория - это второй самый распространенный тип файлов в Linux. Директории могут быть созданы с помощью команды mkdir:

Как уже говорилось ранее, директории идентифицируются по символу "d" в выводе команды ls. Для удаления директорий используется команда rmdir.

В этом случае необходимо использовать команду:

2.3. Символьное устройство

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

В данном случае символьное устройство - это модуль vmware.

2.4. Блочное устройство

Блочные устройства похожи на символьные. Это главным образом такие устройства как жесткие диски, память и т.д.

2.5. Сокеты локального домена

Сокеты локального домена используются для обмена данными между процессами. В основном они используются такими службами, как X windows, syslog и т.д.

Сокеты могут быть созданы с помощью системного вызова socket, а удалены с помощью системной функции unlink или команд rm.

2.6. Именованные каналы

Как и локальные сокеты, именованные каналы позволяют осуществлять обмен данными между локальными процессами. Они могут быть созданы с помощью команды mknod, а удалены с помощью команды rm.

2.7. Символические ссылки

С посощью символических ссылок администратор может присвоить одному файлу или директории несколько идентичностей. Символическая ссылка является указателем на оригинальный файл. Существует два типа символических ссылок:
- жесткие ссылки;
- мягкие ссылки.

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

Для удаления символической ссылки мы можем использовать команды unlink или rm.

3. Заключение

Как системный администратор, вы будете в основном работать с обычными файлами, директориями, блочными или символьными устройствами. Программист также часто имеет дело с локальными сокетами и именованными каналами.

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

Идентификация типов файлов в Linux

Для определения типа файла достаточно воспользоваться всего одной командой:

$ ls -ld <имя_файла>

$ ls -ld /etc/services
-rw-r--r-- 1 root root 19281 Feb 14 2012 /etc/services

Типы файлов в Linux

Ниже представлено краткое описание 7 различных типов файлов в Linux:

c — символьное устройство;

b — блочное устройство;

s — (локальный) сокет;

p — именованный канал;

l — символьная ссылка.

Обычный файл

Обычный файл — это наиболее распространенный тип файлов в Linux. Текстовые файлы, изображения, двоичные файлы, общие библиотеки и т.д. — все они относятся к обычному типу файлов. Вы можете создать обычный файл с помощью команды touch :

$ touch ravesli.txt
diego@debian:

$ ls -ld ravesli.txt
- rw-r--r-- 1 diego diego 0 фев 20 11:14 ravesli.txt

Первый символ вывода команды ls , в данном случае - , обозначает, что перед нами обычный файл. Для удаления обычного файла используется команда rm (сокр. от «remove»):

$ rm ravesli.txt
diego@debian:

$ ls -ld ravesli.txt
ls: невозможно получить доступ к 'ravesli.txt': Нет такого файла или каталога

Каталог

Обозначается как d

Каталог — это второй по распространенности тип файлов в Linux. Каталог можно создать с помощью команды mkdir (сокр. от «make directory»):

$ mkdir ravesli
diego@debian:

$ ls -ld ravesli
d rwxr-xr-x 2 diego diego 4096 фев 20 12:14 ravesli

Как объяснялось ранее, каталогу соответствует символ d (от «directory») выходных данных команды ls . Для удаления пустого каталога используется команда rmdir (сокр. от «remove directory»):

$ rmdir ravesli
diego@debian:

$ ls -ld ravesli
ls: невозможно получить доступ к 'ravesli': Нет такого файла или каталога

$ mkdir ravesli
diego@debian:

$ touch /home/diego/ravesli/ravesli.txt
diego@debian:

$ rmdir ravesli
rmdir: не удалось удалить 'ravesli': Каталог не пуст

В этом случае вам нужно использовать команду rm -r :

$ rm -r ravesli/
diego@debian:

$ ls -ld ravesli
ls: невозможно получить доступ к 'ravesli': Нет такого файла или каталога
diego@debian:

Символьное устройство

Обозначается как c

Символьные и блочные файлы устройств позволяют пользователям и программам взаимодействовать с аппаратными периферийными устройствами. При этом символьные устройства обеспечивают последовательный поток ввода или вывода:

$ sudo ls -ld /dev/urandom
c rw-rw-rw- 1 root root 1, 9 фев 20 12:49 /dev/urandom

В этом примере символьным устройством является генератор псевдослучайных чисел.

Блочное устройство

Обозначается как b

Блочные устройства похожи на символьные. Чаще всего они управляют аппаратными устройствами, такими как: жесткие диски, память и т.д. Большинство из них располагаются в каталоге /dev :

$ ls -ld /dev/sda
b rw-rw---- 1 root disk 8, 0 фев 20 12:49 /dev/sda

Локальные сокеты

Обозначаются как s

Как правило, локальные сокеты используются для связи между такими службами, как: X Window, syslog и т.д.

$ ls -ld /dev/log
s rw-rw-rw- 1 root root 0 Jan 4 10:13 /dev/log

Именованные каналы

Обозначаются как p

Подобно локальным сокетам, именованные каналы позволяют осуществлять связь между двумя локальными процессами. Основное отличие от сокетов в том, что через каналы данные могут проходить одновременно только в одном направлении. Они могут быть созданы с помощью команды mknod и удалены с помощью команды rm .

Символьные ссылки

Обозначаются как l

С помощью символьных ссылок администратор назначает файлу или каталогу несколько идентификаторов. Символьную ссылку можно рассматривать как указатель на исходный файл.

Существует два типа символьных ссылок в Linux:

Мягкая ссылка является указателем на некоторый файл или каталог (сродни ярлыкам в Windows). Если вы переместите файл, связь с символьной ссылкой разорвётся (но сама ссылка все еще будет существовать, указывая на файл, которого нет). Если вы замените файл другим, сохранив имя, символьная ссылка будет указывать на новый файл. Символьные ссылки могут охватывать различные разделы файловой системы.

Жесткая ссылка привязывается только к файлам, охватывает только один раздел файловой системы и, по сути, является тем же файлом, на который ссылается.

Для создания символьной мягкой ссылки используется команда ln -s :

$ echo file1 > file1
diego@debian:

$ ln -s file1 file2
diego@debian:

$ cat file2
file1
diego@debian:

$ ls -ld file2
l rwxrwxrwx 1 diego diego 5 фев 20 14:11 file2 -> file1

Чтобы удалить символьную ссылку, мы можем использовать команду unlink или rm .

Заключение

Как системный администратор вы, в основном, будете иметь дело с обычными файлами, каталогами и символьными устройствами. Как разработчик программного обеспечения вы будете сталкиваться с сокетами и именованными каналами.

Читайте также: