diff --git "a/13\351\237\251\347\224\263\347\220\246/20240604.md" "b/13\351\237\251\347\224\263\347\220\246/20240604.md" new file mode 100644 index 0000000000000000000000000000000000000000..b4c35052a8ccd543e4ee1f25a9474ae61d1190ec --- /dev/null +++ "b/13\351\237\251\347\224\263\347\220\246/20240604.md" @@ -0,0 +1,213 @@ +### awk命令用法 + +```bash +假如已有stu.txt文件,内容如下: +姓名,数学,语文,科学,班级 +张伟,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班 +``` + +```bash +awk [选项] '脚本' 文件 +#最简单的一个脚本,打印全文 +awk '{print}' stu.txt + +awk脚本由一个或多个语句块组成,每个语句块可以是以下三种之一: +1.开始语句块:在程序开始时执行 BEGIN {print "start"} +2.通用语句块:逐行处理文件内容 pattern {commands} +3.结束语句块:在程序结束时执行 END {print "end"} +``` + +```bash +# 头尾各加一行 +awk 'BEGIn {print "我是开头"} {print} END {print "我是结尾"}' stu.txt + +语句块语法:由模式和动作构成 +awk 'pattern {actions}' #即 模式 {动作} +#模式 (pattern):可以是正则表达式,关系表达式,特定条件等。 +#动作 (action): 一组语句,描述在匹配模式的行上执行的操作 + +awk '/王/ {print $0}' stu.txt +#打印文件中所有包含 王 的行 +``` + +```bash +awk -F, 'BEGIN {print "------开始-------"} +$2>=80 {print} +END {print "--------结束--------"}' stu.txt +#-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 +----结束----- +``` + +```bash +#### Awk 中的常用选项(限命令行) +- `-F`:指定输入字段分隔符。例如,`-F,` 将逗号设置为字段分隔符。 + - 默认是以空格\t等为分隔符 file split + - 类似于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` 以格式化方式打印第一字段。 + +- - 常用的格式说明符 + - `%s`:字符串 String + - `%d`:有符号十进制整数 + - `%f`:浮点数 %.2f + + - 带有宽度和对齐的写法: + - `%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 + +``` + +```bash +#计算总成绩 +awk 'BEGIN {FS=","} NR>1 {print $1, $2 + $3 + $4 }' stu.txt +#BEGIN {FS=","}:设置字段分隔符FS为逗号 +#NR>1 :跳过标题行,只处理从第二行开始的数据 +#{print $1,$2+$3+$4}:打印每一行的第一个字段和第二到第五个字段的和 + +#查找姓名为王强的学生信息 +awk 'BEGIN { FS="," } $1 == "王强" { print }' stu.txt +# 输出 王强,95,89,94,85 + +#打印行号和学生姓名: +awk -F ',' '{ print NR, $1 }' stu.txt + +#查找特定学生的成绩: +awk -F ',' '$1 == "杨梅" { print "姓名:" $1, "数学:" $2, "语文:" $3, "科学:" $4 }' stu.txt + +#使用正则表达式查找学生: +awk -F ',' '$1 ~ /王强/ { print $1, $2 + $3 + $4 }' stu.txt +#使用 ~ 运算符明确表示匹配第一个字段 $1,即检查第一字段是否包含 "王强"。 +#$1 == "王强":匹配完全等于 "王强" 的行。 +#$1 ~ /王强/:匹配包含 "王强" 的所有行 + +#结合模式使用 +awk -F, '$2 >= 85 || $3 >= 90 { print $0 }' stu.txt # 数字85以上,或数学90以上 +awk -F, '$2<60 || $3<60 || $4<60 {print} ' stu.txt # 有任意一科挂科的 + + +#计算总成绩和平均成绩: +awk -F, '{ total += $2 + $3 + $4 } +END { + print NR-1, "个学生"; + print "总分 is", total; + print "平均分 is", total/(NR-1) +}' stu.txt + +# 利用数组lines[]存放每一行的内容,再倒序打印每一行 +awk '{ lines[NR] = $0 } END { for (i = NR; i > 0; i--) print lines[i] }' stu.txt + +# 在所有不及格的分数后添加不及格三个字 +awk -v min=60 'BEGIN { FS=","; OFS="\t\t" } +{ + math=$2; + chinese=$3; + science=$4; + if (math < min) math = math " 不及格"; + if (chinese < min) chinese = chinese " 不及格"; + if (science < min) science = science " 不及格"; + print $1, math, chinese, science + }' stu.txt + + +# 按班级输出总分 +awk -F, 'NR>1 { scores[$5] += $2+$3+$4 } END { for (name in scores) print name, scores[name] }' stu.txt + +# 打印每个班级中语文最高分 +awk -F, 'NR>1 { if (scores[$5] < $2) scores[$5] = $2 } END { for (name in scores) print name, scores[name] }' stu.txt + +# 打印每个班语文最高分姓名和分数 +awk -F, ' +NR == 1 { next } # Skip header line +{ + class = $5 + chinese_score = $2 + if (chinese_score > max_score[class]) { + max_score[class] = chinese_score + max_name[class] = $1 + } +} +END { + for (class in max_score) { + print class, max_name[class], max_score[class] + } +} +' stu.txt + +#删除空行: +# NF代表有列的行,即排除了空行 +awk 'NF' stu.txt + +#查找和替换文本: +#所有的"1班"替换为"一班" +awk -F, ' { gsub(/1班/, "一班"); print }' stu.txt +``` + diff --git "a/13\351\237\251\347\224\263\347\220\246/20240608.md" "b/13\351\237\251\347\224\263\347\220\246/20240608.md" new file mode 100644 index 0000000000000000000000000000000000000000..394a10b6b27b4732894098f9c1dcf6984f378604 --- /dev/null +++ "b/13\351\237\251\347\224\263\347\220\246/20240608.md" @@ -0,0 +1,94 @@ +```bash + 文件内容编辑-vim +1.光标移动 + 单位级 + h向左移动一个单位 + j向下移动一个单位 + k向上移动一个单位 + l向右移动一个单位 + 单词级 + w向右移动到下一单词开头 + e向右移动到下一单词结尾 + b向左移动到下一单词开头 + 块级 + gg移动光标到文档第一行 + G移动光标到文档最后一行 + 0移动光标所在行的第一列 + ^移动光标到所在行的最后一列 + $ 移动光标到所在行的最后一列 + H 移动光标到屏幕顶端 + M 移动光标到屏幕中间 + L 移动光标到屏幕底部 + gg或者:移动光标到第n行 + k或者:移动光标到向上n行 + j或者:+移动光标到向下n行 +2.Visual模式 + 字符模式,在命令模式中按v键进入 + 行模式,在命令模式中按V键进入 + 块模式,在命令模式中按Ctrl+v键进入 +3.vim内打开文件 + :e<文件名称> 打开名为filename的文件,若文件不存在则创建该文件 + :Ex在Vim中打开目录树,光标选中后回车打开对应文件(提示:-进入上级目录) +4.内容查找 + 文档内查找 + *向后查找当前光标所在单词 + # 向前查找当前光标所在单词 + 向后查找指定字符串 + ?向前查找指定字符串 + n继续查找下一个 + N继续查找上一个 + 行内查找 + f当前行内向行尾查找定位X字符 + t当前行内向行尾查找定位X字符前一字符 + F 当前行内向行首查找定位X字符 + T 当前行内向行首查找定位X字符后一字符 + ; 向当前方向查找下一个字符 + , 向当前反方向查找下一个字符 + 匹配查找%符号在其中一个上时 + (和) + [和] + {和} +5.文档修改与保存 + 插入 + 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 文件另存一份名为 的副本并继续编辑原文件 +``` + diff --git "a/13\351\237\251\347\224\263\347\220\246/20240611.md" "b/13\351\237\251\347\224\263\347\220\246/20240611.md" new file mode 100644 index 0000000000000000000000000000000000000000..cd1bf832d6731dff7135971f8fae8fcae6904505 --- /dev/null +++ "b/13\351\237\251\347\224\263\347\220\246/20240611.md" @@ -0,0 +1,81 @@ +```bash +1.设置国内软件源镜像:/etc//apt/sources.list +2.更新软件包列表:apt update +3.更新系统:apt upgrade -y +4.安装vim:apt install vim -y +5.编辑网卡配置,设置静态IP: +vim /etc/network/interfaces + +重新启动网络服务: +sudo systemctl restart networking +常用命令; + +1.time(用于测量命令的执行时间) +- real:总的时间(墙上时钟时间)。 +- user:用户态 CPU 时间。 +- sys:内核态 CPU 时间。 + +2.date(显示或设置系统日期和时间) +- %Y:四位数的年份。 +- %m:两位数的月份。 +- %:两位数的日期。 + +3.timedatectl(查看和设置系统时间和日期,时区和 NTP(网络时间协议)设置) +- NTP:网络时间协议,用于同步时间。 +- RTC:实时时钟。 + +4.reboot(重新启动系统) +- systemd:系统和服务管理器。 + +5.poweroff(关闭系统电源) +- halt:停止系统所有的 CPU 功能。 + +6.wget(从网络上下载文件) +- URL:统一资源定位符。 +- HTTP/HTTPS:超文本传输协议。 + +7.curl(从网络上获取或发送数据) +- URL:统一资源定位符。 +- GET/POST:HTTP 请求方法。 + +8.ps(查看当前运行的进程) +- PID:进程标识符。 +- TTY:终端类型。 + +9.kill(向进程发送信号(通常用于终止进程)) +- SIGTERM:请求中止进程。 +- SIGKILL:强制终止进程。 + +10.ip(显示和操作网络接口和路由) +- address:IP 地址。 +- route:路由信息。 + +11.ss(显示套接字统计信息。旧版是netstat) +- TCP:传输控制协议。 +- UDP:用户数据报协议。 + +12.uname(显示系统信息) +- kernel:操作系统内核。 +- OS:操作系统。 + +13.uptime(显示系统运行时间和负载) +- load average:系统平均负载 + +14.who(显示当前登录用户信息) +- login:用户登录信息。 +- TTY:终端类型。 + +15.last(显示系统上最近的登录信息) +- wtmp:记录登录和注销事件的文件。 + +16.ping(测试网络连通性) +- ICMP:互联网控制消息协议。 +- echo request:回显请求。 + +17.traceroute(显示到达网络主机的路径) +- hop:从一个网络节点到另一个的跳转。 +- TTL:生存时间。 + +18.history(显示命令历史记录) +- bash history:记录用户输入的命令历史。 +``` \ No newline at end of file diff --git "a/13\351\237\251\347\224\263\347\220\246/20240612.md" "b/13\351\237\251\347\224\263\347\220\246/20240612.md" new file mode 100644 index 0000000000000000000000000000000000000000..f5aca278bc660e3db51995de27392e8d48a9f2a6 --- /dev/null +++ "b/13\351\237\251\347\224\263\347\220\246/20240612.md" @@ -0,0 +1,66 @@ +## 重定向和管道 + +```bash +常用的文件描述符包括: + 0:标准输入:键盘输入 + 1:标准输出:直接显示在屏幕,不包含错误信息 + 2:标准错误:只包含错误信息 + +输出重定向 + 1.覆盖输出重定向 > + 将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它 + ls > 1.txt + 这个命令将ls命令的输出保存到1.txt文件中,如果文件已存在,则会被覆盖 + + 2.追加输出重定向 >> + 将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它 + echo "Hello" >> 2.txt + 这个命令会将"Hello"追加到2.txt文件中 + + 3.注意: + 标准输出不含错误信息 + +输入重定向 + 1.输入重定向 < + 将文件的内容作为命令的输入 + #原本的内容 + orange + banana + apple + 命令: sort < 3.txt + #使用命令后的内容 + apple + banana + orange + 将3.txt文件的内容作为‘sort’命令的输入进行排序 + + +错误重定向 + 1.错误输出重定向 2> + 将命令的错误输出重定向到一个文件 + reboot 2> 4.txt + 这个命令会将错误的信息保存到4.txt文件中 + + 2.错误输出追加重定向 2>> + 将命令的错误输出追加到一个文件 + reboot 2>> 3.txt + 这个命令会将reboot的错误信息追加到3.txt文件中 + + 3.同时重定向标准输出和标准错误输出 + 使用 &> 符号将标准输出和错误输出同时重定向到同一个文件 + command &> 5.txt #正确和错误原版混搭,原封不动 + command > 1.txt 2>&1 #正确和错误原版混搭,原封不动 + command > 1.txt 2>> 1.txt #先正确后错误 + command 2> 1.txt >> 1.txt #先错误后正确 + + +管道符 | + 1.将命令的输出传递给另一个命令 + ls -l | grep "txt" + 这个命令会将ls -l 的输出传递给grep 'txt',只显示包含“txt”的行 + + 2.多命令链式操作 + ps aux | grep "sshd" | awk '{print $2}' + 这个命令链会列出所以进程(ps aux),然后过滤包含"sshd"的行(grep 'sshd'),最后提取进程ID(awk '{print $2}') +``` + diff --git "a/13\351\237\251\347\224\263\347\220\246/20240614.md" "b/13\351\237\251\347\224\263\347\220\246/20240614.md" new file mode 100644 index 0000000000000000000000000000000000000000..d063a9f9ed6d3710cd7c658f4ec33fe5f8adccd9 --- /dev/null +++ "b/13\351\237\251\347\224\263\347\220\246/20240614.md" @@ -0,0 +1,267 @@ +1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) + + ```bash + root@hecs-235925:~# mkdir -p /guanli/zonghe &&mkdir /guanli/jishu + ``` + +2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 + + ```bash + root@hecs-235925:~# groupadd -g 2001 zonghe + root@hecs-235925:~# groupadd -g 2002 caiwu + root@hecs-235925:~# groupadd -g 2003 jishu + ``` + +3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 + + ```bash + root@hecs-235925:~# useradd jerry && useradd -e 2020-12-30 kylin && useradd tsengia && useradd obama + ``` + + + +4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 + + ```bash + root@hecs-235925:~# gpasswd -M jerry,kylin,tsengia,obama zonghe + ``` + + + +5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” + + ```bash + root@hecs-235925:~# useradd handy && useradd cucci + root@hecs-235925:~# usermod -s /sbin/nologin cucci + ``` + + + +6. 将handy、cucci等用户添加到jishu组内 + + ```bash + root@hecs-235925:~# gpasswd -M handy,cucci jishu + ``` + + + +7. 将上述的所有用户均要求加入到guanli组内 + + ```bash + root@hecs-235925:~# groupadd guanli + root@hecs-235925:~# gpasswd -M jerry,kylin,tsengia,obama,handy,cucci guanli + ``` + + + +8. 将zonghe组内的obama用户删除 + + ```bash + root@hecs-235925:~# gpasswd -d obama zonghe + Removing user obama from group zonghe + ``` + + + +9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” + + ```bash + root@hecs-235925:~# passwd jerry + root@hecs-235925:~# passwd redhat + ``` + + + +10. 将jerry用户锁定,并查看锁定状态 + + ```bash + root@hecs-235925:~# usermod -L jerry + root@hecs-235925:~# passwd -S jerry + jerry L 06/14/2024 0 99999 7 -1 + ``` + + + +11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 + + ```bash + zdy18@hecs-235925:~$ sudo apt-get update + zdy18@hecs-235925:~$ sudo apt-get install psmisc + zdy18@hecs-235925:~$ who + zdy18@hecs-235925:~$ fuser -k/dev/pts/1 + ``` + + + +12. 查看cucci用户,属于那些组,并查看其详细信息 + + ```bash + root@hecs-235925:~# groups cucci + zdy18@hecs-235925:~$ sudo apt-get install finger + zdy18@hecs-235925:~$ finger cucci + + ``` + + + +13. 手工创建账号student(预留) + + ```bash + root@hecs-235925:~# vi /etc/passwd + student:x:1014:1014::/home/student:/bin/bash + root@hecs-235925:~# vi /etc/shadow + student::18107:0:99999:7::: + root@hecs-235925:~# vi /etc/group + student:x:1014: + root@hecs-235925:~# mkdir /home/student + root@hecs-235925:~# cd /etc/skel/ + root@hecs-235925:~skel# ls -a | cp .b* /home/student/ + ``` + + + +14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 + + ```bash + root@hecs-235925:~# chown :guanli /guanli + root@hecs-235925:~# chown :zonghe /guanli/zonghe + root@hecs-235925:~# chown :jishu /guanli/jishu + root@hecs-235925:~# chmod -R o-rwx /guanli/ + ``` + + + +15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 + + ```bash + root@hecs-235925:~# mkdir /ceshi + root@hecs-235925:~# chown .jishu /ceshi/ + root@hecs-235925:~# chmod 770 /ceshi/ + root@hecs-235925:~# ls -ld /ceshi + drwxrwx--- 2 root jishu 4096 Jun 14 19:12 /ceshi + ``` + + + +16. 清除jerry用户密码 + + ```bash + root@hecs-235925:~# passwd -d jerry + passwd: password expiry information changed. + ``` + + + +17. 锁定cucci用户密码并查看状态 + + ```bash + root@hecs-235925:~# passwd -l cucci + passwd: password expiry information changed. + root@hecs-235925:~# passwd -S cucci + cucci L 06/14/2024 0 99999 7 -1 + ``` + + + +18. 修改obama用户的UID为8888 + + ```bash + root@hecs-235925:~# id obama + uid=1021(obama) gid=1021(obama) groups=1021(obama),2004(guanli) + root@hecs-235925:~# usermod -u 8888 obama + root@hecs-235925:~# id obama + uid=8888(obama) gid=1021(obama) groups=1021(obama),2004(guanli) + ``` + + + +19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 + + ```bash + root@hecs-235925:~# passwd -x 60 kylin + passwd: password expiry information changed. + root@hecs-235925:~# cat /etc/shadow |grep "kylin" + kylin:!:19888:0:60:7::18626: + ``` + + + +20. 通过id groups等命令查看用户handy信息 + + ```bash + root@hecs-235925:~# id handy + uid=1022(handy) gid=1022(handy) groups=1022(handy),2003(jishu),2004(guanli) +root@hecs-235925:~# groups handy + handy : handy jishu guanli + ``` + + + +- 用户管理 + - 添加账户 useradd -m -s /bin/bash db2 + - 删除账户 userdel -r db2 + - 修改账户 usermod [选项同添加账户] db2 + - 查看帐户 getent passwd db2 +- 用户组管理 + - 添加用户组 groupadd stu1 + - 删除用户组 groupdel stu1 + - 添加用户到用户组 usermod -aG stu1 db2 +- 密码管理 + - 设置密码 passwd +- sudo权限管理 + - usermod -aG sudo xxx + - 修改/etc/sudoers文件 +- 登录权限管理 +- 用户环境管理 + - 用户配置文件 : .bashrc + - 用户环境变量: $PATH、$HOME、$SHELL + +## 文件与目录的权限管理 + +- https://www.runoob.com/linux/linux-file-attr-permission.html + + ![20240605092950](./assets/20240605092950.png) + +- 文件类型 + + - -普通文件 + - d目录 + - l连接文件 + - b c s p 等其它文件 + +- 基本权限 + + - r 读 + - w 写 + - x 执行 + +- 权限表示 + + - 字符表示 + - 数字表示 + - 4 代表 r + - 2 代表 w + - 1 代表 x + - 权限修改 + - chmod 修改权限 + - chown 修改拥有者 + - chgrp 修改所属组 + - 权限的继承 + - 目录权限下文件和目录的影响 + - umask + - 特权权限 + - SUID + - SGID + - SBIT + - 隐藏权限 + - i + - 用在文件上,无法对该文件进行任何修改 + - 用在目录上,无法在里面创建新文件,但可以修改已有文件 + - a + - 除了可追加内容外,无法进行其它修改 + - 隐藏权限的操作 + - 修改隐藏权限 chattr + - chattr +i XXX + - chattr -i XXX + - 查看隐藏权限 + - lsattr \ No newline at end of file diff --git "a/13\351\237\251\347\224\263\347\220\246/20240615.md" "b/13\351\237\251\347\224\263\347\220\246/20240615.md" new file mode 100644 index 0000000000000000000000000000000000000000..f6ad019382ee2537d6c4ec71e39681b4c2023e6a --- /dev/null +++ "b/13\351\237\251\347\224\263\347\220\246/20240615.md" @@ -0,0 +1,53 @@ ++ 查看当前用户的crontab文件:crontab -l ++ 编辑当前用户的crontab文件:crontab -e ++ 删除当前用户的crontab文件:crontab -r ++ 列出某个用户的crontab文件(需要有相应的权限): crontab -u username -l ++ 编辑某个用户的crontab文件(需要有相应的权限): crontab -u username -e + + + +f1 f2 f3 f4 f5 program + ++ 其中f1是表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天。program表示要执行的程序 + + + +```bash +时间设置 含义 +* * * * * 每分钟执行一次 +0 * * * * 每小时的第0分钟执行一次 +0 0 * * * 每天的午夜(0点)执行一次 +0 0 * * 0 每周日的午夜(0点)执行一次 +0 0 1 * * 每个月的第一天午夜(0点)执行一次 +0 0 L * * 每个月的最后一天午夜(0点)执行一次 +0 0 1 1 * 每年的第一天午夜(0点)执行一次 +0 0 * * 3 每周三的午夜(0点)执行一次 +0 0 1,15 * * 每个月的第1和第15天午夜(0点)执行一次 +0 0 * * FRI 每周五的午夜(0点)执行一次 +0 0 * * 5 每周五的午夜(0点)执行一次 +0 8-17 * * * 每天的上午8点到下午5点每小时执行一次 +0 12 * * MON 每周一的中午(12点)执行一次 +0 0 15 * * 每个月的第15天午夜(0点)执行一次 +0 0 * * 3 每周三的午夜(0点)执行一次 +0 0 * * 1-5 每个工作日的午夜(0点)执行一次 +0 0 1 * FRI 每个月的第一个星期五午夜(0点)执行一次 +0 0 15 1 * 每个月的1月15日午夜(0点)执行一次 +0 0 * * 7 每周日的午夜(0点)执行一次 +0 0 * * 5 每周五的午夜(0点)执行一次 +``` + +```bash +实例 +每一分钟执行一次 /bin/ls: +* * * * * /bin/ls + +在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup: +0 6-12/3 * 12 * /usr/bin/backup + +周一到周五每天下午 5:00 寄一封信给 alex@domain.name: +0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata + +每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha": +20 0-23/2 * * * echo "haha" +``` + diff --git "a/13\351\237\251\347\224\263\347\220\246/20240618.md" "b/13\351\237\251\347\224\263\347\220\246/20240618.md" new file mode 100644 index 0000000000000000000000000000000000000000..240e00213c88dfddc908f67af895ba6bd7f66995 --- /dev/null +++ "b/13\351\237\251\347\224\263\347\220\246/20240618.md" @@ -0,0 +1,68 @@ +### 环境变量 + +``` bash +1.环境变量的类型和作用 + 用户级别环境变量 + 存储在用户家目录的个人配置文件中,例如 ~/.bashrc ~/.profile + 用于定义用户个性化的Shell设置,如别名,路径等 + 系统级别环境变量 + 存储在系统范围的配置文件中,如/etc/environment /etc/profile + 为所有用户和系统服务提供全局的环境设置 java_home + +2.环境变量的加载顺序和文件 + 系统启动加载: /etc/environment + 登录Shell加载顺序: + 首先加载/etc/profile 然后根据用户登录方式加载 ~/.profile(存在性依次加载) + 非登录shell:su 切换用户等 source + 交互式Shell加载顺序: + 加载~/.bashrc 或类似文件,用于设置用户个性化的Shell环境 + 不同的shell加载不同的文件,bash才加载.bashrc, zsh加载.zshrc + 交互式:提供命令行窗口,非交互式:直接写在脚本里 + 总结来说 + 配置文件的理论加载顺序通常是 /etc/environment > /etc/profile > ~/.profile > ~/.bashrc + +3.设置环境变量的方法 + 设置变量的位置:命令行(临时),脚本文件(永久) + + 3.1 临时设置环境变量:临时变量(局部),临时环境变量(全部) + 可以使用export 命令来临时设置一个环境变量,例如: + export MY_VAR="value" # export 变量名=值 环境变量是全局的,整个环境有效 + MY_VAR="value" # 少了export就是临时变量,不是全局的 + 这种设置只在当前Shell会话中有效,关闭Shell会话后会失效 + + 3.2 永久设置环境变量 + 用户级别的: 编辑用户的~/.bashrc 或~/.profile文件,并添加如下行: + export MY_VAR="value" + 保存文件后,新的设置会在下次登录时生效 + 系统级别的:编辑/etc/environment 或 /etc/profile文件,并添加行: + MY_VAR="value" + 这里不需要使用export命令,保存文件后,变量会在系统启动时生效 + + 3.3环境变量的设置和使用示例 + a.设置路径变量(PATH) + # 在 ~/.bashrc 中添加 + export PATH=$PATH:/path/to/your/scripts + b.定义Java环境变量(JAVA_HOME) + # 在 ~/.bashrc 或 /etc/environment 中添加 + export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 + export PATH=$JAVA_HOME/bin:$PATH + c.设置代理服务器(HTTP_PROXY、HTTPS_PROXY) + # 在 ~/.bashrc 中添加 + export HTTP_PROXY=http://proxy.example.com:8080 + export HTTPS_PROXY=http://proxy.example.com:8080 + d.配置编辑器(EDITOR) + # 在 ~/.bashrc 中添加 + export EDITOR=/usr/bin/vim + e.设置语言和地区(LANG、LC_系列变量) + # 在 ~/.bashrc 或 /etc/environment 中添加 + export LANG=en_US.UTF-8 + export LC_ALL=en_US.UTF-8 + f.自定义命令别名(alias) + # 在 ~/.bashrc 中添加 + alias ll='ls -alF' + alias grep='grep --color=auto' + g.设置临时环境变量 + # 临时设置变量 + export MY_VAR="value" +``` + diff --git "a/13\351\237\251\347\224\263\347\220\246/20240619.md" "b/13\351\237\251\347\224\263\347\220\246/20240619.md" new file mode 100644 index 0000000000000000000000000000000000000000..eccfd3748d9995c0ed7f8e91987bce97d473591f --- /dev/null +++ "b/13\351\237\251\347\224\263\347\220\246/20240619.md" @@ -0,0 +1,46 @@ +### Linux系统服务管理 + ++ systemctl + + 启动服务 : systemctl start 服务名 + + 停止服务 : systemctl stop 服务名 + + 重启服务 : systemctl restart 服务名 + + 查看服务 : systemctl status 服务名 + + 重新加载配置文件 : systemctl reload 服务名 ++ service + + 启动服务 : service 服务名 start + + 停止服务 : service 服务名 stop + + 重启服务 : service 服务名 restart + + 查看服务 : service 服务名 status + +```bash +ps命令:用于列出当前正在运行的进程 +ps -aux:显示所有用户的所有进程 +ps -ef :以完整格式显示所有进程 +ps -e --forest :以树形结构显示进程关系 + +kill命令:用于终止指定进程 +kill PID(是一个数字的PID) +例 kill 1234 (该命令将向PID为1234的进程发送默认的终止信号) + +-1 或 -hangup +例 kill -1 PID (挂起信号,通常用于重启或重新加载进程) + +-2 或 -interrupt +例 kill -2 PID (中断信号,通常由Ctrl+C 发送给前台进程) + +-3 或 -quit +例 kill -3 PID (退出信号,通常由Ctrl+\0发送给前台进程) + +kill -9 PID +例 kill -9 5678 (使用强制终止信号,终止进程) + +-15 或 -terminate +例 kill -15 PID (终止信号) + +-17 或 -stop +例 kill -17 PID (暂停进程的执行) + +-18 或 -continue +例 kill -18 PID (继续信号,恢复被停止的进程的执行) +``` +