四、Linux文件编辑工具vim及常见文件操作命令
4.1 vi/vim 的使用
vi或vim是Linux最常用的文本编辑器工具,vi或vim没有图形界面编辑器那样单机鼠标的简单操作,但vi编辑器在系统管理、服务器管理中,永远是图形界面的编辑器所不能比的。
基本上 vi/vim 共分为三种模式 :
- 命令模式(Command mode)
- 输入模式(Insert mode)
- 底线命令模式(Last line mode)
命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
命令 | 作用 |
dd | 删除(剪切)光标所在的整行 |
5dd | 删除(剪切)从光标处开始的5行 |
yy | 复制光标所在整行 |
5yy | 复制从光标处开始的5行 |
n | 显示搜索命令定位到下一个字符串 |
N | 显示搜索命令定位到的上一个字符串 |
u | 撤销上一步操作 |
p | 将之前删除dd或者复制yy过的数据粘贴到光标后面 |
G | 文本最后面 |
gg | 文本开始 |
shift+^ | 移动到行头 |
shift+$ | 移动到行尾 |
x | 删除光标所在的字符 |
输入模式
在命令模式输入 iao 三个字母中的任意一个就能输入内容了,此时底部出现insert 时表示当前处在输入状态。
输入模式退出到命令模式使用ESC键
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
主要保存或者退出文件,以及设置Vim编辑器的工作环境,还可以让用户执行外部的Linux命令或跳转所编写文档的特定行数。
命令 | 作用 |
: w | 保存 |
: q | 退出 |
: q ! | 强制退出 |
: wq! | 强制保存退出 |
: set nu | 显示行号 |
: set nonu | 不显示行号 |
: 命令 | 执行该命令 |
: 整数 | 跳转到该行 |
:s/one/two | 将当前光标所在行的第一个one替换成two |
:s/one/two/g | 将当前光标所在行的所有one替换成two |
:%s/one/two/g | 将全文中的所有one替换成two |
?字符串 | 在文本中从下至上搜索该字符串 |
/字符串 | 在文本中从上至下搜索该字符串 |
4.2 Linux文件内容查看命令
cat(显示文件内容)
由第一行开始显示文件内容
cat [-AbEnTv]
选项与参数:
- -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
- -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
- -E :将结尾的断行字节 $ 显示出来;
- -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
- -T :将 [tab] 按键以 ^I 显示出来;
- -v :列出一些看不出来的特殊字符
示例:查看 a.info 文件里面的内容
tac(倒着显示文件内容)
ac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl(显示行号)
nl [-bnw] 文件
选项与参数:
- -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n); -b t :如果有空行,空的那一行不要列出行号(默认值);
- -n :列出行号表示的方法,主要有三种: -n ln :行号在荧幕的最左方显示; -n rn :行号在自己栏位的最右方显示,且不加 0 ; -n rz :行号在自己栏位的最右方显示,且加 0 ;
- -w :行号栏位的占用的位数。
示例:显示 a.info 的行号
more(一页一页的显示文件内容)
在 more 这个程序的运行过程中,你有几个按键可以按的:
- 空白键 (space):代表向下翻一页;
- Enter :代表向下翻『一行』;
- /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
- :f :立刻显示出档名以及目前显示的行数;
- q :代表立刻离开 more ,不再显示该文件内容。
- b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
less(往前翻页)
一页一页翻动,以下实例输出/etc/man.config文件的内容:
less运行时可以输入的命令有:
- 空白键 :向下翻动一页;
- [pagedown]:向下翻动一页;
- [pageup] :向上翻动一页;
- /字串 :向下搜寻『字串』的功能;
- ?字串 :向上搜寻『字串』的功能;
- n :重复前一个搜寻 (与 / 或 ? 有关!)
- N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
- q :离开 less 这个程序;
head(只看头几行)
取出文件前面几行
head [-n number] 文件
选项与参数:
- -n :后面接数字,代表显示几行的意思
tail(只看尾几行)
tail [-n number] 文件
选项与参数:
- -n :后面接数字,代表显示几行的意思
- -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
4.3 Linux打包压缩与搜索命令
文件打包和压缩(tar)
文件打包就是将多个文件打包成一个文件。
tar [选项] [文件]
选项:
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩 Gzip
-x 解包.tar文件
示例:将test文件夹下的 文件打包并压缩。
示例:将package.tar.gz 文件中的文件解压到当前test文件夹
示例:将文件解压缩到/usr/local文件下
gzip/gunzip压缩
gzip+文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件) gunzip+文件.gz (功能描述:解压缩文件命令)
示例:将a.info 文件压缩
示例:将a.info.gz 文件解压缩
搜索命令(grep)
grep 命令用于在文本中执行关键词搜索,并显示匹配的结果。
grep [参数 查找内容 源文件]
选项:
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择—仅列出没有“关键词”的行
-E :开启扩展(Extend)的正则表达式
示例:搜索 a.info 文件中是否存在 "is" 字符串,并显示行号
搜索命令(find)
find 命令用于按照指定条件来查找文件。
find [查找路径] 寻找条件 操作
选项:
-name 匹配名称
-perm 匹配权限(mode 为完全匹配,-mode 为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n 指 n 天以内,+n 指 n 天以前)
-atime -n +n 匹配访问文件的时间(-n 指 n 天以内,+n 指 n 天以前)
-ctime -n +n 匹配修改文件权限的时间(-n 指 n 天以内,+n 指 n 天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件 f1 新但比 f2 旧的文件
--type b/d/c/p/l/f 匹配文件类型(后面的字幕参数依次表示块设备、目录、字符设备、管道、 链接文件、文本文件)
-size 匹配文件的大小(+50KB 为查找超过 50KB 的文件,而-50KB 为查找小于 50KB 的文件)
-prune 忽略某个目录 -exec …… {}\; 后面可跟用于进一步处理搜索结果的命令(下文会有演示)
示例:查找当前文件夹下是否存在一个后缀是log的文件
示例:全局搜索a.info 文件
五、Linux常用系统工作命令
reboot 命令
reboot 命令用于重启系统,其格式为 reboot。
由于重启计算机这种操作会涉及硬件资源的管理权限,因此默认只能使用 root 管理员来 重启,其命令如下:
[root@localhost /]# reboot
poweroff 命令
poweroff 命令用于关闭系统,其格式为 poweroff。
该命令与 reboot 命令相同,都会涉及硬件资源的管理权限,因此默认只有 root 管理员才 可以关闭电脑,其命令如下:
[root@localhost /]# poweroff
wget 命令
wget 命令用于在终端中下载网络文件。
wget [参数] 下载地址
参数:
-b 后台下载模式
-P 下载到指定目录
-t 最大尝试次数
-c 断点续传
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载
六、Linux重定向、管道符和环境变量
6.1 输入输出重定向
把多个 Linux 命令适当地组合到一起,使其协同工作,以便我们更加高效地处理数据。
- 标准输入重定向(STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命令中输入。
- 标准输出重定向(STDOUT,文件描述符为 1):默认输出到屏幕。
- 错误输出重定向(STDERR,文件描述符为 2):默认输出到屏幕。
输入重定向作用表
符号 | 作用 |
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 分界符 | 从标准输入中读入,直到遇见分界符才停止 |
命令 < 文件1 > 文件2 | 将文件 1 作为命令的标准输入并将标准输出到文件 2 |
输出重定向作用表
符号 | 作用 |
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件 2>$1或命令 & >>文件 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的 后面) |
示例:输出 a.info 文件的详细信息并将该文件的信息保存到该文件中。
示例:将错误数据输入到error.log 文件
6.2 管道命令符
管道命令符其执行格式为“命令 A | 命令 B”。命令符的作用也 可以用一句话来概括“把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”。
示例:
找出被限制登录用户的命令是 grep "/sbin/nologin" /etc/passwd 统计文本行数的命令则是 wc -l
现在要做的就是把搜索命令的输出值传递给统计命令,即把原本要输出到屏幕的用户信 息列表再交给 wc 命令作进一步的加工,因此只需要把管道符放到两条命令之间即可,具体如 下。这简直是太方便了!
grep "/sbin/nologin" /etc/passwd | wc -l
这个管道符就像一个法宝,我们可以将它套用到其他不同的命令上,比如用翻页的形 式查看/etc 目录中的文件列表及属性信息(这些内容默认会一股脑儿地显示到屏幕上,根本 看不清楚):
ls -l /etc/ | more
在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过把管道符和 passwd 命令的--stdin 参数相结合,我们可以用一条 命令来完成密码重置操作:
echo "linuxprobe" | passwd --stdin root