فایل های معمولی یا Ordinary Files : در این فایل ها یا متن بصورت Text وجود دارد و یا کد داده یا Code Data برای اجرا
فایل های فهرست یا راهنما Directories Files : فهرست ها فایل هایی هستند که لیست فایل های دیگر را نمایش می دهند ، هر فایل فهرست یا Directory می تواند به یک فایل یا یک زیر فهرست یا Subdirectory نیز اشاره کند.
فایل های خاص یا Special Files : از این فایل ها برای نمایش دستگاه ها یا سخت افزارها توسط سیستم استفاده می شود.
فایل های لینک یا Link Files : یک فایل لینک ، یک فایل خاص است که این امکان را فراهم می کند که یک فایل یا directory را بتوانیم در چند قسمت از File System استفاده کنیم.
در علم کامپیوتر واژه File System که بصورت Filesystem هم شناخته میشود به عنوان روشی برای کنترل کردن ذخیرهسازی دادهها و بازیافت آن استفاده میشود. بدون File System زمانیکه شما یک فایل را درون فضای ذخیرهسازی خود قرار میدهید ، مشخص نیست که این فایل چقدر ظرفیت دارد، از کجا شروع شده است و کجا تمام می شود و تقریبا همه چیز در قالب یک فایل دیده میشود. با استفاده از تقسیم کردن دادهها به قطعات مجزای کوچک و قرار دادن یک اسم برای هر کدام از این قسمت ها، هر گروه از این دادهها به عنوان یک فایل در نظر گرفته میشود، در واقع فایل مجموعهای از دادهها است که بصورت گروهبندی شده توسط فایل سیستم کنار هم قرار گرفتهاند. به قوانین ساختاری و منطقی که برای مدیریت این گروه های داده ای و اطلاعات آنها وضع شده است و این ساختار را مدیریت می کند در اصطلاح File System گفته میشود. فایل سیستمها در انواع و اقسام متنوعی وجود دارند. هر کدام از آنها ساختار و منطق متفاوتی برای مدیریت گروه های داده دارند ، بیشترین تفاوت بین انواع فایل سیستم در ساختار و منطق ذخیره سازی ، سرعت عملکرد ، انعطاف پذیری ، امنیت، اندازه و… می باشد. برخی از فایل سیستم ها فقط برای استفاده نرم افزارهای خاصی طراحی شده اند، برای مثال ISO 9660 فایل سیستمی است که بصورت ویژه برای دیسکهای نوری طراحی شده است.
File System را شما می توانید در انواع و اقسام دستگاه های ذخیره سازی اطلاعات استفاده کنید. هر دستگاه ذخیره سازی اطلاعات برای خودش دارای یک نوع رسانه ذخیره سازی متفاوت است. بیشترین رسانه ذخیرهسازی اطلاعاتی که امروزه استفاده می شود دستگاههای ذخیرهسازی هستند که از دیسک های سخت یا Hard Disk با غشاء مغناطیسی استفاده میکنند. سایر رسانه هایی که برای ذخیره سازی داده استفاده می شوند نوارها ، دیسک های نوری و حافظه های فلش یا SSD هستند که امروزه بیشتر استفاده میشوند. در برخی اوقات حتی حافظه RAM سیستم نیز یک فایل سیستم موقتی برای استفاده موقت ایجاد میکند که البته کمتر مورد استفاده قرار میگیرد.
برخی از فایل سیستم ها بصورت Local استفاده می شوند و در دستگاه های ذخیره سازی اطلاعاتی استفاده میشوند که بر روی سیستم شما نصب شدهاند. اما برخی دیگر از انواع فایل سیستم وجود دارد که تحت شبکه کار میکنند و از طریق یک پروتکل تحت شبکه قابل استفاده هستند ، برای مثال فایل سیستم هایی مثل NFS و SMB از این نوع فایل سیستم ها یا پروتکل های فایل تحت شبکه به حساب میآیند. برخی از فایل سیستم ها نیز بصورت مجازی هستند یعنی virtual file system هستند ، این نوع فایل سیستم ها بر اساس یک درخواست معمولا ایجاد میشوند و بلافاصله به یک فایل سیستم دیگر ارجاع داده میشوند، در واقع در چنین فایل سیستمهایی یک فایل سیستم شناخته شده اصلی وجود دارد که همیشه به آن ارجاع داده می شود. فایل سیستم وظیفه مدیریت دسترسی به محتویات فایل ها و دادههای جانبی یا Metadata ای که در خصوص آن فایل وجود دارند را نیز برعهده دارد. فایل سیستم موظف است فضای ذخیرهسازی را مرتبسازی و چیدمان کند، قابل اعتماد بودن، کارآمدی و میزان سازی از دیگر وظایف مهم فایل سیستم است که همگی در طراحی یک فایل سیستم در نظر گرفته می شوند.
ما مهمترین و معروفترین فایل سیستم های مورد استفاده در سیستم عامل لینوکس GNU را معرفی می کنیم، لازم به ذکر است که بیشتر فایل سیستم های مورد استفاده در سیستم عامل ویندوز در سیستم عامل لینوکس نیز قابل استفاده هستند اما عکس این مورد وجود ندارد ، به هر حال مهمترین فایل سیستم های شناخته شده به شرح زیر می باشند :
minix : قدیمیترین و البته مطمئنترین فایل سیستم لینوکسی است اما امکانات محدودی ارائه میدهد.
ext : نسخه قدیمیتر فایل سیستم دیگری به نام ext2 است که از نسخههای جدیدتر این فایل سیستم پشتیبانی نمیکرد ، به ندرت از این فایل سیستم در سیستم عاملهای جدید استفاده میشود و معمولا با ext2 جایگزین میشود.
ext2 : یکی از پر امکانات ترین فایل سیستم های بومی لینوکس است اما قابلیت journaling را ندارد.
ext3 : این فایل سیستم علاوه بر اینکه تمامی قابلیتهای ext2 را دارد ، قابلیت journaling را نیز دارد. قابلیت journaling این امکان را به فایل سیستم می دهد که بعد از بروز مشکل یا صدمات ناشی از خاموش شدن نادرست یا اشکالاتی از این قبیل ، فایل سیستم بتواند خود را تعمیر کند و دچار مشکل نشود. در journaling تمامی اتفاقاتی که رخ میدهد ثبت و ضبط میشوند و به محض بروز مشکل قابل تعمیر میباشند.
reiserfs : یک فایل سیستم قابل اعتماد با قابلیت Journaling است.
jfs: یک فایل سیستم با قابلیت Journaling می باشد که بصورت ویژه توسط شرکت IBM برای محیط های کارایی بالا یا High Performance Environment طراحی شده است.
xfs : این فایل سیستم توسط شرکت Silicon Graphics برای فایل سیستم های 64 بیتی طراحی شده است. Xfs بصورت ویژه برای محیط های کارایی بالا یا High Performance طراحی شده است و برای کار کردن با فایل هایی با ظرفیت بالا و فایل سیستم های ظرفیت بالا مناسب است. علاوهبراین این فایل سیستم از چندین فایل سیستم خارجی نیز پشتیبانی میکند و باعث میشود تبادل فایل بین سیستم عاملهای مختلف سادهتر انجام شود. برخی از این فایل سیستمهای خارجی صرفا بر روی همان سیستم عامل قابل استفاده هستند برای مثال برخی از فایل سیستمها که فقط بر روی محیط های Unix قابل استفاده هستند در xfs پشتیبانی میشوند.
Msdos : این فایل سیستم در واقع سری فایل سیستم های FAT شرکت مایکروسافت برای محصولات خود می باشد.
vfat : یک نسخه از فایل سیستم FAT است که به عنوان FAT32 هم شناخته میشود. این فایل سیستم ظرفیت فایل بیشتری به نسبت FAT پشتیبانی میکند. بیشتر سیستم عاملهای شرکت مایکروسافت از Vfat پشتیبانی میکنند ، در واقع vfat همان FAT32 ویندوز است.
iso 9660 : این نوع فایل سیستم مخصوص CD-ROM و دیسک های نوری طراحی شده است و از اسامی فایل طولانی پشتیبانی میکند.
NFS : این نوع فایل سیستم همانطور که از نامش هم پیداست یک فایل سیستم تحت شبکه یا Network File System است و این امکان را میدهد که کامپیوترهای زیادی از طریق شبکه بتوانند به سادگی به این فایلهای شبکه ای دسترسی پیدا کنند.
hpfs : این نوع فایل سیستم همانطور که از نامش هم پیداست High Performance File System است و در سیستم عامل OS//2 استفاده میشود.
ntfs: مخفف New Technology File System است و یک فایل سیستم با درجه امنیتی بالاتر به نسبت فایل سیستم قدیمی مایکروسافت یا همان Fat است. NTFS قابلیت Journaling را نیز پشتیبانی می کند.
#دستهبندی فایلها اولین باری که مفهوم دسته بندی فایل ها در دنیای IT مطرح شد در سیستم عامل یونیکس بود . در این سیستم عامل واژه جدیدی به نام دایرکتوری (پوشه) به ساختار بدنه سیستم عامل اضافه شد که به کمک آن میتوان سایر فایل ها را دسته بندی کرد. اینکه ما بتوانیم تمامی فایلها را بر اساس سلیقه خود یا نوع آنها و یا هر مولفه ای از آنها دسته بندی کنیم جهشی بسیار بزرگ در ساختار سیستم عامل ها بود که توانست ساختار مرتب و منظمی به آنها بدهد. لازم است بدانید که حتی دایرکتوری ها هم فایل هایی هستند از نوع دایرکتوری.
ساختار فایل سیستم در لینوکس به این صورت است که یک دایرکتوری اصلی به نام "/" وجود دارد که تمامی سیستم عامل داخل این دایرکتوری جای دارد . در تصویر زیر ساختار عمومی فایل سیستم لینوکس آمده است که در ادامه به توضیح این تصویر میپردازم .
سیستم عامل لینوکس یک سیستم عامل بر مبنا فایل (File Based) میباشد . وقتی یک سیستم عامل بر مبنا فایل است یعنی همه چیز از نظر سیستم عامل یک فایل است . مواردی همچون برنامه اجرایی و پوشه و تصویری و صوتی و عکس و راه های ارتباطی با سخت افزار و هرچیز دیگری به عنوان یک فایل در سیستم عامل تعریف میشوند .
جالب است بدانید که در تمامی لینوکسها فارغ از اینکه این لینوکس در یک کامپیوتر شخصی است یا یک ابر سرور یا یک ربات یا یک گوشی همراه یا یک پرینتر یا یک صفینه فضایی یا خودرو شخصی شما و یا هر جای دیگر این ساختار وجود دارد . البته برخی دایرکتوریها میتوانند کم یا زیاد باشند ولی در کلیت قضیه همگی سیستم عامل های لینوکس دارای ساختار مشابه هستند.
زیر مجموعه دایرکتوری "/" تعدادی دایرکتوری هست که در ادامه به توضیح آنها میپردازم
دایرکتوری bin
این دایرکتوری که اول عبارت binaries هست شامل فایل های اجرایی است . برای نمونه دستورات لینوکس همگی باید یک فایل اجرایی داشته باشند که برخی از اون فایل ها در این دایرکتوری وجود دارد .
دایرکتوری boot
هرچیزی که لینوکس برای بووت شدن لازم دارد در این دایرکتوری قرار دارد . از لحظه ای که bios یا همان Basic Input Output Supervisor/Service ادامه کار را به boot loader لینوکسی میدهد تا لحظه ای که مدیریت به systemd/init تحویل داده شود همه چیز در این دایرکتوری است .
دایرکتوری dev
در لینوکس تمامی سخت افزار های حقیقی و مجازی متصل باید یک فایل ارتباطی داشته باشند که تمامی این فایل ها در این دایرکتوری است . برای نمونه میتوان به cdrom و usb و هارد های متصل و کارت صدا و کارت شبکه و ... اشاره کرد . عبارت dev بیانگر کلمه devices میباشد .
دایرکتوری etc
برای نام این دایرکتوری بین دو عبارت Etcetera و Editable Text Configuration اختلاف وجود دارد که از نظر من هردو میتواند درست باشد . چون این دایرکتوری هم شامل تمامی فایل های تنظیمات لینوکس میباشد و هم در این دایرکتوری میتوان فایل هایی دید که هیچ ربطی به تنظیمات ندارند.
دایرکتوری home
چون لینوکس یک سیستم عامل چند کاربره (مالتی یوزر) هست یعنی اینکه چندین کاربر میتوانند به صورت همزمان با سیستم عامل کار کنند پس تمامی این کاربر ها نیاز دارند به یک جایی که فایل های شخصی خود را در آنجا نگه دارند که مابقی کاربر ها به آن جا دسترسی نداشته باشند . معادل این حریم امن در دنیای واقعی میتوان به خانه اشاره کرد. پس هرکاربری نیاز به یک خانه دارد که در آنجا احساس امنیت کند. تمامی خانه های مربوط به کاربران در این دایرکتوری تعریف میشوند .
دایرکتوری lib
تمامی برنامه های زیرمجموعه لینوکس نیاز دارند که با سایر برنامه ها یا سخت افزار ها ارتباط برقرار کنند و یا از آنها استفاده کنند . برای نمونه یک نرم افزار پخش فایل صوتی که با زبان c نوشته شده است نیاز دارد با کارت صدا و کامپایلر c و چند نرم افزار دیگر ارتباط برقرار کند راه های ارتباطی این نرم افزار ها با یکدیگر در این دایرکتوری وجود دارند.
دایرکتوری media
این دایرکتوری معمولا برای سخت افزار های اضافه شده مانند usb و cdrom و ... استفاده میشود . این دایرکتوری ممکن است در بعضی از نسخه ها وجود نداشته باشد.
دایرکتوری mnt
این دایرکتوری برای mount کردن استفاده میشود. گرچه عملیات mount در هرجای سیستم عامل قابل انجام است.
دایرکتوری opt
این دایرکتوری که نام کامل آن optional است به صورت باز به عهده کاربر است و کاربر میتواند هرطور که دوست دارد از این دایرکتوری استفاده کند.
دایرکتوری proc
این دایرکتوری که از عبارت processes ساخته شده است وضعیت در لحظه فرآیندهای سیستم عامل را نشان میدهد.
دایرکتوری root
این دایرکتوری خانه کاربر اصلی root است که کاربر اصلی سیستم عامل لینوکس است. به دلایل امنیتی که کاملا صحیح میباشد خانه کاربر root از سایر کاربر ها جدا باید باشد .
دایرکتوری sbin
این دایرکتوری که درواقع system binaries است جایگاه اصلی فایل ها و نرم افزار های سیستمی است.
دایرکتوری srv
این دایرکتوری که serve directory است برای نگهداری فایل های قابل سرو توسط سرویس ها استفاده میشود. برای نمونه یک ftp سرور را درنظر بگیرید که نیاز داره برای سرو یک سری فایل .
دایرکتوری tmp
این دایرکتوری که کوتاه شده عبارت temporary است برای نگهداری فایل های موقت استفاده میشود. نکتهای که در مورد این دایرکتوری باید درنظر بگیریم این است که تمامی کاربرها در این دایرکتوری مجوز کامل دارند و میتواند مشکل امنیتی بوجود بیاورد .
دایرکتوری usr
این دایرکتوری نیز مانند دایرکتوری etc در انتخاب نام اختلافهایی دارد . بین نامهای users programs و unix system resources اختلاف هایی است که هردو صحیح میباشد . این دایرکتوری در برگیرنده برنامه های کاربردی کاربران میباشد که در خود لینوکس نیست و بعدا اضافه شده است .
دایرکتوری var
این دایرکتوری که از عبارت variables گرفته شده است شامل تمامی اطلاعات متغییر میباشد. برای نمونه تمامی لاگ فایل ها که ممکن است در لحظه تغییر کنند و یا هر فایلی که ممکن است تغییر کند در این دایرکتوری جای دارد.
چند نکته مهم تمامی این دایرکتوری ها به صورت قراردادی و استاندارد لینوکس هستند . ما میتوانیم در هرجا که دوست داریم هر کاری را انجام دهیم . برای نمونه به راحتی میتوانیم خانه یک کاربر را به جای اینکه در دایرکتوری home قرار دهیم در دایرکتوری tmp بسازیم و یا اینکه فایل های تنظیمات را در opt قرار دهیم .
تفاوت bin و sbin در این است که یک سری فایل های اجرایی و دستورات اجرایی مخصوص هسته لینوکس هست مانند mv که این نوع فایل ها که مخصوص کرنل هست و مربوط به دستورات داخلی لینوکس میباشد داخل دایرکتوری bin هست ولی دستوراتی مانند ifconfig که داخل کرنل نیستند و به صورت نرم افزار بعدا اضافه میشوند در دایرکتوری sbin قرار دارند .
اینکه ممکن است در نسخه های متفاوت لینوکس این ساختار متفاوت باشد و یک یا چند دایرکتوری اضافه یا کم باشند.
https://commons.wikimedia.org/wiki/File:Standard-unix-filesystem-hierarchy.svg
https://www.itnso.com/zfs-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3/
http://www.pardisco.ir/blog/storage/storage-information/223-zfs-file-system2
http://www.pardisco.ir/blog/storage/storage-information/224-zfs-file-system
http://www.comphys.ir/linux/linux-filesystems-explained-ext234-xfs-btrfs-zfs/