شما هنوز به سیستم وارد نشده اید.

#1 2018-02-09 18:07:23

حسین حیدری
عضو
از : اصفهان
ثبت شده: 2015-09-16
ارسال ها: 380

نکاتی در مورد نگهداری از آرچ لینوکس و حذف بسته ها

درود

در این مقاله چند نکته که به نظرم هر کاربر آرچ باید بلد باشه را براتون توضیح بدم, اگر یک کاربر عادی باشید و زیاد درگیر مطالعه ی صفحات ویکی یا گشت زدن توی انجمن آرچ نباشید, معمولا از یه سری نکته ی ساده اما ضروری که به شخصه توی منابع فارسی ندیدم, بی اطلاع میمونید, برای همین سعی کردم این نکات ساده و بسیار ضروری را براتون توی یه پست جمع آوری کنم.


اگر مدت زیادی هست که از آرچ لینوکس استفاده میکنید (یعنی توزیع جدیدی یا همان آرچ را دوباره نصب نکردید), احتمالا یه سری مشکلاتی براتون پیش اومده, مثلا اینکه حس میکنید توزیع نسبت به روزهای اول کندتر شده, دیرتر بالا میاد و یا هر موقع دستور زیر را میزنید حس میکنید که تعداد بسته ها از اونچه باید, بیشتر شدند:

pacman -Q | wc -l

اگر در این مدت بارها میزکارهای مختلف نصب و حذف کرده باشید, احتمال بروز/داشتن این مشکلات بیشتر هم هست, خب بذارید اول از موارد خیلی ساده تر شروع کنیم, برای اینکه دفعات بعدی که آرچ نصب میکنید این مشکلات براتون کمتر یا حتی اصلا پیش نیان, باید سعی کنید از یه میزکار استفاده کنید و اگر قصد دارید از چند میزکار استفاده کنید دقت کنید که دقیقا چه بسته هایی نصب میکنید و قراره اون بسته ها چیکار کنن (این دیگه بستگی داره به تجربه ی شما) و اگر میخواهید یک میزکار را پاک کنید و از میزکار دیگه ای به جاش استفاده کنید, از پاک شدن بسته هایی که مربوط میشن به میزکار قبلی و قرار نیست ازشون استفادهای بشه, کاملا مطمئن شید! اگر تازهکار هستید برای اینکار به نظرم بهتره یه پوسته ی گرافیکی مثل Pamac برای Pacman نصب کنید تا بهتر بدونید دارید چیکار میکنید:

yaourt -S pamac-aur

بحث را با کش پکمن, حذف بستههای ذخیره شده در اون و حذف بسته های اضافی نصب شده روی سیستم, شروع میکنیم.

در دبیان-بیس ها, دستوری وجود داره که بسته هایی که وابستگی بسته ی دیگری نیستند و ازشون استفادهای هم نمیشه و یا broken هستند و باید حذف بشن را حذف میکنه و کلی تر بخوام بگم یه طور پاکسازی هست, که میشه این دستور:

sudo apt autoremove

معادل این دستور در آرچ لینوکس میشه:

sudo pacman -R $(pacman -Qdtq)

که اگر از دسته کاربرانی هستید که زیاد بسته نصب و پاک میکنید, بهتره هفتهای یک بار این دستور را بزنید, از اونجایی که ممکنه به خاطر سپردن این دستور براتون سخت باشه به نظرم بهتره یه alias براش تعریف کنید:

echo "alias autoremove="sudo pacman -R $(pacman -Qdtq)"" >> .bashrc

حالا هر بار autoremove را بزنید, خودش اون عملیات را انجام میده! بیاید دستور بالا را بررسی کنیم:

ما در بالا از "Qdtq" استفاده کردیم و اون را به عنوان ورودی "Pacman -R" معرفی کردیم, از اونجایی که همه میدونیم قسمت اول دستور یعنی "pacman -R" چی هست, میریم سراغ بررسی آپشنهای قسمت دوم دستور;
۱. در ابتدا حرف "Q" به معنی Query هست و معمولا زمانی استفاده میشه که بخواهیم بسته هایی که روی سیستم نصب شدهاند را مشاهده کنیم.
۲. دومین حرفی که استفاده شده یعنی "d" به این معنی هست که فقط بسته هایی که به عنوان وابستگی نصب میشن را نمایش بده.
۳. سومین حرف که "t" هست, میگوید بستههایی که در حال حاضر هیچ استفادهای از آنها نمیشه را نمایش بده.

