Шпаргалка по Linux для чайников

Заранее прошу прощения у опытных пользователей Linux, если допустил где-то ляпы… Что взять с чайника? 🙂

В тексте ниже в качестве приглашения (prompt) используется символ доллара.

Package Management

Разные дистрибутивы Linux включают в себя разные пакетные менеджеры. Например:
Debian — apt-get
RedHat — dnf или yum

О том, что такое пакетные менеджеры, читайте статью Linux Package Management.
Утилиты вроде apt-get и dnf — более высокоуровневые — они не заставляют пользователя указывать точную версию пакета и они сами устанавливают нужные зависимости пакета. Но за ними стоят низкоуровневые утилиты: rpm, dpkg, которые такой функциональностью не обладают. Существуют пакетные менеджеры с графическим пользовательским интерфейсом, например gnome-software, yast, yumex-dnf.

Как установить нужный пакет:

# debian family
$ sudo apt install packagename

# redhat family
$ sudo dnf install packagename

Иногда нужно узнать, к какому пакету (или пакетам) принадлежит тот или иной файл:

# debian family
$ 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.

# exec emacs
$ emacs

Не блокирующий оболочку запуск программы в отдельном процессе называется в linux словом fork:

# fork emacs
$ emacs &
$

Desktop Manager

CentOS 8. Как узнать какой desktop manager вы используете (gnome или KDE):

$ echo $DESKTOP_SESSION
gnome

CentOS 8. Установить пакет gnome-tweak-tool:

$ sudo dnf install gnome-tweak-tool

Help System

Получить справку по той или иной программе или функции:

$ man grep

$ 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:

$ man ls | grep author
        --author
               with -l, print the author of each file

Разное

Оказывается, некоторые пакеты можно установить только от имени пользователя root. Например gcc. Чтобы зайти в терминал от имени root-пользователя, нужно набрать

$ su

Чтобы выйти из сессии root-пользователя, нужно набрать

$ exit

Текстовые редакторы

vim и emacs — наиболее популярные консольные редакторы
nano — консольный редактор для новичков
gedit — графический текстовый редактор в gnome
KWrite — графический текстовый редактор в KDE

Создать текстовый файл:

$ echo Hello > filename
$ echo line1 >> filename
$ echo 'line 2' >> filname

vim
Переключение между режимом редактирования и режимом команд при помощи клавиши Esc.
Чтобы сохранить файл — набрать :w
Чтобы выйти из редактора — набрать :q

emacs
Имеет главное меню и позволяет перемещать курсор при помощи мыши.

Скрипты

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

#!/bin/bash
echo Hello

Помимо bash мое внимание привлекли оболочка csh (C shell) и ее потомок tsch, поскольку их синтаксис очень близок к милому моему сердцу языку C.

Узнать используемую по-умолчанию командную оболочку:

$ echo $SHELL

Поменять используемую по-умолчанию командную оболочку (например на tcsh):

$ chsh tcsh

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

$ /usr/bin/tchs

Чтобы выйти из запущенной вами подоболочки, нужно выполнить команду exit.

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

Вывести все переменные окружения:

$ env

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

$ MY_ENV_VAR=HELLO
$ echo $MY_ENV_VAR

Если вы просто создадите переменную окружения (как показано выше), то она будет доступна только внутри используемой вами командной оболочки (эдакая локальная переменная), но не будет доступна внутри дочерних процессов, которые вы будете запускать из командной оболочки. Чтобы сделать переменную доступной для дочерних процессов, нужно выполнить команду export:

$ export $MY_ENV_VAR

Чтобы удалить переменную окружения, используем команду unset:

$ unset MY_ENV_VAR

Созданные в командной оболочке переменные существуют только на время сессии. Чтобы перманентно изменить или добавить переменную окружения, можно отредактировать файл ~/.bashrc

Шаблон приглашения (prompt) находится в переменной окружения PS1. В моей системе он имел такое значение:

$ echo $PS1
[\u@\h \W]$

… что в переводе означает [имя_пользователя@имя_хоста текущая_директория]$. Можно изменить эту переменную, чтобы получить то приглашение, которое вам больше нравится.

Специальные символы

Существуют символы, которые выполняют в командной оболочке специальные функции. Например символ «решетка» означает комментарий, а символ «больше» означает перенаправление потока вывода. Однако, если вы хотите распечатать подобные символы, то вам придется использовать кавычки (двойные или одинарные) либо символ экранирования «обратный слэш».

Перенаправление потоков ввода-вывода и pipelining

# redirect echo's output to hello.txt file
$ 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

И существуют команды, которые могут перенаправлять поток с тем или иным дескриптором в файл или поток с другим дескриптором. Для ссылки на дескриптор применяется символ амперсанд. Например:

# stderr(2) > err.txt
$ foo 2> err.txt

# stdout(1) > file; stderr(2) > to where stdout(1) is redirected i. e. file;
$ foo 1> file 2>&1

Вычисление и подстановка выражений

$ x=3

$ 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) или символическую ссылку (ярлык):

# create a hard link (file1 and file2 are two names of the same file)
$ ln file1 file2

# create a symbolic link (file 2 contains a link to file1)
$ ln -s file1 file2

Конечно же нельзя не упомянуть утилиту ls, которая, можно сказать, заменяет лиинуксоидам проводник:

$ ls -l /usr

Ключ -l заставляет ls выводить список файлов по одному на строку.

Runlevels

Runlevels — это набор режимов работы операционной системы (типа как в Windows были обычный режим и безопасный режим). В зависимости от режима может быть запущена или не запущена графическая оболочка, включен или выключен многопользовательский режим. Таких runlevel’ов всего штук семь. Они пронумерованы, и между ними можно переключаться при помощи программы telinit.

# show current runlevel
$ runlevel
N 5

# swith to runlevel 3 (no graphical shell)
$ sudo telinit 3

Того же эффекта как при переключении между runlevel’ами 3 и 5, вроде как, можно добиться, останавливая либо запуская графическую оболочку (GNOME Display Manager — gdm):

$ sudo systemctl stop gdm
$ sudo systemctl start gdm

Ну, не знаю, когда я попытался выполнить первую из этих команд на Ubuntu, мой экран просто погас и не появилось никакой командной оболочки вместо него.

Память

Отобразить количество используемой/свободной памяти в системе, включая файл подкачки, можно утилитой free:

$ free -mt

Более детальная информация содержится в файле proc/meminfo. Этот файл, как и все файлы в директории /proc, существует не на диске, а в оперативной памяти, папку /proc при этом называют даже псевдофайловой системой.

$ cat proc/meminfo

Также можно посмотреть информацию по файлам подкачки (а могут быть не только файлы подкачки, но и разделы на диске) при помощи файла /proc/swaps:

$ cat proc/swaps

Подкачку можно включать и выключать командами swapon -a и swapoff -a.

Сети

Настройку сетевых интерфейсов осуществляет утилита ifconfig (пакет net-tools) или более новая утилита ip. Что нам нужно: получить список сетевых интерфейсов с их настройками, изменить настройки конкретных сетевых интерфейсов, включать и выключать сетевые интерфейсы. Заметим, что имена интерфейсов — это набор букв и цифр, который новичку вроде меня может показаться странным (например enp0s3).

# show network interfaces
$ 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *