Jaka jest różnica między .profile i .bash_profile i dlaczego nie mam pliku .profile w moim systemie?

12

Więc jestem całkiem nowy w Linuksie i niedawno zainstalowałem Fedorę 19 na moim netbooku. Chcę głębiej zrozumieć Linuksa i CLI, więc teraz czytam Learn Linux: The Hard Way .

W ćwiczeniu 3 autor wydaje następujące polecenia:

  • ls -al
  • cat .profile

Staram się postępować zgodnie z tymi instrukcjami, ale bezskutecznie. W moim katalogu nazw użytkowników nie ma pliku .profile, co widać z ls -al. Z tego, czego się nauczyłem, pliki .bash_profile i .profile są praktycznie takie same. Jedyną różnicą, którą wyciągnąłem z moich badań, jest to, że .bash_profile jest sprawdzany jako pierwszy.

Nie rozumiem, dlaczego istnieje wiele plików dla tej samej funkcji w Linuksie, dlaczego autor używa .profile, a nie .bash_profile (jeśli dobrze rozumiem .profile nie zostanie odczytany, gdy system najpierw znajdzie .bash_profile) i dlaczego nie mam pliku .profile w moim systemie?

Emiroe
źródło
Zobacz także unix.stackexchange.com/questions/45684/..., który odpowiada na część twojego pytania. Co więcej, unix.stackexchange.com/questions/67940/... pokazuje jeden z powodów, dla których te różne pliki mogą prowadzić do zamieszania w przypadku bardziej zaawansowanych rzeczy, z którymi prawdopodobnie jeszcze nie masz do czynienia.
msw

Odpowiedzi:

13

Dane .profilepochodzą z oryginalnej powłoki Bourne'a znanej jako sh. Ponieważ powłoka GNU bashjest (w zależności od opcji) nadzbiorem powłoki Bourne'a, obie powłoki mogą korzystać z tego samego pliku startowego. To znaczy, pod warunkiem, że shwprowadzane są tylko polecenia.profile

Na przykład aliasjest poprawnym wbudowanym poleceniem, bashale nieznanym sh. Dlatego gdybyś miał tylko .profilew swoim katalogu domowym i umieścił aliasw nim oświadczenie, shnarzekałby. Tak więc istnieje plik specyficzny dla bash, który ma polecenia inicjujące powłokę, które bash przeczyta wtedy i tylko wtedy, gdy nie ma .profilepliku.

W rzeczywistości jest to trochę nadmierne uproszczenie w niektórych instalacjach i nie znam Fedory. Pod bash /etc/profilejest odczytywany przez powłokę przed plikami w twoim katalogu domowym. Jeśli istnieje systemowy skrypt inicjalizacyjny, często mówi coś takiego

if there is a $HOME/.profile:
   source it
elseif bash is my shell and there is a $HOME/.bash_profile:
   source that

Dlaczego tak jest Próba kompatybilności przez dekady dialektów powłokowych. Dlaczego samouczek jest napisany w ten sposób? Skorupa Bourne'a nie jest już często używana, a niektórzy nawet nie wiedzą, że istnieje inna skorupa podobna do Bourne'a niż bash. Nawet jeśli (ograniczona) składnia Bourne'a jest używana dla większej kompatybilności między platformami, często jest uruchamiana przez dashbash lub w trybie zgodności z POSIX. Rzeczywiście, rzeczywiste źródło powłoki Bourne'a jest prawdopodobnie chronionym prawem autorskim składnikiem Unix System V, który wydaje się być teraz własnością Novella, ale nie mam pojęcia, co oni z tym robią.

Dla początkującego użytkownika użyj jednego $HOME/.profilelub dwóch, $HOME/.bash_profileale nie będziesz miał nic przeciwko . Ponieważ już .bash_profilez tym pracujesz, ponieważ może zawierać elementy specyficzne dla systemu, które są potrzebne twojej instalacji.

msw
źródło
Dzięki! Myślę, że teraz rozumiem to trochę lepiej, ale myślę, że wciąż dużo się uczy.
Emiroe
Wiele z tych historycznych śmieci, o których tak naprawdę nie trzeba wiedzieć; skoncentruj się na ostatnim akapicie mojej odpowiedzi. Ponieważ jesteś tutaj nowy, możesz głosować i zaakceptować odpowiedź, która jest najwyższą formą podziękowań tutaj.
msw
Tak, już zaakceptowałem twoją odpowiedź. Nie spodziewałem się, że ktoś włoży w to tyle wysiłku, więc jestem bardzo wdzięczny. Przyjąłem twoją odpowiedź, ale nie mogę jej głosować, ponieważ wymaga 15 reputacji, a ja mam tylko 8. Przykro mi z tego powodu!
Emiroe
Zapomniałem o limicie 15 powtórzeń; masz rację.
msw
4
Premia historyczna nr 1 : prawdziwa muszla Bourne'a ostatecznie uciekła z niewoli. minnie.tuhs.org ma pełny kod źródłowy V7 (pierwsza wersja uniksowa z powłoką Bourne'a), a heirloom.sourceforge.net ma nieco nowszą wersję powłoki Bourne'a, która wciąż jest użyteczna. Dodatkowa premia do historii nr 2 : aliasjest wymagana przez POSIX, więc nie ma wielu w shpobliżu, którzy o tym nie wiedzą.