Linux 入门核心实操:帮助命令、Vim 操作、输入输出重定向完整记录
·
linux中获取帮助
man手册
| SECTION | 内容类型 |
|---|---|
| 1 | **用户命令(**可执行命令和shell程序) |
| 2 | 系统调用(从用户空间调用的内核例程) |
| 3 | 库函数(由程序库提供) |
| 4 | 特殊文件(如设备文件) |
| 5 | 文件格式(用于许多配置文件和结构) |
| 6 | 游戏(过去的有趣程序章节) |
| 7 | 惯例、标准和其他(协议、文件系统) |
| 8 | 系统管理和特权命令(维护任务) |
| 9 | Linux内核API(内核调用) |
# 查看man命令自带帮助信息
[meng@centos7 ~ 18:49:41]$ #man --help
# 查看手册章节1:passwd命令使用说明
[meng@centos7 ~ 18:50:00]$ man 1 passwd
# 查看手册章节5:/etc/passwd配置文件格式说明
[meng@centos7 ~ 18:50:06]$ man 5 passwd
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库
[root@centos7 ~]# mandb
正在删除 /usr/share/man 里的旧数据库条目...
mandb: 警告:/usr/share/man/man8/fsck.fat.8.manpage-fix.gz:忽略错误的文件名
... ...
正在处理 /usr/share/man/en 下的手册页...
正在删除 /usr/local/share/man 里的旧数据库条目...
正在处理 /usr/local/share/man 下的手册页...
0 man subdirectories contained newer manual pages.
0 manual pages were added.
0 stray cats were added.
17 old database entries were purged.
# 查看resize2fs命令手册(ext文件系统扩容/缩小工具)
[meng@centos7 ~ 18:52:44]$ man resize2fs
# 根据关键词搜索相关手册页面
[meng@centos7 ~ 18:52:33]$ man -k exts
# 搜索包含passwd关键词的所有手册
[meng@centos7 ~ 18:50:16]$ man -k passwd
# 查看history手册页面
[meng@centos7 ~ 18:54:30]$ man history
# 查看shell内置命令history帮助(内置命令不能用man,只能用help)
[meng@centos7 ~ 18:54:39]$ help history
# which:查找命令对应的可执行程序,同时识别别名
[meng@centos7 ~ 18:54:53]$ which vi
alias vi='vim'
/usr/bin/vim
# whereis:查找命令程序、源码、man手册路径
[meng@centos7 ~ 18:55:40]$ whereis vi
vi: /usr/bin/vi /usr/share/man/man1/vi.1.gz /usr/share/man/man1p/vi.1p.gz
# whereis 查找passwd命令、相关配置文件、手册文件位置
[meng@centos7 ~ 18:55:47]$ whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
vim
- command 模式:该模式下键盘中的字母有特殊含义。例如G,跳转到最后一行;gg,跳转到第一行。
- edit 模式:在
command模式下按i,进入该模式。在该模式可以输入内容。在该模式下按Esc返回command模式。 - extended command 模式:在
command模式下按:,进入该模式。在该模式下,可以保存文件(:w),退出编辑(:q),强制退出编辑(:q!),报错并退出(:wq)。 - visual edit 模式:在
command模式下按 v(单个字符选中)、V(整行选中)或者ctrl+v(按矩形选中),进入该模式。在该模式下,用于选中文件,随后可以复制或删除选中的内容。

定位文件内容:
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返回命令行模式。
: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,保存退出。
linux 输入输出重定向

