Created
January 5, 2022 14:51
-
-
Save IsmagilovQA/841a9b49b5f3c17c43fc94888e609cb6 to your computer and use it in GitHub Desktop.
COURSE [BASH]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(интерпретатор - оболочка -> bash for Unix systems) | |
( use this link: https://appleinsider.ru/tips-tricks/mac-os-x-nachinayushhim-o-rabote-v-terminale.html) | |
Интерпретатор zsh по сути улучшенный bash. | |
В заголовке терминала отображен текущий каталог | |
ls посмотреть содержимое текущего каталога (LIST) | |
ls -ltr посмотреть с датой и правами (нижний в списке будет последним добавленным/измененным) | |
echo $PATH путь где находится список каталогов с командами bash | |
Tab нажимая Tab происходит автодополнение для каталогов, команд, пути, имен файлов. Если есть несколько опций то по второму нажатию на Tab терминал выводит все варианты (disk -> Tab Tab) | |
Up/Down - стрелки для показа предыдущих введенных команд | |
ls Downloads - посмотреть содержимое каталога Downloads для (для OS X). Для Unix-систем ls ./ Downloads | |
ls -la - вывести все введенные команды из истории | |
///// | |
/// Command line course - bash (-zsh - продвинутый bash) | |
(Use this link: https://github.com/arsbatyrov/bash/tree/master/bash) | |
$ - означает что мы используем bash | |
pwd / cd и каталоги (ветка -pwd) | |
pwd -> Print Working Directory (/Users/ismagilov -> / означает путь от корневого каталога) | |
cd -> Change Directory | |
~ ismagilov$ -> домашний каталог (личный каталог пользователя) cd ~ | |
/ ismagilov$ -> корневой каталог cd / | |
cd / -> перейти в корневой каталог (Macintosh HD) | |
cd - или просто cd -> cd - вернуться в предыдущую директорию / cd сразу в домашнюю директорию (то есть в домашнюю директорию) ~ ismagilov$ | |
cd ~ вернуться в домашний каталог | |
cd dir/bash -> переходим в директорию bash (dir означает Directory) | |
сd .. -> переход в родительскую директорию то есть на один уровень вверх | |
сd ../.. -> переход в родительскую директорию то есть на 2 уровня вверх | |
Clear -> очищает консоль | |
ls и man - список файлов (ls) | |
Команда [-Ключи] [Параметры] | |
[Параметры] - обычно указывается путь до папки или файла с которой нужно проводить манипуляции | |
{-Ключи} - модифицируют работу самой команды | |
ls -l foldername -> “длинная” форма выдачи содержимого директории (с правами доступа, владельцы, размер в байта, дата последнего изменения, название с расширением) | |
ls -l folder_1 -> показать содержимое папки folder_1 используя “длинную” форму | |
ls -a -> [all] показывать все скрытые файлы и папки (.hidden.txt - если начинается с точки, то значит скрытый) | |
ls -RA | |
ls -a -l или ls -al или ls -la-> можно использовать два ключа подряд в любом порядке | |
ls -h -> [human readable] форма - вывод в читаемом виде | |
ls -R -> [recursive] рекурсивная выдача, то есть выдаст все содержимое всех вложенностей внутри текущей папки | |
ls -RAlh - так тоже можно комбинировать | |
man ls - справка по команде ls. Выход из справки нажать q | |
Touch, mkdir и rmdir - работа с пустыми файлами (touch) | |
touch filename - создает пустой файл | |
mkdir filename - создает пустую директорию | |
rmdir filename - удаляет только пустую директорию | |
rm filename - удаляет файлы | |
touch bad file - создаст два файла bad и file, чтобы создать один файл нужно “bad file” поставить кавычки. Лучше избегать пробелов в названии папок и файлов а ставить _. Также не стоит называть используя киррилицу. | |
echo "testttt" > 7.json - создаст строчку testttt" и добавить в файл 7.json если даже он не существует | |
mv (перемещение или переименование) и cp (копирование файлов и директорий) | |
mv [откуда (текущий)] папка/файл [куда] папка/файл (!!! нужно выставить текущую директорию чтобы она была общей для откуда и куда директорий) | |
cp [откуда (текущий)] папка/файл [куда] папка/файл | |
mv -> перемещение -> mv folder_1/file.txt folder_2 | |
mv -> также и переименование -> mv folder_1/file.txt folder_1/file_2.txt. Можно сразу переместить и переименовать одной командой -> mv folder_1/file.txt folder_2/file_2.txt. | |
mv - > перемещение файла в текущую директорию с помощью точки “.” bash ~ mv folder_1/file_2.txt . -> переместить из folder_1 файл file_2.txt в текущую директорию bash. | |
folder_1 mv file_2.txt file.txt. -> переименование файла в текущей директории | |
bash mv file_2.txt /Users/ismagilov - перемещаем файл в домашнюю директорию | |
~ mv file_2.txt ~/Downloads/bash - перемещаем назад из дом директории в bash папку | |
cp [папка/файл] папка -> копирование файла без изменения имени -> bash cp file_2.txt folder_1 | |
bash cp folder_1/file_2.txt folder_2/file_3.txt. -> копировать с переименованием | |
Cp папка/* папка -> скопирует все файлы из одной директории в другую директорию /* - означает все файлы (bash cp folder_1/* folder_2) | |
cp -r - копирование папки со всем содержимым | |
rm - удаление файлов и директорий | |
rm [папка/файл] - удаление файла (bash rm folder_2/file_4.txt) | |
rm -r - удаление директории (если там были файлы, то вместе с файлами) | |
bash rm -r ./* - удалит все файлы и паки из текущей директории bash | |
rm -rf -> удаляет все рекурсивно без запроса на удаление !!! DON’T USE IT !!! | |
rm -i -> безопасное удаление файлов | |
rm -ri -> безопасное удаление папок (система будет спрашивать запрос на удаление по каждому файлу в папке yes/no) - bash rm -ri one | |
cat и less - просмотр файлов (cat - в консоли сразу же) | |
cat -> Concatenation - объединение текстовых файлов, а также отображение их | |
(one cat log.txt -> показать в папке one содержимое log.txt в консоль) | |
Вывод объединенного содержимого двух разные файлов -> one cat log.txt log1.txt (то есть последовательно перечисляем файлы кот необходимо объединить и вывести) | |
less -> просмотреть текст но удобнее работать с большими текстами (up/down, pageUp/pageDown, space - перемещение на след. страницу). Открывается в отельном вьюпорте, для выхода нажать q. Поиск по тексту -> /слово | |
nano и vi - редактирование текстовых файлов (в отдельном редакторе) | |
nano - консольный текстовый редактор для Unix подобных систем. Управляется сочетанием клавиш. | |
nano [имя_файла] - открыть файл в редакторе nano. | |
^ + O - save file | |
^ + X - save and quit | |
vi - также консольный текстовый редактор для Unix подобных систем, только он с модальным интерфейсом. Два режима - командный и режим вставки. Чтобы редактировать нужно нажать i (INSERT). Выйти из режима вставки ESC. Сохранить файл -> :w (write). Выйти из редактора :q (quit). Выйти без сохранения :q! | |
Hot keys -> перевод каретки на номер строки -> :2, поиск по тексту -> /текст, удалить строку -> dd, отменить последние изменения -> :u | |
grep - поиск по тексту (grep) | |
grep [шаблон] - будет искать от корневого каталога | |
^ C выход | |
grep [шаблон] [файл] - поиск внуьри файла (one grep Text log.txt). Grep является кейс сенсетив. А также он ищет по подстроке. | |
grep -i - игнорирование регбиста букв. | |
grep -v - показать только несовпавшие строки (выводит все кроме указанного) | |
grep -c - подсчет строк (one grep -c Text log.txt) - 3 вхождения со словом Text | |
grep -cv - можно комбинировать | |
grep -R Text one/ - поиск по всей папки one (bash grep -R Text one/) -> выдача (one//log.txt:Text 1) | |
grep -Re Text [12] - использование регулярных выражений. Выводит все Text 1 и Text 2 | |
find - поиск по файлам и папкам | |
find [папка] [ключи] | |
bash find . -name first_file_1 -> ищет с текущего каталога так как точка стоит, -name - паттерн поиска, first_file_1 по какому имени искать. | |
bash find . -name *_file - ищет по частичному совпадению | |
bash find . -name *.mp3 - ищет все файлы с расширением mp3 начиная с текущей директории bash | |
bash find . -type d -> поиск всех директорий от текущей bash | |
bash find . -type d -name “one*” -> поиск всех директорий с названием вхождения на one | |
bash find . -name “*t*” -> поиск файлов и папок с именем вхождения буквы t | |
bash find . -name “*t*” -type f -> поиск только файлов с именем вхождения буквы t | |
bash find . -name “*.mp3” -delete -> найти и удалить файлы с расширением mp3 | |
bash find . -name *.txt -delete -print -> показать удаленные файлы | |
Перенаправление вывода | |
echo "hello" - вывод строки в консоль | |
echo $переменная | |
echo $PATH - вывод системной переменной | |
echo "Hello world" > t.txt -> создаст файл с текстом | |
echo "hi again" > t.txt -> перезаписывает текст (стирает старый) | |
echo "hi again 222” >> t.txt -> не сотрет а добавит новый текст | |
cat 1.file 2.file >> 3.file - совместит содержимое двух файлов в один под названием 3.file | |
команда | команда -> передача вывода одной команды на ввод другой | |
ps, top и kill - работа с процессами | |
Процессы внутри консоли: | |
ps - список процессов внутри консоли (CMD -> название процесса, PID -> process id на которую можно ссылаться для взаимодействия) | |
Процессы отвязанные от консоли: | |
ps x - список процессов вне консоли (везде) | |
ps u - список процессов только нашего юзера | |
ps au - список процессов всех пользователей | |
ps aux - список всех процессов всех пользователей | |
top - вывести таблицу процесов с постоянным обновлением и отсортированные по нагрузке | |
kill - завершить процесс | |
kill [PID] - завершить процесс используя id процесс (id взять из команды ps) -> kill 4277 | |
kill -l - список сигналов с которыми можно работать | |
SIGTERM (TERM) - штатно завершить процесс (по дефолту для kill) | |
SIGKILL (KILL) - сразу (более хардкорно) пример -> kill KILL 4283 | |
ping и curl - работа с сетью | |
ping - для проверки целостности и качества соединения | |
ping google.com - запросы | |
control + C - остановить - получаем общее количество отправленных и полученных пакетов, также процент потерянных пакетов | |
ping -c - отослать определенное число пакетов | |
ping -c 3 -i 2 google.com c интервалом в 2 сек | |
ping -c 3 -a - пакеты приходят со звуком | |
curl https://example.com | |
Curl -L ya.ru - разрешать переходить по редиректам | |
Curl -L ya.ru --verbose - включить доп. информацию | |
В дефолтном состоянии curl отсылает get запрос | |
Curl адрес сайта/апи?параметры - отсылка запроса с параметрами | |
curl https://reqres.in/api/users?page=2 | |
curl -X POST https://reqres.in/api/login --data "email=peter@klaven" - пост запрос с параметрами | |
curl -X POST https://reqres.in/api/login --data "email=peter@klaven" --data "password=cityslicka" | |
curl -H "Cookie: session=cf98...;" https://ya.ru - передать нужную куку в хедер | |
ssh и scp - работа на удаленном сервере | |
Работа с сетевым протоколом ssh, и дает доступ на удаленные машины и шифрует весь трафик в том числе пароли. | |
Нужно знать адрес сервера. | |
ssh пользователь@сервер - доступ на удаленный сервер (ssh [email protected]). После ввода пароля попадаем на удаленный сервер | |
exit - выход из удаленного соединения | |
scp - позволяет копировать с/на удаленного сервера на/с нашу машину | |
scp пользователь@сервер:/папка/файл папка - копирование с удаленной машины -> | |
scp [email protected]:/home/testuser/test.txt . - точка означает копирование в текущую директорию на нашей машине | |
scp папка/файл пользователь@сервер:/папка - копирование на удаленную машину c переименованием файла-> | |
scp test.txt [email protected]:/home/testuser/test3.txt | |
sed - потоковое редактирование текста (stream editor) | |
echo 123123 | sed ’s/1/5/‘ - s-это замена по подстроке substring | |
sed s/test/Hello/ my.file - замена подстроки в файле | |
sed “3 s/test/hello/“ my.file- заменить строку в файле по номеру | |
sed “s/test/hello/;s/9/000/“ my.file - замена по нескольким патернам | |
sed “s/test/helloworld/w new.file” my.file - записать результаты замены в файл | |
awk - продвинутая работа с текстом (построчная работа с файлами, удобно для таблиц) | |
echo “first second” | awk ‘{print $номер}’ - вывод подстроки по номеру | |
$0 - вся строка | |
$1 - первая подстрока | |
$2 - вторая подстрока | |
cat my.file | awk ‘{print $1}’ | |
echo “this, is,a,table” | awk -F, ‘{print $1}’ - с учетом разделителя (запятой) | |
echo “this; is;a;table” | awk -F\; ‘{print $1}’ - с экранированием (когда ; так как есть такой символ в баше) | |
xargs - передача списка аргументов | |
команда | xargs ключи команда2 | |
echo a b c d e f | xargs -> a b c d e f преобразовались в ключи | |
echo 1.file 2.file | xargs cat - вывод содержимого двух файлов | |
ls | sort -n | xargs - вывод файлов в сортированном порядке | |
ls | sort -n | xargs cat - вывод объединенного содержимого всех файлов из текущей директории | |
echo “new file content 72” >> 71.new_file - сохраним это в файл 71.new_file | |
ls *.file | sort -n | xargs cat - вывод с сортировкой но с вхождением по .file | |
grep this -R | awk -F: ‘{print $1}’ | sort -n | xargs cat | |
echo “google.com ya.ru bing.com go.mail.ru” > adds.file - сохранили в файл -> | |
cat adds.file | xargs -n 1 ping -c 1 - будет пинговать все по списку из файла | |
Переменные окружения | |
$имя - переменная окружения | |
a=“Hello world” | |
echo $a - выведет переменную и видно только в текущей сессии баш | |
bash - начать новую сессию баш | |
exit - завершить текущую сессию баш | |
export b=“hello again” - передача переменной в дочернюю сессию | |
echo ‘echo “Hello world for every bash session”’ >> ~/.bashrc | |
echo “A=‘Hello world’” >> ~/.bashrc -> Чтобы переменная существовала во всех сессиях нужно добавить ее в спец файл ~/.bashrc (файл с настройками bash) -> cat ~/.bashrc. Сделать бэкап фала -> cat ~/.bashrc >> .bashrc_bak | |
Переменные PS1 и PS2 | |
$PS1 - внешний вид консоли | |
echo $PS1 | |
/u - имя пользователя | |
/h - имя машины | |
/w - текущая директория | |
PS1=“[\t][\w] $” - вывод текущего времени и директории | |
PS1=“\t j\j \u@\h:\w\n\$” | |
\j - фоновые процессы | |
\n - перенос каретки | |
PS1=“# ” - перед курсором будет стоять # | |
$PS2 - разделитель в многострочных командах | |
\Enter в конце команды позволяет создать многострочную команду | |
ls \ Enter ключи | |
ls \ Enter | |
-R. -> То же самое что ls -R по сути только ключи с новой строки идут | |
Алиасы (для сокращения других команд и их последовательности) | |
curl -sL https://habr.com/top | grep post_title_link >> habr.top -> длинная команда на которую хотим поставить алиас | |
alias имя=“команда” | |
alias habr=‘curl -sL https://habr.com/top | grep post_title_link >> habr.top’ | |
habr | |
cat habr.top | |
alias пше=‘git’ | |
alias gti=‘git’ | |
alias gs=‘git status’ | |
Также можно переопределять команды -> | |
alias ls=‘ls -A’ Например всегда выводить список со скрытыми файлами | |
source - запуск bash-скриптов | |
cat bash.run - в нем находится какой то баш скрипт | |
source - запустить bash-скрипт и он выполнит любую последовательность заложенную в скрипт | |
echo “alias gs=‘git status’” >> ~/.bashrc - созранение алиаса в bashrc для последующего использования. Чтобы обновить инфо в bashrc нужно выполнить команду source ~/.bashrc -> по сути это дает возможность сохранять любые инструкции и Алисы и использовать их в текущей сессии баш. | |
History, !! и reverse search - работа с историей команд | |
history - выведет всю историю команд | |
!! - выполнить последнюю команду | |
!-n - выполнить команду n число команд назад | |
Ctrl + R- Поиск команды по ее части (выцепляем из истории) | |
///// | |
* $ ls -l ~list of files / long (with details) / in home directory | |
* $ pwd print working directory (current location) | |
* $ cd Documents change directory to Documents | |
* $ cd return back to Home directory | |
* $ cd ~/IdeaProjects in case you want to navigate from another directory to IdeaProject through Home (~) relative path | |
* $ cd .. If you want to navigate “up” (../.. - go o few levels up) | |
* $ man ls get help instructions, options about command ‘ls’. Pressing ‘q’ will quit | |
* $ mkdir Make a new directory | |
* $ touch Make a new empty file | |
* $ cp Copy a file | |
* $ mv Move a file | |
* $ rm Remove a file or directory (learn about the -r option) | |
* $ less Show the contents of a file in a scrolling buffer | |
* “.” Means Current folder | |
* tree -> gets tree view from current directory | |
Сочетания клавиш | |
Сочетание Описание | |
CTRL-A Перемещение курсора в начало строки | |
CTRL-E Перемещение курсора в конец строки | |
CTRL-R Поиск по истории | |
CTRL-W Вырезать последнее слово | |
CTRL-U Вырезать всё до курсора | |
CTRL-K Вырезать всё после курсора | |
CTRL-Y Вернуть последнюю вырезанную строку | |
CTRL-_ Отмена | |
CTRL-L Очистка экрана терминала |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment