На сервере, когда я вхожу в систему как root, я вижу .bashrc
(Ubuntu 10.10).
На моем Mac у меня есть .bash_profile
У Ubuntu всегда есть только .bashrc
файл, а нет .bash_profile
? (Я просто сбит с толку, поэтому спрашиваю, я понимаю, что они разные O / S, но, может быть, есть какие-то отношения?)
На моем сервере, я хочу , чтобы создать псевдоним, я должен поставить его в .bashrc
?
Что если я хочу применить этот псевдоним, чтобы все пользователи могли его использовать?
Ответы:
Псевдонимы Bash должны находиться в файлах
.bash_aliases
или.bashrc
в отдельных домашних каталогах. Если вам необходимо создать глобальные псевдонимы bash, они могут войти/etc/bash.bashrc
, но зачастую лучше просто добавить их в файлы.bash_aliases
или, чтобы они были унаследованы вновь созданными пользователями..bashrc
/etc/skel
Это практически всегда неправильно определить псевдоним в в
.profile
,.bash_profile
или/etc/profile
.Чтобы понять почему, нужно понимать, при каких условиях запускаются команды из каждого из этих файлов . Есть неправильные представления об этом, о которых я расскажу ниже.
Даже если вы хотите определить псевдонимы для нескольких пользователей, вы должны быть знакомы с тем, как они определены для отдельных пользователей, чтобы вы могли выбрать лучший способ сделать то, что вам нужно.
Псевдонимы для индивидуальных пользователей
Особенно, если вы используете графический интерфейс, большинство ваших интерактивных оболочек, вероятно, не являются оболочками входа в систему . Даже если вы никогда не используете графический интерфейс, вы, вероятно, все еще используете не входящие в систему оболочки с некоторой частотой. Вы хотите, чтобы ваши псевдонимы работали в этих оболочках.
Особенно, если вы когда-либо входите не графически в виртуальную консоль или через SSH , вы, вероятно, иногда используете оболочки входа в систему. Таким образом, вы хотите, чтобы ваши псевдонимы работали и в интерактивных оболочках входа.
Когда запускается интерактивная оболочка без регистрации , она поступает
.bashrc
в домашний каталог пользователя. По умолчанию в Ubuntu каждый пользователь.bashrc
сам получает исходный код.bash_aliases
, если он существует.Чтение комментариев по умолчанию в Ubuntu
.bashrc
показывает, что официально предполагается, что псевдонимы входят.bashrc
или.bash_aliases
..bashrc
уже содержит некоторые определения псевдонимов (запустите,grep '^[[:blank:]]*alias' ~/.bashrc
чтобы увидеть их), и дает явный совет о том, куда помещать новые такие определения:Но как насчет интерактивных оболочек входа ? Вместо
.bashrc
входа в систему источник оболочки.profile
..bash_login
существует, то вместо этого он получает..bash_profile
существует, то вместо этого он получает.Тем не менее, хорошая новость заключается в том, что по умолчанию в Ubuntu, команды в
.bashrc
будет также работать в интерактивных оболочек входа в систему, так как по умолчанию.profile
проверяет , является ли текущая оболочка Баш (если.bashrc
есть), и если да, то источники.bashrc
:Я предлагаю пользователям определять новые псевдонимы bash
.bash_aliases
в своих домашних каталогах (создавая их, если они еще не существуют). Это особенно чистый и простой способ сделать определения псевдонимов постоянными на уровне пользователя.Псевдонимы не должны быть определены в,
.profile
потому что они будут оставаться неопределенными в оболочках без входа в систему. В отличие от большей части среды оболочки bash, псевдонимы не экспортируются в дочерние оболочки:В частности, по умолчанию большинство настольных сред
.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
проверяет, является ли запущенная оболочка bash (и, если/etc/bash.bashrc
существует), и, если да, источниками/etc/bash.bashrc
.Это аналогично тому, как пользователь по умолчанию получает
.profile
источник для пользователя,.bashrc
если оболочкой является bash (как подробно описано выше).Вот как выглядит этот код по умолчанию
/etc/profile
:Этот блок также выполняет другие задачи. В частности, внешний
if
проверяет, может ли оболочка быть интерактивной (проверяя, чтобы текст приглашения не был пустым), затем проверяет, является ли текущая оболочка bash, и источники,/etc/bash.bashrc
если она есть, и, если нет, выполняет некоторую работу для bash. , уже сделано в/etc/bash.bashrc
.Вы не должны определять глобальные псевдонимы
/etc/profile
по той же причине, по которой пользователи не должны определять их в своих локальных.profile
s: если вы это сделаете, они будут определены только для оболочек входа в систему, а не для их дочерних оболочек.Наконец, обратите внимание, что, в отличие от пользователя
.bashrc
по умолчанию,/etc/bash.bashrc
файл по умолчанию не содержит ничего о псевдонимах. Несколько необычно давать псевдонимы пользователям в файле, где они не могут их редактировать или отключать. (Конечно, они все еще могут сделать , что, перекрывая их определения в их местных.bashrc
,.bash_aliases
или в другом месте.)Дальнейшее чтение
. .bash_profile
каждый раз, когда создаю новый псевдоним?источник
Вот немного хорошего чтения на этом. «.bash_profile выполняется для оболочек входа в систему, в то время как .bashrc выполняется для интерактивных оболочек без входа в систему»
Так что для своего псевдонима используйте .bash_profile
источник
.bash_profile
не является правильным. В Ubuntu.profile
(который работает для оболочек входа в систему) исходники,.bashrc
когда это интерактивная оболочка bash. Таким образом, размещение псевдонимов.bashrc
(или.bash_aliases
источников.bashrc
) определяет их во всех интерактивных оболочках bash. Псевдонимы.bash_profile
приводит к этой проблеме , среди других. Посмотрите это , это , мой ответ и~/.bashrc
комментарии по умолчанию , рекомендующие размещать псевдонимы там или внутри.bash_aliases
.