RHCSA笔记2

一、数据流和重定向

(一)数据流

标准输入(standard input,简称 stdin ):默认情况下,标准输入指从键盘获取的输入

标准输出(standard output,简称 stdout ):默认情况下,命令执行所回传正确的信息会输出到屏幕上

标准错误输出(standard error output,简称 stderr ):默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上

作用:默认情况下,正确或错误数据都会输出到屏幕,导致显示混乱。通过数据流重定向,可将标准输出、标准错误输出分别传送到其他文件或设备,实现数据分离。

代码:

标准输入(stdin) 0

标准输出(stdout) 1

标准错误输出(stderr) 2

(二)重定向操作符

1.概念

将命令的输入或输出数据流从默认设备,重定向到其他位置。不是独立命令,是命令中附加的特殊符号,用于改变命令的输入或输出对象。

2.符号分类

输出重定向操作符: >(覆盖写入)、>>(追加写入)

输入重定向操作符: <(从文件读取输入)、<<(自定义输入结束符)

3.用法

(1)>

命令1:>文件名 或 1>文件名

作用:将命令的正确输出以覆盖方式写入文件(文件不存在时则创建)

示例:

(把日期写入 date1.txt 里)

命令2:2>文件名

作用:将命令的错误信息以覆盖方式写入文件

示例:

(把 "目录不存在" 的错误信息写入 error.log 里)

(可以重定向到不同的位置)

命令3:2>/dev/null

作用:将错误信息写入 "黑洞设备" (丢弃错误输出,不显示也不保存),相当于回收站

命令4:&>文件名 或 >&文件名

作用:将正确输出 + 错误信息一起以覆盖方式写入文件

示例:

(2)>>

命令格式:>>文件名

作用:将命令的正确输出追加到文件内容末尾(不覆盖原有内容)

示例:

(把 HELLO! 加入到 date.txt 文件内容的末尾)

(3)<

命令格式:<文件名

作用:让命令从指定文件读取输入(而非键盘)

示例:

(统计 date.txt 文件内容行数)

(4)<<

命令格式:<<结束标识字符串

作用:手动输入多行内容,直到遇到 "结束标识" 为止(常用于脚本)

示例:

(输入 d 时停止写入)

4. echo 命令

命令格式:echo "字符串" 或 echo "$变量名"

作用:向终端输出字符串,或提取变量的值并输出

示例:

(若字符串或变量不需要解析特殊字符,如 $ ,可使用 ' ')

5. tee 命令

命令格式:tee 参数 文件名

作用:同时实现 "终端输出" 和 "文件写入" (相当于 "分流" ---命令结果既显示在屏幕,又保存到文件中)

参数:

-a(以追加模式写入文件,不覆盖原有文件内容)

-i(忽略中断信号,如忽略 ctrl c 继续输入)

示例:

6.管道符 |

命令格式:命令1 | 命令2 | 命令3 ......

作用:将前一个命令的输出,直接作为后一个命令的输入,实现 "命令串联执行" (相当于把多个命令 "管道" 式连接起来)

示例:

(先查看 test.txt 文件内容,再筛选含 a 的内容输出。more 等价于 cat)

(先查看所有进程,再输出总行数)

注意:管道符在某些场景下会降低效率,需谨慎使用,如计算字符串长度的两种方法对比时

方法1(无管道):

