355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Уильям Шоттс » Командная строка Linux » Текст книги (страница 9)
Командная строка Linux
  • Текст добавлен: 12 апреля 2017, 12:30

Текст книги "Командная строка Linux"


Автор книги: Уильям Шоттс


Жанр:

   

ОС и Сети


сообщить о нарушении

Текущая страница: 9 (всего у книги 30 страниц)

Часть II. Окружение и настройка

11. Окружение

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

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

В этой главе мы будем работать со следующими командами:

• printenv – выводит часть или все окружение.

• set – устанавливает параметры командной оболочки.

• export – экспортирует окружение для программ, которые будут выполняться позднее.

• alias – создает псевдоним команды.

Что хранится в окружении?

Командная оболочка хранит в окружении данные двух основных типов, хотя bash практически не делает различий между типами. Эти данные хранятся в переменных окружения и в переменных командной оболочки. Переменные командной оболочки – это фрагменты данных, инициализируемые командой bash, а переменные окружения – практически все остальное. Помимо переменных командная оболочка хранит также программируемые данные, а именно псевдонимы и функции командной оболочки. Мы уже познакомились с псевдонимами в главе 5, а о функциях (которые имеют отношение к сценариям командной оболочки) поговорим в части IV книги.

Исследование окружения

Увидеть, что хранится в окружении, можно при помощи встроенной в bash команды set или программы printenv. Команда set выводит переменные обоих видов – командной оболочки и окружения, – тогда как printenv выводит только последние. Так как список содержимого окружения очень велик, его лучше просматривать, передавая вывод любой из команд по конвейеру в less:

[me@linuxbox ~]$ printenv | less

Запустив эту команду, вы должны увидеть нечто похожее:

KDE_MULTIHEAD=false

SSH_AGENT_PID=6666

HOSTNAME=linuxbox

GPG_AGENT_INFO=/tmp/gpg-PdOt7g/S.gpg-agent:6689:1

SHELL=/bin/bash

TERM=xterm

XDG_MENU_PREFIX=kde-

HISTSIZE=1000

XDG_SESSION_COOKIE=6d7b05c65846c3eaf3101b0046bd2b00-1208521990.996705-1177056199

GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/me/.gtkrc-2.0:/home/me/.kde/share/

              config/gtkrc-2.0

GTK_RC_FILES=/etc/gtk/gtkrc:/home/me/.gtkrc:/home/me/.kde/share/config/gtkrc

GS_LIB=/home/me/.fonts

WINDOWID=29360136

QTDIR=/usr/lib/qt-3.3

QTINC=/usr/lib/qt-3.3/include

KDE_FULL_SESSION=true

USER=me

LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:

         cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe:

Это список переменных окружения с их значениями. Например, в списке можно увидеть переменную с именем USER, содержащую значение me. Команда printenv может также вывести значение конкретной переменной:

[me@linuxbox ~]$ printenv USER

me

Команда set при вызове без параметров и аргументов выводит переменные обоих типов – командной оболочки и окружения, – а также все объявленные функции командной оболочки.

[me@linuxbox ~]$ set | less

В отличие от printenv она сортирует вывод в алфавитном порядке.

Получить значение единственной переменной можно также с помощью команды echo, например:

[me@linuxbox ~]$ echo $HOME

/home/me

Единственный элемент окружения, который не выводится командами set и printenv, это псевдонимы. Чтобы вывести список псевдонимов, используйте команду alias без аргументов:

[me@linuxbox ~]$ alias

alias l.='ls -d .* –color=tty'

alias ll='ls -l –color=tty'

alias ls='ls –color=tty'

alias vi='vim'

alias which='alias | /usr/bin/which –tty-only –read-alias –show-dot –showtilde'

Некоторые интересные переменные

Окружение содержит довольно много переменных, и хотя ваше окружение может отличаться от представленного здесь, вы почти наверняка увидите у себя переменные, перечисленные в табл. 11.1.

Таблица 11.1. Переменные окружения

Переменная

Содержит

DISPLAY

Имя вашего дисплея, если вы работаете в графическом окружении. Обычно это :0, что означает первый дисплей, сгенерированный X сервером

EDITOR

Имя программы, используемой в качестве текстового редактора

SHELL

Имя программы командной оболочки

HOME

Путь к домашнему каталогу

LANG

Определяет набор символов и порядок сортировки для вашего языка

OLD_PWD

Предыдущий рабочий каталог

PAGER

Имя программы для постраничного просмотра. Часто имеет значение /usr/bin/less

PATH

Список каталогов, разделенных двоеточием, в которых производится поиск выполняемых программ по их именам

PS1

