60分钟

第6章 Linux操作系统基础

【学习目标】

1.知识目标

了解Linux发展史和主流发展版本。

掌握系统账户与安全相关概念。

掌握文件管理与磁盘管理相关知识。

掌握LVM扩容、YUM命令相关用途。

2.技能目标

Linux系统安装与配置

学会使用文件、目录的操作命令

学会使用useradd、userdel、groupadd等账户与安全命令。

运用rpm工具和yum命令。

【认证考点】

能够熟练使用Linux系统基本操作命令

能熟练掌握系统账户与安全基本概念及常见操作命令

能掌熟练握磁盘和文件系统管理的工作机制及其操作命令

能熟练掌握软件包管理

项目引导:“系统管理员”的日常账户与磁盘管理

【项目描述】

现目前,Linux在服务器领域已经占到大中型互联网公司的70%~80%,作为网站底层承载的Linux系统来说,已得到大批量的应用。未来Linux会在各行各业得到普遍的应用。小李作为企业Linux系统管理员,对服务器上文件、目录、账户安全以及磁盘进行管理是最基本的日常工作。本章将通过小李在日常维护Linux系统服务器中遇到的不同问题以及解决办法来介绍系统账户与磁盘管理的内容。

6.1 Linux操作系统概述

在操作系统的发展的过程中,出现了各种各样的实用操作系统,Linux操作系统就是这种实用操作系统之一的优秀操作系统,本节主要介绍Linux的起源、特点和版本。

6.1.1 什么是Linux系统?

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。1991年的10月5日,Linux创始人林纳斯·托瓦兹(Linus Torvalds)在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生,1994年3月,Linux 1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL(General Public License的缩写,是一份GNU通用公共授权)协议。Linux具有如下优点:

(1)稳定、免费或者花费少

(2)安全性高

(3)多任务,多用户

(4)耗资源少

(5)由于内核小,所以它可以支持多种电子产品,如:Android手机、PDA等。

6.1.2 Linux发展和主流发行版本

1.Linux的发展

Linux操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet 网络。

1981年IBM公司推出微型计算机IBM PC。

1991年,GNU计划已经开发出了许多工具软件,最受期盼的GNU C编译器已经出现,GNU的操作系统核心HURD一直处于实验阶段,没有任何可用性,实质上也没能开发出完整的GNU操作系统,但是GNU奠定了Linux用户基础和开发环境。

1991年初,林纳斯·托瓦兹开始在一台386sx兼容微机上学习minix操作系统。1991年4月,林纳斯·托瓦兹开始酝酿并着手编制自己的操作系统。

1991年的10月5日,林纳斯·托瓦兹在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生(Freeminix-like kernel sources for 386-AT)。

Linux能有今天的发展绝非偶然,将Linux加入GUN项目计划,使Linux遵循POSIX标准,是促使Linux茁壮成长的两个至关重要的决策。

2.Linux的主流发行版本

(1)Debian Linux

Debian运行起来极其稳定,这使得它非常适合用于服务器。Debian平时维护三套正式的软件库和一套非免费软件库,这给另外几款发行版(比如Ubuntu和Kali等)带来了灵感。Debian这款操作系统派生出了多个Linux发行版。发布版包括Woody、Sarge和Sid。Woody是最稳定安全的系统,但稳定性的苛刻要求导致它不会使用软件的最新版本,非常适合于服务器的运行;Sarge上则运行了版本比较新的软件,但稳定性不如Woody,比较适合普通用户;Sid保证了软件是最新的,但不能保证这些最新的软件在系统上能否稳定运行,适合于乐于追求新软件的爱好者。

(2)Ubuntu

Ubuntu是Debian的一款衍生版,也是当今最受欢迎的免费操作系统。Ubuntu侧重于它在这个市场的应用,在服务器、云计算甚至一些运行Ubuntu Linux的移动设备上很常见。Ubuntu基于Debian发行版和GNOME桌面环境,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。作为Debian Gnu Linux的一款衍生版,Ubuntu的进程、外观和感觉大多数仍然与Debian一样。它使用apt软件管理工具来安装和更新软件。它也是如今市面上用起来最容易的发行版之一。Ubuntu使用基于apt的程序包管理器。

(3)RedHat Linux/Fedora Core

最出色、用户最多的Linux发行版本之一。RedHat公司在2003年发布了RedHat9.0,之后转向了支持商业化的RedHat Enterprise Linux(RHEL),并选择了和开源社区合作的方式,以Fedora Core X(X为版本号)的名称继续发布。Fedora Core每半年发布一个最新的版本。

(4)红旗Linux

红旗Linux是由北京中科红旗软件技术有限公司开发的一系列Linux发行版,包括桌面版、工作站版、数据中心服务器版、HA集群版和红旗嵌入式Linux等产品。红旗Linux的主要特色完善的中文支持,与Windows相似的用户界面,界面十分美观、操作起来也非常简单,是中国较大、较成熟的Linux发行版之一。

国内的Linux厂商以做服务器为主。最有名的是红旗Linux。

(5)CentOS

CentOS是一款企业级Linux发行版,它使用红帽企业级Linux中的免费源代码重新构建而成。这款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。有些人不想支付一大笔钱,又能领略红帽企业级Linux;对他们来说,CentOS值得一试。此外,CentOS的外观和行为似乎与母发行版红帽企业级Linux如出一辙。CentOS使用YUM来管理软件包。CentOS作为服务器端环境现在应用非常广泛。

6.1.3 Linux系统安装与配置

1.Linux系统安装

(1)新建Linux虚拟机,如图6-1所示:

图6-1 新建虚拟机向导,选择自定义安装

(2)选择稍后安装,如图6-2所示:

图6-2 选择稍后安装操作系统

(3)选择要安装的系统,如图6-3所示:

图6-3 选择要安装的系统名称

(4)为系统命名,并设置安装目录,存储虚拟机的位置用户自己定义,由于虚拟机文件比较大,建议不要放C盘中。如图6-4所示:

图6-4 为系统命名并设置安装目录

(5)设置硬盘大小,如图6-5所示:

图6-5 设置硬盘大小

(6)自定义硬件,使用ISO镜像文件,如图6-6所示:

图6-6 自定义硬件

(7)开启此虚拟机,如图6-7、6-8所示:

图6-7 虚拟机开启
图6-8 虚拟机开启界面选择

界面说明:

-Install CentOS 7 :安装CentOS 7

-Test this media & install CentOS 7 :测试安装的光盘镜像并安装CentOS 7

-Troubleshooting :修复故障,是指无法正常启动的Linux系统时,再使用。

(8)进入欢迎页面,选择语言:中文-简体中文(中国),有利于没有Linux基础的同学,快速掌握Linux系统。单击继续按钮。如图6-9所示:

图6-9 进入语言选择页面

2.Linux系统配置

(1)软件包选择,初学者建议选择带GUI的服务器,同时把“开发工具”相关的软件包也安装上,然后单击完成,如图6-10所示:

图6-10 软件包选择

(2)进入磁盘分区界面。选择-其它存储选项-分区-我要配置分区,点左上角的“完成”,进入下面的界面,在分区方案有标准分区,btrfs,LVM,LVM简单配置,这里选择“标准分区”就可以。如图6-11所示:

图6-11 磁盘分区页面

(3)然后单击”+”创建新的分区,分区提前规划好, /boot分区200M,一般swap分区为物理内存的1.5~2倍,当物理机内存多于16G后,swap分区给8-16G都可以。 /根分区18G,实际工作中可以创建数据分区,一般把数据和系统分开。如图:6-12、6-13、6-14所示:

图6-12 /boot分区页面
图6-13 swap分区页面
图6-14 /根目录分区页面

- boot分区:是引导分区。作用:系统启动,在boot分区存放着grub,内核文件等,一般200M。

- swap交换分区:内存扩展分区、交换分区。一般最多:8G,16G。

- / 根:所有文件的根,绝对路径的开始标志。

- sda:表示第一块磁盘

(4)网络配置,默认centos7是关闭网络的,这里一定要开启以太网连接,将会自动获取IP地址,如图6-15所示。

图6-15 Linux网络配置

(5)CentOS7.0基本配置,查看一下能否正常上网:

[root@localhost ~]# ping www.baidu.com

6.1.4 Linux命令格式及获取帮助

现在的Linux系统,都配置了GUI(图形用户接口)的工作环境,但也要因此付出一的代价,它需要消耗一定的系统资源(如内存、硬盘等),并且 Linux中有大量的管理命令并没有相对应的图形界面工具,因此图形界面并不能替代命令的作用,这也是为什么大家总说“Linux是一个基于命令的操作系统”。一般来说,作为服务器的Linux为了节约资源不会安装图形界面,那么作为一名Linux系统管理员,最快捷、最有效的管理方法就是使用命令。

Linux命令一般分为两种:

  • shell内部命令。
  • 外部应用程序命令。

shell内部命令集成在shell(命令解释器)里,就好像是操作系统本身所具有的命令一样。而大多数命令属于后者,是通过某一个应用程序(也就是通常所说的软件)安装的,它们类似于一个个独立的可执行程序,用户可以自由地安装和卸载它们。

1.命令格式

Linux中的命令都具有一个统一的格式,用户输入一个命令后,会交由shell程序解释并交给相应的程序处理,处理完成后再通过shell返回结果给用户,返回的结果就是命令的执行结果。Linux命令的格式如下:

Command [options] [arguments]

其中,Command表示命令的名称;options表示命令的选项,定义了命令的执行特性;arguments表示命令的作用对象、参数。[]:可有可无的,也就是选项和参数可有也可无。命令、选项、参数之间要以空格隔开!示例如下:

$ rm - r dir

该语句的功能为删除目录dir,其中rm为命令的名称,表示删除文件;-r为选项,表示删除目录中的文件和子目录;dir为命令作用的对象,该对象是一个目录。Linux系统中的命令都遵循以上格式,命令中的选项和参数均可默认。

2.参数的运用

前面我们知道了命令由命令名称、命令选项、命令参数组成,那么选项和参数有哪些呢?选项一般有两种:

(1)短格式选项:如-h。

(2)长格式选项:如-help。

