linux study

更新时间:2024-01-13 06:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Linux:

1. Linux的版本分为两类:内核版本和发行版本。

内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,Linux内核的版本号是有一定规则的,即“主版本.次版本号.修正号”;

发行版是由发行商搜索一系列的应用程序打包发售时的编号。一个完整的Linux由“内核程序+系统程序+应用程序”组成。

uname –a 内核:主.次.修正号;lsb_release –a 发行版本;

2. Linux最主要的应用领域是基础服务器应用,如DNS服务器、DHCP服务器、Web服务器、FTP服务器、防火墙等。

具体而言,目前Linux的主要应用领域包括以下几个方面:

1.Linux服务器 是目前Linux应用最多的一个领域,可以提供Web、FTP、Gopher、SMTP/POP3、Proxy/Cache、DNS等服务器,支持服务器集群,支持虚拟主机、虚拟服务、VPN等;

2.嵌入式Linux系统 嵌入式Linux是将流行的Linux操作系统进行剪裁修改,能够在嵌入式计算机系统上运行的一种操作系统。Linux嵌入式系统能够支持多种CPU和硬件平台,性能稳定,剪裁性好,开发和使用容易。其中包括Embedix、uCLinux、muLinux;桌面应用;电子政务;

3. Linux分区规划

?

每台计算机硬盘上最多可以被划分出4个主分区,也可以被划分出3个主分区和一个扩展分区,然后在扩展分区内建立多个逻辑分区,通常逻辑分区没有个数的限制。 ?

在安装Red Hat Linux 9之前,通常对Linux系统的分区做如下的安排:

? /swap:交换分区,用来支持虚拟内存的分区,通常放在单独的分区,其大小为内存容量的1~2倍。 ? /:根分区,它只存放启动系统所需的文件和系统配置文件,应放置在ext3fs主分区中,单独分区。 ? /boot:启动分区,容量小于等于128MB,通常可以单独分区,存放Linux内核和其他与内核有关的文件。 ? /home:用户的宿主目录,通常将其设置在独立的分区中,为以后方便的磁盘定额做准备。

4. RedHat Linux 的启动

RedHat Linux 的启动包括两部分的初始化:内核部分和init部分。内核部分负责系统的硬件检测和初始化,init程序主要完成系统的各项配置。在init程序运行时,其配置文件为系统准备了0~6的运行级别,分别定义了不用的运行模式,常用的是级别3,即多用户文本模式,以及级别5,即多用户图形模式。如果默认的运行级别为3,即基于命令行的文本界面,在系统正常启动后,可以通过init 5命令来转入运行级别5(图形用户界面)。如果默认的运行级别为5,则在系统正常启动后,可通过init 3命令转入运行级别3(文本界面)。

5. 两种不同的登录方式:图形化登录和虚拟控制台登录:可使用init 5和startx命令来启动图形化桌面。 6. 注销和关机:在虚拟控制台下,可以通过exit命令或使用Ctrl+D组合键来实现从虚拟控制台会话中注销。

7. 应用软件的安装:应用程序和附加升级包可以以源代码或二进制程序的方式提供,所以有多种提供软件包的方法,

常用的有rpm和tgz包提供。因此,常用的应用软件的安装方法也有两种:一种是使用rpm工具安装,另一种是编译安装。

rpm命令的使用格式如下:

rpm [选项] [软件包名]

参 数 -i -h -v -U 含 义 安装指定的软件包 使用“#”显示详细的安装过程及进度 显示安装的详细信息 升级指定的软件包 -q -a -V -qf 1.安装软件

查询系统是否已安装指定的软件包 查看系统已安装的所有软件包 查询已安装的软件包的版本信息 查询指定文件所属的软件包 [root@myhost root]# rpm –ivh samba-common-3.0.0-i386.rpm

其中,参数-i指定安装的软件包,包括名称,描述等。-v,详细列表输出信息。-h,显示安装进程。 注意:软件包名为全名。 2.卸载软件

[root@myhost root]# rpm –ef samba-common

其中,参数-e表示卸载软件。-f和-e一起使用表示强制卸载软件包。 注意:在卸载软件包的时候无需完整的软件包名称。 3.升级软件

[root@myhost root]# rpm –Uvh samba-common-3.0.0-i386.rpm 其中,参数-U表示升级软件包。 4.查询特定的软件包

[root@myhost root]# rpm –q samba-common

其中,参数-q表示查询系统当前是否安装了指定的软件包。 5.查看系统所有的软件包

[root@myhost root]# rpm -qa

其中,参数-a表示显示系统已经安装的所有软件包 编译安装应用软件 :

(1)欲编译软件必须获得该软件的源代码包。通常,这些源代码包,都是以.tgz、.tar.gz或.tar.bz2等后缀结束,这些都是.tar的压缩格式,可以分别使用如下的方法解开。

? .tar.gz和.tgz使用如下的命令: [root@myhost root]# tar zxvf bbs2www_2.01.tar.gz

? .tar.bz2使用下面的命令:

[root@myhost root]# tar jxvf bbs2www_2.01.tar.bz2 (归档管理

计算机中的数据经常需要备份,tar是Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。此外,tar命令还可用于压缩和解压缩文件。 1.文件归档

tar用于将文件进行归档,即将一系列的文件归档到一个文件中,需要时也可以将归档的文件解开,归档之后的大小和原来一样。其格式如下: tar [参数] 打包文件名 文件

tar命令很特殊,其参数前面可以使用“-”,也可以不使用。 常用参数及含义如下表所示: 参 数 -c -C 含 义 生成档案文件 切换到指定的目录 -v -f -r -t -z -j -d -x 列出归档解档的详细过程 指定档案文件名称 将文件追加到档案末尾 列出档案中包含的文件 以gzip格式压缩或解压缩档案文件 以bzip2格式压缩或解压缩档案文件 比较档案与当前目录中的文件之间的差异 解开档案文件 使用tar命令将/home目录中的所有文件打包到homebak.tar中。 在终端提示符下执行如下命令,执行结果如右图所示。 [root@myhost root]# cd /home

[root@myhost home]# tar cvf homebak.tar /home

tar xvf homebak.tar

注意:默认情况下tar命令会把档案文中包含的文件恢复到当前工作目录中,也许这不是文件的原始位置,可以使用选项-C指定要恢复到的目录。 2.tar的压缩与解压缩功能

为节省存储空间或减少网络传输时间,许多文件都需要进行压缩,形成了压缩文件,例如test.tar.gz或者test.tgz文件。tar命令也提供了压缩与解压缩的功能

提示:tar命令中的参数-z和-j用于压缩文件,前者为以gzip格式压缩,后者则是以bzip2格式压缩,需要注意的是tar的压缩和解压缩功能必须有归档功能一起使用,即-z参数和-j参数必须-c参数一起使用。

例如,若要将例4.18中的/home目录在归档文件的同时对数据进行压缩以节省磁盘空间,如果使用gzip压缩格式进行压缩,则可使用如下命令:

[root@myhost root]# tar czvf homebak.tar.gz /home 而要解开这个档案文件,可以运行如下命令: [root@myhost root]# tar xzvf homebak.tar.gz

注意:tar档案文件的扩展名一般为.tar,如果使用了gzip压缩格式,则扩展名通常为.tar.gz或者.tgz;如果使用了bzip2压缩格式扩展名则为.tar.bz2。

2)此后获得软件包的源代码,进入bbs2www_2.01目录,然后执行如下的命令: [root@myhost root]# ./configure

(3)configure脚本命令用于生成Makefile文件,大部分应用程序源代码的configure脚本都有参数,我们可以查看帮助来获得相应的参数信息。然后执行下列命令: [root@myhost root]# make

(4)该命令能自动编译所有源代码。在编译完成后,可以执行自动安装程序,安装编译出来的软件版本,从而完成编译安装的过程

[root@myhost root]# make install

注意:大部分源代码在编译后,目标程序的默认安装路径是/usr/local,相应的配置文件位置在/usr/local/etc或/usr/local/***/etc中。

8. 命令行环境:

4种方法进入Linux的文本模式。 1. 直接进入 :

安装时使用的是文本界面,或者在图形界面下安装而选择了从文本模式下登录Linux系统时,启动

计算机后就会直接进入文本模式。如果安装过程中,选择了从图形界面登录系统,那么在启动计算机后,就需要修改/etc/inittab文件,才能使系统从文本模式登录。

打开inittab文件。从中找到“id:5:initdefault:”行,将其修改为“id:3:initdefault:”或者在该行的行首输入“#”(即注释掉该行),然后再输入“id:3:initdefault:”行,保存后退出.

2.使用虚拟控制台进入Linux文本模式

/etc/inittab文件是Linux系统的启动配置文件,在Linux的启动过程中需要从该文件中读取相关的配置选项。而Linux又是一个多用户的操作系统,为了实现允许多个用户同时登录系统的目标,Linux在/etc/inittab文件中定义了多个虚拟控制台,默认是6个(最多允许有256个)。

在图形模式下,用户如果需要在不同的虚拟控制台之间进行切换,可以使用Ctrl+Alt+Fn(n=1,2,…,6)组合键,使用Ctrl+Alt+F7则可以回到图形界面。在文本模式下,则可以使用Alt+Fn(n=1,2,…,6)组合键进行切换。此时,用户可以看到文本模式下的登录提示符“Login:”。

9. 磁盘管理:

1. df [选项] 用于检测文件系统的磁盘空间占用和空余情况

参 数 -a -k -t -T 含 义 显示所有文件系统的磁盘使用情况 以k字节为单位显示 显示各指定文件系统的磁盘空间使用情况 显示文件系统 2.du [选项] 目录或文件名 用于统计目录或文件所占磁盘空间的大小

参 数 含 义 -a 递归显示指定目录中各文件和子目录中文件占用的数据块 -s -b -l 显示指定文件或目录占用的数据块 以字节为单位显示磁盘占用情况 计算所有文件大小,对硬链接文件计算多次 3.mkfs命令

该命令相当于DOS/Windows系统中的格式化命令,用于创建指定的文件系统。使用格式如下: mkfs [选项] 设备文件名 [blocks] 参 数 含 义 -V 详细显示模式 -t <.fs> -c blocks 指定文件系统类型,默认值为 ext2 在创建文件系统的同时,进行磁盘坏块检查 文件系统块的大小 4. mount [选项] 设备文件名 挂接点

umount 设备文件名或挂接点

参 数 含 义 -a 挂接/etc/fstab文件中的所有设备 -L <.label> 加载文件系统标签为

10. 查看进程信息:

1.ps [选项]参 数 -a -u -x -w -r 该命令可以查看进程的详细状况 含 义 显示终端上的所有进程,包括其他用户的进程 显示进程的详细状态 显示没有控制终端的进程 显示加宽,以便显示更多的信息 只显示正在运行的进程 2. top命令该命令用来动态显示运行中的进程。与ps命令类似,都是用来显示当前系统中正在运行的进程。但

是top命令能够在运行后,在指定的时间间隔更新显示信息,可以在使用top命令时加上-d 来指定显示信息更新的时间间隔

在top命令执行后,可以按下按键得到对显示的结果进行排序: ? “M”键:根据内存使用量来排序。 ? “P”键:根据CPU占有率来排序。

? “T”键:根据进程运行时间的长短来排序。 ? “U”键:可以根据后面输入的用户名来筛选进程。 ? “K”键:可以根据后面输入的PID来杀死进程。 ? “q”键:退出。 “h”键:获得帮助。

3. 关机命令

在Linux的文本模式下,可是使用如下的命令进行系统的注销和关机。

1) logout命令

该命令用于系统的注销,直接在命令提示符下键入该命令即可,也可以使用Ctrl+D来实现。

[root@myhost root]# logout

2)halt命令

默认的halt命令可以结束Linux当前所有正在运行的程序,停止所有设备,系统进入等待用户切断电源的状态。在Linu

x系统中绝对禁止在没有进行关机程序而直接切断主机电源。命令格式如下:

halt [选项]

常用参数及含义如下表所示:

参 数 含 义 -d 关闭系统前,不回写缓冲区/var/log/wtmp -f 强制关闭系统 -h 停止所有设备,等待用户关闭系统,默认选项 -i 关闭系统之前,先断开网络设备 -n 在关机前不做将内存资料写回硬盘 -p 关闭系统,同时断开主机电源 -w 回写缓冲区,而不关闭系统 3)poweroff命令

默认情况下,该命令用于回写缓冲区,并关闭系统,同时断开主机电源。命令格式如下:

poweroff [选项]

常用参数及含义如下表所示: 参 数 -d -f -h -i -w 4)init 0命令

命令init 0也可以实现关闭系统,同时断开主机电源,因为在inittab文件中,定义了运行级别0为停机。 5)reboot命令

reboot命令可以用于重新启动Linux系统,格式如下:

reboot [选项]

含 义 关闭系统前,不回写缓冲区/var/log/wtmp 强制关闭系统 停止所有设备,等待用户关闭系统,默认选项 关闭系统之前,先断开网络设备 回写缓冲区,而不关闭系统 常用参数及含义如下表所示。 参 数 含 义 -d 系统重启前,不回写缓冲区/var/log/wtmp -f 强制重启系统 -i 关闭系统之前,先断开网络设备 -w 回写缓冲区,而不重启系统 6)shutdown命令

