Список из 30 легких команд, с которыми вы быстро освоите Bash и не будете бояться терминала Linux. Идеально для новичков.

Если вы здесь, вероятно, вы столкнулись с проблемой изучения Bash команд. Давайте это исправим :)
Первые команды – учимся ходить
Современные файловые системы – это древовидные каталоги с корневой и родительскими директориями. Движение вверх по родительским каталогам приводит к корневому. В некоторых системах встречается несколько корневых каталогов, например, всем известные диски Windows: C:\ , A:\, etc.
Но в Unix-подобных системах все по-другому: здесь принят один корневой каталог с именем \. А вот и основные команды Bash для перемещения по файловой системе:
pwd / ls / cd
При работе в файловой системе пользователь находится в каталоге, который называется текущим или рабочим. Команда pwd выводит рабочий каталог пользователя:
geekpress@proglib:~$ pwd /home/geekpress
С ls вы сможете вывести содержимое каталога (файлы и дочерние директории):
geekpress@proglib:~$ ls imports temp playground README.md example dir
Перейти в другой каталог поможет cd:
geekpress@proglib:~$ cd imports/ geekpress@proglib:~imports$ pwd /home/geekpress/imports geekpress@proglib:~imports$ cd testdata geekpress@proglib:~testdata$ pwd /home/geekpress/imports/testdata
Используйте команду cd .. для быстрого перемещения в родительскую директорию:
geekpress@proglib:~testdata$ cd .. geekpress@proglib:~imports$ pwd /home/geekpress/imports
Сокращение cd ~ используется для перемещения домой, в /home/$USER:
geekpress@proglib:~imports$ cd ~ geekpress@proglib:~$ pwd /home/geekpress
Три bash команды для управления
Иногда вам потребуется запускать эти команды одну за другой. Тогда на помощь приходит оператор ;:
geekpress@proglib:~$ ls; pwd imports temp playground README.md /home/geekpress
Точка с запятой означает, что сначала перечисляется содержимое рабочего каталога с помощью ls, а затем pwd выводит местоположение каталога. Еще один полезный инструмент для создания цепочек команд – &&. При использовании && команда справа не будет выполняться, если команда слева не выполнена:
# Ой! Тут опечатка! geekpress@proglib~:$ cd /pplayground/socket/ && pwd && ls && cd -bash: cd: /pplayground/socket: No such file or directory # теперь первая команда проходит, так что выполняются следующие geekpress@proglib:~$ cd /playground/socket/ && pwd && ls && cd /home/geekpress/playground/socket socket.go socket_test.go
Но если использовать ;, вторая команда выполняется даже после ошибки в первой:
# pwd и ls запустятся даже после ошибок в cd geekpress@proglib:~$ cd /pplayground/socket ; pwd ; ls -bash: cd: /pplayground/socket: No such file or directory /home/geekpress imports LICENSE playground README.md
А вот вам небольшой трюк в bash. Команда & похожа на &&, но на самом деле выполняет другую функцию. Часто процессы блокируют ввод в терминал во время работы. Чтобы свернуть подобный процесс в фон, используйте & в конце команды. Тогда процесс выполняется в фоне, не блокируя ввод в окно терминала:
geekpress@proglib:~$ cd /playground/socket && mv socket.go ~/ & cd geekpress@proglib:~$
Скорая помощь для тех, кто забыл
Даже если вы давно пользуетесь продвинутыми командами bash, вы все еще можете забыть что-то из базиса, и это нормально. Всегда можно получить подсказку для большинства утилит. Как? Просто введите -h или --help в конце команды:
geekpress@proglib:~$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print C-style escapes for nongraphic characters
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'--block-size=M' prints sizes in units of
1,048,576 bytes; see SIZE format below
-B, --ignore-backups do not list implied entries ending with ~
...
Программы и команды Linux сопровождаются справочным руководством. Введите man перед командой, чтобы вызвать руководство. Выход из man – клавиша q:
CAT(1) User Commands CAT(1)
NAME
cat - concatenate files and print on the standard output
SYNOPSIS
cat [OPTION]... [FILE]...
DESCRIPTION
Concatenate FILE(s) to standard output.
With no FILE, or when FILE is -, read standard input.
-A, --show-all
equivalent to -vET
...
Быстрый просмотр и редактирование файлов
head выводит первые строки файла. Флаг -n указывает количество отображаемых строк:
# вывод трех начальных строк geekpress@proglib:~$ head -n 3 tempfile first three lines
tail выводит последние строки файла. Можно получить последние n строк или конец файла, начиная с N-й строки, с помощью tail -n + N:
# выводит конец файла, начиная с 4-ой строки geekpress@proglib:~$ tail -n +4 testfile last from fourth
Используйте cat с одним или несколькими файлами: так можно быстро посмотреть содержание.
geekpress@proglib:~$ cat x file x geekpress@proglib:~$ cat x y file x file y
nano – минималистичный текстовый редактор командной строки. Редактор подходит начинающим и тем, кто не любит разнообразия. На начальных этапах он покроет все ваши требования.
nedit – легкий графический редактор, который открывается в окне. Редактирование по принципу «укажи и щелкни» с перетаскиванием, есть подсветка синтаксиса. Можно использовать nedit, когда следует постоянно вносить небольшие изменения и перезапускать скрипт.
Современные редакторы предлагают функции поиска и замены, подсветки синтаксиса и так далее. vi (m) и emacs функциональней nano и nedit, но сложней в освоении.
Создаем и удаляем файлы/директории
touch нужен для изменения временных меток файлов и для создания пустого файла. Можно создать новый файл в nano:
geekpress@proglib:~temp$ ls geekpress@proglib:~temp$ nano newfile
Затем править файл и сохранить:
geekpress@proglib:~temp$ ls newfile
Или использовать touch:
geekpress@proglib:~temp$ touch another && ls newfile another
mkdir создает новые каталоги:
geekpress@proglib:~temp$ ls && mkdir fold && ls newfile another newfile another fold
Теперь удалим файл с помощью команды rm.
WARNING: файл невозможно восстановить!
geekpress@proglib:~temp$ rm newfile && ls another fold
Необходимость подтверждения вызывается флагом -i:
geekpress@proglib:~temp$ rm -i another rm: remove regular empty file 'another'? y
Удаляйте пустые каталоги с помощью rmdir. Если ls -a используется в пустом каталоге, команда выводит только ссылку на сам каталог . и ссылку на родительский каталог ..:
geekpress@proglib:~temp$ rmdir fold && ls -a . ..
Команда rmdir удаляет только директории:
geekpress@proglib:~temp$ cd .. && ls temp/ zzz.txt big.txt 4.txt x bb.txt y z geekpress@proglib:~$ rmdir temp/ rmdir: failed to remove 'test/': Directory not empty
Чтобы удалить директорию с содержимым, используйте rm -rf:
geekpress@proglib:~$ rm –rf temp
Перемещаемся, копируем, ссылаемся
mv перемещает и переименовывает файл. Для переименования введите новое имя файла:
geekpress@proglib:~example$ ls && mv x 2 && ls x y z 1 y z 1 2
cp копирует файл:
geekpress@proglib:~example$ cp 2 22 && ls y z 1 2 22
ln -s создает симлинк:
geekpress@proglib:~example$ ln -s y b && ls y z 1 2 22 f b
Bash: история команд
В Bash доступна функция автоматического завершения команды по кнопке tab. Введите начальную часть команды и нажмите tab, чтобы терминал предложил полную строку.
geekpress@proglib:~dir$ ls <ENTER> mobilizeemberduty mobilizeember mobilize geekpress@proglib:~dir$ ls t <TAB>
Нажмите клавишу tab после ls t, и команда будет завершена автоматически.
geekpress@proglib:~dir$ ls mobilizeemberduty <ENTER> mobilizeemberduty
Иногда нужно нажимать tab несколько раз:
geekpress@proglib:~dir$ ls m <TAB> geekpress@proglib:~dir$ ls mo <TAB> mobilize mobilizeember
Bash хранит историю ранее введенных команд. Чтобы выполнить поиск нажмите Ctrl + r:
geekpress@proglib:~dir$
Нажимаем Ctrl + r:
(reverse-i-search)`':
Вводим «mobi» и находим последнюю команду с этой строкой:
(reverse-i-search)`mobi': touch mobilize
Деревья каталогов, использование диска и процессы
По умолчанию mkdir создает только один каталог. Это означает, что, например, если каталога a/b не существует, то a/b/c не может быть создан с помощью mkdir:
geekpress@proglib:~example$ ls && mkdir a/b/c x y z mkdir: cannot create directory 'd/e/f': No such file or directory
Но если указать флаг -p, mkdir создаст все директории, которые отсутствуют в указанном пути:
geekpress@proglib:~example$ mkdir -p a/b/c && ls x y z a
tree отображает структуру каталога в виде отформатированного дерева. По умолчанию tree печатает древовидную структуру, начиная с указанного каталога, но количество уровней ограничивается флагом -L:
geekpress@proglib:~example$ tree -L 2
.
|-- x
|-- y
|-- z
`-- a
`--b
3 directories, 2 files
Скрывайте пустые каталоги в дереве с помощью --prune. Обратите внимание, что при этом не выводятся каталоги, которые содержат другие пустые каталоги:
geekpress@proglib:~example$ tree --prune . |-- x `-- y
df показывает, сколько места занимают файлы на дисках.
geekpress@proglib:~example$ df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 389M 6.3M 383M 2% /run ...
В приведенной выше команде -h означает не «help», а «human-readable». Некоторые команды используют этот флаг для отображения размеров в K для килобайт и G для гигабайт, вместо записи гигантского числа байтов.
du показывает использование файлового пространства каталогами. Если хочется узнать, сколько свободного места на жестком диске, используйте df, а для каталогов используйте du:
geekpress@proglib:~example$ du 12760 ./.git/objects 13016 ./.git 72 ./container/intsets 76 ./container 27380 .
df принимает флаг --max-deep = N, который показывает директории только на N уровней в указанном каталоге:
ps показывает запущенные процессы пользователей:
geekpress@proglib:~example$ ps PID TTY TIME CMD 15333 pts/0 00:00:00 bash 15344 pts/0 00:00:00 ps
Вот вам и основы Bash. Но давайте копнем чуть глубже.
Другие полезные команды bash
Меняйте пароль учетной записи с помощью passwd. Команда проверяет текущий пароль и просит ввести новый пароль дважды:
geekpress@proglib:~example$ passwd Changing password for user. (current) UNIX password: <type current password> Enter new UNIX password: <type new password> Retype new UNIX password: <type new password again> passwd: password updated successfully
logout выполняет выход пользователя из сеанса оболочки:
geekpress@proglib:~example$ logout
──────────────────────────────────────────────────────────────────────────────
Session stopped
- Press <return> to exit tab
- Press R to restart session
- Press S to save terminal output to file
exit выходит из консоли:
geekpress@proglib:~example$ exit
logout
──────────────────────────────────────────────────────────────────────────────
Session stopped
- Press <return> to exit tab
- Press R to restart session
- Press S to save terminal output to file
Запустите команду clear, чтобы переместить текущую строку терминала в верхнюю часть экрана. Используйте для очистки рабочего пространства.
Используйте * при поиске файлов. Обратите внимание на разницу между следующими командами:
geekpress@proglib:~$ ls imports/ fix.go imports.go mkstdlib.go mod_test.go testdata/ fix_test.go mkindex.go mod.go sortimports.go zstdlib.go geekpress@proglib:~$ ls imports/fi* fix.go fix_test.go
Используйте * много раз в одной команде с символами и без:
geekpress@proglib:~$ ls Git/Parser/source/f*i*x* fix.go fix_test.go
Ну все! Теперь вы точно застрахованы от случаев, когда bash команда не найдена. А как вы начинали работать с bash? Поделитесь своим списком команд bash для начинающих ;)
Комментарии