centos中/etc/profile,/etc/bashrc等文件的区别与作用

当我们在做一些与bash相关的操作时,比如设置别名、登录启动项等,多多少少都会与下面几个文件打交道,用的时候一查,然后又忘了。好记性不如烂笔头,下面老高就帮你理一理这些文件到底是干啥的。

/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc

•文件说明:

◦/ect/profile
■此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
◦/etc/bashrc
■为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
◦~/.bash_profile
■每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行~/.bashrc文件.
◦~/.bashrc
■该文件包含专用于用户的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
◦~/.bash_logout
■当每次退出系统(退出bash shell)时,执行该文件.

•另外, /etc/profile 中设定的变量(全局)的可以作用于任何用户
•而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile 中的变量,他们是"父子"关系.

man bash ----- INVOCATION

以CENTOS为例,其他系统可能略有区别。

登录shell

A login shell is one whose first character of argument zero is a -, or one started with the --login option.
老高注解:

判断一个shell是不是登录shell,只要你是su -, bash --login这样进入的就行,如果你进入一个terminal而不需要登录,即输入用户名密码,那么他就是一个 non-login shell。比如你在MAC下打开终端,是不需要登录过程的所以是non-login shell。

还有一个方法,echo $0,如果是登录shell,则会返回-[bash name],否则返回[bash name]。

交互式Shell

An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive,allowing a shell script or a startup file to test this state.
老高注解:

判断一个交互式shell也很简单echo $-的结果中包含小写字母i就是了。

当你运行一个脚本时,那就是一个非交互式shell。
When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but the value of the PATH variable is not used to search for the file name.
老高翻译:

当一个非交互的shell运行一个shell脚本时,他会在环境变量中 $BASH_ENV 并执行。代码为if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi。

The following paragraphs describe how bash executes its startup files. If any of the files exist but cannot be read, bash reports an error. Tildes are expanded in file names as described below under Tilde Expansion in the EXPANSION section.
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
老高翻译:

当你登录一个交互式的shell后,如果/etc/profile存在,bash首先会读取/etc/profile的配置,然后再依次读取对应用户的~/.bash_profile、~/.bash_login和~/.profile。

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.
老高翻译:

当一个登录shell退出的时候,如果当前用户的~/.bash_logout存在,bash会读取他。

When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.
老高翻译:

当一个非登陆shell运行,如果对应用户的~/.bashrc存在,bash首先会读取~/.bashrc,有个--norc option能阻止读取,还有个--rcfile的选项可以强制读取指定文件。

综上:

~/.bashrc与/etc/bashrc、~/.bash_profile与/etc/profile的关系一样,都是一个针对某个用户,一个针对全局设置。读取的时候也是全局优先。

交互式shell登录时读取profile,初始化时读取bashrc。

非交互式只会读取bashrc。

一般把alias和function一类的放到bashrc或~/.bashrc中。

而把export更多的放在profile文件中。

推荐大家参考My bashrc, bash aliases, profile and other files的配置;

同时安装Linux下最好的shell :zsh + oh-my-zsh 默认shell的最佳替代品;

如果还是钟情与bash,那么老高推荐你安装bash-completion,自动补全的功能很好用!

时间: 2024-10-23 03:35:55

centos中/etc/profile,/etc/bashrc等文件的区别与作用的相关文章

css中link与@import引入css文件用法区别

1 网页中引用外部CSS的两种方式 网页中引用外部CSS文件有两种方式:link和@import,两者引用的方式在页面上的展现效果是一样的. link引用方式如下: <link href="styles.css" type="text/css" />@import引用方式如下: <style type="text/css">@import url("styles.css");</style>

Linux中profile、bashrc、~/.bash_profile、~/.bashrc、~/.bash_profile之间的区别和联系以及执行顺序

区别 ============ /etc/profile ============ 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置. =========== /etc/bashrc =========== 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取. =============== ~/.bash_profile =============== 每个用

