搜索
首页系统教程LINUXLinux环境变量来自哪些文件?

Linux环境变量来自哪些文件?

Mar 20, 2024 pm 07:50 PM
linux环境变量红帽linux

Linux环境

在LinuxShell登陆成功之后,Linux会从文件中获取一系列的数据为该次登陆所用,这种数据会在个别指令或个别程序中被使用到。那些数据就称为LinuxShell运行时的环境。环境中的数据可以大致分为四种:环境变量,Shell变量,别称(alias),Shell函数。其中Shell变量,别称,Shell函数在此不做详尽说明。

环境变量里有哪些?

可以直接用无参数的printenv命令来输出当前session的环境变量以及环境变量的值。若加上参数,则是输出某个变量的值。倘若更便捷地查看,可以将printenv的输出传给less来查看环境变量(1):

printenv | less

下边是在我的Linux系统上的部份输出结果:

...
...
MANDATORY_PATH=/usr/share/gconf/cinnamon.mandatory.path
XDG_SESSION_ID=c2
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/rit
USER=rit
DESKTOP_SESSION=cinnamon
QT4_IM_MODULE=fcitx
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/e9e1def3_9380_43b6_8ce3_7916861e45d2
DEFAULTS_PATH=/usr/share/gconf/cinnamon.default.path
QT_QPA_PLATFORMTHEME=qt5ct
PWD=/home/rit
HOME=/home/rit
...
...

可以看见,平常常接触到的PWD,HOME,USER等都在其中。

假如要在命令的参数中使用某个变量的值,可以输入"$变量名"(2)。诸如:

ls $HOME/bin

用户自定义变量

不仅系统自带的变量,用户还可以自定义变量:

rit@rit-X405UA:~$ foo=FOO
rit@rit-X405UA:~$ hello='Hello World'
rit@rit-X405UA:~$ echo $foo
FOO
rit@rit-X405UA:~$ echo $hello
Hello World

注意到等号左右两侧不留空格,由于空格在shell命令上面被视为分隔符,并不是无意义的符号。

注意到假如出现特殊字符红帽linux系统下载,如空格,$,等等,要用冒号扩上去(3)。

假如要让接出来在该shell运行的程序才能访问到该变量,则要使用export命令:

rit@rit-X405UA:~$ export foo hello

像这样在当前的session中定义的变量只在当前session有效,即退出再登陆这个变量就不存在了。若要在每次登入到shell的时侯都能使用到该变量,需将该变量定义到环境变量的配置文件中。

环境变量来自什么文件?

如文章开头所述,Linux会从文件中获取环境变量。这么是什么文件在为LinuxShell提供环境变量呢?(前面再解释loginshell与non-loginshell)

linux修改环境变量的值_linux修改用户环境变量_修改环境变量linux

对于loginshell:

/etc/profile,这个文件是loginshell的全局环境变量配置文件,全局意味着对所有用户都有效~/.bash_profile,~/.bash_login,~/.profile,这三个文件用于配置用户个人的环境变量,所以每位用户的HOME目录下就会有起码这三个文件中的一个(取决于linux的发行版本)linux修改用户环境变量,读取时只会读取其中一个。loginshell登陆时linux会先读取/etc/profile这个全局配置文件linux内存管理,再在HOME目录根据一定次序找寻这三个文件,最后会读取找到的第一个文件。若与/etc/profile中定义的变量有冲突,会将该变量覆盖。

对于non-loginshell:

/etc/bash.bashrc,这个文件是non-loginshell的全局环境变量配置文件。(网上一些博客的介绍中,这个文件不是/etc/bash.bashrc而是/etc/bashrc,其实这取决于发行版本)~/.bashrc,这个文件是用户个人的non-loginshell环境变量配置文件,与loginshell相同,该文件在/etc/bash.bashrc后执行,有冲突时,该文件也会将冲突的变量重画。

以上关于文件读取次序的描述参考于这篇文章。

各类linux发行版都带有一个命令su,若直接"su用户名",则会以non-loginshell登陆到该用户,若加上选项"-"或是"-l"或是"--login",则会以loginshell登陆到该用户。诸位读者倘若更清楚的体会这种文件的读取过程,可以借助这个命令,通过更改那些文件来进行测试。

loginshell与non-loginshell

登陆LinuxShell有两种方式:loginshell与non-loginshell。loginshell一般会作为第一个登陆的shell(例如开机时的登陆),而non-loginshell一般是开机后从GUI直接启动的shell。通过这两种方式登陆的环境变量会有一些区别。

1.non-loginshell会承继上一个进程(一般是loginshell)中的一些环境变量

可以通过一个简单测试来验证。

首先,在当前shell中自定一个变量foo=FOO,并export(为了让子进程也能使用这个变量,而shell本身就是一个程序):

rit@rit-X405UA:~$ foo=FOO
rit@rit-X405UA:~$ export foo

接着,以loginshell登陆到另一个帐户bob,并尝试查看foo变量:

rit@rit-X405UA:~$ su - bob
Password: 
bob@rit-X405UA:~$ echo $foo
bob@rit-X405UA:~$

结果foo变量为空,在这儿说明foo未被定义。

接着,以non-loginshell登陆到另一个帐户bob,并查看foo变量:

rit@rit-X405UA:~$ su bob
Password: 
bob@rit-X405UA:/home/rit$ echo $foo
FOO

结果foo变量与rit这个用户的shell中的定义一致。

linux修改用户环境变量_修改环境变量linux_linux修改环境变量的值

说明non-loginshell承继了上一个进程的用户自定变量,而loginshell没有承继。

2.PWD,HOME,USER,PATH

在1中的事例就可以注意到,loginshell的PWD弄成了当前用户的HOME目录(~),而non-loginshell则承继了父进程的工作目录。

若使用echo来查看HOME与USER,我们会发觉两种登陆形式登陆以后这两个变量都切换到了当前用户对应的home目录与username。

对于两种登陆形式的PATH的区别,可以在~/.bash_profile(或是~/.bash_login,~/.profile)中找到部份线索。上面说过,这三个文件是在loginshell中读取的,假如我们仔细比对它们与~/.bashrc,都会发觉~/.bash_profie中多了如此两行:

...
PATH="$HOME/bin:$PATH"
...
PATH="$HOME/.local/bin:$PATH"
...

所以在用两种方法登陆以后,用echo查看PATH变量可以看见区别如下:

non-loginshell:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

linux修改环境变量的值_linux修改用户环境变量_修改环境变量linux

loginshell:

/home/rit/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

上面不包含$HOME/bin是由于home目录没有这个文件夹。

仔细观察可以发觉还有别的区别,但这些区别的出处就不太好找了。

注释

(1)linuxshell提供一种叫pipeline的特点,意味着可以将一个命令的输出重定向至下一个命令的输入(即把某个命令的输入当成时另一个命令的输入),不过前提是该指令要才能接受输入或形成输出。常见的指令有cat,less,grep等。输入输出用"|"来拼接。

(2)linuxshell在读取到$这个符号时,会先将它前面紧挨到的的字符视作变量名,并将$与变量名替换成变量的值,之后再将替换后的参数传给命令。这属于shell的特点expansion中的parameterexpansion,不仅parameterexpansion之外,还有pathnameexpansion,braceexpansion,commandsubstitution。

(3)与(2)相反,假如要忽视掉特殊符号,可以在右侧加破折号。双冒号会屏蔽除"","`","$"以外的所有特殊符号。单冒号会忽视掉所有特殊符号。

参考

不仅环境变量文件读取次序是参考网站的博客linux修改用户环境变量,其它内容皆参考自书本:TheLinuxCommandLine2ndEdititonACompleteIntroduction。

