2.2 Работа с приглашением командной строки (Using the Shell Prompt)¶
В этой части главы вы научитесь:
- вводить команды в приглашении командной строки;
- использовать историю команд;
- использовать автодополнение команд.
Начнём с рассмотрения того, как вводить команды в приглашении командной строки.
Ввод команд в приглашении командной строки¶
Запустить программу или команду из приглашения командной строки достаточно просто. Это делается так же, как в командном окне Windows: вы просто вводите название команды, имя файла сценария или имя исполняемого файла в приглашении командной строки и нажимаете клавишу Enter. В следующем примере в приглашении командной строки введена команда ls:
rtracy@openSUSE:~> ls
bin Downloads Public schedule.txt widget_project.doc
Desktop Music public_html Templates
Documents Pictures resources.odp Videos
Команда ls является аналогом команды DIR в командной строке Windows. Она выводит на экран список файлов и каталогов в текущем каталоге.
Здесь есть один нюанс, о котором необходимо знать при работе с приглашением командной строки. Это одна из главных проблем, с которой сталкиваются начинающие администраторы Linux. Дело в том, что Linux обрабатывает путь к запускаемому исполняемому файлу иначе, чем другие операционные системы.
Например, в командном окне Windows интерпретатор команд сначала ищет исполняемый файл в текущем каталоге. Если файл там не найден, интерпретатор команд обращается к переменной окружения PATH. Он поочерёдно просматривает каждый каталог, указанный в переменной PATH, в поисках заданного исполняемого файла. Если файл найден, он будет запущен. В противном случае на экране отобразится сообщение об ошибке.
Linux также использует переменную окружения PATH. Однако Linux не проверяет текущий каталог. Это может сбивать с толку начинающих администраторов и пользователей Linux: они ожидают, что смогут перейти в каталог с исполняемым файлом и запустить его из командной строки.
В Linux так не работает. Вместо этого Linux ищет запускаемый файл исключительно среди каталогов, перечисленных в переменной PATH текущего пользователя. Типичное значение переменной окружения PATH в Linux показано в следующем примере:
rtracy@openSUSE:~> echo $PATH
/usr/lib/mpi/gcc/openmpi/bin:/home/rtracy/bin:/usr/local/bin:/usr/bin:/bin:/
usr/bin/X11:/usr/X11R6/bin:/usr/games
Совет к экзамену
Просмотреть переменную PATH текущего пользователя можно также с помощью команды env, введённой в приглашении командной строки.
Обратите внимание: переменная окружения PATH содержит список каталогов, разделённых двоеточиями (:).
Даже если нужный исполняемый файл находится в текущем каталоге, Linux не сможет его найти, если этот каталог не указан в переменной PATH. Оболочка вернёт сообщение об ошибке. В следующем примере исполняемый файл сценария runme.sh находится в домашнем каталоге пользователя rtracy. Его наличие подтверждено командой ls.
rtracy@openSUSE:~> ls
bin Downloads Public runme.sh Videos
Desktop Music public_html schedule.txt widget_project.doc
Documents Pictures resources.odp Templates
rtracy@openSUSE:~> runme.sh
If 'runme.sh' is not a typo you can use command-not-found to look up the
package that contains it, like this:
cnf runme.sh
Как видно, при вводе runme.sh в приглашении командной строки оболочка не находит файл. Это происходит потому, что домашний каталог пользователя rtracy (/home/rtracy) не указан в переменной окружения PATH.
Существуют три способа решить эту проблему. Во-первых, можно указать полный путь к исполняемому файлу. В рассмотренном примере достаточно ввести /home/rtracy/runme.sh в приглашении командной строки.
Во-вторых, можно перейти в каталог с исполняемым файлом и добавить ./ в начало команды. В приведённом примере нужно сначала убедиться, что текущий каталог — /home/rtracy, а затем ввести ./runme.sh в приглашении командной строки. Символы ./ указывают на текущий каталог. Добавляя их в начало команды, вы сообщаете оболочке, что нужно искать указанный файл в текущем каталоге.
Наконец, можно добавить каталог с исполняемым файлом в список каталогов переменной окружения PATH. Как это сделать, будет рассмотрено позже в этой главе.
Помимо вопросов с путями, необходимо учитывать, что имена файлов и каталогов в Linux чувствительны к регистру! Это означает, что команды Linux также чувствительны к регистру. Если исполняемый файл называется runme.sh, то именно runme.sh необходимо ввести в приглашении командной строки. Варианты Runme.sh, RUNME.SH или Runme.SH не сработают: оболочка воспринимает каждое из этих имён как разные файлы.
Это правило распространяется и на имена каталогов. Если вы обращаетесь к файлу /home/rtracy/runme.sh, необходимо вводить команду точно в том же регистре. Путь /Home/Rtracy/Runme.sh направит оболочку совершенно в другое место файловой системы.
По мере того как вы приобретаете опыт работы с Linux, вы обнаружите в нём ряд мощных команд и утилит, к которым будете обращаться снова и снова. Среди них:
halt— эта команда завершает работу операционной системы, но может быть выполнена только суперпользователем root.reboot— эта команда завершает работу и перезагружает операционную систему. Также может выполняться только от имени root.init 0— эта команда также завершает работу операционной системы и может выполняться только от имени суперпользователя root.init 6— эта команда также завершает работу и перезагружает операционную систему. Также может выполняться только от имени root.shutdown— эта команда может использоваться суперпользователем root для завершения работы или перезагрузки системы.exit— эта команда завершает текущий запущенный процесс, включая текущий сеанс оболочки. Например, если открыть сеанс терминала в графическом интерфейсе Linux и ввестиexitв приглашении командной строки, сеанс терминала будет закрыт. Аналогично, при работе в CLI вводexitзавершает текущий сеанс оболочки и вы выходите из системы.su— эта команда переключает с текущей учётной записи пользователя на другую. Например, если вы вошли какrtracyи вам нужно перейти под учётную записьdcoughanour, введитеsu dcoughanourв приглашении командной строки. Чаще всего эта команда используется для перехода под учётную запись суперпользователя root. Если не указать имя пользователя, утилита предполагает, что вы хотите перейти под учётную запись root. При вводеsu -вы перейдёте под учётную запись root с применением всех переменных окружения root. Когда закончите, введитеexit, чтобы вернуться в исходную учётную запись.
Совет
Многие считают, что «su» расшифровывается как «superuser» (суперпользователь). Это не так. Аббревиатура означает «substitute user» — «подменить пользователя».
env— эта команда отображает переменные окружения текущего пользователя.echo— эта команда выводит строку текста на экран. Часто используется для отображения значений переменных окружения. Например, чтобы узнать текущее значение переменнойPATH, введитеecho $PATH.top— очень полезная команда, отображающая список всех приложений и процессов, выполняющихся в системе. Их можно сортировать по использованию процессора, использованию памяти, идентификатору процесса и имени пользователя-владельца.which— эта команда отображает полный путь к команде или утилите оболочки. Например, чтобы узнать полный путь к командеls, введитеwhich ls.whoami— эта команда отображает имя текущего пользователя.netstat— эта команда отображает состояние сети, включая текущие соединения, таблицы маршрутизации и т.д.route— эта команда используется для просмотра или изменения таблицы маршрутизации системы.ifconfig— эта команда используется для управления сетевыми адаптерами, установленными в системе. С её помощью можно отображать или изменять параметры конфигурации сетевого адаптера. Команда может выполняться только суперпользователем root.uname— эта команда возвращает информацию о вашей системе Linux с использованием нескольких различных параметров, в том числе:-s— отображает имя ядра Linux;-n— отображает имя хоста системы;-r— отображает номер выпуска ядра Linux;-v— отображает номер версии ядра Linux;-m— отображает аппаратную архитектуру системы (например, x86_64);-p— отображает тип процессора;-i— отображает аппаратную платформу;-o— отображает операционную систему;-a— отображает всю перечисленную выше информацию.
Примечание
Приведённый здесь список команд предназначен лишь для первого знакомства с распространёнными командами и утилитами Linux. Для успешной сдачи экзаменов Linux+ и LPIC-1 вам потребуется хорошо знать эти и многие другие команды. Дополнительные команды и утилиты будут рассмотрены в последующих главах книги.
Помимо прямого запуска команды из приглашения командной строки, можно также использовать команду exec для запуска программы. Например, если у вас есть Linux-приложение с именем исполняемого файла myapp, его можно запустить, введя exec myapp в приглашении командной строки (при условии, что путь к файлу myapp включён в вашу переменную окружения PATH).
Эта команда на практике используется нечасто, так как обычно проще запустить команду непосредственно из приглашения командной строки, как описано выше.
Тем не менее у команды exec есть одна полезная особенность. Чтобы её понять, необходимо учитывать следующее: когда вы выполняете команду напрямую из приглашения командной строки (без exec), новый процесс, созданный этой командой, работает параллельно с процессом оболочки. Однако если команда выполняется с помощью exec, новый процесс фактически заменяет процесс оболочки, из которой он был запущен. При выходе из приложения это равнозначно завершению самой оболочки. Например, если ввести exec vi в приглашении командной строки, загрузится текстовый редактор vi. Когда вы выйдете из vi, весь сеанс завершится, поскольку процесс оболочки был заменён процессом редактора.
Попрактикуемся в использовании распространённых команд Linux в следующем упражнении.
Упражнение 2-2. Использование команд Linux
В этом упражнении вы научитесь использовать распространённые команды Linux из приглашения командной строки. Упражнение можно выполнить с помощью виртуальной машины, прилагаемой к книге. Запустите снимок 2-1 для корректно настроенной среды.
VIDEO Посмотрите видео к упражнению 2-2, в котором показано, как выполнить это задание.
Выполните следующие действия:
- Загрузите систему Linux до приглашения командной строки.
- Если система загрузилась в графическую среду, войдите в систему как пользователь
studentс паролемstudent, затем нажмите Ctrl+Alt+F1. - В приглашении входа выполните аутентификацию в системе как
studentс паролемstudent. - В приглашении командной строки определите текущий каталог, введя
pwd. Каков текущий рабочий каталог? - Определите текущего пользователя, введя
whoami. Кто является текущим пользователем? - Создайте список файлов в текущем каталоге, введя
ls. - Получите подробную информацию об утилите
ls, введяman lsв приглашении командной строки. - Используйте клавишу PageDown для прокрутки страницы справки. Какой параметр позволяет вывести подробный формат листинга?
- Нажмите
q. - Создайте подробный листинг с помощью команды
ls, введяls -lв приглашении командной строки. - Введите
logout, затем нажмите Alt+F7.
Использование истории команд¶
Оболочка bash поддерживает историю команд. Каждый раз при вводе команды в приглашении командной строки она сохраняется в файле ~/.bash_history в домашнем каталоге. Этот файл представляет собой простой (скрытый) текстовый файл, содержащий все ранее введённые команды оболочки — по одной в каждой строке. Файл обновляется при каждом вводе команды оболочки. Просмотреть содержимое файла .bash_history можно, введя history в приглашении командной строки. Пример вывода:
rtracy@openSUSE:~> history
1 echo $SHELL
2 ls -al
3 ls
4 touch ./resources.odp
5 touch ./schedule.txt
6 touch ./widget_project.doc
7 ls
8 echo $PATH
9 vi ./runme.sh
10 chmod 666 ./runme.sh
11 ls
12 ls -l
13 chmod 766 ./runme.sh
14 ls
15 runme.sh
16 history
Если нажать клавишу «стрелка вверх» в приглашении командной строки, bash прочитает этот файл и отобразит последнюю введённую команду. При повторных нажатиях «стрелки вверх» можно прокручивать список ранее использованных команд. Найдя нужную, просто нажмите Enter для её выполнения. Это особенно удобно, когда нужно повторно ввести очень длинную или сложную команду: нажимайте «стрелку вверх» до тех пор, пока не отобразится нужная команда, затем нажмите Enter.
Если не хочется прокручивать весь список предыдущих команд, можно ввести часть искомой команды и нажать Ctrl+R. Оболочка bash выполнит поиск по истории команд и отобразит самую последнюю совпавшую команду.
Управлять записями в файле истории можно с помощью следующих переменных окружения:
HISTSIZEилиHISTFILESIZE— настраивает размер файла истории. В большинстве дистрибутивов установлено значение 1000 записей. Размер файла истории можно изменить, задав другое значение этой переменной.HISTCONTROL— управляет порядком сохранения истории команд. Для этой переменной можно задать значениеignoredups,ignorespace,ignorebothилиerasedups. Значениеignorespaceпредписывает оболочке не сохранять в историю команды, начинающиеся с пробела. Значениеignoredupsпредписывает не сохранять повторяющиеся команды. Значениеignorebothсочетает в себе оба предыдущих режима. Значениеerasedupsудаляет все дублирующиеся записи из файла истории.
Примечание
Переменные окружения будут подробнее рассмотрены позже в этой главе.
Попрактикуемся в использовании истории команд в следующем упражнении.
Упражнение 2-3. Использование истории команд
В этом упражнении вы попрактикуетесь в использовании истории команд в оболочке bash. Упражнение можно выполнить с помощью виртуальной машины, прилагаемой к книге. Запустите снимок 2-1 для корректно настроенной среды.
VIDEO Посмотрите видео к упражнению 2-3, в котором показано, как выполнить это задание.
Выполните следующие действия:
- Загрузите систему Linux до приглашения командной строки. Если система загрузилась в графическую среду, войдите в систему как пользователь
studentс паролемstudent, затем нажмите Ctrl+Alt+F1. - Выполните аутентификацию в системе как пользователь
studentс паролемstudent. - В приглашении командной строки введите
ls -l /var/log. - В приглашении командной строки введите
pwd. - В приглашении командной строки введите
whoami. - Повторно выполните команду
lsиз шага 3, нажав «стрелку вверх» три раза, затем Enter. - Используя «стрелку вверх», повторно выполните команду
pwd. - Используя «стрелку вверх», повторно выполните команду
whoami. - Введите
logout, затем нажмите Alt+F7.
Помимо истории команд, оболочка bash также предоставляет функцию автодополнения команд. Рассмотрим её далее.
Использование автодополнения команд¶
Наряду с историей команд, автодополнение команд — ещё одна ценная возможность оболочки bash. Она особенно полезна при вводе очень длинных имён файлов в командной строке. Функция автодополнения позволяет просто нажать клавишу Tab во время ввода команды в приглашении командной строки. Оболочка bash «угадывает», что именно вы хотите ввести, и автоматически завершает команду за вас.
Например, предположим, что в каталоге /tmp находится файл vmware-linux-tools.tar.gz. Нужно распаковать этот архив tarball, чтобы установить содержащееся в нём приложение. Можно было бы ввести полную команду tar -zxvf /tmp/vmware-linux-tools.tar.gz в приглашении командной строки, и tar распакует файл (принцип работы команды tar подробнее рассматривается в главе 10).
Однако при вводе длинных имён файлов легко допустить опечатку. Чтобы этого избежать, можно воспользоваться автодополнением: введите tar -zxvf /tmp/vmw в приглашении командной строки и нажмите клавишу Tab. Оболочка bash просмотрит файлы в каталоге /tmp, имена которых начинаются с vmw, и определит, что вы, вероятно, имеете в виду файл vmware-linux-tools.tar.gz. Затем она автоматически подставит это имя файла в конец команды. Останется лишь нажать Enter. Автодополнение команд — незаменимая функция!
Попрактикуемся в использовании автодополнения в следующем упражнении.
Упражнение 2-4. Использование автодополнения команд
В этом упражнении вы попрактикуетесь в использовании автодополнения команд в оболочке bash. Упражнение можно выполнить с помощью виртуальной машины, прилагаемой к книге. Запустите снимок 2-1 для корректно настроенной среды.
VIDEO Посмотрите видео к упражнению 2-4, в котором показано, как выполнить это задание.
Выполните следующие действия:
- Загрузите систему Linux до приглашения командной строки. Если система загрузилась в графическую среду, войдите в систему как пользователь
studentс паролемstudent, затем нажмите Ctrl+Alt+F1. - Выполните аутентификацию в системе как пользователь
studentс паролемstudent. - Перейдите под учётную запись суперпользователя root, введя
su -с паролемstudent. - В приглашении командной строки введите
tail /var/log/m, но не нажимайте Enter. - Нажмите клавишу Tab дважды. Должен отобразиться список всех файлов в
/var/log/, начинающихся сm. - Добавьте к команде букву
e, не нажимая Enter. В строке приглашения должно отображатьсяtail /var/log/me. - Нажмите клавишу Tab. Команда должна автоматически дополниться до
tail /var/log/messages. - Нажмите Enter для выполнения команды.
- Введите
logout, затем нажмите Alt+F7.