Новичкам
January 10, 2022

Часть 3. Терминал Linux

1package & Let's Node

⠀В данной статье рассматриваются следующие группы команд: архивы, пользователи, текст.


Содержание

Часть 1

Часть 2

Часть 3

Часть 4

Часть 5


Архивы

К содержанию

tar

⠀Создаёт и распаковывает архивы.

Синтаксис

tar опции -f архив объекты_для_архивации

Полезные опции:

  • -f — применить действия к архиву с указанным названием;
  • -x — распаковать архив;
  • -v — вывести подробную информацию о процессе;
  • -t — показать содержимое архива;
  •  — выполнить действия в указанной директории;
  • -c — создать архив;
  • -z — выполнить сжатие с помощью gzip;
  • -r — присоединить файлы к концу архива.

Примеры

# Создать архив, сжатый с помощью gzip
tar -czvf archive.tar.gz file1 $HOME/file2 file3
# Посмотреть содержимое архива
tar -tf archive.tar.gz
# Распаковать архив
tar -xvf archive.tar.gz

zip / unzip

zip создаёт, unzip распаковывает архивы. Совместима с Windows.

Требуется установка

sudo apt install zip unzip -y

Синтаксис zip

zip опции архив объекты_для_архивации

Полезные опции:

  • -r — сжать все файлы и подпапки.

Примеры

