diff --git "a/\350\265\226\345\277\203\345\246\215/20240603 awk.md" "b/\350\265\226\345\277\203\345\246\215/20240603 awk.md" index ab04fa17ce4d06abf6ef66a45cc924ebe9a463db..b5c5e735d8d2d91b51903909be4c036e12048fd1 100644 --- "a/\350\265\226\345\277\203\345\246\215/20240603 awk.md" +++ "b/\350\265\226\345\277\203\345\246\215/20240603 awk.md" @@ -1 +1,195 @@ -## awk \ No newline at end of file +```bash +# 用echo将内容写入文件,''可以使用回车需要用ctrl + d 退出 +echo '内容' > 文件 +``` + +## awk + +```bash +awk 选项 '脚本' 文件 + +# 打印有包含杨梅的全部列 +# print 打印 +# -F 输入时的域分割符,后面,就是,,后面:就是: +# $0 全部列($1 $2 $3 打印第一列……) +awk -F, '/杨梅/ {print $0}' 文件 + +# 打印包含杨梅的第一、五、四列并给第一行添加姓名、班级、分数 +# BEGIN {print 内容} 添加表头 +awk -F, 'BEGIN {print "姓名 班级 分数"} /杨梅/ {print $1,$5,$4}' 文件 + +# 打印第一、五、四列并给第一行添加姓名、班级、分数 +awk -F, 'BEGIN {print "姓名 班级 分数"} {print $1,$5,$4}' 文件 + +# 打印大于第一行的第一、五、四列内容 +# NR 表示行号 +awk -F, 'BEGIN {print "姓名 班级 分数"} NR>1 {print $1,$5,$4}' 文件 +# NF 表示列数 + +# 打印大于第一行的第一、五、四列并添加表头姓名、班级、分数,分割符为- +# FS="," 表示输入时的分割符为,与-F同理 +# OFS="-" 表示输出时的分割符为-,比FS优先 +# 表头打印不受分割符限制 +# 用;分开 +awk 'BEGIN {FS=",";OFS="-";print "姓名 班级 分数"} NR>1 {print $1,$5,$4}' 文件 + +# 分割符为,并打印全部 +# 只有print表示打印全部 +awk -F, '{print}' 文件 + +# 分割符为,并打印第二列大于等于60的第一列、第二列内容 +# $2>=60 表示第二列大于等于60 +awk -F, '$2>=60 {print $1,$2}' 文件 + +# 分割符为,并打印第二列小于60的第一列、第二列内容 +# !($2>=60) 取反 +awk -F, '!($2>=60) {print $1,$2}' 文件 +awk -F, '$2<60 {print $1,$2}' 文件 + +# 打印大于第一行并小于等于第四行的内容 +# NR>1 && NR<=4 表示行号大于1小于等于4 +# && 表示并且 +awk -F, 'NR>1 && NR<=4 {print}' 文件 + +# 打印第二列内容大于80的大于第一行并小于等于第四行的内容 +# $2>80 表示第2列大于80 +awk -F, 'NR>1 && NR<=4 && $2>80 {print}' 文件 + +# 打印第二列内容大于80的大于第一行并小于等于第四行的内容并添加表头姓名、数学成绩用空格使打印结果对齐 +# \t 表示空格制表符 +awk -F, 'BEGIN {OFS="\t",print "姓名\t数学成绩"} NR>1 && NR<=4 && $2>80 {print $1,$2}' 文件 + +# printf 格式化输入 +# %s 表示字符串 +# %d 表示有符号十进制整数 +# %f 表示浮点数 +# %10d 表示右对齐的有符号十进制整数宽度为10 +# %-10d 表示右对齐的有符号十进制整数宽度为10 +# %5s 表示右对齐宽度为5的字符串 +# %-5s 表示左对齐宽度为5的字符串 +# %8.2f 表示字段总宽度为8,其中小数点后有2位的浮点数 + +# 打印第二列内容大于80的大于第一行并小于等于第四行的内容并添加表头姓名、数学成绩用空格使打印结果对齐显示两位小数 +# printf("格式",打印内容) 表示用打印格式打印内容 +# %6.2f 表示右对齐的宽度并小数后有2位浮点数 +awk -F, 'BEGIN {OFS="\t";print "姓名\t数学成绩"} NR>1 && NR<=4 && $2>80 {printf("%s\t%6.2f\n", $1,$2)}' 文件 +# %-6.2f 表示左对齐的宽度并小数后有2位浮点数 + +# 打印全部内容并总和计算出第2、3、4列的数值 +# $2+$3+$4 总和第2、3、4列内容 +awk -F, '{print $0,$2+$3+$4}' 文件 + +# 第2列求和 +awk '{sum +=$2} END {print "总分:",sum}' 文件 + +# 显示第2列平均数值和总和数值 +awk '{sum +=$2} END {print "总分:",sum;print "平均分:",sum/NR}' 文件 + +# 打印第一列包含三的内容 +awk '$1-/三/{print}' 文件 + +# == 等于 +# != 不等于 +# < 小于 +# <= 小于等于 +# > 大于 +# >= 大于等于 + +# 打印第一列是王强的内容 +awk -F, '$1=="王强" {print}' 文件 + +# 打印大于第一行的第一列内容并显示行号但是行号从1开始 +awk -F, 'NR>1 {print NR-1,$1}' 文件 + +# 在第一行插入表头姓名并打印大于第一行的第一列内容行号从1开始 +awk -F, 'NR==1 {print "","姓名"} NR>1 {print NR-1,$1}' 文件 +``` + +## 作业 + +1. 只显示/etc/passwd的账户 + + /etc/passwd 是存放系统配置文件用户信息的,第一行才是账户,它们都是用冒号:隔开所以是冒号 + + ```bash + awk -F: '{print $1}' /etc/passwd + ``` + +2. 只显示/etc/passwd的账户和对应的shell,并在第一行上添加列名用户制表符shell,最后一行添加---------------- + + $NF 指的是最后一列,对应的shell就是最后一列第7列 + + **`/bin/bash`:** + + - 许多Linux系统将 `/bin/sh` 实际上链接到 `/bin/bash`,因此当系统使用默认shell时,它使用的是Bash。 + + **`/usr/sbin/nologin`:** + + - `nologin` shell实际上是一个用于禁止用户登录的占位符。当用户尝试登录时,系统将显示一个消息并禁止登录。通常用于系统账户或服务账户,以确保它们不能通过登录获取shell访问权限。 + + ```bash + awk -F: 'BEGIN {OFS="\t"} {print $1,$NF}' /etc/passwd + ``` + +3. 搜索/etc/passwd有关键字root的所有行 + + ```bash + awk -F, '/root/ {print $0}' /etc/passwd + ``` + +4. 统计/etc/passwd文件中,每行的行号,每列的列数,对应的完整行内容以制表符分隔 + + ```bash + awk -F: 'BEGIN {OFS="\t"} {print NR,NF,$0}' /etc/passwd + ``` + +5. 输出/etc/passwd文件中以nologin结尾的行 + + nologin$ 表示结尾为nologin + + $ 结尾 + + ```bash + awk -F: '/nologin$/{print}' /etc/passwd + ``` + +6. 输出/etc/passwd文件中uid字段小于10的行 + + ```bash + awk -F: 'NF<10 {print}' /etc/passwd + ``` + +7. /etc/passwd文件中gid字段大于200的,输出该行第一、第四字段,第一,第四字段并以制表符分隔 + + 第一字段:用户名称 + + 第二字段:密码标志 + + 第三字段:uid(用户id) + + ​ 0:超级用户 + + ​ 1 - 499:系统用户(伪用户) + + ​ 500 - 65535:普通用户 + + 第四字段:gid(用户初始组id) + + 第五字段:用户说明 + + 第六字段:家目录 + + 第七字段:登录之后的shell + + ```bash + awk -F: 'BEGIN {OFS="\t"} $4>200 {print $1,$4}' /etc/passwd + ``` + +8. 输出/etc/passwd文件中uid字段大于等于100的行 + + ```bash + awk -F: '$3>=100 {print}' /etc/passwd + ``` + + + diff --git "a/\350\265\226\345\277\203\345\246\215/20240612 \345\270\270\347\224\250\345\221\275\344\273\244.md" "b/\350\265\226\345\277\203\345\246\215/20240612 \345\270\270\347\224\250\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..ba0d40c769c35d473739e8967b4b453cd19fbb91 --- /dev/null +++ "b/\350\265\226\345\277\203\345\246\215/20240612 \345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -0,0 +1,414 @@ +## 常用命令 + +以下是一些常见的 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/\350\265\226\345\277\203\345\246\215/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" "b/\350\265\226\345\277\203\345\246\215/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..082055d696aaff76b8ed8505c7ee4dc6d4882875 --- /dev/null +++ "b/\350\265\226\345\277\203\345\246\215/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" @@ -0,0 +1,29 @@ +## << 是什么功能? here document + +<< 符号引入了一种特殊的文本块,称为here document + +here document 允许我们在命令行中嵌入多行文本块作为命令的输入 + +```bash +# 创建文件内容 +cat << 标题 > 文件 +> 文件内容 +# crtl + d 退出 +``` + +## ()是把命令包括起来干什么的? + +() 用于命令替换和创建子shell + +```bash +# 命令替换 + + + +# 创建子shell赋值 +(var=updown;echo $var) + +# 数组赋值或者初始化数组 +a=(1 2 3 4) +``` + diff --git "a/\350\265\226\345\277\203\345\246\215/assets/16.png" "b/\350\265\226\345\277\203\345\246\215/assets/16.png" deleted file mode 100644 index cfef0d1418b9103e86a957f1baef9bf5e073f8ee..0000000000000000000000000000000000000000 Binary files "a/\350\265\226\345\277\203\345\246\215/assets/16.png" and /dev/null differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/17.png" "b/\350\265\226\345\277\203\345\246\215/assets/17.png" deleted file mode 100644 index 3295d292db77e692f2d0bf939265577e20e76b38..0000000000000000000000000000000000000000 Binary files "a/\350\265\226\345\277\203\345\246\215/assets/17.png" and /dev/null differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/18.png" "b/\350\265\226\345\277\203\345\246\215/assets/18.png" deleted file mode 100644 index edface51f7d9f89b8bec73155b3261f8f8c7975f..0000000000000000000000000000000000000000 Binary files "a/\350\265\226\345\277\203\345\246\215/assets/18.png" and /dev/null differ diff --git "a/\350\265\226\345\277\203\345\246\215/assets/19.png" "b/\350\265\226\345\277\203\345\246\215/assets/19.png" deleted file mode 100644 index c7a89ecb96460767b7d88744bf7bbb825d5404b1..0000000000000000000000000000000000000000 Binary files "a/\350\265\226\345\277\203\345\246\215/assets/19.png" and /dev/null differ