سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

۹ مطلب با کلمه‌ی کلیدی «linux» ثبت شده است

یه مشکلی که معمولا تو لینوکس های اوبونتو و تقریبا تمامی توزیع هایی که از مدیریت بسته apt-get استفاده میکنن به وجود میاد، عدم نصب برنامه ها و خطای ۴۰۴ هست. مشخصا این خطا به دلیل عدم امکان دانلود برنامه یا نیازمندیهای اون از سرورهاست. حالا بعضی وقتها به دلیل تحریم اون طرف آب که نمیزارن دانلود کنیم و بعضی وقتها به دلیل تحریم از داخل کشور :).

خوشبختانه لینوکس اوبونتو چندین ریپوزیتوری (منبع) داره که برنامه ها رو میشه از اونها دانلود کرد. تو این شرایط باید ریپوزیتوری که داره استفاده میشه رو تغییر داد.

تو لینوکس اوبونتو روند زیر رو انجام بدین:

۱. ابتدا برنامه Software & Updates رو باز کنین

۲. گزینه other رو از download from  انتخاب کنین

۳. گزینه select best server رو انتخاب کنین و بزارین خودش مورد مناسب رو پیدا بکنه

۴. گزینه choose server رو انتخاب کنین.

۰ موافقین ۰ مخالفین ۰ ۱۶ آبان ۹۴ ، ۱۳:۲۳
حامد شیخلو

اینکه برای یک سیستم شخصی هم ویندوز لازم هست و هم لینوکس یه چیز مشخص هست. تو لینوکس برای برنامه نویسی (خصوصا زبان پایتون و پرل و همچنین سی) یک بهشت محسوب میشه. این ور هم ویندوز سلاح خودش رو داره (مالتی مدیا، مجموعه آفیس و بازی های فراوان).

یه مشکل که برای خودم همیشه بود، خوندن داده های روی لینوکسم بوده که تو /home ذخیره میکردم. مثلا وقتی با لتک داکیومنت مینوشتم، نیاز میشد تو ویندوز یه فایلی رو ازش بردارم که مثلا برای ایمیل استفاده بکنم. تو این شرایط دو تا راه وجود داره (برادران ردموندی لینوکس رو هنوز نمیشناسن)، یکی ریست کردن و رفتن به لینوکس و راه دوم استفاده از برنامه ای برای خواندن داده های درایو های لینوکس هست.

برنامه رایگان Linux Reader محصول شرکت diskInternals میتونه اکثر فرمت های لینوکسی برای درایو رو شناسایی بکنه و بتونین فایلهای خودتون رو کپی کنین. البته به صورت مستقیم نیمتونین روش کار کنین و باید ابتدا فایل رو سیو کنین.

اینم لینک دانلودش

http://www.diskinternals.com/download/Linux_Reader.exe

۰ موافقین ۰ مخالفین ۰ ۲۳ بهمن ۹۳ ، ۱۳:۵۲
حامد شیخلو

هر سیستمی که راه میندازین، باید تمامی جنبه های اون رو بتونین مونیتور کنین. البته این مونیتور کردن بر اساس زیرسیستم های مختلف فرق داره. مثلا برای پهنای باند شبکه معمولا یک نمودار بلند مدت لازم هست و برای مثلا خطاهای سیستم، باید یه مونیتورینگ و سیستم هشدار وجود داشته باشه که 24*7 باشه. اما برای موارد دیگه، هنگام بوجود اومدن یک خطا یا مشکل یا مورد مشکوک، استفاده میشه. مثلا اینکه یه زیر سیستم درست کار نمیکنه، و میایم کارکرد اون رو تریس (trace) میکنیم.

