Часть 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.tomlvariable = "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 — написание статьи