درود
بعد از مدتها, بالاخره تصمیم گرفتم در این قسمت از انجمن دست به قلم بشم و چند نکته که به نظرم هر کاربر آرچ باید بلد باشه را براتون توضیح بدم, اگر یک کاربر عادی باشید و زیاد درگیر مطالعهی صفحات ویکی یا گشت زدن توی انجمن آرچ نباشید, معمولا از یه سری نکتهی ساده اما ضروری که به شخصه توی منابع فارسی ندیدم, بی اطلاع میمونید, برای همین سعی کردم این نکات ساده و بسیار ضروری را براتون توی یه پست جمع آوری کنم.
اگر مدت زیادی هست که از آرچ لینوکس استفاده میکنید (یعنی توزیع جدیدی یا همان آرچ را دوباره نصب نکردید), احتمالا یه سری مشکلاتی براتون پیش اومده, مثلا اینکه حس میکنید توزیع نسبت به روزهای اول کندتر شده, دیرتر بالا میاد و یا هر موقع دستور زیر را میزنید حس میکنید که تعداد بستهها از اونچه باید, بیشتر شدند:
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" پدیدار میشه
برسیم به بستههایی که در کش پکمن ذخیره میشن, در حالت خیلی ساده برای اینکه بستههایی که توی کش هستند را پاک کنید دستور زیر کمکتون میکنه:
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 نشسته و خب از اسمش معلومه چیکار میکنه! (پاکسازی میکنه
)
در ادامه چند حالت سادهتر از پاک کردن بستهها براتون میگم که احتمالا میدونید و سپس میریم سراغ بررسی لاگهای سیستم و ایدههایی که چرا سیستم ما دیرتر بالا میاد!
برای اینکه فقط بستهی مورد نظر را پاک کنید و وابستگیهاش را نگه دارید:
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
مثلا در خروجی بالا خطاهایی هست که بعدا باید دقیقتر بررسیشون کنم
در مورد اینکه چرا سیستم ممکنه دیر بالا بیاد, اینکه روت و هوم روی 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
این مقاله هم تموم شد, اینها نکات خیلی سادهای بودند که تقریبا بیشتر افراد میدونن ولی چون توی منابع فارسی چیزی پیدا نکردم, تصمیم گرفتم اینجا بنویسمشون!
اگر هر ایدهای دارید که فکر میکنید میشه به این مطلب اضافهاش کرد, خوشحال میشم باهام به اشتراک بذاریدش
امیدوارم مفید واقع بشه, سایونارو