을(를) 사용하려고 할 때 sudo
다음을 수행할 때:
sudo rpm -e mypackage
rpm -qa | grep mypackage
패키지가 여전히 나열되어 있는 것을 확인했습니다! 하지만 rpm -e
실행할 때 명백한 오류는 없습니다 . 이렇게 하면 이 패키지가 의존하는 다른 패키지를 제거할 수 없습니다.
몇 가지 조사 끝에 패키지에 제거 후 스크립트가 포함되어 있음을 발견했지만 실패한 것 같습니다. script-let은 디렉토리 삭제를 시도합니다.
rm -rf /some_directory
그런 다음 이 스크립트를 우회하면 패키지가 제거된다는 것을 알았습니다. 그렇다면 다음과 같이 하세요.
sudo rpm -e --noscripts mypackage
rpm -qa | grep mypackage
그러면 패키지가 더 이상 나열되지 않습니다. 이제 내 질문은 왜 sudo
이렇게 간단한 스크립트가 실행되지 않도록 차단해야 하는지, 그리고 두 번째로 rpm 명령이 문제를 보고하지 않는 이유는 무엇입니까?
그런데 다음 명령 시퀀스도 작동하므로 디렉터리 삭제가 확실히 가능합니다.
sudo rm -rf /some_directory
sudo rpm -e mypackage
rpm -qa | grep mypackage
내 통제하에 있지 않은 rpm 패키지를 적절하게 제거하려면 안정적이고 보편적인 방법이 필요하기 때문에 이들 중 어느 것도 실제로 수용 가능한 솔루션은 아닙니다. 다른 사용자가 실행할 수 있어야 하는 스크립트를 작성하고 있기 때문에 루트로 이 작업을 수행하는 것도 불가능합니다.
마지막으로 필사적으로 sudo의 -H 옵션을 시도했습니다.
sudo -H rpm -e mypackage
이제 이것도 작동하는 것 같지만 설정이 왜 영향을 미치는지 $HOME
설명 할 수 있는 사람이 있습니까? /root
내 작업 환경에는 엄격한 프로세스가 있기 때문에 설득력 있는 주장 없이는 이를 솔루션으로 제출할 수 없습니다. 즉, 이것이 왜 -H
필요한지 설명하고 내 스크립트가 강력하다는 것을 증명할 수 있어야 합니다. 불행하게도 내 컴퓨터에서 작동하는 것 같다고 말하는 것만으로는 sudo -H
상사를 만족시킬 수 없습니다!
여기에 있는 일부 전문가가 무슨 일이 일어나고 있는지 설명할 수 있기를 바랍니다. 도움을 주시면 대단히 감사하겠습니다!
답변1
지금은 설명을 직접 찾았지만 나중에 다른 사람들에게도 도움이 될 수 있습니다. 루트의 홈 영역에 존재하지 않는 .rpmmacros라는 파일을 내 홈 영역에서 발견했습니다. 따라서 sudo를 호출할 때 -H를 설정하면 영향을 받습니다.
이 .rpmmacros 파일은 %_topdir을 마운트 해제된 디렉터리(실제로는 클리어케이스 vob)로 설정합니다. 디렉토리를 마운트하거나 파일을 삭제하면 문제가 해결되었습니다. 즉, -H 옵션을 사용하지 않고도 RPM을 제거할 수 있었습니다.