/ dev / null에서 읽을 수 있습니다. 고치는 방법?


80

Wikipedia 기사를/dev/null 읽고 파일을로 이동하여 놀고있었습니다 /dev/null.

이를 위해 나는 a를 만들고 그 test_file안에 내용을 넣었다.

$ touch test_file
$ echo "This is written by Aditya" > test_file
$ cat test_file
This is written by Aditya

그 후 파일을 /dev/null다음 으로 이동하려고했습니다 .

$ mv test_file /dev/null
mv: inter-device move failed: ‘test_file’ to ‘/dev/null’; unable to remove target: Permission denied

이후로, 이것은 나에게 Permission denied오류를 주었다 ; 오류 sudo가 발생할 때마다 평소처럼 계속 사용 했습니다 Permission denied.

$ sudo mv test_file /dev/null

명령이 성공했으며 test_file더 이상 디렉토리에 없습니다.

그러나, 위키 백과 문서는 이동 아무것도 복구 할 수없는 것을 말한다 /dev/null그리고 그것은을 제공 EOF그것에서 읽으려고 모든 프로세스에. 그러나 나는 읽을 수 있습니다 /dev/null:

$ cat /dev/null
This is written by Aditya

내가 뭘 잘못했고 어떻게 /dev/null정상으로 되돌 립니까? 왜 Permission denied처음에 오류 가 발생 했습니까?

답변:


147

/dev/null파일입니다. 특별한 파일. 시스템의 하드웨어와 통신하는 / dev / sda 또는 / dev / tty와 같은 장치 파일.

유일한 차이점 /dev/null은 하드웨어가 연결되어 있지 않다는 것입니다. 전송 한 모든 데이터는 자동으로 삭제됩니다. 다음 명령과 같이

echo "Hello World" > /dev/null

출력 echo을 null, void, 블랙홀로 보내기 때문에 터미널에 아무것도 인쇄하지 않습니다 .

그러나 mv test_file /dev/null특수 파일 /dev/null을 일반 텍스트 파일로 바꾸고의 콘텐츠 사본을 보유했습니다 test_file. 즉, 당신은을 잃어 버렸습니다 /dev/null.

이제, 당신이해야 할 일은 (재구성하는 것입니다) :

sudo rm /dev/null
sudo mknod -m 0666 /dev/null c 1 3

기본적으로 많은 스크립트가에 출력을 보내므로이를 재구성해야합니다 /dev/null. 경우 /dev/null더 이상 블랙홀하지만 일반 텍스트 파일, 그것은 성장하지 성장하고 파일 시스템을 위로 채울 수 있습니다. 그리고 나는 당신이 이것을 피하고 싶다고 확신합니다.

그리고 훨씬 더 위험한, 많은 스크립트 /dev/null는 읽을 것이 아무것도 읽지 않는다고 가정합니다 . 이 가정을 어기면 시스템 주변의 파일에 임의의 가비지가 기록되어 실제로는 고칠 수 없습니다.

그리고 리눅스는 멀티 태스킹이라는 것을 기억하십시오. 게임을하는 동안 /dev/null많은 프로세스가 실행되고 있으며 몇 초 동안 "기회 창"에도 혼란을 초래할 수 있습니다.

당신이 놀고 싶은 경우 /dev/null사본을 만들고 그것을 실험 할 수 있습니다 :

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

/tmp/null똑같은 방식으로 작동 /dev/null하지만 시스템 위험없이 조작하고 테스트 할 수 있는 파일을 만듭니다 .


16

사이에 큰 차이가 덮어 쓰기 파일 및 쓰기 파일은.

당신이 경우 에 뭔가를 쓰기 /dev/null , 예를 들면,

$ echo Hello > /dev/null

... 자동으로 폐기됩니다. 이를 위해에 대한 쓰기 권한이 필요합니다 /dev/null.

$ ls -l /dev/null 
crw-rw-rw- 1 root root 1, 3 Mar 18 13:17 /dev/null

이 때 덮어 /dev/null 당신이했던 것처럼, mv명령, 당신은 특수 파일 대체 /dev/null당신이 이동 무엇 이건을. 이러지 마! 파일을 덮어 쓰기, 쓰기 권한을 필요로하기 때문에 당신이 루트 권한 그렇게하는 데 필요한 이유는 파일이 포함 된 디렉토리로 ,이 경우 /dev:

$ ls -ld /dev
drwxr-xr-x 16 root root 4640 Mar 18 13:17 /dev

복원하려면 /dev/null명령을 실행하십시오

$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3

(또한 U & L StackExchange : 작성 방법/dev/null 참조 )


8

명령을 실행할 때

$ sudo mv test_file /dev/null

당신은 대체 특수 파일 /dev/null텍스트 파일로합니다. 이후에 읽으려고하면 /dev/null텍스트 파일의 내용이 반환 /dev/null되고 정상적인 방법으로 사용하려는 프로그램이 작동하지 않을 수 있습니다.

장치 파일을 교체하거나 삭제 /dev/하려면 수퍼 유저 권한 이 필요하므로, 시도하지 않은 시도가 오류로 실패했습니다.

/dev/null수동으로 복원하는 방법에 대한 정보는 Benoit의 답변을 참조하십시오 .하지만 대부분의 내용이 /dev/udev에 의해 동적으로 관리되므로 간단한 재부팅으로도 문제가 해결 될 수 있습니다.


6

수행 한 작업에 대한 질문에 대답하고 파일을 제거하려면 다음을 수행하십시오.

rm test_file

다른 사람들이 말했듯이 / dev / null은 프로그램 출력의 대상입니다.


2
... 나는 우리가 사용하는 알고 난 downvote하지 못했지만, 문제는 파일을 제거하는 방법에 대한 아닌 rm파일 / 디렉토리를 제거 ... 난 그냥 읽어 /dev/null과 이용에 대한 자세한 내용을 이해하기 위해, 나는 파일을 이동하려고 /dev/null볼 효과 ..이 질문은 /dev/null지금 읽을 수있는 결과 로 파일을 이동하여 내가 한 일을 이해하는 것에 관한 것입니다 ... 질문은 시스템에서 파일을 제거하는 방법에 관한 것이 아닙니다. 분명 ...하지만 귀하의 답변은 여전히 ​​환영하고 대답으로 유지하기에 충분합니다 ... :-)
Aditya

7
공정하게 말하면, "무엇을 잘못 했습니까?"라고 물으면서 어떻게해야했는지에 대한 설명이 필요합니다. 아마도 대부분의 사용자에게는 사소한 것이지만 다른 답변도 언급하지 않았습니다.
kapex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.