# Запуск Python програм з терміналу Linux # Якщо треба вийти/відмінити/перервати ## Спочатку спробуйте клавішу <kbd>q</kbd> або <kbd>Esc</kbd> Скорочено від QUIT. Вона працює як "вихід" у багатьох програмах --- в tig, htop, less, ranger, ncdu, man, ... ## Потім <kbd>Ctrl-c</kbd> Хоч це такий же хоткей як "скопіювати", в лінукс терміналах він означає "перервати роботу". ## Для Vim <kbd>Esc</kbd> <kbd>:</kbd><kbd>q!</kbd><kbd>Enter</kbd> Це виходу з редактору `Vim`/`Neovim`. Якщо з першого разу не спрацювало, спробуйте ще кілька разів. Мова вводу повинна бути англійська! ## Для nano <kbd>Ctrl-x</kbd> Це команда виходу з редактору `nano`. Може знадобитись підтвердження. ## Для tmux <kbd>Ctrl-b</kbd> <kbd>d</kbd> Це команда відключення від `tmux`, без переривання його роботи. ## <kbd>Ctrl-d</kbd> Це команда виходу з `bash` та `ssh`. # Базові програми для роботи в консолі ## SSH Підключенні до віддаленого серверу відбувається через SSH: ``` ssh user@server ``` (параметри `user` та `server` отримайте окремо). При першому вході потрібно підтвердити ключ (набрати `yes` та Enter). При старті запуститься Bash від імені вашого юзера. Якщо натиснути <kbd>Ctrl-d</kbd>, то з'єднання завершиться. Можна зробити кілька підключень з кількох різних терміналів. Для авторизації може використовуватись і пароль, але безпечніше і зручніше через асиметричний ключ. ## Bash та coreutils Bash та coreutils складаються з кількох сотень команд та конструкцій. Сумарно вони стають повноцінною мовою програмування. Основний типом даних який використовується в Баш, є рядок і список рядків. ### Хоткеї - клавіші вверх/вниз --- рухатись по історії команд, щоб не перенабирати команди які вже були набрані - <kbd>Tab</kbd><kbd>Tab</kbd> --- автодоповнення. **НАЙПОПУЛЯРНІШИЙ** хоткей, працює дуже часто і спрощує набір команд і назв файлів - <kbd>Ctrl-r</kbd> --- шукати по історії. Можна ввести шматок команди і Баш пошукає найсхожішу команду - <kbd>Ctrl-c</kbd> --- перервати команду або процес - <kbd>Home</kbd> / <kbd>End</kbd> --- перейти в початок або кінець рядка - <kbd>Ctrl-d</kbd> --- вийти з башу ### Файли і папки (files and directories) - `pwd` --- показати поточну папку - `ls`, `ls -la` --- показати файли і папки в поточній папці - `cd ..` --- перейти в папку вище - `cd dirname` --- перейти в дочірню папку `dirname` - `cd /bla/blo/ble` --- перейти в конкретну папку в системі - `cat filename` --- вивести на екран вміст файлу. Розширення у файлу може не бути. Великі і маленькі букви потрібно писати відповідно, не можна змішувати! - `echo "Test test test" > filename` --- записати фразу в файл `filename`. Ця конструкція називається "перенаправлення виводу", тобто, текст буде виводитись не на екран, а в файл - `mkdir dirname` --- зробити папку `dirname` ### Змінні (env vars) - `export BLABLA=testtest` --- зробити змінну `BLABLA` і записати в неї `testtest`. **Навколо = не повинно бути пробілів! Це мегаважливо!** - `echo $BLABLA` --- вивести змінну на екран - `env` --- вивести всі наявні змінні на екран - змінна `PS1` відповідає за відображення промпту в Баш, і її можна змінити - змінна `PATH` відповідає за те, де знаходяться програми для швидкого запуску, і її можна міняти - змінну `EDITOR` відповідає за те, який редактор є дефолтним, і її можна змінити - `echo "This is some $BLABLA text"` --- використання змінної всередині рядка зробить заміну. Це називається **інтерполяція змінної**, або **підстановка змінної** - `echo "my current user is ${USER}"` --- так також можна робити інтерполяцію змінної. - `echo "my current dir is $(pwd)"` --- в круглих дужках відбудеться **інтерполяція команди**. Тобто, в даному випадку команда `pwd` буде запущена, і її вивід підставиться в рядок. В Пайтоні це називається "виклик функції". ### Запуск - `cowsay "Hello my friend"` --- запустити команду `cowsay` з параметром - `fortune | cowsay` --- запустити команду `fortune`, і передати її вивід на вхід до `cowsay`. Конструкція називається **пайп** (pipe), бо текст від одної команди йде до іншої якби по трубі. - `fortune | figlet | lolcat` --- те саме, але тепер тут три команди передають одна до одної тексти. - `python some_file.py` --- запустити пайтон скрипт - `./some_file.py` --- якщо файл налаштовано як "запускаємий", то файл буде запущено - `cat some_file.py | less` --- вивести файл у пейджер `less` Пайпи універсальні. Практично будь-яку команду можна передати у пайп, і багато команд вміють читати з пайпу. ## less (пейджер) Якщо зробити `less some_file.py` або `cat some_file.py | less`, то файл можна переглядати у режимі пейджера. Хоткеї: - <kbd>q</kbd> --- вийти - <kbd>Up/Down</kbd> --- рухатись по файлу - <kbd>PgUp/PgDown</kbd> --- рухатись по файлу швидше - <kbd>/</kbd> --- шукати в файлу. Пишіть текст, тисніть <kbd>Enter</kbd> і якщо такий текст є то less туди перейде. Натисність <kbd>/</kbd><kbd>Enter</kbd> щоб шукати далі - <kbd>?</kbd> --- шукати в файлі *назад*. Аналогічно попередній команді - <kbd>-</kbd><kbd>S</kbd><kbd>Enter</kbd> --- не переводити рядки на нові якщо вони дуже довгі. Працює як перемикач для всього файлу ## man (мануал) Показує документацію (мануал) по команді. Якщо забули які у команди параметри, можна підглянути в `man`: - `man cowsay` - `man lolcat` - `man tmux` - `man man` - ... ## tmux (мультиплексер терміналів) Дозволяє кілька крутих штук: - tmux сесія не закривається якщо зупиняється SSH або закривається термінал. Вона буде висіти доки сервер не перезагрузиться або явно не закриють сесію. - можна робити вкладки в терміналі (переключатись між кількома Bash-ами) - можна робити розбиття екрану вертикально або горизонтально (наприклад, зверху редактор, а знизу запуск коду) Як запускати: - `tmux a` --- підключитись до першої ліпшої сесії, якщо вона вже є - `tmux new -s myname` --- створити нову сесію з іменем `myname`. Зручно, якщо не хочете заважати колегам по терміналу - `tmux a -t myname` --- підключитись до сесії по імені - `\tmux` --- запустити індивідуальну сесію, до якої тільки у вас є доступ Хоткеї, коли вже запущено: - <kbd>Ctrl-b</kbd> --- так званий **префікс** (prefix-key). Всі хоткеї по роботі з tmux повинні починатись з цього хоткею. Тому практично всі хоткеї подвійні. - <kbd>Ctrl-b</kbd><kbd>d</kbd> --- відключитись і не закривати tmux - <kbd>Ctrl-b</kbd><kbd>s</kbd> --- подивитись які є інші сесії - <kbd>Ctrl-b</kbd><kbd>с</kbd> --- запустити нову вкладку - <kbd>Ctrl-b</kbd><kbd>x</kbd><kbd>y</kbd> --- закрити вкладку - <kbd>Ctrl-b</kbd><kbd>2</kbd> --- переключитись на вкладку з номером 2. Номер означає на яку вкладку переключитись - <kbd>Ctrl-b</kbd><kbd>w</kbd> --- подивитись які є вкладки - <kbd>Ctrl-b</kbd><kbd>"</kbd> --- розбити вкладку горизонтально (h split). Щоб закрити її просто вийдіть з Башу через Ctrl-d - <kbd>Ctrl-b</kbd><kbd>%</kbd> --- розбити вкладку вертикально (v split) - <kbd>Ctrl-b</kbd><kbd>Left/Right/Up/Down</kbd> --- переміщатись між вкладками - <kbd>Ctrl-b</kbd><kbd>z</kbd> --- зробити вкладку на весь екран. Якщо натисну ще раз, то вернеться назад ## Neovim (`nvim`) Це консольний редактор файлів. Його фішка в тому, що він запускається у "нормальному" режимі спочатку. В цьому режимі НЕ можна вставляти символи і текст. Всього є кілька режимів (modes): - нормальний (normal), в цей режим можна вертатись клавішої <kbd>Esc</kbd> - вставка (insert), доступний по клавіші <kbd>i</kbd>, тут можна писати букви - виділення (visual), клавіша <kbd>v</kbd>, дозволяє виділяти текст - команди (command), клавіша <kbd>:</kbd>, дозволяє писати складні команди - термінал (terminal), запускається по <kbd>:</kbd>`term`<kbd>Enter</kbd>, виходити по <kbd>Ctrl-\ </kbd><kbd>Ctrl-n</kbd> :::warn Всі великі букви треба набирати як великі букви! ::: Команд і хоткеїв мільйон, але найкорисніші (всі запускати тільки з номального режиму): - `:w`<kbd>Enter</kbd> -- зберегти файл - `:q`<kbd>Enter</kbd> -- вийти - `:wq`<kbd>Enter</kbd> -- зберегти і вийти - `:q!`<kbd>Enter</kbd> -- вийти і не зберігати - <kbd>V</kbd>(далі клавіші вниз-вверх) -- зробити виділення - <kbd>y</kbd> -- скопіювати виділення - <kbd>d</kbd> -- вирізати виділення - <kbd>&gt;</kbd> -- посунути текст в сторону - <kbd>.</kbd> -- повторити попередню команду - <kbd>P</kbd> -- вставити - <kbd>u</kbd> -- відміна дії (undo) - <kbd>Ctrl-r</kbd> -- відміна відміни (redo) - <kbd>/</kbd> -- шукати в файлі (як у less) - `:!...` -- запустити баш команду. Наприклад: - `:!hexdump -C %`<kbd>Enter</kbd> -- отримати HEX-вигляд поточного файлу - `:!python %`<kbd>Enter</kbd> -- запустити програму у пайтоні (тільки якщо неінтерактивна) - `:vs|:term python %`<kbd>Enter</kbd> -- запустити програму у пайтоні інтерактивно - останню команду трохи напряжно набирати, але Vim/Nvim дозволяють робити хоткеї. Наприклад, якщо написати `:nnoremap <F3> :w<cr>:vs<bar>:term python %<cr>`<kbd>Enter</kbd>, то це додасть новий хоткей <kbd>F3</kbd>, який буде зберігати файл і запускати пайтон код поруч, інтерактивно. ## ranger `ranger` --- переглядач папок і файлів. Після запуску можна клавішами вверх вниз рухатись по файлам в поточній папці, а клавішами вліво/вправо рухатись між батьківськими і дочірніми папками. Хоткеї: - `q` --- вийти - `?k` --- подивитись всі доступні хоткеї - '!command` --- запустити команду в Баш # Веселощі в терміналі Окрім чорного екрану, в терміналі можна робити всяку веселу фігню. ## telnet, curl, asciinema Протоколи Telnet та HTTP можна експлуатувати - `curl parrot.live` --- мем з папугою - `telnet mapscii.me` --- карта в терміналі. Рухатися стрілочками, маштабуватися `a`/`z`, перемикати режим `c`, вийти `q` - `asciinema play https://asciinema.org/a/234965` --- запустити скрінкаст asciinema дозволяє не тільки грати файли з інтернету, а й записувати свої сскрінкасти. `asciinema -h` для допомоги ## просто весело - `lolcat` --- розмальовує все що на вході у кольори веселки. Наприклад, `tree / | lolcat` - `cowsay`, `cowthink` --- заставити корову говорити - `figlet` --- перетворити текст у ASCII-арт - `cmatrix` --- заставка з Матриці - `pipes.sh` --- просто труби - `pastel random` --- просто кольори ## Корисно - `htop` --- інформація про запущені процеси і зайняті ресурси (монітор процесів) - `ncdu /` --- інформація по розмірам файлів в системі - `hexdump -C ...` --- вивести файл у хакерському вигляді - `tree /home` --- показати файли і папки у вигляді ієрархії - `tig` --- заміна `git` - `curl 'https://google.com'` --- скачати сторінку з інтернету - `curl 'https://google.com' > google_page` --- скачати сторінку з інтернету і зберегти у файл - `pkill -f telnet` --- вбити всі запущені telnet програми. Можна робити комбінації через пайпи, наприклад, `curl 'https://google.com' | hexdump -C | lolcat`