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 8bc5c3955ae903c044685c66876bff627c931cd0..e2d52d422b6fbc8d92672436a96970299b402594 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 7c605eec65bb237db022657e9d54d63a45701edc..a404c726b0cf8263e06c763431ea7f07617f95d7 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 d715eb32fb37ae5295aae7bc7fe4a30cd9151434..ff63f6b6129c70d761db073967ea3e4bef9a7bec 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 6474a345abeaee0d30e02a58837862f8c9279e8d..e23166eb9c3b2df79a5fc6e4b939d7f589b5af66 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 0e16cc5fb69cf9b5ffa902d63846ac1338b9d7a9..a7df4ef924c9ec8366a56e549e90166e3a36dbdb 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 e26c725a3f6337f7204671cb845cdb499019e50b..1ed1991efc352647b4ce46506fa60af5ed268ef1 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 32d590e9f09dc32db60a8012bd98a29d22dfb147..c23c27b414638b3403226885ec5c02f21fa1d142 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 0000000000000000000000000000000000000000..799c3d5484ec8585a9b615c2f4b122de32cfafb4
--- /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
+```
+