上图显示了 Unix/Linux 系统中进程(PROCESS)的输入输出流(I/O Streams)模型,核心是 “标准流(Standard Streams)” 的概念,用于描述进程如何与外部(如键盘、屏幕、文件)进行数据交互。
标准流的核心组成
- stdin(标准输入,编号 0):
- 是进程接收输入数据的通道,默认连接到键盘,程序通过它读取用户输入(如
scanf、read等操作会从stdin获取数据)。 - 用法为仅读取(只能从该通道输入数据到进程)。
- stdout(标准输出,编号 1):
- 是进程输出正常结果的通道,默认连接到终端屏幕,程序的普通打印(如
printf、echo等)会输出到stdout。 - 用法为仅写入(进程只能向该通道输出数据)。
- stderr(标准错误,编号 2):
- 是进程输出错误信息的通道,默认也连接到终端屏幕,用于区分正常输出和错误提示(如程序崩溃、逻辑错误的提示信息)。
- 用法为仅写入(专门用于输出错误内容)。
- 3+ 号通道(其他文件,filename):
- 代表进程与自定义文件的交互通道(非标准流),没有默认连接,需要手动指定文件。
- 用法为读取和 / 或写入(可根据需求对文件进行读、写操作)。
流程逻辑
- 输入:用户通过键盘向
stdin输入数据,进程从stdin读取这些输入。 - 输出:进程将正常结果写入
stdout,错误信息写入stderr,两者默认都显示在终端;同时,进程也可通过 3+ 号通道与其他文件进行数据的读写交互。
这种模型是 Unix/Linux 系统中 “一切皆文件” 思想的体现,让进程能以统一的方式处理不同来源 / 目标的数据,也为 重定向(Redirect) 等操作(如把 stdout 输出到文件、把文件内容作为 stdin 输入)提供了基础。
输入
# 在/etc目录搜索名称为passwd的文件,普通用户遇到无权限目录会输出报错
[meng@centos7 ~ 19:03:09]$ find /etc -name 'passwd'
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/grub.d’: 权限不够
……(其余权限报错省略)
# > 覆盖重定向:标准正确结果存入passwdlist,错误信息存入passwderr
[meng@centos7 ~ 19:08:21]$ find /etc -name 'passwd' >passwdlist 2>passwderr
# 同时查看两个保存输出的文件
[meng@centos7 ~ 19:09:10]$ cat passwdlist passwderr
/etc/pam.d/passwd
/etc/passwd
find: ‘/etc/grub.d’: 权限不够
……(其余报错省略)
# >> 追加重定向,文件原有内容保留,新结果追加到末尾,内容会重复
[meng@centos7 ~ 19:10:02]$ find /etc -name 'passwd' >>passwdlist 2>>passwderr
# >覆盖写入,每次执行先清空文件,不会产生重复内容
[meng@centos7 ~ 19:10:17]$ find /etc -name 'passwd' >passwdlist 2>passwderr
# 2>/dev/null 将错误输出丢入黑洞设备,屏蔽所有权限不足提示,只展示查找结果
[meng@centos7 ~ 19:10:38]$ find /etc -name 'passwd' 2>/dev/null
/etc/pam.d/passwd
/etc/passwd
# >文件名:快速清空目标文件内所有内容
[meng@centos7 ~ 19:11:13]$ >passwderr
# 查看清空后的文件(无任何输出)
[meng@centos7 ~ 19:11:36]$ cat passwderr
# 列出当前目录所有文件
[meng@centos7 ~ 19:11:48]$ ls
passwderr passwdlist 公共 视频 文档 音乐 ……
# >p 不存在则创建空文件p;文件已存在则清空p内容
[meng@centos7 ~ 19:11:52]$ >p
# 查看目录更新结果
[meng@centos7 ~ 19:11:59]$ ls
p passwderr passwdlist 公共 视频 文档 音乐 ……
# &> 代表标准输出+错误输出一起覆盖写入passwdall
[meng@centos7 ~ 19:12:23]$ find /etc -name 'passwd' &>passwdall
[meng@centos7 ~ 19:15:52]$ cat passwdall
find: ‘/etc/grub.d’: 权限不够
……(中间报错省略)
/etc/pam.d/passwd
/etc/passwd
……(剩余报错省略)
# 将分割线覆盖写入passwdall,原有内容全部清空
[meng@centos7 ~ 19:15:58]$ echo =============== >passwdall
# &>> 标准输出+错误输出一起追加写入文件,不清空原有内容
[meng@centos7 ~ 19:16:32]$ find /etc -name 'passwd' &>>passwdall
[meng@centos7 ~ 19:16:54]$ cat passwdall
===============
find: ‘/etc/grub.d’: 权限不够
……(中间报错省略)
/etc/pam.d/passwd
/etc/passwd
……(剩余报错省略)
标准输出重定向到程序
管道符(|)实现:将上一个命令的输出作为标准输入传递给下一个命令

# man -k 检索ext4相关手册,管道交给grep过滤包含res的行
[meng@centos7 ~ 19:20:21]$ man -k ext4 | grep res
resize2fs (8) - ext2/ext3/ext4 file system resizer
# ip addr查看网卡信息;筛选以ens33结尾行;awk打印第2列;cut以/分隔,取第一段IP地址
[meng@centos7 ~ 19:21:40]$ ip addr | grep 'ens33$' | awk '{print $2}' | cut -d/ -f1
10.1.8.10
# echo输出内容只是打印到标准输出,管道ls不会接收该输出,ls直接列出当前目录内容
[meng@centos7 ~ 19:23:52]$ echo /etc/passwd | ls
p passwderr 公共 视频 文档 音乐
passwdall passwdlist 模板 图片 下载 桌面
# |& 等价于 2>&1 | ,标准输出与错误输出合并后交给grep过滤
[meng@centos7 ~ 19:29:14]$ ls -l file-{01..06} |&grep file-06
ls: 无法访问file-06: 没有那个文件或目录
tee 命令

# find查找文件,屏蔽报错;tee 同时在屏幕打印输出,并覆盖写入passwdlist
[meng@centos7 ~ 19:33:34]$ find /etc -name 'passwd' 2>/dev/null | tee passwdlist
/etc/pam.d/passwd
/etc/passwd
# 查看tee保存到文件中的内容
[meng@centos7 ~ 19:33:58]$ cat passwdlist
/etc/pam.d/passwd
/etc/passwd
# tee -a 追加模式:屏幕输出内容,同时追加写入文件,不清空原有内容
[meng@centos7 ~ 19:34:01]$ find /etc -name 'passwd' 2>/dev/null | tee -a passwdlist
/etc/pam.d/passwd
/etc/passwd
# 文件内出现重复内容,因为使用-a追加
[meng@centos7 ~ 19:34:14]$ cat passwdlist
/etc/pam.d/passwd
/etc/passwd
/etc/pam.d/passwd
/etc/passwd
# man -k 查询手册,tee先覆盖写入passwdlist,再将内容传给后面grep过滤展示
[meng@centos7 ~ 19:34:18]$ man -k passwd|tee passwdlist |grep passwd
chgpasswd (8) - 批量更新组密码
chpasswd (8) - 批量更新密码
……(后续内容省略)
标准输入重定向给程序
# 查看主机名配置文件内容
[meng@centos7 ~ 19:36:00]$ cat /etc/hostname
centos7.meng.cloud
# < 输入重定向,把文件作为cat的输入源(cat默认参数方式等价效果)
[meng@centos7 ~ 19:37:53]$ cat </etc/hostname
centos7.meng.cloud
# cat 不带参数:默认从键盘(标准输入)读取,回车输入内容,Ctrl+D结束
[meng@centos7 ~ 19:38:01]$ cat
hello
hello
# <<eof here-doc 此处文档,多行输入,输入eof结束录入
[meng@centos7 ~ 19:38:19]$ cat <<eof
> 1
> 2
> 3
> eof
1
2
3
[meng@centos7 ~ 19:38:41]$ #可直接复制指令执行
# echo输出多行文本,覆盖写入1.txt
[meng@centos7 ~ 19:41:06]$ echo 'hello
1
2
3
4'>1.txt
# 查看生成文件
[meng@centos7 ~ 19:41:39]$ cat 1.txt
hello
1
2
3
4
# 结合 > 和 here-doc,多行内容覆盖写入1.txt
[meng@centos7 ~ 19:41:51]$ cat >1.txt <<eof
> 1234
> efo
> eof
[meng@centos7 ~ 19:42:38]$ cat 1.txt
1234
efo
多行输入,输入eof结束录入
[meng@centos7 ~ 19:38:19]$ cat <<eof
> 1
> 2
> 3
> eof
1
2
3
[meng@centos7 ~ 19:38:41]$ #可直接复制指令执行
# echo输出多行文本,覆盖写入1.txt
[meng@centos7 ~ 19:41:06]$ echo 'hello
1
2
3
4'>1.txt
# 查看生成文件
[meng@centos7 ~ 19:41:39]$ cat 1.txt
hello
1
2
3
4
# 结合 > 和 here-doc,多行内容覆盖写入1.txt
[meng@centos7 ~ 19:41:51]$ cat >1.txt <<eof
> 1234
> efo
> eof
[meng@centos7 ~ 19:42:38]$ cat 1.txt
1234
efo
更多推荐


所有评论(0)