# Создать архив, содержащий файлы
zip archive.zip file1 $HOME/file2 file3
# Содержащий директорию dir
zip -r archive.zip $HOME/dir/
# Содержащий все файлы папки dir
zip -r archive.zip $HOME/dir/*

Синтаксис unzip

unzip опции архив

Полезные опции:

  • -d — распаковать архив в указанную директорию;
  • -l — показать содержимое архива.

Примеры

# Показать содержимое архива
unzip -l archive.zip
# Распаковать архив в текущую директорию
unzip archive.zip
# В папку dir
unzip -d $HOME/dir archive.zip

Пользователи

К содержанию

whoami

⠀Выводит имя текущего пользователя.

Примеры

whoami

useradd

⠀Добавляет пользователя.

Синтаксис

sudo useradd опции имя_пользователя

Полезные опции:

  • -s — командная оболочка (по умолчанию /bin/sh);
  • -d — путь к домашней директории (по умолчанию /home/имя_пользователя);
  • -m — создать домашнюю директорию, указанную в опции -d;
  • -g — имя или идентификатор (GID) основной группы пользователя (по умолчанию users, 100);
  • -G — сделать пользователя участником указанных групп;
  • -u — числовой идентификатор пользователя (UID);
  • -o — разрешить создание пользователя с уже имеющимся UID (используется с опцией -u).

Примеры

# Обычный пользователь
sudo useradd -m -s /bin/bash user
sudo passwd user
# Пользователь, состоящий в группах adm и games
sudo useradd -m -G adm,games -s /bin/bash user
sudo passwd user
# Пользователь с root правами
sudo useradd -m -G sudo -s /bin/bash user
sudo passwd user

passwd

⠀Изменяет пароль пользователя.

Синтаксис

passwd
sudo passwd имя_пользователя

Примеры

# Текущий пользователь
passwd
# Другой пользователь (только из-под root)
sudo passwd user

usermod

⠀Изменяет параметры пользователя.

Синтаксис

sudo usermod опции имя_пользователя

Полезные опции:

  • -s — командная оболочка;
  • -d — путь к домашней директории;
  • -m — переместить содержимое домашней директории в новое место, указанное в опции -d;
  • -g — имя или идентификатор (GID) основной группы пользователя;
  • -a — добавить пользователя в дополнительные группы;
  • -G — добавить (с опцией -a) или изменить дополнительные группы;
  • -u — числовой идентификатор пользователя (UID);
  • -o — разрешить изменение UID пользователя на уже имеющееся (используется с опцией -u).

Примеры

sudo usermod -g adm user
sudo usermod -s /bin/bash -a -G games user
sudo usermod -o -u 0 -g 0 -s /bin/bash user

userdel

⠀Удаляет пользователя.

Синтаксис

sudo userdel опции имя_пользователя

Полезные опции:

  • -r — удалить домашнюю директорию и файлы пользователя;
  • -f — удалить пользователя, даже если он залогинен.

Примеры

sudo userdel user
sudo userdel -rf user

Текст

К содержанию

nano

⠀Текстовый редактор.

Может требоваться установка

sudo apt install nano -y

Синтаксис

nano опции путь_к_файлу

Полезные опции:

  • -m — включить поддержку мыши (в MobaXterm становится проблематично копировать и перестаёт работать вставка на ПКМ);
  • -P — запоминать и восстанавливать позицию курсора во время последнего редактирования;
  • -B — создать резервную копию файла при сохранении (резервная копия имеет название имя_файла~).

⠀Для удобства управления, помимо поддержки мыши, присутствуют горячие клавиши.

Горячие клавиши:

  • Alt+U — отменить изменения;
  • Alt+E — повторить изменения;
  • Ctrl+K — удалить строку, на которой находится курсор;
  • Ctrl+C — показать (снизу по центру редактора) на какой строке и символе находится курсор;
  • Ctrl+W — найти в файле:
    • Ввести текст;
    • Нажать Enter;
    • Alt+W — перейти к следующему совпадению найденного текста;
    • Ctrl+C — прекратить поиск.
  • Ctrl+\ — поиск и замена текста:
    • Ввести текст для поиска;
    • Нажать Enter;
    • Ввести текст, на который заменить найденный;
    • Нажать Enter:
      • Просматривать каждое совпадение и выбирать, делать ли замену — Y (Yes) или N (No);
      • Нажать A для замены всего.
  • Ctrl+S — сохранить изменения;
  • Ctrl+O — сохранить как (необходимо ввести название);
  • Ctrl+X — сохранить как (пропускается, если уже сохранено) и выйти.

Примеры

# Открытие файла без поддержки мыши
nano -P $HOME/text.txt

# Открытие файла с поддержкой мыши
nano -mP $HOME/text.txt
# При сохранении сделать резервную копию файла
nano -mBP $HOME/text.txt

grep

⠀Находит строки на основе фрагмента, шаблона или регулярного выражения.

Синтаксис

grep опции поисковый_запрос путь_к_файлу
grep опции поисковый_запрос <<< "текст"
команда | grep опции поисковый_запрос

Полезные опции:

  • -c — вывести количество найденных строк;
  • -r — искать внутри всех файлов указанной директории;
  • -q — не выводить найденную строку (зачастую используется в скриптах);
  • -B — показать вхождение и указанное количество строк до него;
  • -A — показать вхождение и указанное количество строк после него;
  • -C — показать вхождение и указанное количество строк до и после него;
  • -i — не учитывать регистр.

Пример работы с файлом

grep user $HOME/file.txt
# Подходящие варианты
user
user_1
_user_
Current user
grep -i user $HOME/file.txt
# Подходящие варианты
User
uSEr_1
_uSer_
Current USER
grep "Hello wo" $HOME/file.txt
# Подходящие варианты
Hello wo
Hello world
Hello wod42334

Пример работы с текстом

grep user <<< "Current user"
# Вывод
Current user
text="root
user:user
user_1
bob"
grep user <<< "$text"
# Вывод
user:user
user_1

Пример работы с командой

lscpu | grep "Model name"
# Вывод
Model name:                      AMD Ryzen 9 5950X 16-Core Processor

⠀Прочие примеры

# Вывести вхождение, 10 строк до и 5 после него
grep -B10 -A5 user $HOME/file.txt

# Вывести вхождение, а также 5 строк до и после него
grep -C5 user $HOME/file.txt
# Посчитать количество найденных строк
text="root
user:user
user_1
bob"
grep -c user <<< "$text"
# Вывод
2
# Поиск во всех файлах директории dir
grep -r user $HOME/dir
# Вывод
/root/dir/users: user
/root/dir/text.txt: Current user
# Найти подстроку
grep -oPm1 "(?<=^variable = \")([^%]+)(?=\"$)" <<< 'variable = "value"'
# Вывод
value

jq

⠀Утилита для работы с JSON.

Требуется установка

sudo apt install jq -y

Синтаксис

jq опции поисковый_запрос путь_к_файлу
jq опции поисковый_запрос <<< "текст"
команда | jq опции поисковый_запрос

Полезные опции:

  • -r — не выводить скобки у текстовых значений.

Примеры

json='{"username":"Bob","balance":102034.1,"friends":2,"property":["car","house","farm"]}'
jq <<< "$json"
jq "." <<< "$json"
{
  "username": "Bob",
  "balance": 102034.1,
  "friends": 2,
  "property": [
    "car",
    "house",
    "farm"
  ]
}
jq ".username" <<< "$json"
"Bob"
jq -r ".username" <<< "$json"
Bob
jq ".balance" <<< "$json"
102034.1
jq ".friends, .balance" <<< "$json"
2
102034.1
jq "[.friends, .balance]" <<< "$json"
[
  2,
  102034.1
]
jq ".property" <<< "$json"
[
  "car",
  "house",
  "farm"
]
jq ".property | length" <<< "$json"
3
jq -r ".property[0]" <<< "$json"
car
jq -r ".property[-1]" <<< "$json"
farm
jq ". | keys" <<< "$json"
[
  "balance",
  "friends",
  "property",
  "username"
]
jq ". | to_entries[]" <<< "$json"
{
  "key": "username",
  "value": "Bob"
}
{
  "key": "balance",
  "value": 102034.1
}
{
  "key": "friends",
  "value": 2
}
{
  "key": "property",
  "value": [
    "car",
    "house",
    "farm"
  ]
}

sed

⠀Заменяет, удаляет, вставляет и ищет фрагменты текста. По умолчанию обрабатывает одну команду и выводит результат выполнения на экран.

Синтаксис

sed опции -e "команда_1; команда_2; ..." путь_к_файлу
sed опции -e "команда_1; команда_2; ..." <<< "текст"
команда | sed опции -e "команда_1; команда_2; ..."

Полезные опции:

  • -e — выполнить несколько команд.
  • -i — внести изменения в файл. При указании каких-либо символов после опции создаёт резервную копию с названием файла плюс указанные символы, например, команда с опцией -i~ создаст резервную копию с названием file_name~.

Полезные команды:

  • s%фрагмент_1%фрагмент_2% — заменить первый в строке фрагмент_1 во всех строках, где он встретился, на фрагмент_2;
  • s%фрагмент_1%фрагмент_2%g — заменить все фрагмент_1 в строке во всех строках, где он встретился, на фрагмент_2;
  • 0,/фрагмент/{/фрагмент/d;} — удалить первую строку, в которой найден фрагмент;
  • /фрагмент/d — удалить все строки, в которых найден фрагмент.

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

  • ^ — начало строки;
  • $ — конец строки;
  • . — один любой символ;
  • .* — любое количество любых символов.

Примеры

echo "Hello, world!" | sed "s%Hello%Bye%"
Bye, world!
echo "Hello, world! Bye, world!" | sed "s%world%WORLD%"
Hello, WORLD! Bye, world!
echo "Hello, world! Bye, world!" | sed "s%world%WORLD%g"
Hello, WORLD! Bye, WORLD!
echo 'delay = 10
  variable = "text"
delay = "124124"' > config.toml
sed -e "s%delay%d%; s%variable%v%" config.toml
cat config.toml
d = 10
  v = "text"
d = "124124"

delay = 10
  variable = "text"
delay = "124124"
sed -i -e "s%delay%d%; s%variable%v%" config.toml
cat config.toml
d = 10
  v = "text"
d = "124124"
echo 'delay = 10
  variable = "text"
delay = "124124"' > config.toml
sed -i -e "s%variable *=.*%variable = \"new text\"%" config.toml
cat config.toml
delay = 10
  variable = "new text"
delay = "124124"
sed -i -e "0,/delay/{/delay/d;}" config.toml
cat config.toml
  variable = "text"
delay = "124124"
echo 'delay = 10
  variable = "text"
delay = "124124"' > config.toml
sed -i -e "/delay/d" config.toml
cat config.toml
  variable = "new text"

awk

⠀Построчно разбирает и обрабатывает текст по заданным шаблонам.

Синтаксис

awk опции команды путь_к_файлу
awk опции команды <<< "текст"
команда | awk опции команды

Полезные опции:

  • -F — символ-разделитель для полей (по умолчанию пробел).

Зарезервированные переменные:

  • NF — количество столбцов в тексте;
  • NR — номер текущей строки.

Примеры

table="Name Price Number
Tea 1.5 20
Bread 0.5 44
Cucumber 0.4 17
Potato 0.2 44"
# Названия продуктов
awk '{print $1}' <<< "$table"
Name
Tea
Bread
Cucumber
Potato
# Колисчество продуктов
awk '{print $3}' <<< "$table"
Number
20
44
17
44
# Названия и цены
awk '{print $1 "\t" $2}' <<< "$table"
Name    Price
Tea     1.5
Bread   0.5
Cucumber        0.4
Potato  0.2
# Продукты, количество которых равно 44
awk '$3 == 44 { print $0 }' <<< "$table"
Bread 0.5 44
Potato 0.2 44
# Продукты, количество которых равно 44 и цена больше 0.4
awk '$3 == 44 && $2 > 0.4 {print $0}' <<< "$table"
Bread 0.5 44
# 4-ая строка
awk 'NR == 4 {print $0}' <<< "$table"
Cucumber 0.4 17
# 2-ой столбец с конца
awk '{print $(NF-1)}' <<< "$table"
Price
1.5
0.5
0.4
0.2
# Печать при помощи printf
awk '{ printf "%3d %s\n", NR, $0 }' <<< "$table"
  1 Name Price Number
  2 Tea 1.5 20
  3 Bread 0.5 44
  4 Cucumber 0.4 17
  5 Potato 0.2 44

tr

⠀Заменяет, замещает или удаляет символы.

Синтаксис

tr опции "набор_1" "набор_2" <<< "текст"
команда | tr опции "набор_1" "набор_2"

Полезные опции:

  • -d — удалить из текста знаки из набор_2;
  • -s — заменить последовательность одинаковых символов из набор_1 одним символом, а затем на символ из набор_2, если он указан.

Примеры

echo "Hello, world!" | tr "el" "ab"
Habbo, worbd!
echo -e "Hello,\nworld!" | tr -d "\n"
Hello,world!...~#
echo -e "He\rllo,\nwor\rld!" | tr -d "\r\n"
Hello,world!...~#
# Удаление дублирующихся пробелов
echo "Hello,                world!" | tr -s " "
echo "Hello,                world!" | tr -s "[:space:]"
Hello, world!
echo "Hello,                world!" | tr -s " " "_"
Hello,_world!

sort

⠀Сортирует строки.

Синтаксис

sort опции путь_к_файлу
sort опции <<< "текст"
команда | sort опции

Полезные опции:

  • -n — сортировать числа;
  • -r — сортировать в обратном направлении;
  • -u — пропускать повторяющиеся строки.

⠀Логика сортировки строк (начиная с первого символа):

  • Специальные символы (!, ", # и т. п.) в порядке возрастания ASCII кода;
  • Цифры в порядке возрастания;
  • Буквы в алфавитном порядке:
    • В нижнем регистре;
    • В верхнем регистре.
  • Аналогичная логика для следующего символа.

Примеры

text="market
Basket
FIRE
fire
Yacht
appropriation
basket"
numbers="
9
120
1
0
354235
10"
sort <<< "$text"
appropriation
basket
Basket
fire
FIRE
market
Yacht
sort -r <<< "$text"
Yacht
market
FIRE
fire
Basket
basket
appropriation
sort <<< "$numbers"
0
1
10
120
354235
9
sort -n <<< "$numbers"
0
1
9
10
120
354235
sort <<< "${text}${numbers}"
0
1
10
120
354235
9
appropriation
basket
Basket
fire
FIRE
market
Yacht

wc

⠀Подсчитывает число строк, слов, символов и байтов в указанных файлах.

Синтаксис

wc опции путь_к_файлу_1 путь_к_файлу_2 ...
wc опции <<< "текст"
команда | wc опции

Полезные опции:

  • -l — вывести количество строк (исходя из количества переводов строк \n);
  • -w — вывести количество слов;
  • -m — вывести количество символов (включая новую строку).

Примеры

text="market
Basket
FIRE
fire
Yacht
appropriation
basket
"
wc <<< "$text"
 8  7 52
wc -l <<< "$text"
8
wc -w <<< "$text"
7
wc -m <<< "$text"
52

Читать далее

К содержанию

⠀В четвёртой части рассматриваются следующие группы команд: информация о системе, сеть, прочее.

Часть 4. Терминал Linux


Полезные ссылки

К содержанию

Losst | Пингвинус


Благодарности

К содержанию

Losst, Пингвинус — разнообразные статьи по Linux

Команда 1package — написание статьи

Выразить благодарность