`

linux生成指定大小的文件

阅读更多

# dd if=/dev/zero of=50M.file bs=1M count=50
在当前目录下生成一个50M的文件


虚拟块设备文件更通用的名称是硬盘镜像文件(Hard Disk Image),但不是所有的硬盘镜像文件都是虚拟块设备文件,例如,目前Ghost的GHO格式的镜像文件就不能成为虚拟机中的硬盘。

Linux的dd命令,用来生成虚拟块设备文件。既可以用于创建空镜像文件,也可以用于创建物理硬盘的镜像。

# dd if=/dev/hda0 of=/home/oldsong/hda0.image records in4757130+0 records out
将/dev/hda0的内容复制到/home/oldsong/hda0.image文件。
参数if(input file)告诉dd从哪个文件读取数据,参数 of(output file)告诉dd读出的数据写入哪个文件中。
注意,对于dd来说,输入和输出都是文件,dd做的只是文件拷贝工作,这得益于Unix/Linux下面将设备也抽象为特殊的文件。

一般来说设备文件有两种,一种是块设备,一种是字符设备。块设备的特点是可以随机读写(Random Access),比如内存、硬盘等。字符设备的特点是顺序读写(Sequential Access),比如鼠标,键盘,麦克风等。

前面说了如何生成物理硬盘的镜像,如果想生成空镜像文件(本文的主要目的),还需要一个特殊的设备。/dev/zero是Linux提供的一个特殊的字符设备,它的特点是可以永远读该文件,每次读取的结果都是二进制0。下面的命令可以生成一个100M的空镜像文件:

# dd if=/dev/zero of=50M.file bs=1M count=50
bs=1M表示每一次读写1M数据,count=50表示读写 50次,这样就指定了生成文件的大小为50M。bs参数还可以进一步细分为ibs和obs两种,为读操作与写操作分别指定不同的Buffer大小。

这样就生成50M的空镜像文件,问题是,如果要生成1G的虚拟块设备文件,就得占用1G的硬盘空间,而这个镜像文件完全是空的,是不是有一点浪费?好在Linux支持Sparse(稀疏)文件。请看下面的例子

# dd if=/dev/zero of=1G.img bs=1M seek=1000 count=0
# ls -l 1G.img
-rw-r-r- 1 root root 1048576000 Mar 25 15:32 1G.img
# du -m 1G.img
0 1G.img

这里用了一个新的命令seek,表示略过1000个Block不写(这里Block按照bs的定义是1M),count=0表示写入0个Block。用ls(查看文件大小)命令看新生成的文件,大小可以看出是1000M。但是再用du(查看文件占用空间)一看,实际占用硬盘大小只有0M。

 
因为要用素材生成固定大小的彩信,所以想用一张10K左右的图片加上与之互补的文本文件,两个文件一组拼成标准的10K素材,最后就可以生成出10~100K大小的彩信。

找好图片之后,就用“dd”命令生成与之相应的文本文件。

使用的格式如下:(从sina.html文件读取1024Byte字节生成一个文本文件mm0.txt)

“dd if=/home/sina.html of=/home/mms0.txt bs=1024 count=1”


if的参数是输入文件是新浪的主页,

of的参数是要生成的文件,

bs的参数是每次读入的block大小,这里就设为要生成的文件大小,

count的参数是读取的block个数,这里就设为1。

通过bs和count组合就可以生成指定大小的文件,根据if输入源的不同也内容也可以随机。


二、文件编码转换

    这样生成的文本文件通过彩信发到手机后还存在一个问题:

手机提示这个文本文件是不支持的素材,或者直接无法显示内容。

后来发现是文件编码的问题,封装彩信的时候标明文本素材是UTF-8编码,可是用生成的文件好像是GB2312的编码,跟彩信头指定的编码格式不一样,所以手机就无法识别了。

发现问题之后,就开始解决,用“iconv”命令进行文件编码的转换。

使用的格式如下:

“iconv -f gb2312 -t utf-8 mms0.txt > mm0.txt”

也只是简单的应用。

-f后的参数是输入文件编码

-t后的参数是输出文件编码

mms0.txt是输入文件

mm0.txt是输出文件

 

三、附录

dd命令用法:

dd [选项]
if =输入文件(或设备名称)。
of =输出文件(或设备名称)。
ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。
skip = blocks 跳过读入缓冲区开头的ibs*blocks块。
obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。
bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。
cbs = byte 一次转换bytes字节。
count=blocks 只拷贝输入的blocks块。
conv = ASCII 把EBCDIC码转换为ASCIl码。
conv = ebcdic 把ASCIl码转换为EBCDIC码。
conv = ibm 把ASCIl码转换为alternate EBCDIC码。
conv = block 把变动位转换成固定字符。
conv = ublock 把固定位转换成变动位。
conv = ucase 把字母由小写转换为大写。
conv = lcase 把字母由大写转换为小写。
conv = notrunc 不截短输出文件。
conv = swab 交换每一对输入字节。
conv = noerror 出错时不停止处理。
conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。

 

iconv命令用法:

iconv [选项...] [文件...]
输入/输出格式规范:
-f, --from-code=原始文本编码
-t, --to-code=输出文本编码
信息:
-l, --list 列举所有已知的字符集
输出控制:
-c 从输出中忽略无效的字符
-o, --output=FILE 输出文件
-s, --silent 关闭警告
--verbose 打印进度信息
-?, --help 给出该系统求助列表
--usage 给出简要的用法信息
-V, --version 打印程序版本号

分享到:
评论

相关推荐

    Linux下批量生成指定大小的文件

    Linux下一个用于批量创建指定大小文件的jar包,直接调用,方便快捷,具体操作方法见我博客:https://blog.csdn.net/qq_32897143/article/details/80136300

    shell脚本,在分区阈值内生成指定大小文件

    脚本生成二进制白文件,脚本内配置生成单文件大小,生成文件夹中文件大小,文件夹名生成规则为递增。运行后手动输入生成地址与生成所需的文件大小。后期方便管理,可以通过删除单个文件,或者单个文件夹,做到细化...

    shell生成指定文件大小脚本

    脚本生成二进制白文件,脚本内配置生成单文件大小,生成文件夹中文件大小,文件夹名生成规则为递增。运行后手动输入生成地址与生成所需的文件大小。后期方便管理,可以通过删除单个文件,或者单个文件夹,做到细化...

    Vim编辑器的应用——Linux下如何利用touch命令创建固定内容的文件(Ubuntu)

    正常情况下,对于linux用户来说往往想创建包含固定内容的文件来编写脚本,以方便运维。 接下来就介绍一个脚本来方便Linux用户使用touch命令和vim编辑器。 流程 默认属性的设置 原vim编辑器界面如下: 利用cd命令...

    shell,在指定分区阈值内自动增删白文件

    脚本生成二进制白文件,脚本内配置生成单文件大小,生成文件夹中文件大小,文件夹名生成规则为递增。运行后手动输入生成地址与生成所需的文件大小。后期方便管理,可以通过删除单个文件,或者单个文件夹,做到细化...

    详解linux下nohup日志输出过大问题解决方案

    主要介绍了详解linux下nohup日志输出过大问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    linux储存大文件到FAT32

    filename: 指定要生成的文件的文件名,如果不指定,则默认为x 效果:把original_file分割成2G大小的filename01, filename02, filename03…… 实测不能直接分割为4G,因为还是会提示超过4G大小不让复制。 合并 cat fi

    C语言编写虚拟文件系统

    cd 目录名(路径名) 切换当前目录到指定目录 mkdir 目录名 在当前目录...(5) 假设每个文件的大小是用户创建时指定的,即空间分配采用与分配策略,文件大小应有上限(如6KB) (6) 该实验必须在Linux系统下进行

    Shell脚本创建指定大小文件的测试数据

    我们在测试或调试的时候,有时候会需要生成某个size的文件,比如在测试存储系统时,需要将磁盘剩余空间减少5G,最简单的办法就是拷贝一个5G的文件过来,但是从哪儿去弄这样大小的文件呢,或许你想到随便找一个文件,...

    批量获取linux服务器厂商/cpu/内存/磁盘/网卡等信息(适用于centos7系x86和arm架构)

    2、利用expect自动交付远程到服务器执行命令生成临时文件 3、取回临时文件,解析各项参数 =====192.168.195.130服务器信息 【硬件厂商】 VMware, Inc. VMware Virtu^^^^^ 【系统内核】 3.10.0-1160.el7.x86_64 ...

    linux教程——很使用的那种

    生成一个硬链接文件后查看原文件和硬链接文件,除了文件位置或文件名不同外,其余的信息都是相同的。硬链接文件和原文件是同时更新的,因为他们有相同的inode节点。索引节点inode:Linux为每个文件分配一个称为索引节点...

    linux tar命令详解

    其实这源于Linux中的非常多压缩程式只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得先借助另他的工具将这一大堆文件先打成一个包,然后再就原来的压缩程式进行压缩。  Linux下最常用的打包程式...

    《Linux应用技术》课程设计.docx

    (5)自动备份功能:要允许设置时间周期,需要备份的源文件目录,生成的归档文件要求是一个以日期时间命名的压缩文件。 (6)添加“文件管理”子菜单。其有3项功能:a. 统计某目录(由使用者指定)下有多少个文件,并...

    入门学习Linux常用必会60个命令实例详解doc/txt

    不过目前大多数较新的Linux发行版本(包括红旗 Linux、中软Linux、Mandrake Linux等)都可以自动挂装文件系统,但Red Hat Linux除外。 umount 1.作用 umount命令的作用是卸载一个文件系统,它的使用权限是超级...

    Linux服务器常用命令(简化版).docx

    默认值是953 6 -u<用户> 设置生成的rndc.key密钥文件的所有者 7 -r<随机文件> 指定用于生成授权随机数据源 8 -k<密钥名称> 指定rndc认证密钥的密钥名称 9 -a 自动rndc配置,创建密钥文件/etc/rndc.key Linux服务器...

    Linux文件操作常用命令整理

     · 查看、生成指定目录的目录树结构  [root@DB-Server ~]#tree #当前目录  [root@DB-Server ~]#tree /home/oracle/kerry  · 查看当前目录或指定目录的大小?  [root@DB-Server ~]#du -sh /u01  ...

    Linux 系统管理 命令

    df命令被广泛地用来生成文件系统的使用统计数据,它能显示系统中所有的文件系统的信息,包括总容量、可用的空闲空间、目前的安装点等。 超级权限用户使用df命令时会发现这样的情况:某个分区的容量超过了100%。这...

    cmd操作命令和linux命令大全收集

    copy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件 copy ipadmin$svv.exe c: 或:copyipadmin$*.* 复制...

    pdf2htmlEX-0.14.6.tar.gz-Linux版本

    用户可以指定输出文件的名称、页面大小、分辨率、颜色模式等参数。此外,还可以设置是否导出图片、文字的字体、字号、字间距等样式,以及是否生成目录和书签等功能。 使用pdf2htmlEX,用户可以将PDF文件转换为HTML...

Global site tag (gtag.js) - Google Analytics