هر سیستم عاملی دارای چندین لایه هست (البته منظورم الزاما معماری لایه ای نیست) که هرکدوم یه وظیفه خاص رو بر عهده دارن. یکی مسئول لایه 2 شبکه و یکی مسئول لایه 3. هر کدوم نیازمند سیستم مونیتورینگ جداگانه هست. مثلا میخوایم بدونیم تو لایه 2 وضعیت چطور هست، باید از ethtool و ابزارهای مشابه استفاده کنیم. اینکه ادمین با این ابزارها آشنا باشه، یه مساله حیاتی هست. اما خب، سخت هست. تعداد این ابزارهای زیاده و شناخت اینکه این ابزارها دقیقا چکار میتونن انجام بدن نیاز به تجربه خیلی زیادی داره.

تو عکس زیر میتونین برای هر لایه ابزارهای موجود رو ملاحظه کنین و در صورت نیاز کارکرد اونها رو با man مطالعه کنین.

۰ موافقین ۰ مخالفین ۰ ۱۷ شهریور ۹۳ ، ۱۴:۰۴
حامد شیخلو

در لینوکس بعضی داده های دیسک قبل از نوشته شدن در دیسک، در حافظه اصلی نگه داری میشود. این عمل برای بالا بردن سرعت کارایی است. اگر هسته، فرصت کافی برای نوشت داده ها در دیسک نداشته باشد، ممکن است که فایل سیستم دچار مشکل شود.این مشکل ممکن است به صورت چند روش بوجود بیاید، برای مثال:

  • قطع کردن اتصال حافظه ذخیره سازی به صورت ناگهانی، مثلا کشیدن فلش
  • ممکن است که برق سیستم قطع شود
  • هسته کرش کند یا سیستم به یکباره ریبوت شود. این مساله بسیار کم بوجود میاید
  • کاربر ممکن است دکمه ریست را فشار دهد
در مراحل boot، سیستم لینوکس دستور fsck را اجرا میکند. کار این برنامه بررسی کردن سیستم فایل و رفع خطاهای احتمالی است. در شرایطی که سیستم یک روند خاموش شدن عادی دارد، قبل از خاموش شدن سیستم تمامی دیست ها unmount میشوند، در این شرایط fsck حالت "clean" را برگشت میدهد (حتما کرنل داده ها را به درستی نوشته است). زمانی که سیستم فایل mountمیشود، این نشانگر حذف میشود.

اگر یکی از حالات ذکر شده قبلی برای سیستم اتفاق بیافتد، پرچم "clean" برای فایل سیستم ست نخواهد شد و باید fsck برای سیستم فایل اجرا شود. همچنین برای جلوگیری از خطای احتمالی، به صورت دوره ای هم دستور fcsk اجرا میشود.

در حالت بوجود آمدن یک خطای جدی برای فایل سیستم، به دلیل اینکه fsck نمیتواند بدون اجازه مدیر سیستم تغییری در سیستم فایل انجام دهد، سیستم متوقف میشود. در این مواقع خطای زیر در فرآیند بوت نمایش داده میشود:

***An error occurred during the file system check.
***Dropping you to a shell; the system will reboot
***when you leave the shell.
Give root password for maintenance
(or type Control-D for normal startup):

بعد از وارد کردن کلمه عبور مدیر سیستم، خروجی فرمان زیر ظاهر میشود:

(Repair filesystem) #

در این کاملد لاین باید فرمان مربوط به بررسی فایل سیستم وارد شود.

برای بررسی تمامی سیستم فایل ها، فرمان زیر را وارد کنید:

fsck -y /

با سویچ "y" شما ریسک رفع خطا و مشکلات ناشی از آن را قبول میکنید.

با وارد کردن دستور بالا تمامی فایل سیستم ها بررسی شده و خطاها رفع میشود. بعد از اتمام کار میتوان سیستم را راه اندازی دوباره کرد و به احتمال زیاد سیستم اصلاح خواهد شد.

در سیستم فایل های ژونالیست، مانند extX ها، احتمال خرابی دیست بسیار کم است. در این فایل سیستم ها معمولا از تمامی کارکرد های سیستم مانند پایگاه داده ها لاگ نگه داری میشود.

