From b687e5253cb1fd7a8268a87de40f13b6364cda81 Mon Sep 17 00:00:00 2001 From: xxx Date: Wed, 19 Jun 2024 11:28:45 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=8E=8B=E6=96=B0=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20240617-\344\275\234\344\270\232.md" | 1 - .../20240619-\344\275\234\344\270\232.md" | 115 ++++++++++ ...0619-Linux\345\237\272\347\241\200(19).md" | 201 ++++++++++++++++++ 3 files changed, 316 insertions(+), 1 deletion(-) create mode 100644 "\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240619-\344\275\234\344\270\232.md" create mode 100644 "\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240619-Linux\345\237\272\347\241\200(19).md" diff --git "a/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240617-\344\275\234\344\270\232.md" "b/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240617-\344\275\234\344\270\232.md" index 5d43db1..51d4829 100644 --- "a/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240617-\344\275\234\344\270\232.md" +++ "b/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240617-\344\275\234\344\270\232.md" @@ -78,7 +78,6 @@ ```bash 0,30 8,9 * * 1-5 touch a.txt - ``` 12. 每天的23:45分执行一次 diff --git "a/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240619-\344\275\234\344\270\232.md" "b/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240619-\344\275\234\344\270\232.md" new file mode 100644 index 0000000..ec319d1 --- /dev/null +++ "b/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240619-\344\275\234\344\270\232.md" @@ -0,0 +1,115 @@ +## 环境变量练习 + +### 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + + +```bash + +``` + +### 练习题 2: 显示`HOME`环境变量的值 + +* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。 + + +```bash + +``` + +### 练习题 3: 临时设置一个新的环境变量 + +* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 + + +```bash + +``` + +### 练习题 4: 显示新设置的环境变量 + +* 使用`echo`命令来显示`MY_AGE`的值。 + + +```bash +echo $MY_VARIABLE +``` + +### 练习题 5: 在新的shell会话中检查环境变量 + +* 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么? + +### 练习题 6: 修改`PATH`环境变量 + +* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 + + +```bash + +``` + +将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 + +``` + +``` + +### 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + + +```bash + +``` + +### 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + + +```bash + +``` + +如何让`MY_NAME`生效,并验证 + +``` + +``` + +### 练习题 9: 清理 + +* 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。 + + +```bash + +``` + +### 练习题 10: 修改默认器 + +* 使用`EDITOR`变量,修改你默认的编辑器为nano。 + + +```bash + +``` + +### 练习题 11: 修改语言 + +* 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。 + +``` + +``` + +- 使用`LANGUAGE`变量,让你的命令提示为中文 + +``` + +``` + diff --git "a/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240619-Linux\345\237\272\347\241\200(19).md" "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240619-Linux\345\237\272\347\241\200(19).md" new file mode 100644 index 0000000..6756aea --- /dev/null +++ "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240619-Linux\345\237\272\347\241\200(19).md" @@ -0,0 +1,201 @@ +## Linux基础 + +## 环境变量 + +理解和使用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 + + + -- Gitee From 53e23982bca67293e1b60a9d09b2ff54c44e465d Mon Sep 17 00:00:00 2001 From: xxx Date: Thu, 20 Jun 2024 16:49:35 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E7=8E=8B=E6=96=B0=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20240617-\344\275\234\344\270\232.md" | 74 +++++----- .../20240619-\344\275\234\344\270\232.md" | 50 ++++--- ...0620-Linux\345\237\272\347\241\200(20).md" | 134 ++++++++++++++++++ 3 files changed, 205 insertions(+), 53 deletions(-) create mode 100644 "\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240620-Linux\345\237\272\347\241\200(20).md" diff --git "a/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240617-\344\275\234\344\270\232.md" "b/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240617-\344\275\234\344\270\232.md" index 51d4829..e35fa7c 100644 --- "a/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240617-\344\275\234\344\270\232.md" +++ "b/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240617-\344\275\234\344\270\232.md" @@ -4,127 +4,127 @@ 1. 每天3:00执行一次 - ```bash +```bash 0 3 * * * touch ~/a.txt - ``` +``` 2. 每周六2:00执行 - ```bash +```bash 0 2 * * 6 touch a.txt - ``` +``` 3. 每周六1:05执行 - ```bash +```bash 5 1 * * 6 touch a.txt - ``` +``` 4. 每周六1:25执行 - ```bash +```bash 25 1 * * 6 touch a.txt - ``` +``` 5. 每天8:40执行 - ```bash +```bash 40 8 * * * touch a.txt - ``` +``` 6. 每天3:50执行 - ```bash +```bash 50 3 * * * touch a.txt - ``` +``` 7. 每周一到周五的3:40执行 - ```bash +```bash 40 3 * * 1-5 touch a.txt - ``` +``` 8. 每周一到周五的3:41开始,每10分钟执行一次 - ```bash +```bash */10 3:41-4:40 * * 1-5 touch a.txt - ``` +``` 9. 每天的10:31开始,每2小时执行一次 - ```bash +```bash 31 10 * * * touch a.txt - ``` +``` 10. 每周一到周三的9:30执行一次 - ```bash +```bash 30 9 * * 1-3 touch a.txt - ``` +``` 11. 每周一到周五的8:00,每周一到周五的9:00执行一次 - ```bash +```bash 0,30 8,9 * * 1-5 touch a.txt - ``` +``` 12. 每天的23:45分执行一次 - ```bash +```bash 45 23 * * * touch a.txt - ``` +``` 13. 每周三的23:45分执行一次 - ```bash +```bash 45 23 * * 3 touch a.txt - - ``` + +``` 14. 每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次 - ```bash +```bash */10 9:25-11:35,13:00-15:00 * * 1-5 touch a.txt - ``` +``` 15. 每周一到周五的8:30、8:50、9:30、10:00、10:30、11:00、11:30、13:30、14:00、14:30、5:00分别执行一次 - ```bash +```bash 30,50 8,9,10,11,13,14,15 * * 1-5 touch a.txt - ``` +``` 16. 每天16:00、10:00执行一次 - ```bash +```bash 00 10,16 * * * touch a.txt - ``` +``` 17. 每天8:10、16:00、21:00分别执行一次 - ```bash +```bash 10 8,16,21 * * * touch a.txt - ``` +``` 18. 每天7:47、8:00分别执行一次 - ```bash +```bash 47,00 7,8 * * * touch a.txt - ``` \ No newline at end of file +``` \ No newline at end of file diff --git "a/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240619-\344\275\234\344\270\232.md" "b/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240619-\344\275\234\344\270\232.md" index ec319d1..c421a5f 100644 --- "a/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240619-\344\275\234\344\270\232.md" +++ "b/\347\216\213\346\226\260\346\272\220/\344\275\234\344\270\232/20240619-\344\275\234\344\270\232.md" @@ -4,8 +4,12 @@ * 使用`printenv`或`env`命令来显示所有的环境变量。 - ```bash + printenv + + 或 + + env ``` @@ -13,8 +17,8 @@ * 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。 - ```bash + echo $HOME ``` @@ -22,8 +26,8 @@ * 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 - ```bash + export MY_AGE=18 ``` @@ -31,27 +35,33 @@ * 使用`echo`命令来显示`MY_AGE`的值。 - ```bash -echo $MY_VARIABLE + echo $MY_VARIABLE + ``` ### 练习题 5: 在新的shell会话中检查环境变量 * 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么? +``` + 不会看到任何输出,因为MY_AGE是在之前的shell会话中设置的,它不会自动传递到新的shell会话中。 + +``` + ### 练习题 6: 修改`PATH`环境变量 * 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 - ```bash + export PATH=$PATH:/home/yourusername ``` 将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 -``` +```bash + export PATH=/tmp:$PATH ``` @@ -59,8 +69,8 @@ echo $MY_VARIABLE * 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 - ```bash + echo $PATH ``` @@ -70,14 +80,16 @@ echo $MY_VARIABLE 例如,对于bash shell,你可以使用: - ```bash + echo 'export MY_NAME="奥德彪"' >> ~/.bashrc ``` 如何让`MY_NAME`生效,并验证 -``` +```bash + source ~/.bashrc + echo $MY_NAME ``` @@ -85,17 +97,22 @@ echo $MY_VARIABLE * 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。 - ```bash + 清除MY_AGE: + unset MY_AGE + + 清除PATH的修改: + + export PATH=$(echo $PATH | sed 's:/tmp::; s:/home/yourusername::') ``` ### 练习题 10: 修改默认器 * 使用`EDITOR`变量,修改你默认的编辑器为nano。 - ```bash + export EDITOR=nano ``` @@ -103,13 +120,14 @@ echo $MY_VARIABLE * 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。 -``` +```bash + export LANG=zh_CN.UTF-8 ``` - 使用`LANGUAGE`变量,让你的命令提示为中文 -``` - -``` +```bash + export LANGUAGE=zh_CN:zh +``` \ No newline at end of file diff --git "a/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240620-Linux\345\237\272\347\241\200(20).md" "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240620-Linux\345\237\272\347\241\200(20).md" new file mode 100644 index 0000000..34d97c2 --- /dev/null +++ "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240620-Linux\345\237\272\347\241\200(20).md" @@ -0,0 +1,134 @@ +## Linux基础 + +## 进程管理 + +进程管理是 Linux 系统管理的重要组成部分。以下是关于 Linux 进程管理的核心知识点、常用场景和示例: + +### 1. 进程的基本概念 + +- 进程(Process):正在运行的一个程序的实例。 +- 父进程(Parent Process):创建或启动新进程的进程。 +- 子进程(Child Process):被父进程创建或启动的进程。 +- 进程 ID(Process ID,PID):进程的唯一标识符。 +- 进程组(Process Group):一组相关进程的集合。 + +### 2. 进程的状态 + +- 运行(Running):进程正在执行或正在等待 CPU 时间片。 +- 暂停(Suspended):进程因 I/O 操作或其他原因暂停执行。 +- 停止(Stopped):进程接收到 SIGSTOP、SIGTSTP 或其他信号时停止执行。 +- 僵死(Zombie):进程已终止,但父进程尚未读取其终止状态。 +- 不可中断(Uninterruptible):进程正在执行 I/O 操作,无法被中断。 + +### 3. 进程管理命令 + +- **3.1 查看进程:ps、top、htop** + - ps:列出当前系统中的进程。 + + - ps aux:显示所有进程,包括已终止的进程。 + - ps -ef:显示所有进程,包括父进程和子进程。 + - top:动态显示系统状态和进程信息。 + + - top:显示当前系统状态和所有进程。 + - top -u username:显示指定用户的进程。 + - htop:更加用户友好的进程查看工具。 + + - htop:显示当前系统状态和所有进程。 + +- **3.2 进程控制:kill、pkill、pgrep** + - kill:发送信号给进程,控制进程的行为。 + + - kill PID:发送 SIGTERM 信号,请求进程正常终止。 + - kill -9 PID:发送 SIGKILL 信号,强制终止进程。 + - pkill:根据进程名称发送信号。 + + - pkill -f pattern:根据进程名称模式发送信号。 + - pgrep:根据进程名称查找进程 ID。 + + - pgrep -fl pattern:根据进程名称模式查找进程 ID。 + +- **3.3 进程优先级和调度:nice、renice、chrt** + - nice:设置进程的优先级。 + + - nice -n value command:为新进程设置优先级。 + - renice:更改进程的优先级。 + + - renice -n value -p PID:更改指定进程的优先级。 + - chrt:更改进程的调度策略和优先级。 + + - chrt -p -o value -p PID:更改指定进程的调度策略和优先级。 + +- **3.4 进程间通信:pipe、fifo、socket** + - 管道(Pipe):将一个进程的输出连接到另一个进程的输入。 + - 命名管道(FIFO):在文件系统中创建一个特殊的文件,用于进程间通信。 + - 套接字(Socket):在网络上进行进程间通信。 + +- **3.5 进程会话和会话组:setsid、setsid** + - setsid:创建一个新的会话和会话组。 + - setsid:将进程脱离终端控制。 + +### 4. 进程管理示例 + +4.1 查看当前系统中的所有进程 + +```bash + ps aux + +``` + +4.2 查看指定用户的进程 + +```bash + ps -u username + +``` + +4.3 动态显示系统状态和进程信息 + +```bash + top + +``` + +4.4 根据进程名称查找进程 ID + +```bash + pgrep -fl pattern + +``` + +4.5 为新进程设置优先级 + +```bash + nice -n value command + +``` + +4.6 更改指定进程的优先级 + +```bash + renice -n value -p PID + +``` + +4.7 创建一个新的会话和会话组 + +```bash + setsid command + +``` + +### 5. 常用进程管理命令 + +- ps:列出当前系统中的进程。 +- top:动态显示系统状态和进程信息。 +- htop:更加用户友好的进程查看工具。 +- kill:发送信号给进程,控制进程的行为。 +- pkill:根据进程名称发送信号。 +- pgrep:根据进程名称查找进程 ID。 +- nice:设置进程的优先级。 +- renice:更改进程的优先级。 +- chrt:更改进程的调度策略和优先级。 + +### 6. 进程管理总结 +了解进程的基本概念和状态,掌握常用的进程管理命令,如 ps、top、htop、kill、pkill、pgrep、nice、renice 和 chrt,能够有效地管理和控制 Linux 系统中的进程。 \ No newline at end of file -- Gitee From e6897ef8c911f14d314789c608f1710874efac5d Mon Sep 17 00:00:00 2001 From: xxx Date: Sat, 22 Jun 2024 10:50:09 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=8E=8B=E6=96=B0=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0530-Linux\345\237\272\347\241\200(10).md" | 1 - ...0622-Linux\345\237\272\347\241\200(21).md" | 63 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 "\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240622-Linux\345\237\272\347\241\200(21).md" diff --git "a/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240530-Linux\345\237\272\347\241\200(10).md" "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240530-Linux\345\237\272\347\241\200(10).md" index 2857c69..57dd692 100644 --- "a/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240530-Linux\345\237\272\347\241\200(10).md" +++ "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240530-Linux\345\237\272\347\241\200(10).md" @@ -46,7 +46,6 @@ join -t ':' -1 1 -2 1 文件1 文件2 ``` - - 使用语法:`join [选项] 文件1 文件2` diff --git "a/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240622-Linux\345\237\272\347\241\200(21).md" "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240622-Linux\345\237\272\347\241\200(21).md" new file mode 100644 index 0000000..e1f454d --- /dev/null +++ "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240622-Linux\345\237\272\347\241\200(21).md" @@ -0,0 +1,63 @@ +## Linux基础 + +## 服务 + +Linux服务是一种在后台运行的长期运行的程序,可以提供特定的功能或服务。 + +### Systemd + +Systemd是Linux系统中最常用的服务管理器,可以管理用户 sessions、系统和服务。Systemd使用单一的进程树来管理所有服务,可以提高系统的启动速度和性能。 + +- systemctl:Systemd的命令行界面。 +- systemctl start:启动服务。 +- systemctl stop:停止服务。 +- systemctl restart:重启服务。 +- systemctl reload:重新加载服务配置文件。 +- systemctl status:显示服务状态。 +- systemctl list-units:列出所有服务。 +- systemctl enable:在系统启动时启用服务。 +- systemctl disable:在系统启动时禁用服务。 + +示例:启动Apache服务 + +``` +systemctl start httpd +``` + +### SysVinit + +SysVinit是早期Linux系统中使用的服务管理器,使用多个进程来管理服务。 + +- service:SysVinit的命令行界面。 +- service start:启动服务。 +- service stop:停止服务。 +- service restart:重启服务。 +- service reload:重新加载服务配置文件。 +- service status:显示服务状态。 +- service --status-all:列出所有服务。 +- chkconfig:在系统启动时启用或禁用服务。 + +示例:启动Apache服务 + +``` +service httpd start +``` + +### Upstart + +Upstart是一种事件驱动的服务管理器,用于Ubuntu系统。 + +- initctl:Upstart的命令行界面。 +- initctl start:启动服务。 +- initctl stop:停止服务。 +- initctl restart:重启服务。 +- initctl reload:重新加载服务配置文件。 +- initctl status:显示服务状态。 +- initctl list:列出所有服务。 +- initctl emit:触发Upstart事件。 + +示例:启动Apache服务 + +``` +initctl start httpd +``` \ No newline at end of file -- Gitee From 97216ee7f2ec997bb77ae9b3742186508a20f203 Mon Sep 17 00:00:00 2001 From: xxx Date: Sat, 22 Jun 2024 11:25:09 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=8E=8B=E6=96=B0=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0620-Linux\345\237\272\347\241\200(20).md" | 161 ++++++------------ 1 file changed, 55 insertions(+), 106 deletions(-) diff --git "a/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240620-Linux\345\237\272\347\241\200(20).md" "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240620-Linux\345\237\272\347\241\200(20).md" index 34d97c2..bc99c0b 100644 --- "a/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240620-Linux\345\237\272\347\241\200(20).md" +++ "b/\347\216\213\346\226\260\346\272\220/\347\254\224\350\256\260/20240620-Linux\345\237\272\347\241\200(20).md" @@ -2,133 +2,82 @@ ## 进程管理 -进程管理是 Linux 系统管理的重要组成部分。以下是关于 Linux 进程管理的核心知识点、常用场景和示例: +Linux进程管理是Linux系统操作中的关键部分,涉及到进程的创建、监控、调度和终止等方面。 -### 1. 进程的基本概念 +### 1. 进程概念 -- 进程(Process):正在运行的一个程序的实例。 -- 父进程(Parent Process):创建或启动新进程的进程。 -- 子进程(Child Process):被父进程创建或启动的进程。 -- 进程 ID(Process ID,PID):进程的唯一标识符。 -- 进程组(Process Group):一组相关进程的集合。 +- 进程:是程序在执行过程中创建的一个实例,它包含程序代码以及执行这些代码所需的所有资源,如内存、文件句柄等。 +- 线程:是进程内的一个执行流,是处理器调度的基本单位。 -### 2. 进程的状态 +### 2. 进程管理工具 -- 运行(Running):进程正在执行或正在等待 CPU 时间片。 -- 暂停(Suspended):进程因 I/O 操作或其他原因暂停执行。 -- 停止(Stopped):进程接收到 SIGSTOP、SIGTSTP 或其他信号时停止执行。 -- 僵死(Zombie):进程已终止,但父进程尚未读取其终止状态。 -- 不可中断(Uninterruptible):进程正在执行 I/O 操作,无法被中断。 +- ps:查看当前系统进程。 +- top:动态显示当前活跃的进程。 +- htop:提供了更丰富的进程视图,是top的增强版本。 +- pstree:以树状图的形式显示进程。 +- strace:跟踪进程执行时的系统调用和接收到的信号。 -### 3. 进程管理命令 +### 3. 进程状态 -- **3.1 查看进程:ps、top、htop** - - ps:列出当前系统中的进程。 +- R(Running):正在运行或可运行状态。 +- S(Sleeping):处于睡眠状态,等待某个事件或资源。 +- D(Uninterruptible Sleep):不可中断的睡眠状态。 +- T(Terminated):已终止,但尚未被父进程回收。 +- Z(Zombie):僵尸进程,进程已经结束,但PCB还在。 - - ps aux:显示所有进程,包括已终止的进程。 - - ps -ef:显示所有进程,包括父进程和子进程。 - - top:动态显示系统状态和进程信息。 - - - top:显示当前系统状态和所有进程。 - - top -u username:显示指定用户的进程。 - - htop:更加用户友好的进程查看工具。 - - - htop:显示当前系统状态和所有进程。 - -- **3.2 进程控制:kill、pkill、pgrep** - - kill:发送信号给进程,控制进程的行为。 - - - kill PID:发送 SIGTERM 信号,请求进程正常终止。 - - kill -9 PID:发送 SIGKILL 信号,强制终止进程。 - - pkill:根据进程名称发送信号。 - - - pkill -f pattern:根据进程名称模式发送信号。 - - pgrep:根据进程名称查找进程 ID。 - - - pgrep -fl pattern:根据进程名称模式查找进程 ID。 - -- **3.3 进程优先级和调度:nice、renice、chrt** - - nice:设置进程的优先级。 - - - nice -n value command:为新进程设置优先级。 - - renice:更改进程的优先级。 - - - renice -n value -p PID:更改指定进程的优先级。 - - chrt:更改进程的调度策略和优先级。 - - - chrt -p -o value -p PID:更改指定进程的调度策略和优先级。 - -- **3.4 进程间通信:pipe、fifo、socket** - - 管道(Pipe):将一个进程的输出连接到另一个进程的输入。 - - 命名管道(FIFO):在文件系统中创建一个特殊的文件,用于进程间通信。 - - 套接字(Socket):在网络上进行进程间通信。 - -- **3.5 进程会话和会话组:setsid、setsid** - - setsid:创建一个新的会话和会话组。 - - setsid:将进程脱离终端控制。 - -### 4. 进程管理示例 - -4.1 查看当前系统中的所有进程 - -```bash - ps aux - -``` - -4.2 查看指定用户的进程 - -```bash - ps -u username - -``` - -4.3 动态显示系统状态和进程信息 +### 5. 常用进程管理命令 -```bash - top +- ps:列出当前系统中的进程。 +- ps aux:列出所有进程的详细信息。 +- ps -ef:以全格式列出所有进程。 +- top:动态显示系统状态和进程信息。 +- htop:更加用户友好的进程查看工具。 +- kill:发送信号给进程,控制进程的行为。 +- pkill:根据进程名称发送信号。 +- pgrep:根据进程名称查找进程 ID。 +- nice:设置进程的优先级。 +- renice:更改进程的优先级。 +- chrt:更改进程的调度策略和优先级。 -``` +### 6. 进程创建 -4.4 根据进程名称查找进程 ID +- fork():创建一个进程的副本。 +- exec():用新的程序替换当前进程的代码段。 +- clone():类似于fork(),但允许指定更多的选项。 -```bash - pgrep -fl pattern +### 7. 进程终止 -``` +- 父进程可以通过调用wait()或waitpid()来回收子进程。 +- 进程结束时,会变成僵尸进程(Z状态),直到父进程调用wait()。 -4.5 为新进程设置优先级 +### 8. 进程优先级 -```bash - nice -n value command +- nice:调整进程的优先级。 +- renice:修改现有进程的优先级。 -``` +### 9. 进程调度 -4.6 更改指定进程的优先级 +- Linux使用基于优先级的调度算法来决定哪个进程将获得CPU时间。 +- 调度策略包括:FIFO(先入先出)、RR(轮转)、CFS(完全公平调度)等。 -```bash - renice -n value -p PID +### 10. 守护进程 -``` +- 守护进程是运行在后台的进程,通常在系统启动时启动。 +- 使用systemctl来管理系统守护进程。 -4.7 创建一个新的会话和会话组 +### 11. 常见操作 -```bash - setsid command +- 查看进程:ps -ef | grep process_name +- 杀死进程:kill -9 process_id +- 后台运行进程:在命令后添加& +- 将后台进程转为前台:使用fg命令。 +- 将前台进程转为后台:按Ctrl + Z,然后使用bg命令。 -``` +### 12. 进程监控 -### 5. 常用进程管理命令 +- 使用top或htop来实时监控进程资源使用情况。 +- 使用vmstat、iostat等工具来监控系统性能。 -- ps:列出当前系统中的进程。 -- top:动态显示系统状态和进程信息。 -- htop:更加用户友好的进程查看工具。 -- kill:发送信号给进程,控制进程的行为。 -- pkill:根据进程名称发送信号。 -- pgrep:根据进程名称查找进程 ID。 -- nice:设置进程的优先级。 -- renice:更改进程的优先级。 -- chrt:更改进程的调度策略和优先级。 +### 13. 资源限制 -### 6. 进程管理总结 -了解进程的基本概念和状态,掌握常用的进程管理命令,如 ps、top、htop、kill、pkill、pgrep、nice、renice 和 chrt,能够有效地管理和控制 Linux 系统中的进程。 \ No newline at end of file +- 使用ulimit来限制进程资源,如文件大小、进程数等。 \ No newline at end of file -- Gitee