شاید شنیده باشید که توی لینوکس همه چی فایله، میخوام یه مقدار در موردش بیشتر بدونیم و به یه سری از سوالامون جواب بدیم.
توی لینوکس همهچیز فایله یا به صورت دقیقتر همهچیز رابطی به شکل فایل دارد. این همهچیز یعنی چی دقیقا؟ منظور اینه که دیوایسهای متصل به سیستم مثل موس و کیبورد، تنظیمات انجام شده روی سیستم و ... رابطی مشابه باقی فایلها دارند.
چه فایده یا اهمیتی داره؟ فایدهش اینه که اگر بخوایم با یک دیوایس کار کنیم با همون منطق کار با فایل مثلا آدرسدهی و خوندن و نوشتنی که بلدیم میتونیم کار کنیم و لازم نیست کار متفاوت و عجیبی کنیم.
مثال معروفش اینه که برای اینکه اطلاعات پردازنده رو دربیاریم، یه فایل برای اینکار داریم به نام cpuinfo و اگر محتویاتش رو بخونیم، اطلاعات پردازنده رو درمیآریم.
/proc/cpuinfo
همچنین برای مموری، از meminfo استفاده میکنیم.
/proc/meminfo
این فایلها توی چند تا پوشه هستند مثلا دیوایسها توی پوشه dev/ هستند، اطلاعات کرنل و داستانهای زمان اجرا مثلا پروسسهای باز توی proc و sys هستند.
بله! توی پوشه dev یه سری فایل مربوط به دیسکها و پارتیشن ها داریم که مثلا
/dev/sda
میشه هارد اول
و مثلا
/dev/sda1
میشه اولین پارتیشن روی هارد اول
فایلهای معمولی که روی سیستم جا گرفتن مثلا فایل های پوشه هوم کاربر و فایل های binary اجرایی و غیره ولی فایل های خاص مثل پوشه /dev و /proc و /sys اصولا روی هارد نیستن و زمانی که به محتواشون نیاز باشه کرنل اون رو هندل میکنه. (البته در مورد dev یه چیزایی هم گویا روی هارد نوشته میشه ولی ایده اصلی همونه که گفتم)
بیایید برای جواب دقیقتر به این سوال روند کار رو ببینیم، فرض کنیم یه برنامه سی داریم که میخواد از پوشه proc، فایل cpuinfo رو بخونه. برای این خوندن باید به کرنل درخواست بده، تا اینجا مشابه خوندن فایل از روی دیسک هست. اما کرنل میبینه که فایلی که خواستیم یه پارتیشن mount شده از روی دیسک نیست، بلکه یه فایل از نوع proc هست، پس میاد اطلاعاتی که لازم داره رو میسازه و به عنوان محتویات فایل نشون میده. پس سربار از نظر صدا کردن توابع کرنل داره ولی سربار خوندن دیسک رو نداره.
در این بین یه سری دیوایس خاص هم وجود دارند که این دیوایسها وجود خارجی ندارند.
مثلا dev/zero/ یه فایله که هرمقدار ازش بخونید بهتون 0 بر میگردونه. لازم به ذکره که نمیتونید همهی فایل رو بخونید چون تموم نمیشه فقط میتونید بر اساس نیاز با یه ابزاری (مثلا head) خط های اولش رو (به اون اندازه که نیاز دارید) بخونید.
۲ تا فایل هم برای تولید random داریم که dev/random/ و dev/urandom/ هستند که فرقشون اینه که اگر عدد رندومی وجود نداشته باشه random همچنان عدد شبه رندوم می ده ولی urandom به صورت blocking صبر میکنه تا عدد رندوم تولید بشه. (در مورد تولید عدد رندوم و آنتروپی میتونید بخونید.)
اما فایل محبوبم:
این فایل چیزی خروجی نمیده در عوض شما میتونید چیزهایی که لازم ندارید رو داخل این فایل بریزید مثلا میتونید خروجی دستوری که رو که نمیخواید نمایش داده بشه با دستور
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