# Занятие 1. Основы Linux
# Практическая работа №1.1
## Задания:
### 1. Посмотреть под каким пользователем в системе Linux.
```
who
whoami
last
w
```

### 2. Перейти в корневой каталог.
```
cd /
(знак перед диезом изменился; ~ - домашний каталог, / - корневой)
```

### 3. Посмотреть содержимое каталога.
```
ls (покажи содержимое)
ls -la (а - и скрытое, l - права содержимого (файлов, ссылок, каталогов), дату и другую подробную инфу)
```

### 4. Определить типы команд ls, cd.
```
type ls
type cd
```

### 5. Посмотреть из корневого каталога содержимое директории Home.
`ls + абсолютный путь до нужного каталога`

иначе при не абсолютном пути

`ls -la /home`

### 6. Перейти в директорию /tmp.
```
cd /tmp
(перед диезом появилось имя каталога)
```

### 7. Создать директорию /pt.
```
mkdir pt (создаём директорию)
ls (смотрим, появилась ли?)
```

### 8. Создать 3 текстовых документа 1.txt 2.txt 3.txt.
```
touch 1.txt 2.txt 3.txt
ls
```

### 9. Изменить или добавить содержимое текстового документа с помощью редакторов nano и vim.
```
nano 3.txt
cat 3.txt
```

```
vim text.txt
cat text.txt
```


### 10. Скопировать и переименовать директорию с файлами.
Скопируем файлы в новую дирректорию.
`cp -r /pt /pt1`

Затем переименуем старую дирректорию:
`mv /pt /new_pt`

### 11. Заархивировать директорию.
`tar -cvf pt1.tar pt1`

### 12. Разархивировать директорию.
`tar -xvf pt1.tar`

### 13. Посмотреть содержимое домашней директории и каталога usr одной командой.
`ls ~ /usr`

### 14. Посмотреть содержимое каталога в обратном порядке.
Обратный порядок
`ls -lr /pt1`

Обычный
`ls -l /pt1`

### 15. Посмотреть права на директорию.
`ls -dl /pt1`

### 16. Посмотреть права на текстовые файлы.
`ls -dl /pt1/3.txt`

### 17. Переместить и переименовать один текстовый файл в директорию /tmp.
Перемещение
`mv del.txt /tmp`

Переименование
`mv del.txt nel.txt`

### 18. Создать новую директорию, в ней создать новый текстовый документ, переместить из директории /tmp файл в новую директорию с заменой файла и запросом на его изменение
Создание дирректории и файла
```
mkdir /newdir
cd /newdir
touch 1t.txt
ls
```

Перемещение с заменой
mv -i /tmp/tet.txt 1.txt

### 19. Определить местоположение данного исполняемого файла ls, cd.
Невозможно посмотреть местоположение исполняемого файла cd, так он является встроенным в оболочку командной строки и не является исполняемым файлом.
`which ls`

```
whereis cd
whereis ls
```

### 20. Вывести краткое описание команды и утилиты ls, nano, rm.
команда `man -f "имя команды или утилиты"`

### 21. Создать символические ссылки.
создадим файл "homef"
```
touch homef
ln -s homef link1
ln -s link1 link2
ln -s link2 link3
```

### 22. Создать символическую ссылку в никуда, продемонстрировать её.
Удалим ccылку, на которую указывают ссылки link2 и link3 (**rm link1**). Теперь они указывают на то, чего нет, то есть в никуда. Проверим, что выведет команда `cat`.

А раньше было так:

### 23. Создать прямые ссылки.
```
touch homeforlinks
ln homeforlinks link1
```
ссылки 2 и 3 по аналогии

### 24. Создать собственную команду, которая будет использовать следующее: cd /usr; ls; cd - , с помощью alias.
`mycom` - переходит на директоию назад, вывод файлы из директории пт1, переходим в директрию юзр

### 25. С помощью команды cat написать любой текст и записать его в текстовый файл.
```
cat >> text.txt
"текст"
cat text.txt
```


### 26. Удалить один текстовый файл
`rm -v nel.txt`

### 27. Создать пустую директорию и удалить её
Создание
`mrdir deli`

Удаление
`rm -rv deli`

### 28. Удалить директорию с 3-я текстовыми файлами
`rm -rv new_pt`

### 29. Создать пользователя
Создадим пользователя и добавим пароль
```
useradd newu
passwd newu
```

### 30.Поменять пароль нового пользователя
Той же командой изменим пароль
`passwd newu`

### 31. Найти текстовый документ с помощью команд Find и Grep
Найти в директории /pt1 файл с именем 1.txt
`find /pt1 -name 1.txt`

Вывод команды ls передать grep, чтобы она нашла файл с "txt" в имени или файл с именем "1.txt"
```
ls | grep "txt"
ls /pt1 | grep "txt"
```

`ls | grep "1.txt"`

### 32. Воспользоваться логическими 'и' и 'или' как пример использовать команду ping
Пинганём восьмёрки 4 раза или, если с ними будет ошибка, яндекс.ру 2 раза
`ping -c4 8.8.8.8 || ping -c2 ya.ru`
Пинганём восьмёрки 4 раза и яндекс.ру 2 раза
`ping -c4 8.8.8.8 && ping -c2 ya.ru`

Ещё вариант с обединением "и" и "или". Намерено будем пинговать несуществующее доменное имя, отпработает только часть после "или"
`ping -c2 y.vb && ping -c2 ya.ru || ping -c1 8.8.8.8`

# Практическая работа №1.2
### **Задача:**
- Вы проводите поиск в Интернете, и видите, что используются две разные версии Python, и вы не знаете, какая из них был установлен в вашей системе установщиком Ubuntu или Debian, и устанавливал ли он какие-либо дополнительные модули?
Команда `dpkg -l |grep -i 'python'`

Вывод

- Допустим, у вас возникли проблемы с вашим веб-сервером Apache, и вы обратились к одному из многих форумов в сети с просьбой о помощи. Добрая душа, которая вам ответила, попросила вас отправить содержимое вашего файла `/etc/apache2/sites-available/default-ssl`. Разве вам не было бы легче, если бы вы могли просто удалить все закомментированные строки?
Используем команду `grep -v '#' etc/apache2/sites-available/default-ssl` .
Для примера применим команду на файле text.txt:

А так выглядит весь файл

- Например, предположим, что у вас есть целая папка, полная музыкальных файлов разных форматов. Вы хотите найти все файлы `.mp3` у исполнителя ABC, но вы не хотите никаких ремиксов. Как поступить?
Изначально я затупила и сделала папку "Музыка" с папкой внутри "АВС", поэтому использовала команду `find -name '*.mp3'`, чтобы увидеть все файлы мр3. А потом команду`find -name '*.mp3 | grep -vi 'remix`, чтобы вывести не ремиксы.

Осознав косяк, я добавила ещё три файла с именем группы и использовала команду `find -name '*.mp3 | grep -vi 'remix' | grep -i 'abc'`, чтобы вывести не ремиксы данной группы.

- Как отобразить количество строк до или после строки поиска?
После `grep -A 3 'str$' text.txt`
До `grep -В 3 'str$' text.txt`

И до, и после (В методических материалах эта команда стоит в задании "вывести количество строк совпадения", но она же не выводит количество строк совпадения, она выводит именно совпавшие строчки во всех направлениях, поэтому я написала её в это задание)
`grep -С 3 'str$' text.txt`

- Как вывести количество строк совпадения?
А к этому заданию подходит эта команда:
`grep -c 12345 text.txt`
Потому что она выведет именно количество строк, в которых есть заданное слово. С помощью команды ниже мы увидим, что "12345" встречается 7 раз, но в 4 строках, а цифра 4 - это именно вывод команды выше
`grep 12345 text.txt`

- Как выяснить количество совпадений?
Чтобы выяснить именно количество совпадений (напомню, в файле их 7, но строчек с этим словом 4), используем следующую команду:
```
grep -о 12345 text.txt | wc -l
```

- Как найти файлы по заданным номерам строк?
Возможно в задании описка, и стоит написать “как найти номера строк по заданным файлам / словам”?
команда `grep -n 'str$' text.txt`

- Произвести поиск рекурсивной строки во всех каталогах.
Во всех
`grep -r '#'`

Только в текущем
`grep -r '#' *`

- Произвести поиск строк в архивах файлах Gzip. (создать zip архив см.п.1.10)
Создание архива
`zip text.zip text.txt`

Поиск
`zgrep -i str text.zip`

`zgrep -i emp empty.txt.gz`

# Практическая работа №1.3
## 1. Философия Vim
Данный пункт прочитан, краткое изложение философии: когда клавиатура была только с буквами, редавктировать текст приходилось их комбинациями, поэтому в Vim несколько режимов. Если понять их, данный редактор перестанет быть головоловкой.
## 2. Установка
Перед началом работы с Vim установим его:
```
apt install vim
```

Установка выполнена успешно.
## 3. Запуск Vim
### 3.1 Создание файла
Я использую текстовый файл, который создала в предыдущих практических работах командой **`touch text.txt`**. Сейчас он выглядит так (команда `cat text.txt`):

Добавим ещё пару строчек:
```
echo "hola, mi amigo!
chocolate & banana = ??????
it's so strange! yep" >> text.txt
```
И посмотрим, как он выглядит сейчас (команда `cat text.txt`):

Теперь откроем файл с помощью Vim:
```
vim text.txt
```

#### Перейдём в режим вставки.
Начальное положение (курсор на третьей снизу строчке, перед "mi"):

После "А" - перейти в конец данной строки:

Возвращение в нормальный режим кнопкой **`Esp`**. (скрин другой, так как эти скриншоты я добавляла уже после редактирования)

Теперь перейдём в режим редактирования в это же положение курсора с помощью i (начальное положение на скриншоте выше, вторая строка сверху, на символе "5"):

Затем в положение после курсора с помщью а:

Выйдем в нормальный режим, кнопка esc и передвинем курсор вправо с помощью "l":

И наконец в начало строки с курсором с помщью I:

#### Визуальный режим:
"**v**" - режим обычного (посимвольного) визуального выделения перемещением курсора вверх, вниз, влево или вправо.

"**V**" - режим построчного визуального выделения. Строки выделяются целиком перемещением вверх или вниз.

"**[ctrl]-v**" — режим блочного визуального выделения. Выделяется прямоугольный участок, который можно увеличивать и уменьшать. Позволяет выбирать фрагменты нескольких линий.

### 3.2 Перемещение
Начальное положение:

h — перемещение влево

j — перемещение вниз

k — перемещение вверх

l — перемещение вправо

^ - перемещает в начало строки, но не включая пробелы

0 - перемещает в начало строки

Далее все команды будут применяться к этому положению курсора:
Было:

w - на слово вправо
Стало:

$ - конец строки
Стало:

6е - перемещение на 6 слов вперёд в конец слова
Стало:

4b - переместиться на 4 слова назад
Стало:

14G - переместимся на 14 строку

G - переместиться в конец документа:

gg -в начало

8w - на восемь слов вправо

e - переместимся к концу слова fishhh

b - вернёмся к пердыдущему слову

### 3.3 Поиск текста
Стандартный регистрозавизимый поиск:

Поиск без учёта регистра:

Поищем все совпадения с начала документа с помощью **n**:

А теперь с конца с помощью N:

Укажем явно регистр:

Хотя без "\С" работает так же:

### 3.4 Редактирование
Опять же сделаем наиболее интересные скрины, а если будет возможность, отобразим выполнение функций на одном скриншоте.
#### 3.4.1 Удаление текста
Было:

x - удаление символа под курсором
Стало:

dl - удаление символа слева от курсора (первая строка на скрине)
dd - удаление строки (раньше была вторая)
D - от положения курсора до конца строки удалить символы (сравнивать 4 строку из "было" и третью из "стало")
Стало:

**Теперь работаем с заменой.**
Было:

r — заменить символ на позиции курсора заданным после команды символом (см. строку 3)
ce — заменить следующее слово с конца (см. строку 5)
C — заменить до окончания строки. Текст на замену набирается в режиме вставки. (см. строку 6)
Стало:

#### 3.4.2 Копирование и вставка
Было:

Команды написаны в порядке выполнения:
y — копировать в заданном далее направлении (yj - копирование вниз, см. строку 2)
p — вставить последнюю скопированную (или удаленную!) строку ниже текущей (см. строку 2)
yy — копировать всю строку (копируем строку #rf5676gh, см. строку 4)
P — вставить последнюю скопированную (или удаленную!) строку выше текущей (см. строку 4)
Стало:

Y — копировать до окончания строки + P
Было:

Стало:

#### 3.4.3 Дополнительные команды редактирования
Отменим предыдущее действие (**u**):

Вернём его обратно (**<ctrl>-r**):

Присоединим строку к предыдущей (**J**):

### 3.5 Командный режим
### 3.5.1 Команды управления
**Сохраним изменения и выйдем:**

**Сообщение, что всё успешно:**

**Проверка текста с помощью cat:**

Да, текст наш, всё сохранилось.
**Допишем что-то:**

**Попробуем выйти (:q)**

**Не вышло(**

**сохраним (:w)**


**выйдем (:q)**

**Проверим с помощью cat:**

**зайдём обратно и сотрём что-то ещё**

**выйдем и не сохраним(:q!)**

**проверим через cat:**

Всё хорошо, данные новые не сохранились
**сделаем новый файл**

**Откроем старый файл и перейдём в новый файл**

**Перешли:**

**Вернёмся к предыдущему:**


**А теперь к следующему:**


### 3.6 Объединение команд
Скопируем 5 строк командой "**:y5**"

## 4. Заключение



### Basic movement: h, j, k, and l







### Word movement: w, e, b









### Number powered movement, e.g. 5w





![Uploading file..._o8kr0b97c]()
### Insert text repeatedly, e.g. 3iYes







### Find a character, f and F









### Go to matching parentheses, %


### Go to start/end of line, 0 and $



### Find word under cursor, * and #



### Goto line, g and G




### Search, /text with n and N






### Insert new line, o and O


### Removing a character, x and X


### Replacing letter under cursor, r


### Deleting, d





### Repetition with .





### Visual mode, v


### Real Vim awaits

### The end.

