/dev/null은 무엇이며 왜 hx를 사용할 수 없나요?

/dev/null은 무엇이며 왜 hx를 사용할 수 없나요?

/dev를 살펴보던 중 null. 파일에 무엇이 있는지 보고 싶었기 때문에 확인했지만 hx null아무 일도 일어나지 않았고 오류가 발생했습니다 File null is not a regular file. 이 메시지의 원인은 무엇입니까?

답변1

에 있는 여러 개체 /dev는 다음과 같습니다.의사 장치커널 함수에 의해 직접 처리됩니다. 더 자주 사용되는 것들은 다음과 같습니다:

  • /dev/null: 무한한 용량의 만능 싱크대. 출력을 삭제하는 데 사용됩니다. try echo 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/nullhx가 빈 파일을 읽고 파일을 저장할 때 해당 파일에 대한 모든 업데이트가 손실된다는 점에서 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/zero0(널) 바이트의 끝없는 스트림을 얻기 위해 읽을 수도 있습니다 .

답변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.

관련 정보