Linux:环境变量存储在哪里?


Answers:


113

进程的环境变量在运行时存在,并且未存储在某些文件中。它们存储在进程自己的内存中(在那里,它们会传递给子进程)。但是其中有一个虚拟文件

/ proc / pid /环境

该文件显示了在调用进程时传递的所有环境变量(除非该进程覆盖了其内存的那部分-大多数程序不会)。内核使它们通过该虚拟文件可见。一个可以列出他们。例如,要查看过程3940的变量,可以执行

cat /proc/3940/environ | tr '\0' '\n'

每个变量都由下一个变量用二进制零定界。tr将零替换为换行符。


11
内核不存储环境变量,它们以用户模式存储。如果已重新分配环境块,则/ proc / <pid> / environ可能返回错误的值。
atomice

1
@atomice我给内核留下了印象,它们存储了它们并使它们对用户程序可见,对用户程序是可写的。Doestheenviron如果环境变量以限定的方式改变文件代表错误的值?您也许可以展示一个利用它的程序吗?
Johannes Schaub-litb 2011年

14
内核将它们存储在用户空间中的特定位置,这就是/ proc / <pid> / environ公开的内容。但是,如果使用putenv或setenv在程序中修改环境,则可能会重新分配初始环境块(以适应新变量)。新变量将不会显示在/ proc / <pid> / environ的输出中。
atomice

1
@atomice那么,新的更新环境将保留在哪里?要显示哪个命令?
user2431763

1
@atomice:然后将它们存储在哪个虚拟地址?在x86_64的情况下。
user2284570'2

41

输入“ set”,您将获得所有当前变量的列表。如果您想保留某些东西,请将其放在〜/ .bashrc或〜/ .bash_profile中(如果您使用的是bash)


15

如果要将环境在系统范围内使用,可以使用/etc/environment文件。


问题是关于ʀᴀᴍ中的位置。
user2284570

8
@ user2284570在问题中哪里指定?你能详细说明一下吗?
JohnnyQ '17

8

它存储在进程(外壳)中,并且自导出以来,所有处理的进程都会生成。

进行上述操作不会将其存储在文件系统中的任何位置,例如/ etc / profile。您必须将其明确放置在该位置才能发生。


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.