و اما حرف چهارم که بالا درموردش صحبت نکردم,فقط و فقط اسم بستهها را نمایش میده یعنی نسخهی اون بسته را در ادامه نمایش نمیده, حالا شاید براتون سوال باشه که چرا این اتفاق می اُفته درحالی که این موضوع ربطی به وابستگی و بسته های غیر ضروری و .. نداره, در جواب باید بدونید که ما داریم این دستور را به عنوان ورودی معرفی میکنیم و پکمن فقط اسم بسته را برای حذف اون قبول میکنه و اگر اسم و نسخه درکنار هم باشند, خطای "Target not found" پدیدار میشه smile

برسیم به بسته هایی که در کش پکمن ذخیره میشن, در حالت خیلی ساده برای اینکه بسته هایی که توی کش هستند را پاک کنید دستور زیر کمکتون میکنه:

paccache -r

ممکنه برای یک بسته در طولانی مدت چندین آپدیت  بیاد, نسخه های قدیمیتر اون بسته در کش پکمن باقی میمونن, دستور بالا آخرین نسخه را نگه میداره و بقیه را پاک میکنه, مثلا برای من:

[naruto@ArchLinux ~]$ paccache -r


==> finished: 70 packages removed (disk space saved: 452.97 MiB)

حالا اگر به هر دلیل بخواهیم که مثلا فقط سه نسخه ی آخری که از اون بسته توی کش موجوده را نگه داره و نسخه های قدیمی تر را پاک کنه, دستور را اینطوری وارد میکنیم:


paccache -rk 3

در بالا آپشنهای "r" و "k" استفاده شدند, که "r" به معنی "remove" و "k" به معنی "keep" هست, پس زمانی که میگیم "rk 3" یعنی همه را پاک کن ولی از هر بسته سه نسخه ی آخرش را برایم نگهدار!


بسته های کش در مسیر زیر ذخیره میشن:

/var/cache/pacman/pkg/

خب حالا اگه بخوایم این پاکسازی در ابعاد گستردهتر انجام بشه, از دستور زیر استفاده میکنیم:

sudo pacman -Sc

خروجی برای من:

[naruto@ArchLinux ~]$ sudo pacman -Sc
Packages to keep:
  All locally installed packages

Cache directory: /var/cache/pacman/pkg/
:: Do you want to remove all other packages from cache? [Y/n] n

Database directory: /var/lib/pacman/
:: Do you want to remove unused repositories? [Y/n] n

خب بالاتر (از خروجی من) میتونید بخونید و ببینید که اون فرمان قراره چه دستهای از بستهها را پاک کنه, من عملیات را لغو کردم و همینطور پیشنهاد میکنم که کش پکمن را به صورت کامل پاک نکنید, از همون دستوری که در ابتدا نسبت به پاک کردن کش گفتم استفاده کنید. (هر چند کاربرد pacman -Sc با paccache -r تفاوتهای خودش را داره!)

بررسی دستور بالا:

فرمانی که بالاتر بهتون گفتم, از دو آپشن بیشتر استفاده نکرده, که میشن "S" و "c";
۱. حرف "S" به جای کلمهی Sync استفاده میشه و معمولا زمانی که ما بخوایم بستهها را به نسخهی جدیدتر ارتقاء بدیم یا پایگاههای دادهی پکمن را به روز رسانی کنیم و یا بسته ای نصب کنیم ازش استفاده میشه!
۲. حرف بعدی که "c" هست هم به جای clean نشسته و خب از اسمش معلومه چیکار میکنه! (پاکسازی میکنه smile )

در ادامه چند حالت ساده تر از پاک کردن بسته ها براتون میگم که احتمالا میدونید و سپس میریم سراغ بررسی لاگ های سیستم و ایدههایی که چرا سیستم ما دیرتر بالا میاد!

برای اینکه فقط بسته ی مورد نظر را پاک کنید و وابستگیهاش را نگه دارید:

sudo pacman -Rd pkgname

فرمان زیر هم وابستگی های یه بسته ی خاص که بهشون نیازی نیست را پاک میکنه:

sudo pacman -Ru pkgname

اگر بستهای هست که میخواید خودش و همهی بستههای مربوط بهش را پاک کنید:

sudo pacman -Rsncu pkgname

البته حالتهای خیلی زیادی هست برای پاک کردن بسته ها ولی حس کردم این سه مورد معمولا چیزهایی هستند که عموم نمیدونند, عملا شما با اضافه یا کم کردن هر سوییچ بعد از R میتونید حالت پاک کردن بسته را عوض کنید!

پیشنهاد میکنم یه سری به صفحات مربوط به پکمن در ویکی آرچ بزنید!



