دانشنامهسیستم عامللینوکس

دانستنی ها: صد سوال لینوکسی

دانستنی های لینوکس

 

۱ – چگونه می توان متوجه شد که چه پورت هایی در سیستم عامل باز هستند و چه برنامه هایی از آنها استفاده می نمایند؟

پاسخ: دستور netstat -tunpl تمامی پورت های باز سیستم را نشان می دهد که در انتهای آن یک شماره منحصربه فرد به نام PID برای هر کدام نوشته شده است، آن شماره را در دستور زیر وارد نمایید تا اطلاعات بیشتری از برنامه ای که از پورت مورد نظر استفاده می کند، دریافت نمایید:

#ll /proc/<PID_Number>/exe

۲ – میزان حافظه RAM و Swap سیستم عامل را چگونه متوجه شویم؟

پاسخ: میزان حافظه RAM و Swap را از طریق دستور free -g بدست می آوریم، همچنین از طریق دستور top نیز می توان میزان ظرفیت خالی و پر حافظه را بصورت live دید.

۳ – مدل و تعداد CPU های یک سیستم را چگونه بیابیم؟

پاسخ: دستور cat /proc/cpuinfo مشخصات تمام پردازشگرها را به ما نمایش می دهد. اگر فقط می خواهیم تعداد core cpu ها را ببینیم از دستور زیر استفاده می کنیم:

#cat /proc/cpuinfo | grep -c ‘model name’

همچنین دستور lscpu نیز اطلاعات کاملی از مدل و تعداد cpu ارائه می دهد.

ارائه خدمات لینوکس

۴ – میزان Load Average را چگونه پیدا کنیم و معنای اعداد داخل آن چیست؟

پاسخ: با استفاده از دستورهای top، htop و uptime می توانیم میزان load average سیستم را مشاهده کنیم که بشکل زیر نشان داده می شود:

load average: 1.05, 0.70, 5.09

از سمت چپ به ترتیب میزان میانگین load سیستم را برای ۱ دقیقه، ۵ دقیقه و ۱۵ دقیقه گذشته نشان می دهد. تفسیر این اعداد باتوجه به تعداد cpu های سیستم انجام می شود و می توانیم برای راحتی کار آنها را در ۱۰۰ ضرب کرده تا بصورت درصدی آنها را بدست آوریم. حال اگر یک cpu داشته باشیم تفسیر اعداد بالا می شود: در یک دقیقه اخیر ۵ درصد اضافه load داشته ایم، یعنی ۰.۵ پروسه ها بصورت waiting بوده اند، در ۵ دقیقه ۳۰ درصد cpu بیکار بوده است و در نهایت در ۱۵ دقیقه اخیر ۴۰۹ درصد اضافه بار داشته ایم و تعداد ۴.۰۹ پروسه در حالت waiting برای خالی شدن cpu مانده اند. حال هر چه که تعداد cpu ها بالاتر برود، تفسیر اعداد نیز متفاوت می شود. برای مثال عدد ۶.۰۳ برای یک cpu به میزان ۵۰۳ درصد اضافه بار ایجاد می کند اما برای ۸ عدد cpu به میزان ۲۹۷ درصد ظرفیت خالی ایجاد می کند.

۵ – برای دیدن فایل های بسیار بزرگ باید چگونه عمل نماییم؟

پاسخ: استفاده از دستور cat برای فایل های بسیار بزرگ کارایی ندارد. در این مواقع از دستورهای more و less استفاده می شود که فایل را صفحه به صفحه نشان می دهد. اما دستور less نسبت به more این امکان را می دهد که در ابتدا کل فایل را load نمی کند برای همین سریعتر عمل می کند. همچنین می توان در زمان مشاهده به عقب هم برگشت، ولی این امکان در more وجود ندارد. به دو شکل می توان از این دستورها استفاده کرد:

#cat /etc/finename.txt | less

#less /etc/finename.txt

۶ – نسخه سیستم عامل لینوکسی که استفاده می کنیم را از کجا پیدا کنیم؟

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

#cat /etc/*release

#cat /proc/version

#uname -a

۷ – آیا init و systemd در لینوکس مفاهیم یکسانی هستند؟

پاسخ: همانطور که می دانید init یک system and service manager در لینوکس است که پروسه ای با همین نام در ابتدای بوت شدن سیستم عامل به عنوان مادر همه پروسه ها اجرا شده و سایر پروسه ها در زیرمجموعه آن اجرا می شوند. در سال ۲۰۱۰ سیستم جدید systemd جایگزین init شد ولی همچنان در بعضی از نسخه ها، سرویس های init از طریق لینک شدن به سرویس های متناظر در systemd وجود دارند. در اینجا می توانید تفاوت های این دو سیستم را مشاهده نمایید.

۸ – تفاوت سیگنال های SIGTERM و SIGKILL در دستور kill چیست؟

پاسخ: زمانی که یک سرویس را با سیگنال ۱۵ در لینوکس kill می کنید یعنی از SIGTERM استفاده نمایید، این امکان را به سرویس مربوطه می دهید که قبل از exit یکسری کدهای مربوط به خروج را اجرا کند و بصورت کاملا safe خارج شود. اما اگر از سیگنال ۹ استفاده کنید یعنی SIGKILL، در واقع سرویس را مجبور می کنید که بلافاصله و بدون اجرای آن کدها، exit کند. بصورت پیش فرض اگر هیچ سیگنالی نزنید از سیگنال ۱۵ استفاده می نماید.

#kill -9 13260

۹ – دستور killall در چه مواقعی استفاده می شود؟

پاسخ: اگر نام سرویس خود را می دانید و نمی خواهید از PID برای kill کردن سرویس استفاده نمایید، باید از دستور killall استفاده نمایید.

#killall -9 nginx

۱۰ – حروف Z و D در ستون state مربوط به دستور top به چه معنا هستند و آیا می توان آن پروسه ها را kill کرد؟

پاسخ: حرف Z نشان دهنده پروسه های zombie است. این گروه تنها یک entry هستند و پروسه واقعی نیستند. حرف D نیز نشان دهنده پروسه های uninterruptible sleep است که یعنی عملیات input/output را انجام می دهند مثلا خواندن و نوشتن بر روی دیسک. بطور کلی این دو دسته از پروسه ها را نمی توان kill کرد.

۱۱ – تفاوت دستور pkill با killall در چیست؟

پاسخ: اگر شما تنها یک قسمت از نام یک سرویس را می دانید و نه کل آنرا، می توانید از دستور pkill استفاده نمایید. خودش هر سرویسی که با آن نام match گردد را kill می کند.

#pkill -9 apache

۱۲ – چگونه اولویت استفاده سرویس ها از CPU را تغییر دهیم؟

پاسخ: هر سرویسی دارای یک priority برای پردازش توسط cpu است که می توانید با استفاده از دستور top و ستون NI آنرا مشاهده نمایید. این عدد می تواند بین ۲۰- تا ۱۹ باشد. هر چه که عدد کوچکتر باشد، اولویت آن بالاتر است. بصورت پیش فرض اولویت بسیاری از سرویس ها صفر است. با استفاده از دستور nice می توان اولویت سرویس ها را تغییر داد، اما اگر یک سرویس در حال اجرا باشد و بخواهید اولویت آنرا در همان حال تغییر و اعمال نمایید باید از دستور renice استفاده نمایید.

#nice -n 10 apt-get upgrade

#renice -10 -p 22678

#nice -n 5 tar -czf backup.tar.gz /root/*

۱۳ – ستون PR در دستور top چه تفاوتی با ستون NI دارد؟

پاسخ: در ستون NI اولویتی نشان داده می شود که کاربر می تواند آنرا تغییر دهد اما در ستون PR اولویتی نشان داده می شود که بصورت واقعی استفاده می شود و کرنل آنرا می بینید و در ضمن کاربر هم نمی تواند بصورت مستقیم آنرا تغییر دهد. فرمول محاسبه آن نیز عبارت است از PR = 20 + NI . اما کرنل می تواند این اولویت PR را به صلاحدید خود بصورت موقت تغییر دهد. برای مثال اگر یک پروسه برای مدت طولانی، خیلی از cpu استفاده کند، کرنل اولویت آنرا کاهش می دهد، و یا اگر یک سرویس برای مدت طولانی هیچ شانسی برای استفاده از cpu نداشته باشد، کرنل اولویت آنرا بالا می برد تا بتواند از منابع آن استفاده کند. اما کرنل هیچ وقت نمی تواند میزان NI را تغییر دهد.

۱۴ – مفهوم File Descriptors را توضیح دهید؟

پاسخ: در لینوکس همه چیز فایل است، حتی دایرکتوری ها سخت افزارها نیز فایل هستند و هر فایل نیز یک عدد مخصوص به خود را دارد که file descriptor یا FD نامیده می شود. البته سیستم عامل این FD را زمانی اختصاص می دهد که فایل باز شده باشد. حال اگر برای مثال یک برنامه بگوید خروجی به FD مربوط به پرینتر ارسال شود، خواهیم دید که خروجی مورد نظر پرینت گرفته می شود.

۱۵ – مفاهیم stdin، stdout و stderr در لینوکس را توضیح دهید؟

پاسخ: در شرایط عادی وقتی دستوری را در لینوکس اجرا می کنیم، سه رشته وجود دارد. رشته اول ورودی است که عموما از طریق کیبورد به عنوان دستور وارد می کنیم و standard input یا stdin نامیده می شود. رشته دوم، خروجی است که در نتیجه آن دستور در مانیتور نمایش داده می شود و standard output و یا stdout نامیده می شود و در نهایت رشته سوم نیز که به مانند stdout یک خروجی است، در صورت وجود خطا، نمایش داده می شود و standard error یا stderr نامیده می شود. هر کدام از این رشته ها یک میزان FD مربوط به خود دارند که برای stdin=0 و stdout=1 و stderr=2 است.

۱۶ – مفهوم Redirection در لینوکس را توضیح دهید؟

پاسخ: با استفاده از این قابلیت شما می توانید device های stdin/stdout را تغییر دهید. همانطور که می دانید سخت افزار stdin کیبورد است و برای stdout مانیتور است. حال با چند مثال مفهوم redirection را توضیح می دهیم. در مثال زیر خروجی دستور به جای نمایش در مانیتور به یک فایل ارسال می گردد:

#du -h > text.txt

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

#mail -s “Hello” info@actobit.com < email.txt

۱۷ – Pipe در لینوکس چه مفهومی دارد؟

پاسخ: اگر بخواهید در لینوکس چند دستور را با هم ترکیب نمایید بدین شکل که خروجی یک دستور (stdout) را در ورودی دستور دیگر (stdin) قرار دهید از pipe استفاده می کنیم که با علامت | نمایش داده می شود. با استفاده از این قابلیت می توان دستورهای بسیار قدرتمندی را ایجاد نمود.

۱۸ – دستور xargs در چه مواقعی استفاده می شود؟

پاسخ: این دستور می تواند با کمک pipe خروجی یک دستور را بگیرد و در ورودی دستوری دیگر قرار دهد و از این طریق دستورات جدیدی بسازد و آنها را خط به خط اجرا کند. مثلا با دستور زیر سه دایرکتوری جدید ساخته می شود:

#echo ‘one two three’ | xargs mkdir

بیشتر از xargs در دستور find استفاده می شود. بعد از اینکه خروجی دستور find یافت شد می توان از طریق xargs کارهای مختلفی بر روی آنها انجام داد. مثلا در دستور زیر در شاخه مورد نظر محتویات تمامی فایل ها را می گردد و هر کدام که عبارت example را داشته باشد به عنوان نتیجه در خروجی این دستور و بصورت خط به خط قرار می دهد. در واقع در اینجا دستور xargs خطی را که عبارت example را دارد در مقابل نام فایل آن قرار داده و در خروجی نمایش می دهد:

#find . -type f | xargs grep “example”

۱۹ – دستور tee در چه مواقعی استفاده می شود؟

پاسخ: اگر شما بخواهید میزان خروجی یک دستور (stdout) را بخوانید و آنرا هم در خروجی صفحه مانیتور نمایش دهید و هم در یک فایل ذخیره کنید، دستور tee بکار شما می آید.

#df -h | tee /root/df.log

۲۰ – چگونه می توان یک عبارت را درون فایل جستجو کرد؟

پاسخ: دستور grep که مخفف Global regular expression print است، ابرازی قدرتمند برای جستجو درون فایل می باشد. این دستور بصورت پیش فرض کل خطی را که عبارت جستجو شده در آن قرار دارد را نمایش می دهد.

#grep omid /etc/passwd

#cat /etc/passwd | grep omid

۲۱ – چگونه owner یک فایل یا دایرکتوری را تغییر دهیم:

پاسخ: با استفاده از دستور chown می تواند اینکار را انجام داد:

#chown omid:finance main.txt

همانطور که در بالا مشاهده می کنید omid نام owner و finance نام group است.

۲۲ – از چه طریق permission های یک فایل یا فلدر را تغییر دهیم؟

پاسخ: وقتی از طریق دستور ls -l فایل های لینوکسی را لیست می کنید یک رشته از کاراکترها به شکل rwxrwxrwx- را مشاهده می نمایید. خط تیره اول نشان می دهد که این آیتم فایل است، اگر به جای خط تیره، حرف d باشد نشان دهنده دایرکتوری است. مابقی رشته شامل ۳ قسمت ۳ کاراکتری است. از سمت چپ، اولین قسمت که شامل ۳ کاراکتر است، نشاندهنده مجوزهای owner نسبت به آن آیتم است. دومین قسمت ۳ کاراکتری، نشاندهنده ی مجوزهای group است و در نهایت سومین قسمت نشاندهنده ی others است. در هر قسمت r نمایانگر read و w نمایانگر write و x نمایانگر execute است. اگر در هر قسمت بجای حروف r، w و x خط تیره استفاده شده باشد یعنی آن مجوز به آن قسمت مورد نظر داده نشده است. ساده ترین راه برای permission دادن، استفاده از اعداد می باشد. هر مجوزی دارای یک نمایانگر عددی است که برای r برابر است با ۴، برای w برابر است با ۲ و برای x برابر است با ۱. حال اگر بخواهیم به تمام قسمت ها، تمام مجوز ها را بدهیم باید این سه عدد را با هم جمع زده و سه بار در کنار هم بزنیم:

#chmod 777 main.txt

در مثالی دیگر اگر بخواهیم به owner و group تمام مجوزها را بدهیم اما به others فقط مجوز read را بدهیم باید از عدد ۷۷۴ استفاده نماییم.

۲۳ – برنامه cron در لینوکس چه استفاده ای دارد؟

پاسخ: یک برنامه time-based job scheduler است که برای اجرای دستورات در زمان های تعیین شده مورد استفاده قرار می گیرد. برای انجام تنظیمات این برنامه از فایلی بنام crontab استفاده می شود که در شاخه etc/ قرار دارد. 

۲۴ – فرمت استفاده از فایل crontab چگونه است؟

پاسخ: فرمت کلی در داخل فایل بشکل زیر است:

MIN HOUR DOM MON DOW CMD

MIN –> Minute field –> 0-59

Hour –> Hour field –> 0-23

DOM –> Day of Month –> 1-31

MON –> Month field –> 1-12

DOW –> Day of Week –> 0-6

CMD –> Command –> Any command to be execute

۲۵ – مفاهیم DAC و MAC را توضیح دهید؟

پاسخ: طبق مفهوم DAC یا Discretionary Access Control که پیش فرض لینوکس نیز است، owner یک resource کنترل کاملی بر روی آن دارد بصورتی که می تواند به سایرین دسترسی های مختلف بدهد و یا حتی مالک آن را تغییر دهد. این resource می تواند یک فایل باشد یا یک دایرکتوری و یا هر چیزی که می توان از طریق شبکه به آن دسترسی داشت. بطور کلی DAC یک روش کنترل دسترسی بسیار راحت و انعطاف پذیر است ولی در عین حال خیلی ایمن نیست. اما در مقابل مفهوم MAC یا Mandatory Access Control را داریم. در این روش دسترسی ها توسط سیستم تعیین می شوند و نه توسط owner. در این روش تمامی user ها و resource ها دارای یک label هستند که سطح اعتماد را تعیین می کند. برای دسترسی به یک resource، کاربر باید در سطحی مساوی و یا بالاتر از سطح آن resource باشد. عموما سیستم هایی که دارای دیتای بسیار مهمی هستند مانند سیستم های دولتی و نظامی، از روش MAC استفاده می کنند که از طریق SELinux پیاده سازی می شود.

۲۶ – نرم افزار مدیریت پکیج ها در لینوکس را نام ببرید؟

پاسخ: در لینوکس های redhat based از rpm به عنوان نرم افزار مدیریت پکیج ها و در debian based ها از dpkg برای اینکار استفاده می گردد. از طریق آنها می توانید برای نصب، پاک کردن، بروزرسانی و query زدن نرم افزارهای مختلف استفاده کرد. پس هرجا که دستور rpm را مشاهده کردید باید متوجه شوید که در یک لینوکس redhat based مانند CentOS هستید و هرجا که دستور dpkg را مشاهده کردید در یک لینوکس debian based مانند Ubuntu هستید.

۲۷ – چگونه در بین پکیج های نصب شده اقدام به جستجو نماییم؟

پاسخ: با استفاده از دستورات زیر می توانید لیست نرم افزارهای نصب شده را مشاهده نمایید. سپس از طریق grep می توانید نرم افزار مورد نظر خود را جستجو کنید:

#rpm -qa     #dpkg -l 

۲۸ – عملیات Verifying در بین پکیج های نصب شده به چه معناست؟

پاسخ: شما می توانید پکیج های نصب شده را با دیتابیس پکیج ها مقایسه کنید و ایرادات آنها را بیابید. برای مثال چه dependency هایی miss شده اند و یا هر تغییر دیگری که بین آنها وجود داشته باشد اعلام می شود. با استفاده از دستور زیر کل پکیج های سیستم بررسی می شوند:

#rpm -Va     #dpkg -Va

اگر بخواهیم تنها یک پکیج خاص بررسی شود بدین شکل عمل می کنیم:

#rpm -V telnet     #dpkg -V telnet

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

S –> File size differs.                                                                                         ۵ –> The MD5 checksum differs.

M –> File mode differs.                                                                                      L –>  A mismatch occurs in a link.

U –> The file ownership differs.                                                                        G –> The file group owner differs.

D –> The major and minor version numbers differ on a device file.              T –>  The file time (mtime) differs.

۲۹ – خروجی دستور uname چه مواردی را نمایش می دهد؟

پاسخ: مواردی شامل نام و نسخه کرنل، نام hostname و تاریخ release شدن کرنل را نمایش می دهد.

Linux IR-HA-01 5.3.0-29-generic #31-Ubuntu SMP Fri Jan 17 17:27:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

۳۰ – مفهوم Hardening در لینوکس را توضیح دهید؟

