در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
زبانهای برنامهنویسی بسیاری برای کاربرد در لینوکس وجود دارند و شما میتوانید مفسرهایشان را بسادگی آب خوردن، از اینترنت دریافت کنید.
در گام نخست، ما میکوشیم با کمک پوسته(shell) معروف لینوکس، bash برنامهای را آغاز کنیم و آنرا گسترش دهیم. تمرکز اصلیمان رویC خواهد بود و بنابراین، اگر شما زبانC را در حد شناسایی شیوه نگارش(Syntax) میشناسید، همین حالا ادامه را بخوانید.
انواع برنامههای لینوکسی
برنامههای کاربردی لینوکس دو نوع فایل دارند: اجرایی(executable) و اسکریپتی .(script) فایلهای اجرایی برنامههایی هستند که مستقیما توسط کامپیوتر اجرا میشوند، و معادل ویندوزیشان، فایلهایی با پسوند.exe است. اسکریپتها هم مجموعهای از دستورات (برای یک برنامه دیگر) یک مفسرند تا آنها را اجرا کند. اسکریپتها هم معادل فایلهای .bat یا .cmd یا فایلهای تفسیر شده زبان بیسیک در ویندوز هستند.
یکی از ویژگیهای لینوکس این است که برای تعیین اجرایی یا اسکریپتی بودن فایل، نیازی به داشتن قالب نامگذاری یا پسوندگذاری نیست و از قراردادی بهنام ویژگیهای فایل سیستم(File System Attributes) برای تشخیص برنامه بودن فایل پیروی میکند. بههمین جهت، میشود بسادگی فایلهای اسکریپتی را با فایلهای اجرایی جابهجا کرد، بدون آنکه به افراد، برنامهها یا فایلهایی که از آنها استفاده میکنند، اطلاع داده شود و تاثیری بر آنها بگذارد. در حقیقت، در سطح کاربر هیچ فرقی بین این دو نیست.
وقتی شما وارد سیستم لینوکس میشوید، با یک برنامه پوسته تعامل دارید که برنامهها درست همانند کاری که خط فرمان (command prompt) ویندوز میکند، اجرا میکنید. برنامه shell دایرکتوریهای خاصی را جستجو کرده و برنامه را از آن اجرا میکند. دایرکتوریهایی که جستجو در آنها انجام میشود، داخل متغیر محیطی PATH وجود دارند، درست همانند متغیر PATH در ویندوز. مسیر جستجو (که شما میتوانید به متغیر آن اضافه کنید) توسط سرپرست (Admin) سیستم ایجاد شده و اغلب شامل مکانهای استانداردی است که برنامهها در آن نصب میشوند. این مسیرهای استاندارد عبارتند از:
/bin:باینریها، برنامههایی که در بوت شدن سیستم استفاده میشوند.
/usr/bin:باینریهای کاربر، برنامههای استانداردی که در دسترس کاربرند.
/usr/local/bin:باینریهای محلی، برنامههایی که متعلق به عملیات نصب خاصی هستند.
حالا سرپرست میتواند برای خودPATH را بهگونهای تغییر دهد که شامل دایرکتوریهایی بشود که برنامههای مدیریتی در آن وجود دارند، برای نمونهsbin/ : وusr/sbin/ .
کامپوننتهای دلبخواهی سیستم عامل و نرمافزارهایthird-party معمولا در زیرشاخهopt/ نصب میشوند و بسته به اسکریپت نصب آن برنامه، ممکن است دایرکتوری خودشان را به PATH سیستم عامل شما بیافزایند.
نکته: توجه اکید داشته باشید که لینوکس برای جدا سازی مدخلهایPATH از کاراکتر نقطه ویرگول (;) استفاده میکند، اما ویندوز و MsDos برای جدا کردن از کاراکتر کاما (,) استفاده میکنند. (اول یونیکس از ; استفاده کرد، پس بروید از مایکروسافت بپرسید چرا مدل را عوض کرده، نه اینکه چرا مدل یونیکسی فرق دارد!)
در اینجا یک متغیر نمونه PATH را مشاهده میکنید:
usr/local/bin:/bin:/usr/bin:.:/home/neil/bin:usr/X11R6/bin//
بهعنوان مثال این متغیر این مسیرها را در خود جای داده است:
1. دایرکتوری فعلی: (علامت .)
2. دایرکتوری اصلی/home/neil/bin) :)
3. دایرکتوریX Window System
کامپایلر
از زمانهای قدیم و دور، که سیستمها بر پایه استانداردهای POSIX بودند، به کامپایلر C، CC میگفتند، سالها گذشت و شرکتهای مختلف اقدام به عرضه کتابخانهها و کامپایلرهای گوناگون از C کردند، اما هنوز که هنوز است این اصطلاح جا نیفتاده است.
در آن زمان که استانداردهای POSIX در حال آماده شدن بود، تعریف استانداردی برای CC که بتواند با تمام عرضهکنندگان همخوانی داشته باشد، غیر ممکن مینمود. بهجای آن، کمیته تدوین POSIX تصمیم گرفت حکم جدیدی برای C صادر کند: 98.C وقتی این حکم حضور داشته باشد، دیگر مستقل از ماشین (سختافزار) میتوان دستور را انتخاب کرد.
در سیستمهای لینوکسی که سعی بر پیاده سازی استانداردهای 98C دارند، میتوان همه یا بخشی از آن را پیادهسازی شده یافت، cc و یا gcc کامپایلر سیستمی C هستند، که اغلب GNU C Compiler یا همان gcc است و در یونیکس cc بیشتر کاربرد دارد.
ما ازgcc استفاده میکنیم؛ به دو علت: نخست اینکه همیشه با توزیعهای گوناگون لینوکس همراه است و از استاندارد ANSI در C پشتیبانی میکند، اگر احیانا لینوکس خود را دوست دارید و gcc را نصب شده ندارید، میتوانید با مراجعه به سایتwww.gnu.org آن را روی لینوکس خود نصب کنید.
نخستین برنامه در لینوکس: درود بر جهان!
از همین لحظه شما میتوانید در لینوکس کد دلخواهتان را گسترش دهید، کامپایل کنید و نخستین برنامه تحت لینوکس خود را اجرا کنید. گام نخست کار هم مثل همیشه، با برنامه «درود بر جهان!» آغاز میشود!
فرض کنید فایلی به نام hello.c ایجاد میکنیم (میتوانید برای ایجاد برنامه از ادیتورهای زیادی استفاده کنید، اما پیشنهاد من استفاده از emacs است.) محتویات فایل ما اینطور خواهد بود:
«َinclude»stdio.h
«َinclude »stdlib.h
تint main()
;(“Hello Worldn”printf(
;(0exit(
ت
حالا با این دستور میتوانید برنامه خود را کامپایل، لینک و سپس اجرا کنید:
$ gcc -o hello hello.c
hello/. $
Hello World
$
نکته: از این به بعد هر چه را دیدید که جلوی $ نوشته شده، یعنی باید آن را توی ترمینال نوشت.
خب حالا این برنامه چطور کار میکند؟
شما gcc را صدا زدید که سورس برنامه C را به فایل اجراییای به نام hello تبدیل کرد. بعد برنامه را اجرا کردید و برنامه به جهان درود گفت. این سادهترین نمونه ممکن است، اما اگر بتوانید این کار را انجام دهید، بیگمان و بهطور قطع تا پایان راه با کلیک همراه خواهید بود و برنامههای پیچیدهتر را پیاده خواهید کرد. اگر این برنامه جواب نداد،
مطمئن بشوید که کامپایلر C روی سیستمتان نصب است یا خیر. خیلی از توزیعهای لینوکس
گزینهای برای نصب توسعه نرمافزار (Software Development) دارند که باید برای نصب بستههای ویژه آن را انتخاب کنید.
خب، این نخستین برنامهای است که اجرا میکنید، پس بیایید نگاهی پایهای به آن بیندازیم:
برنامهhello احتمالا داخل دایرکتوی اصلی(home) شما قرار گرفته است.
اگر PATH شامل ارجاعی به دایرکتوری اصلی شما نیست، در این صورت Shell نمیتواند برنامه شما را اجرا کند و به همین ترتیب، اگر یکی از دایرکتوریهای موجود در PATH شامل برنامهای باشد، که تصادفا ممکن است نام آن را همhello گذاشته باشند، در این صورت آن برنامه اجرا میشود. باز این اتفاق امکان رخ دادن دارد و آن هم وقتی است که آن دایرکتوری، زودتر از دایرکتوری اصلی شما در PATHتعریف شده باشد! برای رفع این ایراد بالقوه، میتوانید فایلها را با پیشوند / . (مثلاً(./hello اجرا کنید.
این دستور بهshell حکم میکند که برنامهای را اجرا کند که با فلان اسم، در دایرکتوری فعلی قرار دارد. (نقطه همان دایرکتوری فعلی است.) هنگام کامپایل، اگر o را فراموش کنید، (که کارش این است به کامپایلر بگوید فایل اجرایی را کجا بریزد)، کامپایلر فایلی به نام a.out (یعنی خروجی اسمبلر یا(assembler output میسازد. یادتان باشد که اگر برنامه را کامپایل کردید و بعد پیدایش نکردید، حتما دنبال a.out بگردید.
محمدرضا قربانی
در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
گزارش «جامجم» درباره دستاوردهای زبان فارسی در گفتوگو با برخی از چهرههای ادب معاصر
معاون وزیر بهداشت: