Centos 6.3 中 $HOME 环境变量设置在哪里?
我查看过:
- /etc/配置文件
- /etc/profile.d/*
- 在 /etc/bashrc 中
- 的〜/ .bash_profile
- ~/.bashrc
此外,/etc/passwd 中的倒数第二列有正确的主目录。
SELinux 已被禁用,仅供参考。
答案1
登录程序设置了这些变量。当然,如果有必要,您可以覆盖 HOME,甚至取消设置它 —— 但除非您努力修改每个程序的源代码,否则您永远无法摆脱它。
请注意,即使您将 HOME 更改为其他内容,您的主目录的权威来源将始终存在于passwd
或nsswitch
衍生版本中。
如果您通过真实的 TTY 登录,登录将会设置它。
来自 login-utils/login.c 中的 util-linux
setenv("HOME", pwd->pw_dir, 0); /* legal to override */
setenv("USER", pwd->pw_name, 1);
setenv("SHELL", pwd->pw_shell, 1);
setenv("TERM", termenv, 1);
如果您通过 SSH 登录,sshd 将设置它:
来自 sshd 中的 session.c
child_set_env(&env, &envsize, "USER", pw->pw_name);
child_set_env(&env, &envsize, "LOGNAME", pw->pw_name);
child_set_env(&env, &envsize, "HOME", pw->pw_dir);
如果您通过 GDM 登录,它将在那里设置它。
来自 daemon/gdm-session-worker.c 中的 gdm
gdm_session_worker_set_environment_variable (worker, "LOGNAME", worker->priv->username);
gdm_session_worker_set_environment_variable (worker, "USER", worker->priv->username);
gdm_session_worker_set_environment_variable (worker, "USERNAME", worker->priv->username);
gdm_session_worker_set_environment_variable (worker, "HOME", home);
gdm_session_worker_set_environment_variable (worker, "SHELL", shell);