Shell的常用命令

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命令本身这一行

转载于:https://my.oschina.net/xxjbs001/blog/281167

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值