Linux中.bashrc与.bash_profile的对比

数据宇宙探索者
• 阅读 2012

如果你平时在命令行上花费了大量时间,那么你可能会萌生出希望定制 Shell 环境的想法。今天本文就和大家讲解该如何实现你们的这个想法。其实可以通过创建别名、向环境变量 $PATH 添加新目录或更改 Shell 提示符的外观以实现在命令行上节约时间。

在你寻找解决方法的过程中可能会看到过一些教程,比如说将配置文件放在 .bashrc 或者 .bash_ profile 中,亦或是将配置放在另一个可以通过 Bash Shell 读取和执行的文件中。

接下来,我将向大家讲解 Bash 启动文件以及 .bashrc.bash_ profile 之间的区别:

Interactive Login 和 Non-Login Shell

Bash 被调用时,会从一组启动文件中读取并执行命令,至于读取哪些文件取决于 Shell 是作为交互式登录调用还是作为非登录 Shell 调用。

其实,Shell 可以是交互式的,也可以是非交互式的。简单一点地说,交互式 Shell 是一种读写用户终端的 Shell,而非交互式 Shell 完全是与终端无关的 Shell。 值得注意的是,交互式 Shell 可以是登录 Shell ,也可以是非登录 Shell

有几种情况可以调用登录 Shell,一种是当用户通过 ssh 或本地方式远程登录到终端,还有就是使用 --login 选项启动 Bash 。比如在 Shell 提示符中键入 bash 或打开新的 Gnome 终端选项卡时。交互式非登录 Shell 从登录 Shell 调用。

Bash启动文件

Bash 作为交互式登录 Shell 被调用时,它将查找 /etc/profile 文件,如果该文件存在,它将运行文件中列出的命令。然后 Bash 按以下的顺序搜索 ~/.bash_profile~/.bash_login~/.profile 文件,并在第一个找到的文件中执行命令。

Bash 作为交互式非登录 Shell 被调用时,它从 ~/.bashrc 文件读取并执行命令,需要指出的是该文件必须存在并且它是可读的才行。

.bashrc 和 .bash_配置文件之间的差异

Bash 作为交互式登录 Shell 被调用的情况下,.bash_profile 才会被读取、执行,而 .bashrc 是启动交互式非登录 Shell 时才被执行的。一般使用 .bash_profile 来运行只运行一次的命令,比如运行自定义环境变量 PATH 的命令。

每次启动新 Shell 时应该将运行的命令放在 .bashrc 文件中,这些命令包括别名和函数、自定义提示、历史自定义等。

通常,~/.bash_profile 包含的命令来源于 .bashrc 文件中,示例如下:

Linux中.bashrc与.bash_profile的对比

这意味着每次登录到终端时,上面两个文件都会被读取并执行其中的命令。

大多数 Linux 发行版都是使用 ~/.profile 而不是 ~/.bash_profile。因为 ~/.profile 文件可以被所有 Shell 读取,而 ~/.bash_ profile 仅能被 Bash Shell 读取。

如果你的系统上没有我上面所讲的这些启动文件,那么你也可以自己创建它们。

结论

最后,总结一下今天我们所讲的重点。.bash_profile.bashrc 是在调用 Bash 时运行的包含 Shell 命令的文件。.bash_profile 可以在交互式登录 Shell 上被读取和执行,而 .bashrc 可以在非登录 Shell 上被读取和执行。

如果你还对 .bashrc 这些文件有疑问或是有修改 Shell 提示符的更好的方法,请留言告诉我呗!


最后,最近很多小伙伴找我要Linux学习路线图,于是我根据自己的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。无论你是面试还是自我提升,相信都会对你有帮助!

免费送给大家,只求大家金指给我点个赞!

电子书 | Linux开发学习路线图

也希望有小伙伴能加入我,把这份电子书做得更完美!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

