# Linux

## Базовые команды

- `uname` (unix name) - вывод информации о системе и ядре операционной системы
- `hostname` - отображение текущего имени хоста системы
- `date` - отображает и устанавливает системное временя и дату, также позволяет форматировать и выводить дату и время в соответствии с определенными шаблонами
- `ls` (list) - сведения о содержимом текущего каталога
- `pwd` (present working directory) - вывод пути текущей рабочей директории
- `cd` (change directory) - изменение текущей рабочей директории
- `clear` - очистка содержимого терминала в командной строке
- `file` - определения типа файла
- `touch` - изменение времени доступа и времени модификации файлов или создания новых файлов
- `mkdir` (make directory) - создание новых директорий (папок) в файловой системе
- `cp` (copy) - копирование файлов и директорий
- `mv` (move) - перемещение или переименование файлов и директорий
- `rm` (remove) - удаление файлов и директорий
- `echo` - вывод текста или переменных в командной строке или в скриптах
- `cat` - вывод содержимого одного или нескольких файлов в командной строке
- `more`, `less` - позволяет просматривать содержимое файла постранично и обеспечивает удобный способ пролистывания вперед и назад по файлу
- `head` - выводит начальные строки из указанного источника, по умолчанию первые 10 строк
- `tail` - выводит конечные строки из указанного источника, по умолчанию последние 10 строк
- `nl` (number lines) - предоставляет возможность добавить номера строк к выводу, делая его более читабельным и упорядоченным
- `which` - определение полного пути исполняемого файла команды, то есть местоположения, где находится файл команды в системе
- `whereis` - поиск исполняемых файлов, исходных кодов и справочной документации связанных с указанной командой
- `man` (manual) - просмотр руководства по командам и программам в операционной системе
- `locate` - поиск файлов и директорий на основе их имени
- `find` - поиск файлов и директорий на основе различных критериев, таких как имя файла, тип, размер, дата изменения и другие
- `info` (information) - система справки, которая предоставляет структурированную и подробную информацию о программном обеспечении, командах, файловых форматах и других аспектах системы
- `type` - определяет тип команды, показывая, является ли команда встроенной в оболочку, алиасом, функцией или внешней программой
- `ps` (process status) - просмотр информации о запущенных процессах в системе
- `kill` - отправка сигналов процессам, таких как завершение процесса или управление его выполнением
- `pgrep` (process grep) - поиск и отображение идентификаторов процессов на основе их имен или других критериев
- `lsof` (list open files) - вывод списка открытых файлов и процессов, которые ими владеют, также предоставляет информацию о процессах, которые открыли файлы на диске или имеют сетевые соединения
- `df` (disk free) - вывод информации о доступном месте на файловых системах
- `du` (disk usage) - вывод информации о размере файлов или директорий в файловой системе
- `vmstat` (virtual memory statistics), `free` - вывод информации об использовании памяти в системе, включая физическую память (RAM) и использование памяти "подкачки" (swap)

### Справочники

