Try   HackMD

Небольшое дополнение по основам Linux


Оглавление:


Иерарихия файловой системы Linux

Хочется начать с типов файловых систем. В отлчии от правил Windows с его монополией на NTFS, Linux даёт пользователю право выбора корневой файловой системы.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Например такие варианты представлены в установщике Arch Linux

Для нас отличия между ними незначительны, но я немного расскажу про BTRFS. Ключевой её фишкой является динамическое журналирование и снапшоты, благодря которым можно откатить операционную систему так, будто это виртуальная машина. Также скорость работы btrfs на твердотельных накопителях выше в сравнении с классической ext4 за счёт техники копирования при записи. Минусом же является система подтомов(subvolumes), из-за которой установка для пользователя ext4 может вызвать трудности.

Эталонное строение файловой системы описано в документе FHS или "Стандарт иерархии файловой системы". Его ещё можно представить в виде вот такой схемы:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Важно отметить, что не все системы жёстко следуют этому стандарту и зачастую есть расхождения

Быстренько пройдёмся по основому содержимому в корневом каталоге.

/bin/

Bin (Binary) cодержит исполяемые файлы всех системых утилит командной строки. В данном виде не используется в настоящее время а яляется символьной ссылкой на каталог /usr/bin

Символьная ссылка аналог ярлыка Windows. Но в отличии от классического ярлыка она предназначена не толкьо для пользователя, по ней также спокойно может ходить система. При выводе командой ls она выглядит вот так:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

/etc/

Et cetĕra (И так далее). Содержит различные вспомогательные файлы и файлы конфигурации.

/home/

В Home содержатся домашние папки для всех полноценных пользовталей системы, кроме рут, у него своя такая дирректория в корне.

Акцент на полноценнсоти сделан не просто так, так как каждая служба в linux является пользователем. Но они могут либо не иметь домашнюю дирректорию, либо она будет находиться по пути рабочей директории "пользователя".

Взаимодействовать с домашней папкой залогиненого пользователя можно с помощью символа ~. Если вписать его в качестве аргумента команды cd конечная папка будет аналогчина пути /home/<имя пользователя>/

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

У рута, как я сказал выше, своя дирректория, отдельно от остальных.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Домашняя папка пользователя содержит следующие директории:

  • Downloads
  • Documents
  • Desktop
  • Music
  • Pictures
  • Templates
  • Videos
  • Public

Большое колличество файлов в ней скрыты, чаще всего это файлы конфигурации. В отличии от таковых в /etc/ это индивидуальные конфиги для каждого пользователя в системе, изменение которых не повлияет на других пользователей. В отличии от Windows "скрытность" файла определяется не отдельным атрибутом, а названием, начинающимся с точки. Напомню, что их можно вывести, добавив в команду ls флаг -a.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

/dev/

В отличии от Windows с её размашистым реестром, в Linux каждый элмемент системы файл. В devices находятся файлы всех устройств. В качестве примера можно привести жесткие диски. Поскольку диски также состоят из разделов, они будут иметь следующее обозначение:

/dev/sdXY

Где X-буква физического диска, который установле в компьютер. Обозначается буквами англйиского алфавита нижнего регистра.
А Y - номер логического тома на физиеском диске. Обозначается цифрой.

К примеру второй раздел третьего диска будет иметь название sdc2.

Вместо букв sd могут использоваться другие обнозначения, в зависимости от типа накопителя, но смысл нумерации не поменяется.
Примеры нестандартной нумерации разделов:
Раз

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Два
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

А ещё есть такая интересная штука как Менеджер логчиеских томов, Она позовляет монтировать два физических тома как один логический. Для лучшего понимания оставлю вот эту картинку.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

/boot/

Содержит загрузочные файлы, в том числе ядро, initrd, System.map. Обычно выносится на отдельный раздел. Список разделов и их точки монтирования удобно вывести командой lsblk (уже показано выше).

/lib/

