Быстрое изучение Bash: 30 легких команд для новичков

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

команды Bash

Если вы здесь, вероятно, вы столкнулись с проблемой изучения 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 для начинающих ;)

Интересуют другие команды Bash? Вас могут заинтересовать следующие статьи:

Источник: 101 команда Bash для начинающих и экспертов

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