Linux系统中有关/dev/null和/dev/zero文件说明及实践

简介:

 Linux系统中有关/dev/null/dev/zero文件说明

 请解释Linux/dev/null/dev/zero两个文件的作用和区别。

在类Unix操作系统中,设备节点并不一定要对应物理设备。没有这种对应关系的设备被称之为伪设备。操作系统运用了它们实现多种多样的功能,/dev/null/dev/zero就是这样的设备,类似的还有/dev/urandom/dev/tty等。

先检查下/dev/null/dev/zero两个文件的属性:

[root@oldboy ~]# ls -l /dev/null /dev/zero

crw-rw-rw-. 1 root root 1, 3Jul 15 00:11 /dev/null

crw-rw-rw-. 1 root root 1, 5Jul 15 00:11 /dev/zero

提示:从文件属性可以看出这两个文件都是字符设备文件。

1/dev/null

1/dev/null介绍

    大家都知道宇宙中太阳黑洞吧,所有的天体(含地球)一旦进入了太阳黑洞都会消失的无影无踪。这里的/dev/null就是Linux系统中的"黑洞"

在类Unix系统中,/dev/null(空设备文件或黑洞文件)是一个特殊的设备文件,所有写入其中的数据,都会被丢弃的无影无踪,/dev/null通常被用于丢弃不需要的数据输出,或作为用于输入流的空文件。这些操作通常由重定向完成。
2/dev/null实践

范例1-1:清空文件。

[root@oldboy ~]# cp /etc/hosts{,.ori}     #<==备份。

[root@oldboy ~]# cat /dev/null>/etc/hosts  #<==将读取黑洞设备写入到/etc/hosts,表示清空hosts文件。

[root@oldboy ~]# cat /etc/hosts           #<==果然没了。使用上述备份恢复回来。

范例1-2:将无用的输出流写入到黑洞丢弃。

当取一个地址响应头的第一行时,加上管道就会出现下面的特殊结果:

[root@oldboy ~]# curl -I www.oldboyedu.com|head -1

  % Total   % Received % Xferd  AverageSpeed   Time    Time    Time  Current

                                 Dload  Upload  Total   Spent    Left Speed

  0    0    0     0   0     0      0     0 --:--:-- --:--:-- --:--:--     0

HTTP/1.1 200 OK

执行上述命令时,会凭空多出来的几行无用信息,此时就可以使用将错误信息定向到黑洞(2>/dev/null)的方式丢弃无用信息。

[root@oldboy ~]# curl -I www.oldboyedu.com 2>/dev/null|head -1 #<==将错误信息定向到黑洞。

HTTP/1.1 200 OK

当然了curl命令也提供了实现参数,这里暂且不多表。

[root@oldboy ~]# curl -I -s www.oldboyedu.com|head-1

HTTP/1.1 200 OK

范例1-3:将定时任务脚本结尾加上>/dev/null 2>&1

在书写定时任务总,规范的写法就是将所有定时任务脚本结尾加上>/dev/null 2>&1,让所有的输出流(包括错误的和正确的)都定向到空设备丢弃。

[root@oldboy ~]# crontab -l

#time sync by oldboy at2010-2-1

*/5 * * * * /usr/sbin/ntpdatetime.windows.com >/dev/null 2>&1

#bak all db

00 01 * * * /bin/sh/server/scripts/mysqlbak.sh >/dev/null 2>&1

2/dev/zero

1 /dev/zero介绍

/dev/null类似,/dev/zero也是一个特殊的字符设备文件,当我们使用或读取它的时候,它会提供无限连续不断的空的数据流(特殊的数据格式流)

/dev/zero文件的常见应用场景有二:

a./dev/zero文件覆盖其他文件信息。

b.产生指定大小的空文件,例如:交换文件、模拟虚拟文件系统等。

2/dev/zero实践

范例1-5:产生指定大小的空文件。

[root@oldboy ~]# dd if=/dev/zero of=test.data bs=1M count=2  #<==生成块大小1M,含有2个块的文件。

2+0 records in

2+0 records out

2097152 bytes (2.1 MB) copied,0.00279345 s, 751 MB/s

[root@oldboy ~]# ls -lhtest.data

-rw-r--r--. 1 root root 2.0MJul 15 20:20 test.data  #<==一共2M大小。

[root@oldboy ~]# file test.data

test.data: data  #<==特殊的数据文件格式。

提示:在使用dd命令产生空文件时常用/dev/zero作为字符流的源。

范例1-4:利用/dev/zero文件覆盖其他文件信息

[root@oldboy ~]# echo oldboy>new.txt  #<==生成一个新文件写入oldboy字符串。

[root@oldboy ~]# dd if=/dev/zero of=new.txt bs=1M count=10  #<==用空的字符流覆盖存在的new.txt文件。

10+0 records in

10+0 records out

10485760 bytes (10 MB) copied,0.0475368 s, 221 MB/s

[root@oldboy ~]# cat new.txt  #<==数据丢失了。














本文转自liujing0751CTO博客,原文链接:http://blog.51cto.com/13281352/1981524 ,如需转载请自行联系原作者




相关文章
|
6月前
|
Linux 开发工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
|
4月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
704 13
|
6月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
2126 57
|
5月前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
185 16
|
6月前
|
Linux
【Linux】 Linux文件I/O常见操作技巧
以上就是Linux文件I/O操作的一些技巧,接纳它们,让它们成为你在Linux世界中的得力伙伴,工作会变得轻松许多。不过记住,技巧的运用也需要根据实际情况灵活掌握,毕竟,最适合的才是最好的。
202 28
|
5月前
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
102 4
|
6月前
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
880 12
|
5月前
|
Linux
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename &#39;s/2023/2024/&#39; *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之从MySQL同步数据到Doris时,历史数据时间字段显示为null,而增量数据部分的时间类型字段正常显示的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 关系型数据库 MySQL
python在mysql中插入或者更新null空值
这段代码是Python操作MySQL数据库的示例。它执行SQL查询从表`a_kuakao_school`中选取`id`,`university_id`和`grade`,当`university_id`大于0时按升序排列。然后遍历结果,根据`row[4]`的值决定`grade`是否为`NULL`。若不为空,`grade`被格式化为字符串;否则,设为`NULL`。接着构造UPDATE语句更新`university`表中对应`id`的`grade`值,并提交事务。重要的是,字符串`NULL`不应加引号,否则更新会失败。
340 2

热门文章

最新文章