мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
notes:howlinuxworks:vol2 [2026/05/12 17:47] radi0devnotes:howlinuxworks:vol2 [2026/05/12 18:15] (текущий) radi0dev
Строка 3: Строка 3:
 ===== 2.1 Оболочка Bourne Shell (bash): /bin/sh ===== ===== 2.1 Оболочка Bourne Shell (bash): /bin/sh =====
  
-Оболочка (**shell**) — одна из самых важных частей системы Unix. Это программа, выполняющая команды, которые пользователи передает в терминал. Эти команды могут быть другими программами или встроенными функциями оболочки. Оболочка - это еще и среда программирования. Программисты Unix часто разбивают типичные задачи на более мелкие компоненты и применяют оболочку для управления ими.+Оболочка (**shell**) одна из самых важных частей системы Unix. Это программа, выполняющая команды, которые пользователи передает в терминал. Эти команды могут быть другими программами или встроенными функциями оболочки. Оболочка - это еще и среда программирования. Программисты Unix часто разбивают типичные задачи на более мелкие компоненты и применяют оболочку для управления ими.
  
 Существует множество различных оболочек Unix (bash, zsh, fish...), но все они - производные от оболочки Bourne shell (/bin/sh), стандартной оболочки, разработанной в компании Bell Labs для ранних версий Unix. Любая система Unix требует ту или иную версию Bourne Существует множество различных оболочек Unix (bash, zsh, fish...), но все они - производные от оболочки Bourne shell (/bin/sh), стандартной оболочки, разработанной в компании Bell Labs для ранних версий Unix. Любая система Unix требует ту или иную версию Bourne
 shell для корректной работы.  shell для корректной работы. 
  
-Система Linux использует расширенную версию оболочки Bourne под названием bash, или Bourne-again. Оболочка bash — это оболочка по умолчанию в большинстве дистрибутивов Linux, и каталог /bin/sh обычно указывает (через линк) на bash в системе Linux.+Система Linux использует расширенную версию оболочки Bourne под названием bash, или Bourne-again. Оболочка bash это оболочка по умолчанию в большинстве дистрибутивов Linux, и каталог /bin/sh обычно указывает (через линк) на bash в системе Linux.
  
-===== 2.3Основные команды =====+===== 2.3 Основные команды =====
  
 ==== ls ==== ==== ls ====
Строка 54: Строка 54:
 </code> </code>
  
-===== 2.4Перемещение по каталогам =====+===== 2.4 Перемещение по каталогам =====
  
 Пути в linux начинаются с / - корневого каталога (**root directory**). Пути в linux начинаются с / - корневого каталога (**root directory**).
Строка 103: Строка 103:
 </code> </code>
  
-===== 2.5Команды среднего уровня =====+===== 2.5 Команды среднего уровня =====
  
 ==== grep ==== ==== grep ====
Строка 117: Строка 117:
 ==== less ==== ==== less ====
  
-Просмотр больших файлов постранично. Пробел — вперед,— назад, q — выход. Поиск: /word (вперед), ?word (назад),— следующее совпадение.+Просмотр больших файлов постранично. Пробел вперед,назад, q выход. Поиск: /word (вперед), ?word (назад),следующее совпадение.
 <code bash> <code bash>
 less /usr/share/dict/words less /usr/share/dict/words
Строка 148: Строка 148:
 ==== find и locate ==== ==== find и locate ====
  
-find — поиск в реальном времени. locate — поиск по индексу (быстрее).+find поиск в реальном времени. locate поиск по индексу (быстрее).
 <code bash> <code bash>
 find dir -name file -print  # с кавычками для шаблонов: find dir -name '*pattern*' find dir -name file -print  # с кавычками для шаблонов: find dir -name '*pattern*'
Строка 193: Строка 193:
 </code> </code>
  
-===== 2.8Переменные окружения и оболочки =====+===== 2.8 Переменные окружения и оболочки =====
  
 ==== Переменные оболочки ==== ==== Переменные оболочки ====
Строка 219: Строка 219:
 </code> </code>
  
