ウェブサイト検索

ロックを取得できませんでした var lib dpkg lock - Ubuntu/Debian


このエラーメッセージは、Ubuntuや他のDebianベースのLinuxシステムで非常に一般的です。

「ロックを取得できませんでした」というメッセージの意味は非常に単純です。新しいソフトウェアをインストールしたり、オペレーティングシステムを更新しようとしたとき、バックグランドで別のソフトウェアのインストールまたはアップグレードが進行中であり、他のユーザーによって管理者権限で別のリモートまたはローカル端末で起動されたものです。

E: /var/lib/apt/lists/lock のロックを取得できませんでした - 開けません (11: 一時的にリソースが利用できません)というエラーメッセージの例 (Ubuntu 18.04)

他の関連する下記のエラーメッセージのもう一つのかなり破壊的な原因:

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?

これは、aptまたはdpkgコマンドを使用したソフトウェアのインストールまたはアップグレードプロセスが中断されたことを意味します。

Ubuntu/Debianやその他のLinuxオペレーティングシステムにおけるパッケージ管理ツールの動作方式は、パッケージのインストールまたは更新が開始されるたびに、パッケージ管理ツールであるaptやdpkgが、別のソフトウェアのインストールや更新プロセスの同時実行を防ぐためにロックファイル/var/lib/apt/lists/lockまたはvar/lib/dpkg/lockを作成するというものです。

このチュートリアルでは、あなたは学びます:

  • Ubuntu Linux システムで E: Could not get lock /var/lib/apt/lists/lock の最も可能性の高い原因は何ですか?
  • Ubuntu Linuxでのcould not get lockエラーメッセージを回避する方法
  • /var/lib/apt/lists/lockにロックを保持しているプロセスを見つける方法
  • /var/lib/apt/lists/lock ロックを解除する方法
  • 中断されたaptまたはdpkgインストールプロセスからどのように回復するか

ソフトウェアの要件と使用される規約

バックグラウンドアップデートプロセスによって、ロック /var/lib/apt/lists/lock を取得できませんでした。

Ubuntu Linuxシステムでは、E: Could not get lock /var/lib/apt/lists/lockエラーメッセージが表示される一般的なケースは、Ubuntuシステムがバックグラウンドで自動的にパッケージリポジトリのインデックス更新を実行するためです。これにより、ロックファイルが作成され、ユーザーが同時にaptやdpkgツールを使用できなくなります。

解決策
最も簡単で推奨される唯一の解決策は、待ってバックグラウンドパッケージ管理ツールの更新が完了し、ロックファイルが解放されるのを待つことです。

Ubuntu Linuxで「ロックを取得できなかった」エラーメッセージを回避する方法

Ubuntuシステムがバックグラウンド更新をトリガーし、ユーザーがaptまたはdpkgコマンドを使用できない状況は非常にイライラすることがあります。

解決策は、自動的なバックグラウンドシステムパッケージリストの更新を停止し、手動で更新を実行することです。自動更新をオフにするには、好みのテキストエディタを使用して/etc/apt/apt.conf.d/20auto-upgradesを編集してください:

sudo nano /etc/apt/apt.conf.d/20auto-upgrades

ファイルを開いたら、1から0にUpdate-Package-Listsディレクティブの切り替えを行います。以下に示すように、行1:

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "1";

ロックを保持しているプロセスとユーザーを見つける方法

ユーザーが apt または dpkg コマンドを正常に実行するのを妨げているロックを保持しているユーザーとプロセスを特定するために、以下の手順を使用できます:

  1. ロックされているファイルロックに注意してください。例えば:

    E: Could not get lock /var/lib/apt/lists/lock – open (11: Resource temporarily unavailable)
    E: Unable to lock directory /var/lib/apt/lists/ 
    
  2. fuserコマンドを使用して、ロックの原因となっているプロセスID(PID)を見つけます:

    sudo fuser /var/lib/apt/lists/lock
     /var/lib/apt/lists/lock: 3384
    
  3. 以前に取得されたPIDに基づいてユーザーを見つけて、コマンドを実行します:

    ps -p 3384 -o user,comm,args
    USER     COMMAND         COMMAND
    root     apt             apt update
    
  4. /var/lib/apt/lists/lock ファイル上のロックを保持しているユーザーとプロセスを特定すること。

    「/var/lib/apt/lists/lock」ロックを解除する方法

    前のセクションに従って、ユーザーとファイルロックを保持しているプロセスを特定できた場合は、さらに調査を行い、プロセスが円滑に完了できるかどうかを確認してください。

    警告
    プロセスが正常に終了する可能性がある場合は、ロックファイルを強制的に削除しないでください。これによりシステムに害を及ぼす可能性があり、場合によっては回復の選択肢さえなくなることもあります。

    パッケージ管理ツールが固まった場合、ロックファイルの削除や処理を完了できないため、プロセスを強制終了することを試みることができます。例えば、次のように実行できます:

    sudo fuser -vki /var/lib/apt/lists/lock
    [sudo] password for linuxconfig: 
                         USER        PID ACCESS COMMAND
    /var/lib/apt/lists/lock:
                         root       3384 F.... apt
    Kill process 3384 ? (y/N)
    

    または、kill コマンドと事前に取得した PID 例えば 3384 を使用することによって:

    sudo kill -9 3384
    

    手動でプロセスを終了させた場合や、ロックを保持しているプロセスとユーザーを見つけられない場合、以前に実行されたソフトウェアのインストールやソフトウェアのアップグレードが中途半端に終了し、パッケージ管理ツールがロックを解除する機会を与えられなかった可能性があります。

    このシナリオでは、ロックファイルを手動で削除してください。

    sudo rm /var/lib/apt/lists/lock
    sudo rm /var/lib/dpkg/lock
    

    早期に終了したAPTまたはDPKGインストールプロセスから回復する方法

    インストールプロセスが途中で中断されると、システムが一時的に破損し、追加のソフトウェアインストールを行うことができなくなり、以下のようなエラーが発生する可能性があります:

    E: Sub-process /usr/bin/dpkg returned an error code (2)
    

    壊れたDPKGシステムを復旧するために、以下のコマンドを試してください。

    sudo dpkg --configure -a
    sudo apt install -f
    

    システムのアップグレードが中断された場合は、次のコマンドを実行します。

    sudo apt upgrade --fix-broken
    

関連記事: