11.1.3 Linux操作系统
Linux操作系统是UNIX操作系统的一种克隆系统,它诞生于1991年的10月5日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界上使用最多的一种UNIX类操作系统,并且使用人数还在迅猛增长。
1.Linux的结构
Linux操作系统通常被分成内核(Kernel)、Shell和文件系统3个主要部分,如图11-7所示。
图11-7 Linux结构示意图
内核是Linux操作系统的核心,直接控制着计算机的各种资源,能有效地管理硬件设备、内存空间和进程等,使得用户程序不受错综复杂的硬件事件细节的影响。内核程序是Linux中唯一不能由用户任意变化的部分,它大致分成存储管理、进程管理、设备管理和文件系统管理等几部分。进程管理还可以进一步分成低级进程管理和高级进程管理两部分。低级进程管理主要包括调度进程占用处理机的程序以及进程间的基本通信机构。高级进程管理主要包括进程创建、终止,进程间的通信,进程在内、外存之间的转移,信号机构和进程间的跟踪控制等。核内各部分之间的层次结构不很清晰,从低到髙的大致顺序是中断处理、存储管理、低级进程管理、设备管理、文件系统管理、高级进程管理和系统调用处理程序。Linux内核面向核外程序的界面是各种系统调用。核外程序通过一种特殊的指令(陷入指令)进入内核,它先经由陷入处理程序,然后转入相应系统调用处理程序。
Shell是Linux内核与用户之间的接口,是Linux的命令解释器。目前常见的Shell有Bourne Shell(sh)、Korn Shell(ksh)、C Shell(csh)和Boume-again Shell(bash)。
文件系统是指对存储在存储设备(如硬盘)中的文件所进行的组织管理,通常是按照目录层次的方式进行组织。每个目录可以包括多个子目录以及文件,系统以/为根目录。常见的目录有/etc(常用于存放系统配置及管理文件)、/dev(常用于存放外围设备文件)和/usr(常用于存放与用户相关的文件)等。
2.Linux文件系统
Linux ext2/ext3文件系统使用索引节点来记录文件信息,类似于Windows的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。Linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。
默认情况下,Linux使用的文件系统为Ext2,Ext2文件系统的确高效稳定。但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了,其中系统默认使用的Ext2文件系统是非日志文件系统。这在关键行业的应用是一个致命的弱点。
Ext3文件系统是直接从Ext2文件系统发展而来,目前Ext3文件系统已经非常稳定可靠。它完全兼容Ext2文件系统。用户可以平滑地过渡到一个日志功能健全的文件系统中来。这实际上了也是Ext3日志文件系统初始设计的初衷。
3.Linux文件和目录结构
UNIX操作系统是最早实现层次文件系统的操作系统之一,按这种方式组织的文件系统的表示方法在UNIX操作系统出现的时候被认为是一种革命。现在,大多数操作系统,包括微软所有的Windows类操作系统、Linux、NetWare,甚至AppleMacintosh的MacOS,使用的都是层次文件系统。
图11-8 Linux文件系统层次
图11-8所示的是一个典型的Linux文件系统层次。
·/:根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。
·/bin、/usr/bin:可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
·/boot:放置Linux系统启动时用到的一些文件。/boot/vmlinuz为Linux的内核文件,/boot/grub。建议单独分区,分区大小100M即可。
·/dev:存放Linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备。
·/etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。
·/home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,“~”表示当前用户的家目录,“~test”表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据
·/lib、/usr/lib、/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。
·/lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于/disk中,此目录下就会自动产生目录/disk/lost+found。
·/mnt、/media:光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。
·/proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间。
·/root:系统管理员root的家目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
·/sbin、/usr/sbin、/usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能“查看”而不能设置和使用。
·/tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
·/usr:应用程序存放目录,/usr/bin存放应用程序,/usr/share存放共享数据,/usr/lib存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local存放软件升级包。/usr/share/doc系统说明文件存放目录。/usr/share/man程序说明文件存放目录。
·/var:放置系统执行过程中经常变化的文件,如/var/log随时更改的日志文件,/var/log/message所有的登录文件存放目录,/var/spool/mail邮件存放的目录,/var/run程序或服务启动后,其PID存放在该目录下。
4.LinuxShell常用命令
(1)pwd命令
1)语法
pwd [--help] [--version]
2)说明
显示工作目录。
(2)cd命令
1)语法
cd[dirName]
2)说明
变换工作目录至dirName。其中dirName表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的home directory(也就是刚执行login命令时所在的目录)。
另外,“~”也表示为homedirectory的意思,“.”则是表示目前所在的目录,“..”则表示目前目录位置的上一层目录。
3)示例
跳到/usr/bin/: cd/usr/bin
跳到自己的home directory: cd~
跳到目前目录的上上两层: cd../..
返回进入当前目录前所在目录: cd–
(3)ls命令
1)语法
ls[-alrtAFR][name...]
2)说明
显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
3)参数
·-a:显示所有文件及目录(ls内定将文件名或目录名称开头为“.”的视为隐藏文件,不会列出)。
·-l:除文件名称外,亦将文件类型、权限、拥有者、文件大小等信息详细列出。
·-r:将文件以相反次序显示(原定依英文字母次序)。
·-t:将文件依建立时间之先后次序列出。
·-A:同-a,但不列出“.”(目前目录)及“..”(父目录)。
·-F:在列出的文件名称后加一符号;例如可执行文件则加“*”,目录则加“/”。
·-R:若目录下有文件,则以下之文件也都依序列出。
4)示例
·列出目前工作目录下所有名称是s开头的文件,越新的越排在后面:
ls-ltrs*
·将/bin目录以下所有目录及文件详细资料列出:
ls-lR/bin
·列出目前工作目录下所有文件及目录;目录于名称后加“/”,可执行文件于名称后加“*”:
ls-AF
(4)mkdir命令
1)语法
mkdir[-p]dirName
2)说明
建立名称为dirName之子目录。
3)参数
-p确保目录名称存在,不存在的就建一个。
4)示例
·在工作目录下,建立一个名为AAA的子目录:
mkdir AAA
·在工作目录下的BBB目录中,建立一个名为Test的子目录。若BBB目录原本不存在,则建立一个:mkdir-p BBB/Test
(5)rmdir
1)语法
rmdir[-p]dirName
2)说明
删除空的目录。
3)参数
-p是当子目录被删除后使它也成为空目录的话,则顺便一并删除。
4)示例
·将工作目录下,名为AAA的子目录删除:
rmdir AAA
·在工作目录下的BBB目录中,删除名为Test的子目录。若将Test删除后,BBB目录成为空目录,则BBB亦予删除:
rmdir-pBBB/Test
(6)cat
1)语法
cat[-AbeEnstTuv][--help][--version]fileName
2)说明
把文件串连接后传到基本输出(屏幕或加>fileName到另一个文件)
3)参数
·-n或--number:由1开始对所有输出的行数编号。
·-b或--number-nonblank:和-n相似,只不过对于空白行不编号。
·-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
4)示例
·把textfile1的文件内容加上行号后输入textfile2这个文件里:
cat-ntextfile1>textfile2
把textfile1和textfile2的文件内容加上行号(空白行不加)之后将内容附加到textfile3里:
cat-btextfile1textfile2>>textfile3
(7)more
1)语法
more[fileNames…]
2)说明
类似于命令cat,不过会一页一页地显示以便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按b键就会往回(back)一页显示,而且还有搜寻字串的功能(与vi相似),使用中的说明文件,请按h键。
(8)mv
1)语法
mv[options]sourcedest或mv[options]source…directory
2)说明
将一个文件更名,或将数个文件移至另一目录。
3)参数
-i若目的地已有同名文件,则先询问是否覆盖旧文件。
4)示例
·将文件aaa更名为bbb:
mv aaa bbb
·将所有的C语言程序移至Finished子目录中:
mv-i*.cFinished
(9)cp
1)语法
cp[options]source dest或cp[options]source...directory
2)说明
将一个文件复制到另一个文件,或将数个文件复制到另一目录。
3)参数
·-a:尽可能将文件状态、权限等信息都照原状予以复制。
·-r:若source中含有目录名,则将目录下的文件亦皆依序复制到目的地。
·-f:若目的地已经有相同名的文件存在,则在复制前先予以删除再行复制。
4)示例
·将文件aaa复制(已存在),并命名为bbb:
cp aaa bbb
·将所有的C语言程序复制至Finished子目录中:
cp*.cFinished
(10)chmod
1)语法
chmod[-cfvR][--help][--version]mode file...
2)说明
Linux/UNIX的文件调用权限分为文件拥有者、群组、其他3级。利用chmod可以控制文件如何被他人所调用。
3)参数
·mode:权限设定字串,格式为[ugoa...][[+-=][rwxX]...][,...],其中,u表示该文件或目录的拥有者,g表示与该文件或目录拥有者属于同一个群体(group)者,o表示其他以外的人,a表示这三者皆是。
·+表示增加权限,表示取消权限,=表示唯一设定权限。
·r表示可读取,w表示可写入,x表示可执行,X表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
·-c:若该文件权限确实已经更改,才显示其更改动作。
·-f:若该文件权限无法被更改也不要显示错误信息。
·-v:显示权限变更的详细资料。
·-R:对目前目录下的所有文件与子目录进行相同的权限变更。
·--help:显示辅助说明。
·--version:显示版本。
4)示例
·将文件file1.txt设为所有人皆可读取:
chmod ugo+r file1.txt
·将文件file1.txt设为所有人皆可读取:
chmod a+r file1.txt
·将文件file1.txt与file2.txt设为该文件拥有者、与其所属同一个群体者可写入,但其他以外的人则不可写入:
chmod ug+w,o-wfile1.txtfile2.txt
·将ex1.py设定为只有该文件拥有者可以执行:
chmod u+xex1.py
·将目前目录下的所有文件与子目录皆设为任何人可读取:
chmod-Ra+r*
此外,chmod也可以用数字来表示权,语法为chmod abc file,其中a、b、c各为一个数字,分别表示User、Group及Other的权限,r=4,w=2,x=1。若要rwx属性,则4+2+1=7;若要rw属性,则4+2=6;若要r-x属性,则4+1=7。如chmod a=rwxfile和chmod777file效果相同。chmod ug=rwx,o=xfile和chmod 771 file效果相同。
(11)chown
1)语法
chmod[-cfhvR][--help][--version]user[:group]file...
2)说明
Linux/UNIX是多人多工操作系统,所有的文件或目录皆有拥有者。利用chown可以将文件的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的文件或目录拥有者,也没有权限可以自己的文件或目录拥有者改设为别人。
3)参数
·User:新的文件或目录拥有者的使用者。
·Group:新的文件或目录拥有者的使用者群体(group)。
·-c:若该文件拥有者确实已经更改,才显示其更改动作。
·-f:若该文件拥有者无法被更改也不要显示错误信息。
·-v:显示拥有者变更的详细资料。
·-R:对目前目录下的所有文件与子目录进行相同的拥有者变更。
4)示例
·将文件file1.txt的拥有者设为users群体的使用者jessie:
chown jessie:users file1.txt
·将目前目录下的所有文件与子目录的拥有者皆设为users群体的使用lamport:
chmod-R lamport:users*
(12)mkfs
1)语法
mkfs[-V][-tfstype]device[blocks]
2)说明
建立linux文件系统在特定的分区上。
3)参数
·device:预备检查的硬盘partition,例如:/dev/sda1。
·-V:详细显示模式。
·-t:给定文件系统的类型,Linux的预设值为ext2。
·-c:在制作文件系统前,检查该partition是否有坏道。
·block:给定block的大小。
4)示例
在/dev/hda5上建一个msdos的文件系统,同时检查是否有坏道存在,并且将过程详细列出来:
mkfs-V-tmsdos-c/dev/hda5
(13)mount命令
1)语法
mount [-t类型]存储设备 挂载点目录
mount -o loop ISO镜像文件 挂载点目录
2)说明
挂载文件系统、ISO镜像到指定文件夹。
3)参数
·-t:指定文件系统的类型,通常不必指定。mount会自动选择正确的文件类型。
·-oro:用只读模式挂上。
·-orw:用可读写模式挂上。
·-oloop:使用loop模式用来将一个文件当成硬盘分割挂上系统。
4)示例
·将/dev/hda1挂在/mnt之下:
mount/dev/hda1/mnt
·将/dev/hda1用只读模式挂在/mnt之下:
mount -o ro/dev/hda1/mnt
·将/tmp/image.iso这个光盘的image使用loop模式挂在/mnt/cdrom之下。
mount -o loop/tmp/image.iso/mnt/cdrom
(14)umount命令
1)语法
umount存储设备位置
umount挂载点目录
2)说明
卸载已挂载的文件系统。
3)示例
卸载/dev/hda1在/mnt目录下的挂载:
umount/mnt或umunt/dev/hda1
(15)用户管理命令(见表11-2)
表11-2 用户管理命令
示例
·建立用户账号:adduserst01。
·设置用户口令:passwdst01。
·锁定用户账号禁止登录:usermod-Lst01。
·删除用户账号:userdel-rst01。
(16)用户组管理命令(见表11-3)
表11-3 用户组管理命令
示例
·添加用户组:groupadd class1。
·在建立用户时指定用户组:adduser-g class 1 st03。
·更改用户的组账号:usermod-g class1 st01。
·删除用户组:groupdel class1。