آموزش کامل کپی کردن فایل در لینوکس (با دستورهای cp، rsync و scp)

آموزش کامل کپی کردن فایل در لینوکس (با دستورهای cp، rsync و scp)
آموزش کامل کپی کردن فایل در لینوکس (با دستورهای cp، rsync و scp)
آخرین بروزرسانی: ۱۲ آذر ۱۴۰۴

کپی کردن فایل در لینوکس برای جابجایی ساده داده‌ها در سیستم شخصی و انتقال فایل بین سرورها یکی از نیازهای همیشگی کاربران است. ابزارهای متنوعی مانند cp، rsync و scp این کار را با روش‌ها و امکانات متفاوت انجام می‌دهند و هر کدام برای سناریوهای خاصی مناسب‌تر هستند.

در این مقاله، با زبانی ساده و کاربردی به سراغ آموزش کامل این سه دستور می‌رویم تا بتوانید هم در محیط‌های محلی و هم در ارتباطات راه دور، فایل‌های خود را با سرعت، دقت و امنیت بیشتری مدیریت کنید.

دستور cp در لینوکس

کپی کردن فایل در لینوکس چیست و چه روش‌هایی دارد؟

کپی کردن فایل در لینوکس، به معنای ايجاد يک نسخه جديد از يک فايل يا پوشه و قرار دادن آن در محل دلخواه است. اين کار معمولا براي جابجایی داده‌ها، تهيه نسخه پشتيبان، انتقال اطلاعات بين مسيرهای مختلف سيستم و حتی فرستادن فايل به يک سرور ديگر انجام می‌شود.

در لينوکس، ابزارهای مختلفی برای این کار وجود دارد، دستور cp براي کپی‌های ساده و سريع در فضای محلي به کار می‌رود، rsync براي کپی‌های هوشمند و مرحله‌ای که تغييرات را تشخيص می‌دهد استفاده می‌شود و scp برای انتقال امن فايل از طريق SSH به سیستم‌های ديگر کاربرد دارد.

برای مطالعه بیشتر کلیک کنید:

لینوکس چیست؟ آشنایی با سیستم عامل لینوکس

کپی در سطح لوکال

کپی در سطح لوکال به عملیات انتقال یا تکرار فایل‌ها و پوشه‌ها در همان سیستم لینوکسی گفته می‌شود، یعنی منبع و مقصد، هر دو روی یک کامپیوتر یا سرور قرار دارند.

در این نوع کپی، معمولا از ابزارهایی مثل cp و rsync استفاده می‌شود، زیرا سرعت بالا، دسترسی مستقیم به دیسک و عدم نیاز به پروتکل‌های شبکه‌ای از مزایای آن است. این روش، برای جابه‌جایی سریع فایل‌ها بین دایرکتوری‌ها، تهیه نسخه پشتیبان محلی و سازمان‌دهی ساختارهای فایل بسیار کاربردی می‌باشد.

کپی از راه دور (Remote Copy)

کپی از راه دور، زمانی انجام می‌شود که فایل باید از یک سیستم لینوکسی به سیستم دیگری منتقل شود، یا برعکس آن اتفاق بیفتد. این انتقال، معمولا از طریق SSH یا سایر پروتکل‌های امن انجام می‌شود تا فایل‌ها هنگام جابه‌جایی در شبکه محافظت گردند.

ابزارهایی مانند scp و rsync (در حالت remote) امکان انتقال امن، سریع و قابل اعتماد را فراهم می‌کنند و برای مدیریت VPS ها و سرورها، بسیار کاربرد دارند.

معرفی cp و rsync و scp

در ادامه سه دستور cp و rsync و scp را معرفی می‌کنیم:

  1. cp: دستور cp ساده‌ترين و مستقيم‌ترين ابزار برای کپی فولدر در لینوکس و دايرکتوری‌ها در محيط محلی است و بدون نياز به هيچ‌گونه تنظيمات پيچيده، با سرعت بالا، عمليات انتقال را انجام می‌دهد.
  2. rsync: دستور rsync يک ابزار هوشمند برای همگام‌سازی و کپی افزايشی است که تنها تغييرات ايجاد شده در فايل‌ها را منتقل می‌کند و به همين دليل برای بکاپ‌گيری، انتقال‌های مرحله‌ای و استفاده در محيط‌های حرفه‌ای بهترين گزينه محسوب می‌شود.
  3. scp: دستور scp ابزاری امن برای انتقال فايل از طريق SSH است و با رمزنگاری کامل داده‌ها، مناسب‌ترين انتخاب برای ارسال يا دريافت فايل ميان دو سرور با سطح بالای امنيت به شمار می‌آيد.

دستور cp در لینوکس: پایه‌ای‌ترین روش کپی فایل

دستور cp در لینوکس چیست؟ دستور cp در لینوکس، ساده‌ترین و پایه‌ای‌ترین ابزار برای کپی کردن فایل‌ها و پوشه‌ها در سطح محلی است و تقریبا در تمام توزیع‌ها به‌ صورت پیش‌فرض وجود دارد.

این دستور بدون نیاز به تنظیمات پیچیده، امکان ایجاد نسخه‌ای جدید از فایل یا دایرکتوری را فراهم می‌کند و برای کارهای روزمره مانند جابه‌جایی، پشتیبان‌گیری سریع و سازمان‌دهی داده‌ها بسیار کاربردی است. به همین دلیل، cp معمولا اولین انتخاب کاربران از مبتدی تا حرفه‌ای برای کپی کردن فایل و فولدر در لینوکس است.

نحوه استفاده از دستور cp

برای استفاده از دستور cp کافی است نام فایل مبدا و مقصد را مشخص کنید. در ساده‌ترین حالت، دستور cp file1.txt file2.txt یک نسخه برابر از فایل file1.txt ایجاد کرده و آن را با نام file2.txt در همان مسیر ذخیره می‌نماید.

در صورت عدم وجود فایل مقصد، ساخته می‌شود و اگر وجود داشته باشد، بدون هشدار بازنویسی خواهد شد، مگر اینکه از گزینه‌هایی مثل -i برای پرسیدن تایید استفاده کنید. این روش پایه‌ای‌ترین دستور کپی کردن فایل در لینوکس است و برای کارهای روزمره بسیار کاربرد دارد.

cp file1.txt file2.txt

کپی کردن چند فایل

برای کپی چند فایل به صورت هم‌زمان، کافی است چند نام فایل را پشت سر هم بنویسید و در پایان، مسیر مقصد را مشخص کنید. نمونه کد کپی کردن فایل در لینوکس cp file1.txt file2.txt file3.log /path/ باعث می‌شود هر سه فایل به دایرکتوری مقصد منتقل و نسخه جدیدی از آن‌ها در آن مسیر ساخته شود.

نکته مهم این است که مقصد باید یک پوشه باشد و قبل از اجرای دستور وجود داشته باشد، در غیر این صورت، خطا دریافت خواهید کرد. این روش زمانی کاربرد دارد که بخواهید مجموعه‌ای از فایل‌ها را بدون استفاده از wildcardها کپی کنید.

cp file1.txt file2.txt file3.log /path/

کپی در مسیرهای مختلف

دستور cp به شما اجازه می‌دهد فایل‌ها را بین هر دو مسیری که در سیستم وجود دارد ( چه دو دایرکتوری در یک پارتیشن باشند و چه روی دو دیسک مجزا) جابه‌جا کنید. برای مثال، cp file.txt /var/www/ فایل را از مسیر فعلی برداشته و نسخه‌ای از آن را در مسیر جدید قرار می‌دهد.

کپی با حفظ دسترسی‌ها و Permission ها

اگر می‌خواهید یک فایل را همراه با Permission ها، مالکیت (owner و group) و timestamps اصلی کپی کنید، گزینه -p بهترین انتخاب است. برای نمونه، دستور cp -p file.txt /path/ فایل را با تمام ویژگی‌های امنیتی و متادیتای اصلی منتقل می‌کند.

این روش، زمانی بسیار مهم است که با فایل‌های سیستمی، کانفیگ‌های حساس یا بکاپ‌هایی سروکار دارید که تغییر مجوزها می‌تواند عملکرد سرویس‌ها را مختل کند.

