R3DN4X314 ارسال شده در آوریل 14 2020 گزارش اشتراک گذاری ارسال شده در آوریل 14 2020 اموزش کامل اسکریپت نویسی مجموعه اموزشی اسکریپتینگ از سه بخش اصلی تشکیل میشه بخش اول کامند لاین و پیش نیاز های اسکریپت نویسی رو تشکیل میده در بخش دوم اسکریپت نویسی رو از پایه شروع میکنیم و تا سطح متوسط پیش میریم (صفحه دوم) و در بخش سوم مباحت مربوط به اسکریپت نویسی پیشرفته رو دنبال میکنیم لطفا به هیچ عنوان اسپم ندید و اگر امری بود در پیام خصوصی عنوان کنید This is the hidden content, please ورود یا ثبت نام /applications/core/interface/js/spacer.png"> __________________________________________________________________________________________________________________ بخش اول - قسمت یکم یکی از راه های وصل شدن به CLI یا command line interface یا همان رابط کاربری خط فرمان ، استفاده از لینوکس بدون دسکتاپ هستش درست مثل لینوکس در دوران قدیمش که شما فقط با یک محیط ویژال کنسول سر و کار داشتید برای ویژال کنسول کردن محیط گرافیکی هم میتونیم از Alt + Ctrl + F1 / F7 استفاده کنیم که هر کدوم از اف ها یک محیط ویژال کنسول مجزا برامون فراهم میکنن که مستقیم به ران لول عمیق تر وصل اند و حتی میتونیم همزمان با یوزر های مختلف لاگین کنیم هر کدوم از این محیط های کنسولیه مجزا شماره ی مربوط به خودشون رو دارن که در tty دیده میشه مثلا وقتی شما با Alt + Ctrl +F2 دومین محیط کنسولیه خودتون رو باز میکنید و با همون یوزر یا یوزر دیگه ای لاگین میکنید در اولین خط مقدار tty2 رو میتونید ببینید که نشون میده شما در دومین محیط کنسولیتون قرار دارید برای شیفت کردن بین tty ها از همون Alt + Ctrl + F با شماره ی tty مورد نظر استفاده میشه تو این مورد F1 ( برگشتن از محیط کنسولیه دوم ( با مقدار tty2 ) به محیط کنسولیه اولیه ( با مقدار tty 1 ) ) بعد از شیفت کردن بین کنسول ها ، تمام کنسول ها با هر یوزری که دارن در حالت لاگین میمونن و اعمالی که باهاشون انجام شده هم دست نخورده باقی میمونه که این موضوع انسجام و انعطاف قابل توجهی به وجود میاره ما میتونیم درون محیط های کنسولی هم از text mode console terminal برای کاستومایز کردن محیط کنسول استفاده کنیم با استفاده از دستور setterm برای مثال من چند مورد رو قرار میدم ، که البته خودتون با help میتونید لیست متنوع دستور setterm رو ببینید This is the hidden content, please ورود یا ثبت نام تغیر رنگ پس زمینه به یکی از رنگ هایی که اسمش رو نوشتم This is the hidden content, please ورود یا ثبت نام تغیر رنگ متن به سبز ( یا هر رنگی که اسمش رو بنویسید ) This is the hidden content, please ورود یا ثبت نام برعکس کردن رنگ زمینه و متن This is the hidden content, please ورود یا ثبت نام ذخیره ی تغیرات This is the hidden content, please ورود یا ثبت نام برگشت به حالت پیش فرض روش بعدی وصل شدن به شل استفاده از ترمینال های گرافیکی از داخل محیط دسکتاپ هستش این ترمینال ها روی کنسول کار میکنن ولی از داخل محیط گرافیکی دسکتاپ ترمینال های مختلفی در محیط گرافیکی وجوده که هر کدوم اپشن های خودشون رو دارن ، ولی چون کار اصلیه مارو شل ها انجام میدن و این ترمینال ها صرفا رابط هستن ، استفاده از هر کدومشون بیشتر جنبه ی سلیقه ای داره در زیر من لیست پر استفاده هاشون رو با سایت هاشون برای علاقه مندان میزارم This is the hidden content, please ورود یا ثبت نام خوب دوستان این قسمت بیشتر جنبه ی مقدمه ی بخش اول و اشنایی علاقه مندان با کنسول رو داشت به همین دلیل سعی کردم خیلی کوتاه و خلاصه توضیحش بدم ، در قسمت دوم دستورات خط فرمان رو شروع میکنیم واکنش ها : C0d3!Nj3ct!0n، Rocket، NimaDix و 10 نفر دیگر 11 2 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در آوریل 15 2020 نویسنده گزارش اشتراک گذاری ارسال شده در آوریل 15 2020 بخش اول - قسمت دوم شلی که سیستم شروع به استفاده کردن ازش میکنه بستگی داره به پیکربندی یوزری که لاگین کرده فایل /etc/passwd شامل لیستی از یوزر های سیستم هستش که جلوی هر یوزر اطلاعات پیکربندیش قرار داره در زیر یک نمونه از مقادیر فایل passwd در دایرکتوری etc رو میبینید This is the hidden content, please ورود یا ثبت نام هر کدوم از مقادیر فایل passwd دارای هفت فیلد هستش که این قسمت ها با ( : ) از هم جدا شدن تو قسمت های بعدی بیشتر در مورد هر کدوم از این فیلد ها صحبت میکنیم ، ولی تو این قسمت توجهمون معطوف میشه به فیلد هفتم که اسم شل و مسیر دایرکتوریش قرار گرفته ، این همون شلی هست که بعد از لاگین کردن یوزر ، به صورت پیش فرض به اون یوزر داده میشه در این مثال یوزر rednaxela بعد از لاگین بر روی شل bash قرار میگیره اکثر لینوکس ها از شل قدرتمند bash به صورت پیشفرض استفاده میکنن ، که یکی از شل های اصلی برای اسکریپت نویسی محسوب میشه به همین دلیل ما هسته ی این مجموعه رو بر مبنا ی این شل قرار میدیم و بعد از پایان بخش سوم یه نگاه اجمالی به شل های دیگه میکنیم تعامل با bash manual با دستور man : صفحات manual صفحاتی هستند که جامع ترین توضیحات و دستور العمل هارو در مورد ابجکت های شل دارن که میتونید مثلا با اموزش طرز کار یه کامند و اپشن های اون کامند تستش کنید This is the hidden content, please ورود یا ثبت نام در دستور اول ما صفحات manual رو با استفاده از دستور man برای دستور jobs دریافت میکنیم و اما دستور دوم که دستور man رو با اپشن k- اجرا کرده ، از این اپشن میشه برای کشف دستوراتی که نمیدونید استفاده کنید مثلا ما میخوایم یک فایل رو با استفاده از خط فرمان دانلود کنیم ، ولی نمیدونیم باید از چه دستوری برای دانلود استفاده کنیم با دستور man -k download دستور هایی که مربوط به دانلود میشن برامون نمایش داده میشه برای خروج از صفحات manual از حرف q استفاده کنید برای اطلاعات بیشتر در مورد دستور man میتونید از خودش برای خودش ، یعنی دستور man man استفاده کنید از اطلاعات بدست اومده میتونید برای شناخت بخش های مختلف خروجی دستور man بهره ببرید فایل سیستم و دستورات مربوطه : به تفاوت پارتیشن بندی ویندوز با لینوکس دقت کنید همون طور که در مثال پایین میبینید لینوکس از سیستم درایو هایی که ویندوز استفاده میکنه تبعیت نمیکنه و از نظر پارتیشن بندی یک ساختار یکپارچه درونی داره نکته ای که باید در اسکریپت ها مدنظر داشته باشید اینه که مسیر های لینوکس برخلاف ویندوز از اسلش / استفاده میکنن نه بک اسلش \ و همچنین لینوکس بر خلاف ویندوز به تفاوت حروف کوچیک و بزرگ حساسه This is the hidden content, please ورود یا ثبت نام در فایل سیستم لینوکس همه چیز از دایرکتوری ریشه ( / ) یا روت شروع میشه ( که در مثال بالا قبل از دایرکتوری home مشخصه ، که یعنی اولین دایرکتوری ) مواضب باشید به دلیل هم اسم بودن ، دایرکتوری ( / ) رو با دایرکتوری root در بحث ها اشتباه نگیرید ، چون در فارسی معنیه جفتشون میشه ریشه مقادیر دایرکتوری / boot = بوت دایرکتوری ( جایی که فایل های مربوط به بوت نگه داشته میشه ) dev = دیوایس دایرکتوری ( جایی که لینوکس نود های دیوایس تولید و نگهداری میکنه ) etc = سیستم کانفیگوریشن ( جایی که فایل های پیکربندی سیستم نگه داری میشن ) home = دایرکتوری هوم ( جایی که لینوکس دایرکتوری یوزر هارو تولید و نگه داری میکنه ) lib = لیبراری دایرکتوری ( جایی که لینوکس فایل های لیبراری سیستم و اپلیکیشن هارو نگه میداره ) media = مدیا دایرکتوری ( یک مکان مرسوم برای مدیا های قابل جداسازی از سیستم ) mnt = مونت دایرکتوری ( یک مکان مرسوم دیگه برای مونت کردن مدیا های قابل جدا سازی ) opt = اپشنال دایرکتوری ( محل نگه داری دیتا و پکیج های نرم افزار های ثرد-پارتی ) proc = پراسس دایرکتوری ( جایی که اطلاعات سخت افزار و پروسه ها نگه داشته میشه ) bin = باینری دایرکتوری ( جایی که خیلی از ابزار های سطح یوزر گنو نگه داشته میشن ) root = روت دایرکتوری ( جایی که دایرکتوری خانه و دیتا های یوزر روت نگه داشته میشه ) sbin = سیستم باینری دایرکتوری ( جایی که خیلی از ابزار های سطح ادمین گنو نگه داشته میشن ) run = ران دایرکتوری ( جایی که دیتا های ران تایم نگه داشته میشه ) srv = سرویس دایرکتوری ( جایی که دیتا های مربوط به سرویس هایی که سیستم میده نگه داشته میشه ) sys = سیستم دایرکتوری ( جایی که دیتا های مربوط به اطلاعات سخت افزاری نگه داشته میشه ) tmp = تمپورری دایرکتوری ( جایی که فایل های تمپورری (در فصل مربوط بهش کامل بهش میپردازیم) میتونن تولید و نگه داری بشن ) usr = یوزر باینری دایرکتوری ( محل نگه داری ابزار ها و دیتا فایل های سطح یوزر گنو ) var = وری ایبل دایرکتوری ( جایی که فایل هایی با مقادیر متغیر نگه داشته میشه مثل لاگ فایل ها ) به عنوان مثال وقتی که وارد شل میشید به طور پیش فرض در دایرکتوری home در لیست بالا قرار دارید که البته اونجا هم تو یه دایرکتوری دیگه که به اسم اکانتتون هست دستورات خط فرمان : This is the hidden content, please ورود یا ثبت نام از دستور cd برای مرور فایل سیستم استفاده میشه مقادیری مثل ( . ) یا ( .. ) به ترتیب اشاره به دایرکتوری فعلی و دایرکتوری بالا تر دارن This is the hidden content, please ورود یا ثبت نام از دستور pwd برای نمایش ادرس جایی که در فایل سیستم هستیم استفاده میشه در این مثال خروجی دستور pwd میگه ما در مسیر root/books/ هستیم This is the hidden content, please ورود یا ثبت نام از دستور ls برای مشاهده لیست مقادیر یک دایرکتوری استفاده میشه که اپشن های متنوع ای داره که چند تاشون رو مثال زدم ، اپشن ها میتونن به صورت تکی یا بیشتر استفاده بشن ، یا حتی ادغام شن مثل ls -alF اپشن F- فایل هارو از دایرکتوری ها متمایز میکنه اپشن R- تمام محتوای دایرکتوری رو با تمام مقادیری که خود اونها دارن تا انتها لیست میکنه اپشن a- مقادیر مخفی رو هم در لیست به نمایش میزاره اپشن l- لیست خروجی رو همراه با اطلاعات مربوط به هر کدوم از مقادیر نشون میده مقادیری مثل سطح دسترسی فایل برای یوزر ها نام صاحب فایل نام گروه فایل مقدار سایز فایل اخرین زمانی که اصلاح شده و ... از دستور ls برای لیست هایی که مد نظرمون هست هم میشه استفاده کرد مثل ls *.txt که میگه هر فایلی که چهار کاراکتر اخر اسمش ( t & x & t & . ) بود رو لیست کن یا ? که میگه به جای من هرچیزی بود بپذیر یا [a-p] که میگه به جای من هر کاراکتری از a تا p بود قبول کن یا [a!] که میگه به جای a هر کاراکتر دیگه ای بود بپذیر شما میتونید از این چند نمونه ی ساده به جز دستور ls در جاهای بیشماری استفاده کنید که البته با مدل های بیشتری در ادامه اشنا میشید This is the hidden content, please ورود یا ثبت نام از دستور touch برای ساخت فایل خالی استفاده میشه که در مثال بالا طرز استفاده و امکاناتش رو میتونید ببینیدا This is the hidden content, please ورود یا ثبت نام از دستور cp برای کپی کردن فایل ها استفاده میشه در مثال اول یک فایل در همون دایرکتوری ای که بوده کپی شده ، به همین دلیل اسمش رو عوض کردیم در مثال دوم چون خودمون تو هیچ کدوم از مسیر های مبدا و مقصد کپی نبودیم نام فایل رو چه در مبدا چه در مقصد همراه با مسیر کامل نوشتیم در مثال سوم چون خودمون در دایرکتوری قرار گیری فایل بودیم اسم فایل رو بدون ادرس مبدا نوشتیم و اما مثال چهارم ، همون طور که قبلا گفتیم کاراکتر ( . ) اشاره به دایرکتوری فعلی ما داره به همین دلیل برای کپی کردن فایل به جایی که هستیم مسیر مبدا رو نوشتیم و به جای مسیر مقصد ( جایی که هستیم ) کاراکتر ( . ) گذاشتیم میتونیم از اپشن i- هم استفاده کنیم , که در صورت وجود یک فایل هم نام در ادرس مقصد قبل از کپی روی مقادیر اون فایل ازمون سوال شه با استفاده از اپشن R- میتونیم تمام محتوای یک دایرکتوری رو کپی کنیم This is the hidden content, please ورود یا ثبت نام از دستور ln با اپشن s- برای ساخت شورتکات استفاده میشه This is the hidden content, please ورود یا ثبت نام از دستور mv برای انتقال فایل و تغیر نام فایل استفاده میشه در مثال اول ( تغیر نام به file2) تغیر نام انجام میشه در مثال دوم ( انتقال به داخل دایرکتوری books ) انتقال فایل انجام میشه در دستور mv هم مثل دستور cp میتونیم از اپشن i- یا R- استفاده کنیم This is the hidden content, please ورود یا ثبت نام با دستور rm و انتخاب فایل , فایل مورد نظر دیلیت میشه با استفاده از اپشن R- میتونیم یه دایرکتوری رو با همه ی مقادیرش دیلیت کنیم This is the hidden content, please ورود یا ثبت نام با استفاده از دستور mkdire میتونیم دایرکتوری بسازیم با اضافه کردن اپشن P- میتونیم با یک دستور دایرکتوری های تو در تو بسازیم This is the hidden content, please ورود یا ثبت نام از دستور rmdir برای دیلیت کردن دایرکتوری های خالی استفاده میشه This is the hidden content, please ورود یا ثبت نام از دستور tree برای دیدن ساختار درختی یک دایرکتوری استفاده میشه ( به تصویر کشیدن تمام مقادیر لایه به لایه ) This is the hidden content, please ورود یا ثبت نام دستور file نوع فایلی که بهش بدید رو بر مبنای مقدار درونیه فایل مشخص میکنه This is the hidden content, please ورود یا ثبت نام دستور cat فایلی که بهش بدید رو باز میکنه ( نه اجرا ) اپشن n- اول هر خط یک عدد میزاره به ترتیب میاد پایین اپشن b- فقط اول خط هایی که دارای مقادیر باشن شماره بندی اعمال میکنه This is the hidden content, please ورود یا ثبت نام دستور more هم مشابه دستور cat عمل میکنه ولی یوزر فرندلی تر و مقدار خروجی رو بخش بخش و درصد گذاری شده نمایش میده نسبت به cat داینامیک تره و قدرت پویش یوزر رو افزایش میده This is the hidden content, please ورود یا ثبت نام دستور less مدل پیشرفته ی more هستش که قابل توجه ترین بخشش اینه که فایل رو قبل از کامل خوندن باز میکنه ، بدین معنا که به محض اجرا مقدار دیتایی که بدست اورده باشه رو نمایش میده و در صورت حجیم بودن فایل یوزر رو منتظر نمیزاره تا تمام فایل رو بخونه This is the hidden content, please ورود یا ثبت نام دستور tail به صورت پیشفرض ده خط اخر فایل رو میخونه که با اپشن n- و عدد درخواست تعداد خط های اخر فایل یا مستقیما وارد کردن عدد درخواستی بعد از ( - ) میتونیم این مقدار رو تغیر بدیم نکته ی جالب توجه این دستور اپشن f- هستش که باعث میشه سیشن دستور فعال بمونه حتی وقتی یه برنامه داره از فایل مورد نظر استفاده میکنه که این باعث میشه به محض تغیر در فایل به صورت زنده تغیرات نمایش داده بشن This is the hidden content, please ورود یا ثبت نام دستور head مدل برعکس دستور tail هستش ، که ده خط اول فایل رو میخونه در بقیه ی موارد کاملا مثل دستور tail عمل میکنه پایان قسمت دوم از بخش یک برای اینکه طولانی شدن مبحث و تغیر در ریشه ی ادامه دستورات خط فرمان خستتون نکنه ادامه دستورات در قسمت سوم تقدیمتون میشه واکنش ها : DeMoN، RT3N، Reza.Black و 8 نفر دیگر 8 3 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در آوریل 18 2020 نویسنده گزارش اشتراک گذاری ارسال شده در آوریل 18 2020 بخش اول - قسمت سوم ادامه مبحث دستور های خط فرمان ( مدیریت سیستم لینوکس ) یکی از مهم ترین بخش ها در مدیریت لینوکس ، تحت نظر داشتن عوامل فعال در سیستمه که ما دستور های مرتبط بهش رو مرور میکنیم This is the hidden content, please ورود یا ثبت نام وقتی یک برنامه روی سیستم اجرا میشه خودش رو به صورت پروسه نشون میده برای دیدن اینکه چه پروسه هایی روی سیستم فعال هستند ، از دستور ps استفاده میکنیم که میتونه ضمن نشون دادن پروسه ها اطلاعات مربوط به هرکدومشونم بهمون بده در اینجا من چند تا از اپشن های جالبش رو مثال میزنم اپشن A- نمایش تمام پروسه ها اپشن M- نمایش اطلاعات امنیتی مربوط به پروسه ها اپشن f- نمایش لیست ( فول فرمت ) اپشن l- نمایش به صورت لانگ لیست ( اطلاعات بیشتر ) اپشن forest-- که یکی از پارامتر های لانگ گنو محصوب میشه ، برای به تصویر کشیدن رابطه بین پروسه ها استفاده میشه برخی از مقادیری که دستور ps میتونه بهمون بده رو براتون لیست میکنم This is the hidden content, please ورود یا ثبت نام فیلد uid : مربوط به کاربریه که پروسه رو فعال کرده فیلد pid : کد پی ایدی پروسه ( یک کد منحصر به هر پروسه ) فیلد ppid : اگه یک پروسه از طریق پروسه دیگه ای فعال شده باشه pid پروسه اولیه رو نمایش میده فیلد stime : سیستم تایمی که پروسه فعال شده فیلد TTY : نمایش اینکه هر پروسه در کدوم TTY فعال شده فیلد Cmd : اسم خود برنامه ی هر پروسه همون طور که دیدید دستور ps در نوع خودش عالی کار میکنه ضمن اینکه پویایی این دستور به مثال کوچیک ما محدود نمیشه ولی اگه هدف شما زیر نظر گرفتن روند پروسه هاییه که فعالیت منقطع دارن باید از دستور top استفاده کنید This is the hidden content, please ورود یا ثبت نام دستور top هم مثل ps پروسه ها و اطلاعات برامون لیست میکنه ولی این کارو در حالت ( real-time ) انجام میده ، که باعث میشه به هدفمون برسیم اولین بخش خروجی اطلاعات عمومی سیستم رو نمایش میده خط اول : زمان فعلی ، زمانی که سیستم بالا بوده ، تعداد کاربر های لاگین کرده و load average رو نشون میده خط دوم اطلاعات عمومی پروسه ها رو نشون میده مثل : تعداد کل پروسه ها ، چند پروسه فعال وجود داره ، چند پروسه متوقف شدن ، چند پروسه خواب هستن الان و چند پروسه به زامبی تبدیل شدن زامبی : پروسه هایی که کارشون تموم شده ولی پروسه هایی که اینهارو فعال کرده بودن هنوز هیچ پاسخی بهشون ندادن خط سوم اطلاعات عمومی در مورد cpu نشون میده و دو خط اخر هم در مورد وضعیت system memory هستند ، خط اول وضعیت physical memory , و خط دوم swap memory بخش دوم دستور هم شامل اطلاعات پروسه ها میشه ، مثل دستور ps This is the hidden content, please ورود یا ثبت نام از دستور kill و killall برای متوقف کردن پروسه ها استفاده میشه در مثال اول pid یک پروسه که 3940 هست رو به عنوان مقدار میدیم به دستور تا اون پروسه متوقف شه در مثال دوم به دستور killall میگیم هر پروسه ای که با http شروع میشه رو متوقف کن This is the hidden content, please ورود یا ثبت نام همونطور که قبلا در موردش صحبت کردیم لینوکس تمام فایل سیستم رو در یه دایرکتوری مرجع ( / ) قرار میده قبل از اینکه شما بتونید از یک مدیا دیسک استفاده کنید ، باید اونو در سیستم دایرکتوری جا بدید ، که به این کار میگن mounting که برای این کار به دسترسی روت نیاز دارید ( البته این موضوع مربوط به اون دسته از removable media هایی میشه که به صورت خودکار این عمل براشون اتفاق نمیوفته ، که شامل موارد مرسوم نیست) با وارد کردن دستور mount به صورت تنها ، لیستی از دیوایس های مونت شده نمایش داده میشه ، به همراه مسیرشون ، نوع فایل سیستمشون و وضعیت سطح دسترسیشون در مثال اول ما یک فلش مموری رو با نوع فایل سیستم ntfs در ادرس دیوایس و ادرس مدیا ی مشخص شده به ترتیب ، مونت کردیم البته در حالت پیشفرض فقط همون یوزر روت به مدیا ی مونت شده دسترسی داره ، که میتونه سطح دسترسی رو تغیر بده در مثال دوم هم از دستور umount هم برای unmount کردن استفاده کردیم This is the hidden content, please ورود یا ثبت نام از دستور df برای دیدن فضای خالی تمام دیوایس ها استفاده میکنیم ( اینترنال و اکسترنال ) اپشن h- مقادیر خروجی رو به صورت مگ و گیگ و ... نمایش میده که راحت تر قابل درک باشه This is the hidden content, please ورود یا ثبت نام دستور du بر خلاف دستور df مقادیر مربوط به فضای استفاده شده رو نمایش میده اپشن h- هم همون اپشن مثال قبله This is the hidden content, please ورود یا ثبت نام از دستور sort برای مرتب سازی مقادیر استفاده میشه از اپشن n- برای مرتب سازی بر اساس ترتیب اعداد استفاده میشه از اپشن M- برای مرتب سازی بر اساس ترتیب ماه های میلادی استفاده میشه ( برای مواقعی که اسم مقادیر دارای نام ماه هستن ، مثل لاگ فایل ها ) از اپشن r- برای برعکس کردن ترتیب فعلی مقادیر استفاده میشه و اما ترکیب جالب t- و k- که در مرحله اول یک کاراکتر رو به عنوان جدا کننده انتخاب میکنه و در مرحله دوم بین بلاک های ساخته شده بلاک مورد نظر رو انتخاب میکنه ، در مثال ما سومین بلاک انتخاب شده ، از بین بلاک هایی که کاراکتر ( : ) به وجود اورده This is the hidden content, please ورود یا ثبت نام از دستور grep برای جستجو و تعامل با مقادیر و فایل استفاده میکنیم در مثال اول با مشخص کردن الگوی جستجو root برای فایل passwd به دستور grep میگیم بین مقادیر فایل passwd هر خطی که الگوی مارو داشت نمایش بده اپشن e- برای مشخص کردن چند الگو استفاده میشه ، تو مثال ما الگو های red و blue مشخص شدن اپشن v- به دستور میگه تمام مقادیر فایل رو نمایش بده به جز قسمت هایی که الگوی ما رو دارن اپشن n- شماره خطی که مقدار الگوی مارو داشته هم باهاش نمایش میده اپشن c- به جای نمایش مقادیر ، تعداد خط هایی که الگوی مارو داشتن رو نمایش میده This is the hidden content, please ورود یا ثبت نام از دستور gzip برای زیپ کردن فایل استفاده میشه از دستور gzcat برای نمایش مقادیر فایل زیپ استفاده میشه از دستور gunzip برای از زیپ خارج کردن مقادیر استفاده میشه This is the hidden content, please ورود یا ثبت نام از دستور tar برای ساخت فایل های فشرده tar استفاده میشه که بخشی از فایل های فشرده مرسوم رو تشکیل میدن اپشن c- برای ساخت فایل استفاده میشه اپشن v- برای نمایش فرایند استفاده میشه اپشن f- برای مشخص کردن فایل خروجی استفاده میشه اپشن x- برای استخراج مقادیر فایل فشرده استفاده میشه در مثال اول ما یک فایل فشرده به اسم test.tar میسازیم که مقادیر فولدر های test و test2 رو دریافت کرده در مثال دوم ما مقدار فایل ساخته شده در مثال اول رو بدون استخراج فایل میبینیم در مثال سوم فایل رو استخراج میکنیم در مثال چهارم هم فایل رو استخراج میکنیم ، که البته مربوط به فرمت پیشفرض نیست ، مثلا برای استخراج تربال ها استفاده میشه در ادامه لیست دستورات پر استفاده رو براتون گذاشتم که بخشیش رو تا الان دیدید و بقیش هم در قسمت های بعد با توجه به موضوع بحث اون قسمت میبینید This is the hidden content, please ورود یا ثبت نام پایان قسمت سوم از بخش یک در قسمت بعد وارد مباحث مرتبط با شل میشیم واکنش ها : C0d3!Nj3ct!0n، DeMoN، as12pdaacodewi و 7 نفر دیگر 9 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در آوریل 20 2020 نویسنده گزارش اشتراک گذاری ارسال شده در آوریل 20 2020 بخش اول - قسمت چهارم الان که تا حدی با دستورات بیسیک خط فرمان اشنا شدید وقتشه مروری بر عمق شل داشته باشیم که برای درک بهترش باید مروری بر موارد بیسیک کامند لاین اینترفیس ( CLI ) داشته باشیم یک شل فقط یک کامند لاین اینترفیس نیست ، بلکه یه برنامه در حال اجرای تعاملیه پیچیدس اجرای دستورات شل در شرایط خاصی ممکنه یکم گمراه کننده به نظر برسه ، همین طور بعضی از اسکریپت ها ، که این پیچیدگی ها با درک طرز کار شل و روابطش قابل درک میشه در این قسمت شما با پروسه شل و به وجود اومدن ساب شل ها و رابطشون با پرنت شل ها اشنا میشید حتما یادتونه در قسمت های قبل در مورد شل پیشفرض برای هر یوزر صحبت کردیم ، که در پیکربندی هر یوزر این مقدار میتونه متغیر باشه ( فیلد هفتم از مقادیر فایل passwd که با مقدار bin/bash/ شل پیش فرض یوزر ( اینجا بش ) و ادرسش رو نشون میداد ) وقتی شما در محیط ویژال کنسول لاگین میکنید ، یا وقتی یه ترمینال در محیط گرافیکی باز میکنید ، شل پیشفرضی که توضیح دادم براتون فعال میشه اما ... اما این تنها شل پیش فرض سیستم شما نیست یک شل پیش فرض دیگه وجود داره به اسم دیفالت سیستم شل ، که این شل برای اسکریپت های سیستم استفاده میشه ، مثل اونایی که تو استارت اپ بهشون نیازه این شل پیش فرض در مسیر bin/sh/ قرار داره در بعضی لینوکس ها شما مثال زیر رو میبینید که طی اون دیفالت سیستم شل با استفاده از یه لینک رو شل بش تنظیم شده This is the hidden content, please ورود یا ثبت نام البته باید توجه داشته باشید روی همه لینوکس ها ، هم برای دیفالت سیستم شل و هم برای دیفالت اینتراکتیو شل ، یک شل استفاده نمیشه و ممکنه هر کدوم از دو شل پیشفرض روی یه شل متفاوت تنظیم شده باشن ، مثل مثال پایین This is the hidden content, please ورود یا ثبت نام تفاوت شل های پیش فرض میتونه منجر بشه به درست کار نکردن اسکریپت ما ( در صورتی که سیستم دیفالت شل سیستمی که اسکریپت مارو اجرا میکنه ، با شلی که اسکریپت باهاش نوشته شده فرق داشته باشن ) به همین دلیل ما همیشه در اولین خط اسکریپت نوع شلی که قراره اجراش کنه رو مشخص میکنیم ( مربوط به بخش دوم اموزش ) اگرچه شل های پیش فرض قابل تغیرن ،اما تو حالت عادی هم شما مجبور نیستید از دیفالت شل اینتراکتیو استفاده کنید ، تو همون محیط کنسول میتونید هر شلی رو بخونید تا اون شل STDIN رو دریافت کنه ، ( در بخش دوم با STDIN اشنا میشید ٬ اینجا منظور مقادیر ورودیه ) و از اون لحضه با اون شل کار کنید به مثال پایین دقت کنید ، تو محیط ترمینال شل دش خونده شده ، به خروجی دستور دقت کنید ، این خروجی به معنی ( هیچی و فاقد خروجی ) نیست از این لحضه هر دستوری وارد کنید شل دش اون دستور رو میگیره مثل دستور exit که شل دش گرفت و طبق اون خودش رو بست ، و به همین دلیل ترمینال بسته نشد و شما علامت پرامپت رو میبینید ( که یعنی برگشتید به همون شلی که باهاش شل دش رو خونده بودید ) This is the hidden content, please ورود یا ثبت نام مروری بر رابطه parent shell با child shell یا همون subshell شلی که شما بعد از لاگین تو محیط کنسول میگیرید ، یا از ترمینال تو محیط گرافیکی ، شل پرنت یا شل اولیه محسوب میشه وقتی شما توی محیط شل یه شل دیگه باز میکنید ( چه مستقیم چه غیر مستقیم ) اون شل ثانویه ، چایلد شل یا ساب شله بعد از باز کردن یه ساب شل چیز خاصی برای نشون دادن روابط بین شل ها نشون داده نمیشه ، به همین دلیل از دستور ps با اپشن f- استفاده میکنیم در مثال پایین یه نمونه از خروجی دستور قبل از اجرای ساب شل و بعدش رو میتونید ببینید This is the hidden content, please ورود یا ثبت نام به خروجی اولین دستور دقت کنید ، دوتا پروسه رو نشون میده اولی bash- دومی دستور ps اگه به ppid ( شماره پروسه ی پرنت ) دستور ps نگاه کنید pid ( شماره پروسه ) بش رو مینید ، که یعنی پروسه مادری که پروسه ی دستور ps از اون نشعت گرفته ، متعلق به بش هستش با همین تفاسیر در خروجی دومین دستور ps ( که بعد از دستور bash تایپ شده ، که یعنی داخل شل بش جدیدی که باز شده دستور ps وارد شده ) میبینیم که سه پروسه قرار داره ، به ppid دومین پروسه دقت کنید ( شل جدید ) میبینید که مقدار pid اولین پروسه رو داره 1841 که یعنی شل دوم داخل شل اول باز شده و چایلد شل یا ساب شل همون شل اوله و چون تو شل دوم ps گرفتیم میبینید که pid ساب شلمون ppid دستور ps هستش وقتی یه ساب شل به وجود میاد ، همه ی ابجکت های محیطیه شل مادر رو نداره و این ممکنه تو کار با متغیر ها مشکل ایجاد کنه ، که در قسمت متغیر ها بهش میپردازیم یه ساب شل میتونه خودش هم ساب شل ایجاد کنه که اون ساب شل ثانویه میشه گرند چایلده پرنت چایلده ساب شل اولیه ، و حتی میشه بیشتر رفت پایین (میشه چندین شل تو همدیگه ساخت ، که با هم در تعامل اند ) به مثال پایین دقت کنید This is the hidden content, please ورود یا ثبت نام هر کدوم از دستورات bash که میبینید داخل دستور قبلی اجرا شده خروجی دو دستور ps رو با هم مقایسه کنید نگاهی به لیست های دستوری توی یک خط شما میتونید دستورات مختلف رو جوری لیست کنید که یکی بعد از دیگری اجرا بشن ، این عمل با گذاشتن یک semicolon ( ; ) بین دستورات اتفاق میوفته به لیست دستورات و خروجیه به ترتیبشون در مثال زیر دقت کنید This is the hidden content, please ورود یا ثبت نام یه فرمت دیگش هم به این صورته This is the hidden content, please ورود یا ثبت نام مثال بالا یک کامند لیست بود ، برای ساخت لیست پروسه ها کافیه کامند لیست رو بین پرانتز بزاریم تفاوت command list با process list اینه که مقادیر porocess list توی یک ساب شل اجرا میشن به مثال زیر دقت کنید ، به لیست دستور فقط یک پرانتز اضافه شده ، خروجی هم به نظر فرقی نکرده ، ولی از ریشه یه تغیر بزرگ حاصل شده This is the hidden content, please ورود یا ثبت نام برای بهتر دیدن تغیر در خروجی دو مثال بالا ، از یک متغیر محیطی به اسم BASH_SUBSHELL استفاده میکنیم در صورتی که دستورات توی یک ساب شل اجرا شده باشن مقدار این متغیر 1 میشه ، اگه تو ساب شل اجرا نشده باشن مقدارش 0 میشه ( هر عدد مربوط به عمق شل بر تعداد ساب شل هاست ، جلو تر مثال میزنم ) مثال بالا رو با این متغیر محیطی ببینید : This is the hidden content, please ورود یا ثبت نام اینجا ما با دستور echo مقدار $ متغیر رو نمایش میدیم ( عدد 0 خط اخر ) که یعنی دستورات تو ساب شل اجرا نشدن This is the hidden content, please ورود یا ثبت نام میبینید که تو این مثال خروجی 1 گرفتیم ، چون process list برای اجرا ساب شل ران کرده شما میتونید توی process list هم دوباره ساب شل باز کنید ، به مثالش دقت کنید This is the hidden content, please ورود یا ثبت نام دقت کنید خروجی مربوط به ساب شل اولین دستور 1 بود ، مثل مثال های قبلی ولی خروجی دومین دستور 2 بود که میگه این دستور تو عمق دو لایه شل اجرا شده ( ساب شل دوم ، در ساب شل اول ) استفاده از background mode حالت بک گراند به شما این فرصت رو میده که وقتی شل در حال اجرای دستوریه که زمان میبره انجامش ، شما منتظر نمونید و همون لحضه بتونید دوباره کنترل شل رو بدست بگیرید برای اجرای یک کامند در حالت بک گراند تنها کافیه به انتهای دستور & اضافه کنید This is the hidden content, please ورود یا ثبت نام مثال بالا دستور sleep رو با مقدار 3000 ثانیه اجرا کرده ( در حالت بک گراند با استفاده از & در انتهای دستور ) و چون دستور در حالت بک گراند اجرا شده ، کنترل شل فورا به دستمون برگشته و تونستیم دستور ps رو اجرا کنیم ( اگه دستور قبلی در بک گراند نبود ، باید سه هزار ثانیه صبر میکردیم تا بتونیم دستور بعدی رو وارد کنیم ) که در خروجی دستور ps میتونیم sleep رو در حال اجرا ببینیمعلاوه بر دستور ps میتونیم از دستور jobs برای دیدن دستورات بک گراند استفاده کنیم This is the hidden content, please ورود یا ثبت نام میبینید که دستور jobs شماره job number هر job رو به علاوه ی وضعیت اجرا و اسم دستور و مقدار دستورش رو نشون میده با اپشن l- میتونید pid هر دستور رو هم ببینید This is the hidden content, please ورود یا ثبت نام هر زمان یک بک گراند جاب به اتمام برسه ، نتیجش در صفحه اعلان میشه This is the hidden content, please ورود یا ثبت نام گذاشتن process list ها در background : میدونید که process list ها در ساب شل اجرا میشن ، با این روش ما میتونیم ساب شل ایجاد شده رو ببریم در background مثال زیر هر دو حالت رو به تصویر میکشه در حالت عادی This is the hidden content, please ورود یا ثبت نام در حالت بک گراند This is the hidden content, please ورود یا ثبت نام در حالت بک گراند ، خط اول از خروجی مربوط به لحضه رفتن به بک گرانده ، خط دوم و سوم هم مربوط به خروجی دستور و اعلان اتمام جاب هستش انجام co-processing با دستور coproc : دستور coproc ساب شل در بک گراند ایجاد میکنه ، و دستورات رو اونجا اجرا میکنه به ترکیب جالب co-processing با process list در مثال زیر دقت کنید This is the hidden content, please ورود یا ثبت نام مروری بر دستورات built-in و external دستورات external دستوراتی هستند که بیرون از خود شل قرار دارند ، که معمولا در مسیر های زیر هستند This is the hidden content, please ورود یا ثبت نام مثلا دستور ps یه دستور اکسترناله ، شما میتونید محل نگه داریشو با دستورات which و type پیدا کنید This is the hidden content, please ورود یا ثبت نام هر موقع یک دستور اکسترنال اجرا بشه ، بدین واسطه یک child process به وجود میاد ، به مثال زیر دقت کنید This is the hidden content, please ورود یا ثبت نام خود دستور ps به عنوان یکی از پروسه ها در لیست دیده میشه که مقدار ppid برابر با pid بش هستش ، که یعنی بش به عنوان پرنت ps رو اجرا کرده و اما دستورات built-in دستوراتی هستند که بخشی از خود شل محسوب میشن و به عنوان child process اجرا نمیشن مثل دستورات cd و exit This is the hidden content, please ورود یا ثبت نام بر خلاف دستورات اکسترنال ، این دستورات جایی بیرون از شل دیده نمیشن چون برای اجرای دستورات built-in نیازی به child process نیست ، این دستورات سریع تر از دستورات اکسترنال هستند اما بعضی از دستورات هستند که تلفیقی از این دو نوع محسوب میشن برای مثال هر دو دستور echo و pwd از این دسته هستند This is the hidden content, please ورود یا ثبت نام پایان قسمت چهارم از بخش یک در قسمت پنجم وارد مباحث مرتبط با متغیر ها میشیم واکنش ها : nnje، DeMoN، backpack و 5 نفر دیگر 8 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در آوریل 27 2020 نویسنده گزارش اشتراک گذاری ارسال شده در آوریل 27 2020 This is the hidden content, please ورود یا ثبت نام بخش اول - قسمت پنجم یکی از عوامل تاثیر گذار در محیط شل متغیر های محیطی هستند , که خیلی از برنامه ها و اسکریپت ها ازشون استفاده میکنن , در این قسمت بیشتر باهاشون اشنا میشید در اصل متغیر های محیطی محلی برای نگه داشتن اطلاعات مربوط به سیشن های شل و محیط کاری هستند همچنین این امکان رو به شما میدن تا دیتا ها رو در مموری نگه دارید تا به سادگی توسط برنامه ها و اسکریپت های شل قابل دسترسی باشه دو نوع متغیر محیطی در بش شل وجود داره , که بهشون میپردازیم global variables و local variables نگاهی به متغیر های محیطی گلوبال : این نوع از متغیر ها هم از درون شل , و هم از درون همه ساب شل های اون قابل رویت هستند در صورتی که نوع لوکال فقط از درون خود شل دیده میشن که این موضوع نوع گلوبال رو برای اپلیکیشن هایی که ساب شل اجرا میکنن با استفاده میکنه ( ساب شل هایی که اطلاعات مربوط به پرنت شل رو درخواست میکنن ) وقتی شما سیشن بش رو فعال میکنید سیستم لینوکس چند متغیر محیطی گلوبال براتون ست میکنه , به اسم متغیر های محیطی سیستمی , که تقریبا همیشه از حروف بزرگ برای اسمشون استفاده میکنن , تا از متغیر هایی که یوزر تعریف میکنه قابل تمایز باشن برای دیدن لیست متغیر های محیطی گلوبال از دستور های env و printenv استفاده میکنیم This is the hidden content, please ورود یا ثبت نام در مثال بالا فقط بخشی از خروجی دستور رو براتون گذاشتم نه تنها در هنگام لاگین بخشی از متغیر های محیطی گلوبال براتون ست میشه , بلکه نوع لاگین میتونه تایین کننده باشه در انتخابشون با دستور printenv میتونید مقدار هر کدومشونم ببینید , اکه البته با دستور env شدنی نیست This is the hidden content, please ورود یا ثبت نام که البته با دستور echo هم میتونید این کارو کنید , که باید از علامت $ قبل از اسم متغیر استفاده کنید This is the hidden content, please ورود یا ثبت نام لازمه بدونید استفاده از علامت $ قبل از اسم متغیر فقط به دلیل دیدن مقادیر متغیر نیست , بلکه این امکان رو هم بهتون میده تا از متغیر به عنوان پارامتر یه دستور هم استفاده کنید به مثال زیر دقت کنید This is the hidden content, please ورود یا ثبت نام بالا تر گفتیم که این متغیر ها از درون ساب شل هم دیده میشن به مثال زیر دقت کنید This is the hidden content, please ورود یا ثبت نام بریم سراغ متغیر های محیطی لوکال همونطور که از اسمشون مشخصه , این متغیر ها فقط از داخل پروسه ای که توش تعریف شدن قابل خوندن اند اگرچه لوکال اند ولی به همون اندازه هم نوع های گلوبالشون مهم اند , در اصل سیستم لینوکس از این نوع متغیر هم به صورت پیش فرض براتون تعریف کرده به هر حال شما میتونید متغیر های خوتون رو تعریف کنید دستور set لیست تمام متغیر هایی که برای یک پروسه تعریف شدن رو نمایش میده , که شامل نوع گلوبال , لوکال و نوع تعریف شده توسط یوزر (user-defined) میشه , در مثال زیر بخشی از خروجی دستور رو براتون گذاشتم This is the hidden content, please ورود یا ثبت نام نحوه تعریف متغیر های user-defined بعد از ران کردن بش شل شما مجازید متغیر های خودتونو تعریف کنید برای تعریف متغیر کافیه اسم منتخب رو همراه با علامت = و مقدار متغیر , بدون هیچگونه فاصله کنار هم بزارید به مثال زیر دقت کنید This is the hidden content, please ورود یا ثبت نام در صورت وجود فاصله فرایند به مشگل میخوره , مثل : This is the hidden content, please ورود یا ثبت نام اگه خواستید مقدار متغیر رو رشته ای قرار بدید که حاوی فاصله هم باشه , باید رشته رو بین تک یا دابل کوتیشن بزارید , مثال زیر : This is the hidden content, please ورود یا ثبت نام بدون کوتیشن شل تصور میکرد کلمه بعد از فاصله دستور بعدی شله دقت کنید متغیری که ما تعریف کردیم بر خلاف مثال های قبلی با حروف کوچیکه , چون متغیر های سیستمی با حروف بزرگ تعریف شدن هر موقع خواستید متغیری با اسم حروف بزرگ تعریف کنید باید مواضب تشابه اسمی باشید وقتی یه متغیر لوکال تعریف میکنید , در هر جایی در داخل پروسه شل خودتون قابل دستیابیه , مشگل زمانی پیش میاد که یه ساب شل ران بشه به مثال زیر توجه کنید This is the hidden content, please ورود یا ثبت نام همونطور که دیدید متغیری که تو پرنت شل تعریف شده بود از داخل ساب شل قابل دسترس نبود این موضوع در مورد حالت برعکس این مثال هم صدق میکنه , مثال زیر : This is the hidden content, please ورود یا ثبت نام میبینید که مقدار خروجی خط خالی قرار گرفته نه مقدار متغیر , چون در این سطح همچین متغیری وجود نداره نحوه تعریف متغیر های محیطی گلوبال این متغیر ها بر خلاف نوع قبلی از درون هر ساب شلی که ریشه در شل اصلی داشته باشه قابل مشاهدس برای ساخت این نوع از متغیر شما باید اول یک متغیر لوکال بسازید بعد اکسپورتش کنید به محیط گلوبال این کار با استفاده از دستور export و نام متغیر بدون علامت $ انجام میشه , مثال زیر : This is the hidden content, please ورود یا ثبت نام دقت کنید که تغیر مقدار یک متغیر گلوبال که در پرنت شل تعریف شده از داخل ساب شل شدنی نیست , مثال زیرو ببینید This is the hidden content, please ورود یا ثبت نام طبق این مثال متوجه میشید که دستورات از بالا به پایین منتقل میشن , نه برعکس ساب شل فقط تونست یه متغیر با اون اسم داخل خودش تعریف کنه اکسپورت کردن هم از همین اصل تبعیت میکنه , یه متغیر از بالا اکسپورت میشه که از پایین قابل دسترسی باشه , نه برعکس , مثال زیرو ببینید This is the hidden content, please ورود یا ثبت نام برای از بین بردن متغیر ها هم باید از دستور unset و نام متغیر بدون علامت $ استفاده کنید This is the hidden content, please ورود یا ثبت نام میبینید که خروجی خط خالی داد که البته طبق اصلی که توصیح دادم , از ساب شل نمیشه تو پرنت شل تغیر ایجاد کرد مثال زیر رو ببینید This is the hidden content, please ورود یا ثبت نام میبینید که فقط توی ساب شل از بین رفت متغیر های محیطی پیش فرض شل : شل بش متغیر های مشخصی رو به صورت پیش فرض قرار میده تا محیط سیستم رو تعریف کنن که میتونن برامون مفید باشن , در لیست زیر متغیر هایی رو که بش فراهم میکنه میتونید ببینید This is the hidden content, please ورود یا ثبت نام علاوه بر متغیر های بالا , خود بش هم تعدادی از این متغیر ها توسط خودش تعریف میکنه This is the hidden content, please ورود یا ثبت نام پایان قسمت پنجم از بخش یک در قسمت بعد استارت اپ ها و ارایه ها رو توضیح میدم واکنش ها : MR.wIzArD، R3dC0d3r، C0d3!Nj3ct!0n و 5 نفر دیگر 8 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در آوریل 30 2020 نویسنده گزارش اشتراک گذاری ارسال شده در آوریل 30 2020 بخش اول - قسمت ششم استارت اپ ها : لینوکس از متغیر های موقعیتی در اهداف مختلفی استفاده میکنه , شما الان میدونید چطور اونهارو اصلاح کنید , یا متغیر های خودتون رو ایجاد کنید وقتی شما با لاگینتون یک شل بش رو اجرا میکنید در حالت پیش فرض بش چندین فایل رو چک میکنه اسم این فایل ها فایل های استارت اپ یا فایل های محیطی هستش فایل های استارت اپی که بش چک میکنه بستگی داره به نوع اجرا شدن خود شل شما میتونید یک شل بش رو با سه روش استفاده کنید به عنوان شل پیش فرض موقع لاگین کرن به عنوان یک شل تعاملی که ساب شل محسوب بشه به عنوان یک شل غیر تعاملی برای اجرای اسکریپت ها که با استفاده از هر کدوم از روش های بالا فایل های استارت اپ مد نظرمون رو مشخص میکنیم شل پیش فرض موقع لاگین با پنج فایل استارت اپ زیر سروکار داره This is the hidden content, please ورود یا ثبت نام فایل /etc/profile استارت اپ فایل اصلی پیش فرضه تمام یوزر های سیستم این فایل رو موقع لاگین اجرا میکنن لازمه بدونید بعضی از لینوکس ها از pluggable authentication modules = PAM استفاده میکنن , که در این صورت قبل از اینکه شل بش اجرا بشه پروسه pam file اجرا میشه که باعث تغیر در حالت پیش فرض اجرای استارت اپ ها میشه یک نمونه از محتویات این فایل رو در کادر زیر میبینید This is the hidden content, please ورود یا ثبت نام هر نوع از لینوکس تنظیمات مختلفی رو در این فایل اعمال میکنه مثلا در این نمونه فایلی که با اسم /etc/bash.bashrc. شناخته شده , حاوی لیست متغیر های موقعیتی هستش توجه کنید در مثال پایین از فایل /etc/profile که متعلق به CentOS distribution هستش , به فایلی با اسم /etc/bash.bashrc اشاره ای نشده This is the hidden content, please ورود یا ثبت نام از بین بقیه فایل های استارت اپ اکثر لینوکس ها فقط یکی دوتاشون رو مورد استفاده قرار میدن This is the hidden content, please ورود یا ثبت نام دقت کنید که هر چهار فایل با نقطه شروع میشن , که باعث میشه مخفی باشن به خاطر اینکه این فایل ها در دایرکتوری هر یوزر هستند , هر یوزر میتونه فقط فایل های خودش رو تغیر بده و متغیر های خودش رو اضافه کنه , که برای هر سیشن بشی که اجرا کنه فعال باشن ارایه ها : نکته جالب در مورد متغیر های محیطی اینه که میتونن به عنوان ارایه هم مورد استفاده قرار بگیرن یک ارایه , متغیریه که میتونه چند مقدار رو نگه داره برای ایجاد چند مقدار برای یک متغیر (تبدیل به ارایه) فقط کافیه اونارو بین پرانتز قرار بدید و با فاصله از هم جداشون کنید This is the hidden content, please ورود یا ثبت نام روش مشاهده مقادیر ارایه ها با متغیر ها متفاوته شما نمیتونید مقدار ارایه هارو با روش متغیر ها نمایش بدید This is the hidden content, please ورود یا ثبت نام تنها اولین مقدار از ارایه نمایش داده شد برای دیدن بخش مورد نظر از ارایه , از روش زیر تبعیت میکنیم This is the hidden content, please ورود یا ثبت نام به دلیل اینکه مقادیر ارایه از شماره صفر شروع میشن , شماره جایگاه سومین مقدار میشه 2 برای دیدن تمام مقادیر ارایه از * استفاده میکنیم This is the hidden content, please ورود یا ثبت نام شما میتونید حتی فقط مقدار مورد نظرتونو تغیر بدید This is the hidden content, please ورود یا ثبت نام میبینید که مقدار جایگاه شماره 2 به seven تغیر کرد شما حتی میتونید با استفاده از دستور unset مقدار مورد نظر رو حذف کنید This is the hidden content, please ورود یا ثبت نام اگه دقت کرده باشید متوجه میشید که مقدار جایگاه شماره 2 پاک شده و خودش تغیر نکرده شما میتونید طبق مثال زیر تمام ارایه رو حذف کنید This is the hidden content, please ورود یا ثبت نام پایان قسمت ششم از بخش یک در قسمت بعد وارد موضوعات مرتبط با یوزر میشیم واکنش ها : nnje، MR.wIzArD، Goodzilam و 4 نفر دیگر 6 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در مِی 2 2020 نویسنده گزارش اشتراک گذاری ارسال شده در مِی 2 2020 بخش اول - قسمت هفتم هیچ سیستمی کاملا خالی از امنیت نیست , باید حتما مکانیزمی برای محافظت از فایل ها در برابر تغیر و دسترسی غیر مجاز باشه سیستم لینوکس از روش یونیکس برای مجوز دسترسی استفاده میکنه اجازه دسترسی تقسیم بندی شده برای یوزر ها و گروه ها بر مبنای تنظیمات هر فایل یا دایرکتوری هسته سیستم امنیتی لینوکس یوزر اکانته , میزان دسترسی کاربران سیستم به ابجکت های مختلف بستگی به یوزری داره که باهاش لاگین میکنن سیستم لینوکس از فایل های خاصی برای مدیریت یوزر اکانت ها استفاده میکنه , قبل از اینکه در مورد پرمیشن ها صحبت کنیم لازمه بدونیم لینوکس چجوری یوزر اکانت هارو هندل میکنه The /etc/passwd سیستم لینوکس برای همخونی دادن login name و uid از این فایل استفاده میکنه , این فایل حاویه هفت بخش اطلاعاتیه , یک نمونشو پایین میبینید This is the hidden content, please ورود یا ثبت نام یوزر root مدیر سیستم لینوکسه و همیشه مقدار uid صفر رو داره میبینید که سیستم لینوکس اکانت های زیادی رو ساخته که در واقع یوزر واقعی نیستن و برای مقاصد سیستمی استفاده میشن که بهشون میگن سیستم اکانت سیستم اکانت در اصل یک اکانت مخصوصه که سرویس ها روی سیستم ران میکنن تا به منابع روی سیستم دسترسی پیدا کنن تمام سرویس هایی که در حالت بک گراند ران میشن نیاز دارن تحت یک سیستم اکانت به سیستم لاگین بشن اکثر لینوکس ها به سیستم اکانت ها uid زیر 500 میدن (مثال بالا رو ببینید) و uid یوزر هارو از 500 شروع میکنن (مثال بالا) فیلد های فایل /etc/passwd شامل موارد زیر هستند یوزرنیم لاگین پسورد یوزر مقدار uid یوزرم قدار gid یوزر مشخصات یوزر لوکیشن دایرکتوری home یوزر و مقدار اخر هم نوع شل یوزره مقدار x که در فیلد پسورد قرار گرفته به معنی پسورد یوزر نیست , سال ها پیش لینوکس پسورد هارو به صورت رمزنگاری شده تو این فیلد میذاشت , که چون خیلی از برنامه ها برای اطلاعات یوزر به دسترسی به این فایل نیاز داشتن , این موضوع یک مشگل امنیتی محسوب میشد الان اکثر لینوکس ها پسورد یوزر هارو تو یه فایل جدا به اسم etc/shadow/ قرار میدن که فقط برنامه های مخصوصی مثل لاگین بهش دسترسی دارن The /etc/shadow از این فایل برای نگهداری پسورد ها و اطلاعات مربوط بهشون استفاده میشه فقط یوزر root میتونه به این فایل دسترسی داشته باشه که باعث میشه امنیت بیشتری نسبت به /etc/passwd داشته باشه این فایل برای هر یوزر یه رکورد نگه میداره (مثال زیر) This is the hidden content, please ورود یا ثبت نام هر رکورد 9 تا فیلد داره , که با هم به ترتیب مرورشون میکنیم اسم لاگین پسورد به صورت رمزنگاری شده اخرین تاریخی که پسورد تغیر کرده حداقل روز های موندگاریه پسورد قبل از امکان تغیر تاریخ انقضای پسورد چند روز قبل از منقضی شدن پسورد هشدار داده بشه تعداد روز هایی که , بعد از منقضی شدن پسورد اکانت باید غیر فعال بشه تاریخ مربوط به اینکه از چه زمانی اکانت غیر فعال شده فیلدی که برای استفاده در اینده تعبیه شده در مثال بالا شما شش فیلد فعال میبینید , که حالت نرماله و به ترتیب شش توصیف اول هستن اضافه کردن یوزر : برای این کار از دستور useradd استفاده میکنیم این دستور یک راه ساده برای اضافه کرن یوزر بهمون میده , که از تلفیق مقادیر پیش فرض سیستم و پارامتر های خط دستور برای تعریف یوزر استفاده میکنه این مقادیر پیش فرض سیستمی در مسیر زیر قرار دارن etc/defualt/useradd/ که برای دیدنشون میتونید از پارامتر D- استفاده کنید ، به مثال زیر توجه کنید : This is the hidden content, please ورود یا ثبت نام پارامتر D- به ما میگه اگه از مقادیر مخصوص خومون موقع ساخت اکانت استفاده نکنیم , به صورت پیش فرض چه جایگزینی براشون در نظر گرفته میشه طبق مثال بالا این مقایر به ترتیب میگن که : یوزر جدید اضافه میشه به گروه مرسوم با گروپ ایدی 100 یوزر جدید یک هوم اکانت در دایرکتوری هوم با اسم خودش اضافه میکنه یوزر جدید بعد از منقضی شدن پسورد غیر فعال نخواهد شد یوزر جدید بعد از مدت زمان معینی منقضی نخواهد شد یوزر جدید از شل بش به عنوان شل پیش فرض استفاده خواهد کرد سیستم محتوای etc/skel/ رو در دایرکتوری هوم یوزر اضافه میکنه سیستم یک فایل در دایرکتوری میل برای یوزر میسازه , تا ایمیل هاشو دریافت کنه مقادیر /etc/skel در برخی لینوکس ها : This is the hidden content, please ورود یا ثبت نام شما باید این فایل هارو از قسمت های قبل بشناسید , اینها همون فایل های استاندارد استارت اپ هستند شما میتونید این موضوع رو با ساخت یک یوزر اکانت با مقادیر پیش فرض تست کنید This is the hidden content, please ورود یا ثبت نام در حالت دیفالت دستور useradd دایرکتوری home رو نمیسازه که اپشن m- باعث میشه این کارو برامون بکنه میبینید که محتوای etc/skel/ در هوم دایرکتوریه جدید هستش شما میتونید هنگام ساخت یوزر اکانت هر کدوم از مقادیر پیش فرض رو که خواستید تغیر بدید c comment- برای اضافه کردن اطلاعات به فیلد کامنت یوزر استفاده میشه d home_dir- برای جایگزین کردن اسم دایرکتوری با مقدار پیش فرض استفاده میشه e expire_date- برای تعین تاریخ انقضا اکانت استفاده میشه f inactive_days- مشخص میکنه چه مدت بعد از منقضی شدن پسورد اکانت غیر فعال بشه g initial_group- برای مشخص کردن گروپ ایدی یوزر استفاده میشه G group- برای تعین چند گروه برای یوزر استفاده میشه k- همراه با m- استفاده میشه , برای کپی کردن مقادیر etc/skel/ تو هوم دایرکتوری m- برای ساخت هوم دایرکتوری استفاده میشه n- برای ایجاد یک گروه جدید هم اسم با خود یوزر , برای یوزر استفاده میشه r- برای ساخت اکانت های سیستمی استفاده میشه p passwd- تعین پسورد پیش فرض یوزر s shell- تعین شل پیش فرض یوزر u uid- تعین یک uid مشخص برای یوزر طبق چیزی که گفته شد میتونید مقادیر پیش فرض رو در هنگام ساخت یوزر اکانت برای یوزر تغیر بدید و یا , میتونید خود حالت پیش فرض رو تغیر بدید در این صورت هر اکانت دیگه ای که بسازید با مقایر پیش فرضی که شما تعین کردید ساخته میشه برای این کار باید پارامتر D- رو قبل از پارامتر های اصلاحی زیر بزارید b default_home- تغیر لوکیشن پیش فرض هوم دایرکتوری e expiration_date- تغیر مقدار زمان پیش فرض برای منقضی شدن اکانت f inactive- تغیر مقدار زمان پیش فرض برای غیر فعال شدن اکانت بعد از منقضی شدن پسوردش g group- تغیر gid پیش فرض s shell- تغیر لاگین شل پیش فرض به مثال زیر توجه کنید This is the hidden content, please ورود یا ثبت نام در این مثال مقدار شل پیش فرض برای تمام اکانت هایی که از این به بعد ساخته بشن تغیر کرد remove کردن یوزر برای از بین بردن یک اکانت میتونیم از دستور userdel استفاده کنیم در حالت پیش فرض این دستور فقط اطلاعات یوزر رو از فایل /etc/passswd پاک میکنه اگه از پارامتر r- استفاده کنید هوم دایرکتوری و دایرکتوری ایمیل هم پاک میشن اگرچه در بعضی لینوکس ها بقیه فایل های اکانت از بین رفته ، باقی میمونن به مثال زیر توجه کنید This is the hidden content, please ورود یا ثبت نام پایان قسمت هفتم از بخش یک در قسمت بعد به اصلاحات یوزر و کار با گروه ها و سطح های دسترسی (permissions) میپردازیم واکنش ها : Goodzilam، RT3N، as12pdaacodewi و 6 نفر دیگر 7 2 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در مِی 4 2020 نویسنده گزارش اشتراک گذاری ارسال شده در مِی 4 2020 بخش اول - قسمت هشتم (قسمت اخر از بخش اول) تغیرات اصلاحی یوزر اکانت لینوکس ابزار های مختلفی برای تغیرات در یوزر ها در اختیارمون میذاره , مثل : usermod برای تغیرات در فیلد های اکانت یوزر ازش استفاده میکنیم passwd برای تغیر پسورد یوزر کاربرد داره chpasswd این دستور با دریافت یک فایل متنی حاوی یوزر ها و پسورد انتخوابی , پسورد تمام یوزر هارو تغیر میده chage برای تغیر تاریخ انقضای پسورد کاربرد داره chfn برای تغیر کامنت اطلاعات یوزر استفاده میشه chsh برای تغیر شل پیش فرض یوزر استفاه میشه دستور usermod اپشن های این دستور باعث تغیر در بیشتر فیلد های فایل /etc/passwd میشن و اپشن ها مشابه اپشن های دستور useradd هستند اپشن هایی مثل c , -e , -g- چند تا از اپشن های متفاوتش رو براتون میزارم l- تغیر اسم لاگین یوزر L- قفل کردن یوزر اکانت , بنابراین یوزر نمیتونه لاگین کنه p- تغیر پسورد یوزر U- باز کردن قفل یوزر passwd و chpasswd دستور passwd یک راه سریع برای تغیر فقط پسورده This is the hidden content, please ورود یا ثبت نام اگه دستور رو به صورت خالی وارد کنید , پسورد یوزر فعلی عوض میشه اکه با اسم یوزر وارد کنید , پسورد اون یوزر عوض میشه (البته اگه روت باشید) با استفاده از اپشن e- میتونید یوزر رو مجبور به تغیر پسوردش کنید در صورت نیاز به تغیر پسورد دسته جمعی میتونید از chpasswd به صورت زیر استفاده کنید This is the hidden content, please ورود یا ثبت نام در فایل متنی اسم های لاگین همراه با پسورد هاشون قرار میگیرین که با استفاده از ( : ) از هم جدا شدن , مثل : user:password chsh , chfn و chage دستور chsh طبق مثال زیر برای تغیر شل پیش فرض استفاه میشه This is the hidden content, please ورود یا ثبت نام دستور chfn یک روش استانارد برای ذخیره اطلاعات در فیلد کامنت در فایل passwd فراهم میکنه که به جای اطلاعات معمول از اطلاعات مخصوص استفاده شده در یونیکس فینگر استفاه میکنه دستور finger به شما اجازه میده به راحتی در مورد یوزر ها اطلاعات کسب کنید This is the hidden content, please ورود یا ثبت نام البته به خاطر نگرانی های امنیتی در بیشتر لینوکس ها دستور فینگر غیر فعال شده یک نمونه از دستور chfn رو بدون پارامتر در مثال زیر میبینید This is the hidden content, please ورود یا ثبت نام This is the hidden content, please ورود یا ثبت نام حالا به مقدار فایل /etc/passwd نگاه کنید This is the hidden content, please ورود یا ثبت نام دستور chage مقادیر مرتبط با پسورد هارو دریافت و تنظیم میکنه d- مشخص کرن زمان اخرین تغیر پسورد E- مشخص کردن تاریخ انقضای پسورد I- مشخص کردن زمان غیر فعال شدن اکانت بعد از منقضی شدن پسورد m- مشخص کردن حداقل روز های ثابت موندن پسورد بعد از هر تغیر W- مشخص کرن تعداد روز هایی که قبل از منقضی شدن پسورد باید هشدار داده بشه گروه ها در لینوکس : گروه ها هم یکی دیگه از موضوعات امنیتی لینوکس هستن لینوکس ها با روش های مختلفی بحث گروه پیض فرض رو پیش میبرن بعضی از لینوکس ها یک گروه پیش فرض برای همه کاربر ها تعریف میکنن اگه سیستم شما هم همینکار رو میکنه باید مراقب باشید چون فایل هاتون ممکنه برای کاربرای دیگه هم قابل استفاده باشه بقیه لینوکس ها برای هر کاربر یک گروه جدا تعریف میکنن که از این مشگل امنیتی جلوگیری بشه هر گروه اسم خودش و یک کد منحصر به فرد داره که بهش میگیم gid شما میتونید از ابزار هایی برای اینجاد و مدیریت گروه خودتون استفاه کنید فایل /etc/group درست مثل یوزر اکانت ها , اطلاعات گروه ها هم در یک فایل نگه داری میشه این فایل شامل اطلاعات مربوط به هر گروه میشه که در مثال زیر یک نمونش رو میتونید ببینید This is the hidden content, please ورود یا ثبت نام مثل uid ها gid ها هم از الگوی خاصی تبعیت میکنن گروه هایی که برای اکانت های سیستمی در نظر گرفته میشه gid زیر 500 دارن و gid یوزر گروه ها از 500 شروع میشه محتوای فایل /etc/group از چهار فیلد تشکیل شدن , که به ترتیب : اسم گروه پسورد گروه gid گروه لیست یوزر هایی که به گروه تعلق دارن گرچه این موضوع مرسوم نیست ولی یوزر ها با استفاده از پسورد گروه میتونن عضو اون گروه بشن ایجاد گروه جدید : با استفاده از دستور groupadd شما میتونید گروه جدید اضافه کنید This is the hidden content, please ورود یا ثبت نام وقتی یک گروه جدید میسازید هیچ یوزری در حالت دیفالت عضوش نیست برای اضافه کردن یوزر بهش از دستور usermod استفاده کنید This is the hidden content, please ورود یا ثبت نام و همچنین با دستور groupmod میتونید مقادیر رو اصلاح کنید مثل پارامتر های -n و -g که برای تغیر اسم و gid استفاده میشن This is the hidden content, please ورود یا ثبت نام فایل پرمیشن ها : الان که با یوزر ها و گروه ها اشنا شدید وقتشه بریم سمت فایل پرمیشن ها , که قبلا اونارو در لیست فایل ها و دایرکتوری ها در کنار بقیه مشخصات مشاهده کردید This is the hidden content, please ورود یا ثبت نام اولین فیلد در لیست بالا پرمیشن های فایل ها و دایرکتوری هارو مشخص میکنه و اولین کاراکتر در فیلد هم نوغ اون ابجکت رو مشخص میکنه This is the hidden content, please ورود یا ثبت نام بعد از اون شما سه تا ست سه تایی میبینید که هر کدوم از ست های سه کاراکتری یک سطح دسترسی رو مشخص میکنن This is the hidden content, please ورود یا ثبت نام اگه یکی از پرمیشن ها گرفته شده باشه به جاش دش قرار میگیره ( - ) سه تا ست به معنای سه سطح امنیتی برای ابجکته ست اول , برای صاحب ابجکته ست دوم , برای گروهیه که ابجکت بهش تعلق داره ست سوم , برای بقیه یوزر هاست This is the hidden content, please ورود یا ثبت نام مثلا نمونه بالا نشون میده که : اولا ابجکتمون فایله , چون اولین کاراکتر دش هستش ( - ) سه کاراکتر بعدی که متعلق به صاحب فایله میگه که یوزر هر سه اجازه ( خواندن , نوشتن , اجرا ) فایل رو داره سه کاراکتر بعدی یا همون ست دوم میگه که گروه فایل هم همون دسترسی هارو داره ولی ست اخر که برای سایر یوزر هاست پرمیشن نوشتن رو نداره پرمیشن های پیش فرض : پرمیشن های پیش فرض از طریق umask اعمال و نگه داری میشن This is the hidden content, please ورود یا ثبت نام فایل با استفاده از سطح دسترسی پیشفرضی که برامون مشخص شده ساخته شد دستور umask پرمیشن های پیش فرض رو مشخص و نمایش میده This is the hidden content, please ورود یا ثبت نام اولین عدد مشخص شده یک موضوع امنیتیه , به اسم sticky bit سه عدد بعدی مربوط به پرمیشن ها میشه برای اینکه معادل عددی پرمیشن ها اینجا استفاده میشن نگاهی به جدول زیر بندازید This is the hidden content, please ورود یا ثبت نام به نحوه کارکرد umask و مقداری که به دستور میدیم در مثال زیر دقت کنید و برای درک بهتر با جدول بالا مقایسه کنید میبینید که اولا مقدار دسترسی ای که به دستور میدیم از فایل گرفته میشه نه اینکه اون مقدار ست بشه و اینکه این مقدار از عدد شش کم شده نه هفت This is the hidden content, please ورود یا ثبت نام توجه داشته باشید که مقدار تعریف شده روی دایرکتوری ها هم تاثیر داره This is the hidden content, please ورود یا ثبت نام زمانی که لازم باشه مقدار سطح دسترسی یه ابجکت رو مستقیم تغیر بدیم از دستور chmod به شکل زیر استفاده میکنیم This is the hidden content, please ورود یا ثبت نام میبینید که برخلاف مثال حالت پیشفرض , اینجا دقیقا سطح دسترسی ای که به دستور دادیم اعمال شده شما میتونید با استفاده از دستور chown مالکیت یوزر و گروه یک ابجکت رو تغیر بدید مثال زیر یوزر فایل رو تغیر میده This is the hidden content, please ورود یا ثبت نام مثال زیر هم یوزر و هم گروه فایل رو تغیر میده This is the hidden content, please ورود یا ثبت نام مثال زیر فقط گروه فایل رو تغیر میده , به کاراکتر دات دقت کنید This is the hidden content, please ورود یا ثبت نام البته برای تغیر فقط گروه فایل , میتونید از دستور chgrp هم استفاه کنید This is the hidden content, please ورود یا ثبت نام اشتراک فایل ها : همونطور که تا الان حدس زدید ایجاد گروه ها راهی برای به اشتراک گذاشتن سطح دسترسی به فایل هاست و به عنوان اشتراک گذاری کاربرد داره در بخش کد های مربوط به پرمیشن ها دیدید که وقتی یک فایل جدید میسازید , لینوکس پرمیشن پیش فرض فایل رو بر اساس یوزر ایدی و گروه ایدی مشخص میکنه , تا اجازه دسترسی به یوزر های دیگه هم بده شما یا باید پرمیشن های فایل رو تغیر بدید یا باید گروه پیش فرض فایل رو تغیر بدید به گروهی که یوزرا اونجان این موضوع میتونه ازاردهنده باشه اگه شما بخواید موارد زیادی رو بسازید و به اشتراک بزارید , که خوشبختانه راه حل مناسبی داره سه بیت دیگه هست که لینوکس برای هر فایل و دایرکتوری ذخیره میکنه : (The set user id (SUID وقتی یک فایل توسط یک یوزر اجرا میشه , برنامه تحت پرمیشن صاحب فایل اجرا بشه (The set group id (SGID برای فایل : وقتی یک فایل اجرا میشه برنامه تحت پرمیشن گروه فایل عمل کنه , برای دایرکتوری : اگه فایلی داخل دایرکتوری ساخته شد , از گروه دایرکتوری به عنوان گروه پیش فرض استفاده کنه The sticky bit فایل بعد از پایان پروسه در مموری باقی بمونه بیت SGID برای اشتراک گذاری با اهمیته , با فعال کردن این بیت میتونید تمام فایل هایی که در دایرکتوریمون ساخته میشن رو مجبور کنید تا در گروه دایرکتوری قرار بگیرن هر کدوم از سه مورد ذکر شده مثل بحث پرمیشن ها با کد شناخته میشن , و این همون عدد اول از چهار عدد umask هستش در لیست زیر نمونه کد ها و معانیشون رو میتونید ببینید 0 هیچ کدوم از بیت ها ست نشده 1 sticky bit ست شده 2 SGID bit ست شده 3 SGID & sticky bit ست شدن 4 SUID bit ست شده 5 SUID & sticky bit ست شدن 6 SUID & SGID ست شدن 7 همه بیت ها ست شدن برای ساخت یک دایرکتوری مخصوص اشتراک گذاری تنها نیاز دارید بیت SGID برای دایرکتوری ست بشه This is the hidden content, please ورود یا ثبت نام پایان قسمت هشتم از بخش اول پایان بخش اول واکنش ها : DeMoN، nnje، bigdeli و 9 نفر دیگر 9 3 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در مِی 7 2020 نویسنده گزارش اشتراک گذاری ارسال شده در مِی 7 2020 بخش دوم - قسمت اول در بخش اول درمورد مقدمات و موارد مرتبط با اسکریپتینگ صحبت کردیم , حتی ممکنه به نظر برسه بعضی جاها یکم هم در حال دور شدن از بحث اصلیمون بودیم , ولی جلوتر که بریم متوجه کنترل بیشترتون روی مباحث میشید , معتقد بودم با این روش میتونم روی پیشرفت سطح بخش های بعدی و کنترل شما در یادگیری تعادل برقرار کنم , امیدوارم با پیشروی در بخش دوم این موضوع قابل لمس بشه استفاده از چندین دستور : یکی از عناصر ماهیت اسکریپتینگ به طور ساده میشه قابلیت استفاده از چندین دستور , و یا استفاده از خروجی یک پروسه یا دستور به عنوان ورودی یه دستور دیگه , شل به شما این اجازه رو میده تا زنجیره وار دستورات رو در یک مرحله اجرا کنید برای اجرای همزمان دستورات با هم تنها کافیه اونها رو با هم در یک خط نوشته و با ( ; ) از هم جدا کنید , مثل : This is the hidden content, please ورود یا ثبت نام شما اولین شل اسکریپتتون رو نوشتید , در خط اول خروجی اولین دستور و در سه خط بعد خروجی دومین دستور چاپ شده , طبق ترتیبی که دستورات نوشته شدن با این روش شما میتونید دستورات رو تا 255 کاراکتر در هر خط بنویسید که با نوشتن تو یک فایل و اجرای اون دیگه لازم نیست هر بار این عمل تکرار بشه ساخت فایل اسکریپت : وقتی شروع به ساخت فایل شل اسکریپت میکنید , در وحله اول نیاز دارید تعین کنید فایل با کدوم شل خونده بشه , که این کار رو در اولین خط شل اسکریپتمون انجام میدیم , با استفاده از کد زیر : This is the hidden content, please ورود یا ثبت نام در یک خط نرمال شل اسکریپت از کاراکتر # برای مشخص کردن توضیحات استفاده میشه و کد های بعد از اون قدرت اجرایی ندارن , هرچند اولین خط از شل اسکریپتمون بحثش جداست همین موضوع باعث میشه شما حتی اگه توی یک شل دیگه اسکریپت رو اجرا کنید با توجه با مقدار خط اول اسکریپت ما با شل بش اجرا بشه بعد از مشخص کردن نوع شل , دستورات خط به خط نوشته میشه و از # هم برای کامنت ها استفاده میکنیم This is the hidden content, please ورود یا ثبت نام که البته طبق دستورالعمل مثال اول میتونید دستورات رو پشت سر هم بنویسید حالا اسکریپت رو تو یه فایل به اسم test1 ذخیره میکنیم تقریبا کار تمومه , فقط برای اجرای شل اسکریپتتون باید به نکات زیر توجه داشته باشید اگه مثل دستور ها بخواید اجراش کنید نتیجه نمیگیرید , مثال زیر : This is the hidden content, please ورود یا ثبت نام در این حالت شل فایل اسکریپتمون رو یه دستور قلمداد میکنه , و برای اجرای دستور میره سراغ پیدا کردنش , که محتوای متغیر PATH رو چک میکنه و چون در فایل ادرس چنین دستوری پیدا نمیشه ارور دستور پیدا نشد رو بهمون میده This is the hidden content, please ورود یا ثبت نام برای پیدا کردن اسکریپت توسط شل دو راه وجود داره یا باید ادرس دایرکتوری ای که اسکریپت اونجاست رو به متغیر PATH اضافه کنیم یا باید مستقیما مسیر اسکریپت رو به خود شل بگیم در مثال زیر ما از روش دوم استفاده میکنیم اگه یادتون بیاد گفته بودیم برای مشخص کردن مسیر فعلی میتونیم از یک دات به صورت تکی استفاده کنیم , مثال زیر : This is the hidden content, please ورود یا ثبت نام میبینید که شل , اسکریپتمون رو پیدا کرد ولی مشگل دیگه ای پیش اومده که اون نداشتن اجازه اجراس This is the hidden content, please ورود یا ثبت نام This is the hidden content, please ورود یا ثبت نام میبینید که دسترسی داده شد و اسکریپت توسط شل دیده و اجرا شد نمایش پیام ها : This is the hidden content, please ورود یا ثبت نام در صورت استفاده از کوتیشن در متن باید رشته رو بین کوتیشن دیگه ای گذاشت : This is the hidden content, please ورود یا ثبت نام استفاده از echo در اسکریپتمون : This is the hidden content, please ورود یا ثبت نام بعد از اجرای اسکریپت بالا : This is the hidden content, please ورود یا ثبت نام استفاده از متغیر ها : متغیر ها بهمون اجازه میدن اطلاعات مختلف رو در شل اسکریپتمون نگهداری کنیم برای استفاده توسط بقیه دستورات شما قبلا با متغیر های محیطی اشنا شدید , میتونید از مقادیری که نگه میدارن در اسکریپت استفاده کنید This is the hidden content, please ورود یا ثبت نام مقدار متغیر های محیطی USER & $UID & $HOME$ برای نمایش اطلاعات استفاده شدن This is the hidden content, please ورود یا ثبت نام برای غیر فعال کردن کاراکتر های عملگرا از بک اسلش استفاه میکنیم This is the hidden content, please ورود یا ثبت نام در غیر این صورت شل مقدار بعد از $ رو اسم متغیری تصور میکرد که ما قصد نمایش مقدارش رو داریم توجه کنید شل برای اسم متغیر ها به حروف کوچیک و بزرگ حساسه و شل خودکار نوع مقدار هر متغیر رو تشخیص میده This is the hidden content, please ورود یا ثبت نام شما میتونید حتی مقدار یک متغیر رو به عنوان مقدار به یک متغیر دیگه بدید This is the hidden content, please ورود یا ثبت نام توجه کنید ما با علامت $ مقدار رو مشخص کردیم , وگرنه اسم متغیر به عنوان رشته مقدار دهی میشد , مثال زیر : This is the hidden content, please ورود یا ثبت نام اختصاص خروجیه دستور به متغیر : این قابلیت یکی از کارامد ترین موارد شل اسکریپت هستش , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام یه مثال کاربردی تر : This is the hidden content, please ورود یا ثبت نام در اسکریپت بالا دستور دیت با فرمت عددی (دریافت خروجی به صورت روز ماه سال جمعا شش رقم) اجرا شده و خروجی دستور به متغیر امروز داده شده , سپس مقادیر دایرکتوری با اطلاعاتشون لیست شدن و خروجی دستور به جای نمایش , در یک فایل ریخته شده , که اخر اسم اون فایل مقدار متغیرمون قرار گرفته نکته مهم در مورد این قابلیت اینه که وقتی از این روش استفاده میکنید , دستور در ساب شل اجرا میشه و این باعث میشه به متغیر های لوکال اسکریپت دسترسی نداشته باشه , حواستون باشه که در صورت لزوم متغیر رو ارتقا بدید هدایت خروجی : ساده ترین حالت هدایت , فرستادن خروجی یک دستور به فایل هستش که شل بش از علامت بزرگتر برای این موضوع استفاده میکنه : This is the hidden content, please ورود یا ثبت نام اگه فایل مقصد از قبل وجود داشته باشه , خروجی روی اون فایل نوشته میشه : This is the hidden content, please ورود یا ثبت نام هدایت ورودی : در این حالت برعکس موضوع قبل از علامت کوچکتر استفاده میشه که به جای اینکه خروجی یک دستور به فایل هدایت بشه , محتوای یک فایل به عنوان ورودی به دستور هدایت میشه : This is the hidden content, please ورود یا ثبت نام در مثال بالا دستور فایل رو به عنوان ورودی دریافت کرده و مقدارش رو شمرده , که میگه 2 خط و 11 کلمه و 60 بایت در فایل وجود داره روش بعدی ، هدایت ورودی اینلاین نام داره که شما مقادیری مثل محتوای یک فایل رو بدون استفاده از فایل مستقیم به خود شل میدید , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام پایان قسمت اول از بخش دوم واکنش ها : NimaDix، Goodzilam، MR.wIzArD و 5 نفر دیگر 5 3 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در مِی 10 2020 نویسنده گزارش اشتراک گذاری ارسال شده در مِی 10 2020 بخش دوم - قسمت دوم استفاده از پایپ ها : بعضی وقتا شما نیاز دارید خروجی یک دستور رو به عنوان ورودی به یک دستور دیگه بدید این کار از طریق هدایت خروجی و ورودی که قبلا گفتیم شدنیه ولی راه اصلی نیست This is the hidden content, please ورود یا ثبت نام راه اصلی استفاده از پایپ ها یا همون روش پایپینگه , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام میبینید که خروجی همونه , در این حالت خروجی دستور اول ورودی دستور دومه برای پایپینگ میتونید از دستورات بیشتری هم استفاده کنید This is the hidden content, please ورود یا ثبت نام موضوع مهم بعدی که در همه زبان های برنامه نویسی اهمیت داره , ریاضیات هستش دو راه برای اعمال ریاضیات در بش اسکریپت وجود داره روش اول استفاده از دستور expr This is the hidden content, please ورود یا ثبت نام این دستور تعدادی عملگر رو میشناسه که در لیست زیر میتونید ببینید This is the hidden content, please ورود یا ثبت نام البته به صورت نرمال نمیتونید ازشون استفاه کنید , چون اکثرا این کاراکتر ها در شل معنای دیگه ای دارن , به همین دلیل از بک اسلش استفاده میشه This is the hidden content, please ورود یا ثبت نام مثال زیر روش دوم برای انجام ریاضیاته که معمولا از اون روش استفاده میکنیم , به همین دلیل روش اول رو صرفا در حد اشنایی توضیح دادم روش دوم استفاده از براکت ها : این روش ساده تر و جامع تره , مثال زیر رو ببینید This is the hidden content, please ورود یا ثبت نام میبینید که در این حالت حتی نیازی نیست نگران معنیه کاراکتر ها در شل بشید , خود شل به دلیل اینکه کاراکتر ها داخل براکت هستند هدف مارو تشخیض میده نکته بعدی که باید حل بشه محدودیت اعداد صحیح هستش شما میتونید از چند روش برای حل کردن موضوع استفاده کنید محدودیت اعداد صحیص رو در مثال زیر میتونید ببینید : This is the hidden content, please ورود یا ثبت نام پر استفاده ترین روش ، استفاده از ماشین حساب داخلیه بش هستش bc This is the hidden content, please ورود یا ثبت نام نمونه های اعشاری رو که مشاهده کردید , بعد از اتمام کار برای خارج شدن از محیط ماشین حساب باید دستور quit رو تایپ کنید اعشار این ماشین حساب توسط یک متغیر درونی کنترل میشه , به نام scale شما میتونید با تغیر مقدار این متغیر خروجی محاصباتتون رو جوری که میخواید بگیرید This is the hidden content, please ورود یا ثبت نام اینجا ما مقدار 4 رو به متغیر دادیم و اعشارمون طبق سفارشمون داده شد قبل از شروع کار ، بنر برنامه رو برای تمیز بودن صفحه رد کردیم با اپشن -q ضمن مثال بالا , این ماشین حساب متغیر هارو هم میشناسه This is the hidden content, please ورود یا ثبت نام استفاده از ماشین حساب بش در اسکریپت : اختصاص خروجیه دستور به متغیر رو یاتونه ؟ این همون راه استفاده در اسکریپتمونه , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام همونطور که دیدید , اول مقدار متغیر ماشین حساب رو 4 قرار دادیم , بعد مقدار محاصبه رو وارد کردیم , که تمام این به جای چاپ شدن با استفاده از پایپینگ به عنوان ورودی تزریق شد به ماشین حساب , و خروجی نهایی مراحل انجام شده در متغیر ما ریخته میشه شما میتونید به جای خود اعداد از متغیر ها هم استفاده کنید : This is the hidden content, please ورود یا ثبت نام This is the hidden content, please ورود یا ثبت نام وقتایی که مقادیر طولانی دارید به ترتیب زیر هم میشه مقادیر رو وارد کرد : This is the hidden content, please ورود یا ثبت نام چک کردن exit status هر دستوری که در شل اجرا میشه یه کد وضعیت اتمام داره که بعد از اتمام پروسه به شل تحویل داده میشه تا نتیجه کارش مشخص بشه این کد یه عدد بین 0 تا 255 هستش , شما میتونید از این عدد توی اسکریپت هاتون استفاده کنید لینوکس متغیری با نام علامت سوال فراهم میکنه که مقدار کد مربوط به اخرین دستور اونجا نگهداری میشه , شما باید به محض اتمام کار دستور ، از مقدار استفاده کنید : This is the hidden content, please ورود یا ثبت نام همونطور که میبینید کد وضعیت برای اجرای درست دستور میشه صفر , اگه اجرا با مشگلی مواجه بشه , کد از حالت صفر خارج میشه و بسته به شرایط مقدار میگیره , مثل : This is the hidden content, please ورود یا ثبت نام چند تا نمونه از کدهای وضعیت خارج از صفر براتون میزارم بهتر اشنا بشید با موضوع 1 ارور ناشناخته عمومی 2 استفاده نادرست از دستور شل 126 دستور نمیتونه اجرا بشه 127 دستور پیدا نشد 128 ارگمان خروج نا معتبر 128+x ارور مهم با لینوکس سیگنال اکس 130 وقتی دستور در حال اجرا بوده کنترل سی انجام شده 255 کد خارج از محدوده در مثال زیر کد 126 میگه که یوزر پرمیشن مناسب رو نداره This is the hidden content, please ورود یا ثبت نام نمونه متعارف بعدی که بعد از استفاده از پارامتر نامعتبر رخ میده This is the hidden content, please ورود یا ثبت نام دستور exit با استفاده از این دستور میتونیم به جای کد پیش فرض صفر برای اجرای مناسب , کد خودمونو بزاریم : This is the hidden content, please ورود یا ثبت نام البته میتونید از متغیر هم برای مقدار دهی استفاده کنید : This is the hidden content, please ورود یا ثبت نام فقط مواضب باشید اینجور موقع ها جواب محاسبات بیشتر از 255 نشه , وگرنه مقدار مونده رو از اول دور میزنه , به مثال زیر توجه کنید : This is the hidden content, please ورود یا ثبت نام پایان قسمت دوم از بخش دوم واکنش ها : Goodzilam، MR.wIzArD، C0d3!Nj3ct!0n و 5 نفر دیگر 5 3 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در مِی 13 2020 نویسنده گزارش اشتراک گذاری ارسال شده در مِی 13 2020 بخش دوم - قسمت سوم IF - THEN شرط : ساده ترین نوع شرط محسوب میشه , که میتونیم برای ایجاد شروط در اسکریپت استفاده کنیم , به فرمتش دقت کنید : This is the hidden content, please ورود یا ثبت نام در سایر زبان های برنامه نویسی ابجکتی که بعد از if میاد , بیانگر درست یا غلط بودن موضوعه اما این روشی نیست که شل بش ازش استفاده میکنه در شل بش دستور خط if اجرا میشه و در صورتی که کد وضعیت اجرای دستور صفر بود , دستورات بخش then اجرا میشن , و شل میره سراغ ادامه اسکریپت , fi هم اعلام پایان بخش شرطه , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام اسکریپت از دستور نمایش مسیر فعلی به عنوان شرط استفاده میکنه , در صورتی که کد وضعیت اجرای دستور صفر باشه , یا بهتره بگیم دستور با موفقیت اجرا بشه , درخواست ما که نمایش پیام هست انجام میشه , یه مثال دیگه میزنیم : This is the hidden content, please ورود یا ثبت نام در این مثال ما برای شرط از یک دستور نا معتبر استفاده کردیم , و چون دستور درست اجرا نشد کد وضعیت اجرا صفر نبود , و همین باعث شد بخش درخواستیه ما که شامل نمایش پیام بود اجرا نشه شما میتونید برای اجرای دستورات شرط چندین دستور قرار بدید , که در صورت درست بودن شرط همشون اجرا بشن This is the hidden content, please ورود یا ثبت نام شرط از دستور grep برای سرچ کردن فایل استفاه میکنه , که ایا مقدار متغیر ما در فایل هست یا نه در صورتی که مقدار وجود داشته باشه کد وضعیت اجرای دستور صفر داده میشه و دستورات درخواستیه ما به ترتیب اجرا میشن This is the hidden content, please ورود یا ثبت نام مثال زیر نمونه منفی دستور بالاس : This is the hidden content, please ورود یا ثبت نام IF - THEN - ELSE : در نمونه های قبل شما فقط یک اپشن داشتید , فقط در صورتی که کد صفر دریافت میشد دستورات اجرا میشدن در غیر این صورت اسکریپت دستورات بیرون از شرط رو ادامه میداد ولی در این بخش شما میتونید دستوراتی رو برای وقتی کد وضعیت غیر از صفر بود تعریف کنید , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام استفاده از شرط ها درون شرط های دیگه : بعضی وقتا شما نیاز دارید چند مورد رو در اسکریپتتون چک کنید , مثال زیر : This is the hidden content, please ورود یا ثبت نام به جای استفاده از if - then های جدا از هم شما میتونید از elif استفاده کنید , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام یک مثال دیگه , این بار همراه با else : This is the hidden content, please ورود یا ثبت نام شما همچنین میتونید از elif های متوالی استفاده کنید : This is the hidden content, please ورود یا ثبت نام دستور test برای if : تا اینجا شما داخل شرط فقط دستورات ساده بش رو دیدید , حتما فکر کردید ممکنه به جای قرار دادن این ستورات شرط مد نظر خودمون رو بزاریم و درست یا غلط بون شرط ما نتیجه رو مشخص کنه نه کد وضعیت اجرای دستور دستور test راهی فراهم میکنه تا شرط های متفاوت با اونایی که تا الان دیدید اعمال کنیم اگه شرط هایی که با این دستور گذاشته میشن درست باشن , دستور با مقدار کد وضعیت اجرای صفر به اتمام میرسه , و چون دستور test داخل if قرار داره دستور مثل واسط میانی عمل کرده و کد وضعیت اجرای خودش رو به if میده که خروجی این فرایند باعث میشه شرط مثل شرط های سایر زبان های برنامه نویسی عمل کنه فرمت کاملا مثل قبل میمونه فقط test اضافه شده , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام در مثال بالا دستور متغیر رو چک کرده و چون متغیر وجود داشته و مقدار داشته و مشگلی نبوده , دستور با کد وضعیت اجرای صفر به پایان رسیده و شرط با دریافت کد صفر پیش رفته و اما روش جایگزین test شما میتونید به جای استفاده از دستور test از براکت ها استفاده کنید هر شرطی که داخل براکت باشه مثل استفاده از دستور test عمل میکنه حتما باید بین شرط و براکت ها فاصله گذاشته بشه , فرمت : This is the hidden content, please ورود یا ثبت نام پایان قسمت سوم از بخش دوم واکنش ها : RT3N، Goodzilam، backpack و 4 نفر دیگر 6 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در مِی 16 2020 نویسنده گزارش اشتراک گذاری ارسال شده در مِی 16 2020 بخش دوم - قسمت چهارم برای استفاده از شرط ها میتونیم اونارو لایه بندی کنیم : This is the hidden content, please ورود یا ثبت نام از نمونه اول برای متصل کردن شروط به هم استفاده میشه , که در صورت اوکی بودن هر دو شرط شرایط به سمتی که میخواید بره نمونه دوم میگه هر کدوم از شرط ها اوکی بود قضیه حله توضیح دابل پرانتز ها و دابل براکت ها [[ ]] (( )) از دابل پرانتز ها برای محاسبات پیچیده تر عددی استفاده میشه , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام و به همین ترتیب از دابل براکت ها برای مقایسات رشته ای استفاده میکنیم , مثلا : This is the hidden content, please ورود یا ثبت نام فرمت زیر و فرایند رفتارش برای اجرای شرط های مورد نظر ما و ایجاد کد وضعیت اجرای صفر برای ادامه شرط رو که یادتونه This is the hidden content, please ورود یا ثبت نام در این موضوع از سه کلاس رفتاری تبعیت میشه : مقایسات عددی مقایسات رشته ای مقایسات فایلی استفاده از کلاس مقایسات عددی : مرسوم ترین متد های های این کلاس رو در بخش زیر براتون لیست کرم n1 -eq n2 چک میکنه عدد1 برابره با عدد2 یا نه n1 -ge n2 چک میکنه عدد1 برابر یا بزرگتره از عدد2 یا نه n1 -gt n2 چک میکنه عدد1 بزرگتره از عدد2 یا نه n1 -le n2 چک میکنه عدد1 برابر یا کوچکتره از عدد2 یا نه n1 -lt n2 چک میکنه عدد1 کوچکتره از عدد2 یا نه n1 -ne n2 چک میکنه عدد1 نابرابره با عدد2 یا نه این کلاس میتونه هم برای اعداد و هم متغیر های حاوی اعداد استفاده بشه , مثال : This is the hidden content, please ورود یا ثبت نام نکته مهم در مورد این کلاس اینه که از اعشار پشتیبانی نمیکنه , مثال : This is the hidden content, please ورود یا ثبت نام یادتون باشه خود شل بش تنها از اعداد صحیح استفاه میکنه استفاده از کلاس مقایسات رشته ای : مرسوم ترین متد های های این کلاس رو در بخش زیر براتون لیست کرم str1 = str2 چک میکنه رشته1 برابره با رشته2 یا نه str1 != str2 چک میکنه رشته1 نابرابره با رشته2 یا نه str1 < str2 چک میکنه رشته1 کوچکتره از رشته2 یا نه str1 > str2 چک میکنه رشته1 بزرگتره از رشته2 یا نه n str1- چک میکنه رشته1 طولش بیشتر از صفره یا نه z str1- چک میکنه رشته1 طولش صفره یا نه مثال : This is the hidden content, please ورود یا ثبت نام همونطور که دیدید مثال بالا برابر بودن دو مقدار رشته ای رو مقایسه کرد , برعکسش میشه مثال پایین : This is the hidden content, please ورود یا ثبت نام نمونه دیگه از مقایسه رشته ای , این بار مقایسه اندازه : توجه داشته باشید به نماد کوچکتر بزرگتر که اینجا استفاده میکنیم حتما یادتون میاد که از این نماد ها برای هدایت ورودی و خروجی استفاده میکریم , اگه اینجا با بک اسلش کار اصلیشون رو غیر فعال نکنیم مشگل زیر پیش میاد This is the hidden content, please ورود یا ثبت نام به دستور شرط و خروجیه جالبش دقت کردید ؟ ببینید اینجا شرط مدنظر ما به هیچ عنوان انجام نشده , پس چرا ظاهرا مقایسه بین دو رشته صورت گرفته و حتی مقدار درست هم نمایش داده شده ؟؟؟؟؟ در قسمت شرط شل علامت بزرگتر ما و کلا شرط مدنظر ما رو کاملا انکار کرده و از علامت بزرگتر به عنوان علامت هدایت دیتا استفاده کرده , که یعنی اومده مقدار متغیر اول رو ریخته تو یه فایل که از مقدار متغیر دوم به عنوان اسم اون فایل برای ایجادش استفاده کرده و چون عملی که انجام شده به هر حال درست انجام شده یک کد وضعیت اجرای صفر به شرط داده شده و بنابراین اسکریپت به طور عادی ادامه پیدا کرده و پیام قسمت اول شرط نمایش داده شده و چون کاملا تصادفی متغیر اولی مقدارش بزرگتر بوده ما در خروجی همه چیز رو در مورد شرط درست میبینیم به جز اینکه میتونیم فایل ساخته شده و مقدارش رو ببینیم برای حل این مشگل میتونید از بک اسلش استفاده کنید , مثال زیر : This is the hidden content, please ورود یا ثبت نام نکته بعدی در رابطه با این نوع مقایسه تفاوت حروف کوچک و بزرگه : This is the hidden content, please ورود یا ثبت نام از دو مورد اخر لیستمون هم برای اینکه ببینیم دیتایی وجود داره یا نه استفاده میکنیم , مثال زیر : This is the hidden content, please ورود یا ثبت نام استفاده از سومین نوع , کلاس مقایسات فایل و مورد های مربوطه رو به دلیل طولانی بودن در قسمت بعد بهش میپردازیم پایان قسمت چهارم از بخش دوم واکنش ها : DeMoN، RT3N، backpack و 1 نفر دیگر 3 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در مِی 21 2020 نویسنده گزارش اشتراک گذاری ارسال شده در مِی 21 2020 بخش دوم - قسمت پنجم کلاس مقایسات فایل : این متد به شما اجازه میده وضعیت فایل ها و دایرکتوری هارو تست کنید : d dir-name- چک میکنه ایا چنین ابجکتی وجود داره , و اگه وجود داره ایا دایرکتوریه e file- چک میکنه ایا چنین ابجکتی وجود داره f file- چک میکنه ایا چنین ابجکتی وجود داره , و اگه وجود داره ایا فایله r file- چک میکنه ایا چنین ابجکتی وجود داره , و اگه وجود داره ایا قابل خوندنه s file- چک میکنه ایا چنین ابجکتی وجود داره , و اگه وجود داره ایا مقدار داره w file- چک میکنه ایا چنین ابجکتی وجود داره , و اگه وجود داره ایا قابل نوشتنه x file- چک میکنه ایا چنین ابجکتی وجود داره , و اگه وجود داره ایا قابل اجراست O file- چک میکنه ایا چنین ابجکتی وجود داره , و اگه وجود داره ایا مال یوزر فعلیه G file- چک میکنه ایا چنین ابجکتی وجود داره , و اگه وجود داره ایا با یوزر فعلی هم گروهه file1 -nt file2 چک میکنه ایا فایل1 جدید تره از فایل2 file1 -ot file2 چک میکنه ایا فایل1 قدیمی تره از فایل2 این ابزار ها باعث میشه شما قابلیت چک کردن فایل سیستم رو با شل اسکریپت داشته باشید , مثال ها به ترتیب : چک کردن دایرکتوری : This is the hidden content, please ورود یا ثبت نام چک کردن موجودیت یک ابجکت : This is the hidden content, please ورود یا ثبت نام چک کردن فایل : This is the hidden content, please ورود یا ثبت نام چک کردن قابل خوندن بودن : This is the hidden content, please ورود یا ثبت نام چک کردن موجودیت مقدار فایل : This is the hidden content, please ورود یا ثبت نام چک کردن قابل نوشتن بودن : This is the hidden content, please ورود یا ثبت نام چک کردن قابل اجرا بودن : This is the hidden content, please ورود یا ثبت نام چک کردن مالکیت ابجکت : This is the hidden content, please ورود یا ثبت نام چک کردن تعلق به گروه : This is the hidden content, please ورود یا ثبت نام مقایسه جدید تر بودن و قدیمی تر بودن فایل ها : This is the hidden content, please ورود یا ثبت نام پایان قسمت پنجم از بخش دوم واکنش ها : Goodzilam، RT3N، backpack و 2 نفر دیگر 4 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در مِی 24 2020 نویسنده گزارش اشتراک گذاری ارسال شده در مِی 24 2020 بخش دوم - قسمت ششم استفاده از دستور case برای کوتاه کردن if-then-else : در بعضی شرایط مثل مثال زیر ما میتونیم از گیر دستورالعمل ها دربیایم و میانبر بزنیم یجورایی : This is the hidden content, please ورود یا ثبت نام الکی تکرار کردن کد هارو در مثال بالا دیدید ؟ حالا کاربرد مثال اصلی رو بهتر متوجه میشید : استفاده از case : فرمت و مثال : This is the hidden content, please ورود یا ثبت نام مشاهده کردید که چقدر کار ساده تر و تمیز تر انجام شد دقیقا مثل اسکریپت قبلی ورود سه یوزر اول مجاز بود , به یوزر چهارم پیام ممنوعیت داده شد و در نهایت برای هر مقدار ورودی دیگه ای پیام یوزر شما ثبت نشده داده شد حلقه ها : با استفاده از حلقه ها یاد میگیرید چطور پروسه هارو تکرار کنید دستور for : گاهی شما نیاز دارید بعضی دستورات تا زمان خاصی تکرار بشن , با استفاده از این دستور حلقه ای ساخته میشه که این کارو انجام میده , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام مشاهده کردید که متغیر در هر مرحله یکی از عناصر لیست رو به ترتیب نگه داشته و دستورات رو اجرا کرده و بعد عنصر بعدی بعد از اتمام لیست متغیر درون حلقه اخرین مقدار رو نگه میداره مگر اینکه تغیرش بدید , مثال زیر : This is the hidden content, please ورود یا ثبت نام همینطور میتونید از متغیر ها به عنوان لیست برای حلقه استفاده کنید : This is the hidden content, please ورود یا ثبت نام نمونه بعدی , استفاده از خروجی یک دستور به عنوان لیست در حلقه : This is the hidden content, please ورود یا ثبت نام در مثال بالا مقادیر لیستمون در یک فایل ذخیره شده بوده , و ما اون فایل رو با دستور cat خوندیم , و مقدار خروجی دستور رو به عنوان ورودی دادیم به متغیر داخل حلقه , توجه داشته باشید که در مثال بالا مقدار فایل خط به خط خونده میشه , یعنی مثل متغیر در مثال قبلی مقادیر با فاصله از هم جدا نمیشن بلکه هر کدوم در یک خط جدا قرار میگیرن جدا کننده فیلد ها : متغیر محیطی IFS) internal field separator) مشخص میکنه چه چیزی مرز بین فیلد هاست به عنوان مثال به صورت پیش فرض فاصله , تب و خط جدید تعریف شدن مثلا اگه شما بخواید فقط خط جدید به عنوان بخش بندی فیلد ها در نظر گرفته بشه , مقدار متغیر رو به مقدار زیر تغیر بدید IFS=$'\n' اضافه کردن مثال بالا به اسکریپت , باعث میشه شل علامت های فاصله و تب رو به عنوان جدا کننده فیلد قبول نکنه در اسکریپت های طولانی ممکنه در هر بخشی مقدار مشخص شده ای رو برای جدا سازی فیلد ها لازم داشته باشید و نیاز به تغیر های متعدد در متغیر فعلی داشته باشید , برای این کار قبل از تغیر در متغیر از مقدارش نمونه گیری میکنیم This is the hidden content, please ورود یا ثبت نام بسته به نیازتون مقادیر مختلفی میشه تعریف کرد , به صورت تکی یا دسته جمعی This is the hidden content, please ورود یا ثبت نام خوندن دایرکتوری با wildcard ها : شما میتونید با استفاده از for فایل های دایرکتوری رو بخونید وقتی اسم کامل فایل یا مسیرش رو نمیدونید این موضوع کاربرد پیدا میکنه This is the hidden content, please ورود یا ثبت نام دقت کنید در مثال بالا مقدار متغیر فایل رو در شرط ها بین دابل کوتیشن گذاشتیم در صورتی که در بخش اموزشش چنین چیزی نگفته بودیم ما این کارو کردیم چون در لینوکس فاصله بین اسم ابجکت ها عادیه و این باعث شد در صورت فاصله دار بودن اسم هر کدوم از فایل هایی که مرور شدن , هیچ مشگلی پیش نیاد یک مثال پویا تر : This is the hidden content, please ورود یا ثبت نام استفاه از استایل C برای for : در این حالت ما از دستور for در بش به سبک استفاده در زبان C الگو میگیریم This is the hidden content, please ورود یا ثبت نام متغیر i در مثال بالا نقش شمارنده داره , که در اولین بخش مقدار پیش فرضش رو گرفته و در بخش دوم تا زمانی که مقدارش کوچکتر از 10 باشه حلقه ادامه پیدا میکنه و در بخش اخر متغیر بعد از هر بار مرور حلقه مقدارش افزایش پیدا میکنه و اما حالت زیر مثال اصلیمونه , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام شما میتونید در این فرمت از چند متغیر هم استفاده کنید , اما فقط یک شرط استفاده میشه , مثال : This is the hidden content, please ورود یا ثبت نام پایان قسمت ششم از بخش دوم واکنش ها : backpack، RT3N، DeMoN و 2 نفر دیگر 4 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در مِی 30 2020 نویسنده گزارش اشتراک گذاری ارسال شده در مِی 30 2020 بخش دوم - قسمت هفتم دستور while : این دستور یه چیزی بین IF-Then و For عمل میکنه که ما یک شرط تعریف میکنیم که نسبت به اون حلقه تکرار بشه , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام همونطور که میبینید گفته شده تا زمانی که شرط چیزی که ما میخوایم نشده (مقدار متغیر بیشتر از صفره) حلقه ادامه پیدا کنه (چاپ مقدار و کم کردن از متغیر) شما میتونید از چند دستور برای این کار استفاده کنید ولی فقط کد وضعیت اجرای اخرین دستور ، شرط محسوب میشه This is the hidden content, please ورود یا ثبت نام دستور Until : این دستور کاملا برعکس دستور قبل کار میکنه , فرمت و مثال : This is the hidden content, please ورود یا ثبت نام یک مثال پویا تر با روش بیش از یک دستور : This is the hidden content, please ورود یا ثبت نام استفاده از حلقه ها داخل یکدیگر : This is the hidden content, please ورود یا ثبت نام یه مثال دیگه با تنوع نوع حلقه ها : This is the hidden content, please ورود یا ثبت نام به مثال زیر دقت کنید (ترکیب) : This is the hidden content, please ورود یا ثبت نام همچنین با ترکیب دو روش حلقه های درون هم و تغیر IFS میتونیم داخل فایل ها رو با حلقه ها مرور کنیم This is the hidden content, please ورود یا ثبت نام پایان قسمت هفتم از بخش دوم واکنش ها : RT3N، C0d3!Nj3ct!0n، Goodzilam و 2 نفر دیگر 4 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در ژوئن 2 2020 نویسنده گزارش اشتراک گذاری ارسال شده در ژوئن 2 2020 بخش دوم - قسمت هشتم کنترل حلقه ها : شما ممکنه فکر کرده باشید بعد از شروع کار یک حلقه , تا پایان کارش کنترلی روش ندارید که این موضوع حقیقت نداره و با استفاده از دستورات break و continue میتونید اتفاقات درون حلقه رو کنترل کنید دستور break : این یه دستور ساده برای متوقف کردنه که میتونید داخل هر نوع حلقه ای ازش استفاده کنید , مثال : This is the hidden content, please ورود یا ثبت نام این روش برای while و until هم استفاده میشه This is the hidden content, please ورود یا ثبت نام وقتی دارید با حلقه های درون هم کار میکنید , توجه داشته باشید که دستور کجا اجرا میشه , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام موقعیت هایی وجود داره که شما داخل حلقه درونی هستید و لازمه حلقه بیرونی متوقف بشه , برای این کار از break n استفاده میکنیم که n سطح حلقه هارو مشخص میکنه , مقدار پیش فرض یک هستش , که مربوط به حلقه فعلی میشه اگه شما مقدار رو برابر عدد دو قرار بدید , دستور یک سطح به سمت حلقه های بیرونی حرکت میکنه , مثال : This is the hidden content, please ورود یا ثبت نام دستور continue : این دستور مثل نمونه قبلی عمل میکنه ولی جالب تر , میشه گفت به تنهایی به جای دو دستور توقف و شروع عمل میکنه , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام توجه داشته باشید بعد از اجرای دستور عملیات داخل حلقه متوقف شده , بنابراین مواضب موارد کنترلی عملیات باشید , در مثال زیر یکی از بخش های کنترلی داخل خود حلقه تعبیه شده , مشگلی که به وجود میاد رو ببینید : This is the hidden content, please ورود یا ثبت نام همونطور که حدس میزنید در این دستور هم میتونیم در حلقه های داخلی سطح حلقه های بیرونی رو برای اجرای دستور مشخص کنیم , مثال : This is the hidden content, please ورود یا ثبت نام و در نهایت شما میتونید در شل اسکریپتتون خروجیه یک حلقه رو پایپ و یا ریدایرکت کنید این کار رو با اضافه کردن علامت بزرگتر به حلقه میتونید انجام بدید , مثال : This is the hidden content, please ورود یا ثبت نام یک مثال پویا تر : This is the hidden content, please ورود یا ثبت نام یک مثال از پایپ کردن خروجیه حلقه : This is the hidden content, please ورود یا ثبت نام پایان قسمت هشتم از بخش دوم واکنش ها : backpack، RT3N، Goodzilam و 1 نفر دیگر 3 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در ژوئن 9 2020 نویسنده گزارش اشتراک گذاری ارسال شده در ژوئن 9 2020 بخش دوم - قسمت نهم تا اینجا شما یاد گرفتید چجوری اسکریپت هایی بنویسید که با تمام ابجکت ها تعامل داشته باشند , اما مواقعی هستند که شما نیاز دارید اسکریپتتون با شخصی که اونو اجرا میکنه در تعامل باشه , مثل ابزار هایی از کالی لینوکس که با بش نوشته شدن شل بش راه هایی برای این کار در نظر گرفته , مثل پارامتر هایی که به برنامه اضافه میکنیم , یا اپشن ها و ... پارامتر ها : ساده ترین راه تزریق دیتا به اسکریپتتون هستند , که در زمان اجرای کد اعمال میشن : This is the hidden content, please ورود یا ثبت نام شل بش متغیر های مخصوصی رو برای دریافت پارامتر ها تعریف میکنه که بهشون میگن positional parameters این متغیر ها اعداد استاندارد هستند , که 0$ اسم اسکریپت رو نگه میداره و 1$ یا 2$ و ... تا 9$ پارامتر هارو نگه میدارن , به مثال زیر توجه کنید : This is the hidden content, please ورود یا ثبت نام در مثال بالا پارامتر ها مقدار عددی داشتند , شما میتونید از رشته هم استفاده کنید : This is the hidden content, please ورود یا ثبت نام توجه داشته باشید اگه در مثال بالا از اسمی که فاصله بینشه استفاده کنید بخش اول اسم به عنوان اولین پارامتر برداشته میشه : This is the hidden content, please ورود یا ثبت نام متوجه شدید که شل برای تمایز بین پارامتر ها از فاصله استفاده میکنه , بنابراین برای استفاده از مقادیر دارای فاصله از کوتیشن تک یا دابل استفاده میکنیم : This is the hidden content, please ورود یا ثبت نام ما از متغیر های نه گانه ی نگهدارنده پارامتر ها صحبت کردیم ولی بیشتر از نه پارامتر هم میشه تعریف کرد , فقط شکل خوندنشون تغیر میکنه , در مثال زیر نحوه خوندن پارامتر های شماره 10 و 11 رو میبینید : This is the hidden content, please ورود یا ثبت نام خوندن اسم اسکریپت : انجام این کار در اسکریپت های چند تابعی کاربرد پیدا میکنه , که به روش زیر انجام میشه : This is the hidden content, please ورود یا ثبت نام طبق مثال های اجرای مختلف اسکریپت مشاهده کردید که متغیر 0$ به چه شکلی عمل میکنه برای اینکه فقط اسم اسکریپت رو دریافت کنید (بدون مسیر) از دستور basename استفاده میکنیم : This is the hidden content, please ورود یا ثبت نام شما میتونید از این تکنیک برای اسکریپت هایی که چند تابعی هستند و توابع بر اسم اسکریپت تکیه دارن استفاده کنید , به مثال زیر توجه کنید : This is the hidden content, please ورود یا ثبت نام تست پارامتر ها : در اسکریپت های پارامتر دار مواضب خطا های مربوط به استفاده نادرست از پارامتر ها باشید , مثال : This is the hidden content, please ورود یا ثبت نام برای جلوگیری همیشه پارامتر هاتون رو چک کنید که ایا مقدار دارن یا نه : This is the hidden content, please ورود یا ثبت نام استقاده از متغیر های مخصوص پارامتر ها : در مثال بالا چک کردن مقدار پارامتر برای جلوگیری از بروز خطا رو دیدید , که البته راه اصلی نبود , استفاده از روش بالا در اسکریپت های دارای چندین پارامتر اشگال این موضوع رو نشون میده به جای تست تک به تک پارامتر ها میتونید تعداد پارامتر های وارد شده رو در نظر بگیرید بش یک متغیر مخصوص برای این موضوع در نظر گرفته متغیر مخصوص #$ تعداد پارامتر های وارد شده رو نگهداری میکنه , مثال زیر : This is the hidden content, please ورود یا ثبت نام مثال تست کردن پارامتر ها با این روش : This is the hidden content, please ورود یا ثبت نام همینطور میتونید فقط اخرین پارامتر وارد شده رو بیرون بکشید : This is the hidden content, please ورود یا ثبت نام پایان قسمت نهم از بخش دوم واکنش ها : Goodzilam، backpack، RT3N و 1 نفر دیگر 3 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در ژوئن 13 2020 نویسنده گزارش اشتراک گذاری ارسال شده در ژوئن 13 2020 بخش دوم - قسمت دهم قسمت قبل در مورد پارامتر ها , متغیر های نگه دارندشون و یک سری متغیر های مخصوص مرتبط صحبت کردیم دو متغیر مخصوص دیگه هستند که برای یک جا جمع کردن تمام پارامتر های ورودی استفاده میشن , متغیر های : *$ و @$ متغیر *$ تمام پارامتر هارو در قالب یک کلمه درمیاره , اما متغیر @$ پارامتر هارو جدا از هم در یک رشته قرار میده , مثال : This is the hidden content, please ورود یا ثبت نام همونطور که میبینید ظاهرا هر دو خروجی برابر با هم هستند تفاوت بنیادی ای که قبل تر گفتم در مثال زیر قابل لمسه : This is the hidden content, please ورود یا ثبت نام دستور shift : ابزار بعدی که شل در اختیارتون میزاره این دستوره , که با استفاده ازش میتونید پارامتر هارو یک واحد به سمت چپ بکشید یعنی مثلا : مقدار 3$ در 2$ قرار میگیره , مقدار 2$ در 1$ قرار میگیره , و مقدار 1$ از بین میره , توجه داشته باشید مقدار 0$ که اسم اسکریپته دست نخورده باقی میمونه , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام نکته مهم در مورد استفاه از دستور شیفت اینه که بعد از خارج شدن هر پارامتر از جایگاه شماره یک , مقدار از دست میره و قابل برگشت نیست شما میتونید با دادن پارامتر به دستور شیفت تعداد واحد ها در هر جابه جایی رو مشخص کنید , مثال زیر : This is the hidden content, please ورود یا ثبت نام با استفاده از روش بالا شما میتونید به راحتی از پارامتر هایی که نمیخواید چشم پوشی کنید کار با اپشن ها : در کار با بش حتما دستوراتی رو دیدید که هم از پارامتر ها استفاده میکنن هم از اپشن ها , اپشن ها حروفی همراه با یک دش قبلشون هستند که رو رفتار دستور تاثیر میزارن در بخش قبل شما نحوه استفاده از دستور شیفت برای پارامتر هارو دیدید , ما میتونیم همین کار رو برای اپشن ها هم انجام بدیم ، مثال : This is the hidden content, please ورود یا ثبت نام فرقی هم نمیکنه ترتیب اپشن ها چی باشه : This is the hidden content, please ورود یا ثبت نام مواقعی وجود داره که شما تمایل دارید از اپشن ها و پارامتر ها به طور همزمان استفاده کنید شل از دابل دش برای تشخیص تمام شدن لیست اپشن ها استفاده میکنه بعد از دیدن دابل دش اسکریپت شما سایر پارامتر هارو به عنوان پارامتر دریافت میکنه نه اپشن , در مثال زیر به تفاوت دو نوع اجرای اسکریپت دقت کنید : This is the hidden content, please ورود یا ثبت نام اپشن های مقدار دار : بعضی از اپشن ها به پارامتر نیاز دارن , در این موقعیت ها کامند لاین به این شکل درمیاد : This is the hidden content, please ورود یا ثبت نام اسکریپت شما باید متوجه باشه چه زمانی یک اپشن به پارامتر نیاز داره و بتونه این موضوع رو به طور مناسب مدیریت کنه , مثال زیر : This is the hidden content, please ورود یا ثبت نام مثل نمونه قبل در این حالت هم ترتیب مقادیر ورودی اهمیتی نداره : This is the hidden content, please ورود یا ثبت نام الان شما نمونه ابتدایی ایجاد اپشن در اسکریپت رو یاد گرفتید , ولی این نمونه محدودیت هایی داره مثل عدم ترکیب اپشن ها , مثال زیر : This is the hidden content, please ورود یا ثبت نام استفاده از دستور getopt : با استفاده از این ابزار بهتر میتونیم موارد مرتبط با اپشن ها و پارامتر هارو هندل کنیم این دستور میتونه لیست اپشن ها و پارامتر هارو به هر فرمی دریافت کنه و به صورت خودکار تبدیلشون کنه به فرمت مناسب , فرمت : This is the hidden content, please ورود یا ثبت نام بخش اول فرمت اپشن هارو تعریف میکنه , و حتی مشخص میکنه کدوم اپشن پارامتر میگیره : This is the hidden content, please ورود یا ثبت نام در این مثال همونطور که در خط دوم میبینید چهار اپشن و دو پارامتر تعریف شدن , که یکی از اپشن ها پارامتر هم میگیره در خط اول یک ( : ) جلوی حرف بی میبینید , به این معنی که این اپشن قراره پارامتر هم داشته باشه و همینطور میبینید که قابلیت تفکیک اپشن های به هم چسبیده رو هم داره اگه در قسمت اول دستور اپشنی که قصد تعریفش رو دارید مشخص نکنید با ارور زیر رو به رو میشید : This is the hidden content, please ورود یا ثبت نام که البته با اپشن q- میتونید از نمایش ارور جلوگیری کنید : This is the hidden content, please ورود یا ثبت نام استفاده از getopt در اسکریپت : برای این کار باید خروجی دستور getopt رو بدیم به دستور set در حالی که اپشن دابل دش براش ست شده , مثال : This is the hidden content, please ورود یا ثبت نام خوب دیدید که خروجی ها طبق انتظار بودن , اما اگه در یک پارامتر فاصله وجود داشته باشه چی ؟ This is the hidden content, please ورود یا ثبت نام دیدید که دابل کوتیشن ها هم نتونستن مارو به چیزی که میخوایم برسونن این یکی از دلایلی هستش که برای کار با اپشن ها و پارامتر ها مارو به سمت یه ابزار پیشرفته تر میکشونه ، که در قسمت بعد بهش میپردازیم پایان قسمت دهم از بخش دوم واکنش ها : C0d3!Nj3ct!0n، DeMoN، RT3N و 2 نفر دیگر 4 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در ژوئن 18 2020 نویسنده گزارش اشتراک گذاری ارسال شده در ژوئن 18 2020 بخش دوم - قسمت یازدهم پیشروی به سمت getopts فرمت و مثال : This is the hidden content, please ورود یا ثبت نام به جز تغیر در حالت اسکریپت و ساده تر شدنش , دو تفاوت اصلی بین این دستور و دستور قسمت قبل رو در مثال بالا مشاهده کردید اول اینکه دیدید در قسمت تعریف اپشن ها قبل از اسم اپشن ها یک ( : ) گذاشته شده , این علامت به جای اپشن q- در قسمت قبل گذاشته شده تا جلوی نمایش ارور گرفته بشه و دومین تغیر نوع تعریف پارامتر برای اپشن , دستور از متغیر محیطی OPTARG برای این کار استفاده میکنه این متغیر به صورت خودکار برای اپشنی که پارامتر دار معرفی شده پارامتر رو نگهداری میکنه بر خلاف نمونه قبلی در این دستور پارامتر ها میتونن حاوی فاصله باشن : This is the hidden content, please ورود یا ثبت نام همچنین شما میتونید بین اپشن ها و یا اپشن و پارامتر و یا هر دو حالت همزمان , هیچ فاصله ای نذارید : This is the hidden content, please ورود یا ثبت نام و همچنین ابزار قدرت تفکیک و تشخیص اپشن های تعریف نشده رو هم داره : This is the hidden content, please ورود یا ثبت نام ابزار میدونه چه زمانی اپشن ها رو رها کنه و به پردازش پارامتر ها بپردازه زمانی که شما نیاز به خوندن پارامتر ها داشتید میتونید از دومین متغیری که این ابزار باهاش کار میکنه با استفاده از شیفت برای رفتن به سمت پارامتر ها استفاده کنید متغیر محیطی OPTIND شامل مقدار لوکیشن فعلی , داخل لیست پارامترهاست ، مثال : This is the hidden content, please ورود یا ثبت نام استاندارد سازی اپشن ها : حالا که شما میتونید اسکریپت های اپشن دار بنویسید , این که چه حروفی برای اپشن ها استفاده بشه به عهده شماست اگرچه تعدادی حروف با معانی مشخص جا افتادند که اگه شما هم در اسکریپتتون از این حروف استفاده کنید , ابزارتون قابل استفاده تر میشه , مثال : a- نمایش همه ابجکت ها d- مشخص کردن یک دایرکتوری e- توسعه یک ابجکت f- مشخص کردن یک فایل h- نمایش دستورالعمل l- تولید یک فرمت کامل تر از خروجی o- مشخص کردن فایل برای دریافت خروجی q- میشه گفت عدم نمایش ارور ها r- پروسه های همزمان فایل ها و دایرکتوری ها s- اجرا در حالت سایلنت x- اجرای یک ابجکت دریافت ورودی از کاربر : این عمل با استفاده از دستور read انجام میشه , به مثال زیر توجه کنید : This is the hidden content, please ورود یا ثبت نام همچنین میتونید مستقیم با خود دستور بنر رو چاپ کنید : This is the hidden content, please ورود یا ثبت نام این دستور تمام بخش های ورودی رو در یک متغیر قرار میده , برای بخش بندی مقادیر ورودی بین متغیر ها , به صورت زیر عمل میکنیم : This is the hidden content, please ورود یا ثبت نام اگر برای دستور هیچ متغیری تعریف نکنید , دستور از متغیر محیطی REPLY برای دریافت دیتا استفاده میکنه This is the hidden content, please ورود یا ثبت نام شما میتونید برای وارد کردن اطلاعات توسط کابر زمان مشخص کنید , تا اگه اطلاعاتی وارد نشد اسکریپت از کارش نیوفته و کاری که جایگزین میکنید رو انجام بده این کار با اپشن t- انجام میشه و واحد های ثانیه ای دریافت میکنه ، مثال زیر : This is the hidden content, please ورود یا ثبت نام همچنین شما میتونید به جای محدودیت زمانی , از مشخص کردن تعداد کاراکتر های ورودی استفاده کنید این کار با اپشن n- و واحد های کاراکتری انجام میشه , مثال زیر : This is the hidden content, please ورود یا ثبت نام عدم نمایش مقدار ورودی کاربر ( مثل وارد کردن پسورد ) : این کار با اپشن s- انجام میشه , و مقدار وروردی در مانیتور دیده نمیشه در واقع مقدار ورودی در مانیتور چاپ میشه , ولی چون دستور رنگ مقدار رو با رنگ پس زمینه هماهنگ میکنه , نمیتونیم مقدار رو ببینیم : This is the hidden content, please ورود یا ثبت نام همچنین شما میتونید با این ابزار مقادیر ورودی رو از یک فایل دریافت کنید دستور این کار رو خط به خط انجام میده , به مثال زیر توجه کنید : This is the hidden content, please ورود یا ثبت نام پایان قسمت یازدهم از بخش دوم واکنش ها : backpack، C0d3!Nj3ct!0n، Goodzilam و 2 نفر دیگر 4 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در ژوئن 29 2020 نویسنده گزارش اشتراک گذاری ارسال شده در ژوئن 29 2020 بخش دوم - قسمت دوازدهم file descriptor ها : لینوکس هر ابجکتی رو به عنوان یک فایل هندل میکنه , که شامل پروسه های ورودی و خروجی هم میشه همچنین سیستم هر ابجکت فایلی رو با استفاده از یک فایل دیسکریپتر شناسایی میکنه فایل دیسکریپتر یک عدده که منحصرا فایل های باز در یک نشست رو شناسایی میکنه , هر پروسه اجازه داره تا 9 فایل دیسکریپتر در یک زمان داشته باشه , که شل بش سه تای اول رو (0,1,2) برای مقاصد مشخصی استفاده میکنه : This is the hidden content, please ورود یا ثبت نام این سه فایل دیسکریپتر مخصوص , ورودی و خروجی از اسکریپت شما رو هندل میکنن که شل ازشون برای هدایت ورودی و خروجی پیش فرض , به محل مناسب استفاده میکنه STDIN : این فایل دیسکریپتر ورودی استاندارد رو به شل ارجاع میده , که برای یک رابط کاربری ترمینال ورودی استاندارد میشه کیبور شل مقادیر ورودی با استفاده از کیبورد رو در STDIN دریافت و پردازش میکنه وقتی شما از علا مت ( > ) برای ارجاع استفاه میکنید لینوکس فایل دیسکریپتر ورودی استاندارد رو با فایلی که شما ارجاع دادید عوض میکنه , که یعنی اطلاعات فایل به نحوی به شل داده میشه که انگار همون لحضه از طریق کیبورد تایپ شدن به نحوه تغیر ورودی گرفتن شل از فایل کاربر دقت کنید : This is the hidden content, please ورود یا ثبت نام STDOUT : این فایل دیسکریپتر کارش ارجاع خروجی استاندارد شل هستش , که در یک رابط کاربری ترمینال خروجی استاندارد مانیتور محسوب میشه تمام خروجی شل , شامل برنامه ها و اسکریپت هایی که شما اجرا میکنید , به خروجی استاندارد هدایت میشن که میشه همون مانیتور اکثر دستورات بش خروجیشون رو در حالت پیشفرض به STDOUT هدایت میکنن , که البته میتونید به جایی که میخواید تغیرش بدید : This is the hidden content, please ورود یا ثبت نام و اما به اتفاقی که در مثال زیر میوفته دقت کنید : This is the hidden content, please ورود یا ثبت نام وقتی یک دستور باعث ایجاد ارور میشه , بر خلاف تغیر مسیر خروجی , شل ارور رو به سمتی که ما برای خروجی مشخص کردیم هدایت نمیکنه شل فایل خروجیه مارو ساخته ولی ارور بهش منتقل نشده شل ارور هارو جدا از خروجی نرمال هندل میکنه , اگه شما شل اسکریپتی مینویسید که در بک گراند اجرا بشه اغلب باید به پیام های خروجی ارسالی به یک لاگ فایل متکی باشید در این روش , اگه پیام اروری داده بشه روی لاگ فایل قابل رویت نیست , شما باید از روش دیگه ای استفاه کنید STDERR : شل با استفاده از فایل دیسکریپتر STDERR ارور هارو هندل میکنه اینجا جاییه که شل ارور های به وجود اومده در خودش و برنامه ها یا اسکریپت های اجرا شده در شل رو ارسال میکنه مسیر پیش فرض هر دو فایل دیسکریپتر STDOUT و STDERR به سمت مانیتور ارجاع داده میشه, اگرچه با مقادیر متفاوتی کار میکنن به همین دلیل همونطور که در مثال دیدید , وقتی شما خروجی پیش فرض رو ارجاع دادید , مسیر خروجیه ارور ها تغیری نکردن ارجاع ارور ها : شما با ارجاع خروجی اشنا شدید , ارجاع ارور ها هم فرق چندانی نداره فقط باید هنگام هدایت STDERR رو تعریف کنید , برای این کار چند راه وجود داره : فقط هدایت ارور : همونطور که قبلا دیدید عدد تعریف شده برای این فایل دیسکریپتر 2 هستش شما میتونید با قرار دادن این عدد کنار علامت هدایت به اسکریپت بگید فقط ارور ها تغیر مسیر بده : This is the hidden content, please ورود یا ثبت نام میبینید که پیام ارور به جای چاپ در مانیتور داخل فایل ما قرار گرفته یه مثال دیگه , این بار ترکیب استفاده از STDOUT و STDERR : This is the hidden content, please ورود یا ثبت نام هدایت ارور ها و دیتا : اگه میخواید هم دیتا و هم ارور هارو هدایت کنید باید از دو علامت هدایت استفاده کنید , این کار باعث میشه هر نوع از خروجی در فایل جداگونه ای که بهش میدیم قرار بگیره : This is the hidden content, please ورود یا ثبت نام اگه میخواید هر دو مقدار خروجی به یک فایل هدایت بشن از نماد & استفاده کنید : This is the hidden content, please ورود یا ثبت نام اگه شما بخواید مشخصا یک پیام ارور در اسکریپتتون ایجاد کنید , میتونید یک خط مشخص از خروجی اسکریپت رو به STDERR ارجاع بید برای ارجاع به فایل دیسکریپتر ها تنها کافیه هنگام هدایت خروجی علامت ( & ) رو به عدد مربوطه اضافه کنید : This is the hidden content, please ورود یا ثبت نام خروجیه این خط به سمت جایی هدایت میشه که محل مربوط به ارور هاست یک مثال پویا تر : This is the hidden content, please ورود یا ثبت نام در این مثال ظاهرا هیچ اتفاقی نیوفتاده , دلیلش اینه که در حالت پیشفرض STDERR به سمت STDOUT هدایت میشه نتیجه کار با تغیر مسیر STDERR قابل رویت میشه : This is the hidden content, please ورود یا ثبت نام برای ارجاع کامل خروجی اسکریپت با استفاده از دستور exec به روش زیر عمل میکنیم : This is the hidden content, please ورود یا ثبت نام شما همچنین میتونید این کار رو وسط اسکریپت و در جهات مختلف انجام بدید : This is the hidden content, please ورود یا ثبت نام شما از همین روش میتونید برای هدایت ورودی به اسکریپتتون استفاده کنید , مثال زیر : This is the hidden content, please ورود یا ثبت نام ساختن فایل دیسکریپتر های متعلق به خودتون : وقتی ورودی یا خروجی اسکریپت رو کنترل میکنید محدود به استفاده از سه نوع نام برده نیستید فایل دیسکریپتر های شماره 3 تا هشت هم اماده استفاده در اسکریپتتون هستند شما میتونید هرکدوم از اونا رو برای هدایت ورودی و خروجی به یک فایل استفاده کنید , مثال : This is the hidden content, please ورود یا ثبت نام همچنین میتونید به فایل مقدار اضافه کنید : This is the hidden content, please ورود یا ثبت نام نکته مهم برگردوندن مسیر پیشفرض فایل دیسکریپتر های استاندارد هستش برای این کار قبل از ریدایرکت کردن نوع استاندارد , از یک دیسکریپتر ثانویه برای هدایت به نوع استاندارد استفاده میکنیم , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام پایان قسمت دوازدهم از بخش دوم واکنش ها : backpack، Goodzilam، C0d3!Nj3ct!0n و 1 نفر دیگر 3 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در جولای 2 2020 نویسنده گزارش اشتراک گذاری ارسال شده در جولای 2 2020 بخش دوم - قسمت سیزدهم ادامه ایجاد فایل دیسکریپتر های الترناتیو : شما میتونید همونطور که در قسمت قبل خروجی الترناتیو تعریف کردید , فایل دیسکریپتر های الترناتیو برای ورودی تعریف کنید , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام همچنین شما میتونید یک فایل دیسکریپتر برای دریافت دیتا از یک فایل , و همچنین ارسال دیتا بهش ایجاد کنید در این متد شل از یک اشاره گر داخل فایل استفاده میکنه تا محل کنونی برای ادامه فعالیت مشخص باشه , مثال : This is the hidden content, please ورود یا ثبت نام به خط دوم داخل فایل , یا همون خروجی اسکریپتمون دقت کردید ؟ وقتی ما با دستور read خط اول فایل رو چاپ کردیم اشاره گر داخل فایل برای نشون دادن محل کنونی به شل , در محل اولین کاراکتر در خط دوم قرار گرفته , به همین دلیل وقتی خواستیم خروجی به فایل اضافه کنیم , مقدار خروجی روی خط دوم فایل نوشته و جایگزین شده وقتی قصد استفاده موازی از یک فایل رو دارید باید حتما به این نکته توجه کنید همچنین برای بستن یک فایل دیسکریپتر از دستور زیر همراه با شماره مورد نظر استفاده کنید , دستور و مثال : This is the hidden content, please ورود یا ثبت نام دیدید که به دلیل بسته بودن ارتباط دستور چاپ باعث شد ارور به وجود بیاد و خود ارور هم مبنی بر اینه که فایل دیسکریپتر استفاده شده ارجاع نشده نکته بعدی که باید در نظر داشته باشید اینه که ارجاع یک فایلی که وجود داره , باعث نوشتن روی دیتا های اون فایل میشه , مثال : This is the hidden content, please ورود یا ثبت نام برای لیست کردن فایل دیسکریپتر ها و محل ارجاعشون از دستور lsof استفاده میکنیم : This is the hidden content, please ورود یا ثبت نام در مثال بالا از اپشن p- برای مشخص کردن PID و از اپشن d- برای مشخص کردن فایل دیسکریپتر استفاده کردیم شل PID فعلی رو در متغیر محیطی $$ نگهداری میکنه , که برای مقدار دهی سریع در مثال بالا ازش استفاده کردیم , مثال استفاده در اسکریپت : This is the hidden content, please ورود یا ثبت نام بعضی وقتا قصد ندارید اسکریپتتون هیچ خروجی ای داشته باشه, مثل وقتایی که قراره بکگراند اجرا بشه برای این کار شما میتونید STDERR رو ریدایرکت کنید به یک فایل مخصوص به اسم null file هر اطلاعاتی که شل به این فایل بفرسته از بین میره محل استاندارد این فایل در سیستم های لینوکس /dev/null هستش This is the hidden content, please ورود یا ثبت نام این یک راه برای چاپ نشدن ارور هاست , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام استفاده به عنوان ورودی : This is the hidden content, please ورود یا ثبت نام فایل های موقت : لینوکس از دایرکتوری tmp/ برای نگهداری فایل های موقت استفاده میکنه همچنین دستور مخصوصی برای ساخت این فایل ها قرار داده This is the hidden content, please ورود یا ثبت نام و فایل های ساخته شده میتونن در دایرکتوری مخصوص نگه داری بشن ضمنا فایل های ساخته شده از umask پیشفرض تبعیت نمیکنن , این فایل ها دسترسی خوندن و نوشتن و فقط برای صاحب فایل در حالت پیشفرض قرار میدن برای ایجاد فایل از دستور مربوطه همراه با شش حرف اکس جلوی اسم فایل استفاده میکنیم که این حروف با شش کاراکتر برای اطمینان از واحد بودن اسم فایل جایگزین میشن , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام شما میتونید با خیال راحت تعداد زیادی فایل با یک اسم تعریف کنید : This is the hidden content, please ورود یا ثبت نام برای استفاده از این دستور در اسکریپت شما میتونید اسم فایل ساخته شده رو در یک متغیر برای دسترسی راحت قرار بدید , مثال زیر : This is the hidden content, please ورود یا ثبت نام ساخت فایل موقت در دایرکتوریه مخصوصشون tmp/ برای این کار تنها کافیه اپشن t- رو به دستور اضافه کنیم وقتی با این روش فایل ساخته بشه خروجی دستور مسیر کامل فایله نه فقط اسمش : This is the hidden content, please ورود یا ثبت نام یک مثال پویا تر : This is the hidden content, please ورود یا ثبت نام پایان قسمت سیزدهم از بخش دوم واکنش ها : backpack، C0d3!Nj3ct!0n و RT3N 2 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در جولای 8 2020 نویسنده گزارش اشتراک گذاری ارسال شده در جولای 8 2020 بخش دوم - قسمت چهاردهم ساخت یک tmp directory : اپشن d- به دستور میگه به جای یک فایل , یک دایرکتوری ایجاد کنه This is the hidden content, please ورود یا ثبت نام بعضی وقتا لازمه خروجی رو , هم به مانیتور و هم به یک فایل برای لاگ برداری بفرستیم به جای اینکه خروجی رو دو بار ریدایرکت کنیم , میتونیم از دستور tee استفاده کنیم این دستور مثل یک T - connector برای پایپ ها عمل میکنه , که دیتا رو از STDIN به دو مقصد ارسال میکنه This is the hidden content, please ورود یا ثبت نام دیدید که خروجی دستور همزمان در مانیتور و فایل مورد نظر ذخیره شد نکته مهم استفاده از دستور در حالت پیشفرضه که باعث میشه دیتا ها روی هم نوشته بشن : This is the hidden content, please ورود یا ثبت نام اگه میخواید دیتای جدید به جای جایگزین شدن به فایل اضافه بشه از اپشن a- استفاده کنید This is the hidden content, please ورود یا ثبت نام استفاده از این تکنیک برای ذخیره اطلاعات و نمایش همزمان به کاربر : This is the hidden content, please ورود یا ثبت نام سیگنال ها : لینوکس از سیگنال ها برای تعامل با پروسه های در حال اجرا استفاده میکنه مثل نمونه هایی که در قسمت های اولیه بخش اول مشاهده کردید , اعم از قطع , وصل و متوقف کردن پروسه ها شما میتونید با کد نویسی داخل اسکریپتتون بهش بگید با دریافت هر سیگنال چه کاری انجام بده , و به این ترتیب وقتی اسکریپت در حال اجراست با سیگنال های ارسالی کنترلش کنید بیشتر از 30 سیگنال برای تولید توسط سیستم و اپلیکیشن ها در لینوکس تعریف شده , که ما چند نمونه از پر استفاده ترین هاشون در اسکریپت نویسی رو در لیست زیر میبینیم : 1 SIGHUB معلق کردن پروسه 2 SIGINT قطع کردن پروسه 3 SIGQUIT متوقف کردن پروسه 9 SIGKILL حذف پروسه 15 SIGTERM ترمینیت کردن پروسه در صورت امکان 17 SIGSTOP استاپ کردن پروسه 18 SIGTSTP استاپ یا پاز کردن پروسه 19 SIGCONT ادامه دادن پروسه متوقف شده ایجاد سیگنال ها : شل بش به شما این امکان رو میده که سیگنال های ارسالی با استفاده از کلید های ترکیبی کیبورد رو تعریف کنید , این امکان مواقعی به کار میاد که مثلا میخواید یک اسکریپت در حال اجرا رو استاپ کنید کلید های ترکیبی Ctrl + C یک سیگنال از نوع SIGINT میسازن و سیگنال ساخته شده رو به پروسه در حال اجرای فعلی ارجاع میدن شما میتونید اینو روی یک دستور که در حالت نرمال زمان زیادی میگیره امتحان کنید, مثال : This is the hidden content, please ورود یا ثبت نام یا مثلا کلید های ترکیبی Ctrl + Z به جای نمونه قبلی یرای توقف موقت پروسه نه قطع کردنش , که این کار با ارسال سیگنال SIGTSTP انجام میشه This is the hidden content, please ورود یا ثبت نام به خروجی نمونه دوم که دقت کنید , قسمت اول یک عدد بین براکت هاست که جاب نامبر تعریف شده توسط شل هستش , که این اعداد منحصر به فرد هستند و برای دسترسی و کنترل پروسه کاربرد دارن , که به ترتیب از یک شروع میشن , مثلا اگه الان شما یک پروسه دیگه رو استاپ کنید شماره جاب 2 بهش تعلق میگیره در این حالت اگه شما بخواید شل رو ببندید به خاطر جلوگیری از منحل شدن فرایند پشت پرده شل بهتون هشدار میده در مورد عواقب بسته شدنش , مثال : This is the hidden content, please ورود یا ثبت نام همچنین شما میتونید قبل از خروج از دستور ps برای دیدن پروسه ها استفاده کنید : This is the hidden content, please ورود یا ثبت نام ستون S در خروجی دستور وضعیت پروسه رو اعلام میکنه اگه با این حال هنوز قصد خروج از شل رو دارید کافیه یک بار دیگه دستور exit رو تایپ کتید و یا الان که پروسه ایدی هارو میبینید با استفاده از دستور kill یک سیگنال SIGKILL به پروسه ای که قصد از بین بردنش رو دارید بفرستید : This is the hidden content, please ورود یا ثبت نام شما میتونید به جای اینکه سیگنال هارو مدیریت نشده ازاد بزارید تا روی اسکریپت در حال اجراتون تاثیر بزارن , قدرت اجراییشون رو ازشون بگیرید این کار با استفاده از دستور trap انجام میشه , و فرمت استفاده ازش به این صورته : This is the hidden content, please ورود یا ثبت نام به این صورت که شما در قسمت کامندز دستوراتی که میخواید شل اجرا کنه رو مینویسید , و با یک فاصله اسم و یا شماره ی سیگنال هایی که قصد دارید ترپ بشن رو تایپ میکنید , مثال زیرو ببینید : This is the hidden content, please ورود یا ثبت نام در خروجی اسکریپت مثال بالا مشاهده کردید که قدرت اجرایی سیگنال مربوط به کلید های ترکیبی Ctrl + C که مرتبط با قطع روند پروسه محسوب میشه , ازش گرفته شده و هر بار که از این کلید های ترکیبی برای قطع پروسه استفاده شده , به جای عمل پیشفرض , دستور ما که اینجا یک دستور چاپ بوده اجرا شده و اسکریپت تا اخر به کارش ادامه داده پایان قسمت چهاردهم از بخش دوم واکنش ها : RT3N، C0d3!Nj3ct!0n و backpack 3 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در جولای 21 2020 نویسنده گزارش اشتراک گذاری ارسال شده در جولای 21 2020 بخش دوم - قسمت پانزدهم خوب دوستان میریم سمت ادامه بحث سیگنال ها و Trapping : در Trap کردن Script Exit شما به جای استفاه از این تکنیک در اسکریپتتون , در پایان فرایند اسکریپت ازش استفاده میکنید که یعنی به محض اتمام فرایند اسکریپت , دستور ما اجرا میشه , برای این کار سیگنال EXIT رو به دستور Trap میدیم , مثال : This is the hidden content, please ورود یا ثبت نام همونطور که مشاهده کردید با پایان کار اسکریپت دستور ما اجرا شد , این اتفاق میتونه در صورت اجبار اسکریپت به اتمام هم رخ بده : This is the hidden content, please ورود یا ثبت نام برای مدیریت Trap مشخص شده , در بخش های بعدی اسکریپت , به راحتی میتونید با مقادیر جدید در ادامه اسکریپت Trap رو تغیر بدید , مثال : This is the hidden content, please ورود یا ثبت نام تغیرات توضیح داده شده رو میتونید در خروجی اسکریپت ببینید : This is the hidden content, please ورود یا ثبت نام شما همچنین میتونید با اضافه کردن ( - ) یا ( -- ) و سیگنال مورد نظر Trap مرتبط رو پاکسازی کنید , و رفتار سیگنال رو به حالت پیشفرض تغیر بدید , مثال : This is the hidden content, please ورود یا ثبت نام اجرای اسکریپت در حالت بک گراند : بعضی وقتا اجرای اسکریپت در کامند لاین به صرفه نیست , مثلا وقتی فرایند اسکریپت زمان زیادی میبره , شما میتونید با اجرای اسکریپت درحالت بک گراند همون موقع کنترل کامند لاین رو دوباره به دست بیارید , بدون اینکه منتظر اتمام اسکریپت باشید , و اسکریپت هم پشت پرده به کارش ادامه میده برای اینکه به شل دستور بدید اسکریپتتون رو در حالت بک گراند اجرا کنه کافیه علامت ( & ) رو بعد از دستور قرار بدید , مثال : This is the hidden content, please ورود یا ثبت نام میبینید که خروجی job number و PID بعد از زدن اینتر داده میشه , که عدد داخل براکت ها شماره جاب و کد بعد از اون ایدی پروسه هستش و بدون معطلی برای اتمام فرایند اسکریپت ، کنترل شل به دست شما برمیگرده ( ولی اسکریپت در حالت اجرا قرار داره ) بعد از اینکه فرایند اسکریپت در حال اجرا ( در بک گراند ) به اتمام برسه , یه پیام مشابه کد زیر نمایش داده میشه , که شامل job number , job status و اسم پروسه ای که در حالت بک گراند اجرا شده بود هستش : This is the hidden content, please ورود یا ثبت نام توجه داشته باشید که وقتی پروسه ای در حالت بک گراند داره اجرا میشه , همچنان برای STDOUT و STDERR از مانیتور استفاده میکنه , مثال : This is the hidden content, please ورود یا ثبت نام به همین دلیل وقتی خروجیه اسکریپت در حال چاپ شدنه شما میتونید بدون تداخل با فرایند اسکریپت دستورات خودتونو اجرا کنید , مثال : This is the hidden content, please ورود یا ثبت نام شما میتونید در همون تایم تعداد بیشتری پروسه رو وارد حالت بک گراند کنید , مثال : This is the hidden content, please ورود یا ثبت نام میبینید که با هر بار فرستادن پروسه ها به بک گراند , یک جاب نامبر و پروسه ایدی جدید برای هر پروسه چاپ شد , که میتونید با دستور ps لیستشون کنید : This is the hidden content, please ورود یا ثبت نام پایان قسمت پانزدهم از بخش دوم واکنش ها : C0d3!Nj3ct!0n، RT3N و backpack 2 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
R3DN4X314 ارسال شده در جولای 25 2020 نویسنده گزارش اشتراک گذاری ارسال شده در جولای 25 2020 بخش دوم - قسمت شانزدهم ( قسمت اخر از بخش دوم ) ادامه اجرای اسکریپت حتی بعد از بستن ترمینال : بعضی وقتا شما یک اسکریپت رو در یک ترمینال اجرا میکنید و اجازه میدید تا پایان کارش در حالت بک گراند به فعالیت ادامه بده , حتی اگه سیشن ترمینال رو ببندید , این عمل با استفاده از دستور nohub قابل اجراست این دستور یک بلاک کننده دستور اجرا میکنه که جلوی سیگنال SIGHUB در صورت ارسال گرفته بشه , این کار باعث عدم جلوگیری از ادامه فرایند اسکریپت بعد از بستن سیشن ترمینال میشه فرمت استفاده از دستور : This is the hidden content, please ورود یا ثبت نام به دلیل اینکه بعد از کاربردی شدن دستور فوق دیگه ترمینالی برای تعامل و مخصوصا خروجی وجود نداره , تمام مقادیر STDOUT و STDERR اسکریپت مستقیما ارجاع داده میشه به فایلی به نام nohub.out در صورت استفاده مکرر از متد بالا تمامی خروجی های اسکریپت ها به همون فایل ساخته شده ارجاع داده میشن , بنابراین مواضب اجرای اسکریپت های مختلف به این روش ( در یک دایرکتوری ) باشید , ممکنه نتایج گمراه کننده بشن This is the hidden content, please ورود یا ثبت نام کنترل کرن جاب ها : قبل تر شما نمونه ای از این کارو مشاهده کردید ( Ctrl + C ) که باعث جلوگیری از ادامه روند پروسه میشد , که بعدش شما میتونستید پروسه رو kill یا restart کنید در کل استفاده از function های start , stop , kill رو job Control مینامیم , با جاب کنترل شما کنترل کامل روی پروسه های در حال اجرای محیط شل دارید کلید اصلی برای job controling دستور jobs هستش , که باعث میشه شما جاب های فعال در شل رو ببینید : This is the hidden content, please ورود یا ثبت نام توجه داشته باشید ( $$ ) نگه دارنده ی مقدار پروسه ی فعلی هستش ( خود اسکریپت به محض اجرا ) شما میتونید از کلید های ترکیبی Ctrl + Z برای stop کردن پروسه استفاده کنید : This is the hidden content, please ورود یا ثبت نام دوباره همون اسکریپتو اجرا میکنیم , این بار در بک گراند همراه با هدایت خروجی : This is the hidden content, please ورود یا ثبت نام حالا وضعیت رو با تفاوت جاب ها میتونیم ببینیم : This is the hidden content, please ورود یا ثبت نام میتونیم با اپشن l- پروسه ایدی هاشون هم ببینیم : This is the hidden content, please ورود یا ثبت نام این دستور اپشن های دیگه ای هم داره که چند تا از پر کاربرد هاشون رو براتون میزارم : l- نمایش pid همراه با job number n- فقط جاب هایی رو لیست میکنه که وضعیتشون نسبت به اخرین وضعیتی که شل نمایش داده بود تغیر کرده p- فقط pid های جاب هارو نمایش میده r- فقط جاب های در حال اجرا رو نمایش میده s- فقط جاب های stop شده رو نمایش میده وقتی جاب هارو نمایش میدیم کنار دوتا از جاب ها علامت های مثبت و منفی داخل براکت قرار داره , که میتونن جالب باشن جابی که کنارش علامت مثبت قرار داره جاب پیشفرض محسوب میشه و جابی که کنارش علامت منفی قرار داره جانشین جاب پیشفرض محسوب میشه , مثال زیرو ببینید : This is the hidden content, please ورود یا ثبت نام در جاب کنترل شما میتونید جاب های استاپ شده رو چه در بک گراند چه در حالت نرمال ری استارت کنید برای شروع مجدد یک جاب در حالت بک گراند از دستور bg استفاده میکنیم , مثال : This is the hidden content, please ورود یا ثبت نام مشاهده کردید که به دلیل اینکه جاب مورد نظر جاب پیشفرض بود دستور bg خودش جاب رو شناسایی کرد در حالت های دیگه باید از شماره جاب برای مشخص کردنش استفاده کنید , مثال : This is the hidden content, please ورود یا ثبت نام برای شروع مجدد جاب استاپ شده در حالت نرمال به جای بک گراند میتونید از دستور fg استفاده کنید : This is the hidden content, please ورود یا ثبت نام در سیستم های multitasking مثل لینوکس , کرنل موظفه CPU time هر پروسه رو مشخص کنه , که بر اساس یک مقدار عددی از 20- تا 20+ مقدار دهی میشه ، که مقدار پیشفرض برای پروسه های اجرا شده توسط شل بش 0 قرار داره نکته مهم در مورد درجه های تنظیم گفته شده برعکس بودنشونه , به این صورت که هرچی عدد پایین تر یا زیر صفر منفی تر باشه , اولویت بالاتری تنظیم میشه برای تغیر مقدار پیشفرض یک پروسه از دستور nice استفاده میکنیم برای اینکه یک دستور با مقدار اولویت متفاوتی اجرا بشه از اپشن n- برای دستور nice استفاه میکنیم و عدد مورد نظر رو قرار میدیم , مثال : This is the hidden content, please ورود یا ثبت نام در خروجی دستور ps و در ستون ni مقدار تغیر داده شده رو مشاهده میکنید اما اگه بخواید مقدار اولویت رو افزایش بدید ( عدد کمتر یا منفی ) با پیام زیر مواجه میشید : This is the hidden content, please ورود یا ثبت نام دستور nice به یوزر های معمولی اجازه افزایش اولویت رو نمیده , عدم موفقیت در مثال بالا به این دلیل بود , اما با این حال میبینید که جلوی اجرای دستور گرفته نشده شما میتونید به جای استفاده از اپشن n- فقط از کاراکتر ( - ) قبل از عدد مربوط به سطح اولویت استفاده کنید , مثال : This is the hidden content, please ورود یا ثبت نام متوجه گمراه کنندگی موضوع در این سبک از استفاده شدید ؟ عدد مورد نظر چون بعد از علامت دش قرار گرفته با عدد منفی اشتباه گرفته میشه , در صورتی که در ستون ni در خروجی دستور ps عدد مثبت قرار داره و برای مقدار دهی منفی باید از دو علامت دش استفاده بشه , حالا این موضوع به اضافه ی برعکس بودن عدد اولویت دهی میتونه کاملا گمراه کننده باشه , به همین دلیل سعی کنید خیلی ساده از همون اپشن n- استفاده کنید تا اینجا ما مقدار دهی رو هنگام اجرای دستور یا اسکریپت اعمال کردیم , اما اگه بخوایم مقدار اولویت دستوری که در حال اجراست رو تغیر بدیم چی ؟ یا مثلا بخوایم از مقداری که دادیم صرف نظر کنیم و مقدار رو افزایش یا کاهش بدیم ؟ اینجا از دستور renice استفاده میکنیم طرز استفاده به همون شکله ولی چون خود دستور یا اسکریپت قبلا اجرا شده از پروسه ایدی ابجکت برای تغیرش استفاده میکنیم , مثال زیر رو ببینید : This is the hidden content, please ورود یا ثبت نام توجه داشته باشید از اونجایی که افزایش اولویت و تغیر در پروسه های دیگر کاربر ها محدود شده , برای کنترل کامل روی ابزار از یوزر روت استفاده کنید پایان قسمت شانزدهم از بخش دوم پایان بخش دوم واکنش ها : RT3N، backpack و C0d3!Nj3ct!0n 2 1 نقل قول لینک به دیدگاه به اشتراک گذاری در سایت های دیگر گزینه های به اشتراک گذاری بیشتر...
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .