Базовые знания Linux админа
Примечание
В данной серии не будет теории и прочего
Это абсолютный базис-гайд по установке ОС и базовым навыкам в терминале
В конце будет рассмотрено несколько современных технологий в простых реализациях
После прохождения гайда у вас будет машина и несколько популярных сервисов
Все. Дальше - сами, книги, видео, стажировка
Этот гайд - выжимка на многолетние накопления вопросов на канале и сайте
Гайд будет доступен на моем сайте:
Видео будут доступны на моем канале YouTube:
https://www.youtube.com/channel/UCR6j95DKI80MFXIw2iJ3f1w
План:
2 часть — базовые навыки
Подключение к системе по сети мы будем осуществлять с помощью ssh клиента
На этапе установки мы отметили галку OpenSSH сервера, что позволит нам подключаться у серверу по протоколу ssh обращаясь на 22 порт ip-адреса сервера
Существует множество ssh клиентов, конкретно я использую Putty
Окно подключения выглядит так:
Выше вбит адрес, который я задал при установке
Изменил шрифт на больший
И сохраняем настройки сессии
При первом подключении сервер представится с помощью fingerprint
Отпечаток пальца (fingerprint) основан на открытом (pub) ключе хоста
Обычно - "/etc/ssh/ssh_host_rsa_key.pub"
Служит для проверки хоста, к которому вы подключаетесь, поясню
Если отпечаток пальца (fingerprint) изменился, значит компьютер, к которому вы подключаетесь, изменил свой открытый (pub) ключ
Это может быть связано с переустановкой ssh, но это также может указывать на то, что вы подключаетесь к другому компьютеру с тем же доменом или IP
Такое может произойти, когда вы подключаетесь через что-то вроде балансировщика нагрузки
Или что вы подвергаются атаке "человек посередине", когда злоумышленник каким-то образом перехватывает или перенаправляет ваше ssh-соединение для подключения к другому хосту, который может скомпрометировать вашего пользователя и пароль
Вывод: если вас предупреждают об изменении отпечатка пальца, будьте осторожны и дважды проверьте, действительно ли вы подключаетесь к правильному хосту через безопасное соединение
В данном случае у нас все в порядке, соглашаемся
После соглашения подключиться мы попадем в терминал
Терминал в Linux - устройство ввода команд и получения обратной связи от сервера
Попросту - устройство ввода-вывода
В Linux вся навигация идет от "корня" - /
Команды могут иметь ключи, которые изменяют функционал команд
К самим командам существуют мануалы
Давайте приведем несколько примеров для базовых навыков работы с Linux
Навигация, перемещение, манипуляции с файлами и директориями
Перемещаемся по каталогам с помощью команды cd и узнаем текущее положение с помощью команды pwd:
peasant@server:~$ pwd
/home/peasant
peasant@server:~$ cd /
peasant@server:/$ pwd
/
peasant@server:/$ cd /home/peasant/
peasant@server:~$ pwd
/home/peasant
Теперь попробуем создать, удалить, переместить файлы и директории:
Создание пустого файла:
peasant@server:~$ touch testfile1
Создаст файл со строкой "teststring1" (stdout):
peasant@server:~$ echo "teststring1" > testfile2
Добавит строку "teststring2" в файл (stdout):
peasant@server:~$ echo "teststring2" >> testfile2
Потоки ввода-вывода
Принимается с клавиатуры терминала
0 — стандартный ввод (stdin)
Выводится на экран терминала
1 — стандартный вывод (stdout)
Выводится на экран терминала
2 — стандартная ошибка (stderr)
Откроем файл редактором vi:
peasant@server:~$ vi testfile1
Чтоб войти в режим изменения нажмите "i"
Создайте пару строк (например 123 + Enter + 321)
Выйдите из режима изменения в командный режим - "Esc"
Внесите изменения и выйдите - :wq + Enter
Существует множество других редакторов текста в Linux (например nano)
Редактор "vi" имеет расширенную версию - "vim"
Оставлю шпаргалку по использованию:
Выведите на экран содержимое файлов:
peasant@server:~$ cat testfile1
123
321
peasant@server:~$ cat testfile2
teststring1
teststring2
Выведите на экран содержимое текущего каталога:
peasant@server:~$ ls
testfile1 testfile2
Ключ "-l" расширяет выводимую информацию:
peasant@server:~$ ls -l
total 8
-rw-rw-r-- 1 peasant peasant 8 Oct 30 06:32 testfile1
-rw-rw-r-- 1 peasant peasant 24 Oct 30 06:30 testfile2
Создадим каталог:
peasant@server:~$ mkdir testfiles
Переместим туда файлы:
peasant@server:~$ mv testfile1 testfile2 ./testfiles
Проверим, что они переместились:
peasant@server:~$ ls -l
total 4
drwxrwxr-x 2 peasant peasant 4096 Oct 30 06:34 testfiles
peasant@server:~$ ls -l ./testfiles/
total 8
-rw-rw-r-- 1 peasant peasant 8 Oct 30 06:32 testfile1
-rw-rw-r-- 1 peasant peasant 24 Oct 30 06:30 testfile2
Пробуем удалить директорию:
peasant@server:~$ rm testfiles
rm: cannot remove 'testfiles': Is a directory
Для рекурсивного удаления не пустой директории используем ключ "-r":
peasant@server:~$ rm -r testfiles
peasant@server:~$ ls -l
total 0
Вывести справку по команде (например rm):
peasant@server:~$ man rm
В разделе "OPTIONS" находим ключи, где мы увидим наш ключ "-r":
By default, rm does not remove directories. Use the --recursive (-r or -R)
Для самостоятельной работы попробуйте команду копирования файлов - "cp"
Кратко о процессах и потоках в Linux
Упрощенно говоря, операционная система Linux состоит из ядра и пользовательского пространства
Ядро взаимодействует с оборудованием и ресурсами вычислительной машины
Пользовательское пространство ограничено в доступе к ресурсам
В пользовательском пространстве существуют процессы и потоки (по сути тоже являются процессами, имеют собственные PID, однако делят память процесса, которому они принадлежат)
Каждый процесс будет иметь идентификаторы PID (process ID) и PPID (parent process ID)
Процессы могут создавать копии(fork), при этом происходит копирование ресурсов процесса
Теперь посмотрим процессы в системе с помощью команды "ps":
peasant@server:~$ ps
PID TTY TIME CMD
1666 pts/0 00:00:00 bash
2077 pts/0 00:00:00 ps
peasant@server:~$ ps -a
PID TTY TIME CMD
2078 pts/0 00:00:00 ps
peasant@server:~$ ps -au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 620 0.0 0.1 5828 1832 tty1 Ss+ 05:58 0:00 /sbin/agetty
peasant 1666 0.0 0.5 8404 5484 pts/0 Ss 06:07 0:00 -bash
peasant 2079 0.0 0.3 8876 3476 pts/0 R+ 07:14 0:00 ps -au
peasant@server:~$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 1.1 168744 12872 ? Ss 05:58 0:04 /sbin/init ma
root 2 0.0 0.0 0 0 ? S 05:58 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 05:58 0:00 [rcu_gp]
...Вывод обрезан...
Для самостоятельной работы разберитесь с помощью man, что означают ключи aux
Процессами можно управлять, отправляя сигналы системе с помощью команды "kill"
Синтакисис:
kill [-s <сигнал>] <PID>
Перечень сигналов можно вывести командой kill -l:
Особенности самых часто используемых сигналов:
1) SIGHUP - понимается процессами как: перечитать свои конфигурационные файлы
2) SIGINT - немедленно завершает процесс, можно блокировать и перехватывать
3) SIGQUIT - идентичен SIGTERM, позволяет сохранять дамп памяти
9) SIGKILL - не блокируется, не перехватывается, немедленно завершает процесс
15) SIGTERM - завершает корректно процесс, блокируется и перехватывается
Пример передачи сигнала - 9 (& - создает процесс в фоне):
peasant@server:~$ sleep 600 &
[1] 2122
$ kill -9 2122
peasant@server:~$ ps ax | grep sleep
[1]+ Killed sleep 600
Чтоб посмотреть дерево процессов, воспользуйтесь утилитой "pstree":
peasant@server:~$ pstree
systemd─┬─accounts-daemon───2*[{accounts-daemon}]
├─agetty
├─atd
├─cron
├─rsyslogd───3*[{rsyslogd}]
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-network
├─systemd-resolve
...Вывод обрезан...
Для просмотра и управления процессами в интерактивном режиме существуют команды "top" и "htop"
TOP постоянно обновляет информацию о процессах в режиме реального времени, по дефолту выводит топ 20 процессов по потреблению CPU
TOP - имеет команды:
h - справка
k - ввести PID процесса для команды kill
r - указать PID для изменения параметра nice (приоритет процесса, -20 макс. приоритет, 19 мин. приоритет, 0 — по умолчанию)
q - завершить исполнение top
HTOP - более продвинутая команда по сравнению с TOP
Распознает мышь, имеет возможность управления, выделения процессов мышью и передачу горячих команд
Попробуйте поработать с ней самостоятельно
Установка ПО из репозиториев в Ubuntu
Репозитории - сервера-хранилища ПО
ОС подключается к репозиториям через сеть, с помощью репозиториев контролируются обновления ПО
После установки Ubuntu уже имеет подключенный, стандартный репозиторий ПО
Структура репозитория в Ubuntu
Имеет четыре секции:
Main — свободное ПО, официально поддерживаемое
Restricted — проприетарное ПО, официально поддерживаемое
Universe — свободное ПО, официально не поддерживаемое, поддерживается сообществом
Multiverse — проприетарное ПО, официально не поддерживаемое
Основные репозитории Ubuntu:
release - пакеты на момент выхода релиза
releasesecurity - пакеты критических обновлений безопасности
releaseupdates - пакеты обновления системы (более поздние версии ПО, вышедшие после релиза)
releasebackports - бэкпорты более новых версий ПО, которое доступно в нестабильных версиях ОС
partner - репозиторий компаний партнеров
Существует большое количество сторонних репозиториев от авторов ПО
Список подключенных репозиториев находится по пути:
/etc/apt/sources.list
Подключить репозиторий можно командой (sudo - команда для получения прав суперпользователя):
sudo apt-add-repository Имя_Репозитория
Или отредактировать вручную файл "sources.list" и дать команду:
sudo apt-get update
Менеджер ПО - apt-get
apt-get - утилита управления пакетами, требует прав суперпользователя (root)
С помощью sudo мы можем выполнять утилиты с правами суперпользователя
Основные команды:
apt-get update - обновить информацию о пакетах из репозиториев
apt-get install nano - установить пакет nano
apt-get upgrade - оновление пакетов, для которых в репозиториях доступны новые версии
apt-get remove nano - удаление пакета nano из системы
apt-get purge nano - удаление пакета nano и очистка системы от его конфигурационных файлов
apt-get autoremove - очистка системы от ненужных пакетов (если пакет был установлен не сам по себе, а как зависимость для другого пакета, который был удалён)
apt-cache – утилита запросов к кешу apt
Основные команды:
apt-cache search - поиск пакета по части названия или описания (понимает регулярные выражения)
apt-cache show - информация о пакете
apt-cache depends - зависимости указанного пакета
Логи ОС Linux
Вся информация, ошибки ОС, работа сервисов и прочее хранятся в журналах системы
По умолчанию каталог - /var/log
Общие логи:
/var/log/syslog
/var/log/messages
Лог ядра:
/var/log/dmesg
Вы можете просматривать журналы с помощью вывода cat, head, tail, или да текстовыми редакторами
Пример вывода в реальном времени информации из журнала:
peasant@server:~$ tail -f /var/log/syslog
Oct 30 06:50:45 server systemd[1]: Finished Daily apt upgrade and clean activities.
Oct 30 07:17:01 server CRON[2083]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
...
Oct 30 07:58:18 server systemd[1]: Started PackageKit Daemon.
Oct 30 08:03:24 server PackageKit: daemon quit
Oct 30 08:03:24 server systemd[1]: packagekit.service: Succeeded.
В Ubuntu сеть настраивается в автоматически создаваемом файле - /etc/netplan/*.yaml
Пример моего файла, автоматически созданного при установке:
peasant@server:~$ cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp0s3:
addresses:
- 192.168.0.180/24
gateway4: 192.168.0.1
nameservers:
addresses:
- 8.8.8.8
search:
- local
version: 2
Тут для примера забит адрес сервера - 192.168.0.180
Имя сетевой карты - enp0s3
Если необходимо внести изменения - сохраняем, даем команду:
sudo netplan apply
Команда "ip a" выдаст нам текущие настройки сетевых интерфейсов