Материал

Linux base

Базовый набор линукс знаний

Команды, утилиты

Запуск команд

  • ; - используется для выполнения нескольких команд последовательно command1 ; command2
  • && - выполняет вторую команду только если первая завершилась успешно (вернула код завершения 0) command1 && command2
  • || - выполняет вторую команду только если первая завершилась неудачно (вернула код завершения, отличный от 0) command1 || command2
  • | - используется для передачи вывода одной команды на вход другой, создавая конвейер (пайплайн) command1 | command2
  • >> и > - перенаправление вывода (stdout) в файл
  • > - перенаправление стандартного вывода в файл, создавая или перезаписывая файл
  • >> - добавление вывода в конец существующего файла command > output.txt<br> command >> output.txt
  • < - чтение ввода команды (stdin) из файла вместо стандартного ввода command < input.txt
  • 2> - перенаправление вывода ошибок (stderr) в файл command 2> error.log

Для управления файлами

ls - просмотр содержимого каталога

По умолчанию показывает текущий каталог. Если в параметрах указать путь, то она перечислит содержимое конечного каталога.

  • ls -l: Выводит более подробную информацию, такую как права доступа, количество жестких ссылок, владелец, группа, размер, время последней модификации и имя файла.
  • ls -a: Выводит все файлы, включая скрытые файлы, имя которых начинается с точки.
  • ls -h: Показывает размеры файлов в удобочитаемом формате, таком как KB, MB, GB.

cat - печатает содержимое файла

Печатает содержимое файла, переданного в параметре, в стандартный вывод. Если передать несколько файлов, команда склеит их. Также можно перенаправить вывод в ещё один файл с помощью символа >.

  • cat -n - вывод с нумерацией строк
  • cat -E - показывать символ конца строки ($)
  • cat -A - показывать непечатные символы и символы конца строки Примеры использования:
  • cat file1.txt file2.txt - конкатенация файлов и вывод на экран
  • cat file1.txt file2.txt > mergedfile.txt - объединение файлов и сохранение в новом файле
  • cat > newfile.txt - создание нового файла, позволяет вводить текст с клавиатуры, который затем будет записан в файл newfile.txt

cd - переход по каталогам

Позволяет перейти из текущего каталога в указанный. Если запустить без параметров - возвращает в домашний каталог. Вызов с двумя точками возвращает на уровень вверх относительно текущего каталога. Вызов с тире (cd -) возвращает к предыдущему каталогу.

pwd - печатает на экран текущий каталог

mkdir - создание нового каталога

Наиболее удобная опция -p (Parents), позволяет создать всю структуру подкаталогов одной командой, даже если они ещё не существуют: mkdir -p home/Загрузки/{папка1,папка2,папка3}

home
└── Загрузки
    ├── папка1
    ├── папка2
    └── папка3

touch — изменяет время доступа и модификации файла

Если файла ещё нет, touch filename создаст пустой файл. С флагом -c отсутствующий файл не создаётся.

file - показывает тип файла, даже без расширения

cp- копирование файлов и каталогов

Утилита имеет два возможных варианта синтаксиса для копирования файлов:

  • копирование файла в другой файл с указанным именем: cp опции /путь/к/файлу/источнику /путь/к/файлу/назначения
  • копирование файла с сохранением его имени в указанную папку: cp опции /путь/к/файлу/источнику /путь/к/директории/назначения cp -r - скопировать папку рекурсивно со всем содержимым cp -f - перезаписывает файлы с одинаковыми именами без подтверждения

mv - перемещение или переименование файлов и каталогов

mv file1 file2 file3 /path/to/destination/ - перемещение нескольких файлов в каталог mv file.txt newfile.txt - переименование файла mv sourcedirectory /path/to/destination/ - перемещение каталога; флаг -r для mv не нужен mv -f file.txt /path/to/destination/ - если файл file.txt уже существует в каталоге /path/to/destination/, он будет перезаписан без запроса подтверждения

rm - удаляет файлы и папки

rm -r directory - удаление каталога и его содержимого rm *.txt - удаляет все файлы с расширением .txt в текущем каталоге find /path/to/files -name "*.tmp" -exec rm {} \; - поиск и удаление всех файлов с расширением .tmp в указанном каталоге

ln (llink) - cоздает жёсткие или символические ссылки на файлы

chmod - изменяет права доступа к файлу

Иллюстрация к материалу «Linux base» Иллюстрация к материалу «Linux base»

chown - изменяет владельца файла

chown john file.txt - изменение владельца файла chown alice:users file.txt - изменение владельца и группы файла chown -R newowner:newgroup directory - рекурсивно изменить владельца и группу для всех файлов и подкаталогов в указанном каталоге chown 1000 filename - изменение владельца по UID chown $USER filename - cмена владельца файла на текущего пользователя

