답변:
사람들이 가정하기 때문입니다. 나는 그것을 테스트 할 때까지 그 사람들 중 하나였습니다 . 사람들이 왜 가정하는지 이해하기 쉽습니다 ... 위험 해 보입니다 ...
...하지만 실제로 물건을 옮길 수는 없습니다. /dev/null
리디렉션을 흡수하고 아무것도 보내지 않는 특수 파일입니다. 디렉토리를 디렉토리로 이동하려고하면 파일 시스템이 눈에 띄게 폭발하여 파일을 이동하려고하면 대체하게됩니다.
첫 번째 링크는 디렉토리를 다루지 만 파일로 덮어 쓰는 별도의 테스트가 있습니다. 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
sudo mv file /dev/null
것이며 완전히 사용할 수없는 시스템으로 쉽게 이어질 수 있기 때문 입니다 . @MalteSkoruppa의 의견에 링크 된 질문에 대한 내 의견을 참조하십시오. 이것은 " sudo
당신 이 무엇을하고 있는지 3 번 확인한 경우에만
sudo mknod -m 0666 /tmp/mynull 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
와 해당 상황에서 복구하는 방법을 알아야합니다.
@Rmano 가 제안한 것처럼 , 이 질문에 대한 대답 에서 실험하기 위해/dev/null
오히려 사본을 만든 다음 실험을 수행해야합니다. /tmp/null
실험 목적으로 사용하고 작성해 보겠습니다 .
sudo mknod -m 0666 /tmp/null c 1 3
이제는 모든 목적을 위해 /tmp/null
우리 /dev/null
입니다.
라는 디렉토리 안에 a 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_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
해도 위에서 설명한대로 파일을 복구 할 수 있습니다. 그러나 두 가지 예외가 있습니다.
이 기간 동안 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
(또는 다른 유사한 명령) 하여 루트 스크립트를 덮어 씁니다 . 그런 다음 파일을 쉽게 복구 할 수있는 방법이 없습니다.
두 명령을 실행하는 사이에 시스템을 재부팅하면 /dev/null
부팅시 다시 생성되므로 컴퓨터를 종료하면 파일이 손실됩니다.
그러나와 같은 입력 스트림을 복구하려는 경우 원치 않는 파일과 입력 스트림을 제거하는 특수 파일 echo "Stream this line to /dev/null" > /dev/null
이므로 /dev/null
Wikipedia 기사에서 언급했듯이 읽은 프로세스에 데이터를 제공하지 않습니다.
sudo mv test_file /dev/null
로 대체 /dev/null
됩니다 test_file
. 따라서 그 후에 /dev/null
는 정상적인 파일이므로 파일에서 작성한 것을 읽을 수 있습니다. DO NOT DO THAT
전송 된 모든 내용 /dev/null
은 자동으로 삭제됩니다. 입력하면 :
echo "Hello World"
당신은 얻을 Hello World
화면. 입력하면 :
echo "Hello World" >/dev/null
화면에 아무것도 표시되지 않습니다.
그러나 move 명령의 경우 명령 mv
은 / dev / null 파일을 디렉토리로 바꾸려고 시도합니다. 모든 것은 Linux에서 파일이므로 / dev / null은 파일입니다. 물론 특별한 장치 (장치 파일), 디스크, 파티션, 사운드 카드, 직렬 포트 등과 같은 하드웨어에 액세스 할 수있는 특수 파일. / dev / null의 경우 하드웨어와 연결되어 있지 않으므로 전송 된 데이터는 자동으로 삭제됩니다. 이것이 "그들"이 블랙홀이라고 불렀던 이유입니다.