这里有个小知识点
在 Linux 系统中,用户环境变量文件是用来设置用户级别的环境变量和 shell 配置的文件。这些文件可以控制用户的环境,包括路径、命令别名、shell 提示符、自定义函数等。不同的文件在不同的情况下会被加载,并对用户的 shell 会话产生影响。
常见的用户环境变量文件及其作用
-
/etc/profile
- 作用: 这是系统范围内的环境变量配置文件,对所有用户生效。当用户登录时(通过交互式的登录 shell,如通过 SSH 登录),系统会首先执行
/etc/profile
中的配置。 - 加载时机: 每次用户登录时,系统会自动加载
/etc/profile
。
- 作用: 这是系统范围内的环境变量配置文件,对所有用户生效。当用户登录时(通过交互式的登录 shell,如通过 SSH 登录),系统会首先执行
-
~/.profile
- 作用: 这是每个用户的个人环境变量文件,用于设置用户级别的环境变量。当用户登录时,系统会执行这个文件。可以用来定义用户专属的路径、变量等。
- 加载时机: 每次用户登录时,系统会自动加载
~/.profile
。对于一些 shell,如bash
,如果没有找到~/.bash_profile
或~/.bash_login
,它会执行~/.profile
。
-
~/.bash_profile
- 作用: 这是专门为
bash
shell 准备的登录脚本文件。在用户通过交互式登录 shell(如 SSH 登录)时,bash
shell 会读取并执行该文件。它通常用于设置环境变量和启动应用程序。 - 加载时机: 每次用户登录时,
bash
会优先加载~/.bash_profile
,除非指定不加载。~/.bash_profile
通常会包含对~/.bashrc
的加载命令。
- 作用: 这是专门为
-
~/.bashrc
- 作用: 这是专门为
bash
shell 准备的非登录交互式 shell 初始化文件。它主要用于设置命令别名、函数、shell 提示符、环境变量等配置。在启动一个新的终端或运行一个新的bash
shell 时,会加载这个文件。 - 加载时机: 每次启动非登录的交互式 shell(如打开一个新的终端窗口)时,
bash
会加载~/.bashrc
。
- 作用: 这是专门为
-
/etc/bash.bashrc
- 作用: 这是系统范围内的
bash
初始化文件,对所有用户生效。用于在所有用户的非登录交互式 shell 中设置环境变量和其他配置。 - 加载时机: 每次启动非登录的交互式 shell 时(如打开终端窗口),系统会加载
/etc/bash.bashrc
。
- 作用: 这是系统范围内的
-
~/.bash_logout
- 作用: 这是
bash
shell 在用户注销时执行的文件。可以用来清理临时文件、记录日志等。 - 加载时机: 每次用户从登录 shell 注销时,
bash
会执行~/.bash_logout
。
- 作用: 这是
加载顺序和优先级
-
登录 shell(如 SSH 登录)时,系统会按照以下顺序加载:
/etc/profile
~/.bash_profile
或~/.bash_login
或~/.profile
~/.bashrc
(通常是通过~/.bash_profile
或其他文件手动加载的)
-
非登录交互式 shell(如打开新的终端)时,系统会加载:
/etc/bash.bashrc
~/.bashrc
总结
用户环境变量文件在 Linux 系统中起到了配置和定制用户环境的关键作用。通过这些文件,用户可以自定义自己的工作环境,包括添加自定义命令、设置路径和配置 shell 行为。了解这些文件的作用和加载顺序对于有效管理和优化 Linux 工作环境非常重要。
使用lineinfile模块设置环境变量
---
- hosts: ubuntu
tasks:
- name: 设置环境变量
lineinfile:
dest: ~/.profile
regexp: ^export ENV_KEY=
line: export ENV_KEY=env_value
- name: 获取环境变量值 #指定bash shell,默认是使用/bin/sh,/bin/sh无法执行source命令
ansible.builtin.shell: 'source ~/.profile && echo $ENV_KEY'
args:
executable: /bin/bash
register: env_key
- name: 打印环境变量,inventory_hostname 是当前主机在inventory清单文件中的名称,默认情况下会在playbook中显示出来,一般为ip,也可以自定义名称
debug:
msg: "this linux os {{ inventory_hostname }} env_key is {{ env_key.stdout }}"
- name: 打印环境变量 #ansible_env 变量不包含lineinfile模块设置的变量,不知道为什么
debug:
msg: "{{ ansible_env }}"
root@test:~/ansible/env# ansible-playbook env01.yaml
PLAY [ubuntu] *************************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************************************************************************************************************************************
ok: [192.168.232.100]
TASK [设置环境变量] *******************************************************************************************************************************************************************************************************************************************************
ok: [192.168.232.100]
TASK [获取环境变量值] *****************************************************************************************************************************************************************************************************************************************************
changed: [192.168.232.100]
TASK [打印环境变量] *******************************************************************************************************************************************************************************************************************************************************
ok: [192.168.232.100] => {
"msg": "this linux os 192.168.232.100 env_key is env_value"
}
TASK [打印环境变量] *******************************************************************************************************************************************************************************************************************************************************
ok: [192.168.232.100] => {
"msg": {
"DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/0/bus",
"HOME": "/root",
"LANG": "en_US.UTF-8",
"LOGNAME": "root",
"PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin",
"PWD": "/root",
"SHELL": "/bin/bash",
"SHLVL": "0",
"SSH_CLIENT": "192.168.232.100 43140 22",
"SSH_CONNECTION": "192.168.232.100 43140 192.168.232.100 22",
"SSH_TTY": "/dev/pts/3",
"TERM": "xterm",
"USER": "root",
"XDG_RUNTIME_DIR": "/run/user/0",
"XDG_SESSION_CLASS": "user",
"XDG_SESSION_ID": "39",
"XDG_SESSION_TYPE": "tty",
"_": "/bin/sh"
}
}
PLAY RECAP ****************************************************************************************************************************************************************************************************************************************************************
192.168.232.100 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
标签:profile,shell,用户,ansible,设置,环境变量,bash,加载
From: https://www.cnblogs.com/anyux/p/18357920