当我检查我的系统环境时,会弹出许多环境变量。我如何才能搜索特定的变量呢?
我正在读的一本书说:
有时,您的环境中的变量数量会增加很多,以至于当您只对一个变量感兴趣时,您就不希望看到所有的值都显示出来了。如果是这样的话,可以使用
echo命令来显示环境变量的当前值。
如何在Linux终端中做到这一点?
发布于 2015-11-20 10:49:45
通过执行:
printenv
您将看到所有的环境变量。要获得更多信息,您可以查看:
发布于 2015-11-20 15:40:40
重要的是要理解每个进程都有自己的一组环境变量。
当进程调用fork()系统调用时,将创建与第一个进程(父进程)相同的第二个进程(子进程)(此副本包括驻留在堆栈上方的环境(或者就在下面,取决于您如何看待堆栈:-) --但在unix/linux中,堆栈是从高地址向下增长的)。
通常,子进程将调用execve()系统调用,该调用将丢弃其(虚拟)内存中的所有内容,并从指定的二进制文件中的代码和数据部分重构它。
但是,在重新构造堆栈时,它首先将传递给execve()的环境和参数字符串复制到堆栈上(按该顺序),然后调用main()函数(在execve()返回(二进制中指定的入口点)之后,crt0引导代码完成了大量工作)。
C库中有execve()系统调用的包装器,它将传递当前环境(即父环境的副本),而不是提供它的调用方(因此子环境实际上将继承父环境)--参见environ(7)。
尝试(作为根用户)运行命令ps axeww | less ..。这将向您展示所有进程的环境!一个有趣的问题是进程id 1(即init进程--内核在启动时创建的第一个进程)。
如果您想查看特定进程的环境(并且知道它是进程id),请尝试运行命令cat /proc/<PID>/environ (用进程id替换<PID> )。
注意,如果一个进程拥有足够的权限,它可以重写它自己的堆栈,这会使您很难知道它的环境是什么--您将在ps输出中看到这样的守护进程。
但是最后,所有这些都归结为@chaos上面所说的,如果您想查看shell进程中特定环境变量的当前值,只需使用(builtin)命令echo "$<NAME>" (将<NAME>替换为您感兴趣的环境变量的名称).请注意,在另一个进程中,相同的变量可能有不同的值,或者根本不存在。
发布于 2015-11-20 18:54:32
您可以通过export获得您想要的内容:
export | grep HOME将显示$HOME变量的内容。
https://unix.stackexchange.com/questions/244323
复制相似问题