خب از بحث حذف کردن بسته ها خارج بشیم و برسیم به خدمت ها (سرویس ها), اگر از دستهای هستید که plymouth نصب نکردید و میتونید لاگ مربوط به راه اندازی سرویس ها را موقع بالا اومدن آرچ لینوکس ببینید, ممکنه بعضی از سرویسها fail بشن که با رنگ قرمز نشون داده میشن, اگر این سرویس ها سریع رد میشن و شما نمیتونین دقیقا تشخیص بدید که چه سرویسی بارگذاری نشده میتونید از دستور زیر استفاده کنید تا سرویس هایی که موقع راه اندازی شکست میخورن را ببینین:

systemctl --failed

حالا که اسم سرویس را میدونید, میتونید با دستور زیر اطلاعات بیشتری نسبت به اینکه چرا اون سرویس راه اندازی نمیشه, بدست بیارید:

journalctl -xefu service_name

و به صورت کلی برای اینکه از تمام خطاهایی که در لاگ های سیستم وجود دارند مطلع بشید, دستور زیر کمکتون میکنه:

journalctl -p 3 -xb

خروجی این دستور برای من:

[naruto@ArchLinux ~]$ journalctl -p 3 -xb
-- Logs begin at Wed 2017-11-22 21:53:48 +0330, end at Fri 2018-02-09 16:02:07 +0330. --
Feb 09 13:27:06 ArchLinux kernel: [Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x20 (or later)
Feb 09 13:27:06 ArchLinux kernel: DMAR: Failed to find handle for ACPI object \_SB.PCI0.SDMA
Feb 09 13:27:06 ArchLinux kernel: DMAR: Failed to find handle for ACPI object \_SB.PCI0.SDHC

مثلا در خروجی بالا خطاهایی هست که بعدا باید دقیقتر بررسیشون کنم big_smile

در مورد اینکه چرا سیستم ممکنه دیر بالا بیاد, اینکه روت و هوم روی SSD باشند خیلی تاثیر داره, اگر از HDD استفاده میکنید, طبیعی هست که آرچ لینوکس کمی دیرتر بالا بیاد, دیر بالا اومدن به Display manager و تمی که برای اون استفاده میکنید, سرویسهایی که بارگذاری نمیشند, تعداد سرویسهایی که در استارتاپ قرار دادید و همین طور تم plymouth شما (اگر استفاده میکنید) مربوط میشه!

تقریبا تمومه به جز یه مورد دیگه, که مهمترین قسمت این مقاله هست!!


اگه در شرایطی هستید که کلی بلا سر آچ لینوکس آوردید و میخواید این توزیع را دوباره نصب کنید و همینطور حوصله ندارید و نمیخواهید دوباره آرچ را دانلود کنید, روی فلش مموری یا دیسکی بریزید و دوباره پارتیشن بندی کنید, میتونید از دستوری استفاده کنید که شما را میبره به زمانی که تازه اسکریپت pacstrap را اجرا کرده بودید و بهتون اجازه میده از اونجا دوباره آرچ لینوکس را پیکربندی کنید, این دستور کل بستههای سیستم شما را به جز بستههای مربوط به گروه بسته های Base و Base-devel پاک میکنه, در واقع همه چیز را به جز خود آرچ پاک میکنه!!

دستوری حذف تمامی بسته ها که معمولا از TTY اجرا میشه:

sudo pacman -R $(comm -23 <(pacman -Qq | sort) <((for i in $(pacman -Qqg base base-devel); do pactree -ul "$i"; done) | sort -u))

اگه میخواید بدونید دقیقا چه بسته هایی با دستور بالا پاک  میشن:

comm -23 <(pacman -Qq | sort) <((for i in $(pacman -Qqg base base-devel); do pactree -ul "$i"; done) | sort -u) > remove
cat remove | less

این مقاله هم تموم شد, این ها نکات خیلی ساده ای بودند که تقریبا بیشتر افراد میدونن ولی چون توی منابع فارسی چیزی پیدا نکردم, تصمیم گرفتم اینجا بنویسمشون!

اگر هر ایدهای دارید که فکر میکنید میشه به این مطلب اضافه اش کرد, خوشحال میشم باهام به اشتراک بذاریدش smile

امیدوارم مفید واقع بشه, سایونارو smile big_smile

آخرین ویرایش توسط حسین حیدری (2018-02-11 12:14:22)


Just an anime fan

آفلاین

پانوشت انجمن

پشتیبانی توسط تیم آرچ لینوکس ایران و نیرو گرفته با FluxBB