Часть 3. Терминал Linux
⠀В данной статье рассматриваются следующие группы команд: архивы, пользователи, текст.
Содержание
Архивы
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 archive.zip file1 $HOME/file2 file3 # Содержащий директорию dir zip -r archive.zip $HOME/dir/ # Содержащий все файлы папки dir zip -r archive.zip $HOME/dir/*
unzip опции архив
# Показать содержимое архива 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+\
— поиск и замена текста: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
sudo apt install jq -y
jq опции поисковый_запрос путь_к_файлу jq опции поисковый_запрос <<< "текст" команда | jq опции поисковый_запрос
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 опции команды
⠀Зарезервированные переменные:
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
Читать далее
⠀В четвёртой части рассматриваются следующие группы команд: информация о системе, сеть, прочее.
Полезные ссылки
Благодарности
Losst, Пингвинус — разнообразные статьи по Linux
Команда 1package — написание статьи