Jak mogę ustawić pojedynczy plik .bashrc dla kilku użytkowników?

30

podczas mojej pracy muszę ciągle dodawać aliasy do bashrc, większość z nich musi być uruchamiana przez innych użytkowników. czy jest jakiś sposób, aby dodać polecenia aliasu do bashrc ze źródła zewnętrznego?

użytkownik309584
źródło

Odpowiedzi:

40

Wiele plików konfiguracyjnych w katalogu domowym użytkowników po prostu zastępuje / dodaje do plików w /etc- na przykład są ustawienia GIMP w katalogu domowym użytkowników ~/.gimp-2.*, co dodaje się do konfiguracji ogólnosystemowej /etc/gimp/2.0.

Tak więc dla ~/.bashrcmożesz edytować systemowe pliki konfiguracyjne /etc/bash.bashrc (dla funkcji / aliasów ) lub /etc/profile (dla elementów środowiska) - możesz uzyskać pełną listę z man bash:

FILES
       /bin/bash
              The bash executable
       /etc/profile
              The systemwide initialization file, executed for login shells
       /etc/bash.bash_logout
              The systemwide login shell cleanup file, executed when a login shell exits
       ~/.bash_profile
              The personal initialization file, executed for login shells
       ~/.bashrc
              The individual per-interactive-shell startup file
       ~/.bash_logout
              The individual login shell cleanup file, executed when a login shell exits
       ~/.inputrc
              Individual readline initialization file

To ostrzeżenie jest podane dla kilku systemów Linux w plikach:

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

Aby móc edytować te pliki, możesz najpierw wykonać ich kopię zapasową ( cp /etc/bash.bashrc /etc/bash.bashrc-backupna przykład) lub utworzyć skrypt powłoki /etc/profile.d- na przykład możesz utworzyć jeden z tych poleceń (z sudo / as root):

touch /etc/profile.d/custom.sh
chmod +x /etc/profile.d/custom.sh

Następnie otwórz za pomocą nano /etc/profile.d/custom.sh

#!/bin/sh
alias ls='ls -lah'

I sprawdź, czy to działa, sprawdzając, czy pojawia się na wyjściu alias- Pamiętaj, że może być konieczne wylogowanie / zalogowanie lub ponowne uruchomienie, aby zobaczyć zmiany (jeśli nie chcesz, uruchamianie source /etc/profilepo zmianach może działać)

[edytuj: usunąłem ten martwy link] www.thelinuxdaily.com/2010/08/setup-a-universal-user-profile-with-etcprofile-dcustom-sh/]

Wilf
źródło
5
Wiele dobrych sugestii. Myślę, że jest jeszcze jedna opcja, o której również warto wspomnieć. Można edytować, /etc/skel/.bashrcaby zmienić wygląd zawartości ~/.bashrcdla nowo utworzonych użytkowników.
kasperd
@kasperd - fajny pomysł (możesz na nie odpowiedzieć, jeśli chcesz)
Wilf
Z mojego doświadczenia ~/.bash_logouti /etc/bash.bash_logoutnie działają. :(
Paddy Landau
AFAIK aliasu /etc/profile.d/będzie nie być odebrany przez prawo sub-process? Czy więc alias jest dostępny tylko wtedy, gdy Bash jest powłoką logowania?
Franklin Yu,
Myślę, że niektóre z nich działają tylko wtedy, gdy są używane, powiedzmy TTY, jako jedyne środowisko, w terminalu stacjonarnym niektóre z nich mogą nie być używane. Musiałbym to jednak przetestować, aby to sprawdzić, ale w tej chwili nie mogę!
Wilf
7

Iść do /etc/bash.bashrc

vim /etc/bash.bashrc

i stwórz tam swój alias.

dodaj swój alias w ostatniej linii.

alias abc = "cokolwiek"

Ten alias stanie się globalny dla wszystkich użytkowników.

ale ze względów bezpieczeństwa nie zalecamy tego.

istnieje profile.dkatalog zawierający pliki środowiska użytkownika

iść do

cd /etc/profile.d/

Aliasy vim

i dodaj tutaj swoje aliasy.

bez wpływu na pliki systemowe. Jest to bezpieczny i właściwy sposób pracy z plikami środowiska.

Dishank Jindal
źródło
3

Odpowiedź jest już zaakceptowana, ale możesz rozważyć użycie jakiejś formy modułów środowiska do obsługi ogólnosystemowej konfiguracji środowisk użytkowników zamiast bałagania się w plikach w /etc/profile.d itp. Jest to szczególnie prawdziwe, jeśli chcesz zarządzaj tą kontrolą w jednym miejscu na wielu powłokach. Lmod (w trakcie bardzo aktywnego rozwoju), moduły C / TCL (klasyczne rozwiązanie) lub Cmod (lekki).

Bill Barth
źródło
1

Nie wiem, czy robię to dobrze, ale dla mnie działa utrzymanie katalogu / home / ComunAtodos (pisane wielkimi literami i po hiszpańsku, aby było oczywiste, że nie jest to katalog macierzysty linuksa) i wstawić .bashrc, .nanorc i .bash_alia tam. Następnie odsyłam do tych w /etc/skel/.profile, aby nowi użytkownicy wskazywali na nich i dodawali dodatki tylko do określonych użytkowników, którzy ich potrzebują.

Fik Borga
źródło
-1

Jestem naprawdę nowy w systemie operacyjnym Linux, ale zrobiłem szkic skryptu bash, który działa, aby zmodyfikować plik .bashrc wszystkich użytkowników, a nie plik systemowy /etc/.bashrc.

#!/bin/bash

X=$( cat etc/passwd | cut -f1 -d: ) #All-users

For X in /home/*/.bashrc ; do 

echo "alias ls='ls -al'" >> $X

2>/dev/null

done

source $X

exit 0

Okej, więc wiem, że ten skrypt działa, ale nie robię tego, jeśli jest bezbłędny :) Możesz go również zmodyfikować, aby nie obejmował wszystkich użytkowników, być może tworzysz plik dla wszystkich użytkowników, którzy potrzebują ich pliku .bashrc dostosowane

Farhad Rahimi
źródło
3
Pierwszy wiersz (gdzie czytasz / etc / passwd) wydaje się nic nie robić. Twoja czwarta linia wydaje się być błędem (i nie rozumiem, dlaczego chcesz ukryć błędy). „wyjście 0” jest zbędne. Wymaga to, aby wszyscy użytkownicy mieli już .bashrcplik i zawsze dołącza się niezależnie od tego, czy wiersz jest już w pliku.
thomasrutter,
Myślałem o nazwach wszystkich użytkowników z tą linią? Ale teraz, gdy o tym myślę, mogłem po prostu wyciąć </ etc / passwd, na tej liście było wiele nazwisk, więc nie chciałem, żeby IT popełniło błędy dla tych, którzy nie mają pliku bashrc. Jak możesz dołączyć, jeśli linia nie istnieje? I czy mógłbyś napisać odpowiedni skrypt dla tego typu rask, proszę używam Linuksa tylko przez tydzień.
Farhad Rahimi,
Wygląda na to, że masz już pewne umiejętności, ale ten samouczek jest dobry dla skryptów powłoki: shellscript.sh . W przypadku innych pytań, takich jak dodawanie wiersza tylko wtedy, gdy jeszcze nie istnieje, zadaj je jako nowe pytania tutaj.
thomasrutter,