勘误校准2019年7月4日:(1)自定义变量时等号左右两侧都不能留空格。更改前我只提及了等号右边不能留空格。(2)parameterexpansion会将"$变量名"替换成变量的值。更改前的描述为把"$变量名"转化为变量名。(3)escapecharacter不属于expansion特点。更改前我把它归类到了expansion里。新增内容2019年7月4日:在“用户自定义变量”部分的末尾新增对自定义变量作用范围的描述。

以上是Linux环境变量来自哪些文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:ITcool。如有侵权,请联系admin@php.cn删除
互联网在Linux上运行吗?互联网在Linux上运行吗?Apr 14, 2025 am 12:03 AM

互联网运行不依赖单一操作系统,但Linux在其中扮演重要角色。Linux广泛应用于服务器和网络设备,因其稳定性、安全性和可扩展性受欢迎。

Linux操作是什么?Linux操作是什么?Apr 13, 2025 am 12:20 AM

Linux操作系统的核心是其命令行界面,通过命令行可以执行各种操作。1.文件和目录操作使用ls、cd、mkdir、rm等命令管理文件和目录。2.用户和权限管理通过useradd、passwd、chmod等命令确保系统安全和资源分配。3.进程管理使用ps、kill等命令监控和控制系统进程。4.网络操作包括ping、ifconfig、ssh等命令配置和管理网络连接。5.系统监控和维护通过top、df、du等命令了解系统运行状态和资源使用情况。

使用Linux别名提高自定义命令快捷方式的生产率使用Linux别名提高自定义命令快捷方式的生产率Apr 12, 2025 am 11:43 AM

介绍 Linux是一个强大的操作系统,由于其灵活性和效率,开发人员,系统管理员和电源用户都喜欢。但是,经常使用长而复杂的命令可能是乏味的

Linux实际上有什么好处?Linux实际上有什么好处?Apr 12, 2025 am 12:20 AM

Linux适用于服务器、开发环境和嵌入式系统。1.作为服务器操作系统,Linux稳定高效,常用于部署高并发应用。2.作为开发环境,Linux提供高效的命令行工具和包管理系统,提升开发效率。3.在嵌入式系统中,Linux轻量且可定制,适合资源有限的环境。

在Linux上掌握道德黑客的基本工具和框架在Linux上掌握道德黑客的基本工具和框架Apr 11, 2025 am 09:11 AM

简介:通过基于Linux的道德黑客攻击数字边界 在我们越来越相互联系的世界中,网络安全至关重要。 道德黑客入侵和渗透测试对于主动识别和减轻脆弱性至关重要

如何学习Linux基础知识?如何学习Linux基础知识?Apr 10, 2025 am 09:32 AM

Linux基础学习从零开始的方法包括:1.了解文件系统和命令行界面,2.掌握基本命令如ls、cd、mkdir,3.学习文件操作,如创建和编辑文件,4.探索高级用法如管道和grep命令,5.掌握调试技巧和性能优化,6.通过实践和探索不断提升技能。

Linux最有用的是什么?Linux最有用的是什么?Apr 09, 2025 am 12:02 AM

Linux在服务器、嵌入式系统和桌面环境中的应用广泛。1)在服务器领域,Linux因其稳定性和安全性成为托管网站、数据库和应用的理想选择。2)在嵌入式系统中,Linux因其高度定制性和高效性而受欢迎。3)在桌面环境中,Linux提供了多种桌面环境,满足不同用户需求。

Linux的缺点是什么?Linux的缺点是什么?Apr 08, 2025 am 12:01 AM

Linux的缺点包括用户体验、软件兼容性、硬件支持和学习曲线。1.用户体验不如Windows或macOS友好,依赖命令行界面。2.软件兼容性不如其他系统,缺乏许多商业软件的原生版本。3.硬件支持不如Windows全面,可能需要手动编译驱动程序。4.学习曲线较陡峭,掌握命令行操作需要时间和耐心。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能