cat または cp と touch で /dev/null を操作する

cat または cp と touch で /dev/null を操作する

チュートリアルでは公開鍵インフラストラクチャ著者は、セットアップ時に作業するためのデータベースを設定します。ルート証明機関:

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
  • 空のディレクトリがある場合、ファイルfoobar、 の間に違いはありますかbaz?
  • 空だとわかっているファイルをセットアップするためだけにcp、 ing を実行する意味はありますか?/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

ただし、トレーニング ノートやコース ワークでは、読みにくくなり、タイプミスなどと思われる可能性があります。長いコマンド文字列を使用する方がよい場合もあります :-)

関連情報