该命令的功能强于上面给出的halt等命令,它可以实现系统注销,关机和重新启动。命令格式如下:

shutdown [选项]

含 义 设定在几秒钟之后进行关机程序 并不真正关机,只是将警告讯息传送给所有用户 参 数 -t -k -h -c -f 关闭系统,断开主机电源 取消目前已经进行中的关机动作 关机时不进行fcsk 文件系统检查 4. 压缩管理

1)zip和unzip命令

zip格式是广泛使用的压缩格式,被普遍使用在多种操作系统中,在Linux中使用zip压缩工具可以生成.zip格式的压

缩文件。其解压的工具为unzip。zip工具的使用格式如下:

zip [选项] 压缩文件 被压缩文件... 参 数 -b -d -F -L - 指定暂时存放文件的目录 从压缩文件内删除指定的文件 尝试修复已损坏的压缩文件 显示版权信息 压缩效率是一个介于1-9的数值zipnum 含 义 unzip命令的使用格式如下:

unzip [选项] 压缩文件

含 义 解压时,排除特定的文件fname 更新现有的文件fname 参 数 -x -f -Z -l 查看压缩文件的详细信息,而不解压 查看压缩文件中包含的文件信息,而不解压 例3.5 请将tstmod目录下的test开头的所有文件压缩形成test.zip文件,然后复制到/root目录下并解压。执行结

果如图和图所示。

[root@myhost tstmod]# zip -3 test.zip test*

[root@myhost tstmod]# cp test.zip /root/test.zip;cd /root [root@myhost root]# unzip test.zip 2)gzip和gunzip命令

gzip是Linux常用的压缩命令,生成的压缩文件格式是.zip,可以使用gunzip来解压。该压缩格式与zip不同的在于

gzip无法实现对多个文件压缩成一个gzip文件,因此该命令通常与tar命令一起使用。gzip常用的格式如下:

gzip [选项] 被压缩文件

含 义 对文件进行压缩 强行压缩文件 查找指定目录并压缩或解压缩其中所有的文件 检查压缩文件是否完整 参 数 -d -f -r -t gunzip不但可以解压缩.gz格式的压缩文件,也可以解压缩zip、compress等命令压缩的文件。gunzip命令常用的格式

如下:

gunzip [选项] 压缩文件

含 义 参 数 -l 查看压缩文件中包含的文件信息,而不解压 -f -r 强行解压缩文件 查找指定目录并解压缩其中所有的文件 -t 检查压缩文件是否完整 例3.6 压缩/root目录中的所有文件,然后解压缩。

使用gzip命令压缩/root中的文件,然后使用ls命令查看此时目录中的文件信息,如图1所示。然后使用gunzip命令

解压缩,完成后使用ls命令查看目录中的文件信息,如图2所示。

[root@myhost root]# gzip –r *

←压缩当前目录下的所有文件

[root@myhost root]# gunzip –r *

←解压当前目录下的所有后缀为.gz的压缩文件

3)bzip2和bunzip2命令

bzip2是Linux系统中另一个压缩工具,该命令压缩的文件后缀为.bz2,可以使用bunzip2工具来解压,但是bzip2不

能将多个文件压缩成一个文件,因此,bzip2工具通用也与tar工具一起使用,用来打包压缩内核文件和内核的补丁文件,*.tar.bz2。bzip2命令常用的格式如下:

bzip2 [选项] 被压缩的文件

常用参数及含义如下表所示。 参 数 -d -k -r -t -z 含 义 对文件进程压缩 压缩文件,并保留原文件 查找指定目录并压缩或解压缩其中所有的文件 检查压缩文件是否完整 强制进行压缩 bunzip2命令常用的格式如下:

bunzip2 [选项] 需解压文件

常用参数及含义如下表所示。 参 数 含 义 -f 解压缩时强制覆盖现有文件 -k 压缩文件,默认删除原文件,该参数保留原文件 -v 解压缩时,显示详细信息 5.联机帮助命令

在使用最广泛的联机帮助命令是man。man命令主要用于显示任何给定命令的在线帮助。常用的格式如下:

man [选项] 命令名

含 义 参 数 -S

指定man命令的章节列表

-a 显示所有man的帮助页 -f 只显示命令的功能而不显示详细的手册内容 -w 只显示帮助文件的位置 5. 文本编辑器

编辑器是使用计算机的重要工具之一,Linux为了方便各种用户在不同的环境下使用,提供了一系列的编辑器,包括ge

dit、emas和vi等,其中gedit和emacs是X Window下的编辑器,vi 可以运行于命令行模式。目前使用人数最多的就是vi编辑器vi有两种工作模式:命令模式和输入模式。进入vi时默认的模式就是命令模式。在命令模式下,用户所有的输入都被解释成命令,并显示在最下面一行,而不会输入到屏幕的文本输入区域(就是“~”符号所在的区域)。

在Linux操作系统中使用vi编辑器来处理文件的时候,会先将文件复制一份到内存缓冲区(buffer)。Vi对文本文件

的编辑都会首先直接修改缓冲区的内容,再使用w命令后,才将buffer中的内容回写到磁盘文件。

vi也提供撤销功能,对于一个编辑器来说,提供撤销功能是必要的。用户可以在命令模式下输入“:u”后按Enter键,

就可以撤销上一次操作。

在vi中,撤销功能每一次撤销的是自上次存盘到现在输入的内容,因此撤销能够恢复到最原始的状态,但是此时用户

不能使用“:q”命令来退出vi,因为此时用户已经修改了缓冲区的内容。如果确实需要退出vi程序,可以使用在命令模式下“:q!”。

vi的环境设置

在vi编辑器中有很多环境参数可以设置,通过环境参数的设置,可以增加vi的功能。这里仅介绍vi常用的参数,这

些参数可以在vi的命令模式下使用,或在/etc/vim/vimrc中设置,vi启动时就会使用vimrc中的参数来初始化vi程序。

vi程序的常用参数及设置方法如下:

set ai或set autoindent:每一行的开头都与上一行的开头对齐。 set nu或set number:在编辑时显示行号。 set dir=./:将交换文件.swp保存在当前目录。

set sw=4或set shiftwidth=4:设置缩进的字符数为4。 syntax on:开启语法着色。

说明:其中set命令是用来设置这些参数的。

Linux文件系统:

Linux的数据都是由文件系统按照树型目录结构管理的。而且Linux操作系统同样要区分文件的类型,判断文件的存取

属性和可执行属性

“/”目录也称为根目录,位于Linux文件系统目录结构的顶层,必须使用ext文件系统。如果还有其它分区,必须挂

载到“/”目录下某个位置。

常见的Linux系统目录如下:

? ? ? ? ? ? ? ? ? ?

/:Linux系统的根目录,包含Linux系统的所有目录和文件。 /etc:有关系统设备与管理的配置文件。 /sbin:存放系统启动时所需的运行程序。

/bin:该目录中含有常用的命令文件,不能包含子目录。 /boot:操作系统启动时的核心文件。

/usr/local:存放用户后期安装的应用程序文件。 /root:超级用户主目录。

/dev:接口设备文件目录,保存外围设备代号。

/mnt:设备文件的挂接点,默认有/mnt/cdrom和/mnt/floppy两个目录,分别用于挂载光驱和软驱。 /home:用户的宿主目录,通常将其设置在独立的分区。

存储设备 设备文件 IDE1的主盘 /dev/hda IDE1的从盘 /dev/hdb IDE2的主盘 /dev/hdc IDE2的从盘 /dev/hdd IDE1的主盘第一分区 /dev/hda1 IDE1的从盘第一逻辑分区 /dev/hdb5 系统的第一个SCSI硬盘 /dev/sda 软盘驱动器 /dev/fd0 光盘驱动器 ?

/dev/cdrom 管理磁盘分区:

常用的磁盘分区管理工具有fdisk和parted,它们都可以进行创建分区、删除分区、查看分区信息等

基本操作,此外parted还可以调整已有分区的尺寸

以超级用户登录系统,在shell提示符下输入命令启动fdisk:

[root@myhost root]# fdisk /dev/sda

其中,/dev/sda是用户要进行分区的磁盘设备名。进入后可在Command(m for help)后输入命令m以查看该命令的使用

方法,执行结果如图所示。

fdisk工具运行后,可以通过按下相应的命令键查看磁盘状态,并进行分区的删除和建立等操作。 fdisk工具中常用的命令及含义如表所示: 命令键 含 义 a 设置活动分区 d 删除一个分区 l 列出已知的分区类型 m 显示帮助信息 n 建立一个新分区 o 清空分区表 p 列出现有的分区表信息 q 退出fdisk命令且不保存更改 v 校验分区表 w 3)

保持更改并退出 文件系统的建立

现。

要想在分区上存储数据,首先需要建立文件系统。常用的建立文件系统的工具有mkdosfs、mkfs.vfat和mkfs命令来实

mkfs命令

该命令允许根据用户的选择建立相应的文件系统,同mkdosfs、mkfs.vfat等命令类似,但功能更强大。其格式如下:

mkfs [选项] 磁盘设备文件名 [块大小]

常用参数及含义如表所示。 参 数 含 义 -V 输出完整信息 -t fs_type 指定创建的文件系统类型,默认的是ext2 -c 检查磁盘是否存在坏道 -l f_name 从文件f_name中读初始化的坏块表 [root@myhost root]# mkfs –c -V –t ext3 /dev/sda3 该命令,在建立文件系统的同时,还进行了磁盘坏道的检查。

5.文件系统的挂载与卸载

在Windows下,文件系统创建后,就可以通过系统分配的盘符来使用该磁盘。但在Linux系统中,文件系统创建后,还

需将其安装到Linux目录树的某个位置上才能使用,这个过程称为挂载,文件系统所挂载到的目录称为挂载点。文件系统使用完毕,还可对其进行卸载。

mount [选项] [设备文件名] [挂接点] 参 数 -t fs_type -o option 含 义 指定需挂接的磁盘的文件系统类型 用于指明挂载的某些具体选项,常用的option有ro:以只读方式挂载;rw:以读写方式挂载;remount:重新挂载已挂载的文件系统 ? 自动挂载

? 当用户需要系统启动后立即使用某个文件系统或者需要挂载多个文件系统时,可以通过修改/etc/fstab配置文

件实现自动挂载需要使用的文件系统。/etc/fstab文件列出了引导系统需要挂载的文件系统以及文件系统类型和其他挂载参数,系统引导时会读取这个文件并挂载该文件中列出的文件系统。该文件的具体格式如图所示。 ? fstab文件共分为6列:

device dirmount fs_type options fs_dump fs_passno 各项含义如表所示 字 段 device dirmount fs_type options fs_dump 说 明 需要被挂载的设备文件名或标号(label) 文件系统将被挂载到的目录 挂接的磁盘或分区的文件系统类型 挂载选项,传递给mount命令以决定如何挂载 备份频度。1,表示需要进行磁盘备份;0,表示无需进行磁盘备份 由fsck程序决定引导时是否检查磁盘以及检查的次序。0,表示无需进行磁盘检查。1,表示最先检查 fs_passno

umount [选项] 设备文件名或挂接目录 参 数 含 义 卸载已挂接的指定文件系统fs_type的所有文件系统,此时无需指定设备文件名和挂接点 -t fs_type -f 强制卸载指定的设备 卸载所有的文件系统,此时,无需指定设备文件名和挂接点 -a 参 数 -a -c 含 义 显示指定目录下所有子目录与文件,包括隐藏文件 按文件的修改时间排序 注意:umount通常不能卸载正在使用的文件系统。如果必须卸载可以使用-f参数,或重启系统。

6.Linux的文件类型:在Linux系统中,文件的命名必须遵循如下的规则: (1) 文件名最长可以,可由A~Z、a~z、0~9、.、-、_、等符号组成。达到256个字符

(2) 文件名区分大小写。 (3) 文件没有扩展名的概念。

(4) 使用“/”作为根目录和目录层之间的分隔符。 (5) 支持相对路径和绝对路径。

? ?

通常,Linux系统中常用的文件类型有5种:普通文件、目录文件、设备文件、管道文件和链接文件。 使用“ls –lh”查看文件属性:

“-rw-r--r--”用来指明文件类型为普通文件;文件类型与权限为“drwxr-xr-x”,第一个字符为“d”,表示文件是根目录下目录文件

设备文件:Linux系统把每个设备都映射成一个文件,这就是设备文件,它是用于向I/O设备提供连接的一种文件,

分为字符设备和块设备文件。crw-rw-rw-”,第一个字符为c,这表示为字符设备文件;brw-rw----,第一个字符为b,表示为块设备文件。

文件类型与权限的第一个字符为“p”,则代表该文件为管道文件;

链接文件:链接文件有两种,一种是符号链接,也称为软连接,一种是硬链接。符号链接的工作方式类似于Windows系

统中的快捷方式,建立符号链接文件后,如果删除原文件,则符号链接文件将指向一个空文件,符号链接也就失效了。硬链接则不同,它要求链接文件和目标文件在同一个文件系统上(即同一分区),且不允许链接至目录,它是对原文件数据块的直接引用,建立硬链接后即使删除原文件硬链接也会保留原文件的所有信息。文件类型与权限的第一个字符为l,则代表该文件为链接文件。

