在關於的教程中公鑰基礎設施作者設定了一個資料庫,以便在設定時使用根證書頒發機構:
cp /dev/null ca/root-ca/db/root-ca.db
cp /dev/null ca/root-ca/db/root-ca.db.attr
echo 01 > ca/root-ca/db/root-ca.crt.srl
echo 01 > ca/root-ca/db/root-ca.crl.srl
我知道/dev/null
這是一個特殊的文件,裡面什麼都沒有,如果你echo
進入它,也不會在任何地方打印。
看來這就是作者想要做的,所以我做了一個小例子來測試它:
$ ls
$ touch foo
$ cp /dev/null bar
$ cat /dev/null > baz
$ ls
bar baz foo
$ ls -l
total 0
-rw-r--r-- 1 mbigras 1264914557 0 Apr 14 14:35 bar
-rw-r--r-- 1 mbigras 1264914557 0 Apr 14 14:35 baz
-rw-r--r-- 1 mbigras 1264914557 0 Apr 14 14:35 foo
- 假設我們有一個空目錄,檔案
foo
、bar
或之間有什麼差別嗎baz
? cp
ing from 的意義/dev/null
只是為了建立一個我們知道是空的檔案嗎?
答案1
所有結果都會產生相同的空白文件。
甚至可以只用>baz2
.我認為更優雅一點,因為它不依賴/dev/null
存在,並且不涉及調用額外的命令/進程。
請記住,與 不同的是,即使文件已經存在並且具有一些內容,touch
結果也將是一個空文件。>baz2
baz2
$ touch foo
$ cp /dev/null bar
$ cat /dev/null >baz
$ >baz2
$ ls -l
total 0
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:40 bar
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:40 baz
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:40 baz2
-rw-rw-r-- 1 ec2-user ec2-user 0 Apr 14 21:39 foo
$
答案2
區別在於如果文件已經存在並且有內容會發生什麼:
例如,這是一個包含內容的文件:
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 6 Apr 14 18:06 ca/root-ca/db/root-ca.db
$ touch ca/root-ca/db/root-ca.db
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 6 Apr 14 18:06 ca/root-ca/db/root-ca.db
$ cp /dev/null ca/root-ca/db/root-ca.db
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 0 Apr 14 18:06 ca/root-ca/db/root-ca.db
我們可以看到該touch
指令並沒有清空文件,而是cp
清空了文件。
現在,通常:
可以使用該命令:
: > ca/root-ca/db/root-ca.db
例如
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 6 Apr 14 18:08 ca/root-ca/db/root-ca.db
$ : > ca/root-ca/db/root-ca.db
$ ls -l ca/root-ca/db/root-ca.db
-rw-r--r-- 1 sweh sweh 0 Apr 14 18:08 ca/root-ca/db/root-ca.db
然而,在培訓筆記和課程作業中,這可能更難閱讀,被認為是拼字錯誤或類似情況。有時使用更長的命令字串更好:-)