۰ موافقین ۰ مخالفین ۰ ۱۷ تیر ۹۳ ، ۱۱:۱۹
حامد شیخلو
هسته شماره 3.13 لینوکس منتشر شد. یکی از اصلیترین ویژگی های این نسخه، قرار دادن نسخه نهایی nftables بر روی آن است. این سیستم جایگزین سیستم های iptables, ip6tables,arptables, ebtables خواهد بود. نسخه قرار داده شده بر روی هسته 3.13 نسخه کامل نیست و ویژگی های اضافی به تدریج به آن اضافه خواهد شد.
سیستم nftables با یک دستورات خط فرمان nft همراه است. این دستور جایگزین فرمان iptables خواهد بود اما ظاهر کاملا متفاوتی خواهد داشت. در صورتی که با hptables کار کده باشید، این تغییر میتوان آزار دهنده باشد، اما یک لایه هماهنگ ساز برای تبدیل دستورات iptables به nftables وجود دارد.
متاسفانه مستندات کمی برای آشنایی با این سیستم وجود دارد، در این مطلب سعی میکنیم آشنایی اولیه با این سیستم پیدا کنیم.

بررسی مثالهایی برای آشنایی

فرض کنید که میخواهید بسته های خاصی را با iptables فیلتر کنید، در iptables دستورات زیر را خواهید نوشت.

iptables -A FORWARD -p tcp --dport 22 -j LOG
iptables -A FORWARD -p tcp --dport 22 -j DROP

با سیستم nftables دستور زیر را خواهید نوشت:

nft add rule filter forward tcp dport 22 log drop

فرض کنید که میخواهید بسته های چندین بسته را برای چندین پورت را فیلتر کنید و همچنین به نوع های خاص پروتکل icmpv6 اجازه عبود دهید. در iptables دستورات زیر را خواهید نوشت:

ip6tables -A INPUT -p tcp -m multiport --dports 23,80,443 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT

اما در nftables دستور زیر ر خواهید نوشت:

nft add rule ip6 filter input tcp dport {telnet, http, https} accept
nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, echo-request, nd-router-advert, nd-neighbor-advert } accept

mapping

یک ویژگی پیشرفته در nftables قابلیت مپ کردن است. این امکان وجود دارد که از داده هایی با اعواع مختلف استفاده کنیم و آنها را به هم مپ کنیم. برای مثال میتوان یک iface و مجموعه رول را به هم مرتبط کنیم. در مثال زیر زنجیره دستورات به نام low_sec و high_sec ساخته شده است.

# nft -i
nft> add map filter jump_map { type ifindex => verdict; }
nft> add element filter jump_map { eth0 => jump low_sec; }
nft> add element filter jump_map { eth1 => jump high_sec; }
nft> add rule filter input meta iif vmap @jump_map

در صورت نیاز به افزودن یک رابط شبکه، مثلا ppp1 دستور زیر را خواهیم نوشت:

nft> add element filter jump_map { ppp1 => jump low_sec; }

سرعت بروز رسانی و هسته

سیستم iptables با افزودن دستورات زیاد تر به حد زیادی دچار افت سرعت میشود. اما در سیستم جدیدتر nftables این کاهش سرعت وجود نخواهد داشت.

در سیستم iptables برای هر افزودن target یا match نیازمند ماژول و کامپایل دوباره کرنل هستیم. در سیستم nftables بیشتر وظایف در لایه کاربری انجام میشود که این مساله باعث کاهش نیاز به تغییرات هسته میشود. برای مثال ویژگی پشتیبانی از icmp6 با یک پچ قابل انجام است.

در مطلب بعدی به تغییرات معماری سیستم خواهیم پرداخت.

۱ موافقین ۰ مخالفین ۰ ۰۵ بهمن ۹۲ ، ۰۰:۳۵
حامد شیخلو

روشهای زیادی برای فعال کردن قابلیت ورود خودکار (auto login) به محیط کاربری گرافیکی سیستم عامل لینوکس موجود است. اما این روشها وابسته به محیط گرافیکی است. برای مثال در محیط اوبونتو برای انجام این کار در محیط گرافیکی یک امکان خاص وجود دارد.

برای انجام این کار در محیط متنی میتوان از روش زیر استفاده کرد:

در محیط گرافیکی لینوکس، چندین tty که شبیه ساز ترمینال است موجود میباشد. برای اینکه کاربری به محیط خاصی لاگین کند، باید tty مشخصی را عوض کنیم. در محیط متنی معمولا با tty1 به صورت پیشفرض لاگین انجام میشود. در مثال زیر برای کاربر test، در tty1 به صورت پیشفرض لاگین انجام میشود.

در فایل

/etc/init/tty1.conf

خط:

exec /sbin/qetty -8 38400 tty1

را با خط زیر جایگزین کنید:

exec /bin/login -f test < /dev/tty1 > /dev/tty1 2>&1
۰ موافقین ۱ مخالفین ۰ ۱۴ آذر ۹۲ ، ۱۶:۴۷
حامد شیخلو
به منظور نوشتن مطلب فارسی در محیط latex نیازمندی اصلی، نصب برنامه texmaker است، در محیط مبتنی بر debian از دستورات زیر استفاده میکنیم
#apt-get install texmaker
بعد از اتمام دستورات، میتوان برنامه texmaker را اجرا کرد. در این محیط میتوان متون انگلیسی را تایپ و آماده کرد. برای آموزش latex از فایل زیر میتوان استفاده کرد:
http://www.tug.org/twg/mactex/tutorials/ltxprimer-1.0.pdf
برای فعال سازی فارسی نویسی، نیازمند xelatex میباشیم، این نیازمندی با texmaker نصب میشود، اما باید تغییراتی برای آن اعمال کرد
اولین مرحله،‌فعال سازی قابلیت کامپایل با xelatex است، برای این منظور از منوی
User-> User commands -> Edit User Commands
را انتخاب میکنیم، در پنجره باز شده،‌ به صورت زیر عمل میکنیم:


بسته های زیر را نصب کنید:
#apt-get install texlive-lang-arabic texlive-latex-recommended
قلم های مورد نیاز را نصب کنید، مانند ویندوز فایل قلم را باز کنید و دکمه install را بزنید.
برای تست،‌ از مثال زیر استفاده کنید:
\documentclass{article}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{xepersian}
\usepackage{amssymb}
\settextfont[Scale=1]{XB Niloofar}
\setlatintextfont[Scale=.9]{Times New Roman}
\setdigitfont{B Nazanin}
\title{نحوه فارسی نویسی در LATEX}
\author{حامد شیخلو}
\begin{document}
\maketitle
\begin{abstract}
چکیده مطلب
\end{abstract}
\indent\indent
\section{مقدمه}
مقدمه مطلب
\end{document}
****توجه داشته باشید که amsmath قبل از xepersian فراخوانی شود.
برای اجرا ابتدا برنامه texmaker را باز کنید و کد بالا را در آن بنویسید،‌ از منوی کمپایل xelatex را انتخاب کنید و کامپایل را انجام دهید.

برای نصب texStudio و بسته های مورد نیاز از روش زیر هم میتونین استفاده کنید:
apt install texstudio
apt install texlive-xetex
apt install install lmodern
apt install texlive-fonts-recommended





۲ موافقین ۱ مخالفین ۰ ۱۶ آبان ۹۲ ، ۲۲:۴۷
حامد شیخلو
این کتاب رو میشه بهترین کتاب تو زمینه برنامه نویسی سیستمی در محیط لینوکس و لینوکس هستش. ویرایش اول این کتاب نوشته دکتر ریچارد استیونسن هستش. ایشون در سال 1999 در سن 48 سالگی فوت کردن. ویرایش جدید کتابهای ایشون هر ساله با افزودن مطالب جدیدی یکی از بهترین کتابهای زمینه خودش هستش. سری کتابهای TCP/IP illustrated که نوشته ایشون هستش، بهترین کتاب تو زمینه کالبد شکافی پروتکل شبکه هستش.


