Заранее прошу прощения у опытных пользователей Linux, если допустил где-то ляпы… Что взять с чайника? 🙂
В тексте ниже в качестве приглашения (prompt) используется символ доллара.
Package Management
Разные дистрибутивы Linux включают в себя разные пакетные менеджеры. Например:
— Debian — apt-get
— RedHat — dnf или yum
О том, что такое пакетные менеджеры, читайте статью Linux Package Management.
Утилиты вроде apt-get и dnf — более высокоуровневые — они не заставляют пользователя указывать точную версию пакета и они сами устанавливают нужные зависимости пакета. Но за ними стоят низкоуровневые утилиты: rpm, dpkg, которые такой функциональностью не обладают. Существуют пакетные менеджеры с графическим пользовательским интерфейсом, например gnome-software, yast, yumex-dnf.
Как установить нужный пакет:
$ sudo apt install packagename
# redhat family
$ sudo dnf install packagename
Иногда нужно узнать, к какому пакету (или пакетам) принадлежит тот или иной файл:
$ apt-file search /path/to/filename
# redhat family
$ dnf provides /path/to/filename
Надо заметить, что менеджер пакетов берет пакеты из неких репозиториев. Этих репозиториев много, и пакетный менеджер ищет в них пакет, который вы хотите установить. Иногда нужного репозитория в списке нет, и его нужно добавить — об этом читайте статью How To Enable and Install EPEL Repo on CentOS 8.
Различные дистрибутивы (разные семейства) Linux (RedHat, Ubuntu, OpenSUSE и т. д.) не очень-то совместимы между собой — в том плане, что какие-то пакеты могут быть предназначены для какого-то определенного дистрибутива Linux и не предназначены для другого.
Запуск утилит
В Linux устанавливать пакеты разрешено не всем пользователям, а как правило только так называемому суперпользователю (root). Чтобы запустить команду от имени суперпользователя, применяются команды su и sudo — о них читайте в статье What’s the Difference Between Sudo and Su in Linux?
Еще одна вещь непривычная для пользователя Windows: если запустить из командной оболочки программу (в том числе, программу с графическим интерфейсом), то пока эта запущенная программа не завершится, в оболочке нельзя будет выполнять никакие команды. Такой запуск называется exec.
$ emacs
Не блокирующий оболочку запуск программы в отдельном процессе называется в linux словом fork:
$ emacs &
$
Desktop Manager
CentOS 8. Как узнать какой desktop manager вы используете (gnome или KDE):
gnome
CentOS 8. Установить пакет gnome-tweak-tool:
Help System
Получить справку по той или иной программе или функции:
$ man socket
$ man 2 socket
$ man -a socket
$ info grep
$ grep --help
info — очень ценная команда, которая отображает подробную справку с гипертекстовыми ссылками. Для навигации по справке следует использовать горячие клавиши. Список горячих клавиш можно получить нажав на клавиатуре Shift+h
Команда whatis возвращает список разделов документации, относящихся к указанной команде.
Команда apropos либо man -k возвращает список всех разделов документации, в которых упоминается указанная команда.
Оказывается, что есть два вида команд: одни суть нормальные программы типа grep (utilities), другие — команды (commands), встроенные в командную оболочку, например pwd. Команда help выводит справку по встроенным командам, команда man — по программам.
Незаменимая утилита для поиска текста (в частности, внутри справки) — grep. Ее можно использовать для поиска упоминаний нужного текста в справке. Например, найдем все слова author в справке по команде ls:
--author
with -l, print the author of each file
Разное
Оказывается, некоторые пакеты можно установить только от имени пользователя root. Например gcc. Чтобы зайти в терминал от имени root-пользователя, нужно набрать
Чтобы выйти из сессии root-пользователя, нужно набрать
Текстовые редакторы
— vi консольный редактор, который есть во всех дистрибутивах Linux
— vim и emacs — наиболее популярные консольные редакторы
— nano — консольный редактор для новичков
— gedit — графический текстовый редактор в gnome
— KWrite — графический текстовый редактор в KDE
Создать текстовый файл:
$ echo line1 >> filename
$ echo 'line 2' >> filname
vim
Переход в режим редактирования — клавиша i, переход в режим команд — клавиша Esc.
Чтобы сохранить файл — набрать :w
Чтобы выйти из редактора — набрать :q
emacs
Имеет главное меню и позволяет перемещать курсор при помощи мыши.
Скрипты
Первая строка скрипта содержит информацию о том, в какой командной оболочке он будет запускаться:
echo Hello
Помимо bash мое внимание привлекли оболочка csh (C shell) и ее потомок tsch, поскольку их синтаксис очень близок к милому моему сердцу языку C.
Узнать используемую по-умолчанию командную оболочку:
Поменять используемую по-умолчанию командную оболочку (например на tcsh):
Чтобы временно воспользоваться нужной вам командной оболочкой, не изменяя оболочку по-умолчанию, можно просто запустить нужную оболочку из основной оболочки:
Чтобы выйти из запущенной вами подоболочки, нужно выполнить команду exit.
Переменные окружения
Вывести все переменные окружения:
Можно создать новую переменную окружения, записав в командной оболочке ее имя, знак равно и значение переменной:
$ echo $MY_ENV_VAR
Если вы просто создадите переменную окружения (как показано выше), то она будет доступна только внутри используемой вами командной оболочки (эдакая локальная переменная), но не будет доступна внутри дочерних процессов, которые вы будете запускать из командной оболочки. Чтобы сделать переменную доступной для дочерних процессов, нужно выполнить команду export:
Чтобы удалить переменную окружения, используем команду unset:
Созданные в командной оболочке переменные существуют только на время сессии. Чтобы перманентно изменить или добавить переменную окружения, можно отредактировать файл ~/.bashrc
Шаблон приглашения (prompt) находится в переменной окружения PS1. В моей системе он имел такое значение:
[\u@\h \W]$
… что в переводе означает [имя_пользователя@имя_хоста текущая_директория]$
. Можно изменить эту переменную, чтобы получить то приглашение, которое вам больше нравится.
Специальные символы
Существуют символы, которые выполняют в командной оболочке специальные функции. Например символ «решетка» означает комментарий, а символ «больше» означает перенаправление потока вывода. Однако, если вы хотите распечатать подобные символы, то вам придется использовать кавычки (двойные или одинарные) либо символ экранирования «обратный слэш».
Перенаправление потоков ввода-вывода и pipelining
$ echo Hello > hello.txt
# append one more line to hello.txt file
$ echo "One more hello" >> hello.txt
# redirect cat's input to hello.txt file
$ cat < hello.txt
# redirect echo's output to grep's input
$ echo "Hello, World!" | grep World
Для стандартных потоков ввода-вывода существуют т. н. дескрипторы:
0 — stdin
1 — stdout
2 — stderr
И существуют команды, которые могут перенаправлять поток с тем или иным дескриптором в файл или поток с другим дескриптором. Для ссылки на дескриптор применяется символ амперсанд. Например:
$ foo 2> err.txt
# stdout(1) > file; stderr(2) > to where stdout(1) is redirected i. e. file;
$ foo 1> file 2>&1
Вычисление и подстановка выражений
$ echo result = $x + 1
result = 3 + 1
$ echo result = $(($x + 1))
result = 4
$ echo result = `expr $x + 1`
result = 4
$ echo result = `expr $x+1`
result = 3+1
Обратите внимание на то, что наличие пробелов в выражении для команды expr в двух последних примерах играет роль.
Файловая система
В Linux система папок имеет некую стандартную структуру: каждая папка выполняет некую функцию. Какие-то названия были даже у меня на слуху (а я до сих пор имел с Linux лишь шапочное знакомство): bin, usr, home, etc, lib…
Утилита для обзора и добавления разделов диска — fdisk.
Утилита для форматирования раздела диска — mkfs.
Путь, начинающийся с прямого слэша, считается абсолютным. Любой другой путь — относительным относительно текущей директории.
Создать жесткую ссылку (hard link) или символическую ссылку (ярлык):
$ ln file1 file2
# create a symbolic link (file 2 contains a link to file1)
$ ln -s file1 file2
Конечно же нельзя не упомянуть утилиту ls, которая, можно сказать, заменяет лиинуксоидам проводник:
Ключ -l заставляет ls выводить список файлов по одному на строку.
Runlevels
Runlevels — это набор режимов работы операционной системы (типа как в Windows были обычный режим и безопасный режим). В зависимости от режима может быть запущена или не запущена графическая оболочка, включен или выключен многопользовательский режим. Таких runlevel’ов всего штук семь. Они пронумерованы, и между ними можно переключаться при помощи программы telinit.
$ runlevel
N 5
# swith to runlevel 3 (no graphical shell)
$ sudo telinit 3
Того же эффекта как при переключении между runlevel’ами 3 и 5, вроде как, можно добиться, останавливая либо запуская графическую оболочку (GNOME Display Manager — gdm):
$ sudo systemctl start gdm
Ну, не знаю, когда я попытался выполнить первую из этих команд на Ubuntu, мой экран просто погас и не появилось никакой командной оболочки вместо него.
Память
Отобразить количество используемой/свободной памяти в системе, включая файл подкачки, можно утилитой free:
Более детальная информация содержится в файле proc/meminfo
. Этот файл, как и все файлы в директории /proc
, существует не на диске, а в оперативной памяти, папку /proc
при этом называют даже псевдофайловой системой.
Также можно посмотреть информацию по файлам подкачки (а могут быть не только файлы подкачки, но и разделы на диске) при помощи файла /proc/swaps
:
Подкачку можно включать и выключать командами swapon -a и swapoff -a.
Сети
Настройку сетевых интерфейсов осуществляет утилита ifconfig (пакет net-tools) или более новая утилита ip. Что нам нужно: получить список сетевых интерфейсов с их настройками, изменить настройки конкретных сетевых интерфейсов, включать и выключать сетевые интерфейсы. Заметим, что имена интерфейсов — это набор букв и цифр, который новичку вроде меня может показаться странным (например enp0s3).
$ ifconfig
# or
$ ip link
# show ip-addresses
$ ip address
# change ip-address of interface enp0s3 (assign it statically)
$ sudo ifconfig enp0s3 inet 10.0.2.16
# configure interface to get ip-address from DHCP
$ sudo dhclient enp0s3 -v
# turn interface off
$ sudo ip link set enp0s3 down
# turn interface on
$ sudo ip link set enp0s3 up
# add ip-address to interface
$ sudo ip address add 192.168.1.2/24 dev enp0s3
# delete ip-address from interface
$ sudo ip address del 192.168.1.2/24 dev enp0s3
Службы (демоны)
Службы, они же демоны, они же фоновые процессы — это программы, которые работают в фоне, и не имеют пользовательского интерфейса.
Запуск, остановка, перечисление служб контролируется утилитой systemctl.
Пользователи и группы
Бывают настоящие пользователи, а бывают ненастоящие (демоны они в общем:). Пользователь — это единица, которой назначаются права доступа ко всяким возможностям системы. Информация о пользователях хранится в файлах /etc/group
и /etc/passwd
. Группы — это единицы, которые включают одного или нескольких пользователей и которым назначаются определенные права доступа к возможностям ОС. У каждого пользователя есть ID (целое число) — для настоящих пользователей он начинается с 1000, для демонов — с 1. ID=0 — это суперпользователь (root). Еще у настоящих пользователей есть домашняя папка (home directory) и оболочка, которая запускается при входе в систему (обычно — bash).
Пользователей добавляет и удаляет только суперпользователь — при помощи команд useradd, userdel. Он же назначает пользователю пароль для входа командой passwd. Изменение настроек пользователя, таких как домашняя папка, пароль или принадлежность к группе — выполняется командой usermod.
Аналогично суперпользователь создает и удаляет группы — командами groupadd и groupdel. И изменяет — командой groupmod. Посмотреть, членом каких групп является тот или иной пользователь, можно при помощи команды groups. Также можно использовать команду id, чтобы получить информацию о текущем пользователе.
Каждый файл в системе имеет владельца (пользователя). Помимо владельца есть еще два субъекта: группа владельца и все остальные. Каждому из этих трех субъектов назначаются права на то, что можно делать с файлом: читать (read), писать (write), исполнять (execute). Посмотреть права доступа к файлу можно командой ls -lF filename
, изменить права доступа — командой chmod, и даже поменять владельца — командой chown. Суперпользователь имеет полный доступ ко всем файлам в системе.
sudo и su
Команда sudo позволяет выполнить одну команду от имени другого пользователя. При этом sudo потребует пароль текущего пользователя. Но для того, чтобы подобное работало, нужно, чтобы суперпользователь настроил файл /etc/sudoers
, что можно сделать командами visudo или sudoedit. Более современный вариант — создавать файлы в директории /etc/sudoers.d
— для каждого пользователя.
Команда su позволяет залогиниться в командную оболочку от имени другого пользователя. Однако su потребует уже пароль того пользователя, от имени которого вы хотите залогиниться. В Ubuntu под root’ом вам просто так не зайти, поскольку вы не знаете его пароля. Но это можно легко обойти командой sudo su
.