
Linux 中获取帮助Man 手册man 简介manmanual 简称。man 使用不同 section 区分手册类别。SECTION内容类型1用户命令可执行命令和 shell 程序2系统调用从用户空间调用的内核例程3库函数由程序库提供4特殊文件如设备文件5文件格式用于许多配置文件和结构6游戏过去的有趣程序章节7惯例、标准和其他协议、文件系统8系统管理和特权命令维护任务9Linux 内核 API内核调用man 命令# 查看man命令自身的帮助[zhuyy06centos7 ~]$man--help# man 命令标准语法格式man [选项] [章节号] 手册名Usage:man[OPTION...][SECTION]PAGE...# man 命令将会调用 less 打开 /usr/share/man/ 相关文件# passwd(1) 描述 passwd 命令更改密码[zhuyy06CentOS7 ~]$man1passwd# passwd(5) 解释 /etc/passwd 文件格式[zhuyy06CentOS7 ~]$man5passwd# 翻译不全或有误时可查看英文的帮助手册指定 LANG 变量[zhuyy06centos7 ~]$LANGen_US.utf8mangedit# 或者[zhuyy06centos7 ~]$LANGen_US.utf8[zhuyy06centos7 ~]$mangedit同一关键词可存在多章节手册例如passwdman 1 passwd 描述passwd命令更改密码man 5 passwd 解释/etc/passwd文件格式系统手册文件统一存放路径/usr/share/man/man 命令会调用less打开手册。man手册页面交互操作指令less程序命令结果PageDown或者空格键向前向下滚动一个屏幕PageUp向后向上滚动一个屏幕向下箭头向前向下滚动一行向上箭头向后向上滚动一行d向前向下滚动半个屏幕u向后向上滚动半个屏幕/string在man page中向前向下搜索stringn在man page中重复之前的向前向下搜索N在man page中重复之前的向后向上搜索g转到man page的第一行。G转到man page的最后一行。q退出man 并返回到shell命令提示符# 使用root用户更新man page库[rootcentos7 ~]# 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 下的手册页...0mansubdirectories contained newer manual pages.0manual pages were added.0stray cats were added.17old database entries were purged.# 使用 -k 选线搜索关键字# 模糊检索所有名称/描述包含passwd的手册[zhuyy06centos7 ~]$man-kpasswdchgpasswd(8)- 批量更新组密码 chpasswd(8)- 批量更新密码 gpasswd(1)- administer /etc/group and /etc/gshadow mkpasswd(1)- 为用户产生新口令passwd(5)-(未知的主题)......# 模糊检索所有和ext4文件系统相关的手册[zhuyy06centos7 ~]$man-kext4..... resize2fs(8)- ext2/ext3/ext4filesystem resizer......# 打开检索到的resize2fs手册[zhuyy06centos7 ~]$manresize2fs补充命令的来源安装软件包之后获得shell 自带的工具查看 shell 自带命令# 不建议使用man查询[zhuyy06centos7 ~]$manhistory# 使用 help command[zhuyy06centos7 ~]$helphistory# 输出内容展示history所有可用参数、功能说明history:history[-c][-d 偏移量][n]或history-anrw[文件名]或history-ps参数[参数...]显示或操纵历史列表。 带行号显示历史列表将每个被修改的条目加上前缀 *。 参数 N 会仅列出最后的 N 个条目。......man不适合查询 shell 自带内置命令如 history、cd、echo手册信息不全help 命令名专门用于查看 Shell 内置命令的完整帮助文档重要通用选项--help也用于查看命令帮助。/usr/share/doc可以通过file:///usr/share/doc浏览。一些包还含拓展示例、配置文件模板、脚本、使用说明或用户指导手册。例如/usr/share/doc/dhclient-*。[zhuyy06centos7 ~]$cat/usr/share/doc/dhclient-4.2.5/dhclient.conf.examplewhich 和 whereis 命令# 查看 vi 命令代表什么[zhuyy06centos7 ~]$whichvialiasvivim/usr/bin/vim# whereis 查看关键字对应的程序位置、帮助文档、源码[zhuyy06centos7 ~]$whereismanman: /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[zhuyy06centos7 ~]$whereispasswdpasswd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gzwhich命令查找命令可执行文件真实路径同时会显示命令别名。whereis命令查找命令对应的可执行程序、帮助文档、源码文件全部路径。小结工具适用场景helpShell 内置命令history、cd、echo帮助man外部命令分章节完整手册命令 --help所有外部命令快速简易帮助/usr/share/doc软件配套模板、详细案例文档which查找命令真实可执行路径、查看别名whereis批量查找命令程序 手册 源码全路径课后练习查找并查看以下 man 手册并举例验证。查看 man 命令使用方法。查看 gedit 命令使用方法如何使用 gedit 打开文件、打开文件的时候如何定位到特定行和列。查看 su 命令使用方法不带参数作用和带-作用。查找调整内核kernel启动boot参数手册。查找创建 archive 工具手册并使用对应工具创建 archive 文件和提取 archive 文件。不允许使用 zip 和 unzip。Vim 编辑器Vim 编辑器介绍每一个系统管理员都有一个偏爱的文本编辑器。有的管理员偏爱gedit有的偏爱nano甚至有的偏爱emacs。即使已经有偏爱的编辑器了解vim还是有必要的。因为vim可以安装在任何系统。Vim 版本Linux 系统中可以安装 Vim 三个不同版本vim-minimal只提供 vi 和相关命令。vim-enhanced提供 vim 命令提供语法高亮、拼写检查等特性。vim-X11提供 gvim图形界面下的 Vim。gvim 包含菜单栏。当用户不知道命令的时候可以通过菜单操作。# 安装 vim 工具[rootcentos7 ~]# yum install vimvim 模式command 模式该模式下键盘中的字母有特殊含义。例如 G跳转到最后一行gg跳转到第一行。edit 模式在command模式下按i进入该模式。在该模式可以输入内容。在该模式下按Esc返回command模式。extended command 模式在command模式下按:进入该模式。在该模式下可以保存文件:w退出编辑:q强制退出编辑:q!保存并退出:wq。visual edit 模式在command模式下按 v单个字符选中、V整行选中或者 Ctrlv按矩形选中进入该模式。在该模式下用于选中文本随后可以复制或删除选中的内容。[zhuyy06centos7 ~]$cp/etc/profile ./profile.sh[zhuyy06centos7 ~]$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撤销整行修改。Ctrlr反向撤销与u相反。修改相当于删除后插入s删除当前字符并进入编辑模式。S删除当前行并进入编辑模式。c代表替换动作例如cw删除1个word并进入编辑模式。以此类推 c5w。C从当前删除到最后并进入编辑模式。替换r替换单个字符后回退到命令行模式。R替换模式一直替换直到按Ese返回命令行模式。练习示例示例11使用vim ./profile.sh打开文件。2根据任务要求多次重复此文本输入循环:使用方向键定位光标。按i键进入插入模式。输入文本hello world。按Esc键返回命令模式。若有需要使用u撤销当前行中出错的编辑操作。若有需要按ctrlr键反向撤销当前行中出错的编辑操作。3根据任务要求多次重复此文本删除循环:使用方向键定位光标。按x键删除选定的文本。若有需要使用u撤销当前行中出错的编辑操作。4若要保存或退出可选择下列操作之一来写入或放弃文本编辑:按:w写入保存文件并留在命令模式中进行更多编辑。按:wq写入文件并退出 Vim。按:q!退出 Vim但放弃上次写入以来进行的所有更改。示例21使用 vim ./profile.sh 打开文件。2根据任务要求多次重复此文本选择循环。使用方向键将光标定位到第一个字符。按v键进入可视模式选择对象。使用方向键将光标定位到最后一个字符。按 y 键拖拉复制所选内容。使用方向键将光标定位到插入位置。按 p 键放置粘贴所选内容。3若要保存或退出可选择下列操作之一来写入或放弃文本编辑。按:w写入保存文件并留在命令模式中进行更多编辑。按:wq写入文件并退出 Vim。按:q! 退出 Vim但放弃上次写入以来进行的所有更改。示例3完成 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# 准备配置文件[zhuyy06centos7 ~]$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保存退出。Vim 配置两个位置全局/etc/vimrc给所有用户设置一些默认值。用户~/.vimrc特定用户的个性化设置。常见的设置命令[zhuyy06centos7 ~]$vim~/.vimrcsetnumbersetshowcmdsetaits2setcursorcolumnsetcursorline# 参数说明# 显示行号 set number# 显示操作命令 set showcmd# ai自动缩进tstabspace 使用 2 个空格代替 set ai ts2# 列高亮对齐显示 set cursorcolumn# 行高亮对齐显示 set cursorline配置项详细解释set number在编辑器左侧显示行号。便于快速定位代码行特别是在调试或查看错误信息时非常有用。set showcmd在屏幕右下角显示当前未完成的命令。例如在命令模式下输入d2w时会实时显示已输入的字符帮助确认操作。set ai启用自动缩进autoindent。当你在新行按回车时Vim 会自动保持与上一行相同的缩进级别这对于编写结构化代码如 Python、Shell、C 等非常方便能保持代码整洁。set ts2设置制表符Tab的宽度为 2 个空格。ts是tabstop的缩写。这意味着当你按下 Tab 键时Vim 会显示相当于 2 个空格的视觉宽度。注意这仅改变显示宽度不改变文件中实际的 Tab 字符。通常与expandtab选项配合使用将 Tab 转换为空格。set cursorcolumn高亮显示当前光标所在的列垂直方向。这有助于对齐代码特别是在编写需要严格对齐的表格或数据时。set cursorline高亮显示当前光标所在的行水平方向。让你在滚动时能快速找到光标位置减少视觉疲劳。补充常用配置示例除了上述基础配置以下是一些提升编辑体验的常用设置 启用语法高亮 syntax on 启用搜索高亮输入搜索词后所有匹配项会高亮显示sethlsearch 输入搜索词时实时高亮匹配项 set incsearch 将 Tab 键输入转换为空格配合ts2实现软 Tabsetexpandtab 设置退格键可以删除缩进、行尾和跨行删除 set backspaceindent,eol,start 显示匹配的括号setshowmatch 设置历史命令记录条数 set history1000 设置编码为 UTF-8避免中文乱码setencodingutf-8setfileencodingutf-8 设置文件格式为 Unix避免 Windows 换行符问题setfileformatunix配置说明syntax on根据文件类型如 .sh、.py、.java启用语法高亮使代码结构更清晰。set hlsearch和set incsearch搜索时高亮所有匹配项并实时显示匹配提升查找效率。set expandtab将 Tab 键输入自动转换为空格。结合ts2可以确保在不同编辑器和环境中缩进显示一致避免因 Tab 和空格混用导致的格式问题。set backspaceindent,eol,start允许退格键删除缩进、行尾字符并可以跨行删除符合现代编辑器的习惯。set showmatch当输入右括号如)、]、}时会短暂高亮匹配的左括号帮助检查括号配对。set history1000增加命令历史记录条数方便回溯之前执行的命令。编码和文件格式设置确保文件以 UTF-8 编码保存并使用 Unix 换行符LF避免跨平台协作时的兼容性问题。将上述配置添加到~/.vimrc文件中保存退出后重新打开 Vim 即可生效。你可以根据个人习惯调整或添加更多配置。课后练习完成示例 1、示例 2、示例 3。Linux 输入输出重定向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的所有文件[zhuyy06centos7 ~]$find/etc-namepasswdfind: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够 find: ‘/etc/grub.d’: 权限不够 /etc/pam.d/passwd /etc/passwd find: ‘/etc/dhcp’: 权限不够 find: ‘/etc/lvm/archive’: 权限不够 find: ‘/etc/lvm/backup’: 权限不够.......# 将找到的文件名清单覆盖写入到passwd.list文件中[zhuyy06centos7 ~]$find/etc-namepasswd1passwd.list find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够 find: ‘/etc/grub.d’: 权限不够......[zhuyy06centos7 ~]$catpasswd.list /etc/pam.d/passwd /etc/passwd# 补充说明# 1passwd.list 可简写为 passwd.list# 1 和 之间不能有空格# 将多个文件内容合并为 1 个[zhuyy06centos7 ~]$cat/etc/fstab /etc/hostsallinone# 将找到的文件名清单追加写入到passwd.list文件中[zhuyy06centos7 ~]$find/etc-namepasswd1passwd.list find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够 find: ‘/etc/grub.d’: 权限不够......[zhuyy06centos7 ~]$catpasswd.list /etc/pam.d/passwd /etc/passwd /etc/pam.d/passwd /etc/passwd# 将错误信息覆盖写入到passwd.err文件中[zhuyy06centos7 ~]$find/etc-namepasswd2passwd.err /etc/pam.d/passwd /etc/passwd[zhuyy06centos7 ~]$catpasswd.err find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够 find: ‘/etc/grub.d’: 权限不够......# 将错误信息扔掉[zhuyy06centos7 ~]$find/etc-namepasswd2/dev/null /etc/pam.d/passwd /etc/passwd# 将错误信息追加写入到passwd.err文件中[zhuyy06centos7 ~]$find/etc-namepasswd2passwd.err /etc/pam.d/passwd /etc/passwd[zhuyy06centos7 ~]$catpasswd.err find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够 find: ‘/etc/grub.d’: 权限不够......# 将错误信息、正确信息覆盖写入到不同文件[zhuyy06centos7 ~]$find/etc-namepasswdpasswd.list2passwd.err# 将错误信息、正确信息追加写入到不同文件[zhuyy06centos7 ~]$find/etc-namepasswdpasswd.list2passwd.err# 用于清空文件内容也可用于创建一个空文件 testfile[zhuyy06centos7 ~]$testfile# 如果不存在则创建一个文件如果文件存在则啥也不干。[zhuyy06centos7 ~]$testfile# 同时将错误信息、正确信息 覆盖 写入到相同文件[zhuyy06centos7 ~]$find/etc-namepasswdpasswd.all# 同时将错误信息、正确信息 追加 写入到相同文件[zhuyy06centos7 ~]$find/etc-namepasswdpasswd.all标准输出重定向到程序管道符|实现将上一个命令的输出作为标准输入传递给下一个命令。# 示例1 查看哪个 man page 可以 resize ext4 文件系统大小# 搜索所有 ext4 相关手册并保存到 ext4.man 文件中[zhuyy06centos7 ~]$man-kext4ext4.man# 过滤 ext4.man 文件中含有 resize 的行[zhuyy06centos7 ~]$grepresizer ext4.man# 以上两个命令合并为一行[zhuyy06centos7 ~]$man-kext4|grepresizer resize2fs(8)- ext2/ext3/ext4filesystem resizer# 示例2 获取 ens33 网卡 IP 地址[zhuyy06centos7 ~]$ipaddr|grepens33$|awk{print $2}|cut-d/-f110.1.8.88**注意**管道符号后的命令必须能够接收标准输入例如ls不接收管道传递过来的标准输入。[zhuyy06centos7 ~]$echo/etc/passwd|ls-l总用量2-rw-rw-r--.1laoma laoma012月1515:08file-rw-rw-r--.1laoma laoma012月1515:08 file-a补充| 标准错误和标准输出同时传递给下一个命令作为下一个命令的标准输入。[zhuyy06centos7 ~]$ls-lfile-{01..06}ls: cannot accessfile-04:No suchfileor directory ls: cannot accessfile-05:No suchfileor directory ls: cannot accessfile-06:No suchfileor directory -rw-rw-r--.1student student0Dec2414:53 file-01 -rw-rw-r--.1student student0Dec2414:53 file-02 -rw-rw-r--.1student student0Dec2414:53 file-03[zhuyy06centos7 ~]$ls-lfile-{01..06}|grepfile-06 ls: cannot accessfile-04:No suchfileor directory ls: cannot accessfile-05:No suchfileor directory ls: cannot accessfile-06:No suchfileor directory[zhuyy06centos7 ~]$ls-lfile-{01..06}|grepfile-03 ls: cannot accessfile-04:No suchfileor directory ls: cannot accessfile-05:No suchfileor directory ls: cannot accessfile-06:No suchfileor directory -rw-rw-r--.1student student0Dec2414:53 file-03# |[zhuyy06centos7 ~]$ls-lfile-{01..06}|grepfile-06 ls: cannot accessfile-06:No suchfileor directorytee 命令tee 命令作用接收管道传递过来的 stdin并继续作为 stdout 输出。[zhuyy06centos7 ~]$passwd.list[zhuyy06centos7 ~]$catpasswd.list# tee 命令覆盖保存到文件[zhuyy06centos7 ~]$find/etc-namepasswd2/dev/null|teepasswd.list /etc/pam.d/passwd /etc/passwd[zhuyy06centos7 ~]$catpasswd.list /etc/pam.d/passwd /etc/passwd# tee 命令追加保存到文件[zhuyy06centos7 ~]$find/etc-namepasswd2/dev/null|tee-apasswd.list /etc/pam.d/passwd /etc/passwd[zhuyy06centos7 ~]$catpasswd.list /etc/pam.d/passwd /etc/passwd /etc/pam.d/passwd /etc/passwd# tee 的标准输出继续通过管道传递下去[zhuyy06centos7 ~]$man-kpasswd|teepasswd.man|greppasswd标准输入重定向给程序# 常规查看文件[zhuyy06centos7 ~]$cat/etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6# cat 命令标准输入数据[zhuyy06centos7 ~]$cat/etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain[zhuyy06centos7 ~]$cathello# 键盘输入hello后回车hello# 屏幕上显示helloCtrlD# 输入完成退出# shell 读取到 EOF 时候代表标准输入完成[zhuyy06centos7 ~]$catEOFhelloworldEOF hello world[zhuyy06centos7 ~]$cathello worldhello world判定一个命令是否接收标准输入最简单的方式就是将文件内容作为标准输入重定向给程序。**思考**如何一次性将多行内容写入到文件中# 方法1使用引号[zhuyy06centos7 ~]$echohello world hello python hello linuxmulti_lines.txt[zhuyy06centos7 ~]$catmulti_lines.txt hello world hello python hello linux# 方法2使用cat重定向[zhuyy06centos7 ~]$catmulti_lines.txtEOFhello worldhello pythonhello linuxEOF[zhuyy06centos7 ~]$catmulti_lines.txt hello world hello python hello linux课后练习谈谈你对输出重定向的理解用示例说明。谈谈你对管道符|的理解用示例说明。谈谈你对tee命令的理解用示例说明。谈谈你对标准输入重定向的理解用示例说明。