لینک دانلود
http://filepi.com/i/YQygf1B
۰ موافقین ۰ مخالفین ۰ ۱۳ آبان ۹۲ ، ۰۹:۴۲
حامد شیخلو
بعد از دانلود کردن و اکسترکت کردن سورس کد هسته سیستم عامل لینوکس که از آدرس kernel.org قابل دانلود است، با تعداد بسیار زیادی از دایرکتوری‌ها مواجه می‌شویم.

در ریشه کد منبع دانلود شده، فایل‌های زیر وجود دارد:
  • COPYING: اطلاعات درباره مجوزها و اجازه‌ها. لینوکس بر اساس مجوز دسترسی GPLv3 است. این مجوز اجازه استفاده، تغییر، توزیع و اشتراک گذاری کد منبع را به صورت رایگان به هر فردی می‌دهد، اما آن فرد نباید کد منبع را بفروشد.
  • CREDITS: لیست افراد همکاری کننده.
  • Kbuild: این اسکریپت بعضی تنظیمات را برای ساختن هسته مقداردهی می‌کند. برای مثال این اسکریپت متغیر ARCH را مقداردهی می‌کند که این متغیر مشخص کننده معماری پردازنده ای است که باید بر روی آن کامپایل انجام شود.
  • Kconfig: این اسکریپت برای مشخص کردن پارامترهای تنظیم هسته استفاده می‌شود.
  • MAINTAINERS: این فایل مشخص کننده لیست نگهداری کنندگان، ایمیل آن‌ها و وب سایت‌های مرتبط با آن‌ها است. این فایل زمانی استفاده می‌شود که یک توسعه دهنده یک باگ در فایلی پیدا می‌کند و قصد دارد تا آن را به افراد مرتبط با آن فایل گزارش دهد.
  • Makefile: اسکریپت اصلی مورد نیاز برای کامپایل هسته کرنل. این فایل پارامترهای مورد نیاز برای کامپایل و همچنین لیست فایل‌ها و هر چیز مورد نیاز دیگری را ارسال می‌کند.
  •  README: این فایل متنی اطلاعات مورد نیاز برای توسعه دهندگان که می‌خواهند با نحوه کامپایل کرنل آشنا شوند، را فراهم می‌کند.
  • REPORTING-BUG: این فایل متنی اطلاعات مورد نیاز برای گذارش دهی باگ را فراهم می‌کند.
