Linux 学习笔记
Linux 学习笔记
一、 常用命令
LINUX常用操作命令和命令行编辑快捷键
终端快捷键:
Ctrl + a/Home 切换到命令行开始
Ctrl + e/End 切换到命令行末尾
Ctrl + l 清除屏幕内容,效果等同于 clear
Ctrl + u 清除剪切光标之前的内容
Ctrl + k 剪切清除光标之后的内容
Ctrl + y 粘贴刚才所删除的字符
Ctrl + r 在历史命令中查找 (这个非常好用,输入关键字就调出以前的命令了)
Ctrl + c 终止命令
ctrl + o 重复执行命令
Ctrl + d 退出 shell,logout
Ctrl + z 转入后台运行,但在当前用户退出后就会终止
Ctrl + t 颠倒光标所在处及其之前的字符位置,并将光标移动到下一个字符
Alt + t 交换当前与以前单词的位置
Alt + d 剪切光标之后的词
Ctrl+w 剪切光标所在处之前的一个词(以空格、标点等为分隔符)
Ctrl+(x u) 按住 Ctrl 的同时再先后按 x 和 u,撤销刚才的操作
Ctrl+s 锁住终端
Ctrl+q 解锁终端
!! 重复执行最后一条命令
history 显示你所有执行过的编号+历史命令。这个可以配合!编辑来执行某某命令
!$ 显示系统最近的一条参数
最后这个比较有用,比如我先用 cat /etc/sysconfig/network-scripts/ifconfig-eth0,然后我想用 vim 编辑。
一般的做法是先用↑ 显示最后一条命令,然后用 Home 移动到命令最前,删除 cat,然后再输入 vim 命
令。其实完全可以用 vim !$来代替。
gnome快捷键
Alt + F1 类似 Windows 下的 Win 键,在 GNOME 中打开"应用程序"菜单(Applications)
Alt + F2 类似 Windows 下的 Win + R 组合键,在 GNOME 中运行应用程序
Ctrl + Alt + D 类似 Windows 下的 Win + D 组合键,显示桌面
Ctrl + Alt + L 锁定桌面并启动屏幕保护程序
Alt + Tab 同 Windows 下的 Alt + Tab 组合键,在不同程序窗口间切换
PrintScreen 全屏抓图
Alt + PrintScreen 当前窗口抓图
Ctrl + Alt + → / ← 在不同工作台间切换
Ctrl + Alt + Shift + → / ← 移动当前窗口到不同工作台
Ctrl+Alt+Fn 终端 N 或模拟终端 N(n 和 N 为数字 1-6)
Ctrl+Alt+F7 返回桌面
窗口操作快捷键
Alt + F4 关闭窗口
Alt + F5 取消最大化窗口 (恢复窗口原来的大小)
Alt + F7 移动窗口 (注: 在窗口最大化的状态下无效)
Alt + F8 改变窗口大小 (注: 在窗口最大化的状态下无效)
Alt + F9 最小化窗口
Alt + F10 最大化窗口
Alt + 空格键 打开窗口的控制菜单 (点击窗口左上角图标出现的菜单)
文件浏览器
Ctrl+N 新建窗口
Ctrl + Shift + W 关闭所有文件浏览器
Ctrl + 1/2 改变文件夹视图查看方式,图标视图/列表视图
Alt + → / ← 后退/前进
Alt + ↑/↓ 移动到父文件夹/选择的文件夹
Alt + Home 直接移动到主文件夹
F9 开关显示隐藏 Nautilus 侧边栏
Ctrl+H 显示隐藏文件(切换键)
Shift+Ctrl+N 新建文件夹, 很有用
Alt + Enter 查看选择文件/文件夹的属性,代替单击右键选择属性
Ctrl+Page Up 上一个标签
Ctrl+Page Down 下一个标签
Alt+N 切换到第 N 个标签(N 为数字)
关机和重启命令
Shutdown
Reboot
Halt
poweroff
grep和管道符
昨天的时候 leader 给我出了道问题:
找出文件夹下包含 “aaa” 同时不包含 “bbb”的文件,然后把他们重新生成一下。要求只能用一行命令。
我对 Linux 是个白痴,工作了之后才开始接触的,会用的命令只有那几个常用的。这个问题对我来说就有
点难度,我只是大概知道查找文件用 grep ,其他的就不知道了。不过没关系,用 Google ,查找到 grep
的完整用法:
1、grep -l ‘boss’ * 显示所有包含 boss 的文件名。
2、grep -n ‘boss’ file 在匹配行之前加行号。
3、grep -i ‘boss’ file 显示匹配行,boss 不区分大小写。
4、grep -v ‘boss’ file 显示所有不匹配行。
5、grep -q ‘boss’ file 找到匹配行,但不显示,但可以检查 grep 的退出状态。(0 为匹配成功)
6、grep -c ‘boss’ file 只显示匹配行数(包括 0)。
7、grep “$boss” file 扩展变量 boss 的值再执行命令。
8、ps -ef|grep “^*user1″ 搜索 user1 的命令,即使它前面有零个或多个空格。
9、ps -e|grep -E ‘grant_server|commsvr|tcpsvr|dainfo’ 查找多个字符串的匹配(grep -E 相当于 egrep)
(来源:蓝森林)
了解了 grep 的参数之后,问题就解决了一半了,因为可以搜索出符合条件的文件了。不过光有 grep 还是
不行,因为要把搜索出来的文件名作为参数传给 generate 命令。OK,接下来该管道符出场了。
即使是像我这样对 Linux 只是有一点了解的人也经常用到管道符,比如“|”,示例: ls -a | more 。但是对
于管道符的具体意义和它做了什么我就不知道了,没关系,Google 一下,找到一些资料:
利用 Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。
连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命
令的输入,依此类推。
所以查找的时候可以这样写:
grep -rl “aaa” * | grep -v “bbb”
这样右边的命令就可以从前面的结果中筛选了。然后还有 generate 命令,因为生成文件的命令格式是这
样的:
generate 文件名
不过如果直接使用 generate grep -rl “aaa” * | grep -v “bbb” 的话会出错,因为命令会从左向右执行,这条
命令就会把 grep 作为一个文件名来看待。怎么办呢?这个时候就要使用 · (键盘上数字键 1 旁边的那个符
号,和“~”在一个按键上)来做命令替换了,用 · 把后面的 grep 命令包起来就好了,这样:
generate ·grep -rl “aaa” * | grep -v “bbb”·
然后就搞定了。
工作一段时间之后,越来越喜欢 Linux 的哲学了,它有很多命令,看起来功能都不是那么强劲,但是如果
你开动脑筋把这些命令组合起来的话,就能实现 很多让你意想不到的功能,有时候你忍不住惊呼:实在
是太 coooool 了! 这对于像我这种被 Windows 的傻瓜式操作惯坏了的人来说,是个福音,以后要多多开
动生锈了的大脑。如果单纯使用电脑的话,还是 Windows 好用,但 是对于程序员,最好还是多玩玩 Linux。
BTW,现在也越来越喜欢使用 VIM 了,虽然刚开始用的时候就觉得它是个记事本~囧~~ 以前总听说“真正
的牛人编码都是用记事本编写的”,当时就觉得这些人实在太厉害了,代码提示和自动补全都不用,现在
想想,可能是外行看到他们使用灵活+强 大的 VIM 或者 EMACS 了吧。^_^
我的补充:
查找包含 logField 又包含 open 的文件:
用 grep "logFileId" *.tbc|grep "open"
二、 磁盘管理
文件系统配置文件
/etc/filesystems:系统指定的测试挂载文件系统类型
/proc/filesystems:Linux 系统已经加载的文件系统类型
/lib/modules/2.6.18-274.el5/kernel/fs/ 文件系统类型的驱动所在目录
/etc/fstab
/etc/mtab
linux 文件类型的颜色
linux文件颜色的含义:蓝色代表目录 绿色代表可执行文件 红色表示压缩文件 浅蓝色表示链接文件 灰
色表示其他文件 红色闪烁表示链接的文件有问题了 黄色表示设备文件
蓝色文件----------目录
白色文件----------一般性文件,如文本文件,配置文件,源码文件等
浅蓝色文件----------链接文件,主要是使用 ln 命令建立的文件
绿色文件----------可执行文件,可执行的程序
红色文件-----------压缩文件或者包文件
Linux 下用字符表示的文件类型
-:普通文件
d:目录文件
l:链接文件
b:块设备文件
c:字符设备文件
p:管道文件
文件系统操作命令
df:列出文件系统的整体磁盘使用情况
[root@centos57 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
16G 4.2G 11G 28% /
/dev/sda1 99M 13M 81M 14% /boot
tmpfs 1005M 0 1005M 0% /dev/shm
[root@centos57 ~]# df -i
文件系统 Inode (I)已用 (I)可用 (I)已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
4186112 154441 4031671 4% /
/dev/sda1 26104 36 26068 1% /boot
tmpfs 257210 1 257209 1% /dev/shm
.host:/ 0 0 0 - /mnt/hgfs
du:列出目录所占空间
du -sh 显示当前目录大小
du –sh / 显示/目录下的所有目录大小
dumpe2fs:显示当前的磁盘状态
ln:连接文件(快捷方式)
ln –sf 源文件 目标文件
不加任何参数就进行连接,就是 hard link,加上-s 就是 Symbolic link,hard link 不支持目录和跨文件系统。
Fdisk
Fdisk 不支持大于 2T 的磁盘
Fdisk –l 显示系统中的所有分区内容
[root@centos57 ~]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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 2610 20860402+ 8e Linux LVM
[root@centos57 ~]# fdisk /dev/sda2
Parted:2T以上磁盘分区工具
支持大于 2T 的磁盘,2T 以下的最好还是用 Fdisk 来分区。
[root@centos57 aixi]# parted /dev/hda print
Model: VMware Virtual IDE Hard Drive (ide)
Disk /dev/hda: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system 标志
1 32.3kB 101MB 101MB 主分区 ext3
2 101MB 357MB 256MB 主分区 linux-swap
# parted /dev/hda rm 2 删除第 2 个分区
# parted /dev/hda mkpart primary ext3 120MB 200MB 创建分区,primary 代表主分区,还可以是
extended 扩展分区,logical 逻辑分区;ext3 代表分区类型,120MB 是开始位置,最好是接上一分区的结束位
置,200M 是结束位置
partprobe :更新分区表/磁盘
用于重读分区表,当出现删除文件后,出现仍然占用空间。可以 partprobe 在不重启的情况下重读分区
# partprobe
这个命令执行完毕之后不会输出任何返回信息,你可以使用 mke2fs 命令在新的分区上创建文件系统。
Mkfs:磁盘格式化
Mkfs –t 文件系统格式 设备文件名(盘符)
[root@centos57 ~]# mkfs -t ext3 /dev/hda1
e2label:设置磁盘卷标
e2label 设备名称 新 label 名称,可以用 dumpe2fs 查看卷标
[root@centos57 ~]# e2label /dev/hda1 aixi
Mount:挂载磁盘
命令格式:
mount [-t vfstype] [-o options] device dir
mount –o remount,rw,auto / 重新挂载
mount –n –o remount,rw / 重新挂载根目录,设置为可读写
其中:
1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
DOS fat16 文件系统:msdos
Windows 9x fat32 文件系统:vfat
Windows NT ntfs 文件系统:ntfs
Mount Windows 文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
3.device 要挂接(mount)的设备。
4.dir 设备在系统上的挂接点(mount point)。
挂接光盘镜像文件
1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。
#cp /dev/cdrom /home/sunky/mydisk.iso 或
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso
注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso
2、将文件和目录制作成光盘镜像文件,执行下面的命令。
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
注:这条命令将/home/sunky/mydir 目录下所有的目录和文件制作成光盘镜像文件
/home/sunky/mydisk.iso,光盘卷标为:mydisk
3、光盘镜像文件的挂接(mount)
#mkdir /mnt/vcdrom
注:建立一个目录用来作挂接点(mount point)
#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
注:使用/mnt/vcdrom 就可以访问盘镜像文件 mydisk.iso 里的所有文件了。
挂接移动硬盘
对 linux 系统而言,USB 接口的移动硬盘是当作 SCSI 设备对待的。插入移动硬盘之前,应先用 fdisk –l 或
more /proc/partitions 查看系统的硬盘和硬盘分区情况。
[root at pldyrouter /]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
在这里可以清楚地看到系统有一块 SCSI 硬盘/dev/sda 和它的四个磁盘分区/dev/sda1 -- /dev/sda4,
/dev/sda5 是分区/dev/sda4 的逻辑分区。接好移动硬盘后,再用 fdisk –l 或 more /proc/partitions 查看系统
的硬盘和硬盘分区情况
[root at pldyrouter /]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
Disk /dev/sdc: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 510 4096543+ 7 HPFS/NTFS
/dev/sdc2 511 4864 34973505 f Win95 Ext'd (LBA)
/dev/sdc5 511 4864 34973473+ b Win95 FAT32
大家应该可以发现多了一个 SCSI 硬盘/dev/sdc 和它的两个磁盘分区/dev/sdc1?、/dev/sdc2,其中/dev/sdc5
是/dev/sdc2 分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1 和/dev/sdc5。
#mkdir -p /mnt/usbhd1
#mkdir -p /mnt/usbhd2
注:建立目录用来作挂接点(mount point)
#mount -t ntfs /dev/sdc1 /mnt/usbhd1
#mount -t vfat /dev/sdc5 /mnt/usbhd2
注:对 ntfs 格式的磁盘分区应使用-t ntfs 参数,对 fat32 格式的磁盘分区应使用-t vfat 参数。若汉字
文件名显示为乱码或不显示,可以使用下面的命令格式。
#mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1
#mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2
linux 系统下使用 fdisk 分区命令和 mkfs 文件系统创建命令可以将移动硬盘的分区制作成 linux 系统所特
有的 ext2、ext3 格式。这样,在 linux 下使用就更方便了。使用下面的命令直接挂接即可。
#mount /dev/sdc1 /mnt/usbhd1
挂接U盘
和 USB 接口的移动硬盘一样对 linux 系统而言 U 盘也是当作 SCSI 设备对待的。使用方法和移动硬盘完全
一样。插入 U 盘之前,应先用 fdisk –l 或 more /proc/partitions 查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
插入 U 盘后,再用 fdisk –l 或 more /proc/partitions 查看系统的硬盘和硬盘分区情况。
[root at pldyrouter root]# fdisk -l
Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes
255 heads, 63 sectors/track, 8924 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 4 32098+ de Dell Utility
/dev/sda2 * 5 2554 20482875 7 HPFS/NTFS
/dev/sda3 2555 7904 42973875 83 Linux
/dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)
/dev/sda5 7905 8924 8193118+ 82 Linux swap
Disk /dev/sdd: 131 MB, 131072000 bytes
9 heads, 32 sectors/track, 888 cylinders
Units = cylinders of 288 * 512 = 147456 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 * 1 889 127983+ b Win95 FAT32
Partition 1 has different physical/logical endings:
phys=(1000, 8, 32) logical=(888, 7, 31)
系统多了一个 SCSI 硬盘/dev/sdd 和一个磁盘分区/dev/sdd1,/dev/sdd1 就是我们要挂接的 U 盘。
#mkdir -p /mnt/usb
注:建立一个目录用来作挂接点(mount point)
#mount -t vfat /dev/sdd1 /mnt/usb
注:现在可以通过/mnt/usb 来访问 U 盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。
#mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb
挂接Windows文件共享
Windows 网络共享的核心是 SMB/CIFS,在 linux 下要挂接(mount)windows 的磁盘共享,就必须安装和使
用 samba 软件包。现在流行的 linux 发行版绝大多数已经包含了 samba 软件包,如果安装 linux 系统时未安
装 samba 请首先安装 samba。当然也可以到 www.samba.org 网站下载......新的版本是 3.0.10 版。
当 windows 系统共享设置好以后,就可以在 linux 客户端挂接(mount)了,具体操作如下:
# mkdir –p /mnt/samba
注:建立一个目录用来作挂接点(mount point)
# mount -t smbfs -o username=administrator,password=pldy123
注:administrator 和 pldy123 是 ip 地址为 10.140.133.23 windows 计算机的一个用户名和密码,c$是这
台计算机的一个磁盘共享
如此就可以在 linux 系统上通过/mnt/samba 来访问 windows 系统磁盘上的文件了。以上操作在 redhat as
server 3、redflag server 4.1、suse server 9 以及 windows NT 4.0、windows 2000、windows xp、windows 2003
环境下测试通过。
挂接UNIX系统NFS文件共享
类似于 windows 的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是 NFS(网络文件系统),下面
我们就以 SUN Solaris2.8 和 REDHAT as server 3 为例简单介绍一下在 linux 下如何 mount nfs 网络共享。
在 linux 客户端挂接(mount)NFS 磁盘共享之前,必须先配置好 NFS 服务端。
1、Solaris 系统 NFS 服务端配置方法如下:
(1)修改 /etc/dfs/dfstab, 增加共享目录
share -F nfs -o rw /export/home/sunky
(2)启动 nfs 服务
# /etc/init.d/nfs.server start
(3)NFS 服务启动以后,也可以使用下面的命令增加新的共享
# share /export/home/sunky1
# share /export/home/sunky2
注:/export/home/sunky 和/export/home/sunky1 是准备共享的目录
2、linux 系统 NFS 服务端配置方法如下:
(1)修改 /etc/exports,增加共享目录
/export/home/sunky 10.140.133.23(rw)
/export/home/sunky1 *(rw)
/export/home/sunky2 linux-client(rw)
注:/export/home/目录下的 sunky、sunky1、sunky2 是准备共享的目录,10.140.133.23、*、 linux-client
是被允许挂接此共享 linux 客户机的 IP 地址或主机名。如果要使用主机名 linux-client 必须在服务端主机
/etc/hosts 文件里增加 linux-client 主机 ip 定义。格式如下:
10.140.133.23 linux-client
(2)启动与停止 NFS 服务
/etc/rc.d/init.d/portmap start (在 REDHAT 中 PORTMAP 是默认启动的)
/etc/rc.d/init.d/nfs start 启动 NFS 服务
/etc/rc.d/init.d/nfs stop 停止 NFS 服务
注:若修改/etc/export 文件增加新的共享,应先停止 NFS 服务,再启动 NFS 服务方能使新增加的共享
起作用。使用命令 exportfs -rv 也可以达到同样的效果。
3、linux 客户端挂接(mount)其他 linux 系统或 UNIX 系统的 NFS 共享
# mkdir –p /mnt/nfs
注:建立一个目录用来作挂接点(mount point)
#mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs
注:这里我们假设 10.140.133.9 是 NFS 服务端的主机 IP 地址,当然这里也可以使用主机名,但必须
在本机/etc/hosts 文件里增加服务端 ip 定义。/export/home/sunky 为服务端共享的目录。
如此就可以在 linux 客户端通过/mnt/nfs 来访问其它 linux 系统或 UNIX 系统以 NFS 方式共享出来的文件
了。以上操作在 redhat as server 3、redflag server4.1、suse server 9 以及 Solaris 7、Solaris 8、Solaris 9 for
x86&sparc 环境下测试通过。
权限问题:
假设 server 端的使用者 jack, user id 为 1818, gid 为 1818, client 端也有一个使用者 jack,但是 uid 及 gid
是 1818。client 端的 jack 希望能完全读写 server 端的 /home/jack 这个目录。server 端的 /etc/exports
是
这样写的:
/home/jack *(rw,all_squash,anonuid=1818,anongid=1818)
这个的配置文件的意思是,所有 client 端的使用者存取 server 端 /home/jack 这
目录时,都会 map 成 server 端的 jack (uid,gid=1818)。我 mount 的结果是
1. client 端的 root 可以完全存取该目录, 包括读、写、杀……等
2. client 端的 jack (uid,gid=1818) 我可以做:
rm -rf server_jack20 * * * * /usr/sbin/ntpdate 210.72.145.44
30 5 * * * /usr/sbin/ntpdate 210.72.145.44
※ 前面五个*号代表五个数字,数字的取值范围和含义如下:分钟(0-59) 小時(0-23) 日期(1-31)
月份(1-12) 星期(0-6)
八、 启动引导
1、Linux的启动流程
1) BIOS 自检
2) 启动 GRUB/LILO
3) 运行 Linux kernel 并检测硬件
4) 挂载根文件系统
5) 运行 Linux 系统的第一个进程 init(其 PID 永远为 1,是所有其它进程的父进程)
6) init 读取系统引导配置文件 /etc/inittab 中的信息进行初始化
7) 执行系统初始化脚本- /etc/rc.d/rc.sysinit,执行系统初始化(包括很多内容)
8) 根据指定的运行级别(runlevel)来运行服务器脚本程序,再执行脚本 /etc/rc.d/rc.local
9) 运行一些其他的特别服务,一般为 /sbin/mingetty 和 /etc/X11/prefdm
10) Linux 控制台(console)提示用户输入用户名、密码进行登陆。
总结:BIOS 初始化检查外围设备检查启动设备读区 MBR
2、在Linux中常用的启动引导工具:grub和lilo
在 Linux 和 WINDOWS 两系统并存时就需要安装 GRUB(Grand Unified Bootloader),GRUB 被广泛地
用于替代 lilo,GRUB 支持在启动时使用命令行模式,支持 md5 加密保护 还可以从 ext2/ext3、ReiseFS、JFS、
FAT、minix 及 FFS 文件系统上启动其配置文件为/boot/grub/grub.conf,更改 grub.conf 即可立时生效如果
硬盘上的 MBR 被更动过,可以用/sbin/grub-install /dev/hda 来重安装 grub 现在我们打开
/boot/grub/grub.conf 查看一下
# vim /boot/grub/grub.conf
内容如下:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-version.img
#boot=/dev/sda
default=0
#default=0 表示默认启动第一个系统,如果系统有两个系统是用什么做为分隔符的呢?title 就是系统的分
隔符,第一个 title 后面就是第一个系统,用 0 表示。
timeout=5
#timout=5,就是默认在启动选择界面停留的时间,单位是秒。等待 5 秒自动进入默认操作系统
splashimage=(hd0,0)/grub/splash.xpm.gz
#splashimage 是 grub 启动背景画面,如果是自己写 grub.conf 文件,这个可以不用写。
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-53.el5)
#title 后面就是系统在启动时候显示的名字
root (hd0,0)
#root 启动文件所在位置
kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
#kernel 内核所在位置和名字
initrd /initrd-2.6.18-53.el5.img
#initrd 内核镜象的名字
grub.conf 的范例:
timeout=10 #等待 10 秒自动进入默认操作系统
splashimage=(hd0,0)/grub/splash.xpm.gz #grub 启动背景画面
default=0 #默认进入第一个标题
title Red Hat Linux (2.4.20-18) #Red Hat Linux 标题
root (hd0,0) #根文件系统位置
kernel /vmlinuz-2.4.20-18 ro root=LABEL=/ #核心位置与核心加载参数
initrd /initrd-2.4.20-18.img #启动 initrd ram 盘
title windows #另一个操作系统的标题
rootnoverify (hd0,1) #操作系统存放在 hd0,1 上,不要在 grub 里 mount
chainloader +1 #从 hd0,1 的第一个扇面启动
九、 运行级别
1、Linux 系统的运行级别(runlevel)
Linux 系统有 7 个运行级别,Linux 系统任何时候都运行在一个指定的运行级别上,不同的运行级
别所运行的程序和服务不尽相同,所要完成的工作和要达到的目的也不相同
· 运行级别 0 系统停机(halt)状态,系统的默认运行级别不能设为 0,否则不能正常启动
· 运行级别 1 单用户工作(single user)状态,root 权限,用于系统维护,禁止远程登陆
· 运行级别 2 多用户(multiuser)状态 (没有 NFS)
· 运行级别 3 完全的多用户(multiuser)状态 (有 NFS),登陆后进入控制台命令行模式
· 运行级别 4 系统未使用,保留
· 运行级别 5 X11 控制台 (xdm、gdm、kdm),登陆后进入图形 GUI 模式
· 运行级别 6 系统正常关闭并重启(reboot),默认运行级别不能设为 6,否则不能正常启动
2、运行级别的原理
在目录 /etc/rc.d/init.d 下有许多服务器脚本程序,一般称为服务(service), 在 /etc/rc.d 下
有 7 个名为 rcN.d 的目录,其中 N=0-6,对应于系统的 7 个运行级别, rcN.d 目录下,都是
一些符号链接文件,这些链接文件都指向 init.d 目录下的 service 脚本文件,这些链接文件的命
名规则是 "K+nn+服务名" 或 "S+nn+服务名",其中 nn 为 2 位数字:
例: rc3.d 目录下的链接文件 S80sendmail 就指向 service 脚本文件 ../init.d/sendmail
系统会根据指定的 runlevel 进入对应的 rcN.d 目录,并按照文件名顺序检索目录下的链接文件
• 对于以 K 为开头的链接文件,系统将终止对应的服务
• 对于以 S 为开头的链接文件,系统将启动对应的服务
通过这种方式来实现 "不同的运行级别运行不同的程序和服务"
3、/etc/inittab配置文件详解
init 的进程号是 1,从这一点就能看出,init 进程是系统所有进程的起点,Linux 在完成核内引导以后,
就开始运行 init 程序,init 程序需要读取设置文件/etc/inittab。inittab 是个不可执行的文本文件,他有若
干行指令所组成。在 Redhat 系统中,inittab 的内容如下所示(以“###"开始的中注释为笔者增加的):
(如果你改变了 inittab 文件,那么要使他立即生效,需要使用一个命令:init q)
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
###表示当前缺省运行级别为 5(initdefault);
id:5:initdefault:
###启动时自动执行/etc/rc.d/rc.sysinit 脚本(sysinit)
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
###当运行级别为 5 时,以 5 为参数运行/etc/rc.d/rc 脚本,init 将等待其返回(wait)
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
###在启动过程中允许按 CTRL-ALT-DELETE 重启系统
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
###在 2、3、4、5 级别上以 ttyX 为参数执行/sbin/mingetty 程序,打开 ttyX 终端用于用户登录,
###如果进程退出则再次运行 mingetty 程序(respawn)
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
###在 5 级别上运行 xdm 程序,提供 xdm 图像方式登录界面,并在退出时重新执行(respawn)
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
以上面的 inittab 文件为例,来说明一下 inittab 的格式。其中以#开始的行是注释行,除了注释行之
外,每一行都有以下格式:
id:runlevel:action:process
对上面各项的周详解释如下:
1. id
id 是指入口标识符,他是个字符串,对于 getty 或 mingetty 等其他 login 程序项,需求 id 和 tty 的编
号相同,否则 getty 程序将不能正常工作。
2. runlevel
runlevel 是 init 所处于的运行级别的标识,一般使用 0-6 及 S 或 s。0、1、6 运行级别被系统保留:
其中 0 作为 shutdown 动作,1 作为重启至单用户模式,6 为重启;S 和 s 意义相同,表示单用户模式,
且无需 inittab 文件,因此也不在 inittab 中出现,实际上,进入单用户模式时,init 直接在控制台
(/dev/console)上运行/sbin/sulogin。在一般的系统实现中,都使用了 2、3、4、5 几个级别,在 Redhat
系统中,2 表示无 NFS 支持的多用户模式,3 表示完全多用户模式(也是最常用的级别),4 保留给用户
自定义,5 表示 XDM 图像登录方式。7- 9 级别也是能使用的,传统的 Unix 系统没有定义这几个级别。
runlevel 能是并列的多个值,以匹配多个运行级别,对大多数 action 来说,仅当 runlevel 和当前运行级
别匹配成功才会执行。
3. action
action 是描述其后的 process 的运行方式的。action 可取的值包括:initdefault、sysinit、boot、bootwait
等:
initdefault是个特别的action值,用于标识缺省的启动级别;当init由核心激活以后,他将读取inittab
中的 initdefault 项,取得其中的 runlevel,并作为当前的运行级别。如果没有 inittab 文件,或其中没有
initdefault 项, init 将在控制台上请求输入 runlevel。
sysinit、boot、bootwait 等 action 将在系统启动时无条件运行,而忽略其中的 runlevel。
其余的 action(不含 initdefault)都和某个 runlevel 相关。各个 action 的定义在 inittab 的 man 手册
中有周详的描述。
4. process
process 为具体的执行程序。程序后面能带参数。
第三部分:系统初始化
在 init 的设置文件中有这么一行:
si::sysinit:/etc/rc.d/rc.sysinit
他调用执行了/etc/rc.d/rc.sysinit,而 rc.sysinit 是个 bash shell 的脚本,他主要
在 init 的设置文件中有这么一行:
si::sysinit:/etc/rc.d/rc.sysinit
他 调用执行了/etc/rc.d/rc.sysinit,而 rc.sysinit 是个 bash shell 的脚本,他主要是完成一些系统初始化的
工作,rc.sysinit 是每一个运行级别都要首先运行的重要脚本。他主要完成的工作有:激活交换分区,检
查磁盘,加载硬件模块及其他一些需要优先执行任务。
rc.sysinit 约有 850 多行,不过每个单一的功能还是比较简单,而且带有注释,建议有兴趣的用户能自行
阅读自己机器上的该文件,以了解系统初始化所周详情况。由于此文件较长,所以不在本文中列出来,
也不做具体的介绍。
当 rc.sysinit 程序执行完毕后,将返回 init 继续下一步。
第四部分:启动对应运行级别的守护进程
在 rc.sysinit 执行后,将返回 init 继续其他的动作,通常接下来会执行到/etc/rc.d/rc 程序。以运行级别 5
为例,init 将执行设置文件 inittab 中的以下这行:
l5:5:wait:/etc/rc.d/rc 5
这一行表示以 5 为参数运行/etc/rc.d/rc,/etc/rc.d/rc 是个 Shell 脚本,他接受 5 作为参数,去执行/etc/rc.d
/rc5.d/目录下的所有的 rc 启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些链接文件,
而不是真正的 rc 启动脚本,真正的 rc 启动脚本实际上都是放在/etc/rc.d/init.d/目录下。而这些 rc 启动
脚本有着类似的用法,他们一般能接受 start、stop、 restart、status 等参数。
/etc/rc.d/rc5.d/中的 rc 启动脚本通常是 K 或 S 开头的链接文件,对于以以 S 开头的启动脚本,将以 start
参数来运行。而如果发现存在相应的脚本也存在 K 打头的链接,而且已处于运行态了(以/var/lock/subsys/
下的文件作为标志),则将首先以 stop 为参数停止这些已启动了的守护进程,然后再重新运行。这样做
是为了确保是当 init 改动运行级别时,所有相关的守护进程都将重启。
至于在每个运行级中将运行哪些守护进程,用户能通过 chkconfig 或 setup 中的"System Services"来自行
设定。常见的守护进程有:
amd:自动安装 NFS 守护进程
apmd:高级电源管理守护进程
arpwatch:记录日志并构建一个在 LAN 接口上看到的以太网地址和 IP 地址对数据库
autofs:自动安装管理进程 automount,和 NFS 相关,依赖于 NIS
crond:Linux 下的计划任务的守护进程
named:DNS 服务器
netfs:安装 NFS、Samba 和 NetWare 网络文件系统
network:激活已设置网络接口的脚本程序
nfs:打开 NFS 服务
portmap:RPC portmap 管理器,他管理基于 RPC 服务的连接
sendmail:邮件服务器 sendmail
smb:Samba 文件共享/打印服务
syslog:一个让系统引导时起动 syslog 和 klogd 系统日志守候进程的脚本
xfs:X Window 字型服务器,为本地和远程 X 服务器提供字型集
Xinetd:支持多种网络服务的核心守护进程,能管理 wuftp、sshd、telnet 等服务
这些守护进程也启动完成了,rc 程序也就执行完了,然后又将返回 init 继续下一步。
第五部分:建立终端
rc 执行完毕后,返回 init。这时基本系统环境已设置好了,各种守护进程也已启动了。init 接下来会打
开 6 个终端,以便用户登录系统。通过按 Alt+Fn(n 对应 1-6)能在这 6 个终端中转换。在 inittab 中的以下
6 行就是定义了 6 个终端:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
从上面能看出在 2、3、4、5 的运行级别中都将以 respawn 方式运行 mingetty 程序,mingetty 程序能打
开终端、设置模式。同时他会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个
登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给 login 程序来验证用户的身份。
第六部分:登录系统,启动完成
对于运行级别为 5 的图像方式用户来说,他们的登录是通过一个图像化的登录界面。登录成功后能直接
进入 KDE、Gnome 等窗口管理器。而本文主要讲的还是文本方式登录的情况:
当我们看到 mingetty 的登录界面时,我们就能输入用户名和密码来登录系统了。
Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。然后 login 会
对用户名进行分析:如果用户名不是 root,且存在/etc/nologin 文件,login 将输出 nologin 文件的内容,
然后退出。这通常用来系统维护时防止非 root 用户登录。只有/etc/securetty 中登记了的终端才允许 root
用户登录,如果不存在这个文件,则 root 能在所有终端上登录。/etc /usertty 文件用于对用户作出附加
访问限制,如果不存在这个文件,则没有其他限制。
在分析完用户名后,login 将搜索/etc/passwd 及/etc/shadow 来验证密码及设置账户的其他信息,比如:
主目录是什么、使用何种 shell。如果没有指定主目录,将默认为根目录;如果没有指定 shell,将默认
为/bin/bash。
login 程序成功后,会向对应的终端在输出最近一次登录的信息(在/var/log/lastlog 中有记录),并检查用
户是否有新邮件(在/usr/spool /mail/的对应用户名目录下)。然后开始设置各种环境变量:对于 bash 来说,
系统首先寻找/etc/profile 脚本文件,并执行他;然后如果用户的主目录中存在.bash_profile 文件,就执
行他,在这些文件中又可能调用了其他设置文件,所有的设置文件执行后后,各种环境变量也设好了,
这时会出现大家熟悉的命令行提示符,到此整个启动过程就结束了。
4、相关命令
4.1、查看当前系统运行等级
[root@test ~]# runlevel
N 5
4.2、切换系统运行等级
#init N
# init 0
# init 6
十、 进程管理
进程就是运行中的程序,一个运行着的程序,可能有多个进程。 比如 LinuxSir.Org 所用的 WWW
服务器是 apache 服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户来同时请
求 httpd 服务,apache 服务器将会创建有多个 httpd 进程来对其进行服务。
1、 进程分类
进程一般分为交互进程、批处理进程和守护进程三类。
值得一提的是守护进程总是活跃的,一般是后台运行,守护进程一般是由系统在开机时通过脚本自
动激活启动或超级管理用户 root 来启动。比如在 Fedora 或 Redhat 中,我们可以定义 httpd 服务器的启
动脚本的运行级别,此文件位于/etc/init.d 目录下,文件名是 httpd,/etc/init.d/httpd 就是 httpd 服务器
的守护程序,当把它的运行级别设置为 3 和 5 时,当系统启动时,它会跟着启动。
[root@localhost ~]# chkconfig --level 35 httpd on
由于守护进程是一直运行着的,所以它所处的状态是等待请求处理任务。比如,我们是不是访问
LinuxSir.Org ,LinuxSir.Org 的 httpd 服务器都在运行,等待着用户来访问,也就是等待着任务处理。
2、进程的属性
进程 ID(PID):是唯一的数值,用来区分进程;
父进程和父进程的 ID(PPID);
启动进程的用户 ID(UID)和所归属的组(GID);
进程状态:状态分为运行 R、休眠 S、僵尸 Z;
进程执行的优先级;
进程所连接的终端名;
进程资源占用:比如占用资源大小(内存、CPU 占用量);
3、父进程和子进程
他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进
程并不一定终止。比如 httpd 服务器运行时,我们可以杀掉其子进程,父进程并不会因为子进程的终止
而终止。
在进程管理中,当我们发现占用资源过多,或无法控制的进程时,应该杀死它,以保护系统的稳定
安全运行
4、进程管理命令
4.1、ps
ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,
应该用 top 工具。
4.1.1、 ps 的参数说明:
ps 提供了很多的选项参数,常用的有以下几个;
l 长格式输出;
u 按用户名和启动时间的顺序来显示进程;
j 用任务格式来显示进程;
f 用树形格式来显示进程;
a 显示所有用户的所有进程(包括其它用户);
x 显示无控制终端的进程;
r 显示运行中的进程;
ww 避免详细参数被截断;
我们常用的选项是组合是 aux 或 lax,还有参数 f 的应用;
ps aux 或 lax 输出的解释;
USER 表示启动进程用户。PID 表示进程标志号。%CPU 表示运行该进程占用 CPU 的时间与该进
程总的运行时间的比例。%MEM 表示该进程占用内存和总内存的比例。VSZ 表示占用的虚拟内存大
小,以 KB 为单位。RSS 为进程占用的物理内存值,以 KB 为单位。TTY 表示该进程建立时所对应的
终端,"?"表示该进程不占用终端。STAT 表示进程的运行状态,包括以下几种代码:D,不可中断的
睡眠;R,就绪(在可运行队列中);S,睡眠;T,被跟踪或停止;Z,终止(僵死)的进程,Z 不
存在,但暂时无法消除;W,没有足够的内存分页可分配;<高优先序的进程;N,低优先序的进程;
L,有内存分页分配并锁在内存体内(实时系统或 I/O)。START 为进程开始时间。TIME 为执行的时
间。COMMAND 是对应的命令名。
4.1.2 ps 应用举例
实例一:ps aux 最常用
[root@localhost ~]# ps -aux |more
可以用 | 管道和 more 连接起来分页查看;
[root@localhost ~]# ps aux > ps001.txt
[root@localhost ~]# more ps001.txt
这里是把所有进程显示出来,并输出到 ps001.txt 文件,然后再通过 more 来分页查看;
实例二:和 grep 结合,提取指定程序的进程;
[root@localhost ~]# ps aux |grep httpd
root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd
apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 /usr/sbin/httpd
apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
root 4480 0.0 0.0 5160 708 pts/3 R+ 12:20 0:00 grep httpd
实例二:父进和子进程的关系友好判断的例子
[root@localhost ~]# ps auxf |grep httpd
root 4484 0.0 0.0 5160 704 pts/3 S+ 12:21 0:00 \_ grep
httpd
root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd
apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
这里用到了 f 参数;父与子关系一目了然;
例三:找出消耗内存最多的前 10 名进程
# ps -auxf | sort -nr -k 4 | head -10
例四:找出使用 CPU 最多的前 10 名进程
# ps -auxf | sort -nr -k 3 | head -10
4.2、pstree
功能:pstree 命令列出当前的进程,以及它们的树状结构。
格式:pstree [选项] [pid|user]
主要选项如下:
-a:显示执行程序的命令与完整参数。
-c:取消同名程序,合并显示。
-h:对输出结果进行处理,高亮显示正在执行的程序。
-l:长格式显示。
-n:以 PID 大小排序。
-p:显示 PID。
-u:显示 UID 信息。
-G:使用 VT100 终端编码显示。
-U:使用 UTF-8(Unicode)编码显示。
说明:使用 ps 命令得到的数据精确,但数据庞大,这一点对掌握系统整体概况来说是不容易的。pstree
正好可以弥补这个缺憾。它能将当前的执行程序以树状结构显示。pstree 支持指定特定程序(PID)
或使用者(USER)作为显示的起始。
应用实例如下。
进程启动的时候可能会产生自己的一个子进程。运行 pstree 命令就可以很容易地看到这些信息。以超
级用户权限运行 pstree:
#init-+-apmd
|-atd
|-bdflush
|-gconfd-2
|-gdm-binary---gdm-binary-+-X
| `-startkde-+-kwrapper
| `-ssh-agent
|-gpm
|-httpd---8*[httpd]
……下略
命令对程序名称相同的会自动合并,所有"|-httpd---8*[httpd]"即表示系统中有 8 个 httpd 进程产生的
子进程。
4.3、top
top 命令用来显示系统当前的进程状况。
格式:top [选项]
主要选项如下。
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则 top 命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将已完成或消失的子进程的 CPU 时间累积起来。
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的进程。
n:显示更新的次数,完成后将会退出 top。
说明:top 命令和 ps 命令的基本作用是相同的,都显示系统当前的进程状况。但是 top 是一个动态显
示过程,即可以通过用户按键来不断刷新当前状态。这里结合下图来说明它给出的信息。
第一行表示的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。
第二行显示的是 Tasks: 114 total 进程总数、2 running 正在运行的进程数、110 sleeping 睡眠的进程数、
0 stopped 停止的进程数、2 zombie 僵尸进程数
第三行显示的是目前 CPU 的使用情况,Cpu(s): 0.3% us 用户空间占用 CPU 百分比、1.0% sy 内核空间
占用 CPU 百分比、0.0% ni 用户进程空间内改变过优先级的进程占用 CPU 百分比、98.7% id 空
闲 CPU 百分比、0.0% wa 等待输入输出的 CPU 时间百分比、0.0% hi、0.0% si
第四行显示物理内存的使用情况,Mem: 191272k total 物理内存总量、173656k used 使用的物理内存
总量、17616k free 空闲内存总量、22052k buffers 用作内核缓存的内存量
第五行显示交换分区使用情况,Swap: 192772k total 交换区总量、0k used 使用的交换区总量、192772k
free 空闲交换区总量、123988k cached 缓冲的交换区总量、内存中的内容被换出到交换区,
而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的
交换区的大小。相应的内存再次被换出时可不必再对交换区写入。
第六行显示的项目最多,下面列出了详细解释。
PID(Process ID):进程标志号,是非零正整数。USER:进程所有者的用户名。PR:进程的优先级别。
NI:进程的优先级别数值。VIRT:进程占用的虚拟内存值。RES:进程占用的物理内存值。SHR:进程
使用的共享内存值。STAT:进程的状态,其中 S 表示休眠,R 表示正在运行,Z 表示僵死状态,N 表
示该进程优先值是负数。%CPU:该进程占用的 CPU 使用率。%MEM:该进程占用的物理内存和总内
存的百分比。TIME:该进程启动后占用的总的 CPU 时间。COMMAND:进程启动的启动命令名称,如
果这一行显示不下,进程会有一个完整的命令行。
top 命令使用过程中,还可以使用一些交互的命令来完成其他参数的功能。这些命令是通过快捷键启
动的。
<空格>:立刻刷新。
A 分类显示系统不同资源的使用大户。有助于快速识别系统中资源消耗多的任务。
f 添加删除所要显示栏位.
o 调整所要显示栏位的顺序.
r 调整一个正在运行的进程 Nice 值.
k 结束一个正在运行的进程.
z 彩色/黑白显示开关
P:根据 CPU 使用大小进行排序。
T:根据时间、累计时间排序。
q:退出 top 命令。
m:切换显示内存信息。
t:切换显示进程和 CPU 状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc 文件中。这是写 top 配置文件的推荐方法。
可以看到,top 命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,
它的缺点是会消耗很多系统资源。
十一、 资源监控
1、free内存监控
语 法: free [-bkmotV][-s <间隔秒数>]
补充说明:free 指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以
及系统核心使用的缓冲区等。
参 数:
-b 以 Byte 为单位显示内存使用情况。
-k 以 KB 为单位显示内存使用情况。
-m 以 MB 为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况
第 1 行 Mem: total:表示物理内存总量。
used:表示总计分配给缓存(包含 buffers 与 cache )使用的数量,但其中可能部分缓存并未实际使
用。
free:未被分配的内存。
shared:共享内存,一般系统不会用到,这里也不讨论。
buffers:系统分配但未被使用的 buffers 数量。
cached:系统分配但未被使用的 cache 数量。buffer 与 cache 的区别见后面。 total = used + free
第 2 行 -/+ buffers/cached: used:也就是第一行中的 used – buffers-cached 也是实际使用的内
存总量。
free:未被使用的 buffers 与 cache 和未被分配的内存之和,这就是系统当前实际可用内存。 free 2=
buffers1 + cached1 + free1
A buffer is something that has yet to be “written” to disk. A cache is something that has
been “read” from the disk and stored for later use 第 3 行: 第三行所指的是从应用程序角度
来看,对于应用程序来说,buffers/cached 是等于可用的,因为 buffer/cached 是为了提高文件读取
的性能,当应用程序需在用到内存的时候,buffer/cached 会很快地被回收。
所以从应用程序的角度来说,可用内存=系统 free memory+buffers+cached.
接下来解释什么时候内存会被交换,以及按什么方交换。
当可用内存少于额定值的时候,就会开会进行交换,如何看额定值(RHEL4.0):
#cat /proc/meminfo
交换将通过三个途径来减少系统中使用的物理页面的个数:
1.减少缓冲与页面 cache 的大小,
2.将系统 V 类型的内存页面交换出去,
3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用 swap 是不是影响到系统性能的。
下面是 buffers 与 cached 的区别:
buffers 是指用来给块设备做的缓冲大小,他只记录文件系统的 metadata 以及 tracking in-flight
pages.
cached 是用来给文件做缓冲。
那就是说:buffers 是用来存储,目录里面有什么内容,权限等等。
而 cached 直接用来记忆我们打开的文件 ,如果你想知道他是不是真的生效,你可以试一下,先后执行
两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。
实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文
件名。
#free
#man X
#free
#man X
#free
你可以先后比较一下 free 后显示 buffers 的大小。
另一个实验:
#free
#ls /dev
#free
你比较一下两个的大小,当然这个 buffers 随时都在增加,但你有 ls 过的话,增加的速度会变得快,
这个就是 buffers/chached 的区别。
因为 Linux 将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,
系统会自动释放(不像 windows 那样,即使你有很多空闲内存,他也要访问一下磁盘中的 pagefiles)
使用 free 命令
将 used 的值减去 buffer 和 cache 的值就是你当前真实内存使用 ————– 对操作系统 来讲是
Mem 的参数.buffers/cached 都是属于被使用,所以它认为 free 只有 16936 .
对应用程序 来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为 buffer/cached 是为 了
提高 程序执行的性能, 当程序使用内存时,buffer/cached 会很快地被使用。 所以,以应用来看看,
以(-/+ buffers/cache)的 free 和 used 为主.所以我们看这个就好了.另外告诉大家 一些常识.Linux
为了提高磁盘和内存存取效率, Linux 做了很多精心的设计, 除了对 dentry 进行缓存(用于 VFS,加速
文件路径名到 inode 的转换), 还采取了两种主要 Cache 方式:Buffer Cache 和 Page Cache。 前者针
对磁盘块的读写,后者针对文件 inode 的读写。这些 Cache 能有效缩短了 I/O 系统调用(比如
read,write,getdents)的时间。 记住内存是拿来用的,不是拿来看的. 不象 windows,无论你的真实物
理内存有多少,他都要拿硬盘交换 文件来读.这也就是 windows 为什么常常提示虚拟空间不足的原因.
你们想想,多无聊,在内存还有大部分 的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.
所以我们看 linux,只要不用 swap 的交换 空间,就不用担心自己的内存太少.如果常常 swap 用很多,可
能你就要考虑加物理内存了.这也是 linux 看 内存是否够用的标准哦.
[root@scs-2 tmp]# free
total used free shared buffers cached
Mem: 3266180 3250004 16176 0 110652 2668236
-/+ buffers/cache: 471116 2795064
Swap: 2048276 80160 1968116
下面是对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:第二行(mem)的 used/free 与第三行(-/+ buffers/cache) used/free 的区别。 这两个的区别在于使用
的角度来看,第一行是从 OS 的角度来看,因为对于 OS,buffers/cached 都是属于被使用,所以他的可
用内存是 16176KB,已用内存是 3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的
+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为
buffer/cached 是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached 会很快地被
回收。
所以从应用程序的角度来说,可用内存=系统 free memory+buffers+cached。
如上例:
2795064=16176+110652+2668236
接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进
行交换。
如何看额定值:
cat /proc/meminfo
[root@scs-2 tmp]# cat /proc/meminfo
MemTotal: 3266180 kB
MemFree: 17456 kB
Buffers: 111328 kB
Cached: 2664024 kB
SwapCached: 0 kB
Active: 467236 kB
Inactive: 2644928 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 3266180 kB
LowFree: 17456 kB
SwapTotal: 2048276 kB
SwapFree: 1968116 kB
Dirty: 8 kB
Writeback: 0 kB
Mapped: 345360 kB
Slab: 112344 kB
Committed_AS: 535292 kB
PageTables: 2340 kB
VmallocTotal: 536870911 kB
VmallocUsed: 272696 kB
VmallocChunk: 536598175 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB
用 free -m 查看的结果:
[root@scs-2 tmp]# free -m
total used free shared buffers cached
Mem: 3189 3173 16 0 107 2605
-/+ buffers/cache: 460 2729
Swap: 2000 78 1921
查看/proc/kcore 文件的大小(内存镜像):
[root@scs-2 tmp]# ll -h /proc/kcore
-r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore
备注:
占用内存的测量
测量一个进程占用了多少内存,linux 为我们提供了一个很方便的方法,/proc 目录为我们提供了所有的
信息,实际上 top 等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid 为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
输出解释
CPU 以及 CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4
dt(pages) 04
查看机器可用内存
/proc/28248/>free
total used free shared buffers cached
Mem: 1023788 926400 97388 0 134668 503688
-/+ buffers/cache: 288044 735744
Swap: 1959920 89608 1870312
我们通过 free 命令查看机器空闲内存时,会发现 free 的值很小。这主要是因为,在 linux 中有这么一种
思想,内存不用白不用,因此它尽可能的 cache 和 buffer 一些数据,以方便下次使用。但实际上这些内
存也是可以立刻拿来使用的。
所以 空闲内存=free+buffers+cached=total-used
2、vmstat
很显然从名字中我们就可以知道 vmstat 是一个查看虚拟内存(Virtual Memory)使用状况的工具,但
是怎样通过 vmstat 来发现系统中的瓶颈呢?在回答这个问题前,还是让我们回顾一下 Linux 中关于虚拟
内存相关内容。
2.1、虚拟内存运行原理
在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存
空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物
理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
在 Linux 内存管理中,主要是通过“调页 Paging”和“交换 Swapping”来完成上述的内存调度。调页算
法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整
个进程,而不是部分页面,全部交换到磁盘上。
分页(Page)写入磁盘的过程被称作 Page-Out,分页(Page)从磁盘重新回到内存的过程被称作 Page-In。当
内核需要一个分页时,但发现此分页不在物理内存中(因为已经被 Page-Out 了),此时就发生了分页错误
(Page Fault)。
当系统内核发现可运行内存变少时,就会通过 Page-Out 来释放一部分物理内存。经管 Page-Out 不是经
常发生,但是如果 Page-out 频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系
统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作 thrashing(颠簸)。
2.2、使用vmstat
1.用法
vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的 fork 数量 。
-m:显示 slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表 1000、1024、1000000、1048576 字节(byte)。
默认单位为 K(1024 bytes)
-V:显示 vmstat 版本信息。
2.3、实例
例子 1:每 2 秒输出一条结果
字段说明:
Procs(进程):
r: 运行的和等待(CPU 时间片)运行的进程数,这个值也可以判断是否需要增加 CPU(长期大于 1)
b: 等待 IO 的进程数量,处于不可中断状态的进程数,常见的情况是由 IO 引起的
Memory(内存):
swpd: 使用虚拟内存大小,切换到交换内存上的内存(默认以 KB 为单位)
如果 swpd 的值不为 0,或者还比较大,比如超过 100M 了,但是 si, so 的值长期为 0,这种情况我
们可以不用担心,不会影响系统性能。
free: 空闲的物理内存
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小,文件系统的 cache,如果 cache 的值大的时候,说明 cache 住的文件数
多,如果频繁访问到的文件都能被 cache 住,那么磁盘的读 IO bi 会非常小
Swap:
si: 每秒从交换区写到内存的大小,交换内存使用,由磁盘调入内存
so: 每秒写入交换区的内存大小,交换内存使用,由内存调入磁盘
内存够用的时候,这 2 个值都是 0,如果这 2 个值长期大于 0 时,系统性能会受到影响。磁盘 IO 和
CPU 资源都会被消耗。
常有人看到空闲内存(free)很少或接近于 0 时,就认为内存不够用了,实际上不能光看这一点的,还
要结合 si,so,如果 free 很少,但是 si,so 也很少(大多时候是 0),那么不用担心,系统性能这时不会受
到影响的。
IO:(现在的 Linux 版本块的大小为 1024bytes)
bi: 每秒读取的块数,从块设备读入的数据总量(读磁盘) (KB/s)
bo: 每秒写入的块数,写入到块设备的数据总理(写磁盘) (KB/s)
随机磁盘读写的时候,这 2 个 值越大(如超出 1M),能看到 CPU 在 IO 等待的值也会越大
system:
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
上面这 2 个值越大,会看到由内核消耗的 CPU 时间会越多
CPU(以百分比表示):
us: 用户进程消耗的 CPU 时间百分比,us 的值比较高时,说明用户进程消耗的 CPU 时间多,但是如
果长期超过 50% 的使用,那么我们就该考虑优化程序算法或者进行加速了
sy: 内核进程消耗的 CPU 时间百分比,sy 的值高时,说明系统内核消耗的 CPU 资源多,这并不是良
性的表现,我们应该检查原因。
id: CPU 处在空闲状态时间百分比(包括 IO 等待时间)
wa: IO 等待消耗的 CPU 时间百分比,wa 的值高时,说明 IO 等待比较严重,这可能是由于磁盘大量
作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。
例子 2:显示活跃和非活跃内存
使用-a 选项显示活跃和非活跃内存时,所显示的内容除增加 inact 和 active 外,其他显示内容与例子 1
相同。
字段说明:
Memory(内存):
inact: 非活跃内存大小(当使用-a 选项时显示)
active: 活跃的内存大小(当使用-a 选项时显示)
注:如果 r 经常大于 4,且 id 经常少于 40,表示 cpu 的负荷很重,如果 bi,bo 长期不等于 0,表示内
存不足,如果 disk 经常不等于 0,且在 b 中的队列大于 3,表示 io 性能不好。
CPU 问题现象:
1.)如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较
慢,有多数的进程等待 CPU.
2.)如果 r 的输出数大于系统中可用 CPU 个数的 4 倍的话,则系统面临着 CPU 短缺的问题,或者是 CPU 的速
率过低,系统中有多数的进程在等待 CPU,造成系统中进程运行过慢.
3.)如果空闲时间(cpu id)持续为 0 并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着 CPU 资源
的短缺.
解决办法:
当发生以上问题的时候请先调整应用程序对 CPU 的占用情况.使得应用程序能够更有效的使用 CPU.同
时可以考虑增加更多的 CPU. 关于 CPU 的使用情况还可以结合 mpstat, ps aux top prstat –a 等
等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情
况下,应用程序的问题会比较大一些.比如一些 SQL 语句不合理等等都会造成这样的现象.
内存问题现象:
内存的瓶颈是由 scan rate (sr)来决定的.scan rate 是通过每秒的始终算法来进行页扫描的.如果 scan
rate(sr)连续的大于每秒 200 页则表示可能存在内存缺陷.同样的如果 page 项中的 pi 和 po 这两栏表示每
秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个
别的时候不为 0 的话,属于正常的页面调度这个是虚拟内存的主要原理.
解决办法:
1.调节 applications & servers 使得对内存和 cache 的使用更加有效.
2.增加系统的内存.
3. Implement priority paging in s in pre solaris 8 versions by adding line "set priority paging=1" in
/etc/system. Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.
关于内存的使用情况还可以结 ps aux top prstat –a 等等一些相应的命令来综合考虑关于具体的内
存的使用情况,和那些进程在占用大量的内存.一般情况下,如果内存的占用率比较高,但是,CPU 的占用
很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用 CPU 时间,可以考虑
应用程序,对于未占用 CPU 时间和一些后台的程序,释放内存的占用
4.4、案例
案例学习:
1:在这个例子中,这个系统被充分利用
# vmstat 1
procs memory swap io system cpu
r b swpd free buff cache si so bi bo in cs us sy wa id
3 0 206564 15092 80336 176080 0 0 0 0 718 26 81 19 0 0
2 0 206564 14772 80336 176120 0 0 0 0 758 23 96 4 0 0
1 0 206564 14208 80336 176136 0 0 0 0 820 20 96 4 0 0
1 0 206956 13884 79180 175964 0 412 0 2680 1008 80 93 7 0 0
2 0 207348 14448 78800 175576 0 412 0 412 763 70 84 16 0 0
2 0 207348 15756 78800 175424 0 0 0 0 874 25 89 11 0 0
1 0 207348 16368 78800 175596 0 0 0 0 940 24 86 14 0 0
1 0 207348 16600 78800 175604 0 0 0 0 929 27 95 3 0 2
3 0 207348 16976 78548 175876 0 0 0 2508 969 35 93 7 0 0
4 0 207348 16216 78548 175704 0 0 0 0 874 36 93 6 0 1
4 0 207348 16424 78548 175776 0 0 0 0 850 26 77 23 0 0
2 0 207348 17496 78556 175840 0 0 0 0 736 23 83 17 0 0
0 0 207348 17680 78556 175868 0 0 0 0 861 21 91 8 0 1
根据观察值,我们可以得到以下结论:
1.有大量的中断(in) 和较少的上下文切换(cs).这意味着一个单一的进程在产生对硬件设备的请求.
2.进一步显示某单个应用,user time(us)经常在 85%或者更多.考虑到较少的上下文切换,这个应用应该
还在处理器中被处理.
3.运行队列还在可接受的性能范围内,其中有 2 个地方,是超出了允许限制.
2:在这个例子中,内核调度中的上下文切换处于饱和
# vmstat 1
procs memory swap io system cpu
r b swpd free buff cache si so bi bo in cs us sy wa id
2 1 207740 98476 81344 180972 0 0 2496 0 900 2883 4 12 57 27
0 1 207740 96448 83304 180984 0 0 1968 328 810 2559 8 9 83 0
0 1 207740 94404 85348 180984 0 0 2044 0 829 2879 9 6 78 7
0 1 207740 92576 87176 180984 0 0 1828 0 689 2088 3 9 78 10
2 0 207740 91300 88452 180984 0 0 1276 0 565 2182 7 6 83 4
3 1 207740 90124 89628 180984 0 0 1176 0 551 2219 2 7 91 0
4 2 207740 89240 90512 180984 0 0 880 520 443 907 22 10 67 0
5 3 207740 88056 91680 180984 0 0 1168 0 628 1248 12 11 77 0
4 2 207740 86852 92880 180984 0 0 1200 0 654 1505 6 7 87 0
6 1 207740 85736 93996 180984 0 0 1116 0 526 1512 5 10 85 0
0 1 207740 84844 94888 180984 0 0 892 0 438 1556 6 4 90 0
根据观察值,我们可以得到以下结论:
1.上下文切换数目高于中断数目,说明 kernel 中相当数量的时间都开销在上下文切换线程.
2.大量的上下文切换将导致 CPU 利用率分类不均衡.很明显实际上等待 io 请求的百分比(wa)非常高,
以及 user time 百分比非常低(us).
3.因为 CPU 都阻塞在 IO 请求上,所以运行队列里也有相当数目的可运行状态线程在等待执行.
3、iostat
用途:报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/
输出统计信息。
语法:iostat [ -c | -d ] [ -k ] [ -t | -m ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]
描述:iostat 命令用来监视系统输入/输出设备负载,这通过观察与它们的平均传送速率相关的物
理磁盘的活动时间来实现。iostat 命令生成的报告可以用来更改系统配置来更好地平衡物理磁盘和适配
器之间的输入/输出负载。
参数:-c 为汇报 CPU 的使用情况;-d 为汇报磁盘的使用情况;-k 表示每秒按 kilobytes 字节显示数据;
-m 表示每秒按 M 字节显示数据;-t 为打印汇报的时间;-v 表示打印出版本信息和用法;-x device 指定
要统计的设备名称,默认为所有的设备;interval 指每次统计间隔的时间;count 指按照这个时间间隔统
计的次数。
iostat 结果解析
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读 K 字节数。是 rsect/s 的一半,因为每扇区大小为 512 字节。
wkB/s: 每秒写 K 字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备 I/O 操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均 I/O 队列长度。即 delta(aveq)/s/1000 (因为 aveq 的单位为毫秒)。
await: 平均每次设备 I/O 操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备 I/O 操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即
delta(use)/s/1000 (因为 use 的单位为毫秒)
如果 %util 接近 100%,说明产生的 I/O 请求太多,I/O 系统已经满负荷,该磁盘可能存在瓶颈。
比较重要的参数
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的
svctm: 平均每次设备 I/O 操作的服务时间
await: 平均每次设备 I/O 操作的等待时间
avgqu-sz: 平均 I/O 队列长度
如果%util 接近 100%,表明 i/o 请求太多,i/o 系统已经满负荷,磁盘可能存在瓶颈,一般%util 大于 70%,i/o 压
力就比较大,读取速度有较多的 wait.同时可以结合 vmstat 查看查看 b 参数(等待资源的进程数)和 wa 参数
(IO 等待所占用的 CPU 时间的百分比,高过 30%时 IO 压力高)。
要理解这些性能指标我们先看下图
IO 的执行过程的各个参数
上图的左边是 iostat 显示的各个性能指标,每个性能指标都会显示在一条虚线之上,这表明这个性
能指标是从虚线之上的那个读写阶段开始计量的,比如说图中的 w/s 从 Linux IO scheduler 开始穿过硬盘
控制器(CCIS/3ware),这就表明w/s统计的是每秒钟从Linux IO scheduler通过硬盘控制器的写IO的数量。
结合上图对读 IO 操作的过程做一个说明,在从 OS Buffer Cache 传入到 OS Kernel(Linux IO scheduler)
的读 IO 操作的个数实际上是 rrqm/s+r/s,直到读 IO 请求到达 OS Kernel 层之后,有每秒钟有 rrqm/s 个
读 IO 操作被合并,最终转送给磁盘控制器的每秒钟读 IO 的个数为 r/w;在进入到操作系统的设备层
(/dev/sda)之后,计数器开始对 IO 操作进行计时,最终的计算结果表现是 await,这个值就是我们要的
IO 响应时间了;svctm 是在 IO 操作进入到磁盘控制器之后直到磁盘控制器返回结果所花费的时间,这
是一个实际 IO 操作所花的时间,当 await 与 svctm 相差很大的时候,我们就要注意磁盘的 IO 性能了;
而 avgrq-sz 是从 OS Kernel 往下传递请求时单个 IO 的大小,avgqu-sz 则是在 OS Kernel 中 IO 请求队列的
平均大小。
现在我们可以将 iostat 输出结果和我们上面讨论的指标挂钩了
设备 IO 操作:总 IO(io)/s = r/s(读) +w/s(写) =1.46 + 25.28=26.74
平均每次设备I/O操作只需要0.36毫秒完成,现在却需要10.57毫秒完成,因为发出的请求太多(每秒26.74
个),假如请求时同时发出的,可以这样计算平均等待时间:
平均等待时间=单个 I/O 服务器时间*(1+2+...+请求总数-1)/请求总数
每秒发出的 I/0 请求很多,但是平均队列就 4,表示这些请求比较均匀,大部分处理还是比较及时
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性
能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般
取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,
说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变
慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算
法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所
以不能反映瞬间的 I/O 洪水。
I/O 系统 vs. 超市排队
举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当是看排的队人数,5 个
人总比 20 人要快吧? 除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星
期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连钱都点不清楚的新
手,那就有的
等了。另外,时机也很重要,可能 5 分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可
是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比
排队还无聊的)。
I/O 系统也和超市排队有很多类似之处:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均 I/O 数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。
我们可以根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间。
一个例子
# iostat -x 1
avg-cpu: %user %nice %sys %idle
16.24 0.00 4.31 79.44
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/cciss/c0d0
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p1
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p2
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: delta(io)/s = r/s +w/s = 1.02+27.55 = 28.57 (次/秒)
其中写操作占了主体 (w:r = 27:1)。
平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上 78ms,为什么? 因为发
出的 I/O 请求太多 (每秒钟约 29 个),假设这些请求是同时发出的,那么平均等待时间可以这样计算:
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + ... + 请求总数-1) / 请求总数
应用到上面的例子: 平均等待时间 = 5ms * (1+2+...+28)/29 = 70ms,和 iostat 给出的 78ms 的平均等待
时间很接近。这反过来表明 I/O 是同时发起的。每秒发出的 I/O 请求很多 (约 29 个),平均队列却不
长 (只有 2 个 左右),这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。一秒中有
14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里 I/O 系统无事可做,所有 29 个
I/O 请求都在 142 毫秒之内处理掉了。
delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 = 2232.8,
表明每秒内的 I/O 请求总共需要等待 2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而
iostat
给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么?! 因为 iostat 中有 bug,avgqu-sz 值应为 2.23,
而不是 22.35。
4、uptime
uptime 命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况。
uptime 的输出包含一项内容是 load average,显示了最近 1,5,15 分钟的负荷情况。它的值代表等待
CPU 处理的进程数,如果 CPU 没有时间处理这些进程,load average 值会升高;反之则会降低。load average
的最佳值是 1,说明每个进程都可以马上处理并且没有 CPU cycles 被丢失。对于单 CPU 的机器,1 或者
2 是可以接受的值;对于多路 CPU 的机器,load average 值可能在 8 到 10 之间。也可以使用 uptime 命
令来判断网络性能。例如,某个网络应用性能很低,通过运行 uptime 查看服务器的负荷是否很高,如
果不是,那么问题应该是网络方面造成的。
以下是 uptime 的运行实例:
9:24am up 19:06, 1 user, load average: 0.00, 0.00, 0.00
也可以查看/proc/loadavg 和/proc/uptime 两个文件,注意不能编辑/proc 中的文件,要用 cat 等命令来查
看,如:
liyawei:~ # cat /proc/loadavg
0.0 0.00 0.00 1/55 5505
uptime 命令用法十分简单:直接输入
# uptime
例:
18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00
1 可以被认为是最优的负载值。负载是会随着系统不同改变得。单 CPU 系统 1-3 和 SMP 系统 6-10 都是
可能接受的。
另外还有一个参数 -V ,是用来查询版本的。 (注意是大写的字母 v)
[linux @ localhost]$ uptime -V
procps version 3.2.7
[linux @ localhost]$ uptime
显示结果为:
10:19:04 up 257 days, 18:56, 12 users, load average: 2.10, 2.10,2.09
显示内容说明:
10:19:04
up 257 days, 18:56
12 user
load average
那么什么是系统平均负载呢? 系统平均负载是指在特定时间间隔内运行队列中的平均进程数。如
果每个 CPU 内核的当前活动进程数不大于 3 的话,那么系统的性能是良好的。如果每个 CPU 内核的任
务数大于 5,那么这台机器的性能有严重问题。如果你的 linux 主机是 1 个双核 CPU 的话,当 Load Average
为 6 的时候说明机器已经被充分使用了。
5、W
w 命令主要是查看当前登录的用户,这个命令相对来说比较简单。我们来看一下截图。
在上面这个截图里面呢,第一列 user,代表登录的用户,第二列,tty 代表用户登录的终端号,因为在
linux 中并不是只有一个终端的,pts/2 代表是图形界面的第二个终端(这仅是个人意见,网上的对 pts
的看法可能有些争议)。第三列 FROM 代表登录的地方,如果是远程登录的,会显示 ip 地址,:0 表示的
是 display 0:0,意思就是主控制台的第一个虚拟终端。第四列 login@代表登录的时间,第五列的 IDLE
代表系统的闲置时间。最后一列 what 是代表正在运行的进程,因为我正在运行 w 命令,所以咋 root
显示 w。
5、mpstat
mpstat (RHEL5 默认不安装)
mpstat 是 MultiProcessor Statistics 的缩写,是实时系统监控工具。其报告与 CPU 的一些统计信息,
这些信息存放在/proc/stat 文件中。在多 CPUs 系统里,其不但能查看所有 CPU 的平均状况信息,而且
能够查看特定 CPU 的信息。下面只介绍 mpstat 与 CPU 相关的参数,mpstat 的语法如下:
mpstat [-P {|ALL}] [internal [count]]
参数的含义如下:
-P {|ALL} 表示监控哪个 CPU, cpu 在[0,cpu 个数-1]中取值
internal 相邻的两次采样的间隔时间
count 采样的次数,count 只能和 delay 一起使用
当没有参数时,mpstat 则显示系统启动以后所有信息的平均值。有 interval 时,第一行的信息自系
统启动以来的平均信息。
从第二行开始,输出为前一个 interval 时间段的平均信息。与 CPU 有关的输出的含义如下:
[oracle@Test ~]$ mpstat -P ALL
Linux 2.6.18-194.el5 (Test.linux.com) 2010 年 06 月 22 日
09 时 18 分 18 秒 CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
09 时 18 分 18 秒 all 0.06 0.00 0.43 0.78 0.00 0.00 0.00 98.71 1069.35
09 时 18 分 18 秒 0 0.05 0.00 0.36 0.17 0.02 0.00 0.00 99.41 1032.01
09 时 18 分 18 秒 1 0.04 0.00 0.42 0.07 0.00 0.00 0.00 99.47 0.26
09 时 18 分 18 秒 2 0.11 0.00 0.28 0.08 0.00 0.00 0.00 99.52 0.00
09 时 18 分 18 秒 3 0.07 0.00 0.48 0.05 0.00 0.00 0.00 99.39 0.01
09 时 18 分 18 秒 4 0.08 0.00 0.19 5.63 0.00 0.02 0.00 94.08 24.51
09 时 18 分 18 秒 5 0.05 0.00 0.63 0.11 0.00 0.00 0.00 99.21 0.22
09 时 18 分 18 秒 6 0.07 0.00 0.45 0.10 0.00 0.01 0.00 99.36 12.33
09 时 18 分 18 秒 7 0.05 0.00 0.64 0.07 0.00 0.00 0.00 99.24 0.00
参数 解释 从/proc/stat 获得数据 CPU 处理器 ID
user 在 internal 时间段里,用户的 CPU 时间(%) ,不包含 nice 值为负 进程 (usr/total)*100
nice 在 internal 时间段里,nice 值为负进程的 CPU 时间(%) (nice/total)*100
system 在 internal 时间段里,核心时间(%) (system/total)*100
iowait 在 internal 时间段里,硬盘 IO 等待时间(%) (iowait/total)*100
irq 在 internal 时间段里,硬中断时间(%) (irq/total)*100
soft 在 internal 时间段里,软中断时间(%) (softirq/total)*100
idle 在 internal 时间段里,CPU 除去等待磁盘 IO 操作外的因为任何原因而空闲的时间闲置时间(%)
(idle/total)*100
intr/s 在 internal 时间段里,每秒 CPU 接收的中断的次数 intr/total)*100
CPU 总的工作时间=total_cur=user+system+nice+idle+iowait+irq+softirq
total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
user=user_cur – user_pre
total=total_cur-total_pre
其中_cur 表示当前值,_pre 表示 interval 时间前的值。上表中的所有值可取到两位小数点。
范例 1:average mode (粗略信息)当 mpstat 不带参数时,输出为从系统启动以来的平均值。
[work@builder linux-2.6.14]$ mpstat
Linux 2.6.9-5.31AXsmp (builder.redflag-linux.com) 12/16/2005
09:38:46 AM CPU %user %nice %system %iowait %irq %soft %idle intr/s
09:38:48 AM all 23.28 0.00 1.75 0.50 0.00 0.00 74.47 1018.59
范例 2: 每 2 秒产生了 2 个处理器的统计数据报告
下面的命令可以每 2 秒产生了 2 个处理器的统计数据报告,一共产生三个 interval 的信息,然后再给出
这三个 interval 的平均信息。默认时,输出是按照 CPU 号排序。第一个行给出了从系统引导以来的所有
活跃数据。接下来每行对应一个处理器的活跃状态。
[root@server yum_dir]# mpstat -P ALL 2 3
Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
09:34:20 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
09:34:22 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.49
09:34:22 PM 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 99.50 1001.00
09:34:22 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
09:34:22 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
09:34:24 PM all 0.00 0.00 0.25 0.00 0.00 0.00 0.00 99.75 1005.00
09:34:24 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1005.50
09:34:24 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
09:34:24 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
09:34:26 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.49
09:34:26 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.00
09:34:26 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
Average: CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
Average: all 0.00 0.00 0.08 0.00 0.00 0.00 0.00 99.92 1002.66
Average: 0 0.00 0.00 0.17 0.00 0.00 0.00 0.00 99.83 1002.49
Average: 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
范例 3:比较带参数和不带参数的 mpstat 的结果。
在后台开一个 2G 的文件
# cat 1.img &
然后在另一个终端运行 mpstat 命令
[root@server ~]# cat 1.img &
[1] 6934
[root@server ~]# mpstat
Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
10:17:31 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
10:17:31 PM all 0.07 0.02 0.25 0.21 0.01 0.04 0.00 99.40 1004.57
[root@server ~]# mpstat
Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
10:17:35 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
10:17:35 PM all 0.07 0.02 0.25 0.21 0.01 0.04 0.00 99.39 1004.73
[root@server ~]# mpstat
Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
10:17:39 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
10:17:39 PM all 0.07 0.02 0.25 0.21 0.01 0.04 0.00 99.38 1004.96
[root@server ~]# mpstat
Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
10:17:44 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
10:17:44 PM all 0.07 0.02 0.26 0.21 0.01 0.05 0.00 99.37 1005.20
[root@server ~]# mpstat 3 10
Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010
10:17:55 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
10:17:58 PM all 13.12 0.00 20.93 0.00 1.83 9.80 0.00 54.32 2488.08
10:18:01 PM all 10.82 0.00 19.30 0.83 1.83 9.32 0.00 57.90 2449.83
10:18:04 PM all 10.95 0.00 20.40 0.17 1.99 8.62 0.00 57.88 2384.05
10:18:07 PM all 10.47 0.00 18.11 0.00 1.50 8.47 0.00 61.46 2416.00
10:18:10 PM all 11.81 0.00 22.63 0.00 1.83 11.98 0.00 51.75 2210.60
10:18:13 PM all 6.31 0.00 10.80 0.00 1.00 5.32 0.00 76.58 1795.33
10:18:19 PM all 1.75 0.00 3.16 0.75 0.25 1.25 0.00 92.85 1245.18
10:18:22 PM all 11.94 0.00 19.07 0.00 1.99 8.29 0.00 58.71 2630.46
10:18:25 PM all 11.65 0.00 19.30 0.50 2.00 9.15 0.00 57.40 2673.91
10:18:28 PM all 11.44 0.00 21.06 0.33 1.99 10.61 0.00 54.56 2369.87
Average: all 9.27 0.00 16.18 0.30 1.50 7.64 0.00 65.11 2173.54
[root@server ~]#
上两表显示出当要正确反映系统的情况,需要正确使用命令的参数。vmstat 和 iostat 也需要注意这一
问题。
6、pmap
pmap 命令可以显示进程的内存映射,使用这个命令可以找出造成内存瓶颈的原因。
# pmap -d PID
显示 PID 为 47394 进程的内存信息。
# pmap -d 47394
输出样例:
47394: /usr/bin/php-cgi
Address Kbytes Mode Offset Device Mapping
0000000000400000 2584 r-x-- 0000000000000000 008:00002 php-cgi
0000000000886000 140 rw--- 0000000000286000 008:00002 php-cgi
00000000008a9000 52 rw--- 00000000008a9000 000:00000 [ anon ]
0000000000aa8000 76 rw--- 00000000002a8000 008:00002 php-cgi
000000000f678000 1980 rw--- 000000000f678000 000:00000 [ anon ]
000000314a600000 112 r-x-- 0000000000000000 008:00002 ld-2.5.so
000000314a81b000 4 r---- 000000000001b000 008:00002 ld-2.5.so
000000314a81c000 4 rw--- 000000000001c000 008:00002 ld-2.5.so
000000314aa00000 1328 r-x-- 0000000000000000 008:00002 libc-2.5.so
000000314ab4c000 2048 ----- 000000000014c000 008:00002 libc-2.5.so
.....
......
00002af8d48fd000 4 rw--- 0000000000006000 008:00002 xsl.so
00002af8d490c000 40 r-x-- 0000000000000000 008:00002 libnss_files-2.5.so
00002af8d4916000 2044 ----- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b15000 4 r---- 0000000000009000 008:00002 libnss_files-2.5.so
00002af8d4b16000 4 rw--- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)
00007fffc95fe000 84 rw--- 00007ffffffea000 000:00000 [ stack ]
ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
mapped: 933712K writeable/private: 4304K shared: 768000K
最后一行非常重要:
* mapped: 933712K 内存映射所占空间大小
* writeable/private: 4304K 私有地址空间大小
* shared: 768000K 共享地址空间大小
7、sar
sar 是一个优秀的一般性能监视工具,它可以输出 Linux 所完成的几乎所有工作的数据。sar 命令在
sysetat rpm 中提供。示例中使用 sysstat 版本 5.0.5,这是稳定的最新版本之一。关于版本和下载信息,
请访问 sysstat 主页 http:
sar 可以显示 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、CPU 中断、网络等性能数据。最重要
的 sar 功能是创建数据文件。每一个 Linux 系统都应该通过 cron 工作收集 sar 数据。该 sar 数据文件为
系统管理员提供历史性能信息。这个功能非常重要,它将 sar 和其他性能工具区分开。如果一个夜晚批
处理工作正常运行两次,直到下一个早上才会发现这种情况(除非被叫醒)。我们需要具备研究 12 小时
以前的性能数据的能力。sar 数据收集器提供了这种能力。
sar 命令行的常用格式:
sar [options] [-A] [-o file] t [n]
在命令行中,n 和 t 两个参数组合起来定义采样间隔和次数,t 为采样间隔,是必须有的参数,n
为采样次数,是可选的,默认值是 1,-o file 表示将命令结果以二进制格式存放在文件中,file 在此处
不是关键字,是文件名。options 为命令行选项,sar 命令的选项很多,下面只列出常用选项:
-A:所有报告的总和。
-u:CPU 利用率
-v:进程、I 节点、文件和锁表状态。
-d:硬盘使用报告。
-r:没有使用的内存页面和硬盘块。
-g:串口 I/O 的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。
7.1、CPU统计数据
sar -u 输出显示 CPU 信息。-u 选项是 sar 的默认选项。该输出以百分比显示 CPU 的使用情况。表 3-2
解释该输出。
表 3-2 sar -u 字段
字 段 说 明
CPU CPU 编号
%user CPU 花费在用户进程(如应用程序、Shell 脚本或与
该用户进行的交互)上的时间的百分比。
%nice 运行正常进程所花的时间
%system 在内核模式(系统)中运行进程所花的时间, 也就是
CPU 用来执行核心任务的时间的百分比。
%iowait 没有进程在该 CPU 上执行时,处理器等待 I/O 完成的
时间
%idle 没有进程在该 CPU 上执行的时间
这些看起来应该比较熟悉,它和 top 报告中的 CPU 信息内容相同。以下显示输出格式:
[oracle@Test ~]$ sar -u -o aixi 60 5
Linux 2.6.18-194.el5 (Test.linux.com) 06/22/10
13:41:25 CPU %user %nice %system %iowait %steal %idle
13:42:25 all 0.28 0.00 0.21 1.17 0.00 98.34
13:43:25 all 0.23 0.00 0.16 1.14 0.00 98.46
13:44:25 all 0.27 0.00 0.21 1.40 0.00 98.12
13:45:25 all 0.26 0.00 0.19 0.99 0.00 98.56
13:46:25 all 0.32 0.00 0.23 1.39 0.00 98.05
Average: all 0.27 0.00 0.20 1.22 0.00 98.31
每 60 秒采样一次,连续采样 5 次,观察 CPU 的使用情况,并将采样结果以二进制形式存入当前目
录下的文件 aixi 中
在所有的显示中,我们应主要注意%wio 和%idle,%wio 的值过高,表示硬盘存在 I/O 瓶颈,%idle
值高,表示 CPU 较空闲,如果%idle 值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内
存容量。%idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源
是 CPU。另外任何 sar 报告的第一列都是时间戳。
如果要查看二进制文件 aixi 中的内容,则需键入如下 sar 命令:
# sar -u -f aixi
可见,sar 命令即可以实时采样,又可以对以往的采样结果进行查询。
我们本来可以研究使用-f 选项通过 sadc 创建的文件。这个 sar 语法显示 sar -f/var/log/ sa/sa21 的输出:
在多 CPU Linux 系统中,sar 命令也可以为每个 CPU 分解该信息,如以下 sar -u -P ALL 5 5 输出所示:
磁盘I/O统计数据
sar 是一个研究磁盘 I/O 的优秀工具。以下是 sar 磁盘 I/O 输出的一个示例。
第一行-d 显示磁盘 I/O 信息,5 2 选项是间隔和迭代,就像 sar 数据收集器那样。表 3-3 列出了字段和说
明。
表 3-3 sar -d 字段
字 段 说 明
DEV 磁盘设备
tps 每秒传输数(或者每秒 IO 数)
rd_sec/s 每秒 512 字节读取数
wr_sec/s 每秒 512 字节写入数
512 只是一个测量单位,不表示所有磁盘 I/O 均使用 512 字节块。DEV 列是 dev#-#格式的磁盘设备,其中
第一个#是设备主编号,第二个#是次编号或者连续编号。对于大于 2.5 的内核,sar 使用次编号。例如,
在 sar -d 输出中看到的 dev3-0 和 dev3-1。它们对应于/dev/hda 和/dev/hdal。请看/dev 中的以下各项:
/dev/hda 有主编号 3 和次编号 0。hda1 有主编号 3 和次编号 1。
3.2.4 网络统计数据
sar 提供四种不同的语法选项来显示网络信息。-n 选项使用四个不同的开关:DEV、EDEV、SOCK 和 FULL。
DEV 显示网络接口信息,EDEV 显示关于网络错误的统计数据,SOCK 显示套接字信息,FULL 显示所有三
个开关。它们可以单独或者一起使用。表 3-4 显示通过-n DEV 选项报告的字段。
表 3-4 sar -n DEV 字段
字 段 说 明
IFACE LAN 接口
rxpck/s 每秒钟接收的数据包
txpck/s 每秒钟发送的数据包
rxbyt/s 每秒钟接收的字节数
txbyt/s 每秒钟发送的字节数
rxcmp/s 每秒钟接收的压缩数据包
txcmp/s 每秒钟发送的压缩数据包
rxmcst/s 每秒钟接收的多播数据包
以下是使用-n DEV 选项的 sar 输出:
关于网络错误的信息可以用 sar -n EDEV 显示。表 3-5 列出了显示的字段。
表 3-5 sar -n EDEV 字段
字 段 说 明
IFACE LAN 接口
rxerr/s 每秒钟接收的坏数据包
txerr/s 每秒钟发送的坏数据包
coll/s 每秒冲突数
rxdrop/s 因为缓冲充满,每秒钟丢弃的已接收数据包数
txdrop/s 因为缓冲充满,每秒钟丢弃的已发送数据包数
txcarr/s 发送数据包时,每秒载波错误数
rxfram/s 每秒接收数据包的帧对齐错误数
rxfifo/s 接收的数据包每秒 FIFO 过速的错误数
txfifo/s 发送的数据包每秒 FIFO 过速的错误数
SOCK 参数显示 IPCS 套接字信息。表 3-6 列出显示的字段及其意义。
表 3-6 sar -n SOCK 字段
字 段 说 明
totsck 使用的套接字总数量
tcpsck 使用的 TCP 套接字数量
udpsck 使用的 UDP 套接字数量
rawsck 使用的 raw 套接字数量
ip-frag 使用的 IP 段数量
sar 可以产生许多其他报告。我们有必要仔细阅读 sar(1)手册页,查看是否有自己需要的其他报告
例二:使用命行 sar -v t n
例如,每 30 秒采样一次,连续采样 5 次,观察核心表的状态,需键入如下命令:
# sar -v 30 5
屏幕显示:
SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001
10:33:23 proc-sz ov inod-sz ov file-sz ov lock-sz (-v)
10:33:53 305/ 321 0 1337/2764 0 1561/1706 0 40/ 128
10:34:23 308/ 321 0 1340/2764 0 1587/1706 0 37/ 128
10:34:53 305/ 321 0 1332/2764 0 1565/1706 0 36/ 128
10:35:23 308/ 321 0 1338/2764 0 1592/1706 0 37/ 128
10:35:53 308/ 321 0 1335/2764 0 1591/1706 0 37/ 128
显示内容包括:
proc-sz:目前核心中正在使用或分配的进程表的表项数,由核心参数 MAX-PROC 控制。
inod-sz:目前核心中正在使用或分配的 i 节点表的表项数,由核心参数 MAX-INODE 控制。
file-sz: 目前核心中正在使用或分配的文件表的表项数,由核心参数 MAX-FILE 控制。
ov:溢出出现的次数。
Lock-sz:目前核心中正在使用或分配的记录加锁的表项数,由核心参数 MAX-FLCKRE 控制。
显示格式为
实际使用表项/可以使用的表项数
显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如果出现溢出
时,要调整相应的核心参数,将对应的表项数加大。
例三:使用命行 sar -d t n
例如,每 30 秒采样一次,连续采样 5 次,报告设备使用情况,需键入如下命令:
# sar -d 30 5
屏幕显示:
SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001
11:06:43 device %busy avque r+w/s blks/s avwait avserv (-d)
11:07:13 wd-0 1.47 2.75 4.67 14.73 5.50 3.14
11:07:43 wd-0 0.43 18.77 3.07 8.66 25.11 1.41
11:08:13 wd-0 0.77 2.78 2.77 7.26 4.94 2.77
11:08:43 wd-0 1.10 11.18 4.10 11.26 27.32 2.68
11:09:13 wd-0 1.97 21.78 5.86 34.06 69.66 3.35
Average wd-0 1.15 12.11 4.09 15.19 31.12 2.80
显示内容包括:
device: sar 命令正在监视的块设备的名字。
%busy: 设备忙时,传送请求所占时间的百分比。
avque: 队列站满时,未完成请求数量的平均值。
r+w/s: 每秒传送到设备或从设备传出的数据量。
blks/s: 每秒传送的块数,每块 512 字节。
avwait: 队列占满时传送请求等待队列空闲的平均时间。
avserv: 完成传送请求所需平均时间(毫秒)。
在显示的内容中,wd-0 是硬盘的名字,%busy 的值比较小,说明用于处理传送请求的有效时间太少,
文件系统效率不高,一般来讲,%busy 值高些,avque 值低些,文件系统的效率比较高,如果%busy 和
avque 值相对比较高,说明硬盘传输速度太慢,需调整。
例四:使用命行 sar -b t n
例如,每 30 秒采样一次,连续采样 5 次,报告缓冲区的使用情况,需键入如下命令:
# sar -b 30 5
屏幕显示:
SCO_SV scosysv 3.2v5.0.5 i80386 10/01/2001
14:54:59 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b)
14:55:29 0 147 100 5 21 78 0 0
14:55:59 0 186 100 5 25 79 0 0
14:56:29 4 232 98 8 58 86 0 0
14:56:59 0 125 100 5 23 76 0 0
14:57:29 0 89 100 4 12 66 0 0
Average 1 156 99 5 28 80 0 0
显示内容包括:
bread/s: 每秒从硬盘读入系统缓冲区 buffer 的物理块数。
lread/s: 平均每秒从系统 buffer 读出的逻辑块数。
%rcache: 在 buffer cache 中进行逻辑读的百分比。
bwrit/s: 平均每秒从系统 buffer 向磁盘所写的物理块数。
lwrit/s: 平均每秒写到系统 buffer 逻辑块数。
%wcache: 在 buffer cache 中进行逻辑读的百分比。
pread/s: 平均每秒请求物理读的次数。
pwrit/s: 平均每秒请求物理写的次数。
在显示的内容中,最重要的是%cache 和%wcache 两列,它们的值体现着 buffer 的使用效率,%rcache
的值小于 90 或者%wcache 的值低于 65,应适当增加系统 buffer 的数量,buffer 数量由核心参数 NBUF
控制,使%rcache 达到 90 左右,%wcache 达到 80 左右。但 buffer 参数值的多少影响 I/O 效率,增加
buffer,应在较大内存的情况下,否则系统效率反而得不到提高。
例五:使用命行 sar -g t n
例如,每 30 秒采样一次,连续采样 5 次,报告串口 I/O 的操作情况,需键入如下命令:
# sar -g 30 5
屏幕显示:
SCO_SV scosysv 3.2v5.0.5 i80386 11/22/2001
17:07:03 ovsiohw/s ovsiodma/s ovclist/s (-g)
17:07:33 0.00 0.00 0.00
17:08:03 0.00 0.00 0.00
17:08:33 0.00 0.00 0.00
17:09:03 0.00 0.00 0.00
17:09:33 0.00 0.00 0.00
Average 0.00 0.00 0.00
显示内容包括:
ovsiohw/s:每秒在串口 I/O 硬件出现的溢出。
ovsiodma/s:每秒在串口 I/O 的直接输入输出通道高速缓存出现的溢出。
ovclist/s :每秒字符队列出现的溢出。
在显示的内容中,每一列的值都是零,表明在采样时间内,系统中没有发生串口 I/O 溢出现象。
sar 命令的用法很多,有时判断一个问题,需要几个 sar 命令结合起来使用,比如,怀疑 CPU 存在
瓶颈,可用 sar -u 和 sar -q 来看,怀疑 I/O 存在瓶颈,可用 sar -b、sar -u 和 sar-d 来看。
--------------------------------------------------------------------------------
Sar
-A 所有的报告总和
-a 文件读,写报告
-B 报告附加的 buffer cache 使用情况
-b buffer cache 使用情况
-c 系统调用使用报告
-d 硬盘使用报告
-g 有关串口 I/O 情况
-h 关于 buffer 使用统计数字
-m IPC 消息和信号灯活动
-n 命名 cache
-p 调页活动
-q 运行队列和交换队列的平均长度
-R 报告进程的活动
-r 没有使用的内存页面和硬盘块
-u CPU 利用率
-v 进程,i 节点,文件和锁表状态
-w 系统交换活动
-y TTY 设备活动
-a 报告文件读,写报告
sar –a 5 5
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002
11:45:40 iget/s namei/s dirbk/s (-a)
11:45:45 6 2 2
11:45:50 91 20 28
11:45:55 159 20 18
11:46:00 157 21 19
11:46:05 177 30 35
Average 118 18 20
iget/s 每秒由 i 节点项定位的文件数量
namei/s 每秒文件系统路径查询的数量
dirbk/s 每秒所读目录块的数量
*这些值越大,表明核心花在存取用户文件上的时间越多,它反映着一些程序和应用文件系统产生
的负荷。一般地,如果 iget/s 与 namei/s 的比值大于 5,并且 namei/s 的值大于 30,则说明文件系统
是低效的。这时需要检查文件系统的自由空间,看看是否自由空间过少。
-b 报告缓冲区(buffer cache)的使用情况
sar -b 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002
13:51:28 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s (-b)
13:51:30 382 1380 72 131 273 52 0 0
13:51:32 378 516 27 6 22 72 0 0
13:51:34 172 323 47 39 57 32 0 0
Average 310 739 58 58 117 50 0 0
bread/s 平均每秒从硬盘(或其它块设备)读入系统 buffer 的物理块数
lread/s 平均每秒从系统 buffer 读出的逻辑块数
%rcache 在 buffer cache 中进行逻辑读的百分比(即 100% - bread/lreads)
bwrit/s 平均每秒从系统 buffer 向磁盘(或其它块设备)所写的物理块数
lwrit/s 平均每秒写到系统 buffer 的逻辑块数
%wcache 在 buffer cache 中进行逻辑写的百分比(即 100% - bwrit/lwrit).
pread/sgu 平均每秒请求进行物理读的次数
pwrit/s 平均每秒请求进行物理写的次数
*所显示的内容反映了目前与系统 buffer 有关的读,写活。在所报告的数字中,最重要的是%rcache
和%wcache(统称为 cache 命中率)两列,它们具体体现着系统 buffer 的效率。衡量 cache 效率的标准
是它的命中率值的大小。
*如果%rcache 的值小于 90 或者%wcache 的值低于 65,可能就需要增加系统 buffer 的数量。如果
在系统的应用中,系统的 I/O 活动十分频繁,并且在内存容量配置比较大时,可以增加 buffer cache,
使%rcache 达到 95 左右,%wcache 达到 80 左右。
*系统 buffer cache 中,buffer 的数量由核心参数 NBUF 控制。它是一个要调的参数。系统中 buffer
数量的多少是影响系统 I/O 效率的瓶颈。要增加系统 buffer 数量,则要求应该有较大的内存配置。否
则一味增加 buffer 数量,势必减少用户进程在内存中的运行空间,这同样会导致系统效率下降。
-c 报告系统调用使用情况
sar -c 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002
17:02:42 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s (-c)
17:02:44 2262 169 141 0.00 0.00 131250 22159
17:02:46 1416 61 38 0.00 0.00 437279 6464
17:02:48 1825 43 25 0.00 0.00 109397 42331
Average 1834 91 68 0.00 0.00 225975 23651
scall/s 每秒使用系统调用的总数。一般地,当 4~6 个用户在系统上工作时,每秒大约 30 个左右。
sread/s 每秒进行读操作的系统调用数量。
swrit/s 每秒进行写操作的系统调用数量。
fork/s 每秒 fork 系统调用次数。当 4~6 个用户在系统上工作时,每秒大约 0.5 秒左右。
exec/s 每秒 exec 系统调用次数。
rchar/s 每秒由读操作的系统调用传送的字符(以字节为单位)。
wchar/s 每秒由写操作的系统调用传送的字符(以字节为单位)。
*如果 scall/s 持续地大于 300,则表明正在系统中运行的可能是效率很低的应用程序。在比较典
型的情况下,进行读操作的系统调用加上进行写操作的系统调用之和,约是 scall 的一半左右。
-d 报告硬盘使用情况
sar -d 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002
17:27:49 device %busy avque r+w/s blks/s avwait avserv (-d)
17:27:51 ida-0 6.93 1.00 13.86 259.41 0.00 5.00
ida-1 0.99 1.00 17.33 290.10 0.00 0.57
17:27:53 ida-0 75.50 1.00 54.00 157.00 0.00 13.98
ida-1 9.50 1.00 12.00 75.00 0.00 7.92
17:27:55 ida-0 7.46 1.00 46.77 213.93 0.00 1.60
ida-1 17.41 1.00 57.71 494.53 0.00 3.02
Average ida-0 29.85 1.00 38.14 210.28 0.00 7.83
ida-1 9.29 1.00 29.02 286.90 0.00 3.20
device 这是 sar 命令正在监视的块设备的名字。
%busy 设备忙时,运行传送请求所占用的时间。这个值以百分比表示。
avque 在指定的时间周期内,没有完成的请求数量的平均值。仅在队列被占满时取这个值。
r+w/s 每秒传送到设备或者从设备传送出的数据量。
blks/s 每秒传送的块数。每块 512 个字节。
avwait 传送请求等待队列空闲的平均时间(以毫秒为单位)。仅在队列被占满时取这个值。
avserv 完成传送请求所需平均时间(以毫秒为单位)
*ida-0 和 ida-1 是硬盘的设备名字。在显示的内容中,如果%busy 的值比较小,说明用于处理传
送请求的有效时间太少,文件系统的效率不高。要使文件系统的效率得到优化,应使%busy 的数值相对
高一些,而 avque 的值应该低一些。
-g 报告有关串口 I/O 情况
sar -g 3 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
11:10:09 ovsiohw/s ovsiodma/s ovclist/s (-g)
11:10:12 0.00 0.00 0.00
11:10:15 0.00 0.00 0.00
11:10:18 0.00 0.00 0.00
Average 0.00 0.00 0.00
ovsiohw/s 每秒在串囗 I/O 硬件出现的溢出。
ovsiodma/s 每秒在串囗 I/O 的直接输入,输出信道高速缓存出现的溢出。
ovclist/s 每秒字符队列出现的溢出。
-m 报告进程间的通信活动(IPC 消息和信号灯活动)情况
sar -m 4 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
13:24:28 msg/s sema/s (-m)
13:24:32 2.24 9.95
13:24:36 2.24 21.70
13:24:40 2.00 36.66
Average 2.16 22.76
msg/s 每秒消息操作的次数(包括发送消息的接收信息)。
sema/s 每秒信号灯操作次数。
*信号灯和消息作为进程间通信的工具,如果在系统中运行的应用过程中没有使用它们,那么由
sar 命令报告的 msg 和 sema 的值都将等于 0.00。如果使用了这些工具,并且其中或者 msg/s 大于 100,
或者 sema/s 大于 100,则表明这样的应用程序效率比较低。原因是在这样的应用程序中,大量的时间
花费在进程之间的沟通上,而对保证进程本身有效的运行时间必然产生不良的影响。
-n 报告命名缓冲区活动情况
sar -n 4 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
13:37:31 c_hits cmisses (hit %) (-n)
13:37:35 1246 71 (94%)
13:37:39 1853 81 (95%)
13:37:43 969 56 (94%)
Average 1356 69 (95%)
c_hits cache 命中的数量。
cmisses cache 未命中的数量。
(hit %) 命中数量/(命中数理+未命中数量)。
*不难理解,(hit %)值越大越好,如果它低于 90%,则应该调整相应的核心参数。
-p 报告分页活动
sar -p 5 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
13:45:26 vflt/s pflt/s pgfil/s rclm/s (-p)
13:45:31 36.25 50.20 0.00 0.00
13:45:36 32.14 58.48 0.00 0.00
13:45:41 79.80 58.40 0.00 0.00
Average 49.37 55.69 0.00 0.00
vflt/s 每秒进行页面故障地址转换的数量(由于有效的页面当前不在内存中)。
pflt/s 每秒来自由于保护错误出现的页面故障数量(由于对页面的非法存,取引起的页面故障)。
pgfil/s 每秒通过”页—入”满足 vflt/s 的数量。
rclm/s 每秒由系统恢复的有效页面的数量。有效页面被增加到自由页面队列上。
*如果 vflt/s 的值高于 100,可能预示着对于页面系统来说,应用程序的效率不高,也可能分页
参数需要调整,或者内存配置不太合适。
-q 报告进程队列(运行队列和交换队列的平均长度)情况
sar -q 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002
14:25:50 runq-sz %runocc swpq-sz %swpocc (-q)
14:25:52 4.0 50
14:25:54 9.0 100
14:25:56 9.0 100
Average 7.3 100
runq-sz 准备运行的进程运行队列。
%runocc 运行队列被占用的时间(百分比)
swpq-sz 要被换出的进程交换队列。
%swpocc 交换队列被占用的时间(百分比)。
*如果%runocc 大于 90,并且 runq-sz 的值大于 2,则表明 CPU 的负载较重。其直接后果,可能使
系统的响应速度降低。如果%swpocc 大于 20,表明交换活动频繁,将严重导致系统效率下降。解决的办
法是加大内存或减少缓存区数量,从而减少交换及页—入,页—出活动。
-r 报告内存及交换区使用情况(没有使用的内存页面和硬盘块)
sar -r 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002
10:14:19 freemem freeswp availrmem availsmem (-r)
10:14:22 279729 6673824 93160 1106876
10:14:24 279663 6673824 93160 1106876
10:14:26 279661 6673824 93160 1106873
Average 279684 6673824 93160 1106875
freemem 用户进程可以使用的内存页面数,4KB 为一个页面。
freeswp 用于进程交换可以使用的硬盘盘块,512B 为一个盘块。
-u CPU 利用率
sar -u 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002
10:27:23 %usr %sys %wio %idle (-u)
10:27:25 2 3 8 88
10:27:27 3 3 5 89
10:27:29 0 0 0 100
Average 2 2 4 92
.
%usr cpu 处在用户模式下时间(百分比)
%sys cpu 处在系统模式下时间(百分比)
%wio cpu 等待输入,输出完成(时间百分比)
%idle cpu 空闲时间(百分比)
*在显示的内容中,%usr 和 %sys 这两个值一般情况下对系统无特别影响,%wio 的值不能太高,
如果%wio 的值过高,则 CPU 花在等待输入,输出上的时间太多,这意味着硬盘存在 I/O 瓶颈。如果%idle
的值比较高,但系统响应并不快,那么这有可能是 CPU 花时间等待分配内存引起的。%idle 的值可以较
深入帮助人们了解系统的性能,在这种情况上,%idle 的值处于 40~100 之间,一旦它持续低于 30,则
表明进程竟争的主要资源不是内存而是 CPU。
*在有大量用户运行的系统中,为了减少 CPU 的压力,应该使用智能多串卡,而不是非智能多串卡。
智能多串卡可以承担 CPU 的某些负担。
*此外,如果系统中有大型的作业运行,应该把它们合理调度,错开高峰,当系统相对空闲时再运
行。
-v 报告系统表的内容(进程,i 节点,文件和锁表状态)
sar -v 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002
10:56:46 proc-sz ov inod-sz ov file-sz ov lock-sz (-v)
10:56:48 449/ 500 0 994/4147 0 1313/2048 0 5/ 128
10:56:50 450/ 500 0 994/4147 0 1314/2048 0 5/ 128
10:56:52 450/ 500 0 994/4147 0 1314/2048 0 5/ 128
proc-sz 目前在核心中正在使用或分配的进程表的表项数
inod-sz 目前在核心中正在使用或分配的 i 节点表的表项数
file-sz 目前在核心中正在使用或分配的文件表的表项数
ov 溢出出现的次数
lock-sz 目前在核心中正在使用或分配的记录加锁的表项数
*除 ov 外,均涉及到 unix 的核心参数,它们分别受核心参数 NPROC,NIMODE,NFILE 和 FLOCKREC
的控制。
*显示格式为:
实际使用表项/整个表可以使用的表项数
比如,proc-sz 一列所显示的四个数字中,分母的 100 是系统中整个进程表的长度(可建立 100 个
表项),分子上的 24,26 和 25 分别是采样的那一段时间所使用的进程表项。inod-sz,file-sz 和 lock-sz
三列数字的意义也相同。
三列 ov 的值分别对应进程表,i 节点表和文件表,表明目前这三个表都没有出现溢出现象,当出
现溢出时,需要调整相应的核心参数,将对应表加大。
-w 系统交换活动
sar -w 2 3
SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002
11:22:05 swpin/s bswin/s swpot/s bswots pswch/s (-w)
11:22:07 0.00 0.0 0.00 0.0 330
11:22:09 0.00 0.0 0.00 0.0 892
11:22:11 0.00 0.0 0.00 0.0 1053
Average 0.00 0.0 0.00 0.0 757
swpin/s 每秒从硬盘交换区传送进入内存的次数。
bswin/s 每秒为换入而传送的块数。
swpot/s 每秒从内存传送到硬盘交换区的次数。
bswots 每秒为换出而传送的块数。
pswch/s 每秒进程交换的数量。
*swpin/s,bswin/s,swpot/s 和 bswots 描述的是与硬盘交换区相关的交换活动。交换关系到系
统的效率。交换区在硬盘上对硬盘的读,写操作比内存读,写慢得多,因此,为了提高系统效率就应该
设法减少交换。通常的作法就是加大内存,使交换区中进行的交换活动为零,或接近为零。如果 swpot/s
的值大于 1,预示可能需要增加内存或减少缓冲区(减少缓冲区能够释放一部分自由内存空间)。
8、proc文件系统
"proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为
访问系统内核数据的操作提供接口。用户和应用程序可以通过 proc 得到系统的信息,并可以改变内核
的某些参数。"
这里将介绍如何从/proc 文件系统中获取与防火墙相关的一些性能参数,以及如何通过/proc 文件系统
修改内核的相关配置。
1、从/proc 文件系统获取相关的性能参数
cpu 使用率:/proc/stat
内存使用情况: /proc/meminfo
网络负载信息:/proc/net/dev
相应的计算方法:(摘自:什么是 proc 文件系统)
(1) 处理器使用率
(2) 内存使用率
(3) 流入流出数据包
(4) 整体网络负载
这些数据分别要从/proc/stat、/proc/net/dev、/proc/meminfo 三个文件中提取。如里有问题或对要
提取的数据不太清楚,可以使用 man proc 来查看 proc 文件系统的联机手册。
(1) 处理器使用率
这里要从/proc/stat 中提取四个数据:用户模式(user)、低优先级的用户模式(nice)、内核模式(system)
以及空闲的处理器时间(idle)。它们均位于/proc/stat 文件的第一行。CPU 的利用率使用如下公式来
计算。
CPU 利用率 = 100 *(user + nice + system)/(user + nice + system +
idle)
(2) 内存使用率
这里需要从/proc/meminfo 文件中提取两个数据,当前内存的使用量(cmem)以及内存总量(amem)。
内存使用百分比 = 100 * (cmem / umem)
(3)网络利用率
为了得到网络利用率的相关数据,需要从/proc/net/dev 文件中获得两个数据:从本机输出的数据包数,
流入本机的数据包数。它们都位于这个文件的第四行。
性能收集程序开始记录下这两个数据的初始值,以后每次获得这个值后均减去这个初始值即为从集群启
动开始从本节点通过的数据包。
利用上述数据计算出网络的平均负载,方法如下:
平均网络负载 = (输出的数据包+流入的数据包) / 2
2. 通过/proc 文件系统调整相关的内核配置
允许 ip 转发 /proc/sys/net/ipv4/ip_forward
禁止 ping/proc/sys/net/ipv4/icmp_echo_ignore_all
可以在命令行下直接往上述两个“文件”里头写入"1"来实现相关配置,如果写入"0"将取消相关配置。
不过在系统重启以后,这些配置将恢复默认设置,所以,如果想让这些修改生效,可以把下面的配置直
接写入/etc/profile 文件,或者其他随系统启动而执行的程序文件中。
1.echo 1 > /proc/sys/net/ipv4/ip_forward
2.echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
如果需要获取其他的性能参数,或者需要对内核进行更多的配置,可以参考 proc 文件系统介绍,也可
以直接通过 man proc 查看相关的信息。
十二、 系统服务
1、系统服务分类,根据其使用的方法来分,可以被分为三类
a、由 init 控制的服务:基本都是系统级别的服务,运行级别这一章讲的就是这一类的服务
b、由 System V 启动脚本启动的服务:和我们打交道最多的一种服务,服务器基本都是这个类型的服务
c、由 xinetd 管理的服务
2、System V启动脚本启动的服务
/etc/rc.d/init.d/目录下的内容如下:这些常用的服务器都是 System v 的服务,要控制 System
V 的服务,我们可以使用以下命令
#/etc/rc.d/init.d/script {start|stop|restart|reload|condrestart|status}
stop:停止这个服务。
restart:先停止,再启动,也就是重新启动的意思。
reload:重新加载设定档,这个参数只有在服务已经启动的状况下才能使用。
condrestart:有条件的重新启动,这个服务必须是已经启动的,才会被重新启
动;如果这个服务尚未启动,则无须启动之。
status:察看目前服务的启动状态。
也可以使用 service 命令来执行脚本,例如 #service network
{start|stop|restart|reload|condrestart|status}
System V 的服务在不同级别下的默认开关可以不相同。我们还可以用两种方法来控制默认情况下,
开机是否开启某些服务,使用 chkconfig 和 ntsysv(图形方式,默认只能定义当前级别,不过可以增加
参数来实现如# ntsysv –level 23)来控制。
#chkconfig --list
#chkconfig sshd on|off
#chkconfig sendmail off
#chkconfig --level 23 sendmail off
3、xinetd服务管理
xinetd 服务的管理文件都放在 /etc/xinetd.d 目录内,我们可以编辑这个目录内的服务文件来
开启和关闭服务。每个服务文件都有 disable 这个行,如果把值改成 yes 就是禁用服务,如果是 no,
那就是启动这个服务。修改成功后,要使修改生效,需要从新启动 xinetd 服务。
#service xinetd restart
# vim chargen-dgram
4、常见服务列表
服务名 必需(是/否)用途描述 注解
acon 否 语言支持 特别支持左手书写语言:阿拉伯语,波斯语和希伯莱
语
acpi 否 电源管理 手提电脑电池电扇监控器
acpid 否 监听精灵进程 此进程监听并分配内核中的 acpi 事件
adsl 否 内部 ADSL 开关控制 只有你的计算机内部有互联网连接 adsl
开关时才用到此服务
alsa 否 高级 Linux 声音构件 这个单独的声音系统实际包含在内核中
anacron 否 周期命令调度程序 一个任务调度工具
apmd 否 电源管理 手提电脑电源管理
apmiser 否 电源管理 另一手提电脑电池延长器
arpwatch 否 以太网 IP 地址配对监控器 用主机名监控并记录远程 IP 地址
atd 否 周期命令调度程序 一个任务调度工具
autofs 否 自动安装服务 几个命令服务文件系统自动安装之一.一些此
类服务专门针对发行配套软件,如果你使用的发行配套软件拥有自己的自动安装系统,不要用这一个.
bluetooth 否 蓝牙技术核心 用于所有蓝牙服务
bootparamd 否 导入服务 以前导入无盘客户端/瘦客户端的方法.最新型的
方法为零配置系统(zeroconf system).
canna 否 日语转换引擎
capi4linux 否 基本 CAPI 子系统
cpqarrayd 否 硬件服务 康柏独立冗余磁盘阵列(Raid Array)监控器
cpufreq 否 硬件服务 控查并配置 CPU 频率精灵程序模块
cpufreqd 否 硬件服务 此服务自动衡量 CPU 频率来减少过热情况.在超频
时有用.
crond 是 周期命令调度程序 一个任务调度工具
Cups-lpd 否 使旧式Lunux或商业Unix系统连接到打印主机上. 只有在允
许旧式系统访问打印机时才有用
cups 是 公共 Unix 打印系统 进行打印的必要功能
cvs 否 并发版本系统 用于管理多用户文档
devfsd 否 系统维护 此服务只清除动态桌面目录,除非你的系统经常崩
溃,否则不需要此服务.
dhcpd 否 DHCP 服务器 你的网络足够大,使用静态 IP 很麻烦吗?此项服
务对你的网络进行 DHCP IP 配置,方便网络应用.
diald 否 拨号网络智能自动拨号器 此服务一经请求,即连接上网络.
你一旦输入电子邮件,点击发送,它就自动连接,发送电邮并断开.
dkms 否 DKMS 自安装导入 发行配套软件专用工具,用于 OEM 类型安装.
它允许管理员密码的最初导入设置以及常规应用的用户名密码,系统的最后配置.
dm 是 显示管理器 X 服务器的核心,使用图形用户界面(GUI)时必
需.
dnbc 否 数字网络绑定 Chrooter 这是一个简单的 bash 脚本,它将一
个 BIND 服务器放入一个 chroot 牢笼中.安装 BIND,发布脚本并重启.
Drakxtools-http 否 小型服务管理服务器 远程系统管理的发行配套软件专用工
具.
dund 否 蓝牙拨号网络
fam 否 文件系统变更监控器 文件系统所有改变的记录器
finger 否 数据远程访问 此服务允许你远程访问用户登录日期,最后登
录日期与时间.用于不在办公室时监控雇员的工作习惯,主要的安全违反,因为你正有效地在线发布公
司机密数据.
freshclam 是 ClamAV 更新器 用于自动更新 ClamAV
gpm 是 鼠标 鼠标驱动器控制台模式
haldaemon 否 硬件监控系统 此服务监控硬件改变,为你改变新的或更改过
的硬件.
harddrake 否 硬件服务 发行配套软件专用硬件探测与配置
heartbeat 否 高可用性服务 此服务旨在增加重要服务与服务器的优先级
hidd 否 蓝牙 H.I.D.服务器
hplip 否 惠普 Linux 打印与成像 旧版惠普整成产品供应驱动器
hpoj 否 Pital?init,惠普办公喷墨打印机驱动器 惠普办公喷墨打印
机旧式驱动器.新式驱动器包含在打印机的打印驱动器内.
httpd 否 Apache 网络服务器 在系统上应用此服务有两个原因,一是
要用它作为网络服务器,二是用它作为网址开发器.如果没有此二项,则不必安装 Apache.
hylafax?server 否 企业传真机?调制调解器服务 此服务仅用于 1 类与 2 类传真
机.如果你想用 hylafax 通过调制调解器发送传真,必须运行此服务.它并不是唯一有效的传真工具.
ibod 否 按需ISDN MPPP带宽 与拨号网络一同使用,按需连接到网络.
identd 否 TCP 连接鉴定
imaps 否 安全 IMAP 服务器
imaps 否 IMAP 服务器
iplog 否 用主机名或远程主机记录 TCP,UDP,ICMP. 有用的网络监控
工具
ipop2 否 POP2 邮件服务器
ipop3 否 POP3 邮件服务器
ipsec 否 加密与验证通信 KLIPS 为内核一半,PLUTO 为用户空间一半.
在远程访问情况下十分有用.
iptables 是 基于 Packet 过滤防火墙内核 所有优秀的 Linux 防火墙都基
于此项服务
ipvsadmin 否 Linux 核心 IP 虚拟服务器 最早的 Linux 网络系统之一,已不
常用.
irda 否 红外线设备界面 以前的无线设备支持
keytable 是 键盘映射 此服务明确告诉系统你正在使用哪种键盘
kheader 否 导入服务 此服务自动重建内核头导入
lads 否 登录异常探测系统 跟踪登录企图并警告入侵企图的工具
laptop mode 否 电源管理 减少电力耗费,延长手提电脑电池寿命的工具
leafnode 否 X? INETD NNTP 服务
lisa 否 局域网信息服务器
lmsensors 否 硬件健康监控器 此服务要求系统主板支持并有合适的监控
系统,如 CPU 温度与电压监控器.
mailman 否 GUN 邮件列表管理器 常用的邮件列表工具,带 Python 编写的
管理网络界面.它允许列表成员发送邮件并回复邮件到同一个地址进行交流. 它还可用于向那些发送
请求的用户传送新闻时讯/产品更新.
mandi 否 交互式防火墙 允许暂时无线访问系统的专用服务,将为当前
任务开放 iptables 防火墙,仅用于无线设备访问.在用户许可情况下才可使用,不能自动使用.
mdadm 否 软阵列监控服务 这也是一个用于上述软件阵列栏的管理工
具
mdnsresponder 否 零配置 DNS 配置工具
messagebus 是 事件监控服务 此服务在必要时向所有用户发送广播信息,如
服务器将要重启.
mon 是 系统监控精灵进程 许多系统服务要求此服务来运行
mysqld 否 MySQL 服务器 如果你不需要这个数据库,不要打开它.
named 否 绑定(BIND)服务器 这就是声名狼藉的名称服务器
netplugd 否 网卡精灵进程 此服务监控网络界面,根据信号关闭或启动它,
主要用于不经常连接的手提电脑.
network 是 网络 此服务打开网卡,或为调制调解器供电.
nfs 否 网络文件共享 此服务使用户访问 NFS 共享文件,为 NFS 系统
客户机所必需.
nfsfs 否 网络文件共享服务器 只有在网络服务器上才被激活
nfslock 否 NFS 文件锁定 只有在使用 NFS 网络/文件共享功能时,此服务
才被激活.
nifd 否 Howl 客户端 此服务为零配置网络/系统提供 ipv4 链接本地
服务
nscd 否 密码与群查找服务 此服务用于减慢 N.I.S/Y.P.nist,ldap
和 hesiod 之类的服务.专门为这些服务提供更长的中断时间.
ntpd 否 NTP 服务器的第 4 版
numlock 否 数字锁定键灯光控制 此服务保持数字锁定键的激活状态,打
开键盘上的数字键区.
Oki4daemon 否 OKI4 和兼容 win 打印机的兼容性精灵进程 只有在你有这些
打印机时才可用
pand 否 蓝牙个人区域网络 用于基于网络的家庭区域蓝牙技术
partmon 是 分区监控 此服务跟踪安装分区上的剩余空间.大多数文件系
统浏览器使用它来计算指定分区上的剩余空间.
pcmcia 否 个人电脑内存卡国际协会
pg_autovacum 否 PostgreSQL 维护 此服务自动运行 PostgreSQL 所需的空间
(vacuum)来减少磁盘空间,从数据库中拖动临时表格,并删除 PostgreSQL 建立的临时文件.
pop3s 否 安全 POP3 服务 POP3 SSL 服务器
portmap 否 RPC 支持 支持那些应用 rpc 的罕有的应用软件
postgresql 否 Postgresql 数据库引擎 只有在运行或开发 Postgresql 数据
库驱动应用软件时才用到此服务
postfix 否 电子邮件服务器 与 sendmail 兼容的电子邮件服务器,比
sendmail 更新,也变得比 sendmail 更通用.
pptp 否 PPP 断电服务 PPP 频道断电服务,UPS 打开时使用,以避免电
源返回系统时出现文件锁定问题.
prelude 否 IDS 入侵探测系统
psacct 否 进程计算 活动进程追踪器,实际上是资源的浪费.
rawdevices 是 分配 raw 设备,阻止其使用 DVDS,oracle DBMS 等需要此服务
rsync 否 远程同步 使指定目录树上的文件远程同步的服务器,常用于
维护镜象地址,也在备份时用于保持公司文件为最新状态.
saned 否 网络扫描仪 从网络上的任何工作站提供扫描仪访问
shorwall 是 防火墙 一个非常优秀的 IPTables 防火墙
smartd 否 自我监控服务 用于智能设备的 OS 访问,此服务允许 Linux
告诉你是否设备将要变坏,但这要依靠设备的精确智能特性.
smb 否 Samba 网络服务 此服务提供 samba 服务,实现 Windows 网络
兼容性.
snmpd 否 简单的网络管理协议 用于小型(家庭办公室)网络
sound 否 声音系统 此为 Linux 声音系统的核心,适用于桌面系统,在
服务器上则是资源的浪费.
squid 否 高速缓存工具 用于高速缓存网络页面及 DNS 登录
ssh?xinetd 否 X?inetd OpenSSH 服务器 OpenSSH 的按需运行版本
sshd 否 OpenSSH 服务器 如果你需要 SSH 访问你的系统时才开启此服
务,将不会使用 x?inetd 版本.
subversion 否 并发版本系统 CVS 的新型替代品
swat 否 Samba 网络管理工具 基于 Samba 管理的网络
syslog 是 系统登录 一项必要的服务,控制整个系统上的所有登录.
tmdns 否 多点传送 DNS 响应器 用于零配置环境
ultrabayed 否 ThinkPad 工具 此服务为你的 IBM ThindPad 探测 ultrabay,
并在适当情况下启动/关闭 IDE 接口.
upsd 否 NUT 精灵进程及驱动器 一个不间断地电源监控及报告工具,
此服务向中心地址报告,产生关于 UPS 统计的数据库.
upsmon 否 UPS 监控工具 此服务监控 UPS 的状况,在其运行低下时关系
系统.
vncserver 否 虚拟网络计算服务器 在项目中应用 VNC 时非常有用
Webmin 否 远程管理工具 发行配套软件 Agnostic 远程管理工具.在机
器不能总是直接访问,如网络服务器集群时有用.
winbind 否 Samba 名称服务器 Samba 网络运行所必需.此服务将用户与
群数据从 windows 网络映射到 Linux 工作站中.
wine 否 Wine 并非竞争者 此服务使 MS Windows 可在 Linux 上执
行,WINE 是商业产品 Crossover Office 的限制版本.
wlan 否 控制精灵进程 由于服务通常由 init 进程控制,此控制服务
不常用.
xinetd 是 监控并控制其它服务器的服务器 这是一项必需的服务,它实
际上减少了服务器上 CPU 的负载.如果你需要 SSH,ftp 等但并不总是需要,x?inetd 版本将在请求,甚
至是远程需求时启 动它们.此服务让它们生效,但如果它们一天/周只使用几次的话,又释放了时钟周
期.
xfs 是 X 字体服务器 你任何时间需要使用图形用户界面(GUI),就
需要此服务.
ypbind 否 SUN 的 YP 服务器名称服务器 此服务用于基于 GLIBC 的
NIS/YP 网络服务
十三、 环境管理
1、环境变量
在 linux 系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not
found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉
及到环境变量 PATH 的设置问题,而 PATH 的设置也是在 linux 下定制环境变量的一个组成部分。
环境变量可以让子程序继续引用的原因,是因为:
1. 当启动一个 shell ,操作系统分配一记忆区块给 shell 使用,此区域之变量可以让子程序存
取;
2. 利用 export 功能,可以让变量的内容写到上述的记忆区块当中(环境变量);
当加载另一个 shell 时 (亦即启动子程序,而离开原本的父程序了),子 shell 3. 可以将父
shell 的环境变量所在的记忆区块导入自己的环境变量区块当中。
所以环境变量是和 Shell 紧密相关的,用户登录系统后就启动了一个 Shell。对于 Linux 来说一般
是 bash,但也可以重新设定或切换到其它的 Shell(使用 chsh 命令)。
根据发行版本的情况,bash 有两个基本的系统级配置文件:/etc/bashrc 和/etc/profile。这些配
置文件包含两组不同的变量:shell 变量和环境变量。前者只是在特定的 shell 中固定(如 bash),后
者在不同 shell 中固定。很明显,shell 变量是局部的,而环境变量是全局的。环境变量是通过 Shell
命令来设置的,设置好的环境变量又可以被所有当前用户所运行的程序所使用。对于 bash 这个 Shell
程序来说,可以通过变量名来访问相应的环境变量,通过 export 来设置环境变量。
注:Linux 的环境变量名称一般使用大写字母
1.1、 Linux环境变量的种类
按环境变量的生存周期来划分,Linux 的环境变量可分为两类:
○1 永久的:需要修改配置文件,变量永久生效。
○2 临时的:使用export命令行声明即可,变量在关闭shell时失效。
1.2、设置变量的三种方法
○1 在/etc/profile文件中添加变量对所有用户生效(永久的)
用 VI 在文件/etc/profile 文件中增加变量,该变量将会对 Linux 下所有用户有效,并且是“永久
生效”。
例如:编辑/etc/profile 文件,添加 CLASSPATH 变量
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注 1:profile 文件在系统启动时将被运行。大家可以在里面加入其他命令,但是一定要加正确,不然
的话系统会启动不起来的。
○2 在用户目录下的.bash_profile文件中增加变量对单一用户生效(永久的)
用 VI 在用户目录下的.bash_profile 文件中增加变量,改变量仅会对当前用户有效,并且是“永
久的”。
例如:编辑 guok 用户目录(/home/guok)下的.bash_profile
# vi /home/guok/.bash.profile
添加如下内容:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注 2:如果修改了/etc/profile,那么编辑结束后执行 source profile 或 执行点命令 ./profile,PATH
的值就会立即生效了。这个方法的原理就是再执行一次/etc/profile shell 脚本,注意如果用 sh
/etc/profile 是不行的,因为 sh 是在子 shell 进程中执行的,即使 PATH 改变了也不会反应到当前环
境中,但是 source 是在当前 shell 进程中执行的,所以我们能看到 PATH 的改变。
注 3:变量重复定义时,以后面的设置为先。
例如:在 peofile 文件默认对 PATH 变量都有设置 PATH=¥¥¥¥¥¥¥,在以后可能在对 PATH 设
置,一般都加在 profile 文件的最后 PATH=······(打个比方)。而系统之中认定的
PATH=·······¥¥¥¥¥¥¥¥¥,也就是说相同名字的环境变量,后写入的先起作用(通俗地讲)。
注 4、特殊字符介绍。
例如在 profile 中有如下内容,通过以下内容说明特殊符号的用法。
export A=/q/jing:aaa/cc/ld
export B=.:/liheng/wang export A=/cd/cdr:$A
: 表示并列含义,例如 A 变量值有多个,用:符号进行分离。
. 表示你操作的当前目录。例如 pap 命令会查找 B 环境变量。
在/home 键入 B 命令,系统首先在/home 目录下(即当前路径)查找关于 B 的内容,如果没有在
/liheng/wang 目录下查找关于 B 的内容。 $ 表示该变量本次定义之前的值,例如$A 代表
/q/jing:aaa/cc/ld。也就是说 A=/cd/cdr:/q/jing:aaa/cc/ld
注 5、常见的环境变量
PATH:决定了 shell 将到哪些目录中寻找命令或程序
HOME:当前用户主目录
MAIL:是指当前用户的邮件存放目录。
SHELL:是指当前用户用的是哪种 Shell。
HISTSIZE:是指保存历史命令记录的条数。
LOGNAME:是指当前用户的登录名。
HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
PS1:是基本提示符,对于 root 用户是#,对于普通用户是$。
PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令
会将提示符修改成字符串“Hello,My NewPrompt :) ”。
# PS1=" Hello,My NewPrompt :) "
○3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在 shell 的命令行下直接使用[export 变量名=变量值]定义变量,该变量只在当前的 shell(BASH)或
其子 shell(BASH)下是有效的,shell 关闭了,变量也就失效了,再打开新 shell 时就没有这个变量,
需要使用的话还需要重新定义。
1.3、环境变量设置命令
○1 echo $ <变量名>
○2 env
○3 set
的自定义的变量,都会被列出来。因此,想要观察目前 shell 环境下的所有变量,就用 set 即可!
○4 export 命令
功能说明:设置或显示环境变量。
语 法:export [-fnp][变量名称]=[变量设置值]
补充说明:在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环
境变量,供后续执行的程序使用。export 的效力仅及于该此登陆操作。
参 数:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的 shell 赋予程序的环境变量。
一个变量创建时,它不会自动 地为在它之后创建的 shell 进程所知。而命令 export 可以向后面
的 shell 传递变量的值。当一个 shell 脚本调用并执行时,它不会自动得到原为脚本(调用者)
里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export 命令可以用于传递一
个或多个变量的值到任何后继脚本。
○5 unset清除环境变量,如果未指定值,则该变量值将被设为NULL
○6 readonly设置只读变量,只读变量设置后不能用unset清除,除非重启shell
○7 declare 、typeset 这两个命令是完全一样的,他们允许指定变量的具体类型,在某些特定的语言
中,
这是一种指定类型的很弱的形式,declare 命令是在 Bash 版本 2 或之后的版本才被加入的,typeset
命令也可以工作在 ksh 脚本中。
[root@linux ~]# declare [-aixr] variable
参数:
-a :将后面的 variable 定义成为数组 (array)
-i :将后面接的 variable 定义成为整数数字 (integer)
-x :用法与 export 一样,就是将后面的 variable 变成环境变量;
-r :将一个 variable 的变量设定成为 readonly ,该变量不可被更改内容,也不能 unset
范例一:让变量 sum 进行 100+300+50 的加总结果
[root@linux ~]# sum=100+300+50
[root@linux ~]# echo $sum
100+300+50 <==咦!怎么没有帮我计算加总?因为这是文字型态的变量属性啊!
[root@linux ~]# declare -i sum=100+300+50
[root@linux ~]# echo $sum
450
范例二:将 sum 变成环境变量
[root@linux ~]# declare -x sum
范例三:让 sum 变成只读属性,不可更动!
[root@linux ~]# declare -r sum
[root@linux ~]# sum=tesgting
-bash: sum: readonly variable
十四、 网络管理
网卡在 Linux 操作系统中用 ethX,是由 0 开始的正整数,比如 eth0、eth1...... ethX。而普通猫和
ADSL 的接口是 pppX,比如 ppp0 等
7.1、ifconfig
1、 关于网络接口及配置工具说明;
在 Linux 操作系统中配置网络接口,一般是通过网络配置工具实现的,但最终目的还是通过网络配
置工具来达到修改与网络相关的配置文件而起作用的。由此说来,我们配置网络可以直接修改配置文件。
比如网络网络接口(网卡)的 IP 地址、子掩码、网关,在 Slackware 中只需修改一个配置文件就
行了 /etc/rc.d/rc.inet1 ,而在 Redhat/Fedora 等或以 Redhat/Fedora 为基础的发行版中,一般要
涉及到好几个文件,比如包括 /etc/sysconfig/network-scripts/ifcfg-eth0 在内等。
了解 Linux 网络配置文件是极为重要的,我们通过工具修改了什么,是怎么生效的,只有了解网络
配置文件才能搞清楚。做个不恰当的比喻:Linux 系统是一个透明的盒子,至于盒子里装的是什么都是
一目了然的。而闭源操作系统,我们没有机会知道这些,更不知道他是怎么实现的。
对于复杂的网络模型,Linux 操作系统是有极大的优势,可能在我们看看 man 和 help,修改修改
配置文件,在几分钟就可以搞定。但闭源图形界面的操作系统就没有这么幸运了,反复的点鼠标.
点了几十次上百次也解决不了一个问题,这是极为常见的。 由于 Linux 操作系统存在很多的发行
和版本,大多发行版本都有自己的专用配置工具。主要是为了方便用户配置网络;但也有通用的配置工
具,比如 Linux ifconfig 、ifup、ifdown;
2 关于网络硬件设备的驱动;
我在以前的文档中有写过,网络硬件,比如网卡(包括有线、无线),猫包括普通猫和 ADSL 猫等,
都是需要内核支持的,所以我们首先得知道自己的网络设备是不是已经被硬内核支持了。如果不支持,
我们得找驱动(或通过内核编译)来支持它; 请参考:
3、Linux ifconfig 配置网络接口的工具介绍;
Linux ifconfig 是一个用来查看、配置、启用或禁用网络接口的工具,这个工具极为常用的。比
如我们可以用这个工具来临时性的配置网卡的 IP 地址、掩码、广播地址、网关等。也可以把它写入一
个文件中(比如/etc/rc.d/rc.local),这样系统引导后,会读取这个文件,为网卡设置 IP 地址;
不过这样做目前看来没有太大的必要。主要是各个发行版本都有自己的配置工具,无论如何也能把
主机加入到网络中; 下面我们看看 Linux ifconfig 用法;
3.1 Linux ifconfig 查看网络接口状态;
Linux ifconfig 如果不接任何参数,就会输出当前网络接口的情况;
1. [root@localhost ~]# Linux ifconfig
2. eth0 Link encap:Ethernet HWaddr 00:C0:9F:94:78:0E
3. inet addr:192.168.1.88 Bcast:192.168.1.255 Mask:255.255.255.0
4. inet6 addr: fe80::2c0:9fff:fe94:780e/64 Scope:Link
5. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
6. RX packets:850 errors:0 dropped:0 overruns:0 frame:0
7. TX packets:628 errors:0 dropped:0 overruns:0 carrier:0
8. collisions:0 txqueuelen:1000
9. RX bytes:369135 (360.4 KiB) TX bytes:75945 (74.1 KiB)
10. Interrupt:10 Base address:0x3000
11.
12. lo Link encap:Local Loopback
13. inet addr:127.0.0.1 Mask:255.0.0.0
14. inet6 addr: ::1/128 Scope:Host
15. UP LOOPBACK RUNNING MTU:16436 Metric:1
16. RX packets:57 errors:0 dropped:0 overruns:0 frame:0
17. TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
18. collisions:0 txqueuelen:0
19. RX bytes:8121 (7.9 KiB) TX bytes:8121 (7.9 KiB)
解说:eth0 表示第一块网卡, 其中 HWaddr 表示网卡的物理地址,我们可以看到目前这个网卡的
物理地址(MAC 地址)是 00:C0:9F:94:78:0E ; inet addr 用来表示网卡的 IP 地址,此网卡的 IP 地
址是 192.168.1.88, 广播地址, Bcast:192.168.1.255,掩码地址 Mask:255.255.255.0
lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户
能够查看,只能在此台主机上运行和查看所用的网络接口。比如我们把 HTTPD 服务器的指定到回坏地址,
在浏览器输入 127.0.0.1 就能看到你所架 WEB 网站了。但只是您能看得到,局域网的其它主机或用户
无从知道;
如果我们想知道主机所有网络接口的情况,请用下面的命令; [root@localhost ~]# Linux
ifconfig -a 如果我们想查看某个端口,比如我们想查看 eth0 的状态,就可以用下面的方法;
[root@localhost ~]# Linux ifconfig eth0
3.2 Linux ifconfig 配置网络接口;
Linux ifconfig 可以用来配置网络接口的 IP 地址、掩码、网关、物理地址等;值得一说的是用
Linux ifconfig 为网卡指定IP地址,这只是用来调试网络用的,并不会更改系统关于网卡的配置文件。
如果您想把网络接口的 IP 地址固定下来,目前有三个方法:一是通过各个发行和版本专用的工具
来修改 IP 地址;二是直接修改网络接口的配置文件;三是修改特定的文件,加入 Linux ifconfig 指
令来指定网卡的 IP 地址,比如在 redhat 或 Fedora 中,把 Linux ifconfig 的语名写入
/etc/rc.d/rc.local 文件中;
Linux ifconfig 配置网络端口的方法: Linux ifconfig 工具配置网络接口的方法是通过指令的
参数来达到目的的,我们只说最常用的参数; Linux ifconfig 网络端口 IP 地址 hw <HW> MAC
地址 netmask 掩码地址 broadcast 广播地址 [up/down]
实例一:
比如我们用 Linux ifconfig 来调试 eth0 网卡的地址
1. [root@localhost ~]# Linux ifconfig eth0 down
2. [root@localhost ~]# Linux ifconfig eth0 192.168.1.99 broadcast 192.168.1.255 netma
sk 255.255.255.0
3. [root@localhost ~]# Linux ifconfig eth0 up
4. [root@localhost ~]# Linux ifconfig eth0
5. eth0 Link encap:Ethernet HWaddr 00:11:00:00:11:11
6. inet addr:192.168.1.99 Bcast:192.168.1.255 Mask:255.255.255.0
7. UP BROADCAST MULTICAST MTU:1500 Metric:1
8. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
9. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
10. collisions:0 txqueuelen:1000
11. RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
12. Interrupt:11 Base address:0x3400
注解: 上面的例子我们解说一下;
第一行:Linux ifconfig eth0 down 表示如果 eth0 是激活的,就把它 DOWN 掉。此命令等同于 ifdown
eth0;
第二行:用 Linux ifconfig 来配置 eth0 的 IP 地址、广播地址和网络掩码;
第三行:用 Linux ifconfig eth0 up 来激活 eth0 ; 此命令等同于 ifup eth0
第四行:用 Linux ifconfig eth0 来查看 eth0 的状态;
当然您也可以用直接在指令 IP 地址、网络掩码、广播地址的同时,激活网卡;要加 up 参数;比如
下面的例子; [root@localhost ~]# Linux ifconfig eth0 192.168.1.99 broadcast
192.168.1.255 netmask 255.255.255.0 up
实例二:在这个例子中,我们要学会设置网络 IP 地址的同时,学会设置网卡的物理地址(MAC 地
址);
比如我们设置网卡 eth1 的 IP 地址、网络掩码、广播地址,物理地址并且激活它;[root@localhost
~]# Linux ifconfig eth1 192.168.1.252 hw ether 00:11:00:00:11:11 netmask 255.255.255.0
broadcast 192.168.1.255 up 或[root@localhost ~]# Linux ifconfig eth1 hw
ether 00:11:00:00:11:22[root@localhost ~]# Linux ifconfig eth1 192.168.1.252 netmask
255.255.255.0 broadcast 192.168.1.255 up
其中 hw 后面所接的是网络接口类型, ether 表示乙太网, 同时也支持 ax25 、ARCnet、netrom
等,详情请查看 man Linux ifconfig ;
3.3 如何用 Linux ifconfig 来配置虚拟网络接口;
有时我们为了满足不同的需要还需要配置虚拟网络接口,比如我们用不同的 IP 地址来架运行多个
HTTPD 服务器,就要用到虚拟地址;这样就省却了同一个 IP 地址,如果开设两个的 HTTPD 服务器时,
要指定端口号。
虚拟网络接口指的是为一个网络接口指定多个 IP 地址,虚拟接口是这样的 eth0:0 、 eth0:1、
eth0:2 ... .. eth1N。当然您为 eth1 指定多个 IP 地址,也就是 eth1:0、eth1:1、eth1:2 ... ...
以此类推;
其实用 Linux ifconfig 为一个网卡配置多个 IP 地址,就用前面我们所说的 Linux ifconfig 的用
法,这个比较简单;看下面的例子; [root@localhost ~]# Linux ifconfig eth1:0 192.168.1.251 hw
ether 00:11:00:00:11:33 netmask 255.255.255.0 broadcast 192.168.1.255 up 或
[root@localhost ~]# Linux ifconfig eth1 hw ether 00:11:00:00:11:33[root@localhost ~]#
Linux ifconfig eth1 192.168.1.251 netmask 255.255.255.0 broadcast 192.168.1.255 up
注意:指定时,要为每个虚拟网卡指定不同的物理地址;
在 Redhat/Fedora 或与 Redhat/Fedora 类似的系统,您可以把配置网络 IP 地址、广播地址、掩码
地址、物理地址以及激活网络接口同时放在一个句子中,写入/etc/rc.d/rc.local 中。比如下面的例
子;
Linux ifconfig eth1:0 192.168.1.250 hw ether 00:11:00:00:11:44 netmask 255.255.255.0
broadcast 192.168.1.255 up
Linux ifconfig eth1:1 192.168.1.249 hw ether 00:11:00:00:11:55 netmask 255.255.255.0
broadcast 192.168.1.255 up
解说:上面是为 eth1 的网络接口,设置了两个虚拟接口;每个接口都有自己的物理地址、IP 地
址... ...
3.4 如何用 Linux ifconfig 来激活和终止网络接口的连接;
激活和终止网络接口的用 Linux ifconfig 命令,后面接网络接口,然后加上 down 或 up 参数,
就可以禁止或激活相应的网络接口了。当然也可以用专用工具 ifup 和 ifdown 工具;
1. [root@localhost ~]# Linux ifconfig eth0 down
2. [root@localhost ~]# Linux ifconfig eth0 up
3. [root@localhost ~]# ifup eth0
4. [root@localhost ~]# ifdown eth0
对于激活其它类型的网络接口也是如此,比如 ppp0,wlan0 等;不过只是对指定 IP 的网卡有效。
注意:对 DHCP 自动分配的 IP,还得由各个发行版自带的网络工具来激活;当然得安装 dhcp 客户端;
这个您我们应该明白;比如 Redhat/Fedora [root@localhost ~]# /etc/init.d/network start
Slackware 发行版; [root@localhost ~]# /etc/rc.d/rc.inet1
4、Debian、Slackware、Redhat/Fedora、SuSE 等发行版专用网络接口配置工具;
由于 Linux ifconfig 用起来比较麻烦,而且是用来测试网络之用,但这个工具并不能修改网络接
口的相应配置文件。虽然也能通过把Linux ifconfig配置网络接口的语句写入类似/etc/rc.d/rc.local
文件中,但相对来说还是写入关于网络接口的配置文件中更为安全和可靠;但对于虚拟网络接口写入类
似/etc/rc.d/rc.local 中还是可以的;
下面我们介绍一下各个发行版的网络接口配置工具;
4.1 Debian 网络接口配置文件和专用配置工具;
正在增加中;
4.2 Redhat/Fedora 网络接口的配置文件和网络接口专用配置工具;
在 Redhat/Fedora 中,与乙太网卡相关的配置文件位于 /etc/sysconfig/network-scripts 目录中,
比如 ifcfg-eth0、ifcfg-eth1 .... ....
4.21 Redhat/Fedora 或类似这样的系统,网卡的配置文件;
</FONT?< p>
比如在 Fedora 5.0 中,ifcfg-eth0 ; 如果您用 DHCP 服务器来自动获取 IP 的,一般情况下
ifcfg-eth0 的内容是类似下面这样的;
1. DEVICE=eth0
2. ONBOOT=yes
3. BOOTPROTO=dhcp
4. TYPE=Ethernet
如果您是指定 IP 的,一般内容是类似下面的;
1. DEVICE=eth0 注:网络接口
2. ONBOOT=yes 注:开机引导时激活
3. BOOTPROTO=static 注:采用静态 IP 地址;
4. IPADDR=192.168.1.238 注:IP 地址
5. NETMASK=255.255.255.0 注:网络掩码;
6. GATEWAY=192.168.1.1 注:网关;
下面的几个选项也可以利用;
1. HOSTNAME=linxsir03 注:指定主机名;
2. DOMAIN=localdomain 注:指定域名;
3. HWADDR=00:00:11:22:00:aa 注:
指定网卡硬件地址 (MAC 地址), 也可以省略,不过这在这里来更改 MAC 地址一般是不能生效的。
还是通过前面所说的 Linux ifconfig 的办法来更改吧;
4.22 Redhat/Fedora 或类似系统, 配置网络的工具介绍 ;
在 Redhat 早期的版本中, 有 linuxconf 、redhat-config-network 、netconfig 等工具; 在
Redhat/Fedora 最新的版本有 system-config-network-tui (文本模式的) 、system-config-network
(图形模式的),netconfig(文本模式的)。
这些工具都会直接修改Linux系统中关于网络接口的配置文件;这是 Linux ifconfig 所不能比的;
其中 redhat-config-network 和 system-config-network 工具不仅仅是配置网卡的工具,还有配置
ISDN 和普通猫、ADSL 的工具、网络硬件的添加、主机名字的配置、DNS 各客户端的配置等。其实是一
个工具组的集成;
这些工具比较简单,以 root 权限运行命令就能调用,比如:
1. [root@localhost ~]# /usr/sbin/system-config-network
2. [root@localhost ~]# system-config-network
如果您设置了可执行命令的环境变量,不用加路径就可以运行,但前提是您得安装这个网络管理工
具; 不过值得一说的是 netconfig 工具是一个在文本模式比较好的工具,推荐大家使用;理由是这个
工具在文本模式下,也有一个简单的图形界面;还有命令模式;功能强着呢;
1. [root@localhost ~]# netconfig -d eth0 注:配置 eth0
2. [root@localhost ~]# netconfig -d eth1 注:配置 eth1
4.23 Redhat/Fedora 系统中的 netconfig 特别介绍;
netconfig 这个工具,在 Redhat/Fedora 或类似于它们的系统中都是存在的,这个工具比较强大。
所以特别介绍一下。但在 Slackware 中 netconfig 是 TEXT 模式下有一个图形模式,但不能象 Linux
ifconfig 一样用命令来操作网卡接口;
netconfig 的用法如下:
1. [root@localhost ~]# netconfig --help 注:帮助;
2. --bootproto=(dhcp|bootp|none) Boot protocol to use(
3. --gateway=STRING Network gateway(指定网关)
4. --ip=STRING IP address(指定 IP 地址)
5. --nameserver=STRING Nameserver(指定 DNS 客户端)
6. --netmask=STRING Netmask(指定网络掩码)
7. --hostname=STRING Hostname( 指定主机名)
8. --domain=STRING Domain name(指定域名)
9. -d, --device=STRING Network device (指定网络设备)
10. --nodns No DNS lookups (没有 DNS 查询)
11. --hwaddr=STRING Ethernet hardware address (指定网卡的物理地址)
12. --description=STRING Description of the device (描述性文字)
13. Help options: (帮助选项)
14. -?, --help Show this help message
15. --usage Display brief usage message
实例一:设置网卡的 DHCP 模式自动获得 IP [root@localhost ~]# netconfig -d eth0
--bootproto=dhcp
实例一:手动设置网卡的 IP 等 [root@localhost ~]# netconfig -d eth0 --ip=192.168.1.33
--netmask=255.255.255.0 --gateway=192.168.1.1
4.3 Slackware 网卡配置文件和配置工具;
Slackware 有关网卡的配置文件是/etc/rc.d/rc.inet1.conf , 这个文件包括乙太网接口的网卡
和无线网卡的配置。Slackware 还是比较纯净的,网络配置也较简单;在 Slackware 中也有 netconfig
配置工具,也是 text 模式运行的,人机交互界面,这个设置比较简单;
Slackware 用 netconfig 配置网卡完成后,其实质是修改了/etc/rc.d/rc.inet1.conf 文件。
Slackware 是源法原味的 Linux 系统,他的配置文件比较标准 ,所以我推荐您在生产型的系统,不妨
尝试一下 Slackware ;
配置好网卡后,我们还得运行下面的命令,才能激活网卡; [root@localhost ~]#
/etc/rc.d/rc.inet1 下面是一个例子,比如此机器有两个网卡 eth0 和 eth1,eth0 用 DHCP 获得 IP 地
址,eth1 指定 IP 地址;
1. # Config information for eth0:
2. IPADDR[0]=""
3. NETMASK[0]=""
4. USE_DHCP[0]="yes" 注:在这里写上 yes,表示用 DHCP 获得 IP;
5. DHCP_HOSTNAME[0]="linuxsir01" 注:DNS 服务器主机名,也可以用 IP 来指定 DNS 服务器;
6. # Config information for eth1: 注:网卡 eth1 的配置;
7. IPADDR[1]="192.168.1.33" 注:指定 IP 地址;
8. NETMASK[1]="255.255.255.0" 注:指定掩码;
9. USE_DHCP[1]="no" 注:不用 DHCP 获得 IP;
10. DHCP_HOSTNAME[1]=""
11. # Config information for eth2:
12. IPADDR[2]=""
13. NETMASK[2]=""
14. USE_DHCP[2]=""
15. DHCP_HOSTNAME[2]=""
16. # Config information for eth3:
17. IPADDR[3]=""
18. NETMASK[3]=""
19. USE_DHCP[3]=""
20. DHCP_HOSTNAME[3]=""
21. # Default gateway IP address:
22. GATEWAY="192.168.1.1" 注:指定网关;
4.4 SuSE 或 OpenSuSE 网卡配置文件和配置工具;
正在更新之中;
5、关于拔号工具的介绍;
有的弟兄可能需要 ADSL 猫和普通猫的拔号工具;现在我们分别介绍一下;
5.1 ADSL pppoe 拔号工具 rp-pppoe;
如果您的 ADSL 不是路由的,如果是路由的,在路由路就能设置好自动拔号。只要把机器接上就能
用了,这个咱们不说了,路由器大家都会用;但如果您的 ADSL 不支持路由,或您想用您当前所用的主
机来做路由器;这就需要一个拔号软件;
目前国内大多城市都用的是 pppoe 协议 ,所以我们有必要介绍 pppoe 拔号软件,在 Linux 中,这
个软件的名字是 rp-pppoe ; rp-pppoe 主页;
http:
5.11 各大发行版自带的 rp-pppoe 的安装和使用;
rp-pppoe 目前在各大发行版本都是存在的,比如 Redhat/Fedora、红旗、Slackware、Debian、SuSE
等系统,都是采用这个拔号软件,所以您大可不必为下载源码编译安装。只需要在各大发行版的安装盘
中就可以找得到;请用各大发行版自带的软件包管理工具来安装此软件包;
如果您用的是各大发行版提供的 rp-pppoe 软件包 比如 RPM 包的系统是用 rpm -ivh
rp-pppoe*.rpmSlackware 系统是用 installpkg rp-pppoe*.tgz 在 Redhat/Fedora 中可以通过图形配
置工具来完成,redhat-config-network 命令,调用配置网络,要通过 XDSL 来添加拔号,比较简单;
所有发行版通用的方法是 adsl-setup 命令来配置 ADSL;
1. [root@localhost ~]# adsl-setup 注:配置 pppoe 拔号,请文档下面,都差不多;
2. [root@localhost ~]# adsl-start 注:启动拔号;
3. [root@localhost ~]# adsl-stop 注:断开连接;
5.12 如果是源码包安装,我们要自己来编译安装;
[root@localhost ~]# tar zxvf rp-pppoe-3.8.tar.gz
[root@localhost ~]# cd rp-pppoe-3.8
[root@localhost rp-pppoe-3.8]# ./go
Welcome to the Roaring Penguin PPPoE client setup. First, I will run
some checks on your system to make sure the PPPoE client is installed
properly...
Looks good! Now, please enter some information:
USER NAME
>>> Enter your PPPoE user name (default bxxxnxnx@sympatico.ca): 在这里添写你的拔号用户
名;就是服务商提供的;
>>> Enter the Ethernet interface connected to the DSL modem
For Solaris, this is likely to be something like /dev/hme0.
For Linux, it will be ethn, where 'n' is a number.
(default eth0): eth0 如果是乙太接口的 ADSL,就要在这里写上接猫的那个网络接口号。此处是
eth0;
Do you want the link to come up on demand, or stay up continuously?
If you want it to come up on demand, enter the idle time in seconds
after which the link should be dropped. If you want the link to
stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP
addresses. You may have some problems with demand-activated links.
>>> Enter the demand value (default no): 注:默认回车
>>> Enter the DNS information here: 202.96.134.133 注:在这里写上 DNS 服务器地址;可以
和提供商要,也可以用我写的这个;
Please enter the IP address of your ISP's secondary DNS server.
If you just press enter, I will assume there is only one DNS server.
>>> Enter the secondary DNS server address here: 202.96.128.143 这是第二个 DNS 服务器地
址;
>>> Please enter your PPPoE password:在这里输入用户的密码;
>>> Please re-enter your PPPoE password: 确认密码;
The firewall choices are:
0 - NONE: This script will not set any firewall rules. You are responsible
for ensuring the security of your machine. You are STRONGLY
recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
for a LAN
>>> Choose a type of firewall (0-2): 2 注:在这里写上 2,可以共享上网的;当然还得加一
条防火墙规划 ;
Ethernet Interface: eth0
User name:dxxx
Activate-on-demand: No
Primary DNS: 202.96.134.133
Secondary DNS: 202.96.128.143
Firewalling: MASQUERADE
>>> Accept these settings and adjust configuration files (y/n)? y 注:是不是保存配置;
关于共享上网,请参考:《ADSL 共享上网的解决办法》
5.2 普通猫的拔号工具介绍;
普通猫分为串口和 PCI 的,请查看《关于网络设备概述 》普通猫的拔号工具主要有 kppp 和 wvdial;
在 Redhat/Fedora 中,用 system-config-network 或 redhat-config-network 也能设置 ppp 拔号; 在
KDE 桌面环境下,大家一般都用 kppp 拔号工具,点鼠标就可以完成;
wvdial 工具是文本的,几乎在各大发行版都有。wvdial 的配置文件是/etc/wvdial.conf 。如果您
的猫已经驱动好了,运行一下 wvdialconf 命令就生成了/etc/wvdial.conf 了 。当然您得查看一下它
的内容;
1. [root@localhost ~]# wvdialconf
2. [root@localhost ~]# more /etc/wvdial.conf
关于 wvdial 工具的使用,请查看《普通 56K 猫拔号上网工具 wvdial 介绍》
6、无线网卡;
正在更新之中;由于我没有这样的网卡,是否有弟兄写一篇详尽一点的?在所有涉及无线网卡的文
档中,这块都是空白。缺的就是这个。 看来我是得弄一块无线网卡了。。。。。。
7、DNS 客户端配置文件/etc/resolv.conf;
本来不应该把 DNS 客户端配置文件放在这里来说,但由于新手弟兄上网时,虽然能拔号,但不能以
域名访问。究其原因是由于没有修改 /etc/resolv.conf 文件;
/etc/resolv.conf 里面存放的是各大通信公司 DNS 服务器列表;下面的三个地址可以用一用;当
然您可以打电话问你的服务商;
1. nameserver 202.96.134.133
2. nameserver 202.96.128.143
3. nameserver 202.96.68.38
本文写了常用的乙太网接口的配置,介绍了 Linux ifconfig 、netconfig 等,我感觉最重要的还
是配置文件,新手弟兄还是仔细看看配置文件吧。当您用工具配置完成后,不妨查看一下相应配置文件
的变化。我认为这样的学习方式,能知其然,然后知所以然;
7.10、tcpdump
tcpdump 是一个用于截取网络分组,并输出分组内容的工具。tcpdump 凭借强大的功能和灵活的截
取策略,使其成为类 UNIX 系统下用于网络分析和问题排查的首选工具。
tcpdump 提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常
有用的工具。tcpdump 存在于基本的 Linux 系统中,由于它需要将网络界面设置为混杂模式,普通用户
不能正常执行,但具备 root 权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分
析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。
7.1.1 概述
顾名思义,tcpdump 可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、
协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你去掉无用的信息。
引用
# tcpdump -vv
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:53:21.444591 IP (tos 0x10, ttl 64, id 19324, offset 0, flags [DF], proto 6, length: 9
2) asptest.localdomain.ssh > 192.168.228.244.1858: P 3962132600:3962132652(52) ack 272652
5936 win 1266
asptest.localdomain.1077 > 192.168.228.153.domain: [bad udp cksum 166e!] 325+ PTR? 244.2
28.168.192.in-addr.arpa. (46)
11:53:21.446929 IP (tos 0x0, ttl 64, id 42911, offset 0, flags [DF], proto 17, length: 1
51) 192.168.228.153.domain > asptest.localdomain.1077: 325 NXDomain q: PTR? 244.228.168.
192.in-addr.arpa. 0/1/0 ns: 168.192.in-addr.arpa. (123)
11:53:21.447408 IP (tos 0x10, ttl 64, id 19328, offset 0, flags [DF], proto 6, length: 1
72) asptest.localdomain.ssh > 192.168.228.244.1858: P 168:300(132) ack 1 win 1266
347 packets captured
1474 packets received by filter
745 packets dropped by kernel
不带参数的 tcpdump 会收集网络中所有的信息包头,数据量巨大,必须过滤。
7.1.2、命令介绍
命令格式为:tcpdump [-nn] [-i 接口] [-w 储存档名] [-c 次数] [-Ae]
[-qX] [-r 文件] [所欲捕获的数据内容]
参数:
-nn,直接以 IP 及 Port Number 显示,而非主机名与服务名称。
-i,后面接要「监听」的网络接口,例如 eth0, lo, ppp0 等等的接口。
-w,如果你要将监听所得的数据包数据储存下来,用这个参数就对了。后面接文件名。
-c,监听的数据包数,如果没有这个参数, tcpdump 会持续不断的监听,
直到用户输入 [ctrl]-c 为止。
-A,数据包的内容以 ASCII 显示,通常用来捉取 WWW 的网页数据包资料。
-e,使用资料连接层 (OSI 第二层) 的 MAC 数据包数据来显示。
-q,仅列出较为简短的数据包信息,每一行的内容比较精简。
-X,可以列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用。
-r,从后面接的文件将数据包数据读出来。那个「文件」是已经存在的文件,并且这个「文件」是由
-w 所制作出来的。所欲捕获的数据内容:我们可以专门针对某些通信协议或者是 IP 来源进行数据包
捕获。
那就可以简化输出的结果,并取得最有用的信息。常见的表示方法有。
'host foo', 'host 127.0.0.1' :针对单台主机来进行数据包捕获。
'net 192.168' :针对某个网段来进行数据包的捕获。
'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制。
'tcp port 21':还可以针对通信协议检测,如 tcp、udp、arp、ether 等。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
r' ,'||';
范例一:以 IP 与 Port Number 捉下 eth0 这个网卡上的数据包,持续 3 秒
[root@linux ~]# tcpdump -i eth0 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 116:232(116) ack 1 win
9648
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 232:364(132) ack 1 win
9648
<==按下 [ctrl]-c 之后结束
6680 packets captured <==捉取下来的数据包数量
14250 packets received by filter <==由过滤所得的总数据包数量
7512 packets dropped by kernel <==被核心所丢弃的数据包
至于那个在范例一所产生的输出中,我们可以大概区分为几个字段,现以范例一当中那行特殊字体行来
说明一下:
· 01:33:40.41:这个是此数据包被捕获的时间,“时:分:秒”的单位。
· IP:通过的通信协议是 IP。
· 192.168.1.100.22>:传送端是 192.168.1.100 这个 IP,而传送的 Port Number 为 22,那个大于(>)
的符号指的是数据包的传输方向。
· 192.168.1.11.1190:接收端的 IP 是 192.168.1.11,且该主机开启 port 1190 来接收。
· P 116:232(116):这个数据包带有 PUSH 的数据传输标志,且传输的数据为整体数据的 116~232 Byt
e,所以这个数据包带有 116 Bytes 的数据量。
· ack 1 win 9648:ACK 与 Window size 的相关资料。
最简单的说法,就是该数据包是由 192.168.1.100 传到 192.168.1.11,通过的 port 是由 22 到 1190,
且带有 116 Bytes 的数据量,使用的是 PUSH 的标记,而不是 SYN 之类的主动联机标志。
接下来,在一个网络状态很忙的主机上面,你想要取得某台主机对你联机的数据包数据时,使用 tcpdu
mp 配合管线命令与正则表达式也可以,不过,毕竟不好捕获。我们可以通过 tcpdump 的表达式功能,
就能够轻易地将所需要的数据独立的取出来。在上面的范例一当中,我们仅针对 eth0 做监听,所以整
个 eth0 接口上面的数据都会被显示到屏幕上,但这样不好分析,可以简化吗?例如,只取出 port 21
的联机数据包,可以这样做:
[root@linux ~]# tcpdump -i eth0 -nn port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:54:37.96 IP 192.168.1.11.1240 > 192.168.1.100.21:. ack 1 win 65535
01:54:37.96 IP 192.168.1.100.21 > 192.168.1.11.1240:P 1:21(20) ack 1 win 5840
01:54:38.12 IP 192.168.1.11.1240 > 192.168.1.100.21:. ack 21 win 65515
01:54:42.79 IP 192.168.1.11.1240 > 192.168.1.100.21:P 1:17(16) ack 21 win 65515
01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: . ack 17 win 5840
01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: P 21:55(34) ack 17 win 5840
看!这样就仅取出 port 21 的信息,如果仔细看的话,你会发现数据包的传递都是双向的,Client 端
发出请求而 Server 端则予以响应,所以,当然是有去有回了。而我们也就可以经过这个数据包的流向
来了解到数据包运动的过程了。例如:
· 我们先在一个终端机窗口输入“tcpdump-i lo-nn”的监听。
· 再另开一个终端机窗口来对本机(127.0.0.1)登录“ssh localhost”,那么输出的结果会是如何?
[root@linux ~]# tcpdump -i lo -nn
1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
2 listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
3 11:02:54.253777 IP 127.0.0.1.32936 >
127.0.0.1.22: S 933696132:933696132(0)
win 32767
4 11:02:54.253831 IP 127.0.0.1.22 > 127.0.0.1.32936:
S 920046702:920046702(0)
ack 933696133 win 32767
5 11:02:54.253871 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 1 win 8192
6 11:02:54.272124 IP 127.0.0.1.22 > 127.0.0.1.32936:
P 1:23(22) ack 1 win 8192
7 11:02:54.272375 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 23 win 8192
代码显示的头两行是 tcpdump 的基本说明,然后:
· 第 3 行显示的是来自 Client 端带有 SYN 主动联机的数据包。
· 第 4 行显示的是来自 Server 端,除了响应 Client 端之外(ACK),还带有 SYN 主动联机的标志。
· 第 5 行则显示 Client 端响应 Server 确定联机建立(ACK)。
· 第 6 行以后则开始进入数据传输的步骤。
从第 3~5 行的流程来看,熟不熟悉啊?没错。那就是 3 次握手的基础流程,有趣吧。不过 tcpdump 之所
以被称为黑客软件之一远不止上面介绍的功能。上面介绍的功能可以用来作为我们主机的数据包联机与
传输的流程分析,这将有助于我们了解到数据包的运作,同时了解到主机的防火墙设置规则是否有需要
修订的地方。
还有更神奇的用法。当我们使用 tcpdump 在 Router 上面监听明文的传输数据时,例如 FTP 传输协议,
你觉得会发生什么问题呢?我们先在主机端执行“tcpdump -i lo port 21 -nn –X”,然后再以 FTP
登录本机,并输入账号与密码,结果你就可以发现如下的状况:
[root@linux ~]# tcpdump -i lo -nn -X 'port 21'
0x0000: 4500 0048 2a28 4000 4006 1286 7f00 0001 E..H*(@.@.......
0x0010: 7f00 0001 0015 80ab 8355 2149 835c d825 .........U!I.\.%
0x0020: 8018 2000 fe3c 0000 0101 080a 0e2e 0b67 .....<.........g
0x0030: 0e2e 0b61 3232 3020 2876 7346 5450 6420 ...a220.(vsFTPd.
0x0040: 322e 302e 3129 0d0a 2.0.1)..
0x0000: 4510 0041 d34b 4000 4006 6959 7f00 0001 E..A.K@.@.iY....
0x0010: 7f00 0001 80ab 0015 835c d825 8355 215d .........\.%.U!]
0x0020: 8018 2000 fe35 0000 0101 080a 0e2e 1b37 .....5.........7
0x0030: 0e2e 0b67 5553 4552 2064 6d74 7361 690d ...gUSER.dmtsai.
0x0040: 0a .
0x0000: 4510 004a d34f 4000 4006 694c 7f00 0001 E..J.O@.@.iL....
0x0010: 7f00 0001 80ab 0015 835c d832 8355 217f .........\.2.U!.
0x0020: 8018 2000 fe3e 0000 0101 080a 0e2e 3227 .....>........2'
0x0030: 0e2e 1b38 5041 5353 206d 7970 6173 7377 ...8PASS.mypassw
0x0040: 6f72 6469 7379 6f75 0d0a ordisyou..
上面的输出结果已经被简化过了,你需要自行在你的输出结果中搜索相关的字符串才行。从上面输出结
果的特殊字体中,我们可以发现该 FTP 软件使用的是 vsFTPd,并且用户输入 dmtsai 这个账号名称,且
密码是 mypasswordisyou。如果使用的是明文方式来传输你的网络数据呢?
另外你得了解,为了让网络接口可以让 tcpdump 监听,所以执行 tcpdump 时网络接口会启动在“混杂模
式(promiscuous)”,所以你会在 /var/log/messages 里面看到很多的警告信息,通知你说你的网卡被
设置成为混杂模式。别担心,那是正常的。至于更多的应用,请参考 man tcpdump 了。
例题:如何使用 tcpdump 监听来自 eth0 适配卡且通信协议为 port 22,目标来源为 192.168.1.100 的
数据包资料?
答:tcpdump -i eth0 -nn port 22 and src host 192.168.1.100
例题:如何使用 tcpdump 抓取访问 eth0 适配卡且访问端口为 tcp 9080?
答:tcpdump -i eth0 dst 172.168.70.35 and tcp port 9080
例题:如何使用 tcpdump 抓取与主机 192.168.43.23 或着与主机 192.168.43.24 通信报文,并且显示在
控制台上
答:tcpdump -X -s 1024 -i eth0 host \(192.168.43.23 or 192.168.43.24\) and host 172.16.7
0.35
注:必须指定网卡
7.1.3、tcpdump 的表达式介绍
表达式是一个正则表达式,tcpdump 利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,
则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包 将会被截获。
在表达式中一般如下几种类型的关键字:
引用
第一种是关于类型的关键字,主要包括 host,net,port,例如 host 210.27.48.2, 指明 210.27.48.
2 是一台主机,net 202.0.0.0 指明 202.0.0.0 是一个网络地址,port 23 指明端口号是 23。如果没有
指定类型,缺省的类型是 host。
第二种是确定传输方向的关键字,主要包括 src,dst,dst or src,dst and src, 这些关键字指明
了传输的方向。举例说明,src 210.27.48.2 ,指明 ip 包中源地址是 210.27.48.2 , dst net 202.
0.0.0 指明目的网络地址是 202.0.0.0。如果没有指明 方向关键字,则缺省是 src or dst 关键字。
第三种是协议的关键字,主要包括 fddi,ip,arp,rarp,tcp,udp 等类型。Fddi 指明是在 FDDI (分
布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi 和 ether 具有类似
的源地址和目的地址,所以可以将 fddi 协议包当作 ether 的包进行处理和分析。 其他的几个关键字就
是指明了监听的包的协议内容。如果没有指定任何协议,则 tcpdump 将会 监听所有协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater,
还有三种逻辑运算,取非运算是 ‘not ' '! ‘, 与运算是’and’,’&&';或运算是’or’ ,’|
|’; 这些关键字可以组合起来构成强大的组合条件来满足人们的需要。
四、输出结果介绍
下面我们介绍几种典型的 tcpdump 命令的输出信息
(1) 数据链路层头信息
使用命令:
#tcpdump --e host ICE
ICE 是一台装有 linux 的主机。它的 MAC 地址是 0:90:27:58:AF:1A H219 是一台装有 Solaris 的
SUN 工作站。它的 MAC 地址是 8:0:20:79:5B:46; 上一条命令的输出结果如下所示:
引用
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ICE. telne t
0:0(0) ack 22535 win 8760 (DF)
21:50:12 是显示的时间, 847509 是 ID 号,eth0 <表示从网络接口 eth0 接收该分组, eth0 >表示
从网络接口设备发送分组, 8:0:20:79:5b:46 是主机 H219 的 MAC 地址, 它表明是从源地址 H219 发来
的分组. 0:90:27:58:af:1a 是主机 ICE 的 MAC 地址, 表示该分组的目的地址是 ICE。 ip 是表明该分
组是 IP 分组,60 是分组的长度, h219.33357 > ICE. telnet 表明该分组是从主机 H219 的 33357 端
口发往主机 ICE 的 TELNET(23)端口。 ack 22535 表明对序列号是 222535 的包进行响应。 win 8760
表明发 送窗口的大小是 8760。
(2) ARP 包的 tcpdump 输出信息
使用命令:
#tcpdump arp
得到的输出结果是:
引用
22:32:42.802509 eth0 > arp who-has route tell ICE (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
22:32:42 是时间戳, 802509 是 ID 号, eth0 >表明从主机发出该分组,arp 表明是 ARP 请求包, who
-has route tell ICE 表明是主机 ICE 请求主机 route 的 MAC 地址。 0:90:27:58:af:1a 是主机 ICE 的
MAC 地址。
(3) TCP 包的输出信息
用 tcpdump 捕获的 TCP 包的一般输出信息是:
引用
src > dst: flags data-seqno ack window urgent options
src > dst:表明从源地址到目的地址, flags 是 TCP 报文中的标志信息,S 是 SYN 标志, F (FIN),
P (PUSH) , R (RST) "." (没有标记); data-seqno 是报文中的数据 的顺序号, ack 是下次期望的顺
序号, window 是接收缓存的窗口大小, urgent 表明 报文中是否有紧急指针。 Options 是选项。
(4) UDP 包的输出信息
用 tcpdump 捕获的 UDP 包的一般输出信息是:
引用
route.port1 > ICE.port2: udp lenth
UDP 十分简单,上面的输出行表明从主机 route 的 port1 端口发出的一个 UDP 报文 到主机 ICE 的 port
2 端口,类型是 UDP, 包的长度是 lenth。
五、举例
(1) 想要截获所有 210.27.48.1 的主机收到的和发出的所有的分组:
#tcpdump host 210.27.48.1
(2) 想要截获主机 210.27.48.1 和主机 210.27.48.2 或 210.27.48.3 的通信,使用命令(注意:括号
前的反斜杠是必须的):
#tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3 \)
(3) 如果想要获取主机 210.27.48.1 除了和主机 210.27.48.2 之外所有主机通信的 ip 包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
(4) 如果想要获取主机 192.168.228.246 接收或发出的 ssh 包,并且不转换主机名使用如下命令:
#tcpdump -nn -n src host 192.168.228.246 and port 22 and tcp
(5) 获取主机 192.168.228.246 接收或发出的 ssh 包,并把 mac 地址也一同显示:
# tcpdump -e src host 192.168.228.246 and port 22 and tcp -n -nn
(6) 过滤的是源主机为 192.168.0.1 与目的网络为 192.168.0.0 的报头:
tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24
(7) 过滤源主机物理地址为 XXX 的报头:
tcpdump ether src 00:50:04:BA:9B and dst……
(为什么 ether src 后面没有 host 或者 net?物理地址当然不可能有网络喽)。
(8) 过滤源主机 192.168.0.1 和目的端口不是 telnet 的报头,并导入到 tes.t.txt 文件中:
Tcpdump src host 192.168.0.1 and dst port not telnet -l > test.txt
ip icmp arp rarp 和 tcp、udp、icmp 这些选项等都要放到第一个参数的位置,用来过滤数据报的类
型。
十五、 配置文件
1、配置文件介绍:
每个 Linux 程序都是一个可执行文件,它含有操作码列表,CPU 将执行这些操作码来完成特定的操作。
例如,ls 命令是由 /bin/ls 文件提供的,该文件含有机器指令的列表,在屏幕上显示当前目录中文件
的列表时需要使用这些机器指令。几乎每个程序的行为都可以通过修改其配置文件来按照您的偏好或需
要去定制。
Linux 中有没有一个标准的配置文件格式?
一句话,没有。不熟悉 Linux 的用户(一定)会感到沮丧,因为每个配置文件看起来都象是一个要迎
接的新挑战。在 Linux 中,每个程序员都可以自由选择他或她喜欢的配置文件格式。可以选择的格式
很多,从 /etc/shells 文件(它包含被一个换行符分开的 shell 的列表),到 Apache 的复杂的
/etc/httpd.conf 文件。
什么是系统配置文件?
内核本身也可以看成是一个“程序”。为什么内核需要配置文件?内核需要了解系统中用户和组的列表,
进而管理文件权限(即根据权限判定特定用户(UNIX_USERS)是否可以打开某个文件)。注意,这些文
件不是明确地由程序读取的,而是由系统库所提供的一个函数读取,并被内核使用。例如,程序需要某
个用户的(加密过的)密码时不应该打开 /etc/passwd 文件。相反,程序应该调用系统库的 getpw() 函
数。这种函数也被称为系统调用。打开 /etc/passwd 文件和之后查找那个被请求的用户的密码都是由
内核(通过系统库)决定的。
除非另行指定,Red Hat Linux 系统中大多数配置文件都在 /etc 目录中。配置文件可以大致分为下面
几类:
2、配置文件分类:
访问文件
/etc/host.conf 告诉网络域名服务器如何查找主机名。(通常是 /etc/hosts,
然后就是名称服务器;可通过 netconf 对其进行更改)
/etc/hosts
包含(本地网络中)已知主机的一个列表。如果系统的 IP 不
是动态生成,就可以使用它。对于简单的主机名解析(点分表
示法),在请求 DNS 或 NIS 网络名称服务器之前,
/etc/hosts.conf 通常会告诉解析程序先查看这里。
/etc/hosts.allow 请参阅 hosts_access 的联机帮助页。至少由 tcpd 读取。
/etc/hosts.deny 请参阅 hosts_access 的联机帮助页。至少由 tcpd 读取。
引导和登录/注销
/etc/issue &
/etc/issue.net
这些文件由 mingetty(和类似的程序)读取,用来向从终端(issue)或
通过 telnet 会话(issue.net)连接的用户显示一个“welcome”字符串。
它们包括几行声明 Red Hat 版本号、名称和内核 ID 的信息。它们由
rc.local 使用。
/etc/redhat-release 包括一行声明 Red Hat 版本号和名称的信息。由 rc.local 使用。
/etc/rc.d/rc
通常在所有运行级别运行,级别作为参数传送。例如,要以图形(Graphics)
模式(X-Server)引导机器,请在命令行运行下面的命令: init 5 。运
行级别 5 表示以图形模式引导系统。
/etc/rc.d/rc.local 非正式的。可以从 rc、rc.sysinit 或 /etc/inittab 调用。
/etc/rc.d/rc.sysinit 通常是所有运行级别的第一个脚本。
/etc/rc.d/rc/rcX.d
从 rc 运行的脚本( X 表示 1 到 5 之间的任意数字)。这些目录是特
定“运行级别”的目录。当系统启动时,它会识别要启动的运行级别,然
后调用该运行级别的特定目录中存在的所有启动脚本。例如,系统启动时
通常会在引导消息之后显示“entering run-level 3”的消息;这意味着
/etc/rc.d/rc3.d/ 目录中的所有初始化脚本都将被调用。
文件系统
内核提供了一个接口,用来显示一些它的数据结构,这些数据结构对于决定诸如使用的中断、初始化
的设备和内存统计信息之类的系统参数可能很有用。这个接口是作为一个独立但虚拟的文件系统提供
的,称为 /proc 文件系统。很多系统实用程序都使用这个文件系统中存在的值来显示系统统计信息。
例如,/proc/modules 文件列举系统中当前加载的模块。lsmod 命令读取此信息,然后将其以人们可
以看懂的格式显示出来。下面表格中指定的 mtab 文件以同样的方式读取包含当前安装的文件系统的
/proc/mount 文件。
/etc/mtab
这将随着 /proc/mount 文件的改变而不断改变。换句话说,文件系统被安装和
卸载时,改变会立即反映到此文件中。
1.文件格式
/etc/mtab 的格式和/etc/fstab 是一样的.但这个文件不能算是用户配置文件,
他是由系统维护的.和/etc/fstab 的区别在于, fstab 是系统启动时需挂载的文
件系统列表,而 mtab 是系统当前已挂载的文件系统列表,它由系统维护,在用户
执行了 mount 或者 umount 命令后自动更新.用户不应该对此文件作任何修改.
2.安全性
/etc/mtab 的默认权限仍然是 644
3.相关命令
mount
umount
smbmount
/etc/fstab
1.文件格式
/etc/fstab 记载了系统启动时自动挂载的文件系统。一行为一条记录。每条记
录有 6 个字段,字段间用空格或者 tab 键分开。这六个字段分别是:设备名称,
挂载点(除交换分区为 swap 外,都必须是一个存在的目录名),文件系统类型,
mount 选项,是否需要 dump(1 表示需要,0 表示不需要),在 reboot 期间 fsck
检查的顺序(激活文件系统设定为 1,其余文件系统设定为 2,若设定为 0 表示
该文件系统不需要被检查)。
在 linux 和 windows 共存时,也许想开机自动挂载 windows 分区,那么就可以
在这个文件里加上相应的记录。
某些时候对硬盘分区作了调整以后,这里也需要做一些相应的修改。否则会出
现一些问题。
可用的 mount 选项:
async
对该文件系统的所有 I/O 操作都异步执行
ro
该文件系统是只读的
rw
该文件系统是可读可写的
atime
更新每次存取 inode 的存取时间
auto
可以使用 -a 选项 mount
defaults
使用预设的选项:rw,suid,dev,exec,auto,nouser,async
dev
解释在文件系统上的字符或区块设备
exec
允许执行二进制文件
noatime
不要在这个文件系统上更新存取时间
noauto
这个文件系统不能使用 -a 选项来 mount
nodev
不要解释在文件系统上的字符或区块设备
noexec
不允许在 mounted 文件系统上执行任何的二进制文件。这个选项对于具有包含
非它自己的二进制结构的文件系统服务器而言非常有用
nosuid
不允许 setuid 和 setgid 位发生作用。(这似乎很安全,但是在安装 suidperl
后,同样不安全)。
nouser
限制一般非 root 用户 mount 文件系统
remount
尝试重新 mount 已经 mounted 的文件系统。这通常是用来改变文件系统的 mount
标志,特别是让只读的文件系统变成可擦写的
suid
允许 setuid 和 setgid 位发生作用
sync
文件系统的所有 I/O 同步执行
user
允许一般非 root 用户 mount 文件系统。这个选项会应用 noexec,nosuid,nodev
这三个选项(除非在命令行上有指定覆盖这些设定的选项)。
3.安全性
/etc/fstab 的默认权限是 644,所有者和所有组均为 root
2.相关命令
mount
df
列举计算机当前“可以安装”的文件系统。这非常重要,因为计算机引导时将
运行 mount -a 命令,该命令负责安装 fstab 的倒数第二列中带有“1”标记
的每一个文件系统。
/etc/mtools.conf DOS 类型的文件系统上所有操作(创建目录、复制、格式化等等)的配置。
系统管理
/etc/group
1.文件格式
/etc/group 存储了系统中所有用户的基本信息.它的格式和/etc/passwd 的格
式基本类似,这里就说简单一点,
/etc/group 也是由一条条的记录组成.每条记录分 4 个字段.分别是组名,组口
令,组 ID 和该组包含用户列表.其中组口令不再使用(现在只是保留为 x).最
后一个域是一个用逗号分隔的用户名列表,这个组的成员就是在这里列出的所
有用户.
2.安全性
/etc/group 的默认权限是 644,所有者和所有组均为 root.注意经常检察.
3.相关命令
groupadd
groupdel
groupmod
groups
包含有效的组名称和指定组中包括的用户。单一用户如果执行多个任务,可以
存在于多个组中。例如,如果一个“用户”是“project 1”工程组的成员,同
时也是管理员,那么在 group 文件中他的条目看起来就会是这样的:user: * :
group-id : project1
/etc/nologin
这是一个普通的文本文件.你可以在里面写上你喜欢的任何东西./etc/nologin
的作用在于,如果它存在,那么系统将拒绝任何非 root 用户的登录请求,并对其
它登录用户显示此文件的内容
此文件常由系统在停机前自动生成.有时系统管理员也会手工生成它,用以禁止
其它用户登录,方便进行一些管理工作.
etc/passwd
1.文件格式
/etc/passwd 存储了系统中所有用户的基本信息.可以说这是系统中最重要的一
个配置文件.对它作任何修改一定要小心谨慎.同时要经常检察这个文件,包括
它的内容和权限设置.
使用 vi 编辑程序打开此文件,可以看到这个文件由许多行记录组成.每一行记
录对应着一个用户.我们以第一行为例.第一行一般是 root 用户的记录,尽管这
不是必需的.实际上用户记录出现的顺序并没有任何的意义.
在我的系统中,/etc/passwd 的第一行看起来是这样的:
root:x:0:0:root:/root:/bin/bash
每一条记录都由 7 个字段组成,每个字段之间用冒号隔开.第一个字段是用户
名,示例中是 root.第二个字段是用户口令,示例中是一个字符 x,但这并不表示
root 的口令是单个字符 x,而是说用户口令被加密了,并且加密口令也没有放在
本文件中,而是放到了/etc/shadow(参考 /etc/shadow).假如删除这个 x,那么
root 的口令就清空了.第三个字段是用户的用户 ID,即 uid.第四个字段是用户
的组 ID,即 gid. 这里要注意,系统分辨两个用户是看他们的 uid 是否相同而不
是看他们的用户名是否相同.用户名不同但 uid 相同的两个用户实际上是同一
个用户.对组来说也有类似的规则.所以这两个字段大家一定要注意.第五个字
段是用户全称,没有什么实际用途,相当于注释,这里是 root.第六个字段是用户
的主目录 (home),即登录系统后默认所处目录,这里是/root.最后一个字段是
用户的登录 shell,可以是系统拥有的任何一个 shell 的完整路径,这里是
/bin/bash.注意,这个字段可以有一个特殊的值,即/sbin/nologin.如果把一个
用户的登录 shell 设置为 /sbin/nologin 的话,系统将禁止此用户的本地登录.
请参阅“man passwd”。它包含一些用户帐号信息,包括密码(如果未被 shadow
程序加密过)。
2.安全性
/etc/passwd 的默认权限为 644,所有者和所有组均为 root.切记,在任何情况下
都不要更改它.
3.相关命令
passwd
useradd
userdel
adduser
usermod
users
/etc/rpmrc rpm 命令配置。所有的 rpm 命令行选项都可以在这个文件中一起设置,这样,
当任何 rpm 命令在该系统中运行时,所有的选项都会全局适用。
/etc/securetty
包含设备名称,由 tty 行组成(每行一个名称,不包括前面的 /dev/),root
用户在这里被允许登录。
1.文件格式
这是一个设备文件的列表.文件名取相对于/dev 的相对路径.如,/dev/tty1 记
为 tty1
root 只有从这个列表中列出的设备上才可以登录系统.
例如:
代码:
$cat /etc/securretty
tty1
tty2
tty3
这里 root 被限定只能从/dev/tty1, /dev/tty2, /dev/tty3 这三个设备上登录
系统
如果/etc/securretty 不存在的话,那么 root 将可以从任何设备登录系统.
2.安全性
/etc/securetty 的默认权限是 600,所有者和所有组都是 root
/etc/shadow 包含加密后的用户帐号密码信息,还可以包括密码时效信息。包括的字段有:
• 登录名
• 加密后的密码
• 从 1970 年 1 月 1 日到密码最后一次被更改的天数
• 距密码可以更改之前的天数
• 距密码必须更改之前的天数
• 密码到期前用户被警告的天数
• 密码到期后帐户被禁用的天数
• 从 1970 年 1 月 1 日到帐号被禁用的天数
1.文件格式
/etc/shadow 文件保存的是用户名,密码,用户账号设置相关信息。
例:
root:$1$6UviCNvh$WTR0zPMek41KmzD0Z1DdV1:12264:3:4:5:6:12267:
第一段: root----- 用户注册名
第二段: $1$6UviCNvh$WTR0zPMek41KmzD0Z1DdV1 ----加密口令
第三段: 12264-----上次更动密码的日期,以 1970 年 1 月 1 日为 1,1 天加 1
第四段: 3---------密码将被允许修改之前的天数(0 表示“可在任何时间修
改”)
第五段: 4---------系统将强制用户修改为新密码之前的天数(1 表示“永远
都不能修改”)
第六段: 5---------密码过期之前,用户将被警告过期的天数(-1 表示“没有
警告”)
第七段: 6---------密码过期之后,系统自动禁用帐户的天数(-1 表示“永远
不会禁用”)
第八段: 12267-----该帐户被禁用的天数(-1 表示“该帐户被启用”).以 1970
年 1 月 1 日为 1,1 月 2 日为 2
第九段 ------ 保留供将来使用
注:第 2 段中为*表示帐号不可登录,如密码前为 !! 或只有 !! 表示帐号被锁
2.安全性
/etc/shadow 的默认所有者和所有组均为 root.
建议运行# chattr +i /etc/shadow 来保护文件使其不被意外地删除或重写
3.相关命令
passwd
useradd
userdel
usermod
/ect/gshadow
1.文件格式
/ect/gshadow 文件保存的是用户和组群设置的信息
例:
root:!!::root,wa1
第一段:组名
第四段:该组包含用户列表
2.安全性
/etc/gshadow 的默认所有者和所有组均为 root.
建议运行# chattr +i /etc/shadow 来保护文件使其不被意外地删除或重写
3.相关命令
groupadd
groupdel
groupmod
groups
/etc/sysctl.conf
1.文件格式
/etc/sysctl.conf 是 sysctl 程序的配置文件.sysctl 可以在系统运行时更改内
核参数./etc/sysctl.conf 中的配置将在系统起动时执行.
以 # 和 ; 开始的行是注释,将和空白行一起被忽略.
配置项的格式为:
token = value
token 是一个键名,value 是对应的键值.token 和 value 前后的空格将被忽略
token 不能是随意的字符串.他和/proc/sys 下的文件有一一对应的关系:
假设foo是/proc/sys下的一个文件.删除foo的绝对路径前的 "/proc/sys" 这
一部分,然后把剩下部分中的 "/" 替换成 ".",得到的字符串就是 foo 所对应
的键名.例如:
/proc/sys/net/ipv4/ip_forward 对应的键名为 net.ipv4.ip_forward
应用举例:
Redhat Linux 9 默认是禁止 ip 转发的,而我们在做 ip 伪装时需要起用 ip 转发.
通常的做法是在 iptables 的规则之前加上一句:
echo 1>/proc/sys/net/ipv4/ip_forward
实际上我们也可以在/etc/sysctl.conf 中写上:
net.ipv4.ip_forward = 1
这样系统就默认起用 ip 转发了.当然他不会立即生效.因为/etc/sysctl.conf
是在系统起动时读入的.想要立即生效的话,请使用 sysctl 命令.
2.安全性
/etc/sysctl.conf 的默认权限是 644,所有者和所有组均为 root
3.See also
sysctl(8)
sysctl.conf(5)
proc(5)
procinfo(8)
/etc/shells 包含系统可用的可能的“shell”的列表。
/etc/motd 每日消息;在管理员希望向 Linux 服务器的所有用户传达某个消息时使用。
联网
/etc/gated.conf gated 的配置。只能被 gated 守护进程所使用。
/etc/gated.version 包含 gated 守护进程的版本号。
/etc/gateway 由 routed 守护进程可选地使用。
/etc/networks 列举从机器所连接的网络可以访问的网络名和网络地址。
通过路由命令使用。允许使用网络名称。
/etc/protocols
列举当前可用的协议。请参阅 NAG(网络管理员指南,
Network Administrators Guide)和联机帮助页。 C 接口
是 getprotoent。绝不能更改。
/etc/resolv.conf
在程序请求“解析”一个 IP 地址时告诉内核应该查询哪
个名称服务器。
1.文件格式
/etc/resolv.conf 是系统的 DNS 解析器配置文件,最常见
的用途是用来指定系统所使用的 DNS 服务器地址,您可以
最多指定 MAXNS 个 DNS 服务器,MAXNS 是一个常量,在
/usr/include/resolv.h 中定义,一般为 3。每个 DNS 服务
器地址应该以点分十进制格式写在单独的行上,前面加上
关键字 nameserver。例如:
nameserver 173.26.100.99
nameserver 202.118.224.101
这里我们指定了两个 DNS 服务器,ip 地址分别为
173.26.100.99 和 202.118.224.101。当系统需要进行 DNS
解析时,优先使用列在前面的 DNS Server,如果解析失败
则转而使用下一个 DNS Server。
2.安全性
/etc/resolv.conf 的默认权限为 0644
/etc/host.conf 1.文件格式
/etc/host.conf 也是一个 DNS 解析器配置文件,但它最常
见的用途是用来指定解析器使用的方法。一般来说,DNS
解析可以使用两种方法,一是查询 DNS 服务器,二是使用
本地 hosts 主机表。/etc/host.conf 可以用来指定优先使
用哪一种方法。可以使用 order 关键字来指定他们的优先
级.order 后可跟一种或多种 DNS 查询方法,之间用逗号隔
开,其优先级依次降低。可用的 DNS 查询方法有:
hosts,bind,nis,分别表示使用本地 hosts 主机表,DNS
服务器,NIS 服务器来进行 DNS 查询。最常见的配置是:
order bind,hosts
2.安全性
/etc/host.conf 的默认权限为 0644
/etc/rpc 包含 RPC 指令/规则,这些指令/规则可以在 NFS 调用、
远程文件系统安装等中使用。
/etc/exports 要导出的文件系统(NFS)和对它的权限。
/etc/services 将网络服务名转换为端口号/协议。由 inetd、telnet、
tcpdump 和一些其它程序读取。有一些 C 访问例程。
/etc/inetd.conf
inetd 的配置文件。请参阅 inetd 联机帮助页。包含每个
网络服务的条目,inetd 必须为这些网络服务控制守护进
程或其它服务。注意,服务将会运行,但在 /etc/services
中将它们注释掉了,这样即使这些服务在运行也将不可用。
格式为:<service_name> <sock_type> <proto> <flags>
<user> <server_path> <args>
/etc/sendmail.cf 邮件程序 sendmail 的配置文件。比较隐晦,很难理解。
/etc/sysconfig/network 指出 NETWORKING=yes 或 no。至少由 rc.sysinit 读取。
/etc/sysconfig/network-scripts/if* Red Hat 网络配置脚本。
系统命令
系统命令要独占地控制系统,并让一切正常工作。所有如 login(完成控制台用户身份验证阶段)或
bash(提供用户和计算机之间交互)之类的程序都是系统命令。因此,和它们有关的文件也特别重要。
这一类别中有下列令用户和管理员感兴趣的文件。
/etc/lilo.conf 包含系统的缺省引导命令行参数,还有启动时使用的不同映象。您在 LILO
引导提示的时候按 Tab 键就可以看到这个列表。
/etc/logrotate.conf 维护 /var/log 目录中的日志文件。
/etc/identd.conf
identd 是一个服务器,它按照 RFC 1413 文档中指定的方式实现 TCP/IP
提议的标准 IDENT 用户身份识别协议。identd 的操作原理是查找特定
TCP/IP 连接并返回拥有此连接的进程的用户名。作为选择,它也可以返回
其它信息,而不是用户名。请参阅 identd 联机帮助页。
/etc/ld.so.conf “动态链接程序”(Dynamic Linker)的配置。
/etc/inittab 按年代来讲,这是 UNIX 中第一个配置文件。在一台 UNIX 机器打开之后启
动的第一个程序是 init,它知道该启动什么,这是由于 inittab 的存在。
在运行级别改变时,init 读取 inittab,然后控制主进程的启动。
1.文件格式
init 进程将查看此文件来启动子进程,完成系统引导./etc/inittab 描述了
一个进程是在系统引导时起动还是在系统引导完成后的某个情形下起动.他
也是由一行行的记录组成的.而以 # 开头的行是注释,将被忽略.
记录的格式是:
id:runlevels:action:process
id 域是一个由 1 到 4 个字符组成的字符串,这个字符串必需是唯一的,即不
能有两条记录拥有相同的 id 域.id 域是一个标志域,由它区分各条记录.注
意,对于 gettys 或者其他的 login 进程来说,id 域必须是对应 tty 的 tty 后
缀,例如,对于 tty1 来说,id 域应该是 1.查看你的 /etc/inittab,会发现类
似下面这样的记录:
.........
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
.............
runlevels 域是一个运行级的列表,可用的运行级有:
0 ---- 停机
1 ---- 单用户模式
2 ---- 不带 NFS 的多用户模式
3 ---- 完整的多用户模式
4 ---- 没有使用
5 ---- X11
6 ---- 重起系统
S ---- 单用户
s ---- 同 S
action 域是一个预定义的动作,可用的 action 有:
respawn
进程终止后立刻重新开始(如 getty 进程)
wait
进程在进入指定的运行级后起动一次,然后 init 将等待它的终止
once
进程在进入指定的运行级后起动一次
boot
进程在系统引导时起动,runlevels 域将被忽略
bootwait
进程在系统引导时起动,然后 init 将等待它的终止,runlevels 域将被忽略
off
这个 action 不做任何事
ondemand
有一个特殊的运行级叫做 ondemand runlevel,包括 a,b 和 c.如果一个进程
被标记了 ondemand runlevel,那么当要求切换到这个 ondemand runlevel
时将会起动这个进程.但实际上的 runlevel 不会改变
initdefault
标记了 initdefault 这个 action 的记录项的 runlevel 域指定了系统引导完
成后进入的运行级
sysinit
在系统引导时起动这个进程.而且在所有的 boot 和 bootwait 项之前起
动.process 域将被忽略
powerwait
在电力中断时起动这个进程.通常会由一个与连接到计算机的 UPS 系统对话
的进程通知 init 电力切断.init 在继续之前将等待这个进程结束
powerfail
同 powerwait 类似,但是 init 不会等待这个进程结束
powerokwait
一旦 init 被通知电力已经恢复,将起动这个进程
powerfailnow
当 init 被告知 UPS 的电力亦将耗尽时起动这个进程
ctrlaltdel
当 init 接到 SIGINT 信号时起动这个进程.一般是按下了 ctrl+alt+del 这个
组合键
kbrequest
当一个特殊的键盘组合键被按下时起动这个进程
process 域指定了将运行的进程,可以有参数.如果这个域以 + 开头,表明
init 将为这个进程更新 utmp/wtmp 记录.
范例:
id:3:initdefault:
系统引导完成后进入运行级 3
si::sysinit:/etc/rc.d/rc.sysinit
系统引导时运行/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
系统进入运行级 0 时执行/etc/rc.d/rc 0,这里 0 是参数
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
捕获到 ctrl+alt+del 时运行/sbin/shutdown -t3 -r now.如果想禁用
ctrl+alt+del 这个组合键,直接删除或注释掉这行
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System
Shutting Down"
电力中断时执行/sbin/shutdown -f -h +2 "Power Failure; System
Shutting Down"
1:2345:respawn:/sbin/mingetty tty1
进入运行级 2,3,4 或 5 时执行 respawn:/sbin/mingetty tty1.注意指定的
action 是 respawn,这也就是为什么我们在终端下 logout 后会立刻又出现一
个 login 提示符
x:5:respawn:/etc/X11/prefdm -nodaemon
进入运行级 5 时执行/etc/X11/prefdm -nodaemon,指定的 action 是 respawm
2.安全性
/etc/inittab 的权限是 644,所有者和所有组均为 root
3.相关命令
init
telinit
更多内容请
man init
man inittab
/etc/termcap 一个数据库,包含所有可能的终端类型以及这些终端的性能。
守护进程
守护进程是一种运行在非交互模式下的程序。一般来说,守护进程任务是和联网区域有关的:它们等
待连接,以便通过连接提供服务。Linux 可以使用从 Web 服务器到 ftp 服务器的很多守护进程。
/etc/syslog.conf
syslogd 是一种守护进程,它负责记录(写到磁盘)从其它程序发送到系统
的消息。这个服务尤其常被某些守护进程所使用,这些守护进程不会有另外
的方法来发出可能有问题存在的信号或向用户发送消息。
1.文件格式
/etc/syslog.conf 是 syslog 守护程序的配置文件.syslog 守护程序为记录
来自运行于系统之上的程序的消息提供了一种成熟的客户机 -服务器机制。
syslog 接收来自守护程序或程序的消息,根据优先级和类型将该消息分类,
然后根据由管理员可配置的规则将它写入日志。结果是一个健壮而统一的管
理日志的方法。
这个文件由一条条的规则组成.每条规则应该写在一行内.但是如果某行以
反斜线 \ 结尾的话,他的下个物理行将被认为与此行同属于一行.空白行和
以 # 开始的行将被忽略.
每条规则都是下面这种形式:
facility.priority[;facility.priority .....] action
facility 和 priority 之间用一个英文句点分隔.他们的整体称为 selector.
每条规则可以有多个 selector,selector 之间用分号隔开. 而 selector 和
action 之间则用空格或者 tab 隔开.
facility 指定 syslog 功能,主要包括以下这些:
auth 由 pam_pwdb 报告的认证活动。
authpriv 包括特权信息如用户名在内的认证活动
cron 与 cron 和 at 有关的信息。
daemon 与 inetd 守护进程有关的信息。
kern 内核信息,首先通过 klogd 传递。
lpr 与打印服务有关的信息。
mail 与电子邮件有关的信息
mark syslog 内部功能用于生成时间戳
news 来自新闻服务器的信息
syslog 由 syslog 生成的信息
user 由用户程序生成的信息
uucp 由 uucp 生成的信息
local0----local7 与自定义程序使用,例如使用 local5 做为 ssh 功能
* 通配符代表除了 mark 以外的所有功能
priority 指定消息的优先级. 与每个功能对应的优先级是按一定顺序排列
的,emerg 是最高级,其次是 alert,依次类推。缺省时,在
/etc/syslog.conf 记录中指定的级别为该级别和更高级别。如果希望使用
确定的级别可以使用两个运算符号!(不等)和=。
user.=info
表示告知 syslog 接受所有在 info 级别上的 user 功能信息。
可用的 syslog 优先级如下:
emerg 或 panic 该系统不可用
alert 需要立即被修改的条件
crit 阻止某些工具或子系统功能实现的错误条件
err 阻止工具或某些子系统部分功能实现的错误条件
warning 预警信息
notice 具有重要性的普通条件
info 提供信息的消息
debug 不包含函数条件或问题的其他信息
none 没有重要级,通常用于排错
* 所有级别,除了 none
action 字段所表示的活动具有许多灵活性,特别是,可以使用名称管道的作
用是可以使 syslogd 生成后处理信息。
syslog 主要支持以下 action
file
指定文件的绝对路径,如: /var/log/messages . log 信息将写到此文件中
terminal 或 printer
完全的串行或并行设备标志符,如/dev/console . log 信息将送到此设备
@host
远程的日志服务器. log 信息将送到此日志服务器
username
发送信息给指定用户
named pipe
指定使用 mkfifo 命令来创建的 FIFO 文件的绝对路径。
如果对此文件作了改动, 想要使改动生效,您需要向 syslog 守护程序通知
所做的更改。向它发送 SIGHUP 是个正确的办法,您可以用 killall 命令
轻松地做到这一点:
# killall -HUP syslogd
2.安全性
您应该清楚如果 syslogd 写的日志文件还不存在的话,程序将创建它们。
无论您当前的 umask 如何设置,该文件将被创建为可被所有用户读取。如
果您关心安全性,那么您应该用 chmod 命令将该文件设置为仅 root 用户
可读写。此外,可以用适当的许可权配置 logrotate 程序(在下面描述)
以创建新的日志文件。syslog 守护程序始终会保留现有日志文件的当前属
性,因此一旦创建了文件,您就不需要担心它。
3.相关命令
logrotate
klogd
syslogd
dmesg
/etc/httpd.conf
Web 服务器 Apache 的配置文件。这个文件一般不在 /etc 中。它可能在
/usr/local/httpd/conf/ 或 /etc/httpd/conf/ 中,但是要确定它的位置,
您还需要检查特定的 Apache 安装信息。
/etc/conf.modules
or
/etc/modules.conf
kerneld 的配置文件。有意思的是,kerneld 并不是“作为守护进程的”内
核。它其实是一种在需要时负责“快速”加载附加内核模块的守护进程。
用户程序
在 Linux(和一般的 UNIX)中,有无数的“用户”程序。最常见的一种用户程序配置文件是
/etc/lynx.cfg。这是著名的文本浏览器 lynx 的配置文件。通过这个文件,您可以定义代理服务器、
要使用的字符集等等。下面的代码样本展示了 lynx.cfg 文件的一部分,修改这部分代码可以改变
Linux 系统的代理服务器设置。缺省情况下,这些设置适用于在各自的 shell 中运行 lynx 的所有
用户,除非某个用户通过指定 --cfg = "mylynx.cfg" 重设了缺省的配置文件。
/etc/lynx.cfg 中的代理服务器设置
.h1 proxy
.h2 HTTP_PROXY
.h2 HTTPS_PROXY
.h2 FTP_PROXY
.h2 GOPHER_PROXY
.h2 NEWS_PROXY
.h2 NNTP_PROXY
# Lynx version 2.2 and beyond supports the use of proxy servers that can act as
# firewall gateways and caching servers. They are preferable to the older
# gateway servers. Each protocol used by Lynx can be mapped separately using
# PROTOCOL_proxy environment variables (see Lynx Users Guide). If you have
# not set them externally, you can set them at run time via this configuration file.
# They will not override external settings. The no_proxy variable can be used
# to inhibit proxying to selected regions of the Web (see below). Note that on
# VMS these proxy variables are set as process logicals rather than symbols, to
# preserve lowercasing, and will outlive the Lynx image.
#
.ex 15
http_proxy:http:
ftp_proxy:http:
#http_proxy:http:
#ftp_proxy:http:
.h2 NO_PROXY
# The no_proxy variable can be a comma-separated list of strings defining
# no-proxy zones in the DNS domain name space. If a tail substring of the
# domain-path for a host matches one of these strings, transactions with that
# node will not be proxied.
.ex
no_proxy:demiurge.in.ibm.com, demiurge
更改配置文件
在更改配置文件时,如果程序不是由系统管理员或内核控制的,就要确保重新启动过使用该配置的程
序。普通用户通常没有启动或停止系统程序和/或守护进程的权限。
内核
更改内核中的配置文件会立即影响到系统。例如,更改 passwd 文件以增加用户将立即使该用户变为
可用。而且任何 Linux 系统的 /proc/sys 目录中都有一些内核可调参数。只有超级用户可以得到对
所有这些文件的写访问权力;其它用户只有只读访问权力。此目录中文件的分类的方式和 Linux 内
核源代码的分类方式一样。此目录中的每个文件都代表一个内核数据结构,这些数据结构可以被动态
地修改,从而改变系统性能。
注意:在更改其中任何文件的任何值之前,您应该确保自己全面了解该文件,以避免对系统造成不可
修复的损害。
/proc/sys/kernel/ 目录中的文件
文件名 描述
threads-max 内核可运行的最大任务数。
ctrl-alt-del 如果值为 1,那么顺序按下这几个键将“彻底地”重新引
导系统。
sysrq 如果值为 1,Alt-SysRq 则为激活状态。
osrelease 显示操作系统的发行版版本号
ostype 显示操作系统的类型。
hostname 系统的主机名。
domainname 网络域,系统是该网络域的一部分。
modprobe 指定 modprobe 是否应该在启动时自动运行并加载必需
的模块。
守护进程和系统程序
守护进程是永远运行在后台的程序,它默默地执行自己的任务。常见的守护进程有 in.ftpd(ftp 服
务器守护进程)、in.telnetd(telnet 服务器守护进程)和 syslogd(系统日志记录守护进程)。
有些守护进程在运行时会严密监视配置文件,在配置文件改变时就会自动重新加载它。但是大多数守
护进程并不会自动重新加载配置文件。我们需要以某种方式“告诉”这些守护进程配置文件已经被发
生了改变并应该重新加载。可以通过使用服务命令重新启动服务来达到这个目的(在 Red Hat Linux
系统上)。
例如,如果我们更改了网络配置,就需要发出:
service network restart 。
注意:这些服务最常见的是 /etc/rc.d/init.d2 代替第一个*。也可以是用具体时间来表示。
我们使用 crontab -e 编辑当前用户的 cron 表
这里的 5 个星号就代表的时间和日期:
第一个*星号代表个小时的第几分钟:minute 范围是从 0-59
第二个*星号代表每天的第几个小时:hour 范围是从 0-23
第三个*星号代表每月的第几个日:day-of-month 范围从 1-31
第四个*星号代表没年的第几个月:month-of-year 范围从 1-12
第五个*星号代表每周的星期几:day-of-week 范围从 0-6,其中 0 表示星期日
用户名:也就是执行程序要通过哪个用户来执行,这个一般可以省略;
命令:执行的命令和参数。
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期
中的第几天。program 表 示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余以此类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b
小时都要执行,其余以此类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一
次,其余以此类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...
个小时要执行,其余以此类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
例 1:如果我要表示 9 月 10 日 25 分执行 ls var/spool/cron 任务怎么表示?
25 * 10 9 * ls var/spool/cron
由于我没表示小时,所以就只能里面为每小时
例 2:我要在每周日,每分钟执行 wall Hello redking.blog.51cto.com 这个命令,时间怎么表示?
*/1 * * * 0 wall Hello redking.blog.51cto.com
*/ 表示每多少分钟执行一次
例 3:每晚的 21:30 重启 apache。
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
例 4:每月 1、10、22 日的 4 : 45 重启 apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
例 5:每周六、周日的 1 : 10 重启 apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
例 6:在每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
例 7:每一小时重启 apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
例 8:晚上 11 点到早上 7 点之间,每隔一小时重启 apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
例 9:每月的 4 号与每周一到周三的 11 点重启 apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
例 10:一月一号的 4 点重启 apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
例 11:在 12 月内, 每天的早上 6 点到 12 点中,每隔 3 个小时执行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
例 12:每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
3、系统级别的计划任务及其扩展anacrontab
这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了,
不要更改配置文件是/etc/conrtab
SHELL:就是运行计划任务的解释器,默认是 bash
PATH:执行命令的环境变量
MAILTO:计划任务的出发者用户
HOME:家目录为/
run-parts 是一个脚本,在/usr/bin/run-parts,作用是执行一个目录下的所有脚本/程序。
run-parts /etc/cron.hourly 执行目录/etc/cron.hourly/之下的所有脚本/程序.
run-parts 下面就是运行的命令
vim /etc/crontab 与 crontab -e 写入的定时运行的区别?
vim /etc/crontab:是系统级别定义的 crontab,/etc/crontab 的所有者和组都是 root
crontab -e :是用户自定义的 crontab,是所有的用户都可以写入的
两种方法记录的位置不一样,一个在/etc/ 另一个在/var/ 里面。都被 cron 服务调用
如果系统在以上说的时间没有开机怎么办?那么这个脚本不就是不能执行了?设计者早就想到了这个
问题,所以就有了 cron 服务的扩展,目的就是为了防止非 24 小时开机的计算机遗漏的守护任务,anacr
ontab 就是系统计划任务的扩展文件:在一个指定时间间隔错过后自动执行任务
格式是这样的:
period delay job-identifier command
period — 命令执行的频率(天数)
delay — 延迟时间(分钟)
job-identifier — 任务的描述,用在 anacron 的消息中,并作为作业时间戳文件的名称,只能包括
非空白的字符(除斜线外)。
command — 要执行的命令
第一行的意思是:每天开机 65 分钟后就检查 cron.daily 文件是否被执行了,如果今天没有被执行就执
行他
第二行的意思是:每隔 7 天开机后 70 分钟检查 cron.weekly 文件是否被执行了,如果一周内没有被执行
就执行他
第三行的意思也差不多
下面说说关于 cron 服务的控制,和 at 差不多,就是/etc/cron.deny 这个配置文件来控制,里面写入
要禁止使用 cron 用户的名字,一行一个就 OK 了
十七、 VI/VIM编辑器
常用快捷键:
Ctrl+f 向下翻页
Ctrl+b 向上翻页
G 移动到文件最后一行
gg 移动到文件第一行
N+回车 N 为数字,向下移到到 N 行
/关键字 向下寻找关键字
?关键字 向上寻找关键字
# 从光标向后查找光标所在关键词
* 从光标向前查找光标所在关键词
n 向下重复上一次查找操作
N 与 n 相反,反向重复上一次查找操作
:n1,n2s/关键字 1/关键字 2/g 从第 n1 与 n2 行之间寻找关键字 1,并将关键字 1 替换为关键字 2
:1,$s/关键字 1/关键字 2/g 从第 1 行到最后一行寻找关键字 1,并将关键字 1 替换为关键字 2
:1,$s/关键字 1/关键字 2/gc 从第 1 行到最后一行寻找关键字 1,将关键字 1 替换为关键字 2 前会提示用
户确认是否替换
dd 删除整行
ndd n 为数字,删除光标所在向下 n 行。
yy 复制光标所在行
nyy n 为数字,复制光标所在向下 n 行
p,P 小 p 将复制的数据在光标下一行粘贴,大 P 将复制的数据在光标上一行粘贴
u 撤消前一个操作
Ctrl+r 重做上一个操作
. 将会重复上一个命令
i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行
:w 保存数据
:wq 保存退出
:q! 不保存退出
:w 文件名 相当于另存为
十八、 压缩打包
linux 下的压缩命令有 tar、gzip、gunzip、bzip2、bunzip2、 compress、uncompress、zip、unzip、rar、
unrar 等等,压缩后的扩展名有.tar、.gz、.tar.gz、. tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar 10 种。
对应关系如下:
1、*.tar 用 tar –xvf 解压
2、*.gz 用 gzip -d 或者 gunzip 解压
3、*.tar.gz 和*.tgz 用 tar –xzf 解压
4、*.bz2 用 bzip2 -d 或者用 bunzip2 解压
5、*.tar.bz2 用 tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用 tar –xZf 解压
8、*.rar 用 unrar e 解压
9、*.zip 用 unzip 解压
在介绍压缩文件之前呢,首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录什么的变成
一个总的文件,压缩则是将一个大的文件通过一些压 缩算法变成一个小文件。为什么要区分这两个概念呢?
其实这源于 Linux 中的很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得
先借助另它的工具将这一大堆文件先打成一个包,然后再就原来的压缩程序进行压缩。
Gzip/zcat
Bzip2/bzcat
Tar
Linux 下最常用的打包程序就是 tar 了,使用 tar 程序打出来的包我们常称为 tar 包,tar 包文件的命令通
常都是以.tar 结尾的。生成 tar 包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲 tar 命令的基本
用法:
tar 命令的选项有很多(用 man tar 可以查看到),但常用的就那么几个选项,下面来举例说明一下:
# tar -cf all.tar *.jpg 这条命令是将所有.jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指
定包的文件名。
# tar -rf all.tar *.gif 这条命令是将所有.gif 的文件增加到 all.tar 的包里面去。-r 是表示增加文件的意思。
# tar -uf all.tar logo.gif 这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。
# tar -tf all.tar 这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思
# tar -xf all.tar 这条命令是解出 all.tar 包中所有文件,-t 是解开的意思
以上就是 tar 的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar 提供了一种特
殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序,比如调用 gzip、bzip2 等。
1) tar 调用 gzip
gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是
gunzip。tar 中使用-z 这个参数来调用 gzip。下面来举例说明一下:
# tar -czf all.tar.gz *.jpg 这条命令是将所有.jpg 的文件打成一个 tar 包,并且将其用 gzip 压缩,生成一个
gzip 压缩过的包,包名为 all.tar.gz
# tar -xzf all.tar.gz 这条命令是将上面产生的包解开。
2) tar 调用 bzip2
bzip2 是一个压缩能力更强的压缩程序,.bz2 结尾的文件就是 bzip2 压缩的结果。与 bzip2 相对的解压程
序是 bunzip2。tar 中使用-j 这个参数来调用 gzip。下面来举例说明一下:
# tar -cjf all.tar.bz2 *.jpg 这条命令是将所有.jpg 的文件打成一个 tar 包,并且将其用 bzip2 压缩,生成一个
bzip2 压缩过的包,包名为 all.tar.bz2
# tar -xjf all.tar.bz2 这条命令是将上面产生的包解开。
下面对于 tar 系列的压缩文件作一个小结:
1)对于.tar 结尾的文件
tar -xf all.tar
2)对于.gz 结尾的文件
gzip -d all.gz
gunzip all.gz
3)对于.tgz 或.tar.gz 结尾的文件
tar -xzf all.tar.gz
tar -xzf all.tgz
4)对于.bz2 结尾的文件
bzip2 -d all.bz2
bunzip2 all.bz2
5)对于 tar.bz2 结尾的文件
tar -xjf all.tar.bz2
6)对于.Z 结尾的文件
uncompress all.Z
7)对于.tar.Z 结尾的文件
tar -xZf all.tar.z
Cpio
Unzip:解压 zip
Gnuzip:解压 bz2
十九、 性能优化
1、 设置文件夹打开方式
2、 设置屏幕保护时间
3、 解除上网限制
4、
二十、 常见问题
部分网站无法访问问题的解决
CentOS 5 内核对 TCP 的读缓冲区大小有缺省设置,缺省为:net.ipv4.tcp_rmem = 4096 87380 4194304
解决办法就是将最后一个数字改小一点,具体操作就是在文件/etc/sysctl.conf 中添加一行:
net.ipv4.tcp_rmem = 4096 87380 174760
然后保存
重新启动网络 service network restart,就 OK 了,如果还是部分网站上不去,可以检查/etc/sysctl.conf 文件是
否和下面相同
net.ipv4.ip_local_port_range = 1024 65536
net.core.rmem_max=174760
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 174760
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_tw_recycle = 1
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 8000
net.ipv4.tcp_max_syn_backlog = 8000
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_wmem=4096 65536 16777216 :为自动调优定义每个 socket 使用的内存。第一个值 4096
是为 socket 的发送缓冲区分配的最少字节数。第二个值 65536 是默认值(该值会被 wmem_default 覆盖),
缓冲区在系统负载不重的情况下可以增长到这个值。第三个值 16777216 是发送缓冲区空间的最大字节数(该
值会被 wmem_max 覆盖)
net.ipv4.tcp_rmem=4096 87380 174760:与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收
缓冲区的值。
net.core.rmem_max = 25165824 #定义最大的 TCP/IP 栈的接收窗口大小
net.core.rmem_default = 25165824 #定义默认的 TCP/IP 栈的接收窗口大小
net.core.wmem_max = 25165824 #定义最大的 TCP/IP 栈的发送窗口大小
net.core.wmem_default = 65536 #定义默认的 TCP/IP 栈的发送窗口大小
net.ipv4.tcp_sack =1 #启用有选择的应答(Selective Acknowledgment),这可以通过有
选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)
这个选项应该启用,但是这会增加对 CPU 的占用。
net.ipv4.tcp_window_scaling = 1 #启用 RFC1323 定义,支持超过 64K 窗口
net.ipv4.tcp_fack =1 #启用转发应答(Forward Acknowledgment),这可以进行有选择
应答(SACK)从而减少拥塞情况的发生;这个选项也应该启用。
net.ipv4.tcp_mem 24576 32768 49152 确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页
(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。
第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的 BDP 可以增大
这些值(但是要记住,其单位是内存页,而不是字节)。
Centos5 无法连接无线网络
系统->管理->服务器设置->服务,将 NetworkManager 选项勾选,点击重启服务。然后就可以看到右上
角已经有了网络连接。
Linux远程管理Windows程序Rdesktop详解
#rpm –q rdesktop
#yum install rdesktop
rdesktop 使用简单,windows 也不和装什么服务端,是要把远程桌面共享打开就行了
具体使用方法要先打开终端,然后输入以下命令:
rdesktop -u yournape -p password -g 1024*720 192.168.0.2
rdesktop 为使用远程桌面连接的命令;
-u 用户名,yourname 处为目标客户端的用户名;
-p 客户端用户的密码;
-g 指定使用屏幕大小-g 800*600+0+0 这个‘+0’就是,就是你这个窗口的在你 linux 上出现的位置;
192.168.0.1 目标客户端的 IP 地址
实例:
[root@Centos5 ~]# rdesktop -u aixi -p d337448 -r clipboard:PRIMARYCLIPBOARD -r disk:centos=/root -r
sound:local -z -a 16 10.26.11.72
$rdesktop 192.168.1.1
$rdesktop -a 16 192.168.1.1
$rdesktop -u administrator -p ****** -a 16 192.168.1.1
$rdesktop -u administrator -p ****** -a 16 -r sound:local 192.168.1.1
加上-r sound:local 可以把声音也搞过来,-r 的作用挺多的可以重定向许多东西,看一下帮助就会收获不
少了。
-r comport:COM1=/dev/ttyS0
-r comport:COM1=/dev/ttyS0,COM2=/dev/ttyS1
-r disk:floppy=/mnt/floppy
-r disk:floppy=/mnt/floppy,cdrom=/mnt/cdrom,root=/,c=/mnt/c
-r clientname=
-r lptport:LPT1=/dev/lp0
-r lptport:LPT1=/dev/lp0,LPT2=/dev/lp1
-r printer:mydeskjet
-r printer:mydeskjet="HP LaserJet IIIP"
-r sound:[local|off|remote]
-r clipboard:PRIMARYCLIPBOARD : 这个一定要加上,要不然不能在主机 Solaris 和服务器 Windows 直接复
制粘贴文字了。贴中文也没有问题。
-r disk:sunway=/home/jianjian : 指定主机 Solaris 上的一个目录(/home/jianjian)映射到远程 Windows 上的
硬盘(盘符为 sunway),传送文件就不用再靠 Samba 或者 FTP 了。
-f :全屏,退出全屏:ctrl+alt+enter 再次 Ctrl+Alt+Enter 即可再次进入全屏
-D:不显示标题栏,配合 -g 能更好地使用屏幕空间了;
-K: 这个选项说明保持窗口管理器的按键组合绑定;
-z:启动网络数据的压缩,减少带宽,局域网没什么作用;
提示:如果你的本地中文文件名在远程机器上显示为乱码的话,可能是你没有安装编码转化库,或者你
安装的编码转化库不能正确运行。
Linux远程访问Windows共享目录
#mount –o username=用户名 –password=密码
[root@Centos5 ~]# mount -o username=aixi,password=d337448
说明:IP 地址 192.168.0.1 为中文名文件所在的主机,文件位于 C 盘,该主机的用户名及密码为 linux,
/tmp/samba/为本地主机挂载目录。在浏览完成后,使用以下命令卸载。
#umount /tmp/samba/
升级或安装程序后无法进入图形界面
报错如下:
Failed to start the X server (your graphical interface). lt is likely that it is not set up correctly.
Would you like to view the X server output to diagnose the problem ?
解决办法:
#cat /var/log/Xorg.0.log | grep EE 查看报错日志
#sh NVDIA 重新安装显卡驱动
参考如下网址:
http:
Linux自动登陆的设置方法
方法一:
1、设置 GDM
GDM 是 GNOME 显示管理器,通过设置其配置文件/etc/gdm/custom.conf 可以设置帐号自动登陆。
设置方法如下:
在/etc/gdm/custom.conf 文件中添加以下内容
[daemon]
AutomaticLogin=username
AutomaticLoginEnable=True
其中,username 是要自动登陆的用户名。
说明:username 不能是 root,也就说无法实现 root 的自动登陆。
2、设置 prefdm
其中,/etc/inittab 文件的最后一行,该行命令的作用是启动 X Windows,而/etc/X11/prefdm 就是具体实
现启动 X Windows 的脚本。
在/etc/X11/prefdm 中添加启动 X Windows 的命令,并退出。
/usr/bin/startx
exit 1
说明:
(1)这两行代码一定要在
[ -n "$preferred" ] && exec $preferred "$@" >/dev/null 2>&1 </dev/null
代码之前。
(2)该方法自动以 root 登陆,是因为运行到/etc/X11/prefdm 时,是 root 身份。
3、在 rc.local 中启动 X Windows
在/etc/rc.local 中添加启动 X Windows 的命令
/usr/bin/startx
说明:该方法自动以 root 登陆,是因为运行到/etc/rc.local 时,是 root 身份。
以上做完以上的操作就可以实现 Xwindow 的自动登录
方法二:
首先配置自动登录命令行界面
修改/etc/inittab 将 1:2345:respawn:/sbin/mingetty tty1 更改为 1:2345:respawn:/sbin/mingetty tty2
--autologin aixi
再将/etc/inittab 修改为启动到字符界面:id:3:initdefault
#init q 使配置生效
这样就可以开机自动启动到命令行界面,如果想自动启动到图形界面,其实在此基础上修改如下:
在/etc/rc.local 中添加启动 X Windows 的命令
/usr/bin/startx
这样就可以自动启动到命令行,命令行又自动运行 startx 启动图形界面。这是最简单的一种方式。以上
在 Centos5.7 版本中测试通过。