上面两种选项实现的功能都是一样的,这两种选项都可以带参数,如:

(1)短式带参数形式:如-f 512。

(2)长格式带参数形式:如-filesize=512。

上面两种形式实现的功能都是一样的。

参数也分为两种:

(1)选项的参数。

(2)命令对象参数。

常见的如下:

文件名、目录名:如 touch /opt/test

用户名、组名:useradd test

3.获取帮助

在Linux中,查看帮助有四种方法:

(1)man命令

在使用其它命令之前,先认识一下Linux的在线帮助man。在Linux下,当你要查找一个命令的用法的,你可以通过 man命令名来获得命令的详细说明。因为每个Linux都有一份man文档,所以介绍命令的时候我们只是简单介绍一下命令的常用选项。如果想查看命令的详细说明,请自己看man。

man命令的执行格式如下:

man command

如需要查看ls命令的帮助信息,可以使用以下方式:

[root@localhost ~]# man ls

此命令执行后可按q键回退到提示符。

(2)help命令

这个命令只适用于所有的shell内部命令,而外部应用程序命令不可以使用help 获取帮助,如cd是shell内部命令,那么可以输入以下命令获取cd的帮助信息:

[root@localhost~]# help cd

(3)帮助选项

当大家要查看某个命令的帮助信息的时候,可以通过-h或-help选项来获取该命令的帮助说明,但要注意的是,有的命令可以支持两种选项,而有的命令只支持一种。如想查看ls命令的帮助信息,可加上以下选项:

[root@localhost~]# ls -help

(4)info 命令

Info命令的执行格式如下:

info command

大多数命令都可以通过info来查看帮助信息,如需要查看Is命令的帮助信息,可以通过以下方式:

[root@localhost~]# info ls

6.2 Linux文件和目录的浏览、管理及维护

通过前面的学习,我们已经能够独立安装完一个linux系统,对Linux而言一切皆文件,那接下来我们来熟悉一下Linux系统里面的各个目录文件夹的大致功能:主要目录树有/、/root、/home、/usr、/bin等目录结构。

6.2.1 Linux文件系统的层次结构

Linux采用的是树状目录结构,最上层是根目录,其他的所有目录都是从根目录出发而生成的。在WIN系统中,查看文件先进入相应的盘符,然后进入文件目录。在WIN中,它是多根 c:\、d:\、e:\,如图6-16所示:

图6-16 Windows的文件目录

与Windows不同的是,Linux中的目录树只有一个根目录,如图6-17所示:

图6-17 Linux目录结构

(1)利用命令查看根下有哪些文件:

(2)对根下的目录作用进行说明,如表6-1所示:

表6-1 Linux文件目录说明

6.2.2 相对路径与绝对路径

路径:在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径。

1. 绝对路径

绝对路径:从根目录开始,依次将各级子目录的名字组合起来,形成的路径就称为某个文件的绝对路径。例如,根目录(/)下有目录usr,usr目录下有子目录bin,bin目录下有文件chsh,则chsh文件的绝对路径就是:/usr/bin/chsh。

换句话说,如果一个路径是从根(/)开始的,它一定是绝对路径,比如/etc/passwd。

[root@localhost etc]# cd /etc
[root@localhost etc]# ll passwd
-rw-r--r--. 1 root root 1905 5月  18 23:44 passwd
[root@localhost etc]# ll /etc/passwd
-rw-r--r--. 1 root root 1905 5月  18 23:44 /etc/passwd

2. 相对路径

相对路径:相对于目前路径的文件名写法,是以 .或 ..开始的。

  • .代表当前的目录,也可以使用./来表示;
  • ..表示上级目录,也可以用../来表示。

在路径中,要把.和..当做目录来看。

[root@localhost /]# cd /etc
[root@localhost etc]# ll ./fuse.conf
-rw-r--r--. 1 root root 38 1月  25 2014 ./fuse.conf

注:这里的 ./fuse.conf表示的是相对路径,当前目录在/etc下。

【实例6-1】如何先进入/etc/dconf/db目录,再进入到/etc/dconf/profile目录内?

【步骤】由于/etc/dconf/db与/etc/dconf/profile是同样在/etc/dconf/目录中,因此

最简单的命令执行方法为:

[root@localhost /]# cd /etc/dconf/db
[root@localhost db]# cd ../profile

如此,就不需要再由根目录开始写起了。这个相对路径是十分方便的。

6.2.3 软链接与硬链接

为解决文件的共享使用,Linux系统引入了两种链接:硬链接 (hard link)与软链接(又称符号链接,即soft link或symbolic link)。链接为Linux系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个inode号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。如图6-18所示:

hard link就是file的一个别名,他们有共同的inode。

图 6-18 硬链接和软链接的访问

硬链接可由命令ln创建。

1. 硬连接

硬链接ln命令的语法

ln  原文件 目标文件

由于硬链接是有着相同inode号仅文件名不同的文件,因此硬链接存在以下几点特性:

  • 文件有相同的 inode及data block;
  • 只能对已存在的文件进行创建;
  • 不能交叉文件系统进行硬链接的创建;
  • 不能对目录进行创建,只可对文件创建;
  • 删除一个硬链接文件并不影响其他有相同inode号的文件。

2. 软连接

软连接ln命令语法:

ln -s 原文件 目标文件

软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的inode号以及用户数据块data block(如图6-18)。因此软链接的创建与使用没有类似硬链接的诸多限制:

  • 软链接有自己的文件属性及权限等;
  • 可对不存在的文件或目录创建软链接;
  • 软链接可交叉文件系统;
  • 软链接可对文件或目录创建;
  • 创建软链接时,链接计数i_nlink不会增加;
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

6.2.4 文件、目录的管理命令

Linux操作系统秉持“一切皆文件”的思想,将其中的文件、设备等都作为文件来操作,因此,文件和目录的操作命令是Linux常用命令基础,也是至关重要的一部分。常用的处理命令有ls、cd、pwd、touch、mkdir、cp、mv、rm、rmdir等,涵盖了文件的属性查看、目录切换、目录查看、删除、复制等功能。

1.ls命令

ls命令的原意为list,即“列出”,用于列出参数的属性信息,其命令格式如下:

ls [选项][参数]

ls的参数通常为文件或目录,其常用的选项含义如下:

-l:以详细信息的形式展示出当前目录下的文件。

-a:显示当前目录下的全部文件,包括以 .开头的隐藏文件。

-A:列出除了.及..以外的任何项目。

-i:输出文件的inode编号。

-d:将目录像文件一样显示,而不是显示其下的文件。

-c:输出文件的 ctime (文件状态最后更改的时间),并根据 ctime 排序。

-R:列出当前目录下的所有文件信息,同时列出所有子目录层。

【实例6-2】显示当前目录下的文件。

