Вопрос или проблема
Команда ls -al выводит следующий результат:
-rwxrw-r– 10 root root 2048 Jan 13 07:11 afile.exe
Каковы все поля в предыдущем отображении?
В порядке вывода:
-rwxrw-r– 1 root root 2048 Jan 13 07:11 afile.exe
Права доступа к файлам (-rwxrw-r–),
число (жестких) ссылок (1),
имя владельца (root),
группа владельца (root),
размер файла в байтах (2048),
время последнего изменения (Jan 13 07:11),
имя файла/каталога (afile.exe)
Права доступа к файлу отображаются следующим образом:
первый символ чаще всего -, l или d. D указывает на каталог, – представляет обычный файл, l – это символическая ссылка (или мягкая ссылка), остальные буквы используются для других типов специальных файлов
три группы символов, три раза, указывающие права для владельца, группы и других:
r = доступно для чтения
w = доступно для записи
x = исполняемое (для файлов) или доступное (для каталогов)
За этим может следовать другой символ, если есть расширенные права, например, Linux ACL, которые обозначаются знаком +.
В вашем примере -rwxrw-r– означает, что отображенная строка:
обычный файл (отображается как -)
доступно для чтения, записи и выполнения владельцем (rwx)
доступно для чтения, записи, но не для выполнения группой (rw-)
доступно для чтения, но не для записи или выполнения всеми остальными (r–)
Число жестких ссылок означает количество имен, имеющих inode, т.е. ссылки, созданные с помощью ln без параметра -s.
Вывод команды "ls" зависит от версии "ls", используемых опций, используемой платформы и т.д. Исходя из вашего примера, похоже, что вы используете ее с типичной un*x (например, Linux) и, вероятно, используете типичную современную версию "ls". В этом случае:
-rwxrw-r– 10 root root 2048 Jan 13 07:11 afile.exe
?UUUGGGOOOS 00 UUUUUU GGGGGG #### MON DD XX:XX FILENAME
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^- Имя файла.
| | | | | | | | | ————– Время последнего изменения.
| | | | | | | | ——————— Размер файла ИЛИ для размера каталога метаданных. (Размер, как правило, в байтах на современных системах; смотрите ниже.)
| | | | | | | ————————– Имя группы (например, Пользователи, Администраторы и т.д.)
| | | | | | ——————————— Учетная запись владельца
| | | | | —————————————- Количество ссылок (то, что составляет "ссылку" здесь, варьируется)
| | | | ——————————————— Альтернативный доступ (пустое место означает, что ничего не определено, что-то другое варьируется)
| ————————————————— Права доступа на чтение, запись и специальные права для [U]пользователя, [G]руппы и [O]стальных (всех остальных)
——————————————————- Флаг типа файла
Я не уверен, почему количество ссылок для примера файла, который вы указали, так велико. Некоторые платформы имеют необычное представление о том, что составляет "ссылку". Обычно они включают жесткие и символические ссылки, а также записи каталогов (вот почему у каталогов иногда есть большое количество ссылок – его родитель имеет одну ссылку, каталог имеет ссылку на себя в записи ., а каждое из его подкаталогов имеет ссылку обратно через ..).
Некоторые версии и/или флаги командной строки будут показывать количество использованных блоков вместо количества байт; файловая система с размером блока 1024 байта будет перечислять все размеры до 1024 байт как "1", что означает, что используется 1 блок, от 1025 до 2048 как "2", использующих 2 блока, и так далее. Но перечисление размеров блоков по умолчанию (без явного использования параметра командной строки) встречается редко на большинстве современных систем unx.
Флаг специального/альтернативного доступа обычно представляет собой пустое пространство, но на некоторых платформах он может использоваться для указания на наличие специальных/альтернативных режимов доступа (таких как ACL и дескрипторы безопасности на WIN32 и т.д.), и варьируется широко – обратитесь к своему руководству, страницам man, инструменту info или другим источникам информации.
Флаги прав (режим) (UUUGGGOOO) представляют собой три набора по три символа, где первый набор – это "Пользователь" (то есть, Владелец), второй набор – "Группа", а третий набор – "Другие" (то есть, все остальные; любой, кто не является ни Владельцем, ни Группой). Три флага разрешений в каждом наборе обычно представляют собой r или -, что означает, что Пользователь/Группа/Другие могут читать файл (r) или нет (-), за которым следует w или -, указывающее, могут ли они записывать в файл (вы можете иметь файлы, в которые можно записывать, но нельзя читать, как бы странно это ни звучало!), а третьий символ является универсальным флагом для других режимов, обычно что-то вроде x для выполнения (для каталогов это означает, что вы можете пытаться получить доступ к содержимому каталога), или – для отсутствия. Иногда вы можете столкнуться с s или S для программ setuid и/или setgid, или другими менее распространенными символами; смотрите вашу документацию по ls для символов режима, которые она будет отображать.
Наконец, самый первый символ – это тип файла; обычно один из: d для каталога, l для символической ссылки (жесткие ссылки отображаются обычно без специального символа), или – для обычного файла. Есть много других, но менее распространенных, типов файлов для различных файловых систем. Эти первые десять символов (тип файла и права) обсуждаются на Википедии. Еще раз, ваша документация скажет вам, какие типы файлов поддерживает и отображает ваша команда.
Кстати, если вы не можете найти страницу man/info для самого ls (man ls/info ls), попробуйте поискать в пакете "coreutils" (info coreutils). Также обратите внимание, что среди более распространенных платформ платформы Microsoft обычно не очень хорошо переводятся в вывод ls, поэтому вы можете увидеть странное поведение, флаги или другую необычную информацию в выводе, в зависимости от того, как была скомпилирована ваша версия ls, с чем она была связана и т.д.
Еще одно предупреждение: временная метка файла обычно представляет собой дату/время последнего изменения файла, а не время создания файла. На самом деле, в файловой системе типа unx нет записи о времени создания файла; поле ctime НЕ означает "время создания", как это происходит в файловых системах FAT/NTFS, а скорее означает "время изменения [C]inode" – время последнего изменения самого inode. Таймстемпы "mtime" (последнее [M]одифицированное) и "atime" (последнее [A]ccessed/чтение) одинаковы на обеих системах – хотя точность (например, FAT имеет гранулярность в две секунды) и часовой пояс могут варьироваться.
На системах GNU это описывается на странице информации ls очень подробно. Все, что вам нужно сделать, чтобы найти это: просто откройте man ls и в конце найдите ссылку на полную документацию: info coreutils ‘ls invocation’.
Вот цитата из нее:
-l'
–format=long’
`–format=verbose’
В дополнение к имени каждого файла, отображайте тип файла, биты режима файла, количество жестких ссылок, имя владельца, имя группы, размер и временную метку (*см. Форматирование временных меток файлов::), как правило, время изменения. Для информации, которую невозможно определить, отображайте вопросительные знаки.
Обычно размер выводится в виде подсчета байт без знаков препинания, но это можно переопределить (*см. Размер блока::). Например, `-h' выводит сокращенный, удобочитаемый подсчет, а `--block-size="'1"' выводит подсчет байтов с разделителем тысяч текущей локали.
Для каждого перечисленного каталога предшествуйте файлам строкой `total BLOCKS', где BLOCKS - это общее дисковое пространство для всех файлов в этом каталоге. Размер блока в настоящее время по умолчанию составляет 1024 байта, но его можно переопределить (*см. Размер блока::). Вычисленные BLOCKS считают каждую жесткую ссылку отдельно; это, возможно, является недостатком.
Тип файла – это один из следующих символов:
`-‘
обычный файл
`b’
специальный файл блочного устройства
`c’
специальный файл символьного устройства
`C’
файл высокой производительности ("непрерывные данные")
`d’
каталог
`D’
дверь (Solaris 2.5 и выше)
`l’
символическая ссылка
`M’
оффлайн ("перемещенный") файл (Cray DMF)
`n’
специальный сетевой файл (HP-UX)
`p’
FIFO (именованный канал)
`P’
порт (Solaris 10 и выше)
`s’
сокет
`?’
какой-то другой тип файла
Биты режима файла аналогичны символическим спецификациям режима (*см. Символические режимы::). Однако `ls' объединяет несколько битов в третий символ каждого набора прав следующим образом:
`s’
Если бит set-user-ID или set-group-ID и соответствующий исполняемый бит установлены.
`S’
Если установлен бит set-user-ID или set-group-ID, но соответствующий исполняемый бит не установлен.
`t’
Если установлен флаг ограниченного удаления или защитный бит, и установлен другой исполняемый бит. Защищенный флаг удаления – это другое название защитного бита. *Обратите внимание на Структуру режима::.
`T’
Если установлен флаг ограниченного удаления или защитный бит, но другой исполняемый бит не установлен.
`x’
Если установлен исполняемый бит и ни один из вышеуказанных не применим.
`-‘
В противном случае.
После битов режима файла следует один символ, указывающий, применим ли альтернативный метод доступа, такой как список контроля доступа, к файлу. Когда символ, следующий за битами режима файла, является пробелом, альтернативный метод доступа отсутствует. Когда это печатаемый символ, тогда такой метод существует.
GNU `ls' использует символ `.' для обозначения файла с контекстом безопасности SELinux, но без другого альтернативного метода доступа.
Файл с любой другой комбинацией альтернативных методов доступа помечен символом `+'.
Первый столбец – это режим файла, следующий столбец – это количество ссылок, которые имеет файл, третий и четвертый – имя владельца и группа, к которой принадлежит файл. Следующий столбец указывает количество байтов файла (некоторые реализации ls имеют параметр -h, чтобы увидеть эту информацию в более удобной форме). Последние два столбца указывают временную метку и имя файла. Вам следует прочитать страницу man для получения дополнительной информации.
Вот краткая шпаргалка, пытающаяся обобщить информацию.
Ответ или решение
Команда ls -al
используется в системах Unix и Linux для вывода списка файлов и каталогов с подробной информацией о каждом из них. Рассмотрим, что означают все поля в выводе этой команды на примере строки:
-rwxrw-r-- 10 root root 2048 Jan 13 07:11 afile.exe
Поля вывода:
-
Права доступа (file permissions):
-rwxrw-r--
- Первый символ указывает на тип файла:
-
означает обычный файл,d
— каталог,l
— символическая ссылка и др. - Далее следует три группы символов, каждая из которых состоит из трех символов (r, w, x):
- Первый набор (права для владельца):
rwx
— владелец имеет право на чтение (r), запись (w) и выполнение (x) файла. - Второй набор (права для группы):
rw-
— группа имеет право на чтение и запись, но не на выполнение. - Третий набор (права для остальных):
r--
— остальные пользователи имеют право только на чтение.
- Первый набор (права для владельца):
- Первый символ указывает на тип файла:
-
Количество жестких ссылок (number of hard links):
10
- Указывает количество жестких ссылок на данный файл. Этот счетчик включает сам файл и относится к inode (индивидуальный идентификатор файла в файловой системе).
-
Имя владельца (owner name):
root
- Имя пользователя (владельца файла).
-
Имя группы (owner group):
root
- Имя группы, к которой принадлежит файл. Это может быть группа, к которой принадлежит владелец, или любая другая группа.
-
Размер файла в байтах (file size in bytes):
2048
- Размер файла в байтах. Этот размер обычно показывает, сколько места файл занимает на диске.
-
Время последней модификации (time of last modification):
Jan 13 07:11
- Дата и время последнего изменения файла. В данном случае: 13 января в 07:11.
-
Имя файла или каталога (file/directory name):
afile.exe
- Имя файла или директории, о которых идет речь.
Краткое резюме прав доступа:
- Права доступа обозначаются символами
r
,w
,x
, где:r
— разрешение на чтение,w
— разрешение на запись,x
— разрешение на выполнение.
- Если у пользователя нет данного права, ставится символ
-
.
Вывод команды ls -al
может варьироваться в зависимости от версии ls
, опций командной строки и операционной системы. Важно подробно ознакомиться с документацией (man ls
), чтобы понять все детали и нюансы.
Если файл имеет особые права доступа, например, через ACL (списки контроля доступа), может отображаться символ +
после прав доступа. Символ .
указывает на файл с контекстом безопасности SELinux.
Следует помнить, что в Unix-подобных файловых системах нет информации о времени создания файла (ctime), лишь о времени последнего изменения (mtime) и последнего доступа (atime).