当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪linux find命令之xargs的用法      一,find命令应用举例   代码示例: /> ls -l #列出当前目录下所包含的测试文件 -rw-r--r--. 1 root root 48217 Nov 12 00:57 install.log -rw-r--r--. 1 root root  37 Nov12 00:56 testfile.dat -rw-r--r--. 1 root root 10530 Nov.........
    ▪linux sudo命令学习指南      在linux中,sudo 使一般使用者不需要知道超级使用者的密码即可获得权限。 首先,超级使用者将一般使用者登记在特殊的档案中(通常是/etc/sudoers),即完成对该使用者的授权(此时该使用者.........
    ▪sar 命令行常用格式详解      本节分享下sar命令的常用格式及几个例子。 sar [options] [-A] [-o file] t [n] 在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,.........

[1]linux find命令之xargs的用法
    来源: 互联网  发布时间: 2013-12-24

一,find命令应用举例
 

代码示例:
/> ls -l #列出当前目录下所包含的测试文件
-rw-r--r--. 1 root root 48217 Nov 12 00:57 install.log
-rw-r--r--. 1 root root  37 Nov12 00:56 testfile.dat
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 183 Nov 1108:02 users
-rw-r--r--. 1 root root 279 Nov 1108:45 users2

1. 按文件名查找:
-name: 查找时文件名大小写敏感。
-iname: 查找时文件名大小写不敏感。
#该命令为find命令中最为常用的命令,即从当前目录中查找扩展名为.log的文件。需要说明的是,缺省情况下,find会从指定的目录搜索,并递归的搜索其子目录。
 

代码示例:
/> find . -name "*.log"
 ./install.log
/> find . -iname U* #如果执行find . -name U*将不会找到匹配的文件
users users2

2. 按文件时间属性查找:
-atime  -n[+n]: 找出文件访问时间在n日之内[之外]的文件。
-ctime  -n[+n]: 找出文件更改时间在n日之内[之外]的文件。
-mtime -n[+n]: 找出修改数据时间在n日之内[之外]的文件。
-amin   -n[+n]: 找出文件访问时间在n分钟之内[之外]的文件。
-cmin   -n[+n]: 找出文件更改时间在n分钟之内[之外]的文件。
-mmin  -n[+n]: 找出修改数据时间在n分钟之内[之外]的文件。

代码示例:
/> find -ctime -2   #找出距此时2天之内创建的文件
.
./users2
./install.log
./testfile.dat
./users
./test.tar.bz2
/> find -ctime +2#找出距此时2天之前创建的文件
没有找到#因为当前目录下所有文件都是2天之内创建的
/> touch install.log#手工更新install.log的最后访问时间,以便下面的find命令可以找出该文件
/> find . -cmin -3   #找出修改状态时间在3分钟之内的文件。
install.log

3. 基于找到的文件执行指定的操作:
-exec: 对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{}和\;之间的空格,同时两个{}之间没有空格
-ok:   其主要功能和语法格式与-exec完全相同,唯一的差别是在于该选项更加安全,因为它会在每次执行shell命令之前均予以提示,只有在回答为y的时候,其后的shell命令才会被继续执行。需要说明的是,该选项不适用于自动化脚本,因为该提供可能会挂起整个自动化流程。
#找出距此时2天之内创建的文件,同时基于find的结果,应用-exec之后的命令,即ls -l,从而可以直接显示出find找到文件的明显列表。
 

代码示例:
/> find . -ctime -2 -exec ls -l {} \;
-rw-r--r--. 1 root root  279Nov 11 08:45 ./users2
-rw-r--r--. 1 root root  48217 Nov 12 00:57./install.log
-rw-r--r--. 1 rootroot37 Nov 12 00:56 ./testfile.dat
-rw-r--r--. 1 root root  183Nov 11 08:02 ./users
-rw-r--r--. 1 root root  10530 Nov 11 23:08./test.tar.bz2
 

#找到文件名为*.log,同时文件数据修改时间距此时为1天之内的文件。如果找到就删除他们。有的时候,这样的写法由于是在找到之后立刻删除,因此存在一定误删除的危险。
 

代码示例:
/> ls
install.log  testfile.dat  test.tar.bz2 users  users2
/> find . -name "*.log" -mtime -1 -exec rm -f {} \;
/> ls
testfile.dat  test.tar.bz2  users  users2
 

在控制台下,为了使上面的命令更加安全,我们可以使用-ok替换-exec,见如下示例:
 

代码示例:
/>  find . -name "*.dat" -mtime -1 -ok rm -f {} \;
< rm ... ./testfile.dat > ? y#对于该提示,如果回答y,找到的*.dat文件将被删除,这一点从下面的ls命令的结果可以看出。
/> ls
test.tar.bz2  users  users2

4. 按文件所属的owner和group查找:
-user: 查找owner属于-user选项后面指定用户的文件。
! -user:   查找owner不属于-user选项后面指定用户的文件。
-group:   查找group属于-group选项后面指定组的文件。
! -group: 查找group不属于-group选项后面指定组的文件。
 

代码示例:
/> ls -l   #下面三个文件的owner均为root
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
/> chown stephen users   #将users文件的owner从root改为stephen。
/> ls -l
-rw-r--r--. 1 root   root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 stephen root183 Nov 11 08:02 users
-rw-r--r--. 1 root   root 279 Nov 11 08:45 users2
/> find . -user root #搜索owner是root的文件
.
./users2
./test.tar.bz2
/> find . ! -user root   #搜索owner不是root的文件,注意!和-user之间要有空格。
./users
/> ls -l   #下面三个文件的所属组均为root
-rw-r--r--. 1 root  root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 stephen root183 Nov 11 08:02 users
-rw-r--r--. 1 root  root279 Nov 11 08:45 users2
/> chgrp stephen users#将users文件的所属组从root改为stephen
/> ls -l
-rw-r--r--. 1root   root10530 Nov 11 23:08test.tar.bz2
-rw-r--r--. 1 stephen stephen  183 Nov 11 08:02 users
-rw-r--r--. 1 rootroot   279 Nov 1108:45 users2
/> find . -group root   #搜索所属组是root的文件
.
./users2
./test.tar.bz2
/> find . ! -group root #搜索所属组不是root的文件,注意!和-user之间要有空格。
./users

5. 按指定目录深度查找:
-maxdepth: 后面的参数表示距当前目录指定的深度,其中1表示当前目录,2表示一级子目录,以此类推。在指定该选项后,find只是在找到指定深度后就不在递归其子目录了。下例中的深度为1,表示只是在当前子目录中搜索。如果没有设置该选项,find将递归当前目录下的所有子目录。
 

代码示例:
/> mkdir subdir  #创建一个子目录,并在该子目录内创建一个文件
/> cd subdir
/> touch testfile
/> cd ..
#maxdepth后面的参数表示距当前目录指定的深度,其中1表示当前目录,2表示一级子目录,以此类推。在指定该选项后,find只是在找到指定深度后就不在递归其子目录了。下例中的深度为1,表示只是在当前子目录中搜索。如果没有设置该选项,find将递归当前目录下的所有子目录。
/> find . -maxdepth 1 -name "*"
.
./users2
./subdir
./users
./test.tar.bz2
#搜索深度为子一级子目录,这里可以看出子目录下刚刚创建的testfile已经被找到
/> find . -maxdepth 2 -name "*" 
.
./users2
./subdir
./subdir/testfile
./users
./test.tar.bz2

6. 排除指定子目录查找:
-path pathname -prune:   避开指定子目录pathname查找。
-path expression -prune: 避开表达中指定的一组pathname查找。
需要说明的是,如果同时使用-depth选项,那么-prune将被find命令忽略。
#为后面的示例创建需要避开的和不需要避开的子目录,并在这些子目录内均创建符合查找规则的文件。
 

代码示例:
/> mkdir DontSearchPath 
/> cd DontSearchPath
/> touch datafile1
/> cd ..
/> mkdir DoSearchPath
/> cd DoSearchPath
/> touch datafile2
/> cd ..
/> touch datafile3
#当前目录下,避开DontSearchPath子目录,搜索所有文件名为datafile*的文件。
/> find . -path "./DontSearchPath" -prune-o -name "datafile*" -print
./DoSearchPath/datafile2
./datafile3
#当前目录下,同时避开DontSearchPath和DoSearchPath两个子目录,搜索所有文件名为datafile*的文件。
/> find . \( -path "./DontSearchPath" -o-path "./DoSearchPath" \) -prune -o -name "datafile*"-print
./datafile3

7. 按文件权限属性查找:
-perm mode:  文件权限正好符合mode(mode为文件权限的八进制表示)。
-perm +mode: 文件权限部分符合mode。如命令参数为644(-rw-r--r--),那么只要文件权限属性中有任何权限和644重叠,这样的文件均可以被选出。
-perm -mode: 文件权限完全符合mode。如命令参数为644(-rw-r--r--),当644中指定的权限已经被当前文件完全拥有,同时该文件还拥有额外的权限属性,这样的文件可被选出。
 

代码示例:
/> ls -l
-rw-r--r--. 1root   root   0 Nov 12 10:02datafile3
-rw-r--r--. 1root   root10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 stephenstephen183 Nov 11 08:02 users
-rw-r--r--. 1root   root279 Nov 11 08:45 users2
/> find . -perm 644 #查找所有文件权限正好为644(-rw-r--r--)的文件。
./users2
./datafile3
./users
./test.tar.bz2
/> find . -perm 444 #当前目录下没有文件的权限属于等于444(均为644)。
/> find . -perm -444#644所包含的权限完全覆盖444所表示的权限。
.
./users2
./datafile3
./users
./test.tar.bz2
/> find . -perm +111#查找所有可执行的文件,该命令没有找到任何文件。
/> chmod u+x users#改变users文件的权限,添加owner的可执行权限,以便于下面的命令可以将其找出。
/> find . -perm +111
.
./users

8. 按文件类型查找:
-type:后面指定文件的类型。
b -块设备文件。
d -目录。
c -字符设备文件。
p -管道文件。
l  -符号链接文件。
f  -普通文件。
 

代码示例:
/> mkdir subdir
/> find . -type d  #在当前目录下,找出文件类型为目录的文件。
./subdir
 /> find . ! -type d#在当前目录下,找出文件类型不为目录的文件。
./users2
./datafile3
./users
./test.tar.bz2
/> find . -type f  #在当前目录下,找出文件类型为文件的文件
./users2
./datafile3
./users
./test.tar.bz2

9. 按文件大小查找:
-size [+/-]100[c/k/M/G]: 表示文件的长度为等于[大于/小于]100块[字节/k/M/G]的文件。
-empty: 查找空文件。
 

代码示例:
/> find . -size +4k -exec ls -l {} \;  #查找文件大小大于4k的文件,同时打印出找到文件的明细
-rw-r--r--. 1 root root 10530 Nov 11 23:08 ./test.tar.bz2
/> find . -size -4k -exec ls -l {} \;  #查找文件大小小于4k的文件。
-rw-r--r--. 1rootroot 279 Nov 11 08:45 ./users2
-rw-r--r--. 1rootroot0 Nov 12 10:02./datafile3
-rwxr--r--. 1 stephen stephen 183 Nov 11 08:02 ./users
/> find . -size 183c -exec ls -l {} \; #查找文件大小等于183字节的文件。
-rwxr--r--. 1 stephen stephen 183 Nov 11 08:02 ./users
/> find . -empty  -type f -exec ls -l {} \;
-rw-r--r--. 1 root root 0 Nov 12 10:02 ./datafile3

10. 按更改时间比指定文件新或比文件旧的方式查找:
-newer file1 ! file2: 查找文件的更改日期比file1新,但是比file2老的文件。
 

代码示例:
/> ls -lrt   #以时间顺序(从早到晚)列出当前目录下所有文件的明细列表,以供后面的例子参考。
-rwxr--r--. 1 stephen stephen   183 Nov 11 08:02 users1
-rw-r--r--. 1root  root279 Nov 11 08:45 users2
-rw-r--r--. 1root   root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1root  root0 Nov 12 10:02 datafile3
/> find . -newer users1 #查找文件更改日期比users1新的文件,从上面结果可以看出,其余文件均符合要求。
./users2
./datafile3
./test.tar.bz2
/> find . ! -newer users2   #查找文件更改日期不比users1新的文件。
./users2
./users
#查找文件更改日期比users2新,但是不比test.tar.bz2新的文件。
/> find . -newer users2 ! -newer test.tar.bz2
./test.tar.bz2
 

xargs命令:
该命令的主要功能是从输入中构建和执行shell命令。 
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。 
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。 
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; 
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
 

代码示例:
/> ls -l
-rw-r--r--. 1 root root   0 Nov 12 10:02 datafile3
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rwxr--r--. 1 root root183 Nov 1108:02 users
-rw-r--r--. 1 root root279 Nov 11 08:45users2
#查找当前目录下的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件。
/> find . -type f -print | xargs file
./users2:ASCIItext
./datafile3:  empty
   ./users:  ASCII text
./test.tar.bz2: bzip2 compressed data, block size = 900k
#回收当前目录下所有普通文件的执行权限。
/> find . -type f -print | xargs chmod a-x
/> ls -l
-rw-r--r--. 1 root root 0 Nov 1210:02 datafile3
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root   183 Nov 11 08:02 users
-rw-r--r--. 1 root root   279 Nov 11 08:45 users2
#在当面目录下查找所有普通文件,并用grep命令在搜索到的文件中查找hostname这个词
/> find . -type f -print | xargs grep "hostname"
#在整个系统中查找内存信息转储文件(core dump),然后把结果保存到/tmp/core.log文件中。
/> find / -name "core" -print | xargs echo "">/tmp/core.log
/> pgrep mysql |xargs kill -9#直接杀掉mysql的进程
[1]+ Killed mysql
 

1、多行变成单行
 

代码示例:
-bash-3.2# cattest.txt
a b c d e f
g o p q
-bash-3.2# cattest.txt |xargs
a b c d e f g op q
 

2、单行变成多行
 

代码示例:
-bash-3.2# cattest.txt
a b c d e f g op q
-bash-3.2# cattest.txt |xargs -n 2
a b
c d
e f
g o
p q

3、删除某个重复的字符来做定界符
 

代码示例:
-bash-3.2# cattest.txt
aaaagttttgyyyygcccc
-bash-3.2# cattest.txt |xargs -d g
aaaa tttt yyyycccc
 

4、删除某个重复的字符来做定界符后,变成多行
 

代码示例:
-bash-3.2# cattest.txt |xargs -d g -n 2
aaaa tttt
yyyy cccc
 

5、用find找出文件以txt后缀,并使用xargs将这些文件删除
 

代码示例:
-bash-3.2# find/root/ -name "*.txt" -print   #查找
/root/2.txt
/root/1.txt
/root/3.txt
/root/4.txt
-bash-3.2# find/root/ -name "*.txt" -print0 |xargs -0 rm -rf   #查找并删除
-bash-3.2# find/root/ -name "*.txt" -print #再次查找没有
 

6、查找普通文件中包括thxy这个单词的
 

代码示例:
-bash-3.2# find/root/ -type f -print |xargs grep "thxy"
/root/1.doc:thxy
 

7、查找权限为644的文件,并使用xargs给所有加上x权限
 

代码示例:
-bash-3.2# find/root/ -perm 644 -print
/root/1.c
/root/5.c
/root/2.doc
/root/3.doc
/root/1.doc
/root/2.c
/root/4.doc
/root/4.c
/root/3.c
-bash-3.2# find/root/ -perm 644 -print|xargs chmod a+x
-bash-3.2# find/root/ -perm 755 -print
/root/1.c
/root/5.c
/root/2.doc
/root/3.doc
/root/1.doc
/root/2.c
/root/4.doc
/root/4.c
/root/3.c
 

 find 命令可以防止list too long 的错误,而且可以递归查找子目录,对于查找文件非常方便。
  不过有时候功能强大也会比较麻烦,例如你不想让find 命令查找子目录,只查找当前目录
 
跳过'src/emacs'和它下边的所有文件,列出其它发现的文件,执行下边的命令:
1,

代码示例:
find . -path './src/emacs' -prune -o -print
 

只查找当前目录下,不搜索任何当前目录下的所有子目录

2,

代码示例:
find . -maxdepth 1 -name "*sql"
 

使用find命令的-exec参数,即可巧妙删除。
步骤如下:
1、根据文件的时间,创建人,大小等特征,用find命令找到文件
 

代码示例:
find . -maxdepth 1 -type f -size +72019c -size -72021c
 

解释:
-maxdepth 1 搜索深度为1 
-type f 搜索普通文件
-size +72019c 文件大于72019byte ;-size  -72021c 文件小于 72021byte

2、添加 -exec 选项
 

代码示例:
find . -maxdepth 1 -type f -size +72019c -size -72021c  -exec rm {} \;

    
[2]linux sudo命令学习指南
    来源: 互联网  发布时间: 2013-12-24

在linux中,sudo 使一般使用者不需要知道超级使用者的密码即可获得权限。
首先,超级使用者将一般使用者登记在特殊的档案中(通常是/etc/sudoers),即完成对该使用者的授权(此时该使用者称为“sudoer”);
在一般使用者需要取得特殊权限时,其可在命令前加上“sudo”,此时 sudo 将会询问该使用者自己的密码(以确认终端机前的是该使用者本人),回答后系统即会将该命令的进程以超级使用者的权限执行。

不用root用户进行ssh登录,登录之后使用su切换用户。

su 的问题
1,输入密码
2,完全拥有相关 su 的权限

使用sudo命令:
1,不输入别人的密码
2,需要授权
 

代码示例:

[user1@xxx ~]$ /sbin/ifconfig eth0
eth0       Link encap:Ethernet  HWaddr 00:0C:29:30:C1:B6
inet addr:192.168.126.128  Bcast:192.168.126.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe30:c1b6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:226 errors:0 dropped:0 overruns:0 frame:0
TX packets:100 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:25147 (24.5 KiB)  TX bytes:19250 (18.7 KiB)
Interrupt:67 Base address:0x2024

[user1@xxx ~]$ /sbin/ifconfig eth0:1 192.168.1.1
SIOCSIFADDR: Permission denied
SIOCSIFFLAGS: Permission denied

[root@xxx ~]# vim /etc/sudoers
user1   ALL=/sbin/ifconfig

[user1@xxx ~]$ sudo /sbin/ifconfig eth0:1 192.168.1.1
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for user1:
[user1@xxx ~]$ /sbin/ifconfig eth0:1
eth0:1     Link encap:Ethernet  HWaddr 00:0C:29:30:C1:B6
inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Interrupt:67 Base address:0x2024

visudo 可以检查语法
vim /etc/sudoers
 

代码示例:
user     MACHINE=COMMANDS
user1 ALL=    NETWORKING
user2 ALL=(root) NOPASSWD:/bin/mount (NOPASSWD 必须第四段 ALL=(root))

1,user2 用户名字
2,ALL=(root) 主机=(转换成什么身份)
3,NOPASSWD:/sbin/fdisk, PASSWD:/sbin/mkfs.ext3
4,不要口令:命令,要口令:命令
工作中: user1 ALL=(root) NOPASSWD:ALL

首先,需要配置一些Alias,有利于下面配置权限的操作。
Alias主要分成4种
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1) 配置Host_Alias:就是主机的列表
 

