linux命令之chown、chgrp、cmp、dd、du


chown命令

chown 是一条在Unix系统中用于设置文件所有者和文件关联组的命令。 需要超级用户的权限才能执行此命令。只有超级用户和属于组的文件所有者才能变更文件关联组。非特权用户(非超级用户)如需要设置关联组可能需要使用chgrp命令。

使用方法

[plain] view plaincopyprint?01.<STRONG># chown root /var/run/httpd.pid</STRONG> 
# chown root /var/run/httpd.pid把/var/run/httpd.pid的所有者设置root。

[plain] view plaincopyprint?01.<STRONG># chown rob:developers strace.log</STRONG> 
# chown rob:developers strace.log把strace.log的所有者设置为rob,文件的关联组设置为developers。

[plain] view plaincopyprint?01.<STRONG># chown :512 /home</STRONG> 
# chown :512 /home把/home的关联组设置为512(关联组ID),不改变所有者。

[plain] view plaincopyprint?01.<STRONG># chown -R us base</STRONG> 

# chown -R us base把base以及其目录下的所有的文件的所有者设置为us。-R选项将递归的修改该目录层次结构中的所有文件的所有者和组用户。

chgrp命令

chgrp是一条在Unix系统中用于设置文件所归属的组的命令。与chown命令不同,chgrp允许普通用户改变文件所属的组,

只要该用户是该组的一员。

使用方法

调用chgrp的语法为

chgrp 组名 目标1 [目标2 ...]

"组名"是文件即将关联的组。

"目标1 [目标2 ...]"是需要改变组的文件或目录的列表。

范例

[plain] view plaincopyprint?01.<STRONG>$ls -l testfile 
02.-rw-r--r--   1 unixguy  staff           545 Nov 04 2004  ttt 
03.$chgrp system testfile 
04.$ls -l ttt 
05.-rw-r--r--   1 unixguy  system          545 Nov 04 2004  ttt</STRONG> 
$ls -l testfile
-rw-r--r--   1 unixguy  staff           545 Nov 04 2004  ttt
$chgrp system testfile
$ls -l ttt
-rw-r--r--   1 unixguy  system          545 Nov 04 2004  ttt

[plain] view plaincopyprint?01.<STRONG>chgrp staff /u</STRONG> 
chgrp staff /u将 /u 的属组更改为"staff"。

[plain] view plaincopyprint?01.<STRONG> chgrp -hR staff /u</STRONG> 
 chgrp -hR staff /u将 /u 及其子目录下所有文件的属组更改为"staff"。

上述命令将文件"testfile"所属的组从"staff"改成了"system"。(执行命令者必须属于"staff"组。)

du命令

du(disk usage的缩写,磁盘使用情况)是一个估计某个特定目录或文件在文件系统上磁盘使用情况的标准Unix程序。

默认情况下,单一UNIX系统规定,du显示当前目录每个文件与目录的被分配磁盘空间的情况。链接文件将会显示其本身大小而非其链接对象;目录则会显示其内容的大小。

由于du只反映磁盘分配情况而非实际文件大小,所以如果文件被删除后磁盘未被释放,其显示的数字会与df报告的数字有所不同。

cmp命令

功能说明:比较两个文件是否有差异。当相互比较的两个文件完全先同时,则该指令不会显示任何信息。若发现有所差异,预设会表示每一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为“-”,则cmp指令会从标准输入设备读取数据。

语法:cmp [-c[v][-i <字符数目>][--help][第一个文件][第二个文件]

参  数:

 -c或–print-chars  除了标明差异处的十进制字码之外,一并显示该字符所对应字符。

 -i<字符数目>或–ignore-initial=<字符数目>  指定一个数目。

 -l或–verbose  标示出所有不一样的地方。

 -s或–quiet或–silent  不显示错误信息。

 -v或–version  显示版本信息。

 –help  在线帮助。
示例:

1.cmp prog.o.bak prog.o

这比较 prog.o.bak 和 prog.o。如果文件相同,则不显示消息。如果文件不同,则显示第一个不同的位置;例如:
[plain] view plaincopyprint?01.<STRONG>prog.o.bak prog.o differ: char 4, line 1</STRONG> 
prog.o.bak prog.o differ: char 4, line 1[plain] view plaincopyprint?01.<SPAN style="BACKGROUND-COLOR: rgb(255,255,255); FONT-FAMILY: Arial, Helvetica, sans-serif; FONT-SIZE: 12px"><SPAN style="FONT-SIZE: 14px"><STRONG>如果显示消息 cmp: EOF on prog.o.bak,则 prog.o 的第一部分与 prog.o.bak 相同,但在 prog.o 中还有其他数据。</STRONG></SPAN></SPAN> 

如果显示消息 cmp: EOF on prog.o.bak,则 prog.o 的第一部分与 prog.o.bak 相同,但在 prog.o 中还有其他数据。2. cmp -l proj.o.bak prog.o

这比较文件,然后显示字节数(使用十进制格式)和每个不同的不同字节(使用八进制格式)。例如,如果第五个字节在 prog.o.bak 中是八进制 101,在 prog.o 中是 141,则 cmp 显示:
[plain] view plaincopyprint?01.5 101 141 
5 101 141
3. [plain] view plaincopyprint?01.cmp -s prog.c.bak prog.c 
cmp -s prog.c.bak prog.c

这样,如果文件相同,则给出值 0,如果不同,则给出值 1,或者如果发生错误,则给出值 2。

du可以带一个参数,即指定一个路径来工作;如果没有指定,则使用当前目录。SUS指定了du有以下这些选项:

-a,将当前目录下每个文件(不含目录)作为一个条目显示。

-H,计算命令行中指定链接对象的磁盘使用情况。

-k,将大小除以1024字节,而非512字节显示。

-L,计算任意链接对象的使用情况。

-s,仅汇报当前目录总计的磁盘使用情况,不显示每一个文件。

-x,仅遍历指定路径所在设备上的文件与目录。

-h,把磁盘使用情况的大小加上单位后缀,显示为一个用户更容易理解的形式。

示例

KB单位的目录总大小:
[plain] view plaincopyprint?01.<STRONG> $ du -sk * 
02. 152304  directoryOne 
03. 1856548 directoryTwo</STRONG> 
 $ du -sk *
 152304  directoryOne
 1856548 directoryTwo更易读的目录总大小格式(Byte、KB、MB、GB、TB、PB):
[plain] view plaincopyprint?01.<STRONG> $ du -sh * 
02. 149M directoryOne 
03. 1.8G directoryTwo</STRONG> 
 $ du -sh *
 149M directoryOne
 1.8G directoryTwo当前目录下包含隐藏文件,子目录与文件的磁盘使用情况(从小到大排序):
[plain] view plaincopyprint?01.<STRONG> $ du -sk .[!.]* *| sort -n</STRONG> 
 $ du -sk .[!.]* *| sort -n当前目录下包含隐藏文件,子目录与文件的磁盘使用情况(从大到小排序):
[plain] view plaincopyprint?01.<STRONG> $ du -sk .[!.]* *| sort -nr</STRONG> 
 $ du -sk .[!.]* *| sort -nr显示深度为1的目录大小及其总和
[plain] view plaincopyprint?01.<STRONG> $ du -d 1 -c -h</STRONG> 
 $ du -d 1 -c -hdd命令
dd是一个UNIx和类Unix系统上的命令,主要功能为转换和复制文件。

在Unix上,硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/urandom)就像普通文件一样,出现在文件系统中;只要在各自的驱动程序中实现了对应的功能,dd也可以读取自和/或写入到这些文件。这样,dd也可以用在备份硬件的引导扇区、取得一定数量的随机数据等任务中。dd程序也可以在复制时处理数据,例如转换字节序、或在ASCII与EBCDIC编码间互换。

dd的命令行语句与其他的Unix程序不同,因为它的命令行选项格式为选项=值,而不是更标准的--选项 值或-选项=值。dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。

块大小

块是衡量一次读取、写入和转换字节的单位。命令行选项可以为输入/读取(ibs)和输出/写入(obs)指定一个不同的块大小,尽管块大小(bs)选项会覆盖ibs和obs选项。输入和输出的默认块大小为512字节(传统的磁盘块及POSIX规定的“块”大小)复制的count选项、读取的skip选项和写入的seek选项都是以块为单位。转换操作也受“转换块大小”(cbs)影响。

在dd的一些用途中,块大小可能会影响表现。例如,当转换硬盘中数据时,较小的块大小通常会导致更多的字节被转换。发出许多小块的读取是一种开销的浪费,且可能会对执行性能有负面影响。较大的块大小可能会提高复制速度。但是,由于要复制的字节量是由bs×count给出的,因此不可能一次复制素数字节,除非使用一两个糟糕的选项bs=N count=1(消耗内存)或bs=1 count=N(大量读请求开销)。替代程序(见下文)允许指定字节,而不是块。

在用作网络传输时,根据使用的网络协议,块大小可能会与包大小冲突。

提供给块大小的值会被解释成十进制整数,也可以加入后缀指定倍数。后缀w表示2倍,b表示512倍,k表示1024倍,M表示1024 × 1024倍,G表示1024 × 1024 × 1024倍,等等。另外,在块大小和计数参数中,一些实现也可以使用x表示乘运算。

