From 1e4ed7861fe0e1e6baa5e1c46bdc87900c638c96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E6=80=9D=E5=A9=B7?= <3377421251@qq.com> Date: Wed, 19 Jun 2024 12:25:56 +0800 Subject: [PATCH] 2024.06.18 --- ...07\344\273\266\347\256\241\347\220\206.md" | 114 +++-- ...04\345\217\212\344\275\234\344\270\232.md" | 35 ++ ...25\345\217\212\344\275\234\344\270\232.md" | 34 +- ...06\345\217\212\344\275\234\344\270\232.md" | 119 ++++-- ...06\345\217\212\344\275\234\344\270\232.md" | 6 +- ...47\232\204\347\256\241\347\220\206-awk.md" | 68 ++- ...50\345\217\212\344\275\234\344\270\232.md" | 54 +++ ...57\345\242\203\345\217\230\351\207\217.md" | 394 ++++++++++++++++++ 8 files changed, 736 insertions(+), 88 deletions(-) create mode 100644 "44 \351\231\206\346\200\235\345\251\267/2024.06.18-\347\216\257\345\242\203\345\217\230\351\207\217.md" diff --git "a/44 \351\231\206\346\200\235\345\251\267/2024.05.21-Linux\346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" "b/44 \351\231\206\346\200\235\345\251\267/2024.05.21-Linux\346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" index 8bc5c39..e2d52d4 100644 --- "a/44 \351\231\206\346\200\235\345\251\267/2024.05.21-Linux\346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" +++ "b/44 \351\231\206\346\200\235\345\251\267/2024.05.21-Linux\346\226\207\344\273\266\345\244\271\345\217\212\346\226\207\344\273\266\347\256\241\347\220\206.md" @@ -30,23 +30,43 @@ ——————————————————————————— +## pwd + +### 概念 + +**pwd:显示当前工作目录的绝对路径** + +### 用法 + +```bash +pwd # 显示当前工作目录的绝对路径 +dir1 = $(pwd) # 将当前工作目录路径保存到变量中(在Shell脚本中常用) +echo $dir1 +``` + +——————————————————————————— + ## mv **mv:移动文件或目录,也可用于重命名文件或目录** -**移动文件或目录**:`mv 源目录/文件 目标目录` ——相当于剪切 +### 移动文件或目录 + +​ `mv 源目录/文件 目标目录` ——相当于剪切 ​ `mv a.txt home`:将 文件 a.txt 移动到 目录home下 ​ `mv cl home`:将 目录cl 移动到 目录home下 -**重命名文件或目录**:`mv 原文件名 新文件名` +### 重命名文件或目录 + +​ `mv 原文件名 新文件名` ​ `mv a.txt b.txt`:将 a.txt 重命名为 b.txt ​ `mv cl cl2`:将 目录cl 重命名为 目录cl2 -**移动并重命名**: +### 移动并重命名 ```js // 移动一个文件到新目录,并重命名这个文件。 @@ -56,7 +76,7 @@ mv aDir /tmp/bDir // 将当前目录下的aDir目录移动到/tmp目录下,将改名为bDir ``` -**移动多个文件或目录** +### 移动多个文件或目录 ```bash # 移动多个文件 参数大于等于3个时: @@ -72,7 +92,14 @@ mv * /tmp # 移动当前目录下的,所有文件和目录到/tmp目录下 ``` -**选项** +### 扩展 + +```bash +mv example.txt .example.txt # 隐藏文件 +mv mydir .mydir # 隐藏目录 +``` + +### 选项 | 选项 | 作用 | | ---- | ------------------------------------------------ | @@ -102,6 +129,8 @@ ## cp +### 概念及用法 + **cp:复制文件或目录** - 复制文件:`cp 源文件 目标文件` @@ -121,7 +150,7 @@ - 而且必须是目录,不是文件 -**选项** +### 选项 | 选项 | 作用 | | ---- | ------------------------------------------------------------ | @@ -140,6 +169,8 @@ ## mkdir +### 概念及用法 + **mkdir:创建新目录** - mkdir 目录名:创建一个新目录 @@ -154,6 +185,8 @@ ## touch +### 概念及用法 + **touch:用于创建新文件和更新文件时间戳** 1. **创建一个空文件** @@ -171,52 +204,69 @@ ## rm -- **rm:删除文件或目录** - - `rm -rf a.txt rm -rf cl`:删除文件a.txt或目录cl -- **rmdir:删除空目录** +### rm:删除文件或目录 + +- `rm a.txt | rm cl`:删除文件a.txt或目录cl +- `rm -f a.txt b.txt`:同时删除多个文件:可以在命令中添加多个文件名,用空格分隔[mkdir,touch等操作也支持一次性操作多个目标。都是用空格隔开] +- `rm .*`:删除隐藏文件:使用` .* `(但请注意,这可能会删除当前目录下的所有隐藏文件,包括 . 和 ..,所以请谨慎使用) + +### rmdir:删除空目录 + +- `rmdir 目录名`:仅删除空的目录 -| 选项 | 作用 | -| ----- | ---------------------------- | -| `-i` | 删除前会询问是否删除 | -| `-r` | 递归删除目录及其内全部子文件 | -| `-f ` | 强制删除文件而不询问 | -| | | -| | | -| | | +### 选项 + +| 选项 | 作用 | +| ----- | --------------------------------- | +| `-i` | 删除前会询问是否删除 | +| `-r` | 递归删除目录及其内全部子文件 | +| `-f ` | 强制删除文件而不询问 | +| -d | 只删除空目录(与 rmdir 命令类似) | ——————————————————————————— ## ls -关于查看文件夹关系的还可以用tree(要下载:apt install tree) +关于查看文件夹关系的还可以用tree(要下载:apt install tree) -**ls :列出当前目录下的文件和目录** +### 概念 -**选项** +**ls :列出当前目录下的文件和目录** -| `-l` | 长数据列出文件信息,包括文件的属性与权限等信息。 | -| ---- | -------------------------------------------------------- | -| `-r` | 反向排序列出当前目录下的文件和目录 | -| `-R` | 递归列出所有子目录 | -| `-h` | 以人类可阅读的方式显示 | -| `-t` | 根据修改时间排序列出当前目录下的文件和目录,默认是大到小 | -| `-S` | 根据文件大小排序列出当前目录下的文件和目录 | -| `-a` | 列出当前目录下的所有文件和目录,包括隐藏文件/目录 | +### 选项 -`--color`:以不同颜色区分不同类型的文件,例如蓝色表示目录、绿色表示可执行文件等 +| `-l` | 长数据列出文件信息,包括文件的属性与权限等信息。 | +| --------- | ------------------------------------------------------------ | +| `-r` | 反向排序列出当前目录下的文件和目录 | +| `-R` | 递归列出所有子目录 | +| `-h` | 以人类可阅读的方式显示 | +| `-t` | 根据修改时间排序列出当前目录下的文件和目录,默认是大到小 | +| `-S` | 根据文件大小排序列出当前目录下的文件和目录 | +| `-a` | 列出当前目录下的所有文件和目录,包括隐藏文件/目录 | +| `--color` | 以不同颜色区分不同类型的文件,例如蓝色表示目录、绿色表示可执行文件等 | -- 扩展:如何修改环境变量 家目录下的自己的文件下,使用ls -a 显示所有文件,即可看到.bashrc这个环境变量的配置文件。将# alias ll='ls -l' 前的#号删除,并保存文件。最后要生效,就要退出帐号一次,再登录,即可使用ll来代替ls -l +- 扩展:如何修改环境变量 家目录下的自己的文件下,使用ls -a 显示所有文件,即可看到.bashrc这个环境变量的配置文件。将# alias ll='ls -l' 前的#号删除,并保存文件。最后要生效,就要退出帐号一次,再登录,即可使用ll来代替ls -l ```bash ls -a ——>可以看到.bashrc vim .bashrc——>编辑.bashrc alias la='ls -a' - alias l='ls -CF' + alias l='ls -CF' # C:color F:类型,如果是目录的话会在后面加 `/` ``` ——————————————————————————— -## +## 时间戳 + +### 概念 + +每个文件或目录有三个时间戳,分别记录不同的时间信息,可以通过 `ls -l` 或 `stat` 命令查看 + +### 分类 + +- **访问时间(atime)**:最后一次读取文件内容的时间。 +- **修改时间(mtime)**:最后一次修改文件内容的时间。 +- **状态改变时间(ctime)**:最后一次改变文件元数据(如权限或所有权)的时间。 diff --git "a/44 \351\231\206\346\200\235\345\251\267/2024.05.25-\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204\345\217\212\344\275\234\344\270\232.md" "b/44 \351\231\206\346\200\235\345\251\267/2024.05.25-\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204\345\217\212\344\275\234\344\270\232.md" index 7c605ee..a404c72 100644 --- "a/44 \351\231\206\346\200\235\345\251\267/2024.05.25-\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204\345\217\212\344\275\234\344\270\232.md" +++ "b/44 \351\231\206\346\200\235\345\251\267/2024.05.25-\347\233\270\345\257\271\350\267\257\345\276\204\345\222\214\347\273\235\345\257\271\350\267\257\345\276\204\345\217\212\344\275\234\344\270\232.md" @@ -1,3 +1,38 @@ +# 知识 + +## 概念 + +### 相对路径 + +#### 定义 + +- 相对于当前工作目录的路径,用于在当前目录的基础上指向文件或目录。 +- **相对路径**从当前工作目录出发,适合在命令行交互和项目内部文件操作时使用 + +#### 特点 + +- 不以 `/` 开头 +- 依赖于当前工作目录 + +#### 特殊符号 + +- `.` 表示当前目录 ./ +- `..` 表示上一级目录../ + +### 绝对路径 + +#### 定义 + +- 从根目录 `/` 开始的完整路径,用于唯一确定文件或目录的位置。 +- **绝对路径**始终从根目录开始,适合在需要唯一标识文件或目录位置时使用 + +#### 特点 + +- 以 `/` 开头 +- 与当前工作目录无关 + +# 作业 + ## 第一次全部使用绝对路径 1. 在家目录下建立文件exam.c,将文件exam.c拷贝到/tmp这个目录下,并改名为 shiyan.c diff --git "a/44 \351\231\206\346\200\235\345\251\267/2024.05.28-\346\237\245\346\211\276\346\226\207\344\273\266\345\222\214\347\233\256\345\275\225\345\217\212\344\275\234\344\270\232.md" "b/44 \351\231\206\346\200\235\345\251\267/2024.05.28-\346\237\245\346\211\276\346\226\207\344\273\266\345\222\214\347\233\256\345\275\225\345\217\212\344\275\234\344\270\232.md" index d715eb3..ff63f6b 100644 --- "a/44 \351\231\206\346\200\235\345\251\267/2024.05.28-\346\237\245\346\211\276\346\226\207\344\273\266\345\222\214\347\233\256\345\275\225\345\217\212\344\275\234\344\270\232.md" +++ "b/44 \351\231\206\346\200\235\345\251\267/2024.05.28-\346\237\245\346\211\276\346\226\207\344\273\266\345\222\214\347\233\256\345\275\225\345\217\212\344\275\234\344\270\232.md" @@ -31,21 +31,27 @@ find ./ -type f -not -name"*" -exec grep -n "error" {} +; ### `grep` 命令 +#### 概念 + `grep` 命令用于在文件内容中搜索匹配的字符串。虽然它通常用于搜索文件内容,但也可以结合其他命令一起使用来查找文件。 -| | 在文件中搜索字符串 `grep "pattern" filename` | -| --------------- | ----------------------------------------------------- | -| -r 递归 | 递归地在目录中搜索字符串 `grep -r "pattern" /path` | -| -i 忽略大小写 | 忽略大小写查找 `grep -i "error" /var/log/syslog` | -| -v | 显示不包含关键字的行 `grep -v "success" output.txt` | -| | | -| | | -| | | -| | | -| | | -| | | +#### 选项 +| 选项 | 作用 | +| --------------- | -------------------------------------------------------- | +| | 在文件中搜索字符串——`grep "pattern" filename` | +| -r 递归 | 递归地在目录中搜索字符串——`grep -r "pattern" /path` | +| -i 忽略大小写 | 忽略大小写查找——`grep -i "error" /var/log/syslog` | +| -v | 显示不包含关键字的行——`grep -v "success" output.txt` | +| -l | 显示包含关键字的文件名——`grep -l "TODO" *.py` | +| -c | 计数匹配的行数——`grep -c "ERROR" error.log` | +| -n | 显示匹配行的行号——`grep -n "def" script.py` | +| -o | 仅显示匹配部分——grep -o "pattern" file.txt | +| -A | 显示匹配行及后面 2 行——`grep -A 2 "START" data.txt` | +| -B | 显示匹配行及前面 2 行——`grep -B 2 "END" data.txt` | +| -C | 显示匹配行及前后 2 行——`grep -C 2 "marker" document.txt` | +#### 用法 ```bash grep "pattern" filename # 在文件中搜索字符串 @@ -115,9 +121,11 @@ whereis ls # 查找 ls 命令的可执行文件、源代码文件和手册页 ### `type` 命令 +#### 概念 + `type` 命令显示命令的类型,例如是否是内置命令、别名或可执行文件。 -##### 用法 +#### 用法 ```bash type ls # 显示 ls 命令的类型 @@ -128,7 +136,7 @@ type cd `stat` 命令用于显示文件或文件系统的详细信息,包括大小、权限、修改时间等。 -##### 用法 +#### 用法 ```bash stat filename # 显示文件的详细信息 diff --git "a/44 \351\231\206\346\200\235\345\251\267/2024.05.29-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206\345\217\212\344\275\234\344\270\232.md" "b/44 \351\231\206\346\200\235\345\251\267/2024.05.29-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206\345\217\212\344\275\234\344\270\232.md" index 6474a34..e23166e 100644 --- "a/44 \351\231\206\346\200\235\345\251\267/2024.05.29-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206\345\217\212\344\275\234\344\270\232.md" +++ "b/44 \351\231\206\346\200\235\345\251\267/2024.05.29-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206\345\217\212\344\275\234\344\270\232.md" @@ -1,25 +1,27 @@ -## 笔记 - -### 查看文件内容 - -| `cat` | 显示文件内容。 | -| ------ | -------------------------------------------------- | -| `tac` | 与`cat`相反,从文件尾部开始显示内容。 | -| | | -| `more` | 分页显示文件内容。 | -| `less` | 与`more`类似,但提供了更多的导航和搜索功能。 | -| | | -| `head` | 显示文件开头的内容(默认10行)。 | -| `tail` | 显示文件结尾的内容(默认10行)。 | -| | | -| `nl` | 显示文件内容,并添加行号。 | -| `od` | 以八进制、十进制、十六进制或其他格式转储文件内容。 | + + +# 笔记 + +## 查看文件内容 + +| `cat` | 显示文件内容 | +| ------ | ------------------------------------------------ | +| `tac` | 与`cat`相反,从文件尾部开始显示内容 | +| | | +| `more` | 分页显示文件内容 | +| `less` | 与`more`类似,但提供了更多的导航和搜索功能 | +| | | +| `head` | 显示文件开头的内容(默认10行) | +| `tail` | 显示文件结尾的内容(默认10行) | +| | | +| `nl` | 显示文件内容,并添加行号 | +| `od` | 以八进制、十进制、十六进制或其他格式转储文件内容 | ————————————————————————————————————————————————————— -#### `cat` +### `cat` -语法用法 +#### 语法用法 ```bash cat [选项] 文件 ... @@ -31,16 +33,18 @@ cat [选项] 文件 ... - 使用`-n`选项显示行号:`cat -n file.txt` ``` -| | | +#### 选项 + +| 选项 | 作用 | | ---- | ------------------------------ | | -b | 显示行数(空行不编号) | | -n | 显示行数(空行也编号) | | -s | 显示行数(多个空行算一个编号) | | -E | 每行结束处显示$符号 | -#### `tac` +### `tac` -语法用法 +#### 语法用法 ```bash tac 文件 ... @@ -51,7 +55,9 @@ tac 文件 ... - 从尾部开始,显示多个文件内容:`tac file1.txt file2.txt` ``` -| | | +#### 选项 + +| 选项 | 作用 | | ---- | ------------------------------ | | -b | 在行前添加分隔标志 | | -r | 将分隔标志视作正则表达式来解析 | @@ -59,9 +65,9 @@ tac 文件 ... ————————————————————————————————————————————————————— -#### `more` +### `more` -语法用法 +#### 语法用法 ```bash more [选项] 文件 @@ -74,9 +80,9 @@ more [选项] 文件 常用于按页查看大文件,但会先一次性加载整个大文件,导致加载变慢 ``` -#### `less` +### `less` -语法用法 +#### 语法用法 ```bash 当你要查看一个大文件时,通常用less命令一页一页加载 @@ -89,6 +95,8 @@ less [选项] 文件 - 使用上下键、Page Up/Page Down键进行滚动,`/`搜索,`n`下一个匹配,`N`上一个匹配,`q`退出。 ``` +#### 选项 + | 无选项 | 直接使用 `less 文件名` 来查看文件内容。 | | ---------------------------------------------------- | ---------------------------------------- | | **-N 或 --line-numbers** | 显示行号。 | @@ -99,9 +107,9 @@ less [选项] 文件 ————————————————————————————————————————————————————— -#### `head` +### `head` -语法用法 +#### 语法用法 ```bash 当你想要快速查看文件的前几行内容而不必打开整个文件时,可以使用 `head` 命令。 @@ -117,9 +125,9 @@ head [选项] 文件 ... `head -q file1.txt file2.txt` ``` -#### `tail` +### `tail` -语法用法 +#### 语法用法 ```bash tail 用于查看文件的末尾内容 @@ -134,7 +142,9 @@ tail [选项] 文件... - 实时查看文件增长(如日志文件):`tail -f logfile.txt` ``` -| 使用选项 | | +#### 选项 + +| 选项 | 用法 | | ------------- | ------------------------------------------------------------ | | **-n [行数]** | 显示文件的最后指定行数。如果不指定行数,则默认为显示最后10行。 | | | 示例:`tail -n 20 logfile.txt` 显示`logfile.txt`文件的最后20行。 | @@ -145,9 +155,9 @@ tail [选项] 文件... ————————————————————————————————————————————————————— -#### `nl` +### `nl` -语法用法 +#### 语法用法 ```bash nl [选项] 文件... @@ -158,9 +168,9 @@ nl [选项] 文件... - 使用`-s`选项指定分隔符:`nl -s: file.txt`(使用冒号作为行号分隔符) ``` -#### `od` +### `od` -语法用法 +#### 语法用法 ```bash od [OPTIONS] [FILE]... @@ -178,9 +188,44 @@ od -An -t x1 example.txt (注意:`-An`选项用于不显示地址,`-t`选项用于指定输出格式) ``` -## 作业 +## 编辑文件内容 + +- `vi`/`vim`:全屏文本编辑器,支持多种模式和强大的编辑功能。 +- `nano`:简单的命令行文本编辑器,易于初学者使用。 +- `emacs`:功能强大的文本编辑器,有图形界面和命令行版本。 +- `sed`:流编辑器,用于对输入流(或文件)进行基本的文本转换。 +- `awk`:用于模式扫描和文本/数据提取的编程语言。 + +## 文件内容排序和去重 + +- `sort`:对文本文件进行排序。 +- `uniq`:去除文本文件中的重复行。 +- `comm`:比较两个已排序的文件,并显示它们的公共行和独有行。 + +## 文件内容合并和拆分 + +- `paste`:合并文件的行。 +- `join`:基于某个字段合并两个文件的行。 +- `cut`:从每行中删除部分文本。 +- `split`:将大文件拆分成多个小文件。 + +## 文件内容比较 + +- `diff`:比较两个文件之间的差异。 +- `colordiff`:`diff`的彩色版本,使差异更容易识别。 +- `sdiff`:并排显示两个文件的差异。 + +## 其他内容操作 + +- `fold`:将文件内容折叠成指定宽度的行。 +- `fmt`:简化文本格式。 +- `tr`:转换或删除文件中的字符。 +- `col`:过滤用于终端的反向换行字符。 +- `expand`/`unexpand`:转换空格和制表符。 + +# 作业 -**以下所有操作都在家目录执行:** +## **以下所有操作都在家目录执行:** ### `cat` 命令操作题 diff --git "a/44 \351\231\206\346\200\235\345\251\267/2024.05.31-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206\345\217\212\344\275\234\344\270\232.md" "b/44 \351\231\206\346\200\235\345\251\267/2024.05.31-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206\345\217\212\344\275\234\344\270\232.md" index 0e16cc5..a7df4ef 100644 --- "a/44 \351\231\206\346\200\235\345\251\267/2024.05.31-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206\345\217\212\344\275\234\344\270\232.md" +++ "b/44 \351\231\206\346\200\235\345\251\267/2024.05.31-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206\345\217\212\344\275\234\344\270\232.md" @@ -2,6 +2,10 @@ ## sed +### 概念 + +`sed`(stream editor)是一个用于处理和转换文本流的强大工具。它在脚本和命令行中都非常有用,可以执行插入、删除、查找、替换和数据过滤等操作 + ### 语法 ```bash @@ -10,7 +14,7 @@ sed [选项] '命令' 文件 ### 选项、命令 -| 选项 | | +| 选项 | 作用 | | ---- | ----------------------------------- | | `-e` | 直接在命令行模式中执行多个`sed`命令 | | `-f` | 从指定的文件中读取`sed`命令 | diff --git "a/44 \351\231\206\346\200\235\345\251\267/2024.06.01-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206-awk.md" "b/44 \351\231\206\346\200\235\345\251\267/2024.06.01-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206-awk.md" index e26c725..1ed1991 100644 --- "a/44 \351\231\206\346\200\235\345\251\267/2024.06.01-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206-awk.md" +++ "b/44 \351\231\206\346\200\235\345\251\267/2024.06.01-\346\226\207\344\273\266\345\206\205\345\256\271\347\232\204\347\256\241\347\220\206-awk.md" @@ -8,6 +8,10 @@ awk、grep、sed是linux操作文本的三大利器,合称**文本三剑客** +- **grep**:主要用于查找匹配特定模式的行。强大之处在正则匹配 +- **sed**:主要用于对文本进行替换、删除、插入等编辑操作。 +- **awk**:功能强大的文本处理语言,适用于复杂的数据处理和报告生成。强于对结构化数据的处理 + [Linux awk 命令 | 教程 (runoob.com)](https://www.runoob.com/linux/linux-comm-awk.html) ### 基本语法 @@ -27,7 +31,7 @@ awk [选项] '脚本' 文件 `语法块的构成` 语句块语法:由模式 (pattern) 和动作 (action) 构成。(当模式匹配上时,执行{}中的对应动作) awk 'pattern { action }' input-file - # 模式 (pattern): 可以是正则表达式、关系表达式、特定条件等。 + # 模式 (pattern): 可以是正则表达式、关系表达式、特定条件等。(1)如果没有指定模式,则对每一行都执行动作(2)指定模式后,只有匹配模式的行,才执行动作,即满足条件才执行 # 动作 (action): 一组语句,描述在匹配模式的行上执行的操作,如果省略,则默认动作是打印整行。 @@ -41,11 +45,17 @@ awk ' ### 常用模式 1. 正则表达式: - - `/regexp/`:匹配包含正则表达式 `regexp` 的行。 - - 例如:`/Tom/` 匹配包含 "Tom" 的行。 + - `/regexp/`:匹配包含正则表达式 `regexp` 的行。(例如:`/Tom/` 匹配包含 "Tom" 的行) + - $2 ~ /pattern/ :匹配第2列包含关键字pattern的行 + - $2 !~ /pattern/:匹配第2列不包含关键字pattern的行 2. 比较表达式: - 使用字段和运算符(如 `<`, `>`, `==`, `!=`, `<=`, `>=`)进行比较。 - - 例如:`$3 > 80` 匹配第三个字段大于80的行。 + - `==`(等于),例$2 == "张三" 匹配第二列等于张三的行 + - `!=`(不等于) + - `<`(小于) + - `<=`(小于等于) + - `>`(大于),例如:`$3 > 80` 匹配第三个字段大于80的行 + - `>=`(大于等于) 3. 范围模式: - `pattern1, pattern2`:匹配从满足 `pattern1` 的行开始,到满足 `pattern2` 的行(包括该行)结束的所有行。 - `pattern`:是用于匹配输入数据的模式。如果省略,则 `awk` 将对所有行进行操作。 @@ -57,22 +67,59 @@ awk ' 5. 空模式: - 如果不提供模式,则默认对所有输入行执行动作。这通常用于简单的打印或处理每一行。 6. 逻辑表达式: - - 使用逻辑运算符(如 `&&`(和)、`||`(或)、`!`(非))组合多个模式。 + - 使用逻辑运算符 + - `&&`(和,逻辑与and) + - `||`(逻辑或or) + - `!`(逻辑非not)组合多个模式 - 例如:`$3 > 80 && $2 == "math"` 匹配第三个字段大于80且第二个字段为 "math" 的行。 7. 内置变量: - `awk` 有一些内置变量,如 `NR`(当前记录号)、`NF`(当前字段数)、`FS`(字段分隔符)等。这些变量也可以用于模式。 - 例如:`NR == 1` 匹配第一行。 +8. 三元运算符 + - 条件运算符 `? :` + - grade = ($2 >= 60 ? "及格" : "不及格") ### 常用动作 1. `print`:打印匹配的行或指定的字段。 + 2. `printf`:格式化输出。注意这个不换行,可以使用格式化字符串,如 `%s` 表示字符串,`%d` 表示数字。 + + - 语法: + + ```bash + printf (format, expression1, expression2, ...) + # format 是一个包含格式说明符的字符串。 + # expression1, expression2, ... 是要格式化并插入到 format 字符串中的表达式。 + ``` + + - 常用的格式说明符 + + - `%s`:字符串 String + - `%d`:有符号十进制整数 + - `%f`:浮点数 %.2f + - 带有宽度和对齐的写法: + - `%5s`:字段宽度为 5 的字符串,右对齐 + - `%-5s`:字段宽度为 5 的字符串,左对齐 + - `%10d`:字段宽度为 10 的有符号十进制整数,右对齐 + - `%-10d`:字段宽度为 10 的有符号十进制整数,左对齐 + - `%8.2f`:字段总宽度为 8,其中小数点后有 2 位的浮点数 + 3. `if-else`:条件判断。 + 4. `for`、`while`:循环处理。 + 5. `getline`:从文件中处理一行。 + 6. `next`:跳过当前行。 + 7. `exit`:结束awk命令。 +8. `{}`:包含一个或多个动作的块。例如,`{ print $1; print $2 }`。 + + - 用;号分隔多个动作语句 + - 如果每个语句在单独的行上,;号可以省略 + **另外,`awk` 中还有一些内置变量:** - `NF`(当前行的字段数量) @@ -95,3 +142,14 @@ awk ' +## 工作中的使用场景 + +### 1. 数据提取与处理 + +### 2. 数据筛选与过滤 + +### 3. 数据格式转换 + +### 4. 生成报告 + +### 5. 系统管理与维护 diff --git "a/44 \351\231\206\346\200\235\345\251\267/2024.06.05-vim\347\274\226\350\276\221\345\231\250\347\232\204\344\275\277\347\224\250\345\217\212\344\275\234\344\270\232.md" "b/44 \351\231\206\346\200\235\345\251\267/2024.06.05-vim\347\274\226\350\276\221\345\231\250\347\232\204\344\275\277\347\224\250\345\217\212\344\275\234\344\270\232.md" index 32d590e..c23c27b 100644 --- "a/44 \351\231\206\346\200\235\345\251\267/2024.06.05-vim\347\274\226\350\276\221\345\231\250\347\232\204\344\275\277\347\224\250\345\217\212\344\275\234\344\270\232.md" +++ "b/44 \351\231\206\346\200\235\345\251\267/2024.06.05-vim\347\274\226\350\276\221\345\231\250\347\232\204\344\275\277\347\224\250\345\217\212\344\275\234\344\270\232.md" @@ -1,3 +1,57 @@ +# vim笔记 + +## 光标移动 + +### 单位级 + +| | | +| ---- | ---------------- | +| h | 向左移动一个单位 | +| j | 向下移动一个单位 | +| k | 向上移动一个单位 | +| l | 向右衔动一个单位 | + +### 单词级 + +| | | +| ---- | ---------------------- | +| w | 向右移动到下一单词开头 | +| e | 向右移动到下一单词结尾 | +| b | 向左移动到下一单词开头 | + +### 块级 + +| | | +| ---- | -------------------- | +| gg | 移动光标到文档第一行 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | + + + +## Visual模式 + +## vim内打开文件 + +## 内容查找 + +## 文档修改与保存 + + + +# 作业 + 1. vi 编辑器有几种模式? 模式: diff --git "a/44 \351\231\206\346\200\235\345\251\267/2024.06.18-\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/44 \351\231\206\346\200\235\345\251\267/2024.06.18-\347\216\257\345\242\203\345\217\230\351\207\217.md" new file mode 100644 index 0000000..799c3d5 --- /dev/null +++ "b/44 \351\231\206\346\200\235\345\251\267/2024.06.18-\347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -0,0 +1,394 @@ +# 笔记 + +## 一、概念 + +**环境变量**是操作系统中用来存储和控制系统行为的动态值 + +## 二、类型和作用 + +### 1、用户级别 + +- 存储在用户家目录的个人配置文件中,例如 `~/.bashrc`、`~/.profile`。 +- 用于定义**用户个性化**的Shell设置,如别名、路径等。 + +### 2、系统级别 + +- 存储在系统范围的配置文件中,如 `/etc/environment`、`/etc/profile` 。 +- 为**所有用户和系统服务**提供全局的环境设置。java_home + +### 分类 + +#### 按生命周期分 + +- 永久环境变量 写在指定类型的配置文件,永不失效 ~/.bashrc /etc/profile.d/xxx.sh +- 临时环境变量 临时使用export 命令设置的环境变量 退出终端即失效 + +#### 按作用域分 + +* 系统级环境变量 对所有用户生效 /etc/profile.d/xxx.sh +* 用户级环境变量 只对当前用户生效 ~/.bashrc + +## 三、环境变量的加载顺序和文件 + +- **系统启动加载**:/etc/environment +- **登录Shell加载顺序**: + - 首先加载 `/etc/profile`,然后根据用户登录方式加载 `~/.profile`(存在性依次加载) + - 非登录shell: su 切换用户 等 source +- **交互式Shell加载顺序**: + - 加载 `~/.bashrc` 或类似文件,用于设置用户个性化的Shell环境。 + - 不同的shell加载不同的文件,bash才加载.bashrc,zsh加载.zshrc + - 交互式:提供命令行窗口,非交互式:直接写在脚本里 +- **总结来说** + - 配置文件的理论加载顺序通常是 `/etc/environment` > `/etc/profile` > `~/.profile` > `~/.bashrc` + +## 四、设置环境变量的方法 + +设置变量的位置:命令行(临时),脚本文件(永久) + +### 1、临时 + +- 临时变量(局部) + +- 临时环境变量(全部) + +- 可以使用 `export` 命令来临时设置一个环境变量 + + ```bash + export MY_VAR="value" # export 变量名=值 环境变量是全局的,整个环境有效 + MY_VAR="value" # 少了export 就是临时变量,不是全局的 + `这种设置只在当前Shell会话中有效,关闭Shell会话后会失效` + ``` + +### 2、永久 + +- 用户级别 + + - 编辑用户的 `~/.bashrc` 或 `~/.profile` 文件 + + ```bash + export MY_VAR="value" + `保存文件后,新的设置会在下次登录时生效` + ``` + +- 系统级别 + + - 编辑 `/etc/environment` 或 /etc/profile文件 + + ```bash + MY_VAR="value" + `这里不需要使用 `export` 命令。保存文件后,变量会在系统启动时生效` + ``` + +### 3、环境变量的设置 + +(1)设置路径变量(PATH) + +```bash +# 在 ~/.bashrc 中添加 +export PATH=$PATH:/path/to/your/scripts +``` + +(2)定义Java环境变量(JAVA_HOME) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 +export PATH=$JAVA_HOME/bin:$PATH +``` + +(3)设置代理服务器(HTTP_PROXY、HTTPS_PROXY) + +```bash +# 在 ~/.bashrc 中添加 +export HTTP_PROXY=http://proxy.example.com:8080 +export HTTPS_PROXY=http://proxy.example.com:8080 +``` + +(4)配置编辑器(EDITOR) + +```bash +# 在 ~/.bashrc 中添加 +export EDITOR=/usr/bin/vim +``` + +(5)设置语言和地区(LANG、LC_系列变量) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +``` + +(6)自定义命令别名(alias) + +```bash +# 在 ~/.bashrc 中添加 +alias ll='ls -alF' +alias grep='grep --color=auto' +``` + +(7)设置临时环境变量 + +```bash +# 临时设置变量 +export MY_VAR="value" +``` + +## 五、常用环境变量 + +### 系统级 + +* `PATH` 可执行文件的搜索路径 +* `LANG` 定义系统的语言环境和字符集, export LANG=zh_CN.utf8,编辑文件不乱码 +* `LANGUAGE` 用于设置消息语言的优先级 ,提示语言为中文 +* `EDITOR` 默认文本编辑器 editor + +### 用户级 + +* **`HOME`** :当前用户的主目录 +* **`USER`**:当前用户名 +* **`UID`**:当前用户的用户ID。 +* **`SHELL`**:当前用户的默认Shell + +## 六、临时变量与环境变量 + +定义一个变量时,在变量名前加了`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 会话和所有子进程中都有效。 + +# 作业 + +## 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + + ```bash + `printenv` + lsting@lst:~$ printenv + SHELL=/bin/bash + PWD=/home/lsting + LOGNAME=lsting + XDG_SESSION_TYPE=tty + MOTD_SHOWN=pam + HOME=/home/lsting + LANG=en_US.UTF-8 + SSH_CONNECTION=183.251.164.141 35193 172.29.194.124 22 + XDG_SESSION_CLASS=user + TERM=xterm + USER=lsting + SHLVL=1 + XDG_SESSION_ID=10821 + XDG_RUNTIME_DIR=/run/user/1000 + SSH_CLIENT=183.251.164.141 35193 22 + LC_ALL=C.utf8 + PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus + SSH_TTY=/dev/pts/0 + _=/usr/bin/printenv + + `env` + lsting@lst:~$ env + SHELL=/bin/bash + PWD=/home/lsting + LOGNAME=lsting + XDG_SESSION_TYPE=tty + MOTD_SHOWN=pam + HOME=/home/lsting + LANG=en_US.UTF-8 + SSH_CONNECTION=183.251.164.141 35193 172.29.194.124 22 + XDG_SESSION_CLASS=user + TERM=xterm + USER=lsting + SHLVL=1 + XDG_SESSION_ID=10821 + XDG_RUNTIME_DIR=/run/user/1000 + SSH_CLIENT=183.251.164.141 35193 22 + LC_ALL=C.utf8 + PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus + SSH_TTY=/dev/pts/0 + _=/usr/bin/env + ``` + +## 练习题 2: 显示`HOME`环境变量的值 + +* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。 + + ```bash + lsting@lst:~$ echo $HOME + /home/lsting + ``` + +## 练习题 3: 临时设置一个新的环境变量 + +* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 + + ```bash + lsting@lst:~$ export MY_AGE=18 + ``` + +## 练习题 4: 显示新设置的环境变量 + +* 使用`echo`命令来显示`MY_AGE`的值。 + + +```bash +lsting@lst:~$ echo $MY_AGE +18 +``` + +## 练习题 5: 在新的shell会话中检查环境变量 + +* 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么? + + ```bash + lusi@lst:~$ echo $MY_AGE + + `原因是环境变量 MY_AGE 只在设置它的那个终端会话中有效。如果想要在新的终端窗口或标签页中也能使用这个环境变量,需要将其永久性地添加到shell配置文件中` + ``` + +## 练习题 6: 修改`PATH`环境变量 + +* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 + + +```bash +`在当前终端会话中添加` +lsting@lst:~$ export PATH=$PATH:$HOME +`永久性添加` +lsting@lst:~$ vim ~/.bashrc + `在文件的末尾添加以下行: + `export PATH=$PATH:$HOME + +lsting@lst:~$ source ~/.bashrc +lsting@lst:~$ echo $PATH +/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/lsting:/home/lsting +``` + +将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 + +```bash +`在当前终端会话中添加` +lusi@lst:~$ export PATH=/tmp:$PATH +lusi@lst:~$ echo $PATH +/tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games +`永久性添加` +lsting@lst:~$ vim .bashrc + ` 注释:export PATH=$PATH:$HOME + 添加:export PATH=/tmp:$PATH + +lsting@lst:~$ source ~/.bashrc +lsting@lst:~$ echo $PATH +/tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/lsting:/home/lsting +``` + +## 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + + ```bash + lsting@lst:~$ export PATH=/tmp:$PATH + lsting@lst:~$ echo $PATH + /tmp:/tmp:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/lsting:/home/lsting + ``` + +## 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + + +```bash +lsting@lst:~$ vim .bashrc +``` + +如何让`MY_NAME`生效,并验证 + +```bash +lsting@lst:~$ source ~/.bashrc +lsting@lst:~$ echo $MY_NAME +奥德彪 +``` + +## 练习题 9: 清理 + +* 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。 + + ```bash + `MY_AGE` + lsting@lst:~$ unset MY_AGE + lsting@lst:~$ echo $MY_AGE + + `PATH` + lsting@lst:~$ export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + lsting@lst:~$ echo $PATH + /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + ``` + +## 练习题 10: 修改默认器 + +* 使用`EDITOR`变量,修改你默认的编辑器为nano。 + + ```bash + lsting@lst:~$ vim .bashrc + `添加:export EDITOR=nano` + lsting@lst:~$ source .bashrc + ``` + +## 练习题 11: 修改语言 + +* 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。 + +```bash +lsting@lst:~$ vim .bashrc + `添加:export LANG=zh_CN.UTF-8` +lsting@lst:~$ source .bashrc +lsting@lst:~$ echo $LANG +zh_CN.UTF-8 +``` + +- 使用`LANGUAGE`变量,让你的命令提示为中文 + +```bash +lsting@lst:~$ vim .bashrc + `添加:export LANGUAGE=zh_CN.UTF-8` +lsting@lst:~$ source .bashrc +lsting@lst:~$ echo $LANGUAGE +zh_CN.UTF-8 +``` + -- Gitee