一文吃透 Linux 标准流、重定向、管道与 tee 命令(附 vim 实操案例) 📅 2026/7/18 14:09:27 一文吃透 vim编辑器的使用、Linux 标准流、重定向、管道与 tee 命令附 vim 实操案例一、Linux中获取帮助1、man手册Linux中有许多的命令和选项 要想全部记住这些几乎不太现实那我们就只能上网去搜索吗这时候man手册就是我们的不二之选1、man 简介manmanual 简称。man使用不同 section 区分手册类别。SECTION内容类型1用户命令可执行命令和shell程序2系统调用从用户空间调用的内核例程3库函数由程序库提供4特殊文件如设备文件5文件格式用于许多配置文件和结构6游戏过去的有趣程序章节7惯例、标准和其他协议、文件系统8系统管理和特权命令维护任务9Linux内核API(内核调用)2、man 命令[xuhaoyucentos7 ~18:34:25]$man--help#输出结果# Usage: man [OPTION...] [章节] 手册页...# -C, --config-file文件 使用该用户设置文件# -d, --debug 输出调试信息# -D, --default 将所有选项都重置为默认值# --warnings[警告] 开启 groff 的警告# ......man手册页面交互操作指令less程序命令结果PageDown或者空格键向前向下滚动一个屏幕PageUp向后向上滚动一个屏幕向下箭头向前向下滚动一行向上箭头向后向上滚动一行d向前向下滚动半个屏幕u向后向上滚动半个屏幕/string在man page中向前向下搜索stringn在man page中重复之前的向前向下搜索N在man page中重复之前的向后向上搜索g转到man page的第一行。G转到man page的最后一行。q退出man 并返回到shell命令提示符3、运用 -k 搜索关键词#查找 调整内核kernel[xuhaoyucentos7 ~19:17:44]$man-kkernel# dmesg (8) - print or control the kernel ring buffer# abrt-action-analyze-oops (1) - Calculate and save UUID and duplicate hash for a problem data dir...# 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 ABRTs Kernel Oops extractor# add_key (2) - add a key to the kernels key management facility# adjtimex (2) - tune kernel clock# arp (7) - Linux ARP kernel module.那如何更快速的查找到你需要的内容呢答运用管道格式为 man -k a | grep b#查找 调整内核kernel启动boot参数 手册[xuhaoyucentos7 ~19:23:06]$man-kkernel|grepboot# bootparam (7) - introduction to boot time parameters of the Linux kernel# kernel-install (8) - Add and remove kernel and initramfs images to and from /boot# kexec (8) - directly boot into a new kernel# modules-load.d (5) - Configure kernel modules to load at boot# sysctl.d (5) - Configure kernel parameters at boot# systemd-modules-load (8) - Load kernel modules at boot# systemd-modules-load.service (8) - Load kernel modules at boot# systemd-sysctl (8) - Configure kernel parameters at boot# systemd-sysctl.service (8) - Configure kernel parameters at boot二、which 和 whereis 命令which命令就是查看这个词代表什么[xuhaoyucentos7 ~19:26:13]$whichvi# alias vivim# /usr/bin/vimwhereis就是查看这个词在哪[xuhaoyucentos7 ~19:31:29]$whereispasswd#passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz二、vim 编辑器一款新手友好型编辑器# 安装 vim 工具[rootcentos7 ~]# yum install vim1、vim模式command模式该模式下键盘中的字母有特殊含义。例如G跳转到最后一行gg跳转到第一行。edit模式在command模式下按i进入该模式。在该模式可以输入内容。在该模式下按Esc返回command模式。•extended command模式在command模式下按:进入该模式。在该模式下可以保存文件(:w)退出编辑:q强制退出编辑:q!报错并退出:wq。visual edit模式在command模式下按v单个字符选中、V整行选中或者ctrlv按矩形选中进入该模式。在该模式下用于选中文件随后可以复制或删除选中的内容。2、快捷键模式切换与文件操作快捷键功能说明i在光标前进入插入模式q退出 Vim未修改时a:w在光标后进入插入模式wq保存并退出esc返回普通模式q强制退出放弃所有修改w保存文件2、定位文件内容w向后一个word光标在开头$行尾e向后一个word光标在末尾{上一个自然段b向前一个word}}下一个自然段^或0行首gg第一行上一个句子头部G最后一行)下一个句子尾部less 使用g第一行G最后一行。3、进入插入模式i当前位置插入A行末追加I行首插入o向下新开一个空白行adangqianweizhi1追加O向上新开一个空白行4、复制yy复制1行相当于y1y。以此类推 y2y y2w y2b。5、粘贴p 当前位置后粘贴P 当前位置前粘贴6、删除x删除当前单个字符。5x删除当前字符和后续4个字符。X删除前一单个字符。dw删除1个word以此类推 d5w d3b d2d d$。D从当前删除到最后相当于d$。7、回退u撤销上一个操作。U撤销整行修改。Ctrlr反向撤销与u相反。8、修改相当于删除后插入s删除当前字符并进入编辑模式。S删除当前行并进入编辑模式。c代表替换动作例如cw删除1个word并进入编辑模式。以此类推 c5w。C从当前删除到最后并进入编辑模式。8、替换r替换单个字符后回退到命令行模式。R替换模式一直替换直到按Ese返回命令行模式示例完成 DHCP 服务配置文件定制。# 配置仓库[rootcentos7 ~]# curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo[rootcentos7 ~]# curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo# 安装dhcp软件[rootcentos7 ~]# yum install -y dhcp# 准备配置文件[xuhaoyucentos7 ~]$cp/usr/share/doc/dhcp*/dhcpd.conf.example ~/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.5C然后输入223.5.5.5;。修改路由器为10.1.8.2使用 r 替换末尾1为2。修改广播地址10.1.8.31为10.1.8.255。ZZ保存退出。3、vim 配置两个位置全局/etc/vimrc给所有用户设置一些默认值。全局要进入管理员模式操作用户~/.vimrc特定用户的个性化设置。常见的设置命令[xuhaoyucentos7 ~]$vim~/.vimrcsetnumber# 显示行号setshowcmd# 显示操作命令setaits2# ai自动缩进tstabspace使用2个空格代替,即首行缩进两格setcursorcolumn# 列高亮对齐显示setcursorline# 行高亮对齐显示三、Linux 输入输出重定向1、标准流的核心组成stdin标准输入编号 0是进程接收输入数据的通道默认连接到键盘程序通过它读取用户输入如scanf、read等操作会从stdin获取数据。用法为仅读取只能从该通道输入数据到进程。stdout标准输出编号 1是进程输出正常结果的通道默认连接到终端屏幕程序的普通打印如printf、echo等会输出到stdout。用法为仅写入进程只能向该通道输出数据。stderr标准错误编号 2是进程输出错误信息的通道默认也连接到终端屏幕用于区分正常输出和错误提示如程序崩溃、逻辑错误的提示信息。用法为仅写入专门用于输出错误内容。3 号通道其他文件filename代表进程与自定义文件的交互通道非标准流没有默认连接需要手动指定文件。用法为读取和 / 或写入可根据需求对文件进行读、写操作。流程逻辑输入用户通过键盘向stdin输入数据进程从stdin读取这些输入。输出进程将正常结果写入stdout错误信息写入stderr两者默认都显示在终端同时进程也可通过 3 号通道与其他文件进行数据的读写交互。这种模型是 Unix/Linux 系统中 “一切皆文件” 思想的体现让进程能以统一的方式处理不同来源 / 目标的数据也为重定向Redirect等操作如把stdout输出到文件、把文件内容作为stdin输入提供了基础。2、标准输出重定向到文件用法说明file重定向以覆盖文件file重定向以附加到文件2file重定向以覆盖文件2file重定向以附加文件2/dev/null将错误信息覆盖/dev/null1一般可省略不写/dev/null将正确信息覆盖/dev/null,从而把错误信息扔掉示例# 将找到的文件名清单覆盖写入到passwd.list文件中[xuhaoyucentos7 ~22:23:57]$find/etc-namepasswdpasswd.list# find: ‘/etc/grub.d’: 权限不够# find: ‘/etc/pki/CA/private’: 权限不够# find: ‘/etc/pki/rsyslog’: 权限不够# find: ‘/etc/dhcp’: 权限不够# find: ‘/etc/selinux/targeted/active’: 权限不够# ...#在输出结果中看不到能找到的文件了这是因为所以能找到的文件都被覆盖到passwd.list 中了#而这段代码的还是还是以find 查找查找 /etc 目录下 文件名是passwd的所有文件而不是去查看passwd.list 中的文件#若要查看psswd.list 还是得用cat命令[xuhaoyucentos7 ~22:24:20]$catpasswd.list# /etc/pam.d/passwd# /etc/passwd# 补充说明# 1passwd.list可简写为passwd.list# 1和之间不能有空格# 将错误信息覆盖写入到passwd.err文件中[xuhaoyucentos7 ~22:05:59]$find/etc-namepasswd2passwd.list# /etc/pam.d/passwd# /etc/passwd#输出结果为什么是这样和上面说的一样#更简单 一步到位的方法[xuhaoyucentos7 ~22:30:08]$find/etc-namepasswdpasswd.list2passwd.err#就像我们平时聊天一样我今天吃饭了我今天睡觉了 可简写为我今天吃饭睡觉了#把这段命令拆分下来为 find /etc -name passwd# passwd.list# 2passwd.err# 将错误信息扔掉[xuhaoyucentos7 ~22:27:30]$find/etc-namepasswd2/dev/null# /etc/pam.d/passwd# /etc/passwd# 将多个文件内容合并为1个[xuhaoyucentos7 ~22:36:08]$cat/etc/fstab /etc/hostsallinone# 用于清空文件内容也可用于创建一个空文件testfile[xuhaoyucentos7 ~22:32:38]$testfile#相当于直接将屏幕默认屏幕是没有任何东西的覆盖testfile,用一个啥都没有的东西覆盖那不就是相当于清空嘛# 如果不存在则创建一个文件如果文件存在则啥也不干。[xuhaoyucentos7 ~22:31:53]$find/etc-namepasswdpasswd.list2passwd.errfile 相当于file 21重定向stdout和stderr以覆盖同一个文件file 相当于file 21重定向stdout和stderr以附加同一个文件# 同时将错误信息、正确信息 覆盖 写入到相同文件[xuhaoyucentos7 ~]$find/etc-namepasswdpasswd.all# 同时将错误信息、正确信息 追加 写入到相同文件[xuhaoyucentos7 ~]$find/etc-namepasswdpasswd.all3、标准输出重定向到程序管道符|实现将上一个命令的输出作为标准输入传递给下一个命令。可以理解为“既要有要” 同时满足多个要求健达奇趣蛋说是示例:查看哪个man page 可以resize ext4文件系统大小# 搜索所有ext4相关手册并保存到ext4.man文件中[xuhaoyucentos7 ~]$man-kext4ext4.man# 过滤ext4.man文件中含有resize的行[xuhaoyucentos7 ~]$grepresizer ext4.man# 以上两个命令和合并为一行[xuhaoyucentos7 ~]$man-kext4|grepresizer resize2fs(8)- ext2/ext3/ext4filesystem resizer# 示例2 获取ens33网卡ip地址[xuhaoyucentos7 ~]$ipaddr|grepens33$|awk{print $2}|cut-d/-f110.1.8.88运用标准输出重定向到程序思想就是[xuhaoyucentos7 ~]$echo/etc/passwd|ls-l总用量2#-rw-rw-r--. 1 laoma laoma 0 12月 15 15:08 file#-rw-rw-r--. 1 laoma laoma 0 12月 15 15:08 file-a1、tee命令tee 命令作用接收管道传递过来的stdin并继续作为stdout输出可以这么去理解tee是一个分流器、三通水管一边把命令输出打印到屏幕一边同时写入文件普通重定向 只会存文件屏幕看不到输出tee 两者兼得。[xuhaoyucentos7 ~]$passwd.list[xuhaoyucentos7 ~]$catpasswd.list# tee命令覆盖保存到文件[xuhaoyucentos7 ~]$find/etc-namepasswd2/dev/null|teepasswd.list#/etc/pam.d/passwd#/etc/passwd[xuhaoyucentos7 ~]$catpasswd.list#/etc/pam.d/passwd#/etc/passwd# tee命令追加保存到文件[xuhaoyucentos7 ~]$find/etc-namepasswd2/dev/null|tee-apasswd.list#/etc/pam.d/passwd#/etc/passwd[xuhaoyucentos7 ~]$catpasswd.list#/etc/pam.d/passwd#/etc/passwd#/etc/pam.d/passwd#/etc/passwd# tee的标准输出继续通过管道传递下去[xuhaoyucentos7 ~]$man-kpasswd|teepasswd.man|greppasswd2、标准输入重定向给程序运用 简单理解 和 就看箭头指向谁指向谁就是流向谁# 常规查看文件[xuhaoyucentos7 ~]$cat/etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# cat 命令标准输入数据[xuhaoyucentos7 ~]$cat/etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain#直观区分#cat 文件cat 主动读文件#cat 文件shell 把文件塞给 cat 的输入流cat 被动接收[xuhaoyucentos7 ~]$cathello# 键盘输入hello后回车hello# 屏幕上显示helloctrld# 输入完成退出# shell读取到EOF时候代表标准输入完成[studentservera ~]$catEOFhelloworldEOF hello world[xuhaoyucentos7 ~]$cathello worldhello world