CentOS中文件夹基本操作命令的讲解

  CentOS中文件夹基本操作命令的讲解 ls--显示指定目录下内容 说明:ls 显示结果以不同的颜色来区分文件类别.蓝色代表目录,灰色代表普通文件,绿色代表可执行文件,红色代表压缩文件,浅蓝色代表链接文件. -a---显示所有内容,包括隐藏文件 说明:在Linux系统中,以"."开头的就是隐藏文件或隐藏目录. -l---以长格式(内容更详细)显示文件或目录的详细信息. 说明:ls -l命令可以简写成ll, 输出的信息共分为7组: 文件类别和文件权限.链接数或子目录个数.文件所有者.

在CentOS中使用wget和source命令导入sql文件

在阿里云CentOS系统中,需要导入一个sql文件到数据库,使用wget下载sql文件,并使用source命令导入sql文件. ①首先,登陆数据库: [root@iZ94r80gdghZ tanteng.me]# mysql -u root -p Enter password: ②使用create database命令新建一个数据库: MariaDB [(none)]> create database testxx; Query OK, 1 row affected (0.00 sec) ③由于

如何在Linux中恢复一个删除了的文件

你曾经是否遇到这样的事?当你发现的时候,你已经通过删除键,或者在命令行中使用 rm 命令,错误的删除了一个不该删除的文件. 在第一种情况下,你可以到垃圾箱,搜索那个文件,然后把它复原到原始位置.但是第二种情况又该怎么办呢?你可能知道,Linux 命令行不会把删除的文件转移到任何位置,而是直接把它们移除了,biu~,它们就不复存在了. 在这篇文章里,将分享一个很有用的技巧来避免此事发生.同时,也会分享一个工具,不小心删除了某些不该删除的文件时,也许用得上. 把删除创建为 rm -i 的别名 当 -

如何在 Linux 中恢复一个删除了的文件

你曾经是否遇到这样的事?当你发现的时候,你已经通过删除键,或者在命令行中使用 rm 命令,错误的删除了一个不该删除的文件. 在第一种情况下,你可以到垃圾箱,搜索那个文件,然后把它复原到原始位置.但是第二种情况又该怎么办呢?你可能知道,Linux 命令行不会把删除的文件转移到任何位置,而是直接把它们移除了,biu~,它们就不复存在了. 在这篇文章里,将分享一个很有用的技巧来避免此事发生.同时,也会分享一个工具,不小心删除了某些不该删除的文件时,也许用得上. 把删除创建为 rm -i 的别名 当 -

CentOS中配置git命令自动补全

在CentOS系统中安装好git后,发现没有命令自动补全的功能,而Ubuntu系统下默认是有这个功能的,下面就来实现让CentOS也支持git的命令自动补全功能. 1) 下载git源码,cd至contrib/completion目录,找到git-completion.bash文件 2) 将上述文件copy至个人home目录,可设为隐藏文件以免后续被误删  代码如下 复制代码 # cd /tmp # git clone https://github.com/git/git # cd git/con

redhat和centos中使用service控制启动与关闭

有时,我们自己安装了某个软件时,想让对这个服务更加容易的控制,在redhat/centos中我们会首先想到使用service xxx start|stop来进行实现,但可惜的是,这需要我们自己来编写启动关闭脚本,并且加入到启动列表中.如果你会点shell脚本的话,就会简单许多 以nginx来讲解一下它的过程,只是过程,就不粘贴shell脚本了 1.在/etc/init.d/目录下创建启动关闭脚本,如nginx 2.在编写脚本时,脚本中一定要有chkconfig参数,如: #chkconfig:

CentOS中使用virtualenv搭建python3环境

  virtualenv可以搭建虚拟且独立的python环境,可以使每个项目环境与其他项目独立开来,保持环境的干净,解决包冲突问题.下面我们来详细探讨下centos中如何来搭建. 问题描述 环境: CentOS6.5 想在此环境下使用python3进行开发,但CentOS6.5默认的python环境是2.6.6版本. 之前的做法是直接从源码安装python3,替换掉现有的开发环境,但在随后使用过程中发现系统很多脚本依赖python2.6,直接替换会导致很多软件不正常. 今天发现有朋友使用virt