저는 buildroot를 사용하여 구축된 소규모 임베디드 시스템을 실행하고 있습니다. 대상 장치에 파일 권한을 설정하려고 할 때 이상한 동작이 발생했습니다. 혼란스러운 점을 설명하기 위해 다음과 같은 간단한 예를 시도했습니다.
# cd /mydir
# touch tmp.txt
# echo "rubbish" > tmp.txt
# cat tmp.txt
rubbish
# chmod 0444 .
# chmod 0444 tmp.txt
# echo "new-rubbish" > tmp.txt
# cat tmp.txt
new-rubbish
나는 이것에 대해 매우 혼란스러워합니다. 파일과 디렉터리를 읽기 전용으로 설정하면서도 파일 내용을 수정할 수 있는 방법은 무엇입니까? 같은 디렉터리에 실행 파일이 있는데 실행하려고 하면 다음과 같은 메시지가 나타납니다.
# chmod 0444 my_binary
# ./my_binary
-sh: ./my_binary: Permission denied
내가 예상한 대로 작동합니다. 분명히 나는 Linux에서 파일 액세스 모델이 작동하는 방식에 대해 몇 가지 근본적인 오해를 가지고 있습니다. 읽기 전용으로 설정한 파일에 쓸 수 있는 이유를 설명할 수 있는 사람이 있나요?
답변1
이 작업을 수행하는 것으로 보이면 root
이는 해당 디렉토리에 쓸 수 있는 권한이 있음을 의미합니다. root
권한이 .인 경우에도 파일에 추가할 수 있습니다 -r--r--r--
.
이것
echo "new-rubbish" > tmp.txt
JoelDavis가 지적한 것처럼 파일을 자르므로 파일을 삭제하고 다시 쓰지 않습니다(사용 시 bash
).