Intereting Posts
Система зависает во время автоматического завершения Bash с помощью Tab или Ctrl + R Как восстановить / загрузиться на зашифрованном жестком диске LUKS? Есть ли драйверы ubuntu для адаптера Dell DA100? Попытка двойной загрузки Ubuntu 14.10 с Windows 10, последняя не обнаружена Как полностью удалить ldap и удалить дерево каталогов Внезапная проблема при обновлении Не удается запустить Ubuntu с USB-накопителя окна 10 на SSD и ubuntu на hdd Как установить Archiva в качестве пакета (apt-get)? Как подключиться к серверу с помощью thunar в Xubuntu? В чем разница между драйвером, который поставляется с драйвером Ubuntu и Intel с открытым исходным кодом? Как добавить пользовательскую форму в начале командной строки терминала? Libreoffice 4.1 не интегрирован в пусковую установку должным образом Что заставило «smbd» перестать работать при загрузке? Что я могу сделать с отсутствием libgdk_pixbuf-2.0.la?

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

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

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

Тогда почему люди говорят: «Не запускайте команду sudo mv ~ /dev/null , она переместит ваш домашний каталог в отверстие?»

Ссылка

Но /home также является каталогом.

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

… но вы не можете переместить вещи в /dev/null – это специальный файл, который просто поглощает перенаправления (и отправляет их в небытие). Если вы попытаетесь переместить в него каталог, файловая система будет взорваться в лицо, и если вы попытаетесь переместить файл на нее, вы, вероятно, в конечном итоге замените ее.

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

 $ 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 

/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 '), вставлены в системные файлы по всей системе, что может привести к совершенно нарушенной и невосстановимой системе.

Вы можете записывать файлы или другие входные потоки в /dev/null но не в каталоги. Если вы попытаетесь переместить каталог в /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 для всех целей:

Создадим test_file и 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_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 ; и restore /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 – это специальный файл для удаления ненужных файлов и входных потоков, а также Статья в Википедии упоминает, что она не предоставляет никаких данных процессу, который читается из него.


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

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

 echo "Hello World" 

вы получаете Hello World на экране. Если вы наберете:

 echo "Hello World" >/dev/null 

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

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