第4章 系统管理与入门
Linux系统管理与Windows大不相同,这不但是因为它与Windows有完全不同的设计理念,更是因为它有众多实用的命令行小工具增强了管理效率。
4.1 用户管理
Linux是一个多用户操作系统,系统中的每个文件、每个程序都是按照用户来进行权限划分的,因此Linux下的权限设置至关紧要,也必须掌握。
4.1.1 用户账号文件
从Linux内核来看,用户只是一个个的数字,每个用户以一个UID(User ID,用户ID)和GID(Group ID,拥有用户组ID)来识别。只不过为了方便用户辨认,才在内核外专门创建了一个数据库,在这个数据库中为每个用户定义了一个名字,指派了一个ID。
1./etc/passwd
对于Red Hat Enterprise Linux 5来说,用户账号文件就是/etc/passwd文件,如图4-1所示。/etc/passwd是一个文本文件,文件中每个用户对应一行,并以冒号分成7个部分。
图4-1 Red Hat Enterprise Linux 5下的用户和密码保存在/etc/passwd文件中
(1)用户名
需要注意的是,Linux中除了管理系统的root账号和新建的用户账号外,还有很多其他的账号,比如rpm、daemon、mail、news……它们都是系统为了某个服务而专门设置的。
(2)口令
以加密的方式保存。需要说明的一点是,因为这个文件的权限设置问题(所有用户都可以读取),所以很容易造成数据失窃,再加上层出不穷的密码破解工具,最终让安全成了问题。不过,只有早期的Linux才在这个地方保存密码。现在的Linux,密码都保存在/etc/shadow中了,因此/etc/passwd中的相应部位只填写了一个“x”。
(3)UID(User ID)
需要注意的是,用户的UID并不是随便取一个数值,而是有一定限制的。UID的限制如表4-1所示。
表4-1 UID的限制
(4)GID(Group ID)
具体的GID,也保存在/etc/group中。该文件与/etc/passwd格式差不多,不过内容更简单一些。
(5)用户信息
该栏目中保存用户的全名及其他信息。
(6)用户家目录
用户登录后会直接进入的目录,一般位于/home下相应用户名的目录中,只有root账号例外,它的家目录是/root。
(7)登录Shell
配置当登录系统时所采用的Shell,默认是/bin/bash。管理员可以在这里直接指定用户的登录Shell。
在对用户进行管理时,我们不建议采用直接编辑/etc/passwd的方式,而是利用命令行和图形界面窗口来完成。
2./etc/shadow
/etc/shadow文件是/etc/passwd的影子文件,和/etc/passwd是对应互补的。shadow内容包括用户及被加密的密码,以及/etc/passwd不能包括的其他信息,比如用户的有效期限等,如图4-2所示。
图4-2 /etc/shadow中包括了加密的用户密码
我们可以看出,这个shadow文件共分为9栏,具体作用大致如下。
(1)用户名
密码肯定是与账户对应的,所以这里有个用户名是肯定的。
(2)密码
这是经过加密的密码(默认的加密方式是MD5),所以打开该文件时,在很多用户的密码栏只会看到一些乱码,如图4-3所示。
图4-3 密码是经过加密的乱码
特别值得一提的是,因为这个文件的属性是“-r--------”,即使管理员也只具有可读权限,所以安全得到了大幅度提高,如图4-4所示。
图4-4 shadow文件不是每个用户都可以访问的
小提示
如果某个用户的密码栏是以“*”或者“! ”开头的,那就表示该用户不能进行本地登录(只能用来运行某些服务)。所以,如果你暂时不想让某个用户登录,也可以在这里在用户的密码前加一个“*”或者“! ”号。
(3)最近更改密码日期
这个字段记录了最近修改密码的日期。需要注意的是,它是以1970年1月1日作为1,文件中记录的日期其实就是距离该日期的天数。
(4)密码不可更改天数
对应于“PASS_MIN_DAYS”参数,默认值在/etc/login.defs中指定,大小为0。
(5)密码需要更改的天数
对应于“PASS_MAX_DAYS”参数,默认值在/etc/login.defs中指定,大小为99999。
(6)密码失效提前通知的天数
对应于“PASS_WARN_AGE”参数,默认值在/etc/login.defs中指定,大小为7。
(7)密码过期的宽限时间
如果用户密码失效了,还可以设置几天的宽限期,让用户可以使用失效的密码登录。默认未设置。
(8)账号失效日期
该日期也是以1970年1月1日为第一天进行计时的,也可以设置为YYYY-MM-DD的格式。
(9)保留
留待以后添加新功能。
4.1.2 用户群组文件
与用户账号文件相对应,用户群组也有密码和加密密码文件,它们分别对应于/etc/group和/etc/gshadow。
1./etc/group
这个文件是记录用户群组信息的,如图4-5所示。每行表示一个用户组,每个组有4栏来指定该组的属性。
图4-5 用户群组文件/etc/group
(1)组名
用户组的名称。
(2)组密码
一般没有设置,因为没有哪种场合需要以用户组身份登录。如果该密码处有“x”号,表示密码经过加密,需要到/etc/gshadow中查询。
(3)GID
用户组的ID。
(4)支持的账号名称
包括该组的所有账号列表,不同成员之间以“, ”号分割。比如:
daemon:x:2:root.bin.daemon
表示daemon组中有root、bin和daemon三个成员。
2./etc/gshadow
与用户的影子密码文件相对应,/etc/gshadow是群组的影子密码文件,默认采用的加密方式也是MD5,如图4-6所示。
图4-6 群组的影子密码文件/etc/gshadow
群组的影子密码文件同样包括4栏,分别代表以下含义。
➢ 用户组名称。
➢ 密码。与用户影子密码相同,以“*”或者“! ”开头的无法进行本地登录。
➢ 用户组管理员账号。
➢ 用户组的所有成员(与/etc/group内容相同)。
4.1.3 命令行管理方式
Red Hat Enterprise Linux 5是通过几个命令组合来实现用户管理的,分别是添加用户的adduser命令、删除用户的userdel命令、修改用户信息的chfn命令、设置登录Shell的chsh命令、修改密码的passwd命令等。
1.添加用户——adduser、useradd
Red Hat Enterprise Linux 5中添加用户的命令行工具有adduser和useradd,这两个工具的功能完全一样。最简单的使用方法是不加任何参数,直接添加用户:
[root@localhost ~]# useradd clinuxer
实际上,useradd命令并不是如此简单,它还具备更多的功能,也有丰富的参数。useradd的语法如下:
[root@localhost ~]#useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] \ [-g initial_group] [-G group[, ...]] [-m [-k skeleton_dir] — -M] [-s shell] \ [-u uid [ -o]] [-n] [-r] login
参数:
➢ -c:对于新账号的说明。
➢ -d:指定新账号每次登录时所使用的家目录。默认值为default_home。
➢ -e:账号终止日期。日期的指定格式为MM/DD/YY。
➢ -f:账号失效宽限期。当值为0时,账号则立刻被停权;而当值为-1时,则关闭此功能。默认值为-1。
➢ -g:group名称或以数字来作为用户登录起始群组(group)。群组名须为现有存在的名称,群组数字也须为现有存在的群组。默认的群组数字为1。
➢ -G:定义此用户为groups的成员。每个群组使用“, ”分隔,不可以夹杂空格符。
➢ -m:用户目录如果不存在,则自动建立。如果使用-k选项,skeleton_dir内的文件将复制至用户目录下,然而在/etc/skel目录下的文件也会复制过去取代。任何在skele ton_dir或/etc/skel下的目录也会在用户目录下一一建立。
➢ -M:不建立用户目录,即使/etc/login.defs配置文件指定要建立用户目录。
➢ -n:默认值为用户群组与用户名称相同。此选项将取消默认值。
➢ -r:此参数用来建立系统账号。系统账号的UID会比定义在配置文件/etc/login.defs中的UID_MIN小。注意:该参数不会建立用户目录,也会忽略/etc/login.defs中的设置。如果想要拥有用户目录,则必须额外指定-m参数来建立系统账号。
➢ -s:用户登录后使用的Shell名称。默认为不填写,这样系统会帮你指定默认的登录Shel(l Red Hat Enterprise Linux 5默认配置下为bash)。
➢ -u:用户的ID值。必须为唯一的ID值,除非用-o选项。数字不可为负值。默认为最小不得小于500(0~499传统上是保留给系统账号使用的)。
我们知道,Red Hat Enterprise Linux 5创建用户有很多默认值。这些值其实同样可以通过useradd命令来修改,其语法格式如下:
[root@localhost ~]#useradd -D [-g default_group] [-b default_home] [-f default_ inactive] \ [-e default_expire_date] [-s default_shell]
参数:
➢ -D:表示useradd命令不是用来添加用户,而是用来配置所添加用户的默认值的。
➢ -g:设置默认群组。
➢ -b:设置默认家目录。
➢ -f:设置默认账号宽限期。
➢ -e:设置默认账号失效日期。
➢ -s:设置默认Shell。
【实例一】创建一个一般用户,其名称为fayero。
[root@localhost ~]#useradd fayero [root@localhost ~]#ls -l /home 总计 24 drwx------21 fayero fayero 4096 10-14 12:06 fayero ;默认创建的新用户会主动创建家目录 drwx------ 2 root root 16384 10-06 00:43 lost+found [root@localhost ~]#grep fayero /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/passwd:fayero:x:500:500::/home/fayero:/bin/bash /etc/group:fayero:x:500: /etc/shadow:fayero:! ! ! :14157:0:99999:7::: /etc/gshadow:fayero:! ! :: # 可见,创建一个新用户,最起码修改了/etc/passwd、/etc/shadow、/etc/group和 # /etc/gshadow 4个文件,而且创建的用户初始Shell是/bin/bash
【实例二】创建一个系统账号,其名称为administrator。
[root@localhost ~]#useradd -r administrators [root@localhost ~]#ls -l /home 总计 24 ;没有创建系统账号的家目录 drwx------21 fayero fayero 4096 10-14 12:06 fayero drwx------ 2 root root 16384 10-06 00:43 lost+found [root@localhost ~]#grep administrator /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/passwd:administrator:x:101:104::/home/administrator:/bin/bash /etc/group:administrator:x:104: /etc/shadow:administrator:! ! :14166:::::: /etc/gshadow:administrator:! :: # 可以看出,创建系统账号默认的UID和GID都是系统级别的(小于500)
2.修改密码——passwd
在Red Hat Enterprise Linux 5下,通过useradd新创建的用户是无法马上登录系统的,这是因为它还没有被设置密码,所以我们需要给它设置密码。该如何进行呢?使用passwd命令吧。不带任何参数执行passwd命令会修改当前用户密码,带用户名执行passwd命令则修改该用户的密码。其语法参数如下:
[root@localhost ~]# passwd [-k] [-l ][-d] [-u] [-f] [-x] [-n] [-w] [-i] \
[-S] [- -help] [- -usage] [login]
参数:
➢ -k:创建永不过期账户。
➢ -l:锁定指定账号(限root使用)。
➢ -d:删除指定账号的密码(限root使用)。
➢ -u:解锁指定账号(限root使用)。
➢ -f:强制操作。
➢ -x:密码最长失效时间(限root使用)。
➢ -n:密码最短失效时间(限root使用)。
➢ -w:密码失效前提前提醒的天数(限root使用)。
➢ -i:密码失效后宽限期(限root使用)。
➢ -S:查询汇报指定用户密码信息。
➢ --help:获取帮助信息。
➢ --usage:显示主要使用方法。
【实例】为fayero用户设置密码,如图4-7所示。
图4-7 为fayero用户设置密码
[root@localhost ~]#passwd fayero Changing password for user fayero. New UNIX password: ;这里输入的密码不会显示 BAD PASSWORD:it is based a dictionary word ; Linux不建议使用单词作为密码 Retype new UNIX password: passwd: all authentication tokens updated successfully.;不过你强制使用单词作为密码 ;它也无可奈何 [root@localhost ~]#grep fayero /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/passwd:fayero:x:501:501::/home/fayero:/bin/bash /etc/shadow:fayero:$1$tQMWvlkQ$6FXxwzsDBOGGipXuxzmrO1:14166:0:99999:7::: /etc/group:fayero:x:501: /etc/gshadow:fayero:! :: # 设置密码后,即可允许fayero用户登录了
小提示
Red Hat Enterprise Linux 5中设置的账号密码,除了要受/etc/login.defs中的配置限制外,还要接受/etc/pam.d/passwd这个PAM模块的检查。一般来说,最好符合以下几个条件:
➢ 密码不要与账户相同。
➢ 密码不要是词典内具有的单词。
➢ 密码最好超过8个字符。
3.修改用户信息——chfn
/etc/passwd文件中不仅包括了用户账号、密码、ID、家目录和登录Shell等信息,还包括了一个用户详细信息部分,其中的某些内容可以通过chfn命令来修改。其语法格式如下:
[root@localhost ~]#chfn [ -f full-name ] [ -o office ] [ -p office-phone ] \ [ -h home- phone ] [ -u ] [ -v ] [ username ]
参数:
➢ -f:修改全名。
➢ -o:修改单位。
➢ -p:修改单位电话。
➢ -h:修改家庭电话。
➢ -u:显示帮助信息。
➢ -v:显示版本信息。
【实例】修改fayero的用户信息,如图4-8所示。
图4-8 使用chfn命令可以修改用户的全名、电话、单位信息
[root@localhost ~]# chfn fayero Changing your finger information for fayero. Name []: Fayero ;用户全名 Office []:Linux-China ;单位信息 Office Phone []:000-00000000 ;单位电话 Home Phone[]:13900000000 ;家庭电话
4.修改登录Shell——chsh
如果没有指定其他信息,Red Hat Enterprise Linux 5创建用户时会采用默认的配置来完成。用户登录Shell默认设置的就是/bin/bash,如果不喜欢使用bash,而更喜欢使用/bin/tcsh,则可以在创建用户后用chsh命令来修改。chsh语法格式如下:
[root@localhost ~]# chsh [ -s shell ] [ --l] [ -u ] [ --v ] [ username ]
参数:
➢ -s:指定Shell,必须是全路径,比如tcsh为/bin/tcsh。
➢ -u:显示帮助信息。
➢ --v:显示版本号。
➢ --l:等同于--list-shells,列出所有支持的Shell。
【实例】修改fayero用户的登录Shell为tcsh,如图4-9所示。
图4-9 使用chsh命令来修改用户登录Shell
[root@localhost ~]# chsh fayero Changing shell for fayero. New shell [/bin/bash]:/bin/tcsh Shell changed.
5.修改用户密码过期相关信息——chage
从前面的介绍中我们知道,Linux中的账号密码有最大存活期、最小存活期,还有密码失效之后的宽限期。Red Hat Enterprise Linux 5中提供了一条专门的命令来修改相应的信息——chage。chage的语法格式如下:
[root@localhost ~]#chage [-d] [-E] [-h] [-I] [-l] [-m] [-M] [-W]
参数:
➢ -d:等同于--lastday。将最近一次密码设置时间设置为“最近日期”。
➢ -E:等同于--expiredate。密码失效日期。
➢ -h:等同于--help。显示帮助信息。
➢ -I:等同于--inactive。如果一个账号密码过期,则此账号被停用。
➢ -l:等同于--list。显示账户年龄信息。
➢ -m:等同于--mindays。设置密码更改最小天数。
➢ -M:等同于--maxdays。设置密码必须更改的最多天数。
➢ -W:等同于--warndays。密码过期提前经过的天数。
【实例】修改fayero账号到2008年10月20日失效。
[root@localhost ~]#chage -E 2008-10-20 fayero
6.修改用户信息——usermod
前面我们介绍了chfn和chsh两个命令,它们分别用来修改用户信息和修改用户登录Shell。可是与用户相关的信息并不只这两个,要修改其他信息,难道就只能手工去修改/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow吗?不,还有一个更简便的用户信息修改命令usermod,它的语法格式如下:
[root@localhost ~]#usermod [-c] [-d][-e][-f] [-g][-G][-l][-L][-s ][-u ][-U] [UserName]
参数:
➢ -c:修改用户账号的备注文字。
➢ -d:修改用户登录时的家目录。
➢ -e:设置密码的失效日期。
➢ -f:密码失效后允许登录的宽限期。
➢ -g:修改用户所属的群组。
➢ -G:修改用户所属的其他群组。
➢ -l:修改用户账号名称。
➢ -L:暂停用户,使其无法生效。
➢ -p:修改密码。
➢ -s:修改用户登录后所使用的Shell。
➢ -u:修改用户ID。
➢ -U:解除用户锁定。
【实例一】修改fayero的用户信息,加入“This is a test user”提示,如图4-10所示。
图4-10 修改用户注释信息
[root@localhost ~]#usermod -c "This is a test user" fayero [root@localhost ~]#grep fayero /etc/passwd Fayero:x:501:501:This is a test user.:/home/fayero:/bin/tcsh
【实例二】如果使用“useradd -r”命令创建了一个“jackeroo”账号,但是忘记使用“-m”参数为其创建家目录,那么使用usermod命令为其添加家目录:
[root@localhost ~]#useradd -r jackeroo [root@localhost ~]#ls /home/jackeroo ls:/home/jackeroo:No such file or directory ;忘记为jackeroo创建家目录 [root@localhost ~]#mkdir /home/jackeroo ;为jackeroo创建家目录 [root@localhost ~]#usermod -d /home/jackeroo -m jackeroo;指定jackeroo的家目录 [root@localhost ~]#ls /home/jackeroo
【实例三】暂时冻结fayero账号。
[root@localhost ~]#usermod -L fayero ;锁定fayero账号 [root@localhost ~]#grep fayero /etc/shadow fayero:! $1$tQMWvlkQ$6FXxwzsDBOGGipXuxzmrO1:14166:0:99999:7::20080918: #我们看到,fayero账号的密码前有个“! ”,这表示该账号被暂时冻结 [root@localhost ~]#usermod -U fayero ;给fayero账号解锁 fayero:$1$tQMWvlkQ$6FXxwzsDBOGGipXuxzmrO1:14166:0:99999:7::20080918: #密码前面没有标识冻结的“! ”号了
7.删除用户——userdel
Red Hat Enterprise Linux 5中删除用户的命令是userdel,其语法如下:
[root@localhost ~]#userdel [-f] [-h] [-r] UserName
参数:
➢ -f:强制删除文件,即使文件的拥有者不是要删除用户。
➢ -h:显示帮助信息。
➢ -r:删除用户家目录。
【实例】删除fayero账号及其家目录。
[root@localhost ~]# userdel -r fayero
需要注意的是,这条命令会主动删除/home下相应的用户家目录,即使其中的某些文件是root账户创建的,fayero并没有访问权限。
8.相关配置文件
若想知道Red Hat Enterprise Linux 5创建用户都采用了哪些默认配置,使用“useradd -D”就可以查询到,如图4-11所示。当然,也可以通过修改/etc/login.defs和/etc/defaults/useradd两个文件来修改默认选项。
图4-11 创建用户的默认配置
(1)/etc/login.defs
Red Hat Enterprise Linux 5默认的login.defs文件配置如下:
# *REQUIRED* # Directory where mailboxes reside, _or_ name of file, relative to the # home directory. If you _do_ define both, MAIL_DIR takes precedence. # QMAIL_DIR is for Qmail # #QMAIL_DIR Maildir MAIL_DIR /var/spool/mail ;设置邮件保存位置 #MAIL_FILE .mail # Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_MIN_LEN Minimum acceptable password length. # PASS_WARN_AGE Number of days warning given before a password expires. # PASS_MAX_DAYS 99999 ;最大密码有效期(99999),超过此有效期,必须修改 PASS_MIN_DAYS 0 ;最小密码有效期,超过此天数才能再次修改密码 PASS_MIN_LEN 5 ;密码最小长度,默认设置为5 PASS_WARN_AGE 7 ;密码到期前7天通知用户 # # Min/max values for automatic uid selection in useradd # UID_MIN 500 ;最小UID UID_MAX 60000 ;最大UID # # Min/max values for automatic gid selection in groupadd # GID_MIN 500 ;最小GID GID_MAX 60000 ;最大GID # # If defined, this command is run when removing a user. # It should remove any at/cron/print jobs etc. owned by # the user to be removed (passed as the first argument). # #USERDEL_CMD /usr/sbin/userdel_local # # If useradd should create home directories for users by default # On RH systems, we do. This option is overridden with the -m flag on # useradd command line. # CREATE_HOME yes ;是否创建用户家目录 # The permission mask is initialized to this value. If not specified, # the permission mask will be initialized to 022. UMASK 077 ;家目录权限设置 # This enables userdel to remove user groups if no members exist. # USERGROUPS_ENAB yes # Use MD5 or DES to encrypt password? Red Hat use MD5 by default. MD5_CRYPT_ENAB yes ;用户密码加密方式选择,Red Hat Enterprise Linux 5 ;默认选择的是MD5,也可以选择DES
(2)/etc/defaults/useradd
Red Hat Enterprise Linux 5在/etc/defaults目录下还保存一个useradd文件,它指定了Red Hat Enterprise Linux 5中新建用户的默认配置选项。
# useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
4.1.4 图形界面的用户管理器
Red Hat Enterprise Linux 5中也有图形界面的用户管理器,它集成了上述几个命令行的所有功能,用起来当然也更直观了。
1 在GNOME桌面下,执行“系统”→“管理”→“用户和组群”,如图4-12所示,打开“用户和组群”管理工具。
图4-12 打开图形界面的用户和组群管理工具
{L-End} 2 在“用户管理者”窗口,不管是创建、删除还是修改用户和群组都很简单,如图4-13所示。
图4-13 图形界面的用户管理器
4.1.5 用户群组的管理
与Linux下用户的管理相对应,Linux也有几条命令用来管理用户群组的。
1.创建新组——groupadd
groupadd是Red Hat Enterprise Linux 5中的创建新组命令,其语法格式如下:
[root@localhost ~]#groupadd [-g] [-k] [-o]] [-r] [-f] GroupName
参数:
➢ -g:创建指定GID的组。
➢ -k:覆盖/etc/login.defs中的设置。
➢ -o:允许创建GID相同的组。
➢ -r:创建系统组,GID小于500。
➢ -f:即使创建组已经存在,也返回成功标识。
【实例】创建一个GID唯一的系统组group1。
[root@localhost ~]#groupadd -r group1 [root@localhost ~]#grep /etc/group /etc/gshadow /etc/group:group1:x:103: ;创建的是系统群组,号码小于500 /etc/gshadow:group1:! ::
2.删除群组——groupdel
groupdel命令用于删除已经存在的群组。其语法格式如下(没有任何的附加参数):
[root@localhost ~]#groupdel GroupName
小提示
如果在passwd中指定该群组为初始群组,则该群组不能被删除。所以,在删除群组之前请先确认是否删除了相应群组的用户或者将它们转移到了其他群组。
3.修改群组密码——gpasswd
gpasswd命令的原本功能是用来为群组设置密码,不过,现在它还具备将用户添加到群组中或者指定某个人为群组管理员的功能。其语法格式如下:
[root@localhost ~]#gpasswd [-a] [-A] [-d] [-R] [-r] GroupName
参数:
➢ 没有任何参数,表示修改群组的密码。
➢ -a:将某个用户添加到群组中。
➢ -A:将群组的管理员权限交给某个用户。
➢ -M:将某些用户添加到群组中。
➢ -d:将某个用户从群组中删除。
➢ -R:使群组的密码失效。
➢ -r:将群组的密码删除。
【实例】添加一个群组group1,将fayero、clinuxer加入进去。
[root@localhost ~]#groupadd group1 [root@localhost ~]#gpasswd -M clinuxer, fayero group1 /etc/group:group1:x:103:clinuxer, fayero /etc/gshadow:group1:! ::clinuxer, fayero ; clinuxer、fayero都被添加到group1群组了
4.修改群组信息——groupmod
groupmod是Red Hat Enterprise Linux 5中修改群组信息的命令,它的语法格式如下:
[root@localhost ~]#groupmod [-g] [-o] [-n] Groupname
参数:
➢ -g:修改GID,该GID必须为唯一的。
➢ -o:修改GID,即使该GID不唯一。
➢ -n:修改群组名称。
5.换个群组登录——newgrp
newgrp命令类似login命令,但它是以相同的账号、另一个群组名称再次登入系统。要使用newgrp命令切换群组,则你必须是该群组的用户,否则将无法登入指定的群组。单一用户要同时隶属多个群组,需利用交替用户的设置。若不指定群组名称,则newgrp命令会登入该用户名称的预设群组。该指令的语法格式如下:
[root@localhost ~]#newgrp [-] [Group]
参数:
➢ :加入该参数,用户的登录环境会被重新初始化,以前设置的各种参数就不见了。
【实例】将fayero以group1群组登录。
[fayero@localhost ~]$groups fayero group1 ;当前用户群组为fayero [fayero@localhost ~]$newgrp group1 [fayero@localhost ~]$groups group1 fayero ;当前群组变成了group1
4.2 磁盘管理
我们知道,磁盘必须经过分区、格式化操作才能使用,Windows下如此,Linux下也是如此。二者不同的地方在于,它们对于磁盘分区的标识方法、使用方法和分区所要使用的工具不同。
4.2.1 硬盘相关知识
由于Linux的硬盘使用、标识和Windows下大相径庭,我们在开始具体使用磁盘管理工具之前还是应该对相关的知识有个基本的了解。
硬盘分区就是将一个物理硬盘分成几段,每段都作为一个分区。创建分区有两个目的:一是用户有可能需要两种以上的操作系统,创建多个分区可以在每个分区中安装一个系统,大家互不影响;二是出于谨慎的目的,对一个分区的使用不会影响到其他分区。
1.硬盘名称
在Linux下,每个硬盘都有一个独立的设备名。
IDE硬盘的名称是/dev/hdX格式,其中的X可以是从a到z的小写字母序列。一般情况下,Primary Master就是hda, Primary Slave是hdb, Secondary Master是hdc, Secondary Slave是hdd……
SATA、SCSI设备遵守与IDE类似的机制,比如第一个SCSI/SATA硬盘叫做/dev/sda,第二个叫做/dev/sdb……如图4-14所示。
图4-14 Linux下的分区标识与Windows下不一样
2.分区名称
建立分区后,分区的名称则是在原来的硬盘名称后加上数字,形式为/dev/hdXY,而这个Y就是分区编号。一般情况下,第一个主分区是1,第二个主分区是2,第三个主分区是3,第四个主分区是4;因为硬盘最多只能被划分为4个主分区,所以很多时候要把其中的一个创建为扩展分区,再在其中创建逻辑分区:第一个逻辑分区标识数字5,第二个逻辑分区标识数字6……如图4-15所示。
图4-15 logical是逻辑分区,extended是扩展分区
4.2.2 管理磁盘分区
对于硬盘的使用,Linux与Windows不完全一样。Windows下是分区、格式化后即可使用,此时每个分区有一个独立的盘符;而Linux在分区、格式化后,还需要将这个分区加载到Linux的树状目录下才能访问。
1.给硬盘分区
在安装Linux的时候,我们可以用到图形界面的分区工具;但在安装系统之后,就只有命令行工具可用了。在Red Hat Enterprise Linux 5中内置了两个分区工具:parted和fdisk。
(1)parted
parted是一款基于GPL的硬盘分区创建、删除、调整大小、检测和拷贝工具,而且具有格式化功能。它的语法格式如下:
[root@localhost ~]#parted [OPTIONS] [DEVICE] [COMMAND] [PARAMETERS]
参数:
➢ OPTIONS:
● -h:显示帮助信息。
● -i:交互式模式(默认模式)。parted也支持命令行操作。
● -l:显示所有设备上的分区信息。
● -s:执行脚本。
● -v:显示版本信息。
➢ COMMAND:在命令行模式下支持的命令,请参考后文的交互式模式。
① 交互式模式
parted支持命令行和交互式两种模式,不带任何参数打开的是交互式模式。在交互式模式下,显示一个“(parted)”提示符,用户输入一条命令,parted执行并将结果显示出来,然后等待用户输入下一条命令。
交互式模式下的命令有很多,大家可以在“(parted)”提示符下输入“help”命令显示详细的帮助信息,如图4-16所示。
图4-16 输入“help”命令获取详细的帮助信息
➢ check——检查分区
格式:check NUMBER
检查分区错误,分区号由NUMBER指定。需要注意的是,要检查的分区必须是未加载的分区。
➢ cp——复制分区
格式:cp [FROM-DEVICE] From-Number To-Number
将分区From-Number上的文件系统完整地复制到分区To-Number中,分区To-Number上的数据会被全部删除(目标分区必须要比源分区大)。如果要在不同设备间复制文件系统,则可以通过[FROM-DEVICE]命令来指定来源硬盘的名称。
cp命令支持ext2、ext3、FAT16、FAT32、linux-swap和reiserfs文件系统。
➢ help——获取帮助
格式:help [command]
显示一条命令的帮助信息。
➢ mklabel——建立分区表
格式:mklabel Label-Type
建立一个新的分区表,Label-Type(分区表类型)可以是aix、amiga、bsd、dvh、gpt、mac、msdos、sun和loop之一。在一个硬盘上创建分区表将会导致原来的分区全部丢失(如果还没有新建分区,可以通过rescue命令恢复)。
➢ mkfs——创建文件系统
格式:mkfs NUMBER Fs-Type
在NUMBER分区上创建Fs-Type指定的文件系统。Fs-Type只能是以下之一:ext2、FAT16、FAT32、linux-swap和reiserfs。
➢ mkpart——建立新分区
格式:mkpart Part-Type [Fs-Type] Start End
建立一个新的分区。若要建立非扩展分区,最好用Fs-Type来指定文件系统。Start和End是新分区开始和结束的具体位置。
● Part-Type可以是primary(主分区)、extended(扩展分区)和logical(逻辑分区)三者之一。
● Fs-Type必须是ext2、ext3、FAT16、FAT32、hfsx、hfs+、jfs、linux-swap、NTFS、reiserfs、hp-ufs、sun-ufs、xfs、apfs2、apfs1、apfs、amufs5、amufs4、amufs3、amufs2、amufs1、amufs0、amufs、affs7、affs6、affs5、affs4、affs3、affs2、affs1和affs0之一。
● Start和End表示磁盘的位置,可以是4GB(如果没有指定单位,则默认单位是MB),也可以是10%,还可以是负数,比如-1s表示最后一个sector(扇区)。
➢ mkpartfs——建立分区及其文件系统
格式:mkpartfs Part-Type Fs-Type Start End
建立一个新的分区,并在上面建立文件系统,相当于mkpart和mkfs的合体。
➢ move——移动分区
格式:move NUMBER Start End
该命令能将选定的分区在硬盘中移动。Start指定一个新分区的起始位置,End指定新分区的结束位置(新分区大小必须大于或者等于原来分区)。
该命令支持ext2、ext3、FAT16、FAT32、linux-swap和reiserfs分区。
➢ name——命名
格式:name NUMBER Name
为编号所指定的分区命名(只支持GPT、Mac、MIPS和PC98格式的分区)。
➢ print——显示分区信息
格式:print [NUMBER]
显示当前硬盘的分区信息或者某个分区的信息。
➢ quit——退出
格式:quit
退出parted,所有分区操作开始生效。
➢ rescue——恢复分区
格式:rescue Start End
如果不小心删除了一个分区,可以尝试用rescue命令恢复。只要通过Start和End指定分区所在的大概位置,parted就会去自动搜索。如果找到分区,则会询问是否重建该分区。
➢ resize——调整分区大小
格式:resize NUMBER Start End
调整指定编号的分区大小。新分区的开始位置和结束位置由Start和End决定。需要注意的是,如果缩小了分区,那么请保证新分区能够容纳老分区中的内容。
该命令支持ext2、ext3、FAT16、FAT32、hfs、hfs+、hfsx、linux-swap和reiserfs分区。
➢ rm——删除分区
格式:rm NUMBER
将编号指定的分区删除。
➢ select——选择设备
格式:select DEVICE
选择parted将要处理的磁盘设备。这个磁盘设备可以是一个Linux硬盘设备、一个软盘、一个软RAID磁盘阵或者LVM逻辑卷。
➢ set——设置标记
格式:set NUMBER Flag State
更改编号指定的分区标记。具体标记类型是由分区表决定的。标记有两种状态:on(生效)和off(失效)。
● boot:用于Mac、MS-DOS和PC98分区表。拥有该标记的分区可以引导。
● lba:用于MS-DOS分区表。该标记告诉MS-DOS、Windows使用LBA(Logic Block Addressing)模式。
● root:用于MAC分区表。如果某分区是Linux系统的根分区,那么就要对该分区启用这个标记。
● swap:用于Mac分区表。如果某分区是Linux系统的交换分区,那么就要对该分区启用这个标记。
● hidden:用于MS-DOS和PC98分区表。启用这个标记能使一个分区在Windows下“隐藏”起来。
● raid:用于MS-DOS分区表。该标记能够告诉Linux系统这是一个软RAID磁盘阵。
● LVM:用于MS-DOS分区表。启用这个标记能够告诉Linux系统这是一个LVM逻辑。
➢ unit——设置单位
格式:unit UNIT
为parted选择一个表示磁盘大小的单位。默认是以MB为单位的,我们可以设置单位为GB。其支持设置的单位如下:
● s:sector(扇区,大小为512字节)。
● B:byte(字节)。
● KB:kilobyte(1000字节)。
● MB:megabyte(1000000字节)。
● GB:gigabyte(1000000000字节)。
● TB:terabyte(1000000000000字节)。
● %:百分比,数字必须在0和100之间。
● cyl:柱面。
● chs:柱面(cylinders)、磁头(heads)、扇区(sectors)的地址。
● compact输入时以MB作为单位。
【实例一】查看硬盘分区表。
查看/dev/sda分区信息,可以执行以下步骤。
1 在Linux下输入以下命令:
[root@localhost ~]# parted /dev/sda
此时,屏幕上会出现简单的提示:
GNU Parted 1.8.1 Welcome to GNU Parted! Type ' help' to view a list of commands. (parted)
大概意思就是说:欢迎使用Parted!如果不知道如何用,请输入“help”查看详细的帮助信息,如图4-17所示。
图4-17 命令行分区工具parted
{L-End} 2 在(parted)提示符下,输入“print”命令即可查看到当前硬盘的分区信息,如图4-18所示。
图4-18 查看当前硬盘的分区信息
【实例二】为/dev/sdb分区。
1 输入以下命令打开parted:
[root@localhost ~]#parted /dev/sdb
{L-End} 2 创建分区表。
在(parted)提示符下,输入以下命令创建一个MS-DOS格式的分区表,如图4-19所示。
图4-19 MS-DOS格式分区表创建成功
(parted) mklabel msdos
{L-End} 3 创建一个主分区。
先用空间的25%来创建一个主分区,并格式化为ext2格式,如图4-20所示。
图4-20 创建一个Linux ext2格式的主分区
(parted) mkpartfs PRIMARY EXT2 0 25%
{L-End} 4 创建扩展分区。
将剩余空间创建一个扩展分区,大小为硬盘空间的75%,如图4-21所示。
图4-21 扩展分区创建成功
(parted) mkpart extended 25% 100%
{L-End} 5 创建逻辑分区。
将扩展分区中的所有空间划分为一个逻辑分区,如图4-22所示。
图4-22 扩展分区创建中
(parted)mkpartfs logical EXT2 25% 100%
{L-End} 6 退出。
完成分区任务后,执行“quit”命令退出。
(parted)quit
Information: don' t forget to update /etc/fstab, if necessary.
② 命令行模式的parted
parted的命令行模式使用的参数和命令与交互式模式大同小异,只要按照以下格式输入就可以了:
[root@localhost ~]#parted [options] [DEVICE] [COMMAND] [PARAMETERS]
其中的COMMAND(命令)和PARAMETERS(参数),请参考交互式模式下的具体介绍。
(2)fdisk
fdisk是Red Hat Enterprise Linux 5下另一种命令行分区工具。它虽然没有parted功能强大,但简单易用,所以,现在还是有不少的用户在使用它。fdisk的语法格式如下:
[root@localhost ~]#fdisk [-l] [-v] DeviceName
参数:
➢ -l:列出指定设备的分区信息。
➢ -v:显示fdisk的版本信息。
【实例一】查看所有硬盘的分区信息。
打开终端窗口,输入以下命令就会看到笔者的第一块硬盘的所有分区信息。
[root@localhost ~]#fdisk -l
Disk /dev/sda: 805.3 GB, 805306368000 bytes
255 heads, 63 sectors/track, 97906 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 6387 51199155 83 Linux
/dev/sda3 6388 8937 20482875 83 Linux
/dev/sda4 8938 97906 714643492+ 5 Extended
/dev/sda5 8938 10212 10241406 83 Linux
/dev/sda6 10213 10849 5116671 83 Linux
/dev/sda7 10850 11110 2096451 83 Linux
/dev/sda8 11111 11371 2096451 82 Linux swap / Solaris
/dev/sda9 11372 97906 695092356 83 Linux
Disk /dev/sdb: 268.4 GB, 268435456000 bytes
255 heads, 63 sectors/track, 32635 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 8159 65537136 83 Linux
/dev/sdb2 8160 32635 196603470 f W95 Ext' d (LBA)
/dev/sdb5 8160 32635 196603438+ 83 Linux
➢ 不指定硬盘执行fdisk -l命令,会显示所有硬盘的分区信息。
➢ sda5、sda6、sda7、sda8、sda9都是逻辑分区,位于扩展分区sda4中。
➢ 第二位标识有“*”号表示该分区可以启动。
【实例二】为/dev/sdb创建分区。
要求创建两个分区:一个为主分区,大小为整个硬盘大小的25%;另一个为逻辑分区,大小为整个硬盘大小的75%。
fdisk对于创建、删除分区的操作是通过交互式菜单来完成的。
1 打开/dev/sdb。
在虚拟终端窗口,输入以下命令用fdisk打开/dev/sdb,如图4-23所示。
图4-23 用fdisk打开/dev/sdb
[root@localhost ~]#fdisk /dev/sdb
{L-End} 2 查看帮助信息。
若是初次接触Linux下的fdisk,还是看看它内置的帮助信息比较好,在“Command (m for help) :”提示符下,输入“m”查看帮助信息,如图4-24所示。
图4-24 输入“m”即可获取帮助信息
Command (m for help) : m ;输入“m”就会显示fdisk支持的各个命令
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition' s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
fdisk虽然有这么多命令,但我们不必去背诵它,需要的时候只要输入“m”就会显示详细的帮助信息。而且,显示出来的命令我们很多时候也不一定用得到,只要知道以下常用的几个含义就可以了:
➢ n——创建一个新分区;
➢ p——显示当前分区情况;
➢ d——删除一个分区;
➢ q——不存盘退出;
➢ w——存盘退出;
➢ c——切换DOS启动标识。
{L-End} 3 创建主分区。
在“Command (m for help) :”提示符下,依次输入以下命令完成主分区的创建,如图4-25所示。
图4-25 新主分区创建成功
Command (m for help) :n ;输入“n”开始创建一个新分区 Command action l logical (5 or over) p primary partition (1-4) p ;输入“p”创建一个主分区 Partition number (1-4): 1 ;主分区号为“1” First cylinder (1-32635, default 1): <回车> ;直接回车,设置开始位置为1 Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-19581, default 19581): +67G ;分区大小为67GB,因为笔者的硬盘总大小为250GB
{L-End} 4 创建扩展分区。
在“Command (m for help) :”提示符下,依次输入以下命令完成扩展分区的创建,如图4-26所示。
图4-26 将所有剩余空间创建为一个扩展分区
Command (m for help) :n ;输入“n”开始创建一个新分区 Command action l logical (5 or over) p primary partition (1-4) ;输入“e”创建一个扩展分区 Partition number (1-4): 2 ;扩展分区号为“1” First cylinder (8148-32635, default 1): <回车> ;直接回车,设置开始位置为8148 Using default value 8148 Last cylinder or +size or +sizeM or +sizeK (8148-32635, default 32635):<回车> ;直接回车,将剩余空间都用来划分为一个扩展分区
e
{L-End} 5 创建逻辑分区。
在“Command (m for help) :”提示符下,依次输入以下命令完成逻辑分区的创建,如图4-27所示。
图4-27 逻辑分区创建完毕
Command (m for help) :n ;输入“n”开始创建一个新分区 Command action l logical (5 or over) p primary partition (1-4) ;输入“l”创建一个逻辑分区 First cylinder (8148-32635, default 1): <回车> ;直接回车,设置开始位置为8148 Using default value 8148 Last cylinder or +size or +sizeM or +sizeK (8148-32635, default 32635):<回车> ;直接回车,将扩展分区中的空间都用来划分为一个逻辑分区
l
{L-End} 6 存盘退出。
至此,所有硬盘分区的创建工作完毕,在“Command (m for help) :”提示符下,输入以下命令存盘退出。
Command (m for help) :w ;输入“w”存盘退出
2.磁盘格式化
正如在Windows下创建分区之后需要格式化分区才能使用一样,Linux下的分区也需要格式化。
(1)硬盘格式化
Linux下的硬盘格式化命令为mke2fs,其语法格式如下:
[root@localhost ~]#mke2fs [-bicLjFm] DeviceName
参数:
➢ -b:指定区块大小,单位为字节,目前支持1024、2048和4096三种规格。
➢ -i:指定每个inode的字节数。
➢ -c:强制进行磁盘检查。
➢ -L:指定卷标。
➢ -j:格式化为ext3文件系统。
➢ -F:强制进行格式化,不管设备是什么类型,或者是否加载。
➢ -m:指定留给管理员保留区块的比例,默认为5%。
【实例】格式化/dev/sdb5为ext3文件系统,并设置卷标为“DATA”。
[root@localhost ~]#mke2fs -j /dev/sdb5
mke2fs 1.39 (29-May-2006)
Filesystem label=DATA
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
24592384 inodes, 49174957 blocks
2458747 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
1501 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Writing inode tables:done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
(2)制作启动盘
Red Hat Enterprise Linux 5中的启动盘制作命令为mkbootdisk,其使用方法如下:
[root@localhost ~]#mkbootdisk --device /dev/fd0 `uname -r`
注意:上述命令中“uname -r”前后的两个符号为“`”,不是单引号,是和“~”一个键位的那个符号。
3.加载分区
Linux下对于分区的加载位置,也并不是完全随意的,还是有些不成文的规矩在约束着我们。比如/home保存着绝大多数用户(root除外)的个人资料和配置,/usr则是Linux系统文件最常见的保存位置,/var则用来保存各种系统变量,而swap分区则是系统交换分区。常见的分区及其功能如表4-2所示。
表4-2 常见分区及功能列表
Red Hat Enterprise Linux 5下在系统启动时分区会被自动加载,其自动加载配置是保存在/etc/fstab文件中的。它的内容大致如下(若想配置分区加载,就需要手工编辑这个文本文件了):
LABEL=/ / ext3 defaults 1 1 LABEL=/backup /backup ext3 defaults 1 2 LABEL=/var /var ext3 defaults 1 2 LABEL=/usr /usr ext3 defaults 1 2 LABEL=/home /home ext3 defaults 1 2 LABEL=/data /data ext3 defaults 1 2 LABEL=/boot /boot ext3 defaults 1 2 Tmpfs /dev/shm tmpfs defaults 0 0 Devpts /dev/pts devpts gid=5, mode=620 0 0 Sysfs /sys sysfs defaults 0 0 Proc /proc proc defaults 0 0 LABEL=SWAP-sda8 swap swap defaults 0 0
4.2.3 使用磁盘管理命令
Red Hat Enterprise Linux 5中还提供了不少命令用于管理和使用硬盘,善用这些工具可以更加有效地使用硬盘。
1.df
df命令主要用来检查文件系统的磁盘空间占用情况。该命令可以让我们清晰地看到硬盘被占用了多大空间,剩余空间有多少等信息。其语法格式如下:
[root@localhost ~]#df [-akitxThv] DeviceName
参数:
➢ -a:显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。
➢ -k:以KB为单位显示。
➢ -i:显示inode节点信息,而不是磁盘块。
➢ -t:显示指定类型文件系统的磁盘空间使用情况。
➢ -x:列出不是某一指定类型文件系统的磁盘空间使用情况(与t参数相反)。
➢ -T:显示文件系统类型。
➢ -h:显示帮助信息。
➢ -v:显示版本信息。
【实例一】显示各个分区的磁盘占用情况。
不带任何参数执行df命令就可以了,如图4-28所示。
图4-28 查看各个分区占用情况的df命令
[root@localhost ~]#df
我们可以看出,df命令的输出共包括6栏,它们代表的含义如下:
➢ 第1栏:代表文件系统对应的设备路径(一般是硬盘上的分区)。
➢ 第2栏:给出分区包含的数据块(以1024字节为单位)的数目。
➢ 第3栏:表示已用数据块数目。
➢ 第4栏:表示可用的数据块数目。不要奇怪第3、4栏块数之和不等于第2栏块数,这是因为在默认配置下每个分区都留了少量空间供系统管理员使用(这样即使遇到普通用户空间已满的情况,管理员仍具备能登录和留有解决问题所需的工作空间)。
➢ 第5栏:Use%表示普通用户空间使用的百分比。即使达到100%,管理员因为保留有空间,仍然可以登录解决问题。
➢ 第6栏:表示文件系统的加载点。
【实例二】查看各个分区的文件系统类型。
带参数“-T”执行df命令即可,如图4-29所示。
图4-29 显示各个分区的文件系统类型
[root@localhost ~]#df -T
带参数“-T”执行df命令,多出来的第2栏会显示每个文件系统的类型是ext2、ext3还是FAT16或FAT32。
【实例三】显示所有采用ext3作为文件系统的分区使用情况。
[root@localhost ~]#df -t ext3
2.du
du命令用于统计指定目录的文件系统占用情况(以1024字节为单位)。其语法格式如下:
[root@localhost ~]#du [-sabkmclx] [Names…]
参数:
➢ -s:对每个Names参数只给出占用的数据块总数。
➢ -a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中每一个目录及其中的各子目录所占用的磁盘块数。
➢ -b:以字节为单位列出磁盘空间使用情况(系统默认以KB为单位)。
➢ -k:以1024字节为单位列出磁盘空间使用情况。
➢ -c:最后再加上一个总计(系统默认设置)。
➢ -l:计算所有的文件大小,对硬链接文件,则计算多次。
➢ -x:跳过在不同文件系统上的目录不予统计。
➢ -m:以MB为单位显示占用容量。
【实例一】查看根目录下各个目录的磁盘空间占用情况,如图4-30所示。
图4-30 统计目录空间占用情况
[root@localhost ~]# du
【实例二】以MB为单位,列出当前目录下所有文件和目录的磁盘空间占用情况,如图4-31所示
图4-31 查看当前路径下的目录和文件磁盘占用情况
[root@localhost ~]#du -am
3.磁盘检查命令fsck、badblocks
对于磁盘这种外部存储设备,当然有出问题的时候,所以,我们最好平时多进行检查,防患于未然。
(1)fsck
fsck是Linux文件系统的完整性检查工具。它的语法格式如下:
[root@localhost ~]# fsck [-sAVRTNP] [-c [fd]][-t fstype] [--] [fsck-options] [filesys ...]
参数:
➢ filesys:设备名称(比如/dev/sda1)或者加载点(比如/usr)。
➢ -t:给定文件系统的形式,若在/etc/fstab中已有定义或kernel本身已支持,则不需要加上此参数。
➢ -s:依序一个一个地执行fsck命令来检查。
➢ -A:对/etc/fstab中所有列出来的分区进行检查。
➢ -C:显示完整的检查进度。
➢ -d:显示e2fsck的debug结果。
➢ -p:同时有-A条件时,同时有多个fsck的检查一起执行。
➢ -R:同时有-A条件时,省略/不检查。
➢ -V:详细显示模式。
➢ -a:如果检查有错,则自动修复。
➢ -r:如果检查有错,则由使用者回答是否修复。
【实例】检查/dev/sdb5是否正常,如图4-32所示。
图4-32 /dev/sdb5正常
[root@localhost ~]#fsck -t ext3 /dev/sdb5
(2)badblocks
该命令常用来检查软件或者硬盘是否有坏道,其语法格式如下:
[root@localhost ~]#badblocks [-csvwnf][-b block-size>]\
[-o output_file][DeviceName][last-block][start-block]
参数:
➢ -b:指定磁盘的区块大小,单位为字节。默认值为1024。
➢ -c:一次检查要测试的区块数。默认值为64。
➢ -n:非破坏性读/写测试。
➢ -o:指定检查结果写入文件。
➢ -s:在检查时显示进度。
➢ -v:显示详细的执行情况。
➢ -w:在检查时执行写入测试。
➢ DeviceName:指定要检查的设备。
➢ last-block:指定磁盘装置的区块总数。
➢ start-block:开始位置。
【实例】按照默认配置检查/dev/sdb5。
[root@localhost ~]#badblocks /dev/sdb5
4.磁盘的连接与卸载
我们都知道,Red Hat Enterprise Linux 5是一种树形的文件结构,要在其下使用磁盘,必须加载到相应位置才能使用。
(1)挂接设备——mount
要在Linux下连接磁盘,使用的命令是mount。其语法格式如下:
[root@localhost ~]#mount [-a] [-t fstype] [-o options] device dir
参数:
➢ -a:按照/etc/fstab文件中指定的内容逐个挂接。
➢ -t:指定文件系统的类型。如果没有指定,mount会自动选择正确的类型。常用的类型有:
● iso9660——光盘或者光盘镜像;
● msdos——FAT16;
● vfat——FAT32;
● smbfs——Windows或者Samba共享文件;
● nfs——UNIX(Linux)文件网络共享。
➢ -o:指定设备或文件的挂接方式。常用的参数有:
● loop:用来把一个文件当成硬盘分区挂接在系统上;
● ro:采用只读方式挂接设备;
● rw:采用读/写方式挂接设备;
● iocharset:指定访问文件系统所用的字符集;
● async, sync:采用同步写入还是异步写入;
● auto, noauto:是否允许该设备以“mount -a”命令全部挂接;
● dev, nodev:是否允许在该分区上创建设备文件;
● suid, sgid:是否允许在该分区上有suid/sgid文件格式;
● exec, noexec:是否允许在该分区上创建可执行的二进制文件;
● user, nouser:该分区是否允许用户挂接。Nouser表示只有root账号才能挂接;
● defaults:默认选项为rw、suid、dev、exec、auto、nouser和async。
➢ device:要挂接的设备。
➢ dir:设备在系统上的挂接点(mount point)。
【实例一】将/dev/sdb5挂接到/mnt/sdb5下,如图4-33所示。
图4-33 /dev/sdb5挂接成功
[root@localhost ~]#mkdir /mnt/sdb5 ;创建挂接点 [root@localhost ~]#mount -t ext3 /dev/sdb5 /mnt/sdb5;开始挂接
【实例二】挂接光盘,如图4-34所示。
图4-34 光盘挂接成功
[root@localhost ~]#mkdir /mnt/cdrom [root@localhost ~]#mount /dev/cdrom /mnt/cdrom mount: block device /dev/cdrom is write-protected, mounting read-only. # 这里没有使用-t iso9660指定这是一个光盘,但是mount会自动检测,并以合适的格式挂接
【实例三】显示系统内所有挂接的文件系统。
[root@localhost ~]#mount
/dev/sda7 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw, gid=5, mode=620)
/dev/sda9 on /backup type ext3 (rw)
/dev/sda6 on /var type ext3 (rw)
/dev/sda5 on /usr type ext3 (rw)
/dev/sda3 on /home type ext3 (rw)
/dev/sda2 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdb5 on /mnt/sdb5 type ext3 (rw)
/dev/hdc on /mnt/cdrom type iso9660 (ro)
# 不带任何参数执行mount命令,则会显示当前挂接的文件系统列表
【实例四】挂接Windows下的C盘(FAT32格式)。
[root@localhost ~]#mkdir /mnt/dosc [root@localhost ~]#mount -t vfat /dev/sda1 /mnt/dosc
(2)卸载设备——umount
要在Linux下卸载设备,使用的命令是umount。其语法格式如下:
[root@localhost ~]# umount [-afhnrvV][-t vfstype>][filesystem]
参数:
➢ -a:卸载/etc/mtab中记录的所有文件系统。
➢ -f:强制卸载。
➢ -h:显示帮助信息。
➢ -n:卸载时不要将信息存入/etc/mtab文件中。
➢ -r:若无法成功卸载,则尝试以只读的方式重新挂接。
➢ -t:仅卸载选项中所指定的文件系统。
➢ -v:执行时显示详细的信息。
➢ -V:显示版本信息。
➢ filesystem:除了直接指定文件系统外,也能够用设备名称或挂接点来指定。
【实例】卸载刚才挂接的光盘。
[root@localhost ~]#umount /dev/cdrom [root@localhost ~]#umount /mnt/cdrom
以上两条命令均可以成功卸载刚才挂接的光盘。
4.2.4 磁盘配额管理问题
在某些公司可能会存在这样的情况:几个用户就占用了绝大多数硬盘资源,而急需要硬盘资源的其他用户则无计可施。Linux为了解决这个问题,实现了硬盘空间配额管理。每个用户只允许消耗指定数量的硬盘空间,不允许超标。
1.磁盘限额的相关知识
在开始为服务器上的用户进行磁盘限额之前,我们还是要对磁盘限额有多一点了解。这样才能真正做到“知其然且知其所以然”,避免出现一些似是而非的错误。
(1)使用磁盘限额的基本条件
要使用磁盘限额,必须满足以下几个基本条件。
➢ 针对分区:磁盘限额是针对某个分区进行的,不能针对某个分区下的具体目录。
➢ 核心支持:要使用磁盘限额,Linux系统核心必须内置了磁盘限额支持。在Red Hat Enterprise Linux 5中,系统核心默认已经支持了磁盘限额,这点不用担心。
➢ root无效:磁盘限额只是针对一般用户进行磁盘空间使用限制,但对于root账户无效,因为其拥有整个系统的数据。
➢ 分区格式:某些分区格式是不支持磁盘限额的,比如FAT16或者FAT32,所以,我们要保证进行磁盘限额的分区是Linux ext2或者Linux ext3格式。
(2)磁盘限额的几个基本概念
要使用磁盘限额,还必须掌握以下3个基本概念。
① 硬限制(hard limit)
硬限制是指每个用户或用户组不得超出的磁盘使用限额。尽管硬盘驱动器在存储空间以外运行,操作系统也会阻止用户或用户组超过此硬限制限额。通常情况下,系统管理员会将硬限制限额设得稍大一些,这样,用户或用户组在删除引起配额限制目录超出其软限额的文件前,就有缓冲空间来保存文件。比如,在删除文件拷贝前对文件进行复制、修改与测试。
② 软限制(soft limit)
软限制是指每个用户或用户组在日常运行中应该被限制的磁盘使用限额。在硬限制的限定下,用户可暂时超过软限制。但一段时间后,如果用户目录没有遵守软限制限额标准,则系统会禁止此用户账号,执行软限制。要重新激活账号,则要由系统管理员来执行。
③ 宽限时间(grace period)
宽限时间设置决定某人使存储应用遵守软限制限额所用的时间。例如,软限制第一次超出后,7天的设置让用户有7天的时间来使限额配置目录中的磁盘使用额重新降低到软限制额以下,否则账号即被禁止。在大多数系统中,7天为默认的宽限时间。当然,系统管理员也可以把宽限时间设得长一些或短一些。
2.磁盘限额相关命令
在开始进行磁盘限额之前,我们还必须了解需要用到的一些命令,如设置磁盘配额的edquota、setquota命令和查询磁盘配额的quota、quotacheck、quotastats、warnquota、repquota等命令。
(1)edquota
edquota是用来进行磁盘限额的最常用配置程序,它会打开编辑器vi让我们对用户或者群组的磁盘限额进行设置。其语法格式如下:
[root@localhost ~]#edquota [-p protoname][-ug] [-t]
参数说明:
➢ -u:设置用户磁盘限额,这是默认参数。
➢ -g:设置群组磁盘限额。
➢ -p:套用指定用户或者群组的磁盘限额配置。
➢ -t:设置宽限期限。
(2)setquota
setquota则是通过命令行对用户或者群组的磁盘限额进行配置。其语法格式如下:
[root@localhost ~]#setquota [ -u — -g ] filesystem-name block-soft block-hard inode-soft \ inode-hard name... [root@localhost ~]#setquota [ -u — -g ] filesystem-name -p model-name name... [root@localhost ~]#setquota -p [ -u — -g ] filesystem-name block-time-limit \ inode-time-limit
参数说明:
➢ -u:设置用户磁盘限额,这是默认参数。
➢ -g:设置群组磁盘限额。
➢ -p:套用指定用户或者群组的磁盘限额配置。
➢ -t:设置宽限期限。
(3)quota
quota常用来查询磁盘空间的限制和已经使用的空间。其语法格式如下:
[root@localhost ~]#quota [-quvV][GroupName...] [root@localhost ~]#quota [-gqvV][GroupName...]
参数:
➢ -g:显示群组的磁盘空间限制。
➢ -q:简明列表显示超过限制的部分。
➢ -u:显示用户的磁盘空间限制。
➢ -v:显示用户或群组在所有挂接系统上存储设备的空间限制。
➢ -V:显示版本信息。
(4)quotacheck
quotacheck会扫描所有挂接到系统上的分区,并在各分区的文件系统根目录下产生quota.user和quota.group文件,设置用户和群组的磁盘空间限额。其语法格式如下:
[root@localhost ~]#quotacheck [-adgRuv][filesystem...]
参数:
➢ -a:扫描在/etc/mtab文件里加入quota设置的分区。
➢ -d:详细显示命令执行过程。
➢ -g:扫描磁盘空间时,计算每个群组识别码所占用的目录和文件数目。
➢ -R:排除根目录所在的分区。
➢ -u:扫描磁盘空间时,计算每个用户识别码所占用的目录和文件数目。
➢ -v:显示命令执行过程。
(5)quotastats
该命令显示与磁盘配额有关的统计信息。其语法格式如下:
[root@localhost ~]# quotastats
(6)warnquota
该命令的用途是为超过限额的用户发送邮件。它会在后台自动运行,我们不用对其进行多余的干涉。
(7)repquota
repquota命令用于报告磁盘空间配额的状况,明确显示每位用户或每个群组已使用多少空间。其语法格式如下:
[root@localhost ~]#repquota [-aguv][filesystem...]
参数:
➢ -a:列出在/etc/mtab文件里加入quota设置分区的使用状况,包括用户和群组。
➢ -g:列出所有群组的磁盘空间限制。
➢ -u:列出所有用户的磁盘空间限制。
➢ -v:显示该用户或群组的所有空间限制。
(8)quotaon
quotaon命令主要用于打开磁盘配额限制。其语法格式如下:
[root@localhost ~]#quotaon -avug [Filesystem]
参数:
➢ -v:显示详细信息。
➢ -a:打开/etc/fstab中有quota设置的所有分区的磁盘限额。
➢ -u:启用用户磁盘限额。
➢ -g:启用群组磁盘限额。
(9)quotaoff
quotaon命令主要用于关闭磁盘配额限制。其语法格式如下:
[root@localhost ~]#quotaoff -avug [Filesystem]
参数:
➢ -v:显示详细信息。
➢ -a:关闭/etc/fstab中有quota设置的所有分区的磁盘限额。
➢ -u:关闭用户磁盘限额。
➢ -g:关闭群组磁盘限额。
【实例】为/home目录设置磁盘限额。
1 执行以下命令打开磁盘限额功能。
[root@localhost ~]#quotaon -avug
打开/etc/fstab中定义了磁盘限额的所有分区的磁盘限额。
{L-End} 2 重新加载/home目录。
[root@localhost ~]#mount -o remount, usrquota, grpquota /home
需要注意的是,这种加载方法只对本地启动有效,下次启动系统时,还需要重新加载。建议大家在/etc/fstab中直接修改(在原来的defaults选项后面添加字符“, usrquota, grpquota”,如图4-35所示)。
图4-35 让Linux启动时即自动对某分区实行磁盘限额
{L-End} 3 执行以下命令检查/home磁盘配额设置,建立当前磁盘使用表,并与记录在文件系统磁盘配额文件中的信息进行对比。如果检测到不一致,则马上更新配额文件。
[root@localhost ~]#quotacheck -cmug /home
{L-End} 4 使用setquota命令进行磁盘限额配置。
[root@localhost ~]#setquota fayero 2000000400000010002000 /home
参数:
➢ fayero:用户名。
➢ 2000000:空间大小的软限额,以block为单位(1node=1024字节)。
➢ 4000000:空间大小的硬限额,以block为单位(1node=1024字节)。
➢ 1000:文件数量的软限额。
➢ 2000:文件个数的硬限额。
4.3 文件系统管理
文件系统是操作系统用于明确磁盘或者分区中文件的方法和数据结构。不同的文件系统格式称做文件系统类型,这些格式决定了数据是如何被存储为文件和目录的。
4.3.1 常见的文件系统
在硬盘被分区之后,我们还是不能直接使用它。就像Windows下的硬盘分区必须格式化为FAT、FAT32或者NTFS文件系统一样,Linux下也需要进行如此操作,只不过它支持的文件系统是Linux ext2、ext3而已。
1.文件属性——inode
其实,Linux下不管是ext2还是ext3文件系统,都是采用inode(节点)来保存文件属性的,所以在开始介绍Linux的文件系统之前,简单了解一下Linux的inode。
在inode中记录了关于这个文件的一些相关信息,比如文件的所有者、文件的权限设置、文件的大小、文件的时间戳及文件真正内容保存的位置等。
另外,在内存中的inode还维护着一个关于自己的使用计数。每当一个inode所代表的文件被打开一次时,这个inode就把关于自己的使用计数加一;每当这个inode所代表的文件被关闭时,这个inode就把关于自己的使用计数减一。当用户程序删除一个文件时,相关的系统调用很快就返回到这个用户程序,告诉它相应的文件已经被删除了。但是相应的inode还是保留在系统中,inode首先要检查自己的使用计数,如果使用计数为零,那么系统核心才会真正去删除这个文件;如果使用计数大于零,即还有其他的用户程序在访问这个文件,那么系统核心需要等待这些用户程序一个个都完成对这个文件的访问才行。也就是说,要等到这个inode的使用计数为零,才能真正去删除这个文件。
2.Linux的ext2文件系统
Linux ext2是Linux上最早采用的文件系统类型。它来自于Andrew Tanenbaum所写的Minix操作系统,得益于它簇快取层的优良设计,Linux ext2存取文件的性能极好,对于中小型的文件更具有优势。
3.Linux ext3
Linux ext3则是在Linux ext2的基础上加上日志功能的增强版。日志型文件系统的优点在于它会将整个磁盘的写入操作完整记录在硬盘的某个区域中,这样需要时就可以回溯跟踪。所以,当系统文件因为各种故障损坏时,日志型文件系统可以最大限度地保证数据的完整性。
4.Linux swap
Linux swap是Linux中专门用于交换分区的文件系统,它使用这个分区作为内存页面交换空间,不容易产生碎片,因此比Windows的页面文件效率要好。
4.3.2 文件类型
Windows下有RAR压缩文件、WMV影音文件、APE音乐文件,Linux下也是如此。Linux下的压缩文件就有ZIP、TGZ、TBZ、BZ2等格式;系统文件也有CONF(配置文件)、LOCK(锁定标识文件)和RPM文件(Red Hat的软件包);编程和脚本语言就更多了,比如CPP、O、PL、PY、SO和SH等。
4.3.3 文件压缩与归档
为了将一组文件存储成一个文件以便快速备份或者传输到另外一个位置,我们需要将文件打包(也就是通常所说的归档);为了占用更少的空间,还需要对这个归档文件进行压缩。
小提示
归档文件不一定是压缩文件,但压缩文件基本上都是归档文件。
Red Hat Enterprise Linux 5内置了一个图形界面的“归档管理器”,它可以归档、压缩、解压缩文件和目录。可以直接执行“应用程序”→“归档管理器”命令打开“归档管理器”,如图4-36所示。
图4-36 Red Hat Enterprise Linux 5内置的“归档管理器”
在这个图形界面中,只需要用鼠标就可以完成文件或者目录的归档、压缩、解压缩操作。不过,也许有朋友更倾向于通过命令行来完成,以下就是常见的Linux压缩、解压缩命令。
1.compress
compress是一个相当古老的UNIX文件压缩命令,压缩后的文件名会加上一个.z后缀(压缩文件能够以uncompress解压)。若要将数个文件压缩成一个压缩文件,则必须先将文件打包起来再压缩。由于gzip能够产生更理想的压缩比例而且操作方便,现在一般用户都已改用gzip作为压缩工具。compress语法格式如下:
[root@localhost ~]#compress [-dfvcV] [-b maxbits] [file ...]
参数:
➢ -d:解压缩。
➢ -f:强制写入。如果文件存在,则会被覆盖。
➢ -v:将程序执行信息显示到屏幕上。
➢ -c:将压缩的数据显示到屏幕上。
➢ -b:设定字串数的上限。
➢ -V:显示帮助信息。
2.gzip/zcat
gzip是由GNU开发的,用来取代compress的新一代压缩工具。它压缩出来的文件名后缀为.gz,其语法格式如下:
[root@localhost ~]#gzip [-acdfhlLnNqrtvV][-#] [--best/fast][File or Folder...] [root@localhost ~]#zcat FileName.gz
参数:
➢ -a:使用ASCII文字模式。
➢ -c:把压缩后的文件输出到标准输出设备,不去更动原始文件。
➢ -d:解压缩文件。
➢ -f:强行压缩文件。不理会文件名或硬连接是否存在,以及该文件是否为符号连接。
➢ -h:在线帮助。
➢ -l:列出压缩文件的相关信息。
➢ -L:显示版本与版权信息。
➢ -n:压缩文件时,不保存原来的文件名称及时间戳记。
➢ -N:压缩文件时,保存原来的文件名称及时间戳记。
➢ -q:不显示警告信息。
➢ -r:递归处理,将指定目录下的所有文件及子目录一并处理。
➢ -t:测试压缩文件是否正确无误。
➢ -v:显示命令执行过程。
➢ -V:显示版本信息。
➢ -# :压缩效率,是一个介于1~9的数值,数值越大,压缩效率越好,预设值为6。
➢ --best:此参数的效果和指定“-9”参数相同。
➢ --fast:此参数的效果和指定“-1”参数相同。
【实例一】用gzip压缩/etc/fstab。
[root@localhost ~]#cp /etc/fstab /tmp ; gzip压缩时会删除原文件,所以最好复制到 ;其他地方再压缩 [root@localhost ~]#cd /tmp [root@localhost ~]#gzip fstab
【实例二】显示实例一压缩包中的fstab。
[root@localhost ~]#zcat /tmp/fstab.gz
# 解压缩后的内容会在屏幕上显示出来。我们可以通过重定向语句将它生成一个文件
【实例三】解压缩fstab.gz。
[root@localhost ~]#gzip -d fstab.gz
3.bzip2/bzcat/bunzip2
与gzip相比,bzip2的压缩效率更高,所以现在也有越来越多的人开始采用这种以.bz2为后缀的压缩文件。与它对应的解压缩软件则有bzcat和bunzip2等。
(1)bzip2
bzip2的语法格式如下:
[root@localhost ~]# bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][Files]
参数:
➢ -c:将压缩与解压缩的结果送到标准输出设备(一般就是屏幕上)。
➢ -d:解压缩。
➢ -f:bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数。
➢ -h:显示帮助信息。
➢ -k:bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数。
➢ -s:降低程序执行时内存的使用量。
➢ -t:测试.bz2压缩文件的完整性。
➢ -v:压缩或解压缩文件时,显示详细的信息。
➢ -z:强制执行压缩。
➢ -V:显示版本信息。
➢ --repetitive-best:若文件中有重复出现的资料时,可利用此参数提高压缩效果。
➢ --repetitive-fast:若文件中有重复出现的资料时,可利用此参数加快执行速度。
➢ -#:压缩时的区块大小。数值为1~9,数值越大,效果越好。
【实例一】将/tmp下的fstab压缩。
[root@localhost ~]#bzip2 /tmp/fstab
# 源文件会被删除,只留下一个fstab.bz2文件
【实例二】将/tmp下的fstab压缩,但不要删除原来的文件。
[root@localhost ~]#bzip2 /tmp/fstab -k
(2)bzcat
将bz2压缩包中的内容显示到屏幕上。其语法格式如下:
[root@localhost ~]#bzcat [Files]
【实例】显示上文压缩的fstab.bz2文件内容,如图4-37所示。
图4-37 bzcat常用来查看bz2压缩包的内容
[root@localhost ~]#bzcat /tmp/fstab.bz2
(3)bunzip2
bunzip2则是与bzip2对应的.bz2文件解压缩工具,它的语法格式如下:
[root@localhost ~]# bunzip2 [-fkvsVL] [Files]
参数:
➢ -f:解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数。
➢ -k:解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数。
➢ -v:显示详细的信息。
➢ -s:降低程序执行时内存的使用量。
➢ -V:显示版本信息。
➢ -L:同-V参数。
【实例】解压缩刚才生成的/tmp/fstab.bz2,如果存在输出文件,则覆盖它。
[root@localhost ~]#bunzip2 /tmp/fstab.bz2-f
(4)bzip2recover
用于从bzip2文件中恢复文件,当bzip2压缩包损坏时,该命令可以恢复部分甚至全部文件。其语法格式如下:
[root@localhost ~]#bzip2recover File
4.tar
tar可以将文件或者目录打包到一起,与gzip和bzip2结合,它还可以将这些包压缩成gz或者bz2格式。其命令行语法如下:
[root@localhost ~]#tar [-cxtzjvfpPN][--exclude FILE] FILES
参数:
➢ -c:打包(create的意思)。
➢ -x:解包。
➢ -t:查看tar文件里的内容。
注意
在使用的参数中,c/x/t仅能存在一个,不可同时存在。
➢ -z:用gzip压缩。
➢ -j:用bzip2压缩。
➢ -v:压缩的过程中显示文件列表。
➢ -f:文件名。该参数必须是最后一个参数,后面接文件名。
➢ -p:保留原文件属性。
➢ -P:使用绝对路径。
➢ -N:压缩指定日期(yyyy/mm/dd)以后的文件。
➢ --exclude FILE:不处理FILE(指定的文件)。
【实例一】将/home/clinuxer下的所有文件打包,保存到/tmp/clinuxer.tar中。
[root@localhost ~]#tar -cvf /tmp/clinuxer.tar /home/clinuxer
【实例二】将/home/clinuxer下的所有文件打包,保存到/tmp/clinuxer.tar.gz中。
[root@localhost ~]#tar -zcvf /tmp/clinuxer.tar /home/clinuxer;用gzip格式压缩打包 [root@localhost ~]#tar -jcvf /tmp/clinuxer.tar /home/clinuxer;用bzip2格式压缩打包
【实例三】查看/tmp/clinuxer.tar.gz中的文件内容。
[root@localhost ~]#tar -ztvf /tmp/clinuxer.tar.gz
【实例四】将/tmp/clinuxer.tar.gz包解压缩到/home/clinuxer下。
[root@localhost ~]#cd / [root@localhost ~]#tar -zxvf /tmp/clinuxer.tar.gz ;压缩时已经包括路径,现 ;在只需要将它释放到根目录下即可
4.3.4 文件链接
Linux下的文件链接其实就是给文件另外起一个名字,而新名字的文件,我们可以授予它新的访问权限,以完成信息的共享安全控制。另外,链接不但可以针对文件,也可以针对目录,这样给目录创建一个链接,就可以利用该链接快速访问该目录而不用输入一长串的路径了。
Linux下创建链接的命令是ln,它可以创建软链接(Symbolic Link)和硬链接(Hard link),在默认情况下创建的是硬链接。其语法格式如下:
[root@localhost ~]#ln [Options] source dist
参数:
➢ -b:将在链接时会被覆写或删除的文件先备份。
➢ -f:链接时先将与dist同名的文件删除。
➢ -d:允许管理员硬链接自己的目录。
➢ -i:在删除与dist同名的文件时先进行询问。
➢ -n:在进行软链接时,将dist视为一般的文件。
➢ -s:创建软链接(Symbolic Link)。
➢ -v:在创建链接之前显示文件名。
➢ -S:将备份的文件都加上指定的字尾。
➢ -V:指定备份的方式。
➢ --help:显示帮助信息。
➢ --version:显示版本信息。
1.硬链接
硬链接是指通过索引节点来进行的链接。硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”功能。只有当最后一个链接被删除后,文件的数据块及目录的链接才会被释放,也就是说,文件才会被真正删除。所有的硬链接必须位于同一分区中。
小知识
在Linux文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。它存在的目的是作为存取文件的索引。在Linux中,存在多个文件名指向同一索引节点的情况。
2.软链接
软链接是Linux下与硬链接对应的一种链接方式,它类似于Windows下的快捷方式。软链接可以位于其他分区中。
【实例】创建一个软链接和一个硬链接,看看它们的区别。
[root@localhost ~]#touch file ;建立一个新的空文件file [root@localhost ~]#ln file hfile ;创建一个file的硬链接hfile [root@localhost ~]#ln -s file sfile ;创建一个file的软链接sfile [root@localhost ~]#ls -lia total 28 295028 drwxr-xr-x 2 root root 4096 Oct 19 01:51 . 294913 drwxr-x---23 root root 4096 Oct 19 01:50 .. 295164-rw-r--r-- 2 root root 0 Oct 19 01:50 file 295164-rw-r--r-- 2 root root 0 Oct 19 01:50 hfile 295172 lrwxrwxrwx 1 root root 4 Oct 19 01:51 sfile -> file # 可以看出,创建了两个文件,其中sfile是软链接,它的文件属性第一列是“l” # 而hfile虽然从文件属性看不出来是链接,但它的inode值与file一样,都是 # 295164,所以是一个硬链接 [root@localhost ~]#rm sfile [root@localhost ~]#ls -lia total 24 295028 drwxr-xr-x 2 root root 4096 Oct 19 01:51 . 294913 drwxr-x---23 root root 4096 Oct 19 01:50 .. 295164-rw-r--r-- 2 root root 0 Oct 19 01:50 file 295164-rw-r--r-- 2 root root 0 Oct 19 01:50 hfile # 如果删除sfile,对file、hfile完全没有影响 [root@localhost ~]#ln -s file sfile [root@localhost ~]#rm hfile [root@localhost ~]#ls -lia total 24 295028 drwxr-xr-x 2 root root 4096 Oct 19 01:51 . 294913 drwxr-x---23 root root 4096 Oct 19 01:50 .. 295164-rw-r--r-- 2 root root 0 Oct 19 01:50 file 295172 lrwxrwxrwx 1 root root 4 Oct 19 01:51 sfile -> file # 删除hfile,也对file、sfile没有影响 [root@localhost ~]#ln file hfile [root@localhost ~]#rm file [root@localhost ~]#ls -lia total 24 295028 drwxr-xr-x 2 root root 4096 Oct 19 01:51 . 294913 drwxr-x---23 root root 4096 Oct 19 01:50 .. 295164-rw-r--r-- 2 root root 0 Oct 19 01:50 hfile 295172 lrwxrwxrwx 1 root root 4 Oct 19 01:51 sfile -> file # 删除file,对hfile没有影响,但是sfile失效(文件会显示红色) [root@localhost ~]#rm hfile #删除file、hfile,那么创建的文件被删除
4.3.5 文件系统的安装
Linux下的硬盘分区、软盘、光驱必须安装到它的目录树下,才能被用户访问。而安装这些设备需要执行的命令,就是必须要以root账号执行的mount命令。
1.安装Windows分区
对于使用Windows、Linux双系统的用户,自然免不了要在Linux和Windows之间共享一些资源。此时,最好的做法是在Linux下安装Windows分区,再进行资源的共享。
【实例】安装Windows下的FAT32分区。
[root@localhost ~]#mkdir /mnt/Win_C [root@localhost ~]#mount -t vfat /dev/sda1 /mnt/Win_C # 将Windows下的C盘安装好之后,在Linux下访问/mnt/Win_C # 就相当于访问Windows的C盘。
以后,我们还可以使用umount命令来下载所安装的文件系统,比如:
[root@localhost ~]#umount /mnt/Win_C
2.安装光驱
在Linux下安装光驱的命令如下:
[root@localhost ~]#mkdir /mnt/cdrom [root@localhost ~]#mount -t cd9660 /dev/cdrom /mnt/cdrom
要取出光盘,首先必须保证/mnt/cdrom没有被使用,然后执行“umount /mnt/cdrom”命令使光驱和Linux目录脱离,才可以打开光驱取出光盘。
3.使用fstab安装文件系统
使用mount命令虽然可以让我们随时加载文件系统,但如果需要经常使用它们,最好是在系统启动时就自动安装,以免除每次重复安装之苦。需要进行的操作也很简单,只要告诉Linux需要安装哪个文件系统、安装到哪个目录并说明安装参数即可,这项工作可以通过编辑/etc/fstab文件来实现。比如,要在系统启动时自动安装Windows下的C盘,则只需要在fstab中添加如下语句即可。
#Device MountPoint FStype Options Dump Pass# /dev/sda1 /mnt/Win_C vfat defaults 0 0
这个文件的第1列为设备文件名字;第2列为文件系统的安装位置;第3列为文件系统的类型(vfat就是FAT32, cd9660是光驱);第4列为安装选项(rw表示该文件系统能进行读写操作,ro表示该文件系统是只读的,sw用于交换分区,noauto表示启动时并不立即安装这个文件系统,而是由管理员在以后手工安装,defaults表示采用默认选项安装);第5列和第6列的数字是系统程序dump和fsck使用的标志,通常不需要改变,这个标志对根文件系统都是1,而对其他类型的文件系统为0。
注意
由于fstab文件非常重要,如果这个文件有错误,就有可能造成系统不能正常启动,因此向fstab中添加数据应非常小心。不是必须安装的文件系统就不应该进行自动装载,例如,上面将光驱对应的行参数应设置为noauto,表示这个文件系统不是启动时自动装载的系统。
4.4 进程管理
Linux是一个多任务的操作系统,系统上同时运行着多个进程。接下来详细介绍进程管理概念和相关操作。
4.4.1 进程及作业
大家都知道,程序是为了完成某种任务而设计的软件;而进程就是运行中的程序。而且,一个运行中的程序,可能有多个进程,比如最出名的Web服务器Apache,它的程序名为httpd,但为了更好地服务众多的用户,可能创建多个进程来完成,如图4-38所示。
图4-38 Apache服务开启了多个进程以方便服务多个用户
什么叫做作业呢?作业就是一个正在执行的进程,而且作业可以包括多个进程。比如,“cat/etc/passwd — grep user — more”这个作业就包括了3个进程。
4.4.2 进程控制
Linux下提供了丰富的进程管理工具,比如ps、kill、pgrep、top等,不但可以用来查看进程运行装备,而且可以进行完善的控制。
1.进程监视——ps
ps是用来显示当前系统进程列表的小工具。它有丰富的运行参数,语法格式如下:
[root@localhost ~]#ps [-lujfaxr]
参数:
➢ -l:长格式输出。
➢ -u:按用户名和启动时间的顺序来显示进程。
➢ -j:用任务格式来显示进程。
➢ -f:用树形格式来显示进程。
➢ -a:显示所有用户的所有进程(包括其他用户)。
➢ -x:显示无控制终端的进程。
➢ -r:显示运行中的进程。
➢ ww:避免详细参数被截断。
需要注意的是,ps的输出列表可能很长,所以我们要加参数来执行,具体操作请看如下几个例子。
【实例一】分页查看当前系统进程列表,如图4-39所示。
图4-39 ps可以查看当前运行的所有进程
[root@localhost ~]# ps aux —more ;分页查看当前系统进程列表
;需要退出时,请按下Q键
【实例二】查看httpd进程是否在运行(Apache服务是否被启动了)。
[root@localhost ~]# ps aux — grep httpd;查看httpd进程是否在运行
2.终止进程——kill、killall、pkill、xkill
Linux下一般可以通过kill、killall、pkill和xkill命令来终止进程。
(1)kill
Linux下常用kill命令来终止一个进程。它的命令行语法如下:
[root@localhost ~]#kill [ -s signal — -p ] [ -a ] [--] PID ... [root@localhost ~]#kill -l [ signal ]
参数:
➢ -s:指定发送的信号。
➢ -p:模拟发送信号。
➢ -l:指定信号的名称列表。
➢ PID:要终止进程的ID号。
➢ signal:信号。
【实例】用kill命令终止vsftpd进程。
用kill命令来终止进程需要用到进程ID,而进程ID又需要结合ps命令来获取,所以要终止vsftpd进程,不能一步到位,必须分步完成。
1 执行以下命令查询vsftdp进程的PID。
[root@localhost ~]#ps aux —grep vsftpd
root 29835 0.0 0.2 4600 488 ? Ss 15:14 0:00 /usr/sbin/vsftpd /etc/
vsftpd/vsftpd.conf
{L-End} 2 可以看出vsftpd的进程ID为29835,接下来只需要执行以下命令就可以终止进程了。
[root@localhost ~]#kill 29835
小提示
对于不能终止的僵尸进程来说,可以用“kill -9”来强制终止,比如“kill -929835”。
(2)killall/pkill
其实,要终止知道名字的进程,我们有更直观的方法——使用killall和pkill命令。其语法格式如下:
[root@localhost ~]#killall 进程名 [root@localhost ~]#pkill 正在运行的进程名
【实例】终止运行中的vsftpd进程。
操作起来很简单,直接使用以下命令即可终止:
[root@localhost ~]#killall vsftpd [root@localhost ~]#pkill vsftpd
(3)xkill
至于xkill,则是图形界面下最好用的进程终止工具,执行xkill,然后用显示出来的骷髅图标点击需要关掉的窗口,相应的进程即被关闭,如图4-40所示。若不想关闭任何窗口,单击下鼠标右键就退出xkill了。
图4-40 在终端窗口打开xkill
3.进程控制——top
和ps相比,top是一个动态的进程监视工具,而且提供了交互式操作,可以直接终止进程。
top的命令格式如下,如图4-41所示。
图4-41 可以动态监视系统进程的top
[root@localhost ~]#top [-bcdinpqsS]
参数:
➢ -b:以批量模式运行,但不能接收命令行输入。
➢ -c:显示命令行,而不仅仅是命令名。
➢ -d N:显示两次刷新时间的间隔,比如-d 5,表示两次刷新间隔为5秒。
➢ -i:禁止显示空闲进程或僵尸进程。
➢ -n NUM:显示更新次数,然后退出。比如-n 5,表示top更新5次数据就退出。
➢ -p PID:仅监视指定进程的ID; PID是一个数值。
➢ -q:不经任何延时就刷新。
➢ -s:安全模式运行,禁用一些交互命令。
➢ -S:累积模式,输出每个进程总的CPU时间,包括已终止的子进程。
在top监视窗口,还可以按下特定按键来改变显示方式,终止某个进程。具体按键键位介绍如下:
➢ Space:立即更新。
➢ c:切换到命令名显示,或显示整个命令(包括参数)。
➢ f, F:增加显示字段,或删除显示字段。
➢ h, ? :显示有关安全模式及累积模式的帮助信息。
➢ k:提示输入要终止的进程ID,目的是用来终止该进程(默认信号为15)。
➢ i:禁止空闲进程和僵尸进程。
➢ l:切换是否显示负载平均值和正常运行的时间等信息。
➢ m:切换到内存信息,并以内存占用大小排序。
➢ n:提示显示的进程数,比如输入3,就在整屏上显示3个进程。
➢ o, O:改变显示字段的顺序。
➢ r:把renice应用到一个进程,提示输入PID和renice的值。
➢ s:改变两次刷新时间间隔,以秒为单位。
➢ t:切换到显示进程和CPU状态的信息。
➢ A:按进程生命顺序进行排序,最新进程显示在最前。
➢ M:按内存占用大小排序,由大到小。
➢ N:以进程ID大小排序,由大到小。
➢ P:按CPU占用情况排序,由大到小。
➢ S:切换到累积时间模式。
➢ T:按时间/累积时间对任务排序。
➢ W:把当前的配置写到~/.toprc中。
小提示
如果你更喜欢使用图形化界面,则可以试试GNOME系统监视器。要从桌面上启动它,执行“系统”→“管理”→“系统监视器”或者在控制台键入“gnome-system-monitor”,然后选择“进程”标签,如图4-42所示。
图4-42 图形界面的系统监视器
4.进程优先级控制——nice、renice
在Linux操作系统中,进程之间是竞争资源(比如CPU和内存的占用)关系。这个竞争优劣是通过一个数值来实现的,也就是谦让度。高谦让度表示进程优先级别最低。负值或0表示高优先级,对其他进程不谦让,也就是拥有优先占用系统资源的权利。谦让度的值从-20到19,默认值为10。
nice命令可以用来调整程序的谦让度,它的语法格式如下:
[root@localhost ~]# nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help]\ [--version] [command [arg...]]
参数:
➢ -n adjustment:将原有谦让度增加adjustment。
➢ --help:显示帮助信息。
➢ --version:显示版本信息。
【实例一】以谦让度+5的方式运行gaim程序。
[root@localhost ~]# nice -n 5 gaim
renice命令则用来修改正在运行中的程序(进程)的优先级,它的语法格式如下:
[root@localhost ~]#renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]
参数:
➢ -p pid:重新指定进程优先级。
➢ -g pgrp:重新指定进程群组(Process Group)的优先级。
➢ -u user:重新指定某用户进程的优先级别。
【实例二】指定进程PID为2853程序的谦让度为15。
[root@localhost ~]#renice 152853
4.4.3 作业控制
作业控制(Job Control)是指我们在单一终端界面下,同时管理多个作业的操作。比如,我们平时要进行vi编辑、查看进程、编译程序这些不同的工作,就要打开多个终端窗口,每个窗口里执行一个操作。如果明白了作业控制,那就完全可以在一个终端窗口下同时进行这些操作。
1.将命令放到后台执行——&
在开始真正将程序放到后台执行之前,我们还有必要了解一下什么是“前台作业”,什么是“后台作业”。
➢ 前台作业:可以直接控制的作业称为“前台作业”。比如用vi编辑文本。
➢ 后台作业:在内存中自动运行的作业,用户无法直接控制。
要同时运行多个作业,就必须将某些可以自动运行的作业放到后台,这样我们就可以继续需要用户控制和接收输入的前台作业了。如何将作业放到后台运行呢?最简单的方法就是用“&”命令。比如,我们在进行编译Linux核心的操作时,但又不想呆呆地看着屏幕等待,就可以这样做:
[root@localhost ~]#make menuconfig [root@localhost ~]#make clean
当执行完这两步时,就要开始编译核心的操作了,而这个过程会自动完成,不需要我们干涉,所以可以将它放在后台。
[root@localhost ~]#make bzImage &
[1] 29853 ;工作编号、PID
[root@localhost ~]# ;可以在这里继续输入命令,进行其他的操作
2.将当前作业“暂停”到后台——按“Ctrl+Z”键
想象一下,我们正在用vi编辑文档,却发现一个单词不认识,需要用其他的词典软件来查询一下。难道就必须关闭vi,查完单词后再打开vi?不用这么麻烦,暂时把vi存放到后台吧。
[root@localhost ~]#vi .bash_profile
;按“Ctrl+Z”键将它放到后台
[1]+ Stopped vi .bash_profile ; [1]表示第一个作业,+表示是后台默认的作业
;Stopped表示该作业处于暂停状态,用“Ctrl+Z”键放入后
;台的程序都是停止状态
[root@localhost ~]# ;在这里可以打开词典程序查询单词了
3.观察当前后台作业状态——jobs
放入后台的作业,都可以通过jobs程序查询。它的语法格式如下:
[root@localhost ~]#jobs [-lnprs]
参数:
➢ -l:不但列出作业号,还列出PID。
➢ -p:显示选定作业的进程组引导符的进程标识。
➢ -n:显示从最后一次通知后停止或退出的作业。
➢ -r:仅仅显示在后台运行的进程。
➢ -s:仅仅列出在后台暂停的进程。
【实例】查看当前后台作业及其PID信息,如图4-43所示。
图4-43 显示后台作业及其进程
[root@localhost ~]#jobs -l
4.将后台作业拿回来——fg
既然我们将作业放到了后台,那肯定需要在合适的时候将它们拿回来。该用什么命令呢?用fg命令,它的语法格式如下:
[root@localhost ~]#fg [job number]
【实例】将刚才放入后台的vi .bash_profile进程拿回来。
1 先用jobs命令查看后台作业。
[root@localhost ~]# jobs [2]- Stopped top [3]+ Stopped vi .bash_profile #可以看出vi命令的作业号是3
{L-End} 2 执行fg命令将vi命令放回前台。
[root@localhost ~]#fg 3 ; fg命令后带后台作业编号就将它放回了前台
5.让进程在后台运行——bg
我们现在知道,按“Ctrl+Z”键可以将当前作业“暂停”到后台,用“&”将进程放在后台运行,但如何让某个正在后台暂停的进程在后台运行呢?使用bg命令,它的语法格式如下:
[root@localhost ~]# bg [job number]
【实例】将top命令放在后台运行。
[root@localhost ~]#make bZimage [1]+ Stopped bZimage ;按下“Ctrl+Z”键将它暂停到后台 [root@localhost ~]#jobs [1]+ Stopped make bZimage ;在后台处于暂停状态 [root@localhost ~]#bg 1 [1]+ make bZimage & ;在后台处于运行状态了
4.5 系统安全管理
虽然Linux比Windows安全已经是不少安全专家的共识,但对于Windows用户来说,Linux管理方法、操作与Windows还是有很大差别的,要保证Linux系统安全、可靠将会面临不小的挑战。
4.5.1 口令安全
用户名和口令是Red Hat Enterprise Linux用来识别用户身份的最主要方法,这也是为什么说口令在保护用户、计算机和网络时起着最重要的作用的原因。
Red Hat Enterprise Linux 5为了保证用户账号安全,默认安装会启用MD5加密和影子密码,前者可以提供高达56位的加密,后者则把用户密码从/etc/passwd中剥离出来,而是放在一个只有root用户才能访问的shadow文件中,这从一定程度上提升了系统安全。所以,强烈建议,不要禁用shadow密码和MD5加密。
不过,即使shadow密码和MD5加密再安全,但如果你设置的密码过于简单,黑客轻易地就猜测出来,那么这种安全设施就成了漏网之鱼。
1.密码设置六不要
在为用户设置密码或者保存密码时,为了保证密码的安全,以下6种密码设置、保存方式绝对不可取。
➢ 不要用单独的单词或者数字作为密码。比如sexy、linux、china、2008都是很不可取的密码。
➢ 不要用单词和数字的简单组合作为密码。比如sexy1、china5等。
➢ 不要拿个人信息作为密码。比如用户名、用户宠物名、用户家庭成员名字、出生年月、电话号码都要慎用。
➢ 不要用反写的单词作为密码,不少黑客软件可以轻松破解这种密码。
➢ 永远不要把自己的密码写在纸上。
➢ 不要在所有的计算机上都使用同样的密码。
2.推荐这样设置密码
➢ 密码长度最少设置为8位以上。我们要时刻记住,密码越长越安全。
➢ 密码最好用英文大小写和数字混合。
➢ 密码最好包含非字母、数字字符,这样可以加大密码的破解难度。
➢ 自己容易记住的密码才是最好的密码。
3.“用户管理者”加强密码安全性
Red Hat Enterprise Linux 5内置了一个图形界面的“用户管理者”,它不但可以用来创建、修改、删除用户和群组,经过适当设置,还可以大大加强用户账号安全。
可以通过“系统”→“管理”→“用户和群组”来打开“用户管理者”,然后选中一个用户,单击工具栏中的“属性”→“口令信息”,勾选“启用口令过期”,再选择一个需要更换密码的天数,让用户定期更换密码无疑更安全,如图4-44所示。
图4-44 用户定期更换密码更安全
4.5.2 文件和目录许可
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问及操作。
1.文件和目录的访问权限
文件和目录的访问权限包括只读、读/写和可执行3种。只读权限只允许读其内容,但禁止对其进行任何更改操作;可执行权限表示允许将该文件作为一个程序执行。
Linux下对于任一文件或者目录的访问权限都有3组,分别是拥有者访问权限、与拥有者同组用户的访问权限和其他用户访问权限。比如,执行以下命令格式化显示当前目录下文件的所有权限,如图4-45所示。
图4-45 Linux下的文件和目录安全依靠权限设置
[root@localhost ~]#ls -lih
total 724K
18710568 drwxr-xr-x 2 root root 4.0K May 22 15:24 Desktop
18710721-rw-r--r-- 2 root root 348K May 22 15:23 hl_ss.png
18710537 lrwxrwxrwx 1 root root 6 May 23 09:05 sl_ss.png->ss.png
18710721-rw-r--r-- 2 root root 348K May 22 15:23 ss.png
每行的第2栏为文件或者目录的权限设置位,其中第1位指定文件类型,一般文件为“-”,目录为“d”,软链接文件为“l”;后面每3位一组,分别表示拥有者、同组用户和其他用户访问权限。其中,r代表可以读,w代表可以写,而x则代表可以被执行。
2.授权用户访问
知道了Linux下的文件和目录安全是依靠权限设置来保证的,我们就可以利用系统自带的chmod命令来为不同的用户授权。
chmod命令格式如下:
chmod [-cfvR] [--help] [--version] MODE file
参数:
➢ MODE:设定权限字符串,格式为[ugoa]+[rwxX]。其中前面部分用来指定用户,即U—拥有者,g—拥有者的群组,o—其他用户,a—所有用户;后面部分用来设定权限,即r—读取,w—可写,x—可以执行或者可访问(目录),或者目录已经被设置为可执行。两个部分以“+”号、“-”号或者“=”号连接起来(“+”号表示赋予该种权限,“-”号表示取消某种权限、“=”号表示以后面的权限代替以前的权限设置)。
➢ -c:表示设置成功才显示提示信息。
➢ -f:不显示提示信息。
➢ -v:显示提示信息。
➢ -R:不但对当前目录进行设置,还对当前目录下的所有子目录进行同样的操作。
➢ --help:显示帮助信息。
➢ --version:显示版本信息。
【实例一】将文件vi设置为所有人可以读取。
[root@localhost ~]#chmod a+r vi
【实例二】将vi设置为只有拥有者才可以执行。
[root@localhost ~]#chmod u+x, g-x, o-x vi
上面的权限设置语句“chmod u+x, g-x, o-x vi”书写起来比较复杂,Linux开发者为了方便大家操作,允许我们以数字进行权限的划分,其中r=4、w=2、x=1,这样,若想为vi文件赋予拥有者及其群组所有权限,其他用户只有执行权限,则执行以下语句就可以了。
chmod 771 vi
它与“chmod ug=rwx, o=w”等效。
当然,chmod命令只是用来改变目录和文件的访问权限,如果想改变文件和目录的拥有者,则需要借助以下两个命令:
➢ chown——更改某个文件或者目录的所有者。
➢ chgrp——更改某个文件或者目录的用户组。
4.6 内核管理
说到Linux的开发者,大家都认为是Linus Torvalds,其实他只是开发并维护了Linux内核。不过,根据Linux官方的解释,这个内核就是Linux,其他的只不过是对它的功能扩充、延展而已。
4.6.1 内核组成
现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络组件构成,Linux也不例外。从Linux内核源代码目录,我们就可以对它的内核组成有所了解,如图4-46所示。
图4-46 Linux内核目录结构
➢ arch:该目录下包括了和体系结构相关的核心代码。每一个子目录代表一种支持的体系结构,比如x86代表Intel CPU兼容体系结构。
➢ mm:包括了独立于CPU体系结构的内存管理代码。与体系结构密切相关的内存管理代码位于arch/*/mm目录下。
➢ kernel:核心代码,用于实现大多数Linux系统的内核函数。
➢ drivers:驱动程序代码。
4.6.2 内核定制
Linux这个现代的操作系统,采用了模块化设计,并且开放源代码,这就意味着我们可以根据自己的需求定制内核,加载自己所需要的模块,去除不需要的模块,从而增强系统稳定性和提高效率。
4.6.3 使用内核模块工具
为了方便用户对Linux内核的配置、管理和控制,Linux内置了不少内核模块工具。
1.lsmod
显示系统中已经加载的模块名称及其相关信息;另外,还可以通过文本编辑器打开/proc/modules文件,里面会详细列出系统已经加载的模块。
[root@localhost ~]#lsmod
2.modinfo
如果想更详细地查询某个模块的相关信息,就需要用到modinfo这款小工具了,如图4-47所示。
图4-47 查看某个模块的详细信息
[root@localhost ~]#modinfo iptables
3.modprobe
modprobe的最常见用途是加载模块(会自动加载其依赖的相关模块),当然它还列出系统所有模块、移除模块的功能。
[root@localhost ~]#modprobe -l
列出系统中所有的模块。
[root@localhost ~]#modprobe vfat
加载Linux的FAT/FAT32文件系统支持模块。
[root@localhost ~]#modprobe -r vfat
移除Linux的FAT/FAT32文件系统支持模块。
小提示
除了用modprobe可以移除加载模块外,Linux还专门提供了一个模块移除工具rmmod。比如,执行“rmmod vfat”就移除了Linux对于FAT/FAT32文件系统的支持。另外,Linux还内置了一个模块加载工具insmod,只不过它使用起来比较复杂,必须指定模块的绝对路径,比如“insmod /lib/modules/2.6.18-8.el5xen/kernel/fs/vfat/vfat.ko”。
4.6.4 升级内核
Linux是一个开放源代码的操作系统,它的核心代码与发行套件完全独立。所以,如果想保证自己的系统是最新的,除了从发行套件开发商官方网站下载最新的核心二进制代码外,还可以在Linus Torvalds主持的Linux核心开发站点下载最新的核心源代码,自己配置所需要的模块,取消不需要的模块,让Linux更适合自己的软、硬件环境。
Red Hat Enterprise Linux 5的核心版本为2.6.18,但Linux目前的最新稳定版本已经到了2.6.25。大家都知道,新核心不但意味着更稳定、更少的Bug,而且有可能会增加新的功能。
1 登录到http://www.kernel.org/pub/linux/kernel/v2.6/下载Linux最新的核心版本2.6.25.4,文件名为linux-2.6.25.4.tar.gz。
{L-End} 2 执行以下命令将Linux 2.6.25.4源代码释放到/usr/local/src下。
[root@localhost ~]#cd /usr/local/src [root@localhost ~]#tar zxvf /path/to/kernel/linux-2.6.25.4.tar.gz
{L-End} 3 配置Linux核心。Red Hat Enterprise Linux 5提供了3种方法用于配置Linux核心模块:
➢ make config:命令行逐步提示配置;
➢ make menuconfig:字符模式选单配置;
➢ make xconfig:窗口模式配置。
大家可以根据自己的喜好选择。比如,笔者平时最常用的是“make menuconfig”,所以执行以下命令来完成配置,如图4-48所示。
图4-48 在这里配置需要启用的Linux核心模块
[root@localhost ~]#cd linux-2.6.25.4 [root@localhost ~]#make menuconfig
{L-End} 4 清除刚才操作留下的中间文件。
[root@localhost ~]#make clean
{L-End} 5 创建内核可执行文件。
[root@localhost ~]#make bzImage
由于笔者采用的是Intel的CPU,所以生成的内核文件bzImage会保存在arch/x86/boot下。
{L-End} 6 编译模块,并以root账号安装。
[root@localhost ~]#make modules [root@localhost ~]#su Password:xxxx [root@localhost ~]#make modules_install
{L-End} 7 如果把自己的主启动设备编译成了模块(比如SCSI、RAID设备),则需要制作一个初始化的RAMdisk映像(内存虚拟盘映像)。这个内存虚拟盘映像将在系统启动时被加载到内存,并从中读取所需要的驱动程序。
[root@localhost ~]# mkinitrd /boot/initrd-2.6.25.4.img 2.6.25.4
{L-End} 8 为了方便管理,我们最好将启动所需要的文件拷贝到/boot目录下。
$ cp arch/x86/boot/bzImage /boot/bzImage-KERNEL_VERSION $ cp System.map /boot/System.map-KERNEL_VERSION $ ln -s /boot/System.map-KERNEL_VERSION /boot/System.map
{L-End} 9 生成了内核文件之后,我们最好在GRUB的配置文件中为此另外定义一个启动选项,这样当新核心有问题时还可以启动到原来的核心下。
GRUB的配置文件是/etc/grub.conf,不过,它只是一个符号链接文件,真正的文件为/boot/menu.lst,用文本编辑器打开它,内容类似如下;
# Note that you do not have to rerun grub after making changes to this file #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,1)/boot/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (2.6.18-8.e15xen) root (hd0,1) kernel /boot/xen.gz-2.6.18-8.e15 module /boot/xen.gz-2.6.18-8.e15xen ro root=LABEL=/ quiet module /boot/initrd-2.6.18-8.e15xen.img title Windows rootnoverify (hd0,0) chainloader +1
编译以上文件使其包括新的核心信息。注意,要用添加的方式,即将第一个title和第二个title之间的内容复制并粘贴到文件最后,再进行编辑。
title Red Hat Enterprise Linux Server (2.6.25.4) root (hd0,1) kernel /boot/bzImage-2.6.25.4 ro root=LABEL=/ module /boot/initrd-2.6.25.4.img
至此,大功告成,重新启动计算机,就可以看到我们新编译的Linux核心启动选项了,如图4-49所示。
图4-49 新核心安装成功
4.7 软件包管理
Linux下的软件安装不同于Windows下简单的“下一步”,而是涉及命令行工具的使用(现在已经有了媲美Windows下简单易用的软件安装包),初入门用户安装软件会面临一定的困难。现在,我们就来看看Red Hat Enterprise Linux独有的RPM安装包是如何安装软件的。
4.7.1 使用rpm命令
rpm是Red Hat Enterprise Linux 5内置的用来管理Red Hat开发的RPM软件包的命令行小工具,它可以用来查询已经安装的软件包、安装软件、升级软件和卸载软件。
小知识
RPM的全称是Red Hat Package Manager,就是Red Hat的软件包管理工具,因此,通过RPM管理的软件包后缀名也命名为rpm。这种软件包格式目前已经被广泛应用到Fedora、Red Hat、Mandriva、SuSE和YellowDog等Linux发行套件中。
1.安装/升级软件
[root@localhost ~]#rpm -ivh software.rpm ;安装一个软件包 [root@localhost ~]#rpm -uvh software.rpm ;升级一个软件包
需要提醒大家的是,命令行的rpm工具不会自动解决软件依赖问题。如果在安装时遇到依赖问题,请先安装依赖的软件。
2.查询
rpm命令行工具不但可以查询某个软件是否安装,还可以查询安装到的位置。
[root@localhost ~]#rpm -qa ;查询本系统中通过rpm安装的所有软件 [root@localhost ~]#rpm -q gaim ;查询gaim软件是否安装 [root@localhost ~]#rpm -ql gaim ;查询gaim被安装到了哪里
3.卸载
[root@localhost ~]#rpm -e gaim ;删除gaim软件 [root@localhost ~]#rpm -e gaim --nodeps ;忽略依赖性检查删除软件
4.7.2 RPM软件包管理工具
Red Hat Enterprise Linux 5中不但包括命令行的RPM软件包管理软件,还提供了图形界面的“软件包管理者”,可以执行“应用程序”→“添加/删除软件”打开该工具,如图4-50所示。
图4-50 图形界面的RPM软件包管理工具