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输出磁盘使用情况就会近似成最接近的第二位十进制数。
退出状态
此命令返回下列出口值:
示例
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"
|
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
|
|
07
|
read -p "enter your website: " website # 这里的变量只有一个,也可以有多个
|
08
|
echo "your website is $website"
|
13
|
[email protected] linuxTest$ sh read-p.sh
|
14
|
enter your website: www.wirelessqa.com
|
15
|
your website is www.wirelessqa.com
|
16
|
|
19
|
[email protected] linuxTest$ vi read-p-more.sh
|
20
|
|
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
|
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秒内输入!"
|
21
|
[email protected] linuxTest$ sh read-t.sh
|
22
|
请在10秒内输入毕小朋博客的地址: 对不起,你已超时,请在10秒内输入!
|
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
|
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";;
|
17
|
# 例子2.只接收2个输入就退出
|
18
|
read -n2 -p " 请随便输入两个字符: " any
|
19
|
echo " 您输入的两个字符是:$any"
|
20
|
exit 0
|
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
|
11
|
[email protected] linuxTest$ sh read-s.sh
|
12
|
请输入你的密码:
|
6.读取文件
每次调用read命令都会读取文件中的”一行”文本。当文件没有可读的行时,read命令将以非零状态退出。
通过什么样的方法将文件中的数据传给read呢?使用cat命令并通过管道将结果直接传送给包含read命令的while命令
01
|
[email protected] linuxTest$ vi read-file.sh
|
03
|
[email protected] linuxTest$ cat read-file.sh
|
07
|
cat read-s.sh |while read line # 通过cat read-s.sh文件的输出,作为read 的输入给line
|
16
|
[email protected] linuxTest$ sh read-file.sh
|
18
|
2: # 如果想让用户的输入不显示在屏幕上,请使用read -s
|
19
|
3: read -s -p " 请输入你的密码: " pass
|
21
|
5: echo " 你的密码是: $pass"
|
时间: 2024-10-11 12:13:24