편집은 가능하지만 덮어쓰기는 허용되지 않도록 파일에 대한 권한을 설정할 수 있습니까?
내 말은 텍스트 편집기를 사용하여 파일을 편집할 수 있지만 덮어쓰기로 파일을 바꾸려는 시도는 거부된다는 것입니다. 사용자는 입니다 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 파일 시스템 모델에서는 이것이 최선의 방법입니다. 다른 해결책은 없습니다.