Почему движущиеся каталоги к опасному/dev/null?

При попытке переместить a test_dir каталог к /dev/null, Я получаю сообщение

mv: cannot overwrite non-directory ‘/dev/null’ with directory ‘test_dir/’

Затем, почему люди говорят, "Не выполняют команду sudo mv ~ /dev/null, это переместит Ваш корневой каталог в дыру?"

Ссылка

Но /home также каталог.

30
задан 5 May 2014 в 07:17

4 ответа

Поскольку люди принимают. Я был одним из тех людей , пока я не протестировал его . Легко понять, почему люди принимают... Это взгляды опасный...

..., но Вы не можете на самом деле переместить вещи в /dev/null —, Это - специальный файл, который просто поглощает перенаправления (и отправляет их в небытие). При попытке переместить каталог в него, файловая система будет verbosely взрываться в Вашей поверхности и при попытке переместить файл в него, Вы, вероятно, закончите тем, что заменили его.

первая ссылка будет иметь дело с каталогами, но здесь является отдельным тестом только для перезаписи ее с файлом. Как Rmano указывает в комментариях, это - вероятно, что-то, что Вы не должны обходиться без взрослого контроля. Существует включенный риск.

$ echo "this is my file" > test
$ cat test
this is my file

$ sudo mv test /dev/null
$ cat /dev/null
this is my file

# Fix this!
$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3
38
ответ дан 23 November 2019 в 01:02

Все отправленное в /dev/null тихо отбрасывается. Если Вы вводите:

echo "Hello World"

Вы добираетесь Hello World на экране. Если Вы вводите:

echo "Hello World" >/dev/null

Вы ничего не получаете на экране.

, Но в случае команды перемещения, попытки команды mv заменить файл/dev/null каталогом, что не возможно. Поскольку все - файл в Linux,/dev/null является файлом. Специальный, конечно (файл устройств), специальная часть доступа разрешения файла аппаратных средств (как диски, разделы, звуковые карты, последовательные порты...). В случае/dev/null это не связано ни с какой частью аппаратных средств, таким образом, данные, отправленные в него, тихо отбрасываются. Поэтому "они", возможно, назвали его черной дырой.

7
ответ дан 23 November 2019 в 01:02

/dev/null просто файл, это - файл "специального символа", но это не менее тихое, связанное правилами, что файлы должны следовать. Это сказанное Вы никогда не могли выполнять эту команду:

$ mv ~ /dev/null

mv команда не позволит это, так как Вы перемещаете каталог в файл, который просто не имеет смысла контекстуально и mv знает это.

Пример

$ mkdir dir
$ touch afile
$ mv dir afile
mv: cannot overwrite non-directory ‘afile’ with directory ‘dir’

Вы не можете скопировать на /dev/null также, учитывая он - символьный файл, при попытке скопировать регулярный файл на него.

$ cp ~/bzip2_1.0.6-4_amd64.deb /dev/null
$ ls -l |grep null
crw-rw-rw-  1 root root        1,   3 Mar 16 14:25 null

О единственной вещи можно сделать в этот файл, копия mv по нему другой файл или удаляют его.

$ mv /path/to/afile /dev/null

После этой команды, /dev/null регулярный файл. Самый опасный эффект этого изменения - это /dev/null как предполагается, никогда не производит любые данные, таким образом, много сценариев оболочки примут это

`... < /dev/null` 

эквивалентно "ничего" для высказывания. Повреждение этого предположения может привести к случайным данным (хорошо, данные, которые последний процесс записал в '/dev/null') вставленный в системные файлы все вокруг системы---, который мог привести к крайне поврежденной и неисправимой системе.

18
ответ дан 23 November 2019 в 01:02

Можно записать файлы или другие входные потоки к /dev/null но не каталоги. При попытке переместить каталог в /dev/null это сообщило бы об ошибке с тех пор /dev/null не каталог, а файл.

Однако, так как Вы хотите экспериментировать с /dev/null, Вам сначала предлагают знать, что последствия для перемещения файла перезаписывают /dev/null и как восстановиться с той ситуации:

