ببین، دستورات لینوکس رو قرار نیست مثل جدول ضرب حفظ کنی. وقتی یه پوشه شلوغ از فایلهای مختلف جلوت باشه، چیزی که به کارت میاد اینه که بفهمی با چه دستوری باید فایلها رو پیدا کنی، کدوم رو کپی کنی و چطور مطمئن بشی نتیجه درست بوده. توی این درس سراغ دستورات پرکاربرد لینوکس میریم، ولی نه به شکل یه فهرست خشک. با هم یه پروژه کوچیک راه میاندازیم و هر فرمان رو وقتی یاد میگیریم که واقعاً بهش نیاز داریم.
این بخش از آموزش دستورات لینوکس برای کسی نوشته شده که تازه کار با ترمینال رو شروع کرده. فقط لازمه بتونی یه ترمینال باز کنی و مفهوم پوشه فعلی رو بشناسی. اگه اینها برات جدیده، اول درس ترمینال لینوکس و Bash رو بخون؛ اونجا فرق Shell و Terminal و نحوه کار با مسیرها رو یاد گرفتیم. اینجا میخوایم از همون چیزها برای مدیریت فایل در لینوکس استفاده کنیم، نه اینکه دوباره درس قبلی رو تکرار کنیم.

آموزش دستورات لینوکس از صفر؛ چرا حفظ کردن اسم فرمانها کافی نیست؟
وقتی میگیم دستورات لینوکس، منظورمون معمولاً فرمانهایی هست که توی یه Shell مثل Bash اجرا میکنیم. بعضیها مثل cp و mv برنامههای مستقلن و بعضیها مثل cd داخل خود Shell اجرا میشن. لازم نیست همین اول ساختار همهشون رو حفظ کنی. فقط این تفاوت رو بدون تا فکر نکنی هر چیزی که توی ترمینال تایپ میکنی، یه بخش جدا از هسته لینوکسه. اگه میخوای جزئیات رفتار ابزارهای اصلی رو ببینی، راهنمای رسمی GNU Coreutils مرجع خوبیه.
یه قانون مهم برای کار با دستورات ضروری لینوکس داریم: اجرا شدن فرمان با درست انجام شدن کار یکی نیست. مثلاً ممکنه یه فایل رو با موفقیت کپی کنی، ولی به پوشه اشتباه. یا فایل قدیمی رو بدون اینکه متوجه بشی بازنویسی کنی. پس قبل از زدن Enter، هم مبدأ رو ببین هم مقصد رو؛ بعد از اجرا هم نتیجه رو جداگانه بررسی کن. توی این درس این عادت رو از همون تمرین اول با هم جلو میبریم.
توی این آموزش دستورات لینوکس با مثال، از ساخت پوشه و نمایش محتوا شروع میکنیم و میرسیم به کپی، جابهجایی، جستوجو، بررسی اندازه و حذف کنترلشده. همینها پایه خیلی از کارهای برنامهنویسی و مدیریت سرورن. قرار نیست اینجا تنظیمات شبکه، مجوزهای پیچیده یا پارتیشنبندی رو قاطی ماجرا کنیم؛ برای اونها درس جدا داریم. فعلاً تمرکزمون روی دستورات اولیه لینوکس و مدیریت درست فایل و پوشهست.
دستورات اولیه لینوکس؛ اول یه محیط تمرینی امن بساز
فرض کن یه گروه داوطلب داره نقشه مسیرهای مناسب رفتوآمد با ویلچر رو تهیه میکنه. گزارشهای هر هفته میرسن، ولی فایلهای خام، نسخههای بررسیشده و نسخههای قابل انتشار با هم قاطی شدن. اگه اشتباهی فایل قدیمی رو منتشر کنن، کارشون به مشکل میخوره. ما میخوایم همین ماجرا رو با چند دستور لینوکس حل کنیم: اول فایلها رو مرتب میکنیم، بعد نسخهها رو با هم میسنجیم و در آخر نتیجه رو تحویل میدیم. این سناریو کاملاً ساختگیه و داده واقعی کسی توش نیست.
برای اینکه تمرین بیخطر بمونه، همهچیز رو داخل پوشه nabegheha-file-lab توی Home خودت انجام بده. هیچ کدوم از فرمانهای پروژه قرار نیست به فایلهای سایت، پوشه /etc یا اطلاعات شخصی دست بزنن. اگه دنبال «دستورات اوبونتو» باشی، بیشتر همین فرمانهای Bash و GNU رو میبینی؛ مثالهای ما هم برای چنین محیطی نوشته شدن، ولی اگه از macOS یا ابزارهای BSD استفاده میکنی، بعضی گزینهها ممکنه فرق داشته باشن. ضمن اینکه روی پوشهای که از قبل همین اسم رو داره، بدون دیدن محتواش تمرین رو دوباره اجرا نکن.
از ساخت محیط شروع کنیم. این سه خط، پوشههای پروژه رو میسازن و بعد وارد پوشه اصلی میشن. گزینه -p در mkdir کمک میکنه مسیرهای لازم ساخته بشن؛ ولی اگه این پروژه رو قبلاً ساخته باشی، قرار نیست وجود همون پوشه به معنی خالی بودنش باشه. برای تمرین اول بهتره با یه مسیر تازه جلو بری، چون چند خط بعدی فایل نمونه تولید میکنیم و نمیخوایم چیزی رو ناخواسته بازنویسی کنیم.
mkdir -p "$HOME/nabegheha-file-lab"/{incoming,checked,published,backup,notes}
cd "$HOME/nabegheha-file-lab"
pwdبعد از اجرا، pwd باید مسیری رو نشون بده که به nabegheha-file-lab ختم میشه. توی خط اول از آکولاد استفاده کردیم تا Bash چند پوشه رو با یه فرمان بسازه؛ این کار رو خود Shell قبل از رسیدن فرمان به mkdir انجام میده. این یه نمونه کوچیکه از اینکه چرا آموزش لینوکس برای مبتدیان فقط حفظ کردن اسم برنامهها نیست؛ باید بفهمی شل چطور متن دستورت رو تفسیر میکنه.
دادههای تمرینی رو داخل پروژه قرار بده
حالا فایلهای نمونه رو خودمون میسازیم. قرار نیست چیزی از اینترنت دانلود کنی. دو فایل CSV داریم که توشون شناسه مسیر، وضعیت بررسی و یه یادداشت کوتاه ثبت شده؛ کنار اونها هم یه یادداشت متنی میسازیم. با printf میتونیم داده مشخص بنویسیم و هر بار نتیجه رو راحتتر بررسی کنیم. این شکل تمرین کمک میکنه دستورات لینوکس با مثال فقط یه سری کد بیربط نباشن.
printf '%s\n' 'route,status,note' 'R01,reviewed,ramp-ok' 'R02,pending,needs-photo' > incoming/routes-week1.csv
printf '%s\n' 'route,status,note' 'R03,reviewed,crossing-ok' 'R04,pending,needs-measurement' > incoming/routes-week2.csv
printf '%s\n' 'بازبینی نهایی با تیم مسیرها' > 'notes/team checklist.txt'حواست به علامت > باشه؛ این علامت خروجی رو توی فایل مینویسه و اگه فایل وجود داشته باشه، ممکنه محتوای قبلی رو پاک و جایگزین کنه. برای همین از اول گفتیم توی یه محیط تمرینی تازه کار کن. اسم team checklist.txt هم فاصله داره؛ دورش کوتیشن گذاشتیم تا Shell اسم فایل رو دو قسمت نکنه. این ریزهکاریها پایه مدیریت فایل در لینوکس هستن و جلوی خیلی از خطاهای بعدی رو میگیرن.
دستور ls در لینوکس، pwd و cd؛ اول ببین کجایی
قبل از اینکه چیزی رو تغییر بدیم، سه سؤال ساده داریم: الان کجام؟ این پوشه چه فایلهایی داره؟ چطوری باید برم پوشه بعدی؟ سه فرمان pwd، ls و cd دقیقاً برای همین کار به دردت میخورن. اینها از مهمترین دستورات اولیه لینوکس هستن؛ اگه جای فعلیت رو نشناسی، حتی یه دستور درست هم ممکنه روی مسیر اشتباه اجرا بشه.
pwd
ls
ls -la incoming
cd incoming
pwd
cd ..با دستور ls در لینوکس محتوای پوشه رو میبینی. گزینه -l جزئیاتی مثل اندازه فایل و زمان تغییر رو نشون میده و -a اسمهایی رو هم میاره که با نقطه شروع میشن. وقتی ls -la مینویسی، این دو رفتار با هم ترکیب میشن. فقط یادت باشه عدد اندازه کنار یه پوشه در خروجی ls -l به معنی مجموع حجم فایلهای داخلش نیست؛ برای بررسی فضای مصرفشده بعداً از du کمک میگیریم.
بعد از cd incoming، مسیر خروجی pwd باید به /incoming ختم بشه. با cd .. هم برمیگردی به پوشه والد. ببین اینجا تفاوت مهم مدیریت پوشه در لینوکس معلوم میشه: مسیر نسبی همیشه از جای فعلی حساب میشه. اگه توی پوشه اشتباه ایستاده باشی، ممکنه فرمانی مثل ls incoming خطا بده، با اینکه فایلها هنوز سر جاشون هستن.
تفاوت فایل مخفی، فایل معمولی و پوشه رو با یک مثال ببین
یه نکته که موقع کار با دستورات لینوکس زیاد بهش برمیخوری، فایلهای مخفیه. توی خیلی از محیطهای لینوکسی نامی که با نقطه شروع بشه، توی فهرست عادی نمایش داده نمیشه. این مخفی بودن هیچ ربطی به رمزنگاری یا امنیت تضمینی نداره. مثلاً فایل .env صرفاً بهخاطر نقطه اول اسمش امن نمیشه؛ اگه اشتباه روی وب منتشرش کنی، ممکنه اطلاعات حساس لو بره.
printf '%s\n' 'lab=true' > notes/.project-settings
ls notes
ls -a notesدر خروجی اول، فایل مخفی بهطور معمول دیده نمیشه؛ در خروجی دوم باید .project-settings هم وجود داشته باشه. این آزمایش رو عمداً با داده ساختگی انجام دادیم. هیچ رمز عبور، توکن API یا اطلاعات خصوصی داخل فایل تمرینی قرار نده؛ چون قرار نیست این فایل برای حفاظت واقعی از رازها استفاده بشه.
دستور mkdir و touch : چه زمانی پوشه بسازیم و چه زمانی فایل؟
برای ساخت پوشه از mkdir و برای ایجاد فایل خالی از touch استفاده میکنیم. اما touch یه نکته مهم داره: اگه فایل از قبل موجود باشه، بهجای خالی کردنش معمولاً زمانهای مربوط به فایل رو بهروزرسانی میکنه. پس اگه فکر میکنی touch همیشه یه فایل صفر بایتی جدید میسازه، توی پروژه واقعی ممکنه اشتباه کنی. این دو فرمان رو هم در فهرست دستورات ضروری لینوکس نگه دار.
mkdir -p checked/week1
mkdir -p checked/week2
touch notes/review-pending.flag
ls -l notes/review-pending.flagاین قسمت از دستورات لینوکس صرفاً درباره ساختن یه فایل علامتگذاره؛ پرچم review-pending.flag فقط یک نشانه خالی داخل آزمایش ماست. بعضی برنامهها از وجود چنین فایلهایی برای اعلام وضعیت استفاده میکنن، ولی این یک قرارداد طراحی برنامهست، نه ویژگی جادویی دستور touch. اگر محتوایی لازم داری که بشه خوندش، باید با ویرایشگر یا دستور مناسبی مثل printf بنویسی.
وقتی داری دستورات لینوکس رو یاد میگیری، بهتره قبل از زدن Enter حدس بزنی چه اتفاقی میافته. مثلاً همینجا یه تمرین ذهنی انجام بده : اگر بنویسی mkdir checked/week3 ولی پوشه checked از قبل وجود نداشته باشه، چه میشه؟ معمولاً خطای «No such file or directory» میگیری. راهحلش استفاده از mkdir -p یا ساختن پوشه والد در مرحله اوله. مهارت کار با لینوکس همین پیشبینیهای کوچیکه، نه فقط حفظ کردن دستورها.
دستور cp در لینوکس : نسخه دوم بساز، نه اینکه اصل فایل رو قربانی کنی
وقتی یه گزارش خام آماده بررسی شد، اولین کاری که میکنیم ساختن یه نسخه جداست؛ نمیخوایم اصل فایل رو تغییر بدیم. اینجا دستور cp در لینوکس به کارمون میاد. با cp یه کپی داخل پوشه checked میسازیم و فایل اصلی توی incoming باقی میمونه. همین تفاوت ساده، یکی از پایههای مدیریت فایل در لینوکس هست: کپی کردن یعنی دو نسخه داری، نه اینکه جای فایل اصلی عوض شده باشه.
cp incoming/routes-week1.csv checked/week1/routes-week1.csv
ls incoming
ls checked/week1حالا که با دستورات لینوکس نسخه دوم رو ساختیم، بعد از اجرا باید routes-week1.csv هم داخل ورودی خام و هم داخل پوشه بررسی وجود داشته باشه. اگر cp رو بدون شناخت مقصد اجرا کنی، ممکنه فایل جدید با نام غیرمنتظره بسازه یا فایل همنام موجود رو بازنویسی کنه. فرض کن چند روز بعد checked/week1/routes-week1.csv رو اصلاح کردی؛ اجرای مجدد همین فرمان میتونه تغییرات نسخه بررسیشده رو از بین ببره.
قبل از کپی دوباره، مقصد و خطر بازنویسی رو بررسی کن
حالا فرض کن فایل مقصد از قبل وجود داره. اگه بدون بررسی دوباره کپی کنی، ممکنه تغییراتی رو که روی نسخه بررسیشده انجام دادی از دست بدی. روی ابزار GNU، گزینه -i قبل از بازنویسی ازت سؤال میپرسه. این قابلیت مفیده، ولی قرار نیست جای نگاه کردن به فایل مقصد رو بگیره. برای تمرین با دستورات پرکاربرد لینوکس، همین عادت ساده رو جدی بگیر: قبل از کپی دوباره، اول ببین مقصد وجود داره یا نه.
test -e checked/week1/routes-week1.csv && printf '%s\n' 'destination exists'
cp -i incoming/routes-week1.csv checked/week1/routes-week1.csvچون فایل مقصد رو توی مرحله قبل ساختیم، cp -i معمولاً ازت اجازه بازنویسی میخواد. اینجا n بزن تا نسخه قبلی همونطور بمونه. بعضی نسخههای GNU گزینه -n رو هم برای جلوگیری از بازنویسی دارن، اما کد خروج رو با انجام شدن کپی یکی نگیر. موقع کپی پوشهها هم cp -r و cp -a به کارت میان؛ گزینه -a تلاش میکنه ویژگیهای فایل رو حفظ کنه، ولی جای بکاپ درست و تست بازیابی نیست. جزئیات دقیق رو میتونی توی مستندات دستور cp در GNU ببینی.
دستور mv در لینوکس : تفاوت جابهجایی با تغییر نام رو لمس کن
تا اینجا نسخههای خام رو نگه داشتیم و کپی گرفتیم. حالا وقت جابهجایی و تغییر نام یه فایله. دستور mv در لینوکس میتونه هر دو کار رو انجام بده؛ اینکه نتیجه انتقال به پوشه باشه یا تغییر اسم فایل، به شکل مسیر مقصد بستگی داره. برای همین موقع استفاده از mv همیشه اسم مبدأ و مقصد رو با دقت بخون. همینجا تفاوت عملی cp و mv رو میبینی.
cp incoming/routes-week2.csv checked/week2/routes-week2.csv
mv checked/week2/routes-week2.csv checked/week2/routes-week2-reviewed.csv
ls checked/week2حالا ببین بعد از اجرای دستورات لینوکس چی شده: توی پوشه checked/week2 اسم فایل به routes-week2-reviewed.csv تغییر کرده. دقت کن فایل خام در incoming هنوز وجود داره. اگر بخوای نسخه بررسیشده رو منتشر کنی، میتونی یک کپی از همون نسخه به published منتقل کنی؛ ولی تا وقتی محتوا واقعاً تأیید نشده، بهتره اسمی مثل reviewed رو فقط به خاطر تمرین روی داده خام نگذاری. اسم فایل سند کیفیت محتوای داخلش نیست.
چرا mv همیشه به معنی «تغییر نام فوری» نیست؟
یه نکته فنی درباره دستور mv در لینوکس وجود داره که بهتره از الان بدونی. وقتی مبدأ و مقصد روی یه فایلسیستم باشن، جابهجایی معمولاً با تغییر نام یا ورودی دایرکتوری انجام میشه. اما بین دو فایلسیستم متفاوت، GNU ممکنه اول داده رو کپی کنه و بعد مبدأ رو حذف کنه؛ پس این کار همیشه فوری نیست. اگه روی فایل بزرگ یا پروژه مهم کار میکنی، بعد از جابهجایی نتیجه رو مستقل بررسی کن. راهنمای رسمی mv هم این رفتار رو توضیح میده.
وقتی از دستورات لینوکس برای جابهجایی استفاده میکنی، بهخصوص حواست به مقصد همنام باشه. mv هم میتونه یک فایل موجود رو جایگزین کنه. استفاده از mv -i برای تأیید تعاملی مفیده، ولی قبل از هر تغییر مهم اول پوشه مقصد رو ببین. موفقیت ظاهریِ یک فرمان، مدرک این نیست که نسخه موردنظر به جای درست منتقل شده.
مدیریت فایل در لینوکس با cat، head و tail
خیلی وقتها لازم نیست برای دیدن متن فایل، ویرایشگر باز کنی. دستور cat برای نمایش فایلهای کوتاه خوبه؛ head چند خط اول و tail چند خط آخر رو نشون میدن. اینها از دستورات پرکاربرد لینوکس برای خواندن گزارشها و فایلهای متنی هستن. فقط حواست باشه دیدن چند خط، به معنی بررسی کامل یا معتبر بودن یه فایل CSV نیست.
cat incoming/routes-week1.csv
head -n 2 incoming/routes-week2.csv
tail -n 1 incoming/routes-week2.csvتوی فایل هفته اول، باید سرستون و دو ردیف اطلاعات ببینی. با head -n 2 دو خط اول و با tail -n 1 آخرین خط رو میگیری. اگه یه تصویر یا فایل اجرایی رو با cat چاپ کنی، ممکنه خروجی ناخوانا یا کاراکترهای کنترلی ببینی. برای تشخیص اولیه نوع فایل، ابزار file کمک میکنه؛ ولی روی نصب خیلی سبک شاید لازم باشه اول وجودش رو بررسی کنی.
دستور file و پسوند اسم فایل همیشه یک چیز نمیگن
یکی از نکات مهم موقع استفاده از دستورات لینوکس اینه که سیستم معمولاً فقط با دیدن پسوند تصمیم نمیگیره فایل چه نوعیه. میتونی فایلی رو photo.jpg بنامی درحالیکه داخلش صرفاً متن باشه. file با بررسی محتوای فایل سعی میکنه نوعش رو حدس بزنه؛ اما نتیجه اون هم جای اعتبارسنجی کامل، بهویژه در فایلهای ناشناس یا آپلودهای کاربران رو نمیگیره.
file incoming/routes-week1.csv
file 'notes/team checklist.txt'خروجی دقیق file با توجه به نسخه و محتوای فایل فرق میکنه؛ مثلاً ممکنه نام CSV رو «ASCII text» یا «CSV text» تشخیص بده. برای همین توی آموزش، خروجی مشخص ساختگی براش نمینویسیم. نکته اینه که اسم فایل، محتوای فایل و اعتبار داده سه مفهوم متفاوتن. این نگاه بعدها در بحث امنیت آپلود فایل هم به کارت میاد.
دستور find در لینوکس و دستور grep در لینوکس؛ فرقشون چیه؟
خیلیها اول کار find و grep رو با هم قاطی میکنن. دستور find در لینوکس دنبال فایلها و پوشهها میگرده؛ مثلاً براساس اسم و نوع. اما دستور grep در لینوکس متن داخل فایلها رو جستوجو میکنه. اگه اسم فایل رو ندونی یه مسئله داری؛ اگه دنبال یه عبارت داخل فایل باشی، مسئلهات فرق میکنه. این دو ابزار رو فعلاً جدا امتحان میکنیم تا کاربرد هر کدوم روشن بشه.
find incoming -type f -name '*.csv' -print | sort
grep -n 'pending' incoming/routes-week1.csv
grep -n 'pending' incoming/routes-week2.csvتوی مثال find، الگوی '*.csv' رو داخل کوتیشن گذاشتیم. چرا؟ چون نمیخوایم Bash قبل از اجرای فرمان، ستاره رو براساس فایلهای پوشه فعلی گسترش بده. با -type f فقط فایل معمولی رو میخوایم و -print مسیرها رو چاپ میکنه. خروجی رو هم به sort دادیم که مرتبتر ببینیم. اگه میخوای بیشتر با دستور find در لینوکس آشنا بشی، مستندات رسمی GNU Findutils رو ببین.
دو فرمان بعدی از grep -n استفاده میکنن تا خطهایی که pending دارن همراه شماره خط نمایش داده بشن. یادت باشه توی دستور grep در لینوکس کد خروج 1 معمولاً یعنی چیزی مطابق الگو پیدا نشده؛ همیشه به معنی خرابی ابزار نیست. وقتی خروجی خالی میبینی، اول فایل و عبارت جستوجو رو بررسی کن. توضیح دقیق گزینهها و کد خروج رو هم توی راهنمای رسمی GNU grep میتونی پیدا کنی.
جستوجوی اسم فایل با جستوجوی محتوای آن چه فرقی داره؟
یکی از کاربردهای دستورات لینوکس اینه که اسم فایل رو از محتوای اون جدا بررسی کنی. مثلاً فرض کن اسم یه فایل routes-week3.csv باشه و داخلش هیچ مسیر تأییدشدهای وجود نداشته باشه. find ممکنه بهخاطر پسوند CSV اون رو برگردونه، اما این به ما نمیگه چند مسیرش معلقه. برای فهم وضعیت محتوا باید فایل رو بخونیم، پارس کنیم یا در مثال ساده خودمون از grep استفاده کنیم. اگر CSV پیچیده باشه و فیلدهای نقلقولدار و ویرگول داخل متن داشته باشه، تکیه به جستوجوی ساده متنی جای پردازش درست CSV نیست.
وقتی با دستورات لینوکس سراغ لاگهای امنیتی میری، همین تفاوت رو هم در نظر بگیر : فایل لاگ موجوده، اما اینکه عبارت خطا داخلش هست یا نه، یک سؤال جداست؛ و اینکه وجود اون خطا دقیقاً به معنی حمله سایبریه یا نه، باز هم سؤال سوم. فرمان فقط شواهد اولیه میده، نه تحلیل نهایی.

