Ubuntuで「管理ディレクトリ(/var/lib/dpkg/)をロックできません」という問題を修正する
Ubuntu Linuxやその派生版であるLinux Mint(私は実際に日常業務のためにこれを主なオペレーティングシステムとして使用しています)でapt-getコマンドや比較的新しいAPTパッケージ管理ツールを使用しているとき、コマンドラインで「管理ディレクトリ(/var/lib/dpkg/)のロックを取得できません。別のプロセスが使用しています」というエラーに遭遇することがあるかもしれません。
このエラーは非常に厄介で、特に原因が正確にわからない新しいLinux(Ubuntu)ユーザーにとってはなおさらです。
以下は、Ubuntu 16.10におけるロックファイルエラーの例です:
tecmint@TecMint:~$ sudo apt install neofetch
[sudo] password for tecmint:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg), is another process using it?
以下の出力は、同じエラーの別の可能性のあるインスタンスです:
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
将来このエラーに遭遇した場合、どのように解決できますか?このエラーに対処する方法はいくつかありますが、このガイドでは、最も簡単でおそらく最も効果的な2つの解決方法を説明します。
1. すべてのapt-getまたはaptプロセスを見つけて終了する
以下のコマンドを実行して、名前にaptという単語を含むすべてのプロセスのリストを生成します。psコマンドとgrepコマンドをパイプラインで組み合わせて使用することで、すべてのaptまたはapt-getプロセスのリストを得ることができます。
$ ps -A | grep apt
上記のコマンドの出力に表示されるそれぞれの apt-get または apt プロセスを、以下のコマンドを使用して終了させてください。
プロセスID(PID)は、上のスクリーンショットの最初の列にあります。
$ sudo kill -9 processnumber
OR
sudo kill -SIGKILL processnumber
例えば、以下のコマンドでは、9 は SIGKILL シグナルのシグナル番号であり、最初の apt プロセスを終了させます:
$ sudo kill -9 13431
OR
sudo kill -SIGKILL 13431
2. ロックファイルを削除する
ロックファイルは、Linuxシステム上の他のファイルやデータへのアクセスを単に防ぐものです。この概念は、Windowsや他のオペレーティングシステムにも存在します。
apt-get または apt コマンドを実行すると、/var/lib/apt/lists/、/var/lib/dpkg/、/var/cache/apt/archives/ のいずれかのディレクトリにロックファイルが作成されます。
これにより、すでに実行中のapt-getやaptのプロセスが、他のユーザーや他のシステムプロセスによって中断されるのを避けることができます。これらのプロセスは、apt-getやaptによって使用されているファイルと作業する必要があるためです。プロセスが実行を終了すると、ロックファイルは削除されます。
重要: 上記の二つのディレクトリにまだロックが存在し、目立ったapt-getやaptプロセスが実行されていない場合、これはプロセスが何らかの理由で保持されている可能性があるため、エラーを解消するためにロックファイルを削除する必要があります。
最初に、/var/lib/dpkg/ ディレクトリ内のロックファイルを削除するために、以下のコマンドを実行してください:
$ sudo rm /var/lib/dpkg/lock
その後、パッケージを次のように再構成するように強制します:
$ sudo dpkg --configure -a
あるいは、次のように /var/lib/apt/lists/ とキャッシュディレクトリにあるロックファイルを削除してください:
$ sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
次に、パッケージソースリストを次のように更新してください:
$ sudo apt update
OR
sudo apt-get update
結論として、私たちは、apt-getやapt、およびaptitudeコマンドを実行する際に、Ubuntu(およびその派生版)ユーザーが直面する一般的な問題に対処するための2つの重要な方法を見てきました。
この一般的なエラーに対処するための信頼できる他の方法はありますか?それなら、以下のフィードバックフォームを通じてご連絡ください。
さらに、実行中のプロセスを見つけて終了させる方法を学ぶことや、Linuxでプロセスを終了させるためのkill、pkill、killallコマンドに関する簡単なガイドを読むことを検討しても良いでしょう。
