`

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生成指定文件大小脚本

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

    linux生成core文件

    ### Linux生成Core文件详解 在Linux环境中,当一个程序出现异常终止时,系统可以自动生成一个称为core dump的文件,这个文件包含了程序崩溃时的内存快照和其他相关信息,这对于调试和诊断程序错误非常有帮助。 ###...

    文件生成工具,可生成大小、个数、内容随机的文件

    【文件生成工具】是一种实用程序,它允许用户创建指定大小和数量的文件,这些文件的内容是随机生成的字符串,而且确保在每个文件中都是唯一的。这个工具基于【Qt】框架和【C++】编程语言构建,它展示了这两种技术在...

    文件生成源代码

    描述中提到的功能包括指定文件的生成位置、设定文件大小以及批量生成文件,这涉及到文件操作的高级技巧和优化。下面我们将深入探讨这些知识点。 1. **文件操作**:在大多数编程语言中,如Python、Java、C#等,都有...

    jfreechart部署linux服务器生成图片乱码解决方案

    标题 "jfreechart部署在Linux服务器上生成图片乱码的解决方案" 涉及到的主要知识点是关于Java图形库JFreeChart在Linux环境中的使用,特别是解决中文字符乱码的问题。JFreeChart是一个广泛使用的开源Java库,它允许...

    文件生成器

    例如,如果需要生成一个文本文件,用户可以指定文件的大小(以字节、KB、MB或GB为单位),还可以设置文件中的文本内容,如随机字符、数字、特定字符串等。对于更复杂的文件类型,如图像或音频,工具可能会提供更高级...

    ubuntu-linux下程序崩溃生成coredump的方法.pdf

    完成上述步骤后,程序崩溃时将会在指定路径生成 core dump 文件,如:`1669735675-main.out-3209-209715200.core`。 #### 三、关闭 Apport Service 服务程序 在 Ubuntu 系统中,有一个名为 `apport.service` 的...

    SFTP定时扫描本地文件上传到Linux服务器

    2. **文件监控**:Java中可以使用`java.nio.file`包中的`WatchService`接口来监视文件系统的变化,当有新文件生成或文件状态改变时,触发相应的处理逻辑。 3. **批处理脚本**:`.bat`文件通常指的是Windows系统的...

    linux core文件生产设置与编码

    Linux操作系统提供了一种机制,当程序异常终止时,能够自动生成一个core文件。core文件是一个内存映像加上调试信息,通过分析它可以帮助开发者找到导致程序崩溃的准确位置。本文将详细介绍如何在Linux环境下设置core...

    linux下core文件调试方法

    core文件是Linux下非常有用的调试工具之一,通过合理地设置core文件的生成与命名规则,并结合使用GDB和其他辅助工具,我们可以有效地定位程序中的错误,解决复杂的问题。此外,掌握core文件的高级调试技巧,如多线程...

    编译ffmpeg生成的库文件,Android和Linux版本

    这个压缩包"compiled_ffmpeg4.2.2"包含了FFmpeg4.2.2版本编译生成的不同平台的库文件,具体包括了针对Linux系统的C/C++动态链接库和静态链接库,以及针对Android平台的.so库文件,分别适用于arm64-v8a和armeabi-v7a...

    Linux文件系统命令

    在Linux操作系统中,文件系统是管理和组织磁盘存储空间的核心机制。它负责为文件分配空间,维护文件的元数据(如文件名、大小、创建时间等),并提供访问和操作这些文件的接口。本篇文章将深入探讨Linux文件系统命令...

    Linux使用和生成库.docLinux使用和生成库.doc

    3. 使用`gcc testlib.o -lhello -o testlib`命令连接目标文件和库,生成可执行文件`testlib`。这里,`-lhello`表示链接`libhello`库。 4. 如果需要与静态库`libhello.a`连接,命令变为`gcc testlib.o -o testlib -WI...

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

    在示例代码中,`split`命令被用来按指定大小(例如65535000字节,约60MB)分割`nohup.out`,并按照特定格式(4位数字后缀,从0000开始)创建新文件,例如`log_20160610_0001`。这可以通过`cron`定时任务实现。 2. ...

    so文件生成与使用

    本文将详细介绍.so文件的生成过程以及如何在Android应用中使用它们。 首先,生成.so文件需要通过NDK的交叉编译环境。你需要配置好Android NDK的路径,并设置相应的编译工具链,如arm-linux-androideabi-gcc或clang...

Global site tag (gtag.js) - Google Analytics