این صفحه هنوز در حال توسعه میباشد. احتمال دارد برخی قسمتها کیفیت خیلی خوبی نداشته باشند.
مندرجات
یک پردازش، نمونهِ در حال اجرایِ یک برنامه در حافظه است. هر پردازش به وسیله یک شماره تحت عنوان PID، یا تعیین کننده هویت پردازش شناخته میشود. هر پردازش دارای قطعهِ تخصیص یافتهای از حافظه است، که مخصوص خودش میباشد، و از سایر پردازشها قابل دستیابی نیست. این جایی است که پردازش متغیرها و سایر دادههایش را ذخیره میکند.
کرنل تمام این پردازشها را پیگردی میکند، و مقدار اندکی از فوقدادههای اصلی در باره آنها را در جدول پردازش ذخیره مینماید. به هرحال، هر پردازش در حدود حقوق ویژه اعطایی توسط کرنل، خود مختار است. وقتی یک پردازش آغاز شده باشد، انجام هر کاری با آن غیر از تعلیق(pause)، یا خاتمه دادن آن دشوار است.
فوقدادههای ذخیره شده توسط کرنل، یک «نام» پردازش و «سطر فرمان» را شامل میگردد. این موارد قابل اعتماد نیستند، «نام» پردازش آن است که شما وقتی برنامه را اجرا کردید، بیان نمودید، و ممکن است هیچگونه رابطهای با نام فایل برنامه نداشته باشد. (در برخی سیستمها، پردازشهای در حال اجرا نام خودشان را نیز میتوانند تغییر بدهند. برای مثال، sendmail از این مورد برای نشان دادن وضعیت خود استفاده میکند.) بنابراین، موقع کار با یک پردازش، برای اینکه قادر باشید با آن کاری انجام بدهید باید PID آن را بدانید. جستجوی پردازشها به وسیله نام، به شدت لغزشپذیر است.
ادامه مطلباین صفحه روشهایی را که در آنها اعتبار سنجی مبتنی بر کلید SSH ممکن است ناموفق گردد، و برخی اقداماتی را که شما میتوانید برای حل آنها به عمل آورید، تشریح میکند. شکست تصدیق اعتبارِ کلید، احتمالاً رایجترین مشکل برای کاربران جدید در آزمودن SSH است، و پاسخگویی مکرر به این پرسشها خسته کننده است....
این نظر اجمالی، مفاهیم اصلی تصدیق اعتبار کلید عمومی را برای آنهایی که هنوز چیز زیادی در مورد آن نمیدانند، شرح میدهد.
کلید عمومی اعتبار سنجی، به کار بردن رمزنگاری برای اثبات آنکه شما مالک مطمئن اعتبارنامه میباشید را شامل میگردد، بدون آنکه واقعاً آن اعتبارنامه را برای طرف دیگر آشکار سازد. مخصوصاً، سرویسگیرنده یک کلید خصوصی را نگهداری میکند، که ممکن است با یک عبارت عبور رمزی شده یا نشده باشد. سرویسدهنده یک کلید عمومی را نگهداری میکند. سرویسدهنده و گیرنده یک روش Zero-knowledge proof [1] را به کار میبرند، که در این روش سرویسگیرنده ثابت میکند که نگهدارنده کلید خصوصی است، اما در عمل کلید محرمانه را انتقال نمیدهد.
ادامه مطلبمحتویات
سیگنالها ابزار اصلی برای ارتباطات میانپردازشی غیر همزمان میباشند. یعنی یک پردازش (A) میتواند به پردازش دیگر (B) بگوید در یک زمانی که به جای پردازش B توسط پردازش A انتخاب شده، کاری را انجام بدهد. (مانند جستجوی یک فایل توسط پردازش B هر چند ثانیه یکبار، این عمل polling نامیده میشود و زمانبندی آن به جای پردازش A توسط پردازش B کنترل میشود.)
سیستم عامل تعداد محدودی سیگنال فراهم مینماید که میتوانند برای گفتن انجام کاری به یک پردازش ارسال بشوند. سیگنالها هیچ اطلاعات اضافی را حمل نمیکنند، تنها اطلاعاتی که پردازش به دست میآورد آن است که سیگنال دریافت شده است. پردازش حتی نمیداند که چه کسی سیگنال را ارسال نموده.
غیر از اینکه پردازش از قبل فرمان خاصی بگیرد، اکثر سیگنالها کُشنده هستند، یعنی عمل پیشفرضی که یک پردازش به مجرد دریافت یک سیگنال انجام خواهد داد، یک خروج بیدرنگ است. (استثناها: SIGCHLD به طور پیشفرض صرفنظر میگردد، SIGSTOP پردازش را متوقف میسازد، و SIGCONT پردازش را از سر میگیرد.) برخی سیگنالها (از قبیل SIGQUIT) نیز باعث میشوند پردازش علاوه بر خروج یک فایل core باقی بگذارد.
یک پردازش ممکن است به جای خروج بواسطه دریافت یک سیگنال، انجام عمل متفاوتی را انتخاب کند. این عمل توسط تنظیم یک گرداننده سیگنال (یا trap) انجام میشود. trap باید قبل از اینکه سیگنال دریافت شود تنظیم شده باشد. وقتی پردازش بواسطه اینکه یک trap برای آن تنظیم شده است یک سیگنال دریافت میکند، گفته میشود سیگنال را در تله انداخته است.
سادهترین کاری که برای انجام دادن با یک پردازش میتواند انتخاب شود، نادیده گرفتن سیگنال است. قاعدتاً یک ایده نامناسب است، مگر اینکه برای یک مقصود خیلی خاص انجام گردد. صرفنظر نمودن از سیگنالها غالباً منجر به پردازشهای فراری میگردد که تمام قدرت CPU را مصرف میکنند.
به طور عمومیتر trapها میتوانند برای جلوگیری کردن از یک سیگنال کُشنده، انجام پاکسازی، و سپس خروج موقرانه تنظیم گردند. برای مثال، برنامهای که فایلهای موقتی ایجاد میکند و مایل است قبل از خروج آنها را حذف نماید. اگر برنامه توسط یک سیگنال مجبور به خروج بشود، قادر نخواهد شد فایلها را حذف کند مگر اینکه سیگنال را در تله بیاندازد.
در یک اسکریپت پوسته، trap فرمان مورد استفاده برای برقرار کردن یک گرداننده سیگنال است. فرمان trap به پنج روش مختلف میتواند استفاده شود:
ادامه مطلب
در عمل کامپیوترها نمیتوانند کاراکترها و علائم را ذخیره کنند، آنها فقط اعداد را ذخیره میکنند. روشهای بیشماری برای نمایش دادن کاراکترهای زبان انسانی( مانند حرف A، علامت به اضافه، وغیره ) به عنوان عدد، وجود دارد، و این امر که روشهای متفاوت بسیار زیادی، واقعاً به کار برده شد، به بینظمی منجر گردیده است.
کامپیوترهای اولیه (حداقل در ایالات متحده) در دو استاندارد برای طرحریزی(نگاشت) کاراکترهای US English به اعداد و بالعکس، به یکدیگر نزدیک شدند: ASCII و EBCDIC. دومی به تدریج تا اواخر قرن بیستم منسوخ گردید و ASCII ( کد استاندارد امریکایی برای تبادل اطلاعات) را به عنوان استاندارد اصلی باقی گذاشت.
مشکل با ASCII آن است که برای زبانهای غیر از انگلیسی، یا حتی برای برخی کلمات انگیسیِ وابسته به مزیتهای انشایی نویسنده، یا شاید نوشته شده با آوا نماها (به عنوان مثال rôle و naïve) خیلی محدود است. ASCII تنها بیست و شش حرف از الفبای انگلیسی (بزرگ و کوچک)، ارقام 0 تا 9، و مقداری نشانهگذاری اصلی را پوشش میدهد -- به طور معمول آنهایی که شما در صفحه کلید US کامپیوتر میبینید. در ماشینهای یونیکسی برای دیدن فهرست آنها میتوانید man ascii را تایپ کنید.
اکثر کامپیوترها از یک بایت هشت بیتی به عنوان واحد ذخیرهشان (یعنی یک دامنه از 0 تا 255 هنگامی که مانند اعداد صحیح غیر منفی بیان میشوند) استفاده میکنند. ASCII فقط کاراکترهای هفت بیتی (0 تا 127) تعریف میکند، یک میرات روزهایی که ارتباطات راه دور دادهها به طور قابل ملاحظهای آهسته و بیشتر مستعد خطا بود. چون ASCII تنها نصف محدوده یک بایت را استفاده میکند، این مطلب فضایی را برای افراد باقی گذاشت که مجموعههای کاراکتری خودشان را داخل یک بایت منفرد تعریف کنند.
(بسیاری از کاربران DOS/Windows مایکروسافت باور دارند که ASCII تمام دامنه 0 تا 255 را با صورتکهای خندان و کاراکترهای ترسیم خطوط و مانند آن پوشش میدهد. این تصور نادرست است. مجموعه کاراکتر معروف DOS در حقیقت IBM code page 437 است، که یکی از چندین فوقمجموعه ASCII میباشد. ASCII خودش منحصر به 127 کاراکتر است.)
ادامه مطلبپرسشهای بسیاری در باره چگونگی استفاده ار یک فایل الگو دریافت نمودهایم، این به معنای یک فایل با placeholder(جای نگهدارنده)هایی در آن است، که میخواهیم در زمان اجرا با کمیتها جایگزین نماییم. چند شکل متفاوت از این پرسش وجود دارد، و به طوریکه انتظار دارید، چند پاسخ متفاوت بر اساس نیازمندیهای واقعی.
اساسیترین نیاز آن است که autoconf گنو به کار میبرد: یک فایل الگوی پیشساخته با مواردی %PLACEHOLDER% در آن، و کمیتهایی در متغیرهای ویژه پوسته که میخواهیم استفاده کنیم. بر این وظیفه بخصوص، sed بسیار خوب منطبق میشود:
sed -e "s/%PLACEHOLDER%/$variable/g" \ -e "s/%FIRSTNAME%/$firstname/g" \ ... "$templatefile" > "$outputfile"
نشانهگذاری %FOO% همان است که autoconf عملاً برای placeholderهایش استفاده میکند، انتخابش به این جهت است. اگر متغیرها بتوانند شامل کاراکترهای
یک شکلِ جایگزین این پرسش عبارت است از، «من یک فایل با بسط پارامترهای پوسته در آن دارم، مانند $foo. من از قبل نمیدانم کدام متغیرها استفاده خواهند شد، بنابراین نمیتوانم دقیقاً یک لیست از تمام آنها دریک فرمان تنومند sed بسازم.» (در اینجا سطرهای جدید داخل متغیرها خیلی بیشتر معمول هستند، اما خوشبختانه آنها مشکلی در راه حلی که ارایه میدهیم نشان نمیدهند.)
این مشکل میتواند به وسیله ساختن یک HereDocument و تغذیه نتیجه به یک پوسته برای بسط یافتن، حل بشود:
{ echo "cat <<EOF" cat "$templatefile" echo "EOF" } | sh > "$outputfile"
توجه: اگر یک نتیجه غیرمنتظره که شامل EOF در انتهای خروجی است، به دست میآورید، احتمالاً فایل الگوی شما فاقد کاراکتر سطرجدید در انتها میباشد.
به خاطر بیاورید تا زمانی که رشته نگهبان (در موقعیت ما EOF) در سطر اول نقلقولی نشده باشد در بدنه یک HereDocument جایگزینیها انجام میشوند. ما در اینجا از این مطلب بهرهگیری میکنیم.
همچنین، توجه نمایید که جایگزینی در یک پوسته جدید sh (یا bash یا ksh، هر چه که شما لازم دارید) انجام میشود، نه در پوسته جاری. بنابراین، هر متغیری که شما میخواهید استفاده کنید باید export شده باشد.
چون هر جایگزینی فرمان در فایل الگو به عنوان کُد پوسته اجرا خواهد شد، اهمیت دارد که هر فایل الگویی که به این طریق استفاده میشود تحت کنترل شما باشد، و توسط یک کاربر تولید نشده باشد. به شما هشدار داده میشود.
فایلهای الگو (آخرین ویرایش 2010-08-26 15:12:58 توسط cei-gla-cpk2)