-===== 2.10Специальные символы =====+===== 2.10 Специальные символы =====
  
 Общепринятые названия специальных символов, используемых в Linux и Unix. Общепринятые названия специальных символов, используемых в Linux и Unix.
Строка 241: Строка 241:
 | ''_'' | Нижнее подчеркивание (underscore, under) | Заменитель пробела в именах | | ''_'' | Нижнее подчеркивание (underscore, under) | Заменитель пробела в именах |
  
-===== 2.11Редактирование в командной строке =====+===== 2.11 Редактирование в командной строке =====
  
 Клавиши со стрелками работают для редактирования, но лучше использовать сочетания управляющих клавиш (Ctrl). Клавиши со стрелками работают для редактирования, но лучше использовать сочетания управляющих клавиш (Ctrl).
Строка 256: Строка 256:
 | Ctrl+K | Стереть от курсора до конца строки | | Ctrl+K | Стереть от курсора до конца строки |
 | Ctrl+Y | Вставить стертый текст | | Ctrl+Y | Вставить стертый текст |
 +
 +===== 2.13 Онлайн-поддержка =====
 +
 +Страницы руководства (**man pages**) - основной источник документации.
 +
 +Просмотр справки для команды:
 +<code bash>
 +man ls
 +</code>
 +
 +Поиск по ключевому слову:
 +<code bash>
 +man -k keyword
 +# Пример: man -k sort
 +</code>
 +
 +**Разделы руководства:**
 +
 +^ Раздел ^ Описание ^
 +| 1 | Пользовательские команды |
 +| 2 | Системные вызовы |
 +| 3 | Библиотеки программирования Unix |
 +| 4 | Интерфейсы устройств и драйверы |
 +| 5 | Файлы конфигурации системы |
 +| 6 | Игры |
 +| 7 | Форматы файлов, соглашения, кодировки |
 +| 8 | Системные команды и серверы |
 +
 +Просмотр определённого раздела:
 +<code bash>
 +man 5 passwd
 +</code>
 +
 +**Дополнительная справка:**
 +  * **--help** или **-h** - краткая справка для команды
 +  * **info command** - документация формата GNU info
 +  * **/usr/share/doc** - документация пакетов
 +
 +===== 2.14 Ввод и вывод командной оболочки =====
 +
 +==== Перенаправление стандартного вывода ====
 +
 +Отправить вывод в файл (перезаписать):
 +<code bash>
 +command > file
 +</code>
 +
 +Добавить вывод в конец файла:
 +<code bash>
 +command >> file
 +</code>
 +
 +Конвейер (pipe) - отправить вывод одной команды в другую:
 +<code bash>
 +head /proc/cpuinfo | tr a-z A-Z
 +</code>
 +
 +==== Стандартная ошибка (stderr) ====
 +
 +Перенаправить ошибку в файл:
 +<code bash>
 +ls /fffffffff > f 2> e
 +</code>
 +
 +Перенаправить ошибку в того же места, что и стандартный вывод:
 +<code bash>
 +ls /fffffffff > f 2>&1
 +</code>
 +
 +Идентификаторы потоков: **1** = stdout (по умолчанию), **2** = stderr.
 +
 +==== Перенаправление ввода ====
 +
 +Направить файл на стандартный ввод:
 +<code bash>
 +head < /proc/cpuinfo
 +</code>
 +
 +**Примечание:** большинство команд Unix принимают имена файлов как аргументы, поэтому такое перенаправление редко используется.
 +
 +===== 2.16 Перечисление процессов и управление ими =====
 +
 +**Процесс** - запущенная программа с уникальным числовым идентификатором (**PID**).
 +
 +Просмотр процессов:
 +<code bash>
 +ps
 +</code>
 +
 +Основные поля вывода:
 +
 +^ Поле ^ Описание ^
 +| PID | Идентификатор процесса |
 +| TTY | Терминальное устройство |
 +| STAT | Состояние (S=sleeping, R=running) |
 +| TIME | Процессорное время (мин:сек) |
 +| COMMAND | Команда запуска |
 +
 +==== Параметры команды ps ====
 +
 +  * **ps x** - ваши процессы
 +  * **ps ax** - все процессы в системе
 +  * **ps u** - подробная информация
 +  * **ps w** - полные имена команд
 +  * **ps aux** - комбинация параметров
 +
 +Проверка конкретного процесса:
 +<code bash>
 +ps $$ # Текущая оболочка
 +</code>
 +
 +==== Завершение процесса ====
 +
 +Базовое завершение:
 +<code bash>
 +kill pid
 +</code>
 +
 +^ Сигнал ^ Описание ^
 +| TERM (15) | Завершение (по умолчанию) |
 +| STOP | Приостановка процесса |
 +| CONT | Продолжение процесса |
 +| INT (2) | Прерывание (аналог Ctrl+C) |
 +| KILL (9) | Принудительное завершение (не игнорируется) |
 +
 +<code bash>
 +kill -STOP pid       # Приостановить
 +kill -CONT pid       # Продолжить
 +kill -9 pid          # Принудительное завершение
 +kill -l              # Список сигналов
 +</code>
 +
 +Используйте KILL только в крайнем случае!
 +
 +==== Управление заданиями ====
 +
 +  * **Ctrl+Z** - отправить сигнал TSTP (приостановка)
 +  * **fg** - вывести на передний план
 +  * **bg** - переместить на задний план
 +  * **jobs** - список приостановленных процессов
 +
 +==== Фоновые процессы ====
 +
 +Запуск процесса в фоне:
 +<code bash>
 +gunzip file.gz &
 +</code>
 +
 +Оболочка вернёт приглашение и выведет PID процесса. Процесс продолжит работу после выхода из системы.
 +
 +Для удалённого сеанса используйте **nohup** для сохранения процесса после отключения.
 +
 +**Проблемы фоновых процессов:**
 +  * Процесс может ожидать ввода → использовать перенаправление (раздел 2.14)
 +  * Вывод может помешать текущей работе → перенаправить в файл
 +
 +Обновление экрана терминала:
 +  * **Ctrl+L** - очистка и обновление (bash)
 +  * **Ctrl+R** - обновление строки (или поиск истории)
 +
 +
 +===== 2.17 Режимы файлов и права доступа =====
 +
 +Каждый файл Unix имеет права доступа, определяемые командой ''ls -l''. Режим файла состоит из четырех частей:
 +
 +  * **Тип файла** - первый символ: ''-'' (обычный файл) или ''d'' (каталог)
 +  * **Права пользователя** - владельца файла
 +  * **Права группы** - для пользователей в группе файла
 +  * **Права остальных** - для всех прочих пользователей
 +
 +Каждый набор прав содержит до 3 символов:
 +^ Символ ^ Значение ^
 +| r | Чтение |
 +| w | Запись |
 +| x | Выполнение |
 +| - | Нет прав |
 +
 +При наличии ''s'' вместо ''x'' в правах пользователя - это **setuid**, программа выполняется от имени владельца файла (часто суперпользователя).
 +
 +==== Изменение прав доступа ====
 +
 +Используйте команду ''chmod'':
 +
 +<code bash>
 +chmod g+r file      # добавить чтение группе
 +chmod o+r file      # добавить чтение остальным
 +chmod go+r file     # одной командой
 +chmod go-r file     # удалить права
 +chmod 644 file      # абсолютный режим (восьмеричная система)
 +</code>
 +
 +**Частые абсолютные режимы:**
 +
 +^ Режим ^ Назначение ^ Применение ^
 +| 644 | u: rw, g: r, o: r | Файлы |
 +| 600 | u: rw, g: -, o: - | Файлы (приватные) |
 +| 755 | u: rwx, g: rx, o: rx | Каталоги, программы |
 +| 700 | u: rwx, g: -, o: - | Каталоги, программы (приватные) |
 +| 711 | u: rwx, g: x, o: x | Каталоги (доступны только владельцу) |
 +
 +**Права каталогов:** требуются оба права - ''r'' (просмотр содержимого) и ''x'' (доступ к файлам).
 +
 +**Маска по умолчанию (umask):**
 +
 +<code bash>
 +umask 022   # все видят созданные файлы
 +umask 077   # только владелец видит созданные файлы
 +</code>
 +
 +Поместите в файл запуска для постоянного применения (см. глава 13).
 +
 +==== Использование символических ссылок ====
 +
 +**Символическая ссылка** (symlink) - это файл-псевдоним, указывающий на другой файл или каталог, скрывая пути каталогов.
 +
 +В ''ls -l'' отображается с типом файла ''l'':
 +<code>
 +lrwxrwxrwx 1 ruser users 11 Feb 27 13:52 somedir -> /home/origdir
 +</code>
 +
 +При доступе к ''somedir'' система перенаправляет на ''/home/origdir''. Целевой объект может даже не существовать, но программы вернут ошибку при попытке доступа.
 +
 +Создание:
 +
 +<code bash>
 +ln -s target linkname
 +</code>
 +
 +  * **target** - путь на файл/каталог
 +  * **linkname** - имя создаваемой ссылки
 +  * **флаг -s** - обязателен для символической ссылки
 +
 +Символические vs жесткие ссылки: Без флага ''**-s**'' команда ''ln'' создает **жесткую ссылку** - второе реальное имя того же файла. Жесткие ссылки еще более запутанные; избегайте их до раздела 4.6.
 +
 +===== 2.18 Архивирование и сжатие файлов =====
 +
 +Две основные утилиты для работы с архивами и сжатием: **gzip** и **tar**.
 +
 +==== Утилита gzip ====
 +
 +**gzip** (GNU Zip) - стандартная программа сжатия файлов. Файлы заканчиваются на ''.gz''.
 +
 +<code bash>
 +gunzip file.gz   # распаковать и удалить .gz
 +gzip file        # сжать файл
 +</code>
 +
 +**gzip не создает архивы** (не упаковывает несколько файлов в один)!
 +
 +==== Утилита tar ====
 +
 +**tar** - создает архивы из нескольких файлов и каталогов.
 +
 +<code bash>
 +tar cvf archive.tar file1 file2 ...   # создание архива
 +tar xvf archive.tar                   # распаковка
 +tar tvf archive.tar                   # просмотр содержимого
 +</code>
 +
 +^ Флаг ^ Значение ^
 +| c | Режим создания архива (create) |
 +| x | Режим извлечения (extract) |
 +| t | Режим содержания (table of contents) |
 +| v | Подробный вывод (verbose); vv - с размерами и правами |
 +| f | Файл-параметр; следующий аргумент - имя архива |
 +| p | Сохранить права доступа при распаковке |
 +
 +**Перед распаковкой всегда проверьте архив флагом ''t''** - убедитесь в рациональной структуре каталогов. Создайте временный каталог, если сомневаетесь.
 +
 +**Примечание:** tar не удаляет исходный архив после распаковки.
 +
 +==== Сжатые архивы (.tar.gz) ====
 +
 +Для работы со сжатым архивом - сначала ''gunzip'', потом ''tar'':
 +
 +<code bash>
 +gunzip file.tar.gz
 +tar xvf file.tar
 +</code>
 +
 +Или в один конвейер:
 +
 +<code bash>
 +zcat file.tar.gz | tar xvf -
 +</code>
 +
 +**Быстрое сокращение** - используйте флаг ''z'' в tar:
 +
 +<code bash>
 +tar ztvf file.tar.gz   # просмотр
 +tar zxvf file.tar.gz   # распаковка
 +tar zcvf file.tar.gz file1 file2   # создание
 +</code>
 +
 +**Примечание:** ''.tgz'' = ''.tar.gz'' (сокращение для FAT-файловых систем).
 +
 +==== Утилита zcat ====
 +
 +**zcat** действует как ''gunzip -dc'' - распаковывает и отправляет результат в стандартный вывод. Используется в конвейерах с tar.
 +
 +==== Другие утилиты сжатия ====
 +
 +^ Утилита ^ Суффикс ^ Распаковка ^ Свойства ^
 +| bzip2 | .bz2 | bunzip2 | Сильнее сжимает текст, медленнее gzip |
 +| xz | .xz | unxz | Сильнее сжимает текст, медленнее gzip |
 +| zip/unzip | .zip | unzip | Совместимы с Windows |
 +| compress | .z | gunzip | Древний стандарт Unix (только распаковка) |
 +
 +===== 2.19 Основная иерархия каталогов Linux =====
 +
 +Структура каталогов определена Стандартом иерархии файловой системы (FHS). Вот основные подкаталоги корневого каталога ''/'' :
 +
 +^ Каталог ^ Описание ^
 +| /bin | Исполняемые файлы основных Unix-команд (''ls'', ''cp'' и т.д.). Большинство на C, некоторые — скрипты оболочки. |
 +| /dev | Файлы устройств (см. глава 3). |
 +| /etc | Центральный каталог конфигурации системы: пароли пользователей, загрузочные файлы, сетевые настройки. |
 +| /home | Домашние (личные) каталоги обычных пользователей. |
 +| /lib | Библиотеки (library). Содержит разделяемые библиотеки, используемые исполняемыми файлами. /usr/lib включает статические и прочие вспомогательные файлы. |
 +| /proc | Системная статистика через интерфейс каталогов/файлов. Информация о процессах и параметры ядра. |
 +| /run | Данные времени выполнения системы: PID-файлы, сокеты, состояние, системный журнал. (В старых системах — /var/run) |
 +| /sys | Интерфейс к устройствам и системе (см. глава 3). |
 +| /sbin | Системные исполняемые файлы для администраторов. Обычные пользователи не имеют доступа. |
 +| /tmp | Временные файлы. Любой пользователь может читать/писать. **⚠️ Не сохраняйте важные файлы** — очищается при загрузке. |
 +| /usr | Основная иерархия системы Linux (см. раздел ниже). Содержит программы и данные пользователей. |
 +| /var | Переменные данные: системные журналы, отслеживание активности, кэши, управляемые системными программами. |
 +| /boot | Файлы загрузчика и ядра. Первый этап запуска Linux (см. глава 5). |
 +| /media | Базовый каталог для съемных носителей (флеш-накопители). |
 +| /opt | Дополнительное ПО третьих производителей. Используется не всеми системами. |
 +
 +==== Каталог /usr ====
 +
 +Содержит большую часть пользовательских программ и данных системы. Структура повторяет корневой каталог (например, ''/usr/bin'' и ''/usr/lib''):
 +
 +^ Каталог ^ Описание ^
 +| /usr/bin | Пользовательские исполняемые файлы. |
 +| /usr/sbin | Системные исполняемые файлы. |
 +| /usr/lib | Библиотеки (статические, разделяемые и вспомогательные файлы). |
 +| /usr/include | Файлы заголовков для компилятора C. |
 +| /usr/local | Место для установки собственного ПО администраторами. Структура как в / и /usr. |
 +| /usr/man | Страницы руководства. |
 +| /usr/share | Файлы, совместимые со всеми Unix-системами. Вспомогательные данные, читаемые программами. (Исторически — для сетевого общего доступа) |
 +
 +**Историческая причина:** Разделение системы между ''/'' и ''/usr'' было сделано для снижения требований к пространству корневого каталога.
 +
 +==== Местонахождение ядра ====
 +
 +**Ядро Linux** обычно расположено как двоичный файл:
 +
 +<code>
 +/vmlinuz    или    /boot/vmlinuz
 +</code>
 +
 +Загрузчик (boot loader) загружает этот файл в память при запуске системы (см. глава 5). После запуска основной файл ядра не используется.
 +
 +**Загружаемые модули ядра** расположены в папке:
 +
 +<code>
 +/lib/modules
 +</code>
 +
 +Ядро загружает и выгружает эти модули по требованию во время работы системы.
 +