4.3 Урок 1
Сертифікат: |
Linux Essentials |
---|---|
Версія: |
1.6 |
Розділ: |
4 Операційна система Linux |
Тема: |
4.3 Місце збереження даних |
Урок: |
1 з 2 |
Вступ
Для операційної системи все вважається даними. Для Linux все вважається файлом: програми, звичайні файли, каталоги, блокові пристрої (жорсткі диски тощо), символьні пристрої (консолі тощо), процеси ядра, сокети, розділи, посилання тощо. Структура каталогів Linux , починаючи з кореня /
, є набором файлів, що містять дані. Той факт, що все є файлом, є потужною функцією Linux, оскільки вона дозволяє налаштувати практично кожен аспект системи.
У цьому уроці ми обговоримо різні місця, в яких зберігаються важливі дані, як встановлено http://refspecs.linuxfoundation.org/fhs.shtml [Стандартом ієрархії файлової системи Linux (FHS, Linux Filesystem Hierarchy Standard)]. Деякі з цих місць є реальними каталогами, які постійно зберігають дані на дисках, тоді як інші є псевдофайловими системами, завантаженими в пам’ять, які дають нам доступ до даних підсистеми ядра, таких як запущені процеси, використання пам’яті, конфігурація обладнання тощо. Дані, що зберігаються в цих віртуальних каталогах, використовуються рядом команд, які дозволяють нам контролювати та обробляти їх.
Програми та їх конфігурація
Важливими даними в системі Linux, без сумніву, є її програми та їх конфігураційні файли. Перші - це виконувані файли, що містять набори інструкцій, які повинні виконуватися процесором комп’ютера, другі зазвичай - це текстові документи, які керують роботою програми. Виконувані файли можуть бути як двійковими, так і текстовими файлами. Виконувані текстові файли називаються скриптами. Дані конфігурації в Linux також традиційно зберігаються в текстових файлах, хоча існують різні стилі представлення даних конфігурації.
Де зберігаються двійкові файли
Як і будь-який інший файл, виконувані файли розташовані у каталогах, які в кінцевому підсумку підпорядковані кореневому /
. Точніше, програми розподіляються за трирівневою структурою: перший рівень (/
) містить програми, які можуть знадобитися в однокористувацькому режимі, другий рівень (/usr
) містить більшість багатокористувацьких програм і третій рівень (/usr/local
) використовується для зберігання програмного забезпечення, яке не надається дистрибутивом і було скомпільовано локально.
Типові місця розташування програм включають:
/sbin
-
Містить необхідні двійкові файли для системного адміністрування, такі як
parted
абоip
. /bin
-
Містить необхідні двійкові файли для всіх користувачів, такі як
ls
,mv
абоmkdir
. /usr/sbin
-
Зберігає двійкові файли для системного адміністрування, такі як
deluser
абоgroupadd
. /usr/bin
-
Містить більшість виконуваних файлів, таких як
free
,pstree
,sudo
абоman
, які можуть використовуватися всіма користувачами. /usr/local/sbin
-
Використовується для зберігання локально встановлених програм для системного адміністрування, які не керуються системним менеджером пакунків.
/usr/local/bin
-
Слугує тій же меті, що й
/usr/local/sbin
, але для звичайних програм користувача.
Нещодавно деякі дистрибутиви почали замінювати /bin
і /sbin
символічними посиланнями на /usr/bin
і /usr/sbin
.
Note
|
Каталог |
Крім цих каталогів, звичайні користувачі можуть мати власні програми в будь-якому з них:
-
/home/$USER/bin
-
/home/$USER/.local/bin
Tip
|
Ви можете дізнатися, з яких каталогів можна запускати двійкові файли, використовуючи змінну |
Ми можемо знайти розташування програм за допомогою команди which
:
$ which git /usr/bin/git
Де зберігаються файли конфігурації
Каталог /etc
На початку Unix існував каталог для кожного типу даних, наприклад /bin
для бінарних файлів і /boot
для ядра(ядер). Однак /etc
(що означає et cetera) був створений як універсальний каталог для зберігання будь-яких файлів, які не належать до інших категорій. Більшість із цих файлів були файлами конфігурації. З плином часу додавалося все більше і більше файлів конфігурації, тому /etc
став основним каталогом для файлів конфігурації програм. Як сказано вище, файл конфігурації зазвичай є локальним текстовим (на відміну від двійкового) файлом, який контролює роботу програми..
У /etc
ми можемо знайти різні шаблони для назв файлів конфігурації:
-
Наприклад, файли з розширенням ad hoc або взагалі без розширення
group
-
База даних системних груп.
hostname
-
Ім’я комп’ютера.
hosts
-
Перелік співставлень IP-адрес з іменами комп’ютерів.
passwd
-
База даних користувачів системи — складається з семи полів, розділених двокрапками, що надають інформацію про користувача.
profile
-
Загальносистемний файл конфігурації для Bash.
shadow
-
Зашифрований файл з паролями користувачів.
-
Файли ініціалізації, що закінчуються на
rc
:bash.bashrc
-
Загальносистемний файл .bashrc для інтерактивних оболонок bash.
nanorc
-
Зразок файлу ініціалізації для GNU nano (простий текстовий редактор, який зазвичай є у будь-якому дистрибутиві).
-
Файли, що закінчуються на
.conf
:resolv.conf
-
Конфігураційний файл для DNS-резольвера, який надає доступ до системи доменних імен Інтернету (DNS, Domain Name System).
sysctl.conf
-
Конфігураційний файл для встановлення системних змінних ядра.
-
Каталоги із суфіксом
.d
:Деякі програми з унікальним файлом конфігурації (
*.conf
або іншим) розвинулися, щоб мати спеціальний каталог*.d
, який допомагає створювати модульні, більш надійні конфігурації. Наприклад, щоб налаштувати logrotate, ви знайдетеlogrotate.conf
, а також каталогиlogrotate.d
.Цей підхід стане в нагоді в тих випадках, коли різні застосунки потребують конфігурації для однієї і тієї ж служби. Якщо, наприклад, пакунок веб-серверу містить конфігурацію logrotate, цю конфігурацію тепер можна помістити у спеціальний файл у каталозі
logrotate.d
. Цей файл може бути оновлений пакунком веб-серверу, не заважаючи конфігурації logrotate, що залишилася. Аналогічно, пакунки можуть додавати конкретні завдання, розміщуючи файли в каталозі/etc/cron.d
замість того, щоб змінювати/etc/crontab
.У Debian — та похідних Debian — такий підхід був застосований до списку надійних джерел, який зчитується інструментом керування пакунками
apt
: крім класичного/etc/apt/sources.list
, тепер ми знаходимо каталог/etc/apt/sources.list.d
:$ ls /etc/apt/sources* /etc/apt/sources.list /etc/apt/sources.list.d:
Файли конфігурації в HOME
(Dotfiles)
На рівні користувача програми зберігають свої конфігурації та налаштування в прихованих файлах у домашньому каталозі користувача (також представленому ~
). Пам’ятайте, що приховані файли починаються з крапки (.
) – звідси їх назва: dotfiles.
Деякі з цих dotfiles є сценаріями Bash, які налаштовують сеанс оболонки користувача та з’являються, як тільки користувач входить в систему:
.bash_history
-
Зберігає історію командного рядку.
.bash_logout
-
Містить команди для виконання при виході з оболонки входу.
.bashrc
-
Сценарій ініціалізації Bash для оболонок без входу.
.profile
-
Сценарій ініціалізації Bash для оболонок входу.
Note
|
Зверніться до уроку “Основи командного рядку”, щоб дізнатися більше про Bash та його файли ініціалізації. |
Конфігураційні файли інших програм, специфічних для користувача, отримуються під час запуску відповідних програм: .gitconfig
, .emacs.d
, .ssh
тощо.
Ядро Linux
Перш ніж запускати будь-який процес, ядро має бути завантажено в захищену область пам’яті. Після цього процес із PID 1
(зараз найчастіше systemd
) запускає ланцюжок процесів, тобто один процес запускає інший(і) тощо. Коли процеси активні, ядро Linux відповідає за розподіл ресурсів для них (клавіатури, миші, дисків, пам’яті, мережевих інтерфейсів тощо).
Note
|
До |
Місце збереження ядер: /boot
Ядро знаходиться в /boot
- разом з іншими файлами, пов’язаними з завантаженням. Більшість із цих файлів містять у своїх іменах компоненти номера версії ядра (версія ядра, основна версія, версія змін та номер виправлення).
Каталог /boot
містить наступні типи файлів з іменами, що відображають відповідну версію ядра:
config-4.9.0-9-amd64
-
Параметри конфігурації для ядра, такі як параметри та модулі, які були скомпільовані разом із ядром.
initrd.img-4.9.0-9-amd64
-
Початковий образ диску RAM, який допомагає в процесі запуску, завантажуючи тимчасову кореневу файлову систему в пам’ять.
System-map-4.9.0-9-amd64
-
Файл
System-map
(у деяких системах він називатиметьсяSystem.map
) містить символьну таблицю адрес функцій і процедур ядра. Кожного разу, коли ядро перебудовується, вміст файлу буде змінюватися, оскільки місця розташування в пам’яті можуть відрізнятися. Ядро використовує цей файл для пошуку адрес пам’яті для певного символьного імені ядра, або навпаки. vmlinuz-4.9.0-9-amd64
-
Ядро зберігається у стиснутому форматі для збереження простору і може саморозпаковуватися (на це вказує
z
в іменіvmlinuz
;vm
означає віртуальну пам’ять і почало використовуватися, коли ядро вперше отримало підтримку віртуальної пам’яті). grub
-
Каталог конфігурації для завантажувача
grub2
.
Tip
|
Оскільки це критична функція операційної системи, більше ніж одне ядро та пов’язані з ним файли зберігаються в |
Каталог /proc
Каталог /proc
є однією з так званих віртуальних або псевдо-файлових систем, оскільки його вміст не записується на диск, а завантажується в пам’ять. Він динамічно заповнюється щоразу, коли комп’ютер завантажується, і постійно відображає поточний стан системи. /proc
містить інформацію про:
-
Запущені процеси.
-
Конфігурацію ядра.
-
Системне обладнання.
Крім усіх даних про процеси, які ми побачимо на наступному уроці, цей каталог також зберігає файли з інформацією про апаратне забезпечення системи та налаштування конфігурації ядра. Серед цих файлів:
/proc/cpuinfo
-
Зберігає інформацію про центральний процесор системи:
$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 158 model name : Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz stepping : 10 cpu MHz : 3696.000 cache size : 12288 KB (...)
/proc/cmdline
-
Зберігає рядки, передані ядру під час завантаження:
$ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet
/proc/modules
-
Показує список модулів, завантажених до ядра:
$ cat /proc/modules nls_utf8 16384 1 - Live 0xffffffffc0644000 isofs 40960 1 - Live 0xffffffffc0635000 udf 90112 0 - Live 0xffffffffc061e000 crc_itu_t 16384 1 udf, Live 0xffffffffc04be000 fuse 98304 3 - Live 0xffffffffc0605000 vboxsf 45056 0 - Live 0xffffffffc05f9000 (O) joydev 20480 0 - Live 0xffffffffc056e000 vboxguest 327680 5 vboxsf, Live 0xffffffffc05a8000 (O) hid_generic 16384 0 - Live 0xffffffffc0569000 (...)
Каталог /proc/sys
Цей каталог містить налаштування конфігурації ядра у файлах, класифікованих за категоріями для кожного підкаталогу:
$ ls /proc/sys abi debug dev fs kernel net user vm
Більшість із цих файлів діють як перемикач і, отже, містять лише одне з двох можливих значень: 0
або 1
(“включено” або “вимкнено”). Наприклад:
/proc/sys/net/ipv4/ip_forward
-
Значення, яке визначає можливість використання нашого комп’ютера в якості маршрутизатору (вмикає або вимикає здатність пересилати пакети):
$ cat /proc/sys/net/ipv4/ip_forward 0
Однак є деякі винятки:
/proc/sys/kernel/pid_max
-
Максимально дозволене значення PID:
$ cat /proc/sys/kernel/pid_max 32768
Warning
|
Будьте особливо обережні, змінюючи налаштування ядра, оскільки неправильне значення може призвести до нестабільної роботи системи. |
Апаратні пристрої
Пам’ятайте, що в Linux “все є файлом”. Це означає, що інформація про апаратний пристрій, а також власні параметри конфігурації ядра зберігаються в спеціальних файлах, які знаходяться у віртуальних каталогах.
Каталог /dev
Каталог device /dev
містить файли пристроїв (або вузлів) для всіх підключених апаратних пристроїв. Ці файли пристроїв використовуються як інтерфейс між пристроями та процесами, які їх використовують. Кожен файл пристрою відноситься до однієї з двох категорій:
- Блочні пристрої
-
Пристрої, в яких дані зчитуються і записуються блоками, до яких можна звертатися окремо. Прикладами є жорсткі диски (та їх розділи, наприклад
/dev/sda1
), USB-флеш-накопичувачі, компакт-диски, DVD-диски тощо. - Символьні пристрої
-
Пристрої, в яких дані зчитуються та записуються послідовно по одному символу. Прикладами є клавіатури, текстова консоль (
/dev/console
), послідовні порти (наприклад,/dev/ttyS0
та ін.) тощо.
При виведенні інформації про файли пристроїв, переконайтеся, що ви використовуєте ls
з перемикачем -l
, щоб розрізняти ці дві категорії. Ми можемо, наприклад, перевірити наявність жорстких дисків і розділів:
# ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 may 25 17:02 /dev/sda brw-rw---- 1 root disk 8, 1 may 25 17:02 /dev/sda1 brw-rw---- 1 root disk 8, 2 may 25 17:02 /dev/sda2 (...)
Або для послідовних терміналів (TeleTYpewriter):
# ls -l /dev/tty* crw-rw-rw- 1 root tty 5, 0 may 25 17:26 /dev/tty crw--w---- 1 root tty 4, 0 may 25 17:26 /dev/tty0 crw--w---- 1 root tty 4, 1 may 25 17:26 /dev/tty1 (...)
Зверніть увагу, що перший символ - це b
для блочних пристроїв і c
для символьних пристроїв.
Tip
|
Зірочка ( |
Крім того, /dev
містить деякі спеціальні файли, які є досить корисними для різних цілей програмування:
/dev/zero
-
Надає стільки нульових символів, скільки потрібно.
/dev/null
-
Відомий як bit bucket. Він відкидає всю надіслану йому інформацію.
/dev/urandom
-
Генерує псевдовипадкові числа.
Каталог /sys
Файлова система sys (sysfs
) змонтована на /sys
. Цей каталог був створений з приходом ядра 2.6 і означав значне покращення /proc/sys
.
Процеси повинні взаємодіяти з пристроями в /dev
, тому ядру потрібен каталог, який містить інформацію про ці апаратні пристрої. Це каталог /sys
, і його дані впорядковано за категоріями. Наприклад, щоб перевірити MAC-адресу вашої мережевої карти (enp0s3
), ви маєте виконати команду cat
для такого файлу:
$ cat /sys/class/net/enp0s3/address 08:00:27:02:b2:74
Пам’ять і її типи
Для того щоб програма запустилася, її потрібно завантажити в пам’ять. Загалом, коли ми говоримо про пам’ять, ми маємо на увазі Пам’ять із довільним доступом (RAM, Random Access Memory) і, у порівнянні з механічними жорсткими дисками, вона має перевагу в тому, що набагато швидша. З іншого боку, вона нестабільна (тобто, коли комп’ютер вимикається, дані зникають).
Незважаючи на вищезгадане, коли справа доходить до пам’яті, ми можемо виділити два основних її типи в системі Linux:
- Фізична пам’ять
-
Також відома як RAM, вона поставляється у вигляді мікросхем, які складаються з інтегральних схем, що містять мільйони транзисторів і конденсаторів. Вони, у свою чергу, утворюють комірки пам’яті (основний будівельний блок пам’яті комп’ютера). Кожна з цих комірок має пов’язаний шістнадцятковий код — адресу пам’яті — щоб у разі потреби на неї можна було посилатися.
- Віртуальна пам’ять
-
Також відома як файл підкачки, це частина віртуальної пам’яті, яка розташована на жорсткому диску та використовується, коли більше немає доступної оперативної пам’яті.
З іншого боку, існує концепція віртуальної пам’яті, яка є абстракцією загального об’єму оперативної адресної пам’яті (оперативної пам’яті та дискового простору), як це сприймається застосунками.
Команда free
аналізує /proc/meminfo
і дуже чітко відображає обсяг вільної та використаної пам’яті в системі:
$ free total used free shared buff/cache available Mem: 4050960 1474960 1482260 96900 1093740 2246372 Swap: 4192252 0 4192252
Давайте пояснимо різні стовпці:
total
-
Загальний обсяг встановленої фізичної пам’яті та файлу підкачки.
used
-
Обсяг фізичної пам’яті та файлу підкачки, що використовується на даний момент.
free
-
Обсяг фізичної пам’яті та пам’яті підкачки, який на даний момент не використовується.
shared
-
Обсяг фізичної пам’яті, що використовується переважно
tmpfs
. buff/cache
-
Обсяг фізичної пам’яті, який наразі використовується буферами ядра, кешем сторінок і slabs.
available
-
Оцінювання, скільки фізичної пам’яті доступно для нових процесів.
За замовчуванням free
показує значення в кібібайтах, але дозволяє за допомогою різних перемикачів відображати результати в різних одиницях вимірювання. Деякі з цих варіантів:
-b
-
Байти.
-m
-
Мебібайти.
-g
-
Гігібайти.
-h
-
Формат, зручний для користувача.
-h
завжди надає зручний формат:
$ free -h total used free shared buff/cache available Mem: 3,9G 1,4G 1,5G 75M 1,0G 2,2G Swap: 4,0G 0B 4,0G
Note
|
Кібібайт (КіБ) дорівнює 1024 байтам, а кілобайт (КБ) дорівнює 1000 байтам. Те ж саме стосується мебібайтів, гібібайтів тощо. |
Вправи до посібника
-
Використовуйте команду
which
, щоб дізнатися розташування наступних програм і заповнити таблицю:Команда Команда which
Шлях до виконуваного файлу (виведення) Користувачу потрібні привілеї root? swapon
kill
cut
usermod
cron
ps
-
Де можна знайти наступні файли?
File /etc
~
.bashrc
bash.bashrc
passwd
.profile
resolv.conf
sysctl.conf
-
Поясніть значення числових елементів для файлу ядра
vmlinuz-4.15.0-50-generic
, знайденого в/boot
:Числовий елемент Значення 4
15
0
50
-
Яку команду ви б використали, щоб вивести список усіх жорстких дисків і розділів у
/dev
?
Дослідницькі вправи
-
Файли пристроїв для жорстких дисків представлені на основі контролерів, які вони використовують – ми бачили
/dev/sd*
для дисків, що використовують SCSI (Small Computer Systems Interface) і SATA (Serial Advanced Technology Attachment), але-
Як були представлені старі диски IDE (Integrated Drive Electronics)?
-
І сучасні накопичувачі NVMe (Non-Volatile Memory Express)?
-
-
Подивіться на файл
/proc/meminfo
. Порівняйте вміст цього файлу з результатом командиfree
та визначте, який перемикач із/proc/meminfo
відповідає наступним полям у виводіfree
:виведення команди free
поле /proc/meminfo
total
free
shared
buff/cache
available
Підсумки
У цьому уроці ви дізналися про розташування програм та їх конфігураційних файлів у системі Linux. Важливі факти, які слід пам’ятати:
-
В основному, програми можна знайти в трирівневій структурі каталогів:
/
,/usr
та/usr/local
. Кожен з цих рівнів може містити каталогиbin
таsbin
. -
Файли конфігурації зберігаються в
/etc
та~
. -
Dotfiles — це приховані файли, які починаються з крапки (
.
).
Ми також обговорили ядро Linux. Важливі факти:
-
Для Linux все є файлом.
-
Ядро Linux знаходиться в
/boot
разом з іншими файлами, пов’язаними з завантаженням. -
Щоб процеси почали виконуватися, ядро потрібно спочатку завантажити в захищену область пам’яті.
-
Робота ядра полягає в розподілі системних ресурсів для процесів.
-
Віртуальна (або псевдо) файлова система
/proc
зберігає важливі дані ядра та системи тимчасово.
Так само ми дослідили апаратні пристрої та дізналися наступне:
-
У каталозі
/dev
зберігаються спеціальні файли (вузли) для всіх підключених апаратних пристроїв: блокові пристрої або символьні пристрої. Перші передають дані блоками; другі по одному символу. -
Каталог
/dev
також містить інші спеціальні файли, такі як/dev/zero
,/dev/null
або/dev/urandom
. -
Каталог
/sys
зберігає інформацію про апаратні пристрої, упорядковані за категоріями.
Нарешті ми торкнулися пам’яті. Ми вивчили:
-
Програма запускається, коли вона завантажується в пам’ять.
-
Що таке оперативна пам’ять.
-
Що таке віртуальна пам’ять.
-
Як відобразити використання пам’яті.
Команди, які використовувалися в цьому уроці:
cat
-
Об’єднати/вивести вміст файлу.
free
-
Відображення обсягу вільної та використаної пам’яті в системі.
ls
-
Виводить вміст каталогу.
which
-
Показати розташування програми.
Відповіді до вправ посібника
-
Використовуйте команду
which
, щоб дізнатися розташування наступних програм і заповнити таблицю:Команда Команда which
Шлях до виконуваного файлу (виведення) Користувачу потрібні привілеї root?? swapon
which swapon
/sbin/swapon
Так
kill
which kill
/bin/kill
Ні
cut
which cut
/usr/bin/cut
Ні
usermod
which usermod
/usr/sbin/usermod
Так
cron
which cron
/usr/sbin/cron
Так
ps
which ps
/bin/ps
Ні
-
Де можна знайти наступні файли?
Файл /etc
~
.bashrc
Ні
Так
bash.bashrc
Так
Ні
passwd
Так
Ні
.profile
Ні
Так
resolv.conf
Так
Ні
sysctl.conf
Так
Ні
-
Поясніть значення числових елементів для файлу ядра
vmlinuz-4.15.0-50-generic
, знайденого в/boot
:Числовий елемент Значення 4
Версія ядра
15
Основна версія
0
Версія змін
50
Номер виправлення
-
Яку команду ви б використали, щоб вивести список усіх жорстких дисків і розділів у
/dev
?ls /dev/sd*
Відповіді до дослідницьких вправ
-
Файли пристроїв для жорстких дисків представлені на основі контролерів, які вони використовують – ми бачили
/dev/sd*
для дисків, що використовують SCSI (Small Computer Systems Interface) і SATA (Serial Advanced Technology Attachment), але-
Як були представлені старі диски IDE (Integrated Drive Electronics)?
/dev/hd*
-
І сучасні накопичувачі NVMe (Non-Volatile Memory Express)?
/dev/nvme*
-
-
Подивіться на файл
/proc/meminfo
. Порівняйте вміст цього файлу з результатом командиfree
та визначте, який перемикач із/proc/meminfo
відповідає наступним полям у виводіfree
:виведення команди free
поле /proc/meminfo
total
MemTotal
/SwapTotal
free
MemFree
/SwapFree
shared
Shmem
buff/cache
Buffers
,Cached
таSReclaimable
available
MemAvailable