Linux命令篇之du命令和read命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux命令篇之du命令和read命令相关的知识,希望对你有一定的参考价值。


du 命令

用途

概述磁盘使用。

语法

du [ -a | -s ][ -k ] [ -m ] [ -g ][ -l ][ -r ] [ -x ] [ -H | -L ][ File ... ]

描述

du命令显示用于文件的块的数量。如果指定的File参数实际上是一个目录,就要报告该目录内的所有文件。如果没有提供 File参数,du命令使用当前目录内的文件。

如果File参数是一个目录,那么报告的块的数量就是分配到目录中文件以及分配到目录自身的块之和。

指定-a标志,报告个体文件中块数量。不管是否使用了-a标志,由File参数指定的个体文件总是要列出。

指定-s标志,报告用于所有指定文件和目录中所有文件的全部块。

块计数包括每个文件的间接块。块计数是通过 512 字节单位计算的,它与系统使用的群集大小无关。指定-k标志,通过 1024 字节单位计算块数。

注:

1.  具有多个链接的文件只为一个条目计数和书写。

2.  由于块计数只基于文件大小,所以在报告的块数中,未分配的块是没有包含进去的。

3.  如果du得不到文件属性,或者无法读取目录,它就报告一个错误,并且会影响命令的退出状态。

标志

-a 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。将该标志      与-s标志进行对比。


-g 用 GB 单位计算块数,而不是用缺省的 512 字节单位。对磁盘使用情况的输出值要用浮点数,      这是因为如果用字节为单位的话,值会非常大。


-H 如果在命令行指定了符号链接,du 命令将统计链接引用的文件或文件层次结构的大小。



-k 用 1024 字节单位计算块数,而不是用缺省的 512 字节单位。


-l 在文件链接和多链接之间均匀地分配块。根据缺省值,有两个或者更多链接的文件只计数一        次。


-L 如果在命令行指定了符号链接或者在文件层次结构的遍历中多次遇到符号链接,则 du 命令应      统计链接引用的文件或文件层次结构的大小。


-m 用 MB 单位计算块数,而不是用缺省的 512 字节单位。对磁盘使用情况的输出值要用浮点数,      这是因为如果用字节为单位的话,值会非常大。


-r 报告不可访问的文件或者目录名。此为缺省设置。


-s 为所有指定文件显示整个磁盘使用情况,或者为一个目录中的所有文件显示总的磁盘使用情        况。将该标志与-a标志进行对比。


-x 在评估文件大小时,只评估那些与File参数指定的文件或者目录驻留在相同设备上的文件。例      如,您可以指定一个在多个设备上包含文件的目录。这种情况下,-x标志就为与目录驻留在相      同设备的所有文件显示块的大小。


如果指定了全部-k-m-g标志,或者是其中任意两个,最后指定的那个起作用。用标志-m-g输出磁盘使用情况就会近似成最接近的第二位十进制数。

退出状态

此命令返回下列出口值:

 

0

成功结束。

 

>0

发生错误。

示例

1.  要概述一个目录树及其每个子树的磁盘使用情况,请输入:

 

du /home/fran

这在/home/fran目录及其每个子目录中显示了磁盘块数。

2.  要通过 1024 字节块概述一个目录树及其每个子树的磁盘使用情况,请输入:

du -k /home/fran

这在/home/fran目录及其每个子目录中显示了 1024 字节磁盘块数。

3.  要通过 MB 磁盘块概述一个目录树及其每个子树的磁盘使用情况,请输入:

du -m /home/fran

这在/home/fran目录及其每个子目录中显示了 MB 磁盘块数(近似到最接近的第二位十进制数)。

4.  要通过 GB 块概述一个目录树及其每个子树的磁盘使用情况,请输入:

du -g /home/fran

这在/home/fran目录及其每个子目录中显示了 GB 磁盘块数(近似到最接近的第二位十进制数)。

5.  要显示每个文件磁盘使用情况,请输入:

du -a /home/fran

这显示了包含在每个文件以及目录/home/fran的子目录中的磁盘块数。在目录旁的数字就是该目录树的磁盘使用情况。在常规文件旁的数字就是该文件单独的磁盘使用情况。

