.profile和.bash_profile有什么区别?为什么我的系统上没有.profile文件?


12

因此,我刚接触Linux,最近在我的上网本上安装了Fedora 19。我想对Linux和CLI有了更深入的了解,所以我现在正在阅读Learn Linux:The Hard Way

在练习3中,作者给出以下命令:

  • ls -al
  • 猫.profile

我尝试遵循这些指示,但无济于事。从ls -al可以看到,我的用户名目录中没有.profile文件。从我了解到的.bash_profile和.profile文件实际上是相同的。我从研究中得出的唯一区别是,.bash_profile首先被检查。

我不明白的是,为什么在Linux中有多个文件用于同一功能,为什么作者使用.profile而不是.bash_profile(如果我正确理解,系统首先找到.bash_profile时将不会读取.profile)为什么我的系统上没有.profile文件?


另请参见unix.stackexchange.com/questions/45684/…,其中回答了部分问题。此外,unix.stackexchange.com / questions / 67940 /…显示了为什么这些不同的文件可能导致人们对比您可能正在处理的更高级的东西感到困惑的原因之一。
msw

Answers:


13

.profile日期可以追溯到原始的Bourne外壳,即sh。由于GNU Shell bash是Bourne Shell的超集(取决于其选项),因此两个Shell可以使用相同的启动文件。也就是说,只要仅sh输入命令.profile

例如,alias是的有效内置命令,bash但未知sh。因此,如果您.profile的主目录中只有一个并alias在其中放置一条语句,sh则会抱怨。因此,有一个特定于bash的文件,其中包含shell初始化命令,当且仅当不存在.profile文件时,bash才会读取该文件。

实际上,在某些安装中这有点过分简化,而且我对Fedora并不熟悉。在bash下,/etc/profileshell将在主目录中的任何文件之前读取它。如果有系统范围的初始化脚本,它通常会说类似

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

为什么这样呢?尝试兼容数十种Shell方言。为什么教程是这样写的?Bourne外壳不再经常使用,有些人甚至不知道bash之外还有其他类似Bourne的外壳。即使使用(有限的)Bourne语法实现更大的跨平台兼容性,它也经常dash以POSIX兼容模式由bash 运行或由bash运行。确实,实际的Bourne shell源可能是Unix System V的版权组件,该组件现在似乎是Novell的财产,但是我不知道他们在做什么(如果有的话)。

对于初次使用的用户,请选择其中一个$HOME/.profile$HOME/.bash_profile两个,但不要同时使用。既然您已经在.bash_profile使用它,因为它可能包含安装所需的系统特定的东西。


谢谢!我想我现在对它的理解要好一些,我想仍然要学习很多。
Emiroe

其中很多是您确实不需要了解的历史性垃圾。只要专注于我回答的最后一段。另外,由于您是新来的,因此您可以投票接受答案,这是在这里谢谢的最高形式。
msw

是的,我已经接受了您的回答。我没想到有人会付出那么多的努力,所以我非常感谢。我接受了您的回答,但我不能接受它,因为它要求15个信誉,而我只有8个。非常抱歉!
Emiroe

我忘记了15个代表的限制;你是对的。
msw

4
历史奖金1:真正的伯恩炮弹终于摆脱了囚禁。minnie.tuhs.org具有V7的完整源代码(带有Bourne shell的第一个unix版本),并且heirloom.sourceforge.net具有Bourne shell的较新版本,实际上仍然可以使用。历史奖金#2aliasPOSIX要求,所以sh周围没有很多人对此一无所知。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.