find - поиск файлов и каталогов

find /path/to/search -name filename - простой поиск по имени файла find /path/to/search -type f - ищет только обычные файлы (не каталоги, символические ссылки и т.д.) find /path/to/search -mtime -7 - ищет файлы, измененные в течение последних 7 дней find /path/to/search -name '*pattern*' - поиск по шаблону в имени find /path/to/search -name '*.txt' -exec cat {} \; - выполняет указанную команду для каждого найденного файла. {} заменяется именем файла, а \; означает конец команды Иллюстрация к материалу «Linux base»

du (disk usage) - показывает размер файла или каталога

du - выведет размеры всех подкаталогов в текущем каталоге du -h /path/to/directory - выведет размеры всех подкаталогов в указанном каталоге в удобочитаемом формате du -s /path/to/directory - вывод только общего размера указанного каталога find /path/to/directory -name '*.txt' -exec du -h {} + - вывод размера каждого найденного файла с расширением .txt

df (disk free) - просмотр свободного места на диске

Утилита df позволяет проанализировать свободное пространство на всех подключенных к системе разделах. По умолчанию df использует блоки, размер которых зависит от опций и окружения (часто 1024 байта). Для удобочитаемого вывода используется ключ -h: Иллюстрация к материалу «Linux base» df -h /home показывает файловую систему, на которой расположен каталог /home, а не размер самого каталога. Другие ключи:

  • -m - отображать размер в мегабайтах
  • -T - отображать тип файловой системы
  • -a - включить в список все файловые системы
  • -i - отображать используемые inode

mount / umount - подключение и отключение файловых систем

free - просмотр данных по использованию оперативной памяти

Архивация

tar - архивирование файлов

Архивирование в linux это не одно и то же что и сжатие файлов. Архивирование - это объединение нескольких небольших файлов в один, с целю более удобной последующей передачи, хранения, шифрования или сжатия. Для сжатия применяются другие утилиты, чаще всего - gzip.

  • tar -cvf archive.tar file1 file2 directory1 - создание архива -c - создать архив.
    -v - отобразить подробный вывод.
    -f - указать имя архива
  • tar -xvf archive.tar - распаковка архива -x - распаковать архив
  • tar -czvf archive.tar.gz file1 file2 directory1 - создание архива с сжатием gzip -z - использовать gzip для сжатия
  • tar -xzvf archive.tar.gz - распаковка архива с сжатием gzip
  • tar -xvf archive.tar file1 - извлечение определенных файлов из архива

Для работы с текстом

less - просмотр текстовых файлов постранично

  • Прокрутка вперед и назад:
  • Используйте стрелки вверх и вниз для прокрутки построчно.
  • Используйте пробел для прокрутки на одну страницу вперед.
  • Используйте клавишу b для прокрутки на одну страницу назад.
  • Используйте клавишу q для выхода из less
  • Поиск в тексте:
  • Введите / и затем введите строку для поиска. Например, /search_string.
  • Используйте клавиши n и N для перехода к следующему или предыдущему совпадению.
  • Переход к определенной строке:
  • Введите номер строки и g: например, 100g перейдёт к строке 100. Можно также запустить less +100 filename.
  • Отображение номеров строк:
  • Запустите less с опцией N для отображения номеров строк. Например, less -N filename.

grep - поиск строк текста в файлах или выводе команд

grep "pattern" filename - поиск подстроки в файле grep -r "pattern" /path/to/directory - поиск рекурсивно в файлах, содержащихся в указанном каталоге и его подкаталогах grep '^[[:digit:]]' filename - переносимый поиск строк, начинающихся с цифры grep -n "pattern" filename - отображает номера строк, где найден шаблон grep -m 3 "pattern" filename - ограничивает вывод первыми тремя строками, содержащими совпадение ps aux | grep "process_name" - выводит список всех процессов, а потом ищет процесс с именем "process_name"

head / tail - отображение первых/последних строк файла

По умолчанию каждая утилита выводит десять строк. Но это можно изменить с помощью опции -n: head -n 20 filename - отображение первых 20 строк tail -f filename - вывод последних записей в реалтайме (полезно, например, для логов)

sort - сортировка строк текста по различным критериям

sort -n filename - сортировка по числам sort -r filename - обратная сортировка, то есть в убывающем порядке

wc (word count) - подсчёт количества слов, строк, байт и символов

-l / -w / -c / -m - подсчёт переводов строк / слов / байтов / символов

diff - показывает различия между двумя файлами в построчном сравнении

Обычный формат diff использует команды a, c, d и помечает строки </>. Формат diff -u показывает unified hunks со строками + и -. diff -u originalfile modifiedfile > mypatch.patch - создание патча, который может быть применен к оригинальному файлу для получения модифицированной версии patch originalfile < mypatch.patch - применяет патч к оригинальному файлу, обновляя его согласно изменениям, указанным в патче

Для управления процессами

ps (processes) - просмотр списка запущенных процессов

  • ps aux | grep <название_процесса> Позволяет фильтровать вывод по имени процесса.
  • ps -u <пользователь> Отображает процессы, запущенные указанным пользователем.
  • ps -e или ps -A Показывает все процессы в системе.
  • ps -l Выводит подробный формат вывода, включая дополнительные столбцы, такие как UID (id пользователя), PID (id процесса), PPID (id родительского процесса), C (CPU использование), PRI (приоритет) и другие.

htop - продвинутый монитор процессов с возможностью в реальном времени отслеживать и взаимодействовать с процессами

  • htop -s %CPU - сортировка по использованию процессора
  • htop --tree - отображает процессы в виде дерева, что удобно для понимания их иерархии
  • htop -u <пользователь> - отображение процессов определенного пользователя

kill - отправка сигнала процессу

по умолчанию отправляет сигнал SIGTERM для завершения процесса kill -9 PID - принудительное завершение (SIGKILL) процесса

pkill / killall - завершение процесса по его имени

pgrep - поиск PID процесса по его имени

Команды окружения пользователя

whoami - узнать имя текущего пользователя

id - вывод id пользователя, его основной и остальных групп

date - выводит дату и время в стандартный вывод

alias - создание псевдонимов для других команд

alias - выводит список текущих псевдонимов alias ll='ls -alF' - создает псевдоним ll для команды ls -alF. Теперь, когда вы введете ll в терминале, это будет равносильно выполнению ls -alF unalias ll - удаление псевдонима ll alias grep='grep --color=auto' - cоздание псевдонима с параметрами Псевдонимы действуют только в текущем сеансе терминала, если они не добавлены в файл инициализации оболочки: echo "alias ll='ls -alF'" >> ~/.bashrc

uname - выводит информацию о системе

uname -a выведет Linux vm758213 5.15.0-57-generic #63-Ubuntu SMP Thu Nov 24 13:43:17 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux Linux:
Название ядра операционной системы. vm758213:
Имя хоста. 5.15.0-57-generic:<br>Версия ядра Linux #63-Ubuntu SMP Thu Nov 24 13:43:17 UTC 2022:
Это информация о версии ядра и времени его компиляции. В данном случае, это 63-я сборка ядра, скомпилированная для Ubuntu, выпущенная 24 ноября 2022 года в 13:43:17 по UTC. x86_64 x86_64 x86_64:
Информация об архитектуре процессора. GNU/Linux:
Указание на то, что операционная система является частью семейства GNU и использует ядро Linux.

uptime - выводит время работы системы

sleep - задержка в выполнении команд

может быть использована, например, в скриптах для паузы между какими-то действиями синтаксис: sleep [num][suffix] num - число, определяющее задержку suffix - единицы времени, может быть s(по умолчанию), m, h и d

Для управления пользователями

su (switch user) - переключение на другого пользователя

su без ключей - переключение на root su john - переключение на пользователя john su -s /bin/bash username - запуск сессии su с выбранной оболочкой; постоянную login shell меняют через chsh или usermod -s с нужными правами

sudo (substitute user and do) - выполнить команду от имени другого пользователя

sudo kill PID - завершить процесс от имени root sudo -u username command - выполнить команду от имени username

useradd / userdel / usermod - добавить/удалить/изменить пользователя

passwd - изменить пароль учетной записи пользователя

Для просмотра документации

man - открывает руководство по команде

вывод man более подробный, чем --help

whereis — ищет бинарники, исходники и man-страницы

Чтобы узнать команду, которую выберет текущая shell, используйте command -v program.

Для работы с сетью

ping - проверка доступности хоста и измерения времени, за которое данные достигают его и возвращаются обратно

traceroute - отображает маршрут, который пакет данных проходит по пути от исходного узла к целевому

netstat - отображает различную сетевую статистику, такую как активные сетевые соединения, таблицы маршрутизации

nmap - сканирование сети, обнаружение открытых портов на удаленных узлах

nmap 104.18.39.102 - сканирует 1000 наиболее часто используемых портов на узле 104.18.39.102 nmap localhost - проверяет открытые порты на локальной машине nmap -p- target - осуществляет проверку на открытость всех 65535 TCP-портов на указанном узле

curl - выполнение сетевых операций

