گاهی پس از زدن دستور apt upgrade یا دستورات دیگر apt با خطاهایی از جنس و الگوی Could not get lock همراه با نام یک فایل روبرو میشویم. زمانی که از دستورات Package Manager اوبونتو استفاده میکنیم ، سرویس dpkg بر اساس کاری که انجام میده خودش را Lock میکنه تا دو تا Process به صورت همزمان محتوایی را به روز نکنند.
این خطاها زمانی پیش میان که Package Manager در حال بروزرسانی هست که حالا ممکنه خودمون از دستورات apt یا dpkg استفاده کرده باشیم یا ممکنه بروزرسانی خودکار روزانه را فعال کرده باشیم و در پس زمینه فعال باشه. حالت دیگه زمانی هست که یک بروزرسانی به هر دلیلی تکمیل نشده و Package Manager خودش را از Lock رها نکرده باشه.
برای آنکه متوجه بشیم دقیقاً مشکل از کجا هست میتونیم خروجی دو دستور زیر را بررسی کنیم:
ps aux | grep -i apt
ps aux | grep -i dpkg
ممکنه توی خروجی مثلاً عبارت usr/lib/apt/apt.systemd.daily update/ را ببینیم که نشون میده موضوع مربوط به حالت اول هست و بروزرسانی خودکار فعال بوده که در این حالت میتونیم صبر کنیم تا فرآیند مربوطه تکمیل بشه. البته ممکنه خودمون بروزرسانی یا دستور apt یا dpkg زده باشیم و فرآیند به دلیل سرعت پایین اینترنت یا موضوع دیگهای زمان بر شده.
اگر با صبر کردن کاری به جایی نبریم و همچنان خطای مربوطه را دریافت کنیم باید با استفاده از دستوراتی که گفته شد شماره Process مربوطهای را که این مشکل را به وجود آورده پیدا کنیم و Process را با دستور زیر از بین ببریم:
sudo kill -9 process-number
در مرحله بعد باید فایل lock ی که خطا بهش اشاره میکنه را با دستور rm حذف کنیم ، فایلهایی که عموما در این خطا نام برده میشوند عبارتند از:
/var/lib/dpkg/lock
/var/lib/dpkg/lock-frontend
/var/lib/apt/lists/lock
/var/cache/apt/archives/lock
مثلاً برای حذف فایل با مسیر var/lib/dpkg/lock-frontend/ از دستور زیر استفاده میکنیم:
sudo rm /var/lib/dpkg/lock-frontend
در آخرین مرحله هم با دستور زیر از سرویس dpkg درخواست میکنیم تا اگه مشکلی وجود داشته یا فرآیندی ناتمام مانده نسبت به تکمیلش اقدام کنه:
sudo dpkg --configure -a