В чем разница между .profile и .bash_profile и почему в моей системе нет файла .profile?

12

Так что я довольно новичок в Linux и недавно установил Fedora 19 на свой нетбук. Я хочу иметь более глубокое понимание Linux и интерфейса командной строки, поэтому сейчас я читаю Learn Linux: The Hard Way .

В упражнении 3 автор дает следующие команды:

  • ls -al
  • кат. профиль

Я пытаюсь следовать этим инструкциям, но безрезультатно. В моем имени пользователя нет файла .profile, как я вижу из ls -al. Из того, что я узнал, файлы .bash_profile и .profile практически совпадают. Единственное отличие, которое я сделал из своего исследования, заключается в том, что .bash_profile проверяется первым.

Я не понимаю, почему в Linux существует несколько файлов для одной и той же функции, почему Автор использует .profile, а не .bash_profile (если я правильно понимаю, .profile не будет прочитан, когда система сначала найдет .bash_profile) и почему у меня нет файла .profile в моей системе?

Emiroe
источник
См. Также unix.stackexchange.com/questions/45684/…, который отвечает на часть вашего вопроса. Более того, unix.stackexchange.com/questions/67940/… показывает одну из причин, по которой эти различные файлы могут привести к путанице в более сложных вещах, с которыми вы, вероятно, еще не сталкивались.
Msw

Ответы:

13

В .profileвосходит к оригинальной оболочке Борна , известной как sh. Поскольку оболочка GNU bash(в зависимости от ее параметров) является надмножеством оболочки Bourne, обе оболочки могут использовать один и тот же файл запуска. То есть при условии, что в shкоманду введены только команды.profile

Например, aliasдопустимая встроенная команда, bashно неизвестная sh. Поэтому, если у вас есть только .profileв вашем домашнем каталоге и поместите aliasв него заявление , вы будете shжаловаться. Таким образом, существует специальный файл bash, который имеет команды инициализации оболочки, которые bash будет читать, если и только если .profileфайла нет.

На самом деле, это немного упрощает некоторые установки, и я не знаком с Fedora. В bash /etc/profileчитается оболочкой перед любыми файлами в вашем домашнем каталоге. Если есть общесистемный скрипт инициализации, он часто говорит что-то вроде

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

Почему так? Попытка совместимости через десятилетия оболочечных диалектов. Почему учебник написан именно так? Оболочка Bourne не так часто используется, и некоторые люди даже не знают, что есть какая-то другая оболочка, похожая на Bourne, кроме bash. Даже когда (ограниченный) синтаксис Bourne используется для большей кроссплатформенной совместимости, он часто запускается dashили bash в режиме совместимости с POSIX. Действительно, фактический источник оболочки Bourne, вероятно, является компонентом авторского права Unix System V, который, похоже, является собственностью Novell, но я понятия не имею, что они делают с ним, если вообще что-то делают.

Для начинающего пользователя, использование либо $HOME/.profileили , $HOME/.bash_profileно не так , и вы будете в порядке. Поскольку у вас уже есть .bash_profileработа с этим, потому что он может иметь специфические для системы вещи, которые нужны вашей установке.

MSW
источник
Благодарность! Думаю, теперь я понимаю это немного лучше, но мне еще многое предстоит узнать.
Эмироэ
Многое из того исторического мусора, о котором вам действительно не нужно знать; просто сконцентрируйся на последнем абзаце моего ответа. Кроме того, поскольку вы новичок здесь, вы можете поднять голос и принять ответ, который является высшей формой благодарности здесь.
Msw
Да, я уже принял ваш ответ. Я не ожидал, что кто-то приложит столько усилий, поэтому я очень благодарен. Я принял твой ответ, но не могу высказать его, потому что это требует 15 репутации, а у меня только 8. Так что извините за это!
Эмироэ
Я забыл о пределе 15 повторений; вы правы.
Msw
4
Бонус истории # 1 : настоящая оболочка Борна наконец сбежала из плена. У minnie.tuhs.org есть полный исходный код V7 (первый выпуск Unix с оболочкой Bourne), а на heirloom.sourceforge.net имеется немного более свежая версия оболочки Bourne, которая по-прежнему реально используется. Исторический бонус # 2 : aliasтребуется POSIX, поэтому не так много shтех, кто об этом не знает.