Skip to content

Instantly share code, notes, and snippets.

@IsmagilovQA
Created January 5, 2022 14:51
Show Gist options
  • Save IsmagilovQA/841a9b49b5f3c17c43fc94888e609cb6 to your computer and use it in GitHub Desktop.
Save IsmagilovQA/841a9b49b5f3c17c43fc94888e609cb6 to your computer and use it in GitHub Desktop.
COURSE [BASH]
(интерпретатор - оболочка -> 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