کپی بازگشتی (کپی فولدر)

برای کپی کردن یک پوشه به همراه تمام زیرپوشه‌ها و فایل‌های داخل آن، باید از گزینه -r (یا --recursive) استفاده کنید. مثلا دستور cp -r folder/ /path/ کل محتویات فولدر را به مقصد مورد نظر منتقل می‌نماید.

این کد کپی کردن فایل در لینوکس برای انتقال ساختارهای پیچیده، پروژه‌ها، بکاپ گرفتن محلی و جابه‌جایی دایرکتوری‌های بزرگ کاربرد دارد. بدون استفاده از -r، دستور cp خطا می‌دهد، بنابراین این پارامتر برای کپی دایرکتوری‌ها الزامی است.

پارامترهای دستور cp در لینوکس

دستور cp علاوه بر عملکرد پایه‌ای خود، مجموعه‌ای از پارامترهای کاربردی ارائه می‌دهد که با کمک آن‌ها می‌توانید کنترل بیشتری روی فرآیند کپی داشته باشید.

این پارامترها امکان کپی بازگشتی، حفظ مجوزهای فایل، نمایش عملیات در زمان اجرا و حتی جلوگیری از بازنویسی ناخواسته را فراهم می‌کنند. شناخت این گزینه‌ها، به شما کمک کرده تا هنگام کار با فایل‌ها در لینوکس، دقیق‌تر، حرفه‌ای‌تر و ایمن‌تر عمل نمایید.

r- برای کپی فولدر

پارامتر -r یا --recursive زمانی استفاده می‌شود که قصد دارید یک فولدر را همراه با تمام فایل‌ها و زیرپوشه‌های داخل آن کپی کنید. بدون استفاده از -r، دستور cp توانایی کپی دایرکتوری را ندارد و خطا خواهد داد.

این پارامتر برای انتقال پروژه‌ها، بکاپ دایرکتوری‌ها یا جابه‌جایی ساختارهای پیچیده بسیار ضروری است و باعث می‌شود کل محتوا به همان شکل در مسیر جدید تکرار گردد.

i- جلوگیری از overwrite

پارامتر -i یا --interactive از بازنویسی ناخواسته فایل‌های مقصد جلوگیری می‌نماید. زمانی که فایل همنام در مقصد وجود داشته باشد، cp از شما تایید می‌گیرد و بدون اجازه، فایل را جایگزین نمی‌کند. این گزینه برای جلوگیری از اشتباهات پرهزینه، مخصوصا هنگام کار با فایل‌های مهم یا سیستمی، بسیار مفید است و یک لایه ایمنی اضافه فراهم می‌کند.

v- نمایش عملیات

پارامتر -v یا --verbose باعث می‌شود cp هنگام اجرا، جزئیات عملیات را در خروجی نمایش دهد. در این حالت، مشخص می‌شود هر فایل از کجا به کجا کپی شده و چه عملیاتی انجام شده است. این گزینه برای عیب‌یابی، بررسی صحت عملیات یا زمانی که مقدار زیادی فایل کپی می‌کنید کاربردی است و دید روشن‌تری از روند کار ارائه می‌دهد.

a- کپی آرشیوی (حفظ تمام مشخصات)

پارامتر -a یا --archive یک نسخه کامل از فایل یا فولدر ایجاد می‌کند. این گزینه ترکیبی از -r، -p و چند پارامتر دیگر است و علاوه بر کپی بازگشتی، مالکیت، مجوزها، زمان‌ها، لینک‌ها و ساختار اصلی فایل‌ها را نیز حفظ می‌نماید. استفاده از -a بهترین روش برای بکاپ حرفه‌ای یا جابه‌جایی داده‌هایی است که ساختار آن‌ها اهمیت بالایی دارد.

-f Force پارامتر

پارامتر -f یا --force به cp اجازه می‌دهد فایل مقصد را حتی اگر محافظت شده باشد یا مشکلی در دسترسی وجود داشته باشد، بازنویسی کند. این دستور کپی در لینوکس، ابتدا فایل مقصد را حذف کرده و سپس نسخه جدید را جایگزین می‌کند. استفاده از -f باید با احتیاط انجام شود، زیرا بدون هیچ هشدار یا توقفی فایل‌ها را بازنویسی کرده و ممکن است باعث از دست رفتن داده شود.

