linux学习第四天
linux学习第四天vim编辑器每一个系统管理员都有一个偏爱的文本编辑器。有的管理员偏爱gedit有的偏爱nano甚至有的偏爱emacs。即使已经有偏爱的编辑器了解vim还是有必要的。因为vim可以安装在任何系统。vim版本Linux 系统中可以安装vim三个不同版本vim-minimal只提供vi和相关命令。vim-enhanced提供vim命令提供语法高亮拼写检查等特性。vim-X11提供gvim图形界面下的vim。gvim包涵菜单栏。当用户不知道命令的时候可以通过菜单操作。#安装vim工具#一定要在管理员账户下安装普通用户未授权的话操作等级不够[rootcentos7 ~20:33:12]# yum install vimcommand 模式该模式下键盘中的字母有特殊含义。例如G跳转到最后一行gg跳转到第一行。edit 模式在command模式下按i进入该模式。在该模式可以输入内容。在该模式下按Esc返回command模式。extended command 模式在command模式下按:进入该模式。在该模式下可以保存文件(:w)退出编辑:q强制退出编辑:q!报错并退出:wq。visual edit 模式在command模式下按 v单个字符选中、V整行选中或者ctrlv按矩形选中进入该模式。在该模式下用于选中文件随后可以复制或删除选中的内容。[ljycentos7 ~20:32:38]$cp/etc/profile ./profile.sh[ljycentos7 ~20:39:19]$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返回命令行模式。vim 配置两个位置全局/etc/vimrc给所有用户设置一些默认值。用户~/.vimrc特定用户的个性化设置。常见的设置命令[ljycentos7 ~20:39:55]$vim~/.vimrcsetnumbersetshowcmdsetaits2setcursorcolumnsetcursorline# 参数说明# 显示行号 set number# 显示操作命令 set showcmd# ai自动缩进tstabspace使用2个空格代替 set ai ts2# 列高亮对齐显示 set cursorcolumn# 行高亮对齐显示 set cursorlineLinux 输入输出重定向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输入提供了基础。[ljycentos7 ~20:57:09]$find/etc/-namepasswdfind: ‘/etc/grub.d’: 权限不够 find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够 /etc/pam.d/passwd find: ‘/etc/dhcp’: 权限不够 /etc/passwd.......# 查找 /etc 目录下 文件名是passwd的所有文件# 将找到的文件名清单覆盖写入到passwd.list文件中[ljycentos7 ~20:57:31]$find/etc-namepasswd1passwd.list#数字和符号中间一定不要隔开find: ‘/etc/grub.d’: 权限不够 find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够 find: ‘/etc/dhcp’: 权限不够 find: ‘/etc/selinux/targeted/active’: 权限不够 find: ‘/etc/selinux/final’: 权限不够 find: ‘/etc/lvm/archive’: 权限不够 find: ‘/etc/lvm/backup’: 权限不够 find: ‘/etc/lvm/cache’: 权限不够 find: ‘/etc/polkit-1/rules.d’: 权限不够 find: ‘/etc/polkit-1/localauthority’: 权限不够 find: ‘/etc/firewalld’: 权限不够 find: ‘/etc/audisp’: 权限不够 find: ‘/etc/audit’: 权限不够 find: ‘/etc/ipsec.d’: 权限不够 find: ‘/etc/libvirt’: 权限不够 find: ‘/etc/cups/ssl’: 权限不够 find: ‘/etc/sudoers.d’: 权限不够#发现只剩下权限不够的信息[ljycentos7 ~21:00:48]$catpasswd.list /etc/pam.d/passwd /etc/passwd#将多个文件合并为一个[ljycentos7 ~21:01:02]$cat/etc/fstab /etc/hostsallinone[ljycentos7 ~21:02:48]$catallinone## /etc/fstab# Created by anaconda on Tue Jul 14 10:25:55 2026## Accessible filesystems, by reference, are maintained under /dev/disk# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#/dev/mapper/centos-root / xfs defaults00UUID7cc93785-0a49-4e9a-8cb1-4a6aeb2dc551 /boot xfs defaults00/dev/mapper/centos-home /home xfs defaults00/dev/mapper/centos-swap swap swap defaults00127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6#将找到的文件名追加写入到passwd。list文件中追加不会覆盖之前的文件会在下面继续写入[ljycentos7 ~21:03:17]$find/etc-namepasswd1passwd.list find: ‘/etc/grub.d’: 权限不够 find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够.....[ljycentos7 ~21:05:02]$catpasswd.list /etc/pam.d/passwd /etc/passwd /etc/pam.d/passwd /etc/passwd#是在原有的信息下继续写入的之前的信息还在#将错误的信息丢弃[ljycentos7 ~21:05:30]$find-namepasswd2/dev/null#/dev/null黑洞设备写入的数据直接丢弃#作用屏蔽所有权限拒绝、无法访问目录的报错只输出找到的结果# 同时将错误信息、正确信息 覆盖 写入到相同文件[ljycentos7 ~21:08:57]$find/etc-namepasswdpasswd.list# 同时将错误信息、正确信息 追加 写入到相同文件[ljycentos7 ~21:12:13]$find/etc-namepasswdpasswd.list标准输出重定向到程序管道符|实现将上一个命令的输出作为标准输入传递给下一个命令。# 示例1 查看哪个man page 可以resize ext4文件系统大小# 搜索所有ext4相关手册并保存到ext4.man文件中[ljycentos7 ~21:12:41]$man-kext4ext4.man# 过滤ext4.man文件中含有resize的行[ljycentos7 ~21:37:12]$grepresizer ext4.man resize2fs(8)- ext2/ext3/ext4filesystem resizer# 以上两个命令和合并为一行[ljycentos7 ~21:37:49]$man-kext4|grepresizer resize2fs(8)- ext2/ext3/ext4filesystem resizer#两个命令合并简单话了我们的操作可以理解为搜索于ext4相关的手册把其中于resize有关的筛选出来**注意**管道符号后的命令必须能够接收标准输入例如ls不接收管道传递过来的标准输入。补充| 标准错误和标准输出同时传递给下一个命令作为下一个命令的标准输入。上一个命令错误管道符也会将这个错误的输出当成下一个命令的标准输入