sed가 다른 사용자로 실행되고 있습니까?

sed가 다른 사용자로 실행되고 있습니까?

sed변경하는 스크립트가 있습니다 /etc/shadow. 실제 변경 사항은 중요하지 않습니다. 단지 예를 들겠습니다.

root@device:~ sed -i 's/root:\(.*\):0:0/root:\1:10:0/' /etc/shadow
sed: can't create temp file '/etc/passwdH5HWP7': Permission denied

출력에서 볼 수 있듯이 일부 권한 오류가 있는 것 같지만 명령을 실행하고 있습니다.root.

임베디드 배포판이 sed사용됩니다 .BusyBox v1.22.1

기본 폴더에서 예제를 시도하면 오류가 발생하지 않습니다. 그리고 /etc/shadow텍스트 에디터를 통해서도 정상적으로 편집이 가능합니다.

sed루트가 아닌 사용자로 파일을 생성하고 있습니까 ?

답변1

/그 이유는 (contain /etc)이 읽기 전용 파일 시스템이지만 에 대한 심볼릭 링크와 읽기-쓰기 파일 시스템에 있는 기타 동적 파일이 있기 /etc/shadow때문일 /etc/passwd수 있습니다 .

shadow이를 통해 직접 편집 하고 파일을 제출할 수 있습니다 passwd. sed -i구현이 실제로 업데이트되지 않았기 때문에 실패합니다 . 대신 임시 파일을 만들고 변경 사항을 기록한 다음 원본 파일을 임시 복사본으로 바꿉니다. 표시되는 오류 메시지는 sed(임시) 파일을 에 쓸 수 없음 을 나타냅니다 /etc/passwdH5HWP7.

해결책? -i임시 파일의 위치를 ​​직접 사용 및 제어 하지 않거나 -i플래그에 대한 파일 이름을 제공하십시오. 두 경우 모두 읽기 및 쓰기 액세스 권한이 있는 위치에 파일 이름을 제공해야 합니다.

관련 정보