Как предложено @Rmano в этом ответе на тот вопрос, для экспериментирования с /dev/null мы должны скорее создать копию его и затем сделать наше экспериментирование. Так, давайте создадим /tmp/null и используйте его в наших целях экспериментирования:

sudo mknod -m 0666 /tmp/null c 1 3

Теперь вперед, /tmp/null наш /dev/null во всех целях:

Давайте создадим a test_file и a test_dir в названном каталоге ask_ubuntu.

$ mkdir ask_ubuntu
$ cd ask_ubuntu
$ touch test_file
$ mkdir test_dir
$ echo "Let us test if we can recover our test_file." > test_file

Следующие шоу содержание ask_ubuntu каталог:

$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:10 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir
-rw-r--r-- 1 aditya aditya    0 Mar 18 17:10 test_file

Теперь попытайтесь переместить наш test_file кому: /tmp/null и посмотрите содержание ask_ubuntu:

$ sudo mv test_file /tmp/null   # This succeeds
$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:12 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir

Команда успешно выполняется и test_file больше не доступно. Теперь попытайтесь переместиться test_dir кому: /tmp/null который не успешно выполняется:

$ sudo mv test_dir/ /tmp/null 
mv: cannot overwrite non-directory ‘/tmp/null’ with directory ‘test_dir/’

test_dir все еще присутствует внутри ask_ubuntu:

$ ls -la
total 12
drwxr-xr-x 3 aditya aditya 4096 Mar 18 17:12 .
drwxr-xr-x 4 aditya aditya 4096 Mar 18 17:10 ..
drwxr-xr-x 2 aditya aditya 4096 Mar 18 17:10 test_dir

Теперь, давайте фигурировать, можем ли мы восстановить наш test_file от /tmp/null:

$ cat /tmp/null
Let us test if we can recover our test_file.

Так, это все еще там и /tmp/null то, которое было специальным файлом, было перезаписано, и это стало как любой другой нормальный файл. Мы можем восстановить наш файл путем копирования /tmp/null точно так же, как любой другой файл:

$ cp /tmp/null our_test_file
$ cat our_test_file
Let us test if we can recover our test_file.

Файл восстанавливается.

Примечание:

Если Вы не создали /tmp/null и попробованный те команды непосредственно с помощью /dev/null; удостоверьтесь, что Вы восстанавливаете файл (если Вам нужно к) путем выполнения cp /dev/null our_test_file; и восстановление /dev/null в целях это существует в нашей системе путем выполнения следующих команд, как дали в связанном вопросе как можно скорее:

$ sudo rm /dev/null
$ sudo mknod /dev/null c 1 3
$ sudo chmod 666 /dev/null

Заключение:

  • Так, невозможно переместить каталог в /dev/null и следовательно нет никакого вопроса восстановления каталога оттуда.

  • Что касается файлов, если Вы непосредственно перемещаете файлы в /dev/null, можно все еще восстановить его, как продемонстрировано выше. Однако существует два исключения:

    1. В течение периода Вы работаете sudo mv test_file /dev/null и cp /dev/null our_test_file, если какой-либо корневой сценарий в системе перезаписывает его путем выполнения echo "Whatever text the root script wants to send to /dev/null" > /dev/null (или другие подобные команды). Затем у нас нет простого способа восстановить наш файл.

    2. Если Вы перезагружаете систему между выполнением тех двух команд. /dev/null воссоздается при начальной загрузке, таким образом, наш файл теряется, когда мы закрываем компьютер.

  • Но если Вы хотите восстановить входные потоки как echo "Stream this line to /dev/null" > /dev/null, Вы не можете восстановить это с тех пор /dev/null специальный файл должен расположить от нежелательных файлов и ввести потоки и как статья Wikipedia упоминает, она не предоставляет данных процессу, который читает из нее.


Ссылка: статья Википедии о /dev/null

13
ответ дан 23 November 2019 в 01:02

Другие вопросы по тегам:

Похожие вопросы: