[توسط Jari Aalto] اگر شما در حال توسعه برنامههای بزرگتر میباشید، قابلیت آزمایش(آنچه برنامه انجام خواهد داد) قبل از استفاده واقعی، میتواند در تشخیص مشکلات، پیش از وقوع آنها در عمل، به شما کمک کند. در اینجا ما تابع Run() را تعریف میکنیم که برای نمایندگی تمام فرمانها به کار میرود. اگر وضعیت TEST فعال باشد، فرمانها به طور واقعی اجرا نمیشوند، بلکه فقط برای بازبینی در صفحه نمایش چاپ میشوند. حالت آزمایش با گزینه خط فرمان -t برنامه فعال میشود که از طریق دستور داخلی getopt پوسته Bash خوانده میشود.
قلب نمایش تجربی، تابع Demo() است که در آن میبینیم فراخوانها چگونه آزمایش را به کار میبندند. دقت به خرج بدهید که موقع وجود هر فوق کاراکتر پوسته در فرمان، چگونه از نقلقولها استفاده میشود. همچنین توجه نمایید که چگونه به فراخوان 'Run' در فراخوانیهای داخل پوسته فرعی نیز نیاز دارید. نمایش فراخوانهای پوسته فرعی تحت وضعیت آزمایش چنانکه از آخرین خروجی میتوانید ببینید، محدود است.
میتوانید راهکار آزمایش مشابهی به برنامه خودتان اضافه کنید، به وسیله: (1کپی Run() (2 به کار گرفتن متغیر TEST (3 ویرایش تمام فراخونیهای فرمان پوسته برای انجام Run(). در عمل، قرار دادن برنامه پوسته به طور کامل تحت وضعیت آزمایش کردن خالص بسیار دشوار ست، زیرا ممکن است برنامهها ساختارهای خیلی پیچیدهای از پوسته را استفاده کنند و وابسته به خروجیهایی باشند که توسط دستورات قبلی تولید میشوند. بازهم، امکان پیشرفت قابلیت آزمایش کردن بهتر از هیچ است و شانس بهتری برای بازبینی اجرای برنامه قبل از انجام آن در عمل، میباشد.
ادامه مطلبBASH به منظور ایجاد فرمانهای جدید دارای قابلیت بارگیری واحدهای اجرایی ترجمه شده است، که این واحدها نسبت به آنچه با فراخوانی فرمانهای خارجی میتواند به دست آید، ارتباط مستقیمتری با سیستمعامل فراهم میکنند. اینها دستورات داخلی قابل بارگیری نامیده میشوند.
دستورات داخلی قابل بارگیری، به طور معمول باید از میان درخت منابع bash برای سیستم شما کامپایل بشوند:
.../bash-4.0$ CC=whatever ./configure .../bash-4.0$ make .../bash-4.0$ exec ./bash .../bash-4.0$ cd examples/loadables/ .../loadables$ make .../loadables$ enable -f finfo finfo .../loadables$ help finfo
این مطلب نیاز به پایگاهی دارد که bash در آن میداند چگونه بارگیری اشیاء و کتابخانههای مشترک را پشتیبانی کند. در اکثر سیستمها، bash این مورد را با تابع dlopen() پشتیبانی میکند. اگر شما در نگارشهای قدیمیتر HP-UX هستید، یک وصله وجود دارد: bash-4.2-shl.diff (نگارش قدیمیتر آن: bash-4.0-shl.diff) که توسط GreyCat ایجاد شده است.
همچنین اطلاعات کمی مفصلتر را در این آدرسها میتوانید پیدا کنید:
Bash قابل بارگیری (آخرین ویرایش 2012-10-05 13:51:15 توسط GreyCat)
یک اسکریپت wrapper یکی از معمولترین موارد استفاده برای اسکریپت پوسته است. کار یک wrapper به جای تلاش برای دوباره پیادهسازی قابلیت یک ابزار موجود، انتقال دادن ورودیهایش همراه با تغییر و تبدیل اندک به برخی ابزارهای دیگر است. این مورد، مقدار قابل توجهی از زحمت و دردسر را کاهش میدهد.
اصلیترین شکل یک اسکریپت wrapper این است:
#!/bin/sh exec /some/weird/place/toolname ${1+"$@"}
به طور کلی، موقع نوشتن یک wrapper، ما قابلحملترین ترکیب دستوری ممکن را به کار میبریم. اگر تمام آنچه میخواهیم انجام بدهیم، انتقال دادن ورودیها به برخی برنامههای دیگر است، معمولاً به کد تجملی، مختص-پوسته یا مختص-پلاتفرم نیازی نیست. در حقیقت، شاید کد فوق میتوانست با یک پیوند نمادین جایگزین شده باشد. یک اسکریپت wrapper کمی واقعگرایانهتر، میتواند مانند این به نظر آید:
#!/bin/sh CDR_SECURITY=8:dvd,clone,.... export CDR_SECURITY exec cdrecord-prodvd ${1+"$@"}
این wrapper یک متغیر محیط را تنظیم میکند، و سپس یک برنامه دیگر را با همان شناسهها و ورودی که اسکریپت wrapper دریافت کرده، فراخوانی میکند.
ادامه مطلباین صفحه هنوز در حال توسعه میباشد. احتمال دارد برخی قسمتها کیفیت خیلی خوبی نداشته باشند.
مندرجات
یک پردازش، نمونهِ در حال اجرایِ یک برنامه در حافظه است. هر پردازش به وسیله یک شماره تحت عنوان PID، یا تعیین کننده هویت پردازش شناخته میشود. هر پردازش دارای قطعهِ تخصیص یافتهای از حافظه است، که مخصوص خودش میباشد، و از سایر پردازشها قابل دستیابی نیست. این جایی است که پردازش متغیرها و سایر دادههایش را ذخیره میکند.
کرنل تمام این پردازشها را پیگردی میکند، و مقدار اندکی از فوقدادههای اصلی در باره آنها را در جدول پردازش ذخیره مینماید. به هرحال، هر پردازش در حدود حقوق ویژه اعطایی توسط کرنل، خود مختار است. وقتی یک پردازش آغاز شده باشد، انجام هر کاری با آن غیر از تعلیق(pause)، یا خاتمه دادن آن دشوار است.
فوقدادههای ذخیره شده توسط کرنل، یک «نام» پردازش و «سطر فرمان» را شامل میگردد. این موارد قابل اعتماد نیستند، «نام» پردازش آن است که شما وقتی برنامه را اجرا کردید، بیان نمودید، و ممکن است هیچگونه رابطهای با نام فایل برنامه نداشته باشد. (در برخی سیستمها، پردازشهای در حال اجرا نام خودشان را نیز میتوانند تغییر بدهند. برای مثال، sendmail از این مورد برای نشان دادن وضعیت خود استفاده میکند.) بنابراین، موقع کار با یک پردازش، برای اینکه قادر باشید با آن کاری انجام بدهید باید PID آن را بدانید. جستجوی پردازشها به وسیله نام، به شدت لغزشپذیر است.
ادامه مطلباین صفحه روشهایی را که در آنها اعتبار سنجی مبتنی بر کلید SSH ممکن است ناموفق گردد، و برخی اقداماتی را که شما میتوانید برای حل آنها به عمل آورید، تشریح میکند. شکست تصدیق اعتبارِ کلید، احتمالاً رایجترین مشکل برای کاربران جدید در آزمودن SSH است، و پاسخگویی مکرر به این پرسشها خسته کننده است....
این نظر اجمالی، مفاهیم اصلی تصدیق اعتبار کلید عمومی را برای آنهایی که هنوز چیز زیادی در مورد آن نمیدانند، شرح میدهد.
کلید عمومی اعتبار سنجی، به کار بردن رمزنگاری برای اثبات آنکه شما مالک مطمئن اعتبارنامه میباشید را شامل میگردد، بدون آنکه واقعاً آن اعتبارنامه را برای طرف دیگر آشکار سازد. مخصوصاً، سرویسگیرنده یک کلید خصوصی را نگهداری میکند، که ممکن است با یک عبارت عبور رمزی شده یا نشده باشد. سرویسدهنده یک کلید عمومی را نگهداری میکند. سرویسدهنده و گیرنده یک روش Zero-knowledge proof [1] را به کار میبرند، که در این روش سرویسگیرنده ثابت میکند که نگهدارنده کلید خصوصی است، اما در عمل کلید محرمانه را انتقال نمیدهد.
ادامه مطلب