Trabajando con /dev/null con cat o cp vs touch

Trabajando con /dev/null con cat o cp vs touch

En un tutorial sobreInfraestructura de Clave Públicael autor configura una base de datos para trabajar al configurar unAutoridad de certificación raíz:

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

Sé que /dev/nulles un archivo especial que no contiene nada y no se imprime en ningún lugar si echolo ingresas.

Parece que eso es lo que el autor intenta hacer, así que hice un pequeño ejemplo para probarlo:

$ 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
  • Dado que tenemos un directorio vacío, ¿hay alguna diferencia entre los archivos foo, baro baz?
  • ¿El objetivo de cping es /dev/nullsimplemente configurar un archivo que sabemos que está vacío?

Respuesta1

Todos dan como resultado el mismo archivo vacío.

Incluso podría usarlo >baz2. Un poco más elegante en mi opinión, ya que no depende de /dev/nullestar presente y no implica invocar comandos/procesos adicionales.

Tenga en cuenta que, a diferencia de touch, el resultado >baz2será un archivo vacío incluso si baz2ya existe y tiene algún contenido.

$ 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
$

Respuesta2

La diferencia está en lo que sucede si el archivo ya existe y tiene contenido:

Por ejemplo, aquí hay un archivo con contenido:

$ 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

Podemos ver que el touchcomando no vació el archivo, pero lo cphizo.

Ahora, normalmente, :se puede utilizar el comando en su lugar:

: > ca/root-ca/db/root-ca.db

p.ej

$ 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

Sin embargo, en las notas de capacitación y en el trabajo del curso, esto puede ser más difícil de leer, pensar que es un error tipográfico o algo similar. A veces es mejor usar una cadena de comando más larga :-)

información relacionada