زمانی که صحبت از مدیریت فایل در سرورهای لینوکسی میشود، یکی از پرتکرارترین و در عین حال حساسترین کارها، کپی کردن و جایگزینی فایلهاست. تصور کنید نسخه جدیدی از وبسایت خود را آماده کردهاید و میخواهید آن را روی فایلهای قدیمی قرار دهید؛ آیا باید تکتک فایلها را بررسی کنید؟ دستور cp در لینوکس ابزاری قدرتمند است که اگر قلقهای آن را ندانید، ممکن است یا وقتتان را ساعتها بگیرد یا اطلاعات مهمتان را با یک اوررایت کردن فایل اشتباه، برای همیشه پاک کند.
در این مقاله از بلاگ وبداده، قصد داریم دقیقاً به همین نقطه حساس بپردازیم: چگونه با اطمینان کامل، فایلها را جایگزین کنیم، چگونه سرعت کار را بالا ببریم و چگونه از فاجعه جلوگیری کنیم.
cp (مخفف Copy) یکی از دستورات پایه لینوکس برای تکثیر فایلها و دایرکتوریهاست. قدرت اصلی این دستور در “فلگها” یا سویچهای آن نهفته است که رفتار بازنویسی (Overwrite) را کنترل میکنند.سرور های مجازی وبداده
روی دکمه زیر کلیک کنید
آنچه در این مقاله میخوانید:
دستور cp و مفهوم Overwrite چیست؟
دستور cp (مخفف Copy) یکی از دستورات پایه لینوکس برای کپی فایلها و دایرکتوریهاست. در نگاه اول ساده به نظر میرسد: ساختار دستور CP مانند زیر است.
cp source.txt destination.txt اما زمانی که فایلی با همان نام در مقصد وجود داشته باشد، مفهوم Overwrite یا “بازنویسی” مطرح میشود.
Overwrite به چه معناست؟
Overwrite (بازنویسی) یعنی اطلاعات فایل جدید کاملاً جایگزین اطلاعات فایل قبلی شده و داده قبلی غیرقابل بازگشت خواهد بود.
درک رفتار پیشفرض لینوکس در اینجا حیاتی است. در بسیاری از توزیعهای لینوکس (مثلUbuntu یا CentOS)، دستور cp به صورت پیشفرض “Alias” شده است تا قبل از بازنویسی از شما سوال بپرسد. اما در اسکریپتنویسی یا سرورهای خام، ممکن است اینطور نباشد.
بیایید ساختار کلی و نحوه کار را با یک نمودار ساده ببینیم:
فایل مبدا (Source) دستور cp فایل مقصد (Destination)
+----------------+ +----------+ +---------------------+
| New Data | ───> | Process | ───> | Old Data |
| (v2.0) | | Overwrite| | (Deleted/Lost) |
+----------------+ +----------+ +---------------------+
⬇️
+----------------+
| New Data |
| (Saved) |
+----------------+
چرا به مدیریت بازنویسی فایلها نیاز داریم؟
چرا فقط از دستور ساده استفاده نکنیم؟ چرا باید درگیر سویچ های دستور cp شویم؟ پاسخ در “کنترل” و “زمان” است.
- جلوگیری از خطای انسانی: گاهی اوقات شما نباید فایل کانفیگ سرور (مثل
config.php) را با فایل پیشفرض قالب جایگزین کنید. دانستن سویچهای ممنوعیت کپی، نجاتبخش است. - سرعت در مقیاس بالا: وقتی میخواهید 10,000 فایل را کپی کنید، نمیتوانید 10,000 بار دکمه
Yرا برای تایید فشار دهید. - آپدیتهای هوشمند: گاهی فقط میخواهید فایلهایی که تغییر کردهاند کپی شوند، نه همه فایلها.
پیشنیازهای لازم برای کپی فایلها و فولدرها از طریق ترمینال لینوکس
برای اینکه بتوانید آموزش دستور cp در لینوکس را به صورت عملی دنبال کنید، به موارد زیر نیاز دارید:
- دسترسی به ترمینال لینوکس (SSH).
- دسترسی کاربر (User Permissions) کافی برای خواندن فایل مبدا و نوشتن در مسیر مقصد.
- دانش پایه کار با مسیرها (Absolute و Relative Paths).

