diff --git "a/\351\242\234\351\224\220\346\225\217/20240619\347\254\224\350\256\260.md" "b/\351\242\234\351\224\220\346\225\217/20240619\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..f6416408a9dc981dd82dd87da75f1960fdd7760d --- /dev/null +++ "b/\351\242\234\351\224\220\346\225\217/20240619\347\254\224\350\256\260.md" @@ -0,0 +1,199 @@ +## 环境变量 + +理解和使用Linux环境变量对于管理和配置系统至关重要。以下是关键的知识点、常用场景以及示例的综合整理: + +### 1. 环境变量的类型和作用 + +- **用户级别环境变量**: + - 存储在用户家目录的个人配置文件中,例如 `~/.bashrc`、`~/.profile`。 + - 用于定义**用户个性化**的Shell设置,如别名、路径等。针对不同用户独立设置 + +- **系统级别环境变量**: + - 存储在系统范围的配置文件中,如 `/etc/environment`、`/etc/profile` 。/etc/profile.d目录 + - 为**所有用户和系统服务**提供全局的环境设置。java_home、python + +### 2. 环境变量的加载顺序和文件 + +- **系统启动加载**:/etc/environment ,一开源就加载,初始化 + +- **登录Shell加载顺序**: + - 首先加载 `/etc/profile`,然后根据用户登录方式加载 `~/.profile`(存在性依次加载)。 + - 非登录shell: su 切换用户 等 source + +- **交互式Shell加载顺序**: + - 加载 `~/.bashrc` 或类似文件,用于设置用户个性化的Shell环境。 + - 不同的shell加载不同的文件,bash才加载.bashrc,zsh加载.zshrc + - 交互式:提供命令行窗口,非交互式:直接写在脚本里 +- **总结来说** + - 配置文件的理论加载顺序通常是 `/etc/environment` > `/etc/profile` > `~/.profile` > `~/.bashrc`。【实验】 + +### 3. 设置环境变量的方法 + +​ 设置变量的位置:命令行(临时),脚本文件(永久) + +#### 3.1 临时设置环境变量:临时变量(局部),临时环境变量(全部) + +​ 可以使用 `export` 命令来临时设置一个环境变量,例如: + +```bash +export MY_VAR="value" # export 变量名=值 环境变量是全局的,整个环境有效 +MY_VAR="value" # 少了export 就是临时变量,不是全局的 +``` + +​ 这种设置只在当前Shell会话中有效,关闭Shell会话后会失效。 + +#### 3.2 永久设置环境变量: + +​ **用户级别的** : 编辑用户的 `~/.bashrc` 或 `~/.profile` 文件,并添加如下行: + +```bash +export MY_VAR="value" +``` + +​ 保存文件后,新的设置会在下次登录时生效。 + +​ **系统级别的:** 编辑 `/etc/environment` 或 /etc/profile文件,并添加类似以下行: + +```plaintext +MY_VAR="value" +``` + +这里不需要使用 `export` 命令。保存文件后,变量会在系统启动时生效。 + +#### 3.3 环境变量的设置和使用示例 + +3.1 设置路径变量(PATH) + +```bash +# 在 ~/.bashrc 中添加 +export PATH=$PATH:/path/to/your/scripts +``` + +3.2 定义Java环境变量(JAVA_HOME) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 +export PATH=$JAVA_HOME/bin:$PATH +``` + +3.3 设置代理服务器(HTTP_PROXY、HTTPS_PROXY) + +```bash +# 在 ~/.bashrc 中添加 +export HTTP_PROXY=http://proxy.example.com:8080 +export HTTPS_PROXY=http://proxy.example.com:8080 +``` + +3.4 配置编辑器(EDITOR) + +```bash +# 在 ~/.bashrc 中添加 +export EDITOR=/usr/bin/vim +``` + +3.5 设置语言和地区(LANG、LC_系列变量) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +``` + +3.6 自定义命令别名(alias) + +```bash +# 在 ~/.bashrc 中添加 +alias ll='ls -alF' +alias grep='grep --color=auto' +``` + +3.7 设置临时环境变量 + +```bash +# 临时设置变量 +export MY_VAR="value" +``` + +### 4. 常用环境变量 + +打印所有环境变量: + +```bash +printenv +#或 +env +``` + +**系统级** + +* `PATH` 可执行文件的搜索路径 +* `LANG` 定义系统的语言环境和字符集, export LANG=zh_CN.utf8,编辑文件不乱码 +* `LANGUAGE` 用于设置消息语言的优先级 ,提示语言为中文 +* `EDITOR` 默认文本编辑器 editor + +**用户级** + +* **`HOME`** :当前用户的主目录。 +* **`USER`**:当前用户名。 +* **`UID`**:当前用户的用户ID。 +* **`SHELL`**:当前用户的默认Shell。 + +### 5. 临时变量与环境变量 + +定义一个变量时,在变量名前加了export关键字,就是环境变量,作用域是全局环境子子进程中也有效,否则就是临时变量,只在当前脚本文件或shell中有效。 + +命令行示例: + +```bash +MY_NAME="张三" # 临时变量(局部) +echo $MY_NAME +bash -c 'echo $MY_NAME' +# 什么结果?对比下面的效果 + +export MY_NAME="张三" # 临时变量(全局) +echo $MY_NAME +bash -c 'echo $MY_NAME' # 子进程 +# 看下效果 +``` + + + +脚本文件示例 : + +`test1.sh` + +```bash +#!/bin/bash +MY_NAME="张三" # 前面加上export再试一次 +echo "test:我的名字是:$MY_NAME" +./subscript.sh +``` + +`test2.sh`: + +```bash +#!/bin/bash +echo "test2:你的名字是: $MY_NAME" +``` + +**临时变量**:在脚本中定义但不导出的变量仅在脚本执行期间有效,不会影响其他 shell 会话或子进程。 + +**环境变量**:使用 `export` 导出的变量在当前 shell 会话和所有子进程中都有效。 + +### 6. 总结: + +### 4.1 分类 + +#### 按生命周期分 + +- 永久环境变量 写在指定类型的配置文件,永不失效 ~/.bashrc /etc/profile.d/xxx.sh +- 临时环境变量 临时使用export 命令设置的环境变量 退出终端即失效 + +#### 按作用域分 + +* 系统级环境变量 对所有用户生效 /etc/profile.d/xxx.sh +* 用户级环境变量 只对当前用户生效 ~/.bashrc + + + diff --git "a/\351\242\234\351\224\220\346\225\217/20240620\347\254\224\350\256\260.md" "b/\351\242\234\351\224\220\346\225\217/20240620\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..62572a567eb7e4cff4c33858fce8ac7223f058ac --- /dev/null +++ "b/\351\242\234\351\224\220\346\225\217/20240620\347\254\224\350\256\260.md" @@ -0,0 +1,65 @@ +## 进程管理与服务管理 + +#### 一、进程管理 + +1. ##### `ps` 命令 + + `ps `aux 查看所有进程 + +2. ##### `pstree` 命令 + + 以可视化方式显示进程 + +3. ##### `pidof` 命令 + + `pidof` 服务名 查看 该服务的进程号 + + `eg:pidof nginx ` + +4. ##### `pgrep` 命令 + + 查看进程号 + + pgrep -u 用户 服务 + + eg:pgrep -u root nginx + +5. ##### `top `命令:实时查看 + +6. ##### `Htop` 命令:实时查看,搜索、过滤,kill,排序,文字图形 + +7. ##### kill 命令:结束进程 + + 1. kill -9 强制删除进程 + 2. kill -15 安全删除进程 + +8. ##### `killall `命令:删除全部进程 + + killall nginx + +9. ##### `pkill `命令:删除全部进程 + + pkill -9 nginx + +10. ##### `fg,bg `切换前后台运行 + + 1. fg :切换后台 + - 要执行的命令 & + - Ctrl+z + - bg %编号 + 2. jobs :查看后台运行状态 + 3. bg:切换前台 + - fg %编号 + 4. Ctrl+C :终止该前台进程的执行 + +#### 二、服务管理 + +1. 启动:start +2. 停止:stop +3. 重启:restart +4. 重加载配置:reload +5. 开机自启用:enable + +systemctl 命令 服务名 eg:systemctl start nginx 启动nginx + +service 服务名 命令 eg:service nginx start 启动nginx \ No newline at end of file