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 5d43db1b291106c88a0dc4de63981f43b0196fbe..e35fa7cf7bd7240eba43e8b035a6b0739edda203 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,128 +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" new file mode 100644 index 0000000000000000000000000000000000000000..c421a5fc152ec408c29e6752f5ae54b93e835114 --- /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,133 @@ +## 环境变量练习 + +### 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + +```bash + printenv + + 或 + + env + +``` + +### 练习题 2: 显示`HOME`环境变量的值 + +* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。 + +```bash + echo $HOME + +``` + +### 练习题 3: 临时设置一个新的环境变量 + +* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 + +```bash + export MY_AGE=18 + +``` + +### 练习题 4: 显示新设置的环境变量 + +* 使用`echo`命令来显示`MY_AGE`的值。 + +```bash + 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 + +``` + +### 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + +```bash + echo $PATH + +``` + +### 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + +```bash + echo 'export MY_NAME="奥德彪"' >> ~/.bashrc + +``` + +如何让`MY_NAME`生效,并验证 + +```bash + source ~/.bashrc + echo $MY_NAME + +``` + +### 练习题 9: 清理 + +* 清除你之前设置的`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 + +``` + +### 练习题 11: 修改语言 + +* 使用`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/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 2857c69aa9cfbe58273cd53126a0cb2f29c52699..57dd692dc85d119673e7004c1f97100e7d9eedd5 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/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 0000000000000000000000000000000000000000..6756aea39a4c0277e0878371be17d0e1f9f78212 --- /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 + + + 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 0000000000000000000000000000000000000000..bc99c0becac322167d626f16cad6dc4d0c95a53b --- /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,83 @@ +## Linux基础 + +## 进程管理 + +Linux进程管理是Linux系统操作中的关键部分,涉及到进程的创建、监控、调度和终止等方面。 + +### 1. 进程概念 + +- 进程:是程序在执行过程中创建的一个实例,它包含程序代码以及执行这些代码所需的所有资源,如内存、文件句柄等。 +- 线程:是进程内的一个执行流,是处理器调度的基本单位。 + +### 2. 进程管理工具 + +- ps:查看当前系统进程。 +- top:动态显示当前活跃的进程。 +- htop:提供了更丰富的进程视图,是top的增强版本。 +- pstree:以树状图的形式显示进程。 +- strace:跟踪进程执行时的系统调用和接收到的信号。 + +### 3. 进程状态 + +- R(Running):正在运行或可运行状态。 +- S(Sleeping):处于睡眠状态,等待某个事件或资源。 +- D(Uninterruptible Sleep):不可中断的睡眠状态。 +- T(Terminated):已终止,但尚未被父进程回收。 +- Z(Zombie):僵尸进程,进程已经结束,但PCB还在。 + +### 5. 常用进程管理命令 + +- ps:列出当前系统中的进程。 +- ps aux:列出所有进程的详细信息。 +- ps -ef:以全格式列出所有进程。 +- top:动态显示系统状态和进程信息。 +- htop:更加用户友好的进程查看工具。 +- kill:发送信号给进程,控制进程的行为。 +- pkill:根据进程名称发送信号。 +- pgrep:根据进程名称查找进程 ID。 +- nice:设置进程的优先级。 +- renice:更改进程的优先级。 +- chrt:更改进程的调度策略和优先级。 + +### 6. 进程创建 + +- fork():创建一个进程的副本。 +- exec():用新的程序替换当前进程的代码段。 +- clone():类似于fork(),但允许指定更多的选项。 + +### 7. 进程终止 + +- 父进程可以通过调用wait()或waitpid()来回收子进程。 +- 进程结束时,会变成僵尸进程(Z状态),直到父进程调用wait()。 + +### 8. 进程优先级 + +- nice:调整进程的优先级。 +- renice:修改现有进程的优先级。 + +### 9. 进程调度 + +- Linux使用基于优先级的调度算法来决定哪个进程将获得CPU时间。 +- 调度策略包括:FIFO(先入先出)、RR(轮转)、CFS(完全公平调度)等。 + +### 10. 守护进程 + +- 守护进程是运行在后台的进程,通常在系统启动时启动。 +- 使用systemctl来管理系统守护进程。 + +### 11. 常见操作 + +- 查看进程:ps -ef | grep process_name +- 杀死进程:kill -9 process_id +- 后台运行进程:在命令后添加& +- 将后台进程转为前台:使用fg命令。 +- 将前台进程转为后台:按Ctrl + Z,然后使用bg命令。 + +### 12. 进程监控 + +- 使用top或htop来实时监控进程资源使用情况。 +- 使用vmstat、iostat等工具来监控系统性能。 + +### 13. 资源限制 + +- 使用ulimit来限制进程资源,如文件大小、进程数等。 \ No newline at end of file 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 0000000000000000000000000000000000000000..e1f454d0fb3c69ab7e877b5208a9b1bc506fa7f4 --- /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