/dev가 읽기 전용으로 마운트된 후 /dev/null에 쓸 수 있는 이유는 무엇입니까?

/dev가 읽기 전용으로 마운트된 후 /dev/null에 쓸 수 있는 이유는 무엇입니까?

/dev/null읽기 전용으로 다시 설치한 후에도 /dev계속 쓸 수 있다는 사실에 놀랐습니다 .

다음은 데모입니다:

# echo foo > /dev/null
# echo foo > /dev/foo
# mount -o remount,ro /dev
# echo foo > /dev/null
# echo foo > /dev/foo
-bash: /dev/foo: Read-only file system

그 이유는 무엇입니까?

(일부(모든?) 장치의 경우 해당 장치가 연결된 파일 시스템의 일부가 아니라는 설명이 있을 수 있습니다.)

영향을 받는 장치가 있습니까 mount -o remount,ro? 아니면 remount,ro기본적으로 지정된 파일 시스템의 장치에 영향을 미치지 않습니까?

이 동작이 어디에 문서화되어 있는지 아는 사람이 있나요?

답변1

그냥 추측해 보세요. 실제로 write 를 통과하지 못했습니다 /dev/null.

장치 파일은 커널이 메이저/마이너 번호가 있는 장치를 가리키는 핸들일 뿐입니다. 실제로 동일한 장치 파일이 여러 파일 시스템에 존재할 수 있으며 이들은 동일한 장치를 참조합니다.

그래서 그들에게 쓰는 것은 파일 시스템에 쓰는 것으로 간주되지 않는 것 같습니다.

답변2

커널이 장치 파일에 대한 쓰기 시도를 발견하면 다른 모든 것을 무시하기 시작합니다(사용자가 루트이고 아직 chattr을 사용하지 않는다는 점을 고려).

IOW 장치 파일을 사용할 때아니요기본 파일 시스템을 사용하는 경우 장치 파일을 사용하게 됩니다.

장치 파일을 수정해 보세요그 자체즉, 타임스탬프 이름 바꾸기/삭제/업데이트가 실패합니다.

모든 것이 예상대로 작동합니다.

답변3

  1. 디렉터리의 라이트 W권한은 해당 디렉터리의 파일 생성/삭제만 제어합니다. 시스템이 손상될 수 있습니다 sudo chmod a-w /dev/null.

  2. /dev/null의사 장치이며 이 W비트를 존중하지 않을 수 있습니다.

답변4

장치 파일은 심볼릭 링크와 거의 유사하게 작동하는 특수 파일입니다. 동일한 작업을 시도하고(fs의 읽기 전용 심볼릭 링크를 rw fs의 파일로 링크) 파일을 편집할 수도 있습니다.

관련 정보