Red Hat System Administration I 8.2

Выполнение команд с помощью командной оболочки Bash

Задачи

После завершения этого раздела вы сможете выполнять команды из командной оболочки с помощью сочетаний клавиш Bash.

Основной синтаксис команд

GNU Bourne-Again Shell (bash) — это программа, которая интерпретирует команды, введенные пользователем. Каждая строка, введенная в командной оболочке, может состоять из трех частей: команды, опций (которые обычно начинаются с - или --) и аргументов. Каждое слово, введенное в командной оболочке, отделяется от другого слова пробелом. Команды представляют собой имена программ, установленных в системе. Каждая команда имеет собственные опции и аргументы.

Когда вы будете готовы выполнить команду, нажмите Enter. Вводите каждую команду в отдельной строке. Вывод команды отображается до появления следующего приглашения оболочки.

[user@host]$ whoami
user
[user@host]$ 

Чтобы ввести несколько команд в одной строке, используйте точку с запятой (;) в качестве разделителя. Точка с запятой относится к категории символов, называемых метасимволами, которые имеют особые значения для bash. В этом случае вывод обеих команд будет отображаться до появления следующего приглашения оболочки.

В следующем примере показано, как объединить две команды (command1 и command2) в командной строке.

[user@host]$ command1;command2

Примеры простых команд

Команда date показывает текущие дату и время. Она может также применяться привилегированным пользователем для установки системных часов. Аргумент, который начинается с плюса (+), указывает строку формата для команды date.

[user@host ~]$ date
Sat Jan  26 08:13:50 IST 2019
[user@host ~]$ date +%R
08:13
[user@host ~]$ date +%x
01/26/2019

Команда passwd изменяет собственный пароль пользователя. Изменение пароля возможно, только если пользователь укажет исходный пароль для учетной записи. По умолчанию команда passwd требует задания надежного пароля, который состоит из строчных букв, прописных букв, цифр и символов и не основан на слове из словаря. Привилегированный пользователь может применять команду passwd для изменения паролей других пользователей.

[user@host ~]$ passwd
Changing password for user user.
Current password: old_password
New password: new_password
Retype new password: new_password
passwd: all authentication tokens updated successfully.

Linux не требует указания расширений имен файлов для классификации файлов по типу. Команда file проверяет начальную часть содержимого файла и показывает, к какому типу он относится. Файлы, требующие распознавания типа, передаются как аргументы этой команде.

[user@host ~]$ file /etc/passwd
/etc/passwd: ASCII text
[user@host ~]$ file /bin/passwd
/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 
(SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, 
for GNU/Linux 3.2.0, BuildID[sha1]=a3637110e27e9a48dced9f38b4ae43388d32d0e4, stripped
[user@host ~]$ file /home
/home: directory

Просмотр содержимого файлов

Одна из самых простых и часто используемых команд в Linux — cat. Команда cat позволяет создать один или несколько файлов, просмотреть содержимое файлов, объединить содержимое из нескольких файлов и перенаправить содержимое файла на терминал или в файлы.

В примере показано, как просмотреть содержимое файла /etc/passwd.

[user@host ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...output omitted...

Используйте следующую команду, чтобы отобразить содержимое нескольких файлов.

[user@host ~]$ cat file1 file2
Hello World!!
Introduction to Linux commands.

Некоторые файлы очень длинные и могут занимать больше места, чем предусмотрено терминалом. Команда cat не отображает содержимое файла в виде страниц. Команда less отображает одну страницу файла за раз и позволяет прокручивать страницы.

Команда less позволяет пролистывать вперед и назад страницы файлов, которые не помещаются в одном окне терминала. Используйте клавиши Стрелка вверх и Стрелка вниз для прокрутки вверх и вниз. Нажмите q, чтобы выйти из команды.

Команды head и tail отображают начало и конец файла соответственно. По умолчанию эти команды отображают 10 строк файла, но у них есть опция -n, позволяющая указать другое количество строк. Файл, который необходимо отобразить, передается как аргумент этим командам.

[user@host ~]$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[user@host ~]$ tail -n 3 /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:977:977::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin

Команда wc подсчитывает количество строк, слов и символов в файле. Она принимает опцию -l, -w или -c для отображения количества строк, слов или символов соответственно.

[user@host ~]$ wc /etc/passwd
  45  102 2480 /etc/passwd
[user@host ~]$ wc -l /etc/passwd ; wc -l /etc/group
45 /etc/passwd
70 /etc/group
[user@host ~]$ wc -c /etc/group /etc/hosts
 966 /etc/group
 516 /etc/hosts
1482 total

Автодополнение по клавише Tab

Автодополнение по клавише Tab позволяет пользователям быстро дополнять команды или имена файлов после ввода в приглашении достаточного количества символов, чтобы итоговый результат был уникальным. Если введенные символы не позволяют получить уникальный результат, при двойном нажатии клавиши Tab будут показаны все команды, начинающиеся с введенных символов.

[user@host ~]$ pas1Tab+Tab
passwd       paste        pasuspender
[user@host ~]$ pass2Tab
[user@host ~]$ passwd 
Changing password for user user.
Current password: 

1

Нажмите Tab дважды.

2

Нажмите Tab один раз.

Функция автодополнения по клавише Tab может использоваться для завершения имен файлов при вводе их в качестве аргументов для команд. При нажатии клавиши Tab происходит завершение имени файла, насколько это возможно. При втором нажатии клавиши Tab командная оболочка отображает список всех файлов, имена которых соответствуют введенным символам. Вводите дополнительные символы, пока имя не станет уникальным, а затем используйте функцию автодополнения по клавише Tab, чтобы завершить команду.

[user@host ~]$ ls /etc/pas1Tab
[user@host ~]$ ls /etc/passwd2Tab
passwd   passwd-

1 2

Нажмите Tab один раз.

Функцию автодополнения по клавише Tab можно использовать для завершения аргументов и опций для различных команд. Команда useradd используется привилегированным пользователем (root) для создания дополнительных пользователей в системе. Для команды доступны различные опции, позволяющие управлять ее работой. После частичного ввода опции можно использовать функцию автодополнения по клавише Tab, чтобы завершить опцию без ввода дополнительных символов.

[root@host ~]# useradd --1Tab+Tab
--base-dir        --groups          --no-log-init     --shell
--comment         --help            --non-unique      --skel
--create-home     --home-dir        --no-user-group   --system
--defaults        --inactive        --password        --uid
--expiredate      --key             --root            --user-group
--gid             --no-create-home  --selinux-user
[root@host ~]# useradd --

1

Нажмите Tab дважды.

Продолжение длинной команды на другой строке

Команды с большим количеством опций и аргументов могут быть очень длинными. Когда курсор достигает правой границы окна, команда автоматически переносится на следующую строку. Для удобства чтения можно разбивать длинные команды на несколько строк.

Для этого необходимо использовать символ обратной косой черты (\), который известен как символ экранирования или escape-символ, чтобы игнорировать значение символа сразу после обратной косой черты. Вы уже знаете, что ввод символа новой строки нажатием клавиши Enter сообщает оболочке, что ввод команды завершен и следует выполнить эту команду. В случае экранирования символа новой строки командная оболочка переходит на новую строку без выполнения команды. Оболочка принимает запрос и отображает приглашение к продолжению ввода команды (дополнительное приглашение), используя по умолчанию символ «больше чем» (>) в новой пустой строке. Команду можно разбить на любое количество строк.

[user@host]$ head -n 3 \
> /usr/share/dict/words \
> /usr/share/dict/linux.words
==> /usr/share/dict/words <==
1080
10-point
10th

==> /usr/share/dict/linux.words <==
1080
10-point
10th
[user@host ~]$ 

Важно

В предыдущем примере показано, как пользователь видит команду, разбитую на несколько строк. Однако у учащихся нередко возникают затруднения с пониманием этого явления. Новички могут ошибочно вставлять лишние символы «больше чем» во вводимые команды. Оболочка интерпретирует введенный символ «больше чем» как перенаправление процесса, а это совсем не то, чего хотел пользователь. Перенаправление процесса рассматривается в одной из последующих глав.

Во избежание путаницы в этом учебнике не показаны дополнительные приглашения в выводах команд. Пользователь будет видеть дополнительные приглашения в окне командной оболочки, но в материалах этого курса будут показаны только символы, которые пользователю потребуется вводить, как показано в примере ниже. Сравните с предыдущим примером.

[user@host]$ head -n 3 \
/usr/share/dict/words \
/usr/share/dict/linux.words
==> /usr/share/dict/words <==
1080
10-point
10th

==> /usr/share/dict/linux.words <==
1080
10-point
10th
[user@host ~]$ 

История команд

Команда history отображает список ранее выполненных команд с префиксами в виде номеров команд.

Символ восклицательного знака (!) ― это метасимвол, который используется для развертывания предыдущих команд без повторного ввода. Команда !number развертывается в команду, соответствующую указанному номеру. Команда !string развертывается в последнюю введенную команду, которая начинается с указанной строки.

[user@host ~]$ history
   ...output omitted...
   23  clear
   24  who
   25  pwd
   26  ls /etc
   27  uptime
   28  ls -l
   29  date
   30  history
[user@host ~]$ !ls
ls -l
total 0
drwxr-xr-x. 2 user user 6 Mar 29 21:16 Desktop
...output omitted...
[user@host ~]$ !26
ls /etc
abrt                     hosts                     pulse
adjtime                  hosts.allow               purple
aliases                  hosts.deny                qemu-ga
...output omitted...

Для перехода по предыдущим командам в истории командной оболочки можно использовать клавиши со стрелками. Стрелка вверх позволяет отредактировать предыдущую команду в истории. Стрелка вниз позволяет отредактировать следующую команду в истории. Стрелка влево и стрелка вправо перемещают курсор влево и вправо по текущей команде из истории, позволяя отредактировать ее перед выполнением.

Используйте сочетания клавиш Esc+. или Alt+. для вставки последнего слова предыдущей команды в текущую позицию курсора. Повторное использование сочетания клавиш заменит этот текст последним словом более ранних команд в истории. Сочетание клавиш Alt+. особенно удобно, поскольку позволяет удерживать Alt и нажать . несколько раз, чтобы быстро пройти по более ранним командам.

Редактирование командной строки

При использовании в интерактивном режиме команда bash предоставляет возможность редактирования командной строки. Она позволяет перемещаться по вводимой команде и изменять ее с помощью команд текстового редактора. Использование клавиш со стрелками для перемещения по строке текущей команды и перехода по истории команд рассматривалось ранее на этом занятии. В следующей таблице представлены более мощные команды редактирования.

Таблица 2.1. Полезные сочетания клавиш для редактирования командной строки

Сочетание клавишОписание
Ctrl+A Переход в начало командной строки.
Ctrl+E Переход в конец командной строки.
Ctrl+U Очистка от позиции курсора до начала командной строки.
Ctrl+K Очистка от позиции курсора до конца командной строки.
Ctrl+Стрелка влево Переход в начало предыдущего слова в командной строке.
Ctrl+Стрелка вправо Переход в конец следующего слова в командной строке.
Ctrl+R Поиск в истории команд по шаблону.

Есть и другие команды редактирования командной строки, но выше представлены самые полезные команды для новых пользователей. Остальные команды можно найти на man-странице bash(1).

Ссылки

Man-страницы bash(1), date(1), file(1), cat(1), more(1), less(1), head(1), passwd(1), tail(1) и wc(1)