1. 程式人生 > >Linux中/dev/null和/dev/zero兩個檔案的作用和區別

Linux中/dev/null和/dev/zero兩個檔案的作用和區別

開發十年,就只剩下這套架構體系了! >>>   

我們在rhce課程中,多處遇到/dev/null,/dev/zero, 比如

find / -name passwd 2>/dev/null

sha1sum /dev/zero &

,那麼,這兩者到底是什麼意思呢?

我引用了網上的資料,或許對大家有用.

 

 

在類Unix作業系統中,裝置節點並不一定要對應物理裝置。沒有這種對應關係的裝置被稱之為偽裝置。作業系統運用了它們實現多種多樣的功能,/dev/null和/dev/zero就是這樣的裝置,類似的還有/dev/urandom、/dev/tty等。

先檢查下/dev/null和/dev/zero兩個檔案的屬性:

[root@dbserver ~]# 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@dbserver ~]# cp/etc/hosts{,.ori} #<==備份。

[root@dbserver ~]# cat /dev/null>/etc/hosts #<==將讀取黑洞裝置寫入到/etc/hosts,表示清空hosts檔案。

[root@dbserver ~]# cat/etc/hosts #<==果然沒了。使用上述備份恢復回來。

範例1-2:將無用的輸出流寫入到黑洞丟棄。

當取一個地址響應頭的第一行時,加上管道就會出現下面的特殊結果:

[root@dbserver ~]# curl -Iwww.cqsztech.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@dbserver ~]# curl -Iwww.cqsztech.com 2>/dev/null|head -1 #<==將錯誤資訊定向到黑洞。

HTTP/1.1 200 OK

當然了curl命令也提供了實現引數,這裡暫且不多表。

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

HTTP/1.1 200 OK

範例1-3:將定時任務指令碼結尾加上>/dev/null 2>&1

在書寫定時任務總,規範的寫法就是將所有定時任務指令碼結尾加上>/dev/null 2>&1,讓所有的輸出流(包括錯誤的和正確的)都定向到空裝置丟棄。

[root@dbserver ~]# crontab -l

#time sync by sztech 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@dbserver ~]# dd if=/dev/zeroof=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@dbserver ~]# ls -lhtest.data

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

[root@dbserver ~]# filetest.data

test.data: data #<==特殊的資料檔案格式。

提示:在使用dd命令產生空檔案時常用/dev/zero作為字元流的源。

範例1-4:利用/dev/zero檔案覆蓋其他檔案資訊

[root@dbserver ~]# echo sztech>new.txt #<==生成一個新檔案寫入sztech字串。

[root@dbserver ~]# 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@dbserver ~]# cat new.txt #<==資料丟失了。

相關推薦

Linux/dev/null/dev/zero檔案作用區別

開發十年,就只剩下這套架構體系了! >>>   

vsftpd關於ftpusersuser list檔案的說明以及vsftpd conf的userlist en

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

LINUX Shell 下求檔案交集差集的辦法

轉載自https://blog.csdn.net/autofei/article/details/6579320 假設兩個檔案FILE1和FILE2用集合A和B表示,FILE1內容如下: a b c e d a FILE2內容如下:  c d

MySQL 處理 Null 時要注意陷阱

MySQL資料庫是一個基於結構化資料的開源資料庫。SQL語句是MySQL資料庫中核心語言。不過在MySQL資料庫中執行SQL語句,需要小心兩個陷阱。 陷阱一:空值不一定為空 空值是一個比較特殊的欄位。在MySQL資料庫中,在不同的情形下,空值往往代表不同的含義。這是M

利用linux命令sortuniq求檔案的交集並集補集

給定兩個檔案 a.txt 和 b.txt ,每行是一個記錄(假設沒有重複),要求輸出兩集合的交集、並集、差集,輸出的結果只包括唯一項。交集定義為同時出現在兩個檔案中的記錄項,並集定義為出現在任何一個檔案中的記錄項,差集(A-B)定義為出現在A中而且不出現在B中的記錄,對稱

SAP BOPFESF2這框架有什麼區別

SAP社群上有這樣一個討論帖子: BOPF和ESF2 的區別? https://archive.sap.com/discussions/thread/3602400 BOPF全稱: 可以看下這位SAP員工的回覆: Hi Florian, Indranil expl

