آموزش LPIC1 – بخش دوم

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

در ویندوز ما درایوها را به صورت : C و : D  و : E و … میدیدیم که اینها پارتیشن های اصلی ما بودند و سایر فایلها و فولدرها در داخل این ها قرار می گرفتند. ولی در لینوکس به این صورت نیست. در لینوکس ما یک درخت بزرگ داریم که با / یا root آغاز شده و سایر پوشه ها به صورت زیر مجموعه ی آن تعریف می گردند. لازم به ذکر است تنها همین یک ریشه وجود دارد.

موردی را در نظر بگیرید که بخواهیم یک USB یا DVD Drive را به لینوکس متصل کرده و با آن کار کنیم. همچنین امکان دارد بخواهیم به وسیله ی SSH و NFS و SMB از طریق راه دور یا Remote سیستم عامل را به هارد دیسک ها متصل کنیم. (هارد دیسک ها در جای دیگری از نظر موقعیت مکانی وجود دارند.) در این مورد هارد دیسک ها و درایو ها باید در جایی زیر مجموعه ی این ریشه ی اصلی ذخیره گردند. به پروسه شناساندن دستگاه ذخیره ساز خارجی به سیستم عامل، به نحوی که در زیرمجموعه ی root اصلی در یکی از پوشه ها (مانند media) قابل دسترس باشد، Mount کردن گفته میشود. به طور مثال وقتی گفته میشود درایو USB در مسیر زیر Mount شده است، به این معنی است که فایل های مربوط به این USB درایو از طریق این مسیر قابل دسترس است. لازم به ذکر است در ویندوز USB Drive ها به صورت مثلا :G در دسترس قرار خواهند گرفت.

/media/usb-drives/usb-hp-124

 

سوال: در فایل سیستم روت (همان /) چه دایرکتوری هایی وجود دارند ؟

دایرکتوری bin: در این دایرکتوری دستورات اصلی لینوکس ذخیره میگردند.

root@regux:/bin# ls
bash cpio gzexe lsmod ntfscmp rm systemd-hwdb which
bunzip2 dash gzip mkdir ntfsfallocate rmdir systemd-inhibit ypdomainname
busybox date hciconfig mknod ntfsfix rnano systemd-machine-id-setup zcat
bzcat dd hostname mktemp ntfsinfo run-parts systemd-notify zcmp
bzcmp df ip more ntfsls rzsh systemd-sysusers zdiff
bzdiff dir journalctl mount ntfsmove sed systemd-tmpfiles zegrep
bzegrep dmesg kbd_mode mountpoint ntfsrecover sendprobe systemd-tty-ask-password-agent zfgrep
bzexe dnsdomainname kill mt ntfssecaudit setfacl tailf zforce
bzfgrep domainname kmod mt-gnu ntfstruncate setfont tar zgrep
bzgrep dumpkeys less mv ntfsusermap setupcon tempfile zless
bzip2 echo lessecho nano ntfswipe sh touch zmore
bzip2recover egrep lessfile nc open sh.distrib true znew
bzless false lesskey nc.traditional openvt sleep udevadm zsh
bzmore fgconsole lesspipe netcat pidof ss ulockmgr_server zsh5
cat fgrep ln netstat ping stty umount
chacl findmnt loadkeys networkctl ping4 su uname
chgrp fuser login nisdomainname ping6 sync uncompress
chmod fusermount loginctl ntfs-3g ps systemctl unicode_start
chown getfacl lowntfs-3g ntfs-3g.probe pwd systemd usleep
chvt grep ls ntfscat rbash systemd-ask-password vdir
cp gunzip lsblk ntfscluster readlink systemd-escape wdctl

از مهمترین دستورات میتوان به echo و pwd اشاره کرد.