7. 文件的基本操作:

查看和搜索文件 :是文件操作时用户经常要用到的两个功能 ls [参数] 目录或文件

-F 在列出的文件名后以符号表示文件类型:目录文件后加“/”,可执行文件后加“*”,符号链接文件后加“@”,管道文件后加“|”,socket文件后加“=” 以用户习惯的单位表示文件的大小,K表示千,M表示兆。通常与-l选项搭配使用 以长格式显示文件的详细信息。每行列出的信息依次是:文件类型与权限、链接数、文件属主、文件属组、文件大小、文件建立或修改的时间、文件名。对于符号链接文件,显示的文件名后有“—>”和引用文件路径名;对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。目录中总块数显示在长格式列表的开头,其中包-h -l 含间接块 -r 从后向前地列举目录中的内容 -s 按文件大小排序 -t ? head命令

按文件建立的时间排序,越新修改的越排在前面 该命令用于从文件头部查看文件,默认情况下只能阅读文件的前十行,也可以通过指定一个数字选项来改变要显示的行数

head [参数] 文件名 参 数 含 义 -c num 显示文件的num个字节 -n num 显示文件指定的前num行 -v ? tail命令

先打印文件名,再显示指定文件的内容 使用tail命令可以查看文件结尾内容,默认显示组后十行。这有助于查看日志文件的最后十行来阅读重要的系统消息,还可以使用tail来观察日志文件被更新的过程。该命令使用命令如下: tail [参数] 文件名

常用参数及含义如下表所示。

参 数、 -c num 含 义 查看文件末尾num个字节 -num 指定屏幕显示的行数 -f 自动实时地把打开文件中的消息显示到屏幕上 -n -v ? cat命令

显示文件指定的后n行 先打印文件名,再显示指定文件的内容 cat命令可以用来查看文件内容,也可以用于即合并文件。还可以利用cat命令从键盘读取数据。该命令格式如下: cat [参数] 文件名

常用参数及含义如下表所示: 参 数 -b -E -T -n -s -v 含 义 显示文件中的行号,空行不编号 在文件的每一行行尾加上“$”字符 将文件的Tab键用字符“^I”来显示 在文件的每行前面显示行号 将连续的多个空行用一个空行来显示 显示除Tab和Enter之外的所有字符 cat命令后面可以接多个文件名,依次将其内容显示出来。还可以使用重定向符“>”将多个文件合并输出(重定向符“>”的使用,后面将详细阐述)到另一个文件中。下面这条命令将文件file3的内容追加到file2文件中然后重定向到file4文中,即写入file4中。执行结果如下图所示。 [root@myhost root]# cat file2 file3 > file4

注意:file2、file3必须是已存在的文件,如果file4文件不存在,那么系统将重建file4文件。如果file4是已经存在的文件,那么它本身的内容将被覆盖,其中的内容是file2和file3合并后的内容。 ? more命令

在文件过长无法在一屏上显示时,如果使用cat命令来查看其内容,会出现快速滚屏,使得用户无法看清文件的内容,

此时可以使用more命令。和cat命令类似,more可将文件内容显示在屏幕上,但是它每次只显示一页,按下空格键可以显示下一页,按下q键退出显示,按下h键可以获取帮助。此外,该命令还可以在文件中搜索指定的字符串。其格式如下:

more [参数] 文件名

常用的参数及含义如下表所示。

-d -f -s -p +/string +num

? less命令

在屏幕下方显示提示信息 显示实际行数,即不计算单行过长后的自动换行所得到的行 将连续的多个空行用一个空行来显示 默认以卷屏的方式显示,该参数以满屏的方式显示 在文件中搜索string字符串,然后显示string所在的页 从文件的第num行显示 less命令作用和more命令类似,可用于浏览文本文件的内容。不同的是,less命令允许用户使用光标键反复浏览文本。

另外,less可以不读入整个文本文件,因此在处理大型文件时速度较快。与more命令相比,less命令的功能更加前大。其基本格式如下:

less [参数] 文件名 常用的参数及含义如下表所 参 数 含 义 -i 在查找时忽略大小写 -num 指定单屏显示的行数 -f 强行打开文件 -S 单行过长时,截断超出部分 -p 默认以卷屏的方式显示,该参数以满屏的方式显示 -p string 2. 搜索命令

在文件中搜索string字符串,从该字符串处显示 Linux系统中提供了丰富的工具用于文件的搜索,这些工具既包括了用于根据文件名搜索文件的find、locate等,也包

括根据给定的字符串搜索文件内容的grep工具。

1)grep命令

在指定文件中搜索特定的字符内容,并将含有这些字符内容的行输出其格式如下: grep [参数] 文件名 常用参数和含义如下表所示

参 数 -v -n 含 义 显示不包含匹配文本的所有行 显示匹配行及行号 例4-8 搜索/etc/vsftpd目录下后缀为.conf文件中,其内容中包含“anon”字符串的文本行。 在终端提示符下输入如下命令:

[root@myhost root]# grep anon /etc/vsftpd/*.conf

2)locate命令

该命令用于通过文件名或扩展名搜索文件。locate命令是利用事先在系统中建立系统文件索引资料库的,然后再检查资料库的方式工作的。为了提高locate命令的查出率,在使用该命令前必须拥有最新的资料数据库。可以使用如下的命令更新系统的索引资料数据库: [root@myhost root]# updatedb locate命令的格式如下: locate [参数] 文件名

常用的参数和含义如下表所示。 -u -U

-e 3)find命令

find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。其格式如下:

find [路径] [参数]

常用的参数及含义如下表所示。 参 数 -name -user -atim

[root@myhost root]# find / -name httpd.conf [root@myhost root]# find / -user tom

新建、删除文件和目录:

? 通配符*:可以代表文件名中的任意字符或字符串,但不能与句点打头的文件名匹配。在Linux系统中以句点打

头的文件是隐藏文件。

? 通配符?:可以代表文件名中的任意一个字符。

? 通配符“[”、“]”、和“-”:用于构成字符组。“[”和“]”将字符组括起来,表示可以匹配字符组中的任意一个。

含 义 指定搜索的文件名,输出搜索结果 搜索指定用户搜索所属的文件 搜索在指定的时间内读取过的文件 搜索在指定的时间内修改过的文件 建立资料数据库,从根目录开始 建立资料数据库,从

目录开始 排除目录搜索 “-”用于表示字符范围。例如,[abc]表示匹配a、b、c中的任意一个,[a-f]表示从a到f范围内的的任意一个字符。

? 转义字符\\:如果要使通配符作为普通字符使用,可以在其前面加上转义字符。

? 注意:当“-”处于方括号之外,或“?”和“*”处于方括号内时不使用转义字符就已失去通配符的作用。

3.创建文件

在Linux系统中,可以利用touch命令来创建文件,同时touch还可以修改文件的存取和修改日期。如果touch命令没有指定时间,touch就会将文件的存取时间、修改时间设置为系统的当前时间。该命令的格式如下: touch [参数] 文件名

常用参数及含义如下表所示。 参 数 -a -c -d string -m -r f_name -t time time格式“MMDDYY”即月日年 含 义 仅修改存取时间,具体时间有-t参数指定 如果指定文件不存在,也不生成新文件 根据string设定文件的时间 仅修改最后修改时间 根据f_name文件的时间记录修改指定文件 [root@myhost root]# touch file1 修改时间修改为2008年12月28日。

在命令提示符下执行如下命令,执行结果如下图所示。 [root@myhost root]# touch -m -t “12282008” file1

删除文件

rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下的所以文件及子目录均删除。删除链接文件时,只是断开了链接,原文件保持不变。该命令rm [参数] 文件名 参 数 -i -f -r 含 义 以进行交互式方式执行 强制删除,忽略不存在的文件,无需提示 递归地删除目录下的内容 注意:使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以在rm后使用-i参数以逐个确认要删除的文件。若确认删除,输入y,文件将被删除,否则输入其他任何字符放弃删除。

切换工作目录cd 目录名 (绝对路径,也可以跟相对路径)

可以使用“~”、“.”和“..”作为目录名,其中“~”表示当前用户的主目录,“.”表示当前目录,“..”表示当前目录的上层目录,即父目录。

显示当前路径

使用pwd命令可以显示当前的工作目录,该命令很简单,直接输入pwd即可,后面不带参数。 新建目录:

可使用mkdir命令创建一个新的目录。需要注意的是新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限。该命令格式如下: mkdir [参数] 目录名

常用参数及含义如下表所示。 -m -p 删除目录

删除空目录可以使用rmdir命令,该命令是从一个目录中删除一个或多个子目录项。需要注意的是,一个目录被删除之前必须是空的。删除某一个目录时,必须具有对其父目录的写权限。如果要删除的目录不空,将产生错误提示。该命令的基本使用格式如下: rmdir [-p] 目录 命令中选项含义如下。

参数-p表示递归删除目录,当子目录删除后,其父目录为空时也一同被删除。命令执行完毕后,显示相应信息。 此外,使用rm –r也可删除目录及其下的文件和子目录。 [root@myhost root]# rmdir –p /root/dir1/dir3 [root@myhost root]# rm –r dir2

执行rmdir –p命令递归删除目录时,首先从最里层的子目录进行删除,当dir3删除后,dir1为空目录,所以能够递归

对新建目录设置存取权限 如果欲建立的目录的上层目录尚未建立,则一并建立其上的所有祖先目录 复制、移动和重名文件

复制、移动和重命名文件,是几个较为常用的文件操作 cp [参数] 源文件或目录 目标文件或目录 常用参数及含义如下表所示。

参 数 含 义 该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录 -a -d -f -i 复制时保留链接 删除已经存在的目标文件而不提示 交互式复制,在覆盖目标文件之前将给出提示要求用户确认 此时cp命令除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件-p 中 若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标-r 文件必须为一个目录名 不作复制,只是链接文件 -l 注意:为防止用户在不经意的情况下用cp命令破坏另一个文件,建议用户在使用cp命令复制文件时,最好使用i选项。

移动或重命名文件

用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名。它的用法相当于DOS下的ren和move的组合。该命令格式如下:

mv [参数] 源文件或目录 目标文件或目录 常用参数及含义如下表所示。

参 数 含 义 交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,系统会询问是否重写,要求用户回答以避免误覆盖文件 禁止交互式操作,如有覆盖也不会给出提示

-f

如果mv命令格式为“mv 源文件 目标文件”,且两个文件在同一目录下,则表示将源文件重命名为目标文件; mv命令是移动文件或目录还是重命名文件或目录,视源文件和目标文件的类型而定。

? 如果源文件和目标文件的类型都为文件,且两个文件同在一个目录,则是将源文件重命名为目标文件。 ? 如果源文件为目录,目标文件为不存在的目录,它们同在一个父目录,则是将源目录重命名为目标目录。 ? 如果目标文件为已存在的目录,源文件可以是多个文件或目录,mv命令将指定的源文件或目录均移至目标目

录中。

注意:使用mv命令跨文件系统移动文件时,先复制文件,再将原有文件删除,而链接至该文件的链接也将丢失。

-i 归档管理

计算机中的数据经常需要备份,tar是Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。此外,tar命令还可用于压缩和解压缩文件。tar命令很特殊,其参数前面可以使用“-”,也可以不使用

tar [参数] 打包文件名 文件 参 数 -c -C -v -f -r -t -z -j -d -x

tar cvf homebak.tar /home

[root@myhost home]# tar xvf homebak.tar

注意:默认情况下tar命令会把档案文中包含的文件恢复到当前工作目录中,也许这不是文件的原始位置,可以使用选

含 义 生成档案文件 切换到指定的目录 列出归档解档的详细过程 指定档案文件名称 将文件追加到档案末尾 列出档案中包含的文件 以gzip格式压缩或解压缩档案文件 以bzip2格式压缩或解压缩档案文件 比较档案与当前目录中的文件之间的差异 解开档案文件 项-C指定要恢复到的目录。 tar的压缩与解压缩功能

为节省存储空间或减少网络传输时间,许多文件都需要进行压缩,形成了压缩文件,例如test.tar.gz或者test.tgz文件。tar命令也提供了压缩与解压缩的功能。

提示:tar命令中的参数-z和-j用于压缩文件,前者为以gzip格式压缩,后者则是以bzip2格式压缩,需要注意的是tar的压缩和解压缩功能必须有归档功能一起使用,即-z参数和-j参数必须-c 、-x参数一起使用。 [root@myhost root]# tar czvf homebak.tar.gz /home 而要解开这个档案文件,可以运行如下命令: [root@myhost root]# tar xzvf homebak.tar.gz

注意:tar档案文件的扩展名一般为.tar,如果使用了gzip压缩格式,则扩展名通常为.tar.gz或者.tgz;如果使用了bzip2压缩格式扩展名则为.tar.bz2。

其他的与文件操作相关的命令。

1.clear命令

clear命令用来清除屏幕内容,它不需要任何参数。该命令基本的使用格式如下: clear 2.ln命令

在Linux系统中ln命令用于为某一个文件在另一个位置创建一个链接。

Linux文件系统中,链接可分为两种:硬链接(hard link)与符号链接(symbolic link)。硬链接是指一个文件可以有多个别名,但都表示同一文件实体。符号链接也称软链接,是产生一个特殊的文件,该文件的内容是指向另一个文件(链接目标),它们的关系类似于Windows下的快捷方式。符号链接的绝大部分操作(包括打开、读、写等)都被传递给其链接目标文件,其操作的真正作用在链接目标上,另外一些操作(如删除等)则作用在符号链接本身。硬链接必须存在同一个文件系统中,即磁盘的同一分区中,而软链接却可以跨越不同的文件系统。 目录不能建立硬链接!

ln命令既可以创建硬链接,也可以创建软链接,至于创建的是硬链接还是软链接则由参数决定。其使用格式如下: ln [参数] 源文件 链接文件

参 数 -f -d -i -n -s -v -b 含 义 链接时先将与目标文件同名的文件删除 允许系统管理员创建对目录的硬链接,默认不允许 在删除与目标文件同名的文件时先进行询问 在进行软链接时,将目标文件视为一般的文件 创建软链接,默认创建硬链接 在链接之前显示其文件 在创建链接时将可能被覆盖或删除的文件进行备份 为文件file1建立软连接sl可用如下命令: [root@myhost root]# ln –s file1 sl

为文件file1建立一个硬链接hl可用如下命令: [root@myhost root]# ln file1 hl diff命令

该命令采用逐行比较的方式比较两个文件之间的差异,其使用格式如下: diff [参数] 文件1 文件2 常用参数及含义如下表所示。

-a -b -B -c -q -x name -y -i -w -r -p -s -T -S file --supress-common-lines 将所有文件作为文本文件进行比较 忽略空格的差异,即多个空格当作一个空格处理 忽略空行 显示全部内文,并标出不同之处 只报告两个文件是否相同,不报告细节 不比较该参数中所指定的文件或目录的名称 以并列的方式显示文件的不同的地方 忽略大小写 忽略所有空格 比较时,递归地比较该目录下所有的子目录 若比较的是C程序代码,显示差异所在的函数名称 当两个文件相同时报告 比较时,在每行前面加上tab字符以便对齐 在进行目录比较时,从文件file开始 不显示相同的行 (1) 如果给定的file1和file2都是文件,diff就比较这两个文件的内容。如果其中一个文件的文件名是“-”,diff就从标准输入上读取文本,即从键盘中输入文本。

(2) 如果指定要比较目录,即file1和file2都是目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。 (3) 如果file1和file2中有一个是文件,另一个是目录(假设file1是目录,file2是文件),diff则从file1目录中查找与file2文件同名的文件,然后进行比较。 使用diff比较file2和file4文件。

在命令提示符下执行如下的命令,其执行结果如下图所示。 [root@myhost root]# diff -y file2 file4 cut命令

该命令用于从文件中获取指定位置的字符串,其基本格式如下: cut [参数] 文件 参 数 -c n1,n2 -f m1,m2 -d \ 含 义 获取每一行的第n1到n2个字符 获取每一行的第m1到m2栏的字符 指定栏的分隔符,不指定的话默认用制表符作为分隔符 [root@myhost root]# cut -f 1,3 -d \

提示:在使用-f参数时,默认的分隔符是制表位tab符,此时可以使用-d \来指定栏的分隔符,但是其中的sep_char只能是单个字符,例如,上例指定分隔符为“:”。

文件权限管理:

文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。文件权限与系统的数据安全息息相关。

Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Linux系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。文件权限就是对系统中的不同用户访问同一文件的权限做了不同的规定。这些规定囊括了文件访问控制、文件保密性、文件完整性等方面。

Linux系统中,用户对文件的文件读写权限包括3种,分别是读权限、写权限和可执行权限。 注意:通常,Linux系统只允许文件的属主或超级用户改变文件的读写权限。

chmod [参数] 文件或目录名

说明:该命令的参数部分可以使用符号表达式,也可以使用八进制数充当。当使用字符表达式时,包括三部分,即用户对象、操作符号和读写权限。

(1)用户对象,分为属主用户、属组、其他用户和所有用户,分别以如下的符号表示:

? u:属主,即文件或目录的所有者,拥有对文件最大的读写权限。 ? g:属组,即与文件属组有相同组ID的所有用户。 ? o:表示其他用户,通常只具有浏览权限。 ? a:表示以上所以用户。

(2)操作符号包括添加权限、取消权限和赋予权限操作,分别以如下的符号表示:

? +:添加某个权限。 ? -:取消某个权限。

? =:赋予给定权限并取消其他所有权限(如果有的话)。

(3)读写权限包括可读权限、可写权限和可执行权限,分别以如下的符号表示:

? r:可读权限。如果文件可读,表示用户可以读取该文件的内容;如果目录可读,表示用户可以列出该目录的信

息。

? w:可写权限。如果文件可写,表示用户可以修改该文件的内容,或删除该文件;如果目录可写,表示用户可

以在其中创建新的目录或文件,或删除目录内的文件或子目录。

? x:可执行。对于文件来说,可执行权限表示具有该权限的用户可以运行该程序;对于目录来说,可执行权限表

示具有该权限的用户可以进入该目录。

注意:上述3种读写权限可以任意组合使用。另外,如果用户对某文件仅具有可执行的权限时,也并不能真正被运行,它还必须具有该用户的可读属性。 [root@myhost root]# chmod a-x file1 [root@myhost root]# chmod g+w file1

chmod的参数也可以使用三位八进制数来表示读写权限,这样的数字称为权限数字 [root@myhost root]# chomd 664 file1

改变文件/目录的所有权

文件和目录的所有权是Linux文件安全模型的另一个组成部分。用户可以使用chown命令来修改文件的所有者和归属的组从而限制文件或目录的访问权限。使用chgrp命令也可以改变文件的归属组。只有用户本身或超级用户才能更改文件的所有权限。

chown [参数] 属主[.属组] 文件或目录

参 数 -c -f -h -v -R --help --version 含 义 若文件拥有者确实已经更改,才显示其更改动作 若该档案拥有者无法被更改也不显示错误信息 只对于连结(link)进行变更,而非该link真正指向的文件 显示拥有者变更的信息 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更) 显示辅助说明 显示版本 用户管理:在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系

统资源拥有不同的使用权限。在Red Hat Linux中系统账号可分为两种类型:

(1)用户账号:通常一个操作者拥有一个用户账号,这个操作者可能是一个具体的用户,也可能是应用程序的执行者,比如apache、ftp账号。每个用户都包含一个惟一的识别码,即用户ID(UID,User Identity),以及组识别码,即组ID(GID,Group Identity)。在Linux系统中可以有两种用户账号:管理员root用户和普通用户。

(2)组账号:一组用户账号的集合。通过使用组账号,可以设置一组用户对文件具有相同的权限。管理员以组为单位分配对资源的访问权限,例如读取、写入或执行的权限,从而可以节省日常的维护时间。 用户名称 root bin daemon adm lp sync shutdown halt mail news uucp 用户ID 0 1 2 3 4 5 6 7 8 9 10 组ID 0 1 2 4 7 0 0 0 12 13 14 主目录 /root /bin /sbin /var/adm /var/spool/lpd /sbin /sbin /sbin /var/spool/mail /etc/news /var/spool/uucp 使用的shell /bin/bash /sbin/nologin /sbin/nologin /sbin/nologin /sbin/nologin /bin/sync /sbin/shutdown /sbin/halt /sbin/nologin /sbin/nologin operator 11 0 /root /sbin/nologin su和su –命令不同之处在于,su -切换到对应的用户时会将当前的工作目录自动转换到切换后的用户的主目录。输入后,系统将提示输入相应用户的口令,只有输入的口令正确才能完成身份的转换。如果su命令后没有携带用户名,系统默认从当用户切换到超级用户,并提示用户输入超级用户口令。

1.用户账号信息——/etc/passwd

通常在Linux中的所有账户信息都记录在/etc/passwd中,该文件的存取属性为644,也就是对所有用户可读,但只用root组中的用户才能修改。

在/etc/passwd文件中,每一行都代表一个用户的账号信息,而每个用户的信息都是以“:”来分隔不同的字段记录,其中包含7个字段,见下表。 字段1 字段2 字段3 字段4 字段5 字段6 字段7 用户名 口令 UID GID 账号信息 主目录 登录shell root x 0 0 root /root /bin/bash ? 用户名:是用户登录系统时的登录名,它由root或是具有和root相同权限的管理员指定,每个用户在登陆系统

时都必须使用指定的登录名。

? 口令:即用户的登录系统时使用的密码。通常该字段是一个“x”,表示是一个经过加密处理的口令,加密后的密

码给放置在/etc/shadow文件中,且该文件只能被root组的账号访问。如果该字段显示“*”则表示对应账号停用。 ? UID:每个账号唯一的识别号,最大可谓65535。UID在500之前的账号是提供系统服务使用的,管理员新增的

第一个普通用的UID为500,然后依次是501、502…以此类推。

? 登录shell:用户在登录系统时使用的shell,Red Hat Linux 9默认使用的是/bin/bash,用户可以使用chsh命令

更改自己的登录shell。如果用户只是系统通过该用户账号获取系统的某种服务,而不希望该用户能够登录Linux工作站,可以将此登录shell修改为/bin/false、/bin/true、/dev/null和/sbin/nologin等其中之一。 2. 用户口令文件——/etc/shadow

在Linux系统中通常使用影子口令机制(Shadow Password),用户的身份信息被存放在/etc/passwd文件中,用户的口令信息加密后保存在另一个文件/etc/shadow中,并只设置root账号的可读属性,因而大大提高了系统的安全性能。

1 用户账号名称,如root 用户加密后的口令。如果该字段的值为“!!”和“*”,则表示该用户当前没有密码,也不能登录系统,这些用户通常是标准账号。其他的用户密码都是经过MD5加密后的内容。另外,用户任何时候都不能通过直2 接修改该字段的方法,来更变用户口令 3 由1970年1月1号算起,到最后一次修改密码的时间间隔(以日为单位) 4 密码自上次修改后,要间隔多少天数后才能再次被修改,如果为0则无限制 高系统的安全性。而且其中的密码是采用MD5算法加密的,root账户也无法直接获得口令的内容,但是root账户可以变更用户密码或停用每个账户。 (2)可记录密码变更的时间。

(3)可以设置密码使用的时间,以避免用户的密码变更过于频繁。

(4)可以使用/etc/login.defs文件来设置密码的安全性原则,例如密码的最小长度或密码最短的使用时间等。 用户管理的工作包括建立一个合法的账号、设置和管理用户的口令、修改账号的属性以及在必要时删除账号。虽然在绝

大部分的类UNIX系统中,都支持直接修改/etc/passwd文件来管理账号的信息,但是,如果存在/etc/shadow文件,这种方式便会失效。 setuid和setgid

用户存储用户信息的/etc/passwd文件只有超级用户才能进行修改,而用于存储用户口令的文件/etc/shadow甚至只有超级用户才可以访问。只有在普通用户执行passwd命令的时候,能够读取和修改/etc/passwd和/etc/shadow文件,才能使普通用户修改自己的口令。为了解决在用户修改口令时,文件系统存取权限矛盾,Linux给/usr/sbin/passwd命令设置了setuid属性。

setuid是一种文件的拥有者具备的特殊属性,它使得被设置了setuid位的程序无论被哪个用户启动,都会自动具有文件拥有者的权限,在Linux中典型拥有setuid属性的文件就是/usr/bin/passwd程序,见下图。通常setuid属性只会设置在可执行的文件上,因为尽管理论上可以给不可执行的文件加上setuid属性,但是这样做通常是没有意义的。

文件属性中的s占据的位即为setuid位,“s”代表对应的文件被设置了setuid属性,因为passwd程序的拥有者是超级用户root,因此passwd程序执行的时就自动获取了超级用户的权限,所以无论是哪个用户执行了passwd程序都可以修改系统的口令文件。

要给一个文件加上setuid属性,可以使用如下的命令: chmod u+s <文件名> chmod 4xxx <文件名>

其中,u+s表示给文件的拥有者添加setuid属性,其属性字为4000,xxx代表文件原来的存取属性。

setgid与setuid类似,只是setgid是文件归属的组具备的特殊属性,具有setgid的可执行文件运行时,自动获取文件对应的组权限,因为组权限不像用户权限那样精确,所以使用setgid的程序很少。要给某个文件添加setgid属性,可以命令:

chmod g+s <文件名> 或 chmod 2xxx <文件名>

其中,g+s表示给文件的归属组添加setgid属性,其属性字为2000,xxx代表文件原来的存取属性。

setuid和setgid属性都是对正常的Linux安全机制开的后门,原则上,只有在明确的非用不可的功能中才使用它们。特别是,具有超级用户权限的setuid属性的应用程序经常是系统遭受攻击的目标。因此要千万慎用。 1.添加用户账号

中添加用户账号可以使用adduser或useradd命令,因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样。 useradd命令的使用格式如下: useradd [参数] 新建用户账号 参 数 含 义 或

指定用户登录系统时的主目录,如果不使用该参数,系统自动在/home目-d 录下建立与用户名同名目录为主目录 设置用户登录系统时使用的shell,默认为/bin/bash -s 指定用户所属的组,该组的GID必须是在/etc/group文件中登记过的,即该-g 组已存在。如果不使用该参数,系统自动建立用户同名的组,并将该用户纳入该组 用于指定账号信息字段的内容 -c 指定用户的UID -u 指定账号的有效期限,格式为YYYY-MM-DD -e [root@myhost root]# useradd –d /home/tom –g 500 -c “general user” –s /bin/bash –e 2008-12-1 jack 2.变更用户口令

超级用户可以使用passwd命令为普通用户设置或修改用户口令。用户也可以直接使用该命令来修改自己的口令,而无需在命令后面使用用户名。该命令的常用格式为: passwd [参数] 用户名 常用的参数及含义如表所示。 参 数 -d -l -u 含 义 删除用户口令,此后该用户登录系统是无需口令 临时锁定用户账号,该账号此后无法登录系统,直到解锁 解除账号的锁定 在用户设置口令的时候,通常并不显示内容,并且需要用户输入两次口令以便验证两次输入是否一致。使用--stdin 该参数表示在用户设置口令的时候,显示口令内容,同时只需要用户输入口令一次。 3.查看用户信息 1) whoami命令

该命令用户查看当前系统当前账号的用户名。由于系统管理员通常需要使用多种身份登录系统,例如通常使用普通用户登录系统,然后再以su命令切换到root身份对传统进行管理。这时候就可以使用whoami来查看当前用户的身份。 该命令的使用格式如下: whoami 2) who命令

该命令用于查看当前所有登录系统的用户信息,使用格式如下: who [选项]

常用的参数及含义如下表所示。

只显示运行who命令的用户名、登录终端和登录时间 -m或am I -q或--count 只显示用户的登录账号和登录用户的数量 在登录时间后显示该用户最后一次操作到当前的时间间隔 -u -u或--heading 显示列标题 其中,IDLE字段显示为“.”表示该用户前一秒仍然在操作系统。who命令输出的常用标题及含义如下表所示。 NAME LINE 用户登录时的终端 TIME IDLE PID COMMENT 用户名 登录时间 用户空闲时间 登录进程PID 用户网络地址 3) w命令

该命令也可以查看登录当前系统的用户信息。与who命令相比,w命令的功能更强大,它不但可以显示当前有哪些用户登录到系统,还可以显示这些用户正在进行的操作,并给出更加详细和科学的统计数据。 w命令的格式如下: w [选项] [用户名]

如果w命令携带用户名,则只显示指定用户的信息,否则显示当前所有登录用户的信息。其常用参数和含义如表所示。 参 数 -h -l -s 含 义 不显示各列的标题 显示详细信息列表,此为预设值 使用短列表,不显示用户登录时间、JCPU和PCPU时间 忽略执行程序的名称,以及该程序的PCPU时间 -u FROM USER TTY LOGIN@ IDLE JCPU PCPU WHAT 用户登用户名 录时的终端 用户网络地址 登录时间 用户空闲时间 用户终端所有进程占用的时间 当前进程占用的时间 用户当前执行的命令 finger命令

该命令用于查找指定用户,并显示该用户的相关信息。该命令常用格式如下: finger [参数] [用户名] finger –l root 修改用户信息 1) chfn命令

该命令用于修改系统中存放的用户信息。这些用户信息包括:用户全名、工作单位、工作电话和家庭电话等 chfn [用户名] 2) usermod命令

除了在添加用户时指定用户的主目录、登录时的shell和所属的组外,还可以在用户创建后,使用usermod命令来修改用户的这些信息。usermod命令的使用格式如下:usermod [选项] [用户名]

参 数 -d -s -g -G -u -e -c 含 义 重新指定用户登录系统时的主目录 设置用户登录系统时使用的shell 指定用户主组 重新指定用户所属的组名 重新指定用户的UID 指定账号的有效期限,格式为YYYY-MM-DD 用于指定账号信息字段的内容 [root@myhost root]# usermod –G 0 –d /home/jack 删除用户

为了保证系统的安全,在Linux系统中,如果某个用户账号不再使用,就应该从系统中删除。在Linux系统中可以通过直 接删除/etc/passwd和/etc/shadow文件中对应行的办法来删除系统账号,但这种方法不利于初学者,更增加了管理员的负担。因此在Linux系统中提供了userdel命令来实现从系统中删除已有账户。

userdel [-r] [用户名]

如果使用参数-r,则表示在删除用户的同时,将该用户的主目录一并删除。 在登录的用户间传递消息:

提供了几个用于向登录用户发送消息的工具,以便管理员在需要的时候使用这些工具向其

他登录用户发送系统消息。1) mesg命令

该命令用于设置终端机的写入权限,即如果mesg使用y参数表示允许其他用户将消息传到自己的终端机界面上。如果mesg使用n参数表示不允许其他用户将消息传到自己的终端机界面上。该命令的使用格式如下: 参 数 y n 2) wall命令

该命令能将消息内容发送给每一个在线的用户,但是该用户的必须首先使用mesg命令允许其他用户将消息传到其终端上。改名的使用格式如下: wall

也可以直接使用wall,然后输入信息,不过信息结束时需加上 EOF (使用键盘键Ctrl+D)。 3) write命令

该命令可以向指定的用户发送信息。该命令的使用格式如下: write [ttyname]

其中参数ttyname是可选项,当一个用户多次登录系统时,可以选择使用该参数指定其登录的终端。 root@myhost root]# write tom

含 义 允许其他用户将消息传到自己的终端机界面上 不允许其他用户将消息传到自己的终端机界面上 管理组

1. groupadd命令

该命令用于向系统新增一个组,新增的组账号在默认的情况下最小从500开始。通常的情况下,其命令格式如下:

groupadd [选项] [组名]

groupadd工具无需使用参数,但在某些特殊情况下,需要使用如下表所示的参数。 参 数 -g -r 含 义 指定组GID号 添加一个系统组,即GID小于499的组 向系统新增一个系统组testg组,其GID为480。具体操作如下,完成后用使用tail命令查看详细情况,过程如下图所示。 [root@myhost root]# groupadd –g 480 testg groupmod命令

管理员有时候可能需要更改组账号的内容,此时可以使用groupmod命令。其命令格式如下: groupmod [选项] [组名] 参 数 -g -o -n 含 义 重新指定组GID号 重复使用组GID号 重设组账号名称 将testg组更名为troot,其GID变更为0,具体操作如下,操作完成后使用more命令查看结果,如下图所示。 [root@myhost root]# groupmod –g 0 –o –n troot testg . groupdel命令

在向系统创建用户账号的时候,系统会自动创建与该账号同名的组,但是在删除该用户账号的时候,系统并不会自动删除该组,因此需要系统管理员手动删除该组账号。groupdel命令提供了删除特定组账号的工具,该命令无需任何参数。其使用格式如下: groupdel <组账号>

shell及shell编程

在Linux系统中,shell是操作系统的外壳,为用户提供使用操作系统的接口,它是命令语言、命令解释程序和程序设计语言的统称。

shell是用户和操作系统之间的一个接口。用户在命令提示符下输入的每个命令都首先由shell程序进行解释,然后再传给Linux内核的。 shell是一个命令解释器。它拥有自己内建的shell命令集,可以用它来启动、挂起、停止一些程序。此外shell也能被系统中的其他有效的Linux应用程序所调用。

shell还是一个解释型的程序设计语言。shell程序设计语言支持绝大多数高级程序设计语言中常用的元素,比如函数、变量、数组和控制结构。shell编程简单易学,在任何命令提示符中能键入的命令都可以在shell程序中使用。而且一旦掌握,它将成为工作中的得力工具。

和DOS和Windows不同,Linux提供了多种shell程序供用户选择使用,使用不同类型shell的原因是它们都有各自的特点。一般某个用户登录系统时的shell都在/etc/passwd

文件的最后一个字段中定义,用户可以通过修改该字段来替换其使用的shell。

另外,用户在文本模式下登录系统后,Linux的初始化程序initd就会为每个用户启动一个shell,可以使用“Alt+F1~F6”来获取shell提供的多个虚拟控制台,使用虚拟控制台的最大好处就是,当一个虚拟控制台上的程序由于出错给锁住输入

时,用户可以进入另一个虚拟控制台,然后杀死该进程。如果系统使用了X Window的图形模式,那么虚拟终端的切换就要使用“Ctrl+Alt+F1~F6”

/etc/shells文件中,列出了目前系统可以使用的shell。并且给出了这些shell程序的位置

bash的功能

shell是操作系统的外壳。RedHat Linux 9中默认使用的shell是bash,它为用户提供使用操作系统的接口,承担着用户与操作系统内核之间进行沟通的任务。除此之外,bash程序还兼备如下的功能: 1)交互式处理

从用户登录系统开始,shell程序就是在系统终端中显示不同的命令行提示符(root用户登录系统则提示符显示“#”,普通用户登录则显示“$”),然后等待用户输入命令。在接收来自用户输入的命令后,bash会根据命令的 不同的类型(包括程序或shell内置命令)来执行,在执行完

毕后,bash将结果回传给用户,并且再次回到命令提示符,以等待用户的下一次输入。这种模式会一直继续下去,直到用户执行exit或是按下Ctrl+D来注销,bash才会结束,bash的这种与用户沟通的方式称为“交互式处理”。 2)命令补全功能

所谓“命令补全”是指在用户输入命令的时候,无需输入完整的命令行,Linux系统的shell会自动查找出最符合的命令名

称,供用户选择。这样的功能可以帮用户节省输入长串命令的

时间。例如,在/root目录下有一个testexecvp.c文件,如果想查看其中的内容,并不需要完整输入该文件的名称,而只要输入开头的几个字母,即输入“more /root/teste”,然后按下Tab键一次,Linux的bash会自动补足完整的命令(more /root/testexecvp.c)。另一种情况就是,如果系统中有多个文件都与输入的前缀相同,那么当用户连续按下2次Tab键时,系统会显示当前目录下所有具有相同前缀的文件名称,供用户选择。例如,输入“more test”后按2次Tab键,结果如图下所示。

shell的补全功能,不但方便,而且可以避免由于用户输入错误的路径而执行错误的程序。 3)查阅历史记录—history命令

在RedHat Linux 9中,每当用户输入的命令并按下Enter后,都会被记录在命令记录表中,默认情况下,bash默认使用的命令记录表文件为用户主目录下的.bash_history(文件名前面的“.”表示这是一个隐藏文件)文件。可以使用环境变量HISTSIZE来定义命令记录表的条数,默认的记录条数为1000条。bash的history功能提供了一种执行命令的最快的方法,就是使用命令记录号码。在RedHat Linux 9的命令记录中,每条用户执行过的命令都会被赋一个记录号码,用户可以利用这些记录号码来执行指定的要执行的旧命令。其语法如下: !<记录号>

4)别名(alias)功能

Linux中的别名功能是指提供给用户使用自定义的简单字符串,来替换复杂的命令选项,或是替换连续多个命令的连续组合的功能,从而使得用户可以自定义符合自己习惯的操作命令。

例如,对于熟悉DOS和Windows的用户来说,dir命令可以方便地显示当前目录的内容,但是在Linux中完成该功能的命令是“ls –l”。如果希望使用dir来代替ls –l,则可以使用alias功能来创建一个到ls –l的别名,如下图所示。

myhost root]# alias dir=”ls –l” 5)后台处理

Linux是多用户多任务的操作系统,它允许多个用户同时登录系统,也允许多个程序同时执行。但因为shell使用交互式模式,目前执行的命令会一直掌握系统的控制权,直到该程序结束为止,这类程序称为前台程序(Foreground)。shell采用的这种前台程序接管系统控制权的模式,使得个别用户无法使用Linux提供的多任务功能来增加效率,因此,shell提供了后台处理功能来解决上述问题。

取消:[root@myhost root]# unalias dir

通常,Linux后台运行的都是比较耗时的程序,如编译核心或是下载Linux的安装文件等,但是后台任务在执行期间,用户仍然可以和shell继续交互,以下达其他的命令。要在RedHat Linux 9中要执行后台程序,只要在输入命令的时候,在命令后面加上“&”符号。系统就会开始以后台的方式执行该命令,屏幕将显示该后台运行程序的进程PID,然后shell将回到命令提示符状态,以等待用户的下一个命令的输入。例如,将top命令投入后台运行。如下图所示。

当前某个任务在前台运行之后,就无法使用“&”将它投入后台运行,但是可以先使用“Ctrl+z”组合键暂停该程序,然后在命令提示符下输入“bg”命令,即可将该任务投入后台执行。 如果要查看目前系统中正在运行的后台程序,可以使用jobs命令。

来回切换:fg/bg 6)输入/输出重定向

在Linux系统中,标准输入和输出有3种形态: 标准输入(stdin):通常是指键盘。

标准输出(stdout):通常是指将命令执行的结果输出到终端机或屏幕上。 标准错误输出(stderr):是指在命令发生错误时,将其错误信息输出到屏幕上。

一般情况下,程序的输入对象都是标准输入,输出是标准输出。在Linux中提供了输入(<和<<)和输出(>和>>)的重新定向功能,它可以将程序的输入和输出由标准设备重定向到文件、打印机或其他装置(/dev/null)。

这里重定向(>和<)是改写重定向,就是会删除原来的文件,而重定向(>>和<<)是追加重定向,就是新的内容将被添加到文件原来内容的后面。

先使用ls命令查看/etc/pam目录的内容,然后将查看结果重定向到ls_result.txt文件中。其命令和执行结果如图所示 [root@myhost root]# ls –l /etc/xinetd.d > ls_result.txt

然后使用输入重定向查看ls_result.txt文件,可在命令提示符中输入如下命令: [root@myhost root]# cat < ls_result.txt

7)管道

管道功能可以将多个命令集成到一起,以执行一个较为复杂的工作,除了第一个和最后一个命令之外,每个命令的输入都是前一个命令的输出,而每个命令的输出也将成为下一个命令的输入。例如: [root@myhost root]# ls –l /usr/bin | grep lib |less

以上的命令执行的过程是先列出/usr/bin目录的所有内容,然后通过管道(|)将ls命令的结果传给grep命令,当成其标准输入,接着grep会由此输入中查找含有lib的字符串文件,最后将搜索的结果再通过管道传给less命令。

3.bash中的特殊字符

在Linux下有一些符号会被shell特殊对待,这些符号可以用来指定特殊的范围或功能,除了前面介绍的外,例如>、>>、<、<<、|和!,还有以下可以在shell中使用的特殊字符。 1)通配符(*和?)

“*”和“?”是Linux系统中最常用的两个通配符,在字符串查找的时候,通配符可以代替任意的字符。其中“?”可以代替一个任意字符,“*”可以代替任意多个字符。

