【问题标题】:Linux: where are environment variables stored?Linux:环境变量存储在哪里?
【发布时间】:2009-02-10 12:47:36
【问题描述】:

如果我在终端中输入,

export DISPLAY=:0.0

...shell 存储该环境变量的位置在哪里?

我使用的是 Ubuntu 8.10。我查看了 ~/.profile 和 /etc/profile 文件,找不到任何 DISPLAY 的踪迹。

【问题讨论】:

标签: linux environment-variables


【解决方案1】:

进程的环境变量存在于运行时,不存储在某个文件左右。它们存储在进程自己的内存中(在那里它们被发现传递给子进程)。但是

里面有一个虚拟文件
/proc/pid/environ

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

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

每个变量都由下一个变量的二进制零分隔。 tr 将零替换为换行符。

【讨论】:

  • 内核不存储环境变量,它们存储在用户态。如果环境块已被重新分配,/proc//environ 可能会返回错误的值。
  • @atomice 我的印象是内核存储它们并使它们对用户程序可见,对用户程序可写。如果以定义的方式更改环境变量,environ 文件是否代表错误的值?你能不能展示一个利用它的程序?
  • 内核将它们存储在用户空间的特定位置,这就是 /proc//environ 公开的内容。但是,如果您使用 putenv 或 setenv 在程序中修改环境,则可能会重新分配初始环境块(以容纳新变量)。新变量不会显示在 /proc//environ. 的输出中
  • @atomice 那么,新的更新环境将留在哪里?显示哪个命令?
  • @atomice :它们存储在哪个虚拟地址?在 x86_64 的情况下。
【解决方案2】:

键入set,您将获得所有当前变量的列表。 如果你想让某些东西持久化,把它放在~/.bashrc~/.bash_profile(如果你使用 bash)

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 问题是关于ʀᴀᴍ在哪里。
    • @user2284570 问题在哪里指定?能详细点吗?
    • 对于 user2284570 的问题。至于环境变量在 RAM 中的位置,存储在 main() 函数的栈顶。 setenv() 等人的任何动态修改。然后分配到别处
    【解决方案4】:

    该变量未存储在某些脚本中。它只是由 X 服务器脚本设置的。您可以使用 set 查看当前设置的环境变量。

    【讨论】:

    • 实际上,它是由 shell X 客户端设置的。
    • 当然,它是由启动 X 服务器的脚本设置的。
    【解决方案5】:

    它存储在进程 (shell) 中,并且由于您已将其导出,因此会产生任何进程。

    执行上述操作不会将其存储在文件系统中的任何位置,例如 /etc/profile.你必须明确地把它放在那里才能发生。

    【讨论】:

      【解决方案6】:

      有 1 个文件可用于存储环境变量。

      .bashrc

      您可以添加变量并使用它们。例如,我添加了 Django 虚拟环境作为环境变量,现在我可以在任何地方访问它。将此添加到您的 bashrc 文件中

      django_env='source/media/anish/Softwares/virtual_env/django2/bin/activate' 
      

      现在您需要重新启动系统以反映更改,并在重新启动后输入 $django_env 以启动您的虚拟环境。就这么简单。

      【讨论】:

        【解决方案7】:

        环境变量在RAM中的位置,存放在main()函数的栈顶。 setenv() 等人的任何动态修改。然后分配到别处

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-18
          • 2020-03-16
          相关资源
          最近更新 更多