Trabalhando com / dev / null com cat ou cp vs touch

1

Em um tutorial sobre a infraestrutura de chave pública , o autor configura um banco de dados para trabalhar ao definir uma Autoridade de Certificação Raiz :

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

Eu sei que /dev/null é um arquivo especial que não tem nada nele e não imprime onde você echo nele.

Parece que é isso que o autor está tentando fazer. Eu fiz um pequeno exemplo para testá-lo:

$ 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 temos um diretório vazio, há alguma diferença entre os arquivos foo , bar ou baz ?
  • O ponto de cp ing de /dev/null é apenas configurar um arquivo que sabemos que está vazio?
por mbigras 14.04.2017 / 23:37

2 respostas

1

Tudo resulta no mesmo arquivo vazio.

Pode até usar apenas >baz2 . Um pouco mais elegante na minha opinião, já que não é dependente de /dev/null estar presente, e não envolve invocar comandos / processos adicionais.

Tenha em mente que, diferentemente de touch , o resultado de >baz2 será um arquivo vazio, mesmo que baz2 já exista e tenha algum conteúdo.

$ 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
$
    
por 14.04.2017 / 23:42
1

A diferença está no que acontece se o arquivo já existir e tiver conteúdo:

Por exemplo, aqui está um arquivo com conteúdo:

$ 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 o comando touch não esvaziou o arquivo, mas o cp o fez.

Agora, normalmente, o comando : pode ser usado:

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

por exemplo

$ 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

No entanto, em notas de treinamento e trabalho de curso, isso pode ser mais difícil de ler, considerado um erro de digitação ou similar. Às vezes, usar uma string de comando mais longa é melhor: -)

    
por 15.04.2017 / 00:10