Основные библиотеки, для работы программ в каталогах /bin/ , /sbin/. Как и в случае с /bin/ является ссылкой на /usr/lib. В случае использования 32-битных библиотек, будет создан каталог /lib32.

/media/

В эту папку по умолчанию монтируются подключаемые устройства. Каталог /media/ не во всех дистрибутивах находится в корне, например в Arch Linux он находится в /run/ .

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Для монтирования при запуске системы используется файл /etc/fstab, чтобы например всегда опредлять второй диск в системе нужжно вписать UUID диска, точку монтирвоания, файловую систему и дополнительные параметры

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

/mnt/

Является устаревшей директорией, которая на данный момент существует для совместимости. Туда монтировались носители до появления /media/. Ещё /mnt/ используют для ручного монтирования файловой системы, если например не загружается парралельно установленная ОС. Ещё директорию принято использовать при устанвоке некоторых дистрибутивов, например Arch Linux или Gentoo. Так что прям таки бесполезной её назвать нельзя.

/opt/

В каталоге Optional хранятся различные дополнительные, в основном проприетарные, программы(например Google Chrome и Discord), также туда принято устанавливать Portable версии и самописные программы.

/proc/

В каталог Processes монитируется виртуальная файловая система procfs, которая отображает некоторую информацию из ядра и файлы процессов. Из неё берут информацию top,htop и различиные графические диспетчеры задач.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

htop

Также тут хранится много полезной информации о железе, например cpuinfo

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

/run/

Информация о запускаемых при загрузке системы службах (демонах), процессов и т.п.
Всё здесь временное и удаляется при перезагрузке

/root/

Как ранее уже упоминалось, у пользователя root свой домашний каталог. Это сделано потому что многие выносят основной /home/ на отдельный раздел и шифруют. Это также делают при частой переустановке дистрибутива для сохранения файлов. Кактлог рута же сохранён для совместимости и удобства администрирования.

/sbin/

Каталог /sbin/ содержит в себе программы для системного администирирования, например ifconfig, iptables. Ещё сюда устанавливаются сетевые утилиты вроде openvpn.

/srv/

По FHS содержит данные, обслуживаемые этой системой. Например в /srv/www/ данные веб сервера. Вариант не прижился и все данные серверов всё еще живут /var/www/ .

/tmp/

/tmp/ (от Temporary) содержит временные файлы для сессии. Этот каталог очищается. Так как этот каталог может активно использоваться, возможно его монтирование прямо в оперативную память. В некторых случаях это повышает скорость работы.

/usr/

Вторичная иерархия файловой системы, содержит пользовательские приложения. /include/ содержит заголовочные файлы (необходимы для разработки и сборки), /src/ содержит исходные коды ядра. В /local/ же находится третичная иерархия специфичных для текущего пользователя(есть свои bin/, lib/, share/).

/var/

/var/ (от Variable) содержит изменяемые файлы в системе.
Тут есть:

  • /var/lib/ - Постоянные данные, изменяемые программами в процессе работы (например базы данных).
  • /var/lock/ - Различные lock файлы, указывающие на занятость различных ресурсов.
  • /var/log/ - Log файлы.
  • /var/spool/ - Задачи, ожидающие обработки. Здесь живут всякие очереди печати и демон периодического выполнения заданий Сron.
  • /var/mail - Почтовые ящики пользователей.
  • /var/run - Информация о запущенных программах (не процессы).
  • /var/tmp - Сюда переезжают временные файлы, которые должны быть сохранены после перезагрузки.

Немного про chattr

В основном топике была упомянута стандартная утилита chmod,chown и chgrp, но почему-то не была упомянута схожая chattr (от Change Attribute). С помощью неё можно менять файловые атрибуты. вывести атрибуты можно командой lsattr .

Chattr используется вот так:
chattr (опция) [оператор] [атрибут(ы)] имя_файла
Варианты опций следующие:

  • -R - при выборе каталога обрабаотывает рекурсивно
  • -V(от Verbose) - Максимально подробный вывод
  • -f - игнорировать ошибки
  • -v - вывод версии
    Варианты операторов:
  • "+" - Добавить атрибут(ы) файлу
  • "-" - Убрать атрибут(ы) у файла
  • "=" - Установить только выбранные атрибуты
    Варианты атрибутов:
  • a - файл может быть открыт только в режиме добавления
  • A - не обновлять время перезаписи
  • c - автоматически сжимать при записи на диск
  • C - отключить копирование при записи
  • D - работает только для папки, когда установлен, все изменения синхронно записываются на диск сразу же
  • e - использовать extent'ы блоков для хранения файла
  • i - сделать неизменяемым
  • j - все данные перед записью в файл будут записаны в журнал
  • s - безопасное удаление с последующей перезаписью нулями
  • S - синхронное обновление, изменения файлов с этим атрибутом будут сразу же записаны на диск
  • t - файлы с этим атрибутом не будут хранится в отдельных блоках
  • u - содержимое файлов с этим атрибутом не будет удалено при удалении самого файла и потом может быть восстановлено

Тут думаю всё понятно, в качестве примера попробуем добавить атрибут неизменяимости для файла

sudo chattr +i testfile

И как видно, даже будучи рутом я не могу удалить файл или записать в него что-ниубдь:

Недавно я столкнулся с проблеммой, нужно было сделать файл неизменяемым в Docker контейнере . Грубо говоря это что-то вроде виртуальной машины, но очень легковесной и использующей ядро хостовой операционной системы для разворачивания сервисов. Если прям очень интересно, что такое контейнер подробнее расписано тут. Надеюсь и на факультативе затронем эту тему.
Так вот атрибут i недоступен в контейнере по умолчанию.

Сымитировать его работу для не root пользователя можо c помощью удаления разрешения на изменение и добавление "stiky bit"

sudo chmod 744 <filename> && sudo chmod +t <filename>

Трюки с командной оболочкой

Ну в первую очередь нужно запомнить шорткат для октрытия терминала (это подходит только в режиме работы с эмулятором терминала, с tty не сработает)

Ctrl+Alt+T

Каждый ввод этой команды будет открывать новое окно терминала.

А вот если вы терминалорождённый и весь этот GUI не для вас, то нет смысла лезть в другую TTY за другим терминалом. Можно использовать Tmux, для для откртия нескольких вкладок в одном терминале, на каждой вкладе можно днлить терминал по горизонатли или вертикали.


О том как обращаться этим зверем есть прекрасная статья на хабре.

Часто вам придётся обращаться к раннее введённым командам, для навигации между ними используйте стрелки на клавиатуре:

    Вверх - подняться на одну команду в истории вверх
    Вниз - спуститься на одну команду в истории вниз

При этом команда выполнена не будет, а лишь подставится в сторку вводу, её например можно дополнить.
Для дополенения команд можно использовать клавишу Tab, она допишет название команды или файл, если вы напишете начало начало команды или имени файла. В случае нескольких вариантов можно сделать выбор с помощью Tab или дописать, чтобы остался только 1 вариант.

В облочке zsh, которую использует по умолчанию Kali Linux есть следующий финт, если она заметит что вы вводите что-то, на похожее ранее, то она предложит сразу это дополнить.


Для быстрого заполнения нажмите стрелку Вправо на клавиатуре.

Также, вызвать предудщую команду можно с помощью !!. Самый простой пример использования - это посдтавить sudo.

Но что делать, если нужна какая-то ранее выполненная команда, но точно её не помнишь.
Можно вывести всю историю. Либо встреонной командой history, либо прочитав файл с историей cat ~/.zsh_history . Для каждой оболочки история своя.

Историю можно комбинировать с grep и искать по номеру или по содержанию команды

Интерактивный поиск можно задействовать, введя Ctrl+R