Почему файл bashrc пустой

Обновлено: 05.07.2024

Программа оболочка /bin/bash (в дальнейшем называемая просто "оболочка") использует набор стартовых файлов для помощи создания окружения.Каждый файл имеет специфическое использование. Файлы в директории /etc обычно предоставляют глобальные установки. Если аналогичные файлы присутствуют в вашей домашней директории, то они могут заменить глобальные установки.

Интерактивнвя регистрация оболочки запускается после успешного входа, используя /bin/login, который читает файл /etc/passwd. Эта оболочка во время загрузки читает /etc/profile и его персональный эквивалент

Интерактивнвя нерегистрированная оболочка запускается из командной строки (т.е. [prompt]$ /bin/bash ) или командой /bin/su . Интерактивнвя нерегистрированная оболочка так же запускается вместе с программами терминалов, такими как xterm или konsole в графической среде. Этот тип оболочек копирует основное окружение и затем читает пользовательский файл

/.bashrc для дополнительных инструкций конфигурации.

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

/.bash_logout не используется для вызова оболочки. Он читается и выполняется при появлении пользователя после интерактивной регистрации.

К стандартным файлам относится /etc/bashrc, вызываемый из пользовательского

/.bashrc для системной инициализации нерегистрированных оболочек.

Для большей информации смотрите info bash -- Ноды: Стартовые файлы Bash и интерактивные оболочки.

/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.

/etc/bashrc

Это базовый /etc/bashrc. Коментарии в файле должны все вам объяснить.

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

/.bashrc. Коментарии и инструкции по использованию /etc/skel для .bash_profile, описанного выше, применимы и здесь но с другим конечным именем файла.

Это пустой файл

/.bash_logout, который может быть использован как временный. Заметьте, что базовый

/.bash_logout не включает команду clear. Это потому, что clear поддерживается в файле /etc/issue.

/etc/dircolors

Если вы хотите использовать возможности dircolors, то выполните следующую команду. Шаги по установке/etc/skel, описанные выше, так же могут быть использованы здесь для предоставления файла

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

Если вы желаете настроить цвета, используемые для различных типов файлов, вы можете отредактировать файл /etc/dircolors. Инструкции по установке цветов находятся внутри файла.

Недавно я столкнулся со следующей проблемой: приложение не сохраняло настройку umask , заданную в профиле root-пользователя, или в файле /etc/profile . Немного разобравшись в вопросе, я понял, что приложение использует только ту настройку umask , которая задана в /etc/bashrc , не принимая даже те значения, которые являются его же собственными сценариями запуска.

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

Для чего нужен файл /etc/profile?

Если вы используете Linux, то вам наверняка знакомы файлы .profile или .bash_profile , размещенные в вашем домашнем каталоге. Эти файлы используются для задания элементов окружения для оболочки пользователя. Таких элементов, как, например, umask , и таких переменных, как PS1 или PATH .

Файл /etc/profile не очень-то отличается от этих файлов. Он используется для задания общесистемных переменных окружения в оболочках пользователя. Иногда это те же переменные, что и в .bash_profile , но этот файл используется для задания первоначальных PATH или PS1 для всех пользователей оболочек системы.

/etc/profile.d

