После завершения этого раздела вы сможете выполнять команды из командной оболочки с помощью сочетаний клавиш Bash.
GNU Bourne-Again Shell (bash) — это программа, которая интерпретирует команды, введенные пользователем. Каждая строка, введенная в командной оболочке, может состоять из трех частей: команды, опций (которые обычно начинаются с - или --) и аргументов. Каждое слово, введенное в командной оболочке, отделяется от другого слова пробелом. Команды представляют собой имена программ, установленных в системе. Каждая команда имеет собственные опции и аргументы.
Когда вы будете готовы выполнить команду, нажмите Enter. Вводите каждую команду в отдельной строке. Вывод команды отображается до появления следующего приглашения оболочки.
[user@host]$ whoami user [user@host]$
[user@host]$
whoami
Чтобы ввести несколько команд в одной строке, используйте точку с запятой (;) в качестве разделителя. Точка с запятой относится к категории символов, называемых метасимволами, которые имеют особые значения для bash. В этом случае вывод обеих команд будет отображаться до появления следующего приглашения оболочки.
В следующем примере показано, как объединить две команды (command1 и command2) в командной строке.
[user@host]$ command1;command2
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
[user@host ~]$
date
date +%R
date +%x
Команда 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.
passwd
old_password
new_password
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
file /etc/passwd
file /bin/passwd
file /home
Одна из самых простых и часто используемых команд в Linux — cat. Команда cat позволяет создать один или несколько файлов, просмотреть содержимое файлов, объединить содержимое из нескольких файлов и перенаправить содержимое файла на терминал или в файлы.
В примере показано, как просмотреть содержимое файла /etc/passwd.
/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...
cat /etc/passwd
Используйте следующую команду, чтобы отобразить содержимое нескольких файлов.
[user@host ~]$ cat file1 file2 Hello World!! Introduction to Linux commands.
cat file1 file2
Некоторые файлы очень длинные и могут занимать больше места, чем предусмотрено терминалом. Команда cat не отображает содержимое файла в виде страниц. Команда less отображает одну страницу файла за раз и позволяет прокручивать страницы.
Команда less позволяет пролистывать вперед и назад страницы файлов, которые не помещаются в одном окне терминала. Используйте клавиши Стрелка вверх и Стрелка вниз для прокрутки вверх и вниз. Нажмите q, чтобы выйти из команды.
Команды head и tail отображают начало и конец файла соответственно. По умолчанию эти команды отображают 10 строк файла, но у них есть опция -n, позволяющая указать другое количество строк. Файл, который необходимо отобразить, передается как аргумент этим командам.
-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
head /etc/passwd
tail -n 3 /etc/passwd
Команда wc подсчитывает количество строк, слов и символов в файле. Она принимает опцию -l, -w или -c для отображения количества строк, слов или символов соответственно.
-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
wc /etc/passwd
wc -l /etc/passwd ; wc -l /etc/group
wc -c /etc/group /etc/hosts
Автодополнение по клавише Tab позволяет пользователям быстро дополнять команды или имена файлов после ввода в приглашении достаточного количества символов, чтобы итоговый результат был уникальным. Если введенные символы не позволяют получить уникальный результат, при двойном нажатии клавиши Tab будут показаны все команды, начинающиеся с введенных символов.
[user@host ~]$ pasTab+Tab passwd paste pasuspender [user@host ~]$ passTab [user@host ~]$ passwd Changing password for user user. Current password:
pasTab+Tab
passTab
Нажмите Tab дважды.
Нажмите Tab один раз.
Функция автодополнения по клавише Tab может использоваться для завершения имен файлов при вводе их в качестве аргументов для команд. При нажатии клавиши Tab происходит завершение имени файла, насколько это возможно. При втором нажатии клавиши Tab командная оболочка отображает список всех файлов, имена которых соответствуют введенным символам. Вводите дополнительные символы, пока имя не станет уникальным, а затем используйте функцию автодополнения по клавише Tab, чтобы завершить команду.
[user@host ~]$ ls /etc/pasTab [user@host ~]$ ls /etc/passwdTab passwd passwd-
ls /etc/pasTab
ls /etc/passwdTab
Функцию автодополнения по клавише Tab можно использовать для завершения аргументов и опций для различных команд. Команда useradd используется привилегированным пользователем (root) для создания дополнительных пользователей в системе. Для команды доступны различные опции, позволяющие управлять ее работой. После частичного ввода опции можно использовать функцию автодополнения по клавише Tab, чтобы завершить опцию без ввода дополнительных символов.
root
[root@host ~]# useradd --Tab+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 --
[root@host ~]#
useradd --Tab+Tab
useradd --
Команды с большим количеством опций и аргументов могут быть очень длинными. Когда курсор достигает правой границы окна, команда автоматически переносится на следующую строку. Для удобства чтения можно разбивать длинные команды на несколько строк.
Для этого необходимо использовать символ обратной косой черты (\), который известен как символ экранирования или 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 ~]$
head -n 3 \
>
/usr/share/dict/words \
/usr/share/dict/linux.words
В предыдущем примере показано, как пользователь видит команду, разбитую на несколько строк. Однако у учащихся нередко возникают затруднения с пониманием этого явления. Новички могут ошибочно вставлять лишние символы «больше чем» во вводимые команды. Оболочка интерпретирует введенный символ «больше чем» как перенаправление процесса, а это совсем не то, чего хотел пользователь. Перенаправление процесса рассматривается в одной из последующих глав.
Во избежание путаницы в этом учебнике не показаны дополнительные приглашения в выводах команд. Пользователь будет видеть дополнительные приглашения в окне командной оболочки, но в материалах этого курса будут показаны только символы, которые пользователю потребуется вводить, как показано в примере ниже. Сравните с предыдущим примером.
[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 развертывается в последнюю введенную команду, которая начинается с указанной строки.
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...
history
!ls
!26
Для перехода по предыдущим командам в истории командной оболочки можно использовать клавиши со стрелками. Стрелка вверх позволяет отредактировать предыдущую команду в истории. Стрелка вниз позволяет отредактировать следующую команду в истории. Стрелка влево и стрелка вправо перемещают курсор влево и вправо по текущей команде из истории, позволяя отредактировать ее перед выполнением.
Используйте сочетания клавиш Esc+. или Alt+. для вставки последнего слова предыдущей команды в текущую позицию курсора. Повторное использование сочетания клавиш заменит этот текст последним словом более ранних команд в истории. Сочетание клавиш Alt+. особенно удобно, поскольку позволяет удерживать Alt и нажать . несколько раз, чтобы быстро пройти по более ранним командам.
При использовании в интерактивном режиме команда bash предоставляет возможность редактирования командной строки. Она позволяет перемещаться по вводимой команде и изменять ее с помощью команд текстового редактора. Использование клавиш со стрелками для перемещения по строке текущей команды и перехода по истории команд рассматривалось ранее на этом занятии. В следующей таблице представлены более мощные команды редактирования.
Таблица 2.1. Полезные сочетания клавиш для редактирования командной строки
Есть и другие команды редактирования командной строки, но выше представлены самые полезные команды для новых пользователей. Остальные команды можно найти на man-странице bash(1).
Man-страницы bash(1), date(1), file(1), cat(1), more(1), less(1), head(1), passwd(1), tail(1) и wc(1)