دایرکتوری Boot: در این دایرکتوری فایل های استاتیکی که برای boot سیستم مورد نیاز هستند و در اصل مربوط به bootloader لینوکسند در این دایرکتوری قرار میگیرند. این دایرکتوری باید قدری خاص باشد، به طور مثال همانطور که در پایین توضیح میدهیم در صورتی که از MBR استفاده کنیم نباید boot/ روی هارد دیسکی با ظرفیت بیش از 2TB قرار داده شود. لذا همیشه پارتیشن boot/ را جداگانه ایجاد نمایید. این به شما کمک میکند وقتی سایر پارتیشن ها Crash کردند، پارتیشن boot در دسترس بوده و امکان Load سیستم عامل را بدهد تا بتوان سایر پارتیشن ها را Repair کرد. معمولا حجم آن در حدود 200MB در نظر گرفته میشود و باید در دسترس BIOS باشد. (مثلا اگر روی Network باشد BIOS نمیتواند به آن دسترسی یابد.)

دایرکتوری home: کاربران در این دایرکتوری فایل های شخصی خود را ذخیره میکنند.

دایرکتوری root: این دایرکتوری Home کاربر root سیستم است.

دایرکتوری Dev: سخت افزارهای فیزیکی و غیر فیزیکی (مجازی) که به سیستم عامل متصل هستند، همگی در این دایرکتوری دیده می شوند.

root@regux:/dev# ls
agpgart cuse input null sda5 tty10 tty22 tty34 tty46 tty58 ttyS3 vcsa2
autofs disk kmsg port sg0 tty11 tty23 tty35 tty47 tty59 uhid vcsa3
block dmmidi log ppp sg1 tty12 tty24 tty36 tty48 tty6 uinput vcsa4
bsg dri loop-control psaux shm tty13 tty25 tty37 tty49 tty60 urandom vcsa5
btrfs-control dvd mapper ptmx snapshot tty14 tty26 tty38 tty5 tty61 vcs vcsa6
bus fb0 mcelog pts snd tty15 tty27 tty39 tty50 tty62 vcs1 vfio
cdrom fd mem random sr0 tty16 tty28 tty4 tty51 tty63 vcs2 vga_arbiter
cdrw full memory_bandwidth rfkill stderr tty17 tty29 tty40 tty52 tty7 vcs3 vhci
char fuse midi rtc stdin tty18 tty3 tty41 tty53 tty8 vcs4 vhost-net
console hidraw0 mqueue rtc0 stdout tty19 tty30 tty42 tty54 tty9 vcs5 vmci
core hpet net sda tty tty2 tty31 tty43 tty55 ttyS0 vcs6 zero
cpu hugepages network_latency sda1 tty0 tty20 tty32 tty44 tty56 ttyS1 vcsa
cpu_dma_latency initctl network_throughput sda2 tty1 tty21 tty33 tty45 tty57 ttyS2 vcsa1

به طور مثال کنسول ها (tty ها) و هاردها (sd ها) در این دایرکتوری قرار میگیرند.

دایرکتوری etc: فایل های کانفیگ در این دایرکتوری قرار میگیرند. به طور مثال کانفیگ وب سرور Apache در این دایرکتوری قرار میگیرد.

دایرکتوری lib: در این دایرکتوری فایل های Library و برخی از ماژول های اختصاصی کرنل قرار می گیرند. به طور مثال اگر ما یک برنامه ای مینویسیم که جهت اجرا شدن یا انجام پروسه خاصی مانند باز نمودن یک مرورگر از یک Library استفاده میکند، به هنگام نصب وجود این Library را در این دایرکتوری بررسی می نماید.

نکته: برنامه نویسی در لینوکس به این شکل است که یک مجموعه ی نسبتا کامل از Library ها درون دایرکتوری lib/ قرار دارد و هر برنامه از این Library ها جهت اجرا و انجام دستورات استفاده می نماید. مثلا در برنامه ای که نیاز به خواندن Keyboard دارد، بخش خواندن Keyboard آن مجدد از نو نوشته نمیشود و در عوض از Library ای که به همین منظور در دایرکتوری lib/ وجود دارد استفاده میگردد. یکی از دلایل حجیم بودن برنامه های ویندوزی عدم استفاده از Library ها بدین صورت می باشد. مورد مثبت این قضیه این است که به طور مثال اگر ما در Library تایپ از زبان فارسی پشتیبانی کنیم و این زبان را به این Library اضافه کنیم، تمام برنامه هایی که از تایپ استفاده مینمایند فارسی را پشتیبانی میکنند. تنها کاری که ما لازم است انجام دهیم بهروز رسانی این Library است.

