再也不用到处查!Linux 帮助、Vim、IO 重定向完整笔记

引言

初学 Linux 常会陷入三个困境:不会查命令官方文档、不熟悉 vim 高效编辑、命令输出杂乱无法过滤归档。本文围绕帮助查询、Vim 编辑器、IO 重定向三大核心基础,结合实操案例带大家快速掌握必备技能。

Linux 中获取帮助

Man 手册

man 简介

man = manual(手册),Linux 自带官方完整帮助文档,所有命令、配置文件、系统接口都有说明。

Section(章节编号):不同数字代表不同类型的文档,同一个关键词(比如 passwd)可能在多个章节都有手册,含义完全不一样:

SECTION内容类型
1**用户命令(**可执行命令和shell程序)
2系统调用(从用户空间调用的内核例程)
3库函数(由程序库提供)
4特殊文件(如设备文件)
5文件格式(用于许多配置文件和结构)
6游戏(过去的有趣程序章节)
7惯例、标准和其他(协议、文件系统)
8系统管理和特权命令(维护任务)
9Linux内核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

补充:命令的来源

  1. 安装软件包之后获得
  2. 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 手册,并举例验证。

  1. 查看 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
  1. 查看 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
  1. 查看 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
  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
... ...
  1. 查找 创建 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 文件:

  1. :set number showcmd,显示行号和操作命令
  2. gg,光标定位到第一行。
  3. d46d,删除当前行以及后面的45行。
  4. :11,28d,删除11到28行。
  5. /You,搜索字符串You,并定位到该字符位置。
  6. dG,删除当前位置行到最后。
  7. :%s/10.5.5/10.1.8/g,将所有行中 10.5.5替换为 10.1.8

% 针对所有内容,s查找并替换,g替换查找到的所有内容。

  1. /224,定位这个数字。
  2. cw,替换为0,然后esc。
  3. 30换成130
  4. 光标定位到ns1,修改dns为223.5.5.5:C然后输入223.5.5.5;
  5. 修改路由器为10.1.8.2,使用 r 替换末尾1为2。
  6. 修改广播地址10.1.8.3110.1.8.255
  7. 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)
  • 是进程接收输入数据的通道,默认连接到键盘,程序通过它读取用户输入(如 scanfread 等操作会从 stdin 获取数据)。
  • 用法为仅读取(只能从该通道输入数据到进程)。
  • stdout(标准输出,编号 1)
  • 是进程输出正常结果的通道,默认连接到终端屏幕,程序的普通打印(如 printfecho 等)会输出到 stdout
  • 用法为仅写入(进程只能向该通道输出数据)。
  • stderr(标准错误,编号 2)
  • 是进程输出错误信息的通道,默认也连接到终端屏幕,用于区分正常输出和错误提示(如程序崩溃、逻辑错误的提示信息)。
  • 用法为仅写入(专门用于输出错误内容)。
  • 3+ 号通道(其他文件,filename)
  • 代表进程与自定义文件的交互通道(非标准流),没有默认连接,需要手动指定文件。
  • 用法为读取和 / 或写入(可根据需求对文件进行读、写操作)。
编号名称默认设备作用
0stdin 标准输入键盘程序读取数据(用户输入)
1stdout 标准输出终端屏幕正常执行结果打印
2stderr 标准错误终端屏幕报错、警告信息打印

流程逻辑

  • 输入:用户通过键盘向 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

思考

  1. 执行 find /usr -name "*.txt" 2>/dev/null | tee txt_list.txt | grep root,分析整条命令数据流走向,每一段分别起到什么作用?

  2. 同样查看 passwd 相关文档,man 1 passwdman 5 passwd 输出内容有什么区别?什么时候需要使用 LANG=en_US.utf8 临时切换英文手册?

  3. 对比 susu - 切换 root 用户后,pwdecho $HOMEecho $PATH 输出结果差异,说明两者环境变量的区别。

  4. 想要一次性写入 10 行配置到/etc/test.conf,请写出两种不同输入重定向实现方式。

  5. vim 中需要将文档内所有 192.168.1.1 批量替换为 10.1.8.2,写出对应的末行模式替换命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值