<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>پست‌های انتشارات فاک دِ کْد</title>
        <link>https://virgool.io/FuckTheCode/feed</link>
        <description>&quot; جایی برای برنامه نویس ها نیست &quot;

نام پادکست : &lt; به زودی &gt;

برنامه نویسی ماژولار + پرکتیکال

عاشق C  و لینوکس!

حتما به چنل تلگرام بیا : https://t.me/FuckT8eC0de</description>
        <language>fa</language>
        <pubDate>2026-06-16 08:17:04</pubDate>
        <image>
            <url>https://files.virgool.io/upload/publication/1f6mk3nmvjm5/whzdgr.png</url>
            <title>فاک دِ کْد</title>
            <link>https://virgool.io/FuckTheCode</link>
        </image>

                    <item>
                <title>مفهوم مسیر های مطلق و نسبی در فایل سیستم | کتاب bash2003 بخش 1-4</title>
                <link>https://virgool.io/FuckTheCode/%D9%85%D9%81%D9%87%D9%88%D9%85-%D9%85%D8%B3%DB%8C%D8%B1-%D9%87%D8%A7%DB%8C-%D9%85%D8%B7%D9%84%D9%82-%D9%88-%D9%86%D8%B3%D8%A8%DB%8C-%D8%AF%D8%B1-%D9%81%D8%A7%DB%8C%D9%84-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%DA%A9%D8%AA%D8%A7%D8%A8-bash2003-%D8%A8%D8%AE%D8%B4-1-4-ti462cr2ty4m</link>
                <description>فصل اول [ قسمت چهار از پنج ] (قسمت قبل)فایل سیستم؟ این عکس رو آخر این مقاله میفهمید. نگرانش نباشید.خب بریم سراغ یکی از مفاهیم به شدت مهم . همونطور که در قسمت قبل براتون گفتم، ما در فایل سیستم کلا سه مفهوم کلیدی داشتیم :root یا ریشه : که در مثالمون به تنه و ریشه ی درخت تشبیه شده بود که کلی شاخه بهش متصل شده بودند.directory یا دایرکتوری (فولدر) : که این هم در مثالمون به شاخه های درخت تشبیه شده بود.file یا فایل : که در واقع توی مثالمون به برگ ها تشبیه شده.خب حالا میخوایم به وسیله این مفاهیم کلیدی ای که در رابطه با ساختار کلی یک فایل سیستم یاد گرفتیم. بیایم و سعی کنیم در رابطه با مسیر ها صحبت کنیم. اما قبل از هر چیز یه یادآوری کوچولوی دیگه از پست قبل داشته باشیم.یادآوری چطور سه مفهوم بالا رو در CLI نشون میدادیم؟قبل از ادامه لطفا چند لحظه سعی کنید که به این قضیه پاسخ بدید.اگر نتونستید مشکلی نیست یاد آوری برای همینه :برای نشون دادن root در CLI و بالطبع در شل ما از علامت اسلش / استفاده میکردیم.برای نشون دادن directory ها از ترکیب نام + یک اسلش / استفاده میکردیم وبرای نشون دادن فایل ها صرفا از نامشون استفاده میکردیم.پس اگر میخواستیم یک فایل رو که نامش ali.txt بود و در دایرکتوری ای به نام users که خود این دایرکتوری در root قرار داره رو نشون بدیم کافی بود بنویسیم :/users/ali.txtکه نحوه خواندن و نوشتن این قضیه رو در پست قبل براتون کامل توضیح دادم. پس اگر این قضیه براتون آشنا نیست اون بخش رو مطالعه کنید.خب بریم سراغ اصل مطلب.مسیر ها در فایل سیستمخب دیگه بریم سراغ بحث اصلیمون برای این که خوب این مبحث رو درک کنیماول کمی زاویه دیدمون رو به ساختار درختی فایل سیستم تغییر بدیم :تا الان همش داشتیم فایل سیستم رو به شکل یک درخت واقعی میدیدم. از الان بیاید بیشتر با شکل واقعیش آشنا بشیم.‍‍‍/
|----directory1/
|    |----subdirectory1/
|    |    |----file.html
|    |----file.txt
|----directory2/
همونطور که مبینید تمام فایل ها و دایرکتوری های داخل سیستم ما با توجه به چیزی که بالا داریم میبینیم اصولا در یک فایل سیستم و در محیط CLI به این شکل دیده میشوند.اینجا چند تا نکته وجود داره root یا همون / زیر مجموعه هیچکس نیست و بالا تر از root چیزی نداریم.همه چیز از root شروع میشه بعدش دایرکتوری هایی رو داریم که داخل روت قرار گرفتند مثل directory1 و directory2 هر دایرکتوری میتونه توی خودش فایل یا دایرکتوری دیگه ای داشته باشه مثلا directory1 داخل خودش subdirectory1 و یه دونه فایل به نام file.txt داره.که اون subdirectory هم داخل خودش یه فایل داره به نام file.html این چیزی که دارید میبینید شاید در نگاه اول براتون عجیب باشه ولی واقعیتش اینه که خیلی سادست و به زودی درکش میکنید. (البته اگر تا الان نکردید)خب حالا که دیگه از شکل درخت اومدیم بیرون و به شکل واقعی تری به فایل سیستم نگاه کردیم.بریم سراغ مسیر.مسیر ها در فایل سیستمتوی پست قبلی گفتم یه جمله رو بدون سوال و پرسش حفظ کنید و اون این بود که همه چیز در لینوکس فایل هست همه چیزززز خب با توجه به این جمله وقتی شما میخواید با سیستم عاملتون کار کنید اصولا نیاز دارید که برای هر کاری گریزی به چند فایل بزنید و با فایل ها کار کنید.از پست قبل میدونید که جایی که فایل های ما ذخیره میشوند دقیقا همین فایل سیستم هست پس باید بتونیم در فایل سیستم جا به جا بشیم و به سمت فایل هایی که نیاز داریم بریم.برای این که بتونیم جابه‌جا بشیم باید مفهوم مسیر رو درک کنیم .مسیر در حقیقت همون راهی هست که ما باید از جایی که هستیم پیش بگیریم تا برسیم به مقصدمون.در فایل سیستم دو نوع مسیر داریم مسیر مطلق و مسیر نسبی.مسیر مطلق (absolute path)تصور کنید که فردی از شما آدرس آرامگاه شاعر بزرگ پارسی، حافظ رو میپرسید و شما از مبدا جهان و جایی که عالم شروع میشه.شروع به آدرس دادن میکردید برای مثال می‌گفتید :جهان - فضا -گروه محلی - کهکشان راه شیری - بازوی برساووش - بازوی شکارچی - منظومۀ شمسی - سیارات داخلی - زمین - قارۀ آسیا - خاور میانه - ایران - استان فارس - شیراز - حدفاصل چهارراه ادبیات و چهارراه حافظیه، رو‌به‌روی ورزشگاه حافظیه.آیا قبل از جهان در آدرس بالا چیزی وجود داره؟ در این مثال نه فرض میکنیم بالا تر از جهان چیزی وجود نداره دقیقا مثل root در فایل سیستم.پس اگر بخوایم آدرس مطلق یک فایل رو در فایل سیستم بنویسیم : باید از root شروع کنیم یکی یکی دایرکتوری ها رو رد کنیم و به فایلمون برسیم.پس اصولا یکی از خصیصه های یک آدرس مطلق شروع شدن از root هستش .مثال : کدام یک از آدرس های زیر مطلق نیست!؟/users/ali.log
users/ali.log
/users/user/ali.log
/users/user/ali/ali.log...... پاسخ :کمک : گزینه ای که از root یا مبدا جهان شروع نشده آدرس مطلق نیست دیگه.پس میشه ....گزینه : users/ali.logچراشو دیگه خودتون بگید.مسیر نسبی (relative path)حالا تصور کنید در مثال همون حافظ میخواستیم جای استفاده از مسیر مطلق از مسیر نسبی استفاده کنیم.اینجا یه نکته ای رو باید رعایت کنیم :نکته :زمانی که از مسیر مطلق استفاده میکردیم مهم نبود که موقعیت مکانی ما کجاست فقط از مبدا جهان شروع میکردیم تا به مقصد برسیم. و هیچ اهمیتی به موقعیت مکانی خودمون یا کسی که ازمون سوال کرده بود نمیدادیم. اما در بحث مسیر نسبی اینجوری نیست و به موقعیت مکانی خودمون اهمیت میدیم و نسبت به اون آدرس رو میدیم.پس در مسیر نسبی از جایی که هستیم شروع میکنیم و نه از مبدا جهان و root اوکی؟مثلا توی مثال بالا اگر فرض بگیریم که توی استان فارس هستیم میتونیم بگیم :شیراز- حدفاصل چهارراه ادبیات و چهارراه حافظیه، رو‌به‌روی ورزشگاه حافظیهمیبینید ؟ اصولا آدرس نصف و خب خیلی راحت تر شد حتی امکان این که خطایی در هنگام آدرس دهی صورت بگیره هم کمتر شد.خب حالا تا اینجا همه چیز اوکیه ولی یه سوال چطوری در CLI نشون بدیم که از جایی که هستیم شروع کردیم؟خب ما در CLI اصولا یا در root هستیم یا در یک directory. از اونجایی root خودش یه دایرکتوری هست که باقی فایل ها و دایرکتوری ها داخلش هستند پس به طور کلی در CLI ما همیشه در یک دایرکتوری هستیم. که به اون دایرکتوری که درش حضور داریم میگیم working directory یعنی دایرکتوری ای که داریم توش کار میکنیم (یا بهتر بگم اون دایرکتوری ای که توش هستیم)حالا برای نشون دادن working directory همیشه از یک . (نقطه) استفاده میکنیم. و این نقطه در حقیقت مثل یک نام و نشان برای working directory ما میمونه .و خب از اونجایی که نقطه نام working directory ما هست پس میتونیم به شکل یک دایرکتوری نشونش بدیم که گفتم : نام + اسلشپس ما working directory رو به این شکل نمایش میدیم :./تمام پس اگر تصور کنیم که میخوایم از جایی که هستیم بریم به دایرکتوری users و فایل ali.log رو ببینیم کافیه بنویسیم :./users/ali.logالبته این در صورتی کار میکنه که در working directory مون دایرکتوری users وجود داشته باشه . یعنی یه همچین چیزی باشه :‍‍‍/
|----directory1/
|    |----subdirectory1/ 🯅
|    |    |----users
|    |    |    |----ali.log
|    |    |----file.html
جایی که هستید رو با 🯅 مشخص کردم . پس اگر ساختار فایل سیستم این شکلی باشه چون هم دایرکتوری users در working directory تون قرار داره و هم داخلش ali.log هست پس مسیر نسبی ما کار میکنه و در حقیقت بهتره بگیم درسته.خب این پست هم تموم شد.خلاصه ماجرا :زاویه دیدمون رو نسبت به فایل سیستم تغییر دادیم تا در پست بعد بتونیم وارد کار با شل بشیم و بلاخره دستور بزنیم و از طرفی با مسیر های نسبی و مطلق که برای جابه‌جا شدن توی فایل سیستم بهشون نیاز داشتیم آشنا شدیم.و یاد گرفتیم که working directory چی هست و چطوری نمایشش میدیم.تمرین :سعی کنید آدرس خونه یا مثلا آدرس یک شی در آشپز خانه رو برای خودتون یک بار به شکل مطلق و absolute و بار دیگر به شکل relative و نسبی بیان کنید.سخن پایانیقسمت بعدی میریم که دیگه از دستورات استفاده کنیم، انیمیشن ببینیم و در نهایت آخرین بخش از فصل اول کتاب رو تموم کنیم. مرسی که همراهم هستید لطفا حتما انتشارات رو دنبال کنید و اگر دوست داشتید به چنل تلگرام FUCKT8EC0DE بپیوندید (لینکش توی انتشارات هست).https://virgool.io/FuckTheCodeکتاب bash2003 تحت لایسنس CC-BY-SA منتشر میشه و میتونید آزادانه و با خیال راحت استفاده کنید.پست بعدی ساعت ۱۳:۰۰ فردا</description>
                <category>فاک دِ کْد</category>
                <author>Amber Eye</author>
                <pubDate>Sun, 10 Aug 2025 03:40:59 +0330</pubDate>
            </item>
                    <item>
                <title>یونیکس و شبه-یونیکس قدم اول | بخش 3-1 کتاب bash2003</title>
                <link>https://virgool.io/FuckTheCode/%DB%8C%D9%88%D9%86%DB%8C%DA%A9%D8%B3-%D9%88-%D8%B4%D8%A8%D9%87-%DB%8C%D9%88%D9%86%DB%8C%DA%A9%D8%B3-%D9%82%D8%AF%D9%85-%D8%A7%D9%88%D9%84-%D8%A8%D8%AE%D8%B4-3-1-%DA%A9%D8%AA%D8%A7%D8%A8-bash2003-crmlyxr6mq2o</link>
                <description>فصل اول [ قسمت سه از پنج ] (قسمت قبل)خب خب توی این بخش از فصل اول کتاب bash2003 بهتون یه کوچولو در مورد UNIX و سیستم هایUnix-like ( یا شبه یونیکسی) میگم.یونیکس یا UNIX چیه؟به طور خیلی ساده و کوتاه یه سیستم عامل.سیستم عاملی که یکی از دلایل محبوبیت زبان C و افرادی مثل کن تامپسون و دنیس ریچی (سازندگان سیستم عامل یونیکس و C) بود. یونیکس به دلیل این که اولین سیستم عامل قابل حمل (portable) بود خیلی معروف شد .همینطور چند کاره (Multi tasking) و چند کاربره (Multi User) بودن و انعطاف بالاش به معروفیتش کمک کرد از طرفی یونیکس یک رویکرد ماژولار داشت یعنی به شکل ماژولار دیزاین شده بود که همین رویکرد بعد ها به فلسفه یونیکس یا (Unix philosophy) معروف شد.این ماژولار بودن این رو بیان میکرد که هر فانکشن و برنامه در یونیکس باید یک کار کاملا واضح و کوچک رو انجام بده. (که بعد ها همین فلسفه در کتاب Clean Code به عنوان یک قانون برای نوشتن فانکشن های بهتر و تمیز تر در برنامه نویسی بیان شد).و خب از اونجایی که هر فانکشن و برنامه در یونیکس یک کار کوچک رو انجام میداد نیاز به یک ابزار بود که بتونیم باهاش این برنامه ها و فانکشن ها رو با هم به کار بگیریم تا کار های پیچیده تر رو انجام بدیم.اون ابزار Unix Shell بود که به تامپسون شل یا sh (اس اچ) معروف بود. (حالا نسخه پیچیده ترش که در این کتاب بهش میپردازیم bash هست. که یه مشت ویژگی خفن به همین sh (تامپسون شل) که نه بلکه به یه sh (که به بورن شل معروف هست) دیگه که بعد ها جایگزین این sh (تامپسون شل) شده بود اضاف کرده که بهتون میگم چیا هستند.)ممکنه این sh تو sh ای که شد یکم براتون درک این مطلب رو پیچیده کرده باشه یه توضیح بدم :ببینید اولین شلی که ساخته شد unix shell بود که کن تامپسون ساختش و به اختصار بهش میگفتن sh بعد ها یه نفر به اسم bourne اومد یه شل دیگه ساخت که خب جایگزین همین شلی شد که تامپسون ساخته بود که به اونم میگفتن sh حالا bash در حقیقت نسخه پیشرفته تر sh ای هست که bourne ساخته!خب اگر در مورد یونیکس دوست دارید بیشتر بدونید، کلی منبع هست از ویکی پدیا تا کتاب و ... که میتونید مطالعه کنید. هدف من از این که در مورد یونیکس اینه که به فایل سیستم برسم.یکی از مهمترین بخش های سیستم عامل یونیکس فایل سیستمش (Inode-based filesystem) بود. و خب کل بحث ما در این بخش حول محور ساختار این فایل سیستم هستش.خیلی جاها ممکنه بنویسن سیستم فایل که به نظرم هارمونی نداره و یه جوریه! حداقل از نظر من اینجوریه، من ترجیح میدم فارسی بنویسم فایل سیستم. چون حداقل هارمونیش حفظ میشه نسبت سیستم فایل.اما قبل از این که بریم که با فایل سیستم و مفاهیم بامزه اش آشنا بشیم . بیاید یه سر به سیستم عامل های Unix-like یا شبه یونیکس بزنیم.شبه یونیکس یا Unix-like چیه؟خب یونیکس به عنوان اولین سیستم عامل قابل حمل اینقدر محبوب دل ها بود که کلی مشتقات داشت یعنی کلی سیستم عامل بودن که حتی کدهاشون هم همون کد های یونیکس اولیه (UNIX RESEARCH ) بود. یا حالا اون کد ها رو برداشته بودن و یه مشت ویژگی بهش اضاف کرده بودن یا بخشی از کدها دقیقا همون کد های یونیکس بود و خلاصه ربط مستقیمی از لحاظ کدبیسی به پروژه اولیه که به Unix Research معروف بود داشتند.بعد ها یه سری سیستم عامل ها مثل لینوکس بالا اومدن که اینا اصولا از لحاظ کدبیسی شباهتی به کد های شرکت AT&amp;T و یونیکس اولیه نداشتند ولی طراحی ماژولار داشتند، قابل حمل، چندکاربره و چند کاره بودن و خلاصه به شدت به فلسفه یونیکس نزدیک بودند جوری که مثلا دنیس ریچی سازنده یونیکس در رابطه با لینوکس میاد میگه که اقا این یکی از معدود سیستم عامل هایی هست که به شدت به فلسفه یونیکس نزدیکه! با این که کدبیسش فرق میکنه!پس به طور کلی ما یه سیستم عامل یونیکس داشتیم و یه سری مشتقات که بهشون میگن شبه یونیکس. هرچند گروه اصلی ای که امتیاز UNIX رو به عهده داره اصلا این قضیه Unix-like و شبه یونیکس رو قبول نداره و بیشتر به عنوان یه فریب تجاری میشناستش.اگر دقت کرده باشید هر جا از خود UNIX گفتم همه حروف بزرگ بودند و هر جا از Unix-like فقط u بزرگ بود این دقیقا یکی از وجه تمایز های بین سیستم عامل هایی هست که اون گروه UNIX صداشون میکنند و سیستم عامل هایی که مردم Unix-like یا شبه یونیکس صداشون میزنن.هر چند اگر شما پول کافی داشته باشید و یه سیستم یونیکس لایک ساخته باشید (حالا چه از لحاظ کدبیسی شباهت داشته باشه چه از لحاظ فلسفی و فایل سیستمی) با چیزی در حدود چند ۱۰۰ هزار دلار میتونید بگید که سیستم عاملتون UNIX هست! و حتی اجازه و حق تجاری سازیش هم دریافت کنید.حالا که منظورم از شبه یونیکس بودن سیستم عامل لینوکس رو گرفتید. بریم سراغ بحث اصلیمون. ساختار فایل سیستم لینوکس.فایل سیستم (File System) چیست؟فایل سیستم در حقیقت یک بخشی از سیستم عامل هست که به ما امکان ذخیره سازی و بازیابی اطلاعات رو میده. اطلاعاتی که در یک سری فایل بخصوص ذخیره شده اند. اون اوایل وقتی یونیکس به وجود اومد کلا سه نوع فایل رو بیشتر ساپورت نمیکرد :یا فایل های عادی مثل فایل های متنی ordinary filesdirectories یا دایرکتوری ها (کلا توی سیستم عامل های شبه یونیکس و یونیکس به فولدر میگیم دایرکتوری)special files یا فایل های خاص که بهشون device files هم میگن (اینا رو سر موقع اش براتون مثال میزنم.)پس در حقیقت فایل سیستم بخشی از سیستم عامل هست که اجازه میده ما اطلاعاتی که داخل این فایل ها هستند رو ذخیره و حتی بازیابیشون کنیم.اما بریم سراغساختار فایل سیستمساختار فایل سیستم رو اصولا در هر منبعی که اون بیرون پیدا میشه و یکم معتبر باشه به شکل یه درخت تشبیه میکنن درختی که از ریشه و تنه (root)* شروع میشه و کلی شاخه (دایرکتوری) میزنه و هر شاخه میتونه توی خودش یه مشت شاخه دیگه داشته باشه و در نهایت روی این شاخه ها یه مشت برگ (فایل) وجود داشته باشن.یک نکته : اون بخشی که براتون * زدم به این خاطر هست که همین الان بهتون این نکته رو بگم که بچه ها در این درخت فرضی که فایل سیستم بهش تشبیه شده تنه و ریشه رو یکی میدونیم پس هر موقع گفتیم root یا ریشه کلا منظورمون تنه و ریشه هست. (تازه نکته باحال ترش اینجاست که در اکثر اوقات تقریبا ۹۹ درصد مواقع اصلا منظور فقط همون تنه هست.)ریشه و تنه root، شاخه ها directory و برگ ها file هستند.از اونجایی که ما میخوایم لینوکس رو از طریق یادگیری شل یاد بگیریم و از قسمت قبل هم میدونیم منظورمون از شل هایی که در سیستم های شبه یونیکس وجود دارند شل های متنی هست و شل های متنی هم در CLI حضور دارند. پس باید بتونیم به یه نحوی این ساختار درختی ای که بالا براتون توصیف کردم رو به شکل متنی نشون بدیم درسته؟ اما چطوری؟خب اصولا به این شک اجزا رو نشون میدیم :- برای نشون دادن ریشه یا root از علامت / استفاده میکنیم./- برای نشون دادن یک شاخه یا بهتره بگم دایرکتوری از علامت : /directory_name استفاده میکنیم یعنی نام دایرکتوری رو مینویسیم بعلاوه یه /پس اگر یه دایرکتوری داشته باشیم به اسم user اینجوری نشونش میدیم :user/- و برای نشون دادن یک برگ یا بهتره بگم فایل، کافیه نامش رو بنویسیم مثلا فکر کنید یه فایل هست به اسم farhan.txt اینجوری نشونش میدیم :farhan.txtپس به طور کلی در یک فایل سیستم ما با یک ساختار درختی روبه رو هستیم که از ریشه و مخصوصا تنه (root) شروع میشه تا برسیم به شاخه (دایرکتوری) و سپس به برگ (فایل). به این صورت که اگر بخوایم یک فایل با نام farhan.txt که توی دایرکتوری users هست که خودِ اون دایرکتوری هم توی root قرارداره اشاره کنیم میتونیم اینو بنویسیم :/users/farhan.txtکه اگر دقت کنیم نوشتیم / یعنی root که داخلش دایرکتوری users هست . (چرا دایرکتوری؟ چون نام + یه اسلش اومده دیگه) که داخل اون دایرکتوری یه فایل داریم که اسمش farhan.txt هست. پس نحوه خوندنش این شکلیه :از سمت راست :فایل farhan.txt که توی دایرکتوری users قرارداره که اون دایرکتوری توی root قرار داره از سمت چپ : از root میریم به دایرکتوری users که توش یه فایل هست به نام farhan.txt به صورت شکلی :root -&gt; users(directory) -&gt; farhan.txt(file)حالا برای این که مطمعن بشم نحوه خوندنشو یاد گرفتید این رو بخونید و این زیر کامنت کنید :/users/mentors/ali.txtخب حالا که تا حدودی اینا رو فهمیدیم بریم سراغ نشون دادن ساختار استاندارد این فایل سیستم.در یک سیستم عامل شبه-یونیکسی یا بهتره دیگه نگیم اینو بگیم در لینوکس ساختار دایرکتوری های اصلی ما ایناست:/