دایرکتوری media: این دایرکتوری Mount Point بوده و هارد دیسک ها و سخت افزارهای External که به صورت Removable می باشند در این دایرکتوری قرار میگیرند.

دایرکتوری mnt: عملکرد این دایرکتوری نیز مانند media بوده با این تفاوت که سخت افزار هایی که میخواهیم به صورت دائمی Mount نماییم معمولا در این دایرکتوری قرار میگیرند. لازم به ذکر است این مورد قرار دادی بوده و برای انجام شدن تمیز Mount ها و دسته بندی آنها صورت میگیرد و هیچ اجباری وجود ندارد.

دایرکتوری opt: معمولا برنامه هایی که بخشی از لینوکس نیستند در این دایرکتوری قرار میگیرند. به طور مثال اگر یک Game روی لینوکس نصب کنیم و بخواهیم برای تمامی کاربران در دسترس باشد، معمولا باید انتظار داشته باشیم فایل ها در این دایرکتوری قرار بگیرند.

دایرکتوری sbin: در این دایرکتوری، دستورات مهمتر لینوکس قرار دارند که معمولا root آنها را اجرا می نماید.

root@regux:/sbin# ls
acpi_available dumpe2fs getpcaps iwpriv mii-tool ntfscp rtmon vgck
agetty dumpexfat getty iwspy mkdosfs ntfslabel runlevel vgconvert
apm_available e2fsck halt kbdrate mke2fs ntfsresize runuser vgcreate
badblocks e2image hdparm killall5 mkexfatfs ntfsundelete setcap vgdisplay
blkdeactivate e2label hwclock ldconfig mkfs on_ac_power sfdisk vgexport
blkdiscard e2undo ifconfig logsave mkfs.bfs pam_tally sgdisk vgextend
blkid ethtool ifdown losetup mkfs.cramfs pam_tally2 shadowconfig vgimport
blockdev exfatfsck ifenslave lsmod mkfs.exfat parted shutdown vgimportclone
bridge exfatlabel ifenslave-2.6 lvchange mkfs.ext2 partprobe slattach vgmerge
capsh fatlabel ifquery lvconvert mkfs.ext3 pivot_root start-stop-daemon vgmknodes
cfdisk fdisk ifup lvcreate mkfs.ext4 plipconfig sulogin vgreduce
cgdisk findfs init lvdisplay mkfs.fat poweroff swaplabel vgremove
chcpu fixparts insmod lvextend mkfs.minix pvchange swapoff vgrename
crda fsadm installkernel lvm mkfs.msdos pvck swapon vgs
cryptdisks_start fsck ip lvmchange mkfs.ntfs pvcreate switch_root vgscan
cryptdisks_stop fsck.cramfs ip6tables lvmconf mkfs.vfat pvdisplay sysctl vgsplit
cryptsetup fsck.exfat ip6tables-restore lvmconfig mkhomedir_helper pvmove tc wipefs
cryptsetup-reencrypt fsck.ext2 ip6tables-save lvmdiskscan mkntfs pvremove telinit wpa_action
ctrlaltdel fsck.ext3 ipmaddr lvmdump mkswap pvresize tipc wpa_cli
debugfs fsck.ext4 iptables lvmetad modinfo pvs tune2fs wpa_supplicant
depmod fsck.fat iptables-restore lvmpolld modprobe pvscan udevadm xtables-multi
devlink fsck.minix iptables-save lvmsadc mount.exfat rarp umount.udisks2 zramctl
dhclient fsck.msdos iptunnel lvmsar mount.exfat-fuse raw unix_chkpwd
dhclient-script fsck.vfat isosize lvreduce mount.fuse reboot unix_update
dmeventd fsfreeze iw lvremove mount.lowntfs-3g regdbdump vconfig
dmsetup fstab-decode iwconfig lvrename mount.ntfs resize2fs veritysetup
dmstats fstrim iwevent lvresize mount.ntfs-3g rmmod vgcfgbackup
dosfsck gdisk iwgetid lvs nameif route vgcfgrestore
dosfslabel getcap iwlist lvscan ntfsclone rtacct vgchange