کپی کردن فایل با rsync

کپی کردن فایل با rsync (بهترین روش برای سرورها)

کپی کردن فایل با rsync یکی از معتبرترین و کارآمدترین روش‌ها برای انتقال امن و مرحله‌ای داده‌ها در محیط‌های سروری محسوب می‌شود. این ابزار با مقایسه‌ هوشمندانه فایل‌ها تنها تغییرات جدید را منتقل می‌کند و بنابراین سرعت بالاتر، مصرف پهنای‌ باند کمتر و پایداری بیشتری را فراهم می‌سازد.

rsync در سناریوهای مختلف، از جمله انتقال میان دو سرور، دریافت اطلاعات از سرور روی سیستم محلی یا ارسال داده از سیستم محلی به مقصد راه‌دور، عملکردی قابل ‌اعتماد ارائه می‌دهد و در مدیریت سرورهای لینوکسی یک گزینه استاندارد و حرفه‌ای شناخته می‌شود.

استفاده از دستور در حالت عادی (از روی سیستم محلی):

rsync -chavzP --stats user@remote.host:/path/to/copy /path/to/local/storage

استفاده از rsync با پورت غیر استاندارد SSH

rsync -chavzP -e “ssh -p $portNumber” user@remote.host:/path/to/copy /local/path

اجرای دستور از روی سرور راه‌دور (درصورتی‌که سیستم محلی شما امکان دسترسی SSH داشته باشد):

rsync -chavzP --stats /path/to/copy user@host.remoted.from:/path/to/local/storage

انتقال فایل بین دو سرور با scp (Secure Copy)

در انتقال فایل‌ میان سرورها، scp یکی از ابزارهای ساده و کاملا امن است که با تکیه بر پروتکل SSH امکان جابه‌جایی سریع و رمزنگاری‌شده داده را فراهم می‌کند. این دستور برای مدیران سرور، برنامه‌نویسان و تمام کسانی که با VPS کار می‌نمایند، یک روش مطمئن برای ارسال یا دریافت فایل محسوب می‌شود.

معرفی scp و امنیت با SSH

دستور scp یا Secure Copy ابزاری برای انتقال امن فایل میان دو سیستم است و تمام داده‌ها را از طریق SSH رمزنگاری می‌کند. این ویژگی، باعث شده که اطلاعات هنگام عبور از شبکه در برابر حملات، سرقت یا دستکاری محافظت شوند. سادگی استفاده، سرعت بالا و پشتیبانی از کلیدهای SSH باعث شده است scp به یک روش استاندارد برای جابه‌جایی فایل در دنیای لینوکس تبدیل گردد.

نحوه ارسال فایل به سرور

برای ارسال یک فایل از سیستم محلی به سرور مجازی لینوکس، کافی است فایل مبدا و مسیر مقصد را همراه با نام کاربری و آدرس سرور مشخص کنید. اجرای دستور زیر باعث می‌شود فایل file.txt با اتصال امن SSH به سرور منتقل گردد. اگر مسیر مقصد در سرور وجود داشته باشد، فایل در همان مکان ذخیره می‌شود و در غیر این صورت، عملیات با خطا مواجه خواهد شد.

scp file.txt user@server:/path/

دریافت فایل از سرور

برای دریافت فایل از سرور و ذخیره آن در سیستم محلی، باید مسیر دقیق فایل روی سرور را مشخص کنید. دستور زیر فایل را از سرور دریافت و در دایرکتوری فعلی ذخیره می‌نماید. استفاده از نقطه، به‌ معنای مقصد فعلی است و انتقال با همان سطح امنیتی SSH انجام می‌شود.

scp user@server:/path/file.txt.

ارسال فولدر

برای انتقال یک فولدر کامل همراه با تمام زیرشاخه‌ها و فایل‌های آن باید از گزینه -r استفاده شود. اجرای دستور زیر باعث شده کل فولدر به ‌صورت بازگشتی و با رمزنگاری SSH به سرور منتقل گردد. این روش برای جابه‌جایی پروژه‌ها، بکاپ‌های محلی و ساختارهای بزرگ بسیار کاربردی است.

scp -r folder/ user@server:/path/

مقایسه cp،rsync و scp — کدام مناسب‌تر است؟

در جدول زیر ابزارهای کپی و انتقال فایل در لینوکس را مقایسه خواهیم کرد.

ابزار

کاربرد اصلی

سرعت

امنیت

مناسب برای

cp

کپی فایل و پوشه در همان سیستم

خوب

بدون رمزنگاری

کارهای محلی و ساده

rsync

همگام سازی و انتقال افزایشی

عالی

امکان رمزنگاری از طریق SSH

پشتیبان گیری، انتقال‌های حجیم، مدیریت سرور

scp

انتقال فایل بین دو سرور

متوسط

رمزنگاری کامل SSH

جابه‌جایی مستقیم و امن بین دستگاه‌ها

نکات امنیتی و حرفه‌ای هنگام کپی فایل‌ها در لینوکس

در زمان کپی کردن فايل‌ها در Linux، رعايت نکات امنيتی و اصول حرفه‌ای نقش بسيار تعيين کننده‌ای در جلوگيری از بروز خطا، از دست رفتن داده‌ها و ايجاد اختلال در سرويس‌ها دارد.

با به ‌کارگيری روش‌های صحيح، می‌توان فرآيند کپی فایل با ترمینال لینوکس را با دقت، امنيت و اطمينان بيشتر انجام داد. موارد زير از مهم‌ترين اصولی هستند که در مديريت سرورها، به ويژه در محيط‌های سازمانی و ارائه دهندگان خدمات میزبانی، توصيه می‌شوند.

حفظ پرميشن‌ها و Owner

در عمليات کپی فايل، حفظ مجوزها، مالکيت و زمان‌های مربوط به فايل اهميت زيادي دارد، زيرا تغيير در اين موارد می‌تواند موجب بروز خطا در اجرای سرويس‌ها و اسکریپت‌ها شود. برای جلوگیری از تغییر ناخواسته اين ويژگی‌ها، می‌توان از دستور cp همراه با سوييچ -p استفاده کرد:

cp -p file.txt /path/

درصورتی‌که ساختار يک فولدر به همراه تمام ويژگی‌های اصيل آن بايد بدون تغيير منتقل شود، استفاده از حالت آرشيوی توصيه می‌گردد:

cp -a folder/ /path/

اين روش، مالکيت، مجوزها و ساختار کامل فايل‌ها را دقيقا مشابه نسخه اصلی حفظ می‌کند.

جلوگیری از overwrite اشتباهی

بازنویسی ناخواسته فايل‌های موجود در مقصد، یکی از رايج‌ترين خطاهايی است که می‌تواند به از دست رفتن داده‌های مهم منجر گردد. برای پیشگیری از اين وضعيت، استفاده از حالت تعاملی cp توصيه می‌شود:

cp -i file.txt /path/

در اين حالت، اگر فایلی با همان نام در مقصد وجود داشته باشد، دستور قبل از بازنويسی از کاربر تاييد می‌خواهد. همچنين به‌ کارگيری پارامتر -v باعث می‌شود فرآيند کپی به صورت شفاف، نمايش داده شود و کنترل بیشتری بر عمليات ايجاد گردد.

استفاده از rsync برای دیتاهای حجیم

در مواقعی که حجم داده‌ها زياد است يا نياز به انتقال ساختارهای بزرگ و چند گيگابايتی وجود دارد، استفاده از cp توصيه نمی‌شود. rsync به دليل قابليت انتقال افزايشی، تنها تغييرات را منتقل می‌کند و به همين دليل سرعت، بهره‌وری پهنای باند و اطمينان بالاتری فراهم می‌سازد. برای کپی محلی می‌توان از دستور زير بهره برد:

rsync -chavzP /source/ /dest/

اگر انتقال از طريق SSH انجام شود، امنيت کامل داده‌ها نيز تضمين خواهد شد. rsync در محيط‌های سروری يک ابزار استاندارد و حرفه‌ای برای جابجایی و همگام سازی داده‌های حجيم محسوب می‌شود.