Строка приглашения к вводу № 1. Определяет содержимое строки приглашения к вводу в командной оболочке. Как будет показано позднее, эту строку можно менять весьма существенно

PWD

Текущий рабочий каталог

TERM

Тип терминала. Unix-подобные системы поддерживают множество протоколов для работы с терминалами; эта переменная определяет протокол, который будет использоваться при обмене данными с эмулятором терминала

TZ

Определяет часовой пояс. В большинстве Unix-подобных систем внутренние часы компьютера устанавливаются в координированное универсальное время (Coordinated Universal Time, UTC), а при выводе значения времени к нему добавляется смещение, определяемое этой переменной

USER

Имя пользователя

Не волнуйтесь, если какие-то переменные у вас отсутствуют. Они могут отличаться в разных дистрибутивах.

Как устанавливается окружение?

Когда мы входим в систему, запускается программа bash и читает содержимое серии конфигурационных сценариев, называемых файлами запуска (startup files), где определяется окружение по умолчанию, общее для всех пользователей. Затем она читает дополнительные файлы запуска в вашем домашнем каталоге, где определяется личное окружение. Точная последовательность обработки файлов зависит от типа запускаемого сеанса командной оболочки.

Оболочка входа и простая оболочка

Сеансы работы с командной оболочкой входа могут быть двух типов: сеанс командной оболочки входа (login shell session) и сеанс простой командной оболочки (non-login shell session).

Сеанс командной оболочки входа (login shell session) – это сеанс, который на входе запрашивает имя пользователя и пароль, например, когда вход выполняется в виртуальной консоли. Сеанс простой командной оболочки (non-login shell session) обычно начинается, когда запускается терминал в графическом окружении.

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

Обычные сеансы командной оболочки читают файлы, перечисленные в табл. 11.3.

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

Таблица 11.2. Файлы запуска для сеансов командной оболочки входа

Файл

Содержит

/etc/profile

Общесистемный конфигурационный сценарий, настройки из которого применяются для всех пользователей

~/.bash_profile

Личный пользовательский файл запуска. Может использоваться для расширения и/или переопределения общесистемных настроек

~/.bash_login

Если файл ~/.bash_profile присутствует в домашнем каталоге, bash пытается прочитать его

~/.profile

Если в домашнем каталоге нет ни ~/.bash_profile, ни ~/.bash_login, bash пытается прочитать этот файл. Используется по умолчанию в дистрибутивах на основе Debian, таких как Ubuntu

Таблица 11.3. Файлы запуска для обычных сеансов командной оболочки

Файл

Содержит

/etc/bash.bashrc

Общесистемный конфигурационный сценарий, настройки из которого применяются для всех пользователей

~/.bashrc

Личный пользовательский файл запуска. Может использоваться для расширения и/или переопределения общесистемных настроек

Загляните в свою систему и посмотрите, какие файлы запуска у вас имеются. Помните: поскольку большинство имен файлов из перечисленных выше начинается с точки (такие файлы считаются скрытыми), при использовании команды ls ей необходимо передавать параметр -a.

С точки зрения обычного пользователя, файл ~/.bashrc является, пожалуй, самым важным файлом запуска, потому что его содержимое читается практически всегда. Обычные командные оболочки читают его по умолчанию, а большинство файлов запуска для командных оболочек входа написаны так, что оболочка также прочитает файл ~/.bashrc.

Что находится в файлах запуска?

Если заглянуть внутрь типичного файла .bash_profile (взятого из системы CentOS-4), можно увидеть следующее:

# .bash_profile

# Загрузить псевдонимы и функции

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi

# Определение пользовательского окружения и запуск программ

PATH=$PATH:$HOME/bin

export PATH

Строки, начинающиеся с #, – это комментарии, они не читаются командной оболочкой, а предназначены для человека. Первый интересный фрагмент начинается в четвертой строке:

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi

Этот код называется составной условной командой, полное описание которой будет дано в части IV книги, где обсуждается программирование на языке командной оболочки, а пока приведем ее перевод на человеческий язык:

Если файл "~/.bashrc" существует, тогда

     прочитать файл "~/.bashrc" file.

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

Приходилось ли вам задумываться над тем, как командная оболочка находит команды, которые вводятся в командной строке? Например, когда мы вводим ls, командная оболочка не обыскивает весь компьютер целиком, чтобы найти /bin/ls (полный путь к команде ls), а просматривает только каталоги, перечисленные в переменной PATH.

Переменная PATH часто (но не всегда, в зависимости от дистрибутива) устанавливается в файле запуска /etc/profile, как показано ниже:

PATH=$PATH:$HOME/bin

Здесь в конец списка в переменной PATH добавляется каталог $HOME/bin. Этот код может служить примером использования механизма подстановки параметров, с которым мы познакомились в главе 7. Для демонстрации попробуйте выполнить следующий пример:

[me@linuxbox ~]$ foo="This is some"

[me@linuxbox ~]$ echo $foo

This is some

[me@linuxbox ~]$ foo=$foo" text."

[me@linuxbox ~]$ echo $foo

This is some text.

Используя этот прием, можно добавлять текст в конец содержимого переменной.

При добавлении строки $HOME/bin в конец содержимого переменной PATH происходит добавление каталога $HOME/bin в список каталогов, где будет выполняться поиск вводимых команд. Это означает, что если мы решим создать каталог в своем домашнем каталоге для хранения личных программ, командная оболочка уже будет готова к этому. Нам останется только дать имя bin этому каталогу.

ПРИМЕЧАНИЕ

Многие дистрибутивы предоставляют настройки PATH по умолчанию. Некоторые дистрибутивы на основе Debian, такие как Ubuntu, проверяют наличие каталога ~/bin во время входа, и если он имеется, динамически добавляют его в переменную PATH.

Наконец, у нас осталась еще одна строка:

export PATH

Команда export указывает командной оболочке сделать содержимое переменной PATH доступным дочерним процессам этой оболочки.

Изменение окружения

Теперь, зная, где находятся файлы запуска и что они содержат, мы можем изменить их, чтобы настроить окружение.

Какие файлы следует изменять?

Как правило, изменение содержимого переменой PATH или определение дополнительных переменных окружения следует производить в файле .bash_profile (или эквивалентном ему, в зависимости от дистрибутива, – например, в Ubuntu используется файл .profile). Во всех остальных случаях изменения должны производиться в .bashrc. Если вы не системный администратор и вам не требуется вносить изменения, касающиеся всех пользователей системы, изменяйте только файлы в своем домашнем каталоге. Конечно, можно изменять файлы в /etc, такие как profile, и во многих случаях в этом есть определенный смысл, но давайте пока избегать рискованных действий.

Текстовые редакторы

Для редактирования (то есть изменения) файлов запуска командной оболочки, а также большинства других конфигурационных файлов в системе используется программа, которая называется текстовым редактором. Текстовый редактор, подобно текстовому процессору, позволяет редактировать слова на экране, перемещая курсор. От текстового процессора эта программа отличается только поддержкой простого текста и нередко наличием особенностей, необходимых при разработке программ. Текстовые редакторы – основной инструмент, используемый программистами для создания программного кода и системными администраторами для управления конфигурационными файлами, определяющими настройки системы.

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

Текстовые редакторы делятся на две основные категории: с графическим и с текстовым интерфейсом. Оба окружения рабочего стола, GNOME и KDE, включают несколько популярных редакторов с графическим интерфейсом. В состав GNOME входит редактор с названием gedit, который в меню GNOME обычно называется Text Editor (Текстовый редактор). Вместе с KDE обычно распространяется три редактора (в порядке увеличения сложности): kedit, kwrite и kate.

Существует множество редакторов с текстовым интерфейсом. Наиболее популярные из них, с которыми, возможно, вы столкнетесь: nano, vi и emacs. Редактор nano – простой в использовании редактор, созданный как замена редактору pico, поставляемому в составе пакета программ для работы с электронной почтой PINE. Редактор vi (в большинстве систем Linux его замещает программа vim, название которой является сокращением от Vi IMproved (Vi улучшенный)) – традиционный редактор для Unix-подобных систем. Подробнее о нем рассказывается в главе 12. Редактор emacs был написан Ричардом Столлманом (Richard Stallman). Это невероятная, универсальная среда программирования, построенная по принципу «все в одном». Но, несмотря на свою доступность, он редко устанавливается по умолчанию в большинстве систем Linux.

Использование текстового редактора

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

[me@linuxbox ~]$ gedit some_file

Эта команда запустит текстовый редактор gedit и загрузит в него файл с именем some_file, если таковой существует.

Все текстовые редакторы с графическим интерфейсом имеют интуитивно понятный интерфейс, поэтому мы не будем описывать их здесь. Вместо этого сосредоточимся на редакторе с текстовым интерфейсом nano. Давайте запустим nano и внесем изменения в файл .bashrc. Но перед этим поговорим немного о мерах предосторожности. Всякий раз, собираясь редактировать важный конфигурационный файл, создайте сначала его резервную копию. Это обезопасит вас, если в процессе редактирования вы безнадежно испортите содержимое файла. Чтобы создать резервную копию файла .bashrc, выполните следующую команду:

[me@linuxbox ~]$ cp .bashrc .bashrc.bak

