我对 Linux 不太熟悉,并且遇到了以下与如何永久取消设置某些环境变量有关的问题。
问题是每次我登录系统时,执行环境命令我获得了一些必须永久删除的变量,特别是:
my.username@VHCLWSO2AS02:~$ env
..........................................
HTTP_PROXY=http://127.0.0.1:3128
HTTPS_PROXY=http://127.0.0.1:3128
http_proxy=http://127.0.0.1:3128
https_proxy=http://127.0.0.1:3128
.........................................
.........................................
.........................................
这些与代理相关的变量必须被永久删除(对于所有用户,包括根用户),我不确定如何做到这一点。
这。轮廓登录用户主目录中的文件包含:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
我看不到此文件中的环境变量声明。
这.bashrc登录用户主目录中的文件包含:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'$
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
这/etc/环境文件应该包含影响整个系统(而不仅仅是特定用户)的环境变量声明,其中包含:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
#http_proxy=http://10.173.17.92:3128
#https_proxy=http://10.173.17.92:3128
#HTTP_PROXY=http://10.173.17.92:3128
#HTTPS_PROXY=http://10.173.17.92:3128
这包含我的变量定义,我以前注释掉这些变量以永久取消设置它们。我从未重新启动系统,因为它是一个服务器,我无法做到这一点。我不确定这种不重新启动的情况是否是导致我的问题的原因(我只能注销会话)。
为什么每次我通过 SSH 再次登录系统时,仍然会获取这些变量?我该怎么做才能永久删除这些变量?我遗漏了什么?
答案1
可以使用 unset 命令来彻底消除环境变量的存在
不,unset
不能永久删除环境变量,就像export
不能永久设置它们一样,因为根本不存在“永久”环境这样的东西——它总是通过登录过程和脚本重新组装。
(所有环境变量都是每个进程的,从登录过程一直复制到所有程序。但是,更改永远不会被复制向上从孩子到父母。
export
和命令都unset
只会改变正在运行的当前进程(即 'bash' shell)的环境,而这一切都是关于你放在哪里那些命令是否使其效果“永久”生效。例如,如果您将此类命令放在 ~/.profile 中,它们将在每次登录时执行,因此出现是永久的。
我从未重新启动过系统,因为它是服务器,我无法重新启动。我不确定这种无法重新启动的情况是否是导致我的问题的原因(我只能注销会话)。
为什么每次我通过 SSH 再次登录系统时,仍然会获取这些变量?我该怎么做才能永久删除这些变量?我遗漏了什么?
问题可能在于不重新启动。例如,如果变量曾经由 /etc/environment 设置,则可能是它们也为接受您登录的主进程设置,因此当该进程启动您的登录 shell 时,它们会一直继承下去。
然而,这不应该这可能是 SSH 的一个问题,因为 sshd 每次连接时都会清除其环境。请寻找其他来源:
确保环境变量没有被
/etc/profile
或设置/etc/profile.d/*.sh
。确保它们没有被
/etc/bash.bashrc
任何一方设置。检查
~/.pam_environment
,这是在 shell 启动之前读取的特殊配置文件。如果您使用 Bash,请检查
~/.bash_profile
–~/.bash_login
如果其中一个文件存在,则它会优先,而“常规” ~/.profile 将被完全忽略。检查该位置中的
~/.ssh/environment
、~/.ssh/rc
和其他文件。运行搜索以
grep -r HTTP_PROXY /etc
发现其他可能隐藏的地方。
最后,如果没有其他办法,放置unset HTTP_PROXY
在您的个人资料脚本中将导致它每次登录时删除变量,从而使效果永久存在。