6.  要只显示一个目录树的全部磁盘使用情况,请输入:

du -s /home/fran

-s标志控制du命令,只显示/home/fran目录和其中包含的文件的磁盘使用情况的总和。通过缺省值,如果du命令无法读取一个文件或者目录,就显示一条错误消息。

7.  除了在 /home/fran 的遍历中找到的常规文件,还要显示所有符号链接引用的文件或文件层次结构的磁盘使用,请输入:

du -L /home/fran

8.  要报告符号链接 mylink 引用的文件或文件层次结构的磁盘使用,请输入:

du -H mylink


read 命令用法详解

1. 简介

  read是一个buildin命令,主要完成对参数的赋值,类似C语言中的scanf。其不仅可以赋值变量,还可以赋值数组;其输入不仅是屏幕,还可以是文件描述符。

2. man中选项说明

-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。

-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志,会举例说  明。

-p 后面跟提示信息,即在输入前打印提示信息。

-e 在输入的时候可以时候命令补全功能。

-n 后跟一个数字,定义输入文本的长度,很实用。

-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。

-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。

-t 后面跟秒数,定义输入字符的等待时间。

-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。

 

1. 简单读取

read命令接收标准输入(键盘)的输入或其他文件描述符的输入,得到输入后,read命令将数据放入一个标准变量中。下面是 read命令的最简单形式:

01

[email protected]  linuxTest$ vi read-simple.sh

02


 

03

#!/bin/bash

04

#这里默认会换行

 

05

echo "enter  your website: "

06

#读取从键盘的输入

 

07

read website

08

echo "your  website is $website"

 

09

exit 0  #退出

10


 

11


12

#直接执行shell的结果

 

13

[email protected]  linuxTest$ sh read-simple.sh

14

enter your  website:

 

15

www.wirelessqa.com

16

your  website is www.wirelessqa.com

 

17


18

#如果想看清楚每一步的执行,可以加上-x

 

19

[email protected]  linuxTest$ sh -x read-simple.sh

20

+ echo ‘enter  your website: ‘

 

21

enter your  website:

22

+ read website

 

23

www.wirelessqa.com

24

+ echo ‘your  website is www.wirelessqa.com‘

 

25

your  website is www.wirelessqa.com

26

+ exit 0

 

2.直接跟上提示read -p 

01

[email protected]  linuxTest$ vi read-p.sh

02


 

03

#1.读取单个变量

04


 

05

#!/bin/bash

06


 

07

read -p "enter  your website: " website #这里的变量只有一个,也可以有多个

08

echo "your  website is $website"

 

09

exit 0

10


 

11


12

#执行结果

 

13

[email protected]  linuxTest$ sh read-p.sh

14

enter your  website: www.wirelessqa.com

 

15

your  website is www.wirelessqa.com

16


 

17

#2.读取多个变量

18


 

19

[email protected]  linuxTest$ vi read-p-more.sh

20


 

21


22

#!/bin/bash

 

23

#读取输入的多个变量

24

read -p "enter  your name and website: " name website

 

25

echo "your  name is $name,your websit is $website"

26

exit 0

1

#执行结果






 

2

[email protected]  linuxTest$ sh -x read-p-more.sh

3

+ read -p ‘enter  your name and website: ‘ name website

 

4

enter your  name and website: bixiaopeng www.wirelessqa.com

5

+ echo ‘your  name is bixiaopeng,your websit is www.wirelessqa.com‘

 

6

your name  is bixiaopeng,your websit is www.wirelessqa.com

7

+ exit 0

 

3.计时输入read -t 

-t选项指定read命令等待输入的秒数。当计时满时,read命令返回一个非零退出状态;

使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。

01

[email protected]  linuxTest$ vi read-t.sh

02


 

03


04

[email protected]  linuxTest$ cat read-t.sh

 

05

#!/bin/bash

06


 

07

if read -t 10  -p "请在10秒内输入毕小朋博客的地址: " website

08

then

 

09

   if [ $website  = "www.wirelessqa.com" ]

10

   then

 