[slc@localhost ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面

当参数默认时,ls命令默认列出当前目录中的内容。

【实例6-3】显示当前目录下的所有文件信息。

[slc@localhost ~]$ ls -a
.   .bash_logout  .bashrc  .config   .ICEauthority  .mozilla 
..  .bash_profile .cache   .esd_auth .local         .xauth2A3LGj  
公共  模板  视频  图片  文档  下载  音乐  桌面

2.cd命令

cd命令的原意为change directory,即更改目录。若执行该命令的用户具有切换目录的权限,cd命令将更改当前工作目录到目标目录。该命令格式如下:

 cd  参数

cd命令没有选项,其参数不可省略。

【实例6-4】使用cd命令切换目录。

[slc@localhost ~]$ cd ./Public
[slc@localhost Public]$ cd ..
[slc@localhost ~]$ cd /etc/yum
[slc@localhost yum]$ cd ~

以上共有4条路径切换命令,它们对应的功能依次如下:

  • 切换工作路径到当前目录下的Public目录中;
  • 切换工作路径到上一级目录;
  • 切换工作路径到etc目录下的yum目录中;
  • 切换工作路径为当前用户的家目录。

3.pwd命令

pwd命令的原意为print working directory,即打印当前工作目录的绝对路径。该命令可直接使用,用法及打印结果如下列实例所示。

【实例6-5】使用pwd命令获取当前目录。

[slc@localhost ~]$ pwd
/home/slc

4.touch命令

touch命令的主要功能是将已存在文件的时间标签更新为系统的当前时间。若指定的文件不存在,该命令将会创建一个新文件,所以该命令有个附加功能,即创建新的空文件。touch命令的格式如下:

touch 参数

touch命令的参数可以是文件,也可以是一个目录。

【实例6-6】修改文件file的时间标签为当前时间。

[slc@localhost ~]$ ls -l file
-rw-rw-r--. 1 slc slc 0 5月  24 16:54 file
[slc@localhost ~]$ touch file
[slc@localhost ~]$ ls -l file
-rw-rw-r--. 1 slc slc 0 5月  24 17:10 file

该实例中,先使用ls -l命令打印文件file的属性信息,再使用touch命令对file进行操作,之后再次打印文件file的属性信息。对比两次打印结果,可知touch成功更新了文件file的时间标签。

5.mkdir命令

mkdir命令的原意为make directory,即创建目录,mkdir命令的格式如下:

mkdir [选项] 参数

mkdir命令的常用选项如下所示:

-p:若路径中的目录不存在,则先创建目录。

-v:查看文件创建过程。

mkdir命令的参数一般为目录或路径名。当参数为目录时,为保证新目录可成功创建,使用该命令前应确保新建目录不与其同路径下的目录重名;当参数为路径时,需要保证路径中的目录都已存在或通过选项创建路径中缺失的目录。

【实例6-7】在当前路径下的test目录中创建bxg目录。

[slc@localhost ~]$ mkdir ./test/bxg
mkdir: 无法创建目录"./test/bxg": 没有那个文件或目录
[slc@localhost ~]$ mkdir -p ./test/bxg
[slc@localhost ~]$ ls
file  test  公共  模板  视频  图片  文档  下载  音乐  桌面

如上所示,若路径中的目录不存在,又未使用参数-p,将会报错,提示没有发现相应文件或目录;之后添加-p选项,则会先在路径中创建test目录,之后再在test目录中创建子目录bxg。

6.cp命令

cp命令的原意为copy,即复制。该命令的功能为将一个或多个源文件复制到指定的目录,其命令格式如下:

cp [选项] 源文件或目录  目的目录

默认情况下,该命令不能复制目录,若要复制目录,需要同时使用-R选项。

cp命令常用的选项如下所示:

-R:递归处理,将指定目录下的文件及子目录一并处理。

-p:复制的同时不修改文件属性,包括所有者、所属组、权限和时间。

-f:强行复制文件或目录,无论目的文件或目录是否已经存在。

【实例6-8】将当前目录下的Public目录复制到./test/bxg。

[slc@localhost ~]$ cp Public ./test/bxg
cp: 略过目录"Public"
[slc@localhost ~]$ cp -R Public ./test/bxg

如上所示,若要复制目录,需要添加选项-R,否则该命令不能复制目录。

7.mv命令

mv命令的原意为move,该命令用于移动文件或目录。其命令格式为:

mv 源文件或目录 目标目录 

若该命令操作的对象是相同路径下的两个文件,则其功能为修改文件名。

【实例6-9】将文件a移动到目录./test/bxg中。

[slc@localhost ~]$ mv a ./test/bxg

【实例6-10】使用mv命令修改文件名。

[slc@localhost ~]$ mv ./test/bxg/a  ./test/bxg/b
[slc@localhost ~]$ cd ./test/bxg
[slc@localhost bxg]$ ls
b  

8.rm命令

rm命令原意为remove,功能为删除目录中的文件或目录。该命令可同时删除多个对象,其命令格式如下:

rm [选项] 文件或目录 

若要使用rm命令删除目录,需要在参数前添加-r选项。除-r外,rm常用的选项如下所示:

-f:强制删除文件或目录。

-rf:选项-r与-f结合,删除目录中所有文件和子目录,并且不一一确认。

-i:在删除文件或目录时对要删除的内容逐一进行确认(y/n)。

【示例6-10】rm –rf ./testmkdir

注意:使用rm删除的文件无法恢复,所以在删除文件之前,要进行确认。

9.rmdir命令

rmdir命令的原意为remove directory。该命令与rm命令类似,但它仅用于删除目录。

rmdir的命令格式如下:

rmdir [-p] 目录 

rmdir命令可删除指定路径中的一个或多个空目录。若在命令中添加参数-p,此条命令将会在删除指定目录后检测其上层目录,若该目录的上层目录已变成空目录,则将其一并删除。

【实例6-11】删除test目录下的bxg目录。

[slc@localhost ~]$ rmdir test/bxg
[slc@localhost ~]$ rmdir -p test/bxg
rmdir: 删除 "test/bxg" 失败: 没有那个文件或目录

6.2.5 文件查看命令

文件查看命令主要用于查看文件中存储的内容,常用的文件查看命令有cat、more、head、tail等。

1. cat命令

cat的功能为将文件中的内容打印到输出设备,该命令的格式如下:

cat 文件名

【实例6-12】打印etc目录下用户信息文件中的内容,该文件路径为/etc/passwd。

[slc@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
… 

2. more命令

more命令用于分页显示文件内容,其命令格式如下:

more [文件名]

在使用more命令分页显示文件内容时,可用快捷键进行翻页等操作,其快捷键如下表6-2所示:

表6-2 more命令的快捷键

【实例6-13】分页显示etc目录下用户信息文件中的内容,该文件路径为/etc/passwd。

[slc@localhost ~]$ more /etc/passwd
(打印结果不再显示,读者可自行实验)

3. head命令

head命令也用于查看文件内容,但该命令可指定查看文件的前n行。在默认情况下,head命令显示文件的头10行内容。head命令的格式如下:

head –n 文件名

其中,n为要查看的行数,文件名为待查看文件的文件名。

【实例6-14】使用head命令查看etc目录下passwd文件中的前3行内容。

[slc@localhost ~]$ head -3 /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

4. tail命令

tail命令与head命令相反,用于查看文件后n行内容。tail命令的格式如下:

tail –n 文件名

其中,n为要查看的行数,文件名为待查看文件的文件名。

【实例6-15】使用tail命令查看etc目录下passwd文件中的后3行内容。

[slc@localhost ~]$ tail -3 /etc/passwd
sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
slc:x:1000:1000:slc:/home/slc:/bin/bash

项目实施

小李在进行日常Linux系统维护与管理时,除了需要在linux系统中进行大量用户和文件目录的操作之外,还需要对系统账号与安全、磁盘分区与挂载和软件包安装等功能进行实施。

需要完成的任务:

  • 管理Linux系统的用户与用户组
  • 管理 Linux系统的磁盘和文件系统;
  • 管理rpm软件包与压缩包;
  • YUM源的配置与软件的YUM安装。

6.3 任务1:Linux系统账户与安全

Linux操作系统是多用户的操作系统,允许多个用户同时登录到系统上,使用系统资源。当多个用户能同时使用系统时,为了使所有用户的工作都能顺利进行,保护每个用户的文件和进程,也为了系统自身的安全和稳定,必须建立一种秩序,使每个用户的权限都得到规范。

6.3.1 Linux用户和用户组概述

1. 用户

Linux是真正意义上的多用户操作系统,可以在 Linux系统中建若干用户。

Linux是一个多用户、多任务的分时操作系统,在一台 Linux主机上,可能同时登录了多名用户,为了对用户的状态进行跟踪,并对其可访问的资源进行控制,每个使用者在使用Linux之前,必须先向系统管理员申请一个账号并设置密码,之后才能登录系统,访问系统资源。

在Linux系统中,用户的账号等相关信息(密码除外)均存放在etc目录下的passwd文件中。因为所有用户对该文件都有读取的权限,为了保证系统安全,密码被保存在/etc/shadow中。

2. 文件所有者

Linux系统中的文件所有者指文件的拥有者。默认情况下创建文件的用户即为文件所有者,也可在创建文件的同时指定其他用户为文件所有者,或者在文件创建后通过高级用户变更所有者。为文件指定所有者有利于保护用户隐私,保障文件的安全,若某个用户在其账户下编辑了一个机密文件,为防止其他用户获取该机密文件信息,将文件权限设置为仅文件所有者可读可写或可执行即可。

3. 用户的类型

(1)root用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令。拥有最高权限。

(2)普通用户:这类用户能登录系统,但只能操作自己目录的内容;权限有限;这类用户都是系统管理员自行添加的。

4. 用户组

用户组就是具有相同特征的用户的集合体。例如,有时要让多个用户具有相同的权限,如查看、修改某一文件或执行某个命令,这时需要用户组,把用户都定义到同一用户组,通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是通过定义组和修改文件的权限来实现的。

Linux系统中的用户大体上可分为三组:管理员(root)、普通用户和系统用户。管理员的用户id(uid)为0;系统用户是保障系统运行的用户,其用户ID为1 ~ 499。还可以根据需要,为普通用户自行分组,处于同一组的用户可能拥有类似的功能,用户组的信息存放于etc目录下的group文件中。

用户和用户组的对应关系是:一对一、多对一、一对多或多对多。

一对一:某个用户可以是某个组的唯一成员。

多对一:多个用户可以是某个唯一的组的成员,不归属其他用户组。

一对多:某个用户可以是多个用户组的成员。

多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组。

5.文件所属组

文件所属组与用户组相呼应。假设当前系统中有一个用户组为itheima,其中包含4名用户(A、B、C、D);当前有一个文件file,若设置其文件所属组为itheima,并设置其对文件所属组的权限为可读可修改,那么用户组ithelma中的4名用户都可对file文件进行读写操作。

6.其他用户

Linux系统中还有一个“其他用户(Others)”的概念。假设当前系统中有一个用户组为itheima,其中包含4名用户(A、B、C、D);另外该系统中还有一个属于用户组bxg的用户X,则对于用户组itheima中的用户来说,X就是其他用户。

7.root

root也是 Linux系统中的用户,它属于用户组root,是一个超级用户。root非常重要,具有普通用户的一切权限,它还可以创建、删除普通用户和用户组,设置用户权限等。root用户权限极大,为保证系统安全,一般通过安装操作系统时创建的账户来使用系统。

本节所要讲解的大部分命令都需要在root用户下完成,因此选择使用root用户演示本节的案例。

6.3.2 Linux本地用户和组配置文件

Linux用户和组的配置文件主要有以下四种:

  • /etc/passwd:用户配置文件。
  • /etc/group:用户组配置文件。
  • /etc/shadow: 用户密码及其相关属性;
  • /etc/gshadow: 组密码及其相关属性

下面依次对这四个文件进行详细说明:

1./etc/passwd文件

系统用户配置文件,是用户管理中最重要的一个文件。记录了每个用户的一些基本属性,并且对所有用户可读,/etc/passwd中每一行记录对应一个用户,使用head命令查看etc/passwd文件前三行数据,查询结果如下:

以上所示结果中,每行记录被冒号(:)分割为7项,其格式和具体含义如下:

用户名 : 口令 : 用户标识号 : 组标识号 : 注释性描述 : 主目录 : 默认shell
root   : x    :  0         : 0        : root       : /root  : /bin/bash
bin    : x    :  1         : 1        : bin        : /bin   :/sbin/nologin
daemon : x    :  2         : 2        : daemon     : /sbin  :/sbin/nologin

每个字段的含义如下:

  • 用户名:是代表用户账号的字符串。
  • 口令:存放着加密后的用户口令,虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。
  • 因此,现在许多Linux版本都使用了shadow技术,把真正加密后的用户口令存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如用“x”或者“*”来表示。
  • 用户标识号: 就是用户的UID,每个用户都有一个UID,并且是唯一的,通常UID号的取值范围是0~65535,0是超级用户root的标识号,1~499由系统保留,作为管理账号;
  • 普通用户的标识号从500开始。而在Linux系统中,普通用户UID默认从500开始。UID是linux下确认用户权限的标志,用户的角色和权限都是通过UID来实现的,因此多个用户公用一个UID是非常危险的,会造成系统权限和管理的混乱。
  • 例如:将普通用户的UID设置为0后,这个普通用户就具有了root用户的权限,这是极度危险的操作。因此要尽量保持用户UID的唯一性。
  • 组标识号:就是组的GID,与用户的UID类似,这个字段记录了用户所属的用户组。
  • 它对应着/etc/group文件中的一条记录。
  • 注释性描述:字段是对用户的描述信息,比如用户的住址、电话、姓名等等。
  • 主目录:也就是用户登录到系统之后默认所处的目录,也可以叫做用户的主目录、家目录、根目录等等。
  • 默认shell:就是用户登录系统后默认使用的命令解释器,shell是用户和linux内核之间的接口,用户所作的任何操作,都是通过shell传递给系统内核的。linux下常用的shell有:sh、bash、csh等。

2./etc/group文件

用户组配置文件,用户组的所有信息都存放在此文件中。/etc/group文件内容的格式:

组名 : 口令 : 组标识号 : 组内用户列表

下面是/etc/group的部分输出:

/etc/group每个字段的含义如下:

  • 组名:是用户组的名称,由字母或数字构成。与/etc/passwd中的用户名一样,组名不能重复。
  • 口令:存放的是用户组加密后的口令字串,密码默认设置在/etc/gshadow文件中,而在这里用“x”代替,linux系统下默认的用户组都没有口令,可以通过gpasswd来给用户组添加密码。
  • 组标识号:就是GID,与/etc/passwd中的组标识号对应。
  • 组内用户列表:显示属于这个组的所有用户,多个用户之间用逗号分隔。

3./etc/shadow文件

用户影子文件,由于/etc/passwd文件是所有用户都可读的,这样就导致了用户的密码容易出现泄露,因此,linux将用户的密码信息从/etc/passwd中分离出来,单独的放到了一个文件中,这个文件就是/etc/shadow,该文件只有root用户拥有读权限,从而保证了用户密码的安全性。

同样地,我们介绍下/etc/shadow文件内容的格式:

用户名 : 加密口令 : 最后一次修改时间 : 最小时间间隔 : 最大时间间隔 :
警告时间 : 不活动时间 : 失效时间 : 保留字段

/etc/shadow文件的部分输出:

/etc/shadow每个字段的详细含义如下:

  • 用户名:与/etc/passwd文件中的用户名有相同的含义。
  • 加密口令:存放的是加密后的用户口令字串,如果此字段是“*”、“!”、“x”等字符,则对应的用户不能登录系统。
  • 最后一次修改时间:表示从某个时间起,到用户最近一次修改口令的间隔天数。可以通过passwd来修改用户的密码,然后查看/etc/shadow中此字段的变化。
  • 最小时间间隔:表示两次修改密码之间的最小时间间隔。
  • 最大时间间隔:表示两次修改密码之间的最大时间间隔,这个设置能增强管理员管理用户的时效性。
  • 警告时间:表示从系统开始警告用户到密码正式失效之间的天数。
  • 不活动时间:此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统不再让此用户登录,也不会提示用户过期,是完全禁用。
  • 失效时间:表示该用户的帐号生存期,超过这个设定时间,帐号失效,用户就无法登录系统了。如果这个字段的值为空,帐号永久可用。

4./etc/gshadow文件

组密码及其相关属性。/etc/gshadow文件内容的格式为:

群组名称 : 群组密码 : 组管理员列表 : 以当前组为附加组的用户列表

/etc/group的部分输出:

/etc/gshadow每个字段的含义如下:

  • 群组名称:就是群组名称。
  • 群组密码:
  • 组管理员列表:组管理员的列表,更改组密码和成员。
  • 以当前组为附加组的用户列表: (分隔符为逗号)

6.3.3 用户和用户组管理

用户是 Linux系统中的一个重要概念,创建、删除和管理用户是 Linux系统管理的基础,为方便对多用户的同时管理,Linux系统中又提出了用户组的概念,下面对用户和用户组管理进行讲解。

1. 用户管理

用户管理即用户的账号管理,包括账号的添加、修改和删除,下面分别对这三种操作进行讲解。

(1)用户账号添加

用户账号添加即在系统中创建一个新账号,并为该账号设置用户号、用户组、主目录、登录Shell等。添加新账号时使用useradd命令,其命令格式如下:

useradd [选项] 用户名

useradd命令常用的选项如表6-3所示:

表6-3 useradd命令常用选项

普通用户的账号通常要求不以数字和下划线作为账户名的第一个字符。

【实例6-16】创建新用户bxg,指定用户的主目录/usr/bxg;若指定主目录不存在,则创建主目录。

[root@localhost ~]# useradd –d /usr/bxg –m bxg

【实例6-17】创建新用户wdj1,指定其登录 Shell和所属组。

[root@localhost ~]# useradd -s /bin/sh -g itheima wdj1

【实例6-18】创建新用户kdy,并设置其用户id。

[root@localhost ~]# useradd zsy -u 875

需要注意的是,1~499为系统用户id。为避免id冲突,用户id应取大于等于500的数值。若创建账户时未指定用户id、用户组、用户目录和登录shell等信息,系统会自动为新账号指定相关信息,并同时更新用户组配置文件。

前面已经讲过用户配置文件信息,我们知道,添加新用户账号的实质是在/etc/passwd文件中新添一条记录,因此使用tai命令查看/etc/passwd文件末尾的三行数据,便可看到以上新建的三个账户的信息。查询结果如下:

[root@localhost ~]#  tail -3 /etc/passwd
bxg:x:1002:1004::/usr/bxg:/bin/bash
wdji:x:1003:1005::/home/wdji:/bin/sh
kdy:x:875:1006::/home/kdy:/bin/bash

以上所示结果中,每一行为一个账号的相关信息。每个账号信息由:分隔为7项,依次为用户名、密码位、用户id、用户组id、注释信息(即备注信息)、用户主目录、Shell。

新增的用户若未指定uid,则其uid为前面一条记录的uid加1。此时新建的账号是无法使用的,因为尚未为该账号设置密码,账号处于锁定状态。下面来讲解设置用户密码的方法。

(2)设置用户密码

设置用户密码的命令是 passwd,该命令用于设置用户的认证信息,包括用户密码、密码有效期等,其命令格式如下:

 passwd [选项] 用户名

passwd命令常用的选项如表6-4所示。

表6-4 passwd命令常用选项

系统管理员可以修改所有用户的密码,普通用户只能修改自己的密码。

【实例6-19】为实例6-16中创建的用户bxg指定密码

[root@localhost /]# passwd bxg
更改用户 bxg 的密码。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。

Linux中也有一定的密码验证机制。在root用户下可以随意修改密码,即便系统会出现警告,密码仍能成功保存;但是普通用户在修改自己的密码时,应尽量复杂(至少6位,由字母与数字组成),避免与用户名相同。

若要修改当前登录账户的密码,可以默认用户名。当密码被设置或修改时,系统会自动更新etc目录下存放密码的文件 shadow。

在root用户下使用tai命令查看/etc/shadow文件末尾的三行数据,打印结果如下:

[root@localhost /]# tail -3 /etc/passwd
bxg:x:1002:1004::/usr/bxg:/bin/bash
wdji:x:1003:1005::/home/wdji:/bin/sh
kdy:x:875:1006::/home/kdy:/bin/bash

这三行数据分别为案例6-16~6-18中创建的账户所对应的密码信息,密码信息中的每一项以:分隔,其中第二项为加密后的用户密码。

(3)删除用户

若一个用户账号不再使用,可以使用 userdel命令,将该用户从系统中删除,userdel命令可以删除指定用户及与该用户相关的文件和信息。其命令格式如下:

userde1 [选项] 用户名

userdel命令常用的选项如表6-5所示。

表6-5 userdel命令常用选项

【实例6-20】删除账号bxg,并删除相关文件。

[root@localhost /]# userdel -r bxg
[root@localhost /]# userdel -rf bxg
[root@localhost /]# userdel -f bxg

上述实例使用了3次 userdel命令:第一次删除bxg账号时,会提示该账号正被进程使用;第二次添加f参数,强制删除账号;第三次使用userdel命令时,提示bxg账号不存在,表明该账号在第二次使用删除命令时被强制删除。

(4)修改用户账号

修改用户账号信息即修改账号的属性,如用户id、主目录、用户组、登录Shell等。修改用户账号信息的命令为usermod,其命令格式如下:

usermod 选项 参数

在使用usermod命令修改用户账号信息时,必须先确认该用户没有在计算机上执行任何程序。usermod命令的常用选项如表6-6所示。

表6-6 usermod命令常用选项

【实例6-21】修改账户kdy的用户id为678。

[root@localhost /]# usermod -u 678 kdy

查看账户kdy的相关信息,输出结果如下:

[root@localhost /]# cat /etc/passwd |grep kdy
kdy:x:678:1006::/home/kdy:/bin/bash

根据输出结果可知,当前kdy账户的uid已被修改为678.

2.用户组管理

每个用户都有一个用户组。若在创建账户时未指定,那么系统会以用户账号名作为该用户的用户组,并将与该账号同名的用户组同步到/etc/group文件中,以上面创建的用户kdy为例,查看/etc/group文件中包含kdy的行,输出结果如下:

[root@localhost /]# cat /etc/group |grep kdy
kdy:x:1006:

输出的结果由:分隔成3项,分别为组名、密码位、组id。

本小节将讲解用户组管理的相关知识,包括用户组添加和删除、用户组属性修改与用户组切换。

(1)添加用户组

用户组可以在创建用户的同时默认设置,也可以由用户主动添加用户组,默认情况下新建用户的用户组与用户名相同,在创建用户的同时被创建。主动添加用户组时使用的命令为 groupadd,命令格式如下:

groupadd [选项] 参数

groupadd命令常用的选项如表6-7所示。

表6-7 groupadd命令常用选项

【实例6-22】创建一个用户组group1,指定其组id为550。

[root@localhost /]# groupadd -g 550 group1

此时/ etc/group文件中会新增一条记录,具体信息如下

[root@localhost /]# tail -1 /etc/group
group1:x:550:

【实例6-23】创建一个用户组group2。

[root@localhost /]# groupadd group2

若选项缺省,则新增用户组其id值为上一条未指定组id记录中的组ID加1.使用tail命令查看/etc/group文件中末尾的5条记录,输出的信息如下:

[root@localhost /]# tail -5 /etc/group
wdj1:x:1004:
itheima:x:1005:
kdy:x:1006:
group1:x:550:
group2:x:1007:

观察输出结果可发现,其中kdy的组wdj1为1004,新创建的用户组 itheima和kdy的GID在1004的基础上递增,groupl的GID被指定, group2的GID在kdy组id的基础上加1。

(2)删除用户组

若要删除已存在的用户组,可使用groupde1命令。其命令格式如下:

groupde1 参数

该命令的用法很简单,在命令后直接跟上用户组名即可。

【实例6-24】删除用户组 group2。

[root@localhost /]# groupde1 group2

(3)修改用户组属性

用户组的一些属性,如组id和组名,都可以被修改。修改用户组属性的命令为groupmod,其命令格式如下:

groupmod [选项] [用户组]

groupmod的常用选项如表6-8所示。

表6-8 groupmod命令常用选项

【实例6-25】修改用户组group1的组id为555。

[root@localhost /]# groupmod -g 555 group1

使用tail命令可以查看文件的记录,输出的信息如下:

[root@localhost /]# tail -1 /etc/group
group1:x:555:

【实例6-26】修改用户组group1的组id为666,并更改组名为group2。

[root@localhost /]# groupmod -g 666 -n group2 group1

使用tail命令可以查看文件的记录,输出的信息如下:

[root@localhost /]# tail -1 /etc/group
group2:x:666:

可见,group1的用户组更名为group2,且id更改为666。

用户与用户组管理并不难,但它们是Linux中的基础知识,读者应熟练掌握用户与用户组

的管理方法。

6.3.4 管理文件系统权限

理解了Linux的用户与用户组之后,我们要来熟悉这个文件的权限要如何针对这些所谓

的“用户”和“用户组”来设置,这个部分是相当重要的。

1.文件权限简介

Linux系统是个多用户系统,应该能做到不同的用户可同时访问不同的文件,因此一定要

有文件权限控制机制。Lmux系统的权限控制机制和Windows的权限控制机制有着很大的差别。

根据用户的权限,Linx系统中的用户大体分为两类:超级用户root和普通用户,其中超

级用户拥有操作Linux系统的所有权限,但为保证系统安全,一般不使用超级用户登录,而是创建普通用户,使用普通用户进行一系列操作。为避免普通用户权限过大或权限不足,通常需要由root用户创建拥有不同权限的多个用户或变更某个用户的权限。

根据用户与文件的关系,Linux系统中将普通用户分为3种,即文件或目录的拥有者、同组用户、其他组用户;又根据用户对文件的权限,将用户权限分为读权限(read)、写权限(write)和执行权限(execute),表6-9列出了文件与目录拥有对应权限时的含义。

表6-9 权限说明

也就是说,每一个文件或目录的访问权限也相应有3组,即文件所有者的读、写和执行权限,与文件属主同组的用户的读、写和执行权限,其他用户的的读写和执行权限,除了用字符表示权限以外,还可以用数值法来表示文件权限,如表6-10所示。

表6-10 三种用户的权限分配

查看文件和目录的权限,可以使用“ls -l”命令来显示权限标志,如:

[root@localhost /]# ls -l

执行该命令结果如图6-19所示:

图6-19 查看文件和目录权限

每个文件的信息以一行表示,这些信息包括表示文件的类型、文件的权限、文件的属主和文件的所属组,文件的大小和创建时间,最后是文件名称。其中第三列表示文件和目录的属主,第四列显示文件和目录的同组。

第一列的第一个字符和字母主要有-、d、1、b、c、p,含义如下。

  • -:普通文件。
  • d:目录文件。
  • l:符号链接文件。
  • b:块设备文件。
  • c:字符设备文件。
  • p:管道文件。

第一列的其余九个字母,每三个字母一组。分成三组。第一组表示文件属主的权限;第二组代表文件所属组的权限,第三组代表其他用户的权限。例如第一行中的“-rw-r--r--”表示普通文件,属主有读写权限,所属组的用户和其他用户只有读权限。

2.更改文件和目录的操作权限

系统管理员和文件的属主可以根据需要更改文件的权限。更改文件和目录的权限使chmod命令进行,有字符设定法和数值设定法两种方法。

(1)字符设定法

chmod语法格式如下:

chmod 模式 权限 文件名

在设定文件权限时,在模式种常用以下字母代表用户或用户组:

  • u:用户user,表示文件或目录的所有者。
  • g:用户组group,表示文件或目录所属的用户组。
  • o:其它用户others。
  • a:代表所有用户all(即u+g+o)。

操作符:

  • +:表示添加权限。
  • -:表示减少权限。
  • = :表示直接设定一个权限。

权限:

r:读权限。

w:写权限。

x:执行权限。

下面看一个具体的例子:

[root@localhost /]# ls -l a1.txt
-rw-r--r--. 1 root root 0 5月  30 01:07 a1.txt

//当前a1.txt的权限为“-rw-r--r--”。

[root@localhost /]# chmod u+x a1.txt    
[root@localhost /]# ls -l a1.txt
-rwxr--r--. 1 root root 0 5月  30 01:07 a1.txt

//执行该命令后,a1.txt的权限变为“-rwxr--r--”,表示对文件的属主增加对文件的执行权限。

(2)数值设定法

chmod语法格式如下:

chmod n1n2n3 文件名

其中:n1代表属主的权限,n2代表组用户的权限,n3代表其他用户的权限,它们取值为0~7。用八进制数来表示,读、写、执行依次各自对应一个二进制位,如果某位为“0”则表示无权限;如果某位为“1”,则表示有权限。下面给出数值设定法的数字权限表6-11。

表6-11 数字权限表

例如:

[root@localhost /]# chmod 664 a1.txt

等同于:

[root@localhost /]# chmod u=rw,g=rw,o=r a1.txt

//这两条命令执行之后的结果是一样的:

[root@localhost /]# ls -l a1.txt
-rw-rw-r--. 1 root root 0 5月 30 01:07 a1.txt

3.更改文件和目录的属主和所属组

有时需要更改文件的属主和所属的组,只有文件的属主有权更改。

(1)更改文件的属主使用命令chown,命令格式是:

chown 用户名 文件或目录名

【实例6-27】更改文件a1.txt的所有者为stu2用户。

[root@localhost /]# ls -l a1.txt
-rw-rw-r--.   1 root root    0 5月  30 01:07 a1.txt
[root@localhost /]# chown stu2 a1.txt
[root@localhost /]# ls -l a1.txt
-rw-rw-r--. 1 stu2 root 0 5月  30 01:07 a1.txt

对比两次显示结果可知,文件a1.txt的所有者由root变成了stu2。

(2)更改文件的所属组使用的命令是chgrp。

一般情况下文件或目录与创建该文件的用户属于同一组,或者在被创建时通过选项指定所属组,但在需要时,可通过chgrp命令更改文件的所属组。chgrp命令的格式如下:

chgrp [组名] [文件或目录]

【实例6-28】修改文件a1.txt的所属组为stu2。

[root@localhost /]# chgrp stu2 a1.txt
[root@localhost /]# ls -l a1.txt
-rw-rw-r--. 1 stu2 stu2 0 5月 30 01:07 a1.txt

由以上输出结果可以看出,文件a1.txt的所属组由root变成了stu2。

6.3.5 Linux系统提权知识简介

sudo提权

SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。那么,为什么要给Linux二进制文件设置这种权限呢?其实原因有很多,例如,程序ping需要root权限才能打开网络套接字,但执行该程序的用户通常都是由普通用户,来验证与其他主机的连通性。

sudo命令的格式如下:

sudo [选项] –u 用户 [命令]
表6-12 选项说明

①sudo命令可以视为受限的su,它可以使“部分”用户使用其它用户的身份执行命令。

②在使用sudo命令之前,需要通过修改/etc/sudoers文件,为当前用户配置要使用的权限。

③/etc/sudoers文件有一定的语法规范,为避免因修改后出现语法错误,应使用visudo命令打开文件进行修改。

④如下所示为/etc/sudoers文件中的一条配置信息,该信息设置了root用户可能任何情境下执行任何命令。

root ALL=(ALL) ALL

6.4 任务2:磁盘和文件系统管理

文件系统是任何一种操作系统中最基本、最重要的一部分内容。Linux文件系统与Windows文件系统区别比较大。首先磁盘分区的概念完全不一样,其次文件组织方式不一样。对于一个系统管理者(root)而言,磁盘的管理是相当重要的一环,如果要在系统里面新增一块硬盘,需要完成如下操作。

1.对磁盘进行分区,以新建可用的分区。

2.对该分区进行格式化(format),以创建系统可用的文件系统。

3.在linux系统上,需要创建挂载点(即是目录),并将它挂载上来。

6.4.1 磁盘分区及格式化

1.硬盘分区认识

磁盘上的盘片被细分为多个大小相同的扇区,扇区是磁盘空间的基本单位,一般来说,一个扇区的大小为512字节。磁盘中第一个扇区非常重要,其中存储了与磁盘正常使用相关的重要信息,分别为:主引导记录、磁盘分区表和魔数。

主引导记录(Master Boot Record)占用446字节,其中包含一段被称为引导加载流程(Boot Loader)的程序,计算机启动后,会到磁盘0扇面的0扇区去读取MBR中的内容,只有MBR中的程序正确无误,计算机才能正常开机。

磁盘分区表(partition table)占用64个字节,其中记录整块磁盘的分区状态,每个分区的信息需要16个字节,因此磁盘分区表若只记录分区信息,便最多只能存储4个分区的分区信息。

魔数(Magic Number)占用2个字节,用来标识MBR是否有效。

Linux系统中遵循“一切皆文件”的思想,Linux下的设备也会被视为文件,硬盘作为设备的一种,其对应的文件被存储于系统的/dev目录下。若磁盘为SATA类型,则磁盘路径名为/dev/sda,如图6-20所示的四个分区在/dev目录下对应的文件名如下所示:

  • P1:/dev/sda1
  • P2:/dev/sda2
  • P3:/dev/sda3
  • P4:/dev/sda4
图 6-20 分区表与磁盘分区图
图6-21 主分区与逻辑分区

事实上,磁盘除可以划分出主分区外,还可以划分出一个扩展分区,而扩展分区可以继续划分。由扩展分区划分出的分区称为逻辑分区,而逻辑分区的分区信息会被存储在扩展分区中的第一个扇区。

图6-21的磁盘中有两个分区表(分别用黑色扇形和方块表示)。存在于分区P1中的分区表为主分区表,共占64字节,其中只记录了两个分区:P1和P2.分区P1为主分区,分区P2为扩展分区,分区P2又被划分为4个逻辑分区L1~L4,其分区信息存储于第101个柱面的扇区中。若1inux系统按图6-21所示的方式分区,/dev目录下将会有6个设备文件,文件的路径名分别如下:

  • P1:/dev/sdal
  • P2:/dev/sda2
  • L1:/dev/sda5
  • L2:/dev/sda6
  • L3:/dev/sda7
  • L4: /dev/sda8

可注意到逻辑分区L1-14的设备文件编号从5开始,这是因为编号1~4被预留给主分区表中的设备文件使用,即使主分区表中的分区不足4个,逻辑分区的设备文件也不能使用编号1~4。

虽然磁盘分区表中最多可以存储4个分区的信息,但使用时一般只使用两个分区,即一个主分区和一个扩展分区。主分区可以马上被使用,但不能再分;扩展分区必须再划分为逻辑分区才能使用,因为系统不能识别未划分的扩展分区。

2.磁盘分区:fdisk

fdisk,磁盘分区,是Linux发行版本中最常用的分区工具,其格式为:

fdisk [选项] 设备名称               

常用的选项 : -l 查看硬盘分区表

fdisk有许多子命令,如表6-13所示。

表6-13 fdisk的子命令

在 Command提示后面输入命令可以开始对此硬盘进行分区操作,输入m可以列出所有可供选择的子命令。

下面通过实例来说明。

【实例6-29】:一台计算机新增加第二块SCSI接口硬盘,假设硬盘大小为4GB,在使用时要先进行分区。要求创建一个大小为200 MB的主分区,剩余空间为一个扩展分区,扩展分区中有两个逻辑分区。

具体操作如下:(1)首先在在虚拟机上添加一块硬盘。

图6-22 虚拟机添加硬盘图

(2)对sdb这块盘划分一个200M的分区出来,,操作命令如下:

[root@localhost ~]# fdisk /dev/sdb

结果显示如图6-23所示。

图6-23 fdisk命令

(3)首先输入p,查看当前的分区表,可以看到硬盘上没有任何分区,如图6-24所示。

图6-24 输入子命令p

(4)要创建新的分区输入n:然后输入p,选择创建主分区(输入e,选择创建扩展分区)

输入1,创建第一个主分区:输入此分区的起始扇区,默认是第2048个扇区:输入终止扇区来确定此分区的大小,可以用+sizeM,以兆字节为单位来分配分区大小,本例为“+2000M”。如图6-25所示。

图6-25 创建新分区

(5)再次输入p查看分区表,如图6-26所示。

图6-27 查看新分区

(6)可以看到,此硬盘中已经增加了一个主分区sdb1,大小为2048000字节。要删除此分区,可以输入d.然后输入要删除的分区号,如图6-28所示。

图6-28 删除分区

分区结束,输入w把设置写入硬盘分区表并退出。

(7)可以接着创建扩展分区,也可以以后再创建。要创建护展分区,先输入n,创建新分区:再输入e.创建扩展分区,大小为默认(即剩余空间)。

(8)输入P查看分区表,可以看到,此硬盘中经增加了一个扩展分区sdb2,大小为2145280字节。如图6-29所示。

图6-29 创建扩展分区

(9)接着创建第一个逻辑分区sdb5,操作如图6-30所示(分别输入n,1,p):

图6-30 在扩展分区创建第一个逻辑分区

(10)用同样的步骤创建第二个逻辑分区sdb6,最后磁盘分区的结果如图6-31所示。

图6-31 在扩展分区创建第二个逻辑分区

注意:不管创建哪种分区,最后都要输入w把设置写入硬盘分区表并退出,如果不想保存设置退出fdisk,输入q命令即可。

3.磁盘格式化:mkfs

分区完毕后自然就是要进行文件系统的格式化。格式化的命令非常简单,使用mkfs,这个命令是个综合的命令,它会去调用正确的文件系统格式化工具软件。具体格式如下:

mkfs [-t 文件系统格式] 设备文件名

参数:

-t:可以接文件系统格式,例如ext3,ext2,vfat等。

【实例6-30】请将上一小节当中所创建的/dev/sdb6格式化为ext3文件系统。

这样就创建起来我们需要的ext3文件系统。按下两个tab,会发现mkfs支持的文件格式如下图6-32所示,可以格式化vfat。

图6-32 mkfs支持的文件格式

6.4.2 文件系统类型

文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区。一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。

1.ext2/ext3/ext4文件系统

ext2与ext3是linux专门设计的硬盘文件系统一般称为扩展文件系统。ext3是一个完全兼容ext2文件系统的日志文件系统,它在ext2的基础上添加了一个被称为日志的块,专门来记录写入或修订文件时的步骤。除此之外,它的构造与ext2文件系统相同。

ex14文件系统是Linux中原有使用的ext3文件系统的后续版本,是第4代扩展文件系统,属于典型的日志型文件系统。其特点是保持有磁盘存取记录的日志数据,便于恢复,性能和稳定性更加出色。这样在系统由于断电等原因意外停机后,在重新启动时,可以根据这些日志直接回溯重整在停机时处理中断的部分,同时也更加安全可靠。

2.swap文件系统

除了ext4文件系统之外,Linux中还有一个比较特殊的swap类型的文件系统,swap文件系统是专门给交换分区使用的。交换分区类似于Windows系统中的虚拟内存,能够在一定程度上缓解物理内存不足的问题。不同的是,在 Linux系统中划分了一个单独的分区作为虚拟内存,这个分区就被称为交换分区。交换分区的大小通常设置为主机物理内存的2倍,如主机的物理内存大小为1GB,则交换分区大小设置为2GB即可。在安装Linx操作系统时,交换分区是必须建立的,并且其类型一定是swap。交换分区由操作系统自动管理,用户不需要对其进行过多的操作。

3.vfat文件系统

在 Linux中把DOS下是所有FAT文件系统称为vfat,其中包括FAT12、FATl6和FAT32。

4.NFS文件系统

NFS即网络操作系统,用于在UNIX系统间通过网络进行文件共享,用户可以把网络中NFS服务器提供的共享目录挂装到本地文件目录中,可以像对本地文件系统一样操作NFS文件系统中的内容。

5.ISO9660文件系统

ISO960是光盘所使用的标准文件系统,Linux对光盘有非常好的支持,不仅可以读取光盘中的文件,还可以进行光盘的刻录。

6.4.3 管理磁盘和文件系统

在磁盘上创建文件系统之后,还需要把新建立的文件系统挂载到系统上才能使用。

所谓挂载,是指将一个目录作为入口,将磁盘分区中的数据放置在以该目录为根结点目录关系树中。这相当于为文件系统与磁盘建立联系,指定了某个分区中文件系统访问的位置。Linux系统中根目录是整个磁盘访问的基点,因此根目录必须要挂载到某个分区。

Linux系统中通过mount命令和unmount命令实现分区的挂载和卸除,下面分别对这两个命令进行讲解。

1.mount

Linux系统中可以使用mount命令将某个分区挂载到目录,mount命令常用的格式如下:

mount [选项] [参数] 设备 挂载点

mount命令常用的选项有两个,分别为-t和-o。

选项-t用于指定待挂载设备的文件系统类型,常见的类型如下:

  • 光盘/光盘镜像:iso9660;
  • DOS fat16文件系统:msdos;
  • Windows 9x fat32文件系统:vfat;
  • Windows NT ntfs文件系统:ntfs;
  • Mount Windows文件网络共享:smbfs;
  • UNIX(LINUX)文件网络共享:nfs。

Linux支持待挂载设备中的文件系统类型时,改设备才能被成功挂载到Linux系统中并被识别。

选项-o主要用来描述设备的挂载方式,常用的挂载方式如表6-14所示。

常用的挂载方式

mount的参数通常为设备文件名与挂载点。设备文件名为要挂载的文件系统对应的设备名;挂载点指挂载点目录。设备必须被挂载到一个已经存在的目录上,其中的内容才能通过目录访问。挂载的目录可以不为空,但将某个设备挂载到该目录后,目录中之前存放的内容不可再用。

下面以文件系统与镜像文件的挂载为例来讲解 mount命令的使用方法。

①挂载ext2/ext3文件系统

【实例6-31】用默认的方式将之前创建的逻辑分区/dev/sdb6,挂载到/mnt/sdb6上面,则需使用如下命令:

mount /dev/sdb6 /mnt/sdb6

需要注意,使用mount命令挂载硬盘或其某个分区到指定目录下时,指定的目录必须已经存在。其输出结果如下图6-33所示:

图6-33挂载文件系统成功

这里的df命令是用于查看与磁盘空间相关的信息。

②挂载CD或/DVD光盘

【实例6-32】将你用来安装Linux的CentOS原版光盘挂载,具体命令如下。

[root@localhost ~]# mkdir /media/cdrom
[root@localhost ~]# mount -t iso9660 /dev/cdrom /media/cdrom

可以指定-t iso9660这个光盘的格式来挂载,也可以让系统自己去测试挂载。故上述命令也可以使用“mount /dev/cdrom /media/cdrom”来代替,但是目录的创建初次挂载时必须要进行。下面用df查看一下磁盘挂载信息如图6-34所示:

图6-34 挂载光盘成功

光驱一旦挂载之后就无法退出光盘,除非将它卸载才能够退出。从上面的数据可以发现,因为是光盘,所以磁盘使用率达到100%,因为我们无法直接写入任何数据到光盘当中。另外其实/dev/cdrom是个连接文件,正确的磁盘文件名需要看光驱是什么连接接口的环境。以此题为例,光驱接在dev/sr0中,所以正确的挂载应该是“mount/dev/sr0/media/cdrom”。

2.umount

当需要挂载的分区只是一个移动存储设备(如移动硬盘)时,要进行的工作是在该设备

与主机之间进行文件传输,那么在文件传输完毕之后,需要卸下该分区,Linux系统中卸下分区的命令是umount,该命令的格式如下:

umount [参数] 设备文件名或挂载点

参数:

-f:强制卸载。可用在类似网络文件系统(NFS)无法读取到的情况下;

-n:不更新/etc/mtab情况下卸载。

就是直接将已挂载的文件系统卸载即是。卸载之后,可以使用df命令查看是否还存在目录树中。卸载的方式可以执行设备文件名或挂载点。具体的范例如下:

【实例6-33】将本节之前自行挂载的文件系统全部卸载,具体命令如下。

先找到已经挂载的文件系统,如下所示,加粗字体即为刚刚挂载的设备。

[root@localhost ~]# mount
.....前面省略.....
/dev/sdb6 on /mnt/sdb6 type ext3 (rw)
/dev/sr0 on /media/cdrom type iso9660 (rw)

然后进行卸载,命令如下。

[root@localhost ~]# umount /dev/sdb6
[root@localhost ~]# umount /media/cdrom

此时就把之前挂载的系统文件和光盘全部卸载了。

6.4.4 LVM概述

1.LVM的工作原理

LVM(Logical Volume Manager)逻辑卷管理器,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。

管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘。

它就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。

2.LVM常用的术语

(1)物理存储介质(Physical Media)

这里指系统的存储设备:硬盘或者分区,如/dev/hda1、/dev/sdb5等,是存储系统最底层的存储单元。设备必须初始化为LVM物理卷,才能与LVM结合使用。

(2)物理卷PV(Physical Volume)

物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

(3)卷组VG(Volume Group)

LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成,可以在卷组上创建一个或多个“LVM分区”(逻辑卷),一个LVM卷组由一个或多个物理卷组成。

(4)逻辑卷LV(Logical Volume)

LVM逻辑卷类似于非LVM系统中的硬盘分区,LV建立在VG之上,可以在LV之上建立文件系统(比如/home或者/usr等)。

(5)物理块PE(Physical Extents)

每一个物理卷被划分为称为PE的基本单元,PV物理卷中可以分配的最小存储单元,PE的大小是可配置的,默认为4MB。

(6)逻辑块LE(Logical Extent)

LV逻辑卷也被划分为称为LE的基本单元,逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

6.4.5 管理LVM存储

1.创建分区

添加一个sdb磁盘,使用分区工具fdisk创建LVM分区,方法和创建其它一般分区的方式式一样的。需要注意的是,要通过输入t命令将LVM的分区类型改为8e。

[root@xuegod63 ~]# fdisk /dev/sdb    #创建4个主分区,每个分区1G  
[root@xuegod63 ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3  /dev/sdb4

已经创建好的分区如下图6-35所示:

图6-35 成功创建物理分区

注:这里8e的出现把系统变成“Linux LVM”。其实不设置成8e也没有关系,现在的系统已经很智能,直接使用默认的83 Linux分区,也可以进行创建pv。

2.创建PV物理卷

要新建PV其实很简单,只要直接使用 pvcreate即可。我们来看一看与PV有关的命令。

  • pvcreate:将物理分区新建成为PV;
  • pvscan:查询目前系统里面任何具有PV的磁盘;
  • pvdisplay:显示出目前系统上面的PV状态;
  • pvremove:,将PV属性删除,让该分区不具有PV属性。

【实例6-34】将刚才创建的4个分区创建成物理卷,使用命令如下。

[root@localhost ~]# pvcreate /dev/sdb{1,2,3,4}

//该命令可以一次性创建四个物理卷,也可以分开一个个的进行创建

输出结果如下:

使用pvscan命令可以查看一下目前系统里面的PV磁盘:

[root@localhost ~]# pvscan
  PV /dev/sdb3                      lvm2 [1.00 GiB]
  PV /dev/sdb4                      lvm2 [1023.00 MiB]
  PV /dev/sdb1                      lvm2 [1.00 GiB]
  PV /dev/sdb2                      lvm2 [1.00 GiB]
  Total: 4 [4.00 GiB] / in use: 0 [0   ] / in no VG: 4 [4.00 GiB]

更详细的列出系统上每个pv的信息:

[root@localhost ~]# pvdisplay /dev/sdb1
  "/dev/sdb1" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               a5kzRi-I5I1-jQKJ-OqAd-4U0q-yOuC-0Oi19O

3.创建VG卷组:

有了物理卷后,就可以用来建立卷组。LMM的每一个卷组都是由一个或多个物理卷组合的,要建立卷组,可以使用 vgcreate命令。

vgcreate [-s N[mgt]] VGNAME PV名称

VGNAME是卷组的名称,输入VGNAME的内容,每一个VGNAME都必须是独一无二的并且不要与/dev中的文件名称冲突,而 PV名称则是组成这个卷组的物理卷设备文件名称。

s参数的作用是:创建卷组时设置PE块的大小,单位可以是m,g,t。如果不手工设置,默认为4MB。

此外,我们再来看一下与VG相关的命令。

  • vgcreate:就是主要新建VG的命令;
  • vgscan:查找系统上面是否有VG存在;
  • vgdisplay:显示目前系统上面的VG状态;
  • vgextend:在VG内增加额外的PV;
  • vgreduce:在VG内删除PV;
  • Vgchange:设置vG是否启动(active);
  • vgremove:删除一个VG。

【实例6-35】将/dev/sdb1物理卷建立出vg01这个卷组。

[root@localhost ~]# vgcreate vg01 /dev/sdb1
Volume group "vg01" successfully created

更详细的列出系统上每个VG的状态信息:

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg01
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1020.00 MiB
  PE Size               4.00 MiB
  Total PE              255
  Alloc PE / Size       0 / 0   
  Free  PE / Size       255 / 1020.00 MiB
  VG UUID               iXYiio-se0D-7KLJ-UTH8-Iofm-NGF5-uLiC93

4.创建LV逻辑卷

产生出卷组之后,就可以从卷组中划分一块空间作为逻辑卷。要建立逻辑卷需使用lvcreate命令。

lvcreate -L N[mgt] vg名称

参数:

  • -L:后面接容量,容量的单位可以是M,G,T等,要注意的是,最小单位为PE。因此这个数量必须要PE的倍数,若不相符,系统会自行计算最相近的容量。
  • -l:后面可以接PE的“个数”,而不是容量,若要这么做,得要自行计算PE数。
  • -n;后面接的就是LV的名称。

与LV相关的命令如下:

  • lvcreate:新建LV;
  • lvscan:查询系统上面的LV;
  • lvdisplay:显示系统上面的LV状态;
  • lvextend:在LV里面增加容量
  • lvreduce:在LV里面减少容量;
  • lvremove:删除一个LV;
  • lvresize:对LV进行容量大小的调整。

【实例6-36】将vg01这个卷组分别划出16M分配给逻辑卷lv01、lv02。

[root@localhost ~]# lvcreate -n lv01 -L 16M vg01
  Logical volume "lv01" created

由于本案例中每个PE为4MB,因此在创建逻辑卷lv02时,也可以使用如下方式来创建:

[root@localhost ~]# lvcreate -n lv02 -l 4 vg01
  Logical volume "lv02" created

更详细地列出系统上每个LV的状态信息:

[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg01/lv01
  LV Name                lv01
  VG Name                vg01
  LV UUID                09tPrb-rvpo-AuVV-mzwH-Cw0X-XH7b-XEje9F
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-06-01 13:51:08 +0800
  LV Status              available
  # open                 0
  LV Size                16.00 MiB
  Current LE             4
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

查看一下卷组vg01下的信息,可以知道有2个逻辑卷,共占用了8个PE

[root@localhost ~]# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1020.00 MiB
  PE Size               4.00 MiB
  Total PE              255
  Alloc PE / Size       8 / 32.00 MiB
  Free  PE / Size       247 / 988.00 MiB
  VG UUID               iXYiio-se0D-7KLJ-UTH8-Iofm-NGF5-uLiC93

5.文件系统的创建与挂载

当逻辑卷创建完成后,必须创建文件系统,使用ext3格式。

[root@localhost ~]# mkfs -t ext3 /dev/vg01/lv01
[root@localhost ~]# mkdir /mnt/lvm
[root@localhost ~]# mount /dev/vg01/lv01  /mnt/lvm
[root@localhost ~]# df
文件系统                 1K-块    已用     可用 已用% 挂载点
/dev/sda3             18421760 4954624 13467136   27% /
devtmpfs                926944       0   926944    0% /dev
tmpfs                   935392     148   935244    1% /dev/shm
tmpfs                   935392    9092   926300    1% /run
tmpfs                   935392       0   935392    0% /sys/fs/cgroup
/dev/sda1               201388  102796    98592   52% /boot
/dev/mapper/vg01-lv01    14839     145    13548    2% /mnt/lvm

创建了文件系统之后,就可以加载并使用它。

6.5 任务3:软件包管理

应用软件的安装在任何操作系统中都是必要的。在Windows中安装应用软件直观明了,而在Linux中安装应用软件速度块,过程简单,有时也较复杂。本节介绍Linux中安装软件的常用方法,包括RPM包安装和YUM安装。

RPM是Red Hat公司开发的软件包管理器,使用它可以很容易地对RPM形式的软件包进行安装、升级、卸载、验证、查询等操作,安装简单,而卸载时也可以将软件安装在多处目录中的文件删除干净,因此推荐初学者尽可能使用RPM形式的软件包。软件包往往有特定的命令规范,名字是由“文件名+版本号+包的类型+rpm”组成的字串。各个支持RPM格式的 Linux常见软件的RPM包可以在网站www.rpm.org中找到。

6.5.1 RPM程序的工作方式

RPM有五种基本的操作方式:安装,査询,验证,升级,卸载。下面我们就来逐一进行讲解。

1.安装软件包

基本命令格式:

rpm -ivh RPM包文件名

其中:

-i:是install的意思,安装软件包;

-v:显示附加信息,提供更多详细信息;

-V:校验,对已经安装的软件进行校验;

-h:表示显示水平进度条,安装时输出####标记。

【实例6-37】安装RPM包的两种不同方法。

(1)从本地安装

提前将光盘挂载到/mnt下

[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL
[root@localhost mnt]# cd Packages
[root@localhost Packages]# ls -l |grep zsh
-rw-rw-r--. 2 slc slc  2489188 7月   4 2014 zsh-5.0.2-7.el7.x86_64.rpm

此时即可安装rpm包:

[root@localhost Packages]# rpm -ivh /mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm 
警告:/mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:zsh-5.0.2-7.el7                ################################# [100%]

(2)从网上下载直接安装centos epel扩展源

[root@localhost/]#rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release -latest-7.noarch.rpm   
获取http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
警告:/var/tmp/rpm-tmp.k4Vuc5: 头V3 RSA/SHA256 Signature, 密钥 ID 352c64e5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:epel-release-7-12             ################################# [100%]

2.查询软件包

基本命令格式:

rpm -q[选项] 软件包名

其中选项为:

  • -a(all):查询所有已安装的软件包
  • -f(file):系统文件名(查询系统文件所属哪个软件包),反向查询
  • -i:显示已经安装的rpm软件包信息,后面直接跟包名
  • -l(list):查询软件包中文件安装的位置
  • -p:查询未安装软件包的相关信息,后面要跟软件的命名
  • -R:查询软件包的依赖性

【实例6-38】查询软件包的不同用法。

[root@xuegod63 mnt]# rpm -q zsh   --->查询指定的包是否安装
[root@xuegod63 mnt]# rpm -qa     --->查询所有已安装包
[root@xuegod63 mnt]# rpm -qa|grep vim   --->查询所有已安装包中带vim关键字的包
[root@xuegod63 ~]# which find   --->查看find命令的路径
/usr/bin/find
[root@xuegod63 ~]# rpm  -qf /usr/bin/find   ---->查询文件或命令属于哪个安装包

查询已经安装的rpm包的详细信息或作用,使用rpm -qi rpm包名

[root@xuegod63 ~]# rpm -qi lrzsz

针对没有安装的RPM包,要加参数:-p,即使用rpm -qpi rpm包的绝对路径

[root@localhost~]# rpm -qpi /mnt/Packages/php-mysql-5.4.16-21.el7.x86_64.rpm 
Name        : php-mysql
Version     : 5.4.16
......
Summary     : A module for PHP applications that use MySQL databases
// php使用mysql数据库的一个模块

3.校验软件包

用于检验命令是否被黑客修改,基本命令格式如下:

rpm -V[选项] 软件包名

其中,选项的参数可以是 -f、-p、-a,同查询软件包中的一样。

【实例6-39】校验已安装软件包的不同用法。

[root@localhost ~]# rpm -V zsh
//验证zsh软件包
[root@localhost ~]# rpm -Vf /etc/passwd
//验证包含文件/etc/passwd的软件包
[root@localhost ~]# rpm -Vp /mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm 
//验证包文件zsh-5.0.2-7.el7.x86_64.rpm 
[root@localhost ~]# rpm -Va
//验证所有已安装的软件包

4.升级软件包

基本命令格式:

 rpm -Uvh RPM包文件名

【实例6-40】升级之前已安装的zsh和lrzsz软件包。

[root@localhost ~]# rpm -Uvh /mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm 
[root@localhost ~]# rpm -Uvh /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm 

因为升级时会有一些依赖包要解决。所以一般我们使用yum update包来升级,后面会具体进行讲解。

5.卸载软件包

基本命令格式:

rpm -e RPM包文件名

【实例6-41】卸载之前安装的zsh软件包。

[root@localhost ~]# rpm -q zsh     ---->查询zsh软件包
zsh-5.0.2-7.el7.x86_64
[root@localhost ~]# rpm -e zsh     ---->卸载zsh软件包
[root@localhost ~]# rpm -q zsh
未安装软件包zsh 

这样就可以把已安装的RPM软件包zsh给卸载。

本章小结

本章以Linux服务器的日常管理与维护为引导,介绍了Linux服务器的安装与配置、Linux文件和目录的浏览、管理及维护、Linux的系统账户与安全、磁盘和文件系统管理、软件包管理,重点介绍了Linux日常管理的账户和磁盘管理。通过本章的学习,读者应能熟练掌握系统账户与安全基本概念及常见操作命令、磁盘和文件系统管理的工作机制及其操作命令以及软件包管理的概念。

本章习题

一、单项选择题

1.Linux操作系统自诞生至今,有数十万的程序开发人员参与到了它的开发与完善中,如今Linux已发展成为是一个成熟、稳定的操作系统。从以下选项中选出关于Linux特点描述完全正确的一项。( )

A.多用户、多线程、单CPU

B.单用户、单线程、多任务

C.多用户、多线程、多CPU

D.单用户、多线程、多CPU

2.Linux操作系统的应用领域极其广泛,在下列选项中,哪些可能用到了Linux操作系统? ( )

A.汽车

B.手机

C.机顶盒

D.以上全部

3.VMware提供了虚拟网络功能,使用户可方便地进行网络环境部署。以下哪个选项不属于VMware虚拟网络中的网络模式。( )

A.C/S

B.桥接

C.网络地址转换

D.NAT

4.下面哪个选项不是Linux服务器可提供的服务。( )

A.Web

B.XShell

C.SFTP

D.SSH

5.Linux历经多年发展,到如今已发展出了许多版本,下面哪个版本的Linux系统是中国用户使用最多的版本?( )

A.CnetOS

B.Ubuntu

C.Fedora

D.Red Hat

6.在以下选项中选出实现打印当前路径下所有文件名的命令。( )

A.ls –l

B.ls

C.ls –a

D.ls –i

7.假设当前有一文件file1,其权限为rwxr--r--,则在以下命令中,哪个命令可以使该文件所属组拥有对该文件的执行权限?( )

A.chown g+x file1

B.chmod 644 file1

C.chmod o+x file1

D.chmod a+x file1

8.假设Linux系统中不存在文件newfile,现要创建一个新文件newfile,以下哪个命令无法实现该功能? ( )

A.vi newfile

B.touch newfile

C.cp file /itheima/newfile

D.cd /itheima/newfile

9.假设当前有两个用户组group1、group2,有三名用户usr1、usr2、usr3,其中usr1、usr2属于用户组group1,usr3属于用户组group2。假设用户usr1使用“touch file”命令创建了一个文件file,并将该文件的权限设置为654。找出以下关于用户与文件的说法中错误的一项。 ( )

A.usr1、usr3对文件file有读权限。

B.usr1、usr2、usr3对文件file有读权限。

C.usr1、usr3对文件file有写权限。

D.usr2对文件file有执行权限。

10.下面关于基本组和附加组的说法,错误的是。 ( )

A.若用户被创建时没有指定用户组,系统会为用户创建一个与用户名相同的组,这个组就是该用户的基本组。

B.可以在创建用户时,使用选项-G为其指定基本组。

C.为用户组指定附加组,可以使该用户拥有对应组的权限。

D.用户可以从附加组中移除,但不能从基本组中移除。

11.下面各选项中关于用户切换命令su和sudo的说法,正确的是。( )

A.su和sudo都用于切换用户身份,相比之下,su命令更加安全。

B.使用su命令切换用户时需要知道当前用户的密码。

C.使用sudo命令切换用户时需要知道待切换用户的密码。

D.即便当前用户为root用户,切换用户时也必须输入用户密码。

12.若一个文件的权限为rwxrw-r-x,问文件所有者、所属组用户和其他用户分别能否删除该文件。( )

A.文件所有者、所属组用户可以,其他用户不能

B.文件所有者和其他用户可以,文件所属组用户不能

C.文件所有者可以,文件所属组用户、其他用户不能

D.无法判断

二、多项选择题

1.Linux操作系统是一款免费使用,且可以自由传播的类Unix操作系统,它支持( )及多CPU,从其诞生到现在,性能逐步得到了稳定提升。

A.单用户

B.多用户

C.多任务

D.多线程

2.Linux操作系统秉持“一切皆文件”的思想,将其中的文件、设备等通通当做文件来操作和处理,因此,文件处理与管理命令是Linux系统中最基础的命令。常用的文件处理与管理命令有( )。

A.ls

B.cd

C.pwd

D.cp

3.Linux系统中的用户大体上可分为三组,分别为( )。

A.管理员

B.系统用户

C.普通用户

D.一般用户

三、判断题

1.Linux是一种开放源代码、可自由传播的计算机操作系统,其目的是建立不受任何商品化软件版权制约、全世界都能自由使用的类UNIX系统。( )

2.Linux操作系统在服务器、超级计算机、嵌入式系统等领域都有广泛应用。( )

3.VMware网络配置中有四种网络模式。 ( )

4.在Linux系统中,可以通过“ifconfig -a”命令查看所有的网卡。( )

5.SFTP即安全Shell协议,是远程文件管理中会用到的协议,该协议通过高强度的加密算法,提高了数据传输的安全性。 ( )

6.Linux一词本指Linux操作系统的内核,但后来人们逐渐使用Linux指代整个操作系统。( )

7.日常生活中,人们使用的智能手机、车载电脑、智能电视、机顶盒等都会使用Linux操作系统。( )

8.grep命令的功能是在文件中搜索与字符串匹配的行并输出。( )

9.Vi编辑器的三种工作模式间可直接相互切换。( )

10..chmod命令用于更改文件或目录的所有者。( )

11.GCC编译器的编译流程依次为:编译、汇编、预处理、链接。( )

12.gzip命令既能用于压缩文件,又能对压缩包解压缩。( )

13.Linux系统中的用户分为超级用户和普通用户,超级用户具有管理员权限,普通用户只拥有部分权限。 ( )

14.除基本组外,用户所在的组都是附加组。为用户指定附加组,可以使用户拥有对应组的权限。 ( )

15.用户可以从附加组中移除,也可从基本组中移除。( )

16.使用su命令从当前用户(itcast)切换到itheima用户时,使用的命令为“su –itheima”,输入命令后须再输入用户itheima的密码,方能成功切换用户。( )

17.使用sudo命令切换用户时,要求当前用户须有使用待切换用户身份的权限,该权限在/etc/sudoers文件中设置,用户可通过vi命令打开该文件,并对其进行编辑。( )