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 +``` +