2.3 Урок 2
Сертифікат: |
Linux Essentials |
---|---|
Версія: |
1.6 |
Розділ: |
2 Знайдіть свій шлях у системі Linux |
Тема: |
2.3 Використання каталогів і переліку файлів |
Урок: |
2 з 2 |
Вступ
Операційна система Unix була спочатку розроблена для мейнфреймів у середині 1960-х років. Ці комп’ютери були спільними для багатьох користувачів, які отримували доступ до ресурсів системи через термінали. Ці фундаментальні ідеї збереглися в системах Linux сьогодні. Ми все ще говоримо про використання “терміналів” для введення команд в оболонці, і кожна система Linux організована таким чином, що є можливість створити багато користувачів в одній системі.
Домашні каталоги
Це приклад звичайної файлової системи в Linux:
$ tree -L 1 / / ├── bin ├── boot ├── cdrom ├── dev ├── etc ├── home ├── lib ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── srv ├── sys ├── tmp ├── usr └── var
Більшість із цих каталогів незмінні в усіх системах Linux. Від серверів до суперкомп’ютерів та крихітних вбудованих систем, досвідчений користувач Linux може бути впевнений, що зможе знайти команду ls
всередині /bin
, може змінити конфігурацію системи, змінивши файли в /etc
, і прочитати системні журнали у /var
. Стандартне розташування цих файлів і каталогів визначається стандартом ієрархії файлової системи (FHS, Filesystem Hierarchy Standard), який буде розглянуто в наступному уроці. Ви дізнаєтесь більше про вміст цих каталогів, продовжуючи вивчати Linux, але на даний момент знайте, що:
-
зміни, які ви внесете до кореневої файлової системи, вплинуть на всіх користувачів, і
-
для зміни файлів у кореневій файловій системі потрібно мати дозволи адміністратора.
Це означає, що звичайним користувачам буде заборонено змінювати ці файли, а також може бути заборонено навіть читати ці файли. Ми розглянемо тему дозволів у наступному розділі.
Тепер ми зосередимося на каталозі /home
, який на даний момент має бути трохи знайомим:
$ tree -L 1 /home /home ├── user ├── michael └── lara
В нашому прикладі система має трьох звичайних користувачів, і кожен із наших користувачів має власне виділене місце, де вони можуть створювати та змінювати файли та каталоги, не зачіпаючи свого сусіда. Наприклад, на попередньому уроці ми працювали з такою файловою структурою:
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt
Насправді справжня файлова система може виглядати так:
$ tree /home /home ├── user │ └── Documents │ ├── Mission-Statement │ └── Reports │ └── report2018.txt ├── michael │ ├── Documents │ │ └── presentation-for-clients.odp │ └── Music
…і можна це продовжити для папки lara
.
У Linux каталог /home
схожий на багатоквартирний будинок. Багато користувачів можуть мати тут свій простір, розділений на окремі квартири. Відповідальність за комунальні послуги та технічне обслуговування самої будівлі лежить на коменданті root-користувачі.
Особливий відносний шлях до домашнього каталогу
Коли ви починаєте новий термінальний сеанс у Linux, ви бачите командний рядок, подібний до цього:
user@hostname ~ $
Тильда (~
) тут представляє наш домашній каталог. Якщо ви запустите команду ls
, то ви побачите знайомий вам результат:
$ cd ~ $ ls Documents
Порівняйте це зі схемою файлової системи вище, щоб перевірити своє розуміння.
Тепер проаналізуємо, що ми знаємо про Linux: він схожий на багатоквартирний будинок, у якому багато користувачів проживають у /home
. Отже, помешкання користувача user
буде відрізнятися від помешкання користувача michael
. Щоб продемонструвати це, ми будемо використовувати команду su
для переключення користувача.
user@hostname ~ $ pwd /home/user user@hostname ~ $ su - michael Password: michael@hostname ~ $ pwd /home/michael
Значення ~
змінюється залежно від того, хто є користувачем. Для michael
абсолютним шляхом ~
є /home/michael
. Для lara
абсолютним шляхом ~
є /home/lara
тощо.
Відносні шляхи до файлів у домашніх каталогах
Використання ~
в командах є дуже зручним, за умови, що ви не змінюєте користувача. Ми розглянемо наступний приклад для користувача user
, який розпочав новий сеанс:
$ ls Documents $ cd Documents $ ls Mission-Statement Reports $ cd Reports $ ls report2018.txt $ cd ~ $ ls Documents
Зауважте, що користувачі завжди починають новий сеанс у своєму домашньому каталозі. У цьому прикладі user
перейшов у свій підкаталог Documents/Reports
, і за допомогою команди cd ~
він повернувся туди, звідки він почав. Ви можете виконати ту ж дію, використовуючи команду cd
без аргументів:
$ cd Documents/Reports $ pwd /home/user/Documents/Reports $ cd $ pwd /home/user
Останнє, на що варто звернути увагу: ми можемо точно визначити домашні каталоги інших користувачів, вказавши ім’я користувача після тильди. Наприклад:
$ ls ~michael Documents Music
Зауважте, що це працюватиме лише в тому випадку, якщо michael
дав нам дозвіл на перегляд вмісту його домашнього каталогу.
Давайте розглянемо ситуацію, коли michael
хотів би переглянути файл report2018.txt
у домашньому каталозі user
. Припускаючи, що michael
має на це дозвіл, він може використовувати команду less
.
$ less ~user/Documents/Reports/report2018.txt
Будь-який шлях до файлу, який містить символ ~
, називається шляхом відносно домашнього каталогу.
Приховані файли та каталоги
У попередньому уроці ми представили параметр -a
для команди ls
. Ми використовували ls -a
під час знайомства з двома спеціальними відносними шляхами: .
та ..
. Параметр -a
покаже список всіх файлів та каталогів, включно з прихованими файлами та каталогами.
$ ls -a ~ . .. .bash_history .bash_logout .bash-profile .bashrc Documents
Приховані файли та каталоги завжди будуть починатися з крапки (.
). За замовчуванням домашній каталог користувача містить багато прихованих файлів. Вони часто використовуються для встановлення специфічних для користувача параметрів конфігурації, і їх повинен змінювати лише досвідчений користувач.
Опція для деталізованого списку
Команда ls
має багато опцій для зміни її поведінки. Давайте розглянемо один з найпоширеніших варіантів:
$ ls -l -rw-r--r-- 1 user staff 3606 Jan 13 2017 report2018.txt
-l
створює деталізований список. Інформація про кожен файл і каталог буде займати один рядок, в якому буде відображатись наступна додаткова інформація про кожен файл і каталог.
-rw-r—r--
-
Тип файлу та права доступу до нього. Зауважте, якщо звичайний файл починатиметься з тире, а якщо каталог, то починатиметься з
d
. 1
-
Кількість посилань на файл.
user staff
-
Вказує право власності на файл.
user
є власником файлу, і файл також пов’язаний з групоюstaff
. 3606
-
Розмір файлу в байтах.
Jan 13 2017
-
Мітка часу останньої зміни файлу.
report2018.txt
-
Ім’я файлу.
Такі теми, як право власності, дозволи та посилання, будуть розглянуті в наступних розділах. Як бачите, версія ls
з параметром деталізованого списку часто є кращою, ніж варіант за замовчуванням.
Додаткові параметри команди ls
Нижче наведено кілька поширених способів, використання команди ls
. Як бачите, користувач може комбінувати кілька опцій разом, щоб отримати бажаний результат.
ls -lh
-
Поєднання деталізованого списку з розмірами файлів у читабельному вигляді, дасть нам корисні суфікси, такі як
M
для мегабайтів абоK
для кілобайтів. ls -d */
-
Параметр
-d
покаже каталоги, але не їх вміст. Якщо поєднати це з*/
, відображатимуться лише підкаталоги без файлів. ls -lt
-
Поєднує деталізований список з можливістю сортування за часом модифікації. Файли з останніми змінами будуть угорі, а файли з найдавнішими змінами – внизу. Але цей порядок можна змінити за допомогою:
ls -lrt
-
Поєднує деталізований список із сортуванням за часом (модифікацією), у поєднанні з
-r
, забезпечує сортування у зворотному порядку. Тепер файли з останніми змінами знаходяться в нижній частині списку. На додаток до сортування за часом модифікації, файли також можна сортувати за часом доступу або за часом статусу. ls -lX
-
Поєднує деталізований список з можливістю сортування за розширенням файлу. Це, наприклад, згрупує всі файли, що закінчуються на
.txt
, разом, усі файли, що закінчуються на.jpg
тощо. ls -S
-
-S
сортує за розміром файлу, приблизно так само, як-t
та-X
сортують за часом та розширенням відповідно. Найбільші файли будуть першими, а найменші – останніми. Зауважте, що вміст підкаталогів не включено до сортування. ls -R
-
Параметр
-R
змінить командуls
для відображення рекурсивного списку. Що це означає?
Рекурсія в Bash
Рекурсія відноситься до ситуації, коли “щось визначається в термінах самого себе”. Рекурсія є дуже важливим поняттям в інформатиці, але тут її значення набагато простіше. Давайте розглянемо наш попередній приклад:
$ ls ~ Documents
Раніше ми дізналися, що user
має домашній каталог, і в цьому каталозі є один підкаталог. ls
до цього часу показував нам лише файли та підкаталоги розташування, але не міг повідомити нам вміст цих підкаталогів. У цих уроках ми використовували команду tree
, коли хотіли відобразити вміст багатьох каталогів. На жаль, tree
не є однією з основних утиліт Linux і тому не завжди доступна. Порівняйте вихід tree
з результатом ls -R
у наступних прикладах: :
$ tree /home/user user └── Documents ├── Mission-Statement └── Reports └── report2018.txt $ ls -R ~ /home/user/: Documents /home/user/Documents: Mission-Statement Reports /home/user/Documents/Reports: report2018.txt
Як бачите, за допомогою рекурсивної опції ми отримуємо набагато довший список файлів. Насправді ми наче запустили команду ls
у домашньому каталозі user
і натрапили на один підкаталог. Потім ми увійшли в цей підкаталог і знову запустили команду ls
. Ми зіткнулися з файлом Mission-Statement
та іншим підкаталогом під назвою Reports
. І знову ми увійшли в підкаталог і знову запустили команду ls
. По суті, запуск ls -R
схожий на те, щоб сказати Bash: “Запустіть ls
тут і повторіть команду в кожному підкаталозі, який ви знайдете”.
Рекурсія особливо важлива в командах модифікації файлів, таких як копіювання або видалення каталогів. Наприклад, якщо ви хочете скопіювати підкаталог Documents
, вам потрібно буде задати рекурсивне копіювання, щоб розширити цю команду на всі підкаталоги.
Вправи до посібника
-
Використовуйте таку файлову структуру, щоб відповісти на наступні три запитання:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Яка команда дозволить перейти до каталогу
network
незалежно від вашого поточного місцезнаходження? -
Яку команду може ввести
user
може ввести, щоб перейти до свого каталогу "Documents" з/etc/udev
? Використайте найкоротший шлях. -
Яку команду може ввести
user
, щоб перейти до каталогуMusic
користувачаmichael
? Використайте найкоротший шлях.
-
-
Щоб відповісти на наступні два запитання, розглянемо результат команди
ls -lh
, показаний нижче. Зверніть увагу, що каталоги позначаються символомd
на початку рядка.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Коли ви запускаєте команду
ls -lrS
, який файл буде на початку? -
Будь ласка, опишіть, що ви очікуєте побачити як результат команди
ls -ad */
.
-
Дослідницькі вправи
-
Виконайте команду
ls -lh
у каталозі, який містить підкаталоги. Зверніть увагу на вказаний розмір цих каталогів. Ці розміри файлів здаються вам правильними? Чи вони точно представляють вміст усіх файлів у цьому каталозі? -
Ось нова команда, яку можна спробувати:
du -h
. Виконайте цю команду та опишіть результат, який вона вам дає. -
У багатьох системах Linux ви можете ввести
ll
і отримати такий самий результат, як для командиls -l
. Проте зверніть увагу, щоll
це не команда. Наприклад,man ll
дасть вам повідомлення, що для нього не існує посібника. Це приклад псевдоніма. Чому псевдоніми можуть бути корисними для користувача?
Підсумки
У цій лабораторній роботі ви дізналися:
-
що кожен користувач Linux має домашній каталог;
-
домашній каталог поточного користувача можна отримати за допомогою
~
; -
будь-який шлях до файлу, який використовує
~
, називається відносним шляхом до домашнього каталогу.
Ви також дізналися про деякі з найпоширеніших способів модифікації команди `ls.
-a
(all)-
виводить всі файли/каталоги, включно з прихованими
-d
(directories)-
надає список каталогів, а не їх вміст
-h
(human readable)-
виводить розміри файлів у форматі, зручному для людини
-l
(long list)-
надає додаткові відомості, один файл/каталог на рядок
-r
(reverse)-
змінює порядок сортування
-R
(recursive)-
надає у списку кожен файл, включаючи файли в кожному підкаталозі
-S
(size)-
сортує за розміром файлів
-t
(time)-
сортує за часом модифікації
-X
(eXtension)-
сортує за розширенням файлу
Відповіді до вправ посібника
-
Використовуйте таку файлову структуру, щоб відповісти на наступні три запитання:
/ ├── etc/ │ ├── network/ │ │ └── interfaces/ │ ├── systemd/ │ │ ├── resolved.conf │ │ ├── system/ │ │ ├── system.conf │ │ ├── user/ │ │ └── user.conf │ └── udev/ │ ├── rules.d │ └── udev.conf └── home/ ├── lost+found/ ├── user/ │ └── Documents/ └── michael/ └── Music/
-
Яка команда дозволить перейти до каталогу
network
незалежно від вашого поточного місцезнаходження?cd /etc/network
-
Яку команду може ввести
user
може ввести, щоб перейти до свого каталогу "Documents" з/etc/udev
? Використайте найкоротший шлях.cd ~/Documents
-
Яку команду може ввести
user
, щоб перейти до каталогуMusic
користувачаmichael
? Використайте найкоротший шлях.cd ~michael/Music
-
-
Щоб відповісти на наступні два запитання, розглянемо результат команди
ls -lh
, показаний нижче. Зверніть увагу, що каталоги позначаються символомd
на початку рядка.drwxrwxrwx 5 eric eric 4.0K Apr 26 2011 China/ -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0066.jpg -rwxrwxrwx 1 eric eric 1.5M Jul 18 2011 img_0067.jpg -rwxrwxrwx 1 eric eric 1.6M Jul 18 2011 img_0074.jpg -rwxrwxrwx 1 eric eric 1.8M Jul 18 2011 img_0075.jpg -rwxrwxrwx 1 eric eric 46K Jul 18 2011 scary.jpg -rwxrwxrwx 1 eric eric 469K Jan 29 2018 Screenshot from 2017-08-13 21-22-24.png -rwxrwxrwx 1 eric eric 498K Jan 29 2018 Screenshot from 2017-08-14 21-18-07.png -rwxrwxrwx 1 eric eric 211K Jan 29 2018 Screenshot from 2018-01-06 23-29-30.png -rwxrwxrwx 1 eric eric 150K Jul 18 2011 tobermory.jpg drwxrwxrwx 6 eric eric 4.0K Apr 26 2011 Tokyo/ -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 081.jpg -rwxrwxrwx 1 eric eric 1.4M Jul 18 2011 Toronto 085.jpg -rwxrwxrwx 1 eric eric 944K Jul 18 2011 Toronto 152.jpg -rwxrwxrwx 1 eric eric 728K Jul 18 2011 Toronto 173.jpg drwxrwxrwx 2 eric eric 4.0K Jun 5 2016 Wallpapers/
-
Коли ви запускаєте команду
ls -lrS
, який файл буде на початку?Усі три папки мають розмір 4,0 КБ, що є найменшим розміром файлу.
ls
потім сортує каталоги в алфавітному порядку за замовчуванням. Правильною відповіддю є файлscary.jpg
. -
Будь ласка, опишіть, що ви очікуєте побачити як результат команди
ls -ad */
.Ця команда покаже всі підкаталоги, включно з прихованими підкаталогами.
-
Відповіді до дослідницьких вправ
-
Виконайте команду
ls -lh
у каталозі, який містить підкаталоги. Зверніть увагу на вказаний розмір цих каталогів. Ці розміри файлів здаються вам правильними? Чи вони точно представляють вміст усіх файлів у цьому каталозі?Ні. Кожен каталог має зазначений розмір файлу 4096 байт. Це тому, що каталоги тут є абстракцією: вони не існують як деревовидна структура на диску. Коли ви бачите каталог у списку, ви бачите посилання на список файлів. Розмір цих посилань становить 4096 байт.
-
Ось нова команда, яку можна спробувати:
du -h
. Виконайте цю команду та опишіть результат, який вона вам дає.Команда
du
створить список усіх файлів і каталогів і зазначить розмір кожного. Наприклад,du -s
відображатиме розмір усіх файлів, каталогів і підкаталогів для певного розташування. -
У багатьох системах Linux ви можете ввести
ll
і отримати такий самий результат, як якщо б ви ввелиls -l
. Проте зверніть увагу, щоll
це не команда. Наприклад,man ll
дасть вам повідомлення, що для нього не існує посібника. Це приклад псевдоніма. Чому псевдоніми можуть бути корисними для користувача?ll
є псевдонімомls -l
. У Bash ми можемо використовувати псевдоніми для спрощення команд, які часто вже використовуються.ll
часто визначено для вас у Linux, але ви також можете створити свій власний псевдонім.