우분투에서 “/var/lib/dpkg/” 잠금을 해제할 수 없는 오류의 원인과 해결책
몇 번이고, 우분투에서 명령줄(apt-get 또는 apt 사용)로 패키지를 설치/업데이트하는 동안 다음과 같은 오류를 겪게 됩니다: E: 관리 디렉토리 (/var/lib/dpkg/)의 잠금을 해제할 수 없습니다. 초보자의 관점에서 볼 때, 이는 복잡한 오류입니다. 새로운 사용자들은 대부분 “/var/lib/dpkg/” 디렉토리와 현재 수행 중인 작업과의 관계를 알지 못합니다.
기술적으로, 이 오류는 여러 시나리오에서 시스템에 의해 발생하며, 문제를 해결하는 방법에 대해 신중하게 접근해야 합니다. 이 기사에서는 이 오류와 관련된 모든 측면과 안전하게 해결하는 방법에 대해 논의할 것입니다.
/var/lib/dpkg/의 잠금을 해제할 수 없음 – 문제 진단
이 오류를 만났을 때, 첫 번째 단계는 오류 설명을 주의 깊게 읽는 것입니다. 일반적으로 몇 가지 중요한 시간 절약 힌트를 포함하고 있습니다. 예를 들어, 다음 스크린샷은 “apt-get install” 명령이 유사한 오류를 발생시키는 모습을 보여줍니다.


그러나 자세히 살펴보면 첫 번째 줄의 괄호 안의 텍스트와 두 번째 줄의 쉼표 뒤의 텍스트가 두 시나리오에서 다르다는 것을 알 수 있습니다. 이는 첫 번째 시나리오의 오류가 사용자 권한과 관련이 있고, 두 번째 시나리오의 오류는 잠금 파일이 일시적으로 사용할 수 없다는 것과 관련이 있음을 분명히 합니다.
첫 번째 이미지에서 보여준 것처럼 권한 관련 오류가 발생하는 경우, “apt-get” 또는 “apt” 명령을 실행하는 사용자가 충분한 권한을 갖고 있지 않거나 sudo 없이 명령이 실행되었기 때문일 가능성이 높습니다. 명령이 루트 권한으로 실행되면 오류가 사라질 것입니다.
그러나 잠금 관련 오류인 경우, 추가 조사가 필요합니다.
또한 읽기: 우분투에서 “사용자가 sudoers 파일에 없습니다. 이 사건은 보고될 것입니다” 오류 수정하기
/var/lib/dpkg/란?
“/var/lib/dpkg/”는 패키지 관리자 “dpkg”의 작업 디렉토리로 생각할 수 있으며, 이는 실제로 “apt-get” (뿐만 아니라 “apt” 및 “aptitude” 도구)의 엔진입니다. 이러한 도구를 사용하여 소프트웨어를 설치하거나 제거할 때, 실제 작업을 수행하기 전에 패키지 데이터베이스를 잠그기 위해 “잠금” 파일을 생성합니다. 이는 “/var/lib/dpkg/” 디렉토리에 대한 잠금을 얻는 방식으로 수행됩니다. 이 단계는 데이터 손상이나 다른 프로세스에 의해 수행 중인 작업의 중단을 방지하는 데 도움이 됩니다.
위에서 설명한 개념을 이해했다고 가정하고, 이제 조사 단계를 논의해 보겠습니다.
단계 1: 잠금을 보유하고 있는 다른 프로세스가 있는지 확인
이제 이것이 꽤 논리적으로 보일 것입니다, 그렇죠? 이를 위해, 오래된 ps 명령의 도움을 사용하고 그 출력을 grep 명령으로 파이프하여 원하는 것을 찾는 데 시간을 덜 소비할 수 있습니다. 예를 들어, 다음 명령은 “apt”, “apt-get” 또는 “aptitude” 프로세스가 이미 실행 중인지 확인할 수 있습니다:
ps aux |grep apt단계 2: 잠시 기다린 후 조치 취하기
실제로 잠금을 이미 획득한 명령이 있다면, 이상적으로는 그것이 완료되어 잠금을 해제할 때까지 기다려야 합니다. 그러나 명령이 예상보다 더 오랜 시간이 걸리고 어딘가에 갇혀 있다고 확신하는 경우, 사용 가능한 kill 또는 killall 명령을 사용하여 종료할 수 있습니다 (자세한 정보는 여기에서 확인하세요). 이렇게 하면 직면한 문제가 해결될 것입니다.
여기서 언급할 가치가 있는 것은 “dpkg” 프로세스를 직접 종료하는 것은 결코 권장되지 않는다는 것입니다 – 이는 패키지 데이터베이스를 손상시킬 수 있습니다. 이 점을 강조하는 이유는 이제 “apt” 및 “apt-get”과 같은 도구가 내부적으로 “dpkg”를 호출한다는 것을 알기 때문입니다. 따라서 “ps” 명령 출력에서 “dpkg” 프로세스를 발견하면 종료하고 싶을 수 있습니다.
“apt”, “apt-get” 또는 “aptitude” 명령을 실행하여 시작된 프로세스를 종료하는 것이 일반적으로 훨씬 더 안전합니다.
단계 3: “ps” 명령 출력이 도움이 되지 않을 때
명령줄 도구인 apt 및 apt-get 외에도 소프트웨어 센터나 업데이트 관리자와 같은 GUI 기반 애플리케이션도 이 잠금을 획득합니다.
참고: 우분투로 부팅한 직후 잠금 관련 오류가 발생하는 경우, 자동 업데이트 관리자가 시작한 자동 폴링과 작업이 겹칠 가능성이 높습니다. 이 경우 잠시 기다리면 문제가 해결될 것입니다.
우리가 이야기하고 있는 GUI 기반 애플리케이션으로 돌아가면, 또 다른 유용하고 시간 절약이 되는 옵션은 fuser 명령을 사용하는 것입니다.
“fuser”를 사용하면 접근 중인 파일(우리의 경우 “/var/lib/dpkg/lock”)만 알면 되며, 어떤 프로세스인지 모르더라도 해당 파일에 접근하는 프로세스를 종료할 수 있습니다. 예를 들어:
sudofuser-cuk/var/lib/dpkg/lockfuser 명령은 방금 종료한 프로세스가 획득한 잠금을 해제하지 않으므로, 수동으로 다음을 수행해야 합니다:
sudorm-f/var/lib/dpkg/lock참고: “ 잠금을 해제하다 ”는 단순히 “lock” 파일을 삭제하여 다른 프로세스가 “ 잠금을 획득할 수 있도록 ” 다시 생성할 수 있게 하는 것을 의미합니다.
다음 두 명령도 실행해야 할 수 있습니다:
sudofuser-cuk/var/cache/apt/archives/lock; sudorm-f/var/cache/apt/archives/lock중요한 팁: 잠금 파일을 첫 번째 단계로 삭제하지 마십시오 – 이는 마지막 수단으로만 사용해야 합니다.
결론
일반적으로 문제를 해결하기 전에 문제의 원인을 이해하는 것이 항상 좋습니다. 문제를 해결하기 위해 무작정 해결책을 시도하는 것은 결코 도움이 되지 않습니다 – 어떤 경우에는 성공할 수 있지만, 더 자주 당신은 더 큰 혼란에 빠지게 될 것입니다, 특히 OS가 리눅스인 경우에.
여기서 논의한 오류를 겪어본 적이 있습니까? 어떻게 해결하셨나요? 댓글에 답변을 남겨주세요.
또한 읽기: “저장소에 릴리스 파일이 없습니다” 오류 수정 방법