在关于的教程中公钥基础设施作者设置了一个数据库,以便在设置时使用根证书颁发机构:
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
然而,在培训笔记和课程作业中,这可能更难阅读,被认为是拼写错误或类似情况。有时使用更长的命令字符串更好:-)