Команда Linux `ls` – це інструмент, який ми використовуємо майже щодня, часто не замислюючись про її можливості. Варто звернути увагу на цю команду, адже вона має великий набір опцій, деякі з яких можуть стати у нагоді в роботі з командним рядком.
`ls`: перегляд файлів та каталогів
Команда `ls` є однією з перших, з якими знайомиться більшість користувачів Linux. Ті, хто працює з командним рядком, застосовують її постійно, іноді навіть не усвідомлюючи її глибини. Саме тому ця команда має більше можливостей, ніж думає більшість. Зазвичай ми використовуємо її для переліку файлів у каталозі або для перегляду дозволів на файли у довгому форматі. Однак, часто не заглиблюємося в її повний потенціал.
Команда `ls` є однією з тих команд, які мають велику кількість параметрів. Можливо, саме це є проблемою. Як розібратися у всіх цих опціях та знайти корисні, а потім їх запам’ятати?
Корисні поєднання команди `ls` з її параметрами можуть бути чудовими кандидатами для створення псевдонімів. Фактично, у багатьох дистрибутивах, команда `ls`, яку ви використовуєте, вже є псевдонімом. Щоб перевірити визначення псевдоніма, можна скористатися командою `type`. Подивимося на визначення `ls`:
type ls
Параметр `–color=auto` автоматично застосовується при кожному використанні `ls`. Саме він відповідає за кольорове відображення різних типів файлів у списку.
Основні списки `ls`
Кожен, хто користувався терміналом Linux певний час, знає, що за замовчуванням `ls` виводить список файлів і каталогів у поточному каталозі.
ls
Якщо ви хочете, щоб список був виведений в один стовпець, використовуйте параметр `-1` (один файл на рядок):
ls -1
Ми обговоримо дивну назву файлу у верхній частині списку трохи пізніше.
Використання `ls` у різних каталогах
Щоб `ls` вивела файли з каталогу, відмінного від поточного, потрібно вказати шлях до цього каталогу в командному рядку. Можна також вказати декілька каталогів послідовно. Наприклад, щоб `ls` перелічила файли у каталогах “Довідка” та “gc_help”, використовуємо таку команду:
ls Help gc_help
`ls` перелічує вміст першого каталогу, а потім другого. При обробці кожного з них виводиться його назва:
Використання шаблонів файлів
Для вибіркового переліку файлів можна використовувати шаблони. Знак питання `?` означає один довільний символ, а зірочка `*` – будь-який набір символів. Наприклад, щоб перелічити файли або каталоги, що починаються з “ip_”, використайте:
ls ip_*
Для переліку файлів з розширенням “.c” використайте:
ls *.c
Можна також використовувати `ls` у поєднанні з `grep` для складнішого пошуку. Давайте знайдемо файли, в назві яких є рядок “_pin_”:
ls | grep _pin_
Це майже те ж саме, що і використання `ls` з двома символами підстановки:
ls | grep _pin_
ls *_pin_*
Чому майже? Зверніть увагу на різне форматування. `grep` виводить дані у форматі один файл на рядок.
Недруковані символи
Іноді можна зіткнутися з файлом, назва якого містить недруковані або керуючі символи. Зазвичай це відбувається при розпакуванні архіву, завантаженого з інтернету, або при отриманні git-репозиторію, де автор помилково створив такий файл.
Наш “дивний” файл є саме таким:
Якщо подивитися на нього у файловому менеджері та натиснути F2 для перейменування, недруковані символи будуть показані у вигляді дивних знаків.
Щоб побачити реальну назву файлу, можна використовувати параметр `-b` (escape). Він змушує `ls` використовувати escape-послідовності C для представлення керуючих символів.
ls -b a*
Виявляється, загадковий символ є символом нового рядка, який у C позначається як “n”.
Ігнорування файлів
Щоб виключити певні файли зі списку, використовуйте параметр `–hide`. Наприклад, щоб не відображати резервні файли “.bak”, можна скористатися такою командою:
ls
ls --hide=*.bak
Файли “.bak” не з’являються у другому списку.
Довгий формат списку
Параметр `-l` (довгий список) змушує `ls` надавати детальну інформацію про кожен файл.
ls -l
Інформації багато, тож давайте її розглянемо.
Першим виводиться загальний розмір всіх файлів у списку. Далі кожен файл або каталог відображається на окремому рядку.
Перша частина з десяти символів (літер та тире) показує тип файлу та права доступу для власника, групи та інших.
Найперший символ позначає тип файлу:
–: Звичайний файл.
b: Спеціальний блоковий файл.
c: Спеціальний символьний файл.
d: Каталог.
l: Символічне посилання.
n: Мережевий файл.
p: Іменований канал.
s: Сокет.
Наступні дев’ять символів поділені на три групи по три символи, що відображають права на читання, запис та виконання. Якщо відповідний дозвіл надано, то буде `r`, `w` або `x`, а якщо ні – то `-`.
Перша група з трьох символів показує дозволи для власника файлу, друга – для членів групи, а остання – для інших.
Інколи дозвіл на виконання для власника може бути представлений символом `s`. Це setuid біт. Його присутність означає, що файл буде виконуватися з правами власника файлу, а не користувача, що його запустив.
Дозвіл на виконання для групи також може бути `s`. Це setgid біт. Для файлу це означає, що він буде виконуватися з правами групи власника. Якщо це застосовано до каталогу, то усі файли, створені в ньому, будуть отримувати права групи з каталогу, а не від користувача, який створює файл.
Дозвіл на виконання для інших інколи може бути `t`. Це sticky bit. Зазвичай він застосовується до каталогів. Якщо його встановлено, то незалежно від прав на запис та виконання, тільки власник файлу, власник каталогу або користувач root можуть перейменовувати або видаляти файли в цьому каталозі.
Sticky bit часто використовується в таких каталогах як `/tmp`. Він доступний для запису всім користувачам комп’ютера, але sticky bit гарантує, що користувачі (і процеси, запущені користувачами) можуть перейменовувати або видаляти лише свої власні тимчасові файли.
Ми можемо побачити sticky bit в каталозі `/tmp`. Зверніть увагу на використання параметра `-d` (каталог). Він змушує `ls` показувати деталі про сам каталог. Без цієї опції, `ls` показувала б файли всередині каталогу.
ls -l -d /tmp
Число після дозволів – це кількість жорстких посилань на файл або каталог. Для файлу це зазвичай одиниця, але якщо створити інші жорсткі посилання, число збільшиться. Каталог зазвичай має як мінімум два жорсткі посилання: одне на себе, інше – на запис про нього у батьківському каталозі.
Далі відображаються ім’я власника та група. Після цього йдуть розмір файлу та дата останньої зміни. Наприкінці виводиться ім’я файлу.
Зручні для читання розміри файлів
Розмір файлу в байтах не завжди є зручним. Щоб розміри файлів відображалися у відповідних одиницях (кілобайтах, мегабайтах і т.д.), використовуйте параметр `-h` (human-readable):
ls -l -h
Показ прихованих файлів
Щоб переглянути приховані файли, використайте параметр `-a` (all):
ls -l -a
Записи “.” та “..” представляють поточний і батьківський каталоги відповідно. Файл “.base_settings” тепер видимий вперше.
Виключення “.” та “..” зі списків
Якщо ви не хочете бачити “.” і “..” у списку, але приховані файли показувати потрібно, використовуйте параметр `-A` (almost all):
ls -l -A
Приховані файли відображаються, а записи “.” та “..” приховано.
Рекурсивний перегляд каталогів
Щоб `ls` відображала файли у всіх підкаталогах, використайте параметр `-R` (recursive):
ls -l -R
`ls` пройде по всьому дереву каталогів, починаючи з початкового каталогу, та перерахує файли у кожному з підкаталогів.
Відображення UID та GID
Щоб відображалися ідентифікатори користувача та групи замість імен, використайте параметр `-n` (numeric uid and gid):
ls -n
Сортування списків
Список можна сортувати за розширенням, розміром файлу або часом зміни. Ці параметри зазвичай мають сенс у поєднанні з довгим форматом списку. Якщо ви сортуєте за розміром файлу, то корисно бачити і їх розміри. Коли ви сортуєте за типом розширення, формат довгого списку не є таким важливим.
Щоб сортувати за розширенням, використовуйте параметр `-X` (sort by extension):
ls -X -1
Каталоги відображаються першими (вони не мають розширень), а потім файли в алфавітному порядку за розширеннями.
Щоб сортувати за розміром файлу, використовуйте параметр `-S` (sort by size):
ls -l -h -S
Сортування відбувається від найбільшого до найменшого.
Щоб сортувати за часом модифікації, використовуйте параметр `-t` (sort by time):
ls -l -t
Список відсортовано за часом зміни.
Якщо час зміни файлу знаходиться в межах поточного року, то відображається інформація про місяць, день і час. Якщо дата зміни була не в поточному році, то відображається інформація про місяць, день та рік.
Швидкий спосіб отримати найновіші та найстаріші файли в каталозі – це використовувати `ls` з командами `head` та `tail`.
Щоб отримати найновіший файл або каталог, використайте команду:
ls -t | head -1
Щоб отримати найстаріший файл або каталог, використайте команду:
ls -t | tail -1
Зміна порядку сортування
Для зміни будь-якого порядку сортування, використайте параметр `-r` (reverse):
ls -l -h -S -r
Список тепер впорядкований від найменшого файлу до найбільшого.
І це ще не все
Перегляньте man сторінку `ls`, там є багато інших варіантів. Деякі з них використовуються у досить специфічних випадках, але іноді ви будете раді, що про них знаєте.
Чи потрібно бачити позначки часу файлу з максимальною точністю, яку може забезпечити Linux? Використайте опцію `–full-time`:
ls --full-time
Можливо, ви хочете побачити номер inode файлів? Використайте параметр `-i`:
ls -i
Ви працюєте з монохромним дисплеєм і хочете усунути ризик сплутати файли з каталогами та посиланнями? Використайте параметр класифікації, і `ls` додасть один з цих символів до кожного запису в списку:
/: Каталог.
@: Символічне посилання.
|: Іменований канал.
=: Сокет.
*: Виконуваний файл.
ls -F
Досліджуйте. Ви побачите, що `ls` є багатим інструментом і ви будете постійно знаходити щось нове для себе.