diff --git "a/18\345\217\244\347\216\211\350\220\215/20240601--awk\345\221\275\344\273\244\347\232\204\347\224\250\346\263\225.md" "b/18\345\217\244\347\216\211\350\220\215/20240601--awk\345\221\275\344\273\244\347\232\204\347\224\250\346\263\225.md"
new file mode 100644
index 0000000000000000000000000000000000000000..5c9e9e08c52d179344861eb2b12f75c5a9e92b94
--- /dev/null
+++ "b/18\345\217\244\347\216\211\350\220\215/20240601--awk\345\221\275\344\273\244\347\232\204\347\224\250\346\263\225.md"
@@ -0,0 +1,82 @@
+
+
+# awk命令的用法
+
+#### 常用的模式:
+
+1. 正则表达式:
+ - `/regexp/`:匹配包含正则表达式 `regexp` 的行。
+ - 例如:`/Tom/` 匹配包含 "Tom" 的行。
+2. 比较表达式:
+ - 使用字段和运算符(如 `<`, `>`, `==`, `!=`, `<=`, `>=`)进行比较。
+ - 例如:`$3 > 80` 匹配第三个字段大于80的行。
+3. 范围模式:
+ - `pattern1, pattern2`:匹配从满足 `pattern1` 的行开始,到满足 `pattern2` 的行(包括该行)结束的所有行。
+ - 例如:`/start/,/end/` 匹配从包含 "start" 的行开始,到包含 "end" 的行结束的所有行。
+4. BEGIN 和 END:
+ - `BEGIN { action }`:在读取任何输入行之前执行的动作。
+ - `END { action }`:在读取完所有输入行之后执行的动作。
+ - 虽然它们不是真正的模式,但 `BEGIN` 和 `END` 通常与模式-动作对一起使用。
+5. 空模式:
+ - 如果不提供模式,则默认对所有输入行执行动作。这通常用于简单的打印或处理每一行。
+6. 逻辑表达式:
+ - 使用逻辑运算符(如 `&&`(和)、`||`(或)、`!`(非))组合多个模式。
+ - 例如:`$3 > 80 && $2 == "math"` 匹配第三个字段大于80且第二个字段为 "math" 的行。
+7. 内置变量:
+ - `awk` 有一些内置变量,如 `NR`(当前记录号)、`NF`(当前字段数)、`FS`(字段分隔符)等。这些变量也可以用于模式。
+ - 例如:`NR == 1` 匹配第一行。
+
+
+
+#### 使用内置变量
+
+`awk` 提供了一些内置变量:
+
+- `$0`:当前行的内容
+- `$1, $2, ...`:当前行的第N个字段
+- `NR`:当前行号
+- `NF`:当前行的字段数
+
+打印文件中的行号和每行的字段数:
+
+```bash
+awk '{print NR, NF, $0}' example.txt
+```
+
+#### 打印指定列
+
+从文件`example.txt`中打印第二列和第四列:
+
+```bash
+awk '{print $2, $4}' example.txt
+# 默认使用空格作为输出字段分隔符(OFS)
+
+awk '{OFS=","} {print $1, $4}' test.txt
+# 指定,号为打印连接符
+```
+
+### 设置字段分隔符:
+
+```bash
+awk -F, '{print $1, $3}' example.csv #以逗号为分隔符读取CSV文件,并打印第一列和第三列
+```
+
+### 计算求和与平均值:
+
+```bash
+awk '{sum += $2} END {print "Sum:", sum; print "Average:", sum/NR}' example.txt
+#计算第二列的和和平均值
+```
+
+
+
+### 组合使用
+
+`awk` 可以与其他命令组合使用,实现更复杂的任务。例如,结合`grep`和`awk`提取特定行并处理:
+
+```bash
+grep "pattern" file.txt | awk '{print $2, $3}'
+```
+
+
+
diff --git "a/18\345\217\244\347\216\211\350\220\215/20240604--awk\345\221\275\344\273\244\347\232\204\347\224\250\346\263\2252.md" "b/18\345\217\244\347\216\211\350\220\215/20240604--awk\345\221\275\344\273\244\347\232\204\347\224\250\346\263\2252.md"
new file mode 100644
index 0000000000000000000000000000000000000000..b2eee661f7eafe0338c12683c3f3b26a8986084f
--- /dev/null
+++ "b/18\345\217\244\347\216\211\350\220\215/20240604--awk\345\221\275\344\273\244\347\232\204\347\224\250\346\263\2252.md"
@@ -0,0 +1,126 @@
+# awk命令的用法
+
+### AWK命令的结构
+
+一般情况下,awk命令的基本结构如下:
+
+```bash
+awk [选项] '脚本' 文件
+#例:
+awk -F, '{print}' t.txt
+```
+
+
+
+#### AWK 脚本由一个或多个语句块组成,每个语句块可以是以下三种之一:
+
+1. 开始语句块:在程序开始时执行 `BEGIN { print "start" }`
+2. 通用语句块:逐行处理文件内容 `pattern { commands }`,
+3. 结束语句块:在程序结束时执行 `END { print "end" }`
+
+```bash
+#例:
+awk -F, 'BEGIN { print "----开始-----" } $2>=80 { print } END { print "----结束-----" }
+' t.txt
+```
+
+
+
+### awk中的常用选项:
+
+- -F:指定输入字段分隔符(默认是以空格 \t 等分隔符)
+
+```bash
+例:awk -F, { print } t.txt #将逗号设置为字段分隔符
+```
+
+- `-v`:赋值外部变量。例如,`-v var=value`。 min=60
+- `-f`:指定 awk 脚本文件。例如,`-f script.awk`
+- `-W`:控制警告和其他运行时选项。例如,`-W version` 用于显示版本信息。
+
+#### Awk 中的常用模式(pattern)
+
+- 匹配正则表达式
+ - `/pattern/`:匹配包含指定模式的行。例如,`/error/` 匹配所有包含“error”的行。
+ - $2 ~ /pattern/ :匹配第2列包含关键字pattern的行,
+ - $2 !~ /pattern/:匹配第2列不包含关键字pattern的行
+
+- 比较运算符
+ - 匹配第 n 行。例如,`NR == 1` 匹配第一行。
+ - `==`(等于),例$2 == "张三" 匹配第二列等于张三的行
+ - `!=`(不等于)
+ - `<`(小于)
+ - `<=`(小于等于)
+ - `>`(大于)
+ - `>=`(大于等于)
+
+- 逻辑运算符
+ - `NR >= m && NR <= n`:匹配第 m 到第 n 行。例如,`NR >= 2 && NR <= 4` 匹配第2到第4行。
+ - `&&`:逻辑与(AND)
+ - `||`:逻辑或(OR)
+ - `!`:逻辑非(NOT)
+
+- 三元运算符
+ - 条件运算符 `? :`
+ - grade = ($2 >= 60 ? "及格" : "不及格")
+
+#### Awk 中的常用动作(action)
+
+- `print`:打印指定内容。例如,`print $1` 打印第一字段。
+
+- `printf`:格式化输出
+
+- 例如,`printf "%s\n", $1` 以格式化方式打印第一字段。
+
+ - 语法:
+
+ ```bash
+ printf (format, expression1, expression2, ...)
+ # format 是一个包含格式说明符的字符串。
+ # expression1, expression2, ... 是要格式化并插入到 format 字符串中的表达式。
+ ```
+
+- `{}`:包含一个或多个动作的块。例如,`{ print $1; print $2 }`。
+
+ - 用;号分隔多个动作语句
+ - 如果每个语句在单独的行上,;号可以省略
+
+- 常用的格式说明符
+
+ - `%s`:字符串 String
+ - `%d`:有符号十进制整数
+ - `%f`:浮点数 %.2f
+
+#### Awk 中的特殊变量
+
+- `NR`(Numbers of Rows):表示记录的数量(当前行号)。
+- `NF`(Number of flied ):表示当前行的字段数量。
+ - `$NF`表示最后一列
+
+- `$0`:包含当前行的文本内容,即一整行内容。有时候也省略
+- `$1`、`$2`:表示当前行的第1个、第2个字段的内容,以次类推。
+- `FS`( File split):输入时的域分割符。效果同-F选项
+- `OFS`(out File split):输出时的域分割符。
+
+# 作业:
+
+1. 只显示/etc/passwd的账户
+2. 只显示/etc/passwd的账户和对应的shell,并在第一行上添加列名用户制表符shell,最后一行添加----------------
+3. 搜索/etc/passwd有关键字root的所有行
+4. 统计/etc/passwd文件中,每行的行号,每列的列数,对应的完整行内容以制表符分隔
+5. 输出/etc/passwd文件中以nologin结尾的行
+6. 输出/etc/passwd文件中uid字段小于100的行
+7. /etc/passwd文件中gid字段大于200的,输出该行第一、第四字段,第一,第四字段并以制表符分隔
+8. 输出/etc/passwd文件中uid字段大于等于100的行
+
+```bash
+1. root@hecs-38752:/home/xcp16# awk -F: '/root/{print $1}' /etc/passwd
+2.root@hecs-38752:/home/xcp16# awk -F: 'BEGIN{print "用户名\t用户制表符"} /root/{print $1,$NF} END{print "-----------"} ' /etc/passwd
+3. root@hecs-38752:/home/xcp16# awk -F: '/root/{print} ' /etc/passwd
+4. root@hecs-38752:/home/xcp16# awk '{print NR"\t"NF"\t"$0}' /etc/passwd
+5. root@hecs-38752:~# grep 'nologin$' /etc/passwd
+6. root@hecs-38752:~# awk -F: '$3<100 {print $0} ' /etc/passwd
+7. root@hecs-38752:~# awk -F: '$4>200 {print $1"\t"$4} ' /etc/passwd
+8. root@hecs-38752:~# awk -F: '$3>=100 {print $0} ' /etc/passwd
+```
+
diff --git "a/18\345\217\244\347\216\211\350\220\215/20240605--vim\345\220\204\347\247\215\344\275\277\347\224\250.md" "b/18\345\217\244\347\216\211\350\220\215/20240605--vim\345\220\204\347\247\215\344\275\277\347\224\250.md"
new file mode 100644
index 0000000000000000000000000000000000000000..d462f2128e573aa8008039c87f361c5d19281325
--- /dev/null
+++ "b/18\345\217\244\347\216\211\350\220\215/20240605--vim\345\220\204\347\247\215\344\275\277\347\224\250.md"
@@ -0,0 +1,180 @@
+# vim各种使用
+
+### 单位级:
+
+- h 向左移动一个单位
+- j 向下移动一个单位
+- k 向上移动一个单位
+- l 向右衔动一个单位
+
+### 单词级:
+
+- w 向右移动到下一单词开头
+- e 向右移动到下一单词结尾
+- b 向左移动到下一单词开头
+
+### 块级:
+
+- gg 移动光标到文档第一行
+- G 移动光标到文档最后一行
+- 0 移动光标所在行的第一列
+- ^ 移动光标到非空的第一个字符
+- $ 移动光标到所在行的最后一列
+- H 移动光标到屏幕顶端
+- M 移动光标到屏幕中间
+- L 移动光标到屏幕底部
+- gg 或者: 移动光标到第n行
+- k 或者:- 移动光标到向上n行
+- j 或者:+ 移动光标到向下n行
+
+
+
+### 进入vim编辑器可视化模式:
+
+字符模式:在命令模式中按v键进入行模式,
+
+在命令模式:中按V键进入块模式,
+
+在命令模式中:按Ctrl+ v键进入
+
+
+
+### 文档内查找:
+
+n 继续查找下一个
+
+N 继续查找上一个
+
+
+
+### 行内查找:
+
+- f 当前行内向行尾查找定位X字符
+- t 当前行内向行尾查找定位X字符前一字符
+- F 当前行内向行首查找定位X字符
+- T 当前行内向行首查找定位X字符后一字符
+- ; 向当前方向查找下一个字符
+- , 向当前反方向查找下一个字符
+
+### 插入:
+
+- i 当前字符前插入
+- I 当前行首插入
+- a 当前字符后插入
+- A 当前行尾插入
+- o 在下一行插入
+- O 在上一行插入
+
+
+
+### 删除:
+
+- x 删除当前字符,相当于 insert 模式下的 Delete
+- X 删除前一个字符,相当于 insert 模式下的 Backspaced
+- 删除指定内容并保存到 Vim 剪贴板
+- dd 删除当前行,并将删除的内容保存到 Vim 剪贴板
+- cc 删除当前行并保存到 Vim 剪贴板,同时进入 INSERT 模式
+- c 删除指定内容并保存到 Vim 剪贴板,同时进入 INSERT 模式
+
+
+
+### 复制:
+
+- y 复制指定字符串到粘贴板
+- yy 复制整行到粘贴板
+
+### 粘贴:
+
+- p 在当前位置后粘贴
+- P 在当前位置前粘贴
+
+### 合并:
+
+- J 合并当前行和下一行
+
+### 替换:
+
+- r 将当前字符替换为 X
+- gu 将指定的文本转换为小写
+- gU 将指定的文本转换为大写
+- :%s/// 查找 search 内容并替换为 replace 内容(常用)
+
+### 撤销与重做
+
+- u 撤销
+- Ctrl-r 重做
+- . 重复上一个动作,3.重复上次动作3次
+
+### 保存修改
+
+- :w 保存当前文件
+- :wa 保存全部文件
+- :wq or ZZ 保存并退出
+- :q! or ZQ 强制退出,不保存
+- :saveas 文件另存为
+- :w 文件另存一份名为 的副本并继续编辑原文件
+
+# 作业
+
+1. vi 编辑器有几种模式?
+
+ ```
+ 1. 命令模式
+ 2. 插入模式
+ 3. 末行模式
+ ```
+
+
+
+2. 如何进入 vi 编辑器的插入模式
+
+ ```
+ i 当前字符前插入
+ I 当前行首插入
+ a 当前字符后插入
+ A 当前行尾插入
+ o 在下一行插入
+ O 在上一行插入
+ ```
+
+
+
+3. 如何进入 vi 编辑器的可视化模式
+
+ ```
+ 字符模式:在命令模式中按v键进入行模式,
+
+ 在命令模式:中按V键进入块模式,
+
+ 在命令模式中:按Ctrl+ v键进入
+ ```
+
+
+
+4. 在 vi 编辑器中如何复制一行
+
+ ```
+ yy 复制整行到粘贴板
+ ```
+
+
+
+5. 在 vi 编辑器中如何进行粘贴
+
+
+
+ ```
+ - p 在当前位置后粘贴
+ - P 在当前位置前粘贴
+ ```
+
+
+
+6. 如何删除从 3 行到 15 行的所有数据
+
+ ```
+ :3,15d
+ ```
+
+
+
diff --git "a/18\345\217\244\347\216\211\350\220\215/20240611--\345\210\232\345\256\211\350\243\205\345\256\214Deiban\347\263\273\347\273\237 7\346\255\245\350\265\260.md" "b/18\345\217\244\347\216\211\350\220\215/20240611--\345\210\232\345\256\211\350\243\205\345\256\214Deiban\347\263\273\347\273\237 7\346\255\245\350\265\260.md"
new file mode 100644
index 0000000000000000000000000000000000000000..f8b8775328c9b2a6e5a6e4f7828c2b9b92d98134
--- /dev/null
+++ "b/18\345\217\244\347\216\211\350\220\215/20240611--\345\210\232\345\256\211\350\243\205\345\256\214Deiban\347\263\273\347\273\237 7\346\255\245\350\265\260.md"
@@ -0,0 +1,137 @@
+# 刚安装完Deiban系统 7步走:
+
+1. 设置国内软件源镜像 /etc/apt/sources.list
+2. 更新软件包列表:apt update
+3. 更新系统:apt upgrade -y
+4. 安装vim:apt install vim -y
+5. 编辑网卡配置,设置静态IP:
+
+```bash
+vim /etc/network/interfaces
+
+# 按如下设置
+# The primary network interface
+allow-hotplug ens192
+iface ens192 inet static
+address 172.16.90.71
+netmask 255.255.255.0
+gateway 172.16.90.1
+
+#重新启动网络服务
+sudo systemctl restart networking
+```
+
+5. 修改SSHD配置,允许root用户远程登录
+
+```bash
+vim /etc/ssh/sshd_config
+
+# 取消如下代码的注释,并且将其值设置为yes,以允许root用户的远程登录
+PermitRootLogin yes
+
+```
+
+6. 配置环境变量,简单化ls的用法
+
+
+/etc/profile.d/ls.sh /etc/nginx/conf.d/mjdo.com.conf
+
+```bash
+ export LS_OPTIONS='--color=auto'
+ alias ls='ls $LS_OPTIONS'
+ alias ll='ls $LS_OPTIONS -l'
+ alias l='ls $LS_OPTIONS -lA'
+
+```
+
+7. 配置环境变量,设置当前系统字符集,以接受中文
+
+/etc/profile.d/lang.sh
+
+```bash
+export LC_ALL=C.utf8
+```
+
+要确保设置生效,可以重新加载该文件并检查环境变量
+
+```sh
+source /etc/profile.d/lang.sh
+echo $LC_ALL
+```
+
+
+
+# 常用的命令:
+
+### time:用于测量命令的执行时间
+
+```bash
+time ls
+```
+
+### date:显示或设置系统日期和时间。
+
+- **%Y**:四位数的年份。
+- **%m**:两位数的月份。
+- **%d**:两位数的日期。
+
+```bash
+date "+%Y-%m-%d %H:%M:%S"
+```
+
+### timedatectl:查看和设置系统时间和日期,时区和 NTP(网络时间协议)设置。
+
+```bash
+timedatectl status
+```
+
+### reboot:重新启动系统
+
+### poweroff:关闭系统电源
+
+### wget:从网络上下载文件
+
+```bash
+例: wget https://example.com/file.txt
+```
+
+### curl:从网络上获取或发送数据
+
+```bash
+例:curl -O https://example.com/file.txt
+```
+
+### ps:查看当前运行的进程
+
+```bash
+ ps aux # 显示所有用户的所有进程 一般会结合。grep,awk等过滤数据
+```
+
+### kill:向进程发送信号(通常用于终止进程)
+
+```bash
+kill 1234 # 用pidof 进程名。来查看具体的进程的进程号
+```
+
+### ip:显示和操作网络接口和路由
+
+### ss:显示套接字统计信息。旧版是netstat
+
+```bash
+ss -tuln # 可以查看哪些端口开放着
+```
+
+### uname:显示系统信息
+
+```bash
+uname -a
+```
+
+### uptime:显示系统运行时间和负载
+
+### who:显示当前登录用户信息
+
+### last:显示系统上最近的登录信息
+
+### history:显示命令历史记录
+
diff --git "a/18\345\217\244\347\216\211\350\220\215/20240612--\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" "b/18\345\217\244\347\216\211\350\220\215/20240612--\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md"
new file mode 100644
index 0000000000000000000000000000000000000000..74c3fe028c4d63587a4f629f4e31e593e2fc1388
--- /dev/null
+++ "b/18\345\217\244\347\216\211\350\220\215/20240612--\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md"
@@ -0,0 +1,95 @@
+# 重定向和管道
+
+- `0`:标准输入: 键盘输入
+- `1`:标准输出: 直接显示在屏幕,不包含错误信息
+- `2`:标准错误: 只包含错误信息
+
+
+
+#### `>` :输出覆盖重定向
+
+- 将标准输出保持到文件中
+- 文件不存在创建文件
+- 文件存在覆盖文件
+- 标准输出
+ - 不包括错误信息
+ - 直接屏幕显示
+
+#### `>>` :输出追加重定向
+
+- 将标准输出追加到文件末尾
+- 文件不存在就创建
+- 文件存在就追加
+
+#### `<` :输入重定向
+
+- 将文件内容作为标准输入
+
+- 命令 <文件
+
+#### `2>` :错误信息覆盖重定向
+
+- 将错误信息保持到文件
+- 不存在就创建
+- 错误信息不包含正确的信息
+
+#### `2>>` :错误信息追加重定向
+
+- 追加到文件末尾
+
+#### `&>`:正确和错误信息一起覆盖重定向
+
+#### `&>>` :正确和错误信息一起追加重定向
+
+#### `|`:管道符 :左边的输出作为右边的输入
+
+#### `<>` :先输入,后输出
+
+#### `> 1.txx 2>2.txt` :分别将正确和错误的保存到1.txt和2.txt
+
+#### `2> /dec/null` :错误信息扔掉不显示
+
+#### tee命令的基本语法:
+
+```bash
+tee [选项] [一个或者多个文件]
+```
+
+选项:
+
+- -a:追加写入文件而不是覆盖
+- -I :忽略中断信号
+- --help:显示帮助信息和选项列表
+- --version:显示版本信息
+
+
+
+# 作业
+
+### << 是什么功能?
+
+- `<<` 是用来引入一个Here Document(这里的文档)的特殊重定向操作符。Here Document 允许你输入多行文本,这些文本作为一个整体传递给某个命令或程序,直到遇到一个特定的结束标记。
+
+```bash
+command << delimiter
+ multi-line content here
+delimiter
+# command :是准备接收输入的命令或程序。
+# delimiter :是你自己定义的任意字符串,作为Here Document的结束标记,这个标记需要放在单独的一行上。
+# multi-line content here :表示你可以在此输入任意多行内容,这些内容将作为输入提供给前面的 command。
+#例如:
+cat << EOF
+This is line 1
+This is line 2
+This is line 3
+EOF
+输出结果:
+This is line 1
+This is line 2
+This is line 3
+```
+
+### ()把命令包括起来,是干什么功能?
+
+- 括号( )在shell脚本和命令行中主要用于创建一个子shell环境来执行一组命令,这有助于控制命令的执行环境、优先级以及如何管理它们的输出和资源。
+
diff --git "a/18\345\217\244\347\216\211\350\220\215/20240614--\347\224\250\346\210\267\344\270\216\346\235\203\351\231\220.md" "b/18\345\217\244\347\216\211\350\220\215/20240614--\347\224\250\346\210\267\344\270\216\346\235\203\351\231\220.md"
new file mode 100644
index 0000000000000000000000000000000000000000..56bdf991f1bd2e43e6fe73108c956d2eeafede17
--- /dev/null
+++ "b/18\345\217\244\347\216\211\350\220\215/20240614--\347\224\250\346\210\267\344\270\216\346\235\203\351\231\220.md"
@@ -0,0 +1,339 @@
+# 用户与权限
+
+## 用户与用户组
+
+### 用户管理
+
+- 添加用户
+ - useradd 原生底层命令
+ - adduser 加强版命令
+- 删除用户
+ - userdel -r :删除用户和家目录和邮件文件
+- 修改用户 usermod
+ - usermod -aG aaa xxx 给xxx用户追加一个附加组aaa
+ - usermod -G bbb xxx 给xxx用户的修改为bbb(会清空原来的)
+
+#### 查看用户信息:
+
+- id 用户名
+- passwd
+
+#### 用户三个基本属性:
+
+- 用户id
+- 主用户组id
+- 附加用户组id
+
+#### passwd 用户名 :设置密码
+
+#### passwd :重置当前用户密码
+
+
+
+### 用户组管理:
+
+- 添加用户组 :groupadd
+- 删除用户组:groupdel
+- 修改用户组:groupmod
+
+### 文件与目录的权限:
+
+#### 基本权限:
+
+- 读read,简写 r :文件是可以读取内容,目录,可以浏览目录信息
+- 写 write ,w :文件是可以修改内容,目录,可以在里面创建,修改,删除文件、目录
+- 执行 execute ,x :文件就执行该文件,目录是可以进入目录
+
+### 权限的表示方式:
+
+- 字符:r,w,x
+- 数字:
+ - 4:读(r)
+ - 2:写(w)
+ - 1:执行(x)
+
+`---` :表示无权限
+
+`000` :表示取消所有权限
+
+#### 文件权限的表示方式
+
+- 前10位
+
+ - 第1位
+ - d:文件夹
+ - `-` :普通文件
+ - `|` :软链接
+ - 后面每3位为一组
+ - 2-4位:拥有者的权限
+ - 5-7位:文件所属用户组的权限
+ - 8-10位:其他用户的权限
+
+ ```bash
+ 例: drwxr-xr-x
+ # d 类型
+ # rwx 拥有者权限
+ # r-x 用户组权限
+ # r-x 其它用户权限
+ ```
+
+### 权限管理的命令:
+
+修改权限:
+
+- chmod 数字权限表示 文件名
+
+ ```bash
+ 例:
+ chmod 777 1.txt
+ chmod 666 2.txt
+ ```
+
+- chmod 字符权限表示 文件名
+
+ ```bash
+ 例:
+ chmod u-w text.txt # 删除写入权限
+ chmod u+rx text.txt # 添加读和写权限
+ chmod u=r text.txt # 替换
+ ```
+
+- ```bash
+ u:拥有者
+ g:拥有者所在的组
+ o:除以上两者外的其它人
+ a:所有人
+ ```
+
+- ```bash
+ +:不改变原有权限基础上添加新权限
+ -:不改变原有权限基础上删除某权限
+ =:覆盖所有权限
+ ```
+
+### 修改文件拥有者:chown
+
+### 修改拥有者所有组:chgrp
+
+通用的一个常用的选项 `-R` 递归设置权限
+
+### sudo:
+
+- 硬链接
+- 软链接
+
+修改 /etc/sudoers 文件添加权限 sudo
+
+将用户添加到sudo组
+
+```bash
+usermod -aG sudo
+```
+
+
+
+# 作业:
+
+### 权限管理练习
+
+1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令)
+
+ ```bash
+ mkdir guanli/zonghe guanli/jishu -p
+ ```
+
+
+
+2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003
+
+ ```bash
+ groupadd -g 2001 zonghe
+ groupadd -g 2002 caiwu
+ groupadd -g 2003 jishu
+ # cat /etc/group 查看所有组信息
+ grep zonghe /etc/group
+ grep caiwu /etc/group
+ grep jishu /etc/group
+ # 查看zonghe、caiwu、jishu,GID号
+ ```
+
+
+
+3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效
+
+ ```bash
+ useradd jerry
+ useradd -e 2020-12-30 kylin
+ # -e选项后面跟的是账户失效的日期,格式通常是YYYY-MM-DD
+ useradd tsengia
+ useradd obama
+ ```
+
+
+
+4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内
+
+ ```bash
+
+ usermod -aG zonghe jerry
+ usermod -aG zonghe kylin
+ usermod -aG zonghe tsengia
+ usermod -aG zonghe obama
+ # cat /etc/group | grep zonghe 、 getent group zonghe 查看zonghe组中的用户
+ ```
+
+
+
+5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin”
+
+ ```bash
+ useradd handy
+ useradd -s /sbin/nologin cucci
+ # -s选项用于指定用户的登录Shell /sbin/nologin是一个特殊的Shell路径,配置此Shell的用户将不能登录系统,通常用于服务账户或者不允许登录的用户账户。
+ ```
+
+
+
+6. 将handy、cucci等用户添加到jishu组内
+
+ ```bash
+ usermod -aG jishu handy
+ usermod -aG jishu cucci
+ ```
+
+
+
+7. 将上述的所有用户均要求加入到guanli组内
+
+ ```bash
+ useradd guanli
+ gpasswd -M jerry,kylin,tsengia,obama,handy,cucci guanli
+ #-M选项后面跟着的是以逗号分隔的用户名列表,用于指定要添加到组的用户,最后是组名guanli
+ cat /etc/group |grep guanli # 查看guanli组中的用户
+ ```
+
+
+
+8. 将zonghe组内的obama用户删除
+
+ ```bash
+ gpasswd -d obama zonghe
+ ```
+
+
+
+9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat”
+
+ ```bash
+ passwd jerry
+ passwd cucci
+ ```
+
+
+
+10. 将jerry用户锁定,并查看锁定状态
+
+ ```bash
+ passwd -l jerry #将jerry用户锁定
+ passwd -S jerry # 查看锁定状态
+ # -l选项(小写的L)用于锁定用户账户
+ ```
+
+
+
+11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个
+
+ ```bash
+ apt-get update
+ apt-get install psmisc #安装插件
+ fuser -k /dev/pts/3 # 3为TTY设备号
+ ```
+
+
+
+12. 查看cucci用户,属于那些组,并查看其详细信息
+
+ ```bash
+ id cucci
+ ```
+
+13. 手工创建账号student(预留)
+
+ ```bash
+ useradd student
+ passwd -l student
+ #创建一个名为student的预留账号,意味着创建用户但不设置密码或采取措施防止该用户立即登录
+ ```
+
+
+
+14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限
+
+ ```bash
+ sudo chown :guanli /guanli
+ sudo chmod 770 /guanli
+ sudo chown :zonghe /guanli/zonghe
+ sudo chmod 770 /guanli/zonghe
+ sudo chown :jishu /guanli/jishu
+ sudo chmod 770 /guanli/jishu
+ # ls -ld /guanli /guanli/zonghe /guanli/jishu
+ drwxrwx--- 4 root guanli 4096 Jun 15 14:00 /guanli
+ drwxrwx--- 2 root jishu 4096 Jun 15 14:00 /guanli/jishu
+ drwxrwx--- 2 root zonghe 4096 Jun 15 14:00 /guanli/zonghe
+
+ ```
+
+
+
+15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行
+
+ ```bash
+ mkdir /ceshi
+ chown :jishu /ceshi/
+ chmod 770 /ceshi/
+ ls -ld /ceshi/ #查看
+
+ ```
+
+
+
+16. 清除jerry用户密码
+
+ ```bash
+ passwd -d jerry
+ ```
+
+17. 锁定cucci用户密码并查看状态
+
+ ```bash
+ passwd -l cucci
+ passwd -S cucci
+ ```
+
+
+
+18. 修改obama用户的UID为8888
+
+ ```bash
+ usermod -u 8888 obama
+ ```
+
+
+
+19. 通过passwd命令修改kylin用户的最长密码使用期限为60天
+
+ ```bash
+ passwd -x 60 kylin
+ ```
+
+
+
+20. 通过id groups等命令查看用户handy信息
+
+ ```bash
+ id handy
+ groups handy
+ ```
+
+
+
diff --git "a/18\345\217\244\347\216\211\350\220\215/20240615--crontab.md" "b/18\345\217\244\347\216\211\350\220\215/20240615--crontab.md"
new file mode 100644
index 0000000000000000000000000000000000000000..5e7e2e92a9dfd00e9d725953e64cdc666f19ead0
--- /dev/null
+++ "b/18\345\217\244\347\216\211\350\220\215/20240615--crontab.md"
@@ -0,0 +1,204 @@
+### 查看现有定时任务:
+
+```bash
+crontab -l
+```
+
+### 编辑定时任务:
+
+```bash
+crontab -e
+```
+
+```bash
+* * * * * *
+分钟 小时 日期 月份 星期
+```
+
+### 定时任务时间格式说明:
+
+- `*`: 表示所有可能的值。例如,`* * * * *` 表示每分钟都运行一次。
+- `*/n`: 表示每 n 个时间单位运行一次。例如,`*/5 * * * *` 表示每 5 分钟运行一次。
+- `n`: 表示特定的时间单位。例如,`30 3 * * 1` 表示在星期一的凌晨 3 点 30 分执行任务。
+
+### 删除定时任务:
+
+```bash
+crontab -r
+```
+
+### 列出某个用户的crontab文件:
+
+```bash
+crontab -u 用户名 -l
+```
+
+
+
+### 编辑某个用户的crontab文件:
+
+```bash
+crontab -u 用户名 -e
+```
+
+
+
+### 周期任务练习
+
+执行在家目录touch a.txt
+
+1. 每天3:00执行一次
+
+ ```bash
+ 0 3 * * * touch ~/a.txt
+ ```
+
+2. 每周六2:00执行
+
+ ```bash
+ 0 2 * * 6 touch ~/a.txt
+ ```
+
+
+
+3. 每周六1:05执行
+
+ ```bash
+ 5 1 * * 6 touch ~/a.txt
+ ```
+
+
+
+4. 每周六1:25执行
+
+ ```bash
+ 25 1 * * 6 touch ~/a.txt
+ ```
+
+
+
+5. 每天8:40执行
+
+ ```bash
+ 40 8 * * * touch ~/a.txt
+ ```
+
+
+
+6. 每天3:50执行
+
+ ```bash
+ 50 3 * * * touch ~/a.txt
+ ```
+
+
+
+7. 每周一到周五的3:40执行
+
+ ```bash
+ 40 3 * * 1-5 touch ~/a.txt
+ ```
+
+
+
+8. 每周一到周五的3:41开始,每10分钟执行一次
+
+ ```bash
+ 41,51 3 * * 1-5 touch ~/a.txt
+ ```
+
+
+
+9. 每天的10:31开始,每2小时执行一次
+
+ ```bash
+ 31 10,12,14,16,18,20,22 * * * touch ~/a.txt
+
+ #从10:31开始,我们可以列出一天内符合要求的几个时间点:
+ 10:31
+ 12:31
+ 14:31
+ 16:31
+ 18:31
+ 20:31
+ 22:31
+ ```
+
+
+
+10. 每周一到周三的9:30执行一次
+
+ ```bash
+ 30 9 * * 1-3 touch ~/a.txt
+ ```
+
+
+
+11. 每周一到周五的8:00,每周一到周五的9:00执行一次
+
+ ```bash
+ 0 8,9 * * 1-5 touch ~/a.txt
+ ```
+
+
+
+12. 每天的23:45分执行一次
+
+ ```bash
+ 45 23 * * * touch ~/a.txt
+ ```
+
+
+
+13. 每周三的23:45分执行一次
+
+ ```bash
+ 45 23 * * 3 touch ~/a.txt
+ ```
+
+
+
+14. 每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次
+
+ ```bash
+ 25-35/10 9,10,11 * * 1-5 touch ~/a.txt
+ 0,10,20,30,40,50 13,14 * * 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
+ 30 8,9,10,11,13,14 * * 1-5 touch ~/a.txt
+ 50 8 * * 1-5 touch ~/a.txt
+ 0 10,11,14,5 1-5 touch ~/a.txt
+ ```
+
+
+
+16. 每天16:00、10:00执行一次
+
+ ```bash
+ 0 10,16 * * * touch ~/a.txt
+ ```
+
+
+
+17. 每天8:10、16:00、21:00分别执行一次
+
+ ```bash
+ 10 8 * * * touch ~/a.txt
+ 0 16 * * * touch ~/a.txt
+ 0 21 * * * touch ~/a.txt
+ ```
+
+
+
+18. 每天7:47、8:00分别执行一次
+
+```bash
+47 7 * * * touch ~/a.txt
+0 8 * * * touch ~/a.txt
+```
+
diff --git "a/18\345\217\244\347\216\211\350\220\215/20240618--\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/18\345\217\244\347\216\211\350\220\215/20240618--\347\216\257\345\242\203\345\217\230\351\207\217.md"
new file mode 100644
index 0000000000000000000000000000000000000000..8a634670cef6094ced96c77bdd387571d88cff2d
--- /dev/null
+++ "b/18\345\217\244\347\216\211\350\220\215/20240618--\347\216\257\345\242\203\345\217\230\351\207\217.md"
@@ -0,0 +1,317 @@
+# 环境变量
+
+### 环境变量的类型和作用:
+
+- #### 用户级别环境变量:
+
+ - 存储在用户家目录的个人配置文件中,例:`~/.bashrc`/ 、 `~/.profile`
+ - 用户定义用户个性化的shell设置,如别名、路径等
+
+- #### 系统及环境变量;
+
+ - 存储在系统柜范围的配置文件中,如: `/etc/envjronment` 、`/etc/profile`
+ - 为所有用户和系统服务提供全局的环境设置
+
+ 环境变量的加载顺序和文件
+
+- **系统启动加载**:/etc/environment
+
+- **登录Shell加载顺序**:
+ - 首先加载 `/etc/profile`,然后根据用户登录方式加载 `~/.profile`(存在性依次加载)。
+ - 非登录shell: su 切换用户 等 source
+
+- **交互式Shell加载顺序**:
+ - 加载 `~/.bashrc` 或类似文件,用于设置用户个性化的Shell环境。
+ - 不同的shell加载不同的文件,bash才加载.bashrc,zsh加载.zshrc
+ - 交互式:提供命令行窗口,非交互式:直接写在脚本里
+- **总结来说**
+ - 配置文件的理论加载顺序通常是 `/etc/environment` > `/etc/profile` > `~/.profile` > `~/.bashrc`
+
+### 设置环境变量的方法
+
+ 设置变量的位置:命令行(临时),脚本文件(永久)
+
+#### 临时设置环境变量:临时变量(局部),临时环境变量(全部)
+
+ 可以使用 `export` 命令来临时设置一个环境变量,例如:
+
+```bash
+export MY_VAR="value" # export 变量名=值 环境变量是全局的,整个环境有效
+MY_VAR="value" # 少了export 就是临时变量,不是全局的
+```
+
+ 这种设置只在当前Shell会话中有效,关闭Shell会话后会失效。
+
+#### 永久设置环境变量:
+
+ **用户级别的** : 编辑用户的 `~/.bashrc` 或 `~/.profile` 文件,并添加如下行:
+
+```bash
+export MY_VAR="value"
+```
+
+ 保存文件后,新的设置会在下次登录时生效。
+
+ **系统级别的:** 编辑 `/etc/environment` 或 /etc/profile文件,并添加类似以下行:
+
+```bash
+MY_VAR="value"
+```
+
+这里不需要使用 `export` 命令。保存文件后,变量会在系统启动时生效。
+
+#### 环境变量的设置和使用示例
+
+ 设置路径变量(PATH)
+
+```bash
+# 在 ~/.bashrc 中添加
+export PATH=$PATH:/path/to/your/scripts
+```
+
+ 定义Java环境变量(JAVA_HOME)
+
+```bash
+# 在 ~/.bashrc 或 /etc/environment 中添加
+export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
+export PATH=$JAVA_HOME/bin:$PATH
+```
+
+ 设置代理服务器(HTTP_PROXY、HTTPS_PROXY)
+
+```bash
+# 在 ~/.bashrc 中添加
+export HTTP_PROXY=http://proxy.example.com:8080
+export HTTPS_PROXY=http://proxy.example.com:8080
+```
+
+ 配置编辑器(EDITOR)
+
+```bash
+# 在 ~/.bashrc 中添加
+export EDITOR=/usr/bin/vim
+```
+
+ 设置语言和地区(LANG、LC_系列变量)
+
+```bash
+# 在 ~/.bashrc 或 /etc/environment 中添加
+export LANG=en_US.UTF-8
+export LC_ALL=en_US.UTF-8
+```
+
+ 自定义命令别名(alias)
+
+```bash
+# 在 ~/.bashrc 中添加
+alias ll='ls -alF'
+alias grep='grep --color=auto'
+```
+
+ 设置临时环境变量
+
+```bash
+# 临时设置变量
+export MY_VAR="value"
+```
+
+### 常用环境变量
+
+**系统级**
+
+* `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 会话和所有子进程中都有效。
+
+#### 按生命周期分
+
+- 永久环境变量 写在指定类型的配置文件,永不失效 ~/.bashrc /etc/profile.d/xxx.sh
+- 临时环境变量 临时使用export 命令设置的环境变量 退出终端即失效
+
+#### 按作用域分
+
+* 系统级环境变量 对所有用户生效 /etc/profile.d/xxx.sh
+* 用户级环境变量 只对当前用户生效 ~/.bashrc
+
+
+
+# 作业
+
+### 练习题 1: 显示当前所有的环境变量
+
+* 使用`printenv`或`env`命令来显示所有的环境变量。
+
+
+```bash
+env
+printenv
+```
+
+### 练习题 2: 显示`HOME`环境变量的值
+
+* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。
+
+
+```bash
+echo $HOME
+```
+
+### 练习题 3: 临时设置一个新的环境变量
+
+* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。
+
+
+```bash
+export MY_AGE=18
+```
+
+### 练习题 4: 显示新设置的环境变量
+
+* 使用`echo`命令来显示`MY_AGE`的值。
+
+
+```bash
+ echo $MY_AGE
+```
+
+### 练习题 5: 在新的shell会话中检查环境变量
+
+* 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么?
+
+ ```bash
+ # 不会输出MY_AGE的值,因为MY_AGE是临时环境变量,一个新的shell会话时,它不会继承前一个会话中临时设置的环境变量
+ ```
+
+
+
+### 练习题 6: 修改`PATH`环境变量
+
+* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置
+
+
+```bash
+ export PATH="$PATH:$HOME
+```
+
+将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。
+
+```bash
+export PATH="/tmp:$PATH"
+```
+
+### 练习题 7: 验证`PATH`的修改
+
+* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。
+
+
+```bash
+ echo $PATH
+ # /tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root
+```
+
+### 练习题 8: 永久设置环境变量
+
+* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。
+
+例如,对于bash shell,你可以使用:
+
+
+```bash
+vim ~/.bashrc
+# 在.bashrc文件中添加
+export MY_NAME="奥德彪"
+```
+
+如何让`MY_NAME`生效,并验证
+
+```bash
+# 重新加载.bashrc
+source ~/.bashrc
+# 使用echo查看
+echo $MY_NAME
+奥德彪
+```
+
+### 练习题 9: 清理
+
+* 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。
+
+
+```bash
+exit
+# MY_AGE和PATH均为临时环境变量 ,重启终端即可
+```
+
+### 练习题 10: 修改默认器
+
+* 使用`EDITOR`变量,修改你默认的编辑器为nano。
+
+
+```bash
+export EDITOR=nano # 临时修改
+```
+
+### 练习题 11: 修改语言
+
+* 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。
+
+```bash
+export LANG=zh_CN.UTF-8
+```
+
+- 使用`LANGUAGE`变量,让你的命令提示为中文
+
+```bash
+export LANGUAGE=zh_CN.UTF-8
+```
+