파일을 편집 가능한 상태로 유지하지만 덮어쓰기 권한 없이 파일에 대한 권한을 설정할 수 있습니까?
텍스트 편집기로 파일을 편집할 수는 있지만 덮어쓰기로 파일을 바꾸려는 시도는 거부한다는 의미입니다. 사용자는 입니다 root
. 유닉스 파일 권한의 일반적인 구조가 아닌 것은 알지만, 까다로운 접근 방식을 찾고 있습니다.
파일 패키지가 있는데 그 중 일부는 원본 버전에서 편집/사용자 정의되었습니다. 패키지를 새 버전으로 업데이트할 때 변경되지 않은 파일을 모두 교체하되 사용자 정의된 파일은 보호하고 싶습니다(편집 내용을 놓치지 않도록). 현재는 이 작업을 수동으로 수행해야 합니다. 새 업데이트에서 대체되지 않고 편집된 파일을 기록해야 합니다.
답변1
모든 패키지는 구성 파일을 완전히 무시하려고 시도하므로 다음과 같이 파일을 추가 전용 모드로 설정할 수 있습니다.
chattr +a bb
따라서 파일을 제거하거나 자를 수 없으며 추가만 할 수 있습니다.
하지만 이 경우 패키지 관리자가 시스템을 업그레이드하는 것을 중지합니다.
패키지 관리자가 사용자 정의 파일을 재정의하는 것을 원하지 않으면 debian/ubuntu에서 패키지를 보관할 수 있습니다.
echo package-name hold | dpkg --set-selections
이렇게 하면 이 패키지가 업그레이드되지 않고 파일이 유지됩니다.
답변2
"덮어쓰기"가 정확히 무엇을 의미하는지에 따라 다릅니다. 기존 파일의 데이터 변경을 의미하는 경우 운영 체제에서는 "편집"과 "덮어쓰기"를 구별할 방법이 없기 때문에 불가능합니다. 둘 다 파일의 데이터를 변경하는 것입니다. 동일한 이름의 새 파일을 삭제하고 생성하는 것을 의미하는 경우(또는 새 파일의 이름을 이 이름으로 바꾸는 경우) 파일이 포함된 디렉터리에서 쓰기 권한을 제거하면 됩니다. 분명히 이것은 하나의 특정 파일이 아닌 해당 디렉토리의 모든 파일에 적용됩니다.
답변3
우선, 패키지의 중요한 파일에 대해 tar를 수행하십시오. 그런 다음 업그레이드하세요. 새 버전을 설치한 후 저장 파일의 압축을 해제하세요.다른 디렉토리에, 그리고 편집한 파일을 패키지의 새 파일과 비교하세요. 이렇게 하면 새 파일에 추가/변경할 중요한 사항이 없는지 확인할 수 있습니다(즉, 개발자가 편집한 파일에 수정 사항을 추가했을 수도 있으며 해당 변경 사항도 유지되어야 합니다. 새 파일에 새로운 중요한 정보가 포함되어 있지 않은지 먼저 확인하지 않고 새 패키지 파일을 이전 편집 내용으로 바꾸십시오.)
답변4
루트로서 다음을 수행하십시오.
chattr +i foo.txt
그런 다음 다음을 시도하십시오.
vim foo.txt
vim에서 파일을 변경하고 저장해 보세요.
사용 사례의 예는 chattr +i /etc/resolv.conf입니다. 그러면 성가신 네트워크 관리자 서비스가 잘못 구성된 가정/사무실 라우터에서 가져온 일부 부랑자 파일로 이를 덮어쓰지 않습니다.
다음을 사용하여 취소할 수 있습니다.
chattr -i foo.txt
Linux 파일 시스템 모델에서는 이것이 최선의 방법입니다. 다른 해결책은 없습니다.