告别百度查命令!Linux 自带说明书 + vim 神操作 + 管道 tee,小白也能秒懂
相信很多刚接触 Linux 的小伙伴都有过这种体验:
遇到命令记不住参数,打开百度搜半天,结果教程版本不对,照着敲直接报错;
第一次用 vim,进去之后不知道怎么退出,手足无措只能强行关终端;
命令执行完结果满屏滚,想保存下来只能手动复制粘贴,长输出直接傻眼。
其实这些问题,根本不用靠百度解决 ——Linux 系统本身就内置了全套的 “官方攻略”,只是很多新手都没发现。
今天这篇就带大家一次性吃透 Linux 入门必学的 3 大核心技能:官方帮助系统、vim 编辑器、输入输出重定向。
全程干货 + 实操,看完就能上手,帮你摆脱新手困境,效率直接拉满。
一、man 手册:Linux 自带的官方百科全书,遇事再也不求人
1.1 为什么你该优先学 man?
很多新手学 Linux 的第一个误区,就是死记硬背所有命令参数,背了忘、忘了背,效率极低。
而man(manual 的缩写)是 Linux 系统自带的官方权威手册,从命令用法到配置文件格式,从系统调用到协议规范,几乎所有问题都能在这里找到标准答案。
它比百度靠谱 100 倍 —— 不会有版本错乱,不会有错误教程,随用随查,堪称 Linux 界的 “新华字典”。
1.2 9 大章节:别查错了 “字典分册”
man 手册不是一本厚书,而是按内容类型分成了 9 个章节(section)。新手最容易踩的坑,就是查错章节。
| 章节号 | 内容类型 | 通俗解释 | 经典例子 |
|---|---|---|---|
| 1 | 用户命令(可执行命令 / Shell 程序) | 我们平时敲的普通命令都在这 | man 1 passwd → 查「修改密码」的命令用法 |
| 5 | 文件格式 | 配置文件、数据结构的格式说明 | man 5 passwd → 查/etc/passwd文件的语法格式 |
| 8 | 系统管理特权命令 | 管理员用的系统维护命令 | man 8 resize2fs → 查文件系统扩容命令 |
最经典的踩坑现场:很多人查
passwd,只知道它是改密码的命令,却不知道它还是个配置文件。直接敲man passwd默认只显示第 1 章,想查配置文件必须指定第 5 章。
1.3 翻阅手册:记住这几个快捷键就够了
打开 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命令提示符 |
1.4 进阶玩法:关键词搜索 + 英文原版
-
使用root用户更新man page库
[root@centos7 ~ 18:09:23]# 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:忽略错误的文件名 完成。 正在 /usr/share/man 下查找流浪猫... 正在 /var/cache/man 下查找流浪猫... 正在删除 /usr/share/man/hu 里的旧数据库条目... 正在处理 /usr/share/man/hu 下的手册页... ... ... 正在删除 /usr/local/share/man 里的旧数据库条目... 正在处理 /usr/local/share/man 下的手册页... 3 man subdirectories contained newer manual pages. 93 manual pages were added. 0 stray cats were added. 0 old database entries were purged. -
模糊搜命令
:记不清完整命令名?用 man -k 关键词可以全局搜索所有包含该关键词的手册。
[jianghuilin@centos7 ~ 18:10:36]$ man -k passwd chgpasswd (8) - 批量更新组密码 chpasswd (8) - 批量更新密码 gpasswd (1) - administer /etc/group and /etc/gshadow mkpasswd (1) - 为用户产生新口令 passwd (5) - (未知的主题) smbpasswd (5) - Samba加密的口令文件。 smbpasswd (8) - 改变用户的SMB口令 yppasswd (1) - 修改你在NIS数据库中的密码 fgetpwent_r (3) - get passwd file entry reentrantly getpwent_r (3) - get passwd file entry reentrantly grub2-mkpasswd-pbkdf2 (1) - Generate a PBKDF2 password hash. lpasswd (1) - Change group or user password lppasswd (1) - add, change, or delete digest passwords. pam_localuser (8) - require users to be listed in /etc/passwd passwd (1) - update user's authentication tokens sslpasswd (1ssl) - compute password hashes passwd2des (3) - RFS password encryption pwhistory_helper (8) - Helper binary that transfers password hashes f... saslpasswd2 (8) - set a user's sasl password vncpasswd (1) - change the VNC password: 比如想找 ext4 文件系统调整相关的命令
[jianghuilin@centos7 ~ 18:10:44]$ 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 metada... e2label (8) - Change the label on an ext2/ext3/ext4 filesystem e2undo (8) - Replay an undo log for an ext2/ext3/ext4 files... e4defrag (8) - online defragmenter for ext4 filesystem ext4 (5) - the fourth extended file system filesystems (5) - Linux file-system types: minix, ext, ext2, ext... fs (5) - Linux file-system types: minix, ext, ext2, ext... fsck.ext2 (8) - check a Linux ext2/ext3/ext4 file system fsck.ext3 (8) - check a Linux ext2/ext3/ext4 file system fsck.ext4 (8) - check a Linux ext2/ext3/ext4 file system mke2fs (8) - create an ext2/ext3/ext4 filesystem mkfs.ext2 (8) - create an ext2/ext3/ext4 filesystem mkfs.ext3 (8) - create an ext2/ext3/ext4 filesystem mkfs.ext4 (8) - create an ext2/ext3/ext4 filesystem resize2fs (8) - ext2/ext3/ext4 file system resizer tune2fs (8) - adjust tunable filesystem parameters on ext2/e... [jianghuilin@centos7 ~ 18:12:50]$ man resize2fs -
看英文原版手册
:中文翻译偶尔会晦涩难懂,临时切换成英文更准确:
# 查看命令gedit英文的帮助手册,指定LANG变量 [jianghuilin@centos7 ~ 18:13:16]$ LANG=en_US.utf8 man gedit # 或者 [jianghuilin@centos7 ~ 18:15:39]$ LANG=en_US.utf8 [jianghuilin@centos7 ~ 18:16:45]$ man gedit
1.5 补全:所有查帮助的姿势,一次说全
不是所有命令都适合用 man 查,不同场景用不同工具:
-
Shell 内置命令用 help,像cd、history这种 Shell 自带的命令,man 查不到详细内容,用 help 命令名
[jianghuilin@centos7 ~ 18:16:55]$ help history -
通用神器 --help
几乎所有外部命令都支持 –help选项,快速看参数说明,比 man 更简洁:
[jianghuilin@centos7 ~ 18:24:05]$ touch --help Usage: touch [OPTION]... FILE... Update the access and modification times of each FILE to the current time. A FILE argument that does not exist is created empty, unless -c or -h is supplied. A FILE argument string of - is handled specially and causes touch to change the times of the file associated with standard output. Mandatory arguments to long options are mandatory for short options too. -a change only the access time -c, --no-create do not create any files -d, --date=STRING parse STRING and use it instead of current time -f (ignored) -h, --no-dereference affect each symbolic link instead of any referenced file (useful only on systems that can change the timestamps of a symlink) -m change only the modification time -r, --reference=FILE use this file's times instead of current time -t STAMP use [[CC]YY]MMDDhhmm[.ss] instead of current time --time=WORD change the specified time: WORD is access, atime, or use: equivalent to -a WORD is modify or mtime: equivalent to -m --help display this help and exit --version output version information and exit Note that the -d and -t options accept different time-date formats. GNU coreutils online help: <http://www.gnu.org/software/coreutils/> For complete documentation, run: info coreutils 'touch invocation' -
**/usr/share/doc:**示例配置宝库
很多软件会把官方示例、配置模板、使用说明放在这里,搭服务的时候直接抄模板香到爆:
cat /usr/share/doc/dhclient-4.2.5/dhclient.conf.example -
找命令位置:which 和 whereis
which 命令:看命令的可执行文件路径,还能显示别名
[jianghuilin@centos7 ~ 18:24:15]$ which vi alias vi='vim' /usr/bin/vimwhereis 命令:一次性找到二进制文件、手册、源码的所有位置
[jianghuilin@centos7 ~ 18:28:56]$ 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 [jianghuilin@centos7 ~ 18:29:05]$ whereis passwd passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
二、vim 编辑器:从 “进去就退不出” 到 “单手高效编辑”
2.1 为什么一定要学 vim?
说到 vim,新手的第一反应往往是 “反人类”—— 没有菜单,不能用鼠标,进去了甚至不知道怎么退出来。
但它是 Linux 服务器上的标配编辑器:纯字符界面的服务器上,没有记事本,没有 VS Code,只有 vim 是 100% 预装的。
而且一旦用熟,你会发现它是为 “手不离开键盘” 设计的神器,编辑速度比鼠标点来点去快十倍。
vim版本,Linux 系统中可以安装vim三个不同版本:
- vim-minimal:只提供vi和相关命令。
- vim-enhanced:提供vim命令,提供语法高亮,拼写检查等特性。
- vim-X11:提供gvim,图形界面下的vim。gvim包涵菜单栏。当用户不知道命令的时候,可以通过菜单操作。
# 安装 vim 工具
[root@centos7 ~ 18:32:26]# yum install vim
冷知识:据说有 80% 的 Linux 新手,第一次用 vim 时因为不知道怎么退出,直接关掉了终端… 看完这节,你再也不会闹这种笑话。
2.2 搞懂 4 种模式,vim 就入门了一半

vim 的核心逻辑就是**「模式切换」**,很多人觉得难用,本质是没搞懂不同模式的作用。
-
命令模式(默认模式)
打开 vim 默认进入这个模式,你敲的所有键盘都会被当成快捷键,用来移动光标、复制删除、跳转。
-
输入模式
正常打字写内容的模式。在命令模式按i 就能进入,按Esc退回命令模式。
-
底行模式(扩展命令模式)
用来保存、退出、全局替换等操作。命令模式按
:进入,回车执行后自动退回命令模式。 -
可视模式
在
command模式下按 v(单个字符选中)、V(整行选中)或者ctrl+v(按矩形选中),进入该模式。在该模式下,用于选中文件,随后可以复制或删除选中的内容。
新手保命技巧:不知道自己在啥模式的时候,多按几次
Esc,总能退回最安全的命令模式。
2.3 高频快捷键:记住这几个,日常编辑够用了

不用上来就背几百个快捷键,先掌握最常用的,边用边记效率最高。
光标移动(告别方向键)
gg:跳到文件第一行G:跳到文件最后一行0/^:跳到行首$:跳到行尾w,向后1个word(光标在单词开头);e,向后1个word(光标在单词末尾)b:向前跳一个单词
复制粘贴删除
yy:复制当前行(3yy就是复制 3 行)p:在光标后粘贴P: 在光标后前粘贴dd:删除当前行(3dd就是删除 3 行)x,删除当前单个字符。5x,删除当前字符和后续4个字符。X,删除前一单个字符。dw,删除1个word,以此类推 d5w d3b d2d d$。D,从当前删除到最后,相当于d$。
撤销与重做
u:撤销上一步操作(相当于 Windows 的 Ctrl+Z)U,撤销整行修改。Ctrl+r:重做,恢复被撤销的操作
修改
相当于删除后插入:
s,删除当前字符,并进入编辑模式。S,删除当前行,并进入编辑模式。c,代表替换动作,例如cw,删除1个word,并进入编辑模式。以此类推 c5w。C,从当前删除到最后,并进入编辑模式。
替换
r,替换单个字符后回退到命令行模式。R,替换模式,一直替换直到按Ese返回命令行模式。
进入输入模式(最常用的 6 个)
i:光标当前位置插入a:光标后追加o:光标下方新开一行并进入输入I:行首插入A:行尾插入O:光标上方新开一行
底行模式常用命令
:w:保存文件:q:退出(文件未修改时):wq:保存并退出:q!:强制退出,不保存修改:set number:显示行号:%s/旧内容/新内容/g:全局替换字符串
2.4 实操练手:修改 DHCP 配置文件
光说不练假把式,我们做个小练习,把上面的命令串起来用一遍:
# 安装dhcp软件
[root@centos7 ~]# yum install -y dhcp
# 先复制一份官方示例配置到家目录
cp /usr/share/doc/dhcp*/dhcpd.conf.example ~/dhcpd.conf
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替换查找到的所有内容。
8./224,定位这个数字。
9.cw,替换为0,然后esc。
10.将30换成130。
11.光标定位到ns1,修改dns为223.5.5.5:C然后输入223.5.5.5;。
12.修改路由器为10.1.8.2,使用 r 替换末尾1为2。
13.修改广播地址10.1.8.31为10.1.8.255。
14.ZZ,保存退出。