11

      echo "你输入的地址是对的:$website"

12

   else

 

13

      echo "你输入的网址是错的:$website"

14

   fi

 

15

else

16

   echo "对不起,你已超时,请在10秒内输入!"

 

17

fi

18

exit 0

 

19


20

#执行结果1

 

21

[email protected]  linuxTest$ sh read-t.sh

22

请在10秒内输入毕小朋博客的地址: 对不起,你已超时,请在10秒内输入!

 

23


24

#执行结果2

 

25

[email protected]  linuxTest$ sh read-t.sh

26

请在10秒内输入毕小朋博客的地址: weibo.com/wirelessqa

 

27

你输入的网址是错的:weibo.com/wirelessqa

28


 

29

#执行结果3

30

[email protected]  linuxTest$ sh read-t.sh

 

31

请在10秒内输入毕小朋博客的地址: www.wirelessqa.com

32

你输入的地址是对的:www.wirelessqa.com

4.计数输入read -n数量

当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量

 

01

[email protected]  linuxTest$ vi read-n.sh

02


 

03

[email protected]  linuxTest$ cat read-n.sh

04

#!/bin/bash

 

05


06

#例子1.只接收一个输入就退出

 

07

read -n1  -p "你喜欢老毕的博客吗[y/n]? " answer

08

case $answer in

 

09

Y | y)

10

   echo " 好,谢谢哈!";;

 

11

N | n)

12

   echo " oh,我会继续努力的!";;

 

13

*)

14

   echo " 输入错误,请输入y/n";;

 

15

esac

16


 

17

#例子2.只接收2个输入就退出

18

read -n2  -p "请随便输入两个字符: " any

 

19

echo "  您输入的两个字符是:$any"

20

exit 0

 

21


22

#执行结果

 

23

[email protected]  linuxTest$ sh read-n.sh

24

你喜欢老毕的博客吗[y/n]? n oh,我会继续努力的!

 

25

请随便输入两个字符: ai 您输入的两个字符是:ai

 

5.隐藏输入read -s

01

[email protected]  linuxTest$ vi read-s.sh

02

[email protected]  linuxTest$ cat read-s.sh

 

03

#!/bin/bash

04

#如果想让用户的输入不显示在屏幕上,请使用read -s

 

05

read -s  -p "请输入你的密码: " pass

06

echo

 

07

echo "你的密码是: $pass"

08

exit 0

 

09


10

#执行结果

 

11

[email protected]  linuxTest$ sh read-s.sh

12

请输入你的密码:

 

13

你的密码是: bixiaopeng

 

6.读取文件

每次调用read命令都会读取文件中的一行文本。当文件没有可读的行时,read命令将以非零状态退出。

通过什么样的方法将文件中的数据传给read呢?使用cat命令并通过管道将结果直接传送给包含read命令的while命令

01

[email protected]  linuxTest$ vi read-file.sh

 

02


 

03

[email protected]  linuxTest$ cat read-file.sh

 

04

#!/bin/bash

 

05


 

06

count=1

 

07

cat read-s.sh  |while read line #通过cat read-s.sh文件的输出,作为read 的输入给line

 

08

do

 

09

   echo "$count: $line"

 

10

   count=$[ $count + 1 ]

 

11

done

 

12

echo "结束"

 

13

exit 0

 

14


 

15

#执行结果

 

16

[email protected]  linuxTest$ sh read-file.sh

 

17

1: #!/bin/bash

 

18

2: #如果想让用户的输入不显示在屏幕上,请使用read -s

 

19

3: read -s  -p "请输入你的密码: " pass

 

20

4: echo

 

21

5: echo "你的密码是: $pass"

 

22

6: exit 0

 

23

结束


本文出自 “鹏哥的博客” 博客,谢绝转载!

以上是关于Linux命令篇之du命令和read命令的主要内容,如果未能解决你的问题,请参考以下文章

08 du 命令

谁能给我一个Linux系统中du命令的详细分析?(包括源代码的分析)

Linux du 命令详解

Linux命令篇之useradd命令和userdel命令

Linux里面du命令作用是啥?

每天一个linux命令:du 命令