Na serwerze, gdy loguję się jako root, widzę .bashrc
(Ubuntu 10.10).
Na moim komputerze Mac mam .bash_profile
Czy Ubuntu zawsze ma tylko .bashrc
plik, a nie .bash_profile
? (Jestem tylko zdezorientowany, więc pytam, zdaję sobie sprawę, że różnią się między sobą, ale może jakoś istnieje związek?)
Czy na serwerze chcę utworzyć alias, czy powinienem go umieścić .bashrc
?
Co jeśli chcę zastosować ten alias, aby wszyscy użytkownicy mogli go używać?
Odpowiedzi:
Aliasy Bash powinny znajdować się w plikach
.bash_aliases
lub.bashrc
w poszczególnych katalogach domowych. Jeśli musisz utworzyć globalne aliasy bash, mogą one wejść/etc/bash.bashrc
, ale często najlepiej po prostu dodać je do plików.bash_aliases
lub.bashrc
,/etc/skel
aby zostały odziedziczone przez nowo utworzonych użytkowników.Jest praktycznie zawsze źle zdefiniować alias ww
.profile
,.bash_profile
lub/etc/profile
.Aby zrozumieć, dlaczego, należy zrozumieć, w jakich okolicznościach uruchamiane są polecenia z każdego z tych plików . Istnieją nieporozumienia na ten temat, które omówię poniżej.
Chociaż chcesz zdefiniować aliasy dla wielu użytkowników, powinieneś znać sposób ich definiowania dla poszczególnych użytkowników, abyś mógł wybrać najlepszą metodę robienia tego, czego potrzebujesz.
Aliasy dla użytkowników indywidualnych
Zwłaszcza jeśli używasz GUI, większość swoich interaktywnych muszli są prawdopodobnie bez logowania muszle. Nawet jeśli nigdy nie używać GUI, prawdopodobnie nadal korzystać bez logowania muszle z pewną częstotliwością. Będziesz chciał, aby twoje aliasy działały w tych powłokach.
Zwłaszcza jeśli kiedykolwiek logujesz się nie graficznie w wirtualnej konsoli lub za pośrednictwem SSH , prawdopodobnie używasz czasem powłok logowania. Więc chcesz, aby twoje aliasy działały również w interaktywnych powłokach logowania.
Po uruchomieniu interaktywnej powłoki, która nie jest zalogowana , źródło
.bashrc
znajduje się w katalogu osobistym użytkownika. Domyślnie w Ubuntu, każdy użytkownik.bashrc
sam pobiera źródła.bash_aliases
, jeśli istnieje.Czytanie komentarzy w domyślnej wersji Ubuntu
.bashrc
ujawnia, że oficjalnie zamierzone jest użycie aliasu w.bashrc
lub.bash_aliases
..bashrc
zawiera już niektóre definicje aliasów (uruchom,grep '^[[:blank:]]*alias' ~/.bashrc
aby je zobaczyć) i zawiera wyraźne porady na temat tego, gdzie umieścić nowe takie definicje:Ale co z interaktywnymi powłokami logowania ? Zamiast
.bashrc
źródła logowania do powłoki.profile
..bash_login
istnieje, to zamiast tego jest pozyskiwany..bash_profile
istnieje, to zamiast tego jest pozyskiwany.Jednak dobrą wiadomością jest to, że domyślnie w Ubuntu polecenia w
.bashrc
będą również działać w interaktywnych powłokach logowania, ponieważ domyślnie.profile
sprawdza, czy bieżąca powłoka to bash (a jeśli.bashrc
istnieje), a jeśli tak, źródła.bashrc
:Sugeruję, aby użytkownicy definiowali nowe aliasy bash
.bash_aliases
w swoich katalogach domowych (tworząc je, jeśli jeszcze nie istnieją). Jest to szczególnie czysty i prosty sposób, aby definicje aliasów były trwałe na poziomie użytkownika.Aliasy nie powinny być definiowane w,
.profile
ponieważ pozostałyby niezdefiniowane w powłokach niezalogowanych. W przeciwieństwie do większości środowiska powłoki bash, aliasy nie są eksportowane do powłok potomnych:W szczególności domyślnie większość środowisk
.profile
graficznych korzysta z logowania graficznego, ale:Aliasy nie powinny być definiowane w
.bash_profile
(lub.bash_login
) z tego samego powodu, ale także z innego powodu. Naiwne tworzenie jednego z tych plików i umieszczanie w nim tylko definicji aliasów uniemożliwia.profile
uruchomienie dowolnego kodu !W sytuacjach, w których
.bash_profile
lub.bash_login
naprawdę jest przydatny, zwykle.profile
gdzieś w nich jest jedno źródło , co rozwiązuje ten problem. (Wtedy jedynym problemem jest to, że podobnie jak w przypadku.profile
definiowania aliasów w.bash_profile
lub.bash_login
nie działa poprawnie).Aliasy dla nowych indywidualnych użytkowników, automatycznie
Kiedy tworzone jest konto użytkownika typu, który ma reprezentować prawdziwą istotę ludzką, zwykle tworzony jest nowy katalog, który ma służyć jako katalog domowy. Zawartość
/etc/skel
jest następnie kopiowana do katalogu domowego. W ten sposób wielu użytkowników zaczyna od podobnych plików konfiguracyjnych w swoich katalogach domowych. W Ubuntu, obejmuje.profile
,.bashrc
i kilka innych plików.Aby zmienić zdefiniowane aliasy dla nowych użytkowników, możesz je po prostu wstawić
/etc/skel/.bash_aliases
(musisz je utworzyć) lub/etc/skel/.bashrc
.Jeśli edytujesz już istniejący plik,
/etc/skel
możesz najpierw wykonać kopię zapasową - ale nie powinieneś umieszczać kopii zapasowej, w/etc/skel
przeciwnym razie zostanie ona również skopiowana do katalogów domowych nowych użytkowników.Jest to prawdopodobnie najlepszy sposób na dodanie nowych aliasów dla wielu użytkowników. Obecni użytkownicy mogą po prostu samodzielnie dodawać aliasy. Jeśli zdefiniujesz aliasy
/etc/skel/.bash_aliases
, możesz po prostu przekierować je do tego pliku, który mogą skopiować do swoich katalogów domowych (lub dodać do własnego.bash_aliases
pliku niestandardowego ).Nie jest łatwo zdefiniować alias. Ponadto aliasy nie są wyjątkowo odporne ; działają tylko w szczególnych okolicznościach. Jeśli musisz utworzyć nowe polecenie, które będzie działać przez cały czas, dla wszystkich nie powinieneś implementować tego polecenia jako aliasu. I nie możesz skutecznie wymusić aliasów na użytkownikach, którzy ich nie chcą - mogą po prostu
unalias
ich.Globalne aliasy dla wszystkich użytkowników
Choć radzę unikać takiego podejścia, to można zdefiniować aliasy w tym globalnym
/etc/bash.bashrc
pliku. Zostaną one następnie zdefiniowane zarówno dla interaktywnych powłok bez logowania, jak i dla interaktywnych powłok logowania. Powodem jest to, że zanim pliki w katalogu osobistym użytkownika zostaną pozyskane:/etc/profile
automatycznie./etc/bash.bashrc
automatycznie, ale/etc/profile
sprawdza, czy działająca powłoka to bash (a jeśli/etc/bash.bashrc
istnieje), a jeśli tak, to źródła/etc/bash.bashrc
.Jest to analogiczne do tego, w jaki sposób domyślny użytkownik
.profile
pozyskuje użytkownika,.bashrc
jeśli powłoka jest bash (jak opisano powyżej).Oto jak wygląda rzeczywisty kod tego ustawienia domyślnego
/etc/profile
:Ten blok wykonuje również inne zadania. W szczególności zewnętrzna
if
sprawdza, czy powłoka może być interaktywna (sprawdzając, czy tekst zachęty nie jest pusty), a następnie sprawdza, czy bieżąca powłoka to bash i źródła,/etc/bash.bashrc
jeśli jest, a jeśli nie, to działa w przypadku bash , jest już zrobione w/etc/bash.bashrc
.Należy nie definiują globalne aliasów
/etc/profile
dla samych użytkowników powód nie powinien definiować ich w swoich lokalnych.profile
s: jeśli nie zostaną one zdefiniowane tylko dla powłok zgłoszeniowych, a nie dla ich muszli potomnych.Na koniec zauważ, że w przeciwieństwie do domyślnego użytkownika
.bashrc
, domyślny/etc/bash.bashrc
plik nie zawiera niczego na temat aliasów. Dawanie użytkownikom aliasów w pliku, w którym nie mogą ich edytować ani wyłączać, jest dość niezwykłe. (Oczywiście, nadal może to zrobić, poprzez nadpisanie ich definicje we własnym lokalnym.bashrc
,.bash_aliases
lub gdzie indziej).Dalsza lektura
. .bash_profile
każdym razem, gdy tworzę nowy alias?źródło
Oto kilka miłych lektur . „.bash_profile jest wykonywany dla powłok logowania, podczas gdy .bashrc jest wykonywany dla interaktywnych powłok nie zalogowanych”
Więc dla swojego aliasu użyj .bash_profile
źródło
.bash_profile
jest nieprawidłowe. W Ubuntu,.profile
(który działa dla powłok logowania) źródła,.bashrc
gdy jest to interaktywna powłoka bash. W ten sposób wstawianie aliasów.bashrc
(lub.bash_aliases
pozyskiwanie.bashrc
) definiuje je we wszystkich interaktywnych powłokach bash. Aliasy w.bash_profile
produkują ten problem , między innymi. Zobacz to , że , moją odpowiedź , a domyślne~/.bashrc
„s komentarze zalecające oddanie aliasy tam lub w.bash_aliases
.