Основы 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
Допустим, у вас есть список партнёров сайта
eth1.ru
, который называется
partners.txt
.
Если выполнить
less partners.txt
Список получится очень длинным
Авиасейлз Travel
Booking.com Hotels
Hotellook Hotels
TopBicycle.ru Bicycles
Велодрайв Bicycles
HeiHei.ru Travel
Xiaomi Android
Яндекс Бизнес Android
Book24 Books
GeekBrains Education
Нетология Education
SkillBox Education
Pluralsight Education
СовКомСтрахование Insurance
Полис 812 Insurance
Полис 812 Insurance
Vivo Android
Reg.ru Hosting
…
После названия идёт категория, к которой относится партнёр.
Допустим, вы хотите найти всех партнёров категории Android
grep Android partners.txt
Xiaomi Android
Яндекс Бизнес Android
Vivo Android
Этот список можно отсортировать в алфавитном порядке и сохранить в файл android_partners.txt
grep Android partners.txt | sort > android_partnets.txt
cat android_partners.txt
Яндекс Бизнес Android
Vivo Android
Xiaomi Android
Подсчитаем сколько в этом списке партнёров в категории Education.
cut -f 2 partners.txt | grep Education | wc -l
4
cut -f 2 оставляет только второй столбец
grep Education оставляет только Education
wc -l считает строки (word count -lines)
Действительно, в категории образование находится четыре платформы
GeekBrains,
Нетология,
SkillBox и
Pluralsight
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
Автор статьи: Андрей ОлеговичBash | |
Основы Bash | |
Скрипты | |
awk | |
grep | |
sed | |
Ошибки Bash | |
Zsh | |
Unix |