Основы Linux

Linux — семейство Unix-подобных операционных систем на базе ядра Linux. Обычно пользователь работает с дистрибутивом: ядром, системными утилитами, менеджером пакетов, библиотеками и прикладными программами.

Команды и имена файлов чувствительны к регистру:

ls
LS  # другое имя; обычно такой команды нет

Комментарий в shell начинается с #:

# Показать содержимое текущего каталога
ls

Установка и выбор дистрибутива

Популярные варианты:

При выборе учитывают назначение системы, стабильность, частоту обновлений, поддержку оборудования, документацию, менеджер пакетов и требования к ресурсам.

Дистрибутив обычно загружается как ISO-образ и записывается на USB-накопитель. Многие настольные системы поддерживают Live-режим: Linux запускается без установки, что позволяет проверить сеть, звук и другое оборудование.

Перед установкой:

Проверка SHA-256:

sha256sum linux-image.iso

Минимальная установка обычно использует корневой раздел /, EFI-раздел при UEFI и swap-файл или swap-раздел. Отдельно могут выделяться /home, /var и /boot. Для первой установки безопаснее автоматическая разметка установщика.

Менеджеры пакетов

Семейство Инструмент Пример
Debian, Ubuntu, Mint apt sudo apt install tree
Fedora, Rocky, AlmaLinux dnf sudo dnf install tree
Arch Linux pacman sudo pacman -S tree
openSUSE zypper sudo zypper install tree

Перед установкой пакетов в Debian/Ubuntu обновляют индекс:

sudo apt update
sudo apt install tree

sudo выполняет отдельную команду с повышенными привилегиями. Используйте его только при необходимости.


Работа в терминале

Терминал предоставляет текстовый интерфейс, а shell читает и выполняет команды. Распространённые оболочки: bash, zsh, fish, dash.

Узнать оболочку входа:

echo "$SHELL"

Узнать shell текущего процесса:

ps -p $$ -o comm=

Команда обычно состоит из программы, опций и аргументов:

ls -la /var/log

Длинные опции начинаются с --:

ls --all --human-readable

Полезные сочетания:

Клавиши Действие
Tab Автодополнение команды или пути
, История команд
Ctrl+C Прервать команду
Ctrl+D Передать EOF; часто закрыть shell
Ctrl+L Очистить экран
Ctrl+A, Ctrl+E Начало и конец строки
Ctrl+R Поиск по истории
history   # показать историю
!!        # повторить последнюю команду

Не запускайте неизвестные команды, особенно через sudo.


Файловая система Linux и FHS

Linux использует единое дерево каталогов с корнем /. Диски и сетевые ресурсы подключаются к нему через точки монтирования.

/home/alex/projects/app/main.py

Корень / не следует путать с домашним каталогом администратора /root.

Основные каталоги

Каталог Назначение
/ Корень дерева
/boot Ядро и файлы загрузчика
/dev Файлы устройств
/etc Общесистемная конфигурация
/home Домашние каталоги пользователей
/media Автоматически подключаемые носители
/mnt Временные точки монтирования
/opt Дополнительное стороннее ПО
/proc Виртуальные данные о процессах и ядре
/root Домашний каталог root
/run Данные работающей системы
/sys Интерфейс к устройствам и ядру
/tmp Временные файлы
/usr Основные программы, библиотеки и общие данные
/var Журналы, кэш, очереди и другие изменяемые данные

В современных системах /bin, /sbin и /lib часто являются ссылками на каталоги внутри /usr.

Пути

Абсолютный путь начинается с /:

cd /var/log

Относительный путь вычисляется от текущего каталога:

cd projects/app
Обозначение Значение
. Текущий каталог
.. Родительский каталог
~ Домашний каталог
- Предыдущий каталог для cd
cd ..
cd ~/projects
cd -

Пути с пробелами заключают в кавычки:

cd "Мои документы"
cp "отчёт за май.txt" ~/backup/

Скрытые имена начинаются с точки: .bashrc, .config, .git.

Монтирование

findmnt       # файловые системы и точки монтирования
lsblk -f      # блочные устройства и их файловые системы
df -h         # занятое и свободное место

Ручное монтирование:

sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data

Размонтирование:

sudo umount /mnt/data

Постоянное монтирование настраивается в /etc/fstab. Перед изменением сделайте копию:

sudo cp /etc/fstab /etc/fstab.backup

Пример записи:

UUID=1234-ABCD  /mnt/data  ext4  defaults,nofail  0  2

Проверка после редактирования:

sudo mount -a

Ошибка в /etc/fstab может нарушить загрузку системы.


Команды для файлов и каталогов

pwd

Показывает текущий рабочий каталог:

pwd
pwd -P  # физический путь без символических ссылок

ls

Показывает содержимое каталога:

ls
ls -la
ls -lh /var/log
ls -ld ~/projects
Опция Назначение
-l Подробный формат
-a Включая скрытые элементы
-h Читаемые размеры вместе с -l
-R Рекурсивный просмотр
-t Сортировка по времени
-S Сортировка по размеру
-d Показать сам каталог

cd

cd /etc       # абсолютный путь
cd ~/projects # путь от домашнего каталога
cd ..         # на уровень выше
cd -          # предыдущий каталог
cd            # домашний каталог

mkdir

mkdir reports
mkdir -p project/src/components
mkdir images styles scripts

-p создаёт недостающие родительские каталоги и не сообщает об ошибке, если каталог уже существует.

touch

Обновляет время файла, а при отсутствии обычно создаёт пустой файл:

touch notes.txt
touch index.html styles.css script.js

Создание файла с текстом:

printf '%s\n' 'Hello, Linux!' > hello.txt

cp

cp source.txt copy.txt
cp report.pdf ~/backup/
cp -r project project-backup
cp -a website/ website-backup/
Опция Назначение
-r, -R Рекурсивно копировать каталог
-a Архивный режим с сохранением атрибутов
-i Подтверждение перед перезаписью
-n Не перезаписывать существующее
-v Показывать действия

mv

Перемещает или переименовывает:

mv draft.txt final.txt
mv final.txt ~/documents/
mv -i source.txt destination.txt

В пределах одной файловой системы операция обычно выполняется быстро. Между файловыми системами данные копируются, затем исходник удаляется.

rm

rm -i notes.txt
rmdir empty-directory
rm -ri old-project
Опция Назначение
-r, -R Рекурсивное удаление
-i Запрашивать подтверждение
-f Не запрашивать подтверждение
-v Показывать удаляемые элементы

Важно: rm обычно удаляет без корзины. Комбинация rm -rf особенно опасна. Перед удалением проверяйте путь через pwd и ls.

find

Поиск по имени:

find ~/projects -name "README.md"
find . -iname "*.jpg"

По типу, размеру и времени:

find . -type f
find . -type d
find /var/log -type f -size +100M
find . -type f -mtime -7

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

find . -type f -name "*.log" -exec gzip {} +

Перед удалением сначала проверьте список:

find . -type f -name "*.tmp"
find . -type f -name "*.tmp" -exec rm -i {} \;

which

Ищет исполняемый файл в каталогах из $PATH:

which python3

Для алиасов, функций и встроенных команд информативнее:

type ls
type -a python3
command -v git

Шаблоны и кавычки

Shell раскрывает шаблоны до запуска команды:

Шаблон Значение
* Любая последовательность символов
? Один символ
[abc] Символ из набора
[0-9] Символ из диапазона
ls *.txt
cp image?.png ~/backup/

-- завершает список опций и помогает с именами, начинающимися с дефиса:

rm -- -strange-file

Одинарные кавычки сохраняют текст буквально, двойные разрешают подстановки:

echo '$HOME'              # напечатает $HOME
echo "$HOME"             # напечатает путь
echo "Сегодня: $(date +%F)"

Переменные с путями заключайте в двойные кавычки:

cp "$source_file" "$backup_dir/"

Права доступа

Пример ls -l:

-rwxr-x--- 1 alex developers 2048 Sep 4 12:00 deploy.sh

Первый символ обозначает тип (- — файл, d — каталог). Следующие тройки — права владельца, группы и остальных.

Право Для файла Для каталога
r Читать содержимое Читать список имён
w Изменять содержимое Создавать, удалять и переименовывать элементы
x Запускать Входить и обращаться к объектам внутри

chmod

Категории: u — владелец, g — группа, o — остальные, a — все.

chmod u+x script.sh
chmod g+w shared.txt
chmod o-r secret.txt
chmod u=rw,g=r,o= report.txt