دستورهای wc، du و stat : تعداد، حجم و مشخصات رو با هم قاطی نکن
وقتی گزارش آماده شد، سه سؤال دیگه پیش میاد: چند خط داره؟ چقدر فضا گرفته؟ اندازه و مشخصات خود فایل چیه؟ اینجا wc، du و stat وارد میشن. هر سه جزو دستورات لینوکس هستن، اما یه چیز رو اندازه نمیگیرن. wc میشمره، du مصرف فضای دیسک رو تخمین میزنه و stat مشخصات فایل رو نشون میده.
wc -l incoming/routes-week1.csv
du -sh incoming
stat -c '%n | %s bytes' incoming/routes-week1.csvدر اولین فرمان، باید عدد 3 رو ببینی؛ چون فایل هفته اول یک سرستون و دو ردیف داده داره. توجه کن wc -l تعداد کاراکتر newline رو میشمره، بنابراین در فایلی که خط آخرش newline نداره، برداشتش با مفهوم روزمره «تعداد خطها» ممکنه تفاوت کنه. دستور du -sh مقدار فضایی رو بهشکل قابل خوندن خلاصه میکنه؛ خروجی دقیقش به فایلسیستم و اندازه بلوکها بستگی داره و نباید برای همه یک عدد ثابت بنویسیم.
وقتی دستورات لینوکس رو روی سیستمهای مختلف اجرا میکنی، گزینه -c در stat نسخه GNU قالب خروجی سفارشی تعریف میکنه و %s اندازه فایل رو برحسب بایت میده؛ این با اندازه اختصاصدادهشده روی دیسک الزاماً یکی نیست. اگر روی محیطی هستی که stat -c رو نمیشناسه، اول stat --help یا مستندات ابزار همون سیستم رو بررسی کن. یاد گرفتن اینکه خروجی هر ابزار دقیقاً چه کمیتی رو اندازه میگیره، از حفظ کردن چند گزینه عجیب ارزشمندتره.
قبل از پاک کردن فایلها، یک قانون داشته باش : اول ببین، بعد تصمیم بگیر
حالا برسیم به جایی که باید خیلی دقیقتر کار کنیم: حذف فایل. دستور rm در لینوکس مثل دکمه انتقال به سطل زباله نیست و معمولاً امکان Undo ساده نداره. پس قرار نیست به محض اینکه فایلی اضافه شد، یه فرمان عجیب و طولانی با sudo rm -rf اجرا کنیم. اول اسم فایل و مسیرش رو میبینیم، بعد فقط یه فایل بیارزش آزمایشی رو با تأیید خودمون پاک میکنیم.
برای این بخش، یه فایل موقت داخل پوشه notes میسازیم. قبل از حذف، با ls -l مطمئن میشیم همون فایلیه که انتظار داریم. بعد با rm -i از خودمون تأیید میگیریم. این یکی از مهمترین قسمتهای آموزش دستورات لینوکس برای شروعه: یاد بگیری قبل از اجرای فرمانهای تغییردهنده، یه راه برای بررسی نتیجه داشته باشی.
printf '%s\n' 'temporary practice file' > notes/delete-me.tmp
ls -l notes/delete-me.tmp
rm -i notes/delete-me.tmpوقتی با دستورات لینوکس فایل آزمایشی رو حذف میکنی، اگه در پرسش حذف، n بزنی فایل باقی میمونه و اگر y بزنی حذف میشه. این سؤال تضمین نمیکنه هیچ اشتباهی رخ نمیده؛ فقط فرصت بررسی میده. اگر دستوری رو از اینترنت کپی میکنی و داخلش rm -rf، الگوهای ستارهدار یا مسیرهای سیستمی وجود داره، هرگز بدون فهم دقیق اثرش اجراش نکن. بهخصوص برای مبتدی، دیدن خروجی find با -print قبل از هر عملیات تغییردهنده ضروریه.
دستور rmdir چه فرقی با rm دارد؟
توی فهرست دستورات لینوکس، rmdir یه کار مشخص داره: فقط پوشه خالی رو حذف میکنه. این رفتار برای تمرین آموزشی مفیده چون بهطور پیشفرض پوشه پر از داده رو پاک نمیکنه. البته اگر پوشهای خالیه، معنیاش این نیست که حذفش همیشه از نظر کاری بیضرره؛ شاید برنامهای انتظار داشته باشه اون پوشه وجود داشته باشه. ما صرفاً یک پوشه آزمایشی بیمصرف میسازیم و حذف میکنیم.
mkdir -p notes/empty-folder
rmdir notes/empty-folderحالا یک سؤال فنی : آیا اجرای rm روی فایلی که واقعاً حذف شده، به معنی پاک شدن قطعی اطلاعات از تمام رسانههای ذخیرهسازی، نسخههای بکاپ یا Snapshotهاست؟ نه. حذف منطقی فایل و پاکسازی غیرقابلبازیابی داده دو مسئله متفاوتن. در این درس فقط مدیریت معمول فایلها رو یاد میگیریم، نه نابودسازی امن دادهها.
کدوم فایل واقعاً نسخه سالمه؟ بررسی کپی با sha256sum و cmp
حالا یه سؤال مهم: از کجا معلوم نسخه کپیشده واقعاً با فایل اصلی برابر باشه؟ صرف دیدن اسم و اندازه فایل کافی نیست. cmp میتونه بایتهای دو فایل رو با هم مقایسه کنه و sha256sum هم هش هر فایل رو نشون میده. اگه میخوای مدیریت فایل در لینوکس رو درست یاد بگیری، بررسی صحت نتیجه باید جزو کارت باشه، نه فقط کپی کردن.
cmp -s incoming/routes-week1.csv checked/week1/routes-week1.csv
printf 'cmp_status=%s\n' "$?"
sha256sum incoming/routes-week1.csv checked/week1/routes-week1.csvچون در این مرحله هنوز نسخه کپیشده رو تغییر ندادیم، مقدار cmp_status باید 0 باشه و هشهای SHA-256 دو فایل هم با هم برابر میشن. اما یه نکته ظریف وجود داره : برابر بودن هش دو فایل، بهتنهایی تأیید نمیکنه دادهها درست، تازه، معتبر یا عاری از دستکاری قبلی هستن. فقط نشون میده در این مقایسه دو محتوا یکسانن؛ برای اعتماد به منشأ فایل باید مرجع قابل اعتماد یا سازوکار امضای دیجیتال داشته باشی.
تست کنیم چطور فایل همنام میتواند محتوای متفاوت داشته باشد
حالا فقط به نسخه داخل پوشه checked یک خط اضافه میکنیم و دوباره مقایسه رو انجام میدیم. دقت کن این تغییر رو روی نسخه خام انجام نمیدیم. این تفاوت کوچیک کمک میکنه بفهمی چرا قبل از هر کپی یا جابهجایی باید نسخه مبدأ و مقصد رو درست تشخیص بدی.
printf '%s\n' 'R05,pending,needs-confirmation' >> checked/week1/routes-week1.csv
cmp -s incoming/routes-week1.csv checked/week1/routes-week1.csv
printf 'cmp_status=%s\n' "$?"در این مرحله خروجی cmp_status=1 رو انتظار داریم؛ در GNU cmp کد ۱ معمولاً به معنی تفاوت محتواست. این با کد ۲، که معمولاً نشوندهنده مشکل در اجرای مقایسهست، فرق داره. یعنی همیشه غیرصفر بودن یک خروجی رو یک برچسب مبهم «خطا» نزن. معنای نتیجه رو از قرارداد همون ابزار بخون.
فایلها رو منتشر کنیم؛ اما چطور بدون خراب کردن آرشیو؟
فرض کن گزارش جدید تأیید شده و حالا میخوای فایلها رو برای انتشار آماده کنی. اول از ورودیهای خام یه کپی تمرینی توی backup نگه میداریم، بعد فایلهای بررسیشده رو داخل published قرار میدیم. این یه نمونه کوچک از کاربرد دستورات لینوکس توی یه جریان کاریه؛ البته این پوشه بکاپ روی همون سیستم، جای بکاپ واقعی با نسخه مستقل و تست بازیابی رو نمیگیره.
cp -a incoming/. backup/
cp checked/week1/routes-week1.csv published/routes-week1-reviewed.csv
cp checked/week2/routes-week2-reviewed.csv published/routes-week2-reviewed.csv
find published -maxdepth 1 -type f -name '*.csv' -print | sortدر دستور cp -a incoming/. backup/ محتوای پوشه مبدأ، شامل فایلهای عادی و مخفیِ داخل اون، به پوشه بکاپ کپی میشه. الگوی incoming/. اینجا به پوشه مبدأ اشاره میکنه؛ با incoming/* یکی نیست. اگر از الگوی ستاره استفاده میکردیم، در تنظیمات معمول Bash فایلهای مخفیِ شروعشونده با نقطه وارد تطبیق نمیشدن. همچنین اگر پوشه بکاپ از قبل محتوا داشته باشه، مدیریت نسخهها و بازنویسی اهمیت پیدا میکنه؛ پس این دستور رو فقط داخل محیط تازه تمرین اجرا کن.
بعد از اجرای دستورات لینوکس هنوز یه کار مونده : خروجی رو بررسی کنیم، نه اینکه چون فرمانها بدون پیام خطا تموم شدن تصور کنیم همهچیز درست بوده. فایلهای مورد انتظار باید در published وجود داشته باشن و مقدار خطهای گزارش هرکدوم با چیزی که فکر میکنی بخونه. برای پروژههای حساستر، داشتن Manifest یا فهرست فایلهای مورد انتظار، از یادداشت دستی و حافظه آدم مطمئنتره.

یک چکلیست پنجمرحلهای قبل و بعد از هر دستور لینوکس
تا اینجا تعداد زیادی از دستورات لینوکس رو با هم دیدیم. یه چارچوب کوچیک بهت بدم که موقع اجرای هر فرمان به کارت میاد: «پنج سؤال قبل از Enter». اینها نه دستور مخفی لینوکس هستن، نه استاندارد رسمی؛ فقط یه روش برای اینکه قبل از کپی یا حذف، چند ثانیه درست فکر کنی. همین روش بعداً روی سرور و توی اسکریپتهای Bash هم به کارت میاد.
اول بپرس «کجام؟» چون مسیر نسبی به جای فعلیت بستگی داره. بعد بپرس «چه فایلهایی انتخاب میشن؟» چون الگوهای ستارهدار ممکنه چیزی غیر از انتظار تو پیدا کنن. سؤال سوم اینه که «فرمان قراره چه چیزی رو تغییر بده؟» و چهارم اینکه «اگه مقصد وجود داشته باشه چی میشه؟». آخر هم بپرس «با چی ثابت میکنم کار درست انجام شده؟». این پنج سؤال، استفاده از دستورات پرکاربرد لینوکس رو از کپیکردن کورکورانه جدا میکنه.
| سؤال | ابزار پیشنهادی | اشتباه رایج | روش بررسی |
|---|---|---|---|
| الان کجا هستم؟ | pwd | اجرای مسیر نسبی از پوشه غلط | مسیر کامل را قبل از تغییر ببین |
| چه چیزی انتخاب میشود؟ | ls و find | گسترش ناخواسته ستاره | نام فایلها را پیشنمایش کن |
| چه چیزی تغییر میکند؟ | cp و mv و rm | قاطی کردن کپی و انتقال | مبدأ و مقصد را بنویس |
| مقصد موجود است؟ | test -e و ls | بازنویسی نسخه قبلی | وجود مقصد را بررسی کن |
| نتیجه درست است؟ | cmp و wc و find | اعتماد به پیام بدون خطا | فایل و محتوا را مقایسه کن |
این روش بهت یاد میده هر بار قبل از اجرا با یه مسئله مشخص روبهرو بشی، نه یه دستور حفظی. البته اگه روی سرور اصلی کار میکنی، علاوه بر این سؤالها به بکاپ قابل بازیابی، کنترل دسترسی و برنامه برگشت هم نیاز داری. یه چکلیست آموزشی قرار نیست جای اونها رو بگیره؛ ولی برای آموزش لینوکس برای مبتدیان شروع خوبی میسازه.
دستورات پرکاربرد لینوکس؛ جدول ۱۹ فرمان مدیریت فایل و پوشه
این جدول رو مثل یه برگه تقلب کوچیک نگه دار. توش ۱۹ مورد از دستورات پرکاربرد لینوکس رو گذاشتم که برای کار با فایل و پوشه به درد میخورن. قرار نیست هر ۱۹ مورد رو همین امروز از حفظ باشی؛ مهمه بدونی هر کدوم برای حل چه مشکلی استفاده میشه. اگه از روی جدول روی یه پروژه واقعی کار میکنی، مسیرها و گزینهها رو متناسب با همون محیط دوباره بررسی کن.
| دستور | کاربرد اصلی | نمونه کوتاه | نکته مهم |
|---|---|---|---|
| pwd | نمایش مسیر فعلی | pwd | روی مسیر نسبی اثر دارد |
| ls | نمایش محتویات | ls -la incoming | اندازه پوشه، مجموع حجم نیست |
| cd | تغییر پوشه جاری | cd checked | از دستورهای داخلی Shell است |
| mkdir | ساخت پوشه | mkdir -p checked/week3 | -p مسیرهای میانی را میسازد |
| touch | ساخت فایل خالی یا تغییر timestamp | touch notes/ready.flag | فایل موجود را لزوماً خالی نمیکند |
| cp | کپی فایل و پوشه | cp a.txt b.txt | ممکن است مقصد را بازنویسی کند |
| mv | جابهجایی یا تغییر نام | mv a.txt archive/ | وجود مقصد مهم است |
| cat | نمایش محتوا | cat incoming/routes-week1.csv | برای فایل باینری مناسب نیست |
| head | دیدن ابتدای متن | head -n 2 file.csv | فقط بخشی از محتوا را میبینی |
| tail | دیدن انتهای متن | tail -n 1 file.csv | نتیجه به ترتیب فایل وابسته است |
| find | پیدا کردن فایل | find . -name ‘*.csv’ | الگو را کوتیشنگذاری کن |
| grep | جستوجو داخل متن | grep -n pending file.csv | عدم تطبیق معمولاً کد ۱ میدهد |
| wc | شمارش | wc -l file.csv | newline را میشمرد |
| du | فضای اختصاصیافته | du -sh incoming | با اندازه بایت فایل فرق دارد |
| stat | جزئیات فایل | stat file.csv | بعضی گزینهها مخصوص GNU هستند |
| cmp | مقایسه بایتها | cmp -s a.txt b.txt | کد ۰ یعنی برابر |
| sha256sum | هش فایل | sha256sum file.csv | جای اعتبارسنجی منبع را نمیگیرد |
| rm | حذف فایل | rm -i practice.tmp | معمولاً به Trash منتقل نمیکند |
| rmdir | حذف پوشه خالی | rmdir empty-folder | پوشه دارای فایل را پاک نمیکند |
پنج خطای واقعیِ مبتدیها موقع اجرای دستورات لینوکس
یه تفاوت مهم بین کاربر تازهکار و کسی که با دستورات لینوکس راحت کار میکنه اینه که دومی قبل از اجرا به خطاهای احتمالی فکر میکنه. پنج موقعیت زیر رو بخون و سعی کن اول خودت علت رو حدس بزنی. حتی اگه راهحل رو بلدی، از خودت بپرس چطور با یه فرمان بیخطر میتونی درستی حدست رو بررسی کنی.
خطای اول : فایل هست، ولی No such file or directory میبینی
این پیام همیشه به معنی پاک شدن فایل نیست. شاید از پوشه اشتباه اجرا میکنی، شاید یک بخش از اسم مسیر رو غلط نوشتی یا شاید حروف بزرگ و کوچک رو جابهجا کردی. اول pwd و بعد ls همون مسیر رو بررسی کن. در بیشتر فایلسیستمهای رایج لینوکس، Report.csv و report.csv دو نام متفاوت محسوب میشن. بهجای رفتن سراغ sudo، اول معلوم کن واقعاً دنبال کدوم فایل هستی.
خطای دوم : بهجای یک فایل، دو اسم ساخته میشه
وقتی نام فایل فاصله داره و کوتیشن رو فراموش میکنی، Shell اون رو به چند کلمه تقسیم میکنه. مثلاً cat notes/team checklist.txt دنبال دو فایل جدا میگرده، نه یک فایل با فاصله. شکل درست برای همین محیط تمرینی cat 'notes/team checklist.txt' هست. فرق این دو فرمان جزئیه، ولی نتیجه برای دانشجو میتونه گیجکننده باشه.
خطای سوم : فایل کپی شده، اما تغییراتم ناپدید شده
احتمالاً یک نسخه جدید رو روی مقصد موجود کپی کردی. cp در حالت عادی میتونه فایل همنام رو جایگزین کنه. اگر مقصد نتیجه کار چندساعتهست، صرف اینکه اسمش همونه نباید مجوز بازنویسی محسوب بشه. قبل از کپی، فایل مقصد رو ببین؛ برای نمونه حساس میتونی از گزینه تأیید تعاملی یا سیاست نسخهبندی استفاده کنی. حتی بهتر، اسم خروجی رو طوری انتخاب کن که نسخهها قابل تشخیص باشن.
خطای چهارم : find خروجی عجیبی میده یا هیچچیز پیدا نمیکنه
وقتی با دستورات لینوکس دنبال فایلها میگردی، اگه الگوی *.csv رو بدون کوتیشن وارد کنی، ممکنه Bash قبل از اجرای find اون رو باز کنه و فرمان چیزی متفاوت از انتظار دریافت کنه. از طرف دیگه، اگر جستوجو رو از پوشه اشتباه شروع کنی، طبیعیه نتیجهای که میخوای پیدا نشه. برای همین در مثالهامون نقطه شروع incoming رو مشخص کردیم و الگو رو کوتیشن گذاشتیم.
خطای پنجم : حذف انجام شد، اما راه برگشت ندارم
این اتفاق زمانی میافته که حذف رو مثل سطل زباله محیط گرافیکی تصور کنی. فرمان rm معمولاً فایل رو به Trash انتقال نمیده. اگر فایل مهمه، باید قبل از حذف نسخه قابل بازیابی یا راهکار نسخهبندی مناسب داشته باشی. در یک محیط تمرینی، سؤال تعاملی rm -i فرصت مکث میده؛ در محیط واقعی، کنترل محدوده عملیات و داشتن نسخه بازیابی اهمیت بیشتری داره.
سه تمرین پایانی؛ بدون اینکه جواب رو همون اول ببینی
حالا وقتشه ببینیم چقدر از دستورات اولیه لینوکس رو واقعاً فهمیدی. این سه تمرین رو اول خودت حل کن و اگه یادت رفت یه گزینه چی بود، به جدول یا --help برگرد. لازم نیست همهچیز حفظ باشه؛ مهم اینه که بگی چرا اون فرمان رو انتخاب کردی و چطوری نتیجه رو تأیید میکنی.
تمرین اول : نسخه خام رو از نسخه منتشرشده تشخیص بده
با دستورات لینوکس میتونی نتیجه رو دقیق بسنجی: داخل پوشه تمرین، با دو دستور مختلف بررسی کن چند فایل CSV در incoming وجود داره و چند فایل CSV در published. جواب رو با نام فایلها بنویس، نه فقط عدد. بعد بگو آیا مساوی بودن تعداد فایلها نشون میده اطلاعات دو پوشه همسانه؟ جواب باید «نه» باشه؛ چون محتوا و نام فایلها میتونن متفاوت باشن. برای بررسی دقیقتر میتونی از cmp یا هش استفاده کنی، البته فقط وقتی فایلهای متناظر رو درست پیدا کردی.
تمرین دوم : یک نسخه امنِ اضافه برای بررسی بساز
از فایل incoming/routes-week2.csv یک نسخه داخل checked/week2 با نام جدید بساز که به نام فایل موجود برخورد نکنه. قبل از اجرا مقصد رو بررسی کن، بعد از اجرا وجود فایل جدید و مساوی بودن محتوای اون با مبدأ رو ثابت کن. اگر اسم انتخابی از قبل وجود داشت، اسم جدید پیشنهاد بده؛ نسخه قبلی رو ناخواسته بازنویسی نکن. هدف تمرین کار با cp همراه با تصمیمگیریه، نه فقط تولید یک فایل جدید.
تمرین سوم : برای یک خطای عمدی، تشخیص درست بده
از داخل پوشه اصلی پروژه، یک نام فایل اشتباه مثل incoming/not-here.csv رو با cat بخون و خروجی خطا رو بررسی کن. بعد با ls incoming ثابت کن مشکل از نبودن همین اسم در پوشه تمرینه. آیا نتیجه میگیری لینوکس خراب شده؟ نه؛ ابزار درست رفتار کرده و تو درخواست فایلی رو دادی که وجود نداره. حالا به جای حدس زدن، مسیر صحیح رو پیدا کن.
بعد از یاد گرفتن این دستورات لینوکس، قدم بعدی چیه؟
اگه تمرینها رو انجام داده باشی، الان میتونی فایل خام رو از نسخه بررسیشده جدا نگه داری، پوشه بسازی، جابهجایی و کپی انجام بدی، داخل فایلها بگردی و قبل از حذف نتیجه رو بررسی کنی. اینها همون دستورات لینوکس هستن که توی کارهای روزمره واقعاً به درد میخورن. مهمتر اینکه دیگه «فرمان اجرا شد» رو با «کار درست انجام شد» اشتباه نمیگیری.
قدم بعدی رو هم از همینجا میتونی انتخاب کنی. توی درس ساختار فایلسیستم لینوکس میفهمی پوشههایی مثل /home، /etc و /var چه کاربردی دارن. بعدش هم سراغ مجوزهای فایل و دستورات chmod و chown میریم. این ترتیب کمک میکنه مدیریت پوشه در لینوکس و دسترسیها رو بهصورت مرتبط یاد بگیری، نه با چند دستور جدا از هم.
اگه دوست داری آموزش Linux Commands و بقیه مباحث رو داخل یه مسیر ویدیویی و تمرینمحور جلو ببری، سرفصلهای پکیج لینوکس Essentials (Linux Essentials) نابغهها رو هم ببین. این مقاله قرار نیست جای دوره رو بگیره؛ هدفش اینه که همین موضوع مدیریت فایل رو تا حدی یاد بگیری که بتونی خودت تمرینش کنی و بفهمی قدم بعدی چیه.

منابع فنی برای بررسی دقیقتر دستورها
هر جا درباره یکی از دستورات لینوکس شک داشتی، بهتره علاوه بر مثالهای مقاله، مستندات رسمی رو ببینی. GNU Coreutils رفتار ابزارهایی مثل ls، cp، mv و rm رو توضیح میده. برای جستوجوی فایلها GNU Findutils و برای قوانین کوتیشن و Shell هم راهنمای Bash رو داری. این منابع خارجی فقط برای راستیآزمایی جزئیات هستن؛ تمرین پروژه رو خودمون قدمبهقدم پیش بردیم.
یه یادآوری قبل از پایان: اینها دستورات لینوکس با مثال توی یه پوشه آزمایشگاهی هستن. اگه همین فرمانها رو روی سرور یا فایل مهم اجرا کنی، ممکنه شرایط فرق داشته باشه. خصوصاً فرمانهای بازنویسی و حذف رو روی محیط واقعی بدون بکاپ، بررسی مسیر و مجوز لازم اجرا نکن. هدف این درس اینه که کمکم مستقل بشی، نه اینکه از یه فرمان بلند و ترسناک تقلید کنی.
سؤالات متداول درباره دستورات لینوکس
دستورات لینوکس رو از کجا شروع کنم؟
برای شروع، بهجای حفظ کردن دهها فرمان، پنج کار رو یاد بگیر : پیدا کردن مسیر، دیدن محتویات، ساخت پوشه، کپی فایل و بررسی نتیجه. دستورهای pwd، ls، mkdir، cp و cmp نقطه شروع خوبی هستن. همین درس یک پروژه تمرینی داره که کاربردشون رو در یک جریان واقعی نشون میده.
مهمترین دستورات لینوکس برای مبتدیها کدومان؟
انتخاب دستور به کاری که میخوای انجام بدی بستگی داره، اما ls، pwd، cd، mkdir، cp، mv، cat، find، grep و rm در مدیریت روزمره فایلها زیاد به کار میان. مهمتر از فهرست اسامی اینه که تفاوت کپی، انتقال و حذف رو بفهمی و نتیجه هرکدوم رو بررسی کنی.
تفاوت cp و mv در لینوکس چیه؟
دستور cp معمولاً یک نسخه تازه در مقصد ایجاد میکنه و مبدأ رو نگه میداره، اما mv فایل یا پوشه رو جابهجا میکنه یا اسمش رو تغییر میده. هر دو ممکنه در شرایطی فایل مقصد موجود رو بازنویسی کنن؛ برای همین قبل از اجرا وجود و محتوای مقصد رو کنترل کن.
آیا rm فایل رو به سطل زباله لینوکس میفرسته؟
در حالت عادی نه. rm فایل رو مثل انتقال به Trash مدیریت نمیکنه و نباید روی دکمه Undo حساب کنی. در محیط تمرین از rm -i برای گرفتن تأیید استفاده کن و روی داده واقعی قبل از حذف، محدوده و نسخه بازیابی رو بررسی کن. استفاده بیفکر از rm -rf مخصوصاً با دسترسی مدیر خطرناکه.
چرا دستور find با ستاره نتیجه اشتباه میده؟
در Bash، ستاره بدون نقلقول ممکنه قبل از رسیدن به find به فهرست نام فایلهای فعلی تبدیل بشه. برای همین الگویی مثل '*.csv' رو در کوتیشن قرار میدیم. ضمن اینکه مسیر شروع جستوجو رو هم باید درست انتخاب کنی؛ find از همون مسیری شروع میکنه که بهش دادی.
دستورهای لینوکس روی اوبونتو و کالی یکی هستن؟
بسیاری از فرمانهای این درس در توزیعهای متداول مبتنی بر GNU مثل Ubuntu و Kali رفتار مشابهی دارن، ولی نسخه ابزار، Shell، برنامههای نصبشده و تنظیمات میتونن تفاوت ایجاد کنن. برای اطمینان از نسخه و گزینههای در دسترس، راهنمای ابزار و خروجی –help رو بررسی کن.
چطور بفهمم فایل کپیشده سالم و برابر با نسخه اصلیه؟
وجود فایل در مقصد بهتنهایی کافی نیست. برای مقایسه دقیق محتوای دو فایل میتونی از cmp استفاده کنی؛ کد خروج صفر معمولاً نشون میده بایتها برابرن. sha256sum هم برای مقایسه هش محتوا مفیده، ولی برابری هش جای اعتماد به منشأ فایل یا آزمون صحت منطقی داده رو نمیگیره.
بعد از دستورات لینوکس چه چیزی یاد بگیرم؟
بعد از مدیریت فایل و پوشه، ساختار فایلسیستم لینوکس، مجوزهای فایل، کاربران و گروهها، مدیریت بستهها و عیبیابی سرویسها مسیرهای مهم بعدی هستن. میتونی از هاب Linux Essentials نابغهها ادامه بدی و اگر آموزش ویدیویی مرحلهبهمرحله میخوای، صفحه پکیج Linux Essentials رو بررسی کنی.