ساختن، کپی، جابهجایی و حذف فایلها
در این درس ۲ بخش
فرض کنید برای یادداشتهای دوره یک پوشهٔ کاری میخواهید: نسخهٔ اصلی برنامه در یک بخش بماند، یک کپی در بایگانی قرار بگیرد و نام یک یادداشت خالی اصلاح شود. این سناریو چهار کار روزمرهٔ مدیریت فایل را کنار هم میگذارد. در پایان درس باید پیش از اجرای هر فرمان بتوانید مبدأ، مقصد و اثر آن روی نسخهٔ اصلی را توضیح دهید. محیط مثالها Debian یا Ubuntu با پوستهٔ Bash است؛ همهٔ فایلها ساختگیاند و به اطلاعات واقعی شما ارتباطی ندارند.
ابتدا آزمایشگاهی تازه در پوشهٔ خانگی بسازید. mktemp با گزینهٔ -d یک پوشهٔ یکتا ایجاد میکند و جای شش X را با نویسههای تصادفی عوض میکند. خط اول مسیر حاصل را در متغیر lab نگه میدارد و خط دوم وارد همان پوشه میشود. این دو خط را در همین ترمینال و به همین ترتیب اجرا کنید؛ اگر ساخت پوشه یا ورود به آن خطا داد، ادامه ندهید. خروجی pwd باید مسیری در خانهٔ خودتان با پیشوند darsavand-files باشد؛ قسمت تصادفی برای هر نفر فرق میکند.
lab=$(mktemp -d "$HOME/darsavand-files.XXXXXX")
cd "$lab"
pwdفرمان mkdir پوشه میسازد. در این مثال notes برای یادداشتها و archive برای بایگانی است. touch اگر فایل وجود نداشته باشد، فایلی خالی میسازد؛ اگر وجود داشته باشد، محتوایش را پاک نمیکند و زمانهای آن را بهروزرسانی میکند. برای داشتن نمونهای قابل خواندن، printf دو خط متن در plan.txt مینویسد. علامت > در درس لوله و هدایت خروجی بررسی میشود؛ فعلاً فقط برای همین فایل تازه استفادهاش کنید. پس از اجرای ls باید دو نام plan.txt و todo.txt را ببینید.
mkdir notes archive
touch notes/todo.txt
printf '%s\n' 'Linux practice' 'Read one lesson' > notes/plan.txt
ls -1 notesساختار cp به ترتیب «مبدأ، مقصد» است. دستور اول یک نسخهٔ مستقل از برنامه در بایگانی میسازد و نسخهٔ notes/plan.txt را نگه میدارد. در مقابل، mv نام یا جای فایل را عوض میکند؛ پس از تغییر نام todo.txt، نام قبلی دیگر وجود ندارد. گزینهٔ -i هنگام جایگزینی یک مقصد موجود سؤال میپرسد؛ برای فایلهای تازهٔ این مثال نباید سؤالی ببینید. علامت -- پایان گزینههاست و جلوی اشتباه گرفتن نام فایل با گزینه را میگیرد.
cp -i -- notes/plan.txt archive/plan-copy.txt
mv -i -- notes/todo.txt notes/checklist.txt
mv -i -- archive/plan-copy.txt archive/plan-saved.txt
ls -1 archive
ls -1 notesخروجی فرمان فهرست اول فقط plan-saved.txt است؛ فهرست دوم checklist.txt و plan.txt را نشان میدهد. اکنون دو نسخه از برنامه دارید، اما فقط یک نام برای یادداشت خالی دارید. تغییر دادن نسخهٔ کپی، نسخهٔ اصلی را تغییر نمیدهد. اگر مقصد را پوشهای موجود بنویسید، مانند cp notes/plan.txt archive/، فایل با نام خودش در آن پوشه قرار میگیرد. پیش از اجرا مشخص کنید مقصد قرار است نام جدید باشد یا یک پوشه؛ این تفاوت کوچک از اشتباههای رایج جلوگیری میکند.
خروجی مورد انتظار دو فرمان فهرست بالا به این شکل است؛ این کادر را اجرا نکنید:
# archive
plan-saved.txt
# notes
checklist.txt
plan.txtحذف را فقط روی یادداشت خالی همین آزمایشگاه تمرین میکنیم. هدف دقیق این بخش فایل checklist.txt داخل notes در پوشهای است که pwd نشان میدهد. نخست مسیر و خود فایل را ببینید. سپس rm با -i دربارهٔ حذف همان فایل سؤال میکند؛ فقط اگر نام هدف درست بود، پاسخ مثبت بدهید؛ در محیط انگلیسی معمولاً y است. rm معمولاً فایل را به سطل زباله نمیبرد و بازگردانی سادهای ندارد. اگر فایل دیگری نمایش داده شد یا مسیر را نمیشناسید، پاسخ منفی بدهید و متوقف شوید.
pwd
ls -l -- ./notes/checklist.txt
rm -i -- ./notes/checklist.txt
ls -1 notesپس از تأیید حذف، فهرست notes باید فقط plan.txt باشد. نداشتن پیام موفقیت در mkdir، cp، mv یا rm معمول است؛ با فهرست گرفتن نتیجه را بررسی کنید. بزرگی و کوچکی حروف در نامها مهم است: Notes با notes یکی نیست. فاصله هم مرز آرگومانهاست؛ برای نامی مانند "week one.txt" از گیومهٔ انگلیسی استفاده کنید. فعلاً نامهای ساده انتخاب کنید و نام مقصد را کامل بخوانید. در این تمرین هیچ حذف گروهی، حذف پوشهٔ پر یا دستکاری مسیرهای سیستمی لازم نیست.
تمرین: یک برگه برای مرور
بدون نگاه کردن به پاسخ، در notes فایلی خالی به نام review.txt بسازید، از آن نسخهای با نام review-backup.txt در archive بگیرید و سپس فقط نسخهٔ اصلی را به review-ready.txt تغییر نام دهید. چیزی را حذف نکنید. پیشبینی کنید در هر پوشه چه نامهایی خواهید دید. برای بررسی یادگیری، دلیل انتخاب cp و mv را با صدای بلند بگویید؛ حفظ کردن ترتیب واژهها کافی نیست، باید بدانید کدام مرحله نسخهٔ اضافی میسازد و کدام مرحله فقط نام را عوض میکند.
touch notes/review.txt
cp -i -- notes/review.txt archive/review-backup.txt
mv -i -- notes/review.txt notes/review-ready.txt
ls -1 notes
ls -1 archiveپاسخ توضیحدار: touch برگهٔ خالی را ایجاد میکند، cp نسخهٔ دوم را نگه میدارد و mv نام نسخهٔ اول را تغییر میدهد. در notes باید plan.txt و review-ready.txt باشند؛ در archive نیز plan-saved.txt و review-backup.txt را میبینید. نبودن review.txt طبیعی است، چون تغییر نام داده شده است. اگر آن را هنوز میبینید، خروجی خطای mv را بخوانید و وجود مقصد را بررسی کنید. نتیجهٔ درس این است که بتوانید پیش از هر تغییر، هدف را تعیین کنید و بعد با مشاهدهٔ فایلها نتیجه را بسنجید.
منابع رسمی و مطالعهٔ تکمیلی
https://manpages.ubuntu.com/manpages/focal/man1/mktemp.1.html
https://www.gnu.org/s/coreutils/manual/html_node/mkdir-invocation.html
https://www.gnu.org/s/coreutils/manual/html_node/touch-invocation.html
https://www.gnu.org/s/coreutils/manual/html_node/cp-invocation.html
https://www.gnu.org/s/coreutils/manual/html_node/mv-invocation.html
https://www.gnu.org/s/coreutils/manual/html_node/rm-invocation.html
تألیف و مثالهای اختصاصی: تحریریه درسآوند. منابع انگلیسی برای بررسی مفاهیم و مطالعهٔ تکمیلی معرفی شدهاند.
متن درسهای عمومی را بدون ورود بخوانید.