Числовые значения: r=4, w=2, x=1.

Режим Значение
644 Владелец читает и пишет, остальные читают
755 Владелец имеет все права, остальные читают и выполняют
600 Только владелец читает и пишет
700 Только владелец имеет все права
chmod 644 document.txt
chmod 755 script.sh
chmod 600 private.key

Не используйте chmod -R 777 как универсальное решение. Файлам и каталогам часто нужны разные режимы:

find website -type d -exec chmod 755 {} +
find website -type f -exec chmod 644 {} +

chown

sudo chown alex report.txt
sudo chown alex:developers report.txt
sudo chown :developers report.txt
sudo chown -R alex:developers /srv/project

Последняя команда изменяет владельца рекурсивно, поэтому требует осторожности.

umask

umask снимает права при создании объектов:

umask
umask -S
umask 027  # установить для текущего shell

Базовые права обычно равны 666 для файлов и 777 для каталогов. При umask 022 новые файлы обычно получают 644, каталоги — 755. При umask 077 получаются 600 и 700.


Потоки, перенаправления и пайпы

У процесса обычно есть три стандартных потока:

Номер Имя Назначение
0 stdin Стандартный ввод
1 stdout Стандартный вывод
2 stderr Поток ошибок

Перенаправления

ls -la > files.txt          # перезаписать файл выводом
date >> events.log          # добавить вывод в конец
sort < names.txt            # взять стандартный ввод из файла
find /root 2> errors.log    # записать только ошибки
command > out.log 2> err.log
command > all.log 2>&1      # вывод и ошибки в один файл

Отбросить вывод:

command > /dev/null 2>&1

Порядок важен: 2>&1 направляет stderr туда, куда stdout направлен в этот момент.

Пайпы

Пайп | передаёт stdout первой команды в stdin второй:

ls -la | less
ps aux | grep nginx
find . -type f | wc -l
cut -d: -f7 /etc/passwd | sort | uniq -c

Обычный пайп не передаёт stderr. В Bash оба потока можно объединить:

command 2>&1 | less
command |& less

tee одновременно показывает и сохраняет данные:

journalctl -b | tee boot.log | less
echo "new line" | tee -a notes.txt

Запись в защищённый файл:

echo "value" | sudo tee /etc/example.conf > /dev/null

Коды завершения

command
echo $?

0 обычно означает успех.

mkdir backup && cp report.txt backup/
cp report.txt backup/ || echo "Ошибка копирования" >&2

После && команда выполняется при успехе, после || — при ошибке.


Получение справки

man

man ls
man chmod
man bash

Клавиши просмотра: Space — вперёд, b — назад, /текст — поиск, n — следующее совпадение, q — выход.

Поиск страниц по описанию:

man -k archive
apropos archive

Разделы руководства:

Раздел Содержание
1 Пользовательские команды
2 Системные вызовы
3 Библиотечные функции
5 Форматы файлов и конфигурация
7 Обзоры и соглашения
8 Административные команды
man 1 passwd  # команда
man 5 passwd  # формат /etc/passwd

--help, help, info

ls --help
find --help
help cd       # встроенная команда Bash
help export
info coreutils
info tar

--help даёт краткую справку, man — справочную страницу, info иногда содержит более подробное руководство. Для встроенных команд Bash используйте help.


Архивы: tar, gzip, zip

Архивирование объединяет файлы, сжатие уменьшает объём. tar создаёт архив, gzip сжимает поток, ZIP сочетает обе операции.

tar

tar -cf project.tar project/          # создать .tar
tar -tf project.tar                   # посмотреть содержимое
tar -xf project.tar                   # извлечь
tar -xf project.tar -C restored/      # извлечь в каталог
tar -czf project.tar.gz project/      # создать tar.gz
tar -xzf project.tar.gz               # извлечь tar.gz
tar -cJf project.tar.xz project/      # создать tar.xz
Опция Назначение
-c Создать
-x Извлечь
-t Показать содержимое
-f Указать файл архива
-v Подробный вывод
-z gzip-сжатие
-J xz-сжатие
-C Перейти в каталог перед операцией

Перед извлечением незнакомого архива просмотрите его:

tar -tf archive.tar.gz | less

gzip

