Bashrc что за файл
Когда оболочка вызывается интерактивно с использованием параметра --login или когда она вызывается с помощью команды sh, командная оболочка считывает инструкции из файла /etc/profile . В этом файле обычно устанавливаются значения переменных PATH , USER , MAIL , HOSTNAME и HISTSIZE .
В некоторых системах в файле /etc/profile задается значение umask; в других системах в этом файле находятся ссылки на другие конфигурационные файлы, например:
- на /etc/inputrc , общесистемный файл инициализации программы Readline, в котором можно настраивать реакцию клавиатуры;
- на директорий /etc/profile.d , в котором находятся конфигурационные файлы, определяющие общую системную настройку некоторых конкретных программ.
В этом файле должны быть все настройки, которые вы хотите применить к пользовательской среде. Файл может выглядеть следующим образом:
В этом конфигурационном файле устанавливаются значения для некоторых основных переменных среды окружения, а также некоторые переменные, которые необходимы пользователю, запускающему в своем веб браузере поддержку языка Java и/или использующие Java-приложения. Смотрите раздел "Переменные".
Дополнительную информацию об условном операторе if, используемом в этом файле, смотрите в главе 7 "Условные инструкции"; в главе 9 "Повторяющиеся задания" обсуждаются циклы, использующие конструкцию for.
В исходных кодах Bash есть примеры файлов profile , предназначенные для общего или индивидуального использования. Но для того, чтобы эти файлы и пример файла, приведенный выше, работали в вашей среде, их надо модифицировать!
/etc/bashrc
Это базовый /etc/bashrc. Коментарии в файле должны все вам объяснить.
Unset vs. FOO=
Это не то же самое, что установка переменной пустым значением, хотя порой это сложно объяснить. Один из способов эту разницу заметить — вызвать команду set без параметров, чтобы вывести список всех текущих переменных:
$ FOO=bar
$ set | grep ^FOO
FOO=bar
$ FOO=
$ set | grep ^FOO
FOO=
$ unset FOO
$ set | grep ^FOO
Использование set без параметров похоже на использование встроенной команды export за исключением того, что set отображает все переменные, а не только обозначенные как внешние.
3. Первые команды
Итак, мы подключились к терминалу и находимся в shell. Давайте сориентируемся в пространстве. Чтобы узнать имя машины(сервера), на которой мы находимся, введем hostname и нажмем Enter:
Имя пользователя, под которым мы подключены, как правило отображается в приглашении командной строки (test@osboxes:~$). Если имя текущего пользователя не отображается (например, если задан другой формат приглашения), то его можно получить командой whoami , или id (также отображает группы пользователя):
Чтобы узнать, в какой оболочке мы находимся, нужно выполнить команду echo $SHELL :
Разберем, что произошло. Команда echo выводит значение параметра, переданного ей, в нашем случае мы передали $SHELL. Знак $ означает, что мы обращаемся к переменной, т.е. $SHELL возвращает значение переменной SHELL, заданной в окружении. Список значений всех переменных можно получить командой env . Таким образом, отобразив значение переменной, мы видим, что мы находимся в оболочке bash. Оболочка конкретного пользователя указана в файле /etc/passwd, содержимое которого можно получить так:
Команда cat выводит содержимое файла (часть строк в приведенном выводе пропущена и заменена на …). Из файла видим, что для пользователя test указана оболочка /bin/dash. Изменить оболочку текущего пользователя, которая будет загружаться по умолчанию, можно следующей командой(chsh – сокращенное от change shell):
Теперь давайте проверим, в каком каталоге мы находимся, для этого выполним команду pwd :
Для получения списка файлов текущей директории используем команду ls . По соглашению, скрытые файлы начинаются с точки. Для отображения их с помощью команды ls нужно добавить ключ –a. Чтобы отобразить список в расширенном формате, добавим ключ –l. Таким образом команда и её вывод будут выглядеть так:
Для команды ls с параметрами может быть задан синоним (alias), что упрощает её ввод. Список уже заданных синонимов можно получить командой alias :
Видим, что команда ll является синонимом команды ls -alF . Синонимы могут ссылаться на другие синонимы. Так, в приведенном выше примере команда ll выполняет команду ls -alF , в которой ls в свою очередь также является синонимом команды ls --color=auto . Для любой команды с целью упрощения её ввода при частом использовании можно задать синоним. В синонимах также можно использовать переменные среды. Например, чтобы иметь возможность из любой директории получить список файлов домашней директории, можно задать синоним командой alias lshome='ls -alF $HOME' , таким образом, можно выполнить:
Здесь командой cd /tmp мы перешли в директорию /tmp, и, находясь в ней, выполнили команду lshome , которая вывела список файлов директории /home/test. При этом в синониме мы ссылаемся на переменную $HOME, в которой содержится путь к домашней директории текущего пользователя.
Алиасы задаются в файле ~/.bash_aliases. Тильда (~) означает домашнюю директорию пользователя. В нашем случае /home/test. Также можно задать их в файле ~/.bashrc. Здесь нужно сказать пару слов об этих файлах.
При запуске bash в качестве оболочки, сначала выполняется файлы (в случае их наличия), в которых могут быть заданы различные настройки профиля и выполнены различные действия в процессе входа до появления командной строки: сначала выполняется файл /etc/profile, далее bash последовательно ищет и выполняет первый из найденных файлов в следующем порядке: ~/.bash_profile, ~/.bash_login, ~/.profile. Из указанных файлов могут вызываться и другие.
Так, например, из файла ~./profile вызывается файл ~/.bashrc, из которого, в свою очередь, в числе прочих, вызывается файл .bash_aliases при его наличии. А файл /etc/profile выполняет также все файлы .sh, находящиеся в директории etc/profile.d.
В bash существуют внутренние команды, их список можно получить командой help. Помощь по конкретной внутренней команде можно получить с помощью команды help , например:
Некоторые внутренние команды bash дублированы в виде исполняемых файлов. Это сделано, чтобы скрипты можно было корректно выполнять в оболочках, в которых не реализованы эти команды. Например, существует исполняемый файл /usr/bin/echo, который реализует функционал внутренней команды echo. Команда help echo выведет справку по внутренней команде, а команда /usr/bin/echo –help выведет справку для соответствующего исполняемого файла. Вывод справки для этих команд отличается, но в целом они реализуют идентичный функционал.
Таким образом, если в оболочке не реализована внутренняя команда echo, скрипт, содержащий вызов echo, сможет успешно выполниться, т.к. для обработки вызова будет использован исполняемый файл /usr/bin/echo. Для поиска выполненных ранее команд можно использовать клавиши «Вверх» и «Вниз», команды из истории можно редактировать и повторно выполнять. В конце статьи приведен список полезных команд.
Если данный материал интересен, то в продолжении статьи я расскажу про скрипты и их параметры, права доступа к файлам, операторы условного выполнения, выбора и циклы, функции и планировщик заданий.
У вашего окружения есть много полезных опций, которые вы можете изменить по своему усмотрению. Однако до сих пор мы не обсуждали как восстанавливать эти настройки каждый раз, когда вы входите в систему, исключая то, чтобы каждый раз набирать их заново. В этом разделе мы рассмотрим настройку вашего окружения посредством редактирования стартовых конфигурационных файлов.
$ fortune
No amount of careful planning will ever replace dumb luck.
(приложение fortune может быть не установлено, запустите установку в пакетном менеджере вашего дистрибутива, например apt-get install fortune — прим. пер.)
Изменение конфигурационных файлов командной оболочки
Когда в любом из указанных выше файлов делаются изменения, то для того, чтобы изменения вступили в силу, пользователь должен либо переподключиться к системе, либо использовать команду source, указав измененный файл. После того, как скрипт будет проинтерпретирован, изменения будут применены к текущей сессии командной оболочки:
Рис.3.1. Различные строки приглашения для различных пользователей
Большинство скриптов выполняются в приватной среде окружения: переменные, не наследуются дочерними процессами, если они не экспортированы родительской оболочкой. Использование файла, в котором указываются команды оболочки, являются тем способом, с помощью которого вы можете применить изменения к своей собственной среде исполнения и настроить переменные для текущей командной оболочки.
В этом примере также демонстрируется использование различных строк приглашений для различных пользователей. В данном случае красный цвет будет указывать, что этот режим опасен. Если цвет строки приглашения зеленый, то не следует слишком беспокоиться.
Обратите внимание, что source resourcefile это то же самое, что и .Resourcefile .
Если вы заблудились во всех этих конфигурационных файлах и обнаружили, что столкнулись с настройками, которые вам непонятны, воспользуйтесь инструкциями echo точно также, как и при отладке скриптов; смотрите раздел "Отладка скрипта по частям". Вы можете добавлять инструкции, например, следующим образом:
Программа оболочка /bin/bash (в дальнейшем называемая просто "оболочка") использует набор стартовых файлов для помощи создания окружения.Каждый файл имеет специфическое использование. Файлы в директории /etc обычно предоставляют глобальные установки. Если аналогичные файлы присутствуют в вашей домашней директории, то они могут заменить глобальные установки.
Интерактивнвя регистрация оболочки запускается после успешного входа, используя /bin/login, который читает файл /etc/passwd. Эта оболочка во время загрузки читает /etc/profile и его персональный эквивалент ~/.bash_profile.
Интерактивнвя нерегистрированная оболочка запускается из командной строки (т.е. [prompt]$ /bin/bash ) или командой /bin/su . Интерактивнвя нерегистрированная оболочка так же запускается вместе с программами терминалов, такими как xterm или konsole в графической среде. Этот тип оболочек копирует основное окружение и затем читает пользовательский файл ~/.bashrc для дополнительных инструкций конфигурации.
Неинтерактивная оболочка обычно присутствует при загрузке стартовых скриптов. Она неинтерактивная потому, что она выполняет скрипт и не ожидает ввода от пользователя между выполнением команд. Для такой оболочки используется окружение только из основной оболочки.
Файл ~/.bash_logout не используется для вызова оболочки. Он читается и выполняется при появлении пользователя после интерактивной регистрации.
К стандартным файлам относится /etc/bashrc, вызываемый из пользовательского ~/.bashrc для системной инициализации нерегистрированных оболочек.
Для большей информации смотрите info bash -- Ноды: Стартовые файлы Bash и интерактивные оболочки.
Использование «env»
К сожалению, если вы позабудете установить PAGER обратно в less, программа man (как и некоторые другие программы) будет продолжать вывод весь запрошенный текст без остановок. Если вы хотели задать PAGER значение cat только на один раз, то могли бы воспользоваться командой env:
$ PAGER=less
$ env PAGER=cat man man
$ echo $PAGER
less
В этом примере переменная PAGER была использована со значением cat в программе man, но сама по себе переменная окружения PAGER осталась неизменной в сессии bash.
Понимание --login
Второй способ запустить bash как оболочку входа — при помощи опции —login. Время от времени эта возможность используется эмуляторами терминала (вроде xterm) чтобы их сессия bash выглядела как при изначальном входе в системе.
После авторизации можно запустить много копий вашей оболочки. У тех из них которые запущены без опции --login или не имеют черточки перед именем процесса, поведение будет иным нежели при запуске с авторизацией. Они предоставляют вам командную строку, однако, называются они интерактивными оболочками. Если bash запущена интерактивно, без авторизации, она проигнорирует /etc/profile и ~/.bash_profile вместо этого обработает ~/.bashrc.
Ссылки
Не забудьте посмотреть ресурсы c Linux документацией, использованные в этом руководстве, в особенности Linux Documentation Project, где сможете найти различные гайды, FAQ, а так же бесценные страницы мана. Не забудьте также о Linux Weekly News.
The Linux System Administrators guide является хорошим дополнением к этому руководству. Также вы можете найти в интернете весьма полезную статью Эрика Рэймонда "Unix and Internet Fundamentals HOWTO".
- Bash by example, Part 1: Fundamental programming in the Bourne-again shell (перевод планируется)
- Bash by example, Part 2: More bash programming fundamentals (перевод планируется)
- Bash by example, Part 3: Exploring the ebuild system. (перевод планируется)
Для знакомства с редактором Emacs, смотрите руководство «the developerWorks», "Living in Emacs".
Продолжение следует.
Итоги и ссылки
Aron Griffis
Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размышлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
Итоги
Ну вот самое время поздравить вас с завершением 3-ей части руководства. Вы уже должны знать как находить информацию в системе и интернет документации, а так же иметь хорошее представление о модели прав доступа в Linux, управлении учетными записями пользователей и окружением.
1. Командные оболочки
Существует множество дистрибутивов(форков) операционных систем(ОС) семейства Linux, наиболее известные среди них: Ubuntu, Debian, CentOS, Red Hat, Fedora, SuSE, FreeBSD, Mint.
Здесь есть большая схема со всеми форками Linux.
В каждой ОС существуют различные командные оболочки (shell), их назначение одинаково (администрирование, автоматизация, вычисления, мониторинг и т.д.), как и большинство основных команд, но реализация может отличаться. В таблице ниже приведено сравнение, в котором видно, что некоторые возможности поддерживаются не всеми оболочками.
Feature
Bourne
C
TC
Korn
Bash
Редактор командной строки
Расширенные шаблоны файлов
Автозавершение имени файла
Стеки директорий (pushd and popd)
Исправление ошибок в командах
Формат приглашения командной строки
Список доступных командных оболочек можно получить командой
При необходимости можно установить нужную командную оболочку командой sudo apt install . Например, для установки ksh нужно выполнить
/etc/profile и /etc/skel
Как системный администратор, вы отвечаете за файл /etc/profile. Так как им руководствуются все кто впервые входят в систему, важно держать его в рабочем состоянии. Это также очень мощный инструмент, используемый для того чтобы заставить вещи работать правильно для новых пользователей сразу после того как они войдут используя свою новую учетную запись.
Однако, существует вариант, при котором, настройки с одной стороны, могут быть выставлены в значения по-умолчанию для новых пользователей, а с другой, могут быть легко ими изменены при необходимости. Как раз для этого и существует директория /etc/skel. При использовании команды useradd для создания новой учетной записи, все файлы из /etc/skel копируются в домашний каталог нового пользователя. Это означает, что вы можете положить, например, .bash_profile и .bashrc в /etc/skel для более комфортного начала работы нового пользователя.
/etc/bashrc
В системах, имеющих несколько типов командных оболочек, настройки, касающиеся Bash, лучше поместить в этот файл, поскольку файл /etc/profile читается также и другими оболочками, например, командной оболочкой Bourne. С помощью разделения конфигурационных файлов, предназначенных для различных типов оболочек, можно предотвратить ошибки, генерируемые оболочками, не понимающими синтаксис Bash. В таких случаях пользовательский файл ~/.bashrc может указывать на файл /etc/bashrc с тем, чтобы включить его в процесс инициализации оболочки при входе в систему.
Вы также можете обнаружить, что в файле /etc/profile в вашей системе хранятся настройки только командной оболочки и настройки программ, тогда как в файле /etc/bashrc хранятся общесистемные определения функций оболочки и алиасов. На файл /etc/bashrc/ > можно ссылаться из файла /etc/profile или из отдельных пользовательских файлов, предназначенных для инициализации командной оболочки.
В исходных кодах есть примеры файла bashrc , либо вы можете найти его копию в /usr/share/doc/bash-2.05b/startup-files . Ниже приведена часть файла bashrc , которая поставляется вместе с документацией по Bash:
Кроме алиасов общего назначения, в нем определяются алиасы, благодаря которым можно выполнять команды даже в тех случаях, когда при наборе команд делаются опечатки. Мы будем обсуждать алиасы в разделе "Создание и удаление алиасов". В этом файле есть функция pskill; функции будут подробно изучены в главе 11 "Функции".
~/.bash_profile
Это базовый ~/.bash_profile. Если вы хотите, чтобы каждый новый пользователь имел этот файл автоматически, просто измените вывод команды на /etc/skel/.bash_profile и проверьте права доступа после выполнения команды. Затем вы можете скопировать /etc/skel/.bash_profile в домашние директории уже имеющихся пользователей, включаяя root, и установить соответствующего владельца и группу.
~/.bash_logout
В этом файле находятся инструкции, выполняемые при выходе из системы. В этом примере при выходе из системы очищается окно терминала. Это удобно при дистанционных подключениях, когда после завершения подключения окно терминала очищается.
Об авторах
~/.bash_login
В этом файле содержатся конкретные настройки, которые обычно активируются только когда вы войдете в систему. В этом примере мы используем файл, в котором конфигурируется значение переменной umask и при входе систему показывается список подключенных пользователей. Пользователю также выдается календарь на текущий месяц:
В случае, когда отсутствует файл ~/.bash_profile , будет читаться этот файл.
Конфигурационные файлы индивидуальных пользователей
Первоначально у вас в вашем домашнем директории этих файлов может не быть, создайте их в случае необходимости.
2. Настройка тестовой среды
Развертывание виртуальной машины
VirtualBox – ПО для виртуализации, позволяющее запускать одну ОС «внутри» другой. Разумеется, существуют и другие способы развертывания ВМ, здесь мы рассмотрим лишь один из них. В данном случае, предполагается, что у вас ПК под управлением Windows или Mac. Для начала нужно скачать VirtualBox отсюда и установить его.
Также нужно скачать образ ВМ с установленной ОС Ubuntu отсюда. Качайте самую новую версию, убедитесь, что скачиваемый образ имеет формат VirtualBox (VDI).
Создадим виртуальную машину. Сначала создаем на локальном диске папку для размещения в ней ВМ и их файлов (у меня C:\vmachines). Распакуем скачанный образ диска ВМ в созданную папку:
Для распаковки потребуется архиватор 7zip или другой, поддерживающий формат .7z. Далее запускаем VirtualBox и выбираем меню «Машина -> Создать…»:
В открывшемся окне указываем имя ВМ (тип и версия в большинстве случаев подтягиваются автоматически, если это понятно из имени), а также созданную нами папку. Объем оперативной памяти устанавливается автоматически, 1Гб достаточно для выполнения тестов. Выбираем «Использовать существующий виртуальный жесткий диск», нажимаем значок выбора образа жесткого диска, в открывшемся окне нажимаем «Добавить», выбираем распакованный ранее файл образом ВМ и нажимаем «Открыть»:
И нажимаем «Создать»:
Выбираем в списке созданную ВМ и нажимаем «Запустить»:
После запуска ВМ появится окно для входа в ОС:
Для удобства можно развернуть окно виртуальной машины на весь экран, окно терминала также будет развернуто. Для того, чтобы можно было вставлять данные из буфера в терминал ВМ и копировать их, можно включить в настройках ВМ общий буфер обмена в меню «Устройства -> Общий буфер обмена -> Двунаправленный»:
Создадим тестового пользователя.
На данном этапе уже можно использовать тестовую среду, выполняя команды в терминале (Ctrl+Alt+T). Дополнительно можно настроить подключение по ssh клиентом (например, PuTTY), мы рассмотрим это отдельно.
Экспортирование переменных для изменения поведения программ.
Часто поведение команд можно изменить установкой переменных окружения. Так же, как в случае новых сессий bash, запускаемые программы из вашей командной строки будут видеть только переменные окружения, помеченные на экспорт. Например, команда man проверяет переменную PAGER, чтобы выяснить какую программу использовать для постраничного просмотра текста.
$ PAGER=less
$ export PAGER
$ man man
Когда переменная PAGER установлена в less, вы будете видеть сначала одну страницу, а нажатие пробела будет перемещать вас а следующую страницу. Если вы измените переменную PAGER в cat, то весь текст отобразится сразу, без остановок на страницах.
$ PAGER=cat
$ man man
/etc/dircolors
Если вы хотите использовать возможности dircolors, то выполните следующую команду. Шаги по установке/etc/skel, описанные выше, так же могут быть использованы здесь для предоставления файла ~/.dircolors при установке нового пользователя. Как раньше, просто измените имя выходного файла в следующей команде и установите права доступа, владельца и группу у созданных и/или скопированных фалов.
Если вы желаете настроить цвета, используемые для различных типов файлов, вы можете отредактировать файл /etc/dircolors. Инструкции по установке цветов находятся внутри файла.
Если открыть окно терминала и ввести несколько команд, а после открыть второе окно, то история команд bash во втором окне не будет содержать команд из первого. К тому же, если закрыть первый терминал, а затем второй, то история команд из первого терминала будет перезаписана вторым. Вдвойне неприятно!
sudo здесь не нужно, это файл пользователя, а не настройка системы. Мне нравится nano, но можно использовать любой редактор: gedit, kate, mousepad, vi или emacs
shopt -s histappend
И сохранить. (Ctrl-O для записи. "^" означает клавишу «Ctrl» в nano и других программах. ^X для выхода)
Так история команд будет добавляться к старой, а не перезаписывать ее, и запись будет происходить каждый раз в момент отображения подсказки bash.
2. Глупые ошибки в написании
shopt -s cdspell
опять-таки в .bashrc. Таким образом ошибки в написании (например, ect вместо etc) будут исправляться.
3. Дубликаты в истории команд
Я часто набираю cd .. несколько раз подряд, и когда я нажимаю клавишу «вверх», чтобы вернуться к ранее введенным командам, я не хочу, чтобы мне постоянно напоминали о моих неоптимальных передвижениях по файловой системе.
опять таки к .bashrc.
Или даже лучше, добавьте
Это позволит избавиться от дубликатов, а также от ls , bg , fg и exit , что сделает историю команд bash более читабельной.
4. Разорванные многострочные команды в истории команд
shopt -s cmdhist
в .bashrc, и многострочные команды будут записываться в одну строку, что облегчит редактирование.
5. Пара дополнительных советов от комментаторов
Нажмите Ctrl-R в bash, далее начните набирать команду. Так искать в истории команд гораздо быстрее, чем нажимать 300 раз «вверх».
Также можно искать при помощи
history | grep "foo"
осуществляет возврат к последней посещенной директории — бывает полезно, когда нужно перейти куда-то чтобы что-то изменить, а затем быстро вернуться назад.
Нажатие «Esc»+"." вызывает последний упомянутый объект. Например, если набрать cat /etc/apt/sources.list , а затем rm и нажать «Esc»+".", то команда будет автоматически завершена: rm /etc/apt/sources.list . Попробуйте!
Заключение
Вот несколько советов, как сделать историю команд bash удобней. Если у вас есть свои хитрости на этот счет, добавляйте в комментарии!
Статья рассчитана на тех, кто не имеет или имеет мало опыта работы с командной строкой Unix/Linux, но желает научиться с ней эффективно взаимодействовать и разрабатывать скрипты для выполнения своих задач. Приведенные примеры справедливы для выполнения в командной оболочке bash операционной системы Ubuntu/Debian, но могут быть использованы и в других оболочках и ОС с учетом их специфики.
~/.profile
Если отсутствуют файлы ~/.bash_profile и ~/.bash_login , будет читаться файл ~/.profile . В него можно поместить те же конфигурационные настройки, которые затем также будут доступны в других командных оболочках. Помните, что другие командные оболочки не могут понимать синтаксис Bash.
Установка переменных с «set»
Команда set может также использоваться для задания значений переменных, но при этом указание самой этой команды не является обязательным. Команда в bash «set FOO=foo» делает то же самое, что и «FOO=foo». Сброс значения переменной осуществляется встроенной unset:
$ FOO=bar
$ echo $FOO
bar
$ unset FOO
$ echo $FOO
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Export и set -x
В связи с вышеописанным поведением, переменные могут быть указаны в ~/.bash_profile или /etc/profile и помечены для экспорта, для того, чтобы в дальнейшем не было необходимости указывать их снова. Но есть несколько опций которые не могут быть экспортированы, и поэтому они должны быть заданы в ~/.bashrc и в вашем профиле последовательно. Эти опции настраиваются при помощи встроенной команды set:
$ set -x
Опция -x заставляет bash вывести на экран каждую команду, которую он собирается выполнить:
$ echo $FOO
$ echo foo
foo
Это может быть очень полезно для понимания непредвиденного поведения команд при использовании кавычек или похожих странностей. Чтобы выключить опцию -x, используйте set +x. Обратитесь к странице документации man за всеми опциями встроенной команды set.
~/.bashrc
В настоящее время чаще пользуются командными оболочками, при входе в которые не нужна аутентификация, например, когда аутентификация уже выполнена в графическом терминале X. При открытии такого окна, пользователю не нужно указывать имя пользователя и пароль, проверка подлинности не выполняется. Когда это происходит, Bash ищет файл ~/.bashrc , а поскольку на этот файл также делаются ссылки в файлах, которые читаются при входе в систему, это означает, что вам не нужно указывать одни и те же настройки в нескольких файлах.
В следующем пользовательском файле .bashrc определяется пара алиасов и после того, как будет прочитан общесистемный файл /etc/bashrc , устанавливаются значения переменных, используемых в конкретных программах:
Дополнительные примеры можно найти в пакете Bash. Помните, что чтобы файлы с примерами работали в вашей среде, в них нужно вносить изменения.
Алиасы рассматриваются в разделе "Алиасы".
~/.bashrc
Это базовый ~/.bashrc. Коментарии и инструкции по использованию /etc/skel для .bash_profile, описанного выше, применимы и здесь но с другим конечным именем файла.
~/.bash_profile
Это тот конфигурационный файл, в котором предпочтительно задавать индивидуальную пользовательскую настройку среды окружения. В этом файле пользователи могут добавить дополнительные конфигурационные параметры, либо изменить настройки, заданные по умолчанию:
Этот пользователь сконфигурировал использование символа Backspace для входа в другие операционные системы. Кроме того, выполняется чтение файлов .bashrc и .bash_login .
/etc/bashrc
В системах, имеющих несколько типов командных оболочек, настройки, касающиеся Bash, лучше поместить в этот файл, поскольку файл /etc/profile читается также и другими оболочками, например, командной оболочкой Bourne. С помощью разделения конфигурационных файлов, предназначенных для различных типов оболочек, можно предотвратить ошибки, генерируемые оболочками, не понимающими синтаксис Bash. В таких случаях пользовательский файл ~/.bashrc может указывать на файл /etc/bashrc с тем, чтобы включить его в процесс инициализации оболочки при входе в систему.
Вы также можете обнаружить, что в файле /etc/profile в вашей системе хранятся настройки только командной оболочки и настройки программ, тогда как в файле /etc/bashrc хранятся общесистемные определения функций оболочки и алиасов. На файл /etc/bashrc/ > можно ссылаться из файла /etc/profile или из отдельных пользовательских файлов, предназначенных для инициализации командной оболочки.
В исходных кодах есть примеры файла bashrc , либо вы можете найти его копию в /usr/share/doc/bash-2.05b/startup-files . Ниже приведена часть файла bashrc , которая поставляется вместе с документацией по Bash:
Кроме алиасов общего назначения, в нем определяются алиасы, благодаря которым можно выполнять команды даже в тех случаях, когда при наборе команд делаются опечатки. Мы будем обсуждать алиасы в разделе "Создание и удаление алиасов". В этом файле есть функция pskill; функции будут подробно изучены в главе 11 "Функции".
Оболочка входа.
При запуске bash проходит файл .bash_profile в вашей домашней директории, запуская каждую строчку как будто набирая ее в командной строке. Это называется интерпретацией файла (file sourcing).
Bash может работать различным образом в зависимости от того, как он запущен. Если он запущен как оболочка входа, то будет работать, как описано выше — сначала обработая общесистемный /etc/profile, а затем ваш личный ~/.bash_profile.
Существуют два способа запуска bash в качестве оболочки входа. Первый используется когда вы впервые входите в систему: bash запускается с именем процесса -bash. Можно увидеть это в выводе списка процессов:
$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
chouser 404 0.0 0.0 2508 156 tty2 S 2001 0:00 -bash
Вы, вероятно, увидите более длинный список, но но в нем будет как минимум одна строка с чертой перед именем вашей оболочки, как -bash в примере выше. Эта черта используется оболочкой, чтобы определить, была ли она запущена при авторизации.
export
Переменные в bash могут быть помечены таким образом, что они будут устанавливаться во всех вновь запускаемых командных оболочках. Это означает, что они обозначены как внешние (export). Вы можете заставить bash отобразить список всех таким образом обозначенных внешних переменных в вашей сессии bash:
$ export
declare -x EDITOR="vim"
declare -x HOME="/home/chouser"
declare -x MAIL="/var/spool/mail/chouser"
declare -x PAGER="/usr/bin/less"
declare -x PATH="/bin:/usr/bin:/usr/local/bin:/home/chouser/bin"
declare -x PWD="/home/chouser"
declare -x TERM="xterm"
declare -x USER="chouser"
Проверка на интерактивность
Иногда bash обрабатывает ваш ~/.bashrc не будучи запущенным интерактивно, например при использовании команд типа rsh или scp. Это важно помнить потому как вывод текста, как в примере с командой fortune выше, может испортить эти неинтерактивные сессии bash. Хорошей идеей является использование переменной PS1 для проверки факта интерактивности текущей сессии перед выводом текста:
~/.bash_logout
Это пустой файл ~/.bash_logout, который может быть использован как временный. Заметьте, что базовый ~/.bash_logout не включает команду clear. Это потому, что clear поддерживается в файле /etc/issue.
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
/etc/profile
Здесь приведен базовый /etc/profile. Этот файл запускается для установки некоторых помогающих функций и базовых параметров. Он описывает некоторые параметры истории команд bash и в целях безопасности убирает поддержку постоянного файла истории для пользователя roor. Он так же устанавливает вид системного приглашения. Затем он вызывает маленький скрипт в директории /etc/profile.d для предоставления большей инициализации.
Для большей информации по escape-последовательностям, которые вы можете использовать для вашего системного приглашения (т.е. переменной окружения PS1), обратитесь к info bash -- Нода: Печать системного приглашения.
Директория /etc/profile.d
Теперь создадим директорию /etc/profile.d, в которой размещены индивидуальные скрипты инициализации.
/etc/profile.d/dircolors.sh
Этот скрипт использует файлы ~/.dircolors и /etc/dircolors для управления цветом файлов в листинге директории. Они раскрашивают вывод таких команд, как ls --color . Разъяснение по инициализации этих файлов находится в конце этого раздела.
/etc/profile.d/extrapaths.sh
Этот скрипт добавляет некоторые полезные пути к переменным окружения PATH и PKG_CONFIG_PATH. Если хотите, вы можете раскоментировать последний раздел для размещения точки в конце вашего пути. Это позволит исполняемым файлам в текущей рабочей директории запускаться без указания ./, хотя мы предупреждаем, что обычно это связано с риском для безопасности.
/etc/profile.d/readline.sh
Этот скрипт настраивает файл конфигурации inputrc. Если пользователь не имеет индивидуальных установок, он использует глобальный файл.
/etc/profile.d/tinker-term.sh
Некоторые приложения требуют описания установки TERM для поддержки цвета.
/etc/profile.d/umask.sh
Установка значения umask важна для безопасности. Здесь права доступа для записи группы по умолчанию выключены для пользователей системы и когда имена пользователя и группы не совпадают.
/etc/profile.d/X.sh
Если X установлены, переменные PATH и PKG_CONFIG_PATH так же обновляются.
/etc/profile.d/xterm-titlebars.sh
Этот скрипт показывает пример другого пути установки системного приглашения. Обычная переменная PS1 дополнена PROMPT_COMMAND. Если переменная установлена, значение PROMPT_COMMAND выполняется как команда перед выводом каждого первичного приглашения.
/etc/profile.d/i18n.sh
Этот скрипт показывает установку некоторых переменных окружения, необходимых для поддержки различных языков. Правильная установка этих переменных даст вам:
вывод программ, транслированный на ваш язык
правильную классификацию символов в буквы, цифры и другие классы – это необходимо для Bash для работы в не английских локалях
правильный алфавитный порядок сортировки для для вашей страны
правильный размер бумажной страницы
правильный фомат денег, значения времени и даты
Список всех локалей, поддерживаемых Glibc может быть получен запуском следующей команды:
Как только подходящие параметры локали будут определены, создайте файл /etc/profile.d/i18n.sh:
Переменная LC_ALL устанавливает одинаковое значение для всех категорий локализации. Для лучшего контроля вы можете предпочесть установку значений индивидуально для всех категорий, перечисленных в выводе команды locale .
Переменная G_FILENAME_ENCODING говорит таким приложениям, как Glib и GTK + , что имена файлов находятся по умолчанию в кодировке локали, а не в UTF -8, как предполагалось по умолчанию.
Другие значения инициализации
Другие инициализации могут быть легко добавлены в profile добавлением дополнительных скриптов в директорию /etc/profile.d.
Экспортирование переменных
Если переменная не отмечена на экспорт, её значение не будет задано для новых запускаемых оболочек. Но вы можете отметить переменную на экспорт, передав её встроенной команде export:
$ FOO=foo
$ BAR=bar
$ export BAR
$ echo $FOO $BAR
foo bar
$ bash
$ echo $FOO $BAR
bar
В этом примере были заданы обе переменные FOO и BAR, но только BAR была помечена для экспорта. Когда был запущен новый bash он потерял значение переменной FOO. Если вы выйдите из этого нового bash, вы увидите что первоначальные значения обоих переменных FOO и BAR не изменились.
$ exit
$ echo $FOO $BAR
foo bar
.bash_profile
Теперь давайте сделаем так чтобы fortune запускалось при каждой авторизации. Используя любимый текстовый редактор отредактируйте файл .bash_profile в вашей домашней директории. Если такого файла не существует, создайте его. Вставьте в его начало:
fortune
Попробуйте выйти из системы и зайдите обратно. До запуска менеджера дисплея, такого как например xdm, gdm или kdm, вы увидите веселое приветствие, когда войдете:
Читайте также: