shell 除法计算
shell计算中使用除法,基本默认上都是整除。
比如:
num1=2
num2=3
num3=`expr $num1 / $num2`
这个时候num3=0 ,是因为是因为expr不支持浮点除法
解决的方法:
num3=`echo "scale=2; $num1/$num2" | bc`
使用bc工具,sclae控制小数点后保留几位
还有一种方法
awk 'BEGIN{printf "%.2f\n",’$num1‘/’$num2‘}'
如果用百分比表示
awk 'BEGIN{printf "%.2f%\n",(’$num1‘/’$num2‘)*100}'
`echo "$UpSpeed $upload"|awk '{printf "%.4f%\n",$1/$2*100}'`
Shell 算数运算
(i=$j+$k)) 等价于 i=`expr $j + $k`
((i=$j-$k)) 等价于 i=`expr $j -$k`
((i=$j*$k)) 等价于 i=`expr $j \*$k`
((i=$j/$k)) 等价于 i=`expr $j /$k`
Let expressions 执行一个或多个表达式。表达式中的变量前不必有$.如果表达式中包含了空格或其他特殊字符,则必须引起来。
例:let “I = I + 1” 或 let i=i+1
算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。
— +:对两个变量做加法。
— -:对两个变量做减法。
— *:对两个变量做乘法。
— /:对两个变量做除法。
— **:对两个变量做幂运算。
— %:取模运算,第一个变量除以第二个变量求余数。
— +=:加等于,在自身基础上加第二个变量。
— -=:减等于,在第一个变量的基础上减去第二个变量。
— *=:乘等于,在第一个变量的基础上乘以第二个变量。
— /=:除等于,在第一个变量的基础上除以第二个变量。
— %=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。
在使用这些运算符时,需要注意到运算顺序的问题。例如输入下面的命令,输出1+2的结果。
echo 1+2
Shell并没有输出结果3,而是输出了1+2。在shell中有三种方法可以更改运算顺序。
— 用expr改变运算顺序。可以用echo `expr 1 +2`来输出1+2的结果,用expr表示后面的表达式为一个数学运算。需要注意的是,`并不是一个单引号,而是“Tab”键上面的那个符号。
— 用let指示数学运算。可以先将运算的结果赋值给变量b,运算命令是b=let 1 + 2。然后用echo$b来输出b的值。如果没有let,则会输出1+2。
— 用$[]表示数学运算。将一个数学运算写到$[]符号的中括号中,中括号中的内容将先进行数学运算。例如命令echo$[1+2],将输出结果3。
下面是一个shell程序实例,实现数学函数S=3(xy)+4x2+5y+6的运算。在程序中以位置变量的方式输入x与y的值。程序的编写步骤如下所示。
在主菜单中打开一个终端。在终端中输入“vim”命令打开VIM。
在VIM中按“i”键进入插入模式,然后输入下面的代码。
代码4-2 数学运算实例:\源文件\04\4.4.sh
#!/bin/bash
#4.4.sh
s=0 #定义一个求和变量,初值为0。
t=`expr$1**$2` #用expr改变运算顺序,求x的y次方。
t=$[t*3] #t乘以3。
s=$[s+t] #结果相加。
t=$[$1**2] #求x的平方。
t=$[t*4] #结果乘以4。
s=$[s+t] #结果相加。
t=`expr$2*5` #求5y的值。
s=$[s+t] #结果相加。
s=$[s+6] #结果加上6。
echo$s #输出结果。
echo$((a%b)) #取余
在这个程序中,需要注意算术运算的写法。如果没有expr或$[]更改运算顺序,则会将运算式以字符串的形式赋值,而不会赋值运算结果。
按“Esc”键返回到普通模式。然后输入“:w 4.4.sh”保存文件。
输入“:q”命令,按“Enter”键退出VIM。
在终端中,输入下面的命令对4.4.sh文件添加可执行权限。
chmod +x 4.4.sh
输入下面的命令运行程序。在命令中需要输入两个参数。
./4.4.sh 2 4
程序会完成S=3(xy)+4x2+5y+6的数学运算并输出结果,结果如下所示。
90
在shell中,字符串转换为时间戳可以这样做:
date -d "2010-10-18 00:00:00" +%s
输出形如:
1287331200
其中,-d参数表示显示指定的字符串所表示的时间,+%s表示输出时间戳。
而时间戳转换为字符串可以这样做:
date -d @1287331200
输出形如:
Mon Oct 18 00:00:00 CST 2010
文章来源:http://www.codelast.com/
如果要转换成“2010-10-18 00:00:00”这种形式的时间戳,则这样做:
date -d "1970-01-01 UTC 1287331200 seconds" "+%F %T"
输出形如:
2010-10-18 00:00:10
再多废话一句,如果只要输出日期,不要时间,则去掉 %T 就可以了:
date -d "1970-01-01 UTC 1287331200 seconds" +%F
输出形如:
2010-10-18
AWK
一、awk基础知识
1、awk格式
awk 选项 '命令体' file1,file2...
选项:-F 指定分隔符,默认是空格或者tab制表符
命令体:
读前处理:BEGIN{命令...}------->页眉
所有行处理:{命令...}------->内容
读后处理:END{命令...}------->页脚
例如: awk -F: 'BEGIN{...;}{...;}end{...;}' testfile
2、内建变量、定址
注意:内建变量不需要用$取值
NR:awk读入的所有文件的行号
FNR:awk当前读入的行在当前文件的行号(如果从多个文件读取时,该变量FNR和NR就不同了)
FILENAME:文件名
NF:字段个数
FS:以变量方式指定分割符,-F是以参数方式指定分割符
OFS:指定字段输出的分割符
ORS:指定行输出的分割符
awk -F: 'NR==3 {print $1,$7}' pass #打印第3行
awk -F: '{print FILENAME,NR,FNR,$1,$7}' pass pass2 #NR是所有文件的行号,FNR是当前读入文件的行号,FILENAME文件名
awk -F: '{print NF,FILENAME,NR,$0}' pass #打印字段数,与分割符选取有关
awk -F[:/] '{print NF,FILENAME,NR,$0}' pass #指定多种分割符
awk -F[^a-Z] '{print NF,FILENAME,NR,$0}' pass #非字母作分割符
awk 'FS=":" {print $1,$7}' pass #以变量方式指定分割符
awk -F: 'OFS="----" {print $1,$7}' pass #将默认的空格分割符输出变成"----"
awk -F: 'ORS="|||" {print $1,$7}' pass #将默认的回车换行符设置为|||
正则定址
awk -F: '/root/ {print $1,$7}' pass
awk -F: '/ro+/ {print $1,$7}' pass #awk默认支持拓展正则
3、awk运算符
比较运算符
awk -F: 'NR!=3 {print $1,$7}' pass
awk -F: 'NR<=3 {print $1,$7}' pass
awk -F: '$1~/ro/ {print $1,$7}' pass #第一列匹配ro,被匹配的部分需要用""或//,支持正则
awk -F: '$7~"sh$" {print $1,$7}' pass
awk -F: '$7!~"sh$" {print $1,$7}' pass
awk -F: 'NR>3&&NR<6 {print $1,$7}' pass #3-6行
awk -F: 'NR<3 || NR>6 {print $1,$7}' pass
算术运算符
awk -F: '$3=$3+1 {print $1,$3}' pass #加一
awk -F: '$3++ {print $1,$3}' pass
awk -F: '$3+=1 {print $1,$3}' pass
awk -F: '$3%2==0 {print $1,$3}' pass
awk -F: '$3=$3**2 {print $1,$3}' pass #$3的平方
转义字符
awk -F: '{print $1"\t"$3}' pas
awk -F: '{print $1"\b"$3}' pass
二、awk高级知识
awk的语法与C语言非常类似,很容易学习!
1、if-else分支
awk -F: '{if($3==10) print $0}' pass
awk -F: '{if($3==10) {print $1;print $7}}' pass #嵌套,如果只有一个语句,{}可加可不加,"{}"后不可有";"。
awk -F: '{if($3==10) {print $1;} else print $0}' pass #if-else
#if-else if-else,注意:匹配字符串的时候要加引号"root"
awk -F: '{if($3==10) {print $1;} else if($1=="root") print $0; else print $7;}' pass
例如:如果UID=0,打印admin;UID在1~499之间打印sys_users;UID在500以上打印users
awk -F: '{
if($3==0) {
print $1"\tadmin";
} else if($3>=1&&$3<500) {
print $1"\tsys_users"}
else {
print $1"\tusers";
}
}' /etc/passwd
2、三目运算符
expr?act1:act2
awk -F: 'var=($3==0)?"admin":"users" {print $1,var}' /etc/passwd #如果UID=0则打印出admin,否则打印user,下同
awk -F: '($3==0)?var="admin":var="users" {print $1,var}' /etc/passwd #结果同上
awk -F: '{print ($3>500)?:$1:$6}' /etc/passwd
3、格式输出printf
使用printf很方便打印出整齐的格式,和C语言printf很相似!!
格式:printf "...",...,...,...;
例如:printf "%d %s %s\n",$3,$1,"aaa"; #注意:printf默认不换行
]#打印出结果,如果不够5个字符,在左侧补空格
awk -F: 'BEGIN{printf "%-7s %-15s %-4s\n","UID","NAME","LEVEL"}{printf "%-7s %-15s %-4s\n",$3,$1,$4} END{print NR,NF,FILENAME}' /etc/passwd
#打印出UID,NAME,LEVEL
4、awk的语句段执行过程
BEGIN:该阶段还未处理文件,常用于做变量初始化工作
{}:开始处理文件,每处理一行执行一次{}内的语句!
END{}:处理完文件的善后工作。
注意以下运行结果:
awk 'BEGIN{FS=":"} {print $1}' /etc/passwd #正确
awk 'FS=":" {print $1}' /etc/passwd #第一行会有问题
统计行数
awk 'BEGIN{i=0}{i++}END{print "lines "i}' /etc/passwd
lines 40
计算UID、GID之和
awk -F: 'BEGIN{usum=0;gsum=0;i=0}{i++;usum=usum+$3;gsum=gsum+$4}END{printf "%-10s%-10d%-10s%d\n","UID_SUM:",usum,"GID_SUM:",gsum;printf "%-10s%-10d%-10s%-10d\n","UID_AVG:",usum/i,"GID_AVG:",gsum/i}' /etc/passwd
统计程序的虚拟内存和实际内存
ps aux|grep -v '^USER'|awk 'BEGIN{vsz=0;rss=0}{vsz=vsz+$5;rss=rss+$6}END{printf "%-5s%-10d%-5s%-10d\n","VSZ:",vsz/1024,"RSS:",rss/1024}'
5、while循环
awk 'BEGIN{i=0;while(i<10){print i++}}'
6、do while循环
awk 'BEGIN{i=5;do{print i++}while(i<4)}' #先执行,后判断
7、for循环
awk 'BEGIN{for(i=0;i<10;i++) print i}'
例如:打印99乘法表
awk 'BEGIN{for(i=1;i<10;i++) {for(j=1;j<=i;j++) {printf "%d%s%d%s%d\t",j,"*",i,"=",i*j;}printf "\n"}}'
逆序输出passwd
awk -F: '{for(i=NF;i>=1;i--){printf "%s",$i;if(i!=1) printf ":";} printf "\n"}' /etc/passwd
8、break、continue
awk 'BEGIN{for(i=1;i<=5;i++) {if(i>3) break;print i}}' #跳出循环并终止
awk 'BEGIN{for(i=1;i<=5;i++) {if(i==3) continue;print i}}' #停止本次循环,继续执行下次循环
9、next、exit
awk -F: 'NR>3{next}{print $i}END{print NR}' /etc/passwd #当NR>3时,继续扫描余下的行,但不执行print $i,
awk -F: 'NR>3{exit}{print $i}END{print NR}' /etc/passwd #当NR>3时,停止扫描
10、数组
awk的数组功能很强,下标不一定是数组
awk 'BEGIN{ary[1]="seker";ary[2]="yerik";print ary[1],ary[2]}'
awk 'BEGIN{ary[1]="seker";ary[2]="yerik";for (i in ary) print i,ary[i]}' #for必须有(),注意与shell的区别
awk 'BEGIN{for(i=1;i<=10;i++){ary[i]=i} for(i in ary) print ary[i]}' #注意:打印出来的结果是无序的,因为是并行输出的
用非数字作为数组下标(这点是其他大部分高级语言所不具备的)
awk -F: '{ary[$1]=$6;} END{for(i in ary) print i,ary[i]}' /etc/passwd
例如:统计用户的shell
awk -F: '{ary[$NF]++}END{for(i in ary)print ary[i],i }' /etc/passwd #注:个人认为此用法相当犀利!!!在统计时多用!!!
同awk -F: '{if(ary[$NF]==0) ary[$NF]=1;else ary[$NF]++}END{for(i in ary) print ary[i],i}' /etc/passwd
11、awk脚本
使用脚本后,适当的缩进增加程序可读性;
<1> 引用awk文件
awk -F: -f awk.sh /etc/passwd
awk.sh脚本内容
1 {ary[$NF]++}
2 END{
3 for(i in ary)
4 print ary[i],i;
5 }
<2> 用awk解释器解释脚本
1 #!/bin/awk -f
2 BEGIN{
3 FS=":"
4 }
5
6 {ary[$NF]++}
7 END{
8 for(i in ary)
9 print ary[i],i;
10 }
<3> awk 与shell共存(awk引用shell的变量)
方法一(屏蔽shell的解释):
#!/bin/bash
var=root
awk -F: '$1~/'$var'/ {print $0}' /etc/passwd #此处awk引用了shell的var变量
#awk 的引号''是为了屏蔽shell的解释,而要想让awk解释shell的变量,可以在awk中将变量用引号''引起来
方法二(变量作为awk的参数):
#!/bin/bash
a=root
awk -v var=$a -F: '$1==var {print $0}' /etc/passwd #-v参数用来让awk接受shell的变量
###############################
三、awk练习
1.使用:或/符号做分隔符,将字段逆序输出/etc/passwd文件的每行
awk -F: '{for(i=NF;i>=1;i--) if(i==1)printf "%s\n",$i;else printf "%s:",$i}' /etc/passwd
2.观察两个文件,以及join命令输出,用awk引入name.txt,home.txt两个文件,模拟joni命令的输出
# awk -F: 'NR < 11 {print $3,$1}' /etc/passwd > name.txt
# awk -F: 'NR < 11 {print $3,$6}' /etc/passwd > home.txt
# join name.txt home.txt
awk '{ary[$1]=$2" "ary[$1]}END{for(i in ary) print i,ary[i]}' name.txt home.txt|sort -n
3.统计/etc/passwd中每种shell的被使用人数
输出格式:
counts shell
1
1 /bin/sync
4 /bin/bash
31 /sbin/nologin
1 /sbin/halt
1 /sbin/shutdown
awk -F: '{ary[$7]++}END{for(i in ary) print ary[i],i}' /etc/passwd
4.统计ps中RSZ,VSS各自总和
输出格式:
ps MEM statistic
VSZ_SUM : 164.277M
RSS_SUM : 47.8555M
ps aux|grep -v '^USER'|awk 'BEGIN{vsz=0;rss=0}{vsz=vsz+$5;rss=rss+$6}END{print "VSZ_SUM :",vsz/1024"M";print "RSS_SUM :",rss/1024"M"}'
VSZ_SUM : 2187.08M
RSS_SUM : 417.352M
5.计算/etc/passwd中所有用户的UID平均数,以及GID平均数.
输出格式:
UID and GID AVG
UID-AVG : 1750.72
GID_AVG : 1754
awk -F: 'BEGIN{print "UID and GID AVG"; u_sum=0;g_sum=0}{u_sum+=$3;g_sum+=$4}END{print "UID-AVG :",u_sum/NR;print "GID_AVG :",g_sum/NR}' /etc/passwd
UID and GID AVG
UID-AVG : 1710.88
GID_AVG : 1714.12
6.
根据uid值给用户分等级 Admin system users
输出格式:
LEVEL NAME
Admin root
sysuser bin
users seker
admin_count: N sys_user_count: N users_count: N
awk -F: 'BEGIN{printf "LEVEL\tNAME\n"}{if($3==0) {printf "Admin\t%s\n",$1;admin++}else if($3>=500) {printf "users\t%s\n",$1;user++}else {printf "sysuser\t%s\n",$1;sysuser++}}END{printf "admin_count:%d\tsys_user_count:%d\tusers_count:%d\n",admin,user,sysuser}' /etc/passwd
-------------------------------
7.分别用GREP,SED,AWK将ifconfig中匹配到eth1的网卡所有信息打印出来.
ifconfig|awk -F"\t" '$1==lo{exit}{print $1"\t"$2}'
-------------------------------
8.SHELL实现批量建立多个文件,将文件拓展名加上.txt,再加上.doc,再把中间的.txt去掉
1 #!/bin/bash
2
3 NEWNAME=""
4 echo "Touching TXT Files..."
5 sleep 1
6 touch {a,b,c}_{1,2,3}.txt
7 echo $(ls *.txt)
8 echo
9
10 for i in $(ls *.txt)
11 do
12 mv $i "$i.doc"
13 done
14 echo "txt.doc Files:"
15 sleep 1
16 echo $(ls *.doc)
17
18 for i in $(ls *.doc)
19 do
20 NEWNAME=$(echo $i|awk -F. '{printf "%s.%s",$1,$3}')
21 mv $i $NEWNAME
22 done
23 echo
24 echo ".doc Files:"
25 sleep 1
26 echo $(ls *.doc)
27 exit 0
9.AWK脚本实现间隔五行打印表头
# ./awk_print.sh /etc/passwd
Username Uid
root 0
bin 1
daemon 2
adm 3
lp 4
Username Uid
shutdown 6
halt 7
mail 8
news 9
uucp 10
1 #!/bin/awk -f
2
3 BEGIN{FS=":";}
4 {
5 if((NR-1)%5==0){
6 printf "\n%-10s%-10s\n","Username","Uid";
7 printf "%-10s%-10s\n",$1,$3;
8 }else
9 printf "%-10s%-10s\n",$1,$3;
10 }
1 #!/bin/awk -f
2
3 BEGIN{i=1;max=0;min=0;tmp=0}
4
5 {ary[i++]=$1;}
6
7 END{
8 for(i=1;i<=99;i++){
9 for(j=1;j<=99;j++){
10 if(ary[j]>ary[j+1]){
11 tmp=ary[j];
12 ary[j]=ary[j+1];
13 ary[j+1]=tmp;
14 }
15 }
16 }
17 for(k in ary) print ary[k];
18 }
转自:http://hi.baidu.com/googleu/blog/item/1d3be02b13b38290033bf6ce.html
Linux shell的&&和||
Linux shell的&&和||
shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时,表示执行失败。
www.2cto.com
有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。
&&(命令执行控制)
语法格式如下:
command1 && command2 [&& command3 ...]
1 命令之间使用 && 连接,实现逻辑与的功能。
2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
www.2cto.com
示例 1
malihou@ubuntu:~$ cp ~/Desktop/1.txt ~/1.txt && rm ~/Desktop/1.txt && echo "success"
示例 1 中的命令首先从 ~/Desktop 目录复制 1.txt 文件到 ~ 目录;执行成功后,使用 rm 删除源文件;如果删除成功则输出提示信息。
||(命令执行控制)
语法格式如下:
command1 || command2 [|| command3 ...]
1 命令之间使用 || 连接,实现逻辑或的功能。
2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。
示例 2
malihou@ubuntu:~$ rm ~/Desktop/1.txt || echo "fail"
在示例 2 中,如果 ~/Desktop 目录下不存在文件 1.txt,将输出提示信息。
示例 3
malihou@ubuntu:~$ rm ~/Desktop/1.txt && echo "success" || echo "fail"
在示例 3 中,如果 ~/Desktop 目录下存在文件 1.txt,将输出 success 提示信息;否则输出 fail 提示信息。
shell 提供了两种方法(() 和 {})实现将几个命令合作一起执行,代替独立执行。这种方式并不能控制命令是否需要执行,仅是将多个单独的命令组合在一起执行,最终命令的返回值将由最后一条命令的返回值来决定。
() (命令组合)
语法格式如下: www.2cto.com
(command1;command2[;command3...])
1 一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔。执行的效果等同于多个独立的命令单独执行的效果。
2 () 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令。
3 命令组合常和命令执行控制结合起来使用。
示例 4
malihou@ubuntu:~$ rm ~/Desktop/1.txt || (cd ~/Desktop/;ls -a;echo "fail")
在示例 4 中,如果目录 ~/Desktop 下不存在文件 1.txt,则执行命令组合。
linux导入自定义的环境变量
有三种方法:
第一种适用于给单用户设置环境变量:在用户主目录下有.bashrc文件, 隐藏属性,使用ls -a查看。
vi修改该文件,加入字段 export PATH="$PATH:/yourpath1:/yourpath2" , 保存退出,使用# source .bashrc命令重新执行.bashrc 即可生效
第二种方法修改全局配置,即任何用户登陆都这个环境变量都生效: 修改/etc/profile文件,加入PATH="$PATH:/yourpath1:/yourpath2" export PATH 语句,执行source profile或. profile即可。
第三种临时起作用,退出tty就失效.#PATH="$PATH:/yourpath1:/yourpath2" #export PATH
另解释下source命令的用法:
source命令用法:
source FileName
作用:在当前bash环境下读取并执行FileName中的命令。
注:该命令通常用命令“.”来替代。
如:source .bash_rc 与 . .bash_rc 是等效的。
注意:source命令与shell scripts的区别是,
source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置
环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以
通过文件(命令列)设置环境变量时,要用source 命令。
Linux系统下查看目录大小
作者:iamlaosong
我们有个系统每天要下载数据,为了检查下载数据是否正常,需要查看下载数据目录大小,因为每天的数据都差不多,如果变化太大就说明不正常。查看目录大小的命令是du(当然也可以查看文件大小),例如:du ems_data,就是查看ems_data目录下各子目录的大小;du,就是查看当前目录下各子目录的大小;du *,就是查看当前目录下各子目录和文件的大小。
为了提高查看效果,我们需要对结果进行排序,因为du的命令结果很乱,例如:
从大到小排列:du ems_data | sort -nr
按目录名排列:du ems_data | sort +1 -2
选出排在前面的10个:du ems_data | sort -rn | head
选出排在后面的10个:du ems_data | sort -rn | tail
当前目录的大小:du -sh .
===================================================
附:linux中du命令参数的用法,并用示例进一步说明其使用方法。
Du命令功能说明:统计目录(或文件)所占磁盘空间的大小。
语 法:du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-depth=<目录层数>][--help][--version][目录或文件]
常用参数:
-a或--all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
-b或--bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或--dereference-args 显示指定符号连接的源文件大小。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
-k或--kilobytes 以1024 bytes为单位。
-l或--count-links 重复计算硬件连接的文件。
-L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或--megabytes 以1MB为单位。
-s或--summarize 仅显示总计,即当前目录的大小。
-S或--separate-dirs 显示每个目录的大小时,并不含其子目录的大小。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
--max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
--help 显示帮助。
--version 显示版本信息。
linux中的du命令使用示例:
1> 要显示一个目录树及其每个子树的磁盘使用情况
du /home/linux
这在/home/linux目录及其每个子目录中显示了磁盘块数。
2> 要通过以1024字节为单位显示一个目录树及其每个子树的磁盘使用情况
du -k /home/linux
这在/home/linux目录及其每个子目录中显示了 1024 字节磁盘块数。
3> 以MB为单位显示一个目录树及其每个子树的磁盘使用情况
du -m /home/linux
这在/home/linux目录及其每个子目录中显示了 MB 磁盘块数。
4> 以GB为单位显示一个目录树及其每个子树的磁盘使用情况
du -g /home/linux
这在/home/linux目录及其每个子目录中显示了 GB 磁盘块数。
5>查看当前目录下所有目录以及子目录的大小:
du -h .
“.”代表当前目录下。也可以换成一个明确的路径
-h表示用K、M、G的人性化形式显示
6>查看当前目录下user目录的大小,并不想看其他目录以及其子目录:
du -sh user
-s表示总结的意思,即只列出一个总结的值
du -h --max-depth=0 user
--max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录。
7>列出user目录及其子目录下所有目录和文件的大小:
du -ah user
-a表示包括目录和文件
8>列出当前目录中的目录名不包括xyz字符串的目录的大小:
du -h --exclude=’*xyz*’
9>想在一个屏幕下列出更多的关于user目录及子目录大小的信息:
du -0h user
-0(杠零)表示每列出一个目录的信息,不换行,而是直接输出下一个目录的信息。
10>只显示一个目录树的全部磁盘使用情况
du -s /home/linux
注意:参数是多个字符时,前面的减号“–”是两个。
原文地址:http://blog.csdn.net/iamlaosong/article/details/7085178
grep -v什么意思
在统计行数时忽略GREP命令本身这一行