2.5 打造专属 vim:个性化配置
两个位置:
- 全局:
/etc/vimrc,给所有用户设置一些默认值。 - 用户:
~/.vimrc,特定用户的个性化设置。
常见的设置命令:
[jianghuilin@centos7 ~ 18:54:53]$ vim ~/.vimrc
set number " 显示行号
set showcmd " 实时显示输入的命令
set ai ts=2 " 自动缩进,Tab用2个空格代替
set cursorline " 高亮当前行,方便定位
set cursorcolumn " 列高亮对齐显示
保存退出后,再打开 vim 就会自动生效,编辑体验直接上一个台阶。
三、IO 重定向:解锁命令行的灵魂玩法,效率直接翻倍
3.1 什么是输入输出重定向?

很多人用 Linux 命令,执行完结果就显示在屏幕上,想保存还得手动复制。
其实 Linux 里每个运行的程序,都默认有 3 个「数据流通道」,这是 Unix “一切皆文件” 思想的核心体现:
| 通道编号 | 名称 | 默认连接 | 作用 |
|---|---|---|---|
| 0 | 标准输入(stdin) | 键盘 | 程序从这里读取输入数据 |
| 1 | 标准输出(stdout) | 终端屏幕 | 程序把正常运行结果输出到这里 |
| 2 | 标准错误(stderr) | 终端屏幕 | 程序把报错、异常信息输出到这里 |
重定向,就是改变这些数据流的去向:不让结果显示在屏幕上,而是写到文件里;不让程序从键盘读输入,而是从文件里读。
3.2 输出重定向:把结果存进文件

