В руководстве оинфраструктура открытого ключаавтор создает базу данных для работы при настройкеКорневой центр сертификации:
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/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
Однако в учебных заметках и курсовых работах это может быть труднее читать, считаться опечаткой или чем-то подобным. Иногда лучше использовать более длинную командную строку :-)