日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dd , /dev/zero和/dev/null

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dd , /dev/zero和/dev/null 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

dd 命令

功能:把指定的輸入文件拷貝到指定的輸出文件中,并且在拷貝過程中可以進行格式轉換。可以用該命令實現 DOS 下的 diskcopy 命令的作用。先用 dd 命令把軟盤上的數據寫成硬盤的一個寄存文件,再把這個寄存文件寫入第二張軟盤上,完成 diskcopy 的功能。需要注意的是,應該將硬盤上的寄存文件用 rm 命令刪除掉。系統默認使用標準輸入文件和標準輸出文件。

語法: 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 填充)。

?

?

使用/dev/null

把/dev/null 看作"黑洞" . 它非常等價于一個只寫文件. 所有寫入它的內容都會永遠丟失. 而嘗試從它那兒讀取內容則什么也讀不到. 然而, /dev/null 對命令行和腳本都非常的有用.

禁止標準輸出

禁止標準輸出 .

1?cat $filename >/dev/null

2?# 文件內容丟失,而不會輸出到標準輸出.

禁止標準錯誤 (來自例子 12-3 ).

1?rm $badname 2>/dev/null

2?# 這樣錯誤信息[標準錯誤]就被丟到太平洋去了.

禁止標準輸出和標準錯誤的輸出.

1?cat $filename 2>/dev/null >/dev/null

2?# 如果"$filename"不存在,將不會有任何錯誤信息提示.

3?# 如果"$filename"存在, 文件的內容不會打印到標準輸出.

4?# 因此Therefore, 上面的代碼根本不會輸出任何信息.

5?#

6?# 當只想測試命令的退出碼而不想有任何輸出時非常有用。

7?#

8?#

9?# cat $filename &>/dev/null

10?# 也可以, 由 Baris Cicek 指出.

Deleting contents of a file, but preserving the file itself, with all attendant permissions (from Example 2-1 and Example 2-3 ):

1?cat /dev/null > /var/log/messages

2?# : > /var/log/messages 有同樣的效果, 但不會產生新的進程.(因為:是內建的)

3?

4?cat /dev/null > /var/log/wtmp

自動清空日志文件的內容 (特別適合處理這些由商業Web站點發送的討厭的"cookies" ):


例子 28-1. 隱藏cookie而不再使用

1?if [ -f ~/.netscape/cookies ] # 如果存在則刪除.

2?then

3? rm -f ~/.netscape/cookies

4?fi

5?

6?ln -s /dev/null ~/.netscape/cookies

7?# 現在所有的cookies都會丟入黑洞而不會保存在磁盤上了.

使用/dev/zero

像/dev/null 一樣, /dev/zero也是一個偽文件 , 但它實際上產生連續不斷的null的流(二進制的零流,而不是ASCII型的). 寫入它的輸出會丟失不見, 而從/dev/zero 讀出一連串的null也比較困難, 雖然這也能通過od 或一個十六進制編輯器來做到. /dev/zero 主要的用處是用來創建一個指定長度用于初始化的空文件,就像臨時交換文件.

例子 28-2. 用/dev/zero創建一個交換臨時文件

1?#!/bin/bash

2?# 創建一個交換文件.

3?

4?ROOT_UID=0 # Root 用戶的 $UID 是 0.

5?E_WRONG_USER=65 # 不是 root?

6?

7?FILE=/swap

8?BLOCKSIZE=1024

9?MINBLOCKS=40

10?SUCCESS=0

11?

12?

13?# 這個腳本必須用root來運行.

14?if [ "$UID" -ne "$ROOT_UID" ]

15?then

16? echo; echo "You must be root to run this script."; echo

17? exit $E_WRONG_USER

18?fi

19?

20?

21?blocks=${1:-$MINBLOCKS} # 如果命令行沒有指定,1為shell中的位置參量,
#${ Parameter :- Word }如果設置了 Parameter 參數并且不為空,則替換其值;否則,替換 Word 參數的值。

22? #+ 則設置為默認的40塊.

23?# 上面這句等同如:

24?# --------------------------------------------------

25?# if [ -n "$1" ]

26?# then

27?# blocks=$1

28?# else

29?# blocks=$MINBLOCKS

30?# fi

31?# --------------------------------------------------

32?

33?

34?if [ "$blocks" -lt $MINBLOCKS ]

35?then

36? blocks=$MINBLOCKS # 最少要有 40 個塊長.

37?fi

38?

39?

40?echo "Creating swap file of size $blocks blocks (KB)."

41?dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks # 把零寫入文件.

42?

43?mkswap $FILE $blocks # 將此文件建為交換文件(或稱交換分區).

44?swapon $FILE # 激活交換文件.

45?

46?echo "Swap file created and activated."

47?

48?exit $SUCCESS

關于 /dev/zero 的另一個應用是為特定的目的而用零去填充一個指定大小的文件, 如掛載一個文件系統到環回設備 (loopback device) (參考例子 13-8 ) 或"安全地" 刪除一個文件(參考例子 12-55 ).


例子 28-3. 創建ramdisk

1?#!/bin/bash

2?# ramdisk.sh

3?

4?# "ramdisk"是系統RAM內存的一段,

5?#+ 它可以被當成是一個文件系統來操作.

6?# 它的優點是存取速度非常快 (包括讀和寫).

7?# 缺點: 易失性, 當計算機重啟或關機時會丟失數據.

8?#+ 會減少系統可用的RAM.

9?#

10?# 那么ramdisk有什么作用呢?

11?# 保存一個較大的數據集在ramdisk, 比如一張表或字典,

12?#+ 這樣可以加速數據查詢, 因為在內存里查找比在磁盤里查找快得多.

13?

14?

15?E_NON_ROOT_USER=70 # 必須用root來運行.

16?ROOTUSER_NAME=root

17?

18?MOUNTPT=/mnt/ramdisk

19?SIZE=2000 # 2K 個塊 (可以合適的做修改)

20?BLOCKSIZE=1024 # 每塊有1K (1024 byte) 的大小

21?DEVICE=/dev/ram0 # 第一個 ram 設備

22?

23?username=`id -nu`

24?if [ "$username" != "$ROOTUSER_NAME" ]

25?then

26? echo "Must be root to run \"`basename $0`\"."

27? exit $E_NON_ROOT_USER

28?fi

29?

30?if [ ! -d "$MOUNTPT" ] # 測試掛載點是否已經存在了,

31?then #+ 如果這個腳本已經運行了好幾次了就不會再建這個目錄了

32? mkdir $MOUNTPT #+ 因為前面已經建立了.

33?fi

34?

35?dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # 把RAM設備的內容用零填充.

36? # 為何需要這么做?

37?mke2fs $DEVICE # 在RAM設備上創建一個ext2文件系統.

38?mount $DEVICE $MOUNTPT # 掛載設備.

39?chmod 777 $MOUNTPT # 使普通用戶也可以存取這個ramdisk.

40? # 但是, 只能由root來缷載它.

41?

42?echo "\"$MOUNTPT\" now available for use."

43?# 現在 ramdisk 即使普通用戶也可以用來存取文件了.

44?

45?# 注意, ramdisk是易失的, 所以當計算機系統重啟或關機時ramdisk里的內容會消失.

46?#

47?# 拷貝所有你想保存文件到一個常規的磁盤目錄下.

48?

49?# 重啟之后, 運行這個腳本再次建立起一個 ramdisk.

50?# 僅重新加載 /mnt/ramdisk 而沒有其他的步驟將不會正確工作.

51?

52?# 如果加以改進, 這個腳本可以放在 /etc/rc.d/rc.local,

53?#+ 以使系統啟動時能自動設立一個ramdisk.

54?# 這樣很合適速度要求高的數據庫服務器.

55

56?exit 0

最后值得一提的是, ELF二進制文件利用了/dev/zero .

轉載于:https://www.cnblogs.com/mssql/archive/2011/05/24/tt149.html

總結

以上是生活随笔為你收集整理的dd , /dev/zero和/dev/null的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。