这是最常用的场景,核心符号就两个:
>:覆盖写入(文件原有内容会被清空)>>:追加写入(在文件末尾添加内容,不覆盖原有内容)
基础用法
# 把find命令的正常结果覆盖写入passwd.list
[jianghuilin@centos7 ~ 18:55:30]$ find /etc -name 'passwd' > passwd.listfind: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/dhcp’: Permission denied
... ...
# 注:> 默认就是标准输出重定向,前面的1可以省略
# 1>passwd.list可简写为>passwd.list
# 1和>之间不能有空格
[jianghuilin@centos7 ~ 19:01:24]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
# 将多个文件内容合并为一个
[jianghuilin@centos7 ~ 19:01:35]$ cat /etc/fstab /etc/hosts > allinone
# 将找到的文件名清单追加写入到passwd.list文件中
[jianghuilin@centos7 ~ 19:04:59]$ 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
... ...
[jianghuilin@centos7 ~ 19:05:43]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
错误输出重定向
普通用户执行find遍历系统目录,经常跳出一堆 “权限不够” 的报错,看着很烦。用错误重定向就能完美解决:
# 将错误信息覆盖写入到passwd.err文件中
[jianghuilin@centos7 ~ 19:05:54]$ find /etc -name 'passwd' 2>passwd.err
/etc/pam.d/passwd
/etc/passwd
[jianghuilin@centos7 ~ 19:08:26]$ cat passwd.err
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
......
find: ‘/etc/sudoers.d’: Permission denied
# 把错误信息扔进“黑洞”,只看正常结果
[jianghuilin@centos7 ~ 19:08:35]$ find /etc -name 'passwd' 2>/dev/null
/etc/pam.d/passwd
/etc/passwd
# 将错误信息追加写入到passwd.err文件中
[jianghuilin@centos7 ~ 19:09:59]$ find /etc -name 'passwd' 2>>passwd.err
/etc/pam.d/passwd
/etc/passwd
[jianghuilin@centos7 ~ 19:12:32]$ cat passwd.err
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
......
/dev/null是 Linux 里的 “无底黑洞”,扔进去的内容都会永久消失,专门用来丢弃没用的输出。
正常 + 错误存到不同文件
# 将错误信息、正确信息 覆盖 写入到不同文件
[jianghuilin@centos7 ~ 19:16:18]$ find /etc -name 'passwd' >passwd.list 2>passwd.err
# 将错误信息、正确信息 追加 写入到不同文件
[jianghuilin@centos7 ~ 19:17:32]$ find /etc -name 'passwd' >>passwd.list 2>>passwd.err
正常 + 错误存到同一个文件,用&>:
# 同时将错误信息、正确信息 覆盖 写入到相同文件
[jianghuilin@centos7 ~ 19:18:30]$ find /etc -name 'passwd' &> passwd.all
# 同时将错误信息、正确信息 追加 写入到相同文件
[jianghuilin@centos7 ~ 19:21:40]$ find /etc -name "passwd' &>> passwd.all
> 和 >> 后面直接加文件名
# 用于清空文件内容,也可用于创建一个空文件test.file
[jianghuilin@centos7 ~ 19:22:42]$ > test.file
# 如果不存在,则创建一个文件;如果文件存在,则啥也不干
[jianghuilin@centos7 ~ 19:25:47]$ >> test.file
3.3 管道符 |:命令组合的精髓
如果说重定向是 “把输出存到文件”,那**管道符|**就是 “把前一个命令的输出,直接当成后一个命令的输入”,不用中间文件,一步到位。
这是 Linux 命令行最有魅力的地方 —— 像搭积木一样组合简单命令,实现复杂功能

举个例子,找 ext4 相关的调整命令:
# 不用管道的笨办法:先存文件再过滤
# 查看哪个man page 可以resize ext4文件系统大小
# 搜索所有ext4相关手册,并保存到ext4.man文件中
[jianghuilin@centos7 ~ 19:26:02]$ man -k ext4 > ext4.man
# 过滤ext4.man文件中含有resize的行
[jianghuilin@centos7 ~ 19:30:00]$ grep resizer ext4.man
resize2fs (8) - ext2/ext3/ext4 file system resizer
# 用管道的优雅写法:一行搞定
[jianghuilin@centos7 ~ 19:30:27]$ man -k ext4 | grep resizer
resize2fs (8) - ext2/ext3/ext4 file system resizer
再比如,获取ens33网卡ip地址, 多命令无缝组合:
[jianghuilin@centos7 ~ 19:34:54]$ ip addr | grep 'ens33$' | awk '{print $2}'| cut -d/ -f1
10.1.8.10
**注意:**管道符号后的命令必须能够接收标准输入,例如 ls ==不==接收管道传递过来的标准输入。
[jianghuilin@centos7 ~ 20:28:35]$ echo /etc/passwd | ls -l
总用量 2
-rw-rw-r--. 1 jianghuilin jianghuilin 0 7月 16 15:08 file
-rw-rw-r--. 1 jianghuilin jianghuilin 0 7月 16 15:08 file-a
补充:|& 标准错误和标准输出同时传递给下一个命令,作为下一个命令的标准输入。
[student@servera ~]$ ls -l file-{01..06}
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
-rw-rw-r--. 1 student student 0 Dec 24 14:53 file-01
-rw-rw-r--. 1 student student 0 Dec 24 14:53 file-02
-rw-rw-r--. 1 student student 0 Dec 24 14:53 file-03
[student@servera ~]$ ls -l file-{01..06} |grep file-06
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
[student@servera ~]$ ls -l file-{01..06} |grep file-03
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
-rw-rw-r--. 1 student student 0 Dec 24 14:53 file-03
# |&
[student@servera ~]$ ls -l file-{01..06} |& grep file-06
ls: cannot access 'file-06': No such file or directory
3.4 tee 命令:一边存文件,一边传输

有时候我们既想把命令结果存到文件备份,又想让它继续传给后面的命令过滤,这时候就用tee命令,相当于一个 “三通水管”。
# 创建空文件并查看
[jianghuilin@centos7 ~ 19:36:27]$ > passwd.list
[jianghuilin@centos7 ~ 19:38:54]$ cat passwd.list
# 屏幕直接打印查到的文件,同时把内容覆盖写入 passwd.list 文件
[jianghuilin@centos7 ~ 19:39:04]$ find /etc -name 'passwd' 2>/dev/null | tee passwd.list
/etc/pam.d/passwd
/etc/passwd
[jianghuilin@centos7 ~ 19:40:32]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
# 屏幕直接打印查到的文件,同时把内容追加写入 passwd.list 文件
[jianghuilin@centos7 ~ 19:40:40]$ find /etc -name 'passwd' 2>/dev/null | tee -a passwd.list
/etc/pam.d/passwd
/etc/passwd
[jianghuilin@centos7 ~ 19:45:12]$ cat passwd.list
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
tee 配合管道继续传给下一条命令(对应图里右边第二个进程)
tee 分流后,数据不会断掉,还能继续往后传递过滤、处理
示例:找到 passwd 文件,一边存文件,一边只打印带 pam 的行
# find 输出所有文件 tee:复制一份存 all_result;另一份继续往右流
# 流进 grep 过滤,屏幕只输出 /etc/pam.d/passwd
[jianghuilin@centos7 ~ 19:45:18]$ find /etc -name 'passwd' | tee all_result | grep pam
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/pki/CA/private’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/dhcp’: Permission denied
/etc/pam.d/passwd
find: ‘/etc/selinux/targeted/active’: Permission denied
... ...
find: ‘/etc/sudoers.d’: Permission denied
tee命令极简记忆口诀
管道数据过 tee,一分为两条流;
一路屏幕看得见,一路存入文档头;
加 - a 尾部追加写,不加直接全覆盖。
3.5 输入重定向:让程序从文件读数据
输入重定向用<,让程序不从键盘读取,而是直接从文件里读内容:
# 两种写法效果一致,都是查看文件内容
[jianghuilin@centos7 ~ 19:52:38]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[jianghuilin@centos7 ~ 19:56:08]$ cat < /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
直接敲 cat 回车:默认从键盘读输入
[jianghuilin@centos7 ~ 20:02:34]$ cat
hello # 键盘输入hello后回车
hello # 屏幕上显示hello
ctrl+d # 输入完成,退出
cat << EOF:多行嵌入文档(Here Document)
不用按 Ctrl+D 结束,你自己定一个「结束暗号」(这里是 EOF);
shell 会把暗号之间的所有多行内容,整块喂给 cat 当输入。
# shell读取到EOF时候,代表标准输入完成
[jianghuilin@centos7 ~ 20:08:29]$ cat << EOF
> hello
> world
> EOF
hello
world
cat <<< 'hello world':单行嵌入字符串(Here String)
上面 << EOF 是多行版,这个 <<< 就是单行简化版:
直接把后面的一整串文字,喂给命令当输入,不用写结束标记,一行搞定。
# shell 看到 <<<,直接把后面的 hello world 这串字符串,送到 cat 的进水口(标准输入)
# cat 读到这串内容,立刻原样打印到屏幕,然后自动结束
[jianghuilin@centos7 ~ 20:09:42]$ cat <<< 'hello world'
hello world
判定一个命令是否接收标准输入:最简单的方式就是将文件内容作为标准输入重定向给程序。
还有个写脚本超实用的技巧:多行输入重定向<<EOF,一次性写入多行内容,不用反复 echo:
# 使用cat重定向
[jianghuilin@centos7 ~ 19:56:19]$ cat > multi_lines.txt << EOF
> hello world
> hello python
> hello linux
> EOF
#使用引号一次性写入多行内容
[jianghuilin@centos7 ~ 19:59:12]$ echo 'hello world
> hello python
> hello linux'>multi_lines.txt
[jianghuilin@centos7 ~ 20:02:26]$ cat multi_lines.txt
hello world
hello python
hello linux
执行完之后,三行文字就直接写入文件了,写配置、写脚本的时候特别方便。
最后
今天讲的这三个技能,是 Linux 入门的「三板斧」:
- man 手册让你遇事不求人,摆脱对搜索引擎的依赖,学到的都是官方标准答案;
- vim 让你在任何服务器上都能流畅编辑文本,是运维和开发的必备基本功;
- 重定向和管道则打开了命令行的组合玩法,是 Linux 效率的核心来源。
Linux 学习从来不是死记硬背,而是边用边练,敲得多了自然就熟了。建议大家打开自己的虚拟机,跟着文中的例子亲手敲一遍,印象会深刻很多。
你学 Linux 的时候,遇到过最搞笑的坑是什么?欢迎在评论区留言交流~
更多推荐




所有评论(0)