用 Shell 内置的 ${#变量名} 获取字符串长度,总耗时约21秒

方法2:

用 echo 输出字符串,再通过管道传给 awk 计算长度,总耗时约55秒

结论:管道符虽灵活,但会额外启动进程,在高频循环或性能敏感场景下,效率会显著低于 Shell 内置命令。因此这类场景需谨慎使用管道符,优先用内置操作。

二、vim文本编辑器

(一)作用

修改 Linux 系统配置:通过编辑配置文件来配置服务、调整系统参数;

跨 Unix 系统通用编辑工具:所有类 Unix 系统都自带,是不同环境下的 "通用文本编辑入口" ;

适配 Linux 工具的编辑接口:作为 crontab 、 visudo 等命令的默认编辑器,完成定时任务、权限配置等操作;

高效编写/编辑文本:vim 的语法高亮 + 快速编辑能力,提升代码、配置文件的编写效率。

(二)三种模式

作用:

命令模式(默认阅读模式):控制光标移动,做查看、删除、复制粘贴等操作(打开文件后默认进入)。

编辑模式(插入模式):对文本进行编辑输入。

末行模式:执行保存、退出、设置编辑环境等操作。

进入顺序:打开文件 → 进入命令模式(默认);

命令模式按 i → 进入编辑模式;编辑模式按 Esc → 返回命令模式;

命令模式按 : → 进入末行模式;末行模式按 Esc → 返回命令模式;

编辑模式和末行模式不能直接切换,必须通过命令模式中转。

(三)快捷键

1.命令模式

(1)光标跳转

|-------------|-------------|
| 功能 | 输入 |
| 光标按单个字符移动 | ↑、↓、←、→ |
| 光标按照单词向后跳转 | w |
| 光标按照单词向前跳转 | b |
| 光标跳转至行首 | ^ |
| 光标跳转至行尾 | $ |
| 文档首行第一个字符 | gg |
| 文档最后一行第一个字符 | G |
| 跳转到指定行 | 行号gg 或者 行号G |

(2)复制、粘贴、删除

|---------------------|------|
| 功能 | 输入 |
| 删除光标所在行 | dd |
| 删除从光标处开始的 n 行 | 数字dd |
| 删除光标前至行首字符 | d^ |
| 删除光标及之后的所有字符 | d$ |
| 复制光标所在行 | yy |
| 复制从光标处开始的n行 | 数字yy |
| 将缓冲区的内容粘贴到光标所在行的下一行 | p |
| 将缓冲区的内容粘贴到光标所在行的上一行 | P |
| 撤销操作 | u |

2.编辑模式

|--------------------|----|
| 功能 | 输入 |
| 在光标前插入 | i |
| 在光标所在行行首第一个非空字符前插入 | I |
| 在光标后插入 | a |
| 在光标所在行末尾插入 | A |
| 在光标所在行上一行插入 | O |
| 在光标所在行下一行插入 | o |
| 删除光标所在字符并进入插入模式 | s |
| 删除当前行并进入插入模式 | S |

3.末行模式

(1)查找关键字并替换

|---------------------------------------|--------------------|
| 功能 | 输入 |
| 从上而下查找字符串 "word"(可按 n 键定位到下一个匹配的的字符串) | /word |
| 将当前行中查找到的第一个字符 "old" 替换为 "new" | :s /old/new |
| 将当前行中查找到的所有字符 "old" 替换为 "new" | :s /old/new/g |
| 在行号 "n1,n2" 范围内替换所有的字符串 "old" 为 "new" | :n1,n2 s/old/new/g |
| 将整个文件内的字符串 "old" 替换为 "new" | :% s/old/new/g |

(2)保存退出

|----------------------------|--------------|
| 功能 | 输入 |
| 退出 vim 编辑器,未对文件做任何编辑操作才可退出 | :q |
| 不保存文档内容,强制退出 vim 编辑器 | :q! |
| 保存文件 | :w |
| 将文件另存为 /dir/file | :w /dir/file |
| 保存文件内容并退出 vim 编辑器 | :wq 或者 ZZ |
| 强制保存并退出 | :wq! |

(3)其他操作

|-----------------|--------------|
| 功能 | 输入 |
| 在当前文件中读入其他文件内容 | :r /dir/file |
| 查找含有"word"的行并删除 | :g/word/d |
| 显示行号 | :set nu |
| 关闭行号显示 | :set nonu |
| 删除n1-n2行内容 | :n1,n2 d |
| 复制n1-n2行到第n行后面 | :n1,n2 co n |

示例:

(使用vim编写c程序,实现编译执行)

(四)配置文件

可用命令 vim /etc/vimrc 查看:

(五)vim的异常处理

1.模拟异常

编辑一个新文件,并输入一些内容,正常保存退出:

再次打开文件,并按 ctrl+z 键,模拟异常退出。再次打开文件:

2.原因

异常退出导致交换文件残留:

在编辑 test 文件时,通过 Ctrl+Z (挂起进程而非正常退出)的方式异常中断 Vim 会话,Vim 会自动生成用于临时保存编辑内容的交换文件 .test.swp 。

交换文件与原文件状态不一致:

当再次尝试打开 test 文件时,Vim 检测到已存在的 .test.swp (记录了上一次未正常结束的编辑状态),且该交换文件对应的 Vim 进程(ID:8532)仍在运行,因此触发冲突提示。

3.处理流程

正常打开

点击R键,后回车

正常编辑,保存退出

删除隐藏的交换文件

三、文件内容显示

(一)浏览普通文件

1.cat 命令

(1)作用

查看文件内容,适合数据量较少的文件。

(2)格式

cat -参数 文件名

参数:

-n:显示所有行的行号(包括行号)

-b:仅为文件中的非空行增加行号(编号从1开始)

(3)示例

将显示结果重定向输出到另一个文件中:

合并文件:

2.tac 命令

(1)作用

倒叙(倒置)输出文件内容。

(2)格式

tac -参数 文件名

参数:

-b:默认分隔符是换行符,会把换行符显示在内容前面

-s:指定分隔符

-r:分隔符为正则表达式

(3)示例

3.more 命令

(1)作用

分页查看文件内容,适合内容较多的文件。

(2)格式

more 文件名

操作方式:

回车:逐行查看

空格:整页查看

q 键:退出查看

(3)示例

4.less 命令

(1)作用

与 more 命令一致,用于分页查看文件内容。

(2)格式

less 文件名

操作方式:通过上下键逐行浏览,按 q 键退出浏览

5.head 命令

(1)作用

查看文件的前 n 行内容。

(2)格式

head -数字 文件名(默认查看前10行)

(3)示例

6.tail 命令

(1)作用

查看文件的后 n 行内容。

(2)格式

tail -参数 文件名(默认查看后10行)

参数:

-数字 :指定查看的倒数行数

-f :动态刷新文件内容(常用于实时查看日志)

(3)示例

查看第六行:

监视日志:

7.file 命令

(1)作用

查看文件类型。

(2)格式

file -参数 文件名

文件类型:

ASCII text :ASCII文本字符文件

empty:空文件

block special :块设备文件

character special :字符设备文件

diretory:目录

8.stat 命令

(1)作用

显示文件属性信息

(2)格式

stat 文件名(一般通过该命令查看文件的大小、Inode、硬链接和软连接 )

(3)示例

(二)文件内容过滤显示

1.作用

在指定文件中查找并显示包含指定字符串的行,也可结合管道符( | )对其他命令的输出结果进行过滤。

2.格式

grep -参数 查找条件 文件名

3.参数

|----|-------------------------|
| 选项 | 说明 |
| -c | 仅显示找到的行数 |
| -i | 忽略大小写 |
| -n | 显示行号 |
| -v | 反向选择------仅列出没有"关键词"的行 |
| -A | -A 2 搜索时显示匹配到的那一行以及下2行 |
| -B | -B 2 搜索时显示匹配到的那一行以及上2行 |
| -C | -C 2 搜索时显示匹配到的那一行以及上下2行 |

4.示例

在 passwd 文件中检索包含 root 的行信息:

在 passwd 文件中检索不能登录的信息:

在 passwd 文件中检索可以登录的账户信息:

检索包含 "halt" 的行及下3行信息:

检索包含 "sshd" 的行及上5行信息:

检索包含 "ftp" 的行及上下2行:

检索不能登录的账户个数(相当于 grep -n "/sbin/nologin" /etc/passwd | wc -l):

检索包含大小写字母d的行信息:

5.使用特殊符号匹配

|-----------------------|---------------------|
| 匹配模式 | 说明 |
| grep h 文件名 | 查找文件里有字符 h 的行 |
| grep ^[q] 文件名 | 匹配以 q 开始的行 |
| grep ^[qf] 文件名 | 匹配以 q 或者 f 开头的行 |
| grep ^[ ^qf ] 文件名 | 不匹配以 q 或者 f 开头的行 |
| grep ^[0-9] 文件名 | 匹配以数字开头的行 |
| grep q 文件名 | 匹配以 q 结束的行 | | grep \^ | 过滤空白行 |
| grep -r h ./* | 明确搜索当前目录中的子目录有 h 的行 |
| grep -d s kip h ./* | 忽略当前目录下的子目录下的普通文件 |

(三)切割显示

1.作用

按列提取文本内容

2.格式

cut -d "分隔符" -f列数字 文件名

3.示例

/etc/passwd 文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的。使用 -f 参数来设置需要看的列数,还需使用 -d 参数来设置间隔符号 :

提取内核版本号:

提取IP地址:

提取mac地址:

(四)排序显示

1.作用

sort 对文本文件的行进行排序,默认按照 ASCII 码顺序排列。支持按数字、月份、随机等多种规则排序,并能处理重复行。

2.格式

sort -参数 文件名

3.参数

|----|---------|
| 选项 | 作用 |
| -f | 忽略大小写 |
| -b | 忽略缩进与空格 |
| -n | 以数值型排序 |
| -r | 反向排序 |
| -u | 去除重复行 |
| -t | 指定间隔符 |
| -k | 设置字段范围 |

4.示例

sort 命令执行后默认会按照字母顺序进行排序:

去重操作:

数字排序:

下面内容中各个字段之间用冒号进行间隔,如果想以第三个字段中的数字作为排序依据,那么就可以用 -t 参数指定间隔符,-k 参数指定第几列,-n 参数进行数字排序来搞定:

(五)去重显示

1.作用

uniq 命令用于去除文本中连续的重复行

2.格式

uniq -参数 文件名

3.参数

|----|-----------|
| 参数 | 作用 |
| -c | 统计每行出现的次数 |
| -d | 只显示重复的行 |
| -D | 显示所有重复的行 |
| -u | 只显示唯一的行 |

4.示例

对比下面文本内容进行操作,第一次 uniq 没成功是因为重复词语并不是连续的,经过 sort 排序后,就可以删除连续的重复行了:

带上参数:

(六)文件中字符替换显示

1.作用

tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出

2.格式

tr -参数 替换内容 新内容

3.参数

|----|----------------------------------------|
| 参数 | 作用 |
| -c | 反选设定字符,符合 "替换内容" 的部份不做处理,不符合的剩余部份才进行转换 |
| -d | 删除指令字符 |
| -s | 缩减连续重复的字符成指定的单个字符 |

4.示例

小写字母全部转换成大写字母:

提取 IP 地址:

相关推荐
好好学习天天向上~~1 小时前
9_Linux学习总结_进程状态_僵尸进程_孤儿进程
linux·运维·学习
北观止1 小时前
服务器登录脚本
运维·服务器
henry1010102 小时前
利用Python一键创建AWS EC2实例
linux·python·云计算·aws·ec2
春日见2 小时前
commit与fetch
linux·人工智能·算法·机器学习·自动驾驶
Linux运维技术栈2 小时前
禅道一键包:跨服务器迁移 + 迁移至LVM分区 实战运维笔记
运维·服务器·禅道
一匹电信狗2 小时前
【Linux我做主】从 fopen 到 open:Linux 文件 I/O 的本质与内核视角
linux·运维·服务器·c++·ubuntu·小程序·开源
WW、forever2 小时前
【服务器-R环境配置】导出配置文件并重建
运维·服务器·r语言
之歆2 小时前
Linux 启动流程、GRUB、init、SysV 服务与内核初步
linux·运维·服务器
2501_915921432 小时前
Fastlane 结合 AppUploader 来实现 CI 集成自动化上架
android·运维·ci/cd·小程序·uni-app·自动化·iphone