|
КОНСОЛЬ ДЛЯ ЛИНУКСОИДА
(c)Петр 'Roxton' СЕМИЛЕТОВ,
|
N 29 (148) 16.07.2001
|
Недаром специалисты по Linux так любят работать в консоли. Новичкам же кажется — ну что там интересного, сплошной текст, ни тебе окошек с кнопочками, ни удобства, сплошь одни мудреные команды. Однако, за всем этим консольным буквоедением кроется небывалая мощь...
Этот материал не претендует на полное изложение линуксовых команд, а тем более не является учебником для начинающих — для этого есть специальные книги. Возьмите какое-нибудь древнее советское издание по Юниксу — необязательно покупать дорогущий том за полтинник, достаточно найти в ближайшей более-менее солидной библиотеке книгу Р. Готье «Руководство по ОС UNIX» (М., Финансы и статистика, 1985) и получите массу полезной информации по работе в этой замечательной системе.
Здесь же мы поговорим о различных повседневных операциях, которые удобно проделывать с помощью командной строки. Что нам понадобится?
Терминал. Если вы находитесь в графической среде вроде KDE или Gnome, то запустите из подменю Terminals главного меню один из установленных в системе терминалов. Если у вас не старинный дистрибутив Linux, а что-нибудь вроде свежих версий Mandrake или Red Hat, и установлены «Гном» и KDE, то вы можете обнаружить, кроме стандартной консоли (вызывается из среды X-Windows командой
xterm), такие эмуляторы терминалов (то есть консоли), как: Terminal (KDE Konsole), ETerm, RXVT, Gnome Terminal и так далее. Что использовать? А что хотите — дело вкуса. Все равно эмулятор терминала, консоль — не что иное, как интерфейс для командного интерпретатора, который по старой памяти называется shell — как назывался такой интерпретатор для UNIX. Задача shell — передавать ваши команды другим программам и ядру.
В настоящее время существует множество интерпретаторов, но поскольку самым популярным из них является
bash, то на нем и будем практиковаться. Запустив терминал, вы тут же начинаете общаться с bash. Прежде чем начать изложение материала, сразу оговорюсь — подразумевается, что вы вошли в систему как
root — чтобы не отвлекаться на частые пояснения, мол, эта команда только для root, а вот та — для простых смертных. Итак, вы — root! Теперь поехали...
Вот некоторые полезные, но неочевидные тонкости работы с bash:
Клавиши «вниз» и «вверх» позволяют листать в двух направлениях историю команд.
Клавиша
TAB служит для дополнения строки. Например, вам нужно ввести длинное и невероятно сложное имя файла (а в Линуксе это весьма распространенный случай). Просто наберите начало названия этого файла и нажмите TAB — оно автоматически дополнится. То же относится ко всем командам. Можете набрать, скажем, «ma» и нажать TAB — выведется список всех доступных команд, начинающихся с «ma». А как вы думали, почему линуксоиды так быстро команды набирают :-) — у них TAB всегда под рукой!
Другая полезная возможность, которую предоставляет нам Bash, — это встроенный калькулятор. Допустим, нужно нам отнять 2001 от 1945. Чтобы получить готовый результат, вводим следующую команду, завершая ее нажатием клавиши
Enter (так нужно завершать все команды, которые вы хотите выполнить):
echo $((2001 — 1945))
Получаем результат: 56
Разберем пример подробнее. Во-первых, команда
echo служит нам для выведения неких данных на стандартный вывод, по умолчанию на экран. Далее, чтобы вычислить наше алгебраическое выражение, нужно записать его в таком формате:
$((выражение))
Обратите внимание на двойные скобки — они здесь не для красоты. Теперь усложним задачу — запишем результат вычисления в текстовый файл. Для этого воспользуемся свойством Линукс, называемым
перенаправлением потоков ввода/вывода. Что есть поток? Это некоторая информация, которую можно направлять в программу для обработки и получать из этой программы. Более того, часто составляются цепочки таких переадресаций потоков, например, текстовый файл > программа проверки орфографии > форматирования > печати. Сейчас мы немного модифицируем предыдущий пример, вот так:
echo $((2001 — 1945)) > result.txt
Что получилось? Знак «
>» используется для перенаправления вывода из команды
echo в текстовый файл result.txt. Берется поток, записывается в файл, который тут же и создается. Если до этого существовал файл под таким же именем, то он затрется. А чтобы просто добавить в файл информацию, без затирания предыдущей версии, вместо «>» используем «>>». Команды, набираемые в консоли, действуют в текущей директории.
Теперь поговорим о запуске программ. Казалось бы, все просто — набрали команду, та и выполнилась. Но ведь Линукс — многозадачная среда! Можем запускать процессы (программы) в
мультизадачном режиме. При этом один из процессов будет текущим (foreground), остальные же выполняются в фоне (background). Короче говоря, каждая запущенная программа-процесс получает свой номер, по которому мы можем к ней обращаться. Запустим, например, из консоли браузер Mozilla:
mozilla
Как видим, Мозилла загрузилась. Но что это? — консоль не воспринимает команды! Почему? Да потому что сейчас запущен браузер! А чтобы запустить его и вернуть управление Bash'у, нужно в конце команды поставить символ амперсанда — «&»:
mozilla&
Сработало? Посмотрите на текст, выданный при запуске (сразу после строки «mozilla&»):
[1] 1842
Первое число, в квадратных скобках — это номер задания, которые вы запустили в фоновом режиме, а второе идентифицирует процесс. Запомним, что Мозилла получила номер задания «1». Если вы забудете этот номер, то список задач и их номера можно получить, дав на выполнение команду
jobs. Хорошо, что делать с номером? Например, у вас есть куча задач, которые выполняются в фоне:
plaympeg Nirvana_Polly.mp3 &
mozilla&
lpr mytext.txt &
и т. д.
Каждая из них имеет свой номер. Чтобы сделать задачу с номером
N текущей, надо дать команду
fg %N, где N — искомый номер задания. Если необходимо вернуть задачу в фоновый режим, делаем так — приостанавливаем текущий процесс нажатием клавиш Ctrl+Z и вводим команду bg. Чтобы «убить» задачу, даем команду kill %N. Есть еще такая команда как ps — она выводит список текущих процессов. Запущенная без параметров, вот так:
ps
она предоставляет нам
PID'ы (числовые идентификаторы процессов), которые можно также использовать для работы с задачами. Например, если запущенная Мозилла имеет PID 777, то убить ее можно командой:
kill 777
При этом, поскольку вы используете PID, то префикс «
%» перед числом НЕ НУЖЕН. Чтобы получить список всех процессов, нужно дать команду ps с параметром
-A (именно с большой буквы):
ps -A
Более наглядную информацию в виде дерева процессов можно вывести на экран, используя команду
pstree с параметром -p, чтобы отображались PID'ы:
pstree -p
Теперь перейдем к
отложенному выполнению задач — или, пользуясь терминологией Windows, познакомимся с планировщиком задач. Linux изначально построена таким образом, что процессы в ней можно запускать автоматически в установленное вами время. Для этого существует множество возможностей, самой простой из которых является использование команды
at. Как правило, at удобно использовать в тех случаях, когда нужно вызвать в определенное время некие системные функции, вроде копирования из одного каталога в другой, и так далее. at может читать аргументы как из командной строки, так и из текстового файла. Пример:
at now +60 minutes
некая_команда
А затем нажимаете
Ctrl+D, чтобы завершить ввод команд (их-то мы набираем не в bash, а в at). Время можно задавать в разных форматах, но для повседневных нужд подойдет чч:мм. Можно применять к ним выражения вида
+ число единица_измерения, где последняя может быть: minutes, hours, days, weeks. Есть макросы today (сегодня), tomorrow (завтра), noon (полдень), midnight (полночь), teatime (4 часа пополудни). Чтобы отложенные команды выполнялись, должен быть активен демон atd, который их, собственно, и запускает. Если он не запущен при старте (бывает, если вы сами его отключили), то активируйте его командой atd.
Другой пример — здесь предполагается, что команды определены в текстовом файле
mycmd:
at now +13 minutes < mycmd
Как видим, перенаправление потоков работает и здесь. Что до параметров at, то получить их все можно, набрав волшебное
man at. Кстати, получить справку о практически любой команде (если к ней прилагается информационный
man[ual]-файл), можно с помощью: man имя_команды. При просмотре man-руководства его можно прокручивать с помощью курсорных клавиш, переходить во встроенные в документах подменю, нажимая на них Enter. А выход из man осуществляется нажатием клавиши q. Но вернемся к параметрам для at — вот несколько наиболее полезных их них:
Получить список «планируемых» заданий:
at -l
Удалить задание из списка:
at -d номер_задания
Раз уж речь пошла об автоматическом выполнении задач, то нельзя обойти вниманием
shell-скрипты. Командный скрипт — этой обычный текстовый файл, содержащий управляющие и логические команды. В скрипте могут быть прописаны обычные вызовы команд, вроде ls, а могут использоваться операторы и выражения С-подобного языка, что придает скриптам особую гибкость и позволяет применять их там, где нужна автоматизация — например, для подготовки инсталляции некоторых программ, или же их активации. Можно написать скрипт, выполняющий комплексную процедуру резервного сохранения файлов или очистки какой-нибудь temp-директории. Живой пример — если у вас дистрибутив Linux Mandrake, то посмотрите — в тамошнем Control Center'е имеется страница с менеджером запущенных сервисов. Там можно их запускать, останавливать или определять, стартовать ли процесс при загрузке системы. Так вот, на самом деле эта страничка — всего лишь интерфейс для скрипта, который выполняет все действия по конфигурированию.
Чтобы выполнить скрипт, нужно дать команду:
sh имя_скриптового_файла
А если вы желаете, чтобы скрипт выполнялся автоматически, как исполняемый файл, то нужно присвоить ему соответствующий атрибут, вот так:
chmod u+x имя_файла
Давайте посмотрим на примере. Допустим, нужно одним скриптом запускать графический редактор
GIMP, музыкальный плейер XMMS и почтовик KMail. Скрипт будет выглядеть так (файл myscript):
#! /bin/sh
gimp&
xmms&
kmail&
Теперь запустите его из
Midnight Commander (вызывается в консоли командой
mc), либо вот так: sh myscript, после чего все три программы будут запущены.
И логическим завершением нашей статьи будет выход из Линукса — выключение компьютера либо его перезагрузка. Как завершить работу Линукса, используя консоль, и как перезагружаться? Очень просто — для этого применяется одна и та же команда —
shutdown, но с различными параметрами.
Перезагрузить:
shutdown -r now &
Выключить компьютер:
shutdown -h now &
В данном случае
-r означает
Reboot, а -h — Halt. Последний параметр определяет время, через которое следует выполнить задачу. Время может быть указано константой now (то есть немедленно), в формате чч:мм (например, 23:59), либо +m (где m — количество минут, через которое должен быть произведен shutdown). Пример выключения машины за минуту до полуночи:
shutdown -h 23:59 &
При этом все подключенные к системе пользователи (а вдруг у вас сервер?) получают уведомление, мол, в такое-то время компьютер уйдет в
даун... Если же нужно отменить shutdown, дайте команду:
shutdown -c
И еще три команды, более простые для пользователя:
halt — останов системы, выключение питания в корпусе ATX;
reboot — перезагрузка компьютера;
poweroff — выключение питания;
Напоследок — работая в консоли, да еще с правами root, всегда отдавайте себе отчет в том, что творите, и не действуйте методом «научного тыка», а читайте сперва документацию — благо, ее предостаточно.
|