پاسخ: به مجموعه ای از اقدامات امنیتی می گویند که بر روی سیستم عامل انجام می گیرد تا آسیب پذیری آن کاهش پیدا کند. مواردی مانند بروزرسانی کرنل و نرم افزارها، غیرفعال کردن root login، محدود کردن دسترسی فیزیکی به سرور، غیرفعال نمودن IPv6، استفاده از IPTables، Fail2ban، SELinux و TCPWrappers

۳۱ – چگونه با استفاده از یک دستور اطلاعات مربوط به کل سخت افزارهای سیستم عامل را مشاهده نماییم؟

پاسخ: دستور lshw تمامی اطلاعات سخت افزاری سیستم از CPU گرفته تا RAM و هارد و کنترولرها را نشان می دهد.

۳۲ – اطلاعات مربوط به هارد را چگونه ببینیم؟

پاسخ: با استفاده از دستورهای زیر:

#lshw -class disk -class storage

#hdparm -I /dev/sda

اما اگر بخواهیم تشخیص دهیم که نوع هارد استفاده شده ssd است یا hdd باید از دستور زیر استفاده نماییم:

#lsblk -o name,rota

در صورتی که زیر ستون rota عدد ۰ باشد یعنی دیسک ssd است و اگر ۱ باشد دیسک hdd است. البته این دستور در لینوکس های محیط مجازی عمل نمی کند. در محیط های مجازی باید از روش زیر عمل نماییم:

#time for i in `seq 1 1000`; do

> dd bs=4k if=/dev/sda count=1 skip=$(( $RANDOM * 128 )) >/dev/null 2>&1;

> done

با دستور بالا یک speed test بر روی هارد انجام داده اید. اگر سرعت در حدود ۲ ثانیه باشد، هارد ssd است در غیراینصورت hdd است. در زیر خروجی یک تست را برای هر دو نوع هارد مشاهده می نمایید:

SSD:                                        HDD:

real 0m1.375s                           real 0m14.249s
user 0m0.285s                          user 0m0.752s
sys 0m0.944s                            sys 0m6.284s

۳۳ – دستور lsblk به چه کار آید؟

پاسخ: این دستور که مخفف list block است، تمام block device ها را لیست می کند:

#lsblk -a

sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
└─sda2 8:2 0 20G 0 part /
sdb 8:16 0 600G 0 disk
└─sdb1 8:17 0 599.8G 0 part /data
sr0 11:0 1 1024M 0 rom

۳۴ –  zombie process ها چگونه بوجود می آیند و آیا مشکلی درست می کنند؟

پاسخ: وقتی در اصطلاح یک process در لینوکس می میرد، فورا از حافظه رَم پاک نمی شود و یک descriptor از آن باقی می ماند که مقدار بسیار کمی از حافظه را به خود اختصاص می دهد. سپس آن پروسه در حالت EXIT-ZOMBIE قرار گرفته و از طریق یک سیگنال SIGCHLD به پروسه parent خود اطلاع می دهد که مرده است. در نهایت پروسه parent یک wait() system call اجرا می کند تا از طریق آن وضعیت آن پروسه و سایر اطلاعاتش را بخواند. با پایان این مرحله آن پروسه کاملا از بین می رود. این مراحل معمولا به سرعت انجام می شود و شما وضعیت zombie را برای آن نخواهید دید. اما اگر پروسه parent درست برنامه نویسی نشده باشد و wait() call را اجرا نکند، آن پروسه در وضعیت zombie باقی می ماند. حال یا باید بصورت دستی SIGCHLD را با دستور زیر اجرا کنید و بجای pid، شماره پروسه مادر را وارد کنید تا مجدد پروسه مادر wait() call را صادر کند اما اگر باز اینکار را نکند مجبور خواهید بود با استفاده از سیگنال SIGKILL پروسه مادر را از بین ببرید. در این حالت پروسه init که PID شماره ۱ را دارد، به عنوان parent پروسه child معرفی می شود و این پروسه نیز بصورت دوره ای wait() call را صادر می کند که در نتیجه، پروسه های زامبی در نهایت کُشته می شوند.

#kill -s SIGCHLD pid

البته عموما زامبی ها مشکلی ایجاد نمی کنند و حتی نمی توان از آنها به عنوان پروسه نام برد. برای همین هم نمی توان به روش های رایج آنها را kill کرد. زامبی ها هیچ فضایی از پردازشگر نمی گیرند. تنها مشکلی که ایجاد می کنند اینست که یک PID به خود اختصاص می دهند و اگر تعداد آنها زیاد شود، بصورتی که شماره ای برای پروسه های جدید باقی نماند، دچار مشکل خواهیم شد. لینوکس بصورت پیش فرض از ۳۲۷۶۸ شماره پروسه پشتیبانی می کند که می توانید در آدرس زیر آنرا تغییر دهید:

#vim /proc/sys/kernel/pid_max

۳۵ –  کارائی دستور curl را توضیح دهید؟

پاسخ: دستور curl که مخفف Client for URLs است ابزاری برای انتقال دیتا از یا به urlها می باشد. می توانید از طریق سوئیچ o- بوسیله آن فایل دانلود کنید و یا از طریق T- فایلی را آپلود نمایید و یا از طریق I- اطلاعات هدر یک url را ببینید. حتی اگر برای دانلود از ftp یا proxy نیاز به authentication دارید، می توانید نام کاربری و پسورد را نیز ارسال نمایید.

#curl -u username:password -T file.tar.gz ftp://ftp_server

#xargs -n 1 curl -O < listurls.txt

۳۶ –  Runlevel پیش فرض در لینوکس چیست؟

پاسخ: در SysVinit بصورت پیش فرض Runlevel 5 که بصورت چندکاربره، مد گرافیکی و همراه با شبکه است، فعال است اما در سیستم جدید Systemd نام معادل آن Runlevel5.target یا Graphical.target است.

۳۷ –  Single User Mode چیست و چه کاربردی دارد؟

پاسخ: این مد که با نام Maintenance Mode نیز شناخته می شود در runlevel1 در SysVinit و rescue.target در Systemd اجرا می شود. زمانی از آن استفاده می کنیم که سیستم عامل قادر به انجام عملیات عادی خود نیست، مثلا وقتی که پارتیشنی دچار آسیب شده است، ریست کردن پسورد root و یا اصلاح خطاهای فایل fstab. سرویس هایی که در این سطح اجرا می شوند در نسخه های مختلف، متفاوت است اما بطور کلی هیچ سرویسی مربوط به شبکه در این سطح اجرا نمی شود. برای ورود به این مد در CentOS در پروسه بالا آمدن سیستم و پس از ورود به grub باید روی نسخه کرنل خود ایستاده و دکمه e را بزنید، سپس بدنبال خط کرنل گشته و قسمت ro را بشکل زیر تغییر داده و F10 را می زنیم:

rw init=/sysroot/bin/sh

در نهایت بعد از بالا آمدن single mode با استفاده از دستور /chroot /sysroot فایل سیستم را mount کرده و هر تغییری که می خواهیم، در سیستم عامل انجام داده و در آخر آنرا reboot می کنیم.

۳۸ –  Grub چیست و نحوه عملکرد آن را توضیح دهید؟

پاسخ: Boot Loader پیش فرض لینوکس است که از سیستم عامل های مختلف پشتیبانی می نماید و مخفف Grand unified Bootloader است. وقتی کامپیوتر بوت می شود ابتدا BIOS کل سخت افزارهای سیستم را چک کرده سپس به اولین سکتور هارد که مخصوص Master Boot Record است و ۵۱۲ بایت حجم دارد مراجعه کرده و کد آن را اجرا می کند به دلیل کوچک بودن این فضا، تنها یک قست از Grub در این کد قرار گرفته که اشاره می کند به قسمت دوم Grub که می تواند در هر جای دیسک و با هر حجمی باشد. سپس MBR به دنبال پارتیشن هایی که اکتیو هستند گشته و Boot Sector آنرا یافته و در حافظه ram قرار می دهد و کنترل سیستم را به آن می سپارد. Grub قابل ویرایش کردن است و می توان آنرا تغییر داد. 

۳۹ –  کارایی دستور sed را توضیح دهید؟

پاسخ: دستور sed که مخفف stream editor است می تواند وظایف مختلفی را در رابطه با فایل انجام دهد مانند جستجو، یافتن و جایگزینی، افزودن و یا پاک کردن. برای مثال دستور زیر عبارت unix را در فایل مربوطه جستجو کرده و آنرا با linux جایگزین می کند:

#sed ‘s/unix/linux/g’ test.txt

۴۰ –  کاربرد ماژول ها را در لینوکس توضیح دهید؟

پاسخ: ماژول ها کدهایی هستند که می توان آنها را بر اساس درخواست در کرنل لینوکس load و یا unload کرد. آنها یک عملکرد خاص را به کرنل اضافه می کنند بدون اینکه نیاز به ریبوت داشته باشد. درایورهای مختلف سخت افزاری نمونه ای از ماژول ها هستند که به کرنل اجازه می دهند به سخت افزارهای مربوطه دسترسی پیدا کند. بدون استفاده از ماژول ها ما مجبوریم که آن قابلیت را مستقیما درون کرنل قرار دهیم و آنرا recompile نموده و برای هر بار سیستم را ریبوت نماییم در ضمن با انجام اینکار کرنل بزرگتری را ایجاد نموده ایم. در آدرس /lib/modules/ برای هر نسخه کرنل یک دایرکتوری وجود دارد و تمامی ماژول ها درون آن قرار می گیرند. دستور lsmod لیست تمامی ماژول های سیستم را به شما نشان می دهد و از طریق دستور modprobe می توان ماژول ها را در کرنل اضافه و یا حذف کرد.

۴۱ –  Network Bonding چیست؟

پاسخ: این قابلیت امکان مجتمع شدن چند کارت شبکه و استفاده از آنها به صورت یک کارت شبکه را فراهم می کند. نام دیگر آن NIC Teaming و Link Aggregate است. این روش دارای مدهای مختلفی است که عبارتند از:

mode=0(balance-rr) – mode=1(active-backup) – mode=2(balance-xor) – mode=3(broadcast) – mode=4(802.3ad) – mode=5(balance-tlb) – mode=6(balance-alb)

در مدهای ۰ و ۲ و ۳ و ۴ تمامی پورت ها یک گروه می بایست به یک logical switch متصل شوند اما در مدهای ۱ و ۵ و ۶ پورت های یک گروه می توانند به سوئیچ های مختلف متصل شوند. هر چند که می توان با aggregate کردن چند سوئیچ فیزیکال همه آنها را به یک logical switch تبدیل کرد.

تمامی مدهای بالا در سه دسته کلی قرار می گیرند:

FailOver Only

تنها مد active-backup در این دسته قرار می گیرد. وقتی لینک اصلی fail شد لینک دوم جایگزین آن می شود.

Require Switch Support

مدهای balance-rr و ۸۰۲.۳ad و balance-xor هستند که باید سوئیچ نیز از آنها پشتیبانی نماید.

Generic Modes

در مد broadcast تمامی ترافیک از تمامی پورتهای عضو گروه خارج می شوند. در مد balance-tlb ترافیک خروجی load balance می شود اما ترافیک ورودی فقط از یک لینک می آید. در مد balance-alb نیز تمامی ترافیک ارسالی و دریافتی load balance می شود و از روش change MAC address استفاده می گردد.

سخن آخر اینکه اگر شما در محیطی کار می کنید که سوئیچ ها از ۸۰۲.۳ad یا همان LACP پشتیبانی می کنند، بهترین روش همین مد است. اما اگر ساپورت سوئیچی ندارید و هم می خواهید load balance داشته باشید و هم fault tolerance بهترین روش balance-alb است. در نهایت اگر می خواهید فقط بین دو سرور replication داشته باشید، مد balance-rr برای شما بهتر است.

۴۲ –  حافظه Swap را توضیح دهید و حداکثر میزان فضای آنرا بگویید؟

پاسخ: همانطور که می دانید پردازشگر تنها می تواند دیتا را بر روی حافظه RAM پردازش نماید و نه هارد. حافظه swap به عنوان جایگزین RAM می باشد که در فضای هارد ساخته شده است که در دو مورد کاربرد دارد. کاربرد اول آن برای زمانی است که RAM پر شده است و سیستم به سراغ swap می رود. کاربرد دوم آن اینست که میزان بسیار زیادی از دیتای برنامه ها تنها برای مراحل ابتدایی مورد نیاز است و بعد از آن بلااستفاده می مانند، در این حالت آنها به حافظه swap منتقل می گردند. در لینوکس می توان این حافظه را ایجاد نکرد اما در صورت پر شدن RAM سیستم crash خواهد کرد. در زمان های گذشته که میزان فضای RAM خیلی نبود قانونی برای تعیین میزان فضای swap وجود داشت که دو برابر میزان RAM بود. اما با توسعه تکنولوژی میزان فضای آنها بسیار افزایش پیدا کرده است و استفاده از قانون دو برابر باتوجه به سرعت بسیار کم حافظه swap عملا باعث کندتر شدن سیستم خواهیم شد. امروزه پیشنهاد می شود در صورتی که حافظه RAM کمتر از ۲G است از قانون ۲ برابر استفاده کنید، اگر بین ۲G تا ۸G است، میزان فضای هر دو حافظه را برابر بگذارید و در نهایت اگر بیشتر از ۸G است، میزان حافظه swap را همان ۸G بگذارید. البته با توجه به کاربردهای مختلف ممکن است ادمین شبکه در این مقادیر تغییراتی را ایجاد نماید. با استفاده از دستور زیر می توانید حافظه swap را مشاهده نمایید:

#swapon

۴۳ –  کاربرد دستور man را توضیح دهید.

پاسخ: از این دستور برای نمایش راهنمای برنامه ها استفاده می شود. خلاصه ای از سینتکس و سوئیچ های تعریف شده در برنامه و همچنین مثال هایی از کاربرد آن برنامه را می توانید در این راهنما مشاهده نمایید. برای مثال با دستور زیر می توانید راهنمای استفاده از دستور df را مشاهده نمایید:

#man df

۴۴ – دستور PWD در لینوکس چه کاربردی دارد؟

پاسخ: دستور pwd مخفف Print Working Directory است و نام مسیر کاری فعلی را به صورت کامل و با شروع از دایرکتوری روت، چاپ می‌کند. علاوه بر این متغیری محیطی است و به صورت متغیر می‌توان از آن استفاده کرد.

۴۵ – چگونه بفهمیم که یک فایل یا دایرکتوری چقدر از فضای هارد را گرفته است؟

پاسخ: دستور du برای اینکار استفاده می شود. نحوه استفاده از این دستور بشکل زیر است:

#du -h /var

خروجی دستور بالا میزان فضای تمامی فایل ها و پوشه های داخلی var/ را بصورت جداگانه نشان می دهد و در انتها جمع همه را نیز می گوید. اگر می خواهید فقط این بررسی تا یک عمق مشخصی انجام گیرد و دیگر از آن عمق به بعد فضای فایل ها و پوشه ها جداگانه لیست نگردد، باید از دستور زیر استفاده نمایید: (البته در جمع کل، همه ی فایل ها تا هر عمقی محاسبه می شوند اما دیگر بصورت جداگانه به نمایش در نمی آیند)

#du -h –max-depth 1 /var

۴۶ – کاربرد دستور df را توضیح دهید؟

پاسخ: دستور df مخفف disk free است و میزان فضای مورد استفاده در کلیه فایل سیستم های mount شده را نشان می دهد.

#df -h

ساختار خروجی این دستور به این شکل است که در ستون اول که به شکل filesystem مشخص شده است شما اسم دستگاه ذخیره سازی را مشاهده می کنید، برای مثال sda1. در ستون دوم سایز فایل سیستم را در قالب کیلوبایت به شما نمایش می دهد، با استفاده از پارامتر h- در همین دستور می توانید ظرفیت موجود را به شکل گیگابایت و مگابایت مشاهده نمایید. ستون سوم و ستون چهارم میزان فضای استفاده شده و همچنین میزان فضای موجود برای استفاده بر روی سیستم و قسمت پنجم هم همه این موارد را در قالب درصد به شما نمایش می دهد. آخرین ستون که بصورت Mounted on نمایش داده شده است مسیری را نمایش می دهد که فایل سیستم شما در آن mount شده است.

۴۷ – نام نسخه های سیستم عامل دبیان چگونه انتخاب می شوند؟

پاسخ: نام نسخه های ارائه شده توسط دبیان از کاراکترهای سریال Toy Story گرفته شده است و در نام نسخه های ناپایدار یا unstable دبیان نیز نام sid را مشاهده می نمایید که در این سریال در نقش پسربچه همسایه است که دائماً در فکر خراب کردن عروسک ها است.

۴۸ – نحوه بررسی سرعت اتصال به سایت

پاسخ: گاهی اوقات ممکن است بخواهید سرعت اتصال به سایت، سرعت TTFB و سرعت بالا آمدن سایت را مورد بررسی قرار دهید. دستور زیر بعلاوه اسکریپت مشخص شده به شما در این موضوع کمک خواهد کرد.

#seq 10 | xargs -n 1 /root/ttfb.sh https://actobit.com

#vim /root/ttfb.sh

#!/bin/bash
# file: ttfb.sh
# curl command to check the time to first byte
# ** usage **
# ۱. ./ttfb.sh “https://google.com”
# ۲. seq 10 | xargs -Iz ./ttfb.sh “https://google.com” or seq 10 | xargs -n 1 ttfb google.com

curl -o /dev/null \
-H ‘Cache-Control: no-cache’ \
-A ‘Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0’ \
-s \
-w “Connect: %{time_connect} TTFB: %{time_starttransfer} Total time: %{time_total} \n” \

خروجی این دستور را در ۱۰ خط می‌توانید مشاهده نمایید.

۴۹ – نحوه بدست آوردن آی پی لینوکس از محیط cmd

پاسخ: اگر بخواهید از طریق مرورگر آی پی خود را بدست آورید به راحتی با زدن جمله what is my ip address در گوگل می‌توانید آن را مشاهده نمایید. برای محیط command نیز می‌توانید این کار را از طریق دستور زیر انجام دهید.

#curl ifconfig.me

۵۰- چگونه تمام عکس‌های داخل یک دایرکتوری را از jpeg به jpg تغییر دهیم؟

#rename “s/jpeg$/jpg/” *.jpeg

۵۱- چگونه تمام عکس‌های با پسوند png را پیدا کنیم؟

#find ./ -type f -name “*.png”

۵۲- چگونه تمام عکس‌های با پسوند gif را به jpg تغییر دهیم؟

#mogrify -format jpg *.gif

۵۳- نحوه ساخت یوزر در محیط لینوکس

#useradd actobit

۵۴- نحوه تغییر پسورد یوزر در محیط لینوکس

#passwd actobit

۵۵- نحوه تغییر home directory کاربر در محیط لینوکس

#usermod -d /newhome/actobit actobit

۵۶- چگونه لیست تمام فایل‌ها و دایرکتوری‌های یک شاخه را بدست آوریم؟

#find /actobit/actomag/Content/seo/Himg -type f -printf ‘%p\n’ > /root/himg.txt

نمایش بیشتر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا