На сервере при входе в систему как root я вижу .bashrc
(Ubuntu 10.10).
На моем Mac у меня есть .bash_profile
. В Ubuntu всегда есть только файл .bashrc
, а не .bash_profile
? (Я просто сбит с толку, поэтому спрашиваю, я понимаю, что они разные o / s, но, может быть, есть какая-то связь?)
На моем сервере я хочу создать псевдоним. 114]?
Что если я хочу, чтобы этот псевдоним был применен, чтобы все пользователи могли его использовать?
Псевдонимы Bash должны войти .bash_aliases
или .bashrc
файлы в отдельных корневых каталогах. Если необходимо создать глобальные псевдонимы удара, они могут войти /etc/bash.bashrc
, но часто лучше просто добавить их к .bash_aliases
или .bashrc
файлы в /etc/skel
таким образом, они наследованы недавно созданными пользователями.
Фактически всегда неправильно определить псевдоним в в .profile
, .bash_profile
, или /etc/profile
.
Понять, почему, нужно понять, при каких обстоятельствах команды из каждого из этих файлов выполняются. Существуют неправильные представления об этом, к которому я обращаюсь ниже.
Даже при том, что Вы хотите определить псевдонимы для многочисленных пользователей, необходимо быть знакомы с тем, как они определяются для отдельных пользователей, так, чтобы можно было выбрать лучший метод выполнения, в чем Вы нуждаетесь.
Особенно при использовании GUI большинство интерактивных оболочек является, вероятно, оболочками невхода в систему. Даже если Вы никогда не используете GUI, Вы, вероятно, все еще используете оболочки невхода в систему с некоторой частотой. Вы захотите, чтобы Ваши псевдонимы работали в этих оболочках.
Особенно, если Вы когда-нибудь входите в систему неграфически в виртуальной консоли или через SSH, Вы, вероятно, используете вход в систему оболочку часть времени. Таким образом, Вы захотите, чтобы Ваши псевдонимы работали в интерактивных оболочках входа в систему также.
Когда интерактивная, оболочка невхода в систему запускается, она получает .bashrc
в корневом каталоге пользователя. По умолчанию в Ubuntu, каждый пользователь .bashrc
самостоятельно источники .bash_aliases
, если это существует.
Чтение комментариев в значении по умолчанию Ubuntu .bashrc
показывает, что официально предназначается, что псевдонимы входят .bashrc
или .bash_aliases
. .bashrc
уже содержит некоторые определения псевдонима (выполненный grep '^[[:blank:]]*alias' ~/.bashrc
для наблюдения их), и дает явный совет о том, куда поместить новый такие определения:
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Но что относительно интерактивных оболочек входа в систему? Вместо .bashrc
, войдите в источник оболочек .profile
.
.bash_login
существует, затем это получено вместо этого..bash_profile
существует, затем это получено вместо этого.Однако хорошие новости - то, что по умолчанию в Ubuntu, управляет в .bashrc
будет также работать в интерактивных оболочках входа в систему потому что значение по умолчанию .profile
проверки, если текущая оболочка является ударом (и если .bashrc
существует), и если так, источники .bashrc
:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Я предлагаю, чтобы пользователи определили новые псевдонимы удара в .bash_aliases
в их корневых каталогах (создающий его, если это уже не существует). Это - особенно чистый и простой способ сделать определения псевдонима постоянными на уровне в расчете на пользователя.
Псевдонимы не должны быть определены в .profile
потому что они остались бы неопределенными в оболочках невхода в систему. В отличие от большой части среды оболочки удара, псевдонимы не экспортируются в дочерние оболочки:
ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found
В частности, значением по умолчанию большая часть причины настольных сред .profile
быть полученным на графическом входе в систему, но:
Псевдонимы не должны быть определены в .bash_profile
(или .bash_login
) по той же самой причине, но также и по другой причине. Наивно создание одного из этих файлов и помещение просто искажают определения в нем, предотвращает любой код в .profile
от выполнения!
В ситуациях, где .bash_profile
или .bash_login
действительно полезно, обычно источники .profile
где-нибудь в них, который решает ту проблему. (Затем единственная остающаяся проблема - это, как с .profile
, определение псевдонимов в .bash_profile
или .bash_login
не работает правильно.)
То, когда учетная запись пользователя типа намеревалась представить настоящего человека, создается, новый каталог обычно делается служить их корневым каталогом. Содержание /etc/skel
затем копируются в их корневой каталог. Это - то, как многочисленные пользователи начинают с некоторыми подобными конфигурационными файлами в их корневых каталогах. В Ubuntu это включает .profile
, .bashrc
, и некоторые другие файлы.
Для изменения, какие псевдонимы определяются для новых пользователей можно просто вставить их /etc/skel/.bash_aliases
(необходимо будет создать его), или /etc/skel/.bashrc
.
Если Вы редактируете уже существующий файл в /etc/skel
можно хотеть создать резервную копию его сначала - но Вы не должны вставлять резервное копирование /etc/skel
, или это также будет скопировано в корневые каталоги новых пользователей.
Это вероятно лучший способ для Вас добавить новые псевдонимы для многочисленных пользователей. Существующие пользователи могут просто добавить сами псевдонимы. Если Вы определяете псевдонимы в /etc/skel/.bash_aliases
, можно просто направить их к тому файлу, который они могут принять решение скопировать в их корневые каталоги (или добавить в их собственное .bash_aliases
файл).
Это тривиально для пользователя для неопределения псевдонима. Кроме того, псевдонимы не чрезвычайно устойчивы; они работают только в особенности обстоятельства. Если необходимо создать новую команду, которая работает все время для всех, Вы не должны реализовывать ту команду как псевдоним. И Вы не можете успешно вызвать псевдонимы на пользователях, которые не хотят их - они могут просто unalias
их.
Хотя я советую Вам избегать этого подхода, можно определить псевдонимы в глобальное /etc/bash.bashrc
файл. Они будут затем определены и для интерактивных оболочек невхода в систему и для интерактивных оболочек входа в систему. Причина, прежде чем любой из файлов в корневом каталоге пользователя получен:
/etc/profile
автоматически./etc/bash.bashrc
автоматически, но/etc/profile
проверки, если рабочая оболочка является ударом (и если /etc/bash.bashrc
существует), и, если так, источники /etc/bash.bashrc
.Это походит как значение по умолчанию, в расчете на пользователя .profile
получает в расчете на пользователя .bashrc
если оболочка является ударом (как детализировано выше).
Вот то, на что фактический код для этого похож в значении по умолчанию /etc/profile
:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
Тот блок также выполняет другие задачи. А именно, внешнее if
проверки, если оболочка, вероятно, будет интерактивной (путем проверки, что текст запроса непуст), затем проверяют, является ли текущая оболочка ударом и источниками /etc/bash.bashrc
если это, и если не делает некоторую работу, в которой, для удара, уже выполняют /etc/bash.bashrc
.
Вы не должны определять глобальные псевдонимы в /etc/profile
по той же причине пользователи не должны определять их в своем локальном .profile
s: если Вы сделаете, то они будут определены только для оболочек входа в систему, а не для их дочерних оболочек.
Наконец, обратите внимание что, в отличие от значения по умолчанию, в расчете на пользователя .bashrc
, значение по умолчанию /etc/bash.bashrc
файл ничего не содержит о псевдонимах. Несколько необычно дать пользовательские псевдонимы в файле, где они не могут отредактировать или отключить их. (Конечно, они все еще могут сделать это путем переопределения их определений в их собственном локальном .bashrc
, .bash_aliases
, или в другом месте.)
Вот несколько хороших , читающих об этом. «.bash_profile выполняется для оболочек входа в систему, в то время как .bashrc выполняется для интерактивных оболочек без регистрации»