Хочется начать с типов файловых систем. В отлчии от правил Windows с его монополией на NTFS, Linux даёт пользователю право выбора корневой файловой системы.
Например такие варианты представлены в установщике Arch Linux
Для нас отличия между ними незначительны, но я немного расскажу про BTRFS. Ключевой её фишкой является динамическое журналирование и снапшоты, благодря которым можно откатить операционную систему так, будто это виртуальная машина. Также скорость работы btrfs на твердотельных накопителях выше в сравнении с классической ext4 за счёт техники копирования при записи. Минусом же является система подтомов(subvolumes), из-за которой установка для пользователя ext4 может вызвать трудности.
Эталонное строение файловой системы описано в документе FHS или "Стандарт иерархии файловой системы". Его ещё можно представить в виде вот такой схемы:
Важно отметить, что не все системы жёстко следуют этому стандарту и зачастую есть расхождения
Быстренько пройдёмся по основому содержимому в корневом каталоге.
Bin (Binary) cодержит исполяемые файлы всех системых утилит командной строки. В данном виде не используется в настоящее время а яляется символьной ссылкой на каталог /usr/bin
Символьная ссылка – аналог ярлыка Windows. Но в отличии от классического ярлыка она предназначена не толкьо для пользователя, по ней также спокойно может ходить система. При выводе командой ls она выглядит вот так:
Et cetĕra (И так далее). Содержит различные вспомогательные файлы и файлы конфигурации.
В Home содержатся домашние папки для всех полноценных пользовталей системы, кроме рут, у него своя такая дирректория в корне.
Акцент на полноценнсоти сделан не просто так, так как каждая служба в linux является пользователем. Но они могут либо не иметь домашнюю дирректорию, либо она будет находиться по пути рабочей директории "пользователя".
Взаимодействовать с домашней папкой залогиненого пользователя можно с помощью символа ~. Если вписать его в качестве аргумента команды cd конечная папка будет аналогчина пути /home/<имя пользователя>/
У рута, как я сказал выше, своя дирректория, отдельно от остальных.
Домашняя папка пользователя содержит следующие директории:
Большое колличество файлов в ней скрыты, чаще всего это файлы конфигурации. В отличии от таковых в /etc/ это индивидуальные конфиги для каждого пользователя в системе, изменение которых не повлияет на других пользователей. В отличии от Windows "скрытность" файла определяется не отдельным атрибутом, а названием, начинающимся с точки. Напомню, что их можно вывести, добавив в команду ls флаг -a.
В отличии от Windows с её размашистым реестром, в Linux каждый элмемент системы – файл. В devices находятся файлы всех устройств. В качестве примера можно привести жесткие диски. Поскольку диски также состоят из разделов, они будут иметь следующее обозначение:
/dev/sdXY
Где X-буква физического диска, который установле в компьютер. Обозначается буквами англйиского алфавита нижнего регистра.
А Y - номер логического тома на физиеском диске. Обозначается цифрой.
К примеру второй раздел третьего диска будет иметь название sdc2.
Вместо букв sd могут использоваться другие обнозначения, в зависимости от типа накопителя, но смысл нумерации не поменяется.
Примеры нестандартной нумерации разделов:
Раз
Два
А ещё есть такая интересная штука как Менеджер логчиеских томов, Она позовляет монтировать два физических тома как один логический. Для лучшего понимания оставлю вот эту картинку.
Содержит загрузочные файлы, в том числе ядро, initrd, System.map. Обычно выносится на отдельный раздел. Список разделов и их точки монтирования удобно вывести командой lsblk (уже показано выше).
Основные библиотеки, для работы программ в каталогах /bin/ , /sbin/. Как и в случае с /bin/ является ссылкой на /usr/lib. В случае использования 32-битных библиотек, будет создан каталог /lib32.
В эту папку по умолчанию монтируются подключаемые устройства. Каталог /media/ не во всех дистрибутивах находится в корне, например в Arch Linux он находится в /run/ .
Для монтирования при запуске системы используется файл /etc/fstab, чтобы например всегда опредлять второй диск в системе нужжно вписать UUID диска, точку монтирвоания, файловую систему и дополнительные параметры
Является устаревшей директорией, которая на данный момент существует для совместимости. Туда монтировались носители до появления /media/. Ещё /mnt/ используют для ручного монтирования файловой системы, если например не загружается парралельно установленная ОС. Ещё директорию принято использовать при устанвоке некоторых дистрибутивов, например Arch Linux или Gentoo. Так что прям таки бесполезной её назвать нельзя.
В каталоге Optional хранятся различные дополнительные, в основном проприетарные, программы(например Google Chrome и Discord), также туда принято устанавливать Portable версии и самописные программы.
В каталог Processes монитируется виртуальная файловая система procfs, которая отображает некоторую информацию из ядра и файлы процессов. Из неё берут информацию top,htop и различиные графические диспетчеры задач.
htop
Также тут хранится много полезной информации о железе, например cpuinfo
Информация о запускаемых при загрузке системы службах (демонах), процессов и т.п.
Всё здесь временное и удаляется при перезагрузке
Как ранее уже упоминалось, у пользователя root свой домашний каталог. Это сделано потому что многие выносят основной /home/ на отдельный раздел и шифруют. Это также делают при частой переустановке дистрибутива для сохранения файлов. Кактлог рута же сохранён для совместимости и удобства администрирования.
Каталог /sbin/ содержит в себе программы для системного администирирования, например ifconfig, iptables. Ещё сюда устанавливаются сетевые утилиты вроде openvpn.
По FHS содержит данные, обслуживаемые этой системой. Например в /srv/www/ данные веб сервера. Вариант не прижился и все данные серверов всё еще живут /var/www/ .
/tmp/ (от Temporary) содержит временные файлы для сессии. Этот каталог очищается. Так как этот каталог может активно использоваться, возможно его монтирование прямо в оперативную память. В некторых случаях это повышает скорость работы.
Вторичная иерархия файловой системы, содержит пользовательские приложения. /include/ содержит заголовочные файлы (необходимы для разработки и сборки), /src/ содержит исходные коды ядра. В /local/ же находится третичная иерархия специфичных для текущего пользователя(есть свои bin/, lib/, share/).
/var/ (от Variable) содержит изменяемые файлы в системе.
Тут есть:
В основном топике была упомянута стандартная утилита chmod,chown и chgrp, но почему-то не была упомянута схожая chattr (от Change Attribute). С помощью неё можно менять файловые атрибуты. вывести атрибуты можно командой lsattr .
Chattr используется вот так:
chattr (опция) [оператор] [атрибут(ы)] имя_файла
Варианты опций следующие:
Тут думаю всё понятно, в качестве примера попробуем добавить атрибут неизменяимости для файла
И как видно, даже будучи рутом я не могу удалить файл или записать в него что-ниубдь:
Недавно я столкнулся с проблеммой, нужно было сделать файл неизменяемым в Docker контейнере . Грубо говоря это что-то вроде виртуальной машины, но очень легковесной и использующей ядро хостовой операционной системы для разворачивания сервисов. Если прям очень интересно, что такое контейнер подробнее расписано тут. Надеюсь и на факультативе затронем эту тему.
Так вот атрибут i недоступен в контейнере по умолчанию.Сымитировать его работу для не root пользователя можо c помощью удаления разрешения на изменение и добавление "stiky bit"
Ну в первую очередь нужно запомнить шорткат для октрытия терминала (это подходит только в режиме работы с эмулятором терминала, с tty не сработает)
Каждый ввод этой команды будет открывать новое окно терминала.
А вот если вы терминалорождённый и весь этот GUI не для вас, то нет смысла лезть в другую TTY за другим терминалом. Можно использовать Tmux, для для откртия нескольких вкладок в одном терминале, на каждой вкладе можно днлить терминал по горизонатли или вертикали.
О том как обращаться этим зверем есть прекрасная статья на хабре.
Часто вам придётся обращаться к раннее введённым командам, для навигации между ними используйте стрелки на клавиатуре:
При этом команда выполнена не будет, а лишь подставится в сторку вводу, её например можно дополнить.
Для дополенения команд можно использовать клавишу Tab, она допишет название команды или файл, если вы напишете начало начало команды или имени файла. В случае нескольких вариантов можно сделать выбор с помощью Tab или дописать, чтобы остался только 1 вариант.
В облочке zsh, которую использует по умолчанию Kali Linux есть следующий финт, если она заметит что вы вводите что-то, на похожее ранее, то она предложит сразу это дополнить.
Для быстрого заполнения нажмите стрелку Вправо на клавиатуре.
Также, вызвать предудщую команду можно с помощью !!. Самый простой пример использования - это посдтавить sudo.
Но что делать, если нужна какая-то ранее выполненная команда, но точно её не помнишь.
Можно вывести всю историю. Либо встреонной командой history, либо прочитав файл с историей cat ~/.zsh_history . Для каждой оболочки история своя.
Историю можно комбинировать с grep и искать по номеру или по содержанию команды
Интерактивный поиск можно задействовать, введя Ctrl+R