- [Linux. Карманный справочник (Скотт Граннеман)](https://ftp.zhirov.kz/books/IT/Unix/Linux.%20%D0%9A%D0%B0%D1%80%D0%BC%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%20%28%D0%A1%D0%BA%D0%BE%D1%82%D1%82%20%D0%93%D1%80%D0%B0%D0%BD%D0%BD%D0%B5%D0%BC%D0%B0%D0%BD%29.djvu)
- [Linux. Основные команды. Карманный справочник (Даниэл Дж. Баррет)](https://ftp.zhirov.kz/books/IT/Unix/Linux.%20%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B.%20%D0%9A%D0%B0%D1%80%D0%BC%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%20%28%D0%94%D0%B0%D0%BD%D0%B8%D1%8D%D0%BB%20%D0%94%D0%B6.%20%D0%91%D0%B0%D1%80%D1%80%D0%B5%D1%82%29.pdf)

## Иерархия каталогов в Linux

![directory_hierarchy](img/directory_hierarchy.png)

- `/bin`. Содержит готовые к запуску программы (также известные как исполняемые файлы), включая большинство основных команд Unix, таких как `ls` и `cp`. Большинство программ в `/bin` созданы в двоичном формате на языке C, но некоторые из них являются сценариями оболочки в современных системах.
- `/dev`. Содержит файлы устройств.
- `/etc` . Этот центральный каталог конфигурации системы (произносится этси) содержит пароль пользователя, загрузочные файлы, файлы устройств, сетевые настройки и др.
- `/home`. Содержит домашние (личные) каталоги для обычных пользователей. Большинство установок Unix соответствуют этому стандарту.
- `/lib`. Сокращение от **library** (библиотека). В этом каталоге находятся файлы библиотек с кодом, который могут использовать исполняемые файлы. Существует два типа библиотек: статические и разделяемые. Каталог `/lib` должен содержать только разделяемые библиотеки, но другие каталоги **lib**, такие как `/usr/lib`, включают обе разновидности, а также другие вспомогательные файлы.
- `/proc`. Предоставляет системную статистику через доступный для просмотра интерфейс каталогов и файлов. Большая часть структуры подкаталогов `/proc` в Linux уникальна, но многие другие варианты Unix имеют аналогичные функции. Каталог `/proc` содержит информацию о запущенных в данный момент процессах, а также некоторые параметры ядра.
- `/run`. Содержит данные времени выполнения, относящиеся к системе, включая определенные идентификаторы процессов, файлы сокетов, записи состояния и во многих случаях системный журнал. Это относительно недавнее дополнение к корневому каталогу, в старых системах вы можете найти его в `/var/run`. В более новых системах `/var/run` — это символическая ссылка на `/run`.
- `/sys`. Этот каталог похож на каталог `/proc` тем, что он предоставляет интерфейс устройствам и системе.
- `/sbin`. Место для системных исполняемых файлов. Программы в каталогах `/sbin` связаны с управлением системой, поэтому простые пользователи обычно не имеют компонентов `/sbin` в своих путях команд. Многие из утилит в этом каталоге работают, только если запущены от имени суперпользователя.
- `/tmp`. Место для хранения небольших, временных, не особо важных файлов. Любой пользователь может читать из каталога `/tmp` и записывать в него, но у пользователя может не быть доступа к файлам другого пользователя. Многие программы задействуют этот каталог в качестве рабочей области. Если какой-то файл важен, не помещайте его в каталог `/tmp`, потому что большинство дистрибутивов очищают его при загрузке, а некоторые даже периодически удаляют старые файлы. Кроме того, не позволяйте `/tmp` заполняться мусором, потому что обычно он делит пространство с важными каталогами (например, с остальной частью каталога `/`).
- `/usr`. Сокращение от **user** (пользователь), однако в этом подкаталоге нет пользовательских файлов. Вместо этого он содержит большую иерархию каталогов, включая основную часть системы Linux. Многие имена каталогов в `/usr` совпадают с именами в корневом каталоге (например, `/usr/bin` и `/usr/lib` ), и они содержат файлы одного типа. (Причина, по которой в корневом каталоге не содержится вся система, в первую очередь историческая — в прошлом это было сделано для того, чтобы снизить требования к пространству для корневого каталога.)
- `/var`. Подкаталог переменных, куда программы записывают информацию, которая может изменяться с течением времени. Здесь находятся системные журналы, отслеживание активности пользователей, кэши и другие файлы, создаваемые системными программами и управляемые ими. (Здесь также есть каталог `/var/tmp`, но система не стирает его при загрузке.)
- `/boot`. Содержит файлы загрузчика ядра. Эти файлы относятся к самому первому этапу запуска Linux, поэтому в этом каталоге вы не найдете информации о том, как Linux запускает свои службы.
- `/media`. Базовый каталог для съемных носителей, таких как флеш-накопители. Этот каталог встречается во многих дистрибутивах.
- `/opt`. Может содержать дополнительное программное обеспечение сторонних производителей. Многие системы не используют каталог `/opt`.
- `/include`. Файлы заголовков, используемые компилятором языка С.
- `/local`. Место, где администраторы могут устанавливать собственное программное обеспечение. Его структура должна выглядеть так же, как у каталогов `/` и `/usr`.
- `/man`. Страницы руководства.
- `/share`. Файлы, которые должны работать на других типах систем Unix без потери функциональности. Обычно это вспомогательные файлы данных, которые программы и библиотеки читают по мере необходимости. В прошлом сети машин совместно пользовались бы этим каталогом с файлового сервера, но сегодня общий каталог, применяемый таким образом, встречается редко, поскольку в современных системах нет конкретных ограничений на пространство для таких файлов. Вместо этого в дистрибутивах Linux вы найдете каталоги `/man`, `/info` и многие другие.

### Книги

- [Время UNIX. A History and a Memoir (Брайан Керниган)](https://ftp.zhirov.kz/books/IT/Other/%D0%92%D1%80%D0%B5%D0%BC%D1%8F%20UNIX.%20A%20History%20and%20a%20Memoir%20%28%D0%91%D1%80%D0%B0%D0%B9%D0%B0%D0%BD%20%D0%9A%D0%B5%D1%80%D0%BD%D0%B8%D0%B3%D0%B0%D0%BD%29.pdf)