جمع‌بندی

به‌طورکلی، کپی کردن فایل در لینوکس با ابزارهای cp، rsync و scp يک مجموعه کامل از روش‌های ساده، بهينه و امن را در اختيار کاربر قرار می‌دهد. به‌طوری‌که cp برای کپی‌های سريع و محلی، rsync برای جابجایی و همگام‌سازی حرفه‌ای داده‌های حجيم و scp برای انتقال امن اطلاعات ميان دو سرور مورد استفاده قرار می‌گيرد.

پارامترهای دستور cp در لینوکس

انتخاب ابزار مناسب به نوع نياز، حجم داده، حساسيت اطلاعات و محيط اجرا بستگی دارد، اما ترکيب اين سه ابزار امکان مديريت دقيق، امن و قابل اعتماد فايل‌ها را در هر سناريو فراهم می‌کند. این مجموعه از دستورات، هسته اصلی مديريت فايل در محيط‌های سروری و سيستم‌های مبتنی بر لینوکس را شکل می‌دهند و شناخت صحيح آن‌ها به هر کاربر يا مدير سيستم کمک می‌نماید عمليات خود را با کارایی و اطمينان بيشتر انجام دهد.

سوالات متداول

کدام دستور برای کپی‌کردن فایل در Linux  استفاده می‌شود؟

در لینوکس یکی از معمول‌ترین کارها کپی‌کردن فایل است که با استفاده از دستور cp انجام می‌شود.

کدام دستورها برای ایجاد فایل در لینوکس به کار برده می‌شود؟

Redirect (<)، cat و tuch دستوراتی هستند که برای ایجاد فایل مورداستفاده قرار می‌گیرند و هر کدام اهمیت خاصی دارند.

کدام دستور برای حذف فایل در دایرکتوری استفاده می‌شود؟

برای حذف فایل از دستور rm و از دستور rmdir برای حذف دایرکتوری‌های Linux استفاده می‌شوند.

برای ویرایش فایل از کدام دستورات باید استفاده کرد؟

دستورات nano  و gedit دو دستور برای ویرایش‌کردن فایل در لینوکس هستند.

برای کپی کردن یک پوشه به همراه زیرشاخه‌ها در لینوکس از چه دستوری استفاده می‌شود؟

برای انتقال کامل یک پوشه و تمام محتویات آن باید از گزینه ‎-r‎ در دستور cp استفاده شود. در صورت نیاز به حفظ دقیق مجوزها و مالکیت، استفاده از ‎-a‎ توصیه می‌شود.

تفاوت اصلی rsync با cp در چیست؟

cp همیشه نسخه کامل فایل یا فولدر را کپی می‌کند، اما rsync فقط تغییرات را منتقل می‌نماید. این ویژگی در جابجایی داده‌های حجیم، بکاپ‌گیری و همگام‌سازی سرورها باعث سرعت بیشتر و کاهش مصرف پهنای باند می‌شود.

آیا انتقال فایل با scp امن است؟

بله، scp همه داده‌ها را از طریق SSH رمزنگاری می‌کند و امنیت کامل در برابر شنود و دستکاری فراهم است.

چگونه از بازنویسی اشتباهی فایل‌ها هنگام کپی جلوگیری کنیم؟

با استفاده از گزینه ‎-i‎ در دستور cp، سیستم قبل از بازنویسی فایل موجود از شما تایید می‌گیرد. این روش برای جلوگیری از Overwrite ناخواسته بسیار موثر است.

بهترین روش برای انتقال فایل‌های بزرگ یا پروژه‌های چند گیگابایتی چیست؟

rsync بهترین گزینه است، زیرا توانایی ادامه انتقال در صورت قطع ارتباط و انتقال افزایشی دارد.

author
فرزانه یوسفی- نویسنده

من فرزانه یوسفی هستم؛ نویسنده و تولیدکننده محتوای وب. علاقه زیادی به تحقیق و نوشتن دارم و تلاش می‌کنم مطالب کاربردی و به‌روز ارائه کنم تا مطالعه برای خوانندگان لذت‌بخش‌تر و مفیدتر باشد.

36916
A
A