---
title: Практическая работа 1
tags: pt-start, linux basics
---
## Работа в bash
1. В данном списке комманд отображено: пользователь, под которым осуществляется работа
2. Переход в корневую папку
3. вывод содержимоо директории
4. переход в папку tmp
5. создание в ней директории pt
6. создание нескольких текстовых файлов
> [name=despersy]
> Для работы была установлена os desbian booksworm, с предустановленным ssh сервером, но с граф. интерфейсом. На работу это не повлияет, так как вся работа производится в xterm, который не работает с буфером обмена.
> Стоит отметить, что, как вариант, я мог переключиться на другой tty через ctrl+alt+tty_num, однако это переключает tty на моей основной машине, ибо на host-системе стоит pop-os.

Данная команда позволяет опредленить тип какой-либо команды
```command
type <command>
```

На изображении ниже вывод содержимого директории, после чего следует отображение содержимого файла при помощи cat, его редактирование и еще один вывод уже отредактированного файла.
```commands
cat <file>
nano <file>
```

На данном иображении выполняется копирование директории.
```commands
cp -r <dir from> <dir to>
mv <old name> <new name>
```

Создание архива со всем содержимым директории.
```commands
tar -cvf <atchive.tar> <directory>
```

Разархивирование директории
```commands
tar -xvf <archive.tar>
```

Вывод содержимого домашней директории и директории /usr
```commands
ls <dir1> <dir2>
```

Вывод содержимого директории в обратном порядке
```commands
ls -r
```

Просмотр прав на директорию
```commands
ls -l | grep <dir>
```

Вывод всех текстовых файлов
```commands
ls -l | grep *.txt
```

Создание файла, перенос его в текущую директорию, вывод содержимого текущей директории
```commands
touch <file>
mv <file> .
ls -l
```

Создание новой директории, после чего в ней создается новый текстовый документ, который в дальнейшем перемещается из директории /tmp в новую директорию с заменой файла и запросом на его изменение.
```commands
mkdir <dir>
touch <dir>/<file>
echo "newer" > <dir1>/<file>
mkdir ~/<dir>
echo "old" > ~/<dir>/<file>
cat ~/<dir>/<file>
mv -f <dir>/<file> ~/<dir>/
ls ~/<dir>/<file>
cat ~/<dir>/<file>
```

Определение исполняемых файлов
```commands!
type -a <command>
```

Вывод краткого описания комманд
```commands
whatis <command1> <command2>
```

Создание символьной ссылки на файл
```commands
ln -s <file source> <link to it>
```

Создание символьной ссылки в пустое место. В таком случае файл линкуется на себя
```commands
ln -s <file source> <nowhere>
```

Создание физической ссылки на файл. В такой ситуации при выводе ls файла не будет отображаться как ссылка.
```commands
ln -P <file source> <link to it>
```

Для создания комманды можно использовать alias в bashrc. Он позволяет обозначить какой-либо ввод в терминал выполнением команды.
> [name=despersy]
> В данной ситуации мы переходим в директоию /usr и обратно.
```
alias <command name>="cd /usr cd -"
```

Запись в файл с помощью команды cat
```commands
touch <file>
cat > <file>
```

Удаление файла
```
rm <file>
```

Удаление директории
```
rm -rf <dir>
```

Удаление директории с файлами
```
rm -rf <dir>
```

Добавление пользователя
```
adduser <username>
```

Смена пароля пользователя. Делать желательно от рута.
```
passwd <username>
```

поиск файла через ls и через find
```
ls | grep <desired file>
find <desired file>
```

Использовние && и || на примере команды ping.
В данной ситуации при отсутствии ответа от ip (к примеру, 12.12.12.12) мы выдаем в консоль none и пингуем другой адрес.
```
ping -c <ip> || (echo 'none' && ping -c <ip>)
```

## Работа с grep
Вывод всех установленных модулей python
```
dpkg -l | grep -i python
```

копирование файла без коментариев.
```
grep -v "#" <file> > <new file>
```

Вывод файлов по паттерну исключая другой. Для этого создается несоклько похожих файлов, чтобы показать работу поиска. После чего бперем файлы, в которых нет remix, однако присутствует abc в названии.
```
find . -name "*.mp3" | grep -i ABC | grep -vi "remix"
```

Также поиск может быть преблизительный. К примеру можно после файла, совпавшего по паттерну вывести следующий после него файл, либо предыдущий. Если в паттерне могут быть совпадения, то команда сработае для последнего файла.
```
ls -l | grep -A 1 <pattern>
ls -l | grep -B 1 <pattern>
```

Вывод количества совпадений по паттерну.
```
ls -l | grep -c <pattern>
```

Проверка строки до или после фала, совпавшего по паттерну.
```
ls -l | grep -C <num to check around file> <pattern>
```

Поиск строки в файле. Для этого заранее в файл были записаны строчки, после чего по ним производилась проверка.
```
grep -n "pattern" <file>
```

Также можно выполнить поиск по совпадению по всем файлам в директории. * значит искать по всем файлам в текущей директории.
```
grep -r <pattern> *
```

вывод ip адреса можно также успростить при помощи grep. Достаточно увидеть, что в строчках с ip адресом присутствует inet и при помощи этого вывести адреса
```
ip a | grep -w "inet"
```

Поиск по архиву. Для этого используется команда zgrep.
> [name=despersy]
> У меня система свежая, поэтому ошибок пока еще не было, а логи еще не успели уйти в архивы
```
zgrep -i error <archive.xz>
```

Создание архива из всех файлов в директории, создание архива из папки и всего ее создаержимого, добавление пароля на директорию, распаковка архива.
```
zip <zip name> *
zip -r <zip name> <dir>
zip -P <passwd> -r <zip name> <dir>
unzip <zip name>
```

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

Также можно совершить поиск у учетом регистра при помощи /\. Если совпадений нет, то и курсор никуда не передвинется, однако об этом vim не сообщит.

При помощи yy можно скопировать строку и вставить ее в другое место. Вставить ее можно с помощью p.

При помощи dd можно вырезать, именно вырезать строку, ибо потом ее все еще можно вставить через p.

Также есть сайт openvim.com, на котором можно упражняться.
> [name=despersy]
> К сожалению, он не является чем-то поможим на klavaro, а следовательно, там присутствует просто часть терминала и все. Самой тренировки не будет.