در ریشه کد منبع، لیست شاخه های زیر وجود دارد:

  • arch: در این شاخه یک فایل Kconfig وجود دارد که تنظیمات مورد نیاز را برای کامپایل کدهای این منبع مشخص می‌کند. هر پردازنده که توسط هسته پشتیبانی می‌شود، یک شاخه مشخص در این شاخه دارد. برای مثال، کد برای کرنل alpha در شاخه ای با این اسم قرار دارد.
  • block: در این شاخه، کد مربوط به ابزارهای بلاکی قرار دارد. ابزارهای بلاکی، دستگاههایی هستند که ارسال و دریافت داده در آنها به صورت بلاکی انجام می‌شود. بلاک داده به جای یک جریان (stream) از داده‌ها، تکه ای (chunk) از داده‌ها است.
  • crypto: شامل کد بسیاری از الگوریتم‌های رمز نگاری. برای مثال "sha1_generic.c" فایلی است که کد مربوط به الگوریتم رمزنگاری sha1 را پیاده سازی کرده است.
  • Documentation: مستندات مربوط به هسته و فایل‌های دیگر.
  • drivers: شامل کدهای مربوط به راه اندازهای سخت افزارهای مختلف است. راه انداز یک نرمافزار است که سخت افزار مشخص را کنترل می‌کند. دایرکتوری‌های زیادی در این شاخه وجود دارد. برای هر نوع سخت افزار به صورت کلی یک پرونده اصلی وجود دارد که شامل زیر نوع‌های دیگری است. برای مثال شاخه bluetooth دربردارنده کد راه انداز برای سخت افزار bluetooth است. البته برای بعضی از سخت افزارها این اصل رعایت نشده است و شاید بتوان گفت یک سطح دسته بندی اضافی نیز درنظر گرفته شده است، مانند joystick که در شاخه input/joystick قرار دارد.
  • firmware: این شاخه شامل کدهایی است که سیستم کامپیوتری را قادر به فهمیدن سیگنال‌های دریافتی از ابزارها می‌کند. برای مثال یک وبکم، سیستمی برای مدیریت سخت افزار خودش دارد، اما باید سیستم کامپیوتری سیگنال‌های دریافتی از آن را بتواند بفهمد. این کدها همچنین برای ارسال سیگنال به ابزارها نیز استفاده می‌شود.
  • fs: این شاخه همان filesystem است. تمام کدهای مورد نیاز برای درک و استفاده از فایل سیستم‌ها در این شاخه قرار دارد. برای هر فایل سیستم یک شاخه جداگانه درون آن وجود دارد. برای مثال کد مربوط به ext4 درون شاخه هم نام خود قرار دارد. بعضی از فایل‌ها درون شاخه خاصی نیستند، این فایل‌ها برای مدیریت کلی فایل سیستم مورد نیاز است. برای مثال mount.h که مورد نیاز برای عمل mounting یک سیستم فایل است. یک فایل سیستم روشی ساختارمند برای ذخیره سازی و مدیریت اطلاعات در ابزارهای ذخیره سازی فراهم می‌کند. هر فایل سیستم محدودیت‌ها و برتری‌های خاص خودش را دارد (در این مورد مطلب جامعی بعداً می‌نویسم).
  • include: این شاخه شامل فایل‌های سرآیندی است که کرنل از آن استفاده می‌کند.
  • init: فایل‌های مرتبط با راه‌اندازی کرنل در این شاخه قرار دارد. فایل main.c فایل اصلی کرنل است. این فایل سور اصلی است که قسمت‌های دیگر را به هم مرتبط می‌کند.
  • ipc: کلمه ipc مخفف Inter Process Communication است. این شاخه شامل کدهایی لایه ارتباطی است، که این لایه ارتباط بین کرنل و پردازش‌ها لازم است. در سیستم عامل لینوکس، تنها مسیر ارتباطی با سخت افزار از طریق کرنل است و یک برنامه برای انجام یک وظیفه باید از کرنل درخواست بکند. برای مثال فرض کنید که یک برنامه می‌خواهد با سخت افزار کنترل dvd ارتباط برقرار کند و مثلاً در آن را باز کند، باید این درخواست را از طریق رابط برنامه نویسی مشخص به کرنل بدهد و کرنل خود آن کار را انجام دهد.
  • kernel: کدهای این بخش خود کرنل را مدیریت می‌کند. برای مثال یک شاخه با نام power مدیریت کننده نحوه خاموش کردن است.
  • lib: شامل فایل‌هایی است که کرنل به آن ارجاع داده است.
  • mm: مدیریت حافظه.
  • net: شامل کدهایی برای پروتکل‌های مختلف شبکه است.
  • samples
  • scripts:شامل کدهای مورد نیاز برای کامپایل کردن کرنل است.
  • security
  • sound: شامل راه انداز کارت‌های صوتی است.
  • tool: شامل ابزارهای برای ارتباط با کرنل است.
۱ موافقین ۱ مخالفین ۲ ۰۴ شهریور ۹۲ ، ۱۹:۳۸
حامد شیخلو