Основы Bash
Введение
$ в Promt означает, что у вас запущен Bash % означает, что у вас
Zsh
~ перед $ означает, что вы находитесь в home
Чтобы выполнить команду нужно нажать Enter
Команда ls показывает содержимое текущей директории
ls
docker Documents Music notes.txt Pictures python snap Templates yandex-tank Desktop docker-lab Downloads node_modules Public shell_scripts ssh-com Videos yarn.lock
Командой cd можно сменить директорию
cd Documents
Чтобы вернуться в домашнюю директорию достаточно выполнить
cd
без параметров
Чтобы повторить предыдущую команду достаточно нажать стрелку вверх
SSH
Чтобы подсоединиться к удалённому компьютеру по SSH выполните
ssh имя_пользователя@имя_компьютера
ssh andrei@andrei-ubuntu
Чтобы закрыть ssh сессию выполните
exit
Подробнее про работу с SSH в Linux читайте в статье « Основы SSH »
Автоматическое дополнение
При выполнении cd писать полное название директории необязательно.
Если из домашней директории вы хотите перейти в Documents, достаточно набрать
Doc и нажать Tab.
Если вы наберете просто D и нажмёте Tab, то Bash не поймёт куда вы хотите перейти -
в Desktop, Documents или в Downloads, поэтому ничего не произойдёт (в Zsh сразу появится подсказка).
Если вы нажмёте Tab ещё раз - появится подсказка, а именно список всех директорий, название
которых начинается на D
cd D
Desktop/ Documents/ Downloads/
Чтобы перейти в родительскую директорию выполните
cd ..
Чтобы узнать полный путь до текущей директории выполните
pwd
Аргументы
Рассмотрим команду
cd Documents
cd это команда, Documents это агрумент (argument).
Чтобы увидеть скрытые файлы в директории выполните ls -a
Где a означает All
У скрытых файлов первый символ в назывании - это точка
ls -a
. .bashrc Desktop docker-lab .gnupg Music Public snap .sudo_as_admin_successful .Xauthority .. .bash_history .cache .docker Documents .local node_modules Pictures python .ssh Templates yandex-tank .bash_logout .config docker Downloads .mozilla notes.txt .profile shell_scripts ssh-com Videos yarn.lock
-a это специальный вид аргумента, который называется опция (option).
Опции добавляют командам дополнительный функционал.
Опции начинаются с символа -
После - можно перечислить несколько опций подряд
Чтобы увидеть дополнительную информацию о файлах выполните ls -l, l означает long format
ls -l
total 96 drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Desktop drwxrwxr-x 3 andrei andrei 4096 syys 17 19:09 docker drwxrwxr-x 4 andrei andrei 4096 heinä 19 21:46 docker-lab drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Documents drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Downloads drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Music drwxr-xr-x 2 root root 4096 heinä 18 22:11 node_modules -rw-rw-r-- 1 andrei andrei 1 syys 19 21:40 notes.txt drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Pictures drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Public drwxrwxr-x 2 andrei andrei 4096 syys 19 12:54 python drwxrwxr-x 2 andrei andrei 4096 syys 19 22:01 shell_scripts drwxr-xr-x 3 andrei andrei 4096 syys 15 19:58 snap drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Templates drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Videos drwxrwxr-x 3 andrei andrei 4096 heinä 16 16:55 yandex-tank -rw-r--r-- 1 root root 86 heinä 18 22:11 yarn.lock
Чтобы узнать какие ещё опции есть у команды ls выполните
man ls
Результатом этой команды будет подробное описание всех опций. Список
довольно длинный, чтобы перемещаться вниз по списку нажимайте пробел, чтобы
вернуться наверх нажимайте b
Чтобы выполнить поиск по слову введите /слово. Чтобы перейти к
следующему результату поиска нажмите n
Чтобы закрыть man нажмите q
Подробнее про все опции ls читайте в статье
«man ls»
Чтобы увидеть дополнительную информацию о файлах, вкючая скрытые и отсортировать выдачу по вермени изменения выполните ls -lat
ls -lat
total 176 drwxr-xr-x 31 andrei andrei 4096 syys 20 10:20 . -rw------- 1 andrei andrei 34 syys 20 10:20 .lesshst -rw------- 1 andrei andrei 236 syys 20 10:16 .Xauthority -rw------- 1 andrei andrei 17546 syys 19 23:40 .bash_history drwxrwxr-x 2 andrei andrei 4096 syys 19 22:01 shell_scripts -rw-rw-r-- 1 andrei andrei 1 syys 19 21:40 notes.txt drwxrwxr-x 2 andrei andrei 4096 syys 19 12:54 python drwx------ 2 andrei andrei 4096 syys 17 19:19 .ssh drwxrwxr-x 3 andrei andrei 4096 syys 17 19:09 docker drwx------ 3 andrei andrei 4096 syys 15 20:04 .gnupg drwxr-xr-x 3 andrei andrei 4096 syys 15 19:58 snap drwxr-xr-x 15 andrei andrei 4096 syys 15 19:58 .cache drwxr-xr-x 12 andrei andrei 4096 syys 15 19:58 .config drwxrwxr-x 4 andrei andrei 4096 heinä 19 21:46 docker-lab drwx------ 2 andrei andrei 4096 heinä 18 23:06 .docker drwxr-xr-x 2 root root 4096 heinä 18 22:11 node_modules -rw-r--r-- 1 root root 86 heinä 18 22:11 yarn.lock drwxrwxr-x 3 andrei andrei 4096 heinä 16 16:55 yandex-tank drwxr-xr-x 4 andrei andrei 4096 heinä 16 15:08 .local -rw-r--r-- 1 andrei andrei 0 heinä 16 12:27 .sudo_as_admin_successful drwx------ 5 andrei andrei 4096 heinä 16 12:12 .mozilla drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Desktop drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Documents drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Downloads drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Music drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Pictures drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Public drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Templates drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Videos -rw-r--r-- 1 andrei andrei 220 heinä 16 11:53 .bash_logout -rw-r--r-- 1 andrei andrei 3771 heinä 16 11:53 .bashrc -rw-r--r-- 1 andrei andrei 807 heinä 16 11:53 .profile drwxr-xr-x 3 root root 4096 heinä 16 11:53 ..
Про то как работать с аргументами командной строки в ваших скриптах читайте здесь
$(): Использовать результат другой команды
Чтобы посмотеть к какому терминалу вы подключены выполните
tty
/dev/pts/31
Чтобы сделать листинг этого файла можно скопировать вывод и вставить после ls
ls -l /dev/pts/31
crw--w---- 1 andrei tty 136, 31 мая 23 13:48 /dev/pts/31
Чтобы получить тот же результат быстрее
ls -l $(tty)
crw--w---- 1 andrei tty 136, 31 мая 23 13:48 /dev/pts/31
Просмотр файлов
Чтобы открыть содержимое текстового файла выполните cat имя_файла или less имя_файла
cat textfile
less book1
cat выведет содержимое в консольный вывод. less откроет файл во всё окно.
Навигация по файлу, открытому с помощью less, осуществляется также как и по man.
Пробел | вниз |
b | вверх |
/ | поиск |
n | следующий результат поиска |
q | закрыть |
Если вы пытаетесь открыть бинарный файл с помощью less, то можете получить предупреждение
"file1" may be a binary file. See it anyway?
cat откроет такой файл без предупреждения
Чтобы продолжить нажмите y. Результат вас скорее всего не обрадует - получится трудночитаемый набор символов.
<C3>&NU_p<C6>x<E6><AC>^N<B4>E<EA>^B<D1>E^U<AB>^A3Fy<A3>^T^N<B5>7`^D<8E><F4><9F><8D>^M<E8>y<CD>^T6^A<DF>^T<83><8A>^F{џZ<8B><8C>p4S^G^TUs <C5>H@<DB><C3>}*d<C0>$<D4>Q^@Fq<83>S.:<81>\ƌp<E6><83>ӭ"<9F>j <C8><E9>I<92>/<BD>.i)hB \P(<A6>^B<D2>^Q<91><8A>)h^A*;<A9><96><DA><DA>K<86>Ve<8D>K<B0>Q<93><81><C9><C5>KU<F5>7X<B4>ۙ]<B6><A2>D<CC><C7>n<EC>^@9<E3><BD>RZ<8C><A5><E1>mv<D7><C4>~^^<B4><D7>4<F8><E7>^V<B7><91><89>a<F3>Sk<95>#<AE>3X<9A>7 <C4>^]'W<D4>m<EC>ml<B5>1<E7><DE><DC>X<89><9E><DB>^Q$Ђ]Y<B3><C7>B3<EA>^M`<FC>^P<D5><E3><87><U+009E>^Z<F0>Ǖ"<DD>[<E8><82>{<A0><E8><E0>Dw*<AA>30<FB><C4><EF><E3><FD><92>k^G<E1>t<B1>i<9E>%<BC><96>g<B9><B9>}O<C4>:<85><B4>6<C6>^V<D9>^P3K7<DA>^FG^K<B7>^K<92>y&<B4><E4>^]<8E><EB><C4>?^QtM <EF>T<B6><BE><B7><D4>7<E9>f<D7><ED>% ^E@<B8>m<B1><90>I^@<8C><F0>Ol^ZՓĶ<D1><E8>ڶ<AB>5<9D><EC>0<E9><86>a6<F8><86><E6><F2><F3><B9><94>^C<F3>^L^Lם<FC>a<F0>-<F7><88>|Ur<D6><C8>M<9E><A7>Ỉ.<C8>=g<B7>u<92><D8><FA>g{g覺<88><D6>h<FE>^M\I<AA>,<A9>wu<A4>I=<DA>^PIY%<8C><B3>.9<EE><C5>q<8A>9^U<84>t:^?<88>,<EF><FC>;a<AE>[Er<D6><FA><84>i-<AC>f<J<E1><97>p<F9>s<D7>^Y?AW4<8D>J<D7>T<B4>[<BB>97<C4>Y<93>$c^L<AC>T<8F><A8> טæǪ|^S<F0>F<99>zڭ<B4><8D>md<AB>{f<A5>'<B0><9D> c<E7>c^G^AJ^P ㎵<DA><FC>7:<BA><F8>^^X5˸o<EF>!<96>D7<B0><C1><E5>-҇m<B2><ED><E9><96>\^RA<C1>9<E9>҉AZ<E8>^N<8E>Y^V8<9A>I^]Q^P^Vfc<80>^@<EA>I<AC>m'<C4>vZ<95><EC>v<90>y<9B>偮b<84>,<D1>^B^@u><87> <FD>(<F1><EE><9B>u<AC>xESC]<D2>ld<F2><EE><AF>4<E9><ED><E1>oGx<D9>G<EA>kESC<E1>̩&<95><A1><C2><D6>ѭƛ<A3><C7>kx<^Rb0рx#tm<9F><F7>G<E3>1<8D><C0><EA> <D4>mf<D4><EE><B4>اF<BB><B6><8E>9e<8C>uE}<C1>I<FA><EC>oʲ<F5><AF>^WiZF<B0>t<BB>ߴ$<A9>f<D7><D2>8<8F>(<90>+^Eg'<^@O'<B0><AE>^_O<D4>#<B7><F8><DB>i<AC>Gs^L<B6>:<FD><8C><F6>-$n<D8>^R[ȭ^V<EC><80>^A<C3>H<A3><9E>r^EQ<F8><B5>8^?^^ߤ&yJxB<F0>=<BC>Q^F^W'<CD>Wh <C6>rʤm^G<A1>5q<82>^]<8F>I<F1>'<8A><B4><CD>^KN<B0><D4>.<8C><93>[_<DC><C3>m^Cۯ<99><BD><E6> G<8F>f$^L<FB>Ս;<C4>^Ze<F5><84><F7><D0><DD>G<E4>ۼ<A9>9c<83>^KDvȭ<EE><AC>1<F9>^^<84>^S<E7>?^T<AF>l<EF><FE>^Zx^<E7>N <82><E2><CE>ݵ<AD>1<E1><8D>"b<D1>E^\<EB><9E>1<90><AA><A0><92>N09<ED>QIa^?<E2>^O<85>^^8<F0><FE><97>g5<86><B7>%<C5><F4>fGR<9F>k<97>y)(8<C1>2F#9^X^_0<C0><C0>^@S<8A>^K^^<A1><A5>j<D0><EA>^RO^Tj<F1><CB>^PV1<BA>ᶶv <B7><D0><E0><E3><E8>j<BF><85><BC>Ec<E2>(oe<B0>Y<D4>Y^Ke8<95>6<95><96>3<87>^<BC><E0><F7><AE>wB<B3><B9><BB><F8><96><FE>"<B6>i^SH_^O<C3>f<C1><F2>^D<B3><99>Y<86>A<EE><8A>1<9F><FA>hk<9F><F8>U<E2>ESCESCmCR<D3>C <C9>5֩<E2><AD>NH^@<88><FF>^@<A9>^D<BE><E2>F@^_(^Y$f<93><8A>Acд<BF>^QZj>#<D4><F4>(!<B9>^W^Zg<97><F6><96>h<F0><83>z<EE>\6y<E3>=<AB>d<F4><AF>1<B2><D5>WE<F8><8D><E3>k<B9>a<95><CD><CC><FA>]<AD><A8><90><C7><D8>t ^E<81>'<D0>^Z<EE><FC>;<AD><DA>k<BA>y<BF><B1>Y<C4>"Y"<FD><F4>E^X<94>m<A4><80>{d^\^^<F4><9C>l<AE>I<A6>("<8A>*U<80>Lr^O<S<87>ZJ*<A2><80>u^T<99><A0>V<9C>ɈSH:<D0>h^T<80>O<D4>PzQ<C6>x<E3>ڑ<BD><E9>1<86>=M!<CE>^? <AD>)<C7>zi<F4>&<A4>^C<9A>(<FC>h<A0>
Чтобы закрыть окно с этими символами попробуйте нажать q или ввести команду reset
Для того, чтобы не попадать в такую ситуацию, можно проверять тип файла перед тем как его открывать. Это можно сделать командой file
file file1
file1: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, baseline, precision 8, 325x500, components 3
Оказывается file1 это не текст а изображение в формате JPEG
Попробовать открыть изображение из терминала можно командой xdg-open,
не факт, что она будет работать в вашей системе, у меня в
Ubuntu 20.4
получилось.
xdg-open file1
Редактирование текстовых файлов
Чтобы отредактировать текстовый файл нужно открыть его в одном из редакторов.
Скорее всего у вас уже установлен либо nano либо
vi
в nano всё довольно очевидно, про vi советую прочитать отдельную статью здесь
Создать новый файл можно командой touch
touch new_file
Удалить файл можно командой rm
rm new_file
Создать сразу несколько файлов:
touch file1 file2 file3 file4
Чтобы создать файл с пробелами в имени нужно взять имя в кавычки:
touch 'file with spaces in name'
Создать новую директорию можно командой mkdir
mkdir расшифровывается как Make Directory
mkdir new_folder
Если нужно создать вложенные директории - воспользуйтесь флагом -p (parent)
mkdir -p city/district/street
Чтобы создать директорию и сразу туда перейти используйте
mkdir example && cd $_
Чтобы выйти из текущего процесса нажмите CTRL + C
Лучше не использовать следующие символы для названий файлов и папок:
' " ` { } ( ) < > [ ] ! ? & ] : ; \ ^
$ @ ~ * #
Попробуйте открыть файл с помощью cat -vet
cat -vet somefile
Можно увидеть, что в конце строки стоит $ а также кодировку кириллических символов.
Перенаправление вывода
Вывод можно перенаправить в файл воспользовавшись > или >>
> удалит из файла предыдущие записи
Если вы выполните перенаправление два раза в один и тот же файл. Останется только последнее
echo "Отличные ноутбуки
здесь" > log.txt
echo "Книги с доставкой по России здесь" > log.txt
vi log.txt
Книги с доставкой по России здесь
Как видите, запись про ноутбуки не сохранилась
Как добавить запись в конец файла Bash
Чтобы не перезаписывать а добавлять новую строку нужно воспользоваться >>
echo "Отличные ноутбуки здесь" >> log.txt
echo "Книги с доставкой по России здесь" >> log.txt
vi log.txt
Отличные ноутбуки здесь
Книги с доставкой по России здесь
Результат работы команды можно направить в другую команду.
Если вы делаете листинг директории с большим количеством файлов
командой ls, например ls /usr/bin
результат не поместится на один экран.
Может быть удобно сразу направить этот вывод в less
ls /usr/bin | less
Чтобы найти в файле строки с упоминанием нужного слова нужно воспользоваться командой
grep
Допустим, у вас есть список партнёров сайта
andreyolegovich.ru
, который называется
partners.txt
.
Если выполнить
less partners.txt
Список получится очень длинным
https://eth1.ru/about/ Travel
https://eth1.ru/about/ Hotels
https://eth1.ru/about/ Hotels
TopBicycle.ru Bicycles
https://eth1.ru/about/ Bicycles
HeiHei.ru Travel
https://eth1.ru/about/ Android
https://eth1.ru/about/ Android
https://eth1.ru/about/ Books
https://eth1.ru/about/ Education
https://eth1.ru/about/ Education
https://eth1.ru/about/ Education
https://eth1.ru/about/ Education
https://eth1.ru/about/ Insurance
https://eth1.ru/about/ Insurance
https://eth1.ru/about/ Insurance
https://eth1.ru/about/ Android
https://eth1.ru/about/ Hosting
…
После названия идёт категория, к которой относится партнёр.
Допустим, вы хотите найти всех партнёров категории Android
grep Android partners.txt
https://eth1.ru/about/ Android
https://eth1.ru/about/ Android
https://eth1.ru/about/ Android
Этот список можно отсортировать в алфавитном порядке и сохранить в файл android_partners.txt
grep Android partners.txt | sort > android_partnets.txt
cat android_partners.txt
https://eth1.ru/about/ Android
https://eth1.ru/about/ Android
https://eth1.ru/about/ Android
Подсчитаем сколько в этом списке партнёров в категории Education.
cut -f 2 partners.txt | grep Education | wc -l
4
cut -f 2 оставляет только второй столбец
grep Education оставляет только Education
wc -l считает строки (word count -lines)
Действительно, в категории образование находится четыре платформы
https://eth1.ru/about/,
https://eth1.ru/about/,
https://eth1.ru/about/ и
https://eth1.ru/about/
PATH
Посмотреть PATH
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Добавить директорию new_bin в PATH
export PATH=$PATH~/new_bin
Программы по умолчанию
Установить nano редактором по умолчанию можно командой
export EDITOR=nano
Чтобы сделать этот выбор постоянным, нужно внести соответствующую запись в
.profile
(bash) или
.zshenv
(zsh)
Там же можно прописать export PATH=$PATH~/new_bin
export EDITOR=nano
export PATH=$PATH~/new_bin
*
Для работы с большим количеством файлов часто удобно использовать шаблоны.
Допустим вы хотите сделать листинг только .pdf файлов
ls *pdf
Найти все строки в файле filename в которых содержастья буквы a r g подряд.
grep *arg* filename
Перезагрузить терминал
Чтобы перезагрузить терминал не выходя из него, выполните
exec bash
CTRL R: поиск в прошлых командах
Чтобы искать по ключевому слову среди выполненных ранее команд можно воспользоваться
CTRL + r