В этой главе мы подробно обсудим среду Unix. Важной концепцией Unix является среда , которая определяется переменными среды. Некоторые из них устанавливаются системой, другие — вами, другие — оболочкой или любой программой, которая загружает другую программу.
Переменная — это строка символов, которой мы присваиваем значение. Назначенное значение может быть числом, текстом, именем файла, устройством или любым другим типом данных.
Например, сначала мы устанавливаем переменную TEST, а затем получаем доступ к ее значению с помощью команды echo —
$TEST="Unix Programming" $echo $TEST
Это дает следующий результат.
Unix Programming
Обратите внимание, что переменные среды устанавливаются без использования знака $, но при доступе к ним мы используем знак $ в качестве префикса. Эти переменные сохраняют свои значения, пока мы не выйдем из оболочки.
Когда вы входите в систему, оболочка проходит фазу, называемую инициализацией, для настройки среды. Обычно это двухэтапный процесс, при котором оболочка читает следующие файлы:
- / И т.д. / профиль
- профиль
Процесс выглядит следующим образом —
-
Оболочка проверяет, существует ли файл / etc / profile .
-
Если он существует, оболочка читает его. В противном случае этот файл пропускается. Сообщение об ошибке не отображается.
-
Оболочка проверяет, существует ли файл .profile в вашем домашнем каталоге. Ваш домашний каталог — это каталог, в который вы запускаете после входа в систему.
-
Если он существует, оболочка читает его; в противном случае оболочка пропускает его. Сообщение об ошибке не отображается.
Оболочка проверяет, существует ли файл / etc / profile .
Если он существует, оболочка читает его. В противном случае этот файл пропускается. Сообщение об ошибке не отображается.
Оболочка проверяет, существует ли файл .profile в вашем домашнем каталоге. Ваш домашний каталог — это каталог, в который вы запускаете после входа в систему.
Если он существует, оболочка читает его; в противном случае оболочка пропускает его. Сообщение об ошибке не отображается.
Как только оба этих файла будут прочитаны, оболочка отобразит приглашение —
$
Это подсказка, где вы можете вводить команды для их выполнения.
Примечание. Процесс инициализации оболочки, описанный здесь, применяется ко всем оболочкам типа Bourne , но некоторые дополнительные файлы используются bash и ksh .
Файл .profile
Файл / etc / profile поддерживается системным администратором вашей Unix-машины и содержит информацию об инициализации оболочки, необходимую для всех пользователей системы.
Файл .profile находится под вашим контролем. Вы можете добавить в файл столько информации о настройках оболочки, сколько захотите. Минимальный набор информации, который вам нужно настроить, включает:
- Тип терминала, который вы используете.
- Список каталогов, в которых можно найти команды.
- Список переменных, влияющих на внешний вид вашего терминала.
Вы можете проверить свой .profile в вашем домашнем каталоге. Откройте его с помощью редактора vi и проверьте все переменные, установленные для вашей среды.
Установка типа терминала
Обычно тип используемого вами терминала автоматически настраивается программами входа в систему или getty . Иногда процесс автоматической настройки неверно угадывает ваш терминал.
Если ваш терминал установлен неправильно, вывод команд может выглядеть странно, или вы не сможете нормально взаимодействовать с оболочкой.
Чтобы убедиться, что это не так, большинство пользователей устанавливают для своего терминала наименьший общий знаменатель следующим образом:
$TERM=vt100 $
Установка пути
Когда вы вводите любую команду в командной строке, оболочка должна найти команду, прежде чем ее можно будет выполнить.
Переменная PATH указывает места, в которых оболочка должна искать команды. Обычно переменная Path устанавливается следующим образом:
$PATH=/bin:/usr/bin $
Здесь каждая из отдельных записей, разделенных двоеточием (:), является каталогами. Если вы просите оболочку выполнить команду, и она не может найти ее ни в одном из каталогов, указанных в переменной PATH, появляется сообщение, подобное следующему:
$hello hello: not found $
Существуют переменные, такие как PS1 и PS2, которые обсуждаются в следующем разделе.
Переменные PS1 и PS2
Символы, которые оболочка отображает в командной строке, хранятся в переменной PS1. Вы можете изменить эту переменную на что угодно. Как только вы измените его, он будет использоваться оболочкой с этого момента.
Например, если вы дали команду —
$PS1='=>' => => =>
Ваша подсказка станет =>. Чтобы установить значение PS1 для отображения рабочего каталога, введите команду —
=>PS1="[\u@\h \w]\$" [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
Результатом этой команды является то, что в приглашении отображается имя пользователя, имя компьютера (имя хоста) и рабочий каталог.
Существует довольно много escape-последовательностей, которые можно использовать в качестве аргументов значения для PS1; постарайтесь ограничить себя самым критическим, чтобы подсказка не перегружала вас информацией.
Sr.No. | Escape-последовательность и описание |
---|---|
1 |
\ т Текущее время, выраженное в формате ЧЧ: ММ: СС |
2 |
\ d Текущая дата, выраженная как день недели месяц дата |
3 |
\ п Новая линия |
4 |
\ s Текущая оболочка |
5 |
\ W Рабочий каталог |
6 |
\ ш Полный путь к рабочему каталогу |
7 |
\ и Имя пользователя текущего пользователя |
8 |
\час Имя хоста текущей машины |
9 |
\ # Номер команды текущей команды. Увеличивается при вводе новой команды |
10 |
\ $ Если эффективный UID равен 0 (то есть, если вы вошли в систему как пользователь root), завершите приглашение символом #; в противном случае используйте знак $ |
\ т
Текущее время, выраженное в формате ЧЧ: ММ: СС
\ d
Текущая дата, выраженная как день недели месяц дата
\ п
Новая линия
\ s
Текущая оболочка
\ W
Рабочий каталог
\ ш
Полный путь к рабочему каталогу
\ и
Имя пользователя текущего пользователя
\час
Имя хоста текущей машины
\ #
Номер команды текущей команды. Увеличивается при вводе новой команды
\ $
Если эффективный UID равен 0 (то есть, если вы вошли в систему как пользователь root), завершите приглашение символом #; в противном случае используйте знак $
Вы можете вносить изменения самостоятельно при каждом входе в систему или автоматически вносить изменения в PS1, добавляя их в свой файл .profile .
Когда вы вводите команду, которая является неполной, оболочка отобразит вторичное приглашение и будет ждать, пока вы не завершите команду и снова нажмете Enter .
Дополнительное приглашение по умолчанию — > (больше, чем знак), но его можно изменить, переопределив переменную оболочки PS2 —
Ниже приведен пример, который использует вторичную подсказку по умолчанию —
$ echo "this is a > test" this is a test $
Приведенный ниже пример переопределяет PS2 с настраиваемым приглашением —
$ PS2="secondary prompt->" $ echo "this is a secondary prompt->test" this is a test $
Переменные среды
Ниже приведен частичный список важных переменных среды. Эти переменные установлены и доступны, как указано ниже —
Sr.No. | Переменная и описание |
---|---|
1 |
DISPLAY Содержит идентификатор для дисплея, который программы X11 должны использовать по умолчанию. |
2 |
ГЛАВНАЯ Указывает домашний каталог текущего пользователя: аргумент по умолчанию для встроенной команды cd. |
3 |
IFS Указывает внутренний разделитель полей, который используется синтаксическим анализатором для разделения слов после раскрытия. |
4 |
LANG LANG расширяется до локали системы по умолчанию; LC_ALL может использоваться, чтобы переопределить это. Например, если его значение равно pt_BR , то язык устанавливается на (бразильский) португальский, а языковой стандарт — на бразильский. |
5 |
LD_LIBRARY_PATH Система Unix с динамическим компоновщиком содержит разделенный двоеточиями список каталогов, которые динамический компоновщик должен искать совместно используемые объекты при создании образа процесса после exec, прежде чем искать в любых других каталогах. |
6 |
ДОРОЖКА Указывает путь поиска команд. Это разделенный двоеточиями список каталогов, в которых оболочка ищет команды. |
7 |
PWD Указывает текущий рабочий каталог, установленный командой cd. |
8 |
RANDOM Генерирует случайное целое число от 0 до 32 767 каждый раз, когда на него ссылаются. |
9 |
SHLVL Увеличивается на единицу каждый раз, когда запускается экземпляр bash. Эта переменная полезна для определения того, завершает ли встроенная команда выхода текущий сеанс. |
10 |
СРОК Относится к типу дисплея. |
11 |
TZ Относится к часовому поясу. Может принимать значения, такие как GMT, AST и т. Д. |
12 |
UID Расширяется до числового идентификатора текущего пользователя, инициализированного при запуске оболочки. |
DISPLAY
Содержит идентификатор для дисплея, который программы X11 должны использовать по умолчанию.
ГЛАВНАЯ
Указывает домашний каталог текущего пользователя: аргумент по умолчанию для встроенной команды cd.
IFS
Указывает внутренний разделитель полей, который используется синтаксическим анализатором для разделения слов после раскрытия.
LANG
LANG расширяется до локали системы по умолчанию; LC_ALL может использоваться, чтобы переопределить это. Например, если его значение равно pt_BR , то язык устанавливается на (бразильский) португальский, а языковой стандарт — на бразильский.
LD_LIBRARY_PATH
Система Unix с динамическим компоновщиком содержит разделенный двоеточиями список каталогов, которые динамический компоновщик должен искать совместно используемые объекты при создании образа процесса после exec, прежде чем искать в любых других каталогах.
ДОРОЖКА
Указывает путь поиска команд. Это разделенный двоеточиями список каталогов, в которых оболочка ищет команды.
PWD
Указывает текущий рабочий каталог, установленный командой cd.
RANDOM
Генерирует случайное целое число от 0 до 32 767 каждый раз, когда на него ссылаются.
SHLVL
Увеличивается на единицу каждый раз, когда запускается экземпляр bash. Эта переменная полезна для определения того, завершает ли встроенная команда выхода текущий сеанс.
СРОК
Относится к типу дисплея.
TZ
Относится к часовому поясу. Может принимать значения, такие как GMT, AST и т. Д.
UID
Расширяется до числового идентификатора текущего пользователя, инициализированного при запуске оболочки.
Ниже приведен пример, показывающий несколько переменных среды: