לא מעט פעמים, בעת התקנה / עדכון של חבילה משורת הפקודה (באמצעות apt-get או apt ) באובונטו, אנו מקבלים את השגיאה הזו: E: לא ניתן לנעול את ספריית הניהול (/ var / lib / dpkg /) . מנקודת מבט של מתחילים, זוהי שגיאה מורכבת, שכן משתמשים חדשים אינם מודעים לרוב לספריה "/ var / lib / dpkg /" ומה זה קשור לפעולה הנוכחית שהם מבצעים.

מבחינה טכנית, השגיאה נזרקת על ידי המערכת בתרחישים מרובים, ואחד צריך באמת לטפל איך הוא / היא הולכת aout לפתור בעיה זו. במאמר זה נדון בכל ההיבטים הקשורים לשגיאה זו ואיך אתה יכול בבטחה להיפטר ממנו.

לא ניתן לנעול (/ var / lib / dpkg /) - לאבחן את הבעיה

בכל פעם שאתה נתקל שגיאה זו, הצעד הראשון צריך להיות לקרוא את תיאור השגיאה בזהירות. זה בדרך כלל מכיל כמה רמזים חיוניים זמן חוסך. כדוגמה, את צילומי מסך הבא להראות את "apt-get להתקין" הפקודה לזרוק דומה מחפש שגיאות.

עם זאת, אם תסתכל מקרוב, תוכל להבחין כי הטקסט בתוך סוגריים בשורה הראשונה ואת הטקסט לאחר פסיק בשורה השנייה שונים בשני התרחישים המבהירים כי השגיאה בתרחיש הראשון יש משהו כדי לעשות עם הרשאות משתמש, ואילו בתרחיש השני הוא קשור לקובץ נעילה להיות זמין באופן זמני.

אם אתה נתקל בשגיאה הקשורה בהרשאות (כפי שמוצג בתמונה הראשונה למעלה), סביר להניח כי למשתמש שמפעיל את הפקודה "apt-get" או "apt" אין הרשאות מספיקות והפקודה הופעלה ללא sudo . לאחר הפעלת הפקודה עם הרשאות שורש, השגיאה תיעלם.

עם זאת, אם מדובר בשגיאה הקשורה לנעילה, היא דורשת בדיקה נוספת.

מה זה / var / lib / dpkg /?

"/ Var / lib / dpkg /" יכול להיחשב כמדריך העבודה עבור מנהל חבילה "dpkg", אשר בתורו הוא למעשה מאחורי "apt-get" (וכן "aptitude" ו "aptitude" כלים) . בכל פעם שאתה משתמש בכלים אלה כדי להתקין או להסיר תוכנה, הם לנעול את מסד הנתונים החבילה (על ידי יצירת קובץ "לנעול") לפני ביצוע הפעולה בפועל, משהו שהוא נעשה למעשה על ידי מקבל את המנעול של "/ var / lib / dpkg / ". צעד זה מסייע למנוע שחיתות בנתונים או הפרעה לפעולה מתמשכת המבוצעת על ידי תהליך אחר.

בהנחה שהבנת את המושג הנ"ל, הבה נדון כעת בצעדי החקירה.

שלב 1: לראות אם יש תהליך אחר מחזיק את המנעול

זה אמור עכשיו נראה די הגיוני, נכון? וכדי לעשות זאת, אתה יכול להשתמש בעזרה של פקודת ps הישן טוב צינור הצינור שלה כדי הפקודה grep כך שאתה מבלה פחות זמן בחיפוש אחר מה שאתה רוצה. לדוגמה, הנה פקודה המאפשרת לך לגלות אם כל תהליך "apt", "apt-get" או "aptitude" כבר פועל:

 ps aux grep apt 

שלב 2: המתן זמן מה ולאחר מכן בצע פעולה

אם אכן יש פקודה כי כבר רכשה את המנעול, אתה צריך אידיאלי לחכות עד שהוא להשלים ולשחרר את המנעול. עם זאת, אם הפקודה לוקחת יותר מהזמן הצפוי ואתה בטוח שזה תקוע איפשהו, אתה יכול להמשיך להרוג אותו באמצעות פקודות kill או killall זמין (מידע נוסף עליהם כאן). זה אמור לפתור את הבעיה שאתה פונה.

דבר אחד ראוי להזכיר כאן היא כי הרג "dpkg" תהליך ישירות לא מומלץ - זה עלול להשחית את מסד הנתונים החבילה. אני מדגיש את הנקודה הזאת כי עכשיו אתה יודע כי כלים כמו "apt" ו "apt-get" להפעיל "dpkg" פנימי, אז זה בהחלט אפשרי כי אתה עלול לחשוב על הרג את "dpkg" תהליך אם אתה מבחין את זה "ps Msgstr "פלט פקודה.

הריגת תהליכים שיוצרו על ידי הפעלת פקודות, apt-get או aptitude פקודות בדרך כלל הרבה יותר בטוח.

שלב 3: כאשר פלט הפקודה "PS" לא עוזר

זכור כי מלבד כלי שורת פקודה כמו apt ו- apt-get, כמה יישומים מבוססי GUI כמו מרכז התוכנה או מנהל העדכון גם לרכוש את המנעול הזה.

הערה : אם אתה מקבל את השגיאה הקשורה לנעילה רק לאחר שתבצע אתחול לאובונטו, ייתכן מאוד שהפעולה שלך חופפת עם הסריקה האוטומטית שיזמה מנהל העדכון. מחכה קצת צריך לפתור את הבעיה במקרה זה.

חוזר יישומים מבוססי GUI דיברנו על, אפשרות שימושית נוספת וחוסכת זמן היא להשתמש בפקודה fuser .

עם "fuser" אתה רק צריך לדעת את הקובץ להיות לגשת ("/ var / lib / dpkg / lock" במקרה שלנו), ואתה יכול להרוג את תהליך גישה לקובץ זה גם אם אתה לא יודע איזה תהליך זה. לדוגמה:

 sudo fuser -cuk / var / lib / dpkg / lock 

זכור כי הפקודה fuser לא תשחרר את הנעילה שנרכשה על-ידי התהליך שהרגת, לכן תצטרך לבצע זאת באופן ידני:

 sudo rm-f / var / lib / dpkg / lock 

הערה : כדי " לשחרר את המנעול " פשוט אומר למחוק את "נעל" קובץ כך תהליכים אחרים יכולים " לרכוש את המנעול " על ידי מחדש את זה.

ייתכן שיהיה עליך להפעיל את שתי הפקודות הבאות:

 sudo fuser-cuk / var / מטמון / apt / archives / lock; sudo rm -f / var / מטמון / apt / archives / lock 

טיפ חשוב : לעולם אל תמחק קובצי נעילה כצעד ראשון - זה אמור להיות רק המוצא האחרון שלך.

סיכום

באופן כללי, זה תמיד טוב להבין את הסיבה מאחורי הבעיה לפני הולך ופתרון זה. פתרונות עיוורים לנסות לפתור בעיה לעולם לא יעזרו לך - אתה עלול להצליח במקרים מסוימים, אבל לעתים קרובות יותר מאשר לא תמצא את עצמך בלגן גדול עוד יותר, במיוחד אם מערכת ההפעלה היא לינוקס.

האם אי פעם התמודדת עם השגיאה שעליה דנו כאן? איך מינית את זה? השאירו את התשובה שלך את ההערות.