linux中环境变量及环境变量配置文件详解

2025-07-27 13:32:39 / 法国直播世界杯

环境变量:定义每个用户的操作环境

1. Source命令:修改配置文件后,必须注销重新登录才能生效,使用source命令后,立即生效环境变量配置文件;

命令如下:source 配置文件 或者 . 配置文件

2. 环境变量配置文件简介:环境变量配置文件中主要是定义对系统操作环境生效的系统默认环境变量,如PATH等;PATH、HISTSIZE、PS1、HOSTNAME等环境变量写入对应的环境变量配置文件;

3. 常见的环境变量:

1. /etc/profile

2. /etc/profile.d/*.sh

3. ~/.bash_profile

4. ~/.bashrc

5. /etc/bashrc

注:放在家目录(3,4)下的环境变量配置文件,只会对当前用户起作用;在/etc下的环境变量所有的用户都起作用;

环境变量配置文件的功能

系统正常启动过程的环境变量的启动

先向下走,在向右走;

在其他用户下切换用户的过程

先向下,然后再向右;

一. /etc/profile的作用

1. USER变量:

2. LOGNAME变量:

3. MAIL变量:

4. PATH变量:

5. HOSTNAME变量:

6. HISTSIZE变量:

7. umask:

8. 调用/etc/profile.d/*.sh文件

二. umask #查看系统默认权限

1. 文件最高权限为666

2. 目录最好权限为777

3. 权限不能使用数字进行换算,而必须使用字母;使用的是最高权限丢点默认的权限;

Eg:当前默认权限为022,那么创建的文件权限就是最高权限减去默认权限:wr-wr-wr- 减去 ----w--w- 那么创建的文件权限默认为wr--r--r-

4. Umask定义的权限,是系统默认权限中准备丢弃的权限如022,也就是----w—w-

三.~/.bash_profile的作用

1.调用了~/.bashrc 文件

2.在PATH变量后面加入了”:$HOME/bin”这个目录

四./etc/bashrc的作用

1.PS1

2.umask

3.PATH变量

4.调用/etc/profile.d/*.sh文件

_______________________________________________________________________________________________________________________________________________________________________________

linux 下常见启动文件配置

转于: https://blog.51cto.com/visionsky/871619

先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。

用户环境建立的过程中总是先执行/etc/profile然后在读取/etc/environment。为什么会有如上所叙的不同呢?应该是先执行/etc/environment,后执行/etc/profile。/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,

所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。对于用户的SHELL初始化而言是先执行/etc/profile, 再读取文件/etc/environment.

对整个系统而言是先执行/etc/environment。这样理解正确吗?/etc/enviroment --> /etc/profile --> $HOME/.pro

file -->$HOME/.env (如果存在)/etc/profile 是所有用户的环境变量/etc/enviroment是系统的环境变量登陆系统时shell读取的顺序应该是/etc/profile ->/etc/enviroment -->$HOME/.profile -->$HOME/.env原因应该是jtw所说的用户环境和系统环境的区别了如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment) 有不同的值那应该是以用户环境为准了。(1)/etc/profile: 此文件为系统的每个用户 设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。(2)/etc /bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己 使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。(4)~/.bashrc: 该文件包含专用于你 的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。(5) ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关 系。(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。通过比较最后发现,在ubuntu下配置java运行环境时,所做的设置代表的意义了。$ sudo vim /etc/profile在文件最后添加#set java environmentJAVA_HOME=/opt/jdk1.6.0_07export JRE_HOME=/opt/jdk1.6.0_07/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH最后wq!备注:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

###################################################################

在登录Linux时要执行文件的过程如下:在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在 ~/.bash_profile文件中一般会有下面的代码:if [ -f ~/.bashrc ] ; then. ./bashrcfi~/.bashrc中,一般还会有以下代码:if [ -f /etc/bashrc ] ; then. /bashrcfi所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。执行顺序为:/etc /profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

#################################################################

1.登录shell所谓登录shell,指的是当用户登录系统时所取的那个 shell。登录shell属于交互式shell。

登录shell将查找4个不同的启动文件来处理其中的命令。 bash shell处理文件的顺序如下:1: /etc/profile

2:/etc/profile.d等待配置文件

3: $HOME/.bash_profile

4: $HOME/.bash_login5 $HOME/.profile/etc /profile是bash shell在系统上的主默认启动文 件,系统上 每一个用户在登陆时都将执行此文件。

通过设置这个文件,

超级用户可以为全系统内的所有bash用户建立默认特征。不同 Linux版本在此文件放置的命令不尽相同,

在redflag中,该文件设置了几个重要的变量,

如:PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC,详情可以查看具体的文件。

其余3个文件具备相同的功能——提供特定于用户的启动文件。大多 数Linux版本只使用其中之一。如:RedFlag使用.bash_profile ubuntu使用.profile .shell 依次查找~/.bash_profile、

~/.bash_login、

~/.profile(~是用户主目录的速记符),

并执行它找到的首个文件中的命令。

可以将命令放置在这些文件中以覆盖掉/etc /profile文件中的默认设置。

也就是后面的文件可以覆盖或者修改前面的设置 。

2. 交互式非登录shell如果启动了一个bash shell而没有等录系统(如在CLI提示符中键入bash),

则启动了一个交互式非登录shell.

而登录shell的初始化文件(比如.bash_profile)通常会运行这个文件。这样,登录shell和非登录shell都可以使用.bashrc中的命令。

如以X Window环境登录Linux时,在X环境所起动的终端,那些shell都是非登录shell.在交互式非登录shell中并不执行前面提到的初始化文件中的命令。然而,交互式非登录shell从登录shell继承了由这些初始化文件设置的 shell变量。(1) $HOME/.bashrc交互式非登录shell执行~/.bashrc文件中的命令.在每次执行shell脚本时,都会重新读取这个文件,所以是最完整的。

但是万事都不是一样的,debain系列的是不同的,如ubuntu

/etc/profile-->/etc/environment-->$HOME/.profile

Ubuntu Linux系统环境变量配置文件介绍在Ubuntu中有如下几个文件可以设置环境变量

/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。

/etc /environment:在登录时操作系统使用的第二个文件, 系统在读取你自己的profile前,设置环境文件的环境变量。

~/.profile: 在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

/etc/bashrc /etc/bash.bashrc :为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.

~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

______________________________________________________________________________________________________________________________________________________________________________________

深入浅出理解交互式shell和非交互式shell、登录shell和非登录shell的区别

https://blog.csdn.net/gui951753/article/details/79154496

分类专栏: -------Linux运维学习---------- linux运维 文章标签: shell的分类 shell的一些配置

版权

首先我们需要把bash理解为一种模式,我们不如把这种模式想象成类似于洋葱一样的结构,我们可以一层一层剥开,也就是说我们可以一层一层的进入子shell。就好比我们进入一栋楼,打开一个房间是一个环境,在当前这个房间我们又看到了一个门,当我们打开这个门的时候,我们就已经进入了新的环境,也就是新的bash中。这牵扯到一个父shell和子shell的问题。

用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。

在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

同时,在我们使用shell的同时,我们应该清楚shell的一些配置文件的存放位置,按照范围来分,可以分为两种:

(1)全局配置:

/etc/profile/etc/profile.d/*.sh/etc/bashrc

(2)个人配置:

~/.bash_profile~/.bashrc

我们可以根据shell是否是交互式和shell是否是登录式这两个维度,来对shell进行分类。

交互式shell和非交互式shell(interactive shell and non-interactive shell)

交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。 shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。

举个例子,最常见的交互式shell,就是我们利用虚拟机登录Linux系统时的那个等待登录界面,大概如下图所示:

系统在等待我们键入登录的用户名和密码,这就是一种交互式shell,而非交互式shell就像我们写的那些很简单的脚本,比如一个脚本展示出:helloworld。这个脚本不需要我们对其进行交互,它就只是很简单的将其脚本中的命令按顺序执行。

登录式shell和非登录式shell

登录shell:是需要用户名、密码登录后才能进入的shell(或者通过--login”选项生成的shell)。非登录shell:当然就不需要输入用户名和密码即可打开的Shell,例如:直接命令“bash”就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。执行exit命令,退出一个shell(登录或非登录shell);执行logout命令,退出登录shell(不能退出非登录shell)。

交互式登录shell和非交互式登录shell的区别

交互式登录:(清除掉所有变量,通过文件重新读入)(1)直接通过终端输入账号密码登录(2)使用“su - UserName”切换的用户执行顺序:(影响该shell的配置文件)/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile--> ~/.bashrc--> /etc/bashrc非交互式登录:(会继承上一个shell的全部变量)(1)su UserName(2)图形界面下打开的终端(3)执行脚本 (当我们执行脚本的时候.我们就已经进入到了一个子shell)(4)任何其它的bash实例执行顺序:(影响该shell的配置文件)

~/.bashrc--> /etc/bashrc--> /etc/profile.d/*.sh

使用./test.sh或者 bash ./test.sh执行脚本的时候,是开启一个子shell,这个子shell能继承上一个父shell的变量,而这个子shell的变量,随着子shell的退出而消失。当我们用. test.sh 或者source test.sh时,不开启子shell,在当前shell运行,子shell中的所有值都影响当前。

一般我们对shell进行一些配置的时候,通常都是对~/.bashrc 和/etc/bashrc这两个文件进行一些配置。