Java:定義五函式,分別實現①計算陣列的最大值MAX②最小值MIN③陣列SUM④拼接陣列ab⑤擷取a陣列的一部分

import java.io.IOException; public class Arr8{ //1.計算陣列中最大值 public static int arrayMaxElement(int [] data){ if(data == null){

Linux目錄proc/net/dev詳解

在Linux系統中,系統呼叫是作業系統提供給應用程式使用作業系統服務的重要介面,但同時也正是通過系統呼叫機制,作業系統遮蔽了使用者直接訪問系統核心的可能性。幸運的是Linux提供了LKM機制可以使我們在核心空間工作,在LKM機制中一個重要的組成部分就是proc偽檔案系統,它為使用者提供了動態操作Li

Shell的>/dev/null 2>&1 與 2>&1 >/dev/null 與&>/dev/null區別

預設情況下,總是有三個檔案處於開啟狀態,標準輸入(鍵盤輸入)、標準輸出(輸出到螢幕)、標準錯誤(也是輸出到螢幕),它們分別對應的檔案描述符是0,1,2 。那麼我們來看看下面的幾種重定向方法的區別: >/dev/null 2>&1  //  實際上,應該等

Linux目錄proc/net/dev詳解【轉】

版權 min com 訪問 his 緩沖 適配 ack admin 轉自:https://blog.csdn.net/yzy1103203312/article/details/77848192 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 h

BLE LL層 DataHeader NESNSN這BIT的作用

是否 image blog 技術 是不是 流控 master ron 發包 在BLE包中,沒有發現幀號,但有NESN和SN用於區分是否新包,也可用於重傳。在Core4.2 V6-B-4.5.9 中有描述 可理解為: Master只更新SN Slave只更新N

JavaScript“0” -0+0

Coding spl comment nal inf exp lai 數值 other JavaScript中的兩個“0”(翻譯) 本文翻譯自JavaScript’s two zeros JavaScript has two zeros: ?0 and +0. Th

案例帶你看懂LayoutInflaterinflate方法參數參數的區別

tco rom net roi 異常 com 組成 @override 修改 版權聲明:本文為sang原創文章,轉載請註明出處。 目錄(?)[+] 關於inflate參數問題,我想很多人多多少少都了解一點,網上也有很多關於這方面介紹的文章,但是枯燥的理論或

輸入整數nm,從數列1,2,3,……n隨意取幾個數,使其等於m 轉載

輸出 -1 pri str spa private 組合 開始 () 題目:編程求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。 分析:分治的思想。可以把問題(m,n)拆分(m - n, n -1)和(m, n -

linuxFTP服務搭建詳解--2.家目錄禁錮黑白名單

ip 地址 問題 ges 添加 無法 sftp 分享圖片 deny ecb 操作環境 1 操作系統 : redhat 6.5 IP 地址 : 192.168.10.128 主機名 : zred2 操作系統:win 7 IP地址: 192.168.10

Unity使用C#遞迴輸出陣列1,2,3,5,8,...該陣列的生成規律是每一個數字是前數字的

一、實現思路:第一個數大於等於0,第二個數大於等於第一個數,最後指定一個需要輸出的最後一個數字(該數字用作最後輸出的界限) ①實現指令碼如下: /*** * Title:"XXX" 專案 * 主題:XXX * Description: * 功能:XXX * Date:2018 * Ver

Linux shell計算檔案的交集 並集差集

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

JavaScriptsetTimeout()setInterval()定時器的區別使用方法

兩者最直接的區別是: setTimeout()在載入後延遲指定時間去執行一次表示式,只是一次。 setInterval()它從載入後,每隔指定的時間就執行一次表示式 所以要讓一段程式碼, 某個函式以固定頻率重複執行應該使用setInterval()函式 如果讓一段程式碼, 某個函式在

C語言,實現整數mn的二進位制序列有多少不同的位

新手學程式設計,大佬寫的太高深,看看本人小白寫的,一起學習一起交流 #include <stdio.h> int main() { int m = 0; int n = 0; int i = 0; int count = 0; scanf("%d%d", &