دایرکتوری srv: در این دایرکتوری دیتاهایی که توسط این سیستم Provide میشود قرار میگیرند.

دایرکتوری tmp: فایل های موقت در این دایرکتوری قرار میگیرند. معمولا با هر بار reset شدن سرور فایل های این دایرکتوری حذف میشوند.

دایرکتوری usr: مانند / است ولی دارای اهمیت کمتری میباشد. مجموعه ای از تمام موارد ذکر شده ی قبلی که دارای اهمیت کمتری می باشد در این دایرکتوری قرار میگیرد. به طور مثال اگر ما Apache نصب کنیم، فایل های مربوطه در این دایرکتوری قرار خواهد گرفت.

root@regux:/usr# ls
bin games include lib lib64 local sbin share src var

دایرکتوری var: بکاپ ها، گزارشات، فایل های بانک اطلاعاتی، اطلاعات وب سرور، لاگ ها و به طور کلی تمام فایل هایی که تغییر میکنند در این دایرکتوری قرار میگیرند.

 

پارتیشن ها:

وقتی یک دیسک خریداری میشود (با حجم 500GB) باید پارتیشن بنده شود. در ویندوز معمولا این مورد به صورت : C و : D و … انجام میشود. مثلا قصد داریم 100MB به boot/ و 200MB به usr/ و بقیه در اختیار / باشد. یعنی ما میتوانید از یک هارد بزرگ اجزای کوچکتری بسازیم. در لینوکس اولین هارد دیسک SATA با sda و دومین آن با sdb و … نمایش داده میشود. در زمان قدیم تر این نام ها به صورت hda و hdb بود ولی امروزه به صورت sd است. همچنین پارتیشن ها با عدد در انتهای این نام قرار میگیرند، مثلا sda1 همان پارتیشن اول دیسک SATA ی نخست ماست.

ما از دستور fdisk برای پارتیشن بندی استفاده میکنیم.

برای ورود به برنامه باید ابتدا هارد مشخص گردد، سپس با استفاده از flag ها می توانیم به اطلاعات جزئی تر دسترسی یابیم. به طور مثال فلگ p اطلاعات هارد را print میکند.

root@regux:/usr# fdisk /dev/sda

Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

 

Command (m for help): p
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0360c38f

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 37750783 37748736 18G 83 Linux
/dev/sda2 37752830 41940991 4188162 2G 5 Extended
/dev/sda5 37752832 41940991 4188160 2G 82 Linux swap / Solaris

Command (m for help):

این دستور سایز پارتیشن ها را به همراه نام آنها نمایش میدهد. همچنین با q میتوانیم از برنامه  fdisk خارج گردیم. بعدا به صورت مفصل در این رابطه توضیح خواهیم داد. فعلا دانستن شما در همین حد کافی است.

همچنین از دستور parted نیز میتوانیم بدین منظور استفاده نماییم. به طور مثال دستور Parted مشابه دستور fdisk که در بالا ذکر شد، به شرح زیر بوده که اطلاعات بیشتری را در اختیار ما قرار میدهد.

root@kali:/usr# parted /dev/sda p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 19.3GB 19.3GB primary ext4 boot
2 19.3GB 21.5GB 2144MB extended
5 19.3GB 21.5GB 2144MB logical linux-swap(v1)

 

همچنین gparted هم یک برنامه گرافیکی است که خدمات پارتیشن بندی را در محیط های گرافیکی به ما ارائه میدهد.

 

 

MBR چیست؟

فرمتی است که از ابتدا هارد ها با آن جدول پارتیشن خود را می ساختند.وقتی هارد ها با این روش پارتیشن بندی میشدند MBR یک فضای کوچک برای ذخیره سازی خود در ابتدای هارد دیسک اشغال میکرد و پارتیشن ها بعد از این فضا ساخته میشدند. لازم به ذکر است MBR محدودیتی از جمله عدم پشتیبانی از هارد های بزرگتر از 2 تراباید و عدم ساخت پارتیشن بیش از 4 عدد داشت.

به دلیل اینکه MBR تنها 4 پارتیشن Primary میسازد، در صورتی که ما نیاز به پارتیشن بیشتر از 4 عدد داشته باشیم، میتوانیم یک پارتیشن Extended بسازیم و در آن به تعداد دلخواه از پارتیشن های Logical استفاده نماییم.

پارتیشن های Logical از dev/sda5/ شروع میشوند. و نام 4 پارتیشن قبلی برای Primary ها باقی میماند.

 

 

پس حالا میدانیم که dev/sda7/ یعنی دیسک سوم Logical از هارد دیسک SATA اول.

برای رهایی از MBR فرمت جدید GPT ارائه گردید که قابلیل ساخت نامحدود پارتیشن به همراه پشتیبانی از ظرفیت بالاتر هارد دیسک را ارائه میدهد.

 

LVM چیست ؟

در پایان مفهوم LVM را توضیح خواهیم داد. شرایطی را در نظر بگیرید که هارد 500 گیگابایتی سرور پر شده است و نیاز داریم آن را ارتقاء دهیم. راه حل قدیمی این است که هارد دیسکی با ظرفیت بالاتری تهیه کنیم و فایل ها را درون آن کپی کنیم. در این صورت با پر شدن آن هارد دیسک نیز باز این مشکل وجود خواهد داشت و شرایط تا جایی پیش خواهد رفت که هاردی با ظرفیت بالاتر قابل دسترس نیست.

راه حل استفاده از LVM یا همان Logcal Volume Management است. ما می توانیم Abstract Layer داشته باشیم به صورتی که چند هارد دیسک جداگانه را به هم بچسبانیم و به LVM بگوییم این هارد دیسک ها را در قالب یک هارد دیسک واحد به سیستم عامل معرفی نماید. مهمتر این که در صورتی که فضای هارد دیسک ما پر شد باز هم میتوانیم هارد دیسک فیزیکی جداگانه ای را به این مجموعه هاردها اضافه کنیم.

 

لازم است با برخی اصطلاحات در ارتباط با LVM آشنا شویم.

pv: همان هارد دیسک های فیزیکی یا پارتیشن هایی هستند که به صورت یک هارد دیسک فیزیکی جداگانه شناسایی میگردند.

vg: گروهی از مجوعه ی pv است.

lv: همان pv است که به سیستم عامل معرفی میگردد.

 

 

Swap چیست؟

وقتی memory سرور به اتمام میرسد، مقدار حافظه ی اضافه که سیستم عامل به آن نیاز دارد توسط کرنل از طریق Swap در دسترس سیستم عامل قرار میگیرد. در واقع ما میتوانیم برخی از Memory را به Hard منتقل کنیم که البته بسیار کند تر است ولی به ما اجازه میدهد روی سرورهایی با حافظه ی کمتر کارهای بزرگتری انجام دهیم.

باید توجه داشت که در لینوکس مقدار Swap باید دو برابر رم بوده و بیشتر از 8GB هم نباشد. چون وقتی 8GB اطلاعات رم روی هارد دیسک نوشته شود، عملا آن سرور با کندی بسیار شدید مواجه خواهد شد.

 

 

نویسنده: میلاد خوشدل

منابع:

-جادی
-sybex
-کتاب راهنمای جامع مدرک بین المللی Lpic1


پاسخ دهید

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

15 + 2 =