Помимо задания элементов окружения, файл /etc/profile выполняет сценарии внутри /etc/profile.d/*.sh . Если вы хотите задать свои собственные переменные окружения для всей системы, вам следует поместить свою конфигурацию в сценарий оболочки в /etc/profile.d .

Для чего нужен файл /etc/bashrc?

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

Аналогично тому, как /etc/profile является общесистемной версией .bash_profile , файл /etc/bashrc в Red Hat и файл /etc/bash.bashrc в Ubuntu являются общесистемной версией .bashrc .

Стоит отметить, что в Red Hat реализация /etc/bashrc также выполняет сценариий оболочки в /etc/profile.d , но только если пользовательская оболочка является Интерактивной оболочкой (т.е. Login Shell (стартовой оболочкой))

Когда используются эти файлы?

То, когда выполняется каждый из этих файлов, зависит от типа выполняемого логина. В Linux имеется два типа стартовых оболочек (login shells) - Интерактивные оболочки и Неинтерактивные оболочки. Интерактивная оболочка используется, когда пользователь может взаимодействовать с оболочкой, т.е., например, типичное приглашение командной строки bash. Неинтерактивная оболочка используется, когда пользователь не может взаимодействовать с оболочкой, т.е. выполнение bash-сценариев.

Разница проста: файл /etc/profile выполняется только для интерактивных оболочек, а файл /etc/bashrc – как для интерактивных, так и для неинтерактивных. Вообще-то, в Ubuntu файл /etc/profile вызывает файл /etc/bashrc напрямую.

Интерактивная оболочка и неинтерактивная оболочка: Сравнение

Чтобы на примере сравнить интерактивную и неинтерактивную оболочки, я добавлю переменную в оба файла /etc/profile и /etc/bash.bashrc в своей Ubuntu.

/etc/profile

/etc/bash.bashrc

Интерактивная оболочка

Ниже приведен пример интерактивной оболочки. В этом случае были выполнены оба файла /etc/profile и /etc/bash.bashrc .

Неинтерактивная оболочка

В этом примере мы выполняем команду через оболочку SSH, которая является неинтерактивной; поскольку это неинтерактивная оболочка, выполняется только файл /etc/bash.bashrc .

Заключение

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

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

Я должен выбрать run script: в Терминале> Настройки> « MyDefaultTheme »> Prefpane Shell и добавить: source .bashrc && clear чтобы он работал .

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

Обратите внимание, что я не запускаю bash при использовании терминала, мне нравится другой (по умолчанию) один (не знаю, что это) лучше, потому что он показывает мне, где я нахожусь все время, например:

В bash все загружается как должно быть.

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

Также какой-то учебник сказал мне сделать что-то вроде:

который должен написать псевдоним для моего .bashrc , это тоже не работает .

Обратите внимание, что я новичок в UNIX, так что будьте осторожны.

@boehj хорошо, это упоминает "не загружается .bashrc ", но это об этом. Вам, вероятно, нравится csh (или другой вариант) лучше. Но вы должны знать, что это >>bash$ можно изменить :) Если вы хотите, чтобы команды запускались при загрузке , создайте .profile в своем домашнем каталоге

Просто поместите это в свой .profile файл из вашего домашнего каталога, и он должен работать при следующем запуске новой оболочки или после запуска source

принял это, потому что у него есть решение (и это был первый из двух почти идентичных постов). Вниз проголосовали. Я рекомендую не следовать этому совету. Проблема в том, что Терминал создает оболочки входа в систему, а оболочки входа в Bash только запускают сценарий запуска входа в систему, а не

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

/.bashrc находился в какой-то подходящей точке сценария (обычно последний).

Я не вижу других идентичных постов, это просто говорит, что положил в файл sh

Был там, сделал это. То, о чем я узнал, OS X не читает .bashrc файл при запуске bash. Вместо этого он читает следующие файлы (в следующем порядке):

Смотрите также информативный и полезный комментарий Криса Йонсена :

По умолчанию Терминал запускает оболочку через /usr/bin/login , что делает оболочку оболочкой входа в систему. На каждой платформе (не только Mac OS X) баш не используется .bashrc для входа в систему оболочек (только /etc/profile и первым .bash_profile , .bash_login , .profile что существует и может быть прочитан). Вот почему "положить source

/.bashrc в свой .bash_profile " является стандартным советом

Я обычно просто положить вещи , которые я обычно положить в

/.profile - работает до сих пор , как обаяние.

По умолчанию Терминал запускает оболочку через /usr/bin/login , что делает оболочку оболочкой входа в систему. На каждой платформе (не только Mac OS X) баш не используется .bashrc для входа в систему оболочек (только /etc/profile и первым .bash_profile , .bash_login , .profile что существует и может быть прочитан). Вот почему «вставь source

/.bashrc в себя .bash_profile » - это стандартный совет.

/ .profile»: для максимальной совместимости я рекомендую вам следовать совету Криса Джонсена и размещать все, что вы хотите применить к оболочкам, не входящим в систему.

/ .bashrc и добавьте «source

/ .bash_profile, чтобы запустить его для оболочек входа в систему. В противном случае он не будет работать для вложенных оболочек, или если Терминал изменится для создания оболочек без входа в систему, или если вы когда-либо будете использовать xterm или другую терминальную программу, которая по умолчанию создает оболочки без регистрации, или если вы захотите использовать такая же настройка на другой ОС.

Что касается примечания, в Mac OS X вы должны рассмотреть возможность запуска

/ .bashrc / etc / bashrc для определения глобального поведения. В частности, в / etc / bashrc есть код для обновления рабочего каталога при каждом запросе, что позволяет терминалу отображать значок прокси, создавать новые терминалы в том же каталоге и восстанавливать рабочий каталог для групп резюме и окон.

Для меня получение .bashrc из .bash_profile не сработало. Но поиск .bashrc / .bash_profile из .profile работал. Хороший ответ, но немного дезинформированный. Я считаю , что баш терминальные нагрузки только один из

/.bash_login , никогда не все они. Вы можете запустить простой тест, создав 3 файла. Похоже , что Баш терминал имеет предпочтение

/.profile . Если кто-либо из них существует, те, кто менее предпочтителен, пропускаются. Вот почему иногда рекомендуется также источник

/.bashrc и только source

/.bashrc в .profile.

Это позволяет сеансам screen и xterm (и я полагаю, tmux) унаследовать мою среду, так как сеансы без входа в систему выполняются только .bashrc тогда, когда сеансы входа в систему (например, терминал или iTerm) только запускаются .profile .

Это мой подход. Таким образом, я могу поддерживать .bashrc, который работает в обеих системах . и я могу поместить любые специфичные для Mac вещи или вещи, такие как псевдонимы, которые предназначены только для работы (где я чаще всего использую mac) в моем файле .bash_profile. Обратите внимание, что это .profile является общим для нескольких оболочек и должно содержать только POSIX-совместимый sh-код. Если это источник, .bashrc он, возможно, содержит специфичный для Bash код (существование .bashrc файла зависит от Bash). Я рекомендую переименовать его .profile в, .bash_profile так как вы используете его для Bash-ориентированного способа. Или, вставьте общий код .profile и создайте .bash_profile источники .profile и .bashrc .

Есть два сценария:

  1. Вы используете Linux
  2. Вы используете Mac Os X

Для обоих вы хотите, чтобы источник

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

/.profile автоматически запускается источник в вашей оболочке. Итак, если вы зайдете в свой терминал и введете команду cd

; ls -A , вы увидите все ваши файлы и каталоги в вашем домашнем каталоге ( /home/usrname/ ). Вы должны увидеть файл с именем .profile . Это файл, который автоматически "получен" при запуске терминала.

Если вы хотите добавить псевдонимы и функции к

/.bashrc (что я и делаю), то вам следует (внутри

/.profile добавить оператор if, который проверяет,

/.bashrc является ли непустой файл, а затем получить его источник).

Чтобы проверить, если вы

/.profile уже делаете это, введите nano

/.profile . Это откроет его в текстовом редакторе (вы можете использовать gedit, если вы знаете, что он у вас есть, или даже vim, если вы знаете, как его использовать). Вы можете получить пустой текстовый файл (вы не должны), но если вы просто продолжите. Если вы не видите нигде строки, в которой написано source

/.bashrc , введите где-то следующие строки (поместите ее в разумное место, например в конец или начало, а не в середину оператора if):

/.bashrc является ли файл непустым (с помощью if [ -s

/.bashrc ] ), и если это так, он получает его. Довольно просто Теперь вы можете добавить любой допустимый псевдоним, функцию, переменную и т

По умолчанию источники Max OS X

/.bash_profile . Чтобы иметь возможность добавлять что-то

/.bashrc (что, опять же, то, что я делаю в OS X), вы должны следовать той же процедуре, что и в Linux. В терминал войдите cd

; nano .bash_profile . Проверьте строку с надписью source

/.bashrc и, если ее нет, добавьте оператор if выше ( if [ -s

/.bashrc ]; then source

При написании оператора if обязательно оставляйте пробелы между практически всем (например if [ -s

/.bashrc]; then echo "found"; fi , не работает, потому что между ними нет пробела

/.bashrc и ] - интерпретатор будет думать, что это одно слово).

Если вы хотите выяснить, как лучше проверять вещи в операторе if, перейдите в терминал и введите man \[ ; это, по сути, дает вам сокращение предложения if. Например, if [ -f /path/to/file ]; then echo "it's a file"; else echo "not a file"; fi проверяет, /path/to/file является ли файл файлом и выводится ли он на стандартный вывод. Я всегда ссылаюсь на это для удобства и наглядности: 7.2. Операторы проверки файлов .

Надеюсь, это поможет. Я помню, как я был смущен, когда начал все это (что было не так давно); Итак, удачи в ваших будущих начинаниях UNIX!

Сегодня, в очередной раз разбираясь с работой в консоли Линукс я решил, для удобства немного подредактировать свой файл .bashrc Данный фаил отвечает за то что выводится на экран во время нашей работы в bash. Вообще настроек в bash существует достаточно много и я ещё не со всеми разобрался, да и не все пока разбирал. Например я пока не разбирал цветную настройку консоли. А знаю что консоль можно разукрасить практически как новогоднюю Ёлку. Но всему своё время.


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


Файл ".bashrc" находится в нашей домашней директории вот здесь

/.bashrc, как видите знак тильды указывает на то что фаил находится в Вашей домашней директории, как я это уже говорил ранее в статье, когда описывал команды для передвижения по директориям в системе Линукс, в консоли. Точка с которой начинается название файла говорит нам о том что файл скрыт. Дабы в него не лазили те кто совершенно ничего не понимают в своей операционной системе и не наделали в нем глупостей. Те же кто стремится к тому чтобы узнать о своей операционной системе больше, как и я, а так же быть не только пользователем в своей системе, но и иметь возможность сделать с неё все что угодно, всегда могут в него попасть и подредактировать. Конечно для этого необходимо знать что необходимо делать, но это уже такое, если человеку что-либо интересно со временем он узнает. Как говорится если ты что-либо делаешь один день, ты новичок. Если ты что-либо делаешь десять тысяч дней, ты уже мастер.


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


Если консольный текстовый редактор vim у вас не установлен, можете воспользоваться другими например vi, либо nano ну или любым другим. Например вот так


Вот мы видим настройки с которыми работает наш bash, их мы и будем корректировать. )) Меня первый раз это слегка испугало, много всего и ничего непонятно. Затем немного почитал, ну и соответственно узнал немного больше.


Вводим вот такие строки, для того чтобы в историю вписывались все команды


Далее увеличиваем размер истории команд терминала. Для этого находим такую строку. Различаться она может лишь цифрами.


Пятьсот команд в истории чрезвычайно мало. Меняем цифру 500 на 10000. Будет выглядеть вот так.


Далее говорим терминалу чтобы не вносил в историю копии команд. Для этого добавляем вот такую строку.


Делаем так, чтобы можно было переходить в каталог без написания команды cd, просто написав путь к каталогу. Чтобы это сделать необходимо добавить вот такую строку.


Запрещаем выход из консоли если в ней есть выполняющиеся задания. Это временами бывает полезным.


Указываем терминалу исправлять мелкие ошибки в написании имен директорий, при автодополнении.


Делаем возможным использование маски. Позволяет использовать конструкцию вида ** которая обозначает все файлы, начиная с текущего каталога. Очень полезно бывает для поиска определенных файлов. Например для того чтобы просмотреть все файлы в домашнем каталоге с расширением flv мне в домашнем каталоге достаточно набрать ls **/*.flv. Так же удобно находить и другие файлы. Например свою коллекцию музыки в mp3 формате.


Вот и для начала все. То как показывать часы при запуске терминала и многое другое, я опишу в следующий раз. Как сам это окончу и решусь описать.

Читайте также: