Linux命令备忘实例(13)——文件操作

来源:互联网 发布:w7电脑网络出现感叹号 编辑:程序博客网 时间:2024/06/05 14:09

1.生成任意大小文件——dd

如果为了测试程序,需要生成包含随机数据的文件时,需要使用指定大小的文件作为输入,或者时分割文件等。创建特定大小的文件最简单的方法就是dd命令。
dd命令克隆给定的输入内容,然后输出一份副本到输出。stdin、设备文件、普通文件都可以作为dd的输入;stdout、设备文件、普通文件也都可以作为dd的输出。

user@ubuntu:~$ dd if=/dev/zero of=junk.data bs=1M count=1

上述命令会创建一个1M大小的junk.data文件。
- if:输入文件(input file)
- of:输出文件(output file)
- bs:以字节为单位的大小(block size)
- count:需要复制的块数,最终文件大小为 bs*count

快大小可以使用通用的单位来指定,c(1Byte)、w(2Bytes)、b(512Bytes)、k、M、G等。不指定if参数时默认从stdin接收输入。不指定of默认会输出到stdout。另外可以使用dd命令传输大量数据来测试内存的操作速度。

2.文本文件交差集——comm

comm命令用于比较两个文本文件。交集:输出共有的行,差集:输出包含在A文件中而不在其他文件中的行,求集:包含在指定文件中且不相同的行。

user@ubuntu:~$ comm A Bcolumn1     column2     column3...

输出的第一列包含只出现在A中的行,第二列包含只在B出现的行,第三列包含A和B中相同的行,各列以tab键分割。
只有三个选项进行控制,-1用来删除第一列,-2删除第二列,-3删除第三列。

3.批量生产空白文件——touch

touch可以用来生成空白文件,如果文件存在,就会修改文件的时间戳。

for name in (1...100).txtdo    touch ${name}done

4.列举文件信息——file

file命令用来输出文件的类型信息,可以输出文件的基本信息。linux中的文件类型信息不是由扩展名决定的,而是由文件头决定的。file可以方便的查看:

user@ubuntu:~$ file testtest: ASCII textuser@ubuntu:~$ file /usr/bin/bc/usr/bin/bc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x16db821a3043f96564c984920984be43465ddfeb, stripped

使用find命令可以配合得到制定目录下的文件统计信息:

#!/bin/bashif [ $# -ne 1 ];then    echo $0 basepath;fipath=$1declare -A statArrwhile read line;do    ftype=`file -b "$line"`    let statArr["$ftype"]++;done << (find $path -type f -print)echo ============ File types and count ===============for ftype in "${!statArr[@]}";do    echo $ftype : ${statArr["$ftype"]}done

5文件差异——diff

对于一个文件有多个版本时,如果需要查看各个版本都有哪些变化,那么使用diff命令可以生成差异文件。

$ diff -u ver1.txt ver2.txt > ver.patch

上述命令将diff生成的不同点保存到ver.patch文件中,当使用ver1.txt时就可以得到ver2.txt,使用ver2.txt时就会得到ver1.txt。
dff能以递归形式作用于目录。会对目录中所有内容生成差异输出:
-N:将所有缺失文件视为空白文静
-a:将所有文件视为文本文件
-u:生成一体化输出
-r:遍历目录下的所有文件

$ patch -p1 ver1.txt < ver.patchpatching file ver1.txt

上述命令使得ver1.txt文件与ver2.txt内容完全相同。如果再次运行上述命令,就会恢复ver1.txt文件到之前的版本。

0 0
原创粉丝点击