例如,块大小bs=2x80x18b表示2 × 80 × 18 × 512 = 1474560字节,也就是一张1440 KiB软盘的确切大小。

数据转换

dd可以在文件、设备、分区和卷之间复制数据。数据可以从其中任何地方输入或输出;但输出到分区时有重要差异。此外在传输过程中,数据可以用conv选项修改以适应介质。如果最后一个块有意外长度,试图使用cp复制整个磁盘可能会忽略掉它;然而dd却可能成功。源和目标磁盘应该具有相同的大小。
不同情况的dd格式
dd if=/dev/sr0 of=myCD.iso bs=2048 conv=noerror,sync从CD-ROM中创建ISO磁盘映像。

dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=noerror克隆一个分区到另一个。

dd if=/dev/ad0 of=/dev/ad1 bs=1M conv=noerror克隆硬盘“ad0”到“ad1”。

noerror选项意味着如果发生错误,程序也将继续运行。sync选项表示填充每个块到指定字节。
备份和恢复主引导记录

可以修复主引导记录。主引导记录可以转移到文件,或从中转移出来。

要复制软盘的前两个扇区:
[plain] view plaincopyprint?01.<STRONG>dd if=/dev/fd0 of=MBRboot.img bs=512 count=2</STRONG> 
dd if=/dev/fd0 of=MBRboot.img bs=512 count=2要创建整个x86主引导的镜像(包括MS-DOS分区表和MBR魔法字节):
 dd if=/dev/sda of=MBR.img bs=512 count=1

要创建仅含主引导记录引导代码的镜像(不包括分区表和开机所需的魔法字节):
[plain] view plaincopyprint?01.<STRONG>dd if=/dev/sda of=MBR_boot.img bs=446 count=1</STRONG> 
dd if=/dev/sda of=MBR_boot.img bs=446 count=1数据修改

dd可以原地修改数据。

用空字节覆盖文件的前512个字节:
[plain] view plaincopyprint?01.<STRONG>dd if=/dev/zero of=path/to/file bs=512 count=1 conv=notrunc</STRONG> 

dd if=/dev/zero of=path/to/file bs=512 count=1 conv=notrunc转换选项notrunc意味着不缩减输出文件,也就是说,如果输出文件已经存在,只改变指定的字节,然后退出,并保留输出文件的剩余部分。没有这个选项,dd将创建一个512字节长的文件。

在不同的分区中复制磁盘分区到磁盘镜像文件中:
[plain] view plaincopyprint?01.<STRONG>dd if=/dev/sdb2 of=partition.image bs=4096 conv=noerror</STRONG> 
dd if=/dev/sdb2 of=partition.image bs=4096 conv=noerror磁盘擦除

主条目:数据擦除

出于安全方面的考虑,有时需要擦除丢弃的磁盘。

检查驱动器上是否有数据,并将其输出到标准输出:

[plain] view plaincopyprint?01.<SPAN style="FONT-SIZE: 14px"><STRONG>dd if=/dev/sda</STRONG></SPAN> 
dd if=/dev/sda用零擦除磁盘:
[plain] view plaincopyprint?01.<STRONG>dd if=/dev/zero of=/dev/sda bs=4k</STRONG> 
dd if=/dev/zero of=/dev/sda bs=4kdd进程一次处理一个块,它的算法只是在用户界面显示运行状态

驱动器性能基准测试

对驱动器进行基准测试(通常是单线程),使用1024字节块分析连续系统读取和写入的性能:

[plain] view plaincopyprint?01.<SPAN style="FONT-SIZE: 14px"><STRONG>dd if=/dev/zero bs=1024 count=1000000 of=file_1GB 
02.dd if=file_1GB of=/dev/null bs=1024</STRONG></SPAN> 
dd if=/dev/zero bs=1024 count=1000000 of=file_1GB

dd if=file_1GB of=/dev/null bs=1024用随机数据生成文件

使用内核随机数驱动,用100个随机字节生成文件:
[plain] view plaincopyprint?01.<STRONG>dd if=/dev/urandom of=myrandom bs=100 count=1</STRONG> 
dd if=/dev/urandom of=myrandom bs=100 count=1将文件转换为大写

将文件转换为大写:

[plain] view plaincopyprint?01.<STRONG>dd if=filename of=filename1 conv=ucase</STRONG> 
dd if=filename of=filename1 conv=ucase创建任意大小的空文件
创建1GiB的稀疏文件,或增加现有文件的大小:
[plain] view plaincopyprint?01.<STRONG>dd if=/dev/zero of=mytestfile.out bs=1 count=0 seek=1G</STRONG>

相关内容