/bin/
/boot/
/dev/
/etc/
/etc/opt/
/etc/sgml/
/etc/X11/
/etc/xml/
/home/
/lib/
/lib&lt;qual&gt;/
/media/
/mnt/
/opt/
/proc/
/root/
/run/
/sbin/
/srv/
/sys/
/tmp/
/usr/
/usr/bin/
/usr/include/
/usr/lib/
/usr/libexec/
/usr/lib&lt;qual&gt;/
/usr/local/
/usr/sbin/
/usr/share/
/usr/src/
/usr/X11R6/
/var/
/var/cache/
/var/lib/
/var/lock/
/var/log/
/var/mail/
/var/opt/
/var/run/
/var/spool/
/var/tmp/این شاخه ها یا بهتره دیگه بگیم دایرکتوری هایی که میبینید در حقیقت سیستم عامل ما رو شکل میدن. من کم کم در طول مسیر یادگیریمون و در فصل های بعدی تک تک اینا رو بهتون معرفی میکنم و بهتون میگم که چیکار میکنند و اصلا چرا حضور دارند.فقط یک نکته : ممکنه گاهی دایرکتوری هارو بدون اسلش نهایی نشون بدن که مشکلی نیست مثلا به جای : /var/tmp/ به این شکل نمایش میدن : var/tmp/ که اوکیه!مهم برای بهتر یادگرفتن : بچه ها ببینید در ساختار بالا یه دایرکتوری هست که به این شکل نشون دادم /dev/ فقط جان جدتون این رو دیو بخونید نه دِو چون این برای دیوایس هاست و اصلا دیو باید باشه ولی خب Device چون اول dev داره اینجوری نوشتنش. پس بگید دیو تا دیوایس براتون تداعی بشه تا بعدا که دارم دلیل موجودیتش و این که چیکار میکنه و چه فایل هایی توش هستند رو بهتون میگم دیگه یهو نخوره تو ذوقتون که عه؟ من فکر میکردم این برای فایل هایی که develope و توسعه کردیم هست پس مال دیوایساست؟ پشمام...یه نکته دیگه هم بگم : توی توضیح فایل سیستم گفتم به یه درخت تشبیه اش میکنیم که همه چیز از ریشه و تنه که بهش میگیم root شروع میشه، اگر دقت کنید تمام ۴۳ دایرکتوری ای که بالا در ساختار استاندارد نشون دادم از / که نشون دهنده root هست شروع شدن!خب این پست هم تموم شد. فقط یک قانون رو همینجا بدون دلیل و پرسش بیاید حفظ کنیم و اون هم اینه :همه چیز در لینوکس فایل هست همه چیز.کم کم توی فصل ها و پست های بعد هی به این نکته که همه چیز در لینوکس فایل هست پی میبریم پس از الان یه آشناییتی باهاش داشته باشید تا گوش و چشمتون بهش عادت کنه!خلاصه ماجرا :توی این پست فهمیدیم که یونیکس چیه و دلیل محبوبیتش چی بود. بعد فهمیدیم که لینوکس یک سیستم عامل شبه یونیکسی هست که طراحیش به فلسفه یونیکس خیلی شبیه هست. بعد در مورد فایل سیستم گفتیم که فضایی برای ذخیره سازی و بازیابی فایل هامون هستش، که به شکل یک درخت میتونیم بهش نگاه کنیم که به تنه و ریشه اش میگن root و به هر شاخه اش میگن directory و به هر برگش میگن یک فایل. و این نکته هم گفتیم که چطوری این اجزا رو در محیط CLI و در نهایت شل نشون میدیم. در آخر هم به بحث ساختار استاندارد یک سیستم عامل لینوکسی بر اساس استاندارد FHS پرداختیم. که صرفا یه آشناییت کوچولویی داشته باشیم .تمرینلطفا سعی کنید از ساختار استاندارد فایل سیستم لینوکس که در بالا براتون گذاشتم ۵ تاش رو بردارید به دلخواه بخونید میخوام که بفهمید مثلا منظور از این که نوشته شده :/bin/چیه ؟ و خب این باعث میشه ذهن و چشمتون به این شکل از نوشتار عادت کنه و کم کم بتونیم توی جلسات بعدی و مخصوصا فصل های بعدی راحت تر و بدون مقدمه چینی های زیاد به یادگیری بپردازیم.جوابتون رو توی کامنتا بنویسید.سخن پایانیاز پست بعد وارد درک مسیر ها در فایل سیستم میشیم و در نهایت بعد از یک پست دیگه فصل اول تموم میشه و میتونیم دست به کد بشیم و با شل کار کنیم و بیشتر سیستم عامل های شبه-یونیکسی خودمون رو بشناسیم و لینوکس رو یاد بگیریم.کتاب bash2003 تحت لایسنس CC-BY-SA منتشر میشه و میتونید آزادانه و با خیال راحت استفاده کنید.پست بعدی و ساعت ۱۳:۰۰ فردا</description>
                <category>فاک دِ کْد</category>
                <author>Amber Eye</author>
                <pubDate>Sat, 09 Aug 2025 08:29:24 +0330</pubDate>
            </item>
                    <item>
                <title>چرا هنوز هم باید CLI بلد باشیم؟ | بخش 2-1 کتاب bash2003</title>
                <link>https://virgool.io/FuckTheCode/%DA%86%D8%B1%D8%A7-%D9%87%D9%86%D9%88%D8%B2-%D9%87%D9%85-%D8%A8%D8%A7%DB%8C%D8%AF-cli-%D8%A8%D9%84%D8%AF-%D8%A8%D8%A7%D8%B4%DB%8C%D9%85-immjppv6jdas</link>
                <description>فصل اول [ قسمت دو از پنج ] (قسمت قبل)توی پست قبلی، از بش، ترمینال و شل گفتم و یه داستان براتون تعریف کردم. توی اون داستان، در نهایت به جایی رسیدیم که فهمیدیم Bash در واقع یک شل متنی هست.و حالا، با پیشرفت تکنولوژی و فراگیر شدن کامپیوتر های شخصی و لپتاپ ها ما معمولاً از شبیه‌سازهای ترمینال استفاده می‌کنیم تا به این شل‌های متنی مثل Bash دسترسی داشته باشیم.اما اینجاست که یه سؤال مهم پیش میاد:چرا باید از شل‌های متنی استفاده کنیم؟اون هم وقتی کلی محیط گرافیکی خوشگل با دکمه و ماوس داریم که خیلی راحت‌تر به نظر می‌رسن؟ واقعاً چرا؟یادتون میاد دیگه؟ محیط های گرافیکی و دسکتاپ ها هم یک نوع شل به حساب میان!نکته فنی :ببینید در حقیقت ما شل گرافیکی داریم مثل GNOME Shell خب؟ ولی منظورم از این که میگم دسکتاپ ها یه نوع شل گرافیکی محسوب میشن اینه که ما تا الان به شل به عنوان یه رابط بین ما یعنی انسان و سیستم عامل نگاه میکنیم و خب دسکتاپ ها هم همینن و حتی محیط های GUI هم همینن اما. توی قسمت بعدی که ساختار سیستم های Unix-Like رو به تصویر میکشیم و از یونیکس و لینوکس میگیم کم کم محتوا فنی تر میشه. و بهتون میگم که منظورمون کلا از shell همون بحث کلاسیکه که میگه shell چیزی هست که در CLI اجرا میشه و صرفا منظور از شل همون شل های متنی مثل Bash و Zsh و Ash و ایناست. پس تا اینجا موضوع اشتباه نیست صرفا زاویه دیدمون متفاوته و خب این خوبه برای شروع نگرانش نباشید.CLI چیست؟CLI یا Command Line Interface یعنی رابط کاربری‌ای که شما با نوشتن دستور، با سیستم‌عامل یا برنامه‌ها ارتباط برقرار می‌کنید.بذار یه مثال بزنم:وقتی کامپیوترت رو روشن می‌کنی، یه عالمه آیکون، رنگ، پنجره و دکمه می‌بینی.می‌تونی با ماوس کلیک کنی، برنامه اجرا کنی، فایل جابه‌جا کنی و...به این محیط می‌گیم: GUI یا (رابط گرافیکی).اما CLI یه محیط متنیه.اینجا خبری از آیکون و دکمه نیست.باید دستور تایپ کنی و خروجی رو هم به صورت متن ببینی.این همون فضاییه که شل‌هایی مثل Bash توش اجرا می‌شن.خیلی‌ها CLI رو با «ترمینال» اشتباه می‌گیرن!بذارید اینجا یه بار برای همیشه این سه‌ تا مفهوم رو از هم تفکیک کنیم تا ذهنتون مرتب شه:شل (Shell)برنامه‌ایه که بین ما و سیستم‌عامل قرار می‌گیره.دستوراتی که می‌نویسیم رو می‌خونه، تفسیر می‌کنه، و به سیستم‌عامل می‌گه اجراشون کنه.مثلاً Bash، Zsh، Ash و...CLI یا رابط مبتنی بر خط فرمانمحیطیه که شل توش اجرا می‌شه.یه محیط متنی تعاملی هست که ما توش دستور می‌نویسیم و خروجی می‌گیریم.می‌تونه یه محیط واقعی باشه (مثلاً tty در لینوکس)، یا شبیه‌سازی‌شده باشه.اوه این همهه tty تو سیستم من چیکار میکنه؟ به زودی میفهمیم!شبیه‌ساز ترمینال (Terminal Emulator)نرم‌افزاریه که CLI رو برای ما قابل‌دسترس می‌کنه.مثلا تو لینوکس ما Xterm یا konsole یا gnome-terminal و ... رو داریم که این برنامه‌ها:برامون یک CLI بالا میارن.توی اون CLI، یه شل (مثلاً Bash) اجرا می‌شه.ما دستور تایپ می‌کنیم.ترمینال اون دستورها رو به شل منتقل می‌کنه.شل، اونا رو پردازش و اجرا می‌کنه.خروجی رو هم ترمینال بهمون نشون می‌ده.ما یه پنجره داریم (ترمینال) که داره فضای یه اتاق (CLI) رو نشون میده که یه مغز توش نشسته (Shell) و آمادست تا ما یه چیزی رو روی پنجره بنویسیم مثلا بنویسیم سبزش کن! و اونم اجراش کنه و ما خروجی رو از طریق پنجره ببینیم.امیدوارم با دیدن تصویر بالا تونسته باشید درک کنید چی به چیه!حالا که میدونیم CLI چیه بریم ببینیم چرا باید ازش استفاده کنیم چه مزیت هایی داره و به نسبت GUI چی به ما ارائه میده.خب خیلی چیزا هست که در موردشون براتون بگم ولی خیلی هاشون در این سطح از کتاب اصولا گفتنشون به هیچ دردی نمیخوره. پس خیلی سریع فقط به یه سری موارد اشاره میکنم اما در آینده کم کم میتونیم کاربرد های خفن رو در باب مطالب فنی تر و ریز تر بررسی کنیم.چرا باید از CLI و شل های متنی استفاده کنیم؟خب اولین چیزی که به عنوان یه تازه کار باید بهش توجه کنید اینه که یادگیری CLI کمک میکنه سیستم عاملتون رو بهتر بشناسید و در نهایت به یادگیری مفاهیم پایه ای سیستم عامل کمک میکنه!اما این یادگیری صرفا در حد یادگیری مفاهیم و مباحث تئوری نیست. بلکه از اونجایی که میتونید با این محیط کار کنید و دستورات رو تایپ کنید و خروجی بگیرید این قضیه برای شما پرکتیکال تر و عملی تر میشه به طوری که میتونم ادعا کنم که اگر کار با CLI رو بلد بشید میتونید سیستم عامل رو تجربه کنید!ممکن کردن غیر ممکن ها، دومین مزیت CLI اینه که شما میتونید به وسیله ابزار هایی که دارید و صرفا به وسیله تایپ کردن به انعطاف و قدرت عجیب غریبی دست پیدا کنید به طوری که میتونید خروجی برنامه های مختلف رو به عنوان ورودی به برنامه های دیگه بدید و یه زنجیره عجیب غریب بسازید و به نوعی این امکان رو داشته باشید که از توانایی برنامه ها به صورت همزمان و به هم زنجیر شده استفاده کنید. کاری که در GUI عملا غیر ممکن یا بی اندازه سخته!میتونید روی هر سیستمی کار کنید، ممکنه در یک پروژه ای نیاز باشه که یک سیستم عامل رو روی یک چیپ کوچک با منابع محدود بیارید بالا و روش برنامه نویسی کنید خب شما نمیتونید اینجا یک محیط گرافیکی بیارید بالا و روش VSCODE نصب کنید. چون این کار عملا نشدنیه. پس مجبورید که از محیط CLI استفاده کنید و به جای VSCODE مثلا vim یا vi یا nano استفاده کنید . (نگران نباشید کم کم با اینا آشنا میشید) از طرفی ممکنه که شما در سیستم عامل mac با یک نرم افزاری کار کنید و بعد برید توی یه شرکتی و اونجا مجبور باشید با ویندوز کار کنید خب اصولا براتون سخت خواهد بود اما خبر خوب اینه که اگر به استفاده از CLI عادت کرده باشید شما میتونید تقریبا همه جا و با هر سیستم عاملی کار کنید چه mac باشه چه ویندوز و چه لینوکس و ...و دلایل دیگه، ببینید شما میتونید خیلی راحت به یه سرور به حالت ریموت دسترسی پیدا کنید، خیلی راحت کارای تکراریتون رو اتوماتیک کنید، به راحتی در سطح سیستم عامل کد بزنید و از ابزار هایی مثل make و ... برای بیلد کردن هر چه بهتر نرم افزار هاتون استفاده کنید از پشت صحنه و لاگ های برنامه ها خبر داشته باشید به راحتی پکیج ها و برنامه های مختلف رو نصب کنید، از داکر و دیگر کانتینر ها خیلی راحت استفاده کنید چون به هر حال نیاز دارید که از CLI استفاده کنید، با گیت کار کنید و کلی چیز دیگه... که گفتنشون همونطور که گفتم در این سطح صرفا زیاده گویی هست ولی فقط اینو بدونید که شما هر چقدر در دنیای کامپیوتر و برنامه نویسی حرفه ای تر بشید نیاز بیشتری به CLI میکنید میخواید با سرورها کار کنید؟ بهش نیاز دارید با فضاهای ابری؟ باز همینطور و ... خلاصه اگر میخواید کنترل بیشتری روی کامپیوترتون داشته باشید بهتره که کار در محیط CLI و با شل رو یاد بگیرید.خلاصه ماجراتوی این پست از CLI گفتم براتون این که چی هست و چه کاربرد هایی داره، فرق بین ترمینال و CLI رو گفتم که باعث شد که از ترمینال درک بهتری داشته باشیم و به واسطه این دو بش و شل رو هم بهتر درک کنیم.تمرینچیز خاصی نیست، حالا که تا اینجا اومدید این ۴ مفهوم رو تعریف کنید :شل : ترمینال : CLI : بش :جوابتون رو توی کامنتا بنویسید.(پاسخشون فردا ساعت ۱۵:۰۰) در کامنتا گذاشته میشه.سخن پایانیاز پست بعد کم کم وارد آموزشمون میشیم . امیدوارم که تونسته باشم مفهوم CLI و فرقش با ترمینال رو خوب براتون جا انداخته باشم.پست بعدی و ساعت ۱۳:۰۰ فردا</description>
                <category>فاک دِ کْد</category>
                <author>Amber Eye</author>
                <pubDate>Thu, 07 Aug 2025 09:01:24 +0330</pubDate>
            </item>
                    <item>
                <title>بش اسکریپت، فصل اول | کتاب bash2003</title>
                <link>https://virgool.io/FuckTheCode/%D8%A8%D8%B4-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D9%81%D8%B5%D9%84-%D8%A7%D9%88%D9%84-%DA%A9%D8%AA%D8%A7%D8%A8-bash2003-crwu1cd5qxyl</link>
                <description>[ بخش یک از پنج ] یک شروع کوتاهنکته پیش از شروعاین پست یک روایت تاریخی دقیق نیست.صرفاً یک داستان ساده‌ست برای اینکه بتونیم راحت‌تر بفهمیم شل، ترمینال و بش چی هستن — نه اینکه دقیقاً کی و چطوری وارد دنیای کامپیوتر شدن.پس دنبال ترتیب زمانی نباش… دنبال فهم بهتر باش :)بریم سراغ داستان.bash2003 یک کتاب سادهدرود، این کتاب مقدمه بسیار کوتاهی داره، در این حد که براتون از نام کتاب بگم، نامش رو گذاشتم bash2003 که خب عدد ۲۰۰۳ برمی‌گرده به تاریخ انتشار اولین نسخه از bash یعنی ۰۸/۰۶/۱۹۸۹ که جمع این اعداد به ۲۰۰۳ ختم میشه. [ یه جور ادای احترام به روزی که bash شروع شد. ]کتاب ۱۰ فصل داره و از سطح ساده و بگینر شروع میشه.روشی که برای نوشتن پست های کتاب استفاده میکنم. اینه که در هر پست یک موضوع رو کاملا ببندم.و نگذارمش برای پست بعدی. مفاهیم اول گفته میشن بعد کد ها و سپس مثال و تمرین و ادامه ماجرا ...هدف این کتاب یادگیری لینوکس از طریق یادگیری بش هست. ( چون فکر میکنم اینطوری پرکتیکال تره! ).────── 🌀 معرفی bash، ترمینال و شل 🌀 ──────شل چیست؟درسته که توی عنوان این بخش نوشتم : معرفی bash، ترمینال و شل ولی برای این که بتونم این اول کاری خوب و مینیمال bash رو معرفی کنم بهتره که قبلش شل یا پوسته رو بشناسیم.چرا میگم خوب و مینیمال؟ به این خاطر که تا زمانی که باهاش کار نکنیم و خیلی از مفاهیم رو براتون باز نکنم چطور میتونم بیام و یه معرفی کامل بدم؟ اصلا دلیل نوشتن این کتاب آنلاین همینه که بش رو به کتابخونه ذهنمون معرفی کنیم و بتونیم ازش استفاده کنیم و خلاصه باهاش برنامه بنویسیم و در نهایت لینوکس رو هم تا حدود خوبی درک کنیم و بفهمیم!قدیما وقتی صحبت از کامپیوتر ها می‌شد، بحث یه دستگاه یا ماشین بود که کلی جایگاه ورودی و خروجی داشت یه جوری که اگر مثلا میخواستی از فلان ویژگیش استفاده کنی باید یه سیم برمیداشتی و اون رو به ورودی اون قسمت میزدی تا بتونی به نوعی اون بخش رو روشن کنی تا اماده کار بشه.یه چیزی توی مایه های این لعنتی، اگر فیلمش رو ندیدید حتما ببینید! باحالهخلاصه بگم مستقیم داشتی با سخت افزار حرف میزدی.ظهور سیستم عاملبعد ها سیستم عامل ها اومدن یه مشت نرم افزار که به ما کمک میکردن تا بتونیم با سخت افزارمون غیر مستقیم صحبت کنیم.یه جور واسطه بین ما و سخت افزار.اما در هردوی این سناریو ها یه مشکل وجود داشت : صحبت با کامپیوتر ها هنوز هم سخت بود.چون به هر حال، تصورشو بکن باز داری با یه نرم افزار و یه مشت صفر و یک صحبت میکنی، پس نیاز بود که یکم بیشتر به دنیای کامپیوتر ها نزدیک بشیم.شاید خنده دار باشه ولی ایده ای که دانشمندان کامپیوتر داشتند به طرز عجیبی شبیه به این عکس بود :یارو لباس شیر پوشیده رفته وسط گله شیرهاآره، نیاز به یه لباس داشتیم یه چیزی که بپوشیم و یه جورایی توی یه پوسته ای بریم که بتونیم با سیستم عاملمون و در نتیجه با کامپیوتر صحبت کنیم.و اینجوری شد که یه رابط جدید خلق شد، شل، یه برنامه که دستورات و حرفای ما رو میگیره و به سیستم عامل میگه که چطوری اجراشون کنه.shell یا پوسته همون لباس ابر قهرمانی ای هست که باهاش میتونیم با سیستم عاملمون حرف بزنیم.* فکر میکنم الان دلیل نامگذاری رو تا حدودی درک کرده باشید که چرا اسمش پوسته هست!- البته این فقط یه داستانه برای درک بیشتر ولی تقریبا همینه!خب شل ها میتونن گرافیکی باشن مثل دسکتاپ های که هممون داریم اما ما بیشتر با شل های متنی کار داریم مثل bash.پس bash در حقیقت یک شل هست اما به صورت متنی. یعنی مثلا جای استفاده از ماوس و کلیک توش مینویسیمبرو به فلان قسمت از سیستمظهور ترمینالبرگردیم به داستانمون، حالا که خیالمون راحت شده بود و تونسته بودیم یه برنامه برای صحبت با سیستم عامل بسازیم نیاز داشتیم تا یه سری سخت افزار تولید کنیم تا بتونیم به وسیله اونا با shell حرف بزنیم.این سخت افزار ها ترمینال نام داشتند که اصولا یه کیبورد و یه مانیتور بودند که به کامپیوتر اصلی به وسیله یه مشت سیم و دم و دستگاه متصل بودند!اینجوری هر کاربری که میخواست با سیستم حرف بزنه و بهش دستور بده میرفت پشت یه ترمینال مینشست و از یه کیبورد و یه مانیتور استفاده میکرد تا بتونه کارشو بکنه این یه مزیت دیگه هم داشت اونم این که خب چون کامپیوتر ها خیلی بزرگ و گرون بودن یه شرکت میومد یه دونه کامپیوتر با کلی ترمینال میخرید و اینجوری تمام کارمندا میتونستن با سیستم از طریق ترمینالشون صحبت کنن و ازش استفاده کنن.عکس از : ویکی پدیااما امروزه چی؟خب الان همه ی ما یک PC یا لپتاپ داریم پس دیگه نیازی به یه ترمینال فیزیکی نداریم (چون هم کیبورد و هم مانیتور داره و هم کامپیوتره!) پس مجبور شدیم اون ترمینال فیزیکی و سخت افزاری رو تبدیل به یه برنامه کنیم چیزی که بهش میگیم شبیه ساز ترمینال یا Terminal Emulator این یه برنامه هست که دقیقا رفتار همون ترمینال های قدیمی رو تقلید میکنه به این شکل که چند تا کاربر میتونن همزمان از طریق ترمینال به سیستم و منابعش دسترسی داشته باشند و به عبارتی ازش استفاده کنن و از طرفی راه ارتباطیمون با شل و در نتیجه سیستم عامل و بازم در نتیجه سخت افزارمون یا همون کامپیوترمون هم حفظ شده!خلاصه ماجرا :چیزی که توی این بخش از فصل اول bash2003 میخواستم بهتون بگم اینه :shell : یک رابط بین سیستم عامل و ما هستش. یه برنامه که دستورات ما رو میگیره و برای سیستم عامل ترجمه میکنه.bash : یه نوع شل هست، البته از نوع متنیش و نه گرافیکی.ترمینال : قدیما یه سخت افزار برای استفاده از shell بود چون کامپیوتر ها به شکل امروزی نبودن اما امروزه دیگه نیازی بهشون نیست ولی به دلیل این که باز نیاز داریم تا به shell های متنیمون مثل bash دسترسی داشته باشیم نرم افزار هایی برای emulate (یا همون تقلید کردن ) کار ترمینال ها ساختیم . که بهشون میگیم شبیه ساز ترمینال.تمرینهیچی، فقط سعی کنید چند لحظه به تصویر زیر نگاه کنید و سعی کنید یه بار توی ذهنتون داستان شل، بش و ترمینال رو مرور کنید.داستان بسراسخن پایانیامیدوارم که این داستان کوچولو کمک کرده باشه تا مفهوم bash، شل و ترمینال رو فهمیده باشید.این پست تحت لایسنس CC-BY-SA هست دوستان راحت و آسوده استفاده کنید.قسمت بعدی فردا ساعت ۱۳:۰۰بخش بعدی</description>
                <category>فاک دِ کْد</category>
                <author>Amber Eye</author>
                <pubDate>Wed, 06 Aug 2025 07:10:30 +0330</pubDate>
            </item>
            </channel>
</rss>