gzip large.log          # создаст large.log.gz, заменив исходник
gzip -k large.log       # сохранить исходник
gunzip large.log.gz     # распаковать
gzip -dc large.log.gz | less

gzip не объединяет каталог в один архив; для этого его используют вместе с tar.

zip и unzip

zip documents.zip report.pdf notes.txt
zip -r project.zip project/
unzip -l project.zip
unzip project.zip
unzip project.zip -d restored/

ZIP удобен для обмена между разными операционными системами. tar обычно лучше сохраняет Unix-атрибуты.


Настройка shell: .bashrc и алиасы

~/.bashrc — пользовательский конфигурационный файл Bash для интерактивных сеансов. В нём настраивают алиасы, функции, приглашение и параметры оболочки.

cp ~/.bashrc ~/.bashrc.backup
nano ~/.bashrc
source ~/.bashrc

Точка — короткий аналог source:

. ~/.bashrc

Примеры алиасов:

alias ll='ls -alFh'
alias la='ls -A'
alias grep='grep --color=auto'
alias       # показать все алиасы
alias ll    # показать один алиас
unalias ll  # удалить в текущем сеансе

Для логики и аргументов лучше функция:

mkcd() {
  mkdir -p -- "$1" && cd -- "$1"
}

Добавленная в .bashrc функция будет доступна в новых интерактивных сеансах.

Bash также использует ~/.profile, ~/.bash_profile и общесистемные файлы. Конкретный файл зависит от login/non-login режима и дистрибутива. Ошибочную пользовательскую конфигурацию можно обойти:

bash --norc

Переменные окружения и $PATH

Переменная shell создаётся без пробелов вокруг =:

project_dir="$HOME/projects/app"
echo "$project_dir"

export передаёт переменную дочерним процессам:

export EDITOR=nano
printenv EDITOR
unset EDITOR

Для одной команды:

LANG=C sort names.txt
DEBUG=1 ./app

Распространённые переменные:

Переменная Назначение
HOME Домашний каталог
USER Имя пользователя
SHELL Оболочка входа
PATH Каталоги поиска программ
PWD Текущий каталог
LANG Язык и локаль
EDITOR Предпочитаемый редактор
PAGER Постраничный просмотрщик

$PATH

PATH содержит разделённые двоеточиями каталоги. Поиск идёт слева направо:

echo "$PATH"
export PATH="$HOME/.local/bin:$PATH"
command -v python3
type -a python3

Чтобы настройка сохранялась, добавьте export PATH=... в подходящий файл, например ~/.bashrc или ~/.profile.

Текущий каталог обычно не входит в PATH, поэтому локальный скрипт запускают явно:

chmod u+x script.sh
./script.sh

Не добавляйте . в начало PATH: файл из текущего каталога может подменить системную команду.

Подстановка результата команды:

today=$(date +%F)
archive="backup-${today}.tar.gz"
tar -czf "$archive" ~/documents

Общий пример

# Создать проект
mkdir -p ~/projects/demo/{src,docs,backup}
cd ~/projects/demo

# Создать файлы
printf '%s\n' '#!/usr/bin/env bash' 'echo "Hello, Linux!"' > src/main.sh
printf '%s\n' '# Demo' '' 'Учебный проект.' > docs/README.md

# Настроить права и запустить
chmod 755 src/main.sh
chmod 644 docs/README.md
./src/main.sh

# Скопировать и найти файлы
cp -a src backup/
find . -type f | sort | tee file-list.txt

# Создать архив
cd ~/projects
tar -czf demo-$(date +%F).tar.gz demo/

# Проверить архив
tar -tzf demo-$(date +%F).tar.gz | less

Краткая памятка

Задача Команда
Текущий каталог pwd
Список файлов ls -la
Перейти в каталог cd path
Создать каталог mkdir -p path
Создать пустой файл touch file
Копировать cp source destination
Переместить/переименовать mv source destination
Удалить rm -i file
Найти файл find . -type f -name "name"
Найти программу command -v command
Изменить права chmod 644 file
Изменить владельца sudo chown user:group file
Показать маску umask
Перезаписать файл command > file
Дописать в файл command >> file
Создать .tar.gz tar -czf archive.tar.gz dir/
Извлечь .tar.gz tar -xzf archive.tar.gz
Применить .bashrc source ~/.bashrc
Экспортировать переменную export NAME=value

Безопасная работа