Список из 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 для начинающих ;)
Комментарии