点赞
收藏
评论区
推荐文章
李志宽 李志宽
4年前
这28个值得收藏的shell脚本能让你每天摸鱼近7个小时!
前言:在日常工作中,但凡你要跟服务器打交道,一定离不开的神器便是shell脚本,shell脚本可以极大的提高工程师的工作效率,避免一些认为因素导致的手误。那么今天圈圈就给大家分享28个shell脚本,希望对大家有帮助,脚本比较多比较长,一时间记不住可以先收藏,用到的时候及时拿出来比对一下即可!1.轮询检测Apache状态并启用钉钉报警!/bin/bashs
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
芝士年糕 芝士年糕
2年前
Linux shell 内建命令
前言一、shell简介shell是Linux系统中一个提供命名行的交互式工具,本质是一个c语言可执行程序,为用户提供了启动程序,管理文件系统中的文件以及运行在Linux系统上的进程的途径。命令行提示符是shell负责交互的部分,允许用户输入文本命令,然后解释命令,并在内核中执行。Linux系统上有多种shell可用,Linux发行版默认的shell都是ba
Jacquelyn38 Jacquelyn38
4年前
【Parcel 2 + Vue 3】从0到1搭建一款极快,零配置的Vue3项目构建工具
前言一周时间,没见了,大家有没有想我啊!哈哈!我知道肯定会有的。言归正传,我们切入正题。上一篇文章中我主要介绍了使用Vite2Vue3Ts如何更快的入手项目。那么,今天我将会带领大家认识一个新的Vue3项目构建工具——parcelvuecli。这是什么?怎么以前没有听说过。有这样的疑问其实并不奇怪,因为这个构建工具是我自己开发的。你可能会这样问:“你自己
Wesley13 Wesley13
3年前
MySQL命令行导出数据库
MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cdMySQL中到bin文件夹的目录如我输入的命令行:cdC:\\ProgramFiles\\MySQL\\MySQLServer4.1\\bin(或者直接将windows的环境变量path中添加该目录)2,导出数据库:mysqldumpu用户名
Stella981 Stella981
3年前
Linux基础(1)之shell
  shell作为下Linux系统中用户与内核交互的接口,用于将用户输入的命令转化为内核可以理解的指令,进而通过内核操作硬件资源,完成相应的功能。shell分为两种,图形shell和命令行shell。图形shell主要有KDE,Gnome等,命令行shell有常见的sh,zsh,csh,bash,ksh,tcsh等。  这里主介绍最常用的bash
Stella981 Stella981
3年前
Jetty Maven Plugin 配置说明
23.2.3配置Jetty容器  下面这些Jetty环境属性的设置在你的web应用中执行,最常用的配置如下: httpConnector  可选择的配置,如果没有设置,Jetty将创建ServerConnector实例来监听8080端口。你可以在命令行上使用系统属性jetty.http.port来修改默认的端口配置,例如m
Stella981 Stella981
3年前
Akka源码分析
  akka中的EventBus其实是不常用,也最容易被忽略的一个组件。  但如果你深入Cluster的实现就会发现,这个东西其实还挺有用的,而且它是ActorSystem系统中所有事件消息的一个横切面,通过它你可以订阅特定类型的消息,然后做出相应的动作。那读者可能会问了,这个订阅消息也很简单的啊,我自己实现不就好了。嗯,其实你这个想法是对的,akka所
Wesley13 Wesley13
3年前
07FLY企业建站系统
你还在为没人写后台程序烦恼吗?你还在为招不到合适的程序员而烦恼吗?你还在为写后台源码浪费了大量的时间而烦恼吗?现在你将不在为此而烦恼,只要你拥有了07FLY企业建站系统,上面的问题就迎刃而解,它是一套专为企业建站而开发出来的产品,他将为你节约大量的开发时间和开发成本,你只需要很短的时间就可以轻松制作出一个功能强大,符合企业使用的网站。07FL
Stella981 Stella981
3年前
ES中删除索引的mapping字段时应该考虑的点
1.创建新索引2.新索引创建新mapping3.原索引导出数据到新索引4.新索引创建原索引一致的别名5.删除原索引针对于第四步:这个就要用到索引别名了,如果你最开始建索引的时候没有考虑设计索引别名,那就杯具了。你可以把索引的名称设置成name\_v1 别名设置为name,然后代码里面访问搜索的时候连接的其实是别名na
阮小五 阮小五
9个月前
Geekbench AI 命令行工具
GeekbenchAI命令行工具banff提供与图形用户界面相同的功能。此工具允许您从命令提示符中使用GeekbenchAI,并使用shell脚本或批处理文件自动执行。这是Linux版GeekbenchAI的主要界面,可作为适用于Windows和macOS