代码示例:
Host_Alias      HOST_FLAG = hostname1, hostname2, hostname3

2) 配置Cmnd_Alias:就是允许执行的命令的列表,命令前加上!表示不能执行此命令.
命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!
 

代码示例:
Cmnd_Alias      COMMAND_FLAG = command1, command2, command3 ,!command4

3) 配置User_Alias:就是具有sudo权限的用户的列表
 

代码示例:
User_Alias USER_FLAG = user1, user2, user3

4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
 

代码示例:
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3

5) 配置权限
配置权限的格式如下:
 

代码示例:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG

如果不需要密码验证的话,则按照这样的格式来配置
 

代码示例:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG

配置格式如下:
 

代码示例:
# Host alias specification
Host_Alias      EPG = 192.168.1.1, 192.168.1.2
# User alias specification
# Cmnd alias specification
Cmnd_Alias      SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm
Cmnd_Alias      ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root
# Defaults specification
# User privilege specification
root    ALL=(ALL) ALL
support EPG=(ALL) NOPASSWD: SQUID
support EPG=(ALL) NOPASSWD: ADMPW

    
[3]sar 命令行常用格式详解
    来源: 互联网  发布时间: 2013-12-24

本节分享下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的情况(centos 5 中无此选项)。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。

例1:使用命令行 sar -u t n
例如,每60秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件zhou中,需键入如下命令:
 

代码示例:
# sar -u -o zhou 60 5
SCO_SV   scosysv 3.2v5.0.5 i80386   10/01/2001
14:43:50   %usr   %sys  %wio    %idle(-u)
14:44:50   0     1    4      94
14:45:50   0     2    4      93
14:46:50   0     2    2      96
14:47:50   0     2    5      93
14:48:50   0     2    2      96
Average    0     2    4      94
 

在显示内容包括:
 

%usr:CPU处在用户模式下的时间百分比。
%sys:CPU处在系统模式下的时间百分比。
%wio:CPU等待输入输出完成时间的百分比。
%idle:CPU空闲时间百分比。

说明:注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
如果要查看二进制文件zhou中的内容,则需键入如下sar命令:
 

代码示例:
# sar -u -f zhou

可见,sar命令即可以实时采样,又可以对以往的采样结果进行查询。

例2:使用命行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控制。
 

显示格式为: 实际使用表项/可以使用的表项数
显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如果出现溢出时,要调整相应的核心参数,将对应的表项数加大。

例3:使用命行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值相对比较高,说明硬盘传输速度太慢,需调整。

例4:使用命行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,应在较大内存的情况下,否则系统效率反而得不到提高。

例5:使用命行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。


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3