curl http://example.com - отправляет GET-запрос по указанному URL curl -O http://example.com/file.txt - загружает файл по указанному URL и сохраняет его с именем file.txt в текущем рабочем каталоге curl -X POST -d "key1=value1&key2=value2" http://example.com/api - отправляет POST-запрос с указанными данными на указанный URL curl -H "Content-Type: application/json" -H "Authorization: Bearer TOKEN" http://example.com/api - отправляет HTTP-запрос с установленными заголовками curl -L http://example.com - следует за редиректами (если они есть) и выводит содержимое окончательного URL

Жесткие и символические ссылки

У объекта файловой системы есть индексный дескриптор (inode), к которому привязаны метаданные: размещение данных, размер, права и временные отметки. Номер inode уникален только внутри конкретной файловой системы; время создания поддерживается не всеми файловыми системами. Имя файла, ссылающееся на его индексный дескриптор, называется жесткой ссылкой. Механизм жестких ссылок – это основной способ обращения к файлам в Unix-подобных операционных системах. Таких ссылок можно создать множество, поэтому удаление жесткой ссылки на файл не приводит к удалению самого файла из системы при наличии у этого файла других жестких ссылок (имен файла). У жестких ссылок есть ограничения:

  • их можно создавать только на файлы, но не на каталоги;
  • жёсткая ссылка не может пересекать границу файловой системы. Символическая ссылка хранит путь к целевому файлу или каталогу. Цель может находиться в другой файловой системе или временно не существовать.

Система прав

Изначально каждый файл имеет три параметра доступа:

  • Чтение (read) - разрешает получать содержимое файла. Для каталога позволяет получить список файлов и каталогов, расположенных в нем;
  • Запись (write) — разрешает изменять содержимое файла. Удаление и переименование контролируются правами родительского каталога;
  • Выполнение (execute) — разрешает запуск файла. Для каталога x означает возможность прохода и доступа к его элементам; Каждый файл имеет три категории пользователей, для которых можно устанавливать различные сочетания прав доступа:
  • Владелец - набор прав для владельца файла; сам статус владельца не гарантирует, что выставлены все биты доступа.
  • Группа - любая группа пользователей, существующая в системе и привязанная к файлу. Но это может быть только одна группа и обычно это группа владельца, хотя для файла можно назначить и другую группу.
  • Остальные - все пользователи, кроме владельца и пользователей, входящих в группу файла. Для просмотра прав файла или каталога используется команда ls. Для смены прав - chmod, для смены владельца - chown.

Сигналы процессам

Управление процессами в Linux осуществляется с помощью сигналов. Сигналы передает система, но также их может передавать пользователь с помощью специальных команд или даже сочетаний клавиш в терминале. Когда процессу приходит сигнал о необходимости завершиться, он должен выполнить некоторые подготовительные действия. Необходимо завершить дочерние процессы, удалить временные файлы, сокеты и так далее. Но в зависимости от сложности ситуации процесс может реагировать не на все сигналы. Рассмотрим основные сигналы, которые используются для завершения процесса:

  • **SIGQUIT (3) - **это еще один сигнал, который отправляется с помощью сочетания клавиш, программе, запущенной в терминале. Он сообщает ей что нужно завершиться и программа может выполнить корректное завершение или проигнорировать сигнал. В отличие от предыдущего, она генерирует дамп памяти. Сочетание клавиш Ctrl+/;
  • SIGHUP (1) - сообщает о потере управляющего терминала; многие daemon-процессы также трактуют его как команду перечитать конфигурацию;
  • SIGINT (2) - interrupt, обычно отправляется foreground-процессу сочетанием Ctrl+C; процесс может обработать или проигнорировать его;
  • SIGTERM (15) - стандартный запрос на завершение. Процесс может перехватить его и выполнить cleanup, а может проигнорировать; kill -15 12345 - отправляет SIGTERM процессу 12345 (дефолтный сигнал для kill).
  • SIGKILL (9) - немедленное завершение ядром; сигнал нельзя перехватить, заблокировать или проигнорировать. Он не гарантирует завершение дочерних процессов; kill -9 12345 - отправляет SIGKILL процессу с PID 12345. Команда kill 12345 без флага отправляет SIGTERM;

Фоновый режим выполнения заданий

Задание (job) — команда или pipeline, которыми управляет shell. & запускает job в фоне и возвращает prompt, но процесс всё ещё связан с терминалом; попытка читать из терминала обычно приостанавливает background job через job control. jobs - посмотреть активные задачи в фоне fg %1 - вернуть задачу с номером 1 на передний план Ctrl+Z - приостановить задачу, bg - продолжить последнюю приостановленную задачу в background

Официальные источники