/dev를 살펴보던 중 null
. 파일에 무엇이 있는지 보고 싶었기 때문에 확인했지만 hx null
아무 일도 일어나지 않았고 오류가 발생했습니다 File null is not a regular file
. 이 메시지의 원인은 무엇입니까?
답변1
에 있는 여러 개체 /dev
는 다음과 같습니다.의사 장치커널 함수에 의해 직접 처리됩니다. 더 자주 사용되는 것들은 다음과 같습니다:
/dev/null
: 무한한 용량의 만능 싱크대. 출력을 삭제하는 데 사용됩니다. tryecho foo >/dev/null
. 이를 읽으면 빈 바이트 스트림(즉시 EOF)이 반환됩니다./dev/zero
: 무한한 바이트 소스0x00
. 0으로 덮어쓰기 위한 입력으로 자주 사용됩니다./dev/random
,/dev/urandom
: 무작위 바이트의 무한 소스.
답변2
실제로 다른 답변 중 어느 것도 실제로 hx가 /dev/null 작업을 거부하는 이유에 대한 질문에 대답하지 않는 것 같습니다. hx가 이런 식으로 반응하는 이유는 단순히 장치 파일에 대해 이 오류 메시지를 출력하도록 프로그래밍되었기 때문입니다.
에서https://github.com/krpors/hx/blob/develop/editor.c#L125:
if (!S_ISREG(statbuf.st_mode)) {
fprintf(stderr, "File '%s' is not a regular file\n", filename);
exit(1);
이는 hx가 일반 파일이 아닌 모든 작업을 특별히 거부한다는 것을 의미합니다. 나는 이 검사를 수행할 타당한 이유가 없다고 생각합니다. 이것이 없으면 /dev/null
hx가 빈 파일을 읽고 파일을 저장할 때 해당 파일에 대한 모든 업데이트가 손실된다는 점에서 hx에서 작동할 것으로 예상합니다.
(이것은 다음과 같이 가정합니다.https://github.com/krpors/hx/실제로 포스터에서 말하는 hx 프로그램입니다)
답변3
/dev/null
기본적으로 정보를 삭제하는 방법입니다.
주요 목적은 단순히 사물을 망각으로 방향을 바꾸는 것입니다.
echo 'duck' > /dev/null
echo 'duck'
메시지 가 전송될 때 에서 제공한 메시지를 억제하므로 /dev/null
삭제됩니다.
이는 보고 싶지 않은 출력을 제공하는 명령을 사용할 때 주로 사용됩니다.
읽기는 /dev/null
즉시 파일의 끝을 반환합니다. 즉, 빈 파일처럼 작동합니다.
무작위 데이터를 제공하는 것과 /dev
같은 다른 재미있는 것들이 있습니다 . random
실제로 "파일"에서 기대하는 것과는 다릅니다 :) 주목할 가치가 있는 것은 /dev/random
시스템 사용(키 입력 사이의 시간 등)에서 수집된 진정한 무작위 데이터이며 해당 풀은 다소 빨리 소진될 수 있다는 것입니다. /dev/urandom
난수처럼 보이지만 수학 공식으로 계산되는 숫자를 알려주세요. 일반적 /dev/urandom
으로 필요에 따라 괜찮지만 예를 들어 매우 강력한 암호화 키는 충분하지 않습니다.
/dev/zero
0(널) 바이트의 끝없는 스트림을 얻기 위해 읽을 수도 있습니다 .
답변4
/dev/null
문자 장치 파일, 즉 장치 드라이버에 대한 인터페이스입니다.
이 특정 장치는 더미 장치입니다(실제 하드웨어를 나타내지 않음). 바닥이 없는 쓰레기통으로 특별히 제작되었습니다. 프로그램의 출력을 화면이나 다른 곳에 표시하고 싶지 않은 경우에 대비해 여기에 덤프할 수 있습니다.
- 콘텐츠 측면에서 실제로 시도했다면읽다이 파일 (그래요 당신~할 수 있다읽어),그럴 것이다언제나빈 0바이트 길이 파일과 동일합니다..
귀하의 명령이 무엇인지는 모르지만 hx
귀하의 설명을 보면 파일 형식을 식별하는 명령인 것으로 추측됩니다.그 내용으로. 이 작업을 위해 GNU/Linux 시스템에서 사용하는 명령은 이며 file
, 파일이 일반 파일이 아닌 것으로 확인되면 명령도 중지됩니다.
$ file /dev/null
/dev/null: character special
그러나 명령은 관계없이 강제로 읽도록 하는 옵션 file
도 제공합니다 ...-s
$ file -s /dev/null
/dev/null: empty
어쩌면 hx
명령에 사용할 수 있는 비슷한 옵션이 있을까요?
file
(아마도 귀하의 hx
명령도) 기본적으로 비정규 파일을 식별하지 않는 이유는 -s
옵션 문서에 암시되어 있습니다.file
님의 매뉴얼 페이지, 즉...
- 이러한 파일을 읽으면 부작용이 발생할 수 있으며 때로는 바람직하지 않은 부작용이 발생할 수 있습니다.
- FIFO 파이프에서 읽으면 그 안에 있는 데이터가 영구적으로 소비되므로 읽은 데이터를 파이프로 다시 밀어넣을 수 없습니다.
- 장치 파일을 읽으면 장치가 변경됩니다...
- 테이프 장치에서 읽으면 테이프 헤드 위치가 이동됩니다.
- 직렬 포트 장치에서 읽으면 버퍼링된 입력 바이트가 소비됩니다.
- 난수 장치에서 읽으면 시스템의 엔트로피 풀이 고갈됩니다.
- 그리고 문제의 장치의 드라이버에 따라 더 많은 것들이 있습니다.
- 이러한 특수 파일 식별내용별훨씬 더 많은 작업이 필요하지만 확실성은 훨씬 낮습니다.
- 콘텐츠 크기는 미리 알 수 없습니다(또는
ioctl()
얻으려면 특별한 시스템별 호출이 필요함). - 많은 경우 탐색이 작동하지 않습니다.
- 파일 끝 서명에 의존하는 파일 형식을 감지하려면 전체 내용을 읽어야 합니다.
- 이 파일 중 일부는무한콘텐츠.
- 콘텐츠 크기는 미리 알 수 없습니다(또는
프로그램이 필요한 작업을 처리하도록 설계되지 않은 경우 비정규 파일의 내용을 식별하지 못할 수도 있습니다. 안전 예방 조치로 중단되었습니다.
- 본 안전 점검 없이 프로그램을 진행할 경우, 다음과 같은 결과가 발생할 수 있습니다.걸다, ㅏ충돌또는 더 나쁜 경우에는 시스템이메모리 부족; 해당 프로그램의 디자인에 따라 다릅니다.
이 경우 프로그램의 제한 사항입니다. file -s
대신 식별 목적으로 사용하세요 .
부록
당신의 hx
경우어떤 종류의16진수/2진수편집자;그렇다면 특히나바람직하지 않음당신이 알지 못하는 특별한 파일을 여는 데 그것을 사용합니다. 마녀편집자일반적으로 예압전체 파일편집 작업을 위해 메모리에 저장됩니다.
/dev/zero
이러한 이유로 무한 콘텐츠 장치 파일(예 : 또는 /dev/urandom
) 또는 심지어 크고 유한한 장치(예: ) 를 열려고 하면 /dev/sda
시스템이 오류에 빠질 수 있습니다.메모리 부족 상태, 복구하려면 전체 시스템을 재설정해야 할 수도 있습니다.
방금 시도한 안전 점검이 해당 시나리오로부터 귀하를 안전하게 지켜줄 가능성이 높습니다. (이미 언급했듯이 장치 파일의 콘텐츠 크기는 미리 알 수 없습니다. 프로그램은 이를 로드할 메모리가 충분한지 미리 확인할 수 없습니다.)
무슨 일이 있어도 파일 헤더를 "엿보기"하고 싶은 경우;16진수 사용뷰어대신에, 좋다hexdump
(권장) 또는 구식od
. 예를 들어:
hexdump -C -n 512 /dev/null
(내용은 비어있습니다)hexdump -C -n 512 /dev/urandom
(내용은 매번 다른 횡설수설이 될 것입니다)
^ -n 512
옵션은 보기를 처음 512바이트로 제한합니다. 하지만 이것을 생략하고 끝없이 출력이 쏟아지는 경우에도 이를 중지하려면 를 누르기만 하면 됩니다 Ctrl+C.