为什么我无法永久删除 Ubuntu 18.04 系统中的这些环境变量?

为什么我无法永久删除 Ubuntu 18.04 系统中的这些环境变量?

我对 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 在您的个人资料脚本中将导致它每次登录时删除变量,从而使效果永久存在。

相关内容