## Terminal

### Как изучать?

1. - [x] [Курс «Инструменты промышленной разработки». Лекция 1 (Данила Кутенин)](https://www.youtube.com/watch?v=LGFMbSNEY20&t=3060s&ab_channel=ANDROIDHELPER%5BUNITY3Dandmore%5DANDROIDHELPER%5BUNITY3Dandmore%5D)
2. - [x] [Инструменты промышленной разработки](https://github.com/danlark1/hse_missing_cs_education)

### Про Текстовые Редакторы из терминал прочитать [здесь](https://github.com/danlark1/hse_missing_cs_education/tree/master/text_editors)


![](https://journaldev.nyc3.cdn.digitaloceanspaces.com/2020/01/Top_50_Linux_Commands-1.png)

C моим списком 

### Запуск нескольких команд 

**";"** : `command_1; command_2; command_3` - последовательный запуск нескольких команд за раз. 

> При запуске команд таким образом, они выполняются не параллельно, а последовательно. 
> Если вам нужен именно первый вариант, то используйте конструкцию `(command_1 &); (command_2 &)`



**"&"** : `sudo apt update & sudo apt upgrade &` - запуск команд в фоновом режиме.

> `tar -zcvf hashcat.tar.gz hashcat > text &` - cоздает сжатый архив с именем hashcat.tar.gz из директории или файла hashcat и делает все это в **фоновом режиме**

**"&&" (and)** :`git add -A && git commit -m "message" && git push` - запуск нескольких команд за раз при условии **успеха** предыдущей.



**"|" (pipe пайп)** : `ls -l | less` - когда выходные данные первой команды действуют как входные данные для второй.

**"||" (or)** : `comand1 || comand` - очень похож на оператор «else» в программировании. Выполняет вторую команду только в случае **сбоя** при выполнении первой команды


### Текст в терминале

**">>" и ">"** : 

`echo "Something" >> text.txt` - добавить слово в файл

`echo "Something" > text.txt` - перезаписать файл и оставить там только "Something".



#### "<", "<<" и "<<<"** : 

**< :**

`command < input.txt` < оператор перенаправления ввода, используется для перенаправления содержимого файла в стандартный ввод команды

    Основная разница: << используется для передачи текста в команду (ожидать с клавиатуры ввод), в то время как < используется для перенаправления содержимого файла в команду

**<< :**

`cat << EOF` - оператор ["here document"](https://joshuatz.com/posts/2023/shell-heredocs-productive-fun-bash-and-beyond/), используется для передачи многострочного текста в стандартный ввод команды. Ждет дальнейшего ввода текста с клавиатуры до слова `EOF` (без пробелов и в начале строки)

<details><summary>Примеры</summary>
<p>

Расширять какие-либо переменные внутри:

```bash
$ FOO="bar"

$ cat << \EOT > foobar.txt
echo "$FOO"
EOT

Вывод: echo $FOO

$ FOO="bar"

$ cat << EOT > foobar.txt
echo "$FOO"
EOT

Вывод: echo "bar"
```



</p>
</details>

**<<< :**

`command <<< "просто любой текст"` <<< - оператор ["here string"](https://www.baeldung.com/linux/heredoc-herestring#here-string).


### Pipes

Терминал (TTY) (с клавиатуры) предоставляет интерфейс для ввода и вывода данных, который взаимодействует со стандартными потоками файловыми дескрипторами (**stdin**, **stdout** и **stderr**) в Unix-подобных операционных системах. 

Взаимодействие происходит следующим образом:

* **stdin (0) (cтандартный поток ввода)**: - ассоциируется с клавиатурой, подключенной к терминалу. Пользователь вводит данные, они поступают в **stdin** программы через терминал.

* **stdout (1) (стандартный поток вывода)**: обычно ассоциируется с экраном терминала. Когда программа записывает данные в **stdout**, эти данные отображаются на экране терминала.

* **stderr (2) (cтандартный поток ошибок)**: также ассоциируется с экраном терминала. Когда программа записывает данные в stderr, эти данные (обычно сообщения об ошибках) также отображаются на экране терминала.

Пример перенаправления выводов потоков в терминале: `2>&1`

> Когда вы видите `&` (амперсанд) в конструкции перенаправления, он указывает оболочке, что за ним следует файловый дескриптор, а не имя файла.

### Shortcuts

[Ctrl + C, Ctrl + D, Ctrl + Z](https://younglinux.info/bash/ctrl-c)

* `Ctrl+C` ([SIGINT](/2%20ComputerScience/2.0%20Linux/2.0.4%20ConcurrencyAndMultitasking/2.0.4.1%20Process.md)) - прерывает работающую команду/программу , а чтобы продолжить — `%` (пример: запустите команду `tail | head`). 
* `Ctrl+Z`([SIGTSTP](/2%20ComputerScience/2.0%20Linux/2.0.4%20ConcurrencyAndMultitasking/2.0.4.1%20Process.md)) - посылает процессу сигнал, который приказывает ему заморозиться. Само собой разумеется он уходит в бэкграунд (background) – в фоновый режим.
* `Ctrl+D` - говорит терминалу, что надо зарегистрировать так называемый EOF (конец файла/ввода). Пример: запустите команду `cat`


`Ctrl+R <условие>` - простой обратный поиск и использование предыдущих команд.

> По умолчанию показывается только один результат. 
Чтобы листать вверх - нужно повторно нажать Ctrl+R. Чтобы листать вниз - delete (клавиша над enter)
Чтобы выйти из поиска, нажмите Ctrl+C или Ctrl+Z.

`Ctrl+A и Ctrl+E` - переход в начало и конец строки.

`Cmd+T` - открыть новую вкладку. Перемещение: `Cmd+1..n`. Закрыть: `Cmd+W`
`Cmd+D` - открыть новое окно, разделив экран вертикально. Перемещение: `Cmd+[/]`. Закрыть: `Cmd+W`

### Алиасы

Задаются следующим образом: 

`alias ll='ls -alF'`

Чтобы алиасы работали всегда их нужно закинуть в файл .[bash](/1%20Common/1.3%20Terminal/1.3.3%20CLI/1.3.3.1%20Shells.md)rc или .zshrc: вписываем `alias ll="ls -alF"`, после перезапуска терминала алиасы вступают в силу. 

---

[1.3 Terminal Folder](./1.3.0%20Terminal.md) | [Back To iTWiki Contents](https://github.com/eldaroid/iTWiki) |  [1.3.2 Text Editors Theme Folder](./1.3.2%20TextEditors/)