Как я могу установить псевдонимы для всех пользователей?


38

У меня Ubuntu 14.04.2. Я хочу сделать так, чтобы у всех пользователей автоматически был определенный набор псевдонимов. Мои личные псевдонимы установлены в моем личном .bashrc, но я не хочу вручную копировать их другим пользователям. В идеале он должен автоматически устанавливать их и для вновь созданных пользователей.


1
Под «предустановкой» вы подразумеваете, что хотите, чтобы все новые пользователи создавались с определенными псевдонимами, которые они затем могут легко перенастроить? Или вы имеете в виду, что вы хотите создать глобальные псевдонимы, чтобы у всех пользователей были они все время (и иметь возможность переопределять / отменять их определение ... но не видеть их, когда они просматривают свои собственные файлы конфигурации, которые они могут найти оглупления)? Или что-то другое? Связанный: Понятно .bashrc и .bash_profile (несмотря на его странный заголовок, я считаю, что этот вопрос и этот на самом деле очень похожи).
Элия ​​Каган

Ответы:


50

Вы можете создать скрипт /etc/profile.d/для создания псевдонимов для всех пользователей:

  1. Создайте файл с именем 00-aliases.sh(или любым другим причудливым именем) в /etc/profile.d:

    gksu gedit /etc/profile.d/00-aliases.sh
    
  2. Поместите в этот файл псевдонимы. Пример:

    alias foo='bar --baz'
    alias baz='foo --bar'
    
  3. Сохранить файл

  4. Перезапустите все открытые терминалы, чтобы применить изменения.
  5. Наслаждайтесь!

Некоторые заметки:

  • /etc/profileэто глобальный файл, который запускается раньше ~/.profile.
  • /etc/profile.d/ папка, содержащая скрипты, вызываемые /etc/profile
  • Когда /etc/profileвызывается (когда вы запускаете / входите в оболочку), он ищет любые файлы, оканчивающиеся на .shin, /etc/profile.d/и запускает их с помощью одной из следующих команд:

    source /etc/profile.d/myfile.sh
    

    . /etc/profile.d/myfile.sh
    
  • Я ставлю 00-перед именем файла, чтобы он выполнялся перед остальными сценариями.
  • Вы также можете добавить свои псевдонимы /etc/profile, но это не рекомендуется.

2
Работает отлично! Не могли бы вы дать мне краткое объяснение цели /etc/profile.d?
Брайан Сайзмор

1
@BrianSizemore: я обновил свой ответ несколькими объяснениями. У вас есть еще вопросы?
Гелио

1
Это очень хорошо объясняет. Разъяснение помогает мне развивать и другое использование. Спасибо за помощь!
Брайан Сайзмор

4
Метод в этом ответе не должен использоваться. Псевдонимы в .shфайлах в /etc/profile.d/(или /etc/profile) будут определены только для оболочек входа в систему, и они не будут работать в интерактивных оболочках без входа в систему. В отличие от переменных среды, bash не может экспортировать псевдонимы в дочерние процессы, даже в дочерние оболочки bash. Может показаться, что этот метод работает должным образом, если он проверен только в оболочках входа в систему, таких как исходная оболочка, полученная при входе в систему на виртуальной консоли или через SSH, но он не работает в дочерних оболочках, а также в оболочках, запускаемых окнами терминала GUI.
Элия ​​Каган

2
@Helio В моем ответе на Undertanding .bashrc и .bash_profile приводятся два других метода в зависимости от цели, а также подробное объяснение. Я не уверен, можно ли считать тот или иной вопрос дубликатом. Я прокомментировал этот вопрос, чтобы получить разъяснения от ОП об их потребностях. Этот вопрос имеет более узкую сферу охвата, чем этот, поэтому я полагаю, что было бы хорошо для меня опубликовать здесь короткий ответ, охватывающий некоторые материалы из моего длинного там. (Пока я надеюсь получить ответ от ОП на мой комментарий.)
Элия ​​Каган

6

Как указано здесь , вероятно, лучше добавить глобальные псевдонимы в /etc/bash.bashrc:

alias foo='bar --baz'
alias baz='foo --bar'

потому что сценарии в /etc/profile.dмогут быть проигнорированы для определенных (не входящих в систему) оболочек. Мне потребовались часы, чтобы понять, почему /etc/profile.dне работает.

См., Например, https://askubuntu.com/a/606882/ и Понимание .bashrc и .bash_profile для различия между оболочками.


5

Псевдоним будет работать только внутри оболочки. Если вы хотите что-то столь же широко доступное, как исполняемый файл, вы можете добавить небольшой ярлык /usr/bin, например:

#!/bin/sh
ls -l "$@"

"$@"Передает все аргументы через к исполняемым. Имя скрипта будет именем исполняемого файла.

Источник: https://unix.stackexchange.com/a/52509/15954


Этот ответ кажется не связанным. Принятый ответ правильно отвечает на вопрос, в то время как это, кажется, обеспечивает обходной путь.
Брайан Сайзмор

3
@BrianSizemore У меня был твой вопрос, но я наткнулся на это решение, которое было более уместным в моем случае; надеюсь, это поможет другим в подобной ситуации. Для многих людей псевдоним будет просто отлично.
Jtpereyda

1
@BrianSizemore Этот ответ проясняет распространенное заблуждение (которое я тоже имел) и является полезным и имеет прямое отношение.
а20

0

/ И т.д. / Bashrc

  • Общесистемные функции и псевдонимы
  • Окружающая среда находится в / etc / profile

Не рекомендуется менять этот файл, если вы не знаете, что делаете. Гораздо лучше создать сценарий оболочки custom.sh в /etc/profile.d/ для внесения пользовательских изменений в вашу среду, поскольку это предотвратит необходимость слияния в будущих обновлениях.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.