انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: سودو. در 19 آذر 1400، 03:07 بظ
-
همونطور که میدونین وقتی کامندی رو میزنیم میره دنبالش میگرده تو آدرس هایی که تو $PATH هست !
مثلا من برای آپدیت سیستمم یک فایل تکست ساختم که این توشه :
sudo apt update -y && sudo apt upgrade -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt clean -y
و هر بار آدرس میدم به ترمینال تا اجراش کنه و این همه کامند رو تایپ نکنم ! اما ..
۱ . مشکلی پیش نمیاد اگر این فایل رو توی یکی از اون آدرس ها کپی کنم و یک اسم مثل Update براش در نظر بگیرم که فقط با زدن کامند Update اون فایل اسکریپت اجرا شه ؟
۲ . تو کدوم آدرس بهتره کپیش کنم ؟ /usr/local/bin ؟
۳ . بعدا اگه بخوام چنین فایلی بسازم و ورودی استاندارد بخواد ازم توی فایل چی باید بنویسم که نوشته بعد از کامندم رو بفرسته بهش ؟
مثلا فکر کنین من یک فایل تکست بسازم که همون ls -lha هست و برای تنبلی خودم ساختمش و اسمشم گذاشتم List و اگر بخوام توی ترمینال وقتی زدم List جلوش آدرس بدم ، برای اینکه اون آدرس رو بفرسته واسه فایل من ، توی فایل چی باید بنویسم که ورودی استاندارد رو دریافت کنه ؟
-
چرا از alias استفاده نمیکنید؟
-
چرا از alias استفاده نمیکنید؟
چون نمیدونم چی هست !!! توضیح میدین ؟
-
چرا آخر دستورات y- گزاشتید ؟ بدون y هم میشه
-
چرا آخر دستورات y- گزاشتید ؟ بدون y هم میشه
چون میپرسید همیشه ، منم با -y حلش کردم خب !
در ضمن ، آلیاس رو هم یاد گرفتم عزیزان ، ممنون از Masoud92m عزیز ، مشکلم حل شد :)
-
۱ . مشکلی پیش نمیاد اگر این فایل رو توی یکی از اون آدرس ها کپی کنم و یک اسم مثل Update براش در نظر بگیرم که فقط با زدن کامند Update اون فایل اسکریپت اجرا شه ؟
نه. باید زبان bash رو یاد بگیرید، اما همینطوری هم داخلش دستورتون رو بنویسید کفایت میکنه. فرمت اون فایل باید .sh باشه یا اینکه اول اون فایل بنویسید:
#!/bin/bash
۲ . تو کدوم آدرس بهتره کپیش کنم ؟ /usr/local/bin ؟
فرقی نمیکنه اما بهتره در این آدرس ذخیره بشه تا مشخص تر باشه.
بهتره از گزینه های پاستوریزه ای مثل alias استفاده نکنید، چون اینجوری هیچی یاد نمیگیرید.
-
نیاز نیست پسوند فایل .sh باشه، همون شِبنگ (#!/bin/bash) کفایت میکنه.
اینکه تو کدوم آدرس ذخیره بشه خیلی فرق میکنه و بسیار تفاوت داره و در مسیر خانه خودتون قرارش بدید. ~/.local/bin/
و اینکه بازم پیشنهاد میشه از گزینههای پاستوریزه مثل alias که برای همینکار ایجاد شدن، استفاده بشه. تا سیستمتون بیخودی کثیف نشه.
-
۱ . مشکلی پیش نمیاد اگر این فایل رو توی یکی از اون آدرس ها کپی کنم و یک اسم مثل Update براش در نظر بگیرم که فقط با زدن کامند Update اون فایل اسکریپت اجرا شه ؟
نه. باید زبان bash رو یاد بگیرید، اما همینطوری هم داخلش دستورتون رو بنویسید کفایت میکنه. فرمت اون فایل باید .sh باشه یا اینکه اول اون فایل بنویسید:
#!/bin/bash
۲ . تو کدوم آدرس بهتره کپیش کنم ؟ /usr/local/bin ؟
فرقی نمیکنه اما بهتره در این آدرس ذخیره بشه تا مشخص تر باشه.
بهتره از گزینه های پاستوریزه ای مثل alias استفاده نکنید، چون اینجوری هیچی یاد نمیگیرید.
ممنون ولی چرا ؟! alias که خیلی باحاله ! همه دستورات و کامند هارو به سبک خودم کاستوم کردم ! همه تک حرفی یا نهایت دو حرفی ! سرعت رو خیلی بالا میبره که !
-
و اینکه بازم پیشنهاد میشه از گزینههای پاستوریزه مثل alias که برای همینکار ایجاد شدن، استفاده بشه. تا سیستمتون بیخودی کثیف نشه.
دقیقا منطق منم همینو میگه ! خیلی با آلیاس حال کردم !
-
۱- توی مسیری کپی کنید که توسط مدیربسته مدیریت نمیشه. /bin/ /sbin /usr/bin/ /usr/sbin/ مناسب نیستند. در غیر اینصورت ممکنه با فایلهای بقیه بستهها به تداخل بخوره.
۲- اگه میخواهید برای همه کاربرها دردسترس باشه، توی /usr/local/bin/ یا /usr/local/sbin/ کپی کنید. اگه میخواهید فقط برای کاربر شما دردسترس باشه، ترجیحا توی local/bin./~ کپی کنید. میشه داخل bin/~ هم کپی کنید.
اگه توی هوم خودتون کپی کردید، بعدش باید متغییر PATH رو هم بدید تا بتونید مستقیم اجراشون کنید. توی فایل profile. توی هوم خودتون، تنظیم شده اگه دایرکتوریهای bin/~ و/یا local/bin./~ دارند، به PATH اضافه بشن.
این فایل وقتی اجرا میشه که bash به صورت login shell اجرا شده باشه. مثل وقتی که توی console توی محیط متنی، وارد حساب خودتون میشید یا وقتی که ssh میزنید. وقتی که bash رو توی ترمینال، توی محیط گرافیکی باز میکنید، معمولا به صورت login shell باز نمیشه، در نتیجه تنظیمات داخل profile. هم اعمال نمیشن.
برای اینکه متغییر PATH در حالت login shell و هم حالت interactive shell شامل دایرکتوریهای بالا باشه، باید توی فایل bashrc. این رو تنظیم کنید. میتونید این رو به فایل bashrc. اضافه کنید تا این اتفاق بیوفته
if [ -d "$HOME/.local/bin" ]; then
PATH="$HOME/.local/bin:$PATH"
fi
if [ -d "$HOME/bin" ]; then
PATH="$HOME/bin:$PATH"
fi
آموزش bash آقای امیرصمیمی رو ببینید. رایگانه، توی انجمن اگه بزنید روی قسمت ویدیوها،پیداش میکنید. توی وبسایت (http://amirsamimi.ir/bash_tutorials/) خودشون هم میتونید پیدا کنید.
@$ میشه کل ورودی که دریافت شده. 1$ میشه اولین آرگومان که به اسکریپت داده شده و همینطور 2$ میشه آرگومان دوم و 3$ آرگومان سوم تا n$ که n آخرین آرگومان شما هست.
این دستور رو میتونید کوتاهتر کنید
sudo apt update -y && sudo apt upgrade -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt clean -y
اینجوری
sudo apt update && sudo apt full-upgrade --auto-remove -y && sudo apt clean
یا حتی کوتاهتر (البته نه خیلی نسبت به بالای)
sudo -- sh -c "apt update && apt full-upgrade --auto-remove -y && apt clean"
بهتره alias هایی که ساختید رو توی فایل bash_aliases. تعریف کنید تا فایل bashrc. تغییر نکنه. اینجوری مدیریت aliase هایی که ساختید راحتتره. توی فایل bashrc. تعریف شده در صورت وجود فایل bash_aliases. محتویات اون برای پوسته استفاده بشه. البته ممکنه این تنظیم وجود نداشته باشه (معمولا bashrc. روت اینجوری هست) ولی تو توزیعهایی که من دیدم، فایل bash_aliases استفاده شده.
-
من باشم اینجوری مینوسیم
sudo apt update && sudo apt upgrade && sudo apt autoremove && sudo apt clean
-
ممنون از همه دوستان به ویژه جناب دراگون با اون توضیح فوق العادشون
-
یه چیز رو یادم رفت بگم.
قابلیت autoremove توی apt، کرنلی که در حال اجرا هست رو پاک نمیکنه. مثلا اگه کرنل 5.13.8 نصب شده باشه و با یه ارتقا ، کرنل 5.13.9 نصب بشه، تا وقتی که کرنل 5.13.8 در حال اجراست، قابلیت autoremove، کرنل 5.13.8 رو پاک نمیکنه. باید یه بار کامپیوتر رو راهاندازی مجدد کنید و سیستم رو با یه کرنل دیگه (مثلا اینجا 5.13.9) بوت کنید تا قابلیت autoremove، کرنل 5.13.8 رو پاک کنه. یا اینکه با kexec، مستقیم کرنل جدید رو جایگزین کرنل فعلی کنید.
اگه گرافیک انویدیا داشته باشید، ممکنه گرافیک بعد از kexec درست کار نکنه. بعضی کنترلرهای xhci بعد از اینکار، درست کار نمیکنند، مثل اونهایی که توی macbook air 2015 هست، ولی راه حل برای این هست.
اگه سعی کنید کرنل فعلی رو با purge یا remove پاک کنید، apt به شما هشدار میده و تا وقتی که اون هشدار رو تائید نکنید، کرنل رو پاک نمیکنه.