项目5〓Linux配置与管理 【学习目标】  理解Linux的发展历史、Linux的特性、Linux基本命令、Vi、Vim编辑器的使用、磁盘配置与管理、逻辑卷配置与管理、RAID基础知识以及网络配置管理等相关理论知识。  掌握RAID配置基本命令、RAID5阵列实例配置以及磁盘扩容等相关知识与技能。 5.1项目陈述 回顾Linux的历史,可以说它是“踩着巨人的肩膀”逐步发展起来的,Linux在很大程度上借鉴了UNIX操作系统的成功经验,继承并发展了UNIX的优良传统。由于Linux具有开源的特性,因此一经推出便得到了广大操作系统开发爱好者的积极响应和支持,这也是Linux得以迅速发展的关键因素之一。本章讲解Linux的发展历史、Linux的特性、Linux基本命令以及Vi、Vim编辑器的使用等相关理论知识,项目实践部分讲解RAID配置基本命令、RAID5阵列实例配置以及磁盘扩容配置等相关知识与技能。 5.2必备知识 5.2.1Linux的发展历史 Linux操作系统是一种类UNIX的操作系统,UNIX是一种主流经典的操作系统,Linux操作系统来源于UNIX,是UNIX在计算机上的完整实现。UNIX操作系统是1969年由肯·汤普森(K.Thompson)在美国贝尔实验室开发的一种操作系统,1972年,其与丹尼斯·里奇(D.Ritchie)一起用C语言重写了UNIX操作系统,大幅增加了其可移植性。由于UNIX具有良好而稳定的性能,又在几十年中不断地改进和迅速发展,因此在计算机领域中得到了广泛应用。 由于美国电话电报公司的政策改变,在Version 7 UNIX推出之后,其发布了新的使用条款,将UNIX源代码私有化,在大学中不能再使用UNIX源代码。1987年,荷兰的阿姆斯特丹自由大学计算机科学系的安德鲁·塔能鲍姆(A.Tanenbaum)教授为了能在课堂上教授学生操作系统运作的实务细节,决定在不使用任何美国电话电报公司的源代码的前提下,自行开发与UNIX兼容的操作系统,以避免版权上的争议。他以小型UNIX(miniUNIX)之意将此操作系统命名为MINIX。MINIX是一种基于微内核架构的类UNIX计算机操作系统,除了启动的部分用汇编语言编写以外,其他大部分是用C语言编写的,其内核系统分为内核、内存管理及文件管理3部分。 MINIX最有名的学生用户是芬兰人李纳斯·托沃兹(L.Torvalds),他在芬兰的赫尔辛基技术大学用MINIX操作系统搭建了一个新的内核与MINIX兼容的操作系统。1991年10月5日,他在一台FTP服务器上发布了这个消息,将此操作系统命名为Linux,标志着Linux操作系统的诞生。在设计理念上,Linux和MINIX大相径庭,MINIX在内核设计上采用了微内核的原则,但Linux和原始的UNIX相同,都采用了宏内核的设计。 Linux操作系统增加了很多功能,被完善并发布到互联网中,所有人都可以免费下载、使用它的源代码。Linux的早期版本并没有考虑用户的使用,只提供了最核心的框架,使得Linux编程人员可以享受编制内核的乐趣,这也促成了Linux操作系统内核的强大与稳定。随着互联网的发展与兴起,Linux操作系统迅速发展,许多优秀的程序员都加入了Linux操作系统的编写行列之中,随着编程人员的扩充和完整的操作系统基本软件的出现,Linux操作系统开发人员认识到Linux已经逐渐变成一个成熟的操作系统平台,1994年3月,其内核5.0的推出,标志着Linux第一个版本的诞生。 Linux一开始要求所有的源码必须公开,且任何人均不得从Linux交易中获利。然而,这种纯粹的自由软件的理想对于Linux的普及和发展是不利的,于是Linux开始转向通用公共许可证(General Public License,GPL)项目,成为GNU(GNU’s Not UNIX)阵营中的主要一员。GNU项目是由理查德·斯托曼(R. Stallman)于1984年提出的,他建立了自由软件基金会,并提出GNU项目的目的是开发一种完全自由的、与UNIX类似但功能更强大的操作系统,以便为所有计算机用户提供一种功能齐全、性能良好的基本系统。 Linux凭借优秀的设计、不凡的性能,加上IBM、Intel、CA、Core、Oracle等国际知名企业的大力支持,市场份额逐步扩大,逐渐成为主流操作系统之一。 5.2.2Linux的特性 Linux操作系统是目前发展最快的操作系统,这与Linux具有的良好特性是分不开的。它包含UNIX的全部功能和特性。Linux操作系统作为一款免费、自由、开放的操作系统,发展势不可挡,它高效、安全、稳定,支持多种硬件平台,用户界面友好,网络功能强大,支持多任务、多用户。 (1) 开放性。Linux操作系统遵循世界标准规范,特别是遵循开放系统互连(Open System Interconnect,OSI)国际标准,凡遵循国际标准所开发的硬件和软件都能彼此兼容,可方便地实现互连。另外,源代码开放的Linux是免费的,使Linux的获得非常方便,且使用Linux可节省花销。使用者能控制源代码,即按照需求对部件进行配置,以及自定义建设系统安全设置等。 (2) 多用户。Linux操作系统资源可以被不同用户使用,每个用户对自己的资源(如文件、设备)有特定的权限,互不影响。 (3) 多任务。使用Linux操作系统的计算机可同时执行多个程序,而各个程序的运行互相独立。 (4) 良好的用户界面。Linux操作系统为用户提供了图形用户界面。它利用鼠标、菜单、窗口、滚动条等元素,给用户呈现一个直观、易操作、交互性强的友好的图形化界面。 (5) 设备独立性强。Linux操作系统将所有外部设备统一当作文件来看待,只要安装它们的驱动程序,任何用户都可以像使用文件一样操纵、使用这些设备,而不必知道它们的具体存在形式。Linux是具有设备独立性的操作系统,它的内核具有高度适应能力。 (6) 提供了丰富的网络功能。Linux操作系统是在Internet基础上产生并发展起来的,因此,完善的内置网络是Linux的一大特点,Linux操作系统支持Internet、文件传输和远程访问等。 (7) 可靠的安全系统。Linux操作系统采取了许多安全技术措施,包括读写控制、带保护的子系统、审计跟踪、核心授权等,这为网络多用户环境中的用户提供了必要的安全保障。 (8) 良好的可移植性。Linux操作系统从一个平台转移到另一个平台时仍然能用其自身的方式运行。Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境和任何平台上运行。 (9) 支持多文件系统。Linux操作系统可以把许多不同的文件系统以挂载形式连接到本地主机上,包括Ext2/3、FAT32、NTFS、OS/2等文件系统,以及网络中其他计算机共享的文件系统等,是数据备份、同步、复制的良好平台。 5.2.3Linux基本命令 Linux操作系统的Shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 Shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,Shell就是围绕内核的外层。当从Shell或其他程序向Linux传递命令时,内核会做出相应的反应。 1. Shell命令的基本格式 在Linux操作系统中看到的命令其实就是Shell命令,Shell命令的基本格式如下。 command [选项] [参数] (1) command为命令名称,例如,查看当前文件夹下文件或文件夹的命令是ls。 (2) [选项]表示可选,是对命令的特别定义,以连接符“”开始,多个选项可以用一个连接符“”连接起来,例如,ls l a与ls la的作用是相同的,有些命令不写选项和参数也能执行,有些命令在必要时可以附带选项和参数。 ls是常用的一个命令,属于目录操作命令,用来列出当前目录下的文件和文件夹。ls命令后可以加选项,也可以不加选项,不加选项的写法如下。 [root@localhost ~]# ls anaconda-ks.cfg initial-setup-ks.cfg公共模板视频图片文档下载音乐桌面 [root@localhost ~]# ls命令之后不加选项和参数也能执行,但只能执行最基本的功能,即显示当前目录下的文件名。那么,加入一个选项后,会出现什么结果? [root@localhost ~]# ls -l 总用量 8 -rw--------. 1 root root 1647 6月8 01:27 anaconda-ks.cfg -rw-r--r--.1 root root 1695 6月8 01:30 initial-setup-ks.cfg drwxr-xr-x.2 root root6 6月8 01:41 公共 …(省略部分内容) drwxr-xr-x. 2 root root40 6月8 01:41 桌面 [root@localhost ~]# 如果加l选项,则可以看到显示的内容明显增多了。l是长格式(long list)的意思,即显示文件的详细信息。 可以看到,选项的作用是调整命令功能。如果没有选项,那么命令只能执行最基本的功能; 而一旦有选项,就能执行更多功能,或者显示更加丰富的数据。 Linux的选项又分为短格式选项和长格式选项两类。 短格式选项是长格式选项的简写,用一个“”和一个字母表示,如“ls l”。 长格式选项是完整的英文单词,用两个“”和一个单词表示,如“ls all”。 一般情况下,短格式选项是长格式选项的缩写,即一个短格式选项会有对应的长格式选项。当然也有例外,例如,“ls”命令的短格式选项“l”就没有对应的长格式选项,所以具体的命令选项需要通过帮助手册来查询。 (3) [参数]为跟在可选项后的参数,或者是command的参数,参数可以是文件,也可以是目录,可以没有,也可以有多个,有些命令必须使用多个操作参数,例如,cp命令必须指定源操作对象和目标对象。 (4) command [选项] [参数]等项目之间以空格隔开,无论有几个空格,Shell都将其视为一个空格。 2. 输入命令时键盘操作的一般规律 (1) 命令、文件名、参数等都要区分英文大小写,例如,md与MD是不同的。 (2) 命令、选项、参数之间必须有一个或多个空格。 (3) 命令太长时,可以使用“\”符号来转义Enter符号,以实现一条命令跨多行。 [root@localhost ~]# hostnamectl set-hostname \   //输入"\"符号来转义Enter符号 > test1//输入主机名为test1 [root@localhost ~]# bash   //bash执行命令 [root@test1 ~]# (4) 按Enter键以后,该命令才会被执行。 3. 配置显示系统的常用命令 (1) cat命令用于查看Linux内核版本,执行命令如下。 [root@localhost ~]# cat /proc/version Linux version 3.10.0-957.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 5.8.5 20150623 (Red Hat 5.8.5-36) (GCC) ) #1 SMP Thu Nov 8 23:39:32 UTC 2018 [root@localhost ~]# [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# cat命令的作用是连接文件或标准输入并输出。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,常与重定向符号配合使用。其命令格式如下。 cat[选项]文件名 cat命令各选项及其功能说明,如表5.1所示。 表5.1cat命令各选项及其功能说明 选项功 能 说 明 A等价于vET b对非空输出行编号 e等价于vE E在每行结束处显示$ n对输出的所有行编号,由1开始对所有输出的行数进行编号 s当有连续两行以上的空白行时,将其替换为一行的空白行 t与vT等价 T将跳格字符显示为^I v使用^和M引用,除了Tab键之外 使用cat命令来显示文件内容时,执行命令如下。 [root@localhost ~]# dir a1-test05.txthistory.txtmkfs.ext2mkrfc2734公共图片音乐 anaconda-ks.cfginitial-setup-ks.cfg mkfs.msdosmnt模板文档桌面 font.mapmkfontdirmkinitrduser01视频下载 [root@localhost ~]# cat a1-test05.txt //显示a1-test05.txt文件的内容 aaaaaaaaaaaaaa bbbbbbbbbbbbbb cccccccccccccccc [root@localhost ~]# cat -nE a1-test05.txt //显示a1-test05.txt文件的内容,对输出的 //所有行编号,由1开始对所有输出的行数进行编号,在每行结束处显示$ 1 aaaaaaaaaaaaaa$ 2 bbbbbbbbbbbbbb$ 3 cccccccccccccccc$ [root@localhost ~]# (2) tac命令反向显示文件内容。 tac命令与cat命令相反,只适合用于显示内容较少的文件。其命令格式如下。 tac[选项]文件名 tac命令各选项及其功能说明,如表5.2所示。 表5.2tac命令各选项及其功能说明 选项功 能 说 明 b在行前而非行尾添加分隔标志 r分隔标志视作正则表达式来解析 s使用指定字符串代替换行作为分隔标志 使用tac命令来反向显示文件内容时,执行命令如下。 [root@localhost ~]# tac -r a1-test05.txt cccccccccccccccc bbbbbbbbbbbbbb aaaaaaaaaaaaaa [root@localhost ~]# (3) head命令查看文件的n行。 head命令用于查看具体文件的前几行的内容,默认情况下显示文件前10行的内容。其命令格式如下。 head[选项]文件名 head命令各选项及其功能说明,如表5.3所示。 表5.3head命令各选项及其功能说明 选项功 能 说 明 c显示文件的前n个字节,如c5,表示文件内容的前5个字节 n后面接数字,表示显示几行 q不显示包含给定文件名的文件头 v总是显示包含给定文件名的文件头 使用head命令来查看具体文件的前几行的内容时,执行以下命令。 [root@localhost ~]# head -n5 -v /etc/passwd ==> /etc/passwd <== root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@localhost ~]# (4) tail命令查看文件的最后n行。 tail命令用于查看具体文件的最后几行的内容,默认情况下显示文件最后10行的内容,可以使用tail命令来查看日志文件被更改的过程。其命令格式如下。 tail[选项]文件名 tail命令各选项及其功能说明,如表5.4所示。 表5.4tail命令各选项及其功能说明 选项功 能 说 明 c显示文件的前n个字节,如c5,表示文件内容前5个字节,其他文件内容不显示 f随着文件的增长输出附加数据,即实时跟踪文件,显示一直继续,直到按Ctrl+C组合键才停止显示 F实时跟踪文件,如果文件不存在,则继续尝试 n后面接数字时,表示显示几行 q不显示包含给定文件名的文件头 v总是显示包含给定文件名的文件头 使用tail命令来查看具体文件的最后几行的内容时,执行以下命令。 [root@localhost ~]# tail -n5 -v /etc/passwd ==> /etc/passwd <== postfix:x:89:89::/var/spool/postfix:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin csg:x:1000:1000:root:/home/csg:/bin/bash user01:x:1001:1001:user01:/home/user01:/bin/bash user0:x:1002:1002:user01:/home/user0:/bin/bash [root@localhost ~]# (5) echo命令将显示内容输出到屏幕上。 echo命令非常简单,如果命令的输出内容没有特殊含义,则原内容输出到屏幕上; 如果命令的输出内容有特殊含义,则输出其含义。其命令格式如下。 echo[选项][输出内容] echo命令各选项及其功能说明,如表5.5所示。 表5.5echo命令各选项及其功能说明 选项功 能 说 明 n取消输出后行末的换行符号(内容输出后不换行) e支持反斜线控制的字符转换 在echo命令中,如果使用了n选项,则表示输出文字后不换行; 字符串可以加引号,也可以不加引号,用echo命令输出加引号的字符串时,将字符串原样输出; 用echo命令输出不加引号的字符串时,字符串中的各个单词作为字符串输出,各字符串之间用一个空格分隔。 如果使用了e选项,则可以支持控制字符,会对其进行特别处理,而不会将它当作一般文字输出。控制字符如表5.6所示。 表5.6控制字符 控 制 字 符功 能 说 明 \\输出\本身 \a输出警告音 \b退格键,即向左删除键 \c取消输出行末的换行符。和n选项一致 \eEsc键 \f换页符 \n换行符 \r回车键 \t制表符,即Tab键 \v垂直制表符 \0nnn按照八进制ASCII表输出字符。其中,0为数字0,nnn是三位八进制数 \xhh按照十六进制ASCII表输出字符。其中,hh是两位十六进制数 使用echo命令输出相关内容到屏幕上,执行以下命令。 [root@localhost ~]# echo -en "hello welcome\n"   //换行输出 hello welcome [root@localhost ~]# echo -en "1 2 3\n"   //整行换行输出 1 2 3 [root@localhost ~]# echo -en "1\n2\n3\n"   //每个字符换行输出 1 2 3 [root@localhost ~]# echo -n aaa   //字符串不加引号,不换行输出 aaa[root@localhost ~]# echo -n 123 123[root@localhost ~]# echo命令也可以把显示输出的内容输入到一个文件中,命令如下。 [root@localhost ~]# echo "hello everyone welcome to here" > welcome.txt //写入或替换 [root@localhost ~]# echo "hello everyone" >> welcome.txt //追加写入 [root@localhost ~]# cat welcome.txt hello everyone welcome to here hello everyone [root@localhost ~]# (6) shutdown命令可以安全地关闭或重启Linux操作系统,它在系统关闭之前给系统中的所有登录用户发送一条警告信息。 该命令还允许用户指定一个时间参数,用于指定什么时间关闭,时间参数可以是一个精确的时间,也可以是从现在开始的一个时间段。 精确时间的格式是hh:mm,表示小时和分钟,时间段由小时和分钟数表示。系统执行该命令后会自动进行数据同步的工作。 该命令的一般格式如下。 shutdown [选项] [时间] [警告信息] shutdown命令各选项及含义,如表5.7所示。 表5.7shutdown命令各选项及含义 选项含义 k并不真正关机,而只是发出警告信息给所有用户 r关机后立即重新启动系统 h关机后不重新启动系统 f快速关机重新启动时跳过文件系统检查 n快速关机且不经过init程序 c取消一个已经运行的shutdown操作 需要特别说明的是,该命令只能由root用户使用。 halt是最简单的关机命令,其实际上是调用shutdown h命令。halt命令执行时,会结束应用进程,文件系统写操作完成后会停止内核。 [root@localhost ~]# shutdown -h now  //立刻关闭系统 reboot的工作过程与halt类似,其作用是重新启动系统,而halt是关机。其参数也与halt类似,reboot命令重启系统时是删除所有进程,而不是平稳地终止它们。因此,使用reboot命令可以快速地关闭系统,但当还有其他用户在该系统中工作时,会引起数据的丢失,所以使用reboot命令的场合主要是单用户模式。 [root@localhost ~]# reboot   //立刻重启系统 [root@localhost ~]# shutdown -r 00:05   //5 min后重启系统 [root@localhost ~]# shutdown -c   //取消shutdown操作 退出终端窗口命令exit。 [root@localhost ~]# exit   //退出终端窗口 (7) whoami命令用于显示当前的操作用户的用户名,执行命令如下。 [root@localhost ~]# whoami root [root@localhost ~]# (8) hostnamectl命令用于设置当前系统的主机名,执行命令如下。 [root@localhost ~]# hostnamectl set-hostname test1 //设置当前系统的主机名为test1 [root@localhost ~]# bash //执行命令 [root@test1 ~]# [root@test1 ~]# hostname //查看当前主机名 test1 [root@test1 ~]# (9) date命令用于显示当前时间/日期,执行命令如下。 [root@localhost ~]# date 2022年 05月 10日 星期二 19:13:05 CST [root@localhost ~]# (10) cal命令用于显示日历信息,执行命令如下。 [root@localhost ~]# cal 五月 2022 日一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [root@localhost ~]# (11) clear命令相当于DOS下的cls命令,执行命令如下。 [root@localhost ~]# clear [root@localhost ~]# (12) history命令可以用来显示和编辑历史命令,显示最近5个历史命令,执行命令如下。 [root@localhost ~]# history 5 14 uname -a 15 whoami 16 date 17 cal 18 history 5 [root@localhost ~]# (13) pwd命令显示当前工作目录,执行命令如下。 [root@localhost ~]# pwd /root [root@localhost ~]# (14) cd命令改变当前工作目录。 cd是change directory的缩写,用于改变当前工作目录。其命令格式如下。 cd[绝对路径或相对路径] 路径是目录或文件在系统中的存放位置,如果想要编辑ifcfgens33文件,则先要知道此文件的所在位置,此时就需要用路径来表示。 路径是由目录和文件名构成的,例如,/etc是一个路径,/etc/sysconfig是一个路径,/etc/sysconfig/networkscripts/ifcfgens33也是一个路径。 路径的分类如下。 ① 绝对路径: 从根目录(/)开始的路径,如/usr、/usr/local/、/usr/local/etc等是绝对路径,它指向系统中一个绝对的位置。 ② 相对路径: 路径不是由“/”开始的,相对路径的起点为当前目录,如果现在位于/usr目录,那么相对路径local/etc所指示的位置为/usr/local/etc。也就是说,相对路径所指示的位置,除了相对路径本身之外,还受到当前位置的影响。 Linux操作系统中常见的目录有/bin、/usr/bin、/usr/local/bin,如果只有一个相对路径bin,那么它指示的位置可能是上面3个目录中的任意一个,也可能是其他目录。特殊符号表示的目录,如表5.8所示。 表5.8特殊符号表示的目录 特 殊 符 号表示的目录特 殊 符 号表示的目录 ~代表当前登录用户的主目录.代表当前目录 ~用户名表示切换至指定用户的主目录..代表上级目录 代表上次所在目录 如果只输入cd,未指定目标目录名,则返回到当前用户的主目录,等同于cd~,一般用户的主目录默认在/root下,如root用户的默认主目录为/root,为了能够进入指定的目录,用户必须拥有对指定目录的执行和读权限。 以root身份登录到系统中,进行目录切换等操作,执行命令如下。 [root@localhost ~]# pwd   //显示当前工作目录 /root [root@localhost ~]# cd /etc   //以绝对路径进入etc目录 [root@localhost etc]# cd yum.repos.d   //以相对路径进入yum.repos.d目录 [root@localhost yum.repos.d]# pwd /etc/yum.repos.d [root@localhost yum.repos.d]# cd .   //当前目录 [root@localhost yum.repos.d]# cd ..   //上级目录 [root@localhost etc]# pwd /etc [root@localhost etc]# cd ~   //当前登录用户的主目录 [root@localhost ~]# pwd /root [root@localhost ~]# cd -   //上次所在目录 /etc [root@localhost etc]# (15) ls命令显示目录文件。 ls是list的缩写,不加参数时,ls命令用来显示当前目录清单,是Linux中最常用的命令之一,通过ls命令不仅可以查看Linux文件夹包含的文件,还可以查看文件及目录的权限、目录信息等。其命令格式如下。 ls[选项]目录或文件名 ls命令各选项及其功能说明,如表5.9所示。 表5.9ls命令各选项及其功能说明 选项功 能 说 明 a显示所有文件,包括隐藏文件,如“.”“..” d仅可以查看目录的属性参数及信息 h以易于阅读的格式显示文件或目录的大小 i查看任意一个文件的节点 l长格式输出,包含文件属性,显示详细信息 L递归显示,即列出某个目录及子目录的所有文件和目录 t以文件和目录的更改时间排序显示 使用ls命令,进行显示目录文件相关操作,执行命令如下。 ① 显示所有文件,包括隐藏文件,如“.”“..”。 [root@localhost ~]# ls -a ..bash_profile.esd_authmkfontdir.tcshrc文档 .. .bashrc font.map mkfs.ext2 .Viminfo 下载 aa.txt .cache history.txt mkfs.msdos 公共 音乐 anaconda-ks.cfg .config .ICEauthority mkinitrd 模板 桌面 …(省略部分内容) [root@localhost ~]# ② 长格式输出,包含文件属性,显示详细信息。 [root@localhost ~]# ls -l 总用量 16 -rw-r--r--. 1 root root85 6月 25 14:04 aa.txt -rw--------. 1 root root1647 6月8 01:27 anaconda-ks.cfg -rw-r--r--. 1 root root0 6月20 22:37 font.map …(省略部分内容) [root@localhost ~]# (16) touch命令创建文件或修改文件。 touch命令可以用来创建文件或修改文件的存取时间,如果指定的文件不存在,则会生成一个空文件。其命令格式如下。 touch[选项]目录或文件名 touch命令各选项及其功能说明,如表5.10所示。 表5.10 touch命令各选项及其功能说明 选项功 能 说 明 a只把文件存取时间修改为当前时间 d把文件的存取/修改时间格式改为yyyymmdd m只把文件的修改时间修改为当前时间 使用touch命令创建一个或多个文件时,执行以下命令。 [root@localhost ~]# cd /mnt   //切换目录 [root@localhost mnt]# touch file05.txt   //创建一个文件 [root@localhost mnt]# touch file0{5..4}.txt //创建多个文件 [root@localhost mnt]# touch * //把当前目录下所有文件的存取和修改时间修改为当前时间 [root@localhost mnt]# ls -l //查看修改结果 总用量 0 -rw-r--r--. 1 root root 0 5月10 19:35 file05.txt -rw-r--r--. 1 root root 0 5月10 19:35 file05.txt -rw-r--r--. 1 root root 0 5月10 19:35 file03.txt -rw-r--r--. 1 root root 0 5月10 19:35 file05.txt [root@localhost mnt]# 使用touch命令把目录/mnt下的所有文件的存取和修改时间修改为2022年6月26日,执行以下命令。 [root@localhost mnt]# touch -d 20220626 /mnt/* [root@localhost mnt]# ls -l 总用量 0 -rw-r--r--. 1 root root 0 6月26 2022 file05.txt -rw-r--r--. 1 root root 0 6月26 2022 file05.txt -rw-r--r--. 1 root root 0 6月26 2022 file03.txt -rw-r--r--. 1 root root 0 6月26 2022 file05.txt [root@localhost mnt]# (17) mkdir命令创建新目录。 mkdir命令用于创建指定的目录名,要求创建的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录,目录可以是绝对路径,也可以是相对路径。其命令格式如下。 mkdir[选项]目录名 mkdir命令各选项及其功能说明,如表5.11所示。 表5.11mkdir命令各选项及其功能说明 选项功 能 说 明 p创建目录时,递归创建,如果父目录不存在,则此时可以与子目录一起创建,即可以一次创建多个层次的目录 m给创建的目录设定权限,默认权限是drwxrxrx v输入目录创建的详细信息 使用mkdir命令创建新目录时,执行命令如下。 [root@localhost mnt]# mkdir user01 //创建新目录user01 [root@localhost mnt]# ls -l 总用量 0 -rw-r--r--. 1 root root 0 6月26 2020 file05.txt -rw-r--r--. 1 root root 0 6月26 2020 file05.txt -rw-r--r--. 1 root root 0 6月26 2020 file03.txt -rw-r--r--. 1 root root 0 6月26 2020 file05.txt drwxr-xr-x. 2 root root 6 5月10 19:38 user01 [root@localhost mnt]# mkdir -v user02   //创建新目录user02 mkdir: 已创建目录 "user02" [root@localhost mnt]# ls -l 总用量 0 -rw-r--r--. 1 root root 0 6月26 2020 file05.txt -rw-r--r--. 1 root root 0 6月26 2020 file05.txt -rw-r--r--. 1 root root 0 6月26 2020 file03.txt -rw-r--r--. 1 root root 0 6月26 2020 file05.txt drwxr-xr-x. 2 root root 6 5月10 19:38 user01 drwxr-xr-x. 2 root root 6 5月10 19:40 user02 [root@localhost mnt]# mkdir -p /mnt/user03/a01 /mnt/user03/a02 //在user03目录下,同时创建目录a01和目录a02 [root@localhost mnt]# ls -l /mnt/user03 总用量 0 drwxr-xr-x. 2 root root 6 5月10 19:41 a01 drwxr-xr-x. 2 root root 6 5月10 19:41 a02 [root@localhost mnt]# (18) rmdir命令删除目录。 rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的,删除某目录时必须具有对其父目录的写权限。其命令格式如下。 rmdir[选项]目录名 rmdir命令各选项及其功能说明,如表5.12所示。 表5.12rmdir命令各选项及其功能说明 选项功 能 说 明 p递归删除目录,当子目录删除后其父目录为空时,父目录也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息 v显示指令执行过程 使用rmdir命令删除目录时,执行命令如下。 [root@localhost mnt]# rmdir -v /mnt/user03/a01 rmdir: 正在删除目录 "/mnt/user03/a01" [root@localhost mnt]# ls -l /mnt/user03 总用量 0 drwxr-xr-x. 2 root root 6 5月10 19:41 a02 [root@localhost mnt]# (19) rm命令删除文件或目录。 rm既可以删除一个目录中的一个文件或多个文件或目录,又可以将某个目录及其下的所有文件及子目录都删除,功能非常强大。其命令格式如下。 rm[选项]目录或文件名 rm命令各选项及其功能说明,如表5.13所示。 表5.13rm命令各选项及其功能说明 选项功 能 说 明 f强制删除,删除文件或目录时不提示用户 i在删除前会询问用户是否操作 r删除某个目录及其中的所有的文件和子目录 d删除空文件或目录 v显示指令执行过程 使用rm命令删除文件或目录时,执行命令如下。 [root@localhost ~]# ls -l /mnt //显示目录下的信息 总用量 0 -rw-r--r--. 1 root root0 6月26 2022 file05.txt -rw-r--r--. 1 root root0 6月26 2022 file05.txt -rw-r--r--. 1 root root0 6月26 2022 file03.txt -rw-r--r--. 1 root root0 6月26 2022 file05.txt drwxr-xr-x. 2 root root6 5月10 19:38 user01 drwxr-xr-x. 2 root root6 5月10 19:40 user02 drwxr-xr-x. 3 root root17 5月10 19:44 user03 [root@localhost ~]# rm -r -f /mnt/*   //强制删除目录下的所有文件和目录 [root@localhost /]# ls -l /mnt   //显示目录下的信息 总用量 0 [root@localhost /]# (20) cp命令复制文件或目录。 要将一个文件或目录复制到另一个文件或目录下,可以使用cp命令,该命令的功能非常强大,参数也很多,除了单纯的复制之外,还可以建立连接文件,复制整个目录,在复制的同时可以对文件进行改名操作等,这里仅介绍几个常用的参数选项。其命令格式如下。 cp[选项]源目录或文件名 目标目录或文件名 cp命令各选项及其功能说明,如表5.14所示。 表5.14cp命令各选项及其功能说明 选项功 能 说 明 a将文件的属性一起复制 f强制复制,无论目标文件或目录是否已经存在,如果目标文件或目录存在,则先删除它们再复制(即覆盖),并且不提示用户 ii和f选项正好相反,如果目标文件或目录存在,则提示是否覆盖已有的文件 n不要覆盖已存在的文件(使i选项失效) p保持指定的属性,如模式、所有权、时间戳等,与a类似,常用于备份 r递归复制目录,即包含目录下的各级子目录的所有内容 s只创建符号链接而不复制文件 u只在源文件比目标文件新或目标文件不存在时才进行复制 v显示指令执行过程 使用cp命令复制文件或目录时,执行命令如下。 [root@localhost ~]# cd /mnt [root@localhost mnt]# touch a0{5..3}.txt [root@localhost mnt]# mkdir user0{5..3} [root@localhost mnt]# dir a05.txt a05.txt a03.txt user01 user02 user03 [root@localhost mnt]# ls -l 总用量 0 -rw-r--r--. 1 root root 0 5月10 19:49 a05.txt -rw-r--r--. 1 root root 0 5月10 19:49 a05.txt -rw-r--r--. 1 root root 0 5月10 19:49 a03.txt drwxr-xr-x.2 root root 6 5月10 19:49 user01 drwxr-xr-x.2 root root 6 5月10 19:49 user02 drwxr-xr-x.2 root root 6 5月10 19:49 user03 [root@localhost mnt]# cd ~ [root@localhost ~]# cp -r /mnt/a05.txt /mnt/user01/ [root@localhost ~]# ls -l /mnt/user01 总用量 0 -rw-r--r--. 1 root root 0 5月10 19:51 a05.txt [root@localhost ~]# (21) mv命令移动文件或目录。 使用mv命令可以为文件或目录重命名或将文件由一个目录移入另一个目录,如果在同一目录下移动文件或目录,则该操作可理解为给文件或目录重命名。其命令格式如下。 mv[选项]源目录或文件名目标目录或文件名 mv命令各选项及其功能说明,如表5.15所示。 表5.15mv命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 f覆盖前不询问n不覆盖已存在文件 i覆盖前询问v显示指令执行过程 使用mv命令移动文件或目录时,执行命令如下。 [root@localhost ~]# ls -l /mnt //显示/mnt目录信息 总用量 0 -rw-r--r--. 1 root root0 6月25 20:27 a05.txt -rw-r--r--. 1 root root0 6月25 20:27 a05.txt -rw-r--r--. 1 root root0 6月25 20:27 a03.txt drwxr-xr-x.2 root root24 6月25 20:29 user01 drwxr-xr-x.2 root root24 6月25 20:30 user02 drwxr-xr-x.6 root root104 6月25 20:37 user03 [root@localhost ~]# mv -f /mnt/a05.txt /mnt/test05.txt //将a05.txt重命名为test05.txt [root@localhost ~]# ls -l /mnt   //显示/mnt目录信息 总用量 0 -rw-r--r--. 1 root root0 6月25 20:27 a05.txt -rw-r--r--. 1 root root0 6月25 20:27 a03.txt -rw-r--r--. 1 root root0 6月25 20:27 test05.txt drwxr-xr-x.2 root root24 6月25 20:29 user01 drwxr-xr-x.2 root root24 6月25 20:30 user02 drwxr-xr-x.6 root root104 6月25 20:37 user03 [root@localhost ~]# (22) tar命令打包、归档文件或目录。 使用tar命令可以把整个目录的内容归并为一个单一的文件,而许多用于Linux操作系统的程序就是打包为TAR文件的形式,tar命令是Linux中最常用的备份命令之一。 tar命令可用于建立、还原、查看、管理文件,也可以方便地追加新文件到备份文件中,或仅更新部分备份文件,以及解压、删除指定的文件。这里仅介绍几个常用的参数选项,以便于日常的系统管理工作。其命令格式如下。 tar[选项]文件目录列表 tar命令各选项及其功能说明如表5.16所示。 表5.16tar命令各选项及其功能说明 选项功 能 说 明 c创建一个新归档,如果备份一个目录或一些文件,则要使用这个选项 f使用归档文件或设备,这个选项通常是必选的,选项后面一定要跟文件名 z用gzip压缩/解压缩文件,加上该选项后可以对文件进行压缩,还原时也一定要使用该选项进行解压缩 v详细地列出处理的文件信息,如无此选项,则tar命令不报告文件信息 r把要存档的文件追加到档案文件的末尾,使用该选项时,可将忘记的目录或文件追加到备份文件中 t列出归档文件的内容,可以查看哪些文件已经备份 x从归档文件中释放文件 使用tar命令打包、归档文件或目录。 ① 将/mnt目录打包为一个文件test05.tar,将其压缩为文件test05.tar.gz,并存放在/root/user01目录下作为备份,执行以下命令。 [root@localhost ~]# rm -rf /mnt/*   //删除/mnt目录下的所有目录或文件 [root@localhost ~]# ls -l /mnt 总用量 0 [root@localhost ~]# touch /mnt/a0{5..2}.txt   //新建两个文件 [root@localhost ~]# mkdir /mnt/test0{5..2} //新建两个目录 [root@localhost ~]# ls -l /mnt 总用量 0 -rw-r--r--. 1 root root 0 6月25 22:32 a05.txt -rw-r--r--. 1 root root 0 6月25 22:32 a05.txt drwxr-xr-x.2 root root 6 6月25 22:46 test01 drwxr-xr-x.2 root root 6 6月25 22:46 test02 [root@localhost ~]# mkdir /root/user01   //新建目录 [root@localhost ~]# tar -cvf /root/user01/test05.tar /mnt //将/mnt下的所有文件归并为文件test05.tar tar: 从成员名中删除开头的"/" /mnt/ /mnt/a05.txt /mnt/a05.txt /mnt/test01 /mnt/test02 [root@localhost ~]# ls /root/user01 test05.tar [root@localhost ~]# ② 在/root/user01目录下生成压缩文件test05.tar,使用gzip命令可对单个文件进行压缩,原归档文件test05.tar就没有了,并生成压缩文件test05.tar.gz,执行以下命令。 [root@localhost ~]# gzip /root/user01/test05.tar [root@localhost ~]# ls -l /root/user01 总用量 8 -rw-r--r--. 1 root root 190 6月25 22:36 test05.tar.gz [root@localhost ~]# ③ 在/root/user01目录下生成压缩文件test05.tar.gz,可以一次性完成归档和压缩,把两步合并为一步,执行以下命令。 [root@localhost ~]# tar -zcvf /root/user01/test05.tar.gz /mnt tar: 从成员名中删除开头的"/" /mnt/ /mnt/a05.txt /mnt/a05.txt /mnt/test01 /mnt/test02 [root@localhost ~]# ls -l /root/user01 总用量 16 -rw-r--r--. 1 root root 10240 6月25 22:36 test05.tar.gz [root@localhost ~]# ④ 对文件test05.tar.gz进行解压缩,执行以下命令。 [root@localhost ~]# cd /root/user01 [root@localhost user01]# ls -l 总用量 4 4 -rw-r--r--. 1 root root 175 6月25 23:13 test05.tar.gz [root@localhost user01]# gzip -d test05.tar.gz [root@localhost user01]# tar -xf test05.tar 也可以一次完成解压缩,把两步合并为一步,执行以下命令。 [root@localhost user01]# tar -zxf test05.tar.gz [root@localhost user01]# ls -l 总用量 4 drwxr-xr-x. 4 root root64 6月25 23:13 mnt -rw-r--r--. 1 root root175 6月25 23:13 test05.tar.gz [root@localhost user01]# cd mnt [root@localhost mnt]# ls -l 总用量 0 -rw-r--r--. 1 root root 0 6月25 23:12 a05.txt -rw-r--r--. 1 root root 0 6月25 23:12 a05.txt drwxr-xr-x.2 root root 6 6月25 23:13 test01 drwxr-xr-x.2 root root 6 6月25 23:13 test02 [root@localhost mnt]# 可查看用户目录下的文件列表,检查执行的情况,参数f之后的文件名是由用户自己定义的,通常应命名为便于识别的名称,并加上相对应的压缩名称,如xxx.tar.gz。在前面的实例中,如果加上z参数,则调用gzip进行压缩,通常以.tar.gz来代表gzip压缩过的TAR文件,注意,在压缩时自身不能处于要压缩的目录及子目录内。 (23) whereis命令查找文件位置。 whereis命令用于查找可执行文件、源代码文件、帮助文件在文件系统中的位置。其命令格式如下。 whereis[选项]文件 whereis命令各选项及其功能说明,如表5.17所示。 表5.17whereis命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 b只搜索二进制文件S<目录>定义源代码查找路径 B<目录>定义二进制文件查找路径f终止 <目录> 参数列表 m只搜索man手册u搜索不常见记录 M<目录>定义man手册查找路径l输出有效查找路径 s只搜索源代码 使用whereis命令查找文件位置时,执行以下命令。 [root@localhost ~]# whereis passwd passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/ passwd.5.gz [root@localhost ~]# (24) locate命令查找绝对路径中包含指定字符串的文件的位置。 locate命令用于查找可执行文件、源代码文件、帮助文件在文件系统中的位置。其命令格式如下。 locate[选项]文件 locate命令各选项及其功能说明,如表5.18所示。 表5.18locate命令各选项及其功能说明 选项功 能 说 明 b仅匹配路径名的基名 c只输出找到的数量 d使用DBPATH指定的数据库,而不是默认数据库/var/lib/mlocate/mlocate.db e仅输出当前现有文件的条目 L当文件存在时,跟随蔓延的符号链接(默认) h显示帮助 i忽略字母大小写 lLIMIT限制为LIMIT项目的输出(或计数) q安静模式,不会显示任何错误信息 r使用基本正则表达式 w匹配整个路径名(默认) 使用locate命令查找文件位置时,执行命令如下。 [root@localhost ~]# locate passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd /etc/security/opasswd /usr/bin/gpasswd … [root@localhost ~]# locate -c passwd   //只输出找到的数量 153 [root@localhost ~]# locate firefox | grep rpm   //查找firefox文件的位置 /var/cache/yum/x86_64/7/updates/packages/firefox-68.15.0-5.el7.CentOS.x86_65.rpm (25) find命令文件查找。 find命令用于文件查找,其功能非常强大,对于文件和目录的一些比较复杂的搜索操作,可以灵活应用最基本的通配符和搜索命令find来实现,其可以在某一目录及其所有的子目录中快速搜索具有某些特征的目录或文件。其命令格式如下。 find[路径][匹配表达式][-exec command] find命令各匹配表达式及其功能说明,如表5.19所示。 表5.19find命令各匹配表达式及其功能说明 匹配表达式功 能 说 明 name filename查找指定名称的文件 user username查找属于指定用户的文件 group groupname查找属于指定组的文件 print显示查找结果 type查找指定类型的文件。文件类型有: b(块设备文件)、c(字符设备文件)、d(目录)、p(管道文件)、l(符号链接文件)、f(普通文件) mtime n类似于atime,但查找的是文件内容被修改的时间 ctime n类似于atime,但查找的是文件索引节点被改变的时间 newer file查找比指定文件新的文件,即文件的最后修改时间离现在较近 perm mode查找与给定权限匹配的文件,必须以八进制的形式给出访问权限 exec command {} \;对匹配指定条件的文件执行command命令 ok command {} \;与exec相同,但执行command命令时请用户确认 使用find命令查找文件时,执行命令如下。 [root@localhost ~]# find /etc -name passwd /etc/pam.d/passwd /etc/passwd [root@localhost ~]# find / -name "firefox*.rpm" /var/cache/yum/x86_64/7/updates/packages/firefox-68.15.0-5.el7.CentOS.x86_65.rpm [root@localhost ~]# [root@localhost ~]# find /etc -type f -exec ls -l {} \; -rw-r--r--. 1 root root 465 6月 8 01:15 /etc/fstab -rw-------. 1 root root 0 6月8 01:15 /etc/crypttab -rw-r--r--. 1 root root49 6月26 09:38 /etc/resolv.conf …(省略部分内容) [root@localhost ~]# (26) which命令确定程序的具体位置。 which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录,which命令会在环境变量PATH设置的目录中查找符合条件的文件,也就是说,使用which命令可以看到某个系统指令是否存在,以及执行的命令的位置。其命令格式如下。 which[选项][--]COMMAND which命令各选项及其功能说明,如表5.20所示。 表5.20which命令各选项及其功能说明 选项功 能 说 明 version输出版本信息 help输出帮助信息 skipdot跳过以点开头的路径中的目录 showdot不将点扩展到输出的当前目录中 showtilde输出一个目录的非根 ttyonly如果不处于TTY模式,则停止右侧的处理选项 all, a输出所有的匹配项,但不输出第一个匹配项 readalias, i从标准输入读取别名列表 skipalias忽略选项readalias,不读取标准输入 readfunctions从标准输入读取shell方法 skipfunctions忽略选项readfunctions 使用which命令查找文件位置时,执行命令如下。 [root@localhost ~]# which find /usr/bin/find [root@localhost ~]# which --show-tilde pwd /usr/bin/pwd [root@localhost ~]# which --version bash GNU which v5.20, Copyright (C) 1999 - 2008 Carlo Wood. GNU which comes with ABSOLUTELY NO WARRANTY; This program is free software; your freedom to use, change and distribute this program is protected by the GPL. [root@localhost ~]# (27) grep命令查找文件中包含指定字符串的行。 grep是一个强大的文本搜索命令,它能使用正则表达式搜索文本,并把匹配的行输出。在grep命令中,字符“^”表示行的开始,字符“$”表示行的结束,如果要查找的字符串中带有空格,则可以用单引号或双引号将其引起来。其命令格式如下。 grep[选项][正则表达式]文件名 grep命令各选项及其功能说明,如表5.21所示。 表5.21grep命令各选项及其功能说明 选项功 能 说 明 a对二进制文件以文本文件的方式搜索数据 c对匹配的行计数 i忽略字母大小写的不同 l只显示包含匹配模式的文件名 n每个匹配行只按照相对的行号显示 v反向选择,列出不匹配的行 使用grep命令查找文件位置时,执行以下命令。 [root@localhost ~]# grep "root" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin csg:x:1000:1000:root:/home/csg:/bin/bash [root@localhost ~]# grep -il "root" /etc/passwd /etc/passwd [root@localhost ~]# grep与find命令的差别在于,grep是在文件中搜索满足条件的行,而find是在指定目录下根据文件的相关信息查找满足指定条件的文件。 (28) sort命令对文本文件内容进行排序。 sort命令用于将文本文件内容加以排序。其命令格式如下。 sort[选项]文件名 sort命令各选项及其功能说明,如表5.22所示。 表5.22sort命令各选项及其功能说明 选项功 能 说 明 b忽略前导的空白区域 c检查输入是否已排序,若已排序,则不进行操作 d只考虑空白区域和字母字符 f忽略字母大小写 i除了040~176中的ASCII字符外,忽略其他的字符 m将几个排序好的文件合并 M将前面3个字母依照月份的缩写进行排序 n依照数值的大小进行排序 o将结果写入文件而非标准输出 r逆序输出排序结果 s禁用lastresort比较,以稳定比较算法 t使用指定的分隔符代替非空格到空格的转换 u配合c时,严格校验排序; 不配合c时,只输出一次排序结果 z以0 字节而非新行作为行尾标志 使用sort命令时,可针对文本文件的内容,以行为单位来进行排序,执行命令如下。 [root@localhost ~]# cat testfile05.txt   //查看testfile05.txt文件的内容 test 10 open 20 hello 30 welcome 40 [root@localhost ~]# sort testfile05.txt   //排序testfile05.txt文件的内容 hello 30 open 20 test 10 welcome 40 [root@localhost ~]# sort命令将以默认的方式使文本文件的第一列以ASCII码的次序排列,并将结果输出到标准输出。 5.2.4Vi、Vim编辑器的使用 可视化接口(Visual interface,Vi)也称为可视化界面,它为用户提供了一个全屏幕的窗口编辑器,窗口中一次可以显示一屏的编辑内容,并可以上下滚动。Vi是所有UNIX和Linux操作系统中的标准编辑器,类似于Windows操作系统中的记事本,对于UNIX和Linux操作系统中的任何版本,Vi编辑器都是完全相同的,因此可以在其他任何介绍Vi的地方进一步了解它,Vi也是Linux中最基本的文本编辑器,学会它后,可以在Linux,尤其是在终端中畅通无阻。 Vim(Visual interface improved,Vim)可以看作Vi的改进升级版,Vi和Vim都是Linux操作系统中的编辑器,不同的是,Vim比较高级,Vi用于文本编辑,但Vim更适用于面向开发者的云端开发平台。 Vim可以执行输出、移动、删除、查找、替换、复制、粘贴、撤销、块操作等众多文件操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序没有的。但Vim不是一个排版程序,它不像Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文件编辑程序,Vim是全屏幕文件编辑器,没有菜单,只有命令。 在命令行中执行命令vim filename,如果filename已经存在,则该文件被打开且显示其内容; 如果filename不存在,则Vim在第一次存盘时自动在硬盘中新建filename文件。 Vim有3种基本工作模式: 命令模式、编辑模式、末行模式。考虑到各种用户的需要,采用状态切换的方法可以实现工作模式的转换,切换只是习惯性的问题,一旦熟练使用Vim,就会觉得它非常易于使用。 1. 命令模式 命令模式(其他模式→Esc)是用户进入Vim的初始状态,在此模式下,用户可以输入Vim命令,使Vim完成不同的工作任务,如光标移动、复制、粘贴、删除等,也可以从其他模式返回到命令模式,在编辑模式下按Esc键或在末行模式下输入错误命令都会返回到命令模式。Vim命令模式的光标移动命令,如表5.23所示; Vim命令模式的复制和粘贴命令,如表5.24所示; Vim命令模式的删除操作命令,如表5.25所示; Vim命令模式的撤销与恢复操作命令,如表5.26所示。 表5.23Vim命令模式的光标移动命令 操作功 能 说 明 gg将光标移动到文章的首行 G将光标移动到文章的尾行 w或W将光标移动到下一个单词 H将光标移动到该屏幕的顶端 M光标移动到该屏幕的中间 L将光标移动到该屏幕的底端 h(←)将光标向左移动一格 l(→)将光标向右移动一格 j(↓)将光标向下移动一格 k(↑)将光标向上移动一格 0(Home)数字0,将光标移至行首 $(End)将光标移至行尾 Page Up/Page Down(Ctrl+B/Ctrl+F)上下翻屏 表5.24Vim命令模式的复制和粘贴命令 操作功 能 说 明 yy或Y(大写) 复制光标所在的整行 3yy或y3y复制3行(含当前行,后3行),如复制5行,则使用5yy或y5y即可 y1G复制至行文件首 yG复制至行文件尾 yw复制一个单词 y2w复制两个字符 p(小写)粘贴到光标的后(下)面,如果复制的是整行,则粘贴到光标所在行的下一行 P(大写)粘贴到光标的前(上)面,如果复制的是整行,则粘贴到光标所在行的上一行 表5.25Vim命令模式的删除操作命令 操作功 能 说 明 dd删除当前行 3dd或d3d删除3行(含当前行,后3行),如删除5行,则使用5dd或d5d即可 d1G删除至文件首 dG删除至文件尾 D或d$删除至行尾 dw删除至词尾 ndw删除后面的n个词 表5.26Vim命令模式的撤销与恢复操作命令 操作功 能 说 明 U(小写)取消上一个更改(常用) U(大写)取消一行内的所有更改 Ctrl+R重做一个动作(常用),通常与“u”配合使用,将会为编辑提供很多方便 .重复前一个动作,如果想要重复删除、复制、粘贴等,则按“.”键即可 2. 编辑模式 在编辑模式(命令模式→a/A、i/I或o/O)下,可对编辑的文件添加新的内容并进行修改,这是该模式的唯一功能。进入该模式时,可按a/A、i/I或o/O键。Vim编辑模式命令,如表5.27所示。 表5.27Vim编辑模式命令 操作功 能 说 明 a(小写)在光标之后插入内容 A(大写)在光标当前行的末尾插入内容 i(小写)在光标之前插入内容 I(大写)在光标当前行的开始部分插入内容 o(小写)在光标所在行的下面新增一行 O(大写)在光标所在行的上面新增一行 3. 末行模式 末行模式(命令模式→: 或/与?)主要用来进行一些文字编辑辅助功能,如查找、替换、文件保存等,在命令模式下输入“:”字符,即可进入末行模式,若输入命令完成或命令出错,则会退出Vim或返回到命令模式。Vim末行模式命令,如表5.28所示,按Esc键可返回命令模式。 表5.28Vim末行模式命令 操作功 能 说 明 ZZ(大写)保存当前文件并退出 :wq或:x保存当前文件并退出 :q结束Vim程序,如果文件有过修改,则必须先保存文件 :q!强制结束Vim程序,修改后的文件不会保存 :w[文件路径]保存当前文件,将其保存为另一个文件(类似于另存为新文件) :r[filename]在编辑的数据中,读入另一个文件的数据,即将filename文件的内容追加到光标所在行的后面 :!command暂时退出Vim到命令模式下执行command的显示结果,如“:!ls/home”表示可在Vim中查看/home下以ls输出的文件信息 :set nu显示行号,设定之后,会在每一行的前面显示该行的行号 :set nonu与:set nu相反,用于取消行号 在命令模式下输入“:”字符,即可进入末行模式,在末行模式下可以进行查找与替换操作,其命令格式如下。 :[range]s/pattern/string/[c,e,g,i] 查找与替换操作各选项及其功能说明,如表5.29所示。 表5.29查找与替换操作各选项及其功能说明 选项功 能 说 明 range指的是范围,如“1,5”指从第1行至第5行,“1,$”指从首行至最后一行,即整篇文章 s(search)表示查找搜索 pattern要被替换的字符串 string将用string替换pattern的内容 c(confirm)每次替换前会询问 e(error)不显示error g(globe)不询问,将做整行替换 i(ignore)不区分字母大小写 在命令模式下输入“/”或“?”字符,即可进入末行模式,在末行模式下可以进行查找操作,其命令格式如下。 /word或?word 查找操作各选项及其功能说明,如表5.30所示。 表5.30查找操作各选项及其功能说明 选项功 能 说 明 /word向光标之下寻找一个名称为word的字符串。例如,要在文件中查找“welcome”字符串,则输入/welcome即可 ?word向光标之上寻找一个名称为word的字符串 n代表英文按键,表示重复前一个查找的动作。例如,如果刚刚执行了/welcome命令向下查找welcome字符串,则按下n键后,会继续向下查找下一个名称为welcome的字符串; 如果执行了?welcome命令,那么按n键会向上查找名称为welcome的字符串 N代表英文按键,与n刚好相反,为反向进行前一个查找动作。例如,执行/welcome命令后,按N键表示向上查找welcome Vim编辑器的使用如下。 (1) 在当前目录下新建文件newtest.txt,输入文件内容,执行以下命令。 [root@localhost ~]# vim newtest.txt //创建新文件newtest.txt 在命令模式下按a/A、i/I或o/O键,进入编辑模式,完成以下内容的输入。 1hello 2everyone 3welcome 4to 5here 输入以上内容后,按Esc键,从编辑模式返回到命令模式,再输入大写字母“ZZ”,退出并保存文件内容。 (2) 复制第2行与第3行文本到文件尾,同时删除第1行文本。 按Esc键,从编辑模式返回到命令模式,将光标移动到第2行,在键盘上连续按2yy键,再按G键,将光标移动到文件最后一行,按p键,复制第2行与第3行文本到文件尾,按gg键,将光标移动到文件首行,按dd键,删除第1行文本,执行以上操作命令后,显示的文件内容如下。 2everyone 3welcome 4to 5here 2everyone 3welcome (3) 在命令模式下,输入“:”字符,进入末行模式,在末行模式下进行查找与替换操作,执行以下命令。 :1,$ s/everyone/myfriend/g 对整个文件进行查找,用myfriend字符串替换everyone,无询问进行替换操作,执行命令后的操作结果如下。 2myfriend 3welcome 4to 5here 2myfriend 3welcome (4) 在命令模式下,输入“?”或“/”,进行查询,执行以下命令。 /welcome 按Enter键后,可以看到光标位于第2行,welcome闪烁显示,按n键,可以继续进行查找,可以看到光标已经移动到最后一行welcome处进行闪烁显示。按a/A、i/I或o/O键,进入编辑模式,按Esc键返回命令模式,再输入“ZZ”,保存文件并退出Vim编辑器。 5.2.5磁盘配置与管理 从广义上来讲,硬盘、光盘和U盘等用来保存数据信息的存储设备都可以称为磁盘。其中,硬盘是计算机的重要组件,无论是在Windows操作系统还是在Linux操作系统中,都要使用硬盘。因此,规划和管理磁盘是非常重要的工作。 1. Linux操作系统中的设备命名规则 在Linux操作系统中,每个硬件设备都有一个称为设备名称的特别名称,例如,对于接在IDE1的第一个硬盘(主硬盘),其设备名称为/dev/hda,也就是说,可以用“/dev/hda”来代表此硬盘。对于以下信息,相信读者能够一目了然。下面介绍硬盘设备在Linux操作系统中的命名规则。 IDE1的第1个硬盘(master)/dev/hda; IDE1的第2个硬盘(slave) /dev/hdb; …… IDE2的第1个硬盘(master)/dev/hdc; IDE2的第2个硬盘(slave) /dev/hdd; …… SCSI的第1个硬盘 /dev/sda; SCSI的第2个硬盘 /dev/sdb; …… 在Linux操作系统中,分区的概念和Windows中的概念更加接近,按照功能的不同,硬盘分区可以分为以下几类。 (1) 主分区。在划分硬盘的第1个分区时,会指定其为主分区,Linux最多可以让用户创建4个主分区,其主要用来存放操作系统的启动或引导程序,/boot分区最好放在主分区中。 (2) 扩展分区。Linux下的一个硬盘最多只允许有4个主分区,如果用户想要创建更多的分区,应该怎么办?这就有了扩展分区的概念。用户可以创建一个扩展分区,并在扩展分区中创建多个逻辑分区,从理论上来说,其逻辑分区没有数量限制。需要注意的是,创建扩展分区时,会占用一个主分区的位置,因此,如果创建了扩展分区,则一个硬盘中最多只能创建3个主分区和1个扩展分区。扩展分区不是用来存放数据的,它的主要功能是创建逻辑分区。 (3) 逻辑分区。逻辑分区不能被直接创建,它必须依附在扩展分区下,容量受到扩展分区大小的限制,逻辑分区通常用于存放文件和数据。 大部分设备的前缀名后面跟有一个数字,它唯一指定了某一设备; 硬盘驱动器的前缀名后面跟有一个字母和一个数字,字母用于指明设备,而数字用于指明分区。因此,/dev/sda2指定了硬盘上的一个分区,/dev/pts/10指定了一个网络终端会话。设备节点前缀及设备类型说明,如表5.31所示。 表5.31设备节点前缀及设备类型说明 设备节点前缀设备类型说明设备节点前缀设备类型说明 fbFRame缓冲ttyS串口 fd软盘scdSCSI音频光驱 hdIDE硬盘sdSCSI硬盘 lp打印机sgSCSI通用设备 par并口srSCSI数据光驱 pt伪终端stSCSI磁带 tty终端md磁盘阵列 一些Linux发行版用SCSI层访问所有固定硬盘,因此,虽然硬盘有可能并不是SCSI硬盘,但仍可以通过存储设备进行访问。 有了磁盘命名和分区命名的概念,理解诸如/dev/hda1之类的分区名称就不难了,分区命名规则如下。 IDE1的第1个硬盘(master)的第1个主分区 /dev/hda1; IDE1的第1个硬盘(master)的第2个主分区 /dev/hda2; IDE1的第1个硬盘(master)的第1个逻辑分区 /dev/hda5; IDE1的第1个硬盘(master)的第2个逻辑分区 /dev/hda6; …… IDE1的第2个硬盘(slave)的第1个主分区 /dev/hdb1; IDE1的第2个硬盘(slave)的第2个主分区 /dev/hdb2; …… SCSI的第1个硬盘的第1个主分区 /dev/sda1; SCSI的第1个硬盘的第2个主分区 /dev/sda2; …… SCSI的第2个硬盘的第1个主分区 /dev/sdb1; SCSI的第2个硬盘的第2个主分区 /dev/sdb2; …… 2. 添加新磁盘管理 新购置的物理硬盘,不管是用于Windows操作系统还是用于Linux操作系统,都要进行如下操作。 (1) 分区: 可以是一个分区或多个分区。 (2) 格式化: 分区必须经过格式化才能创建文件系统。 (3) 挂载: 被格式化的磁盘分区必须挂载到操作系统相应的文件目录下。 Windows操作系统自动帮助用户完成了挂载分区到目录的工作,即自动将磁盘分区挂载到盘符; Linux操作系统除了会自动挂载根分区启动项外,其他分区都需要用户自己配置,所有的磁盘都必须挂载到文件系统相应的目录下。 为什么要将一个硬盘划分成多个分区,而不是直接使用整个硬盘呢?主要有如下原因。 (1) 方便管理和控制。可以将系统中的数据(包括程序)按不同的应用分成几类,之后将不同类型的数据分别存放在不同的磁盘分区中。由于在每个分区中存放的都是类似的数据或程序,因此管理和维护会简单很多。 (2) 提高系统的效率。给硬盘分区后,可以直接缩短系统读写磁盘时磁头移动的距离,也就是说,缩小了磁头搜寻的范围; 反之,如果不使用分区,则每次在硬盘中搜寻信息时可能要搜寻整个硬盘,搜寻速度会很慢。另外,硬盘分区可以减轻碎片(文件不连续存放)所造成的系统效率下降的问题。 (3) 使用磁盘配额的功能限制用户使用的磁盘量。由于限制了用户使用磁盘配额的功能,即只能在分区一级上使用,所以为了限制用户使用磁盘的总量,防止用户浪费磁盘空间(甚至将磁盘空间耗光),最好先对磁盘进行分区,再分配给一般用户。 (4) 便于备份和恢复。硬盘分区后,可以只对所需的分区进行备份和恢复操作,这样备份和恢复的数据量会大大下降,操作也更简单和方便。 在进行分区、格式化和挂载操作之前,要先进行查看分区信息和在虚拟机中添加磁盘操作。 3. 查看分区信息 可以使用fdisk l命令查看当前系统所有磁盘设备及其分区的信息,如图5.1所示。 图5.1查看当前系统所有磁盘设备及其分区的信息 从图5.1中可以看出,安装系统时,硬盘分为/root分区、/boot分区和/swap分区,其中分区信息的各字段的含义如下。 (1) 设备: 分区的设备文件名称,如/dev/sda。 (2) Boot: 是否为引导分区。若是,则带有“*”标识/dev/sda1 *。 (3) Start: 该分区在硬盘中的起始位置(柱面数)。 (4) End: 该分区在硬盘中的结束位置(柱面数)。 (5) Blocks: 分区大小。 (6) Id: 分区类型的Id。ext4分区的Id为83,LVM分区的Id为8e。 (7) System: 分区类型。其中,“Linux”代表ext4文件系统,“Linux LVM”代表逻辑卷。 4. 在虚拟机中添加硬盘 练习硬盘分区操作时,需要先在虚拟机中添加一块新的硬盘,由于SCSI接口的硬盘支持热插拔,因此可以在虚拟机开机的状态下直接添加硬盘。 (1) 打开虚拟机软件,选择“虚拟机”→“设置”选项,如图5.2所示。 图5.2选择“虚拟机”→“设置”选项 (2) 弹出“虚拟机设置”对话框,如图5.3所示。 图5.3“虚拟机设置”对话框 (3) 单击“添加”按钮,弹出“添加硬件向导”对话框,如图5.4所示。 (4) 在硬件类型界面中,选择“硬盘”选项,单击“下一步”按钮,进入选择磁盘类型界面,如图5.5所示。 (5) 选中SCSI单选按钮,单击“下一步”按钮,进入选择磁盘界面,如图5.6所示。 (6) 选中“创建新虚拟磁盘”单选按钮,单击“下一步”按钮,进入指定磁盘容量界面,如图5.7所示。 图5.4“添加硬件向导”对话框 图5.5选择磁盘类型界面 图5.6选择磁盘界面 图5.7指定磁盘容量界面 (7) 设置最大磁盘大小,单击“下一步”按钮,进入指定磁盘文件界面,如图5.8所示。 图5.8指定磁盘文件界面 (8) 单击“完成”按钮,完成在虚拟机中添加硬盘的工作,返回“虚拟机设置”对话框,可以看到刚刚添加的20GB的SCSI硬盘,如图5.9所示。 图5.9添加的20GB的SCSI硬盘 (9) 单击“确定”按钮,返回虚拟机主界面,重新启动Linux操作系统,再执行fdisk l命令查看硬盘分区信息,如图5.10所示,可以看到新增加的硬盘/dev/sdb,系统识别到新的硬盘后,即可在该硬盘中建立新的分区。 图5.10查看硬盘分区信息 5. 磁盘分区 在安装Linux操作系统时,其中有一个步骤是进行磁盘分区,在分区时可以采用RAID和LVM等方式,除此之外,Linux操作系统中还提供了fdisk、cfdisk、parted等分区工具,这里主要介绍fdisk分区工具。 fdisk磁盘分区工具在DOS、Windows和Linux操作系统中都有相应的应用程序,在Linux操作系统中,fdisk是基于菜单的命令,对磁盘进行分区时,可以在fdisk命令后面直接加上要分区的磁盘作为参数。其命令格式如下。 fdisk [选项] <磁盘> 更改分区表 fdisk [选项] -l <磁盘> 列出分区表 fdisk -s <分区> 给出分区大小(块数) fdisk命令各选项及其功能说明如表5.32所示。 表5.32fdisk命令各选项及其功能说明 选项功 能 说 明 b<大小>区大小(512、1024、2048或4096) c[=<模式>]兼容模式: dos或nondos(默认) h输出此帮助文本 u[=<单位>]显示单位: cylinders(柱面)或sectors(扇区,默认) v输出程序版本 C<数字>指定柱面数 H <数字>指定磁头数 S <数字>指定每个磁道的扇区数 在对新增加的第2块SCSI硬盘进行分区时,执行命令如下。 [root@localhost ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-Linux 5.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xfb0b9128 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):m 命令操作 atoggle a bootable flag bedit bsd disklabel ctoggle the dos compatibility flag ddelete a partition gcreate a new empty GPT partition table Gcreate an IRIX (SGI) partition table llist known partition types mprint this menu nadd a new partition ocreate a new empty DOS partition table pprint the partition table qquit without saving changes screate a new empty Sun disklabel tchange a partition's system id uchange display/entry units v verify the partition table wwrite table to disk and exit xextra functionality (experts only) 命令(输入 m 获取帮助): 在“命令(输入 m 获取帮助):”提示符后若输入“m”,则可以查看所有命令的帮助信息,输入相应的命令可选择需要的操作。fdisk命令操作及其功能说明如表5.33所示。 表5.33fdisk命令操作及其功能说明 命 令 操 作功 能 说 明命 令 操 作功 能 说 明 a设置可引导标签o建立空白DOS分区表 b编辑BSD磁盘标签p显示分区列表 c设置DOS操作系统兼容标记q不保存并退出 d删除一个分区s新建空白SUN磁盘标签 g新建一个空的GPT分区表t改变一个分区的系统ID G新建一个IRIX(SGI)分区表u改变显示记录单位 l显示已知的文件系统类型,82为Linux Swap分区,83为Linux 分区v验证分区表 m显示帮助菜单w保存并退出 n新建分区x附加功能(仅专家) 使用fdisk命令对新增加的SCSI硬盘/dev/sdb进行分区操作,在此硬盘中创建两个主分区和一个扩展分区,在扩展分区中再创建两个逻辑分区。 (1) 执行fdisk/dev/sdb命令,进入交互的分区管理界面,在“命令(输入m获取帮助):”提示符后,用户可以输入特定的分区操作命令来完成各项分区管理任务,输入“n”可以进行创建分区的操作,包括创建主分区、扩展分区和逻辑分区,根据提示继续输入“p”选择创建主分区,输入“e”选择创建扩展分区,之后依次选择分区序号、起始位置、结束位置或分区大小即可创建新分区。 选择分区号时,主分区和扩展分区的序号只能为1~4,分区的起始位置一般由fdisk命令默认识别,结束位置或分区大小可以使用类似于“+size{K,M,G}”的形式,如“+2G”表示将分区的容量设置为2GB。 下面先创建一个容量为5GB的主分区,主分区创建结束之后 ,输入“p”查看已创建好的分区/dev/sdb1,执行命令如下。 命令(输入 m 获取帮助):n Partition type: pprimary (0 primary, 0 extended, 4 free) eextended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G 分区 1 已设置为 Linux 类型,大小设为 5 GB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:25.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0bcee221 设备 BootStartEndBlocksIdSystem /dev/sdb1 2048 10487807 5242880 83 Linux 命令(输入 m 获取帮助): (2) 继续创建第2个容量为3GB的主分区,主分区创建结束之后,输入“p”查看已创建好的分区/dev/sdb1、/dev/sdb2,执行命令如下。 命令(输入 m 获取帮助):n Partition type: pprimary (1 primary, 0 extended, 3 free) eextended Select (default p): p 分区号 (2-4,默认 2):2 起始 扇区 (10487808-41943039,默认为 10487808): 将使用默认值 10487808 Last 扇区, +扇区 or +size{K,M,G} (10487808-41943039,默认为 41943039):+3G 分区 2 已设置为 Linux 类型,大小设为 3 GB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:25.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0bcee221 设备 BootStartEndBlocksIdSystem /dev/sdb1 2048 10487807 5242880 83Linux /dev/sdb2 10487808 16779263 3145728 83 Linux 命令(输入 m 获取帮助): (3) 继续创建扩展分区,需要特别注意的是,必须将所有的剩余磁盘空间都分配给扩展分区,输入“e”创建扩展分区,扩展分区创建结束之后,输入“p”查看已经创建好的主分区和扩展分区,执行命令如下。 命令(输入 m 获取帮助):n Partition type: pprimary (2 primary, 0 extended, 2 free) eextended Select (default p): e 分区号 (3,4,默认 3): 起始 扇区 (16779264-41943039,默认为 16779264): 将使用默认值 16779264 Last 扇区, +扇区 or +size{K,M,G} (16779264-41943039,默认为 41943039): 将使用默认值 41943039 分区 3 已设置为 Extended 类型,大小设为 12 GB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:25.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0bcee221 设备 BootStartEndBlocksIdSystem /dev/sdb1 2048 10487807 5242880 83 Linux /dev/sdb2 10487808 16779263 3145728 83 Linux /dev/sdb3 16779264 41943039 12581888 5 Extended 命令(输入 m 获取帮助): 扩展分区的起始扇区和结束扇区使用默认值即可,可以把所有的剩余磁盘空间(共12GB)全部分配给扩展分区,从以上操作可以看出,划分的两个主分区的容量分别为5GB和3GB,扩展分区的容量为12GB。 (4) 扩展分区创建完成后即可创建逻辑分区,在扩展分区中再创建两个逻辑分区,磁盘容量分别为8GB和4GB,在创建逻辑分区的时候不需要指定分区编号,系统会自动从5开始顺序编号,执行命令如下。 命令(输入 m 获取帮助):n Partition type: pprimary (2 primary, 1 extended, 1 free) llogical (numbered from 5) Select (default p): l 添加逻辑分区 5 起始 扇区 (16781312-41943039,默认为 16781312): 将使用默认值 16781312 Last 扇区, +扇区 or +size{K,M,G} (16781312-41943039,默认为 41943039):+8G 分区 5 已设置为 Linux 类型,大小设为 8 GB 命令(输入 m 获取帮助):n Partition type: pprimary (2 primary, 1 extended, 1 free) llogical (numbered from 5) Select (default p): l 添加逻辑分区 6 起始 扇区 (33560576-41943039,默认为 33560576): 将使用默认值 33560576 Last 扇区, +扇区 or +size{K,M,G} (33560576-41943039,默认为 41943039): 将使用默认值 41943039 分区 6 已设置为 Linux 类型,大小设为 4 GB 命令(输入 m 获取帮助): (5) 再次输入“p”,查看分区创建情况,执行命令如下。 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:25.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0bcee221 设备 BootStartEndBlocksIdSystem /dev/sdb1 2048 10487807 5242880 83 Linux /dev/sdb2 10487808 16779263 3145728 83 Linux /dev/sdb3 16779264 41943039 12581888 5 Extended /dev/sdb5 16781312 33558527 8388608 83 Linux /dev/sdb6 33560576 41943039 4191232 83 Linux 命令(输入 m 获取帮助): (6) 完成对硬盘的分区以后,输入“w”保存并退出,或输入“q”不保存并退出fdisk。硬盘分区完成以后,一般需要重启系统以使设置生效; 如果不想重启系统,则可以使用partprobe命令使系统获取新的分区表的情况。这里可以使用partprobe命令重新查看/dev/sdb硬盘中分区表的变化情况,执行命令如下。 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]# partprobe /dev/sdb [root@localhost ~]# fdisk -l 磁盘 /dev/sda:45.9 GB, 42949672960 字节,83886080 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x00011a58 设备 BootStartEndBlocksIdSystem /dev/sda1* 2048 2099199 1048576 83 Linux /dev/sda2 2099200 83886079 40893440 8e Linux LVM 磁盘 /dev/sdb:25.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x0bcee221 设备 BootStartEnd BlocksIdSystem /dev/sdb1 2048 10487807 5242880 83 Linux /dev/sdb2 10487808 16779263 3145728 83 Linux /dev/sdb3 16779264 41943039 12581888 5 Extended /dev/sdb5 16781312 33558527 8388608 83 Linux /dev/sdb6 33560576 41943039 4191232 83 Linux 磁盘 /dev/mapper/CentOS-root:37.7 GB, 37706792960 字节,73646080 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘 /dev/mapper/CentOS-swap:4160 MB, 4160749568 字节,8126464 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 至此,已经完成了新增加硬盘的分区操作。 6. 磁盘格式化 完成分区创建之后,还不能直接使用磁盘,必须经过格式化才能使用,这是因为操作系统必须按照一定的方式来管理磁盘,并使系统识别出来,所以磁盘格式化的作用就是在分区中创建文件系统。Linux操作系统专用的文件系统是ext,包含ext3、ext4等诸多版本,CentOS中默认使用ext4文件系统。 mkfs命令的作用是在磁盘中创建Linux文件系统,mkfs命令本身并不执行建立文件系统的工作,而是调用相关的程序来实现。其命令格式如下。 mkfs [选项] [-t <类型>] [文件系统选项] <设备> [<大小>] mkfs命令各选项及其功能说明,如表5.34所示。 表5.34mkfs命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 t文件系统类型; 若不指定,则使用ext2v显示版本信息并退出 V解释正在进行的操作h显示帮助信息并退出 将新增加的SCSI硬盘分区/dev/sdb1按ext4文件系统进行格式化,执行命令如下。 [root@localhost ~]# mkfs //输入完命令后连续按两次Tab键 mkfsmkfs.cramfsmkfs.ext3mkfs.fatmkfs.msdosmkfs.xfs mkfs.btrfsmkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat [root@localhost ~]# mkfs -t ext4 /dev/sdb1 //按ext4文件系统进行格式化 mke2fs 5.45.9 (28-Dec-2013) 文件系统标签= … Writing superblocks and filesystem accounting information: 完成 使用同样的方法对/dev/sdb2、/dev/sdb5和/dev/sdb6进行格式化,需要注意的是,格式化时会清除分区中的所有数据,为了保证系统安全,要备份重要数据。 7. 磁盘挂载与卸载 挂载就是指定系统中的一个目录作为挂载点,用户通过访问这个目录来实现对硬盘分区数据的存取操作,作为挂载点的目录相当于一个访问硬盘分区的入口。例如,将/dev/sdb6挂载到/mnt目录中,当用户在/mnt目录下执行相关数据的存储操作时,Linux操作系统会到/dev/sdb6上执行相关操作。磁盘挂载示意图,如图5.11所示。 在安装Linux操作系统的过程中,自动建立或识别的分区通常会由系统自动完成挂载工作,如/root分区、/boot分区等,新增加的硬盘分区、光盘、U盘等设备,都必须由管理员手动挂载到系统目录中。 图5.11磁盘挂载示意图 Linux操作系统中提供了两个默认的挂载目录: /media和/mnt。 ① /media用作系统自动挂载点。 ② /mnt用作手动挂载点。 从理论上讲,Linux操作系统中的任何一个目录都可以作为挂载点,但从系统的角度出发,以下几个目录是不能作为挂载点使用的: /bin、/sbin、/etc、/lib、/lib64。 (1) 手动挂载。 mount命令的作用是将一个设备(通常是存储设备)挂载到一个已经存在的目录中,访问这个目录就是访问该存储设备。其命令格式如下。 mount [选项] [--source] <源> | [--target] <目录> mount命令各选项及其功能说明,如表5.35所示。 表5.35mount命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 a挂载fstab中的所有文件系统n不写/etc/mtab c不对路径进行规范化o挂载选项列表,以英文逗号分隔 f空运行; 跳过mount(2)系统调用r以只读方式挂载文件系统(同o ro) F对每个设备禁用fork(和a选项一起使用)t限制文件系统类型集合 T/etc/fstab的替代文件v输出当前进行的操作 h显示帮助信息并退出V显示版本信息并退出 i不调用mount.<类型> 助手程序w以读写方式挂载文件系统(默认) l列出所有带有指定标签的挂载 mount命令t<文件系统类型>与o<选项>参数选项及其含义,如表5.36所示。 表5.36mount命令t<文件系统类型>与o<选项>参数选项及其含义 t <文件系统类型>o <选项> 选项含义选项含义 ext4/xfsLinux目前常用的文件系统ro以只读方式挂载 msdosDOS的文件系统,即FAT16文件系统rw以读写方式挂载 vfatFAT32文件系统remount重新挂载已经挂载的设备 iso9660CDROM文件系统user允许一般用户挂载设备 ntfsNTFS文件系统nouser不允许一般用户挂载设备 auto自动检测文件系统codepage=xxx代码页 swap交换分区的系统类型iocharset=xxx字符集 设备文件名对应分区的设备文件名,如/dev/sdb1; 挂载点为用户指定的用于挂载点的目录,挂载点的目录需要满足以下几方面的要求。 ① 目录事先存在,可使用mkdir命令新建目录。 ② 挂载点目录不可被其他进程使用。 ③ 挂载点的原有文件将被隐藏。 将新增加的SCSI硬盘分区/dev/sdb1、/dev/sdb2、/dev/sdb5和/dev/sdb6分别挂载到/mnt/data01、/mnt/data02、/mnt/data05和/mnt/data06目录中,执行命令如下。 [root@localhost cdrom]# cd /mnt [root@localhost mnt]# mkdir data01 data02 data05 data06   //新建目录 [root@localhost mnt]# ls -l | grep '^d' //显示使用grep命令查找的以"d"开头的目录 drwxr-xr-x.2 root root 6 8月 25 11:59 data01 drwxr-xr-x.2 root root 6 8月 25 11:59 data02 drwxr-xr-x.2 root root 6 8月 25 11:59 data05 drwxr-xr-x.2 root root 6 8月 25 11:59 data06 dr--r--r--. 4 root root 82 8月 21 09:02 test [root@localhost mnt]# mount /dev/sdb1 /mnt/data01   //挂载目录 [root@localhost mnt]# mount /dev/sdb2 /mnt/data02 [root@localhost mnt]# mount /dev/sdb5 /mnt/data05 [root@localhost mnt]# mount /dev/sdb6 /mnt/data06 完成挂载后,可以使用df命令查看挂载情况,df命令主要用来查看系统中已经挂载的各个文件系统的磁盘使用情况,使用该命令可获取硬盘被占用的空间,以及目前剩余空间等信息。其命令格式如下。 df[选项][文件] df命令各选项及其功能说明,如表5.37所示。 表5.37df命令各选项及其功能说明 选项功 能 说 明 a显示所有文件系统的磁盘使用情况 h以人类易读的格式输出 H等于h,但计算时,1K表示1000,而不是1024 T输出所有已挂载文件系统的类型 i输出文件系统的inode信息,如果inode满了,则即使有空间也无法存储 k按块大小输出文件系统磁盘使用情况 l只显示本机的文件系统 使用df命令查看磁盘使用情况,执行命令如下。 [root@localhost mnt]# df -hT 文件系统类型容量已用可用已用%挂载点 /dev/mapper/CentOS-root xfs 36G 5.2G 30G 15% / … /dev/sdb1 ext4 5.8G 20M 5.6G 1% /mnt/data01 /dev/sdb2 ext4 5.9G 9.0M 5.8G 1% /mnt/data02 /dev/sdb5 ext4 7.8G 36M 7.3G 1% /mnt/data05 /dev/sdb6 ext4 3.9G 16M 3.7G 1% /mnt/data06 (2) 光盘挂载。 Linux将一切视为文件,光盘也不例外,识别出来的设备会存放在/dev目录下,需要将它挂载在一个目录中,才能以文件形式查看或者使用光盘。 使用mount命令实现光盘挂载,执行命令如下。 [root@localhost ~]# mount /dev/cdrom /media mount: /dev/sr0 写保护,将以只读方式挂载 也可以使用以下命令进行光盘挂载。 [root@localhost ~]# mount /dev/sr0 /media mount: /dev/sr0 写保护,将以只读方式挂载 显示磁盘使用情况,执行命令如下。 [root@localhost ~]# df -hT 文件系统类型容量已用可用已用%挂载点 /dev/mapper/CentOS-root xfs 36G 5.2G 30G 15% / devtmpfs devtmpfs 5.9G 0 5.9G 0% /dev tmpfs tmpfs 5.9G 0 5.9G 0% /dev/shm … /dev/sr0 iso9660 5.3G 5.3G 0 100% /media [root@localhost ~]# 显示磁盘挂载目录文件内容,执行命令如下。 [root@localhost ~]# ls -l /media 总用量 686 -rw-rw-r--. 1 root root 14 11月 26 2018 CentOS_BuildTag … -rw-rw-r--. 1 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7 -r--r--r--.1 root root 2883 11月 26 2018 TRANS.TBL [root@localhost ~]# (3) U盘挂载。 Linux将一切视为文件,U盘也不例外,识别出来的设备会存放在/dev目录下,需要将它挂载在一个目录中,才能以文件形式查看或者使用U盘。 使用mount命令实现U盘挂载,执行命令如下。 ① 插入U盘,使用fdisk l命令查看U盘是否被测试到,查看相关信息。 [root@localhost ~]# fdisk -l //查看U盘数据信息 磁盘 /dev/sdc:65.9 GB, 62930117632 字节,122910386 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x270b8f9b 设备Boot StartEndBlocksId System /dev/sdc1*1060864122910385609247617HPFS/NTFS/exFAT ② 进行U盘挂载,执行命令如下。 [root@localhost ~]# mkdir /mnt/u-disk [root@localhost ~]# mount /dev/sdc1 /mnt/u-disk mount: 未知的文件系统类型"NTFS" 从以上输出结果可以看出,无法进行U盘挂载,因为U盘文件系统类型为NTFS,所以Linux操作系统默认情况下是无法识别的,需要安装支持NTFS格式的数据包,默认情况下,CentOS 7.6安装光盘ISO镜像文件中包括NTFS格式的数据包,只是默认情况下不会自动安装,需要手动配置安装。 ③ 挂载光盘,编辑库仓文件local.repo,执行命令如下。 [root@localhost ~]# mount /dev/sr0 /media mount: /dev/sr0 写保护,将以只读方式挂载 [root@localhost ~]# vim /etc/yum.repos.d/local.repo [epel] name=epel baseurl=file:///media gpgcheck=0 enable=1 "/etc/yum.repos.d/local.repo" 5L, 65C 已写入 ④ 查看NTFS数据包,执行命令如下。 [root@localhost ~]# yum list | grep ntfs ntfs-3g.x86_64 2:2017.3.23-15.el7 epel ntfs-3g-devel.x86_64 2:2017.3.23-15.el7 epel ntfsprogs.x86_64 2:2017.3.23-15.el7 epel ⑤ 安装NTFS数据包,执行命令如下。 [root@localhost ~]# yum install ntfs-3g - y 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 正在解决依赖关系 --> 正在检查事务 --> 软件包 ntfs-3g.x86_65.5.2017.3.23-15.el7 将被安装 --> 解决依赖关系完成 依赖关系解决 =========================================================================== Package架构版本源大小 =========================================================================== 正在安装: ntfs-3gx86_642:2017.3.23-15.el7epel265 K 事务概要 =========================================================================== 安装 1 软件包 总下载量:265 K 安装大小:612 K … 正在安装 : 2:ntfs-3g-2017.3.23-15.el7.x86_64 1/1 验证中 : 2:ntfs-3g-2017.3.23-15.el7.x86_64 1/1 已安装: ntfs-3g.x86_64 2:2017.3.23-15.el7 完毕! ⑥ 安装成功后即可进行U盘挂载,执行命令如下。 [root@localhost ~]# mount/dev/sdb1/mnt/u-disk The disk contains an unclean file system (0, 0). The file system wasn't safely closed on Windows. Fixing. ⑦ U盘挂载成功,查看U盘挂载情况,执行命令如下。 [root@localhost ~]# df -hT 文件系统 类型容量已用可用已用%挂载点 /dev/mapper/CentOS-rootxfs36G5.3G31G13%/ … /dev/sdb1fuseblk59G5.7G54G9%/mnt/u-disk [root@localhost ~]# ⑧ 查看U盘数据信息,执行命令如下。 [root@localhost ~]# ls -l /mnt/u-disk 总用量 1 drwxrwxrwx. 1 root root 0 7月 8 17:12 GHO … drwxrwxrwx. 1 root root 0 8月 25 14:37 user02 (4) 自动挂载。 通过mount命令挂载的文件系统在Linux操作系统关机或重启时会被自动卸载,所以一般手动挂载磁盘之后要把挂载信息写入/etc/fstab文件,系统在开机时会自动读取/etc/fstab文件中的内容,根据文件中的配置挂载磁盘,这样就不需要每次开机启动之后都手动进行挂载了。/etc/fstab文件称为系统数据表(File System Table),其会显示系统中已经存在的挂载信息。 使用mount命令实现U盘挂载,执行命令如下。 ① 使用cat /etc/fstab命令查看文件内容。 [root@localhost ~]# cat /etc/fstab # /etc/fstab # Created by anaconda on Mon Jun 8 01:15:36 2020 # 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 / xfsdefaults0 0 UUID=6d58086e-0a6b-4399-93dc-c2016ea17fe0 /boot xfsdefaults0 0 /dev/mapper /CentOS-swap swap swap defaults 0 0 /etc/fstab文件中的每一行对应一个自动挂载设备,每行包括6列。/etc/fstab文件字段及其功能说明,如表5.38所示。 表5.38/etc/fstab文件字段及其功能说明 字段功 能 说 明 第1列需要挂载的设备文件名 第2列挂载点,必须是一个目录名且必须使用绝对路径 第3列文件系统类型,可以设置为auto,即由系统自动检测 第4列挂载参数,一般采用defaults,还可以设置rw、suid、dev、exec、auto等参数 第5列能否被dump备份。dump是一个用来备份的命令,这个字段的取值通常为0或者1(0表示忽略,1表示需要) 第6列是否检验扇区。在开机的过程中,系统默认以fsck命令检验系统是否完整 ② 编辑/etc/fstab文件,在文件尾部添加一行命令,执行命令如下。 [root@localhost ~]# vim /etc/fstab # /etc/fstab … /dev/mapper /CentOS-root / xfs defaults0 0 UUID=6d58086e-0a6b-4399-93dc-c2016ea17fe0 /boot xfs defaults 0 0 /dev/mapper /CentOS-swap swap swap defaults 0 0 /dev/sr0 /media auto defaults 00 ~ "/etc/fstab" 12L, 515C 已写入 [root@localhost ~]# mount -a //自动挂载系统中的所有文件系统 mount: /dev/sr0 写保护,将以只读方式挂载 [root@localhost ~]# 也可以使用以下命令修改文件的内容。 # echo "/dev/sr0 /media iso9660 defaults 0 0" >> /etc/fstab # mount -a ③ 结果测试,重启系统,显示分区挂载情况,执行命令如下。 [root@localhost ~]# reboot [root@localhost ~]# df -hT 文件系统 类型容量已用可用已用%挂载点 /dev/mapper/CentOS-root xfs 36G 5.3G 31G 13% / … /dev/sr0 iso9660 5.3G 5.3G 0 100% /media … (5) 卸载文件系统。 umount命令用于卸载一个已经挂载的文件系统(分区),相当于Windows操作系统中的弹出设备。其命令格式如下。 umount [选项] <源> | <目录> umount命令各选项及其功能说明,如表5.39所示。 表5.39umount命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 a卸载所有文件系统l立即断开文件系统 A卸载当前名称空间中指定设备对应的所有挂臷点o限制文件系统集合(和a选项一起使用) c不对路径进行规范化R递归卸载目录及其子对象 d若挂臷了回环设备,则释放该回环设备r若卸载失败,则尝试以只读方式重新挂臷 f强制卸载(遇到不响应的NFS时)t限制文件系统集合 i不调用umount.<类型> 辅助程序v输出当前进行的操作 n不写 /etc/mtab 使用umount命令卸载文件系统,执行命令如下。 [root@localhost ~]# umount /mnt/u-disk [root@localhost ~]# umount /media/cdrom [root@localhost ~]# df -hT 文件系统 类型容量已用可用已用%挂载点 /dev/mapper/CentOS-root xfs 36G 5.3G 31G 13% / devtmpfs devtmpfs 5.9G 0 5.9G 0% /dev … 在使用umount命令卸载文件系统时,必须保证此时的文件系统未处于busy状态,使文件系统处于busy状态的情况有: 文件系统中有打开的文件,某个进程的工作目录在此文件系统中,文件系统的缓存文件正在被使用等。 5.2.6逻辑卷配置与管理 逻辑卷管理器(Logical Volume Manager,LVM)是建立在磁盘分区和文件系统之间的一个逻辑层,其设计目的是实现对磁盘的动态管理。管理员利用LVM不用重新分区磁盘即可动态调整文件系统的大小,而且,当服务器添加新磁盘后,管理员不必将已有的磁盘文件移动到校检磁盘中,通过LVM即可直接跨越磁盘扩展文件系统,提供了一种非常高效灵活的磁盘管理方式。 通过LVM,用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘中,也可以提高I/O操作的性能,以及提供冗余保护,它的快照功能允许用户对逻辑卷进行实时的备份。 1. 逻辑卷简介 早期硬盘驱动器(Device Driver)呈现给操作系统的是一组连续的物理块,整个硬盘驱动器都分配给文件系统或者其他数据体,由操作系统或应用程序使用,这样做的缺点是缺乏灵活性: 当一个硬盘驱动器的空间使用完时,很难扩展文件系统的大小; 而当硬盘驱动器存储容量增加时,把整个硬盘驱动器分配给文件系统又会导致无法充分利用存储空间。 用户在安装Linux操作系统时遇到的一个常见问题是,如何正确评估分区的大小,以分配合适的硬盘空间?普通的磁盘分区管理方式在逻辑分区划分完成之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件受上层文件系统的限制,无法跨越多个分区存放,所以也不能同时存放到其他磁盘上。当某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这并没有从根本上解决问题。随着逻辑卷管理功能的出现,该问题迎刃而解,用户可以在无须停机的情况下方便地调整各个分区的大小。 对一般用户而言,使用最多的是动态调整文件系统大小的功能。这样,在分区时就不必为如何设置分区的大小而烦恼,只要在硬盘中预留部分空间,并根据系统的使用情况动态调整分区大小即可。 LVM是在磁盘分区和文件系统之间添加一个逻辑层,为文件系统屏蔽下层磁盘分区,通过它可以将若干个磁盘分区连接为一个整块的抽象卷组,在卷组中可以任意创建逻辑卷并在逻辑卷中建立文件系统,最终在系统中挂载使用的就是逻辑卷,逻辑卷的使用方法与管理方式和普通的磁盘分区是完全一样的。LVM磁盘组织结构,如图5.12所示。 图5.12LVM磁盘组织结构 LVM中主要涉及以下几个概念。 (1) 物理存储介质(Physical Storage Media): 指系统的物理存储设备,如磁盘、/dev/sda、/dev/had等,是存储系统最底层的存储单元。 (2) 物理卷(Physical Volume,PV): 指磁盘分区或逻辑上与磁盘分区具有同样功能的设备,是LVM最基本的存储逻辑块,但和基本的物理存储介质(如分区、磁盘)相比,其包含与LVM相关的管理参数。 (3) 卷组(Volume Group,VG): 类似于非LVM系统中的物理磁盘,由一个或多个物理卷组成,可以在卷组中创建一个或多个逻辑卷。 (4) 逻辑卷: 可以将卷组划分成若干个逻辑卷,相当于在逻辑硬盘上划分出几个逻辑分区,逻辑卷建立在卷组之上,每个逻辑分区上都可以创建具体的文件系统,如/home、/mnt等。 (5) 物理块: 每一个物理卷被划分成称为物理块的基本单元,具有唯一编号的物理块是可以被LVM寻址的最小单元,物理块的大小是可以配置的,默认为4MB,物理卷由大小相同的基本单元——物理块组成。 在CentOS 7.6操作系统中,LVM得到了重视,在安装系统的过程中,如果设置由系统自动进行分区,则系统除了创建一个/boot引导分区之外,会对剩余的磁盘空间全部采用LVM进行管理,并在其中创建两个逻辑卷,分别挂载到/root分区和/swap分区中。 2. 配置逻辑卷 磁盘分区是实现LVM的前提和基础,在使用LVM时,需要先划分磁盘分区,再将磁盘分区的类型设置为8e,最后才能将分区初始化为物理卷。 (1) 创建磁盘分区。 这里使用前面安装的第二块硬盘的主分区/dev/sdb2和逻辑分区/dev/sdb6来进行演示,需要注意的是,要先将分区/dev/sdb2和/dev/sdb6卸载以便进行演示,并使用fdisk命令查看/dev/sdb硬盘分区情况,执行命令如下。 [root@localhost ~]# fdisk -l /dev/sdb 磁盘 /dev/sdb:25.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x28cba55d 设备 Boot StartEnd BlocksIdSystem /dev/sdb1 2048 10487807 5242880 83 Linux /dev/sdb2 10487808 20973567 5242880 83 Linux /dev/sdb3 20973568 41943039 10484736 5 Extended /dev/sdb5 20975616 31461375 5242880 83 Linux /dev/sdb6 31463424 41943039 5239808 83 Linux 在fdisk命令中,使用t选项可以更改分区的类型,如果不知道分区类型对应的ID,则可以输入“L”来查看各分区类型对应的ID,如图5.13所示。 图5.13查看各分区类型对应的ID 下面将/dev/sdb2和/dev/sdb6的分区类型更改为Linux LVM,即将分区的ID修改为8e,如图5.14所示。分区创建成功后要保存分区表,重启系统或使用partprobe/dev/sdb命令即可。 图5.14更改分区类型 (2) 创建物理卷。 pvcreate命令用于将物理硬盘分区初始化为物理卷,以便LVM使用。其命令格式如下。 pvcreate[选项][参数] pvcreate命令各选项及其功能说明,如表5.40所示。 表5.40pvcreate命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 f强制创建物理卷,不需要用户确认y所有问题都回答yes u指定设备的UUIDZ是否利用前4个扇区 将/dev/sdb2和/dev/sdb6分区转换为物理卷,执行相关命令,如图5.15所示。 图5.15将分区转换为物理卷 pvscan命令会扫描系统中连接的所有硬盘,并列出找到的物理卷列表。其命令格式如下。 pvscan[选项][参数] pvscan命令各选项及其功能说明,如表5.41所示。 表5.41pvscan命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 d调试模式u显示UUID n仅显示不属于任何卷组的物理卷e仅显示属于输出卷组的物理卷 s以短格式输出 使用pvscan命令扫描系统中连接的所有硬盘,并列出找到的物理卷列表,执行命令如下。 [root@localhost ~]# pvscan -s /dev/sda2 /dev/sdb6 /dev/sdb2 Total: 3 [48.99 GiB] / in use: 1 [<39.00 GiB] / in no VG: 2 [<10.00 GiB] (3) 创建卷组。 卷组设备文件在创建卷组时自动生成,位于/dev目录下,与卷组同名,卷组中的所有逻辑设备文件都保存在该目录下,卷组中可以包含一个或多个物理卷。vgcreate命令用于创建LVM卷组。其命令格式如下。 vgcreate[选项]卷组名 物理卷名 [物理卷名…] vgcreate命令各选项及其功能说明,如表5.42所示。 表5.42vgcreate命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 l卷组中允许创建的最大逻辑卷数s卷组中的物理卷的大小,默认值为4MB p卷组中允许添加的最大物理卷数 vgdisplay命令用于显示LVM卷组的信息,如果不指定卷组参数,则分别显示所有卷组的属性。其命令格式如下。 vgdisplay[选项][卷组名] vgdisplay命令各选项及其功能说明如表5.43所示。 表5.43vgdisplay命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 A仅显示活动卷组的属性s使用短格式输出信息 为物理卷/dev/sdb2和/dev/sdb6创建名为vggroup01的卷组并查看相关信息,如图5.16所示。 图5.16创建卷组并查看相关信息 (4) 创建逻辑卷。 lvcreate命令用于创建LVM逻辑卷,逻辑卷是创建在卷组之上的,逻辑卷对应的设备文件保存在卷组目录下。其命令格式如下。 lvcreate[选项]逻辑卷名 卷组名 lvcreate命令各选项及其功能说明,如表5.44所示。 表5.44 lvcreate命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 L指定逻辑卷的大小,单位为“kKmMgGtT”字节n后接逻辑卷名 l指定逻辑卷的大小(LE数)s创建快照 lvdisplay命令用于显示LVM逻辑卷空间大小、读写状态和快照信息等属性,如果省略逻辑卷参数,则lvdisplay命令显示所有的逻辑卷属性; 否则仅显示指定的逻辑卷属性。其命令格式如下。 lvdisplay[选项]逻辑卷名 lvdisplay命令各选项及其功能说明如表5.45所示。 表5.45lvdisplay命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 C以列的形式显示h显示帮助信息 从vggroup01卷组中创建名为databackup、容量为8GB的逻辑卷,并使用lvdisplay命令查看逻辑卷的详细信息,如图5.17所示。 图5.17创建逻辑卷并查看逻辑卷的详细信息 创建逻辑卷databackup后,查看vggroup01卷组的详细信息,如图5.18所示,可以看到vggroup01卷组还有5.99GB的空闲空间。 图5.18查看vggroup01卷组的详细信息 (5) 创建并挂载文件系统。 逻辑卷相当于一个磁盘分区,使用逻辑卷需要进行格式化和挂载。 对逻辑卷/dev/vggroup01/databackup进行格式化,如图5.19所示。 图5.19对逻辑卷进行格式化 创建挂载点目录,对逻辑卷进行手动挂载或者修改/etc/fstab文件进行自动挂载,挂载后即可使用,如图5.20所示。 图5.20挂载并使用逻辑卷 3. 管理逻辑卷 逻辑卷创建完成以后,可以根据需要对其进行各种管理操作,如扩展、缩减和删除等。 (1) 增加新的物理卷到卷组中。 vgextend命令用于动态扩展LVM卷组,它通过向卷组中添加物理卷来增加组的容量,LVM卷组中的物理卷可以在使用vgcreate命令创建卷组时添加,也可以使用vgextend命令动态添加。其命令格式如下。 vgextend[选项][卷组名][物理卷路径] vgextend命令各选项及其功能说明如表5.46所示。 表5.46vgextend命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 d调试模式h显示命令的帮助信息 f强制扩展卷组v显示详细信息 (2) 从卷组中删除物理卷。 vgreduce命令通过删除LVM卷组中的物理卷来减少卷组容量。其命令格式如下。 vgreduce[选项][卷组名][物理卷路径] vgreduce命令各选项及其功能说明如表5.47所示。 表5.47vgreduce命令各选项及其功能说明 选项功 能 说 明 a如果没有指定要删除的物理卷,则删除所有空的物理卷 removemissing删除卷组中所有丢失的物理卷,使卷组恢复正常状态 (3) 减少逻辑卷空间。 lvreduce命令用于减少LVM逻辑卷占用的空间。使用lvreduce命令收缩逻辑卷的空间时有可能会删除逻辑卷中已有的数据,所以在操作前必须进行确认。其命令格式如下。 lvreduce[选项][参数] lvreduce命令各选项及其功能说明如表5.48所示。 表5.48lvreduce命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 L指定逻辑卷的大小,单位为“kKmMgGtT”字节l指定逻辑卷的大小(LE数) (4) 增加逻辑卷空间。 lvextend命令用于动态地扩展逻辑卷的空间,而不中断应用程序对逻辑卷的访问。其命令格式如下。 lvextend[选项][逻辑卷路径] lvextend命令各选项及其功能说明如表5.49所示。 表5.49lvextend命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 f强制扩展逻辑卷空间l指定逻辑卷的大小(LE数) L指定逻辑卷的大小,单位为“kKmMgGtT”字节r 重置文件系统使用的空间,单位为“kKmMgGtT”字节 (5) 更改卷组的属性。 vgchange命令用于修改卷组的属性,可以设置卷组处于活动状态或非活动状态。其命令格式如下。 vgchange[选项][卷组名] vgchange命令各选项及其功能说明如表5.50所示。 表5.50vgchange命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 a设置卷组中的逻辑卷的可用性s更改该卷组的物理卷大小 L更改现有不活动卷组的最大物理卷数量x启用或禁用在此卷组中扩展/减少物理卷 l更改现有不活动卷组的最大逻辑卷数量 (6) 删除逻辑卷。 lvremove命令用于删除指定的逻辑卷。其命令格式如下。 lvremove [选项][逻辑卷路径] lvremove命令各选项及其功能说明如表5.51所示。 表5.51lvremove命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 f强制删除noudevsync禁用Udev同步 (7) 创建卷组。 vgremove命令用于删除指定的卷组。其命令格式如下。 vgremove[选项][卷组名] vgremove命令各选项及其功能说明如表5.52所示。 表5.52vgremove命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 f强制删除v显示详细信息 (8) 删除物理卷。 pvremove命令用于删除指定的物理卷。其命令格式如下。 pvremove[选项][物理卷] pvremove命令各选项及其功能说明如表5.53所示。 表5.53pvremove命令各选项及其功能说明 选项功 能 说 明选项功 能 说 明 f强制删除y所有问题都回答yes 需要注意的是,当在现实生产环境中部署LVM时,要先创建物理卷、卷组、逻辑卷,再创建并挂载文件系统。当想重新部署LVM或不再需要使用LVM时,需要进行LVM的删除操作,其过程正好与创建LVM的过程相反,为此,需要提前备份好重要的数据信息,并依次卸载文件系统,删除逻辑卷、卷组、物理卷设备,这个顺序不可有误。 5.2.7RAID基础知识 独立磁盘冗余阵列(Redundant Arrays of Independent Disks,RAID)通常简称为磁盘阵列。简单地说,RAID是由多个独立的高性能磁盘驱动器组成的磁盘子系统,提供了比单个磁盘更高的存储性能和数据冗余技术。 1. RAID中的关键概念和技术 (1) 镜像。 镜像是一种冗余技术,为磁盘提供了保护功能,以防止磁盘发生故障而造成数据丢失。对于RAID而言,采用镜像技术将会同时在阵列中产生两个完全相同的数据副本,分布在两个不同的磁盘驱动器组中。镜像提供了完全的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可正常访问另一个副本,不会对应用系统的运行和性能产生影响。此外,镜像不需要额外的计算和校验,用于修复故障非常快,直接复制即可。镜像技术可以从多个副本并发读取数据,提供了更高的读取性能,但不能并行写数据,写多个副本时会导致一定的 I/O 性能降低。 (2) 数据条带。 磁盘存储的性能瓶颈在于磁头寻道定位,它是一种慢速机械运动,无法与高速的CPU匹配。再者,单个磁盘驱动器性能存在物理极限,I/O性能非常有限。RAID由多块磁盘组成,数据条带技术将数据以块的方式分布存储在多个磁盘中,从而可以对数据进行并发处理。这样写入和读取数据即可在多个磁盘中同时进行,并发产生非常高的聚合I/O,有效地提高整体I/O性能,且具有良好的线性扩展性。这在对大容量数据进行处理时效果尤其显著,如果不分块,则数据只能先按顺序存储在磁盘阵列的磁盘中,需要时再按顺序读取。而通过条带技术,可获得数倍于顺序访问的性能提升。 (3) 数据校验。 镜像具有安全性高、读取性能高的特点,但冗余开销太大。数据条带通过并发性大幅提高了性能,但未考虑数据安全性、可靠性。数据校验是一种冗余技术,它以校验数据提供数据的安全性,可以检测数据错误,并在能力允许的前提下进行数据重构。相对于镜像,数据校验大幅缩减了冗余开销,用较小的代价换取了极佳的数据完整性和可靠性。数据条带技术提供了性能,数据校验提供了数据安全性,不同等级的RAID往往同时结合使用这两种技术。 采用数据校验时,RAID要在写入数据的同时进行校验计算,并将得到的校验数据存储在RAID成员磁盘中。校验数据可以集中保存在某个磁盘或分散存储在多个磁盘中,校验数据也可以分块,不同RAID等级的实现各不相同。当其中一部分数据出错时,就可以对剩余数据和校验数据进行反校验计算以重建丢失的数据。相对于镜像技术而言,校验技术节省了大量开销,但由于每次数据读写都要进行大量的校验运算,因此对计算机的运算速度要求很高,必须使用硬件RAID控制器。在数据重建恢复方面,校验技术比镜像技术复杂得多且速度慢得多。 2. 常见的RAID类型 (1) RAID0。 RAID0会把连续的数据分散到多个磁盘中进行存取,系统有数据请求时可以被多个磁盘并行执行,每个磁盘执行属于自己的那一部分数据请求。如果要做RAID0,则一台服务器至少需要两块硬盘,其读写速度是一块硬盘的两倍。如果有N块硬盘,则其读写速度是一块硬盘的N倍。虽然RAID0的读写速度可以提高,但是由于没有数据备份功能,因此安全性会低很多。如图5.21所示为RAID0技术结构示意图。 RAID0技术的优缺点分别如下。 优点: 充分利用I/O总线性能,使其带宽翻倍,读写速度翻倍; 充分利用磁盘空间,利用率为100%。 缺点: 不提供数据冗余; 无数据校验,无法保证数据的正确性; 存在单点故障。 应用场景: 对数据完整性要求不高的场景,如日志存储、个人娱乐; 对读写效率要求高,而对安全性能要求不高的场景,如图像工作站。 (2) RAID1。 RAID1会通过磁盘数据镜像实现数据冗余,在成对的独立磁盘中产生互为备份的数据。当原始数据繁忙时,可直接从镜像副本中读取数据。同样地,要做RAID1至少需要两块硬盘,当读取数据时,其中一块硬盘会被读取,另一块硬盘会被用作备份。其数据安全性较高,但是磁盘空间利用率较低,只有50%。如图5.22所示为RAID1技术结构示意图。 图5.21RAID0技术结构示意图 图5.22RAID1技术结构示意图 RAID1技术的优缺点如下。 优点: 提供了数据冗余,数据双倍存储; 提供了良好的读取性能。 缺点: 无数据校验; 磁盘利用率低,成本高。 应用场景: 存放重要数据的场景,如数据存储领域。 (3) RAID5。 RAID5应该是目前最常见的RAID等级,具备很好的扩展性。当阵列磁盘数量增加时,并行操作的能力随之增加,可支持更多的磁盘,从而拥有更高的容量及更高的性能。RAID5的磁盘可同时存储数据和校验数据,数据块和对应的校验信息保存在不同的磁盘中,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。与其他RAID等级一样,重建数据时,RAID5的性能会受到较大的影响。 RAID5兼顾了存储性能、数据安全和存储成本等各方面因素,基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。RAID0大幅提升了设备的读写性能,但不具备容错能力; RAID1虽然十分注重数据安全,但是磁盘利用率太低。RAID5可以理解为RAID0和RAID1的折中方案,是目前综合性能最好的数据保护解决方案,一般而言,中小企业会采用RAID5,大企业会采用RAID10。如图5.23所示为RAID5技术结构示意图。 图5.23RAID5技术结构示意图 RAID5技术的优缺点如下。 优点: 读写性能高; 有校验机制; 磁盘空间利用率高。 缺点: 磁盘越多,安全性能越差。 应用场景: 对安全性能要求高的场景,如金融、数据库、存储等。 (4) RAID01。 RAID01是先做条带化再做镜像,本质是对物理磁盘实现镜像; 而RAID10是先做镜像再做条带化,本质是对虚拟磁盘实现镜像。相同的配置下,RAID01比RAID10具有更好的容错能力。 RAID01的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,则其仍可继续工作,在保证数据安全性的同时提高了性能。RAID01和RAID10内部都含有RAID1模式,因此整体磁盘利用率仅为50%。如图5.24所示为RAID01技术结构示意图。 图5.24RAID01技术结构示意图 RAID01技术的优缺点如下。 优点: 提供了较高的I/O性能; 有数据冗余; 无单点故障。 缺点: 成本稍高; 安全性能比RAID10差。 应用场景: 特别适用于既有大量数据需要存取,又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、档案管理等。 (5) RAID10。 如图5.25所示为RAID10技术结构示意图。 图5.25RAID10技术结构示意图 RAID10技术的优缺点如下。 优点: RAID10的读取性能优于RAID01; 提供了较高的I/O性能; 有数据冗余; 无单点故障; 安全性能高。 缺点: 成本稍高。 应用场景: 特别适用于既有大量数据需要存取,又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、档案管理等。 (6) RAID50。 RAID50具有RAID5和RAID0的共同特性。它由两组RAID5磁盘组成(其中,每组最少有3个磁盘),每一组都使用了分布式奇偶位; 而两组RAID5磁盘再组建成RAID0,实现跨磁盘数据读取。RAID50提供了可靠的数据存储和优秀的整体性能,并支持更大的卷尺寸。即使两个物理磁盘(每个阵列中的一个)发生故障,数据也可以顺利恢复。RAID50最少需要6个磁盘,其适用于高可靠性存储、高读取速度、高数据传输性能的应用场景,包括事务处理和有许多用户存取小文件的办公应用程序。如图5.26所示为RAID50技术结构示意图。 图5.26RAID50技术结构示意图 5.2.8网络配置管理 Linux主机要想与网络中的其他主机进行通信,必须进行正确的网络配置,网络配置通常包括主机名、IP地址、子网掩码、默认网关、DNS服务器等的配置。 1. 网卡配置文件 网卡IP地址配置得是否正确决定了服务器能否相互通信,在Linux操作系统中,一切都是文件,因此配置网络服务其实就是编辑网卡配置文件。 在CentOS 7以前,网卡配置文件的前缀为eth,第1块网卡为eth0,第2块网卡为eth1,以此类推; 而在CentOS 7.6中,网卡配置文件的前缀是ifcfg,其后为网卡接口名称,它们共同组成了网卡配置文件的名称,如ifcfgens33。 CentOS 7.6操作系统中的网卡配置文件为/etc/sysconfig/networkscripts/ifcfg,其中,iface为网卡接口名称,本书中是ens33,网卡配置文件的语法格式,如表5.54所示。 表5.54网卡配置文件的语法格式 选项功 能 说 明默认值可选值 TYPE网络类型EthernetEthernet,Wireless,TeamPort,Team,VLAN PROXY_METHOD代理配置的方法nonenone,auto BROWSER_ONLY代理配置是否仅用于浏览器nono,yes BOOTPROTO网卡获取IP地址的方式dhcpnone,dhcp,static,shared,ibft,autoip DEFROUTE即default route,是否将此设备设置为默认路由yesno,yes IPV4_FAILURE_FATAL如果IPv4配置失败,是否禁用设备nono,yes IPV6INIT是否启用IPv6的接口yesno,yes IPV6_AUTOCONF如果IPv6配置失败,则是否禁用设备yesno,yes IPV6_DEFROUTE如果IPv6配置失败,则是否禁用设备yesno,yes IPV6_FAILURE_FATAL如果IPv6配置失败,则是否禁用设备nono,yes IPV6_ADDR_GEN_MODE生成IPv6地址的方式stableprivacyeui64,stableprivacy NAME网络连接的名称 UUID用来标识网卡的唯一识别码 DEVICE网卡的名称ens33 ONBOOT在开机或重启网卡时是否启动网卡nono,yes HWADDR硬件MAC地址IPADDRIP地址 NETMASK子网掩码 PREFIX网络前缀 GATEWAY网关 DNS{1,2}域名解析器 配置网络IP地址,并查看相关信息。 (1) 打开Linux操作系统终端窗口,使用ifconfig或ip address命令,可以查看本地IP地址,如图5.27所示。 (2) 编辑网络配置文件/etc/sysconfig/networkscripts/ifcfgens33,如图5.28所示。 (3) 修改网卡配置文件的内容,如图5.29所示。使用Vim编辑器进行配置内容的修改,相关修改内容如下。 [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改选项: BOOTPROTO=dhcp--->static //将DHCP配置为静态 ONBOOT=no--->yes   //是否激活网卡,配置为激活网卡 增加选项: IPADDR=195.168.100.100   //配置IP地址 PREFIX=24或NETMASK=255.255.255.0   //配置网络子网掩码 GATEWAY=195.168.100.2   //配置网关 DNS1=8.8.8.8   //配置DNS地址 [root@localhost ~]# systemctl restart network   //重启网络服务 图5.27查看本地IP地址 图5.28编辑网络配置文件 图5.29修改网卡配置文件的内容 (4) 使用ifconfig命令,查看网络配置结果,如图5.30所示。 图5.30查看网络配置结果 2. 主机名配置文件与主机名解析配置文件 [root@localhost ~]# cat /etc/hostname localhost.localdomain [root@localhost ~]# cat /etc/hosts 127.0.0.1localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@localhost ~]# 该文件只有一行,记录了本机的主机名,即用户在安装CentOS 7.6时指定的主机名,用户可以直接对其进行修改。 注意: 直接修改/etc/hostname中的主机名时,应同时修改/etc/hosts文件的内容。 3. 域名解析服务器配置文件 [root@localhost ~]# cat /etc/resolv.conf # Generated by NetworkManager search csg.com //定义域名的搜索列表 nameserver 8.8.8.8   //定义DNS 服务器的IP地址 [root@localhost ~]# 该文件的主要作用是定义DNS服务器,可根据网络的具体情况进行设置,它的格式很简单,每一行有一个关键字开关,后接配置参数,可以设置多个DNS服务器。 (1) nameserver: 定义DNS服务器的IP地址。 (2) domain: 定义本地域名。 (3) search: 定义域名的搜索列表。 (4) sortlist: 对返回的域名进行排序。 4. 网络常用管理命令 网络常用管理命令如下。 (1) ifconifg命令管理网络接口。 ifconfig命令是一个可以用来查看、配置、启用或禁用网络接口的命令。ifconfig命令可以临时性地配置网卡的IP地址、子网掩码、网关等,使用ifconfig命令配置的网络相关信息,在主机重启后就不再存在,若需要使其永久有效,则可以将其保存在/etc/sysconfig/networkscripts/ifcfgens33文件中。其命令格式如下。 ifconfig [网络设备] [选项] ifconfig命令各选项及其功能说明如表5.55所示。 表5.55ifconfig命令各选项及其功能说明 选项功 能 说 明 up启动指定网络设备/网卡 down关闭指定网络设备/网卡 arp设置指定网卡是否支持ARP promisc设置是否支持网卡的promiscuous模式,如果选择此参数,则网卡将接收网络中发送给它的所有数据包 allmulti设置是否支持多播模式,如果选择此参数,则网卡将接收网络中所有的多播数据包 a显示全部接口信息 s显示摘要信息 add给指定网卡配置IPv6地址 del删除给指定网卡配置的IPv6地址 network<子网掩码>设置网卡的子网掩码 tunnel<地址>建立IPv4与IPv6之间的隧道通信地址 broadcast<地址>为指定网卡设置广播协议 pointtopoint<地址>为网卡设置点对点通信协议 ① 使用ifconfig命令配置网卡相关信息,显示ens33的网卡信息,执行命令如下。 [root@localhost ~]#ifconifgens33 执行命令结果如图5.31所示。 图5.31显示ens33的网卡信息 ② 启动和关闭网卡,执行命令如下。 [root@localhost ~]# ifconfig ens33 down [root@localhost ~]# ifconfig ens33 up ③ 配置网络接口相关信息,添加IPv6地址,进行相关测试,执行命令如下。 [root@localhost ~]# ifconfig ens33 add 2000::1/64   //添加IPv6地址 [root@localhost ~]# ping -6 2000::1   //测试网络连通性 PING 2000::1(2000::1) 56 data bytes 64 bytes from 2000::1: icmp_seq=1 ttl=64 time=0.085 ms 64 bytes from 2000::1: icmp_seq=2 ttl=64 time=0.103 ms 64 bytes from 2000::1: icmp_seq=3 ttl=64 time=0.109 ms ^C //Ctrl+C退出 --- 2000::1 ping statistics --- 7 packets transmitted, 7 received, 0% packet loss, time 6013ms rtt min/avg/max/mdev = 0.085/0.103/0.109/0.014 ms [root@localhost ~]# reboot   //重启操作系统 Last login: Sun Aug 30 19:00:20 2020 from 195.168.100.1 [root@localhost ~]# ping -6 2000::1   //测试网络连通性 connect: 网络不可达   //网络不可达 [root@localhost ~]# ④ 配置网络接口相关信息,添加IPv4地址,启动与关闭ARP功能,进行相关测试,执行命令如下。 [root@localhost ~]# ifconfig ens33 195.168.100.100 netmask 255.255.255.0 broadcast 195.168.100.255   //添加IPv4地址,加上子网掩码和一个广播地址 [root@localhost ~]# ifconfig ens33 arp   //启动ARP功能 [root@localhost ~]# ifconfig ens33 -arp   //关闭ARP功能 (2) hostnamectl命令设置并查看主机名。 使用hostnamectl命令可以设置并查看主机名。其命令格式如下。 hostnamectl[选项][主机名] hostnamectl命令各选项及其功能说明如表5.56所示。 表5.56hostnamectl命令各选项及其功能说明 选项功 能 说 明 h,help显示帮助信息 version显示安装包的版本信息 static修改静态主机名,也称为内核主机名,是系统在启动时从/etc/hostname中自动初始化的主机名 transient修改瞬态主机名,瞬态主机名是在系统运行时临时分配的主机名,由内核管理,例如,通过DHCP或DNS服务器分配的localhost就是这种形式的主机名 pretty修改灵活主机名,灵活主机名是允许使用特殊字符的主机名,即使用UTF8格式的自由主机名,以展示给终端用户 P, privileged在执行之前获得的特权 noaskpassword输入的密码不提示 H, host=[USER@]HOST操作远程主机 status显示当前主机名状态 sethostname NAME设置当前主机名 seticonname NAME设置系统主机名 setchassis NAME为主机设置icon名 使用hostnamectl命令设置并查看主机名,执行命令如下。 [root@localhost ~]#hostnamectl status [root@localhost ~]#hostnamectl set-hostname lncc.csg.com [root@localhost ~]#cat /etc/hostname [root@localhost ~]#bash ① 查看当前主机名,如图5.32所示。 图5.32查看当前主机名 ② 设置主机名并查看相关信息,如图5.33所示。 图5.33设置主机名并查看相关信息 (3) route命令管理路由。 route命令用来显示并设置Linux内核中的网络路由表,route命令设置的主要是静态路由,要实现两个不同子网的通信,需要一台连接两个网络的路由器或者同时位于两个网络的网关。需要注意的是,直接在命令模式下使用route命令添加的路由信息不会永久保存,主机重启之后该路由就失效了,若需要使其永久有效,则可以在/etc/rc.local中添加route命令来保存设置。其命令格式如下。 route [选项] route命令各选项及其功能说明如表5.57所示。 表5.57route命令各选项及其功能说明 选项功 能 说 明 v详细信息模式 A采用指定的地址类型 n以数字形式代替主机名形式来显示地址 net路由目标为网络 host路由目标为主机 F显示内核的FIB选路表 C显示内核的路由缓存 add添加一条路由 del删除一条路由 target指定目标网络或主机,可以是点分十进制的IP地址或主机/网络名 netmask为添加的路由指定网络掩码 gw为发往目标网络/主机的任何分组指定网关 使用route命令管理路由,执行操作如下。 ① 显示当前路由信息,执行命令如下。 [root@localhost ~]#route 执行命令结果如图5.34所示。 图5.34显示当前路由信息 ② 增加一条路由,执行命令如下。 [root@localhost ~]#routeadd-net195.168.200.0netmask255.255.255.0 devens33 [root@localhost ~]#route 执行命令结果如图5.35所示。 图5.35增加一条路由 ③ 屏蔽一条路由,执行命令如下。 [root@localhost ~]#route add -net 195.168.200.0 netmask 255.255.255.0 reject [root@localhost ~]#route 执行命令结果如图5.36所示。 图5.36屏蔽一条路由 ④ 删除一条屏蔽路由,执行命令如下。 [root@localhost ~]#route del -net 195.168.200.0 netmask 255.255.255.0 reject [root@localhost ~]#route 执行命令结果如图5.37所示。 图5.37删除一条屏蔽路由 (4) ping命令检测网络连通性。 ping命令是Linux操作系统中使用非常频繁的命令,用来测试主机之间网络的连通性。ping命令使用的是ICMP,它发送ICMP回送请求消息给目标主机,ICMP规定,目标主机必须返回ICMP回送应答消息给源主机,如果源主机在一定时间内收到应答,则认为主机可达,否则不可达。其命令格式如下。 ping [选项] [目标网络] ping命令各选项及其功能说明如表5.58所示。 表5.58ping命令各选项及其功能说明 选项功 能 说 明 c<完成次数>设置要求回应的次数 f极限检测 i<时间间隔秒数>指定收发信息的时间间隔 l<网络界面>使用指定的网络界面发送数据包 n只输出数值 p<范本样式>设置填满数据包的范本样式 q不显示指令执行过程,但开关和结尾的相关信息除外 r忽略普通的路由表,直接将数据包送到远端主机上 R记录路由过程 s<数据包大小>设置数据包的大小 t<存活数值>设置存活数值的大小 v显示指令的详细执行过程 使用ping命令检测网络连通性,执行操作如下。 ① 在Linux操作系统中使用不带选项的ping命令后,系统会一直不断地发送检测包,直到按Ctrl+C组合键终止,执行命令如下。 [root@localhost ~]#ping www.163.com 执行命令结果如图5.38所示。 图5.38使用不带选项的ping命令 ② 指定回应次数和时间间隔,设置回应次数为4次,时间间隔为1s,执行命令如下。 [root@localhost ~]#ping -c 4 -I 1 www.163.com 执行命令结果如图5.39所示。 图5.39指定回应次数和时间间隔 (5) netstat命令查看网络信息。 netstat命令是一个综合的网络状态查看命令,可以从显示的Linux操作系统的网络状态信息中得知整个Linux操作系统的网络情况,包括网络连接、路由表、接口状态、网络链路和组播成员等。其命令格式如下。 netstat [选项] netstat命令各选项及其功能说明,如表5.59所示。 表5.59netstat命令各选项及其功能说明 选项功 能 说 明 a,all显示所有连接中的端口Socket A<网络类型>,<网络类型>列出该网络类型连接中的相关地址 c,continuous持续列出网络状态 C,cache显示路由器配置的缓存信息 e,extend显示网络其他相关信息 F,fib显示FIB g,groups显示组播成员名单 h,help在线帮助 i,interfaces显示网络界面信息表单 l,listening显示监控中的服务器的Socket M,masquerade显示伪装的网络连接 n,numeric直接使用IP地址,而不通过域名服务器 N,netlink,sysmbolic显示网络硬件外围设备的符号连接名称 o,times显示计时器 p,programs显示正在使用的Socket的程序识别码和程序名称 r,route显示路由表 s,statistics显示网络工作信息统计表 t,tcp显示TCP的连接状况 u,udp显示UDP的连接状况 v,verbose显示指令执行过程 V,version显示版本信息 使用netstat命令查看网络状态相关信息,执行操作如下。 ① 查看网络接口列表信息,执行命令如下。 [root@localhost ~]#netstat -i 执行命令结果如图5.40所示。 图5.40查看网络接口列表信息 ② 查看网络所有连接端口的信息,执行命令如下。 [root@localhost ~]#netstat -an | more 执行命令结果如图5.41所示。 图5.41查看网络所有连接端口的信息 ③ 查看网络所有TCP端口连接信息,执行命令如下。 [root@localhost ~]#netstat -at 执行命令结果如图5.42所示。 图5.42查看网络所有TCP端口连接信息 ④ 查看网络组播成员名单信息,执行命令如下。 [root@localhost ~]#netstat -g 图5.43查看网络组播成员名单信息 执行命令结果如图5.43所示。 (6) nslookup命令DNS解析。 nslookup命令是常用域名查询命令,用于查询DNS信息,其有两种工作模式,即交互模式和非交互模式。在交互模式下,用户可以向DNS服务器查询各类主机、域名信息,或者输出域名中的主机列表; 在非交互模式下,用户可以针对一个主机或域名获取特定的名称或所需信息。其命令格式如下。 nslookup域名 使用nslookup命令进行域名查询,执行操作如下。 ① 在交互模式下,使用nslookup命令查询域名相关信息,直到用户按Ctrl+C组合键退出查询模式,执行命令如下。 [root@localhost ~]#nslookup 执行命令结果如图5.44所示。 图5.44在交互模式下查询域名相关信息 ② 在非交互模式下,使用nslookup命令查询域名相关信息,执行命令如下。 [root@localhost ~]# nslookup www.163.com 执行命令结果如图5.45所示。 图5.45在非交互模式下查询域名相关信息 (7) traceroute命令跟踪路由。 traceroute命令用于追踪网络数据包的路由途径,通过traceroute命令可以知道源计算机到达互联网另一端的主机的路径。其命令格式如下。 traceroute[选项][目标主机或IP地址] traceroute命令各选项及其功能说明如表5.60所示。 表5.60traceroute命令各选项及其功能说明 选项功 能 说 明 d使用Socket层级的排错功能 f<存活数值>设置第一个检测数据包的存活数值的大小 g<网关>设置来源路由网关,最多可设置8个 i<网络界面>使用指定的网络界面发送数据包 l使用ICMP回应取代UDP资料信息 m<存活数值>设置检测数据包的最大存活数值的大小 n直接使用IP地址而非主机名称 p<通信端口>设置UDP的通信端口 q发送数据包检测次数 r忽略普通的路由表,直接将数据包送到远端主机上 s<来源地址>设置本地主机发送数据包的IP地址 t<服务类型>设置检测数据包的TOS数值 v显示指令的详细执行过程 使用traceroute命令追踪网络数据包的路由途径,执行操作如下。 ① 查看本地到网易(www.163.com)的路由访问情况,直到按Ctrl+C组合键终止,执行命令如下。 [root@localhost ~]# traceroute -q 4 www.163.com 执行命令结果如图5.46所示。 图5.46查看本地到网易(www.163.com)的路由访问情况 说明: 记录按序号从1开始,每个记录就是一跳,一跳表示一个网关,可以看到每行有4个时间,单位都是ms,这其实就是探测数据包向每个网关发送4个数据包,网关响应后返回的时间,有时会看到一些行是以“*”符号表示的,出现这样的情况,可能是因为防火墙拦截了ICMP的返回信息,所以得不到相关的数据包返回数据。 ② 将跳数设置为5后,查看本地到www.163.com的路由访问情况,执行命令如下。 [root@localhost ~]# traceroute -m 5www.163.com 执行命令结果如图5.47所示。 图5.47设置跳数后的路由访问情况 ③ 查看路由访问情况,显示IP地址,不查看主机名,执行命令如下。 [root@localhost ~]#traceroute -nwww.163.com 执行命令结果如图5.48所示。 图5.48显示IP地址,不查看主机名 (8) ip命令网络配置。 ip命令是iproute2软件包中的一个强大的网络配置命令,用来显示或操作路由、网络设备、策略路由和隧道等,它能够替代一些传统的网络管理命令,如ifconfig、route等。其命令格式如下。 ip [选项][操作对象][命令][参数] ip命令各选项及其功能说明如表5.61所示。 表5.61ip命令各选项及其功能说明 选项功 能 说 明 V,Version输出IP的版本信息并退出 s,stats,statistics输出更为详尽的信息,如果这个选项出现两次或者多次,则输出的信息会更加详尽 f,family后面接协议种类,包括inet、inet6或link,用于强调使用的协议种类 4family inet的简写 6family inet6的简写 o,oneline对每行记录都使用单行输出,换行用字符代替,如果需要使用wc、grep等命令处理IP地址的输出,则会用到这个选项 r,resolve查询域名解析系统,用获得的主机名代替主机IP地址 ip命令各操作对象及其功能说明如表5.62所示。 表5.62ip命令各操作对象及其功能说明 操 作 对 象功 能 说 明操 作 对 象功 能 说 明 link网络设备rule路由策略数据库中的规则 address一个设备的协议地址(IPv4或者IPv6)maddress多播地址 neighborARP或者NDISC缓冲区条目mroute多播路由缓冲区条目 route路由表条目tunnelIP中的通道 iproute2是Linux操作系统中管理控制TCP/IP网络和流量的新一代工具包,旨在替代工具链(nettools),即人们比较熟悉的ifconfig、arp、route、netstat等命令。nettools和iproute2命令的对比,如表5.63所示。 表5.63nettools和iproute2命令的对比 nettools命令iproute2命令nettools命令iproute2命令 arp naip neighnetstat iip s link ifconfigip linknetstat gip addr ifconfig aip addr shownetstat lis l ifconfig helpip helpnetstat rip route ifconfig sip s linkroute addip route add ifconfig eth0 upip link set eth0 uproute delip route del ipmaddrip maddrroute nip route show iptunnelip tunnelvconfigip link netstatss 使用ip命令配置网络信息,执行操作如下。 ① 使用ip命令查看网络地址配置情况,执行命令如下。 [root@localhost ~]#ip address show 执行命令结果如图5.49所示。 图5.49使用ip命令查看网络地址配置情况 ② 使用ip命令查看链路配置情况,执行命令如下。 [root@localhost ~]#ip link 执行命令结果如图5.50所示。 图5.50使用ip命令查看链路配置情况 ③ 使用ip命令查看路由表信息,执行命令如下。 [root@localhost ~]#ip route 执行命令结果如图5.51所示。 图5.51使用ip命令查看路由表信息 ④ 使用ip命令查看链路信息,执行命令如下。 [root@localhost ~]#ip link show ens33 执行命令结果如图5.52所示。 图5.52使用ip命令查看链路信息 ⑤ 使用ip命令查看接口统计信息,执行命令如下。 [root@localhost ~]#ip-slinklsens33 执行命令结果如图5.53所示。 图5.53使用ip命令查看接口统计信息 ⑥ 使用ip命令查看ARP表信息,执行命令如下。 [root@localhost ~]#ipneigh show 执行命令结果如图5.54所示。 图5.54使用ip命令查看ARP表信息 5.3项目实施 5.3.1RAID配置基本命令 创建4个大小都为2GB的磁盘,并将其中3个创建为RAID5阵列磁盘,1个创建为热备磁盘。 1. 添加磁盘 添加4个大小都为2GB的磁盘,如图5.55所示。添加完成后,重新启动系统,使用fdisk l | grep sd命令进行查看,可以看到4个磁盘已经被系统检测到,说明磁盘安装成功,如图5.56所示。 图5.55添加4个新磁盘 图5.56磁盘安装成功 2. 对磁盘进行初始化 由于RAID5要用到整块磁盘,因此使用fdisk命令创建分区,此时,需要将整块磁盘创建成一个主分区,将分区类型改为fd(Linux raid autodetect),如图5.57所示,设置完成后保存并退出,执行命令如下。 [root@localhost ~]# fdisk -l| grep sd [root@localhost ~]#fdisk /dev/sdb 图5.57创建主分区并将分区类型改为fd 使用同样的方法,设置另外3个硬盘,创建主分区并将分区类型改为fd,使用fdisk l | grep sd[be]命令进行查看,磁盘初始化设置完成,执行命令如下。 [root@localhost ~]#fdisk -l|grep sd[b-e] 执行命令结果如图5.58所示。 图5.58磁盘初始化设置完成 3. 创建RAID5及其热备份 mdadm是多磁盘和设备管理(Multiple Disk and Device Administration)的简称,是Linux操作系统中的一种标准的软件RAID管理工具。在Linux操作系统中,目前以虚拟块设备方式实现软件RAID,利用多个底层的块设备虚拟出一个新的虚拟设备,并利用条带化技术将数据块均匀分布到多个磁盘中以提高虚拟设备的读写性能,利用不同的数据冗余算法来保护用户数据不会因为某个块设备发生故障而完全丢失,且能在设备被替换后将丢失的数据恢复到新的设备中。 目前,虚拟块设备支持RAID0、RAID1、RAID4、RAID5、RAID6和RAID10等不同的冗余级别和集成方式,也支持由多个RAID阵列的层叠构成的阵列。 mdadm命令格式如下。 mdadm [模式][选项] mdadm命令各模式及其功能说明、各选项及其功能说明分别如表5.64和表5.65所示。 表5.64mdadm命令各模式及其功能说明 模式功 能 说 明 A,assemble加入一个以前定义的阵列 B,build创建一个逻辑阵列 C,create创建一个新的阵列 Q,query查看一个设备,判断它是一个虚拟块设备还是一个虚拟块设备阵列的一部分 D,detail输出一个或多个虚拟块设备的详细信息 E,examine输出设备中的虚拟块设备的超级块的内容 F,follow,monitor选择Monitor模式 G,grow改变在用阵列的大小或形态 表5.65mdadm命令各选项及其功能说明 选项功 能 说 明 a,auto{=no,yes, md,mdp,part,p}自动创建对应的设备,yes表示会自动在/dev下创建RAID设备 l,level=指定要创建的RAID的级别(例如,l 5或level=5表示创建RAID5) n,raiddevices=指定阵列中可用device数目(例如,n 3或raiddevices=3表示使用3块硬盘来创建RAID) x,sparedevices=指定初始阵列的热备磁盘数量(例如,x 1或sparedevices=1表示热备磁盘只有1块) f,fail使一个RAID磁盘发生故障 r,remove移除一个故障的RAID磁盘 add添加一个RAID磁盘 s,scan扫描配置文件或/proc/mdstat以搜寻丢失的信息 S(大写)停止RAID磁盘阵列 R,run阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列,使用此选项后将不做确认 使用mdadm命令直接将4个磁盘中的3个创建为RAID5阵列,1个创建为热备磁盘,执行命令如下。 [root@localhost ~]# mdadm --create /dev/md0 --auto=yes --level=5 --raid-devices=3 --spare-devices=1 /dev/sd[b-e]1 [root@localhost ~]# mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd[b-e]1 执行命令结果如图5.59所示。 对于初学者,建议使用如下完整命令。 mdadm --create /dev/md0 --auto=yes --level=5 --raid-devices=3 --spare-devices=1 /dev/sd[b-e]1 图5.59创建RAID5阵列 创建RAID5阵列,执行命令如下。 [root@localhost ~]#mdadm -D /dev/md0 执行命令结果如图5.60所示。 图5.60查看RAID5阵列状态 如果对命令比较熟悉,则可以使用简写命令mdadm C /dev/md0 a yes l 5 n 3 x 1 /dev/sd[be]1创建RAID5阵列。这两条命令的功能完全一样,其中“/dev/sd[be]1”可以写成“/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1”,也可以写成“/dev/sd[b,c,d,e]1”,这里通过“[be]”将重复的项目简化。 创建完成之后,使用mdadm D /dev/md0命令查看RAID5阵列状态,如图5.60所示。从图5.60中可以看出,/dev/sdb1、/dev/sdc1和/dev/sdd1组成了RAID5阵列,而/dev/sde1为热备磁盘,显示结果的主要字段的含义如下。 (1) Version: 版本。 (2) Creation Time: 创建时间。 (3) Raid Level: RAID的级别。 (4) Array Size: 阵列容量。 (5) Active Devices: 活动的磁盘数目。 (6) Working Devices: 所有的磁盘数目。 (7) Failed Devices: 出现故障的磁盘数目。 (8) Spare Devices: 热备份的磁盘数目。 4. 添加RAID5阵列 添加RAID5阵列到配置文件/etc/mdadm.conf中,默认此文件是不存在的,执行命令如下。 [root@localhost ~]#echo'DEVICE/dev/sd[b-e]1 ' >> /etc/mdadm.conf [root@localhost ~]#mdadm -Ds >> /etc/mdadm.conf [root@localhost ~]#cat /etc/mdadm.conf 执行命令结果如图5.61所示。 图5.61添加RAID5阵列 5. 格式化磁盘阵列 使用mkfs.xfs /dev/md0命令对磁盘阵列/dev/md0进行格式化,执行命令如下。 [root@localhost ~]#mkfs [root@localhost ~]#mkfs.xfs/dev/md0 执行命令结果如图5.62所示。 图5.62格式化硬盘阵列 6. 挂载磁盘阵列 将磁盘阵列挂载后即可使用,也可以把挂载项写入/etc/fstab文件中,此时可实现自动挂载,即使用echo '/dev/md0 /mnt/raid5 xfs defaults 0 0' >> /etc/fstab命令,这样下次系统重新启动后即可使用,执行命令如下。 [root@localhost ~]#mkdir /mnt/raid5 [root@localhost ~]#mount /dev/md0 /mnt/raid5 [root@localhost ~]#ls -l /mnt/raid5 [root@localhost ~]# echo '/dev/md0 /mnt/raid5 xfs defaults 0 0 ' >> /etc/fstab 执行命令结果如图5.63所示。 图5.63挂载磁盘阵列 查看磁盘挂载使用情况,执行命令如下。 [root@localhost ~]#df -hT 执行命令结果如图5.64所示。 图5.64查看磁盘挂载使用情况 5.3.2RAID5阵列实例配置 测试以热备磁盘替换阵列中的磁盘并同步数据,移除损坏的磁盘,添加一个新磁盘作为热备磁盘,并删除RAID阵列。 1. 写入测试文件 在RAID5阵列上写入一个大小为10MB的文件,将其命名为10M_file,以供数据恢复时测试使用,并显示该设备中的内容,执行命令如下。 [root@localhost ~]#cd/mnt/raid5 [root@localhost raid5]#dd if=/dev/zeroof=10M_filecount=1bs=10M [root@localhost raid5]#ls -l 执行命令结果如图5.65所示。 图5.65写入测试文件 2. RAID设备的数据恢复 如果RAID设备中的某个磁盘损坏,则系统会自动停止该磁盘的工作,使热备磁盘代替损坏的磁盘继续工作。例如,假设/dev/sdc1损坏,更换损坏的RAID设备中成员的方法是先使用mdadm /dev/md0 fail /dev/sdc1或mdadm /dev/md0 f /dev/sdc1命令将损坏的RAID成员标记为失效,再使用mdadm D /dev/md0命令查看RAID阵列信息,发现热备磁盘/dev/sde1已经自动替换了损坏的/dev/sdc1,且文件没有损坏,执行命令如下。 [root@localhost ~]# mdadm/dev/md0-f/dev/sdc1 [root@localhost ~]# mdadm-D/dev/md0 [root@localhost ~]#ls -l 执行命令结果如图5.66所示。 3. 移除损坏的磁盘 使用mdadm /dev/md0 r /dev/sdc1或mdadm /dev/md0 remove /dev/sdc1命令移除损坏的磁盘/dev/sdc1,再次查看信息,可以看到Failed Devices字段数值变为0,执行命令如下。 [root@localhost ~]# mdadm/dev/md0-r/dev/sdc1 [root@localhost ~]# mdadm-D/dev/md0 图5.66RAID5设备的数据恢复 执行命令结果如图5.67所示。 图5.67移除损坏的磁盘 4. 添加新的磁盘作为热备磁盘 添加新的磁盘,可以看到新增的磁盘/dev/sdf,执行命令如下。 [root@localhost ~]#fdisk-lgrepsd [root@localhost ~]#fdisk/dev/sdf [root@localhost ~]#mkfs.xfs/dev/sdf1 执行命令结果如图5.68所示。 图5.68新增的磁盘/dev/sdf 使用mdadm /dev/md0 add /dev/sdf1或mdadm /dev/md0 a /dev/sdf1命令,在阵列中添加一块新的磁盘/dev/sdf1,添加之后其会自动变为热备磁盘,查看相关信息,执行命令如下。 [root@localhost ~]# mdadm/dev/md0--add/dev/sdf1 [root@localhost ~]# mdadm-D/dev/md0 执行命令结果如图5.69所示。 图5.69查看相关信息 5. 删除RAID阵列 RAID阵列的删除一定要慎重,操作不当可能会导致系统无法启动,操作步骤如下。 (1) 如果系统中配置了自动挂载功能,则应该使用Vim编辑器删除/etc/fstab文件中的RAID的相关启动信息,即删除信息“/dev/md0 /mnt/raid5 xfs defaults 0 0”。 (2) 卸载RAID磁盘挂载(使用umount /mnt/raid5命令)。 (3) 停止RAID磁盘工作(使用mdadm S /dev/md0命令)。 (4) 删除RAID中的相关磁盘(使用mdadm misc zerosuperblock /dev/sd[b,df]1命令)。 (5) 删除RAID相关配置文件(使用rm f /etc/mdadm.conf命令)。 (6) 使用mdadm D /dev/md0命令查看RAID5阵列相关情况,可以看出已经删除了RAID5阵列,执行命令如下。 [root@localhost ~]#vim/etc/fstab [root@localhost ~]#tail-3/etc/fstab [root@localhost ~]# umount/mnt/raid5 [root@localhost ~]# mdadm-S/dev/md0 [root@localhost ~]# mdadm--misc--zero-superblock/dev/sd[b,d-f]1 [root@localhost ~]# rm-f/etc/mdadm.conf [root@localhost ~]# mdadm-D/dev/md0 执行命令结果如图5.70所示。 图5.70删除RAID5阵列 5.3.3磁盘扩容配置 当主机磁盘空间不足时,需要对主机磁盘进行扩容,操作过程如下。 (1) 本案例在虚拟机中添加20GB磁盘进行操作演示,如图5.71所示。 图5.71添加磁盘 (2) 添加磁盘完成后,重启虚拟机,使用命令查看主机磁盘情况,执行命令如下。 [root@localhost ~]# lsblk 执行命令结果如图5.72所示。 (3) 使用命令对磁盘进行分区,执行命令如下。 [root@localhost ~]#fdisk/dev/sdb 图5.72主机磁盘情况 执行命令结果如图5.73所示。 图5.73主机磁盘分区 (4) 使用命令对磁盘进行格式化,执行命令如下。 [root@localhost ~]# lsblk [root@localhost ~]# mkfs.xfs/dev/sdb1 执行命令结果如图5.74所示。 图5.74云主机磁盘格式化 (5) 添加新LVM到已有的LVM组中,实现扩容,加载生效,执行命令如下。 [root@localhost ~]# pvcreate/dev/sdb1 [root@localhost ~]# vgextendcentos/dev/sdb1 [root@localhost ~]# lvextend-L500G/dev/mapper/centos-root [root@localhost ~]# xfs_growfs/dev/centos/root [root@localhost ~]# fsadm resize/dev/mapper/centos-root [root@localhost ~]# df -hT 执行命令结果如图5.75所示。 图5.75主机磁盘扩容 课后习题 1. 选择题 (1) 下列中不是Linux操作系统的特点的是()。 A. 多用户B. 单任务C. 开放性D. 设备独立性 (2) Linux最早是由计算机爱好者()开发的。 A. Linus TorvaldsB. Andrew S.Tanenbaum C. K.ThompsonD. D.Ritchie (3) 下列中()是自由软件。 A. Windows XPB. UNIXC. LinuxD. MAC (4) Linux操作系统中可以实现关机的命令是()。 A. shutdown k nowB. shutdown r now C. shutdown c nowD. shutdown h now (5) Linux操作系统下超级用户登录后,默认的命令提示符为()。 A. !B. #C. $D. @ (6) 可以用来建立一个新文件的命令是()。 A. cpB. rmC. touchD. more (7) 命令行的自动补齐功能要使用到()键。 A. AltB. ShiftC. CtrlD. Tab (8) 在下列命令中,用于显示当前目录路径的命令是()。 A. cdB. lsC. statD. pwd (9) 在下列命令中,用于将文本文件内容加以排序的命令是()。 A. wcB. fileC. sortD. tail (10) 在给定文件中查找与设定条件相符字符串的命令是()。 A. grepB. findC. headD. gzip (11) 在Vim的命令模式中,输入()不能进入末行模式。 A. : B. iC. ?D. / (12) 在Vim的命令模式中,输入()不能进入编辑模式。 A. oB. aC. eD. i (13) 使用()操作符,可以输出重定向到指定的文件中,追加文件内容。 A. >B. >>C. < D. << (14) 使用()操作符,可以输出重定向到指定的文件中,替换文件内容。 A. >B. >>C. < D. << 2. 简答题 (1) 简述Linux的发展历史以及特性。 (2) 简述Shell命令的基本格式。 (3) 简述Vim编辑器的基本工作模式有哪几种,并简述其主要作用。 (4) 简述RAID中的关键概念和技术。 (5) 简述常见的RAID类型。