Как читать ls -l
-rwxr-xr-x. 1 root root 4096 Oct 18 12:00 script.sh
│└┬┘└┬┘└┬┘│ │ │ │ │ └────┬────┘ └───┬───┘
│ │ │ │ │ │ │ │ │ │ └ имя (и -> цель для символических ссылок)
│ │ │ │ │ │ │ │ │ └ время изменения (год показан, если старше 6 месяцев)
│ │ │ │ │ │ │ │ └ размер в байтах (или major, minor для устройств)
│ │ │ │ │ │ │ └ группа
│ │ │ │ │ │ └ владелец
│ │ │ │ │ └ число жёстких ссылок
│ │ │ │ └ . = контекст SELinux, + = ACL, @ = расширенные атрибуты (macOS)
│ │ │ └ остальные: r-x
│ │ └ группа: r-x
│ └ владелец: rwx
└ тип: - файл, d каталог, l символическая ссылка, c символьное устройство, b блочное устройство, p канал, s сокет Что обычно сбивает с толку
- Число ссылок: сколько записей каталогов указывают на inode. Для каталога это 2 плюс число подкаталогов, потому что
..каждого подкаталога тоже считается. У файла с числом 3 есть ещё две жёсткие ссылки где-то в системе. - Размер каталога: размер его списка записей (4096 на ext4), а не суммарный размер содержимого. Для этого используйте
du -sh. - s, S, t, T в строке прав — это биты setuid, setgid и sticky; строчная буква означает, что лежащий под ней бит выполнения тоже установлен, заглавная — что нет (обычно ошибка).
- Права символических ссылок всегда
lrwxrwxrwxи игнорируются; важны права цели. - Время: ls показывает mtime (изменение содержимого).
statтакже показывает atime (последнее чтение, часто отключено черезnoatime), ctime (изменение inode: chmod, chown, rename) и время создания на файловых системах, которые его хранят.
stat
stat file выводит всё, что хранит inode: режим в восьмеричной и символьной форме, uid/gid с именами, номер inode, устройство, число блоков (в единицах по 512 байт, поэтому разрежённый файл показывает меньше блоков, чем требовал бы его размер) и четыре метки времени. stat -c '%a %U %G %n' * выводит только то, что вы запросили; stat -f описывает файловую систему.
Вопросы
Что означает точка в конце прав доступа?
На файле установлен контекст безопасности SELinux (встречается на Fedora, RHEL, CentOS). ls -Z показывает его. Знак + вместо точки означает, что есть список контроля доступа (ACL); getfacl показывает его.
Почему у каталога число ссылок 2?
Его собственная запись в родительском каталоге плюс его запись «.». Каждый подкаталог добавляет ещё одну через свой «..». Так что у каталога с числом ссылок 7 пять подкаталогов.
В чём разница между mtime и ctime?
mtime меняется при изменении содержимого; ctime — при изменении inode (содержимое, права, владелец, число ссылок). ctime нельзя задать через touch, что делает его полезным для форензики.
Как увидеть скрытые файлы и размеры в удобных единицах?
ls -lah: -a показывает dotfiles, -h выводит размеры как K, M, G. Добавьте -t для сортировки по времени и -r для обратного порядка.