CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Bourn’ый гений

Сергей ЯРЕМЧУК grinder@ua.fm

Сегодня работа в Unix выглядит совсем иначе, чем лет этак десять-пятнадцать назад. Графический интерфейс, системы меню, drag-and-drop — все это сказалось на характере общения пользователя с системой. Нынешние юниксы даже внешние мало чем отличаются от Windows, уж простите за такое сравнение :-). Но взглянув на рабочий стол любого более-менее продвинутого юниксоида, всегда найдете там хотя бы одно окно терминала. Может быть, поначалу кажется, что это неудобно, да еще и команды необходимо запоминать, но со временем, когда появляются любимые приложения, начинаешь замечать, что запустить их легче и быстрее с командной строки. Консольные программы работают быстрее и к системным ресурсам относятся поэкономней, чем их оконные собратья. Последние в большинстве своем являются лишь фронт-эндом к консольным утилитам. В данной статье попробуем немного скрасить и упростить свое пребывание в командной строке.

Поначалу хочется отметить, что командный интерпретатор, используемый в любой Unix-системе, гораздо сложнее и функциональнее, чем command.com из MS-DOS, к тому же играет куда более важную роль в управлении системы. Может быть поэтому с появлением Windows про command.com практически забыли. Но юниксоиды интерпретатор чаще называют оболочкой (shell). Это название произошло оттого что в системе приняты различные уровни работы операционной системы. Так, различают внутренние функции ядра и внешние, вызываемые пользователем. Но ядро имеет очень сложную структуру и свой набор команд, чтобы разобраться со всем этим, необходимо иметь довольно серьезную подготовку, к тому же и удобство, понимаете, и безопасность. Поэтому ядро облачили в удобную и красивую одежку, а по-простому оболочку —shell. Которая и берет на себя все заботы при взаимодействии пользователя с ядром: выполнение пользовательских команд, предотвращение выполнения ненадежного и опасного для системы кода, поиск и запуск программ и много-много других функций. Но и интерпретаторов для Unix существует довольно приличное количество. Список всех установленных в системе можно получить, просмотрев файл /etc/shells. Например:

Ого, а я-то думаю, куда все свободное место делось :-). В среде Linux по умолчанию используется интерпретатор bash, если кто использует в своей работе FreeBSD, то в этой системе вас первым встретит tcsh. На различиях останавливаться в этот раз не будем. Пользователю обычно хватает возможностей, предоставляемых bash (Bourne Again Shell), поэтому на нем и остановимся. К тому же компания Red Hat недавно объявила, что создает интерпретатор, совмещающий положительные стороны всех имеющихся в природе, что, однако, вызвало критику со стороны старожилов Unix. Поживем, увидим, что получится.

При запуске командный интерпретатор bash последовательно считывает следующие конфигурационные файлы: /etc/profile, ~/.bash_profile, ~/.bashrc, а в конце работы считывается файл ~/.bash_logout. В этих файлах устанавливаются необходимые для работы значения переменных среды bash. Также некоторые параметры связанные с раскладкой клавиатуры устанавливаются в файлах /etc/inputrc и ~/inputrc. Давайте рассмотрим некоторые интересные и полезные переменные. Узнать значения, уже установленные в интерпретаторе, можно, воспользовавшись командой printenv. Довольно часто, набрав какую-либо программу, в ответ получаем command not found т.е. система не может найти исполняемый файл. Для поиска каталогов с программами используется переменная PATH (переменные в bash пишутся заглавными буквами). Проверить отдельно установленное значение можно, набрав echo $имя_переменной. Например:

Как видите, чтобы обратиться к значению переменной, перед ее именем необходимо поставить знак некоей условной единицы —$. Но например, программа Quanta устанавливается по умолчанию в каталог /usr/local/kde/bin/, т.е. просто набрав quanta в данном примере, получим то же сообщение, в противном случае придется каждый раз набирать полный путь для запуска программы, что, согласитесь, не совсем удобно. Поэтому для удобства добавим этот каталог в переменную. Ее значение устанавливается в файле /etc/profile, в котором все необходимые каталоги перечисляются через двоеточие (:), но в системные файлы лезть не будем, поэтому допишем в домашнем файле ~/.bash_profile такие строки:

Кстати, можно сразу загрузить переменную, введя для этого:

Экспортирование значения переменной необходимо для того чтобы ее значение было доступно всей среде, а не текущему процессу. Еще один момент: кто работал в DOS, наверное, помнит, что поиск программы на исполнение начинается с каталога, в котором на данный момент находится пользователь. В Unix же необходимо каждый раз явно указывать на текущий каталог. Вот так: # ./my_program. Некоторые находят это не совсем удобным. Для того чтобы интерпретатор каждый раз искал программу и в текущем каталоге, необходимо явно указать его в переменной PATH. Сделать это очень просто: поставьте точку, отделив ее, естественно, от остальных двоеточием. Но если на домашнем компьютере это может облегчить работу, то при работе на общедоступном сервере не делайте так ни в коем случае. Почему? А потому что злоумышленник может написать скрипт, ворующий файлы с паролями, или добавляющий нового пользователя в систему, или делающий еще какую гадость. И затем положить его в общедоступный каталог, например /tmp, и, главное, назвать его как-нибудь безобидно, например cat. И теперь есть вероятность того, что суперпользователь, находясь в этом каталоге, наберет саt, и если текущий каталог в переменной PATH находится раньше, чем в /bin, запустится эта зловредная программа. Можно, конечно, прописать текущий каталог последним, но вероятность запуска чужой программы при этом все равно остается. В приведенном примере мы встретили еще одну переменную HOME, указывающую на домашний каталог пользователя; при ее считывании произойдет подстановка значения, и на выходе в данном случае получим:

Кстати, удачное место для пользовательских программ. Еще одна переменная, помогающая быстро перейти в другой каталог, —CDPATH. Она выполняет действия, подобные PATH, но для команды cd (change directory). Вспомните, сколько раз, помня название конечного каталога, мы пытались найти промежуточные, чтобы попасть в него. Но установив ее значение примерно так:

Теперь в каталог $HOME/work я могу попасть из любой точки системы, просто набрав # cd work. Как вы знаете, bash поддерживает историю команд — о том, как установить максимальное значение сохраняемых команд с помощью HISTSIZE и HISTFILESIZE, уже писал в своей статье Петр Семилетов. Но есть одно маленькое неудобство, а именно: в этот файл записываются все команды, введенные пользователем, т.е. все ваши перемещения с помощью команды cd, вывод содержимого каталога с помощью ls и просмотр списка процессов с помощью ps тоже заносятся в данный файл, а так как это наиболее часто используемые команды, то они заполняют большую часть файла, хоть в большинстве случаев данные команды меньше всего интересуют пользователя. Поэтому часто приходится долго и нудно пролистывать историю команд с помощью стрелки вверх. Так вот, для того чтобы не все команды попадали в этот список, существует переменная HISTIGNORE. Запишите такую строку в файл ~/.bash_profile:

Остальные команды подберите сами, посмотрев с помощью history самые бесполезные.

Пользователю root желательно воспользоваться переменной TMOUT, отключающей терминал при бездействии в течение определенного времени.

Очень часто пользователям не нравится приглашение командного интерпретатора, и возникает естественное желание его изменить. Пожалуйста — здесь возможно если не все, то многое; приглашению также соответствует своя переменная. Но вы скорее всего удивитесь, когда узнаете, что в bash используется аж четыре вида приглашений. Второе приглашение используется, когда вы нажмете клавишу Enter, синтаксически не закончив при этом ввод команды. С третьим и четвертым разберетесь сами, их встречают еще реже. Так вот, за вид первых двух отвечают переменные PS1 и PS2 соответственно. Давайте посмотрим, что даст их вывод:

Если сопоставить вывод команды и шаблон, то получится, что знаку \u соответсвует имя пользователя, \h — имя узла, \W — текущий каталог. Некоторые интересные опции приведены в таблице, остальные — в man bash.

Так же, как и в любую другую переменную, в PS* можно подставить результат выполнения команды: PS1=`uname`"$" выведет Linux$.

Про переменные на сегодня все, а то не хватит места для всего остального. Есть еще одна удобная штука в bash, о которой все говорят, но почему-то мало кто использует —присвоение псевдонимов командам. Прописать их можно в файле .bashrc. Формат записи такой: alias rm='rm -i'; теперь после перезапуска будет запрашиваться подтверждение на удаление файла, когда вы просто введете rm (без этого данная команда удаляет файлы молча, что не есть безопасно). В некоторых случаях требуется, чтобы файл удалялся безвозвратно — у команды rm есть опция -P, при которой файл записывается три раза в случайной последовательности, и тогда уж точно никакая утилита не сможет его восстановить. Если посмотреть внимательно на опции большинства команд, то можно найти универсальные; я их нашел пока четыре: -h — помощь, -i — запуск в интерактивном режиме, когда программа запрашивает подтверждение на действие, -v — информационный режим, когда программа выводит отчет о каждом своем действии, -f — режим безоговорочного Табл. 1выполнения программы. Кстати, загляните обязательно в этот файл — там уже наверняка есть готовые псевдонимы. Но обычно на них успокаиваются, и очень даже зря. Кто сейчас вспомнит, как очистить диск CD-RW? А я набираю просто #clearrw. И все, ни одного лишнего удара по клавиатуре, и самое главное, быстро вспоминается, когда нужно. Добавьте следующие строки в файл: alias clearrw='cdrecord -blank=all dev=0,0'.

Bash, как и практически любая программа в Unix, поддерживает работу с регулярными выражениями. Это, пожалуй, отдельная тема — такого размаха я, честно говоря, в Windows не встречал. Пока всего лишь небольшой пример. Как быстрее создать три каталога в домашней директории? А вот так:

(Продолжение следует)

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov