文章目录
引言
初学 Linux 常会陷入三个困境:不会查命令官方文档、不熟悉 vim 高效编辑、命令输出杂乱无法过滤归档。本文围绕帮助查询、Vim 编辑器、IO 重定向三大核心基础,结合实操案例带大家快速掌握必备技能。
Linux 中获取帮助
Man 手册
man 简介
man = manual(手册),Linux 自带官方完整帮助文档,所有命令、配置文件、系统接口都有说明。
Section(章节编号):不同数字代表不同类型的文档,同一个关键词(比如 passwd)可能在多个章节都有手册,含义完全不一样:
| SECTION | 内容类型 |
|---|---|
| 1 | **用户命令(**可执行命令和shell程序) |
| 2 | 系统调用(从用户空间调用的内核例程) |
| 3 | 库函数(由程序库提供) |
| 4 | 特殊文件(如设备文件) |
| 5 | 文件格式(用于许多配置文件和结构) |
| 6 | 游戏(过去的有趣程序章节) |
| 7 | 惯例、标准和其他(协议、文件系统) |
| 8 | 系统管理和特权命令(维护任务) |
| 9 | Linux内核API(内核调用) |
存放路径:所有手册文件默认放在 /usr/share/man/,打开手册时底层调用 less 分页工具浏览。
man 命令
[yy@centos7 ~ 16:47:53]$ man --help
Usage: man [OPTION...] [章节] 手册页...
-C, --config-file=文件 使用该用户设置文件
-d, --debug 输出调试信息
-D, --default 将所有选项都重置为默认值
--warnings[=警告] 开启 groff 的警告
# passwd(1)描述passwd命令更改密码
[yy@centos7 ~ 17:03:38]$ man 1 passwd
# 单击 q 退出
# passwd(5)解释/etc/passwd文件格式
[yy@centos7 ~ 17:11:58]$ man 5 passwd
# 查看英文的帮助手册,指定LANG变量
[yy@centos7 ~ 17:12:12]$ LANG=en_US.utf8 man gedit
# 或者
[yy@centos7 ~ 17:12:48]$ LANG=en_US.utf8
[yy@centos7 ~ 17:13:03]$ man gedit
man手册页面交互操作指令(less程序)
| 命令 | 结果 |
|---|---|
| PageDown或者空格键 | 向前(向下)滚动一个屏幕 |
| PageUp | 向后(向上)滚动一个屏幕 |
| 向下箭头 | 向前(向下)滚动一行 |
| 向上箭头 | 向后(向上)滚动一行 |
| d | 向前(向下)滚动半个屏幕 |
| u | 向后(向上)滚动半个屏幕 |
| /string | 在man page中向前(向下)搜索string |
| n | 在man page中重复之前的向前(向下)搜索 |
| N | 在man page中重复之前的向后(向上)搜索 |
| g | 转到man page的第一行。 |
| G | 转到man page的最后一行。 |
| q | 退出man ,并返回到shell命令提示符 |
# 使用root用户更新man page库
[yy@centos7 ~ 17:16:09]$ su -l root
Password:
Last login: Thu Jul 16 13:46:02 CST 2026 on pts/0
[root@centos7 ~ 17:16:35]# mandb
正在删除 /usr/share/man 里的旧数据库条目...
mandb: 警告:/usr/share/man/man8/fsck.fat.8.manpage-fix.gz:忽略错误的文件名
正在处理 /usr/share/man 下的手册页...
正在为路径 /usr/share/man/man8 更新索引缓存。请等待...mandb: 警告:/usr/share/man/man8/fsck.fat.8.manpage-fix.gz:忽略错误的文件名
完成。
... ...
# 使用 -k 模糊搜索所有包含关键词的手册
[root@centos7 ~ 17:16:58]# 登出
[yy@centos7 ~ 17:17:07]$ man -k passwd
chgpasswd (8) - update group passwords in batch mode
chpasswd (8) - update passwords in batch mode
fgetpwent_r (3) - get passwd file entry reentrantly
getpwent_r (3) - get passwd file entry reentrantly
gpasswd (1) - administer /etc/group and /etc/gshadow
grub2-mkpasswd-pbkdf2 (1) - Generate a PBKDF2 password hash.
... ...
[yy@centos7 ~ 17:17:14]$ man -k ext4
debugfs (8) - ext2/ext3/ext4 file system debugger
dumpe2fs (8) - dump ext2/ext3/ext4 filesystem information
e2fsck (8) - check a Linux ext2/ext3/ext4 file system
e2image (8) - Save critical ext2/ext3/ext4 filesystem metadata to a file
... ...
[yy@centos7 ~ 17:17:42]$ man debugfs
补充:命令的来源
- 安装软件包之后获得
- shell 自带的工具
查看 shell 自带命令
# man 是用来查询外部独立程序的手册
# man 无法展示内置命令的参数、语法,信息残缺、不准确
[yy@centos7 ~ 17:20:34]$ man history
#history 是 bash 内置功能,不属于外部程序
# 使用 help command
[yy@centos7 ~ 17:21:34]$ help history
history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
Display or manipulate the history list.
Display the history list with line numbers, prefixing each modified
entry with a `*'. An argument of N lists only the last N entries.
... ...
**重要:**通用选项–help,也用于查看命令帮助。
/usr/share/doc
可以通过file:///usr/share/doc浏览。一些包还含拓展示例,配置文件模板,脚本,使用说明或用户指导手册。例如:/usr/share/doc/dhclient-*。
[yy@centos7 ~ 17:23:48]$ cat /usr/share/doc/dhclient-4.2.5/dhclient.conf.example
which 和 whereis 命令
# 查看vi命令代表什么
[yy@centos7 ~ 17:28:21]$ which vi
alias vi='vim'
/usr/bin/vim
# whereis 查看关键字对应的程序位置,帮助文档,源码
[yy@centos7 ~ 17:29:05]$ whereis man
man: /usr/bin/man /usr/share/man /usr/share/man/man1/man.1.gz /usr/share/man/man1p/man.1p.gz /usr/share/man/man7/man.7.gz
[yy@centos7 ~ 17:29:07]$ whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
练习
查找并查看以下 man 手册,并举例验证。
- 查看 man 命令使用方法。
[yy@centos7 ~ 17:29:14]$ man man
[yy@centos7 ~ 18:33:41]$ man --help
Usage: man [OPTION...] [SECTION] PAGE...
-C, --config-file=FILE use this user configuration file
-d, --debug emit debugging messages
-D, --default reset all options to their default values
--warnings[=WARNINGS] enable warnings from groff
- 查看 gedit 命令使用方法:如何使用gedit打开文件、打开文件的时候如何定位到特定行和列。
# 查看 gedit 手册
[yy@centos7 ~ 18:34:02]$ man gedit
# 普通打开文件,不存在则新建
[yy@centos7 ~ 18:35:02]$ gedit test.txt
# 打开文件,光标跳至第12行
[yy@centos7 ~ 18:35:34]$ gedit +12 test.txt
# 打开文件,光标跳至第8行第5列
[yy@centos7 ~ 18:36:04]$ # gedit +8:5 test.txt
- 查看 su 命令使用方法:不带参数作用和带
-作用。
[yy@centos7 ~ 18:38:48]$ man su
# 不带参数 su,切换root但环境不变
[yy@centos7 ~ 18:38:55]$ su
Password:
[root@centos7 yy 18:39:09]# exit
# su - 完整登录root
[yy@centos7 ~ 18:39:13]$ su -
Password:
Last login: Thu Jul 16 18:39:09 CST 2026 on pts/1
- 查找 调整内核(kernel)启动(boot)参数 手册。
[yy@centos7 ~ 18:41:06]$ man grub2-mkconfig
[yy@centos7 ~ 18:41:20]$ man grub2-editenv
[yy@centos7 ~ 18:41:35]$ man grubby
[yy@centos7 ~ 18:41:48]$ info grub
# 模糊搜索启动内核相关手册
[yy@centos7 ~ 18:41:54]$ man -k kernel boot
abrt-action-analyze-oops (1) - Calculate and save UUID and duplicate hash for a problem data di...
abrt-action-analyze-vmcore (1) - Extracts the oops message from the kernel core and install the...
abrt-action-save-kernel-data (1) - Creates uReport mandatory files for kernel oopses.
abrt-oops.conf (5) - Configuration file for ABRT's Kernel Oops extractor
... ...
- 查找 创建 archive 工具 手册,并使用对应工具创建archive文件和提取archive文件。(不允许使用 zip和unzip)。
[yy@centos7 ~ 18:44:23]$ man tar
# 无压缩普通tar包
tar -cvf file.tar test.txt /etc/hosts
# gzip压缩包 tar.gz
tar -zcvf file.tar.gz test.txt /etc/hosts
# bzip2高压缩包 tar.bz2
tar -jcvf file.tar.bz2 test.txt /etc/hosts
# 解压普通tar
tar -xvf file.tar
# 解压tar.gz
tar -zxvf file.tar.gz
# 解压tar.bz2
tar -jxvf file.tar.bz2
# 解压到指定目录 /tmp/out
tar -zxvf file.tar.gz -C /tmp/out
#查看归档内文件
tar -tvf file.tar.gz
vim 编辑器
vim 编辑器介绍
每一个系统管理员都有一个偏爱的文本编辑器。有的管理员偏爱gedit,有的偏爱nano,甚至有的偏爱emacs。即使已经有偏爱的编辑器,了解vim还是有必要的。因为vim可以安装在任何系统。
vim版本,Linux 系统中可以安装vim三个不同版本:
- vim-minimal:只提供vi和相关命令。
- vim-enhanced:提供vim命令,提供语法高亮,拼写检查等特性。
- vim-X11:提供gvim,图形界面下的vim。gvim包涵菜单栏。当用户不知道命令的时候,可以通过菜单操作。
# 安装 vim 工具
[root@centos7 ~ 18:49:06]# yum install vim
vim 模式

- command 模式:该模式下键盘中的字母有特殊含义。例如G,跳转到最后一行;gg,跳转到第一行。
- edit 模式:在
command模式下按i,进入该模式。在该模式可以输入内容。在该模式下按Esc返回command模式。 - extended command 模式:在
command模式下按:,进入该模式。在该模式下,可以保存文件(:w),退出编辑(:q),强制退出编辑(:q!),报错并退出(:wq)。 - visual edit 模式:在
command模式下按 v(单个字符选中)、V(整行选中)或者ctrl+v(按矩形选中),进入该模式。在该模式下,用于选中文件,随后可以复制或删除选中的内容。
[yy@centos7 ~ 18:49:46]$ cp /etc/profile ./profile.sh
[yy@centos7 ~ 18:50:07]$ vim ./profile.sh
命令行模式快捷键

定位文件内容:
w,向后1个word(光标在单词开头);e,向后1个word(光标在单词末尾)b,向前1个word^或0,行首$,行尾(,上一个句子头部;),下一个句子尾部。{,上一个自然段;},下一个自然段。gg,第一行;G,最后一行。
less 使用
g,第一行;G,最后一行。
进入插入模式:
- i ,当前位置插入。(insert)
- I,行首插入。
- a,当前位置追加。(append)
- A,行末追加。
- o,向下新开一个空白行。
- O,向上新开一个空白行。
复制:yy,复制1行,相当于y1y。以此类推 y2y y2w y2b。
粘贴:p 当前位置后粘贴,P 当前位置前粘贴
删除:
- x,删除当前单个字符。5x,删除当前字符和后续4个字符。
- X,删除前一单个字符。
- dw,删除1个word,以此类推 d5w d3b d2d d$。
- D,从当前删除到最后,相当于d$。
回退:
- u,撤销上一个操作。
- U,撤销整行修改。
- Ctrl+r,反向撤销,与u相反。
修改,相当于删除后插入:
- s,删除当前字符,并进入编辑模式。
- S,删除当前行,并进入编辑模式。
- c,代表替换动作,例如cw,删除1个word,并进入编辑模式。以此类推 c5w。
- C,从当前删除到最后,并进入编辑模式。
替换:
- r,替换单个字符后回退到命令行模式。
- R,替换模式,一直替换直到按
Ese返回命令行模式。
练习示例
示例1
1.使用 vim ./profile.sh打开文件。
2.根据任务要求,多次重复此文本输入循环:
- 使用方向键定位光标。
- 按i键进入插入模式。
- 输入文本
hello world。 - 按Esc键返回命令模式。
- 若有需要,使用
u撤销当前行中出错的编辑操作。 - 若有需要,按
ctrl+r键反向撤销当前行中出错的编辑操作。
3.根据任务要求,多次重复此文本删除循环:
- 使用方向键定位光标。
- 按
x键删除选定的文本。 - 若有需要,使用
u撤销当前行中出错的编辑操作。
4.若要保存或退出,可选择下列操作之一来写入或放弃文本编辑:
- 按
:w写入(保存)文件,并留在命令模式中进行更多编辑。 - 按
:wq写入文件并退出 Vim。 - 按
:q!退出 Vim,但放弃上次写入以来进行的所有更改。
示例2
1.使用vim ./profile.sh打开文件。
2.根据任务要求,多次重复此文本选择循环。
- 使用方向键将光标定位到第一个字符。
- 按
v键进入可视模式(选择对象)。 - 使用方向键将光标定位到最后一个字符。
- 按y键拖拉(复制)所选内容。
- 使用方向键将光标定位到插入位置。
- 按p键放置(粘贴)所选内容。
3.若要保存或退出,可选择下列操作之一来写入或放弃文本编辑。
- 按:w 写入(保存)文件,并留在命令模式中进行更多编辑。
- 按:wq 写入文件并退出 Vim。
- 按:q! 退出 Vim,但放弃上次写入以来进行的所有更改。
示例3
完成 DHCP 服务配置文件定制。
# 配置仓库
[root@centos7 ~]# curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@centos7 ~]# curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 安装dhcp软件
[root@centos7 ~ 13:46:02]# yum install -y dhcp
已加载插件:fastestmirror, langpacks
... ...
完毕!
# 准备配置文件
[yy@centos7 ~ 14:00:31]$ cp /usr/share/doc/dhcp-4*/dhcpd.conf.example ~/dhcpd.conf
[yy@centos7 ~ 14:00:55]$ cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example .
[yy@centos7 ~ 14:01:15]$ mv dhcpd.conf.example dhcpd.conf
[yy@centos7 ~ 14:01:19]$ vim dhcpd.conf
编辑 ~/dhcpd.conf 文件:
:set number showcmd,显示行号和操作命令gg,光标定位到第一行。d46d,删除当前行以及后面的45行。:11,28d,删除11到28行。/You,搜索字符串You,并定位到该字符位置。dG,删除当前位置行到最后。:%s/10.5.5/10.1.8/g,将所有行中10.5.5替换为10.1.8。
% 针对所有内容,s查找并替换,g替换查找到的所有内容。
/224,定位这个数字。cw,替换为0,然后esc。- 将
30换成130。 - 光标定位到
ns1,修改dns为223.5.5.5:C然后输入223.5.5.5;。 - 修改路由器为
10.1.8.2,使用 r 替换末尾1为2。 - 修改广播地址
10.1.8.31为10.1.8.255。 ZZ,保存退出。
vim 配置
两个位置:
- 全局:
/etc/vimrc,给所有用户设置一些默认值。 - 用户:
~/.vimrc,特定用户的个性化设置。
常见的设置命令:
[yy@centos7 ~ 18:50:32]$ vim ~/.vimrc
set number
set showcmd
set ai ts=2
set cursorcolumn
set cursorline
# 参数说明:
# 显示行号 set number
# 显示操作命令 set showcmd
# ai,自动缩进;ts,tabspace使用2个空格代替 set ai ts=2
# 列高亮对齐显示 set cursorcolumn
# 行高亮对齐显示 set cursorline
Linux 输入输出重定向
Linux 输入输出重定向介绍

上图显示了 Unix/Linux 系统中进程(PROCESS)的输入输出流(I/O Streams)模型,核心是 “标准流(Standard Streams)” 的概念,用于描述进程如何与外部(如键盘、屏幕、文件)进行数据交互。
标准流的核心组成
- stdin(标准输入,编号 0):
- 是进程接收输入数据的通道,默认连接到键盘,程序通过它读取用户输入(如
scanf、read等操作会从stdin获取数据)。 - 用法为仅读取(只能从该通道输入数据到进程)。
- stdout(标准输出,编号 1):
- 是进程输出正常结果的通道,默认连接到终端屏幕,程序的普通打印(如
printf、echo等)会输出到stdout。 - 用法为仅写入(进程只能向该通道输出数据)。
- stderr(标准错误,编号 2):
- 是进程输出错误信息的通道,默认也连接到终端屏幕,用于区分正常输出和错误提示(如程序崩溃、逻辑错误的提示信息)。
- 用法为仅写入(专门用于输出错误内容)。
- 3+ 号通道(其他文件,filename):
- 代表进程与自定义文件的交互通道(非标准流),没有默认连接,需要手动指定文件。
- 用法为读取和 / 或写入(可根据需求对文件进行读、写操作)。
| 编号 | 名称 | 默认设备 | 作用 |
|---|---|---|---|
| 0 | stdin 标准输入 | 键盘 | 程序读取数据(用户输入) |
| 1 | stdout 标准输出 | 终端屏幕 | 正常执行结果打印 |
| 2 | stderr 标准错误 | 终端屏幕 | 报错、警告信息打印 |
流程逻辑
- 输入:用户通过键盘向
stdin输入数据,进程从stdin读取这些输入。 - 输出:进程将正常结果写入
stdout,错误信息写入stderr,两者默认都显示在终端;同时,进程也可通过 3+ 号通道与其他文件进行数据的读写交互。
这种模型是 Unix/Linux 系统中 “一切皆文件” 思想的体现,让进程能以统一的方式处理不同来源 / 目标的数据,也为 重定向(Redirect) 等操作(如把 stdout 输出到文件、把文件内容作为 stdin 输入)提供了基础。
标准输出重定向到文件

# 查找 /etc 目录下 文件名是passwd的所有文件
[yy@centos7 ~ 18:52:48]$ find /etc -name 'passwd'
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
/etc/pam.d/passwd
find: ‘/etc/dhcp’: Permission denied
/etc/passwd
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
... ...
#1> 或者 >
# 将查找到的文件名清单 覆盖写入 passwd.list文件中
[yy@centos7 ~ 19:01:41]$ find /etc -name 'passwd' 1>passwd.list
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
... ...
[yy@centos7 ~ 19:02:53]$ find /etc -name 'passwd' >passwd.list
[yy@centos7 ~ 19:05:31]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
# 将 多个文件内容 合并 为1个
[yy@centos7 ~ 19:02:35]$ cat /etc/fstab /etc/hosts > allinone
# 将找到的文件名清单 追加 写入到passwd.list文件中
[yy@centos7 ~ 19:07:55]$ find /etc -name 'passwd' 1>>passwd.list
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
... ...
[yy@centos7 ~ 19:08:22]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
# 将 错误信息 覆盖写入 到passwd.err文件中
[yy@centos7 ~ 19:09:18]$ find /etc -name 'passwd' 2>passwd.err
/etc/pam.d/passwd
/etc/passwd
[yy@centos7 ~ 19:09:47]$ cat passwd.err
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
... ...
# 将错误信息 扔掉
[yy@centos7 ~ 19:09:59]$ find /etc -name 'passwd' 2>/dev/null
/etc/pam.d/passwd
/etc/passwd
# 将错误信息 追加写入 到passwd.err文件中
[yy@centos7 ~ 19:11:12]$ find /etc -name 'passwd' 2>>passwd.err
/etc/pam.d/passwd
/etc/passwd
[yy@centos7 ~ 19:11:25]$ cat passwd.err
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
... ...
# 将错误信息、正确信息 覆盖写入 到不同文件
[yy@centos7 ~ 19:11:31]$ find /etc -name 'passwd' >passwd.list 2>passwd.err
# 将错误信息、正确信息 追加写入 到不同文件
[yy@centos7 ~ 19:13:15]$ find /etc -name 'passwd' >>passwd.list 2>>passwd.err
# 用于清空文件内容,也可用于创建一个空文件testfile
[yy@centos7 ~ 19:13:26]$ > testfile
# 如果不存在,则创建一个文件;如果文件存在,则啥也不干,不清空
[yy@centos7 ~ 19:13:42]$ >> testfile

# 将错误信息、正确信息 覆盖写入 到 相同文件
[yy@centos7 ~ 19:13:47]$ find /etc -name 'passwd' &> passwd.all
# 将错误信息、正确信息 追加写入 到 相同文件
[yy@centos7 ~ 19:16:16]$ find /etc -name 'passwd' &>> passwd.all
[yy@centos7 ~ 19:16:23]$ cat passwd.all
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
/etc/pam.d/passwd
find: ‘/etc/dhcp’: Permission denied
/etc/passwd
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
/etc/pam.d/passwd
find: ‘/etc/dhcp’: Permission denied
/etc/passwd
find: ‘/etc/selinux/targeted/active’: Permission denied
find: ‘/etc/selinux/final’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/audisp’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
标准输出重定向到程序
管道符(|)实现:将上一个命令的输出作为标准输入传递给下一个命令。

# 示例1 查看哪个man page 可以resize ext4文件系统大小
# 搜索所有ext4相关手册,并保存到ext4.man文件中
[yy@centos7 ~ 19:17:32]$ man -k ext4 > ext4.man
# 过滤ext4.man文件中含有resize的行
[yy@centos7 ~ 19:18:34]$ grep resizer ext4.man
resize2fs (8) - ext2/ext3/ext4 file system resizer
# 以上两个命令和合并为一行
[yy@centos7 ~ 19:18:53]$ man -k ext4 | grep resizer
resize2fs (8) - ext2/ext3/ext4 file system resizer
# 示例2 获取ens33网卡ip地址
[yy@centos7 ~ 19:19:23]$ ip addr | grep 'ens33$' | awk '{print $2}'|cut -d/ -f1
10.1.8.10
**注意:**管道符号后的命令必须能够接收标准输入,例如 ls ==不==接收管道传递过来的标准输入。
[yy@centos7 ~ 19:20:19]$ echo /etc/passwd | ls -l
total 52
-rw-rw-r--. 1 yy yy 699 Jul 16 19:05 allinone
-rw-r--r--. 1 yy yy 351 Jul 16 14:38 dhcpd.conf
补充:|& 标准错误和标准输出同时传递给下一个命令,作为下一个命令的标准输入。
[yy@centos7 ~ 19:21:52]$ ls -l file-{01..06}
ls: cannot access file-01: No such file or directory
ls: cannot access file-02: No such file or directory
ls: cannot access file-03: No such file or directory
ls: cannot access file-04: No such file or directory
ls: cannot access file-05: No such file or directory
ls: cannot access file-06: No such file or directory
[yy@centos7 ~ 19:22:20]$ ls -l file-{01..06} |grep file-06
ls: cannot access file-01: No such file or directory
ls: cannot access file-02: No such file or directory
ls: cannot access file-03: No such file or directory
ls: cannot access file-04: No such file or directory
ls: cannot access file-05: No such file or directory
ls: cannot access file-06: No such file or directory
[yy@centos7 ~ 19:22:32]$ ls -l file-{01..06} |grep file-03
ls: cannot access file-01: No such file or directory
ls: cannot access file-02: No such file or directory
ls: cannot access file-03: No such file or directory
ls: cannot access file-04: No such file or directory
ls: cannot access file-05: No such file or directory
ls: cannot access file-06: No such file or directory
# |&
[yy@centos7 ~ 19:22:45]$ ls -l file-{01..06} |& grep file-06
ls: cannot access file-06: No such file or directory
tee 命令

tee 命令作用,接收管道传递过来的stdin,并继续作为stdout输出。
[yy@centos7 ~ 19:22:53]$ > passwd.list
[yy@centos7 ~ 19:23:39]$ cat passwd.list
# tee命令 覆盖保存 到文件
[yy@centos7 ~ 19:23:48]$ find /etc -name 'passwd' 2>/dev/null | tee passwd.list
/etc/pam.d/passwd
/etc/passwd
[yy@centos7 ~ 19:24:41]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
# tee命令 追加保存 到文件
[yy@centos7 ~ 19:24:46]$ find /etc -name 'passwd' 2>/dev/null | tee -a passwd.list
/etc/pam.d/passwd
/etc/passwd
[yy@centos7 ~ 19:24:57]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
# tee的标准输出继续通过管道传递下去
[yy@centos7 ~ 19:25:01]$ man -k passwd | tee passwd.man | grep passwd
chgpasswd (8) - update group passwords in batch mode
chpasswd (8) - update passwords in batch mode
fgetpwent_r (3) - get passwd file entry reentrantly
getpwent_r (3) - get passwd file entry reentrantly
... ...
标准输入重定向给程序
# 常规查看文件
[yy@centos7 ~ 19:25:36]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# cat 命令标准输入数据
[yy@centos7 ~ 19:26:40]$ cat < /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[yy@centos7 ~ 19:26:52]$ cat
hello # 键盘输入hello后回车
hello # 屏幕上显示hello
ctrl+d # 输入完成,退出
# shell读取到EOF时候,代表标准输入完成
[yy@centos7 ~ 19:27:00]$ cat << EOF
> hello
> world
> EOF
hello
world
[yy@centos7 ~ 19:27:29]$ cat <<< 'hello world'
hello world
判定一个命令是否接收标准输入:最简单的方式就是将文件内容作为标准输入重定向给程序。
**思考:**如何一次性将多行内容写入到文件中?
# 方法1:使用引号
[yy@centos7 ~ 19:29:12]$ echo 'hello world
> hello python
> hello linux' > multi_lines.txt
[yy@centos7 ~ 19:29:47]$ cat multi_lines.txt
hello world
hello python
hello linux
# 方法2:使用cat重定向
[yy@centos7 ~ 19:29:53]$ cat > multi_lines.txt << EOF
> hello world
> hello python
> hello linux
> EOF
[yy@centos7 ~ 19:30:27]$ cat multi_lines.txt
hello world
hello python
hello linux
思考
-
执行
find /usr -name "*.txt" 2>/dev/null | tee txt_list.txt | grep root,分析整条命令数据流走向,每一段分别起到什么作用? -
同样查看 passwd 相关文档,
man 1 passwd和man 5 passwd输出内容有什么区别?什么时候需要使用 LANG=en_US.utf8 临时切换英文手册? -
对比
su和su -切换 root 用户后,pwd、echo $HOME、echo $PATH输出结果差异,说明两者环境变量的区别。 -
想要一次性写入 10 行配置到
/etc/test.conf,请写出两种不同输入重定向实现方式。 -
vim 中需要将文档内所有
192.168.1.1批量替换为10.1.8.2,写出对应的末行模式替换命令。

223

被折叠的 条评论
为什么被折叠?