例如,执行“ls –l /root/test*”命令就会列出/root目录下所有以test打头的所有文件名,如下图所示。 2)命令取代符(`)

命令取代符“`”在Esc键下方,与“~”符号在同一个键上。两个“`”符号包围的命令,是该命令行中首先被执行的命令。例如,“echo `date`”命令,首先执行date命令,然后使用echo来显示date命令的结果,而不是显示字符串date,如下图所示。 3)命令分隔符(;)

如果需要执行一连串的命令,可以一次输入这些命令,而在命令间使用“;”分隔,Linux的shell会一次解释并执行这些命令。

例如,在Linux的终端中,从/root目录下先执行cd /etc命令,然后再执行more passwd命令来查看/etc/passwd文件的内容,其过程如下图所示。

[root@myhost root]# cd /etc ; more passwd 4)注释符(#)

注释符“#”通常使用在Linux的shell脚本程序或应用程序的配置文件中,使用“#”开头的行为注释行,shell在解释该脚本程序的时候不会执行该行。对于有经验的程序员来说,注释行的使用可以增加程序的可读性,也可以使日后的维护更加简单。

创建和执行shell程序

可以选择使用shell脚本程序。Linux的shell程序是一个非常有用且很容易掌握的工具,可以帮助用户轻松地完成繁

重的任务,提高使用和维护系统的效率。另外,Linux的图形界面也是通过shell脚本解释启动的,很多应用程序本身就是一个shell程序

shell程序与C语言等高级语言程序不同,shell程序是通过shell命令解释器解释执行的,不生成二进制的可执行代码,这一点和DOS下的批处理文件类似。不同的shell解释器对应的shell程序的语法也不完全相同。由于bash是Linux下默 认提供的shell解释器,并且bash也是使用最广泛、与其他shell兼容性最好的解释器,因此下面介绍的shell程序的知识都是基于bash解释器的。

创建和执行一个shell程序非常简单,一般需要以下3个步骤: (1)利用文本编辑器创建脚本内容。

(2)使用“chmod”命令设置脚本的可执行属性。 (3)执行脚本。

一个合法的shell脚本程序,都是以如下图所示的shell解释器声明开始的,即在shell程序的第一行。其中“#!”后面的“/bin/bash”,表示实际使用的解释器。例如,以perl作为shell解释器,则可以该声明可以是“/usr/bin/perl”;与其他行不同,这里前面虽然以“#”开头,但不是注释行。 1.创建shell程序

在RedHat Linux 9的命令提示符下使用gedit addusers.sh或vi addusers.sh,创建文本文件addusers.sh.,在系统打开的文本编辑窗口中输入如下的语句(其中行首编号除外)。输入完毕后保存退出。 1 2 3 4 5 6 7

#!/bin/sh if [ -f $1 ] ; then if [ -f $2 ] ; then

/usr/sbin/newusers < $1 /usr/sbin/pwunconv /usr/sbin/chpasswd < $2 /usr/sbin/pwconv

注意:

2.设置addusers.sh文件的可执行属性

addusers.sh文件编辑完毕并保存后,在命令提示符下执行如下命令,设置其可执行的属性(假设addusers.sh文件保存在/root目录下)。

[root@myhost root]# chmod a+x addusers.sh 3.执行addusers.sh脚本

shell脚本的执行方法也很简单,只需要在命令提示符下输入如下命令即可: [root@myhost root]# ./ addusers.sh account.txt password.txt 其中account.txt是用户账号文件,password.txt是用户口令文件。

shell的环境变量:

在Linux的shell中使用的变量分为以下环境变量、内部变量和用户变量3类。环境变量是Linux系统环境的一部分,通常不需要用户去定义。shell使用环境变量来存储系统信息,这些变量可以提供给在shell中执行的程序使用,不同的shell会有不同的环境变量及其设置的方法。内部变量是由系统提供的,用户不能修改它们。用户变量是用户在编写shell脚本的时候定义的,可以在shell脚本中任意使用和修改。

提示:如果希望一个用户定义的变量能够在定义它的shell脚本以外使用,就必须使用export命令。例如,“export var”命令就是将用户定义的变量var添加到系统变量列表中,这样就可以在定义var变量脚本以外的地方使用。

在Linux的bash中可以使用set命令来查看系统当前的环境变量及其取值。如下图所示。

说明:由于Linux的环境变量很多,这里利用管道符和tail命令与set命令结合只显示系统环境变量的最后10个。

若要查看当前某个环境变量的值,可以使用echo命令,并在环境变量的前面加上“$”即可。例如,查看当前的命令主提示符,可以输入如下命令: [root@myhost root]# echo $PS1

命令主提示符是Linux的shell程序为用户输入命令而设置的提示符。环境变量PS1的值就是命令主提示符,默认为“[\%u@\\h \\W]\\$”,其中“[”、“]”和“@”原样显示; \%u”相应位置显示当前登录的用户账号;“\\h”表示相应位置显示主机名;“\\W”相应位置当前工作目录;“\\$”表示如果当前登录账号是超级用户就显示“#”,如果是普通用户就显示“$”。例如,当超级用户登录myhost主机时,命令提示符显示为“[root@myhost root]#”。 环境变量PATH记录了命令执行时的默认的搜索路径,即当用户在命令提示符后输入命令时,Linux系统会按照PATH设置的路径搜索该命令,然后再执行该命令。PATH变量的值由多个路径组成,各路径之间使用“:”隔开。 shell配置文件

用户可以通过set命令来查看和设置常用的环境变量,但是在系统启动的时候,Linux并不是通过set命令来设置这些变量的,而是通过读取相应的shell配置文件来获取环境变量的值的。在Linux的bash中其配置文件有全局的配置文件,也有用户个人的配置文件,shell在检查这些文件的时候,遵循如下的顺序:/etc/profile→~/.bashrc_profile→~/.bashrc→/etc/bashrc。其中/etc/profile和/etc/bashrc文件中包含了全局环境变量的设置,~/.bashrc_profile和~/.bashrc文件中包含了个人环境变量的设置。 1./etc/profile文件

etc/profile文件是系统登录时最先检查执行的shell配置文件,也是Linux系统最主要的shell配置文件,有关系统最重要的环境变量都在此定义,如当前系统的PATH、USER、LOGNAME、MAIL和HOSTNAME等。在该文件中还定义了每个shell所能执行的程序的数目,即ulimit变量,以免shell过度占用系统资源。另外,在/etc/profile文件末尾会自动执行/etc/profile.d目录下的所有*.sh脚本。 2. ~/.bashrc_profile

每个系统用户的子目录下都有一个.bashrc_profile文件,用于设置每个用户的bash环境变量,Linux系统启动时,在读取/etc/profile文件的内容之后,就会检查该文件

在该文件中,首先读取并执行~/.bashrc文件,然后设置PATH、BASH_ENV和USERNAME的值。此处的

PATH变量的值,除了在全局环境配置文件/etc/profile文件中设置的PATH的值以外,还添加了用户主目录下的bin目录。BASH_ENV的值则是接下来需要检查的文件的名称。 3. ~/.bashrc

在读取~/.bashrc_profile文件的过程中,Linux会在执行~/.bashrc_profile文件的内部中调用并执行~/.bashrc文件。另外,与前面两个文件不同,Linux系统每次用户登录bash的时候都会读取~/.bashrc文件,并重新设置该文件中定义的环境变量。而/etc/profile和~/.bashrc_profile只在系统启动的时候才读取。在~/.bashrc文件中只定义了某些别名命令和虚拟终端的设置。例如,如果telnet登录时,无法浏览超过一页的信息或文件内容,此时可以在该文件中添加如下行: export TERM=vt100

另外在该文件的最后还检查/etc/bashrc文件是否存在,如果存在则转而读取并执行该文件。 ./etc/bashrc

和~/.bashrc文件一样,用户每次登录Linux系统的时候,都会自动读取并执行该文件。在该文件中设置了系统创建文件时默认的文件存取权限的掩码umask的值和用户自定义的命令提示符PS1。

除了上面介绍的常用的环境变量配置文件以外,还有~/.bash_login、~/.profile、~/.bash_logout和~/.bash_history文件,用于系统环境变量的定义。如果~/.bash_profile文件不存在时,系统会转而读取~/.bashrc文件。该文件在每次用户登录时都会被bash读取并执行。通常可以将用户登录后必须执行的命令存放在这个文件中。如果~/.bash_profile和~/.bash_login文件都不存在的情况下,系统会使用~/.profile文件中的内容设置当前环境变量的值,其功能与~/.bash_profile文件完全相同。

Linux系统在注销前,bash会读取并执行~/.bash_logout。通常该文件中只有一个clear清屏命令。如果希望在系统注销前执行一些特定的任务,就可以将相应的命令行写入该文件。 ~/.bash_history文件用于记录当前用户在登录系统后所执行过的命令。

shell脚本编程:

shell脚本程序,简称shell脚本或shell程序,是使用系统提供的命令编写的文本文件,该文件具有可执行的属性,能够帮助系统管理员自动管理系统。在Linux的发行版本中就包含了很多的shell程序,这些脚本有的是为了完成系统参数的设置,例如前面介绍的/etc/profile等文件;有的是为了完成某项系统服务的启动工作,例如/etc/rc.d/init.d目录下的所有脚本。 shell变量

shell程序语法和其他高级语言程序类似,包括变量、控制结构和函数等。 1.变量类型与使用

bash脚本是一种弱类型的脚本语言。所谓弱类型脚本语言,就是在bash脚本中,对类型的要求不严格,同一个变量可以随着使用场合的不同,存储不同类型的数据。弱类型语言变量使用灵活,但是编程者需要注意对变量当前存储的数据类型的检查。 1)变量的声明

在bash中,变量的使用不需要显式的声明,或者说赋值就可以认为是变量的声明。通常,给一个变量赋值应采用如下的格式: 变量名=值

注意:等号两边不能存在分隔符(包括空格,制表位和回车符)。 2)变量的引用

通常,要引用一个变量,可以采取在变量名前加一个$的方法,即“$变量名”。 例如,要引用上面定义的变量a1可以采用如下的方法: echo \

但是,有时候这种方法会产生混淆。例如,希望使用变量a1来输入“hello Linux”字符串。如果使用echo “$a1Linux”就会得不到期待的字符。这是因为bash把“a1Linux”作为一个变量来处理了。此时可以选择使用以下的几种用法(其

中,value代表一个变量可能取的具体的值):

? ${变量var:-value}:如果指定的变量var存在,则返回var的值,否则返回value。

? ${变量var:=value}:如果指定的变量var存在,则返回var的值,否则先将value赋给var,然后再返回value。 ? ${变量var:+value}:如果指定的变量var存在,则返回value,否则返回空值。

? ${变量var:?value}:如果指定的变量var存在,则返回该var的值,否则将错误提示消息value送到标准错误输

出并退出shell程序。

? ${变量var:offset[:length]}:offset和length是整数,中括号表示可选部分。表示返回从变量var的第offset+1个

字符开始长度为length的子串。如果中括号部分省略,则表示返回变量var第offset+1个字符后面的子串。 ? [root@myhost root]# echo $var ${title:-\? hello marry!

? 变量title在前面都没有被赋值,所以${title:-\返回“marry”。 ? [root@myhost root]# echo $var ${title:+\? hello !

? 变量title仍然没有被赋值,即不存在,所以${title:+\返回空值。 ? [root@myhost root]# echo $var ${title:?\? bash: title: title is null or empty

? 变量title仍然没有被赋值,即不存在,所以${title:?\返回了错误信息,即“bash: title: title is

null or empty”。

? [root@myhost root]# echo $var ${title:=\? hello tom and marry!

? 到此为止变量title仍然没有被定义,所以title被赋值为“tom and marry”,并返回该值。 ? [root@myhost root]# echo $var ${title:+\? hello somebody!

? 此时变量title已经存在,故返回“somebody”。 ? [root@myhost root]# echo $var ${title:8:5}! ? hello marry!

? 此处变量title已经存在,且值为tom and marry,取其第9个字符,即“m”开始后面5个字符,也就是“marry”。

3)特殊变量

在shell程序中存在一些特殊变量,当shell程序运行时,这些变量能够记录shell程序的命令行参数。这些变量分别是$0、$1、?$n,以及$#、$*和$@。其中$0存放的是命令行的命令名,$1存放的是命令行中传递给命令的第一个参数,依次类推,$n存放的是传递给命令的第n个参数。$#存放传递给命令的参数的个数(不包括命令),$*和$@均用于存放传递给命令的所有参数,两者的区别在于$*把所有的参数作为一个整体,而$@则把所有的参数看作是类似于字符串数组一样,可以单独访问这些参数。 2. shell表达式

和高级程序语言一样,shell程序的表达式由运算符和参加运算的操作数构成。操作数通常可以是变量、常量。 1)shell的运算符

shell的运算符的使用规则都与C语言非常类似。 2)shell表达式

利用运算符将变量或常量连接起来就构成了表达式。但是由于在bash中变量和常量没有特定的数据类型,因此在bash中单纯使用一个表达式作为命令或语句是错误的,而必须使用expr或let命令来指明表达式是一个运算式。expr命令会先求出表达式的值,然后送到标准输出显示。let命令会先求出表达式的值,然后赋值给一个变量,而不显示在标准输出上。expr和let命令的使用方法如下: expr <表达式>

let <表达式1> [表达式2 ...]

expr命令一次携带一个表达式,let命令一次可以携带多个表达式。在expr命令的表达式中使用了数值运算,此时需要用空格将数字运算符与操作数分隔开。另外,如果表达式中的运算符是“<”、“>”、“&”、“*”及“|”等特殊符号,需要使用双引号、单引号括起来,或将反斜杠(\\)放在这些符号的前面。而let命令中的多个表达式之间需要空格隔开,而表达式内部无需使用空格。例如如下几个表达式: ? expr 3+2

操作数3、2和运算符+之间没有空格,此时bash不会报错,而是把3+2作为字符串来处理。 ? expr 3 + 2

操作数3、2和运算符+之间有空格,此时bash认为是数字运算,返回5送到标准输出设备。 ? expr 3\

使用双引号将操作符*括起,此时bash返回乘积6。 ? let s=(2+3)*4

s结果为5*4=20。 3.条件判断

在编写程序的时候,经常需要根据某个条件的测试进行程序执行分支的选择。这里的条件可能是某个表达式的值、文件的存取权限、某段代码的执行结果,或者是多个条件结果按照逻辑运算后的值。条件测试的结果只有真或假2种。需要注意的是,这里“真”的数值表示为0,“假”的数值表示为非0,与表达式的真值以及C语言的真值刚好相反。

在bash中条件测试的使用方法是,利用test命令或一对中括号[]包含条件测试表达式,这两种方法是等价的。它们的格式如下: test cond_expr 或 [ cond_expr ]

注意:利用一对中括号时,左右的中括号与表达式之间都必须存在空格。 cond_expr是需要测试的条件表达式,可以是以下几种情况: (1)文件存取属性测试:包括文件类型,文件的访问权限等。 (2)字符串属性测试,包括字符串长度,内容等。 (3)整数关系测试,包括大小比较,相等判断等。 (4)上述3种关系通过逻辑运算(与、或、非)的组合

shell控制结构

shell程序的控制结构是用于改变shell程序执行流程的结构。在shell程序的执行过程中可以根据某个条件的测试值,来选择程序执行的路径。在shell程序中,控制结构可以简单地分为分支和循环结构2类。bash支持的分支结构有if结构和case结构,支持的循环结构有for结构、while结构和until结构。它们的使用方法与C语言等高级程序设计语言中相应的结构类似。 1.if分支结构

if结构是最常用的分支结构,其格式如下: if 条件测试1 ; then then [else fi

command_list_3 ] command_list_2 ] command_list_1 [elif 条件测试2 ;

其中,中括号部分为可选部分。当“条件测试1”为真时,执行command_list_1,否则如果存在elif语句,则测试“条件测试2”,如果为真,执行command_list_2。如果elif语句不存在或“条件测试2为假,则执行command_list_3。条件测试部分一般可以是test或[]修饰的条件表达式。

例6-5 根据用户输入的目录名称判断该目录是否存在,如果存在则进入该目录,否则测试同名文件是否存在,如果存在,则退出shell程序,否则新建同名目录,并进入该目录。 #!/bin/bash

#an example script of if clear

echo \ read dir_name

#测试$dir_name目录是否存在 if [ –d $dir_name ] ; then

cd $dir_name > /dev/null 2>$1

echo \

#测试是否存在与$dir_name同名的文件 elif [ -f $dir_name ] ; then else fi

在该例中,“cd $dir_name > /dev/null 2>$1”表示cd命令可能产生的标准输出信息和标准错误输出信息重定向的到一个空设备/dev/null,从而实现隐藏cd命令错误输出的功能。“mkdir $dir_name > /dev/null 2>$1”命令行的作用类似。由于Linux不允许在同一目录下存在同名的文件和目录,所有如果$dir_name不存在时,还要测试是否有同名的文件存在,然后才能新建该目录。

注意:then命令可以和if结构写在同一行,但是如果then命令和if结构在同一行时,then命令的前面一定要有一个分号,且分号与条件测试表达式之间用空格隔开。 2.case分支结构

if结构用于存在两种分支选择的情况下,当程序存在多个分支的选择时,如果使用if结构,就必须使用多个elif结构,从而使得程序的结构冗余,此时可以选在使用case结构。case结构可以帮助程序灵活地完成多路分支的选择,而且程序结构直观、简洁。case分支结构的格式如下: case expr 模式1 )

command_list_1 …… * )

;;

command_list_2 ;; [ 模式2 )

mkdir $dir_name > /dev/null 2>$1 cd $dir_name

echo \echo \exit

command_list_n ;; ]

esac

其中,expr可以是变量、表达式或shell命令等,模式为expr的取值。通常一个模式可以是expr的多种取值,使用或(|)连接。模式中还可以使用通配符,星号(*)表示匹

配任意字符值,问号(?)表示匹配任意一个字符,[..]可以匹配某个范围内的字符。

在case分支结构中,首先计算expr的值,然后根据求得的值查找匹配的模式,接着执行对应模式后面的命令序列,执行完成后,退出case结构。需要注意的是,在case结构的命令序列后面需要使用双分号(;;)分隔下一个模式。 例6-5 使用case语句编写程序,根据上网地址的不同为计算机设置不同的IP地址参数。 #!/bin/bash

#an example script of case clear

echo \ read nettype case $nettype in home|h|H )

/sbin/ifconfig eth0 192.168.0.118 netmask 255.255.255.0 /sbin/route add default gw 192.168.0.1 ;; office|o|O)

/sbin/ifconfig eth0 192.168.1.58 netmask 255.255.255.0 /sbin/route add default gw 192.168.1.1 ;; *)

echo \ exit ;; esac

echo “Success!!!”

本例程中,如果用户输入home、h或H则表示上网地点是在家中,此时IP地址为192.168.0.118,网络掩码为24,默认网关为192.168.0.1。如果用户输入office、o或O则表示上网地点是在办公室内,此时IP地址为192.168.1.118,网络掩码为24,默认网关为192.168.1.1。其他的输入无效,并给出提示“input error!”。其中ifconig和route命令在后面的章节中将详细介绍。 3.for循环结构

for循环用于预先知道循环执行次数的程序段中,它是最常用的循环结构之一。for的格式如下: for var [ in value_list ] do

command_list done

其中,value_list是变量var需要取到的值,随着循环的执行,变量var需要依次从value_list中的第一个值,取到最后一个值。do和done结构之间的command_list是循环需要执行的命令序列,变量var每取一个值都会循环执行一次command_list中的命令。同样中括号部分为可选部分,如果省略了该部分,bash会从命令行参数中为var取值,即等同于“in $@”。

例6-6 使用for语句编写程序,向系统添加10个用户,其名称分别是student1、student2、?student10。

#!/bin/bash

# an example script of for for i in [ 1 – 10 ] do fi done

由于在Linux中adduser命令会在/home目录下创建与用户同名的子目录作为用户的主目录,所以,该例程首先检查/home目录下是否存在与student1、student2、...student10同名的子目录,如果存在则将其重命名为stu1、stu2、?stu10,然后在执行创建用户的任务,并且用户的初始口令与用户名相同。 4.while和until循环结构

while和until循环结构的功能基本相同,主要用于循环次数不确定的场合。while的格式如下: while expr do done

until的格式如下: until expr do done

从格式上看,二者的使用方法完全相同,但是二者对循环体执行的条件恰恰相反。在while循环中,只有expr的值为真时,才执行do和done之间的循环体,直到expr取值为假时退出循环。而在until循环中,只有expr的值为假时,才执行do和done之间的循环体,直到expr取值为真时退出循环。

command_list command_list

adduser student$i > /dev/null 2>$1 echo \

echo \if [ -d /home/student$i ] ; then

echo \

echo \mv student$i stu$i

while循环示例 #!/bin/bash #an example script of while clear loop=0 while [ $loop –le 10 ] until循环示例 #!/bin/bash #an example script of until clear loop=0 until[ $loop –gt 10 ] do do let loop=$loop+1 echo \ done let loop=$loop+1 echo \ done 从上面的while和until循环的执行流程可以看出,expr的取值直接决定command_list的执行与否以及能否正常退出循环,因此通常在命令序列command_list中都存在修改expr取值的命令。否则while和until就无法退出command_list的执行循环,从而陷入死循环。通常,同一个问题如果可以使用while循环,就可以使用until循环。 例6-7 while和until循环结构示例。

上面两段程序都是完成对循环变量loop加1的任务,两段程序的输出结果完全相同。对比两个程序可以发现,只有循环条件的设置不同。

shell函数

和其他的高级程序设计语言一样,在bash中也可以定义使用函数。函数是一个语句块,它能够完成独立的功能,而且在需要的时候可以被多次使用。利用函数,shell程序将具有相同功能代码块提取出来,实现程序代码的模块化。在程序需要修改的时候,只需要修改被调用的函数,减少了程序调试和维护的强度。 在bash中,函数需要先定义后使用。函数定义的格式如下: [function] fun_name ( ) { }

其中,function表示下面定义的是一个shell函数,可以省略。fun_name就是定义的函数名。command_list就是实现函数功能的命令序列,称为函数体。函数一旦定义就可以被多次调用,而且函数调用的方法与shell命令的方法完全一致。函数调用的格式如下:

fun_name [param_1 param_2 ? param_n]

其中,fun_name是被调用的函数名,param_1、param_2、?param_n是调用时传递给函数的参数,各参数之间使用空格隔开。函数调用时是否需要传递参数,由函数的定义和功能决定。如果函数确实需要传递参数,此时可以使用$0、$1、?$n,以及$#、$*和$@这些特殊变量。其中$0存放的是命令行的命令名(也就是执行的shell脚本名),$1存放的是命令行中传递给命令的第一个参数,依次类推,

$n存放的是传递给命令的第n个参数。$#为传递给命令的参数的个数(不包括命令),$*和$@均用于存放传递给命令的所有参数,两者的区别在于$*把所用的参数作为一个整体,而$@则把所有的参数看作是类似于字符串数组一样,可以单独访问这些参数。

例6-8 向bash函数传递参数的示例。在bash脚本中定义函数,然后在该脚本时通过命令行传递参数。 #!/bin/bash

#an example script of function #fun1函数定义 function fun1 ( ) {

echo \ echo \echo \echo \count = 1 for param in $@ do

echo \

command_list

} clear

echo \let count=$count+1

fun1 $@

本例通过命令行参数$0向函数fun1传递执行的命令名,通过$*给函数fun1传递所有的命令行参数;通过$#给函数fun1传递命令行参数的个数;通过$@来访问命令行中的每个参数。 如果该例程保存为demo.sh,可以采用如下的命令行方式运行: ./demo.sh hello red hat linux

此时,$0存放“./demo”,$*和$@都存放“hello red hat linux”,$#参数为4。 函数的返回值用来给函数的调用者带回特定的变量值,shell

程序中的函数也可以有返回值,使用return命令可以从函数返回值。一般函数正常结束时返回真,即0,否则返回假,即非0值。return使用的格式如下: return [expr]

expr存在,0表示程序正常结束,非0值表示程序出错。如果expr省略,则以函数的最后一条命令的执行状态作为返回值。另外,测试函数的返回值的方法可以使用和shell命令的返回值相同的方法,即使用测试$?值,也可以采用直接测试命令函数的返回值。

shell程序跟踪:

和高级语言开发程序一样,在编写shell程序的开发过程中,出错是在所难免的,因此shell程序的调试就变得至关重要了。下面给出在6.2节中编写的addusers.sh脚本为例,给出在shell程序调试中的技巧。

在RedHat Linux 9的命令提示符下输入如下的命令开启sh程序的跟踪模式,这样sh程序在解释执行addusers.sh脚本的时候,启用单步执行的方式,如图右所示。

图中给出了adduser.sh脚本每步运行的结果,可以很好的判断程序执行的情况。

Linux网络配置 7.1 网络配置基础

7.2 使用命令工具配置网络参数 7.3 使用文件配置网络

1) ping命令

ping命令用于测试当前系统的网络是否连通。该命令能够不间断地向目标主机发送ICMP协议的数据包,目标主机接收到数据包后返回应答。用户可以在屏幕上看到 数据包返回的信息,并根据这些信息判断网络的连通状态。该命令的格式如下:

ping [选项] 目标主机名或IP地址 [root@myhost root]# ping –c 5 www.aust.edu.cn traceroute命令

该命令向目的主机发送数据包,每经过一个网关或路由就返回一行信息,内容包括网络或路由的主机名或IP地址、每次经过该网关或路由的时间(单位为ms)。系统默认的数据包长度为38字节,最大跳数(Hop)为30次。该命令格式如下:

traceroute [选项] 目的主机名或IP地址 3)netstat命令

netstat命令用于查看网络连接、路由表信息和网络接口的状态信息,其格式如下: nestat [选项]

常用参数及含义如表所示 参 数 -a -c -i -l -n -t -u -w -r -v 含 义 显示所有套接口,包括正在监听的 每个1秒刷新一次结果,直到用户终止 显示所有网络接口信息 显示处于监听状态的套接口信息 显示结果直接使用IP地址,而不使用域名 显示TCP协议的连接状况 显示UDP协议的连接状况 显示RAW协议的连接状况 显示当前核心路由表的信息 显示命令执行过程 使用netstat命令来查看当前路由表的详细信息。 在终端提示符下输入如下的命令,其执行结果如图所示。 [root@myhost root]# netstat -nr

远程登录工具

Linux系统为了方便用户在远程管理和使用系统,为用户准备了远程登录工具,其中最常用的就是telnet工具。telnet命令是远程登录命令,该命令允许用户使用telnet协议登录到远程计算机,在用户提供了合法的用户账号和登录口令后,就可以像操作本地计算机一样操作远程主机。telnet工具只提供Linux终端的仿真,不支持X Window等图形环境。该命令格式如下:

telnet 远程主机名或IP地址 使用命令工具配置网络参数: 1.ifconfig工具的使用 1) 查看网络接口信息 ifconfig命令格式如下: ifconfig [网络接口设备名]

其中网络接口设备名为可选参数,如果没有指定网络接口,ifconfig将返回系统所有的网络设备的TCP/IP参数,包括回环网络接口的信息,否则返回指定的接口参数。在终端命令提示符中输入如下命令,可以查看网络接口eth0的TCP/IP参数信息,如下图所示。 [root@myhost root]# ifconfig eth0 2) 配置网络信息

ifconfig工具可以配置系统中指定的网络接口的TCP/IP参数信息,其格式如下: ifconfig 网络接口设备名 IP地址 [netmask 网络掩码] [broadcast 广播地址]

其中netmask部分和broadcast部分可以任选其一,因为从网络掩码和广播地址可以互相推算。上述命令可以用指定的IP地址和网络掩码来配置命令中指定的网络接口。

例7.5 使用ifconfig工具,给当前主机的eth0网络接口配置网络参数,其网络IP地址为192.168.0.138,子网掩码为255.255.255.0。

[root@myhost root]# ifconfig eth0 192.168.0.138 netmask 255.255.255.0 3) 网络接口的启用和禁用

当网络接口的配置更改以后往往需要重启网络接口,以应用新的配置。使用ifconfig工具可以完成启用和禁用指定的网络接口的工作,具体方法如下: ifconfig 网络接口设备名 [up|down]

其中参数up表示启用指定的网络接口,参数down表示禁用指定的网络接口。 此外还可以使用network命令和ifup/ifdown命令来完成网络接口的启用和禁用。

其中,network是一个shell脚本程序,用于启用、禁用或重启所有网络接口,其格式如下: /etc/rc.d/init.d/network [选项] ifup 网络接口设备名 ifdown 网络接口设备名 2.route工具的使用

使用ifconfig工具配置了网络接口的IP地址、网络掩码等参数后,该主机就可以在局域网络内和其他主机通信了,但是还不能访问外网的主机。此时需要使用route工具配置网络的路由记录或默认网关。 route工具可以用于查看当前的路由信息,也可以设置网络的默认路由信息。 1) 查看路由信息

route命令在不带任何信息时,系统将返回当前路由表的信息,如图所示。 2) 添加/删除路由记录

使用route命令添加或删除一条到达目标网络的路由记录,其格式如下:

route add|del -net 网络地址 netmask 网络掩码 [gw 网关地址] [dev 网络接口]

其中参数add表示向路由表中添加一条路由信息,del表示删除路由表中的一条路由信息。gw参数和dev参数任选其一。gw参数用于指定网关地址,dev参数用于指定到达目标地址时数据分组投递的网络接口。 使用router命令添加或删除一条到达目标主机的路由记录,其格式如下:

route add|del -host IP地址 [gw 网关地址] [dev 网络接口]

在该命令中无需网络掩码,其中add参数、del参数、gw参数和dev参数含义同上。 3) 添加/ 删除默认网关

默认网关通常是一个公司或单位内部网络与外部网络通信的唯一通路,当公司内部网络上的主机与外部网络进行连接时,就将数据分组发给默认网关,由该网关负责数据分组的路由选择。可以使用route命令来添加或删除网络中的默认网关,其格式如下:

route add|del default gw 网关地址

[root@myhost root]# route add default gw 192.168.0.1

尽管ifconfig和route工具非常有效,但是它们的命令效果只能维持在命令执行到网络重启或系统重启的时限内,如果希望系统重启后ifconfig和route工具配置的参数仍然有效,可有以下的两个办法实现:

(1)修改网络接口的配置文件(/etc/sysconfig/network-scripts/ifcfg-eth0文件)中的指定内容。这种方法可以同时解决网络重启和系统重启后网络配置失效的问题。这种方法将在下面的小节中给予介绍。

(2)将相应的ifconfig和route配置命令,分别按行写入/etc/rc.d/rc.local文件。这种方法可以解决系统重启后ifconfig和route命令失效的问题,但是不能解决网络重启后ifconfig和route命令失效的问题。

/etc/rc.d/rc.local文件是一个具有可执行属性的shell脚本文件,如下图所示。它在RedHat Linux 9系统启动时执行。通常,rc.local文件中的每一行都是一条命令,用于在系统启动时运行一个需要随系统一起运行的程序,类似于MS Windows的随机启动。

图中文件属性区域的首行“#!/bin/sh”则表示该文件是一个shell脚本文件。如图在该文件末尾添加两行就可以实现设置网络参数的命令ifconfig和route随系统启动后自动执行,从而保证系统重启后原先使用ifconfig和route命令设置的网络参数仍然有效。如果,我们希望其他的程序随系统启动一起自动运行,可以采取类似的办法。

2.ifcfg-ethN文件

在RedHat Linux系统中,系统以太网的网络设备的配置文件ifcfg-ethN保存在/etc/sysconfig/network-scripts/目录中,Linux系统启动时从中读取信息来初始化网络接口。其中该文件用于ifcfg-eth0保存当前主机的第一块网卡的配置信息,如果当前主机有多块网络接口卡,那么该目录还会包含ifcfg-eth1、ifcfg-eth2等文件,分别表示主机的第二个网络接口、第三个网络接口。此外,/etc/sysconfig/network-scripts/目录下还包括ifcfg-lo文件,其中设置了回环网络接口的网络配置信息。

所谓回环网络接口,是一种特殊的网络接口,该接口是在内核中实现的抽象接口,通过lo接口发送的数据并不会被投递到物理网络上,而只是在操作系统内核中传递,通常该接口用于测试网络TCP/IP协议安装是否正确。在网络地址指派公司ICANN分配IP地址的时候,将127开头的地址都留作了回环网的测试地址。另外,回环网的默认主机名为localhost,所以在Linux的命令提示符下输入如下两个命令中的一个,可以测试当前系统中TCP/IP协议是否正常。 [root@myhost root]# ping -c 5 127.0.0.1 [root@myhost root]# ping -c 5 localhost

:

DEVICE BOOTPROTO BROADCAST IPADDR NETMASK NETWORK ONBOOT 指定该文件配置的网络接口 获取TCP/IP参数的方式,static表示手工配置,dhcp表示动态获取 当前网络的广播地址 当前主机的IP地址 网络掩码 主机所在的网络 是否在系统启动时激活该网络接口 可以根据实际的网络状况来修改ifcfg-eth0文件,保存后需要重启网络才能生效。重启网络的方法有如下几种: (1)使用reboot或shutdown –r now命令重启Linux操作系统。 (2)在命令命令提示符下执行network脚本。

(3)在命令命令提示符下使用service命令。service命令的功能是启动、停止或重启Linux系统的某些服务,其格式如下:

service 服务名 [参数] 其参数及含义如右表所示。

start 停用指定的服务 启动指定的服务 stop 重启指定的服务 restart或reload 获取指定服务当前的状态 status

注意:其实,service命令用于调用/etc/init.d/目录下相应的服务启动脚本来实现启动、停止或重启系统服务。本例中service命令就是调用了/etc/init.d目录下的network脚本。图中返回的“确定”信息表示网络重启成功

网络上的域名解析的方式有两种:

一种是使用本地主机上的hosts文件,由于该文件中的解析数据需要用户自行更新,故称为静态解析,另一种是通过网络上能够提供域名解析服务的主机进行统一解析,该主机称为域名解析服务器或DNS服务器,由于DNS服务器上的解析数据无需发送域名解析的用户进行更新和管理,故称为动态解析。 /etc/目录下放置了hosts文件

字 段 1 2 3 示 例 127.0.0.1 localhost.localdomain localhost 含 义 主机IP地址 主机的FQDN域名 主机别名(可选) /etc/目录下存放了一个resolv.conf文件,记录了能够为用户提供动态域名解析服务的DNS服务器的IP地址。

在Linux中resolv.conf文件里“nameserver”打头的行最多只能出现3行,多余的无效。其中,第一个“nameserver”行是主DNS服务器的IP地址,其余的“nameserver”行记录的是辅助DNS服务器的IP地址。

在RedHat Linux 9操作系统中,可以同时使用静态域名解析和动态域名解析,并且通过/etc/host.conf文件指定这两种方式的优先使用顺序该文件通常包含如下的信息: 1)order bind,hosts

表示优先使用动态域名解析,失败后在使用静态域名解析。其中bind是DNS服务器使用软件包名称。 2)multi on

表示允许一个域名绑定多个IP地址的现象,在进行域名解析时,将返回该主机域名对应的所有IP地址。 3.域名查询命令

当用户使用主机的FQDN主机名访问网络的时候,域名解析的过程通常相对于用户来说是透明的。如果用户确实希望直到某 1)host命令

该命令用于查询域名信息,这些信息包括主机对应的IP地址、邮件服务器的信息,还可以返回指定域中所有主机的名称和IP地址的对应信息。其基本使用格式如下: host [参数] 域名或主机名 常用的参数及含义如下表所示。 参数 含 义 -t A -t MX -t CNAME -t NS -t PTR -r -a 查询指定主机名对应的IP地址,host命令的默认值 查询指定域下邮件服务器的主机名 查询指定主机名的别名 查询指定域内的DNS服务器信息 查询指定IP地址对应的主机名 禁用递归查询 返回指定域中所有主机信息 [root@myhost root]# host –t MX aust.edu.cn 2)nslookup命令

和host命令稍有不同,nslookup命令除了可以进行域名查询外,还可以诊断当前的DNS服务器是否正常。在命令提示符下直接输入“nslookup”,会进入该命令的提示符“>”。在nslookup命令的提示符下输入要查询的IP地址域名,并按Enter键即可获取主机信息。在提示符下输入“exit”可以退出该命令,如下图所示。

在nslookup命令中包含了许多子命令,这些子命令可以使用set在其提示符下执行,用于指定nslookup的命令行选项。其使用方法是: set keyword=value

其中常用的keyword参数和value的常用取值及含义如下表所示 常用keyword参数和value的取值

keyword参数 all domain port querytype、type、 q retry timeout CNAME HINFO MX NS PTR num time_num 查询主机名的别名 返回主机的CPU、操作系统等信息 返回指定域中所有主机信息 返回该域中的所有域名解析服务器 反向查询,即由IP地址查询主机名 设置域名查询是重试的次数 设置域名查询的超时时间,单位秒 A value取值 - domain_name port_num 含 义 显示当前的所有选项和可用DNS服务器信息 指定默认搜索的域名 指定域名解析服务器使用的端口号 正向查询,即主机名转换成IP地址,默认选项 首先,在Linux的终端提示符下输入如下命令: [root@myhost root]# nslookup

然后,在nslookup的提示符下输入如下的子命令:

本文来源:https://www.bwwdw.com/article/8heo.html

Top