在 Linux 操作系统中,绝大多数的配置文件是以普通文本格式保存的,这些配置文件决定着系统及相关服务、程序的运行特性。本节将学习如何查看及检索文本文件的内容,快速 了解相关配置信息,以便为管理、维护操作系统提供有效的参考。
对于一个文本格式的配置文件,可以利用不同的查看方式来获知文件内容,如直接显示 整个文件内容、分页查看文件内容,或者只查看文件开头或末尾的部分内容。在 Linux 操作系统中,分别由不同的命令来实现这些操作。
cat:一般用于查看小文件
例 如 , 以 下 操 作 就 可 以 查 看/etc/sysconfig/network-scripts/ifcfg-ens33 配置文件中的内容,并了解第一块以太网卡的配置信息。
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no
IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33
UUID=918487c2-e150-422b-acdd-8b7b61d0239b DEVICE=ens33
ONBOOT=yes IPADDR=192.168.4.11 NETMASK=255.255.255.0 GATEWAY=192.168.4.254
使用 cat 命令可以非常简单地直接显示整个文件的内容,但是当文件中的内容较多时, 很可能只能看到最后一部分信息,文件前面的大部分内容都来不及看到。而 more 和 less 命令通过采用全屏的方式分页显示文件,便于我们从头到尾仔细地阅读文件内容。
more 命令是较早出现的分页显示命令,表示文件内容还有更多(more)的意思,less 命令是较晚出现的分页显示命令,提供了比早期 more 命令更多的一些扩展功能。两个命令的用法基本相同。
使用 more 命令查看超过一屏的文件内容时,将进行分屏显示,并在左下角显示当前内容在整个文件中的百分比。在阅读界面中,可以按 Enter 键向下逐行滚动查看,按 Space 键可以向下翻一屏,按 b 键向上翻一屏,按 q 键退出并返回原来的命令环境。例如,以下操作将可以分屏查看/etc/httpd/conf/httpd.conf(网站配置文件)文件的内容。More缺点看不到最后一行内容
[root@localhost ~]# more /etc/httpd/conf/httpd.conf
–more–(1%)
more 命令除了可以分屏查看文件内容以外,还可以结合管道符号“|”分屏查看执行命令时的输出信息,这在命令输出内容较多的情况下特别有用。例如,以下操作可以分页查看/etc/ 目录下扩展名为“.conf”的配置文件。
[root@localhost ~]# ls -lh /etc/*.conf | more
-rw-r–r--. 1 root root 55 11 月 5 00:29 /etc/asound.conf
-rw-r–r--. 1 root root 14K 11 月 6 02:19 /etc/autofs.conf
-rw-------. 1 root root 232 11 月 6 02:19 /etc/autofs_ldap_auth.conf
-rw-r–r--. 1 root root 22K 11 月 6 01:31 /etc/brltty.conf
…… //省略部分内容
–more–
less 命令使用方法与 more 命令基本类似,但是比 more 更好的是,less 命令结合管道符号“|”分屏查看执行命令时输出的信息时,既可以向下翻页,也可以向上翻页。而 more 命令只能向下翻页,不能向上翻页。
head 和 tail 是一对作用相反的命令,前者用于显示文件开头的一部分内容,后者用于显示文件末尾的一部分内容。可以使用“-n”选项(n 为具体的行数)指定需要显示多少行的内容,若不指定行数,默认只显示十行。
执行“head -4 /etc/passwd”命令,可以查看用户账号文件/etc/passwd 开头第一行至第四行的内容。
[root@localhost ~]# head -4 /etc/passwd
root❌0:0:root:/root:/bin/bash bin❌1:1:bin:/bin:/sbin/nologin daemon❌2:2:daemon:/sbin:/sbin/nologin adm❌3:4:adm:/var/adm:/sbin/nologin
tail 命令则正好相反,用于查看文件末尾的内容。tail 命令通常用于查看系统日志(因为较新的日志记录总是添加到文件最后),以便观察网络访问、服务调试等相关信息。配合“-f”选项使用时,还可以跟踪文件尾部内容的动态更新,便于实时监控文件内容的变化。例如,以下操作可以查看系统公共日志文件/var/log/messages 的最后十行内容,并在末尾跟踪显示该文件中新记录的内容(按 Ctrl+C 组合键终止)。
[root@localhost ~]# tail -f /var/log/messages
…… //省略显示内容
May 3 22:17:22 localhost PackageKit: uid 0 is trying to obtain org.freedesktop. packagekit.system-sources-refresh auth (only_trusted:0)
May 3 22:17:22 localhost PackageKit: uid 0 obtained auth for org.freedesktop. packagekit.system-sources-refresh
May 3 22:17:23 localhost kernel: TCP: lp registered
在维护 Linux 操作系统的过程中,除了查看文件内容以外,有时还需要对文件内容进行统计,或者查找符合条件的文本内容。下面将学习统计和检索文件内容的两个命令工具。
wc 命令用于统计文件内容中包含的行数、单词数、字节数等信息,使用文件名作为参数,可以同时统计多个文件。较常用的选项如下所述。
-l:统计文件内容中的行数。(line)
-w:统计文件内容中的单词个数(以空格或制表位作为分隔)。Word
-c:统计文件内容中的字节数。
当文件的行数、单词数或字节数具有特定的意义时,使用 wc 命令可以巧妙地获得一些特殊信息。例如,Linux 操作系统中的用户账号数据保存在/etc/passwd 文件中,其中每一行记录对应一个用户,则以下操作可以统计出当前Linux 操作系统中拥有的用户账号数量,具体操作如下:
[root@localhost ~]# wc -l /etc/passwd
46 /etc/passwd
若将 wc 命令与管道符号一起使用,还可以对命令输出结果进行统计。例如,若要统计
/etc/目录下共包含多少个扩展名为“.conf”的文件,可以先通过“find /etc -name “*.conf””命令找出符合条件的文件位置,由于 find 命令的输出结果也是每行一个文件记录,因此只需结合管道符号执行“wc -l”操作即可得出符合条件的文件数量,具体操作如下:
[root@localhost ~]# find /etc -name “*.conf” | wc -l
432
使用不带任何选项的 wc 命令时,默认将统计指定文件的行数、单词数、字节数(相当于同时使用“-l”“-w”“-c”三个选项)。例如,以下操作统计出/etc/hosts 文件中共包含 2 行、10 个单词、158 字节的内容,然后通过“cat /etc/hosts”命令列出文件内容,可核对统计结果是否正确。
[root@localhost ~]# wc /etc/hosts
2 10 158 /etc/hosts
grep 命令用于在文件中查找并显示包含指定字符串的行,可以直接指定关键字符串作为查找条件,也可以使用复杂的条件表达式(例如,“^word”表示以 word 开头,“wordKaTeX parse error: Expected group after '^' at position 15: ”表示以 word 结尾,“^̲”表示空行)。使用 grep 命令的基本格式如下:
grep [选项]… 查找条件 目标文件
grep 命令的常用选项如下所示。
-i:查找内容时忽略大小写(Ignore Case)。
-v:反转查找(Invert),即输出与查找条件不相符的行。
例如,执行“grep “ftp” /etc/passwd”命令,可以在账号文件/etc/passwd 中查找包含“ftp” 字符串的行,实际上输出了名为 ftp 的用户账号的信息,具体操作如下:
[root@localhost ~]# grep “ftp” /etc/passwd
ftp❌14:50:FTP User:/var/ftp:/sbin/nologin
在维护 Linux 操作系统的过程中,经常会遇到包含大量内容的配置文件,而其中往往包含了许多空行和以“#”开头的注释文字,当只需要分析其中的有效配置信息时,这些空行和注释文字的存在不利于快速浏览。使用 grep 命令可以过滤掉这些无关信息。例如,以下操作可以显示/etc/yum.conf 文件中以“#”开头的行和空行以外的内容。
[root@localhost ~]# grep -v “^#” /etc/yum.conf | grep -v "^ " [ m a i n ] c a c h e d i r = / v a r / c a c h e / y u m / " [main] cachedir=/var/cache/yum/ "[main]cachedir=/var/cache/yum/basearch/$releasever keepcache=0
debuglevel=2
…… //省略部分内容
在 Linux 操作系统中,最简单的文件和目录备份工具就是 cp(复制)命令。但是当需要备份的文件、目录数量较多时,仅仅使用 cp 命令就显得“力不从心”,并且备份的文件数量及其所占用的磁盘空间都可能会对服务器产生不小的压力。因此,有必要对需要备份的数 据进行归档和压缩。
这里所说的归档操作实际上相当于“打包”,即将许多个文件和目录合并保存为一个整体 的包文件,以方便传递或携带。而压缩操作可以进一步降低打包后的归档文件所占用的磁盘 空间,充分提高备份介质的利用率。
Linux 操作系统中较常用的压缩命令工具包括 gzip、bzip2,最常用的归档命令工具为tar。使用 tar 命令可以通过特定选项自动调用 gzip 或 bzip2 程序,以完成归档、压缩的整套流程,当然也可以完成解压、释放已归档文件的整套流程。
下面分别介绍压缩和归档命令的使用方法。
使用压缩和解压缩工具
gzip 和 bzip2 是 Linux 操作系统中使用最多的两个压缩工具,这两个命令都可以压缩指定的文件,或者将已经压缩过的文件进行解压。两者使用的压缩算法各不相同,但命令使用格式基本类似,一般来说 bzip2 的压缩效率要好一些。
使用 gzip 制作的压缩文件默认的扩展名为“.gz”。制作压缩文件时,使用“-9”选项可以提高压缩的比率,但文件较大时会需要更多的时间。例如,以下操作将对/root/public_html 目录下的 mkfile 文件进行压缩,生成压缩文件 mkfile.gz(原始文件 mkfile 不再保留),压缩后的文件大小变为 30KB(未压缩时为 62KB)。
[root@localhost ~]# ls -lh /root/public_html/mkfile*
-rwxr-xr-x. 1 root root 62K 9 月 23 15:14 /root/public_html/mkfile [root@localhost ~]# gzip /root/public_html/mkfile [root@localhost ~]# ls -lh /root/public_html/mkfile*
-rwxr-xr-x. 1 root root 30K 9 月 23 15:14 /root/public_html/mkfile.gz
当需要解压缩经gzip 压缩的文件时,只需使用带“-d”选项的gzip 命令即可,或者直接使用
gunzip 命令。例如,若将压缩文件 mkfile.gz 进行解压缩,可执行以下操作。
[root@localhost ~]# gzip -d /root/public_html/mkfile.gz
或者
[root@localhost ~]# gunzip /root/public_html/mkfile.gz
bzip2 和 bunzip2 命令的用法与 gzip、gunzip 命令基本相同,使用 bzip2 制作的压缩文件默认的扩展名为“.bz2”。例如,以下操作将对当前目录下的 mkfile 文件以较高压缩比进行压缩,生成压缩文件 mkfile.bz2(原始文件 mkfile 不再保留),压缩后的文件大小变为 30KB
(未压缩时为 62KB)。
[root@localhost ~]# ls -lh /root/public_html/mkfile*
-rwxr-xr-x. 1 root root 62K May 4 01:32 /root/public_html/mkfile [root@localhost ~]# bzip2 -9 /root/public_html/mkfile [root@localhost ~]# ls -lh /root/public_html/mkfile*
-rwxr-xr-x. 1 root root 30K May 4 01:32 mkfile.bz2
与 gzip、gunzip 命令相同,当需要解压缩经bzip2 压缩的文件时,只需使用带“-d”选项的bzip2 命令即可,或者直接使用 bunzip2 命令。例如,若要将压缩文件 mkfile.gz 进行解压缩, 可执行以下操作。
[root@localhost ~]# bzip2 -d /root/public_html/mkfile.bz2
或者
[root@localhost ~]# bunzip2 /root/public_html/mkfile.bz2
tar 命令主要用于对目录和文件进行归档。在实际的备份工作中,通常在归档的同时也会将包文件进行压缩(需要调用前面的 gzip 或 bzip2 命令),以节省磁盘空间。使用 tar 命令时,选项前的“-”号可以省略。常用的几个选项如下所述。
-c:创建(Create).tar 格式的包文件。
-C:解压时指定释放的目标文件夹。
-f:表示使用归档文件。
-j:调用 bzip2 程序进行压缩或解压。
-p:打包时保留文件及目录的权限。
-P:打包时保留文件及目录的绝对路径。
-t:列表查看包内的文件。
-v:输出详细信息(Verbose)。
-x:解开.tar 格式的包文件。
-z:调用 gzip 程序进行压缩或解压。
制作归档及压缩包(备份)文件时,tar 命令的基本格式如下:
tar [选项] … 归档及压缩文件名 需要归档的源文件或目录…
如果需要对制作的归档文件进行压缩,可以通过“-z”或“-j”选项自动调用压缩工具(分别对应 gzip、bzip2 命令程序)进行压缩。例如,以下操作将会对/etc 和/boot 目录进行备份, 在当前目录下生成名为 sysfile.tar.gz 的归档压缩包,执行过程中可以看到被归档的文件列表信息。需要注意的是,在备份恢复目录或文件时,最好先将工作路径切换至目标目录或文件的所在路径,然后在执行备份命令时使用相对路径,以防输入命令时因手误而导致根目录“/” 下重要文件损坏。
[root@localhost ~]# cd /
[root@localhost /]# tar zcvf sysfile.tar.gz etc boot
etc/ etc/login.defs etc/cron.hourly/ etc/fstab
…… //省略部分内容
[root@localhost /]# ls -lh sysfile.tar.gz
-rw-r–r-- 1 root root 142M 9 月 16 17:03 sysfile.tar.gz
若需要制作“.tar.bz2”格式的归档压缩包,则将“-z”选项改为“-j”选项使用即可。例如,以 下操作将会对/etc/passwd 、/etc/shadow 文件进行备份, 在/tmp 目录下生成名为usershome.tar.bz2 的归档压缩包。
[root@localhost ~]# cd /etc
[root@localhost etc]# tar jcvf /tmp/usershome.tar.bz2 passwd shadow
etc/passwd etc/shadow
[root@localhost etc]# ls -lh /tmp/usershome.tar.bz2
-rw-r–r-- 1 root root 1.5K 9 月 16 17:04 /tmp/usershome.tar.bz2
解压并释放(恢复)归档压缩包文件时,tar 命令的基本格式如下:
tar [选项] … 归档及压缩文件名 [-C 目标目录]
类似地,当从“.tar.gz”格式的归档压缩包恢复数据时,需要结合“-z”选项来自动调用压缩 工具,而对于“.tar.bz2”格式的归档压缩包,对应的是“-j”选项。默认情况下,恢复的数据将释放到当前目录中,如果需要恢复到指定文件夹,还需要结合“-C”选项来指定目标目录。例如,以下操作将从备份文件 usershome.tar.bz2 中恢复数据,释放到/etc 目录下(将覆盖现有文件)。
[root@localhost ~]# tar jxf /tmp/usershome.tar.bz2 -C /etc
在大部分的备份及恢复工作中,只使用 tar 命令就可以很好地结合 gzip、bzip2 工具协同工作,无须再执行 gzip 或 bzip2 命令。但是要注意这两个压缩工具的命令程序必须存在。
配置文件是 Linux 操作系统的显著特征之一,其作用有点类似于 Windows 操作系统中的注册表,只不过注册表是集中管理,而配置文件采用了分散的自由管理方式。本节将学习如何使用 Linux 字符操作界面中的文本编辑器——vi,以便更好地管理和维护系统中的各种配置文件。
vi 是一个功能强大的全屏幕文本编辑工具,一直以来都作为类 UNIX 操作系统的默认文本编辑器。vim 是 vi 文本编辑器(简称 vi 编辑器)的增强版本,在 vi 编辑器的基础上扩展了很多实用的功能,但是习惯上也将 vim 称为 vi。为了使用方便,可以设置一个命令别名,将 vi 指向 vim 程序(本书中以 vim 程序为例),具体操作如下:
[root@localhost ~]# alias vi=’/usr/bin/vim’
[root@localhost ~]# which -a vi vim
alias vi=’/usr/bin/vim’
/usr/bin/vim
/usr/bin/vi
/usr/bin/vim
(1) 命令模式:启动 vi 编辑器后默认进入命令模式。该模式中主要完成如光标移动、字符串查找,以及删除、复制、粘贴文件内容等相关操作。
(2) 输入模式:该模式中主要的操作就是录入文件内容,可以对文本文件正文进行修 改或添加新的内容。处于输入模式时,vi 编辑器的最后一行会出现“-- INSERT --” 的状态提示信息。
(3) 末行模式:该模式中可以设置 vi 编辑环境、保存文件、退出编辑器,以及对文件内容进行查找、替换等操作。处于末行模式时, vi 编辑器的最后一行会出现冒号“:”提示符。
2.4.2命令模式中的基本操作
执行单独的“vi”命令即可进入 vi 编辑器的命令模式,还会显示相关版本信息,如图 2.3 所示。但更常见的使用方法是指定要编辑的文件名作为参数,若该文件不存在,则 vi 根据该文件名称打开一个新的空文件。
在学习 vi 编辑器的基本操作时,建议学员复制一个内容较多的系统配置文件进行练习, 而不要直接去修改系统文件,以免发生失误造成系统故障。例如,以下操作把系统配置文件
/etc/yum.conf 复制为当前目录下的 vitest.file 文件,然后用 vi 编辑器打开 vitest.file 文件进行编辑。
[root@localhost ~]# cp /etc/yum.conf ./vitest.file
[root@localhost ~]# vi vitest.file
在 vi 编辑器的命令模式中,可以输入特定的按键(称为 vi 操作命令,注意区别于 Linux 操作系统命令)进行操作,主要包括模式切换、光标移动、复制、删除、粘贴、文件内容查找及保存和退出等操作,这里只介绍一些最基本且常用的按键命令。
在命令模式中,按/键后可以输入指定的字符串,从当前光标处开始向后进行查找(按? 键则向前查找)。完成查找后可以按 n、N 键在不同的查找结果中进行选择。
例如,输入“/yum”,按 Enter 键后将查找出文件中的“yum”字符串并高亮显示,光标自动移动至第一个查找结果处,按 n 键可以移动到下一个查找结果,如图 2.4 所示。