/ 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.