روزبه شریف‌نسب
روزبه شریف‌نسب
خواندن ۳ دقیقه·۵ سال پیش

در لینوکس همه‌چیز فایله یعنی چی؟

شاید شنیده باشید که توی لینوکس همه چی فایله، می‌خوام یه مقدار در موردش بیش‌تر بدونیم و به یه سری از سوالامون جواب بدیم.

توی لینوکس همه‌چیز فایله یا به صورت دقیق‌تر همه‌چیز رابطی به شکل فایل دارد. این همه‌چیز یعنی چی دقیقا؟ منظور اینه که دیوایس‌های متصل به سیستم مثل موس و کیبورد، تنظیمات انجام شده روی سیستم و ... رابطی مشابه باقی فایل‌ها دارند.

چه فایده یا اهمیتی داره؟ فایده‌ش اینه که اگر بخوایم با یک دیوایس کار کنیم با همون منطق کار با فایل مثلا آدرس‌دهی و خوندن و نوشتنی که بلدیم می‌تونیم کار کنیم و لازم نیست کار متفاوت و عجیبی کنیم.

مثال معروفش اینه که برای اینکه اطلاعات پردازنده رو دربیاریم، یه فایل برای اینکار داریم به نام cpuinfo و اگر محتویاتش رو بخونیم، اطلاعات پردازنده رو درمی‌آریم.

/proc/cpuinfo


همچنین برای مموری، از meminfo استفاده می‌کنیم.

/proc/meminfo


این فایل‌ها توی چند تا پوشه هستند مثلا دیوایس‌ها توی پوشه dev/ هستند، اطلاعات کرنل و داستان‌های زمان اجرا مثلا پروسس‌های باز توی proc و sys هستند.


آیا هاردها هم خودشون فایل هستن؟

بله! توی پوشه dev یه سری فایل مربوط به دیسک‌ها و پارتیشن ها داریم که مثلا

/dev/sda

میشه هارد اول

و مثلا

/dev/sda1

میشه اولین پارتیشن روی هارد اول


آیا این فایل‌ها روی سیستم جا گرفتن؟

فایل‌های معمولی که روی سیستم جا گرفتن مثلا فایل های پوشه هوم کاربر و فایل های binary اجرایی و غیره ولی فایل های خاص مثل پوشه /dev و /proc و /sys اصولا روی هارد نیستن و زمانی که به محتواشون نیاز باشه کرنل اون رو هندل می‌کنه. (البته در مورد dev یه چیزایی هم گویا روی هارد نوشته می‌شه ولی ایده اصلی همونه که گفتم)


آیا کار با این فایل‌ها سربار IO داره؟

بیایید برای جواب دقیق‌تر به این سوال روند کار رو ببینیم، فرض کنیم یه برنامه سی داریم که می‌خواد از پوشه proc، فایل cpuinfo رو بخونه. برای این خوندن باید به کرنل درخواست بده، تا اینجا مشابه خوندن فایل از روی دیسک هست. اما کرنل می‌بینه که فایلی که خواستیم یه پارتیشن mount شده از روی دیسک نیست، بلکه یه فایل از نوع proc هست، پس میاد اطلاعاتی که لازم داره رو می‌سازه و به عنوان محتویات فایل نشون می‌ده. پس سربار از نظر صدا کردن توابع کرنل داره ولی سربار خوندن دیسک رو نداره.


دیوایس‌های خاص

در این بین یه سری دیوایس خاص هم وجود دارند که این دیوایس‌ها وجود خارجی ندارند.

مثلا dev/zero/ یه فایله که هرمقدار ازش بخونید بهتون 0 بر می‌گردونه. لازم به ذکره که نمی‌تونید همه‌ی فایل رو بخونید چون تموم نمی‌شه فقط می‌تونید بر اساس نیاز با یه ابزاری (مثلا head) خط های اولش رو (به اون اندازه که نیاز دارید) بخونید.


۲ تا فایل هم برای تولید random داریم که dev/random/ و dev/urandom/ هستند که فرقشون اینه که اگر عدد رندومی وجود نداشته باشه random همچنان عدد شبه رندوم می ده ولی urandom به صورت blocking صبر می‌کنه تا عدد رندوم تولید بشه. (در مورد تولید عدد رندوم و آنتروپی می‌تونید بخونید.)



اما فایل محبوبم:

  • /dev/null

این فایل چیزی خروجی نمی‌ده در عوض شما می‌تونید چیز‌هایی که لازم ندارید رو داخل این فایل بریزید مثلا می‌تونید خروجی دستوری که رو که نمی‌خواید نمایش داده بشه با دستور

ls > /dev/null

بریزید دور.

(برای اینکه stderr هم بریزید دستور

ls > /dev/null 2>&1

رو بزنید)



منابع:

https://unix.stackexchange.com/questions/119648/redirecting-to-dev-null

https://unix.stackexchange.com/questions/324209/when-to-use-dev-random-vs-dev-urandom

https://unix.stackexchange.com/questions/188886/what-is-in-dev-proc-and-sys

https://en.wikipedia.org/wiki/Everything_is_a_file

لینوکسفایلفایل سیستم
همینجا بگم که روزبه شریف نسب درسته و نه شریف نصب یا شریفی نسب یا هرچیز غلط دیگه..
شاید از این پست‌ها خوشتان بیاید