diff --git "a/\345\264\224\346\242\246\345\234\206/20240518-\344\270\255\345\233\275\344\275\234\344\270\232\344\273\243\347\240\201.md.txt" "b/\345\264\224\346\242\246\345\234\206/20240518-\344\270\255\345\233\275\344\275\234\344\270\232\344\273\243\347\240\201.md.txt"
new file mode 100644
index 0000000000000000000000000000000000000000..a20744b9cc635af6d501263f00a6f61bc10a91bf
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240518-\344\270\255\345\233\275\344\275\234\344\270\232\344\273\243\347\240\201.md.txt"
@@ -0,0 +1,66 @@
+## 建立一个新用户配置用户
+### 先在root用户建立一个普通用户
+```
+useradd -m 用户名 //创建用户
+passwd 用户名 //进入用户设置密码
+```
+#### 删除用户
+```
+userdel 用户名
+```
+### 安装sudo配置用户
+```
+apt-get install sudo
+```
+#### 将新用户加入sudo组内,让用户可以借用权限
+```
+usermod -aG sudo my
+
+```
+#### 在新用户更新可用的包
+```
+sudo apt-get update
+```
+### 配置用户环境变量
+```
+chsh -s /bin/bash 用户名
+```
+将新建用户加入环境
+## 创建文件和文件夹,在文件添加内容
+### 创建文件夹
+```
+mkdir /文件夹名称 //单个文件
+mkdir -p /文件夹名称/。。。。。。 //文件夹下级目录
+
+```
+
+### 创建文件
+```
+touch 文件名称.文件格式
+vim 文件名称 //进入文件编辑模式
+```
+### 压缩文件
+#### 安装zip
+```
+sudo apt-get install zip
+```
+#### 用zip压缩文件
+```
+zip archive.zip file1 //单个文件打包 file1(文件名)
+zip archive.zip file1 file2 file3 // 多个文件打包
+
+zip -r archive.zip directory //压缩整个目录及其子目录 archive.zip(打包后的名字) directory(要打包的文件夹)
+zip -r archive.zip directory -x "file_or_directory" //打包时排除某些文件或目录
+```
+
+#### 解压
+##### 安装unzip
+```
+apt-get install unzip
+```
+
+## 下载到本地
+```
+scr 用户名@服务器ip:目标文件的准确地址 下载的地址
+ (用/) (用/)
+```
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240522\346\226\207\344\273\266\345\244\271\347\256\241\347\220\206.md" "b/\345\264\224\346\242\246\345\234\206/20240522\346\226\207\344\273\266\345\244\271\347\256\241\347\220\206.md"
new file mode 100644
index 0000000000000000000000000000000000000000..8c62ab6da82e9c4cfa74f29460a830be03ef409e
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240522\346\226\207\344\273\266\345\244\271\347\256\241\347\220\206.md"
@@ -0,0 +1,271 @@
+在Linux系统中,你可以使用以下命令对文件夹和文件进行管理:
+
+1. **ls**:列出目录内容。
+
+ ```bash
+ ls #列出当前目录下的文件和目录
+ ls /home/user #列出指定目录下的文件和目录
+ ls -d 文件夹A # 列出文件夹A本身的信息,而不是其它下面的目录和内容
+ ls -a # all 列出当前目录下的所有文件和目录,包括隐藏文件/目录
+ ls -l #以长格式列出当前目录下的文件和目录,包括权限、所有者、组、大小、创建日期等信息
+ ls -h # 以易读的方式列出当前目录下的文件和目录,将文件大小以KB、MB\GB等单位表示
+ ls -t # t->time 根据修改时间排序列出当前目录下的文件和目录
+ ls -r # r -> reverse 反向排序列出当前目录下的文件和目录
+ ls -S # S -> Size 根据文件大小排序列出当前目录下的文件和目录
+ ls -R # 递归列出当前目录及其子目录下的所有文件和目录
+ ls --color # --color(英文全拼:colorize 给着色 )
+ # 以不同颜色区分不同类型的文件,例如蓝色表示目录、绿色表示可执行文件等。
+
+ ## 扩展如何修改环境变量 家目录下的自己的文件下,使用ls -a 显示所有文件,即可看到.bashrc这个环境变量的配置文件。将# alias ll='ls -l' 前的#号删除,并保存文件。最后要生效,就要退出帐号一次,再登录,即可使用ll来代替ls -l
+ alias la='ls -a'
+ alias l='ls -CF'
+
+ ```
+
+
+
+2. **cd**:改变当前目录。
+
+ - 进入某个目录:`cd 目录名`
+ - 返回上一级目录:`cd ..`
+ - 返回家目录:`cd ~` 或者 `cd ` (啥也不跟): /home/用户名
+ - 返回上次所在目录:`cd -`
+
+3. **pwd**:显示当前工作目录的绝对路径。
+
+ ```bash
+ pwd # 显示当前工作目录的绝对路径
+ dir1 = $(pwd) # 将当前工作目录路径保存到变量中(在Shell脚本中常用)
+ echo $dir1
+ ```
+
+
+
+4. **mkdir**:创建新目录。
+
+ - 示例:`mkdir 目录名`
+
+ ```bash
+ #场景:在当前位置创建一个新的目录
+ mkdir 目录名 # 创建一个新目录
+
+ mkdir 路径/目录名 # 在指定路径下创建目录
+
+ #场景:在创建目录的同时,如果父目录不存在,则一并创建父目录。
+ mkdir -p 父目录/新目录 # 创建多个目录,包括父目录(如果不存在)
+ # 通常在写脚本的时候,为避免已存在,或不存在某目录后续命令无法继续执行,在mkdir的时候,会加-p选项
+
+ #场景:创建一个具有特定权限的目录,可以用于设置目录的读写执行权限。
+ mkdir -m 权限模式 目录名 # 创建具有特定权限的目录
+ # mkdir -m 777 mydir
+ #场景:需要一个文件夹
+ mkdir -p /tmp/新目录 # 创建临时目录,不长期保留,与用户文件隔离,避免暴露用户
+ ```
+
+
+
+5. **rmdir**:删除空目录。
+
+ - 示例:`rmdir 目录名` ,只能删除空的目录
+
+6. **rm**:删除文件或目录。
+
+ ```bash
+ # ------------------- 删除文件 -------------------
+ rm -i 文件名 # 删除指定的文件,删除前会询问是否删除(y 确认,n 取消)。
+ rm -f 文件名 # 强制删除指定的文件,不会进行询问。
+ rm -f a.txt b.txt # 同时删除多个文件:可以在命令中添加多个文件名,用空格分隔,如 。
+ rm -f a* # 删除所有以 a 开头的文件 ;删除以特定字符或模式开头的文件:使用通配符* 。
+ rm -f .* # 删除隐藏文件:使用 .*,如 (但请注意,这可能会删除当前目录下的所有隐藏文件,包括 . 和 ..,所以请谨慎使用)。
+ ## 扩展
+ mv example.txt .example.txt # 隐藏文件
+ mv mydir .mydir # 隐藏目录
+ # ------------------- 删除目录 -------------------
+ rmdir 目录名 # 仅删除空的目录。
+ rm -r 目录名 # 递归地删除目录及其子目录和文件,删除前会询问是否删除。
+ rm -rf 目录名 # 递归地强制删除目录及其子目录和文件,不会进行询问。
+ rm -rfv 目录名 # 除了递归强制删除外,还会显示删除的详细步骤。
+ rm -d 目录名 # 只删除空目录(与 rmdir 命令类似)。
+ ```
+
+
+
+7. **cp**:复制文件或目录。
+
+ - 复制文件:`cp 源文件 目标文件`
+ - 复制文件到目录: cp 源文件 目标目录
+ - 复制目录:`cp -r 源目录 目标目录`
+
+ `cp` 是 Linux 和 Unix 系统中用于复制文件或目录的命令。以下是 `cp` 命令的一些常见用法:
+
+ 1. **复制单个文件**:
+
+
+ ```bash
+ cp source_file destination_file
+ ```
+ 例如,将 `example.txt` 复制到 `new_example.txt`:
+
+
+ ```bash
+ cp example.txt new_example.txt
+ ```
+ 2. **复制文件到目录**:
+
+
+ ```bash
+ cp source_file destination_directory/
+ ```
+ 例如,将 `example.txt` 复制到 `target_dir` 目录:
+
+
+ ```bash
+ cp example.txt target_dir/
+ ```
+ 3. **递归复制目录**:
+ 使用 `-r` 或 `-R` 选项可以递归地复制目录及其内容。
+
+
+ ```bash
+ cp -r source_directory destination_directory/
+ ```
+ 例如,将 `source_dir` 目录及其内容复制到 `target_dir`:
+
+
+ ```bash
+ cp -r source_dir target_dir/
+ ```
+ 4. **交互式复制**:
+ 使用 `-i` 选项,在覆盖已存在的文件前会提示用户确认。
+
+
+ ```bash
+ cp -i source_file destination_file
+ ```
+ 5. **保留文件属性**:
+ 使用 `-p` 选项可以保留原文件的属性(如时间戳、权限等)。
+
+
+ ```bash
+ cp -p source_file destination_file
+ ```
+ 6. **显示复制进度**:
+ 使用 `-v` 选项可以显示详细的复制进度信息。
+
+
+ ```bash
+ cp -v source_file destination_file
+ ```
+ 7. **仅当源文件较新时复制**:
+ 使用 `-u` 选项可以仅当源文件比目标文件新时才进行复制。
+
+
+ ```bash
+ cp -u source_file destination_file
+ ```
+ 8. **强制复制**:
+ 使用 `-f` 或 `--force` 选项可以强制复制,即使目标文件已存在也不提示,直接覆盖。
+
+
+ ```bash
+ cp -f source_file destination_file
+ ```
+ 9. **批量复制文件**:
+ 可以使用通配符(如 `*`)来批量复制文件。
+
+
+ ```bash
+ cp *.txt destination_directory/
+ ```
+ 这将复制当前目录下所有 `.txt` 结尾的文件到 `destination_directory` 目录。
+
+ 这只是 `cp` 命令的一些基本用法,实际上它还有许多其他选项和功能。你可以通过运行 `man cp` 或 `cp --help` 来查看完整的命令手册和选项列表。
+
+8. **mv**:移动文件或目录,也可用于重命名文件或目录。
+
+ - 移动文件或目录:`mv 源目录/文件 目标目录`
+ - 重命名文件或目录:`mv 原文件名 新文件名`
+
+ 在 Linux 中,`mv` 命令用于移动文件或目录,或者对它们进行重命名。以下是 `mv` 命令的一些常见用法:
+
+ 1. **移动文件或目录**:
+
+
+ * 将文件从一个目录移动到另一个目录:
+ ```bash
+ mv source_file destination_directory/
+ ```
+ * 移动目录:与移动文件类似,但目录的末尾不应有斜杠(/),除非目标位置是一个已经存在的目录。
+ ```bash
+ mv source_directory destination_directory/
+ ```
+ 注意:如果目标目录不存在,`mv` 命令会将其视为要重命名的文件名,这可能会导致意外的结果。
+ 2. **重命名文件或目录**:
+
+
+ * 重命名文件:
+ ```bash
+ mv old_name.txt new_name.txt
+ ```
+ * 重命名目录:
+ ```bash
+ mv old_directory_name new_directory_name
+ ```
+ 3. **移动并重命名文件**:
+
+
+ * 你可以在一次操作中既移动又重命名文件。
+ ```bash
+ mv source_directory/old_name.txt destination_directory/new_name.txt
+ ```
+ 4. **使用通配符移动多个文件**:
+
+
+ * 你可以使用通配符(如 `*`)来匹配多个文件,并将它们移动到目标目录。
+ ```bash
+ mv *.txt destination_directory/
+ ```
+ 这将移动当前目录下所有 `.txt` 结尾的文件到 `destination_directory` 目录。
+ 5. **交互式操作**:
+
+
+ * 使用 `-i` 选项,`mv` 命令会在移动或重命名文件前进行确认,以避免意外覆盖文件。
+ ```bash
+ mv -i source_file destination_file
+ ```
+ 当目标位置已经存在同名文件时,系统会提示你是否要覆盖。
+ 6. **显示详细信息**:
+
+
+ * 使用 `-v` 选项,`mv` 命令会显示详细的操作信息,包括移动或重命名的文件名。
+ ```bash
+ mv -v source_file destination_file
+ ```
+ 7. **覆盖文件前先备份**:
+
+ * 使用 `-b` 选项,`mv` 命令会在覆盖文件之前对其进行备份。
+
+
+ ```bash
+ mv -b source_file destination_file
+ ```
+
+ 请注意,`mv` 命令的使用可能因不同的 Linux 发行版或 shell 环境而略有差异。但上述用法在大多数情况下都是通用的。如果你需要更详细的信息或特定选项的解释,可以使用 `man mv` 命令来查看 `mv` 命令的手册页。
+
+9. **touch**:创建空文件或者更改文件访问和修改时间。
+
+ - 示例:`touch 文件名`
+
+10. **chmod**:修改文件或目录权限。
+
+- 示例:`chmod 权限值 文件名`
+
+1. **chown**:改变文件或目录的所有者。
+
+- 示例:`chown 用户名 文件名`
+
+1. **chgrp**:改变文件或目录的所属组。
+
+- 示例:`chgrp 组名 文件名`
+
+这些是常用的Linux文件夹和文件管理相关操作命令,通过它们你可以进行各种文件和目录的管理
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240523-\345\210\235\345\247\213LINUX\347\237\245\350\257\2065.md" "b/\345\264\224\346\242\246\345\234\206/20240523-\345\210\235\345\247\213LINUX\347\237\245\350\257\2065.md"
new file mode 100644
index 0000000000000000000000000000000000000000..fa69ecafdde7540696ed13c528ce492c70507636
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240523-\345\210\235\345\247\213LINUX\347\237\245\350\257\2065.md"
@@ -0,0 +1,360 @@
+## 初始LINUX知识5
+7. **cp**:复制文件或目录。
+
+ - 复制文件:`cp 源文件 目标文件`
+ - 复制文件到目录: cp 源文件 目标目录
+ - 复制目录:`cp -r 源目录 目标目录` :没-r复制不了目录
+
+ `cp` 是 Linux 和 Unix 系统中用于复制文件或目录的命令。以下是 `cp` 命令的一些常见用法:
+
+
+ ### 1.复制单个文件:
+ cp 文件1 目录1/文件1 # 将文件1复制一份到目录1
+ cp 文件1 目录1/文件2 # 将文件1复制一份到目录1,并改名为文件2
+
+
+ ### 例如,将 `old.txt` 复制为 `new.txt`:
+ cp old.txt new.txt # 最终得到old.txt 和 new.txt
+
+
+ ### 2.复制文件到目录:
+ cp 要复制的文件名 要复制到的文件夹路径
+ # 例如,将 `成绩单.txt` 复制到 `/usr/local/各班成绩汇总` 目录:
+ cp 成绩单.txt /usr/local/各班成绩汇总/ # 最终在/usr/local/各班成绩汇总/也会出现成绩单.txt文件
+
+
+ ### 3. 递归复制目录:
+ # 复制目录时使用 `-r` 或 `-R` 选项可以递归地复制目录及其内容。
+ cp -r 源目录 目标目录
+ # 例如,将 `22级1班成绩` 目录及其内容复制到 `22级成绩汇总`目录下:
+ cp -r 22级1班成绩 22级成绩汇总/
+
+
+ ### 4. 交互式复制:# 会确认覆盖信息
+ #使用 `-i` 选项,在覆盖已存在的文件前会提示用户确认。
+ cp -i 源文件 目标文件 # 复制源文件为目标文件,如果目标文件已经存在,会底部是否覆盖
+ # 例如:将c1.txt复制成c2.txt时,发现c2.txt已存在
+ $ cp -i c1.txt c2.txt
+ cp: 是否覆盖 'c2.txt'? # 要覆盖就输入y,如果是n是取消复制
+
+
+ ### 5. 保留文件属性:原封不动的复制
+ # 使用 `-p` 选项可以保留原文件的属性(如时间戳、权限等)。
+ cp -p 源文件 目标文件
+ # 例如:将c1.txt复制成c3.txt,并保留c1.txt的文件属性
+ $ cp -p c1.txt c3.txt
+
+ ### 6. 显示复制进度:
+ # 使用 `-v` 选项可以显示详细的复制进度信息。类似的有tar rm
+ cp -rv 源目录 目标目录 # 会在递归复制的时候显示进度信息
+
+ ### 7. 仅当源文件较新时复制**:
+ # 使用 `-u` 选项可以仅当源文件比目标文件新时才进行复制。update
+ cp 1班成绩.txt 1班成绩.txt.bak # 直接覆盖
+ cp -u 1班成绩.txt 1班成绩.txt.bak # 更新才复制
+
+
+ ### 8. 强制复制:
+ # 使用 `-f` 或 `--force` 选项可以强制复制,即使目标文件已存在也不提示,直接覆盖。
+ cp -f old_file new_file
+
+ ### 9. 批量复制文件:
+ # 可以使用通配符(如 `*`)来批量复制文件。
+ cp *.txt 笔记/
+ # 这将复制当前目录下所有 `.txt` 结尾的文件到 `笔记` 目录。
+
+ ### 10 同时复制多个文件或目录到 某个目录
+ cp 1.txt 2.txt 3.txt 笔记 # 一次性同时将1、2、3.txt都复制到笔记目录
+ cp -R dir1 dir2 dir3 # 同时将dir1,dir2复制到dir3内,因为是复制目录,要加-R
+ cp -R 1.txt dir1 dir2 # 同时将文件和目录一起复制到dir2
+
+ ### 11 复制时产生备份文件,尾标~
+ cp -b a.txt tmp/ # 如果/tmp目录已经有a.txt 就会将原来的a.txt备份成a.txt~ backup
+
+ ### 12 指定备份文件尾标
+ cp -b -S _bak a.txt /tmp # 如果/tmp目录已经有a.txt 就会将原来的a.txt备份成a.txt_bak
+ #使用 cp -b -S _bak a.txt /tmp 命令,当目标目录 /tmp 中已经存在 a.txt 文件时,会先将其重命名为 a.txt_bak 作为备份,然后再将新的 a.txt 文件复制到目标目录。这可以有效地防止文件被覆盖,确保数据的安全性
+
+
+
+
+ ## 8. **mv**:移动文件或目录,也可用于重命名文件或目录。
+
+ - 移动文件或目录:`mv 源目录/文件 目标目录` ,相当于剪切
+ - 重命名文件或目录:`mv 原文件名 新文件名`
+
+ 在 Linux 中,`mv` 命令用于移动文件或目录,或者对它们进行重命名。以下是 `mv` 命令的一些常见用法:
+
+原则: 目标不存在,一定重命名
+
+1. 当是移动时,只能是文件移到目录
+2. 如何分辩是移动还是重命名
+ 1. 源文件 - 目标文件
+ 1. 目标已经存在:源文件替换了目标文件
+ 2. 目标不存在:直接将源文件改名为目标文件
+ 2. 源文件 -目标目录、
+ 1. 目标存在:将源文件移到目标目录里
+ 2. 目标不存在:将源文件改为目标名
+ 3. 源目录 - 目标目录
+ 1. 目标已存在:将源移到目标里
+ 2. 已经不存在:源目录改为目标目录名
+
+ 1. **移动文件或目录**:
+
+
+```
+# 将文件从移动到指定目录:
+mv 文件 目标目录
+# 将源目录A移动到目标目录B
+mv 目录A 目录B
+
+#注意:如果目标目录不存在,`mv` 命令会将其视为要重命名的文件名
+```
+ 2. **重命名文件或目录**:
+
+
+```
+# 重命名文件:
+mv 旧文件名 新文件名
+
+# 重命名目录
+mv 旧目录名 新目录名
+
+#注意,如果新文件名已存在,就会被覆盖,如果新目录名已经存在,就变成了移动
+```
+ 3. **移动并重命名:**
+
+
+```
+# 移动一个文件到新目录,并重命名这个文件。
+mv 1.txt /tmp/2.txt # 移动当前目录下的1.txt到/tmp目录,并重命名为2.txt
+
+# 移动了一个目录到另一个目录下,并重命名
+mv aDir /tmp/bDir # 将当前目录下的aDir目录移动到/tmp目录下,将改名为bDir
+```
+```bash
+# 移动多个文件 参数大于等于3个时:
+- mv 跟了3个参数时,最后一个默认是目录
+```
+
+
+```
+# 同时移动多个文件到指定目标
+mv 1.txt 2.txt /tmp # 将1.txt和2.txt 移动到/tmp目录下
+# 同时移动多个目录到指定目录下
+mv aaa bbb /tmp # 将aaa和bbb 移动到/tmp目录下
+
+# 使用通配符(如 `*`)来匹配多个文件或目录,并将它们移动到目标目录。
+mv *.txt /tmp # 移动当前目录下所有.txt结尾的文件和目录到/tmp目录下
+mv a* /tmp # 移动当前目录下,所有a开头的文件和目录到 /tmp目录下
+mv * /tmp # 移动当前目录下的,所有文件和目录到/tmp目录下
+```
+ 5. **交互式操作**:
+
+
+```
+# 使用 `-i` 选项,`mv` 命令会在移动或重命名文件前进行确认,以避免意外覆盖文件。
+mv -i 1.txt 2.txt # 当2.txt文件已经存在时,系统会提示你是否要覆盖。y 确认,n 取消
+```
+ 6. **显示详细信息**:
+
+
+```
+# 使用 `-v` 选项,`mv` 命令会显示详细的操作信息,包括移动或重命名的文件名。
+mv -v 1.txt 2.txt # 重命名1.txt为2.txt并显示详情
+renamed '1.txt' -> '2.txt' # 显示详细
+
+```
+ 7. **覆盖文件前先备份**:
+
+ * 使用 `-b` 选项,`mv` 命令会在覆盖文件之前对其进行备份。
+
+
+ ```
+ mv -b 1.txt 2.txt # 如果2.txt已存在,就先备份2.txt为2.txt~,再次1.txt改成为2.txt
+ ```
+
+
+ ## 9. **touch**:`touch` 命令主要用于创建新文件和更新文件时间戳。
+
+ ```
+ #1. 创建一个空文件
+ touch filename #如果 filename 不存在,touch 会创建一个新的空文件。
+
+ #2. 更新文件的时间戳
+ touch filename
+ #如果 filename 已经存在,touch 会更新该文件的访问和修改时间为当前时间。
+
+ #3.创建多个空文件
+ touch file1 file2 file3 #touch 可以同时创建多个空文件
+ ```
+
+ ## 作业1
+相关和目录可自行创建后再操作
+
+1. 在家目录下建立文件exam.c,将文件exam.c拷贝到/tmp这个目录下,并改名为 shiyan.c
+
+```
+touch ~/exam.c
+cp ~/exam.c /tmp/shiyan.c
+```
+2. 在任何目录下回到用户主目录?
+```
+cd ~
+```
+3. 用长格式列出/tmp/test目录下所有的文件包括隐藏文件?
+```
+ls -la /tmp/test
+```
+4. /tmp/test2目录下,创建5个文件分别是 1.txt 2.txt 3.txt 4.txt 5.txt,压缩这5个文件,压缩包的名字是hailiang.tar
+```
+cd /tmp
+mkdir -p test2
+touch test2/1.txt test2/2.txt test2/3.txt test2/4.txt test2/5.txt
+tar -cvf hailiang.tar test2/*.txt
+```
+5. 当前目录,建立文件 file1.txt 并更名为 file2.txt?
+```
+touch file1.txt
+mv file1.txt file2.txt
+```
+6. 当前目录,用vim建立文件bbbb.txt 并将用户名的加入其中保存退出?
+```
+vim bbbb.txt
+```
+7. 将家目录中扩展名为txt、doc和bak的文件全部复制到/tmp/test目录中?
+```
+cp ~/*.{txt,doc,bak} /tmp/test/
+```
+8. 将文件file1.txt从当前目录移动到家目录的/docs中。
+```
+mkdir -p ~/docs
+mv file1.txt ~/docs/
+```
+9. 复制文件file2.txt从当前目录到家目录/backup中。
+```
+mkdir -p ~/backup
+cp file2.txt ~/backup/
+```
+10. 将家目录/docs中的所有文件和子目录移动到家目录/archive中。
+```
+mv ~/docs/* ~/archive/
+```
+11. 复制家目录/photos及其所有内容到家目录/backup中。
+```
+cp -r ~/photos ~/backup/
+```
+12. 将文件家目录/docs/report.doc移动到家目录/papers中,并将其重命名为final_report.doc。
+```
+mv ~/docs/report.doc ~/papers/final_report.doc
+```
+13. 在家目录/docs中创建一个名为notes.txt的空文件,并将其复制到目录家目录/backup中。
+```
+touch ~/docs/notes.txt
+cp ~/docs/notes.txt ~/backup/
+```
+14. 复制家目录/images中所有以.jpg结尾的文件到家目录/photos中。
+```
+cp ~/images/*.jpg ~/photos/
+```
+15. 将文件家目录/docs/file1.txt和家目录/docs/file2.txt复制到家目录/backup中。
+```
+cp ~/docs/file1.txt ~/docs/file2.txt ~/backup/
+```
+16. 将家目录/docs中的所有.txt文件复制到家目录/text_files中。
+```
+mkdir -p ~/text_files
+cp ~/docs/*.txt ~/text_files/
+```
+17. 将家目录/docs中的所有文件移动到家目录/temp中,并且如果文件已存在,则覆盖它们。
+```
+mkdir -p ~/temp
+mv ~/docs/* ~/temp/
+```
+18. 将家目录/docs中的所有文件移动到家目录/archive中,并且在移动时显示详细的移动信息。
+```
+mv -v ~/docs/* ~/archive/
+```
+19. 复制家目录/docs中的所有子目录及其内容到家目录/backup中。
+```
+cp -r ~/docs/*/ ~/backup/
+```
+20. 将家目录/docs中的所有文件和子目录移动到家目录/backup中,但排除文件名以"temp_"开头的文件。
+```
+不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会
+```
+21. 将目录/docs/report.txt移动到家目录/archive中,但如果目标目录中已存在同名文件,则不直接覆盖,先备份同名
+文件为report.txt_bak。
+```
+ cp ~/archive/report.txt ~/archive/report.txt_bak
+ mv ~/docs/report.txt ~/archive/
+```
+22. 将家目录/docs中所有以.pdf结尾的文件复制到家目录/pdf_files中,并且如果目标目录中已存在同名文件,则忽略它们。
+```
+mkdir -p ~/pdf_files
+cp -n ~/docs/*.pdf ~/pdf_files/
+```
+## 作业2
+相关和目录可自行创建后再操作
+
+### 练习题 1:复制文件
+
+假设你有两个目录:`/home/user/docs` 和 `/home/user/backup`。
+
+1. 将`/home/user/docs`目录下的`file1.txt`复制到`/home/user/backup`目录下。
+2. 复制`/home/user/docs`目录下的所有`.txt`文件到`/home/user/backup`目录下。
+```
+1.cp /home/user/docs/file1.txt /home/user/backup/
+2.cp /home/user/docs/*.txt /home/user/backup/
+```
+### 练习题 2:复制文件夹及其内容
+
+1. 假设`/home/user/photos`是一个包含多个图片文件夹的目录,请复制整个`/home/user/photos`目录及其所有内容到`/home/user/archive`目录下。
+```
+cp -r /home/user/photos /home/user/archive/
+```
+### 练习题 3:移动文件
+
+1. 将`/home/user/docs`目录下的`file2.docx`移动到`/home/user/papers`目录下。
+2. 如果`/home/user/papers`目录下已经有一个名为`file2.docx`的文件,请确保移动操作会询问你是否要覆盖它。
+```
+1.mv /home/user/docs/file2.docx /home/user/papers/
+
+2.mv -i /home/user/docs/file2.docx /home/user/papers/
+
+```
+### 练习题 4:重命名文件
+
+1. 将`/home/user/docs`目录下的`oldname.pdf`重命名为`newname.pdf`。
+```
+mv /home/user/docs/oldname.pdf /home/user/docs/newname.pdf
+```
+### 练习题 5:结合使用
+
+1. 复制`/home/user/docs`目录下的`report.md`到`/home/user/temp`,然后将复制过去的文件重命名为`temp_report.md`。
+2. 将`/home/user/docs`目录下所有以`.doc`结尾的文件移动到`/home/user/processed`,并且如果这些文件在目标目录中已经存在,则不覆盖它们。
+```
+1.cp /home/user/docs/report.md /home/user/temp/temp_report.md
+
+2.mv -n /home/user/docs/*.doc /home/user/processed/
+```
+### 练习题 6:使用通配符
+
+1. 复制`/home/user/docs`目录下所有以`.jpg`或`.png`结尾的图片文件到`/home/user/images`目录。
+```
+cp /home/user/docs/*.{jpg,png} /home/user/images/
+```
+### 练习题 7:详细输出
+
+1. 使用`cp`命令复制文件时,显示详细的复制信息。
+2. 使用`mv`命令移动文件时,显示详细的移动信息。
+```
+1.cp -v /home/user/source_file /home/user/destination_dir/
+2.mv -v /home/user/source_file /home/user/destination_dir/
+```
+### 练习题 8:更新文件
+
+1. 如果`/home/user/backup`目录中已经有一个与`/home/user/docs`目录下的`file1.txt`同名的文件,并且`/home/user/docs/file1.txt`的内容是更新的,请使用`cp`命令将更新的文件复制到备份目录,并覆盖旧文件(假设你知道旧文件可以被安全地覆盖)。
+```
+cp -u /home/user/docs/file1.txt /home/user/backup/
+```
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240525-\347\273\235\345\257\271\350\267\257\345\276\204\347\233\270\345\257\271\350\267\257\345\276\204.md" "b/\345\264\224\346\242\246\345\234\206/20240525-\347\273\235\345\257\271\350\267\257\345\276\204\347\233\270\345\257\271\350\267\257\345\276\204.md"
new file mode 100644
index 0000000000000000000000000000000000000000..367ee403614201dc6127b64b286712864130c892
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240525-\347\273\235\345\257\271\350\267\257\345\276\204\347\233\270\345\257\271\350\267\257\345\276\204.md"
@@ -0,0 +1,129 @@
+### 绝对路径和相对路径
+#### 1、绝对路径
+定义:从根目录 / 开始的完整路径,用于唯一确定文件或目录的位置。
+
+特点:
+```
+以 / 开头
+与当前工作目录无关
+```
+
+#### 2、相对路径
+定义:对于当前工作目录的路径,用于在当前目录的基础上指向文件或目录。
+
+特点:
+```
+不以 / 开头
+依赖于当前的工作目录
+特殊符号:
+
+. 表示当前目录 ./
+.. 表示上一级目录../
+```
+### 作业
+相关和目录可自行创建后再操作
+
+1. 在家目录下建立文件exam.c,将文件exam.c拷贝到/tmp这个目录下,并改名为 shiyan.c
+
+```
+touch exam.c
+cp ./exam.c ../../tmp/shiyan.c
+```
+2. 在任何目录下回到用户主目录?
+```
+cd
+```
+3. 用长格式列出/tmp/test目录下所有的文件包括隐藏文件?
+```
+ ls -alh ./test
+```
+4. /tmp/test2目录下,创建5个文件分别是 1.txt 2.txt 3.txt 4.txt 5.txt,压缩这5个文件,压缩包的名字是hailiang.tar
+```
+tar -czvf hailiang.tar.gz ./*.txt
+ ls
+```
+5. 当前目录,建立文件 file1.txt 并更名为 file2.txt?
+```
+touch file1.txt
+ls
+ mv file1.txt file2.txt
+ ls
+```
+6. 当前目录,用vim建立文件bbbb.txt 并将用户名的加入其中保存退出?
+```
+vim bbbb.txt
+```
+7. 将家目录中扩展名为txt、doc和bak的文件全部复制到/tmp/test目录中?
+```
+p -r ./*.txt ./*.doc ./*.bak ../../tmp/test
+tree ../../tmp/test
+```
+8. 将文件file1.txt从当前目录移动到家目录的/docs中。
+```
+touch file1.txt
+mv ./file1.txt ~/docs/
+```
+9. 复制文件file2.txt从当前目录到家目录/backup中。
+```
+touch file2.txt
+./file2.txt ~/backup/
+```
+10. 将家目录/docs中的所有文件和子目录移动到家目录/archive中。
+```
+mv ./docs/* ./archive/
+```
+11. 复制家目录/photos及其所有内容到家目录/backup中。
+```
+cp -r ./photos/ ./backup/
+tree backup/
+```
+12. 将文件家目录/docs/report.doc移动到家目录/papers中,并将其重命名为final_report.doc。
+```
+mv ./docs/report.doc ./papers/finals_report.doc
+```
+13. 在家目录/docs中创建一个名为notes.txt的空文件,并将其复制到目录家目录/backup中。
+```
+ touch ./docs/notes.txt
+cp -r ./docs/notes.txt ./backup/
+```
+14. 复制家目录/images中所有以.jpg结尾的文件到家目录/photos中。
+```
+cp -r ./images/*.jpg ./photos/
+```
+15. 将文件家目录/docs/file1.txt和家目录/docs/file2.txt复制到家目录/backup中。
+```
+touch ./docs/000.txt ./docs/999.txt
+tree ./docs/
+cp -r ./docs/000.txt ./docs/999.txt ./backup/
+```
+16. 将家目录/docs中的所有.txt文件复制到家目录/text_files中。
+```
+cp -r ./docs/*.txt ./text_files/
+```
+17. 将家目录/docs中的所有文件移动到家目录/temp中,并且如果文件已存在,则覆盖它们。
+```
+ mv ./docs/* ./temp/
+cd temp
+ls
+```
+18. 将家目录/docs中的所有文件移动到家目录/archive中,并且在移动时显示详细的移动信息。
+```
+mv -v ./docs/* ./archive/
+```
+19. 复制家目录/docs中的所有子目录及其内容到家目录/backup中。
+```
+ cp -r ./docs/* ./backup/
+```
+20. 将家目录/docs中的所有文件和子目录移动到家目录/backup中,但排除文件名以"temp_"开头的文件。
+```
+不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会
+```
+21. 将目录/docs/report.txt移动到家目录/archive中,但如果目标目录中已存在同名文件,则不直接覆盖,先备份同名文件为report.txt_bak。
+```
+不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会
+```
+22. 将家目录/docs中所有以.pdf结尾的文件复制到家目录/pdf_files中,并且如果目标目录中已存在同名文件,则忽略它们。
+```
+ touch ./docs/3j.pdf
+ cp -r ./docs/3j.pdf ./pdf_files/
+```
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240527-\346\237\245\346\211\276.md" "b/\345\264\224\346\242\246\345\234\206/20240527-\346\237\245\346\211\276.md"
new file mode 100644
index 0000000000000000000000000000000000000000..69a615e1fed98662b7a50160cd1b171649e8d429
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240527-\346\237\245\346\211\276.md"
@@ -0,0 +1,151 @@
+### 语法
+```
+find [路径] [匹配条件] [动作]
+```
+
+参数说明 :
+
+路径 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。
+
+expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。
+
+###### 匹配条件 中可使用的选项有二三十个之多,以下列出最常用的部份:
+```
+-name pattern:按文件名查找,支持使用通配符 * 和 ?。
+-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
+-size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
+-mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
+-user username:按文件所有者查找。
+-group groupname:按文件所属组查找。
+```
+
+###### find 命令中用于时间的参数如下:
+```
+-amin n:查找在 n 分钟内被访问过的文件。
+-atime n:查找在 n*24 小时内被访问过的文件。
+-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
+-ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
+-mmin n:查找在 n 分钟内被修改过的文件。
+-mtime n:查找在 n*24 小时内被修改过的文件。
+```
+在这些参数中,n 可以是一个正数、负数或零。正数表示在指定的时间内修改或访问过的文件,负数表示在指定的时间之前修改或访问过的文件,零表示在当前时间点上修改或访问过的文件。
+
+###### 正数应该表示时间之前,负数表示时间之内。
+
+例如:-mtime 0 表示查找今天修改过的文件,-mtime -7 表示查找一周以前修改过的文件。
+
+###### 关于时间 n 参数的说明:
+```
++n:查找比 n 天前更早的文件或目录。
+
+-n:查找在 n 天内更改过属性的文件或目录。
+
+n:查找在 n 天前(指定那一天)更改过属性的文件或目录。
+```
+
+在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。
+
+#### 区别:
+```
+(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
+
+(2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。
+
+(3)which 查看可执行文件的位置 ,只有设置了环境变量的程序才可以用
+
+(4)whereis 寻找特定文件,只能用于查找二进制文件、源代码文件和man手册页
+
+(5)locate 配合数据库查看文件位置 ,详情:locate -h查看帮助信息
+```
+### 作业
+### 操作题
+
+1. **查找当前目录及其子目录中所有扩展名为 `.log` 的文件**:
+ ```
+ find . -type f -name "*.log"
+ ```
+
+2. **在 `/var/logs` 目录及其子目录中查找所有包含关键字 `error` 的文件,并显示匹配的行**:
+ ```
+ grep -rnw '/var/logs' -e 'error'
+ ```
+
+3. **在 `/home/user/docs` 目录中查找文件名包含 `report` 的所有文件**:
+ ```
+ find /home/user/docs -tpye f "*report*"
+ ```
+
+4. **查找 `/etc` 目录中最近7天内修改过的文件**:
+ ```
+ find /etc -type f -mtime -7
+ ```
+
+5. **显示 `/usr/bin` 目录中名为 `python` 的可执行文件的路径**:
+ ```
+ which python
+ ```
+
+6. **查找系统中名为 `ls` 的命令及其手册页位置**:
+ ```
+ which ls
+ man -w ls
+ ```
+
+7. **查找当前目录中包含关键字 `TODO` 的所有文件,并显示匹配的行和文件名**:
+ ```
+ grep -rnw '.' -e 'YODO' --include=*
+ ```
+
+8. **在 `/home/user/projects` 目录中查找所有包含关键字 `function` 的 `.js` 文件**:
+ ```
+ grep -rnw '/home/user/projects' -e 'function' --include=*.js
+ ```
+
+9. **查找并显示当前目录及其子目录中所有空文件**:
+ ```
+ find . -type f -empty
+ ```
+
+10. **在 `/var/www` 目录中查找包含关键字 `database` 的所有文件,并只显示文件名**:
+ ```
+ grep -rl 'database' /var/www
+ ```
+
+### 综合操作题
+
+**综合操作题:**
+
+假设你在一个名为 `/home/user/workspace` 的目录中工作。你需要完成以下任务:
+
+1. 查找该目录中所有扩展名为 `.conf` 的文件。
+```
+find /home/user/workspace -type f -name "*.conf"
+```
+2. 在这些 `.conf` 文件中查找包含关键字 `server` 的行。
+```
+grep -rnw '/home/user/workspace' -e 'server' --include=*.conf
+```
+3. 将包含关键字 `server` 的文件名和匹配的行保存到一个名为 `server_lines.txt` 的文件中。
+```
+grep -rnw '/home/user/workspace' -e 'server' --include=*.conf > server_lines.txt
+```
+**预期命令步骤:**
+
+1. 查找所有扩展名为 `.conf` 的文件:
+ ```
+ find /home/user/workspace -type f -name "*.conf"
+ ```
+
+2. 在这些 `.conf` 文件中查找包含关键字 `server` 的行:
+ ```
+ grep -rnw '/home/user/workspace' -e 'server' --include=*.conf
+ ```
+
+3. 将结果保存到 `server_lines.txt` 文件中:
+ ```
+ grep -rnw '/home/user/workspace' -e 'server' --include=*.conf > server_lines.txt
+ ```
+
+通过这套操作题和综合操作题,你可以全面地了解和应用Linux系统中与文件和内容查询相关的常用命令。
+
+
diff --git "a/\345\264\224\346\242\246\345\234\206/20240529-\345\210\235\345\247\213LINUX\347\237\245\350\257\2068.md" "b/\345\264\224\346\242\246\345\234\206/20240529-\345\210\235\345\247\213LINUX\347\237\245\350\257\2068.md"
new file mode 100644
index 0000000000000000000000000000000000000000..3f2eacd2373cd17d79ea88ab35c4c8ab5c108339
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240529-\345\210\235\345\247\213LINUX\347\237\245\350\257\2068.md"
@@ -0,0 +1,183 @@
+### 查看文件内容:
+```
+ - `cat`:显示文件内容。
+ - `tac`:与`cat`相反,从文件尾部开始显示内容。
+ - `more`:分页显示文件内容。
+ - `less`:与`more`类似,但提供了更多的导航和搜索功能。
+ - `head`:显示文件开头的内容(默认10行)。
+ - `tail`:显示文件结尾的内容(默认10行)。
+ - `nl`:显示文件内容,并添加行号。
+ - `od`:以八进制、十进制、十六进制或其他格式转储文件内容。
+```
+### `cat`**语法**:
+
+ ```bash
+ cat [选项] 文件 ...
+ # 作用:显示文件内容,也可以将多个文件内容连接在一起输出。
+ ```
+
+**常见用法**:
+
+ - 显示文件内容:`cat file.txt`
+ - 连接多个文件内容:`cat file1.txt file2.txt`
+ - 使用`-n`选项显示行号:`cat -n file.txt`
+
+注意:cat会将文件内容一次性全部显示出来,大文件不推荐使用。
+
+---
+
+ ### `tac`**语法**:
+
+ ```bash
+ tac 文件 ...
+ # 作用: 与`cat`相反,从文件尾部开始显示内容到文件开头。命令单词也是反过来的
+ ```
+
+**常见用法**:
+
+ - 从尾部开始,显示文件内容:`tac /var/log/dpkg.log`
+ - 从尾部开始,显示多个文件内容:`tac file1.txt file2.txt`
+
+
+
+----
+
+ ### `more`**语法**:
+
+ ```bash
+ more [选项] 文件
+ # 作用:分页显示文件内容,每次显示一屏。即按页显示文件内容
+ ```
+
+**常见用法**:
+
+ - 分页显示文件内容:`more file.txt`
+ - 使用空格键向下翻页,回车键显示下一行,`q`键退出
+
+常用于按页查看大文件,但会先一次性加载整个大文件,导致加载变慢
+
+
+
+-------
+
+ ### `less` **语法**:
+
+- 当你要查看一个大文件时,通常用less命令一页一页加载
+
+ ```bash
+ less [选项] 文件
+ # 作用:与`more`类似,但提供了更多的导航和搜索功能,如上下滚动、搜索等。
+ ```
+
+**常见用法**:
+
+ - 类似`more`的分页显示:`less file.txt
+ - 使用上下键、Page Up/Page Down键进行滚动,`/`搜索,`n`下一个匹配,`N`上一个匹配,`q`退出。
+## 作业
+
+### `cat` 命令操作题
+
+1. **操作题一**:使用 `cat` 命令显示 `/etc/passwd` 文件的内容。
+```
+cat /etc/passwd
+```
+2. **操作题二**:将文件 `/etc/passwd` 的内容复制到 `passwd_bak.txt` 文件中,但不使用 `cp` 命令。
+```
+cat /etc/passwd > passwd_bak.txt
+```
+3. **操作题三**:新建两个文件 `file1.txt` 和 `file2.txt`,分别写一些不同的内容,再将这两个文件的内容合并到一个新的文件 `file3.txt` 中。
+```
+mkdir -p file1.txt
+mkdir -p file2.txt
+echo "Content for file1" > file1.txt
+echo "Content for file2" > file2.txt
+cat file1.txt file2.txt > file3.txt
+```
+### `tac` 命令操作题
+
+1. 使用命令从尾部开始显示 `bigfile.txt` 文件的内容。
+```
+tac bigfile.txt
+```
+2. 尝试找出 `bigfile.txt` 文件的最后一行内容,只使用 `tac` 命令。
+```
+tac bigfile.txt | head -n 1
+```
+3. 查看 `bigfile.txt` 文件的最后5行内容。
+```
+tac bigfile.txt | head -n 5
+```
+4. 倒序查看 `bigfile.txt` 文件的最后5行内容。
+```
+tac bigfile.txt | head -n 5
+```
+### `more` 命令操作题
+
+1. **操作题一**:使用 `more` 命令查看 `bigfile.txt` 文件的内容,并在查看过程中使用空格键翻页。
+```
+more bigfile.txt
+```
+2. **操作题二**:在 `more` 命令的查看过程中,如何使用回车键来逐行查看文件内容?
+```
+more
+```
+3. **操作题三**:如何在 `more` 命令中搜索`bigfile.txt`特定字符串(例如 "error")并跳转到下一个匹配项?
+```
+more +/error bigfile.txt
+```
+### `less` 命令操作题
+
+1. **操作题一**:使用 `less` 命令查看 `bigfile.txt` 文件,并快速定位到文件的末尾。
+```
+less bigfile.txt
+按 G 键可以快速定位到文件的末尾。
+```
+2. **操作题二**:在 `less` 命令中,如何向上和向下滚动文件内容?
+
+```
+ less 命令中,按 空格键 向下滚动一页,按 b 键向上滚动一页
+```
+3. **操作题三**:在 `less` 命令中,如何搜索`bigfile.txt`一个特定的函数名(例如 `def my_function`),并查看所有匹配项?
+```
+less bigfile.txt
+然后在 less 界面内按 / 键,输入 "def my_function" 再按回车键。使用 n 键查看下一个匹配项,N 键查看上一个匹配项。
+```
+### `head` 命令操作题
+
+1. **操作题一**:使用 `head` 命令显示 `bigfile.txt` 文件的前5行内容。
+```
+head -n 5 bigfile.txt
+```
+2. **操作题二**:将 `bigfile.txt` 的前20行内容保存到 `bigfile_20.txt` 文件中。
+```
+head -n 20 bigfile.txt > bigfile_20.txt
+```
+3. **操作题三**:如何结合 `head` 和 `grep` 命令来查找 `bigfile.txt` 文件中以 "A" 开头的前10行?
+```
+head -n 10 bigfile.txt |grep '^A'
+```
+### `tail` 命令操作题
+
+1. **操作题一**:使用 `tail` 命令显示 `bigfile.txt` 文件的最后20行内容。
+```
+tail -n 20 bigfile.txt
+```
+2. **操作题二**:如何实时跟踪一个正在写入的日志文件(如 `bigfile.txt`)的最后10行内容?
+```
+tail -n 10 bigfile.txt
+```
+3. **操作题三**:在 `tail` 命令中,如何反向显示文件的最后10行内容(即按从旧到新的顺序显示)?
+```
+tail -n 10 bigfile.txt | tac
+```
+
+### 综合题
+
+**综合题**:假设你有一个非常大的日志文件 `bigfile.txt`,你需要找出所有包含 "ERROR" 字符串的行,并查看这些行及其之前的两行内容。如何结合使用 `grep`、`head`、`tail` 和其他命令来完成这个任务?
+```
+grep -B 2 'ERROR' bigfile.txt 不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会
+```
+**提示**:你可能需要多次使用 `grep` 来找到包含 "ERROR" 的行,并使用 `tail` 和 `head` 来提取这些行及其前后的内容。另外,考虑使用管道(`|`)来连接命令。
+
+
+
diff --git "a/\345\264\224\346\242\246\345\234\206/20240530-\345\210\235\345\247\213LINUX\347\237\245\350\257\2069.md" "b/\345\264\224\346\242\246\345\234\206/20240530-\345\210\235\345\247\213LINUX\347\237\245\350\257\2069.md"
new file mode 100644
index 0000000000000000000000000000000000000000..dff3c6162c8d36a2d0f2d1cdf1f247704f3aea08
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240530-\345\210\235\345\247\213LINUX\347\237\245\350\257\2069.md"
@@ -0,0 +1,82 @@
+### 文件和目录操作
+
+#### **ls**:
+ - 常用选项:`-l`(以长格式显示)、`-a`(显示隐藏文件和目录)、`-h`(人类可读格式显示文件大小)等。
+ - 使用语法:`ls [选项] [目录名]`
+ - 使用场景:用于列出指定目录中的所有文件和子目录。
+ - 使用示例:
+ - 列出当前目录下的所有文件和子目录:`ls`
+ - 以长格式显示当前目录下的所有文件和子目录:`ls -l`
+ - 列出上级目录下的所有文件和子目录:`ls ..`
+#### **cd**:
+ - 使用��法:`cd [目录名]`
+ - 使用场景:用于更改当前工作目录。
+ - 使用示例:
+ - 进入当前用户的主目录:`cd ~`
+ - 进入 /var/log 目录:`cd /var/log`
+#### **pwd**:
+ - 使用语法:`pwd`
+ - 使用场景:用于显示当前工作目录的路径。
+ - 使用示例:
+ - 显示当前工作目录的路径:`pwd`
+#### **mkdir**:
+ - 常用选项:`-p`(创建多级目录,如果不存在则创建父目录)等。
+ - 使用语法:`mkdir [选项] 目录名`
+ - 使用场景:用于创建新的目录。
+ - 使用示例:
+ - 在当前目录下创建一个名为 "docs" 的目录:`mkdir docs`
+ - 创建一个名为 "dir1/dir2" 的多级目录(如果不存在则创建父目录):`mkdir -p dir1/dir2`
+#### **rm**:
+ - 常用选项:`-r`(递归删除目录及其内容)、`-f`(强制删除文件或目录,不提示确认)等。
+ - 使用语法:`rm [选项] 文件或目录名`
+ - 使用场景:用于删除文件或目录。
+ - 使用示例:
+ - 删除一个名为 "file.txt" 的文件:`rm file.txt`
+ - 删除一个名为 "dir" 的空目录:`rm dir`
+ - 递归删除一个名为 "dir" 的目录及其内容:`rm -r dir`
+ - 强制删除一个名为 "file.txt" 的文件,不提示确认:`rm -f file.txt`
+#### **cp**:
+ - 常用选项:`-r`(递归复制目录���其内容)、`-i`(提示在覆盖已存在的文件之前进行确认)等。
+ - 使用语法:`cp [选项] 源文件或目录 目标文件或目录`
+ - 使用场景:用于复制文件或目录。
+ - 使用示例:
+ - 将一个名为 "file.txt" 的文件复制到当前目录下:`cp file.txt .`
+ - 将一个名为 "file.txt" 的文件复制到 "/tmp" 目录下:`cp file.txt /tmp`
+ - 递归复制一个名为 "dir" 的目录及其内容到当前目录下:`cp -r dir .`
+ - 复制一个名为 "file.txt" 的文件到当前目录下,并提示在覆盖已存在的文件之前进行确认:`cp -i file.txt .`
+#### **mv**:
+ - 常用选项:`-i`(提示在覆盖已存在的文件之前进行确认)、`-n`(不要覆盖已存在的文件)等。
+ - 使用语法:`mv [选项] 源文件或目录 目标文件或目录`
+ - 使用场景:用于移动或重命名文件或目录。
+ - 使用示例:
+ - 将一个名为 "file.txt" 的文件重命名为 "newfile.txt":`mv file.txt newfile.txt`
+ - 将一个名为 "file.txt" 的文件移动到 "/tmp" 目录下:`mv file.txt /tmp`
+ - 将一个名为 "dir" 的目录移动到上级目录下:`mv dir ..`
+ - 将一个名为 "file.txt" 的文件移动到当前目录下,并提示在覆盖已存在的文件之前进行确认:`mv -i file.txt .`
+#### **touch**:
+ - 使用语法:`touch 文件名`
+ - 使用场景:用于创建一个空文件或更新文件访问和修改时间。
+ - 使用示例:
+ - 在当前目录下创建一个名为 "file.txt" 的空文件:`touch file.txt`
+ - 更新一个名为 "file.txt" 的文件的访问和修改时间:`touch file.txt`
+#### **ln**:
+ - 常用选项:`-s`(创建符号链接)等。
+ - 使用语法:`ln [选项] 源文件或目录 目标文件或目录`
+ - 使用场景:用于创建硬链接或符号链接。
+ - 使用示例:
+ - 在当前目录下创建一个名为 "link" 的硬链接,指向一个名为 "file.txt" 的文件:`ln file.txt link`
+ - 在当前目录下创建一个名为 "symlink" 的符号链接,指向一个名为 "file.txt" 的文件:`ln -s file.txt symlink`
+#### **硬链接**:
+ - **区别**:硬链接是文件系统中一个文件指向另一个文件的链接,它们共享相同的 inode 号。因此,原文件和硬链接之间没有“主”和“副”之分,它们是同等的关系。
+ - **用法**:使用 `ln` 命令创建硬链接,如 `ln 源文件 目标硬链接`。
+ - 场景:
+ - 在文件系统中,删除原文件并不会影响硬链接,只有当所有硬链接都被删除后,文件才会真正被删除。
+ - 可以用于在不同目录中创建相同文件的别名,节省存储空间。
+ - 硬链接不可以链接目录。
+#### **符号链接**(也称为软链接或软连接):
+ - **区别**:符号链接是一个文件指向另一个文件的路径的链接。它类似于 Windows 中的快捷方式。符号链接有自己的 inode 号,而指向的文件有它自己的 inode 号。
+ - **用法**:使用 `ln -s` 命令创建符号链接,如 `ln -s 源文件 目标符号链接`。
+ - 场景:
+ - 用于创建指向文件或目录的快捷方式,便于在文件系统中引用或访问其他位置的文件或目录。
+ - 符号链接可以链接目录。
+ - 当原文件被删除或移动时,符号链接仍然存在,但它指向的目标文件会失效,称为“悬挂链接”。
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240601-sed.md" "b/\345\264\224\346\242\246\345\234\206/20240601-sed.md"
new file mode 100644
index 0000000000000000000000000000000000000000..740cb9183d170900efa133440b82f51e71c01f39
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240601-sed.md"
@@ -0,0 +1,315 @@
+`sed`(stream editor)是一个用于处理和转换文本流的强大工具。它在脚本和命令行中都非常有用,可以执行插入、删除、查找、替换和数据过滤等操作。以下是一些具体用法、常见场景及示例:
+
+### 基本语法
+```bash
+sed [选项] '命令' 文件
+```
+
+### 常见选项
+- `-e`:直接在命令行模式中执行多个`sed`命令
+- `-f`:从指定的文件中读取`sed`命令
+- `-i`:直接编辑文件内容
+- `-n`:禁止自动打印模式空间内容
+
+### 常见命令
+- `s/regexp/replacement/`:替换匹配的正则表达式
+- `d`:删除行
+- `p`:打印行
+- `a\`:后面追加文本 append
+- `i\`:前面插入文本 insert
+- `c\`:替换整行文本
+
+### 使用场景及示例
+
+#### 1. 文本替换
+将文件`example.txt`中的所有`apple`替换为`orange`:
+```bash
+sed 's/apple/orange/g' example.txt # g 表示全局,所有
+
+#### 2. 只替换第一个匹配项
+仅替换每行中的第一个`apple`:
+```bash
+sed 's/apple/orange/' example.txt # 每行一次
+```
+
+ 其它一些用法
+
+ ```bash
+ #在文件 example.txt 中每一行的开头插入 "Hello, "
+ sed 's/^/Hello, /' example.txt
+ # 在文件 example.txt 中每一行的末尾追加 "!":
+ sed 's/$/!/' example.txt
+ ```
+
+#### 3. 指定行进行替换
+只替换第2行的`apple`:
+```bash
+sed '2s/apple/orange/' example.txt
+# s前加行号
+sed '2s/apple/orange/g' example.txt
+# 如果后面还加了g 就是该行的所有被替换
+```
+
+#### 4. 删除行 delele
+删除包含`apple`的行:
+```bash
+sed '2d' example.txt # 删除第2行
+sed 'd' example.txt # 删除所有行
+sed "/apple/d" # 删除所有包含了apple的行
+```
+
+#### 5. 打印行 print => p
+打印包含`apple`的行:
+```bash
+sed -n '/apple/p' example.txt
+```
+
+#### 6. 插入文本 a行后追加一行, i行前追加一行 c
+在第2行后插入一行文本`This is inserted.`:
+```bash
+sed '2a\This is inserted.' example.txt
+```
+
+ 除了手动指定哪一行,还能用关键字指定行的位置
+
+**可先定位再执行,定位到关键字所在的行,再执行追加、插入、 替换**
+
+1. sed "/关键字/a\追加的内容"
+2. sed "/关键字/i\插入的内容
+3. sed "/关键字/c\替换的内容
+
+#### 7. 替换整行 c
+将第2行替换为`This is replaced.`:
+```bash
+sed '2c\This is replaced.' example.txt
+```
+
+#### 8. ;结合多个命令
+删除包含`apple`的行并将`banana`替换为`grape`:
+```bash
+sed '/apple/d; s/banana/grape/g' example.txt
+```
+
+#### 9. 直接修改文件
+将文件`example.txt`中所有`apple`替换为`orange`并保存更改:
+```bash
+sed -i 's/apple/orange/g' example.txt
+```
+
+#### 10. 在命令行模式中执行多个`sed`命令
+
+在`sed`命令中,`-e`选项允许你在一行中指定多个`sed`命令。每个命令都用`-e`前缀,并且这些命令会按照指定的顺序执行。这在需要对文本进行多个不同的操作时非常有用,而无需将多个`sed`命令链接在一起。
+
+下面是一个使用`-e`选项在命令行中执行多个`sed`命令的示例:
+
+
+```bash
+echo "Hello, World!" | sed -e 's/Hello/Hi/' -e 's/World/Universe/'
+```
+在这个例子中,我们首先使用`s/Hello/Hi/`将"Hello"替换为"Hi",然后使用`s/World/Universe/`将"World"替换为"Universe"。这两个替换操作都会在同一行文本上执行。
+
+输出结果将是:
+
+```
+Hi, Universe!
+```
+通过使用`-e`选项,你可以将多个`sed`命令组合在一起,以便在一次处理中完成多个文本转换任务。
+
+#### 11. 使用包含 `sed` 命令的脚本文件
+
+`-f` 选项允许 `sed` 从一个文件中读取编辑命令,而不是直接在命令行中指定。
+
+第一步,先编写脚本文件test.txt
+
+```bash
+# sed的命令脚本文件
+/apple/d # 删除包含apple的所有行
+s/banana/grape/ # 将banana替换成grape
+# 注意多个命令直接一行一个,不用;号也不用-e
+```
+
+第二步,执行这个脚本
+
+```bash
+sed -f test.txt banana.txt # 使用test.txt中的sed命令对banana.txt文件进行处理
+```
+
+## 作业111
+### 操作题 1
+
+1. 使用 `sed` 将文件 `lianxi.txt` 中所有的 "apple" 替换为 "banana",并将结果输出到标准输出。
+
+```bash
+sed 's/apple/banana/g' lianxi.txt
+```
+
+2. 使用 `sed` 删除文件 `lianxi.txt` 中所有以字母 "A" 开头的行,并将结果保存到新文件 `clean_data.csv` 中。
+
+```bash
+sed '/^A/d' lianxi.txt > clean_data.cvs
+```
+
+注意:尽管我们保存为 `.csv`,但内容并不是 CSV 格式。
+
+3. 使用 `sed` 在文件 `lianxi.txt` 的每一行开头插入文本 "Line:",并将结果覆盖原始文件。
+
+```bash
+sed -i 's/^/Line:/' lianxi.txt
+```
+
+或者(如果支持 `-i` 选项直接修改文件):
+
+```bash
+sed 's/^/Line:/' lianxi.txt > lianxi.txt.tmp && mv lianxi.txt.tmp lianxi.txt
+```
+
+### 操作题 2
+
+1. 使用 `sed` 将文件 `lianxi.txt` 中所有以 "#" 开头的行(注释行)删除,然后将结果输出到标准输出。
+
+```bash
+sed '/^#/d' lianxi.txt
+```
+
+2. 使用 `sed` 在文件 `lianxi.txt` 中每一行的末尾追加文本 " - The End",并将结果保存到新文件 `story_end.txt` 中。
+
+```bash
+sed 's/$/-The End' lianxi.txt > story_end.txt
+```
+
+3. 使用 `sed` 将文件 `lianxi.txt` 中第10行至第20行的内容输出到标准输出。
+
+```bash
+sed -n '10,20p' lianxi.txt
+
+```
+
+### 操作题 3
+
+1. 使用 `sed` 找到文件 `lianxi.txt` 中所有包含 "@example.com" 的邮箱地址,并将结果输出到标准输出。
+
+```bash
+sed -n '/@example.com/p' lianxi.txt
+```
+
+2. 使用 `sed` 删除文件 `lianxi.txt` 中的空白行,并将结果保存到新文件 `clean_notes.txt` 中。
+
+```bash
+sed '/^$/d' lianxi.txt > clean_notes.txt
+```
+
+3. 使用 `sed` 将文件 `lianxi.txt` 中所有的 "color" 替换为 "colour",并将结果输出到标准输出。
+
+```bash
+sed 's/color/colour/g' lianxi.txt
+```
+## 作业222
+1. 使用 `sed` 将文件 `exam.txt` 中所有的 "dog" 替换为 "cat",并将结果输出到标准输出。
+
+```
+sed 's/dog/cat/g' exam.txt
+
+```
+
+1. 使用 `sed` 将文件 `exam.txt` 中所有的 "123" 替换为 "OneTwoThree",并将结果保存到新文件 `updated_exam.txt` 中。
+
+```
+sed 's/123/OneTwoThree/g' exam.txt > updated_exam.txt
+```
+
+#### 删除操作
+
+1. 使用 `sed` 删除文件 `exam.txt` 中所有以 "#" 开头的注释行,并将结果输出到标准输出。
+
+```
+sed '/^#/d' exam.txt
+```
+
+1. 使用 `sed` 删除文件 `exam.txt` 中所有包含 "words" 的行,并将结果保存到新文件 `clean_exam.txt` 中。
+
+```
+sed '/words/d' exam.txt > clean_exam.txt
+```
+
+#### 插入操作
+
+1. 使用 `sed` 在文件 `exam.txt` 的第2行插入一行 "Welcome to sed manipulation",并将结果保存到新文件 `updated_exam.txt` 中。
+
+```
+sed '2i\Welcome to sed manipulation' exam.txt > updated_exam.txt
+```
+
+1. 使用 `sed` 在文件 `exam.txt` 的`numbers`所在行插入一行 "This is a new line",并将结果输出到标准输出。
+
+```
+sed '/numbers/a\This is a new line' exam.txt
+```
+
+#### 追加操作
+
+1. 使用 `sed` 在文件 `exam.txt` 的末尾追加一行 "End of practice",并将结果保存到新文件 `updated_exam.txt` 中。
+
+```
+sed '$a\End of practice' exam.txt > updated_exam.txt
+```
+
+1. 使用 `sed` 在文件 `exam.txt` 的每一行末尾追加内容 " - 2024-05-31",并将结果输出到标准输出。
+
+```
+sed 's/$/- 2024-05-31/' exam.txt
+```
+
+#### 整行替换操作
+
+1. 使用 `sed` 将文件 `exam.txt` 中所有以字母 "W" 开头的行替换为 "Not Available",并将结果输出到标准输出。
+
+```
+sed '/^W/c\Not Available' exam.txt
+```
+
+1. 使用 `sed` 将文件 `exam.txt` 中所有包含 "words" 的行替换为 "Replaced",并将结果保存到新文件 `updated_exam.txt` 中。
+
+```
+sed 's/.*words.*/Replaced/' exam.txt > updated_exam.txt
+```
+
+#### 多命令操作
+
+1. 使用 `sed` 删除文件 `exam.txt` 中`dog`所在行,`file`换成`文件`,并将结果输出到标准输出。
+
+```
+sed -e '/dog/d' -e 's/file/文件/g' exam.txt
+```
+
+1. 使用 `sed` 将文件 `exam.txt` 中,删除空白行并将所有以 "It" 开头的行替换为 "This",
+
+```
+sed -e '/^$/d' -e '/^It/c\This' exam.txt
+```
+
+#### 脚本文件操作
+
+1. 创建一个 `sed` 脚本文件 `replace_apple_with_orange.sed`,实现将文件 `exam.txt` 中所有 "apple" 替换为 "orange" 的功能,并将结果输出到标准输出。
+
+```
+s/apple/orange/g(不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会)
+```
+
+运行脚本:
+
+```
+sed -f replace_apple_with_orange.sed exam.txt(不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会)
+```
+
+1. 创建一个 `sed` 脚本文件 `remove_blank_lines.sed`,实现删除文件 `exam.txt` 中所有空白行的功能,并将结果保存到新文件 `cleaned_exam.txt` 中。
+
+```
+/^$/d(不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会)
+```
+
+运行脚本:
+
+```
+sed -f remove_blank_lines.sed exam.txt > cleaned_exam.txt (不会不会不会不会不会不会不会不会不会不会不会不会不会不会不会)
+```
+
diff --git "a/\345\264\224\346\242\246\345\234\206/20240603-awk.md" "b/\345\264\224\346\242\246\345\234\206/20240603-awk.md"
new file mode 100644
index 0000000000000000000000000000000000000000..fe07f34502a281504c651c16536fc072d5c8b30a
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240603-awk.md"
@@ -0,0 +1,187 @@
+# Awk 简介及应用
+
+## 1. 介绍
+
+Awk 是由 Aho、Weinberger 和 Kernighan 三位科学家开发的,特别擅长文本处理的 Linux 工具,是 Linux 下最常用的工具之一。Awk 也是一种编程语言,在编程语言排行榜上也能排上号。
+
+awk、grep、sed是linux操作文本的三大利器,合称*文本三剑客*
+
+假设已有student_scores.csv 文件(后面的演示都基于这个文件),内容如下
+
+```
+姓名,数学,语文,科学,班级
+张伟,85,92,88,1班
+李娜,78.5,81,79.5,2班
+王强,95,89,94.5,3班
+赵敏,90,72.5,70,2班
+刘洋,88,94,90,1班
+陈刚,74,85,80,1班
+杨梅,91,87,89,3班
+黄磊,55.5,90,86,3班
+周红,76,78,80,2班
+王彬,90,93.5,92,1班
+大王,85,86,45.5,2班
+小王,74,56,88,3班
+```
+
+## 2. Awk 命令的结构
+
+一般情况下,`awk` 命令的基本结构如下:
+
+```sh
+awk [选项] '脚本' 文件
+# 最简单的一个脚本,打印全文
+awk '{ print }' student_scores.csv
+```
+
+这里的 `[选项]` 是可选的,它们在 `awk` 命令中通常出现在脚本和文件名之前。
+
+AWK 脚本由一个或多个语句块组成,每个语句块可以是以下三种之一:
+
+1. 开始语句块:在程序开始时执行 `BEGIN { print "start" }`
+2. 通用语句块:逐行处理文件内容 `pattern { commands }`,
+3. 结束语句块:在程序结束时执行 `END { print "end" }`
+
+示例:
+
+```sh
+awk 'BEGIN { print "开始" } pattern { commands } END { print "结束" }' file
+# 头尾各加一行
+awk 'BEGIN { print "我是开头"} { print } END { print "我是结尾" } ' student_scores.csv
+```
+
+可以通过管道获取数据:
+
+```sh
+cat file | awk 'BEGIN { print "start" } pattern { commands } END { print "end" }'
+```
+
+### 2.1 语句块的构成部分
+
+语句块语法:由模式 (pattern) 和动作 (action) 构成。
+
+```bash
+awk 'pattern { actions }' # 即 模式 {动作}
+# 模式 (pattern): 可以是正则表达式、关系表达式、特定条件等。
+# 动作 (action): 一组语句,描述在匹配模式的行上执行的操作
+# 示例
+awk '/王/ { print $0 }' student_scores.csv
+# 打印文件中所有包含 王 的行。
+```
+
+- 如果没有指定模式,则对每一行都执行动作。
+- 指定模式后,只有匹配模式的行,才执行动作,即满足条件才执行
+
+### 2.2 深入理解三个语句块
+
+**示例:**
+
+```sh
+awk -F, 'BEGIN { print "----开始-----" }
+$2>=80 { print }
+END { print "----结束-----" }
+' student_scores.csv
+# 脚本解释
+# -F,:指定逗号作为字段分隔符,不指定默认是空格(\t)做分隔符
+# BEGIN { print "----开始-----" }:在处理文件开始时打印“----开始-----”。
+# $2 >= 80 { print }:对于每一行,如果第二个字段(数学成绩)大于或等于80,则打印该行。
+# END { print "----结束-----" }:在处理文件结束时打印“----结束-----”。
+```
+
+**输出**
+
+运行上述脚本的输出如下:
+
+```
+----开始-----
+姓名,数学,语文,科学
+张伟,85,92,88
+王强,95,89,94
+刘洋,88,94,90
+杨梅,91,87,89
+黄磊,82,90,86
+王彬,90,93,92
+----结束-----
+```
+
+### 2.3 术语解释
+
+#### Awk 中的常用选项(限命令行)
+
+- `-F`:指定输入字段分隔符。例如,`-F,` 将逗号设置为字段分隔符。
+ - 默认是以空格\t等为分隔符
+ - 类似于FS="分隔符" 在文件中使用
+
+- `-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 字符串中的表达式。
+ ```
+
+ - 常用的格式说明符
+
+ - `%s`:字符串
+ - `%d`:有符号十进制整数
+ - `%f`:浮点数
+
+ - 带有宽度和对齐的写法:
+
+ - `%5s`:字段宽度为 5 的字符串,右对齐
+ - `%-5s`:字段宽度为 5 的字符串,左对齐
+ - `%10d`:字段宽度为 10 的有符号十进制整数,右对齐
+ - `%-10d`:字段宽度为 10 的有符号十进制整数,左对齐
+ - `%8.2f`:字段总宽度为 8,其中小数点后有 2 位的浮点数
+
+- `{}`:包含一个或多个动作的块。例如,`{ print $1; print $2 }`。
+
+ - 用;号分隔多个动作语句
+ - 如果每个语句在单独的行上,;号可以省略
+
+
+#### Awk 中的特殊变量
+
+- `NR`:表示记录的数量(当前行号)。Numbers of Rows
+- `NF`:表示当前行的字段数量。`$NF`表示什么?最后一列 Number of flied
+- `$0`:包含当前行的文本内容,即一整行内容。有时候也省略
+- `$1`、`$2`:表示当前行的第1个、第2个字段的内容,以次类推。
+- `FS`:输入时的域分割符。效果同-F选项 File split
+- `OFS`:输出时的域分割符。out File split
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240605-vim\345\205\211\346\240\207.md" "b/\345\264\224\346\242\246\345\234\206/20240605-vim\345\205\211\346\240\207.md"
new file mode 100644
index 0000000000000000000000000000000000000000..8fda61bc59f6984dc85647cdaf4bf2b5eaa1ae56
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240605-vim\345\205\211\346\240\207.md"
@@ -0,0 +1,165 @@
+## 文件内容编辑-vim
+### 光标移动
+#### 单位级
+```
+h 向左移动一个单位
+j 向下移动一个单位
+k 向上移动一个单位
+l 向右衔动一个单位
+```
+
+
+#### 单词级
+```
+w 向右移动到下一单词开头
+e 向右移动到下一单词结尾
+b 向左移动到下一单词开头
+```
+
+
+#### 块级
+```
+gg 移动光标到文档第一行
+G 移动光标到文档最后一行
+0 移动光标所在行的第一列
+^ 移动光标到非空的第一个字符
+$ 移动光标到所在行的最后一列
+H 移动光标到屏幕顶端
+M 移动光标到屏幕中间
+L 移动光标到屏幕底部
+gg 或者: 移动光标到第n行
+k 或者:- 移动光标到向上n行
+j 或者:+ 移动光标到向下n行
+```
+
+### Visual模式
+```
+字符模式,在命令模式中按v键进入
+行模式,在命令模式中按V键进入
+块模式,在命令模式中按Ctrl+ v键进入
+
+```
+
+### vim内打开文件
+```
+:e <文件名称> 打开名为 filename 的文件,若文件不存在则创建之
+:Ex 在 Vim 中打开目录树,光标选中后回车打开对应文件(提示:- 进入上级目录 )
+```
+
+### 内容查找
+#### 文档内查找
+```
+`*` 向后查找当前光标所在单词
+`#` 向前查找当前光标所在单词
+/ 向后查找指定字符串
+? 向前查找指定字符串
+n 继续查找下一个
+N 继续查找上一个
+```
+#### 行内查找
+```
+f 当前行内向行尾查找定位X字符
+t 当前行内向行尾查找定位X字符前一字符
+F 当前行内向行首查找定位X字符
+T 当前行内向行首查找定位X字符后一字符
+; 向当前方向查找下一个字符
+, 向当前反方向查找下一个字符
+```
+
+### 文档修改与保存
+#### 插入
+```
+i 当前字符前插入
+I 当前行首插入
+a 当前字符后插入
+A 当前行尾插入
+o 在下一行插入
+O 在上一行插入
+```
+#### 删除
+```
+x 删除当前字符,相当于 insert 模式下的 Delete
+X 删除前一个字符,相当于 insert 模式下的 Backspace
+d 删除指定内容并保存到 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 编辑器有几种模式?
+```
+三种模式:一般指令模式、编辑模式、命令行模式
+```
+
+2. 如何进入 vi 编辑器的插入模式
+
+```
+1.按下i键,光标前插入。
+2.按下a键,光标后插入。
+3.按下o键,光标下一行插入。
+4.要退出插入模式,按下Esc键,然后输入:q
+```
+3. 如何进入 vi 编辑器的可视化模式
+```
+1.在命令模式中按v键进入
+2.在命令模式中按V键进入
+3.在命令模式中按Ctrl+ v键进入
+```
+4. 在 vi 编辑器中如何复制一行
+```
+1.y 复制指定字符串到粘贴板
+2.yy 复制整行到粘贴板
+
+```
+5. 在 vi 编辑器中如何进行粘贴
+```
+1.p 在当前位置后粘贴
+2.P 在当前位置前粘贴
+```
+6. 如何删除从 3 行到 15 行的所有数据
+```
+1.按Esc键进入正常模式。
+2.输入:3,15d,然后按Enter键以删除行。
+```
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240611-\345\256\211\350\243\205pacvim.md" "b/\345\264\224\346\242\246\345\234\206/20240611-\345\256\211\350\243\205pacvim.md"
new file mode 100644
index 0000000000000000000000000000000000000000..33d6da18471b4e7e201d04c0366c990ac4e5e6cf
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240611-\345\256\211\350\243\205pacvim.md"
@@ -0,0 +1,52 @@
+### 安装 PacVim
+首先按如下链接安装 Ncurses 库和开发工具。
+
+如何在 Linux 中安装 Ncurses 库
+如何在 Linux 中安装开发工具
+请注意,如果没有 gcc 4.8.X 或更高版本,这款游戏可能无法正确编译和安装。我在 Ubuntu 18.04 LTS 上测试了 PacVim,并且完美运行。
+
+安装 Ncurses 和 gcc 后,运行以下命令来安装 PacVim。
+```
+$ git clone https://github.com/jmoon018/PacVim.git
+$ cd PacVim
+$ sudo make install
+```
+使用 PacVim 学习 Vim 命令
+启动 PacVim 游戏
+要玩这个游戏,只需运行:
+
+$ pacvim [LEVEL_NUMER] [MODE]
+例如,以下命令以普通模式启动游戏第 5 关。
+
+$ pacvim 5 n
+这里,5 表示等级,n表示模式。有两种模式:
+
+n – 普通模式。
+h – 困难模式。
+失败条件
+
+如果你碰到鬼魂(用红色 G 表示)或者波浪字符,你就会失去一条命。如果命小于 0 条,你将会输掉整个游戏。
+
+这是实现的命令列表:
+```
+< 如显示不全,请左右滑动 >
+键 作用
+q 退出游戏
+h 向左移动
+j 向下移动
+k 向上移动
+l 向右移动
+w 向前移动到下一个 word 开始
+W 向前移动到下一个 WORD 开始
+e 向前移动到下一个 word 结束
+E 向前移动到下一个 WORD 结束
+b 向后移动到下一个 word 开始
+B 向后移动到下一个 WORD 开始
+$ 移动到行的末尾
+0 移动到行的开始
+gg/1G 移动到第一行的开始
+数字加 G 移动到由数字给出的行的开始
+G 移到最后一行的开头
+^ 移到当前行的第一个 word
+& 1337 cheatz(打赢当前关)
+```
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240612-\345\256\211\350\243\205deiban.md" "b/\345\264\224\346\242\246\345\234\206/20240612-\345\256\211\350\243\205deiban.md"
new file mode 100644
index 0000000000000000000000000000000000000000..db126bdc6b2b7e03071df3333aa6a13b90fe09d0
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240612-\345\256\211\350\243\205deiban.md"
@@ -0,0 +1,479 @@
+## 刚安装完Deiban系统 7步走:
+
+1. 设置国内软件源镜像 /etc/apt/sources.list
+2. 更新软件包列表:apt update
+3. 更新系统:apt upgrade -y
+4. 安装vim:
+ 1. apt install vim -y
+ 2. locate 从数据库中找, find实时从系统中找
+
+5. 编辑网卡配置,设置静态IP:
+6. 只在虚拟机上操作,不要在云服务器操作
+
+```bash
+vim /etc/network/interfaces
+
+# 按如下设置
+# The primary network interface
+allow-hotplug ens192
+iface ens192 inet dhcp
+
+#重新启动网络服务
+sudo systemctl restart networking
+```
+
+5. 修改SSHD配置,允许root用户远程登录
+
+```bash
+vim /etc/ssh/sshd_config
+
+# 取消如下代码的注释,并且将其值设置为yes,以允许root用户的远程登录
+22
+PermitRootLogin yes
+
+
+```
+
+6. 配置环境变量,简单化ls的用法
+
+
+/etc/profile.d /etc/nginx/conf.d/
+
+```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
+```
+
+
+
+几个常用命令
+
+以下是一些常见的 Linux 命令,包括它们的使用场景、核心术语讲解以及示例:
+
+### 1. `time`
+
+**使用场景**:用于测量命令的执行时间。
+
+**核心术语**:
+
+- **real**:总的时间(墙上时钟时间)。
+- **user**:用户态 CPU 时间。
+- **sys**:内核态 CPU 时间。
+
+**示例**:
+
+```bash
+time ls
+```
+
+输出:
+
+```plaintext
+real 0m0.003s
+user 0m0.001s
+sys 0m0.002s
+```
+
+### 2. `date`
+
+**使用场景**:显示或设置系统日期和时间。
+
+**核心术语**:
+- **%Y**:四位数的年份。
+- **%m**:两位数的月份。
+- **%d**:两位数的日期。
+
+**示例**:
+
+```bash
+date "+%Y-%m-%d %H:%M:%S"
+```
+
+输出:
+
+```plaintext
+2024-06-10 15:30:00
+```
+
+### 3. `timedatectl`
+
+**使用场景**:查看和设置系统时间和日期,时区和 NTP(网络时间协议)设置。
+
+**核心术语**:
+- **NTP**:网络时间协议,用于同步时间。
+- **RTC**:实时时钟。
+
+**示例**:
+
+```bash
+timedatectl status
+```
+
+输出:
+
+```plaintext
+Local time: Mon 2024-06-10 15:30:00 UTC
+Universal time: Mon 2024-06-10 15:30:00 UTC
+RTC time: Mon 2024-06-10 15:30:00
+Time zone: Etc/UTC (UTC, +0000)
+System clock synchronized: yes
+NTP service: active
+```
+
+### 4. `reboot`
+
+**使用场景**:重新启动系统。
+
+**核心术语**:
+
+- **systemd**:系统和服务管理器。
+
+**示例**:
+
+```bash
+sudo reboot
+```
+
+### 5. `poweroff`
+
+**使用场景**:关闭系统电源。
+
+**核心术语**:
+
+- **halt**:停止系统所有的 CPU 功能。
+
+**示例**:
+
+```bash
+sudo poweroff
+```
+
+### 6. `wget`
+
+**使用场景**:从网络上下载文件。
+
+**核心术语**:
+
+- **URL**:统一资源定位符。
+- **HTTP/HTTPS**:超文本传输协议。
+
+**示例**:
+
+```bash
+wget https://example.com/file.txt
+```
+
+### 7. `curl`
+
+**使用场景**:从网络上获取或发送数据。
+
+**核心术语**:
+
+- **URL**:统一资源定位符。
+- **GET/POST**:HTTP 请求方法。
+
+**示例**:
+
+```bash
+curl -O https://example.com/file.txt
+```
+
+### 8. `ps`
+
+**使用场景**:查看当前运行的进程。
+
+**核心术语**:
+
+- **PID**:进程标识符。
+- **TTY**:终端类型。
+
+**示例**:
+
+```bash
+ps aux # 显示所有用户的所有进程 一般会结合。grep,awk等过滤数据
+```
+
+### 9. `kill`
+
+**使用场景**:向进程发送信号(通常用于终止进程)。
+
+**核心术语**:
+
+- **SIGTERM**:请求中止进程。
+- **SIGKILL**:强制终止进程。
+
+**示例**:
+
+```bash
+kill 1234 # kill 进程号,用pidof 进程名。来查看具体的进程的进程号
+```
+
+### 10. `killall`
+
+**使用场景**:向指定名称的所有进程发送信号。
+
+`先安装psmisc`
+
+1. 安装psmisc 后,就会有pstree和killall
+
+**核心术语**:
+
+- **signal**:信号,通知进程执行某种操作。
+
+**示例**:
+
+```bash
+killall firefox
+```
+
+### 11. `ip`
+
+**使用场景**:显示和操作网络接口和路由。
+
+**核心术语**:
+
+- **address**:IP 地址。
+- **route**:路由信息。
+
+**示例**:
+
+```bash
+ip addr show
+```
+
+### 12. `ss`
+
+**使用场景**:显示套接字统计信息。旧版是netstat
+
+**核心术语**:
+
+- **TCP**:传输控制协议。
+- **UDP**:用户数据报协议。
+
+**示例**:
+
+```bash
+ss -tuln # 可以查看哪些端口开放着
+```
+
+### 13. `uname`
+
+**使用场景**:显示系统信息。
+
+**核心术语**:
+
+- **kernel**:操作系统内核。
+- **OS**:操作系统。
+
+**示例**:
+
+```bash
+uname -a
+```
+
+### 14. `uptime`
+
+**使用场景**:显示系统运行时间和负载。
+
+**核心术语**:
+- **load average**:系统平均负载。
+
+**示例**:
+
+```bash
+uptime
+```
+
+### 15. `who`
+
+**使用场景**:显示当前登录用户信息。
+
+**核心术语**:
+
+- **login**:用户登录信息。
+- **TTY**:终端类型。
+
+**示例**:
+
+```bash
+who
+```
+
+### 16. `last`
+
+**使用场景**:显示系统上最近的登录信息。
+
+**核心术语**:
+
+- **wtmp**:记录登录和注销事件的文件。
+
+**示例**:
+
+```bash
+last
+```
+
+### 17. `ping`
+
+**使用场景**:测试网络连通性。
+
+- **ICMP**:互联网控制消息协议。
+- **echo request**:回显请求。
+
+**示例**:
+
+```bash
+ping example.com
+```
+
+### 18. `traceroute`
+
+**使用场景**:显示到达网络主机的路径。
+
+**核心术语**:
+
+- **hop**:从一个网络节点到另一个的跳转。
+- **TTL**:生存时间。
+
+**示例**:
+
+```bash
+traceroute example.com
+```
+
+### 19. `history`
+
+**使用场景**:显示命令历史记录。
+
+**核心术语**:
+
+- **bash history**:记录用户输入的命令历史。
+
+**示例**:
+
+```bash
+history
+```
+
+`top` 命令用于显示系统的运行进程信息,包括 CPU 占用情况、内存占用情况、进程列表等。通过 `top` 命令可以实时监控系统的运行状态,了解系统的负载情况。
+
+`pidof` 命令用于根据进程名查找对应的进程ID(PID)。例如,如果你知道某个进程的名字,但不知道它的PID,你可以使用 `pidof` 命令来查找。语法通常是 `pidof <进程名>`,比如 `pidof python` 会返回所有名为 `python` 的进程的PID。
+
+
+
+`free` 和 `df -h` 是两个用于查看系统资源利用情况的常用命令:
+
+1. **`free`**:该命令用于显示系统内存的使用情况,包括物理内存和交换空间(swap)。执行 `free` 命令时,会显示系统的内存信息,包括总内存、已使用内存、空闲内存以及缓冲区和缓存等情况。
+
+ 示例输出:
+ ```
+ total used free shared buff/cache available
+ Mem: 8081256 2133468 3458604 430300 2488184 5261632
+ Swap: 0 0 0
+ ```
+
+ 输出中的字段含义如下:
+ - `total`: 总内存量
+ - `used`: 已使用的内存量
+ - `free`: 空闲的内存量
+ - `shared`: 用于共享的内存量
+ - `buff/cache`: 用于缓存的内存量
+ - `available`: 可用的内存量
+
+2. **`df -h`**:该命令用于显示文件系统的磁盘空间利用情况。执行 `df -h` 命令时,会显示系统中每个挂载的文件系统的磁盘使用情况,包括总容量、已使用空间、剩余空间以及挂载点等信息。
+
+ 示例输出:
+ ```
+ Filesystem Size Used Avail Use% Mounted on
+ /dev/sda1 20G 15G 3.6G 81% /
+ /dev/sda2 30G 20G 8.8G 70% /home
+ ```
+
+ 输出中的字段含义如下:
+ - `Filesystem`: 文件系统设备
+ - `Size`: 文件系统总容量
+ - `Used`: 已使用的空间
+ - `Avail`: 可用空间
+ - `Use%`: 使用百分比
+ - `Mounted on`: 挂载点
+
+通过这两个命令,你可以快速了解系统的内存和磁盘空间使用情况,以便进行系统资源管理和监控。
+
+
+
+`du` 命令用于估算文件或目录的磁盘使用情况。它可以显示指定文件或目录的磁盘使用量,以及每个子目录的磁盘使用量,帮助用户了解文件系统上的空间分布情况。以下是 `du` 命令的一些常见使用场景:
+
+1. **查看当前目录的磁盘使用情况**:
+
+ ```
+ 复制代码
+ du -h
+ ```
+
+ 这将以人类可读的格式显示当前目录及其所有子目录的磁盘使用情况。
+
+2. **查看特定目录的磁盘使用情况**:
+
+ ```
+ du -h /目录名
+ ```
+
+ 这将显示指定目录及其所有子目录的磁盘使用情况。
+
+3. **显示文件或目录的总磁盘使用量**:
+
+ ```
+ du -sh /path/to/file_or_directory
+ ```
+
+ 这将显示指定文件或目录的总磁盘使用量, `-s` 参数表示仅显示总和, `-h` 表示以人类可读的格式显示。
+
+4. **显示目录中每个文件的磁盘使用量**:
+
+ ```
+ 复制代码
+ du -ah /path/to/directory
+ ```
+
+ 这将显示指定目录中每个文件的磁盘使用量, `-a` 参数表示包括所有文件。
+
+5. **按照磁盘使用量排序显示目录**:
+
+ ```
+ du -h | sort -h
+ ```
+
+ 这将按照磁盘使用量从小到大排序显示当前目录及其所有子目录的磁盘使用情况。
+
+6. **限制显示的深度**:
+
+ ```
+ du -h --max-depth=1 /path/to/directory
+ ```
+
+ 这将仅显示指定目录的直接子目录的磁盘使用情况, `--max-depth` 参数用于指定显示的深度。
+
+
+
+
+
+
+
+
+
diff --git "a/\345\264\224\346\242\246\345\234\206/20240613-\351\207\215\345\256\232\345\220\221.md" "b/\345\264\224\346\242\246\345\234\206/20240613-\351\207\215\345\256\232\345\220\221.md"
new file mode 100644
index 0000000000000000000000000000000000000000..4343d1d3100e015979e1555ebad26a0c10588d5b
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240613-\351\207\215\345\256\232\345\220\221.md"
@@ -0,0 +1,127 @@
+## 重定向和管道
+
+在 Linux 和其他 Unix 系统中,重定向和管道是非常重要的功能,它们允许用户将命令的输出重定向到文件、其他命令或设备。以下是对重定向和管道符的详细解释、使用场景、核心术语以及示例。
+
+### 重定向
+
+重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` 等。
+
+#### 输出重定向
+
+1. **覆盖输出重定向 `>`**
+
+ 将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。
+
+ ```bash
+ ls > filelist.txt
+ ```
+
+ 这个命令将 `ls` 命令的输出保存到 `filelist.txt` 文件中,如果文件已存在,则会被覆盖。
+
+2. **追加输出重定向 `>>`**
+
+ 将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。
+
+ ```bash
+ echo "Hello, World!" >> greetings.txt
+ ```
+
+ 这个命令会将 "Hello, World!" 追加到 `greetings.txt` 文件中。
+
+#### 输入重定向
+
+1. **输入重定向 `<`**
+
+ 将文件的内容作为命令的输入。
+
+ ```bash
+ sort < unsorted_list.txt
+ ```
+
+ 这个命令将 `unsorted_list.txt` 文件的内容作为 `sort` 命令的输入进行排序。
+
+#### 错误重定向
+
+1. **错误输出重定向 `2>`**
+
+ 将命令的错误输出重定向到一个文件。
+
+ ```bash
+ ls non_existent_file 2> error_log.txt
+ ```
+
+ 这个命令会将 `ls` 命令的错误信息保存到 `error_log.txt` 文件中。
+
+2. **错误输出追加重定向 `2>>`**
+
+ 将命令的错误输出追加到一个文件。
+
+ ```bash
+ ls non_existent_file 2>> error_log.txt
+ ```
+
+ 这个命令会将 `ls` 命令的错误信息追加到 `error_log.txt` 文件中。
+
+3. **同时重定向标准输出和标准错误输出**
+
+ 使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件。
+
+ ```bash
+ command &> output_and_error_log.txt
+ ```
+
+ 这个命令会将 `command` 的标准输出和错误输出都保存到 `output_and_error_log.txt` 文件中。
+
+### 管道 `|`
+
+管道符号 `|` 将一个命令的输出作为另一个命令的输入。管道是进行命令链式操作的重要工具。
+
+#### 使用场景
+
+1. **将命令的输出传递给另一个命令**
+
+ ```bash
+ ls -l | grep "txt"
+ ```
+
+ 这个命令会将 `ls -l` 的输出传递给 `grep "txt"`,只显示包含 "txt" 的行。
+
+2. **多命令链式操作**
+
+ ```bash
+ ps aux | grep "sshd" | awk '{print $2}'
+ ```
+
+ 这个命令链会列出所有进程 (`ps aux`),然后过滤包含 "sshd" 的行 (`grep "sshd"`),最后提取进程 ID (`awk '{print $2}'`)。
+
+### 示例解析
+
+#### 使用管道和重定向的综合示例
+
+1. **查找特定文件并将结果保存到文件**
+
+ ```bash
+ find / -name "*.log" 2> errors.txt | sort > sorted_log_files.txt
+ ```
+
+ 这个命令会在根目录下查找所有以 `.log` 结尾的文件,将错误信息重定向到 `errors.txt`,并将结果进行排序后保存到 `sorted_log_files.txt`。
+
+### 总结
+
+- **重定向**:
+ - `>`:将输出重定向到文件(覆盖)。
+ - `>>`:将输出追加到文件。
+ - `<`:将文件内容作为输入。
+ - `2>`:将错误输出重定向到文件。
+ - `2>>`:将错误输出追加到文件。
+ - `&>`:将标准输出和错误输出同时重定向到文件。
+
+- **管道 `|`**:
+ - 将一个命令的输出作为另一个命令的输入,用于链式操作。
+
+## 思考:
+
+```
+<< 是什么功能?
+()把命令包括起来,是干什么功能?
+```
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240615-\347\224\250\346\210\267\346\226\207\344\273\266\346\235\203\351\231\220\347\256\241\347\220\206.md" "b/\345\264\224\346\242\246\345\234\206/20240615-\347\224\250\346\210\267\346\226\207\344\273\266\346\235\203\351\231\220\347\256\241\347\220\206.md"
new file mode 100644
index 0000000000000000000000000000000000000000..43ab6af02b3ab273422d137c647f9f4d4fb34ff3
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240615-\347\224\250\346\210\267\346\226\207\344\273\266\346\235\203\351\231\220\347\256\241\347\220\206.md"
@@ -0,0 +1,263 @@
+### 用户与文件权限的管理
+#### 1. 用户管理
+ ##### 1. 分类
+ ```
+ - 超级用户 root ,最高权限,不受一般权限的限制,编号0 ,提示符是 #
+ - 内置用户 :由系统自动创建 ,编号1-999
+ - 普通用户 :我们用root权限手动创建用户,受权限控制 ,编号从1000依次递增
+ - 创建普通用户test会自动创建他的编号u ,他原生组g(和用户名同名test),附加组 G (test),初始化的时候一定是u 1000(test), 1000(test),1000(test)
+ - 普通不能创建普通用户,只有root
+ - 提示符是 $
+ - u user 用户 uid
+ - group 组 gid
+ - Group
+```
+ ##### 2. 用户
+ ```
+ 1. 添加
+ - useradd -m -d /home/YYY -s /bin/bash XXX
+ - adduser
+ 2. 删除
+ - userdel XXX
+ - userdel -r xxx 删除用户和相关的目录
+ 3. 修改
+ - usermod -G 组号|组名 XXX : usermod -G stu u15 覆盖原来的附加组(扩展组)
+ - usermod -aG 组号|组名 XXX : usermod -aG stu u15 保留原有附加组前提下,追加新的附加组
+ - usermod -s /bin/aaa u15
+ 4. 密码
+ - passwd 用户名 root修改指定用户的密码
+ - passwd 修改当前登录用户的密码,即自己的密码
+ 5. 查询
+ - id 用户名 指定用户
+ - /etc/passwd
+ 6. 切换
+ - su 仅仅切换了身份,不切换目录和shell等环境
+ - su - 完全切换,连环境变量和目录一起切换
+
+```
+ ##### 3. 用户组:编号也是从1000开始
+ ```
+ 1. 添加
+ - groupadd student 添加一个组,编号自动的
+ - groupadd -g 8888 student2 添加一个组,编号自动的
+ 2. 删除 groupdel 组号|名
+ 3. 修改 groupmod
+ 4. 查询
+ - /etc/group
+```
+#### 2. 文件管理
+ ##### 文件属性:10个字符,连接数或子目录数,文件拥有者,文件所属的用户组,文件大小,修改时间,文件|目录名
+ ##### 10个字符:
+ - 第1位 文件类型
+ ```
+ - d 目录
+ - -普通文件
+ - l 连接文件
+ - b c s p 等其它文件
+ ```
+ - 后9位分别代表了:三种角色的权限,每3位一组
+ ```
+ - 2-4 拥有者权限
+ - 5-7 用户组的权限
+ - 8-10 其它人的权限
+ ```
+ ##### 基本权限
+ ```
+ - 读 r (read) : 打开并显示文件内容,查看目录基本信息
+ - 写 w (write) : 文件,可以写入,修改,删除内容,目录:创建,修改,删除文件|目录
+ - 执行 x (execute) :文件如果是二进制或脚本文件就可以执行,目录表示可以进入
+ ```
+ ##### 特殊权限
+ - SUID
+ - GUID
+ ##### 隐藏权限
+ ```
+ - lsattr 列出隐藏权限
+ - chattr 修改隐藏权限
+ - +i 增加,不得任意更动文件或目录的效果
+ - -i 消除
+ ```
+ ##### 权限表示
+ ```
+ - 字符
+ - 数字
+ - r == 4
+ - w == 2
+ - x == 1
+ - 身份表示
+ - u 拥有者 (user)
+ - g 用户组(group)
+ - o 其它人 (other)
+ - a 所有人 (all)
+ - 修改权限 :root可以改任何文件,而拥有者可以改自己拥有文件
+ - chmod 要的权限 文件|目录
+ - chmod u+w,g-r,o=rw 1.txt
+ - chmod 755 1.txt
+ - 修改拥有者
+ - chown 用户名 文件名
+ - 修改文件所属的用户组
+ - chgrp 组名|号 文件|目录
+ - sudo
+ - 修改 /etc/sudoers 文件
+ - 将 用户追加到sudo组 :sudo usermod -aG sudo u15
+```
+#### 3. Linux执行命令的过程
+ 1. 如果这个命令是绝对路径,就直接执行
+ 2. 如果不是,
+ 1. 查一下是不是别名,是执行对应的命令
+ 2. 从环境变量中找这个命令 $PATH中的路径依次查找这个命令
+ 3. 本地也没有,就报错了。
+### 作业
+
+#### 什么是linux 硬连接和软连接(快捷方式)
+
+ 一、硬链接(Hard Link)
+1.定义:
+
+硬链接是通过文件系统中的索引节点(inode)来进行连接的。多个文件名可以指向同一个索引节点,这就是硬链接。
+
+2.特点:
+只有文件可以建立硬链接,目录不可以。
+类似于复制多份文件,但实际上只是增加了一个文件名指向同一个inode。
+删除一个硬链接并不会影响文件本身,只有当最后一个硬链接被删除时,文件的数据块及目录的连接才会被释放.
+
+3.命令:
+使用ln命令可以创建硬链接,默认情况下ln命令就产生硬链接。
+例如:ln 源文件名 硬链接名
+
+二、 软链接(Soft Link/Symbolic Link)
+1.定义:
+软链接类似于Windows中的快捷方式,它包含了另一个文件或目录的路径信息。
+软链接是一个特殊的文件,其内容是它指向的文件或目录的路径名。
+2.特点:
+文件和目录都可以建立软链接。
+删除软链接不会影响被指向的文件或目录。
+如果被指向的文件或目录被移动、重命名或删除,软链接将失效。
+3.命令:
+使用ln -s命令可以创建软链接。
+例如:ln -s 源文件名 软链接名
+
+4.作用:
+创建快捷方式:在不移动原文件或目录的情况下,创建一个指向它的快捷方式。
+简化路径:将较长或复杂的路径简化为一个易于记忆和使用的路径。
+跨文件系统访问:软链接可以跨越不同的文件系统或磁盘分区。
+共享库链接:在Linux系统中,软链接还可以用于链接共享库文件。
+#### 总结
+硬链接和软链接都是Linux中用于引用文件或目录的机制。
+硬链接通过inode进行连接,类似于文件的多个名字;软链接通过路径进行连接,类似于文件的快捷方式。
+硬链接只能用于文件,不能用于目录;而软链接可以用于文件和目录。
+硬链接和文件内容共享inode,删除硬链接不影响文件内容;删除软链接不影响被指向的文件或目录。
+### 权限管理练习
+
+1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令)
+```
+sudo mkdir -p /guanli/{zonghe,jishu}
+```
+2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003
+```
+sudo groupadd -g 2001 zonghe
+sudo groupadd -g 2001 caiwu
+sudo groupadd -g 2003 jishu
+```
+3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效
+```
+sudo useradd jerry
+sudo useradd kylin -e 2020-12-30
+sudo useradd tsengia
+sudo useradd obama
+```
+4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内
+```
+sudo usermod -aG zonghe jerry
+sudo usermod -aG zonghe kylin
+sudo usermod -aG zonghe tsengia
+sudo usermod -aG zonghe obama
+```
+5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin”
+```
+sudo useradd handy
+sudo useradd cucci -s /sbin/nologin
+
+```
+6. 将handy、cucci等用户添加到jishu组内
+```
+sudo usermod -aG jishu handy
+sudo usermod -aG jishu cucci
+```
+7. 将上述的所有用户均要求加入到guanli组内
+```
+sudo usermod -aG guanli jerry
+sudo usermod -aG guanli kylin
+sudo usermod -aG guanli tsengia
+sudo usermod -aG guanli obama
+sudo usermod -aG guanli handy
+sudo usermod -aG guanli cucci
+```
+8. 将zonghe组内的obama用户删除
+```
+sudo gpasswd -d obama zonghe
+```
+9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat”
+```
+sudo passwd jerry # 输入密码 123456
+sudo passwd cucci # 输入密码 redhat
+```
+10. 将jerry用户锁定,并查看锁定状态
+```
+sudo passwd -l jerry
+sudo passwd -S jerry
+```
+11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个
+```
+sudo fuser -k /dev/pts/X
+```
+12. 查看cucci用户,属于那些组,并查看其详细信息
+```
+groups cucci
+id cucci
+```
+13. 手工创建账号student(预留)
+```
+sudo useradd student
+```
+14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限
+```
+sudo chown :guanli /guanli
+sudo chown :zonghe /guanli/zonghe
+sudo chown :jishu /guanli/jishu
+sudo chmod 770 /guanli
+sudo chmod 770 /guanli/zonghe
+sudo chmod 770/guanli/jishu
+
+```
+15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行
+```
+sudo mkdir /ceshi
+sudo chown :jishu /ceshi
+sudo chmod 770 /ceshi
+```
+16. 清除jerry用户密码
+```
+ sudo passwd -d jerry
+```
+17. 锁定cucci用户密码并查看状态
+```
+ sudo passwd -l cucci
+ sudo passwd -S cucci
+ ```
+18. 修改obama用户的UID为8888
+```
+sudo usermod -u 8888 obama
+```
+19. 通过passwd命令修改kylin用户的最长密码使用期限为60天
+
+```
+sudo chage -M60 kylin
+```
+
+20. 通过id groups等命令查看用户handy信息
+
+ ```
+id handy
+groups handy
+```
\ No newline at end of file
diff --git "a/\345\264\224\346\242\246\345\234\206/20240617-cron.md" "b/\345\264\224\346\242\246\345\234\206/20240617-cron.md"
new file mode 100644
index 0000000000000000000000000000000000000000..7e222c222c2203872dbb0cc577c2ff7692181093
--- /dev/null
+++ "b/\345\264\224\346\242\246\345\234\206/20240617-cron.md"
@@ -0,0 +1,462 @@
+## 1. 什么是Cron?
+
+Cron是一种基于时间的任务调度程序,用于在特定时间或时间间隔自动执行任务。它是Unix类操作系统(包括Linux)中的一个守护进程,能够按照用户定义的时间表运行指定的脚本或命令。
+
+“Cron” 的读音是 /krɒn/,“Cron”的读音在中文中可以表述为“克隆”(kè lóng)。
+
+## 2. Cron的配置文件
+
+在Debian系统中,Cron任务的配置文件通常分为以下几类:
+
+1. **用户级Cron任务**:每个用户都有自己的Cron任务配置文件,位于`/var/spool/cron/crontabs/username`。
+2. **系统级Cron任务**:系统级的Cron任务配置文件位于`/etc/crontab`和`/etc/cron.d/`目录下。
+3. **周期性任务目录**:这些目录包含在特定时间间隔运行的脚本,例如:
+ - `/etc/cron.hourly/`
+ - `/etc/cron.daily/`
+ - `/etc/cron.weekly/`
+ - `/etc/cron.monthly/`
+
+## 3. 编辑Cron任务
+
+### 3.1 使用`crontab`命令
+
+用户可以使用`crontab`命令来编辑、查看或删除自己的Cron任务【用户级】。
+
+cron table 时间周期表,计划任务表
+
+- **编辑Cron任务**:
+
+ ```sh
+ crontab -e # edit
+ ```
+
+ 这将打开用户的Cron配置文件进行编辑。
+
+- **查看Cron任务**:
+
+ ```sh
+ crontab -l # list
+ ```
+
+ 这将列出用户当前的Cron任务。
+
+- **删除Cron任务**:
+
+ ```sh
+ crontab -r # remove
+ ```
+
+ 这将删除用户的所有Cron任务。
+
+**Cron任务语法**
+
+Cron任务的格式如下:
+
+```sh
+* * * * * command_to_execute # command_to_execute 可以是命令也可以是包含命令的文件
+- - - - -
+| | | | |
+| | | | +----- 星期几 (0 - 7) (星期天 = 0 或 7)
+| | | +------- 月份 (1 - 12)
+| | +--------- 日期 (1 - 31)
+| +----------- 小时 (0 - 23)
++------------- 分钟 (0 - 59)
+```
+
+例如,要每天凌晨3点执行一个备份脚本,可以添加以下条目:
+
+```sh
+0 3 * * * /path/to/backup_script.sh
+```
+
+[点击查看:cron表达式详细介绍以及常用的例子](https://developer.aliyun.com/article/1349827)
+
+### 3.2 使用`/etc/crontab`
+
+系统级的Cron任务可以直接编辑`/etc/crontab`文件。该文件具有一个额外的字段用于指定运行任务的用户:
+
+```
+# m h dom mon dow user command
+17 * * * * root cd / && run-parts --report /etc/cron.hourly
+25 6 * * 1 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
+47 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
+```
+
+### 3.3 使用`/etc/cron.d/`
+
+在`/etc/cron.d/`目录下,可以创建单独的文件来定义Cron任务。每个文件的格式与`/etc/crontab`类似。
+
+例如,可以在`/etc/cron.d/mytasks`中定义:
+
+```
+30 2 * * * root /usr/local/bin/my_script.sh
+```
+
+
+
+### 3.4 特殊符号
+
+**常用的如下:**
+
+1. **星号(`*`)**
+
+ - **含义**:匹配任何值,,即每一。
+ - **示例**:在分钟字段中使用 `*` 表示每一分钟都运行一次任务。
+
+ ```sh
+ * * * * * /path/to/command
+ ```
+
+2. **逗号(`,`)**
+
+ - **含义**:指定一个列表值,列出所有指定值 a,b,c。
+ - **示例**:在小时字段中使用 `0,6,12,18` 表示任务将在每天的0点、6点、12点和18点运行。
+
+ ```sh
+ 0 0,6,12,18 * * * /path/to/command
+ ```
+
+3. **短横线(`-`)**
+
+ - **含义**:指定一个范围值,开始-结尾。
+ - **示例**:在日期字段中使用 `1-5` 表示任务将在每个月的1号到5号之间运行。
+
+ ```sh
+ 0 0 1-5 * * /path/to/command
+ ```
+
+4. **斜杠(`/`)**
+
+ - **含义**:指定步长值,即间隔。
+ - **示例**:在分钟字段中使用 `*/15` 表示任务每15分钟运行一次。
+
+ ```sh
+ */15 * * * * /path/to/command
+ ```
+
+5. **L(Last)**
+
+ - **含义**:表示最后一个。可以在月的天数或星期几中使用。
+ - **示例**:在日期字段中使用 `L` 表示每个月的最后一天。
+
+ ```sh
+ 0 0 L * * /path/to/command
+ ```
+
+ - **示例**:在星期几字段中使用 `5L` 表示每个月的最后一个星期五。
+
+ ```sh
+ 0 0 * * 5L /path/to/command
+ ```
+
+### 3.5 例子和应用
+
+1. **每月的第一个工作日**
+
+ ```sh
+ 0 9 1W * * /path/to/command
+ ```
+
+2. **每月的最后一天**
+
+ ```sh
+ 0 23 28-31 * * [ "$(date +\%d -d tomorrow)" == "01" ] && /path/to/command
+ ```
+
+3. **每个月的最后一个星期五**
+
+ ```sh
+ 0 23 * * 5L /path/to/command
+ ```
+
+4. **每隔10分钟**
+
+ ```sh
+ */10 * * * * /path/to/command
+ ```
+
+通过使用这些特殊符号,可以灵活地定义各种复杂的时间调度任务,使得cron更加强大和易用。
+
+
+
+### 3.6 注意事项
+
+1. **路径问题**:Cron任务运行时使用的环境变量可能与用户的交互式Shell不同,确保在脚本中使用绝对路径。
+2. **权限问题**:确保脚本具有可执行权限,并且Cron任务的用户有权限执行该脚本。
+
+## 4. 系统级任务
+
+### **4.1 crontab 和 cron.d**
+
+在Debian和其他基于Unix的操作系统中,`/etc/crontab` 和 `/etc/cron.d/` 目录用于管理系统级的计划任务。虽然它们的功能类似,但在使用场景和配置格式上有一些细微的区别。以下是它们的详细介绍和使用场景:
+
+#### **4.1.1** **`/etc/crontab`**
+
+**特点:**
+
+1. **全局配置文件**:`/etc/crontab` 是一个全局配置文件,用于定义系统级的定时任务。
+
+2. **文件格式**:与用户级的 `crontab` 文件相比,`/etc/crontab` 多了一个字段,用于指定执行任务的用户。格式如下:
+
+ ```
+ m h dom mon dow user command
+ ```
+
+ 例如:
+
+ ```
+ 30 2 * * * root /usr/local/bin/backup.sh
+ ```
+
+ 这行表示每天凌晨2:30以root用户的身份执行 `/usr/local/bin/backup.sh`。
+
+**使用场景:**
+
+- **统一管理系统任务**:适合定义一些系统级的任务,比如系统备份、日志轮替等。
+- **需要不同用户执行的任务**:如果需要在同一文件中定义由不同用户执行的任务,可以使用 `/etc/crontab`。
+
+#### **4.1.2** **`/etc/cron.d/`**
+
+**特点:**
+
+1. **目录结构**:`/etc/cron.d/` 目录中可以包含多个文件,每个文件可以定义多个任务。
+
+2. **文件格式**:与 `/etc/crontab` 文件的格式相同,需要包含一个用户字段。格式如下:
+
+ ```
+ m h dom mon dow user command
+ ```
+
+ 例如,在 `/etc/cron.d/mytasks` 文件中:
+
+ ```
+ 0 4 * * * root /usr/local/bin/daily_task.sh
+ 15 14 1 * * user /usr/local/bin/monthly_report.sh
+ ```
+
+**使用场景:**
+
+- **模块化管理**:适合将不同的任务分模块管理,每个模块一个文件。例如,可以为不同的应用程序或服务创建单独的文件。
+- **包管理系统的任务**:一些软件包在安装时会自动在 `/etc/cron.d/` 中创建任务文件,这是包管理系统用来添加特定任务的常见方法。
+
+#### **4..13 选择使用场景**
+
+1. **统一和简洁管理**:
+ - 如果你希望在一个文件中集中管理所有系统级的Cron任务,可以使用 `/etc/crontab`。
+ - 适合于系统管理员需要定期检查和修改所有任务的场景。
+
+2. **分离和模块化管理**:
+ - 如果你希望将Cron任务按模块或应用分开管理,使用 `/etc/cron.d/` 是更好的选择。
+ - 适合于不同团队或不同软件包管理各自的定时任务,避免相互干扰。
+
+#### **4.1.4 示例对比**
+
+`/etc/crontab` 示例:
+
+```sh
+# m h dom mon dow user command
+30 2 * * * root /usr/local/bin/backup.sh
+45 3 * * 7 user /usr/local/bin/cleanup.sh
+```
+
+`/etc/cron.d/backup` 示例:
+
+```sh
+# m h dom mon dow user command
+30 2 * * * root /usr/local/bin/backup.sh
+```
+
+`/etc/cron.d/cleanup` 示例:
+
+```sh
+# m h dom mon dow user command
+45 3 * * 7 user /usr/local/bin/cleanup.sh
+```
+
+通过这种方式,使用 `/etc/cron.d/` 可以更加灵活地管理和组织不同的任务。
+
+
+
+## 5. 周期性任务目录
+
+### 5.1 目录说明
+
+1. **`/etc/cron.hourly/`**:每小时运行一次目录中的所有脚本。
+2. **`/etc/cron.daily/`**:每天运行一次目录中的所有脚本。
+3. **`/etc/cron.weekly/`**:每周运行一次目录中的所有脚本。
+4. **`/etc/cron.monthly/`**:每月运行一次目录中的所有脚本。
+
+### 5.2 **使用方法**
+
+1. **创建脚本**:将要定期运行的脚本放置到相应的目录中。
+
+2. **设置权限**:确保脚本具有执行权限。可以使用以下命令设置:
+
+ ```sh
+ chmod +x /etc/cron.daily/your_script.sh
+ ```
+
+### 5.3 示例案例
+
+1. **每小时运行任务**:
+
+ - **用例**:每小时检查系统资源使用情况并记录到日志文件。
+
+ - **步骤**:
+
+ 1. 创建脚本 `/etc/cron.hourly/resource_check.sh`:
+
+ ```sh
+ #!/bin/bash
+ date >> /var/log/resource_usage.log
+ top -b -n1 | head -n 20 >> /var/log/resource_usage.log
+ ```
+
+ 2. 设置脚本权限:
+
+ ```sh
+ chmod +x /etc/cron.hourly/resource_check.sh
+ ```
+
+2. **每日运行任务**:
+
+ - **用例**:每天备份数据库。
+
+ - **步骤**:
+
+ 1. 创建脚本 `/etc/cron.daily/db_backup.sh`:
+
+ ```sh
+ #!/bin/bash
+ mysqldump -u root -pYourPassword your_database > /backup/db_$(date +\%F).sql
+ # $(date +%F) 表示的是命令替换(command substitution),而不是简单的变量。
+ # 在Shell中,命令替换的形式是 $(command),它会执行括号内的命令,并用其输出结果替换整个表达式。
+ ```
+
+ 2. 设置脚本权限:
+
+ ```sh
+ chmod +x /etc/cron.daily/db_backup.sh
+ ```
+
+3. **每周运行任务**:
+
+ - **用例**:每周清理一次系统缓存。
+
+ - **步骤**:
+
+ 1. 创建脚本 `/etc/cron.weekly/cache_cleanup.sh`:
+
+ ```sh
+ #!/bin/bash
+ apt-get clean
+ ```
+
+ 2. 设置脚本权限:
+
+ ```sh
+ chmod +x /etc/cron.weekly/cache_cleanup.sh
+ ```
+
+4. **每月运行任务**:
+
+ - **用例**:每月生成并发送系统报告。
+
+ - **步骤**:
+
+ 1. 创建脚本 `/etc/cron.monthly/system_report.sh`:
+
+ ```sh
+ #!/bin/bash
+ report_date=$(date +\%Y-\%m-\%d)
+ df -h > /var/reports/system_report_$report_date.txt
+ mail -s "Monthly System Report" admin@example.com < /var/reports/system_report_$report_date.txt
+ ```
+
+ 2. 设置脚本权限:
+
+ ```sh
+ chmod +x /etc/cron.monthly/system_report.sh
+ ```
+
+### 5.4 注意事项
+
+1. **脚本格式**:确保脚本是可执行的,并且首行包含正确的shebang(例如 `#!/bin/bash`)。
+2. **日志记录**:为调试和审计目的,可以在脚本中添加日志记录功能,以便了解脚本的执行情况。
+3. **测试脚本**:在将脚本放入周期性任务目录之前,最好手动测试脚本,以确保其在预期环境下正常工作。
+
+## 作业
+1. 每天3:00执行一次
+```
+0 3 * * * echo hhhh >> /home/root/a.txt
+```
+2. 每周六2:00执行
+```
+0 2 * * 6 echo hhhh >> /home/root/a.txt
+```
+3. 每周六1:05执行
+```
+5 1 * * 6 echo hhhh >> /home/root/a.txt
+```
+4. 每周六1:25执行
+```
+25 1 * * 6 echo hhhh >> /home/root/a.txt
+```
+5. 每天8:40执行
+```
+40 8 * * * echo hhhh >> /home/root/a.txt
+```
+6. 每天3:50执行
+```
+50 3 * * * echo hhhh >> /home/root/a.txt
+```
+7. 每周一到周五的3:40执行
+```
+40 3 * * 1-5 echo hhhh >> /home/root/a.txt
+```
+8. 每周一到周五的3:41开始,每10分钟执行一次
+```
+41-59/10 3 * * 1-5 echo hhhh >> /home/root/a.txt
+0-49/10 4 * * 1-5 echo hhhh >> /home/root/a.txt
+```
+9. 每天的10:31开始,每2小时执行一次
+```
+31 10-0/2 * * * echo hhhh >> /home/root/a.txt
+```
+10. 每周一到周三的9:30执行一次
+```
+30 9 * * 1-3 echo hhhh >> /home/root/a.txt
+```
+11. 每周一到周五的8:00,每周一到周五的9:00执行一次
+```
+0 8,9 * * 1-5 echo hhhh >> /home/root/a.txt
+```
+12. 每天的23:45分执行一次
+```
+45 23 * * * echo hhhh >> /home/root/a.txt
+```
+13. 每周三的23:45分执行一次
+```
+45 23 * * 3 echo hhhh >> /home/root/a.txt
+```
+14. 每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次
+```
+25-34/10,35-44/10,45-54/10 9 * * 1-5 echo hhhh >> /home/root/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分别执行一次
+```
+30,50 8,9,10,11,13,14,15 * * 1-5 echo hhhh >> /home/root/a.txt
+```
+16. 每天16:00、10:00执行一次
+```
+0 16,10 * * * echo hhhh >> /home/root/a.txt
+```
+17. 每天8:10、16:00、21:00分别执行一次
+```
+10 8,16,21 * * * echo hhhh >> /home/root/a.txt
+```
+18. 每天7:47、8:00分别执行一次
+```
+47 7,8 * * * echo hhhh >> /home/root/a.txt
+```
\ No newline at end of file