Неважно, как вы назовете файл с резервной копией; просто дайте ему такое имя, чтобы было понятно, что это за файл. Наиболее часто для имен файлов с резервными копиями используются расширения .bak, .sav, .old и .orig. Да, и не забудьте, что команда cp без лишних вопросов затирает существующие файлы.

Теперь, когда резервная копия создана, можно запускать редактор:

[me@linuxbox ~]$ nano .bashrc

После запуска nano вы увидите на экране примерно такую картину:

  GNU nano 2.0.3         File: .bashrc

# .bashrc

# Загрузить глобальные определения

if [ -f /etc/bashrc ]; then

    . /etc/bashrc

fi

# Пользовательские псевдонимы и функции

                          [ Read 8 lines ]

^G Get Help^O WriteOut^R Read Fil^Y Prev Pag^K Cut Text^C Cur Pos

^X Exit    ^J Justify ^W Where Is^V Next Pag^U UnCut Te^T To Spell

ПРИМЕЧАНИЕ

Если в вашей системе не установлен редактор nano, можете вместо него использовать редактор с графическим интерфейсом.

Экран редактора делится на три части: заголовок в верхней части, область редактирования текста в середине и меню команд внизу. Так как nano проектировался как замена текстового редактора, входящего в состав почтового клиента, он не обладает развитыми функциями редактирования.

Первая команда, которую нужно узнать при использовании любого редактора, – это команда выхода из программы. Чтобы покинуть nano, нажмите CTRL+X. Эта команда присутствует в меню, в нижней части экрана. Нотация ^X означает CTRL+X. Это распространенная форма записи управляющих комбинаций, используемая во многих программах.

Вторая команда, которую следует знать, – как сохранить изменения. В nano сохранение выполняется нажатием CTRL+O. Теперь, обладая новыми знаниями, приступим к правке текста. Используя клавишу со стрелкой вниз и/или Page Down, переместите курсор в конец файла и добавьте в .bashrc следующие строки:

umask 0002

export HISTCONTROL=ignoredups

export HISTSIZE=1000

alias l.='ls -d .* –color=auto'

alias ll='ls -l –color=auto'

ПРИМЕЧАНИЕ

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

Эти изменения описаны в табл. 11.4.

Таблица 11.4. Дополнения в файле .bashrc

Строка

Значение

umask 0002

Определяет маску umask для устранения проблемы с общими каталогами, обсуждавшейся в главе 9

export HISTCONTROL=ignoredups

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

export HISTSIZE=1000

Увеличивает историю команд с 500 строк по умолчанию до 1000

alias l.='ls -d .* –color=auto'

Создает новую команду с именем l., которая выводит все элементы каталога с именами, начинающимися с точки

alias ll='ls -l –color=auto'

Создает новую команду с именем ll, которая выводит содержимое каталога в подробном формате

Как видите, догадаться о назначении многих новых строк непросто, поэтому нелишним будет снабдить их комментариями, чтобы прояснить смысл для тех, кто будет читать файл .bashrc. Используя редактор, добавьте пояснения, как показано ниже:

# Изменить маску umask, чтобы упростить использование общих каталогов

umask 0002

# Игнорировать дубликаты в истории команд и увеличить

# объем истории до 1000 строк

export HISTCONTROL=ignoredups

export HISTSIZE=1000

# Добавить несколько удобных псевдонимов

alias l.='ls -d .* –color=auto'

alias ll='ls -l –color=auto'

Так намного лучше! Закончив правку, нажмите CTRL+O, чтобы сохранить измененный файл .bashrc, и CTRL+X, чтобы выйти из nano.

важность комментариев

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

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

В конфигурационных файлах вам часто будут встречаться закомментированные строки, чтобы предотвратить их влияние на соответствующую программу. Это делается с целью показать читателю возможные варианты настройки или примеры правильного синтаксиса оформления настроек. Например, файл .bashrc в Ubuntu 8.04 содержит следующие строки:

# несколько других псевдонимов команды ls

#alias ll='ls -l'

#alias la='ls -A'

#alias l='ls -CF'

Последние три строки – это допустимые определения псевдонимов, только закомментированные. Если удалить начальные символы # из этих трех строк (это называется раскомментировать), псевдонимы будут активированы. Напротив, если добавить символ # в начало строки, можно деактивировать конфигурационную строку, сохранив информацию, хранящуюся в ней.

Активация изменений

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

[me@linuxbox ~]$ source .bashrc

После этого изменения должны вступить в силу. Попробуйте, например, один из новых псевдонимов:

[me@linuxbox ~]$ ll

Заключительное замечание

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


    Ваша оценка произведения:

Популярные книги за неделю