آموزش کپی فایلها و فولدرها با دستور CP در لینوکس
قبل از اینکه به سراغ بحثهای پیشرفته Overwrite برویم، بیایید نگاهی به ساختار پایه دستور cp بیندازیم که اصلی ترین روش برای کپی فایل ها در لینوکس است. درک این ساختار به شما کمک میکند تا سویچها را در جای درست استفاده کنید.
ساختار کلی دستور CP:
cp [Option] [Source] [Destination] - [Option]: همان سویچها یا فلگها (مثل
f,-r-) که رفتار دستور را تغییر میدهند. - [Source]: فایل یا فولدر مبدا که میخواهید کپی کنید.
- [Destination]: مسیری که فایل قرار است در آنجا کپی شود.
مثال ساده: برای کپی کردن فایل image.jpg به پوشه backup:
cp image.jpg /home/user/backup/ حالا که با سینتکس اصلی دستور CP آشنا شدیم، بیایید ببینیم هر کدام از سویچهای مهم چه کاری انجام میدهند و چگونه رفتار جایگزینی (Overwrite) را کنترل میکنند.
1-جلوگیری از Overwrite تصادفی فایل در لینوکس با cp -i
اگر مبتدی هستید یا روی فایلهای حساس کار میکنید، همیشه از سویچ i- استفاده کنید. این سویچ باعث میشود سیستم قبل از هر بازنویسی از شما اجازه بگیرد. نحوه اجرای آن در ترمینال لینوکس مانند زیر است:
cp -i source.txt destination/ خروجی دستور بالا به صورت زیر است:
cp: overwrite 'destination/source.txt'? شما باید Y (به معنای بله) یا N (به معنای خیر) را وارد کنید. این امنترین روش برای مدیریت فایل در SSH به منظور جلوگیری از حذف تصادفی است.
2- کپی سریع فایل بدون تایید در لینوکس با دستور cp -f
اینجا دقیقاً جایی است که کاربران حرفهای به آن نیاز دارند. اگر میخواهید بدون هیچ سوالی فایلها را جایگزین کنید، باید هوشمندانه عمل کنید.
⚠️نکته کلیدی اینجاست: در بسیاری از سیستمها، cp به صورت خودکار به cp -i آلیاس (Alias) شده است. بنابراین حتی اگر بزنید cp -f، باز هم سیستم از شما سوال میپرسد!
راه حلهای حرفهای :
برای اینکه واقعاً فایلها را بدون پرسش Overwrite کردن فایل ها در لینوکس انجام دهید، از یکی از روشهای زیر استفاده کنید:
روش اول: Bypass کردن Alias با بکاسلش:
\cp -f source.txt destination/ روش دوم: آدرسدهی کامل :
/bin/cp -f source.txt destination/ روش سوم: تایید خودکار (برای تعداد فایل زیاد ؛ دستور yes | cp):
اگر میخواهید تمام پرسشها را خودکار تایید کنید، از پایپ لاین استفاده کنید:
yes | cp -r source_folder/* destination/ Yes به صورت بینهایت کاراکتر Y تولید میکند و آن را به دستور کپی میفرستد. این سریعترین راه برای کپی اجباری فایل در لینوکس است.3- کپی فایل بدون جایگزینی در لینوکس با دستور cp -n
فرض کنید میخواهید فایلها را کپی کنید، اما اگر فایلی در مقصد وجود داشت، دست نخورده باقی بماند (مثل فایلهای کانفیگ دیتابیس). در این حالت از سویچ n-در دستور CP استفاده میکنیم مانند زیر.
cp -n source.txt destination/ در این حالت، اگر source.txt در مقصد وجود داشته باشد، کپی انجام نمیشود و فایل قدیمی حفظ میشود.
مثال عملی برای این دستور :
# کپی فایلها بدون Overwrite
cp -n /home/user/*.conf /etc/myapp/
# کپی پوشه بدون بازنویسی فایلهای موجود
cp -rn /source_dir/* /destination_dir/ کاربرد کپی فایلها با دستور cp -n:
- کپی فایلهای Template بدون تغییر فایلهای سفارشی.
- بازیابی فایلهای پاکشده بدون تغییر فایلهای موجود.
- مرج کردن دو پوشه بدون از دست رفتن داده.
✅ مزیت: حفظ کامل فایلهای موجود.
❌ معایب: فایلهای جدیدتر کپی نمیشوند.
4- آپدیت فایلهای قدیمی در لینوکس با دستور cp -u بدون کپی تکراری
این یکی از جذابترین قابلیتهای دستور cp است. با سویچ u (Update)-، عملیات کپی فقط زمانی انجام میشود که:
- فایل در مقصد وجود نداشته باشد.
- یا فایل مبدا جدیدتر (از نظر زمان تغییر) از فایل مقصد باشد.
cp -u source.txt destination/ مثال عملی استفاده از دستور cp -u :
# سینک کردن فایلها (فقط موارد جدید)
cp -u /var/www/html/*.php /backup/
# آپدیت پوشه با فایلهای جدیدتر
cp -ru /source_folder/ /destination_folder/ ✅ مزیت: صرفهجویی زمان و فضای دیسک
✅ کاربرد: سینک دستی، آپدیت سریع
5- کپی کامل دایرکتوری و فایلهای داخل آن در لینوکس با cp -r
تا اینجا در مورد فایل صحبت کردیم. اما برای کپی دایرکتوری (فولدرهای تو در تو)، حتماً باید از سویچ r- یا R -(Recursive) استفاده کنید.
نحوه استفاده از دستور cp -r:
cp -r source_folder/ destination_folder/ ترکیب این دستور با سایر سویچها بسیار کاربردی است. مانند مثالهای زیر:
# کپی بازگشتی + اجباری
\cp -rf /var/www/html/ /backup/
# کپی بازگشتی + فقط جدیدها
cp -ru /var/www/html/ /backup/
# کپی بازگشتی + تعاملی
cp -ri /source/ /destination/
# کپی بازگشتی + بدون Overwrite
cp -rn /source/ /destination/ 📌نکته مهم: به تفاوت دو دستور زیر دقت داشته باشید.
# تفاوت این دو دستور:
# 1. کپی کل پوشه به داخل مقصد
cp -r /source /destination
# نتیجه: /destination/source/
# 2. کپی محتویات پوشه
cp -r /source/* /destination/
# نتیجه: /destination/ (محتویات مستقیم) سناریوی عملی: آپدیت پچ امنیتی وردپرس
بیایید یک مثال واقعی را بررسی کنیم. فرض کنید نیاز دارید پچ امنیتی را روی 500 فایل وردپرس اعمال کنید، اما نباید:
- پوشه
uploads(تصاویر کاربران) دست نخورده بماند. - فایل
wp-config.phpتغییر کند.
اگر کاربر از دستور ساده cp -r استفاده میکرد، احتمال داشت فایل کانفیگ را بازنویسی کند و سایت از دسترس خارج شود.
روش صحیح اجرا:
ما از ترکیب سویچها استفاده می کنیم:
# کپی بازگشتی + فقط جدیدتر + حذف فایلهای خاص
cp -ru wordpress_patch/* /var/www/html/ \
--exclude='wp-config.php' \
--exclude='wp-content/uploads' این دستور:
- به صورت بازگشتی (
r-) تمام پوشهها را گشت. - فقط فایلهای جدیدتر پچ را جایگزین کرد (
u-). - فایل حیاتی کانفیگ را نادیده گرفت.
یا کپی فایلها و فولدرها با استفاده دستور rsync :
rsync -av --update \
--exclude='wp-config.php' \
--exclude='wp-content/uploads/' \
wordpress_patch/ /var/www/html/ نتیجه:
✅ فقط فایلهای جدیدتر پچ کپی می شوند.
✅ فایل کانفیگ دست نخورده می ماند.
✅ تصاویر کاربران حفظ می شوند.
جدول مقایسه عملکرد سویچهای دستور CP در لینوکس
برای جمعبندی سریع، جدول زیر تفاوت رفتار سویچهای مختلف دستور CP را در هنگام مواجهه با فایل تکراری نشان میدهد:
| سویچ (Option) | رفتار در قبال فایل تکراری (Conflict) | کاربرد اصلی |
| بدون سویچ | معمولاً جایگزین میکند (مگر اینکه alias شده باشد) | کپی ساده |
i- | سوال میپرسد (Interactive) | جلوگیری از خطای انسانی |
f- | به زور جایگزین میکند (Force) | اسکریپتها و جایگزینی قطعی |
n- | اصلاً جایگزین نمیکند (No Clobber) | حفظ فایلهای قدیمی |
u- | فقط اگر مبدا جدیدتر باشد جایگزین میکند | آپدیت و سینک کردن |
r- | وارد فولدرها میشود | کپی دایرکتوری در لینوکس |
ترکیبهای پرکاربرد دستور cp در لینوکس :
cp -ri # کپی بازگشتی + تعاملی (امن)
cp -rf # کپی بازگشتی + اجباری (سریع)
cp -ru # کپی بازگشتی + فقط جدیدها (هوشمند)
cp -rn # کپی بازگشتی + بدون Overwrite (محافظ)
نتیجهگیری؛ مدیریت دستور cp در لینوکس
در این مقاله آموختیم که دستور cp در لینوکس فراتر از یک کپی پیست ساده است. ما یاد گرفتیم چگونه با استفاده از i- محتاط باشیم، با f- قاطعانه عمل کنیم و با -u هوشمندانه فایلها را مدیریت کنیم. تسلط بر مفهوم Overwrite، مرز بین یک کاربر مبتدی و یک ادمین حرفهای سرور است.
فراموش نکنید که در محیط ترمینال، قدرت زیاد مسئولیت زیاد میآورد! همیشه قبل از اجرای دستورات سنگین کپی با سویچهای Force، یکبار دستور را چک کنید.
امیدواریم این مقاله از بلاگ وبداده برای شما مفید بوده باشد. اگر هنوز در مورد جایگزینی فایل در لینوکس یا اوررایت کردن فایل سوالی دارید یا تجربهای از حذف ناخواسته فایلها دارید، در بخش دیدگاه با ما به اشتراک بگذارید.
💡 خلاصه سریع دستور CP در لینوکس:
cp -i: کپی با سوال (ایمن)cp -f\: کپی بدون سوال و تاییدیهcp -u: کپی فقط فایلهای جدیدتر (هوشمند)cp -r: کپی فولدرها
سوالات متداول درباره دستور CP در لینوکس
چگونه فایل و فولدرها را بدون تایید از طریق ترمینال لینوکس کپی کنیم؟
برای این کار میتوانید از دستور cp -f\ استفاده کنید (بکاسلش اول مهم است تا آلیاسها را دور بزند) یا اگر تعداد فایلها زیاد است از دستور yes | cp -r source dest استفاده نمایید.





