| rsync(1) | User Commands | rsync(1) |
نام (NAME)
rsync - ابزاری سریع و چندکاره برای رونوشت محلی و راهدور فایلها
خلاصه دستور (SYNOPSIS)
Local:
rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull:
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull:
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
استفاده تنها با یک آرگومان SRC و بدون آرگومان DEST به جای رونوشت، پروندههای مبدأ را فهرست میکند.
نسخه برخط این صفحه راهنما (شامل پیوندهای متقابل میان مباحث) در نشانی زیر در دسترس است: https://download.samba.org/pub/rsync/rsync.1.
توضیحات (DESCRIPTION)
ابزار Rsync یک ابزار سریع و فوقالعاده چندکاره برای رونوشت پروندهها است. این ابزار میتواند پروندهها را به صورت محلی، از/به یک میزبان دیگر از طریق یک پوسته راهدور، یا از/به یک دیمن rsync راهدور کپی کند. این برنامه گزینههای متعددی ارائه میدهد که تمام جنبههای رفتاری آن را کنترل کرده و امکان تعیین بسیار انعطافپذیر مجموعهای از پروندهها را برای رونوشت فراهم میسازد. Rsync به دلیل الگوریتم انتقال دلتای (delta-transfer) خود مشهور است؛ این الگوریتم حجم دادههای ارسالشده در شبکه را با ارسال تنها تفاوتهای بین پروندههای مبدأ و پروندههای موجود در مقصد کاهش میدهد. Rsync بهطور گسترده برای پشتیبانگیری، آینهسازی و به عنوان یک دستور رونوشت بهبودیافته برای استفاده روزمره به کار میرود.
ابزار Rsync پروندههایی را که نیاز به انتقال دارند (بهطور پیشفرض) با استفاده از الگوریتم «بررسی سریع» پیدا میکند که به دنبال پروندههایی با تغییر در اندازه یا زمان آخرین تغییر میگردد. هرگونه تغییر در سایر ویژگیهای حفظشده (طبق درخواست گزینهها)، هنگامی که بررسی سریع نشان دهد دادههای پرونده نیازی به بهروزرسانی ندارند، مستقیماً روی پرونده مقصد اعمال میشود.
برخی از ویژگیهای دیگر rsync عبارتند از:
- o
- پشتیبانی از رونوشت پیوندهای سخت و نرم، دستگاهها، مالکان، گروهها و مجوزها
- o
- گزینههای exclude و exclude-from مشابه با GNU tar
- o
- حالت استثنای CVS برای نادیده گرفتن همان پروندههایی که CVS نادیده میگیرد
- o
- امکان استفاده از هر پوسته راهدور شفاف، از جمله ssh یا rsh
- o
- عدم نیاز به دسترسیهای کاربر ارشد (super-user)
- o
- خطلولهای کردن انتقال پروندهها برای به حداقل رساندن هزینههای تاخیر
- o
- پشتیبانی از دیمنهای ناشناس یا احراز هویت شده rsync (ایدهآل برای آینهسازی)
کلیات (GENERAL)
ابزار rsync فایلها را به یک میزبان راهدور، از آن، یا به صورت محلی روی میزبان فعلی کپی میکند. این ابزار از کپی فایلها بین دو میزبان راهدور مختلف پشتیبانی نمیکند.
برای ارتباط rsync با یک سیستم راهدور دو روش وجود دارد: استفاده از برنامه شل راهدور به عنوان بستر انتقال (مانند ssh یا rsh)، یا برقراری ارتباط مستقیم با دیمن rsync از طریق TCP. بستر انتقال شل راهدور زمانی استفاده میشود که مسیر مبدأ یا مقصد پس از مشخصه میزبان، حاوی یک دونقطه (:) به عنوان جداکننده باشد. در این حالت، فرایند محلی rsync از برنامه شل راهدور برای راهاندازی فرایند rsync روی سیستم راهدور استفاده میکند. سپس دو فرایند rsync از طریق برنامه شل راهدور با یکدیگر ارتباط برقرار میکنند تا انتقال مورد نظر انجام شود. در این حالت، فایلهای قابل دسترسی در سیستم راهدور همان مواردی هستند که برای شناسه کاربری (user ID) اجراکننده فرایند rsync راهدور در دسترس باشند.
ارتباط مستقیم با دیمن rsync زمانی رخ میدهد که مسیر مبدأ یا مقصد پس از مشخصه میزبان حاوی دو دونقطه (::) باشد، یا یک نشانی اینترنتی rsync:// مشخص شده باشد. در این حالت، فرایند دیمن rsync راهدور بر اساس پیکربندی خود، تنها به مجموعههای خاصی از فایلها به نام ماژول دسترسی میدهد. همچنین برقراری ارتباط با دیمن rsync از طریق بستر انتقال شل راهدور ممکن است؛ برای جزئیات به بخش USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION مراجعه کنید.
به عنوان یک حالت خاص، اگر تنها یک آرگومان مبدأ بدون مقصد مشخص شود، فایلها در قالبی شبیه به "ls -l" فهرست میشوند.
اگر هیچکدام از مسیرهای مبدأ یا مقصد میزبان راهدوری را مشخص نکنند، کپی به صورت محلی انجام میشود (گزینه --list-only را نیز ببینید).
ابزار rsync بخش محلی را کلاینت و بخش راهدور را سرور مینامد. نباید سرور را با دیمن rsync اشتباه گرفت. یک دیمن همواره سرور است، اما سرور میتواند دیمن یا فرایندی باشد که توسط شل راهدور ایجاد شده است. اگر انتقال محلی باشد، زیرفرایند rsync که محتوای فایلهای در حال انتقال را دریافت میکند، سرور خواهد بود.
راهاندازی (SETUP)
بیشتر توزیعهای لینوکس rsync را به صورت بستهای ارائه میدهند که با استفاده از مدیر بسته قابل نصب است. اگر به هر دلیلی نیاز به ساخت و نصب rsync از روی کد منبع دارید، برای دستورالعملهای نصب به فایل README.md مراجعه کنید.
پس از نصب، میتوانید از rsync برای هر ماشینی که از طریق شل راهدور به آن دسترسی دارید یا دیمن rsync روی آن فعال است، استفاده کنید. برای انتقالهای راهدور، rsync معمولاً از ssh برای ارتباطات خود استفاده میکند. همچنین میتوانید با استفاده از گزینه خط فرمان -e یا با مقداردهی متغیر محیطی RSYNC_RSH، هر شل راهدور دلخواهی را مشخص کنید.
توجه داشته باشید که rsync باید روی هر دو ماشین مبدأ و مقصد نصب شده باشد.
کاربرد (USAGE)
شما از rsync به روشی مشابه با سایر دستورهای کپی فایل مانند cp و rcp استفاده میکنید. باید یک مبدأ و یک مقصد مشخص کنید که یکی از آنها میتواند راهدور باشد.
شاید بهترین راه برای توضیح ساختار دستور، استفاده از چند مثال باشد:
rsync -t *.c foo:src/
این دستور همه فایلهای منطبق با الگوی *.c را از پوشه فعلی به پوشه src در ماشین foo منتقل میکند. اگر هر یک از فایلها از قبل روی سیستم راهدور موجود باشد، پروتکل بهروزرسانی راهدور rsync برای بهروزرسانی فایل تنها با ارسال تفاوتهای داده استفاده میشود. توجه داشته باشید که بسط کاراکترهای عام در خط فرمان (*.c) به فهرستی از فایلها، پیش از اجرای rsync توسط شل انجام میشود و نه توسط خود rsync (مشابه سایر برنامههای سازگار با استاندارد Posix).
rsync -avz foo:src/bar /data/tmp
این دستور تمام فایلها را بهصورت بازگشتی از دایرکتوری src/bar در ماشین foo به دایرکتوری /data/tmp/bar در ماشین محلی منتقل میکند. فایلها در حالت آرشیو منتقل میشوند که تضمین میکند پیوندهای نمادین، دستگاهها، مشخصهها، دسترسیها، مالکیتها و غیره در حین انتقال حفظ شوند. علاوه بر این، از فشردهسازی برای کاهش حجم بخشهای دادهای در طول انتقال استفاده خواهد شد.
rsync -avz foo:src/bar/ /data/tmp
وجود یک اسلش در انتهای مسیر مبدأ، این رفتار را تغییر میدهد تا از ایجاد یک سطح دایرکتوری اضافی در مقصد جلوگیری شود. میتوانید اسلش پایانی / در مبدأ را به معنای «رونوشت محتویات این دایرکتوری» در برابر «رونوشت دایرکتوری با نام آن» در نظر بگیرید؛ اما در هر دو حالت، مشخصههای دایرکتوری مبدأ به دایرکتوری مقصد منتقل میشوند. به عبارت دیگر، هر یک از دستورهای زیر فایلها را به یک روش رونوشت میکنند، از جمله در تنظیم مشخصههای /dest/foo:
rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo
همچنین توجه داشته باشید که ارجاعات میزبان و ماژول برای رونوشت محتویات دایرکتوری پیشفرض، نیازی به اسلش انتهایی ندارند. برای مثال، هر دوی این دستورها محتویات دایرکتوری راهدور را در "/dest" رونوشت میکنند:
rsync -av host: /dest rsync -av host::module /dest
همچنین میتوانید از rsync در حالت کاملاً محلی استفاده کنید، جایی که در نام مبدأ و مقصد کاراکتر ':' وجود ندارد. در این حالت، مانند یک دستور copy بهبودیافته عمل میکند.
در نهایت، میتوانید تمام ماژولهای در دسترس (قابل فهرستبندی) از یک دیمن rsync مشخص را با حذف نام ماژول مشاهده کنید:
rsync somehost.mydomain.com::
رونوشت با نام متفاوت (COPYING TO A DIFFERENT NAME)
هنگامی که میخواهید یک دایرکتوری را با نامی دیگر رونوشت کنید، یک اسلش در انتهای مسیر دایرکتوری مبدأ قرار دهید تا محتویات آن درون دایرکتوری مقصد دلخواه شما قرار گیرد:
rsync -ai foo/ bar/
ابزار rsync همچنین قابلیت رونوشت یک فایل تکی به مقصد با نامی متفاوت را دارد. قواعد این عملیات عبارتند از:
- o
- فهرست انتقال باید تنها شامل یک مورد باشد (یک فایل یا یک دایرکتوری خالی)
- o
- عنصر نهایی مسیر مقصد نباید به عنوان یک دایرکتوری وجود داشته باشد
- o
- مسیر مقصد نباید با یک اسلش انتهایی مشخص شده باشد
تحت این شرایط، rsync از مسیر مقصد مشخصشده به عنوان نام فایل مقصد استفاده خواهد کرد (بهجای ساخت نام فایل با استفاده از آخرین عنصر مسیر مبدأ). بهتر است از این شیوه تنها هنگام رونوشت یک فایل استفاده شود، و برای رونوشت یک دایرکتوری از شیوه اسلش انتهایی بالا استفاده گردد.
مثال زیر فایل foo.c را با نام bar.c در دایرکتوری save رونوشت میکند (با این فرض که bar.c یک دایرکتوری نیست):
rsync -ai src/foo.c save/bar.c
قاعده رونوشت تکموردی در صورتی که یک الگوی عامهپسند (wildcard) برای مبدأ تنها به یک مورد منتهی شود و مقصد، هرچند بدون اسلش انتهایی مشخص شده، به عنوان یک دایرکتوری در نظر گرفته شده باشد اما آن دایرکتوری وجود نداشته باشد، میتواند نتایج غیرمنتظرهای ایجاد کند. برای مثال، اگر src/*.c با یک فایل مطابقت داشته باشد و save/dir وجود نداشته باشد، این حالت احتمالاً به شکلی گیجکننده نام فایل مقصد را save/dir میگذارد:
rsync -ai src/*.c save/dir
برای جلوگیری از چنین پیشامدی، یا مطمئن شوید که دایرکتوری مقصد وجود دارد یا مسیر مقصد را با یک اسلش انتهایی مشخص کنید:
rsync -ai src/*.c save/dir/
ترتیب انتقال مرتبشده (SORTED TRANSFER ORDER)
ابزار rsync همواره نام فایلهای مشخصشده را در فهرست انتقال داخلی خود مرتب میکند. این کار ادغام محتویات دایرکتوریهای همنام را مدیریت کرده و حذف نام فایلهای تکراری را آسان میسازد. با این حال، میتواند منجر به انتقال فایلها با ترتیبی متفاوت از آنچه در خط فرمان مشخص شده است شود.
اگر نیاز دارید فایل خاصی پیش از فایلی دیگر منتقل شود، تنها راه تضمینشده برای آن، جداسازی فایلها در فراخوانیهای مجزای rsync است. اگر ظاهر شدن فایلهای مقصد تقریباً در یک زمان کفایت میکند، استفاده از --delay-updates را در نظر بگیرید که بر ترتیب انتقال مرتبشده اثری نمیگذارد، اما فاز بهروزرسانی نهایی فایلها را بسیار سریعتر به انجام میرساند.
امنیت (SECURITY)
ابزار rsync غالباً در بستر شبکه و با دسترسیهای بالا اجرا میشود، بنابراین ارزش دارد به این فکر کنید که به چه کسی و با چه چیزهایی اعتماد میکنید. این بخش یک راهنمای عملی برای استفاده ایمن است؛ فایل SECURITY.md پروژه، مدل کامل تهدیدها و موارد باقیمانده به ازای هر پلتفرم را شرح میدهد.
استفاده از یک انتقال احرازهویتشده و رمزنگاریشده
یک انتقال سادهٔ host:path از طریق پوستهٔ راهدور شما (بهطور پیشفرض ssh) اجرا میشود که طرف مقابل را احراز هویت کرده و اتصال را رمزگذاری میکند -- این حالت پیشفرضِ امن است. یک اتصال مستقیم دیمن (host::module یا rsync://) رمزگذارینشده است و احراز هویت آن نسبتاً ضعیف است، بنابراین دادههای حساس را روی یک شبکهٔ غیرقابلاعتماد ارسال نکنید. بهجای آن، آن را از طریق ssh تونل کنید (بخش USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION را ببینید) یا آن را با TLS از طریق rsync-ssl(1) بستهبندی کرده و RSYNC_SSL_CA_CERT را تنظیم نمایید تا زنجیرهٔ گواهی سرور و نام میزبان بررسی و تأیید شوند. هنگامی که باید گذرواژهٔ دیمن را بهصورت غیرتعاملی ارائه دهید، آن را بهجای خط فرمان، درون یک --password-file که فقط توسط شما قابل خواندن است (حالت ۶۰۰) قرار دهید.
رونوشت از میزبان فرستندهٔ غیرقابلاعتماد
هنگام دریافت از یک میزبان راهدور، rsync اقداماتی انجام میدهد تا اطمینان حاصل کند که یک فرایند rsync راهدورِ خراب یا نفوذیافته نتواند باعث شود که فرایند rsync محلی به فایلهایی فراتر از محدودهٔ درخواستی دسترسی پیدا کند. برنامهٔ rsync تضمین میکند که فهرست فایلهای در حال انتقال در داخل درخت درخواستی باقی بماند، و هرگاه یک فهرست فایل حاوی مسیر مطلق یا نسبی باشد که سعی در خروج از ریشهٔ انتقال داشته باشد، متوقف خواهد شد. همچنین تأیید میکند که هیچ آرگومان مبدأ اضافی به انتقال افزوده نشده باشد و فهرست فایلها از قواعد مستثنیسازی (exclude) که به فرستنده ارسال شدهاند پیروی کند.
برای کسانی که میخواهند احتیاط بیشتری به خرج دهند، امنترین روش این است که فایلهای راهدور غیرقابلاعتماد را درون یک پوشهٔ مقصد اختصاصی رونوشت کنند. برای مثال، بهجای رونوشت به پوشهٔ خانگیتان:
rsync -aiv host1:dir1 ~
یک پوشهٔ "host1-files" را به محتوای راهدور اختصاص دهید:
rsync -aiv host1:dir1 ~/host1-files
برای جزئیات بیشتر گزینهٔ --trust-sender را ببینید.
رونوشت میان فایلسیستمهای حفظکنندهٔ بزرگی و کوچکی حروف و ناوابسته به آن
رونوشت از یک فایلسیستم حفظکنندهٔ حالت حروف به فایلسیستم ناوابسته به حروف نیازمند احتیاط است، زیرا این احتمال وجود دارد که پس از حذف تمایز میان حروف بزرگ و کوچک، نام یک پیوند نمادین با نام یک فایل یا پوشه همپوشانی پیدا کند، که میتواند به نتایج بالقوه خطرناکی مانند نوشتهشدن فایلها در خارج از سلسلهمراتب پوشهٔ مقصد بیانجامد. اگر مجبور به انجام چنین رونوشتی هستید، پیوندهای نمادین را با --no-links غیرفعال کنید یا درهمریزی (munging) پیوندهای نمادین را با --munge-links فعال نمایید (و مطمئن شوید که گزینهٔ محلی یا راهدورِ مناسب را به کار میبرید). البته این کار تضمین نمیکند که یک رونوشت کامل از تمامی فایلها دریافت کنید (چرا که ممکن است در صورت تداخل نامها امکانپذیر نباشد)؛ راهحل بالقوه بهتر ساخت یک فهرست امن از نام فایلها و ارسال آن به --files-from است.
پیوندهای نمادین (SYMBOLIC LINKS)
یک فرستندهٔ مخرب میتواند پیوندهای نمادینی قرار دهد که به خارج از درخت مقصد اشاره دارند (برای مثال به /etc/passwd). از --safe-links برای نادیده گرفتن هر پیوند نمادینی که به خارج از مجموعهٔ فایلهای در حال انتقال اشاره میکند استفاده کنید، یا از --munge-links برای ذخیرهٔ هر پیوند نمادین به شکلی که روی دیسک غیرقابلاستفاده ولی بعداً قابلبازیابی باشد بهره ببرید؛ گزینهٔ --no-links پیوندهای نمادین را بهطور کامل حذف میکند. بخش پیوندهای نمادین (SYMBOLIC LINKS) را برای نحوهٔ تعامل این گزینهها ببینید.
بهطور جداگانه، مسیرهای پوشه و پروندهای که شما در خط فرمان مشخص میکنید -- --backup-dir، --temp-dir، --partial-dir، دایرکتوریهای پایه --link-dest/--compare-dest/--copy-dest، --log-file، --files-from/--include-from/--exclude-from، پروندههای ادغام --filter، --write-batch/--read-batch، و خود مقصد -- به گونهای ارزیابی میشوند که یک مؤلفه پیوند نمادین تنها در صورتی دنبال شود که مالک آن شما یا root باشید؛ پیوند نمادین قرار داده شده توسط مهاجم در امتداد یکی از این مسیرها رد میشود. --insecure-links این محافظت را غیرفعال میکند (رفتار تاریخی دنبالکردن هرگونه پیوند نمادین را بازمیگرداند)؛ تنها زمانی از آن استفاده کنید که تمام دایرکتوریهای درون آن مسیرها قابل اعتماد باشند، و هرگز در مسیری که کاربر غیرممتاز امکان نوشتن روی آن دارد استفاده نکنید.
استفاده از چکسامهای قوی
برنامه rsync قویترین چکسامی را که هر دو طرف پشتیبانی میکنند بهطور خودکار مذاکره میکند، بنابراین بهروز نگه داشتن نسخههای محلی و راهدور rsync در حد معقول معمولاً تمام چیزی است که نیاز است. شما میتوانید این انتخاب را با --checksum-choice (--cc، به عنوان مثال --cc=sha1 یا یکی از گونههای xxHash) تثبیت کنید یا مذاکره را با متغیر محیطی RSYNC_CHECKSUM_LIST محدود نمایید؛ تنها همتاهای بسیار قدیمی به MD4/MD5 تنزل مییابند. این چکسام پیش از انتقال «آیا این پرونده نیاز به بهروزرسانی دارد؟» جدا از چکسام کل پرونده است که rsync بهطور معمول پس از آن برای تأیید صحت هر پرونده منتقلشده محاسبه میکند (هنگامی که --checksum-choice=none اجبار شود، تأیید صحت غیرفعال است).
نسخه پروتکل
کلاینت و سرور بهطور خودکار جدیدترین پروتکلی را که هر دو پشتیبانی میکنند مذاکره مینمایند، بنابراین یک جفت بهروز هماکنون از جدیدترین نسخه استفاده میکند؛ --protocol صرفاً یک نسخه قدیمیتر را برای سازگاری اجبار میکند و نباید برای تنزل دادن یک اتصال استفاده شود. بنابراین اجتناب از پروتکلهای قدیمی وابسته به اجرای نسخه بهروز rsync در هر دو طرف است (پروتکل پایینتر از ۳۰ همچنین چکیده احراز هویت ضعیف MD4 را در اتصال دیمن اجبار میکند -- بخش AUTHENTICATION STRENGTH از rsyncd.conf(5) را ببینید).
استفاده پیشرفته (ADVANCED USAGE)
نحو درخواست چند پرونده از یک میزبان راهدور با مشخص کردن آرگومانهای میزبان راهدور اضافی با همان ساختار اولی، یا با حذف نام میزبان انجام میشود. برای نمونه، همه اینها کار میکنند:
rsync -aiv host:file1 :file2 host:file{3,4} /dest/
rsync -aiv host::modname/file{1,2} host::modname/extra /dest/
rsync -aiv host::modname/first ::extra-file{1,2} /dest/
توجه داشته باشید که اتصال دیمن تنها از دسترسی به یک ماژول در هر دستور رونوشت پشتیبانی میکند، بنابراین اگر ابتدای مسیر بعدی با modname مسیر نخست آغاز نشود، فرض میشود که مسیری درون همان ماژول است (مانند extra-file1 و extra-file2 که در بالا دریافت شدند).
از آنجا که نسخههای بسیار قدیمی rsync (پیش از 3.0.0، منتشر شده در مارس ۲۰۰۸) تنها اجازه تعیین یک آرگومان مبدا راهدور را میدادند، برخی افراد به جداسازی فاصلهها توسط شل راهدور برای شکستن یک آرگومان به چند مسیر تکیه میکردند. چنین رفتار غیرشهودی دیگر بهطور پیشفرض پشتیبانی نمیشود، اگرچه میتوانید همانطور که در بند بعدی توضیح داده شده آن را درخواست کنید. اکنون rsync (از نسخه 3.2.4) نام پروندهها را به گونهای به شل راهدور ارسال میکند تا نویسههای وارد شده توسط شما حفظ شوند. بنابراین، اگر پروندهای با فاصله در نامش بخواهید، این همان چیزی است که rsync راهدور به دنبال آن میگردد:
rsync -aiv host:'a simple file.pdf' /dest/
اگر از اسکریپتهایی استفاده میکنید که برای اعمال دستی نقلقولهای اضافی (quoting) به آرگومانهای راهدور rsync نوشته شدهاند، یا بر تفکیک آرگومانهای راهدور تکیه دارند، میتوانید از rsync بخواهید تا اجازه دهد اسکریپت شما گریزدهی (escaping) اضافی را مدیریت کند. این کار با افزودن گزینهٔ --old-args به اجرای rsync در اسکریپت (که نیازمند نسخه جدید rsync است) یا صدور RSYNC_OLD_ARGS=1 و RSYNC_PROTECT_ARGS=0 (که با نسخههای قدیمی یا جدید rsync کار میکند) انجام میشود.
اتصال به یک دیمن RSYNC (CONNECTING TO AN RSYNC DAEMON)
یک دیمن rsync روشی برای دسترسی کنترلشده به یک یا چند سلسلهمراتب پوشه در یک سیستم بدون نیاز به ارائه دسترسی پوسته فراهم میکند. هر سلسلهمراتب پوشه یک «ماژول» (module) نامیده میشود. نامها، پوشهها، مجوزهای دسترسی و غیره برای هر ماژول توسط فایل پیکربندی دیمن rsync تعریف میشوند که در rsyncd.conf(5) شرح داده شده است. اتصالات به یک دیمن rsync معمولاً از پورت TCP شمارهٔ 873 استفاده میکنند. مدیر سیستم معمولاً مقدمات اجرای دیمن rsync را فراهم میکند؛ برای اطلاعات بیشتر درباره نحوه انجام این کار، به بخش «راهاندازی دیمن RSYNC برای پذیرش اتصالات» در زیر مراجعه کنید.
از دید کلاینت، استفاده از rsync برای دسترسی به یک دیمن rsync شبیه به استفاده از آن با یک پوسته راهدور است، به جز اینکه:
- o
- بهجای نحو تکدونقطه (پوسته راهدور)، از نحو دودونقطه (::) یا نحو نشانی اینترنتی rsync:// استفاده کنید.
- o
- اولین عنصر «مسیر» در واقع نام یک ماژول است.
- o
- آرگومانهای مبدأ راهدور اضافی میتوانند از نحو اختصاری که نام میزبان و/یا نام ماژول را حذف میکند استفاده کنند، همانطور که در «استفاده پیشرفته (ADVANCED USAGE)» توضیح داده شده است.
- o
- دیمن راهدور ممکن است هنگام اتصال یک «پیام روز» (message of the day) چاپ کند.
- o
- اگر فقط میزبان را مشخص کنید (بدون ماژول یا مسیر)، فهرستی از ماژولهای قابل دسترس در دیمن در خروجی نمایش داده میشود.
- o
- اگر یک مسیر مبدأ راهدور بدون مقصد مشخص کنید، فهرستی از فایلهای منطبق در دیمن راهدور خروجی داده میشود.
- o
- برای تماس مستقیم با یک دیمن rsync، گزینهٔ --rsh (-e) باید حذف شود. در صورت استفاده، rsync از برنامه پوسته راهدور مشخصشده برای شروع دیمن rsync در سیستم راهدور استفاده خواهد کرد. برای اطلاعات در مورد این حالت عملکرد، به بخش «استفاده از قابلیتهای دیمن RSYNC از طریق اتصال پوسته راهدور» مراجعه کنید.
یک مثال که تمام فایلهای موجود در یک ماژول راهدور به نام "src" را کپی میکند:
rsync -av host::src /dest
برخی ماژولها در دیمن راهدور ممکن است به احراز هویت نیاز داشته باشند. در این صورت، هنگام اتصال یک درخواست گذرواژه دریافت خواهید کرد. میتوانید با تنظیم متغیر محیطی RSYNC_PASSWORD با گذرواژه مورد نظر یا با استفاده از گزینهٔ --password-file از درخواست گذرواژه جلوگیری کنید. این کار ممکن است هنگام نوشتن اسکریپت با rsync مفید باشد.
هشدار: در برخی سیستمها، متغیرهای محیطی برای تمام کاربران قابل مشاهده هستند. در چنین سیستمهایی استفاده از --password-file توصیه میشود.
میتوانید اتصال را از طریق یک پروکسی وب با تنظیم متغیر محیطی RSYNC_PROXY به یک جفت hostname:port که به پروکسی وب شما اشاره دارد، برقرار کنید. توجه داشته باشید که پیکربندی پروکسی وب شما باید از اتصالات پروکسی به پورت 873 پشتیبانی کند.
همچنین میتوانید با تنظیم متغیر محیطی RSYNC_CONNECT_PROG با دستوراتی که مایلید بهجای برقراری اتصال مستقیم سوکت اجرا شوند، یک اتصال دیمن را با استفاده از یک برنامه به عنوان پروکسی برقرار کنید. این رشته میتواند شامل گریز "%H" برای نمایش نام میزبان مشخصشده در دستور rsync باشد (بنابراین در صورتی که به یک "%" تنها در رشته خود نیاز دارید از "%%" استفاده کنید). برای مثال:
export RSYNC_CONNECT_PROG='ssh proxyhost nc %H 873' rsync -av targethost1::module/src/ /dest/ rsync -av rsync://targethost2/module/src/ /dest/
دستور مشخصشده در بالا از ssh برای اجرای nc (netcat) روی proxyhost استفاده میکند که همه دادهها را به درگاه 873 (دیمن rsync) روی targethost (%H) هدایت مینماید.
همچنین توجه داشته باشید که اگر متغیر محیطی RSYNC_SHELL تنظیم شده باشد، آن برنامه برای اجرای دستور RSYNC_CONNECT_PROG بهجای استفاده از پوسته پیشفرض فراخوانی system() به کار گرفته خواهد شد.
استفاده از قابلیتهای دیمن RSYNC از طریق اتصال پوسته راهدور (USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION)
گاهی اوقات استفاده از قابلیتهای مختلف دیمن rsync (مانند ماژولهای نامگذاریشده) بدون نیاز به باز کردن اتصالات سوکت جدید روی سیستم، فراتر از آنچه از قبل برای دسترسی به پوسته راهدور لازم است، مفید خواهد بود. rsync از اتصال به میزبان با استفاده از پوسته راهدور و سپس ایجاد یک سرور «دیمن» یکبارمصرف که انتظار دارد فایل پیکربندی خود را در دایرکتوری خانگی کاربر راهدور بخواند، پشتیبانی میکند. این قابلیت در صورتی که بخواهید دادههای یک انتقال به سبک دیمن را رمزگذاری کنید کاربردی است. با این حال، از آنجا که دیمن توسط کاربر راهدور راهاندازی میشود، ممکن است نتوانید از قابلیتهایی که نیازمند دسترسی ریشه (root) هستند، مانند chroot یا تعیین شناسه کاربری (user ID) استفاده کنید. (برای روشی دیگر جهت رمزگذاری انتقال دیمن، میتوانید از ssh برای تونل کردن یک درگاه محلی به ماشین راهدور استفاده کنید و یک دیمن معمولی rsync را روی آن میزبان راهدور طوری پیکربندی کنید که فقط اتصالات از "localhost" را بپذیرد.)
از دیدگاه کاربر، انتقال دیمن از طریق اتصال پوسته راهدور تقریباً از همان نحو خط فرمان انتقال معمولی دیمن rsync استفاده میکند، با این تفاوت که باید برنامه پوسته راهدور را صریحاً در خط فرمان با گزینه --rsh=COMMAND مشخص کنید. (تنظیم RSYNC_RSH در متغیرهای محیطی این قابلیت را فعال نخواهد کرد.) برای مثال:
rsync -av --rsh=ssh host::module /dest
پیشوند "user@" پیش از نام میزبان در این حالت همزمان دو هدف را برآورده میکند: هم مقدار rsync-user است (که برای ورود به ماژولی که نیاز به احراز هویت کاربر دارد استفاده میشود) و هم بهطور پیشفرض به عنوان کاربر ورود به سیستم به پوسته راهدور ارسال میشود. بنابراین شکل ساده
rsync -av --rsh=ssh user@host::module /dest
دستور ssh -l user host را اجرا میکند و "user" را به عنوان rsync-user به ماژول تحویل میدهد؛ هر دو مجبور به داشتن نام یکسان هستند.
اگر نیاز دارید که ورود به پوسته راهدور (ssh) از نام متفاوتی نسبت به rsync-user استفاده کند، یک گزینه صریح '-l' به دستور ssh در فرمان پوسته راهدور بدهید. هنگامی که از قبل برای ssh مشخص شده باشد که با کدام کاربر وارد شود، rsync دیگر گزینه '-l' اختصاصی خود را اضافه نمیکند؛ بنابراین پیشوند "user@" فقط به عنوان rsync-user استفاده میشود. برای مثال، با استفاده از شکل کوتاه گزینه --rsh:
rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest
در اینجا "ssh-user" در سطح ssh استفاده میشود در حالی که "rsync-user" برای ورود به "module" به کار میرود.
در این راهاندازی، دیمن توسط دستور ssh که به سیستم دسترسی دارد آغاز میشود (در صورت تمایل، میتواند از طریق پروندهٔ ~/.ssh/authorized_keys اجباری شود). با این حال، هنگام دسترسی مستقیم به یک دیمن، باید از قبل راهاندازی شده باشد.
راهاندازی دیمن RSYNC برای پذیرش اتصالها (STARTING AN RSYNC DAEMON TO ACCEPT CONNECTIONS)
به منظور اتصال به یک دیمن rsync، سیستم راهدور باید از قبل دیمنی در حال اجرا داشته باشد (یا باید چیزی مانند inetd را پیکربندی کرده باشد تا یک دیمن rsync برای اتصالهای ورودی روی یک درگاه مشخص ایجاد کند). برای اطلاعات کامل در مورد نحوهٔ راهاندازی دیمنی که اتصالات سوکت ورودی را مدیریت میکند، به صفحهٔ راهنمای rsyncd.conf(5)، پروندهٔ پیکربندی دیمن مراجعه کنید. این صفحهٔ راهنما شامل جزئیات کامل برای نحوهٔ اجرای دیمن، از جمله پیکربندیهای مستقل (stand-alone) و inetd است.
اگر از یکی از روشهای انتقال پوستهٔ راهدور برای انتقال استفاده میکنید، نیازی به راهاندازی دستی دیمن rsync نیست.
مثالها (EXAMPLES)
در اینجا چند مثال از نحوهٔ استفاده از rsync آورده شده است.
برای پشتیبانگیری از یک دایرکتوری خانگی، که شامل پروندههای بزرگ MS Word و پوشههای ایمیل است، میتوان از یک وظیفهٔ زمانبندیشدهٔ cron به ازای هر کاربر استفاده کرد که این دستور را روزانه اجرا کند:
rsync -aiz . bkhost:backup/joe/
برای انتقال چند پرونده از یک میزبان راهدور به میزبان محلی، میتوانید اجرا کنید:
rsync -aiv --remove-source-files rhost:/tmp/{file1,file2}.c ~/src/
خلاصه گزینهها (OPTION SUMMARY)
در اینجا خلاصهای کوتاه از گزینههای موجود در rsync آورده شده است. هر گزینه همچنین در ادامهٔ این صفحهٔ راهنما، توضیحات مفصل مخصوص به خود را دارد.
--verbose, -v افزایش پرگویی (verbosity)
--info=FLAGS جزئیات دقیق گزارش اطلاعاتی
--debug=FLAGS جزئیات دقیق گزارش اشکالزدایی
--stderr=e|a|c تغییر حالت خروجی stderr (پیشفرض: errors)
--quiet, -q فرونشاندن پیامهای غیرخطا
--no-motd فرونشاندن MOTD در حالت دیمن
--checksum, -c صرفنظر بر اساس چِکسام، نه زمان تغییر و اندازه
--archive, -a حالت آرشیو معادل -rlptgoD است (بدون -A,-X,-U,-N,-H)
--no-OPTION غیرفعالکردن یک OPTION ضمنی (مانند --no-D)
--recursive, -r پیمایش بازگشتی در دایرکتوریها
--inc-recursive, --i-r فعالکردن بازگشت افزایشی
--no-inc-recursive غیرفعالکردن بازگشت افزایشی
--no-i-r مشابه --no-inc-recursive
--relative, -R استفاده از نامهای مسیر نسبی
--no-implied-dirs عدم ارسال دایرکتوریهای ضمنی همراه با --relative
--backup, -b تهیه نسخه پشتیبان (به --suffix و --backup-dir مراجعه کنید)
--backup-dir=DIR تهیه نسخه پشتیبان در سلسلهمراتبی بر پایهٔ DIR
--suffix=SUFFIX پسوند پشتیبان (پیشفرض ~ بدون --backup-dir)
--update, -u صرفنظر از پروندههایی که در گیرنده جدیدتر هستند
--inplace بهروزرسانی درجا در پروندههای مقصد
--append الحاق دادهها به پروندههای کوتاهتر
--append-verify مشابه --append با احتساب دادههای قدیمی در چِکسام پرونده
--dirs, -d انتقال دایرکتوریها بدون پیمایش بازگشتی
--old-dirs عملکرد مشابه --dirs هنگام ارتباط با rsync قدیمی
--old-d مشابه --old-dirs
--mkpath ایجاد اجزای ناموجود مسیر در مقصد
--links, -l رونوشت از پیوندهای نمادین به عنوان پیوند نمادین
--copy-links, -L تبدیل پیوند نمادین به پرونده/دایرکتوری مرجع
--copy-unsafe-links تنها پیوندهای نمادین «ناامن» تبدیل میشوند
--safe-links نادیدهگرفتن پیوندهای نمادین که به بیرون درخت اشاره دارند
--insecure-links دنبالکردن پیوندهای نمادین متعلق به مهاجم در مسیرهای عملگر
--confine-root=DIR رد مسیرهای عملگری که به خارج از DIR حل میشوند
--munge-links تغییر شکل پیوندهای نمادین برای ایمن و غیرقابل استفاده کردن آنها
--copy-dirlinks, -k تبدیل پیوند نمادینِ دایرکتوری به دایرکتوری مرجع
--keep-dirlinks, -K رفتار با پیوند نمادینِ دایرکتوری در گیرنده به عنوان دایرکتوری
--hard-links, -H حفظ پیوندهای سخت
--perms, -p حفظ مجوزها
--executability, -E حفظ قابلیت اجرا
--chmod=CHMOD اثرگذاری بر مجوزهای پرونده و/یا دایرکتوری
--acls, -A حفظ ACLها (متضمن --perms)
--xattrs, -X حفظ ویژگیهای گسترشیافته
--owner, -o حفظ مالک (تنها کاربر ارشد)
--group, -g حفظ گروه
--devices حفظ پروندههای دستگاه (تنها کاربر ارشد)
--copy-devices رونوشت از محتوای دستگاه به عنوان پرونده عادی
--write-devices نوشتن در دستگاهها به عنوان پرونده (متضمن --inplace)
--specials حفظ پروندههای ویژه
--drop-D گیرنده ایجاد دستگاهها/پروندههای ویژه را رد میکند
-D مشابه --devices --specials
--times, -t حفظ زمانهای تغییر
--atimes, -U حفظ زمانهای دسترسی (استفاده)
--open-noatime جلوگیری از تغییر atime در پروندههای بازشده
--crtimes, -N حفظ زمانهای ایجاد (تازگی)
--omit-dir-times, -O صرفنظر از دایرکتوریها در --times
--omit-link-times, -J صرفنظر از پیوندهای نمادین در --times
--super گیرنده برای اقدامات کاربر ارشد تلاش میکند
--fake-super ذخیره/بازیابی ویژگیهای ممتاز با استفاده از xattrs
--sparse, -S تبدیل توالیهای بایت پوچ به بلوکهای تُنُک (sparse)
--preallocate تخصیص فضای پروندههای مقصد پیش از نوشتن آنها
--dry-run, -n اجرای آزمایشی بدون اعمال هیچ تغییری
--whole-file, -W رونوشت کامل پروندهها (بدون الگوریتم انتقال تفاضلی)
--no-whole-file, --no-W استفاده از الگوریتم انتقال تفاضلی
--checksum-choice=STR انتخاب الگوریتم چِکسام (همچنین --cc)
--one-file-system, -x عدم عبور از مرزهای سیستمپرونده
--block-size=SIZE, -B اجبار به استفاده از اندازه بلوک ثابت برای چِکسام
--rsh=COMMAND, -e مشخصکردن پوستهٔ راهدور مورد استفاده
--rsync-path=PROGRAM مشخصکردن برنامهٔ rsync برای اجرا در رایانه راهدور
--existing صرفنظر از ایجاد پروندههای جدید در گیرنده
--ignore-non-existing صرفنظر از ایجاد پروندههای جدید در گیرنده
--ignore-existing صرفنظر از بهروزرسانی پروندههای موجود در گیرنده
--remove-source-files فرستنده پروندههای همگامشده را حذف میکند (به جز دایرکتوری)
--del نام مستعار برای --delete-during
--delete حذف پروندههای اضافی از دایرکتوریهای مقصد
--delete-before گیرنده پیش از انتقال حذف میکند، نه حین آن
--delete-during گیرنده حین انتقال حذف میکند
--delete-delay یافتن حذفیات حین انتقال، حذف پس از آن
--delete-after گیرنده پس از انتقال حذف میکند، نه حین آن
--delete-excluded همچنین حذف پروندههای مستثنیشده از دایرکتوریهای مقصد
--ignore-missing-args نادیدهگرفتن آرگومانهای مبدا ناموجود بدون اعلام خطا
--delete-missing-args حذف آرگومانهای مبدا ناموجود از مقصد
--ignore-errors حذف حتی در صورت وجود خطاهای I/O
--force اجبار به حذف دایرکتوریها حتی در صورت خالی نبودن
--max-delete=NUM عدم حذف بیش از NUM پرونده
--max-size=SIZE عدم انتقال هر پرونده بزرگتر از SIZE
--min-size=SIZE عدم انتقال هر پرونده کوچکتر از SIZE
--max-alloc=SIZE تغییر محدودیت مربوط به تخصیص حافظه
--partial نگهداشتن پروندههای ناقص منتقلشده
--partial-dir=DIR قرار دادن پروندههای ناقص منتقلشده در DIR
--delay-updates قرار دادن تمام پروندههای بهروزرسانیشده در جای خود در پایان
--prune-empty-dirs, -m حذف زنجیرههای دایرکتوری خالی از فهرست پروندهها
--numeric-ids عدم نگاشت مقادیر uid/gid بر اساس نام کاربر/گروه
--usermap=STRING نگاشت سفارشی نام کاربری
--groupmap=STRING نگاشت سفارشی نام گروه
--chown=USER:GROUP نگاشت ساده نام کاربری/نام گروه
--timeout=SECONDS تنظیم مهلت زمانی I/O بر حسب ثانیه
--contimeout=SECONDS تنظیم مهلت زمانی اتصال به دیمن بر حسب ثانیه
--ignore-times, -I عدم صرفنظر از پروندههایی با اندازه و زمان یکسان
--size-only صرفنظر از پروندههایی که اندازه یکسان دارند
--modify-window=NUM, -@ تنظیم دقت برای مقایسههای زمان تغییر
--temp-dir=DIR, -T ایجاد پروندههای موقت در دایرکتوری DIR
--fuzzy, -y یافتن پروندهٔ مشابه به عنوان مبنا در صورت نبود پروندهٔ مقصد
--compare-dest=DIR همچنین مقایسه پروندههای مقصد نسبت به DIR
--copy-dest=DIR ... و شامل کردن رونوشت پروندههای بدون تغییر
--link-dest=DIR پیوند سخت به پروندههای موجود در DIR در صورت عدم تغییر
--compress, -z فشردهسازی دادههای پرونده حین انتقال
--compress-choice=STR انتخاب الگوریتم فشردهسازی (همچنین --zc)
--compress-level=NUM تنظیم صریح سطح فشردهسازی (همچنین --zl)
--compress-threads=NUM تنظیم صریح رشتههای فشردهسازی (همچنین --zt)
--skip-compress=LIST صرفنظر از فشردهسازی پروندهها با پسوند موجود در LIST
--cvs-exclude, -C نادیدهگرفتن خودکار پروندهها به همان روش CVS
--filter=RULE, -f افزودن یک RULE برای فیلتر کردن پروندهها
-F مشابه --filter='dir-merge /.rsync-filter'
تکرار: --filter='- .rsync-filter'
--exclude=PATTERN مستثنیکردن پروندههای منطبق با PATTERN
--exclude-from=FILE خواندن الگوهای استثنا از FILE
--include=PATTERN عدم استثنای پروندههای منطبق با PATTERN
--include-from=FILE خواندن الگوهای شمول از FILE
--files-from=FILE خواندن فهرست نامهای پروندههای مبدا از FILE
--from0, -0 تمام پروندههای *-from/filter با 0 از هم جدا میشوند
--old-args غیرفعالکردن شیوهٔ مدرن حفاظت از آرگومان
--secluded-args, -s استفاده از پروتکل برای ارسال ایمن آرگومانها
--trust-sender اعتماد به فهرست پروندههای فرستندهٔ راهدور
--copy-as=USER[:GROUP] مشخصکردن کاربر و گروه اختیاری برای رونوشت
--address=ADDRESS نشانی مقیدسازی (bind) برای سوکت خروجی به دیمن
--port=PORT مشخصکردن شماره درگاه جایگزین با دونقطه دوتایی
--sockopts=OPTIONS مشخصکردن گزینههای سفارشی TCP
--blocking-io استفاده از I/O مسدودکننده برای پوستهٔ راهدور
--outbuf=N|L|B تنظیم بافر خروجی روی None، Line، یا Block
--stats ارائه برخی آمارهای انتقال پرونده
--8-bit-output, -8 عدم تغییر نویسههای با بیت بالا در خروجی
--human-readable, -h نمایش اعداد در قالبی خوانا برای انسان
--progress نمایش پیشرفت حین انتقال
-P مشابه --partial --progress
--itemize-changes, -i ارائه خلاصهٔ تغییرات برای همهٔ بهروزرسانیها
--remote-option=OPT, -M ارسال OPTION تنها به سمت راهدور
--out-format=FORMAT خروجی بهروزرسانیها با استفاده از FORMAT مشخصشده
--log-file=FILE ثبت وقایع جاری در پروندهٔ FILE مشخصشده
--log-file-format=FMT ثبت وقایع بهروزرسانیها با استفاده از FMT مشخصشده
--password-file=FILE خواندن گذرواژهٔ دسترسی به دیمن از FILE
--early-input=FILE استفاده از FILE برای ورودی اجرای زودهنگام دیمن
--list-only فهرستکردن پروندهها به جای رونوشت گرفتن از آنها
--bwlimit=RATE محدودکردن پهنای باند I/O سوکت
--stop-after=MINS توقف rsync پس از سپری شدن MINS دقیقه
--stop-at=y-m-dTh:m توقف rsync در نقطهٔ زمانی مشخصشده
--fsync اجرای fsync روی تکتک پروندههای نوشتهشده
--write-batch=FILE نوشتن بهروزرسانی دستهای در FILE
--only-write-batch=FILE مشابه --write-batch اما بدون بهروزرسانی مقصد
--read-batch=FILE خواندن بهروزرسانی دستهای از FILE
--protocol=NUM اجبار به استفاده از نسخهٔ پروتکل قدیمیتر
--iconv=CONVERT_SPEC درخواست تبدیل مجموعه نویسههای (charset) نام پروندهها
--checksum-seed=NUM تنظیم بذر چِکسام بلوک/پرونده (پیشرفته)
--ipv4, -4 ترجیح دادن IPv4
--ipv6, -6 ترجیح دادن IPv6
--version, -V نمایش نسخه + سایر اطلاعات و خروج
--help, -h (*) نمایش این راهنما (* گزینه -h تنها در صورتی که به تنهایی بیاید راهنما است)
برنامه rsync میتواند به عنوان یک دیمن (daemon) نیز اجرا شود، که در این صورت گزینههای زیر پذیرفته میشوند:
--daemon run as an rsync daemon --address=ADDRESS bind to the specified address --bwlimit=RATE limit socket I/O bandwidth --config=FILE specify alternate rsyncd.conf file --dparam=OVERRIDE, -M override global daemon config parameter --no-detach do not detach from the parent --port=PORT listen on alternate port number --log-file=FILE override the "log file" setting --log-file-format=FMT override the "log format" setting --sockopts=OPTIONS specify custom TCP options --verbose, -v increase verbosity --ipv4, -4 prefer IPv4 --ipv6, -6 prefer IPv6 --help, -h show this help (when used with --daemon)
گزینهها (OPTIONS)
برنامه rsync هم گزینههای طولانی (دو خط تیره + کلمه) و هم کوتاه (یک خط تیره + حرف) را میپذیرد. فهرست کامل گزینههای موجود در زیر شرح داده شده است. اگر یک گزینه را بتوان به بیش از یک روش مشخص کرد، گزینهها با ویرگول از یکدیگر جدا شدهاند. برخی از گزینهها فقط دارای حالت طولانی هستند و حالت کوتاه ندارند.
اگر گزینهای پارامتر دریافت کند، آن پارامتر فقط بعد از حالت طولانی فهرست میشود، هرچند که برای حالت کوتاه نیز باید تعیین شود. هنگام مشخص کردن یک پارامتر، میتوانید از قالبهای --option=param، --option param، -o=param، -o param، یا -oparam استفاده کنید (حالتهای آخر فرض میکنند که گزینه شما دارای یک حالت کوتاه است).
ممکن است لازم باشد پارامتر به نحوی داخل نقلقول قرار گیرد تا در حین پردازش خط فرمان توسط پوسته (shell) بدون تغییر باقی بماند. همچنین به یاد داشته باشید که علامت تیلدا (~) در ابتدای مسیر پرونده توسط پوسته جایگزین میشود، بنابراین اگر میخواهید پوسته محلی آن را بسط دهد، حتماً نام گزینه را با یک فاصله (به جای علامت مساوی) از مسیر جدا کنید.
- --help
- یک صفحه راهنمای کوتاه در شرح گزینههای موجود در rsync چاپ کرده و خارج میشود. همچنین میتوانید از -h به جای --help استفاده کنید مشروط بر اینکه بدون هیچ گزینه یا آرگومان دیگری استفاده شود (چرا که در غیر این صورت به معنای --human-readable خواهد بود).
- --version, -V
- نسخه rsync را به همراه اطلاعات دیگر چاپ کرده و خارج میشود. در صورت تکرار، اطلاعات با ساختار JSON خروجی داده میشوند که همچنان برای انسان خوانا است (فقط در سمت کلاینت).
- خروجی شامل فهرستی از قابلیتهای کامپایلشده، فهرستی از بهینهسازیها، فهرست پیشفرض الگوریتمهای checksum، فهرست پیشفرض الگوریتمهای فشردهسازی، فهرست پیشفرض شیوههای احراز هویت دیمن، پیوندی به وبسایت rsync و چند مورد دیگر است.
- --verbose, -v
- این گزینه میزان اطلاعاتی را که در طول انتقال دریافت میکنید افزایش میدهد. به طور پیشفرض، rsync بدون خروجی متنی کار میکند. یک گزینه -v تنها، اطلاعاتی درباره پروندههای در حال انتقال و یک خلاصه کوتاه در پایان ارائه میدهد. استفاده از دو گزینه -v اطلاعاتی درباره پروندههای نادیدهگرفتهشده و جزئیات کمی بیشتر در پایان ارائه میکند. استفاده از بیش از دو گزینه -v تنها زمانی باید به کار رود که در حال اشکالزدایی (debug) برنامه rsync هستید.
- خلاصه پایان کار، تعداد بایتهای ارسالشده به rsync راهدور (که در یک رونوشت محلی همان سمت گیرنده است)، تعداد بایتهای دریافت شده از میزبان راهدور، و میانگین بایت بر ثانیه دادههای منتقلشده در کل مدت زمان اجرای rsync را گزارش میدهد. خط دوم اندازه کل (به بایت) را نشان میدهد، که مجموع اندازه تمام پروندههایی است که rsync آنها را برای انتقال بررسی کرده است. همچنین مقدار «speedup» را نشان میدهد که حاصل تقسیم اندازه کل پروندهها بر مجموع بایتهای ارسالشده و دریافتشده است (که صرفاً یک شاخص تقریبی است و مقدار بیشتر آن مطلوبتر است). توجه داشته باشید که این مقادیر بایتی را میتوان با استفاده از گزینههای --human-readable (یا --no-human-readable) خواناتر (یا با جزئیات عددی دقیقتر) کرد.
- گزینه -v معادل تنظیم گروههایی از گزینههای --info و --debug است. شما میتوانید این گزینههای جدیدتر را علاوه بر --verbose یا به جای آن استفاده کنید، چرا که هر تنظیم دقیق (fine-grained) بر تنظیمات ضمنی -v مقدم است. هر دو گزینه --info و --debug دارای متن راهنمایی هستند که مشخص میکند دقیقاً چه پرچمهایی برای هر سطح افزایش پرگویی (verbosity) تنظیم میشوند (از --info=help یا --debug=help برای مشاهده آنها استفاده کنید).
- با این حال، به یاد داشته باشید که تنظیم «max verbosity» دیمن، حداکثر مقدار پرچمهای مجزای قابل تنظیم در سمت دیمن را محدود میکند. برای نمونه، اگر حداکثر ۲ باشد، هر پرچم info و/یا debug که مقداری بالاتر از مقدار تنظیمشده توسط -vv داشته باشد، در گزارشهای دیمن به سطح -vv تنزل خواهد یافت.
- --info=FLAGS
- این گزینه به شما امکان کنترل دقیق بر خروجی اطلاعاتی که میخواهید ببینید را میدهد. نام هر پرچم مجزا میتواند با یک شماره سطح همراه باشد؛ 0 به معنای غیرفعال کردن آن خروجی، 1 سطح خروجی پیشفرض، و اعداد بالاتر افزایشدهنده خروجی آن پرچم هستند (برای مواردی که از سطوح بالاتر پشتیبانی میکنند). از --info=help برای مشاهده تمام نام پرچمهای موجود، خروجی آنها و اینکه چه پرچمهایی برای هر افزایش سطح پرگویی اضافه میشوند استفاده کنید. چند مثال:
-
rsync -a --info=progress2 src/ dest/ rsync -avv --info=stats2,misc1,flist0 src/ dest/
- توجه داشته باشید که خروجی --info=name تحت تأثیر گزینههای --out-format و --itemize-changes (-i) قرار دارد. برای اطلاعات بیشتر درباره نحوه و زمان ارسال خروجی، آن گزینهها را ببینید.
- این گزینه در نسخه 3.1.0 (منتشر شده در سپتامبر 2013) اضافه شد، بنابراین rsync قدیمیتر در سمت سرور ممکن است تلاشهای شما برای کنترل دقیق را رد کند. همچنین هنگام تعامل با یک دیمن، هشدار «max verbosity» در بالا را ببینید.
- --debug=FLAGS
- این گزینه به شما امکان کنترل دقیق بر خروجی اشکالزدایی (debug) که میخواهید ببینید را میدهد. نام هر پرچم مجزا میتواند با یک شماره سطح همراه باشد؛ 0 به معنای غیرفعال کردن آن خروجی، 1 سطح خروجی پیشفرض، و اعداد بالاتر افزایشدهنده خروجی آن پرچم هستند (برای مواردی که از سطوح بالاتر پشتیبانی میکنند). از --debug=help برای مشاهده تمام نام پرچمهای موجود، خروجی آنها و پرچمهای اضافهشده با هر افزایش سطح پرگویی استفاده کنید. چند مثال:
-
rsync -avvv --debug=none src/ dest/ rsync -avA --del --debug=del2,acl src/ dest/
- توجه داشته باشید که برخی پیامهای اشکالزدایی تنها در صورت مشخص شدن گزینه --stderr=all در خروجی ظاهر میشوند، بهویژه پیامهای مربوط به اشکالزدایی I/O و بافر.
- این گزینه توسط کلاینت به سمت سرور ارسال نمیشود، بنابراین میتوانید مقادیر اشکالزدایی متفاوتی را برای هر سمت انتقال مشخص کنید. این قابلیت همچنین به شما امکان میدهد گزینههای اشکالزدایی را مشخص کنید که تنها در یکی از نسخههای rsync وجود دارند. اگر میخواهید گزینه یکسانی را در هر دو سمت تکرار کنید، استفاده از بسط آکولاد (brace expansion) روشی آسان برای صرفهجویی در تایپ است. این روش در zsh و bash کار میکند:
-
rsync -aiv {-M,}--debug=del2 src/ dest/
- --stderr=errors|all|client
- این گزینه کنترل میکند که کدام فرآیندها در stderr خروجی تولید کنند و آیا پیامهای اطلاعرسانی به جای stdout به stderr ارسال شوند یا خیر. رشتههای حالت را میتوان تا یک حرف تکی مخفف کرد. ۳ انتخاب ممکن عبارتند از:
- o
- errors - (پیشفرض) باعث میشود تمام فرایندهای rsync خطاها را مستقیماً به stderr ارسال کنند، حتی اگر فرایند در سمت دوردست انتقال باشد. پیامهای اطلاعاتی از طریق جریان پروتکل به سمت کلاینت ارسال میشوند. اگر stderr در دسترس نباشد (مثلاً هنگام اتصال مستقیم با یک دیمن از طریق سوکت) ارسال خطاها به جریان پروتکل واگذار میشود.
- o
- all - باعث میشود تمام پیامهای rsync (اطلاعاتی و خطا) از تمام فرایندهای (ممکن) مستقیماً روی stderr نوشته شوند. این کار باعث میشود stderr بهصورت خطبهخط بافر شود (بهجای بدون بافر بودن) و امکان تفکیک پیامهای اطلاعاتی و خطا بر اساس دستگیره فایل را از بین میبرد. برای کسانی که اشکالزدایی میکنند یا از چندین سطح پرحرفی استفاده میکنند، این گزینه میتواند به جلوگیری از مسدود شدن جریان انتقال کمک کند (که باید از هرگونه احتمال قفل شدن ناشی از بنبست جلوگیری کند). همچنین به --debug اجازه میدهد تا برخی پیامهای اضافی مرتبط با I/O را فعال کند.
- o
- client - باعث میشود تمام پیامهای rsync از طریق جریان پروتکل به سمت کلاینت ارسال شوند. یک فرایند کلاینت تمام پیامها را خروجی میدهد، خطاها روی stderr و پیامهای اطلاعاتی روی stdout. این حالت در نسخههای قدیمیتر rsync پیشفرض بود، اما زمانی که حجم زیادی از دادههای انتقال پیش از پیامها قرار دارد میتواند باعث تاخیر در نمایش خطا شود. اگر پروندهها را به یک rsync قدیمیتر ارسال میکنید، ممکن است بخواهید از --stderr=all استفاده کنید زیرا این ساختار چندین نسخه است که وجود دارد.
- برنامه rsync همچنین گزینههای قدیمی --msgs2stderr و --no-msgs2stderr را به ترتیب معادل تنظیمات all و client میپذیرد و در صورتی که rsync دوردست نسخه قدیمیتری باشد، هنگام ارسال تنظیمات غیرپیشفرض به سمت دوردست از آنها استفاده میکند.
- --quiet, -q
- این گزینه مقدار اطلاعاتی را که در طول انتقال به شما داده میشود کاهش میدهد، بهویژه پیامهای اطلاعاتی را از سمت کارساز دوردست سرکوب میکند. این گزینه هنگام فراخوانی rsync از طریق cron مفید است.
- --no-motd
- این گزینه بر اطلاعاتی که توسط کلاینت در شروع انتقال دیمن خروجی داده میشود تأثیر میگذارد. این گزینه متن پیام روز (MOTD) را سرکوب میکند، اما بر فهرست ماژولهایی که دیمن در پاسخ به درخواست "rsync host::" ارسال میکند نیز تأثیر میگذارد (به دلیل محدودیت در پروتکل rsync)، بنابراین اگر میخواهید فهرست ماژولها را از دیمن درخواست کنید، این گزینه را نادیده بگیرید.
- --ignore-times, -I
- به طور معمول rsync از هر پروندهای که از قبل اندازه یکسان و برچسب زمانی ویرایش یکسانی داشته باشد صرفنظر میکند. این گزینه رفتار «بررسی سریع» را خاموش کرده و باعث میشود همه پروندهها بهروزرسانی شوند.
- این گزینه میتواند در مقایسه با --ignore-existing و --ignore-non-existing گیجکننده باشد، از این جهت که آن گزینهها باعث میشوند rsync پروندههای کمتری را منتقل کند، در حالی که این گزینه باعث میشود rsync پروندههای بیشتری را انتقال دهد.
- --size-only
- این گزینه الگوریتم «بررسی سریع» rsync را برای یافتن پروندههایی که نیاز به انتقال دارند تغییر میدهد؛ آن را از حالت پیشفرضِ انتقال پروندههایی با اندازه تغییریافته یا زمان آخرین ویرایش تغییریافته، به صرفاً جستجوی پروندههایی که فقط اندازه آنها تغییر کرده تبدیل میکند. این مورد زمانی مفید است که استفاده از rsync را پس از یک سیستم آینهای دیگر آغاز میکنید که ممکن است برچسبهای زمانی را دقیقاً حفظ نکرده باشد.
- --modify-window=NUM, -@
- هنگام مقایسه دو برچسب زمانی، اگر اختلاف آنها بیشتر از مقدار modify-window نباشد، rsync آنها را برابر در نظر میگیرد. مقدار پیشفرض 0 است که تنها ثانیههای صحیح را مطابقت میدهد. اگر یک مقدار منفی تعیین کنید (و نسخه گیرنده حداقل 3.1.3، منتشرشده در ژانویه 2018 باشد)، نانوثانیهها نیز در نظر گرفته خواهند شد. تعیین مقدار 1 برای رونوشتها به/از سیستمهای پرونده FAT ویندوز مایکروسافت مفید است، زیرا FAT زمانها را با دقت 2 ثانیهای نشان میدهد (به زمانها اجازه میدهد تا حداکثر 1 ثانیه با نسخه اصلی تفاوت داشته باشند).
- اگر میخواهید تمام انتقالهای شما بهطور پیشفرض نانوثانیهها را مقایسه کنند، میتوانید یک پرونده ~/.popt ایجاد کرده و این خطوط را در آن قرار دهید:
-
rsync alias -a -a@-1 rsync alias -t -t@-1
- با قرار گرفتن این مقدار به عنوان پیشفرض، باید گزینهٔ --modify-window=0 (یا -@0) را برای بازنویسی آن و نادیده گرفتن نانوثانیهها مشخص کنید؛ به عنوان مثال اگر در حال رونوشت بین ext3 و ext4 هستید، یا rsync دریافتکننده قدیمیتر از نسخهٔ 3.1.3 است.
- --checksum, -c
- این گزینه روش بررسی rsync برای تشخیص تغییر فایلها و نیاز آنها به انتقال را تغییر میدهد. بدون این گزینه، rsync از یک «بررسی سریع» استفاده میکند که (بهطور پیشفرض) مطابقت اندازه و زمان آخرین تغییر هر فایل را بین فرستنده و گیرنده بررسی میکند. این گزینه این رفتار را تغییر میدهد تا برای هر فایلی که اندازهٔ یکسانی دارد، یک چِکسام (checksum) مقایسه شود. تولید چکسامها به این معنی است که هر دو طرف I/O دیسک زیادی را برای خواندن تمام دادههای فایلهای موجود در انتقال صرف میکنند، بنابراین این کار میتواند سرعت را به میزان قابل توجهی کاهش دهد (و این مورد قبل از هرگونه خواندنی است که برای انتقال فایلهای تغییریافته انجام میشود).
- طرف فرستنده چکسامهای خود را هنگام پویش سامانهٔ پرونده که فهرست فایلهای موجود را میسازد، تولید میکند. گیرنده چکسامهای خود را هنگام پویش برای فایلهای تغییریافته تولید میکند و برای هر فایلی که اندازهای برابر با فایل متناظر در فرستنده داشته باشد، چکسام محاسبه میکند: فایلهایی با اندازهٔ تغییریافته یا چکسام تغییریافته برای انتقال انتخاب میشوند.
- توجه داشته باشید که rsync معمولاً با بررسی یک چکسام از کل فایل که هنگام انتقال فایل تولید میشود، تأیید میکند که هر فایل منتقلشده به درستی در طرف گیرنده بازسازی شده است؛ اما این تأیید خودکار پس از انتقال، هیچ ارتباطی با بررسی پیش از انتقال این گزینه برای پرسش «آیا این فایل نیاز به بهروزرسانی دارد؟» ندارد.
- چکسامِ مورد استفاده بهطور خودکار بین کلاینت و سرور توافق میشود، اما میتوان آن را با استفاده از گزینهٔ --checksum-choice (--cc) یا متغیر محیطی که در بخش مربوط به آن گزینه توضیح داده شده است، بازنویسی کرد.
- --archive, -a
- این گزینه معادل -rlptgoD است. روشی سریع برای بیان این است که رونوشت بازگشتی میخواهید و میخواهید تقریباً همه چیز حفظ شود. توجه داشته باشید که این گزینه شامل حفظ ACLها (-A)، ویژگیهای پیشرفته xattrs (-X)، زمانهای دسترسی atimes (-U)، زمانهای ساخت crtimes (-N)، یا یافتن و حفظ پیوندهای سخت (-H) نمیشود.
- تنها استثنا برای همارزی بالا زمانی است که --files-from مشخص شده باشد، که در این حالت -r اعمال نمیشود.
- --no-OPTION
- میتوانید یک یا چند گزینهٔ ضمنی را با افزودن پیشوند "-no" به ابتدای نام گزینه خاموش کنید. همهٔ گزینههای مثبت دارای معادل نقیض نیستند، اما بسیاری از آنها اینگونه هستند؛ از جمله مواردی که میتوان برای غیرفعال کردن یک گزینهٔ ضمنی استفاده کرد (مانند --no-D، --no-perms) یا مواردی که در شرایط مختلف پیشفرضهای متفاوتی دارند (مانند --no-whole-file، --no-blocking-io، --no-dirs). هر گزینهٔ نقیض معتبر، هر دو نام کوتاه و بلند گزینه را پس از پیشوند "-no" میپذیرد (مانند --no-R که همان --no-relative است).
- به عنوان مثال، اگر میخواهید از --archive (-a) استفاده کنید اما گزینهٔ --owner (-o) را نمیخواهید، به جای تبدیل -a به -rlptgD، میتوانید -a --no-o (یا --archive --no-owner) را مشخص کنید.
- ترتیب گزینهها مهم است: اگر --no-r -a را مشخص کنید، گزینهٔ -r در نهایت فعال خواهد شد، که برعکس -a --no-r است. همچنین توجه داشته باشید که عوارض جانبی گزینهٔ --files-from وابسته به موقعیت مکانی نیست، زیرا بر وضعیت پیشفرض چندین گزینه اثر میگذارد و معنای -a را کمی تغییر میدهد (برای جزئیات بیشتر به گزینهٔ --files-from مراجعه کنید).
- --recursive, -r
- این به rsync میگوید که دایرکتوریها را بهصورت بازگشتی رونوشت کند. همچنین --dirs (-d) را برای گزینهای که امکان پویش یک تکدایرکتوری را فراهم میکند، ببینید.
- برای توضیحات مربوط به بازگشت افزایشی جهت ساخت فهرست فایلها برای انتقال، گزینهٔ --inc-recursive را ببینید.
- --inc-recursive, --i-r
- این گزینه بازگشتپذیری افزایشی را هنگام پویش فایلها بهطور صریح فعال میکند؛ این ویژگی هنگام استفاده از گزینه --recursive و در صورتی که هر دو طرف انتقال rsync نسخه 3.0.0 (منتشر شده در مارس ۲۰۰۸) یا جدیدتر را اجرا کنند، بهطور پیشفرض فعال است.
- بازگشتپذیری افزایشی حافظه بسیار کمتری نسبت به حالت غیرافزایشی مصرف میکند و انتقال را نیز سریعتر آغاز میکند (زیرا نیازی به پویش کل ساختار درختی پیش از شروع انتقال فایلها ندارد). اگر هیچ بازگشتپذیری در فایلهای مبدأ فعال نباشد، این گزینه تأثیری نخواهد داشت.
- برخی گزینهها نیازمند آگاهی rsync از کل فهرست فایلها هستند، بنابراین این گزینهها حالت بازگشتپذیری افزایشی را غیرفعال میکنند. این موارد عبارتند از:
- جهت سازگاری با بازگشتپذیری افزایشی، --delete-during حالت پیشفرض حذف برای --delete است.
- یکی از اثرات جانبی بازگشتپذیری افزایشی این است که زیرپوشههای ناموجود درون پوشهای که بهصورت بازگشتی پویش میشود، (بهطور پیشفرض) قبل از پیمایش درون آن زیرپوشهها ایجاد میشوند. این ایجاد زودهنگام (در مقایسه با بازگشتپذیری غیرافزایشی) به rsync اجازه میدهد زمان تغییر دایرکتوری تکمیلشده را بلافاصله تنظیم کند (بدون نیاز به معطل ماندن تا پایان رونوشت بازگشتی مجموعه فایلها). با این حال، این دایرکتوریهای اولیه هنوز mode، mtime یا مالکیت نهایی خود را ندارند -- آنها تا زمان شروع واقعی رونوشت زیرپوشه، دسترسیهای محدودکنندهتری خواهند داشت. با استفاده از گزینه --omit-dir-times میتوان از این رفتار ساخت زودهنگام جلوگیری کرد.
- بازگشتپذیری افزایشی را میتوان با استفاده از گزینه --no-inc-recursive (--no-i-r) غیرفعال کرد.
- --no-inc-recursive, --no-i-r
- الگوریتم بازگشتپذیری افزایشی گزینه --recursive را غیرفعال میکند. این امر باعث میشود rsync قبل از شروع انتقال فایلها، کل فهرست فایلها را پویش کند. برای اطلاعات بیشتر --inc-recursive را ببینید.
- --relative, -R
- استفاده از مسیرهای نسبی. بدین معنا که نام مسیرهای کامل مشخصشده در خط فرمان به جای فقط بخش انتهایی نام فایلها، به سرور ارسال میشوند. این ویژگی بهویژه زمانی مفید است که میخواهید چندین دایرکتوری مختلف را بهطور همزمان ارسال کنید. برای مثال، این دستور:
-
rsync -av /foo/bar/baz.c remote:/tmp/
- فایلی با نام baz.c در /tmp/ روی ماشین دوردست ایجاد میکند. اگر در عوض از این دستور استفاده کنید:
-
rsync -avR /foo/bar/baz.c remote:/tmp/
- آنگاه فایلی به نام /tmp/foo/bar/baz.c روی ماشین دوردست ایجاد میشود و مسیر کامل آن حفظ میگردد. این بخشهای اضافی مسیر "دایرکتوریهای ضمنی" نامیده میشوند (مانند دایرکتوریهای "foo" و "foo/bar" در مثال بالا).
- ابزار rsync همیشه این دایرکتوریهای ضمنی را به عنوان دایرکتوریهای واقعی در فهرست فایلها ارسال میکند، حتی اگر یکی از بخشهای مسیر در سمت فرستنده در واقع یک پیوند نمادین (symlink) باشد. این کار از برخی رفتارهای کاملاً غیرمنتظره هنگام رونوشت مسیر کامل فایلی که در مسیر خود پیوند نمادین دارد، جلوگیری میکند. اگر میخواهید یک پیوند نمادین در سمت سرور را تکثیر کنید، هم خود پیوند نمادین را از طریق مسیرش و هم دایرکتوری مرجع را از طریق مسیر واقعیاش لحاظ کنید. اگر در سمت فرستنده با نسخه قدیمیتر rsync سروکار دارید، ممکن است نیاز به استفاده از گزینه --no-implied-dirs داشته باشید.
- همچنین امکان محدود کردن مقدار اطلاعات مسیری که به عنوان دایرکتوریهای ضمنی برای هر مسیر مشخصشده ارسال میشود، وجود دارد. با یک نسخه مدرن rsync در سمت فرستنده (از نسخه 2.6.7، منتشر شده در مارس ۲۰۰۶)، میتوانید یک نقطه و یک اسلش در مسیر مبدأ درج کنید، مانند این:
-
rsync -avR /foo/./bar/baz.c remote:/tmp/
- این دستور /tmp/bar/baz.c را در رایانه گیرنده ایجاد میکند. (توجه داشته باشید که بعد از نقطه حتماً باید اسلش بیاید، بنابراین «/foo/.» کوتاه نخواهد شد.) برای نسخههای قدیمیتر rsync، لازم است برای محدود کردن مسیر مبدأ، دایرکتوری را تغییر دهید. برای مثال، هنگام ارسال فایلها:
-
(cd /foo; rsync -avR bar/baz.c remote:/tmp/)
- (توجه داشته باشید که پرانتزها دو دستور را در یک زیرپوسته قرار میدهند تا دستور «cd» برای دستورات بعدی اعمال نشود.) اگر در حال دریافت فایلها از یک نسخه قدیمیتر rsync هستید، از این روش استفاده کنید (اما فقط برای انتقالهای غیردیمن):
-
rsync -avR --rsync-path="cd /foo; rsync" \ remote:bar/baz.c /tmp/
- --no-implied-dirs
- این گزینه بر رفتار پیشفرض گزینه --relative تأثیر میگذارد. هنگامی که مشخص شود، ویژگیهای دایرکتوریهای ضمنی برگرفته از نامهای مبدأ در انتقال لحاظ نمیشوند. این بدان معناست که بخشهای مسیر مربوطه در سیستم مقصد در صورت وجود بدون تغییر باقی میمانند، و هرگونه دایرکتوری ضمنیِ ناموجود با ویژگیهای پیشفرض ایجاد میشود. این کار حتی اجازه میدهد تا این بخشهای مسیر ضمنی تفاوتهای بزرگی داشته باشند، مانند اینکه در سمت گیرنده یک پیوند نمادین به یک دایرکتوری باشند.
- به عنوان مثال، اگر یک آرگومان خط فرمان یا یک ورودی files-from به rsync بگوید پرونده «path/foo/file» را منتقل کند، دایرکتوریهای «path» و «path/foo» هنگام استفاده از --relative ضمنی تلقی میشوند. اگر «path/foo» در سیستم مقصد یک پیوند نمادین به «bar» باشد، rsync گیرنده در حالت عادی «path/foo» را حذف میکند، آن را مجدداً به عنوان یک دایرکتوری میسازد، و پرونده را در دایرکتوری جدید دریافت میکند. با --no-implied-dirs، rsync گیرنده پیوند نمادینِ موجودِ «path/foo» را در جای خود باقی میگذارد و آن را دنبال میکند، بنابراین پرونده از طریق پیوند نمادین نوشته شده و در نهایت به «path/bar» میرسد. به پیامد امنیتی توجه کنید: یک پیوند نمادین به دایرکتوری از پیش موجود در درون درخت مقصد، محل نوشته شدن پرونده را تغییر جهت میدهد؛ بنابراین فقط زمانی از --no-implied-dirs استفاده کنید که به بخشهای مسیر موجود در مقصد اعتماد دارید. (پیوند نمادینی که هدف آن مطلق باشد یا از درخت مقصد خارج شود، همچنان توسط تحلیلگر مسیر امن رد میشود و دنبال نمیگردد.) روش دیگر برای حفظ این پیوند، استفاده از گزینه --keep-dirlinks است (که همچنین بر پیوندهای نمادین به دایرکتوریها در بقیه انتقال نیز تأثیر خواهد گذاشت).
- هنگام دریافت فایلها از یک نسخه rsync قدیمیتر از 3.0.0 (مارس ۲۰۰۸)، در صورتی که سمت فرستنده پیوند نمادینی در مسیر درخواستی شما داشته باشد و بخواهید دایرکتوریهای ضمنی به عنوان دایرکتوریهای معمولی منتقل شوند، ممکن است نیاز به استفاده از این گزینه داشته باشید.
- --backup, -b
- با این گزینه، پروندههای مقصد از قبل موجود با انتقال یا حذف هر پرونده تغییر نام پیدا میکنند (یعنی هر پروندهای که قرار است حذف شود یا رونویسی گردد، در عوض تغییر نام مییابد). شما میتوانید با استفاده از گزینههای --backup-dir و --suffix کنترل کنید که پرونده پشتیبان به کجا برود و چه پسوندی (در صورت وجود) اضافه شود.
- اگر --backup-dir را مشخص نکنید:
- 1.
- گزینه --omit-dir-times به اجبار فعال خواهد شد
- 2.
- استفاده از --delete (بدون --delete-excluded)، باعث میشود rsync یک قاعده فیلتر "protect" برای پسوند پشتیبان به انتهای همه فیلترهای موجود شما اضافه کند که شبیه این است: -f "P *~". این قاعده از حذف پروندههای پشتیبانگیریشده قبلی جلوگیری میکند.
- توجه داشته باشید که اگر قواعد فیلتر خودتان را ارائه میدهید، ممکن است نیاز باشد قاعده exclude/protect خود را بهصورت دستی در جایی بالاتر در فهرست قرار دهید تا اولویت کافی برای مؤثر بودن داشته باشد (به عنوان مثال اگر قواعد شما شامل یک استثنا/درج پایانی * باشد، قاعده خودکار اضافهشده هرگز در دسترس نخواهد بود).
- --backup-dir=DIR
- این گزینه به طور ضمنی گزینه --backup را فعال میکند و به rsync میگوید تمام پشتیبانها را در دایرکتوری مشخصشده در سمت گیرنده ذخیره کند. این مورد میتواند برای پشتیبانگیریهای افزایشی استفاده شود. شما همچنین میتوانید با استفاده از گزینه --suffix یک پسوند پشتیبان مشخص کنید (در غیر این صورت پروندههای پشتیبانگیریشده در دایرکتوری مشخصشده نام اصلی پرونده خود را حفظ خواهند کرد).
- توجه داشته باشید که اگر یک مسیر نسبی مشخص کنید، دایرکتوری پشتیبان نسبت به دایرکتوری مقصد خواهد بود، بنابراین احتمالاً میخواهید یک مسیر مطلق یا مسیری که با "../" شروع میشود مشخص کنید. اگر یک دیمن rsync گیرنده باشد، دایرکتوری پشتیبان نمیتواند خارج از سلسلهمراتب مسیر ماژول باشد، بنابراین مراقبت بیشتری به خرج دهید تا بهطور ناخواسته در دایرکتوری پشتیبان حذفی انجام ندهید یا کپی نکنید.
- --suffix=SUFFIX
- این گزینه به شما اجازه میدهد پسوند پشتیبان پیشفرض استفادهشده با گزینه --backup (-b) را لغو کنید. در صورتی که --backup-dir مشخص نشده باشد، پسوند پیشفرض یک ~ است، در غیر این صورت یک رشته خالی است.
- --update, -u
- این گزینه rsync را مجبور میکند از هر پروندهای که در مقصد وجود دارد و زمان ویرایش آن جدیدتر از پرونده مبدأ است، صرفنظر کند. (اگر یک پرونده موجود در مقصد زمان ویرایشی برابر با پرونده مبدأ داشته باشد، در صورت متفاوت بودن اندازهها بهروزرسانی خواهد شد.)
- توجه داشته باشید که این موضوع روی رونوشت دایرکتوریها، پیوندهای نمادین یا سایر پروندههای خاص تأثیری ندارد. همچنین، تفاوت نوع شیء بین فرستنده و گیرنده همیشه برای بهروزرسانی به اندازه کافی مهم تلقی میشود، صرفنظر از اینکه چه تاریخی روی اشیاء ثبت شده باشد. به عنوان مثال، اگر مبدأ دارای یک دایرکتوری باشد در حالی که مقصد دارای یک پرونده است، انتقال بدون توجه به برچسبهای زمانی انجام خواهد شد.
- این گزینه یک TRANSFER RULE است، بنابراین انتظار هیچگونه اثر جانبی استثناکردن را نداشته باشید.
- یک هشدار برای کسانی که ترکیب --inplace با --update را انتخاب میکنند: یک انتقال قطعشده، پروندهای ناقص با زمان ویرایش بسیار جدید در سمت گیرنده به جا میگذارد، بنابراین اجرای مجدد انتقال احتمالاً پرونده قطعشده را ادامه نخواهد داد. به این ترتیب، معمولاً بهتر است از ترکیب این گزینه با --inplace خودداری کنید، مگر اینکه مراحل دستی برای رسیدگی به پروندههای ناتمام و قطعشده ایجاد کرده باشید.
- --inplace
- این گزینه نحوه انتقال پرونده توسط rsync را هنگام نیاز به بهروزرسانی دادههای آن تغییر میدهد: به جای روش پیشفرض ایجاد یک نسخه جدید از پرونده و انتقال آن به محل مربوطه پس از تکمیل، rsync دادههای بهروزرسانیشده را مستقیماً روی پرونده مقصد مینویسد.
- این کار چندین اثر دارد:
- o
- پیوندهای سخت (Hard links) شکسته نمیشوند. این بدان معناست که دادههای جدید از طریق سایر پیوندهای سخت به پرونده مقصد نیز قابل مشاهده خواهند بود. علاوهبر این، تلاش برای رونوشت پروندههای مبدأ متفاوت روی پرونده مقصدی با پیوندهای چندگانه، منجر به یک «طنابکشی» و تغییر مداوم دادههای مقصد به عقب و جلو میشود.
- o
- پروندههای اجرایی (باینریهای) در حال استفاده را نمیتوان بهروزرسانی کرد (سیستمعامل مانع این کار میشود، یا باینریهایی که سعی در بارگذاری دادههای خود دارند دچار رفتار ناهنجار شده یا کرش میکنند).
- o
- دادههای پرونده در طول انتقال در وضعیتی ناسازگار خواهند بود و در صورت متوقف شدن انتقال یا شکست در بهروزرسانی، به همان شکل باقی خواهند ماند.
- o
- پروندهای که rsync اجازه نوشتن روی آن را ندارد، قابل بهروزرسانی نیست. در حالی که کاربر ارشد (super user) میتواند هر پروندهای را بهروزرسانی کند، کاربر عادی برای باز کردن موفق پرونده جهت نوشتن، نیاز به داشتن مجوز نوشتن دارد.
- o
- کارایی الگوریتم delta-transfer برنامه rsync ممکن است کاهش یابد اگر بخشی از دادههای پرونده مقصد قبل از رونوشت شدن به موقعیت بعدی در پرونده، بازنویسی شوند. این موضوع در صورت استفاده از --backup صدق نمیکند، زیرا rsync آنقدر هوشمند است که از پرونده پشتیبان بهعنوان پرونده مبنا برای انتقال استفاده کند.
- هشدار: نباید از این گزینه برای بهروزرسانی پروندههایی که توسط دیگران در حال دسترسی هستند استفاده کنید، بنابراین هنگام استفاده از این مورد برای رونوشت دقت کنید.
- این گزینه برای انتقال پروندههای بزرگ با تغییرات مبتنی بر بلوک یا دادههای الحاقی، و همچنین در سیستمهایی با گلوگاه دیسک (و نه گلوگاه شبکه) مفید است. همچنین میتواند از تغییر کامل محتوای پروندهای با تغییرات جزئی در اسنپشات سامانههای پرونده با قابلیت copy-on-write جلوگیری کند.
- این گزینه بهطور ضمنی --partial را فعال میکند (زیرا انتقال متوقفشده پرونده را حذف نمیکند)، اما با --partial-dir و --delay-updates تداخل دارد.
- --append
- این حالت رونوشت ویژه فقط برای بهروزرسانی پروندههایی کاربرد دارد که مشخصاً در حال رشد و بزرگتر شدن هستند؛ یعنی هرگونه محتوای موجود در سمت گیرنده دقیقاً مشابه محتوای موجود در سمت فرستنده است. استفاده از --append در صورتی که ۱۰۰٪ مطمئن نباشید تمام پروندههای موجود در فرایند انتقال اشتراکی و در حال رشد هستند میتواند خطرناک باشد. بنابراین باید از قواعد فیلتر استفاده کنید تا پروندههایی که با این معیار همخوانی ندارند حذف شوند.
- برنامه rsync این پروندههای در حال رشد را در محل (in-place) بدون اعتبارسنجی محتوای موجود در پرونده بهروزرسانی میکند (تنها محتوای الحاقی را اعتبارسنجی میکند). rsync از پروندههای سمت گیرنده که کوچکتر از پرونده متناظر در سمت فرستنده نیستند صرفنظر میکند. همچنین پروندههایی را که اندازه آنها در سمت فرستنده هنگام مذاکرات ارسال کاهش مییابد نادیده میگیرد (rsync در صورت وقوع این اتفاق درباره پرونده «تقلیلیافته» هشدار میدهد).
- این امر تداخلی با بهروزرسانی ویژگیهای غیرمحتوایی پرونده (مانند مجوزها، مالکیت و غیره) در زمانی که پرونده نیازی به انتقال ندارد ایجاد نمیکند، و همچنین بر بهروزرسانی پوشهها یا پروندههای غیرعادی تأثیری ندارد.
- --append-verify
- این حالت رونوشت ویژه شبیه به --append عمل میکند، با این تفاوت که تمام دادههای پرونده در اعتبارسنجی جمعکنترلی (checksum) گنجانده میشوند که باعث کارایی کمتر اما امنیت بالقوه بیشتر میشود. این گزینه در صورتی که ۱۰۰٪ مطمئن نباشید تمامی پروندههای انتقال اشتراکی و در حال رشد هستند میتواند خطرناک باشد. برای جزئیات بیشتر گزینه --append را ببینید.
- نکته: پیش از rsync نسخه 3.0.0 (مارس ۲۰۰۸)، گزینه --append مانند --append-verify عمل میکرد؛ بنابراین اگر با یک نسخه قدیمیتر rsync تعامل دارید (یا انتقال از پروتکل قدیمیتر از ۳۰ استفاده میکند)، مشخص کردن هر یک از گزینههای الحاق، یک انتقال از نوع --append-verify را آغاز خواهد کرد.
- --dirs, -d
- به سمت فرستنده اعلام میکند که هر دایرکتوری مشاهدهشده را شامل شود. برعکس --recursive، محتوای یک دایرکتوری کپی نمیشود مگر اینکه نام دایرکتوری مشخصشده «.» باشد یا با یک اسلش پایانی خاتمه یابد (مانند «.»، «dir/.»، «dir/» و غیره). بدون این گزینه یا گزینه --recursive، برنامه rsync تمام دایرکتوریهایی را که با آنها مواجه میشود نادیده میگیرد (و برای هرکدام پیامی صادر میکند). اگر هر دو گزینه --dirs و --recursive را مشخص کنید، --recursive اولویت خواهد داشت.
- در صورتی که --recursive مشخص نشده باشد، گزینه --dirs بهطور ضمنی توسط گزینه --files-from یا گزینه --list-only (شامل استفاده ضمنی از --list-only) فعال میشود (تا دایرکتوریها در فهرست دیده شوند). در صورت تمایل به غیرفعالسازی این حالت، --no-dirs (یا --no-d) را مشخص کنید.
- همچنین گزینه کمکی سازگاری عقبروی --old-dirs را ببینید.
- --old-dirs, --old-d
- این راهکار کمکی برای سازگاری عقبروی به rsync میگوید از ترفند -r --exclude='/*/*' استفاده کند تا یک rsync قدیمیتر راهدور بتواند بدون پیمایش بازگشتی، محتوای یک تکدایرکتوری را فهرست کند.
- --mkpath
- تمام بخشهای ناموجود در مسیر مقصد را ایجاد میکند.
- بهطور پیشفرض، rsync تنها آخرین بخش از مسیر مقصد را در صورت عدم وجود ایجاد میکند. اگر هر بخش دیگری وجود نداشته باشد خطا محسوب میشود، زیرا این امر به شناسایی اشتباهات در تعیین مسیر مقصد کمک میکند. با این گزینه، rsync تمام بخشهای ناموجود مسیر مقصد را ایجاد میکند، دقیقاً مانند زمانی که دستور mkdir -p $DEST_PATH در سمت گیرنده اجرا شده باشد.
- هنگام تعیین مسیر مقصد، قرار دادن یک اسلش در انتها تضمین میکند که کل مسیر بهعنوان نامهای دایرکتوری برای ایجاد در نظر گرفته شوند، حتی زمانی که فهرست فایلها فقط شامل یک مورد باشد. برای جزئیات کامل در مورد نحوه تصمیمگیری rsync درباره ایجاد شدن یا نشدن آخرین بخش مسیر مقصد بهعنوان دایرکتوری، بخش COPYING TO A DIFFERENT NAME را ببینید.
- اگر میخواهید دایرکتوریهای مقصدِ تازهساختهشده با دایرکتوریهای سمت فرستنده مطابقت داشته باشند، باید بهجای --mkpath از --relative (-R) استفاده کنید. برای نمونه، دو دستور زیر منجر به درخت مقصد یکسانی میشوند، اما فقط دستور دوم تضمین میکند که بخشهای "some/extra/path" با دایرکتوریهای سمت فرستنده مطابقت داشته باشند:
-
rsync -ai --mkpath host:some/extra/path/*.c some/extra/path/ rsync -aiR host:some/extra/path/*.c ./
- --links, -l
- پیوندهای نمادین را به فایلهای منتقلشده اضافه میکند، بهجای اینکه با صدور یک هشدار پر سر و صدای "non-regular file" برای هر پیوند نمادین مواجهشده، آنها را نادیده بگیرد. همچنین میتوانید با مشخص کردن --info=nonreg0 این هشدار را بیصدا کنید.
- رفتار پیشفرض با پیوندهای نمادین، بازتولید مقدار بدون تغییر هر پیوند نمادین در سمت گیرنده است.
- برای اطلاعات چندگزینهای، بخش پیوندهای نمادین (SYMBOLIC LINKS) را ببینید.
- --copy-links, -L
- فرستنده هر پیوند نمادین موجود در انتقال را با دنبال کردن زنجیره پیوند به فایل یا دایرکتوری مرجع، به موردِ هدف تبدیل میکند. اگر زنجیره پیوند نمادین شکسته باشد، خطایی صادر شده و فایل از فرایند انتقال کنار گذاشته میشود.
- از آنجا که هیچ پیوند نمادینی در فرایند انتقال باقی نمیماند، این گزینه جایگزین هر گزینه دیگری میشود که بر پیوندهای نمادین در انتقال تأثیر میگذارد.
- این گزینه نحوه رفتار با پیوندهای نمادین موجود در سمت گیرنده را تغییر نمیدهد.
- اگر نیاز دارید که یک پیوند نمادین به یک دایرکتوری در سمت گیرنده بهعنوان یک دایرکتوری واقعی در نظر گرفته شود، گزینه --keep-dirlinks (-K) را ببینید.
- برای اطلاعات چندگزینهای بخش SYMBOLIC LINKS را ببینید.
- --copy-unsafe-links
- این گزینه به rsync میگوید تا مرجع پیوندهای نمادینی که به خارج از درخت کپیشده اشاره میکنند را کپی کند. با پیوندهای نمادین مطلق نیز مانند فایلهای معمولی رفتار میشود، و همچنین با هر پیوند نمادینی در خود مسیر مبدأ هنگام استفاده از --relative به همین شکل برخورد میشود.
- یک پیوند نمادین بر اساس یک بررسی متنی روی مقدار آن، بدون ارزیابی آن روی دیسک، ناامن تشخیص داده میشود. یک مقصد مطلق یا خالی همیشه ناامن است. یک مقصد نسبی در صورتی ناامن است که مؤلفههای ".." آن به بالاتر از بالاترین سطح انتقال صعود کنند؛ یک ".." که در هر جایی غیر از پیشوند ابتدایی ظاهر شود (یک "/.." تعبیهشده یا انتهایی) نیز ناامن در نظر گرفته میشود. بالاترین سطح بر اساس نحوه مشخص شدن مبدأ تعیین میشود: یک اسلش انتهایی در مبدأ (مثلاً کپی شدن "/src/subdir/" به "/dest/subdir") خود آن دایرکتوری را بالاترین سطح قرار میدهد، بنابراین یک پیوند نمادین نباید به بالاتر از آن اشاره کند؛ بدون اسلش انتهایی (مثلاً کپی شدن "/src/subdir" به "/dest/")، والد مبدأ ("/src") بالاترین سطح است، بنابراین "subdir" نامی درون انتقال است و یک پیوند نمادین نسبی میتواند به هر نام دیگری درون آن اشاره کند.
- توجه داشته باشید که پیوندهای نمادین امن تنها در صورتی کپی میشوند که --links نیز مشخص شده یا به طور ضمنی فعال شده باشد. گزینه --copy-unsafe-links در صورت ترکیب با --copy-links هیچ اثر اضافی ندارد.
- برای اطلاعات چندگزینهای بخش SYMBOLIC LINKS را ببینید.
- --safe-links
- این به rsync گیرنده میگوید هر پیوند نمادینی در انتقال را که به خارج از درخت کپیشده اشاره میکند، نادیده بگیرد. تمام پیوندهای نمادین مطلق نیز نادیده گرفته میشوند.
- از آنجا که این نادیدهگیری در سمت گیرنده رخ میدهد، حتی اگر سمت فرستنده پیوندهای نمادین را تغییر داده باشد (هنگام استفاده از --munge-links) همچنان مؤثر خواهد بود. همچنین بر حذفها تأثیر میگذارد، زیرا حضور فایل در انتقال، هنگامی که پیوند نمادین ناامن تشخیص داده شده و رد میشود، از حذف هر فایل متناظر در گیرنده جلوگیری میکند.
- این گزینه هیچ اثری ندارد مگر اینکه با --links (یا گزینهای که شامل --links است مانند --archive) ترکیب شود، زیرا بدون --links هیچ پیوند نمادینی در انتقال وجود نخواهد داشت. اثر آن توسط --copy-unsafe-links جایگزین میشود.
- استفاده از این گزینه همراه با --relative ممکن است نتایج غیرمنتظرهای به همراه داشته باشد.
- برای اطلاعات چندگزینهای بخش SYMBOLIC LINKS را ببینید.
- --insecure-links
- بهطور پیشفرض، rsync مسیرهای دایرکتوری و فایلی را که عملگر در خط فرمان مشخص میکند، با یک پیمایش تدافعی درخت دایرکتوری ارزیابی میکند که تنها زمانی یک مؤلفه پیوند نمادین را دنبال میکند که متعلق به uid 0 یا کاربر در حال اجرا باشد، و پیوند متعلق به هر کاربر دیگری را رد میکند. این کار مانع از آن میشود که مهاجمی که میتواند درون یکی از آن دایرکتوریها بنویسد، پیوند نمادینی قرار دهد که rsync دارای دسترسی بالا را به مقصدی خارج از درخت مورد نظر هدایت کند، در حالی که همچنان پیوندهای نمادین خود کاربر ارائهدهنده را معتبر میشمارد. این قاعده برای مسیرهای مطلق و نسبی یکسان است. این مورد برای دایرکتوری مقصد و پارامترهای گزینههای زیر اعمال میشود: --backup-dir، --temp-dir/-T، --partial-dir، --link-dest، --compare-dest، --copy-dest، --log-file، --password-file، --files-from، --include-from، --exclude-from، فایلهای ادغام --filter، --write-batch و --read-batch.
- گزینه --insecure-links آن سازوکار تدافعی را غیرفعال میکند و رفتار پیشین مبنی بر دنبال کردن هر پیوند نمادینی در آن مسیرها را بازمیگرداند. تنها زمانی از آن استفاده کنید که به تمام دایرکتوریهای موجود در هر مسیر ارائهشده توسط کاربر کاملاً اعتماد دارید، چرا که خطرات هدایت پیوند نمادین را که این پیمایش مانع آن میشد مجدداً پدیدار میسازد.
- این گزینه فقط محلی است: به سمت دوردست انتقال ارسال نمیشود. یک همتای پوسته دوردست که به غیرفعالسازی این سازوکار نیاز دارد باید آن را در آنجا تنظیم کند (مثلاً از طریق --rsync-path)، و یک دیمن هرگز آن را نمیپذیرد -- دیمنی که --insecure-links را از کلاینت دریافت کند درخواست را رد میکند. مدیر دیمنی که رفتار قدیمی را برای یک ماژول مورد اعتماد تکی میخواهد، به جای آن "insecure links = yes" را در بخش مربوط به آن ماژول در rsyncd.conf(5) تنظیم میکند؛ یک کلاینت هرگز نمیتواند آن را فعال کند.
- برای اطلاعات درباره چندگزینهای، بخش «پیوندهای نمادین (SYMBOLIC LINKS)» را ببینید.
- --confine-root=DIR
- محل حلشدن مسیرهای فهرستشده تحت --insecure-links را محدود میکند: هر مسیری که به خارج از DIR ختم شود رد میشود، حتی اگر تمام پیوندهای نمادین در طول آن متعلق به کاربری معتمد باشند. پیمایش مالکیت میپرسد چه کسی پیوند را ایجاد کرده است؛ این گزینه میپرسد مسیر به کجا ختم شده است.
- مقدار DIR باید مطلق باشد. بهطور پیشفرض هیچچیز محدود نمیشود و --confine-root=/ هیچ اثری ندارد.
- این گزینه برای پوششهایی (wrapper) وجود دارد که یک دایرکتوری محدودشده را روی پوسته راهدور ارائه میدهند؛ rrsync که همراه این برنامه عرضه میشود از این دسته است و هر زمان که دایرکتوری محدودشده آن «/» نباشد، این گزینه را بهطور خودکار ارسال میکند. چنین پوششی میتواند argv تحویلدادهشده را بررسی کند، اما قواعد فیلتر از طریق پروتکل منتقل میشوند: یک کلاینت میتواند در قاعده dir-merge نام فایلی ادغامی خارج از دایرکتوری محدودشده را مشخص کند و سرور را وادار به خواندن آن بهصورت قواعد فیلتر نماید. در یک دریافت (pull) که نه به --delete نیاز دارد و نه به هیچ پرگویی، چرا که یک ادغام فقط-استثنا (تغییردهنده «-») هر خط را به یک الگو تبدیل میکند و کلاینت محتویات فایل را از روی این که کدامیک از نامهای خودش حذف شدهاند میخواند. محدود کردن بازکردن فایل این روزنه را میبندد؛ فایل ادغامی درون DIR همچنان مانند گذشته کار خواهد کرد.
- یک دیمن این گزینه را نادیده میگیرد -- دایرکتوری ماژول آن از پیش مرز تعیینشده است، و این گزینه در argv عرضهشده توسط کلاینت میرسد، بنابراین پذیرفتن آن تنها میتواند ماژول را گسترش دهد.
- استفاده از --insecure-links در کنار آن پذیرفته نمیشود. این انصراف، رفتار بازکردن سنتی را بازمیگرداند که از پیمایشِ اعمالکننده ریشه صرفنظر میکند، بنابراین استفاده همزمان از هر دو در عمل و در سکوت بهمعنای عدم اعمال هیچگونه محدودیتی خواهد بود.
- همانند --drop-D، این گزینه به سمت راهدور ارسال نمیشود: قرار است به تنهایی بر روی یک طرف اتصال اعمال گردد.
- --munge-links
- این گزینه فقط بر یک طرف انتقال تأثیر میگذارد و به rsync میگوید هنگام دریافت فایلها مقادیر پیوندهای نمادین را دستکاری (munge) کند، یا هنگام ارسال فایلها مقادیر پیوندهای نمادین را از حالت دستکاری خارج (unmunge) کند. «دستکاری» مقصد پیوند نمادین را تغییر میدهد تا پیوند نتواند با موفقیت دنبال شود، اما امکان بازیابی مقصد اصلی پیوند نمادین را فراهم نگه میدارد. «بازگردانی دستکاری» این فرآیند را معکوس میکند تا پیوند نمادین به مقصد اصلی اشاره نماید.
- این گزینه میتواند در سمت سرور بدون اطلاع کلاینت فعال شود، مانند فایل پیکربندی دیمن rsync یا از طریق گزینهای که به اسکریپت rrsync (یا همان rsync محدودشده) داده میشود. هنگام تعیین در سمت کلاینت، اگر سمت کلاینت دارای پیوندهای نمادین دستکاریشده است یا به آنها نیاز دارد، گزینه را بهصورت عادی تعیین کنید، یا از -M--munge-links استفاده کنید تا گزینه را به سرور بدهید هنگامی که سرور دارای پیوندهای نمادین دستکاریشده است یا به آنها نیاز دارد. توجه داشته باشید که در انتقال محلی، کلاینت فرستنده است، بنابراین تعیین مستقیم گزینه پیوندهای نمادین را از دستکاری خارج میکند، در حالی که تعیین آن بهعنوان گزینه راهدور، پیوندهای نمادین را دستکاری میکند.
- این گزینه هنگام ارسال به یک دیمن از طریق --remote-option هیچ اثری ندارد زیرا دیمن تمایل به دستکاری پیوندهای نمادین را از طریق پارامتر «munge symlinks» خود پیکربندی میکند.
- مقدار پیوند نمادین هنگامی که در حال انتقال است دستکاری یا بازگردانی میشود، بنابراین هر گزینهای که پیوندهای نمادین را به غیر پیوند نمادین تبدیل میکند، پیش از دستکاری/بازگردانی رخ میدهد بهجز --safe-links، که انتخابی است که گیرنده انجام میدهد، بنابراین تصمیم خود را بر اساس مقدار دستکاریشده/بازگردانیشده اتخاذ میکند. این بدان معناست که اگر گیرنده قابلیت دستکاری را فعال کرده باشد، استفاده از --safe-links باعث نادیده گرفته شدن تمام پیوندهای نمادین خواهد شد (چرا که دستکاری همه آنها را مطلق میکند).
- روشی که rsync برای دستکاری پیوند نمادین استفاده میکند، افزودن پیشوند رشته "/rsyncd-munged/" به مقدار آن است. این کار در صورتی که دایرکتوری /rsyncd-munged وجود نداشته باشد، از استفاده شدن پیوند جلوگیری میکند. هنگامی که این گزینه فعال است، اگر آن مسیر یک دایرکتوری یا پیوند نمادین به یک دایرکتوری باشد، rsync از اجرا خودداری میکند (اگرچه این بررسی فقط در هنگام راهاندازی انجام میشود). همچنین برای روشی جهت دستکاری/بازگردانی درجا یک یا چند پیوند نمادین، اسکریپت پایتون "munge-symlinks" را در دایرکتوری support از کد منبع ببینید.
- --copy-dirlinks, -k
- این گزینه باعث میشود سمت فرستنده با پیوند نمادین به یک دایرکتوری به گونهای رفتار کند که گویی یک دایرکتوری واقعی است. این ویژگی زمانی مفید است که نمیخواهید پیوندهای نمادین به غیر دایرکتوریها تحت تأثیر قرار گیرند، وضعیتی که هنگام استفاده از --copy-links رخ میدهد.
- بدون این گزینه، اگر سمت فرستنده یک دایرکتوری را با یک پیوند نمادین به دایرکتوری جایگزین کرده باشد، سمت گیرنده هر چیزی را که در مسیر پیوند نمادین جدید قرار دارد حذف میکند، از جمله ساختار سلسلهمراتبی دایرکتوری (تا زمانی که --force یا --delete فعال باشد).
- همچنین گزینه مشابه --keep-dirlinks را برای سمت گیرنده ببینید.
- گزینه --copy-dirlinks بر تمام پیوندهای نمادین به دایرکتوریها در مبدأ اعمال میشود. اگر میخواهید فقط چند پیوند نمادین مشخص را دنبال کنید، ترفندی که میتوانید استفاده کنید ارسال آنها به عنوان آرگومانهای مبدأ اضافی با یک اسلش در انتها است، در حالی که از --relative برای تطابق درست مسیرها استفاده میکنید. برای مثال:
-
rsync -r --relative src/./ src/./follow-me/ dest/
- برای اطلاعات چندگزینهای، بخش پیوندهای نمادین (SYMBOLIC LINKS) را ببینید.
- --keep-dirlinks, -K
- این گزینه باعث میشود سمت گیرنده با پیوند نمادین به یک دایرکتوری طوری رفتار کند که گویی دایرکتوری واقعی است، اما فقط در صورتی که با یک دایرکتوری واقعی از فرستنده مطابقت داشته باشد. بدون این گزینه، پیوند نمادین گیرنده حذف شده و با یک دایرکتوری واقعی جایگزین میشود.
- برای مثال، فرض کنید دایرکتوری "foo" را منتقل میکنید که حاوی فایل "file" است، اما در گیرنده، "foo" یک پیوند نمادین به دایرکتوری "bar" است. بدون --keep-dirlinks، گیرنده پیوند نمادین "foo" را حذف کرده، آن را دوباره به صورت یک دایرکتوری میسازد و فایل را درون دایرکتوری جدید دریافت میکند. با --keep-dirlinks، گیرنده پیوند نمادین را نگه میدارد و "file" در نهایت به "bar" منتقل میشود.
- یک نکته هشدار: اگر از --keep-dirlinks استفاده میکنید، باید یا به تمام پیوندهای نمادین در نسخه رونوشت اعتماد داشته باشید، یا گزینه --munge-links را در سمت گیرنده فعال کنید! اگر این امکان وجود داشته باشد که یک کاربر غیرقابل اعتماد پیوند نمادین خود را به هر دایرکتوری واقعی بسازد، آن کاربر میتواند (در رونوشت بعدی) پیوند نمادین را با یک دایرکتوری واقعی جایگزین کرده و بر محتوای هر دایرکتوری که پیوند نمادین به آن ارجاع دارد تأثیر بگذارد. برای نسخههای پشتیبان، بهتر است به جای پیوند نمادین، از چیزی مانند bind mount برای اصلاح ساختار سلسلهمراتبی گیرنده استفاده کنید.
- همچنین گزینه مشابه --copy-dirlinks را برای سمت فرستنده ببینید.
- برای اطلاعات چندگزینهای، بخش پیوندهای نمادین (SYMBOLIC LINKS) را ببینید.
- --hard-links, -H
- این گزینه به rsync میگوید تا فایلهای دارای پیوند سخت (hard link) را در مبدأ جستجو کند و فایلهای متناظر در مقصد را به یکدیگر پیوند دهد. بدون این گزینه، با فایلهای دارای پیوند سخت در مبدأ طوری رفتار میشود که انگار فایلهای جداگانهای هستند.
- این گزینه لزوماً تضمین نمیکند که الگوی پیوندهای سخت در مقصد دقیقاً با مبدأ مطابقت داشته باشد. مواردی که ممکن است مقصد در نهایت با پیوندهای سخت اضافی مواجه شود شامل این موارد است:
- o
- اگر مقصد شامل پیوندهای سخت اضافه باشد (پیوندهای بیشتر نسبت به آنچه در فهرست فایلهای مبدأ موجود است)، الگوریتم کپی آنها را بهطور صریح حذف نمیکند. با این حال، اگر یک یا چند مسیر تفاوت محتوایی داشته باشند، روند عادی بهروزرسانی فایل آن پیوندهای اضافی را از بین میبرد (مگر اینکه از گزینه --inplace استفاده کنید).
- o
- اگر یک دایرکتوری --link-dest مشخص کنید که شامل پیوندهای سخت است، پیوند دادن فایلهای مقصد با فایلهای --link-dest میتواند به دلیل وابستگیهای --link-dest باعث شود برخی مسیرها در مقصد به یکدیگر پیوند یابند.
- توجه داشته باشید که rsync تنها میتواند پیوندهای سخت بین فایلهایی را که درون مجموعه انتقال قرار دارند تشخیص دهد. اگر rsync فایلی را بهروزرسانی کند که اتصالات پیوند سخت اضافی با فایلهای خارج از مجموعه انتقال دارد، آن پیوند شکسته خواهد شد. اگر وسوسه شدهاید که از گزینه --inplace برای جلوگیری از این شکستگی استفاده کنید، بسیار مراقب باشید که بدانید فایلهای شما چگونه بهروزرسانی میشوند تا مطمئن شوید هیچ تغییر ناخواستهای به دلیل پیوندهای سخت باقیمانده رخ ندهد (و برای هشدارهای بیشتر به گزینه --inplace مراجعه کنید).
- اگر بازگشت تدریجی فعال باشد (گزینه --inc-recursive را ببینید)، rsync ممکن است یک فایل پیوندسختشدهی ناموجود را پیش از آنکه متوجه شود پیوند دیگری برای آن محتوا در جای دیگری از سلسلهمراتب وجود دارد منتقل کند. این موضوع روی دقت انتقال تأثیری نمیگذارد (یعنی اینکه کدام فایلها به هم پیوند سخت دارند)، فقط بر کارایی آن اثر میگذارد (یعنی کپی کردن دادهها برای یک نسخه جدید و زودهنگام از فایل پیوندسختشدهای که میتوانست بعداً در طول انتقال در عضو دیگری از مجموعه فایلهای دارای پیوند سخت پیدا شود). یکی از راههای جلوگیری از این ناکارآمدی، غیرفعال کردن بازگشت تدریجی با استفاده از گزینه --no-inc-recursive است.
- --perms, -p
- این گزینه باعث میشود rsync در سمت گیرنده، مجوزهای مقصد را مطابق با مجوزهای مبدأ تنظیم کند. (همچنین به گزینه --chmod برای روشی جهت تغییر آنچه rsync به عنوان مجوزهای مبدأ در نظر میگیرد مراجعه کنید.)
- هنگامی که این گزینه خاموش باشد، مجوزها به شرح زیر تنظیم میشوند:
- o
- فایلهای موجود (از جمله فایلهای بهروزشده) مجوزهای فعلی خود را حفظ میکنند، هرچند گزینه --executability ممکن است فقط مجوز اجرای فایل را تغییر دهد.
- o
- بیتهای مجوز «عادی» فایلهای جدید برابر با مجوزهای فایل مبدأ پس از اعمال ماسک مجوزهای پیشفرض دایرکتوری گیرنده تنظیم میشوند (چه umask فرایند گیرنده باشد یا مجوزهای مشخصشده از طریق ACL پیشفرض دایرکتوری مقصد)، و بیتهای مجوز ویژه آنها غیرفعال میشوند؛ مگر در حالتی که یک دایرکتوری جدید بیت setgid را از دایرکتوری والد خود به ارث ببرد.
- بنابراین، هنگامی که هر دو گزینه --perms و --executability غیرفعال باشند، رفتار rsync مشابه سایر ابزارهای کپی فایل مانند cp(1) و tar(1) خواهد بود.
- خلاصه: برای اعمال مجوزهای مبدأ به فایلهای مقصد (هم قدیمی و هم جدید)، از --perms استفاده کنید. برای دادن مجوزهای پیشفرض مقصد به فایلهای جدید (در حالی که فایلهای موجود بدون تغییر باقی بمانند)، مطمئن شوید گزینه --perms خاموش است و از --chmod=ugo=rwX استفاده کنید (که تضمین میکند تمام بیتهای ماسکنشده فعال شوند). اگر مایلید تایپ این رفتار دوم سادهتر شود، میتوانید یک نام مستعار popt برای آن تعریف کنید، مانند قرار دادن این خط در فایل ~/.popt (دستور زیر گزینه -Z را تعریف میکند و شامل --no-g برای استفاده از گروه پیشفرض دایرکتوری مقصد است):
-
rsync alias -Z --no-p --no-g --chmod=ugo=rwX
- سپس میتوانید از این گزینه جدید در دستوری مانند زیر استفاده کنید:
-
rsync -avZ src/ dest/
- (هشدار: دقت کنید که -a بعد از -Z قرار نگیرد، در غیر این صورت دو گزینه --no-* ذکرشده در بالا را دوباره فعال خواهد کرد.)
- توجه داشته باشید که اگر rsync راهدور قدیمیتر از 2.6.7 (مارس ۲۰۰۶) و گیرنده باشد، رفتار برنامه در هنگام غیرفعال بودن --perms ممکن است با موارد شرحدادهشده در بالا تفاوت داشته باشد.
- --executability, -E
- این گزینه باعث میشود rsync در صورت فعال نبودن --perms، وضعیت قابلاجرا بودن یا نبودن پروندههای عادی را حفظ کند. یک پرونده عادی در صورتی قابلاجرا تلقی میشود که حداقل یکی از مجوزهای 'x' آن فعال باشد. هنگامی که وضعیت قابلاجرا بودن پرونده مقصد با پرونده مبدأ متناظر تفاوت داشته باشد، rsync مجوزهای پرونده مقصد را به شرح زیر تغییر میدهد:
- اگر --perms فعال باشد، این گزینه نادیده گرفته میشود.
- --acls, -A
- این گزینه باعث میشود rsync فهرستهای کنترل دسترسی (ACLهای) مقصد را مطابق با ACLهای مبدأ بهروزرسانی کند. این گزینه همچنین شامل --perms نیز میشود.
- سیستمهای مبدأ و مقصد برای کارکرد صحیح این گزینه باید مدخلهای ACL سازگار داشته باشند. برای روشی جهت پشتیبانگیری و بازیابی ACLهای ناسازگار، گزینه --fake-super را ببینید.
- --xattrs, -X
- این گزینه باعث میشود rsync صفتهای گسترشیافته مقصد را مطابق با مقادیر مبدأ بهروزرسانی کند.
- برای سیستمهایی که از فضاهای نام صفتهای گسترشیافته پشتیبانی میکنند، رونوشتبرداری توسط کاربر ارشد تمام فضاهای نام بهجز system.* را کپی میکند. یک کاربر عادی تنها فضای نام user.* را کپی میکند. برای امکان پشتیبانگیری و بازیابی فضاهای نام غیرکاربری به عنوان یک کاربر عادی، گزینه --fake-super را ببینید.
- فیلتر کردن نامهای فوق میتواند با استفاده از یک یا چند گزینه فیلتر به همراه تغییردهنده x بازنویسی و جایگزین شود. هنگامی که یک قاعده فیلتر مؤثر بر xattr را مشخص میکنید، rsync مستلزم آن است که فیلتر کردن system/user خود و همچنین هرگونه فیلتر اضافی برای اینکه چه نامهای xattr کپی شوند و چه نامهایی مجاز به حذف باشند را تعیین کنید. برای مثال، برای نادیده گرفتن فضای نام system، میتوانید اینطور مشخص کنید:
-
--filter='-x system.*'
- برای نادیده گرفتن تمام فضاهای نام بهجز فضای نام user، میتوانید یک تطابق نفیشده user را مشخص کنید:
-
--filter='-x! user.*'
- برای جلوگیری از حذف هرگونه صفت، میتوانید یک قاعده مخصوص گیرنده مشخص کنید که تمام نامها را مستثنی کند:
-
--filter='-xr *'
- توجه داشته باشید که گزینه -X مقادیر xattr ویژه rsync (مانند موارد مورد استفاده توسط --fake-super) را کپی نمیکند، مگر اینکه گزینه را تکرار کنید (مثلاً -XX). این حالت "رونوشت تمام xattrs" را نمیتوان با --fake-super استفاده کرد.
- --chmod=CHMOD
- این گزینه به rsync میگوید یک یا چند حالت «chmod» جدا شده با ویرگول را روی دسترسی پروندههای در حال انتقال اعمال کند. مقدار حاصل بهگونهای در نظر گرفته میشود که گویی دسترسیهای ارائهشده توسط سمت فرستنده برای پرونده بوده است؛ بدین معنی که در صورت فعال نبودن --perms، این گزینه ممکن است روی پروندههای موجود بیاثر به نظر برسد.
- علاوه بر قواعد معمول تجزیه که در صفحهی راهنمای chmod(1) مشخص شده است، میتوانید با افزودن پیشوند 'D' موردی را تعیین کنید که فقط برای یک پوشه اعمال شود، یا با افزودن پیشوند 'F' موردی را تعیین کنید که فقط روی یک پرونده اعمال گردد. برای نمونه، عبارت زیر اطمینان حاصل میکند که تمام پوشهها نشان set-gid دریافت کنند، هیچ پروندهای توسط دیگران قابلنوشتن نباشد، هر دو توسط کاربر و گروه قابلنوشتن باشند، و هر دو قابلیت اجرایی یکسانی در تمام بیتها داشته باشند:
-
--chmod=Dg+s,ug+w,Fo-w,+X
- استفاده از شمارههای حالت هشتهشتی (اکتال) نیز مجاز است:
-
--chmod=D2775,F664
- حالتهای نمادین رونوشت دسترسی نیز مجاز هستند، مانند g=u، o=g یا g-o. یک مورد رونوشت دسترسی تنها میتواند از یک کلاس (u، g یا o) رونوشت بردارد و نمیتواند با حروف دسترسی rwxXst در یک مورد یکسان ترکیب شود. زمانی که به هر دو رفتار نیاز دارید از موارد جدا شده با ویرگول استفاده کنید، مانند g=o,o=.
- یک مورد رونوشت دسترسی = همچنین بیت ویژه را برای هر کلاس مقصدی که بهروزرسانی میکند پاک میکند (u بیت setuid را پاک میکند، g بیت setgid را پاک میکند، و o بیت sticky را پاک میکند)، که مطابق با رفتار chmod در گنو است.
- تعیین چندین گزینه --chmod نیز مجاز است، زیرا هر گزینه اضافی صرفاً به انتهای فهرست تغییرات اعمالی افزوده میشود.
- برای چگونگی اعمال مقدار دسترسی حاصل بر روی پروندههای در حال انتقال، گزینههای --perms و --executability را ببینید.
- --owner, -o
- این گزینه باعث میشود rsync مالک هر شیءِ سیستمفایل مقصد (پرونده، پوشه و غیره) را همانند شیءِ مبدأ تنظیم کند، اما تنها در صورتی که rsync گیرنده بهعنوان کاربر ارشد (super-user) اجرا شده باشد (همچنین گزینههای --super و --fake-super را ببینید). بدون این گزینه، مالک پروندههای جدید و/یا انتقالیافته روی کاربر فراخوان در سمت گیرنده تنظیم میشود.
- حفظ مالکیت بهطور پیشفرض نامهای منطبق را پیوند میدهد، اما در برخی شرایط ممکن است به استفاده از شناسه عددی (ID) بازگردد (همچنین برای توضیحات کامل گزینه --numeric-ids را ببینید).
- --group, -g
- این گزینه باعث میشود rsync گروه هر شیءِ سیستمفایل مقصد (پرونده، پوشه و غیره) را همانند شیءِ مبدأ تنظیم کند. اگر برنامه گیرنده بهعنوان کاربر ارشد اجرا نشود (یا اگر --no-super مشخص شده باشد)، تنها گروههایی حفظ میشوند که کاربر فراخوان در سمت گیرنده عضو آنها است. بدون این گزینه، گروه روی گروه پیشفرض کاربر فراخوان در سمت گیرنده تنظیم میشود.
- حفظ اطلاعات گروه بهطور پیشفرض نامهای منطبق را پیوند میدهد، اما در برخی شرایط ممکن است به استفاده از شناسه عددی (ID) بازگردد (همچنین برای توضیحات کامل گزینه --numeric-ids را ببینید).
- --devices
- این گزینه باعث میشود rsync پروندههای دستگاه کاراکتری و بلوکی را برای بازسازی این دستگاهها به سیستم راهدور انتقال دهد. اگر rsync گیرنده بهعنوان کاربر ارشد اجرا نشود، rsync بدون نمایش پیام از ایجاد پروندههای دستگاه صرفنظر میکند (همچنین گزینههای --super و --fake-super را ببینید).
- در حالت پیشفرض، rsync در صورت تنظیم نبودن این گزینه، برای هر پرونده دستگاهی که با آن مواجه شود یک هشدار "non-regular file" صادر میکند. میتوانید با مشخص کردن --info=nonreg0 این هشدار را بیصدا کنید.
- --specials
- این گزینه باعث میشود rsync پروندههای خاص، مانند سوکتهای نامگذاریشده و fifoها را انتقال دهد. اگر rsync دریافتکننده با دسترسی ابرکاربر اجرا نشود، rsync بدون تولید پیام از ایجاد پروندههای خاص صرفنظر میکند (همچنین گزینههای --super و --fake-super را ببینید).
- در حالت پیشفرض، rsync در صورت تنظیم نبودن این گزینه، برای هر پرونده خاصی که با آن مواجه شود یک هشدار "non-regular file" صادر میکند. میتوانید با مشخص کردن --info=nonreg0 این هشدار را بیصدا کنید.
- -D
- گزینه -D معادل "--devices --specials" است.
- --drop-D
- این گزینه به rsync دریافتکننده اعلام میکند که بدون توجه به نوع درخواست انتقال، از ایجاد پروندههای دستگاه و پروندههای خاص خودداری کند. ورودیهای مربوط به آنها دقیقاً مانند حالتی که -D استفاده نشده باشد، با همان هشدار معمول "non-regular file" نادیده گرفته میشوند.
- این گزینه با --no-D تفاوت دارد، زیرا فقط موارد ایجاد شده را تغییر میدهد، نه نحوه کدگذاری فهرست پروندهها را. گزینه --no-D همچنین فیلدهای rdev را که پروندههای دستگاه و پروندههای خاص در بستر انتقال حمل میکنند غیرفعال میسازد، بنابراین اعمال آن بهتنهایی در یک سمت اتصال باعث عدم تطابق دو طرف درباره کدگذاری شده و انتقال با شکست مواجه میشود. در نتیجه --drop-D میتواند بهتنهایی در سمت دریافتکننده اضافه شود که هدف اصلی وجود آن نیز همین است -- پوسته واسط rrsync از آن برای جلوگیری از ایجاد پروندههای دستگاه و پروندههای خاص توسط کلاینتها در یک دایرکتوری محدودشده استفاده میکند. گرههایی که از قبل در آنجا موجود باشند دستنخورده باقی میمانند.
- از آنجا که این گزینه فقط مانع ایجاد میشود، هیچ تأثیری روی rsync ارسالکننده ندارد.
- این گزینه به سمت راهدور ارسال نمیشود، زیرا هدف اصلی آن اعمال شدن بهتنهایی روی یک سمت اتصال است. بنابراین فقط بر فرایند rsync که گزینه را به آن دادهاید اثر میگذارد و نه هیچ فرایند دیگری: در یک رونوشت محلی، یا در سمت دریافتکننده فراخوانی --server مانند آنچه rrsync ایجاد میکند. برای تنظیم آن روی یک دریافتکننده راهدور از خط فرمان، آن را به طور صریح با --remote-option (-M) ارسال کنید:
-
rsync -av -M--drop-D src/ host:dest/
- ارسال یک گزینه ساده --drop-D به عملیات ارسال (push) فقط بر ارسالکننده محلی تأثیر میگذارد و در آنجا هیچ کاری انجام نمیدهد.
- --copy-devices
- این گزینه به rsync اعلام میکند که با یک دستگاه در سمت ارسالکننده مانند یک پرونده معمولی رفتار کند و اجازه دهد محتوای آن در یک پرونده مقصد معمولی کپی شود (یا در صورتی که --write-devices نیز مشخص شده باشد، در یک دستگاه دیگر).
- این گزینه به طور پیشفرض توسط دیمن rsync رد میشود.
- --write-devices
- این گزینه به rsync اعلام میکند که با یک دستگاه در سمت دریافتکننده مانند یک پرونده معمولی رفتار کند و اجازه نوشتن دادههای پرونده را در یک دستگاه بدهد.
- این گزینه متضمن گزینه --inplace است.
- در استفاده از این گزینه احتیاط کنید، زیرا باید بدانید چه دستگاههایی در سمت دریافتکننده انتقال وجود دارند، بهویژه زمانی که rsync به عنوان کاربر root اجرا میشود.
- این گزینه به طور پیشفرض توسط دیمن rsync رد میشود.
- --times, -t
- این گزینه به rsync اعلام میکند که زمانهای تغییر پروندههای مقصد (شامل دایرکتوریها، پیوندهای نمادین، دستگاهها و غیره) را مطابق با پروندههای منبع تنظیم کند. توجه داشته باشید که در صورت عدم استفاده از این گزینه، بهینهسازی مربوط به نادیده گرفتن پروندههای تغییرنیافته کارایی نخواهد داشت؛ به عبارت دیگر، نبود -t (یا -a) باعث میشود انتقال بعدی طوری رفتار کند که گویی از --ignore-times (-I) استفاده شده است، که موجب بهروزرسانی تمام پروندهها میشود. (اگرچه الگوریتم انتقال تفاضلی rsync در صورت عدم تغییر واقعی پروندهها فرایند بهروزرسانی را نسبتاً کارآمد میکند، اما استفاده از -t نتیجه بسیار بهتری دارد.)
- اگر پروتکل مورد توافق قدیمیتر از 30 باشد -- معمولاً به این دلیل که rsync سمت راهدور قدیمیتر از 3.0.0 (مارس 2008) است، یا اگر --protocol آن را تحمیل کند -- بازه زمانهای تغییر قابل انتقال محدود خواهد بود. اگر فایلهایی قدیمیتر از 1970 دارید، مطمئن شوید که فایلهای اجرایی rsync شما ارتقا یافتهاند تا تمام بازه تاریخها قابل انتقال باشد.
- --atimes, -U
- این گزینه به rsync میگوید زمانهای دسترسی (استفاده) فایلهای مقصد را برابر با مقدار فایلهای مبدأ قرار دهد.
- در صورت تکرار، گزینه --open-noatime را نیز تنظیم میکند، که میتواند به شما کمک کند سیستمهای فرستنده و گیرنده بدون نیاز به اجرای مجدد rsync پس از انتقال فایل، زمان دسترسی یکسانی روی فایلهای منتقلشده داشته باشند.
- --open-noatime
- این گزینه به rsync میگوید فایلها را با پرچم O_NOATIME باز کند (روی سیستمهایی که از آن پشتیبانی میکنند) تا از تغییر زمان دسترسی فایلهای در حال انتقال جلوگیری شود. اگر سیستمعامل شما از پرچم O_NOATIME پشتیبانی نکند، rsync بدون اخطار این گزینه را نادیده میگیرد. همچنین توجه داشته باشید که برخی سیستمهای فایل به گونهای سوار (mount) شدهاند که حتی بدون تنظیم پرچم O_NOATIME نیز atime را هنگام دسترسی خواندن بهروزرسانی نمیکنند.
- --crtimes, -N,
- این گزینه به rsync میگوید زمانهای ساخت (newness) فایلهای مقصد را برابر با مقدار فایلهای مبدأ قرار دهد. سیستمعامل و سیستم فایل شما باید از تنظیم زمانهای ساخت دلخواه (birth) پشتیبانی کنند تا این گزینه فعال شود.
- --omit-dir-times, -O
- این گزینه به rsync میگوید هنگام حفظ زمانهای تغییر، دسترسی و ساخت، پوشهها را نادیده بگیرد. اگر پوشهها در سمت گیرنده از طریق NFS به اشتراک گذاشته شدهاند، استفاده از -O ایده خوبی است. اگر از --backup بدون --backup-dir استفاده کنید، این گزینه به صورت خودکار اعمال میشود.
- این گزینه همچنین اثر جانبی جلوگیری از ایجاد زودهنگام زیرپوشههای ناموجود را هنگام فعال بودن بازگشت افزایشی دارد، همانطور که در بخش --inc-recursive توضیح داده شده است.
- --omit-link-times, -J
- این گزینه به rsync میگوید هنگام حفظ زمانهای تغییر، دسترسی و ساخت، پیوندهای نمادین را نادیده بگیرد.
- --super
- این گزینه به سمت گیرنده میگوید برای فعالیتهای کاربر ارشد (super-user) تلاش کند، حتی اگر rsync سمت گیرنده توسط کاربر ارشد اجرا نشده باشد. این فعالیتها شامل موارد زیر است: حفظ مالکان از طریق گزینه --owner، حفظ تمام گروهها (نه فقط گروههای کاربر فعلی) از طریق گزینه --group، و رونوشت دستگاهها از طریق گزینه --devices. این قابلیت برای سیستمهایی که بدون نیاز به کاربر ارشد اجازه چنین فعالیتهایی را میدهند و همچنین برای اطمینان از دریافت خطا در صورتی که سمت گیرنده به عنوان کاربر ارشد اجرا نشده باشد، مفید است. برای غیرفعال کردن فعالیتهای کاربر ارشد، کاربر ارشد میتواند از --no-super استفاده کند.
- --fake-super
- هنگامی که این گزینه فعال باشد، rsync با ذخیره/بازیابی ویژگیهای دارای مجوز از طریق ویژگیهای گسترشیافته ویژه که به هر فایل پیوست شدهاند (در صورت نیاز)، فعالیتهای کاربر ارشد را شبیهسازی میکند. این شامل مالک و گروه فایل (اگر پیشفرض نباشد)، اطلاعات دستگاه فایل (دستگاهها و فایلهای ویژه به عنوان فایلهای متنی خالی ایجاد میشوند)، و هر بیت مجوزی که اجازه تنظیم آن را روی فایل واقعی نمیدهیم (مثلاً برای امنیت، فایل واقعی u-s,g-s,o-t را دریافت میکند) یا مواردی که دسترسی مالک را محدود میکند (از آنجا که کاربر ارشد واقعی همیشه میتواند به یک فایل دسترسی داشته باشد/آن را تغییر دهد، فایلهایی که ایجاد میکنیم همیشه توسط کاربر ایجادکننده قابل دسترسی/تغییر هستند) میشود. این گزینه همچنین ACLها (در صورت مشخص شدن --acls) و ویژگیهای گسترشیافته غیرکاربر (در صورت مشخص شدن --xattrs) را پشتیبانی میکند.
- این روشی مناسب برای پشتیبانگیری از دادهها بدون استفاده از کاربر ارشد و برای ذخیره ACLها از سیستمهای ناسازگار است.
- گزینه --fake-super فقط روی سمتی تأثیر میگذارد که گزینه در آن استفاده شده است. برای تأثیرگذاری روی سمت راهدور یک اتصال پوسته راهدور، از گزینه --remote-option (-M) استفاده کنید:
-
rsync -av -M--fake-super /src/ host:/dest/
- برای یک رونوشت محلی، این گزینه هم بر مبدأ و هم بر مقصد تأثیر میگذارد. اگر میخواهید در یک رونوشت محلی این گزینه فقط برای فایلهای مقصد فعال شود، -M--fake-super را مشخص کنید. اگر میخواهید در یک رونوشت محلی این گزینه فقط برای فایلهای مبدأ فعال شود، --fake-super را با -M--super ترکیب کنید.
- این گزینه توسط هر دو گزینه --super و --no-super بازنویسی و لغو میشود.
- همچنین تنظیم fake super را در فایل rsyncd.conf دیمن ببینید.
- --sparse, -S
- تلاش برای مدیریت بهینه فایلهای کمپشت (sparse) تا فضای کمتری در مقصد اشغال کنند. این ویژگی به پشتیبانی سیستمفایل مقصد از فایلهای کمپشت بستگی دارد، یعنی فایلهایی که بخشهایی از آنها فاقد بلوکهای دیسک متناظر هستند زیرا تماماً حاوی بایتهای صفر هستند.
- در صورت ترکیب با --inplace، فایل ایجادشده ممکن است در نهایت فاقد بلوکهای کمپشت باشد (بسته به نوع سیستمفایل و نسخه هسته)، مگر اینکه گزینه --whole-file نیز اعمال شده باشد. توجه داشته باشید که نسخههای rsync قدیمیتر از 3.1.3 (ژانویه ۲۰۱۸) ترکیب --sparse و --inplace را رد میکنند.
- --preallocate
- این گزینه به گیرنده میگوید که پیش از نوشتن دادهها در فایل، هر فایل مقصد را به اندازه نهایی آن پیشتخصیص دهد. rsync فقط از پشتیبانی واقعی پیشتخصیص در سطح سیستمفایل ارائهشده توسط فراخوان سیستمی fallocate(2) در لینوکس یا posix_fallocate(3) در Cygwin استفاده میکند، نه پیادهسازی کند glibc که در هر بلوک یک بایت پوچ (null) مینویسد.
- بدون این گزینه، فایلهای بزرگتر ممکن است بهطور کاملاً پیوسته روی سیستمفایل قرار نگیرند، اما با این گزینه احتمالاً rsync عملیات رونوشت را با سرعت کمتری انجام میدهد. اگر مقصد یک سیستمفایل با پشتیبانی از extent نباشد (مانند ext4، xfs، NTFS و غیره)، این گزینه ممکن است اصلاً هیچ تأثیر مثبتی نداشته باشد.
- در صورت ترکیب با --sparse، فایل تنها در صورتی دارای بلوکهای کمپشت خواهد بود (در مقایسه با توالیهای تخصیصیافته از بایتهای صفر) که نسخه هسته و نوع سیستمفایل از ایجاد حفرهها در دادههای تخصیصیافته پشتیبانی کنند.
- --dry-run, -n
- باعث میشود rsync یک اجرای آزمایشی انجام دهد که هیچ تغییری ایجاد نمیکند و خروجی آن تا حد زیادی مشابه یک اجرای واقعی است. این گزینه بیش از همه در ترکیب با گزینههای --verbose (-v) و/یا --itemize-changes (-i) استفاده میشود تا پیش از اجرای واقعی دستور rsync، عملکرد آن مشاهده شود.
- خروجی --itemize-changes قرار است در یک اجرای آزمایشی و اجرای واقعی پس از آن دقیقاً یکسان باشد (بهجز تغییرات خارجی در مبدأ یا مقصد و شکست در فراخوانهای سیستمی)؛ در غیر این صورت، این یک باگ است. سایر خروجیها باید عمدتاً بدون تغییر بمانند، اما ممکن است در برخی موارد متفاوت باشند. بهویژه، یک اجرای آزمایشی دادههای واقعی را برای انتقال فایل ارسال نمیکند، بنابراین --progress هیچ تأثیری ندارد، آمارهای "bytes sent"، "bytes received"، "literal data" و "matched data" بسیار کوچک هستند، و مقدار "speedup" معادل اجرایی است که نیازی به انتقال فایل نبوده است.
- --whole-file, -W
- این گزینه الگوریتم انتقال تفاضلی (delta-transfer) را در rsync غیرفعال میکند و باعث ارسال کامل تمام فایلهای منتقلشده میشود. اگر پهنای باند بین ماشینهای مبدأ و مقصد بیشتر از پهنای باند به دیسک باشد (بهویژه زمانی که "دیسک" در واقع یک سیستمفایل شبکهای است)، استفاده از این گزینه میتواند انتقال را سریعتر کند. این حالت پیشفرض است وقتی که هر دو مسیر مبدأ و مقصد بهصورت محلی مشخص شده باشند، اما تنها در صورتی که هیچ گزینه نوشتن دستهای (batch-writing) فعال نباشد.
- --no-whole-file, --no-W
- غیرفعال کردن بهروزرسانی کامل فایل در زمانی که بهطور پیشفرض برای انتقال محلی فعال است. این کار معمولاً rsync را کند میکند، اما اگر تلاش میکنید نوشتن در فایل مقصد را به حداقل برسانید (در صورت ترکیب با --inplace) یا برای آزمایش الگوریتم بهروزرسانی مبتنی بر چکسام، میتواند مفید باشد.
- همچنین گزینه --whole-file را ببینید.
- --checksum-choice=STR, --cc=STR
- این گزینه الگوریتمهای چکسام را بازنویسی و جایگزین میکند. اگر یک نام الگوریتم مشخص شود، هم برای چکسامهای انتقال و هم برای چکسامهای پیشازانتقال استفاده میشود (توجه داشته باشید که چکسام پیشازانتقال تنها در صورت تعیین --checksum انجام میگیرد). اگر دو نام جداشده با کاما ارائه شوند، نام اول بر چکسامهای انتقال و نام دوم بر چکسامهای پیشازانتقال تأثیر میگذارد.
- گزینههای چکسامی که ممکن است بتوانید استفاده کنید عبارتند از:
- برای مشاهده فهرست پیشفرض چکسامهای کامپایلشده در نسخه خود (که ممکن است با فهرست بالا تفاوت داشته باشد)، دستور rsync --version را اجرا کنید.
- اگر برای نام اول (یا تنها نام) مقدار «none» مشخص شود، گزینه --whole-file اجباری شده و هیچ اعتبارسنجی چکسامی روی دادههای منتقلشده انجام نمیشود. اگر برای نام دوم (یا تنها نام) مقدار «none» تعیین شود، گزینه --checksum قابل استفاده نخواهد بود.
- گزینه «auto» پیشفرض است، که در آن rsync انتخاب الگوریتم خود را بر اساس یک مذاکره میان کلاینت و سرور به شرح زیر انجام میدهد:
- هنگامی که هر دو سمت انتقال حداقل نسخه 3.2.0 (منتشر شده در ژوئن ۲۰۲۰) باشند، هر سمت الگوریتم ترجیحی خود را که در فهرست طرف مقابل نیز وجود دارد انتخاب میکند. هر دو سمت فهرستهای خود را با اولویت از قویترین مرتب میکنند، بنابراین بر روی قویترین انتخاب مشترک همگرا میشوند. اگر هیچ چکسام مشترکی یافت نشود، rsync با خطا خارج میشود. اگر rsync راه دور بیش از حد قدیمی باشد و از مذاکره چکسام پشتیبانی نکند، مقداری بر اساس نسخه پروتکل انتخاب میشود (که بسته به قدمت پروتکل، بین MD5 و انواع مختلف MD4 انتخاب میکند).
- ترتیب پیشفرض را میتوان با تنظیم متغیر محیطی RSYNC_CHECKSUM_LIST روی فهرستی از نامهای چکسام مجاز با فاصلهگذاری سفارشی کرد. اگر رشته شامل نویسه «&» باشد، به دو بخش «رشته کلاینت & رشته سرور» تقسیم میشود، در غیر این صورت همان رشته برای هر دو اعمال میگردد. اگر رشته (یا بخشی از رشته) فاقد نویسههای غیرفاصلهای باشد، فهرست چکسام پیشفرض استفاده میشود. این روش به شما اجازه نمیدهد چکسام انتقال را جدا از چکسام پیشانتقال مشخص کنید، و مقدار «auto» و تمام نامهای چکسام ناشناخته را نادیده میگیرد. فهرستی که تنها شامل نامهای نامعتبر باشد منجر به شکست مذاکره میشود.
- استفاده از گزینه --checksum-choice این فهرست متغیر محیطی را بازنویسی میکند.
- --one-file-system, -x
- این گزینه به rsync اعلام میکند که هنگام پیمایش بازگشتی، از مرز سیستمفایل عبور نکند. این کار مانع از توانایی کاربر برای تعیین مواردی از چندین سیستمفایل جهت کپی نمیشود، بلکه تنها پیمایش بازگشتی rsync را در ساختار درختی هر دایرکتوری مشخصشده توسط کاربر محدود میکند، و همچنین پیمایش مشابه را در سمت گیرنده هنگام حذف اعمال مینماید. همچنین به یاد داشته باشید که rsync یک اتصال «bind» به همان دستگاه را به عنوان عضوی از همان سیستمفایل در نظر میگیرد.
- اگر این گزینه تکرار شود، rsync تمام دایرکتوریهای نقطه اتصال (mount-point) را از کپی حذف میکند. در غیر این صورت، یک دایرکتوری خالی در هر نقطه اتصالی که با آن روبرو میشود قرار میدهد (با استفاده از ویژگیهای دایرکتوری متصلشده، زیرا ویژگیهای دایرکتوری نقطه اتصال زیرین غیرقابل دسترسی هستند).
- اگر به rsync گفته شده باشد پیوندهای نمادین را باز کند (از طریق --copy-links یا --copy-unsafe-links)، پیوند نمادین به یک دایرکتوری روی دستگاه دیگر مانند یک نقطه اتصال در نظر گرفته میشود. پیوندهای نمادین به موارد غیردایرکتوری تحت تأثیر این گزینه قرار نمیگیرند.
- --ignore-non-existing, --existing
- این به rsync میگوید از ایجاد پروندههایی (شامل دایرکتوریها) که هنوز در مقصد وجود ندارند صرفنظر کند. اگر این گزینه با گزینه --ignore-existing ترکیب شود، هیچ پروندهای بهروزرسانی نخواهد شد (که در صورتی که تمام خواسته شما حذف پروندههای اضافی باشد میتواند مفید باشد).
- این گزینه یک TRANSFER RULE است، بنابراین انتظار هیچگونه اثر جانبی ناشی از استثنا (exclude) را نداشته باشید.
- --ignore-existing
- این به rsync میگوید از بهروزرسانی پروندههایی که از قبل در مقصد وجود دارند صرفنظر کند (این گزینه دایرکتوریهای موجود را نادیده نمیگیرد، وگرنه هیچ کاری انجام نمیشد). همچنین ببینید --ignore-non-existing.
- این گزینه یک TRANSFER RULE است، بنابراین انتظار هیچگونه اثر جانبی ناشی از استثنا (exclude) را نداشته باشید.
- این گزینه میتواند برای کسانی که با استفاده از گزینه --link-dest پشتیبانگیری میکنند، زمانی که نیاز به ادامه یک پشتیبانگیری قطعشده دارند مفید باشد. از آنجا که اجرای --link-dest درون یک سلسلهمراتب دایرکتوری جدید رونوشت میشود (در صورت استفاده صحیح)، استفاده از --ignore-existing تضمین میکند که پروندههای از قبل پردازششده دستکاری نشوند (که از تغییر در دسترسیهای پروندههای دارای پیوند سخت جلوگیری میکند). این بدان معناست که این گزینه فقط به پروندههای موجود در خود سلسلهمراتب مقصد نگاه میکند.
- هنگامی که --info=skip2 استفاده شود، rsync پیامهای "FILENAME exists (INFO)" را نمایش میدهد که در آن INFO نشاندهنده یکی از موارد "type change"، "sum change" (نیازمند -c)، "file change" (بر اساس بررسی سریع)، "attr change"، یا "uptodate" است. استفاده از --info=skip1 (که همچنین توسط ۲ گزینه -v اعمال میشود) پیام موجود بودن را بدون پسوند INFO چاپ میکند.
- --remove-source-files
- این به rsync میگوید پروندههایی (به معنای غیر دایرکتوریها) را از سمت فرستنده حذف کند که بخشی از انتقال بوده و با موفقیت در سمت گیرنده تکثیر شدهاند.
- توجه داشته باشید که فقط باید از این گزینه برای پروندههای مبدأ در وضعیت پایدار و غیرفعال استفاده کنید. اگر از این گزینه برای انتقال پروندههایی که در یک دایرکتوری خاص ایجاد میشوند به میزبانی دیگر استفاده میکنید، مطمئن شوید پروندههای تکمیلشده به داخل دایرکتوری مبدأ تغییر نام داده میشوند، نه اینکه مستقیماً در آن نوشته شوند، تا rsync بههیچوجه نتواند پروندهای را که هنوز به طور کامل نوشته نشده منتقل کند. اگر نمیتوانید ابتدا پروندهها را در دایرکتوری دیگری بنویسید، باید از یک شیوه نامگذاری استفاده کنید که به rsync اجازه دهد از انتقال پروندههای ناتمام خودداری کند (مثلاً نامگذاری پرونده به "foo.new" هنگام نوشتن، تغییر نام آن به "foo" پس از اتمام، و سپس استفاده از گزینه --exclude='*.new' برای انتقال rsync).
- اگر اندازه یا زمان ویرایش پرونده بدون تغییر نمانده باشد، rsync از حذف در سمت فرستنده صرفنظر کرده و یک خطا چاپ میکند.
- اگر رونوشت محلی باشد، rsync اطمینان حاصل میکند فرستنده پروندهای را که گیرنده بهتازگی تأیید کرده حذف نکند؛ مانند زمانی که کاربر به اشتباه مسیر دایرکتوری مبدأ و مقصد را یکسان تعیین کرده باشد.
- --delete
- این به rsync میگوید پروندههای اضافی را از سمت گیرنده (آنهایی که در سمت فرستنده وجود ندارند) حذف کند، اما فقط برای دایرکتوریهایی که در حال همگامسازی هستند. شما باید از rsync خواسته باشید کل دایرکتوری را ارسال کند (مانند "dir" یا "dir/")، نه اینکه همه پروندههای درون یک دایرکتوری را از طریق نویسه عمومی درخواست کنید (مانند "dir/*")؛ چرا که نویسه عمومی توسط پوسته باز میشود و بنابراین rsync درخواستی برای انتقال تکتک پروندهها دریافت میکند، نه دایرکتوری والد پروندهها. پروندههایی که از انتقال مستثنی شدهاند نیز از حذف شدن مستثنی میشوند، مگر اینکه از گزینه --delete-excluded استفاده کنید یا قواعد را طوری مشخص کنید که فقط در سمت فرستنده تطبیق داده شوند (بخش اصلاحکنندههای include/exclude در قسمت FILTER RULES را ببینید).
- این گزینه هیچ اثری ندارد مگر اینکه --recursive یا --dirs (-d) فعال باشد. در حالت دوم، حذف فقط در دایرکتوریهایی رخ میدهد که محتوای آنها در حال رونوشت شدن است.
- این گزینه در صورت استفاده نادرست میتواند خطرناک باشد! توصیه میشود ابتدا با استفاده از گزینه --dry-run (-n) یک اجرای آزمایشی انجام دهید تا ببینید چه پروندههایی قرار است حذف شوند.
- اگر سمت فرستنده هرگونه خطای ورودی/خروجی (I/O) را تشخیص دهد، حذف فایلها در مقصد بهطور خودکار غیرفعال خواهد شد. این کار برای جلوگیری از خرابیهای موقت سیستمفایل (مانند خطاهای NFS) در سمت فرستنده است که ممکن است باعث حذف گسترده فایلها در مقصد شود. میتوانید این رفتار را با گزینه --ignore-errors لغو کنید.
- گزینه --delete میتواند بدون تداخل با یکی از گزینههای --delete-WHEN و همچنین --delete-excluded ترکیب شود. با این حال، اگر هیچیک از گزینههای --delete-WHEN مشخص نشده باشد، rsync هنگام ارتباط با rsync نسخه 3.0.0 (مارس ۲۰۰۸) یا جدیدتر الگوریتم --delete-during را انتخاب میکند، یا هنگام ارتباط با نسخههای قدیمیتر rsync الگوریتم --delete-before را برمیگزیند. همچنین --delete-delay و --delete-after را ببینید.
- --delete-before
- درخواست میکند که حذف فایلها در سمت گیرنده پیش از شروع انتقال انجام شود. برای جزئیات بیشتر درباره حذف فایل، --delete (که بهطور ضمنی اعمال میشود) را ببینید.
- حذف قبل از انتقال زمانی مفید است که سیستمفایل با کمبود فضا مواجه باشد و حذف فایلهای اضافی به امکانپذیر شدن انتقال کمک کند. با این حال، این کار باعث ایجاد تاخیر قبل از شروع انتقال میشود و این تاخیر ممکن است باعث اتمام مهلت زمانی انتقال شود (اگر --timeout مشخص شده باشد). همچنین rsync را مجبور میکند از الگوریتم بازگشتی قدیمی و غیرافزایشی استفاده کند که نیازمند اسکن یکباره تمام فایلهای موجود در انتقال به حافظه است (به --recursive مراجعه کنید).
- --delete-during, --del
- درخواست میکند که حذف فایلها در سمت گیرنده بهصورت افزایشی همگام با انجام انتقال صورت گیرد. اسکن حذف در هر دایرکتوری درست پیش از بررسی همان دایرکتوری برای بهروزرسانیها انجام میشود، بنابراین رفتاری شبیه به نسخه کارآمدتر --delete-before دارد، از جمله انجام حذفها پیش از بهروزرسانی فایلهای فیلتر هر دایرکتوری. برای جزئیات بیشتر درباره حذف فایل، --delete (که بهطور ضمنی اعمال میشود) را ببینید.
- --delete-delay
- درخواست میکند که فایلهای حذفی در سمت گیرنده در طول انتقال محاسبه شوند (مانند --delete-during)، و سپس پس از اتمام انتقال حذف گردند. این گزینه هنگام ترکیب با --delay-updates و/یا --fuzzy مفید است و کارآمدتر از استفاده از --delete-after است، اما ممکن است رفتار متفاوتی داشته باشد، زیرا --delete-after عملیات حذف را در یک گذر جداگانه پس از انجام تمام بهروزرسانیها محاسبه میکند. اگر تعداد فایلهای حذفشده از بافر داخلی سرریز کند، یک فایل موقت در سمت گیرنده برای نگهداری نامها ایجاد خواهد شد (این فایل در حالی که باز است حذف میشود، بنابراین نباید آن را در طول انتقال مشاهده کنید). اگر ایجاد فایل موقت با شکست مواجه شود، rsync تلاش میکند به استفاده از --delete-after بازگردد (که اگر --recursive در حال انجام اسکن افزایشی باشد، قادر به انجام آن نخواهد بود). برای جزئیات بیشتر درباره حذف فایل، --delete (که بهطور ضمنی اعمال میشود) را ببینید.
- --delete-after
- درخواست میکند که حذف فایلها در سمت گیرنده پس از اتمام انتقال انجام شود. این گزینه زمانی مفید است که فایلهای ادغام (merge) دایرکتوری جدیدی را بهعنوان بخشی از انتقال ارسال میکنید و میخواهید استثناهای آنها برای مرحله حذفِ انتقال فعلی اعمال شوند. همچنین rsync را مجبور میکند از الگوریتم بازگشتی قدیمی و غیرافزایشی استفاده کند که نیازمند اسکن یکباره تمام فایلهای موجود در انتقال به حافظه است (به --recursive مراجعه کنید). برای جزئیات بیشتر درباره حذف فایل، --delete (که بهطور ضمنی اعمال میشود) را ببینید.
- همچنین گزینه --delete-delay را ببینید که ممکن است انتخاب سریعتری برای کسانی باشد که فقط میخواهند حذفها در پایان انتقال رخ دهد.
- --delete-excluded
- این گزینه تمام قواعد بدون اصلاحکننده استثنا/شمول (exclude/include) را به قواعد سمت سرور تبدیل میکند که بر حذفهای سمت گیرنده تاثیری نمیگذارند.
- بهطور پیشفرض، یک استثنا یا شمول هم دارای اثر در سمت سرور (برای «پنهان کردن» و «نشان دادن» فایلها هنگام ساخت فهرست فایل سرور) و هم دارای اثر در سمت گیرنده (برای «محافظت» و «به خطر انداختن» فایلها هنگام وقوع حذفها) است. با هر قاعدهای که فاقد اصلاحکننده برای تعیین سمت اجرای آن باشد، طوری رفتار خواهد شد که گویی فقط یک قاعده سمت سرور است و از هرگونه اثر «محافظت» آن قواعد جلوگیری میشود.
- یک قاعده همچنان میتواند برای هر دو طرف اعمال شود حتی با مشخص شدن این گزینه، اگر به قاعده هر دو حرف تغییردهنده فرستنده و گیرنده داده شده باشد (مانند -f'-sr foo'). قواعد محافظت/ریسک سمت گیرنده نیز میتوانند صراحتاً مشخص شوند تا حذفها محدود شوند. این کار شما را از ویرایش دستهای از قواعد -f'- foo' به قواعد -f'-s foo' (یا همان -f'H foo') بینیاز میکند (بهعلاوه شاملکردنهای متناظر).
- برای اطلاعات بیشتر بخش قواعد فیلتر (FILTER RULES) را ببینید. برای جزئیات بیشتر در مورد حذف، گزینه --delete (که ضمنی است) را مشاهده کنید.
- --ignore-missing-args
- هنگامی که rsync در ابتدا پروندههای مبدأ صراحتاً درخواستشده (مانند آرگومانهای خط فرمان یا ورودیهای --files-from) را پردازش میکند، معمولاً اگر پرونده پیدا نشود یک خطا در نظر گرفته میشود. این گزینه آن خطا را نادیده میگیرد و برای انتقال پرونده تلاشی نمیکند. این امر بر خطاهای بعدی ناشی از ناپدید شدن پرونده (vanished-file) تأثیری ندارد اگر پروندهای در ابتدا موجود بوده و بعداً دیگر در آنجا نباشد.
- --delete-missing-args
- این گزینه رفتار گزینه (ضمنی) --ignore-missing-args را یک گام فراتر میبرد: هر آرگومان مفقود به یک درخواست حذف برای پرونده مقصد متناظر در سمت گیرنده تبدیل خواهد شد (در صورت وجود داشتن). اگر پرونده مقصد یک دایرکتوری غیرخالی باشد، تنها در صورتی با موفقیت حذف خواهد شد که --force یا --delete فعال باشند. بهجز این، این گزینه از هر نوع پردازش حذف دیگری مستقل است.
- پروندههای مبدأ مفقود توسط مدخلهای ویژه فهرست پرونده نمایش داده میشوند که در خروجی --list-only بهصورت یک مدخل "*missing" نشان داده میشوند.
- --ignore-errors
- به --delete میگوید حتی در صورت وجود خطاهای I/O، به کار خود ادامه داده و پروندهها را حذف کند.
- --force
- این گزینه به rsync میگوید در صورتی که قرار است یک دایرکتوری غیرخالی با یک غیردایرکتوری جایگزین شود، آن را حذف کند. این تنها زمانی مرتبط است که حذفها فعال نباشند (برای جزئیات --delete را ببینید).
- --max-delete=NUM
- این گزینه به rsync میگوید بیش از NUM پرونده یا دایرکتوری را حذف نکند. اگر از این حد فراتر رود، از تمام حذفهای بعدی تا پایان انتقال صرفنظر میشود. در پایان، rsync یک هشدار (شامل تعداد حذفهای نادیدهگرفتهشده) صادر کرده و با کد خطای 25 خارج میشود (مگر اینکه شرایط خطای مهمتری نیز رخ داده باشد).
- میتوانید --max-delete=0 را مشخص کنید تا در مورد هر پرونده اضافی در مقصد بدون حذف هیچیک از آنها هشدار داده شود. هشدار: یک کلاینت rsync قدیمیتر از 3.0.0 (مارس ۲۰۰۸) با --max-delete=0 مانند نامحدود رفتار میکند، بنابراین اگر ممکن است دستور توسط چنین rsync قدیمی اجرا شود، از --max-delete=-1 استفاده کنید. (یک کلاینت 3.0.0 یا جدیدتر با هدایت گزینه بهصورت --max-delete=-1 از سیستم راهدور قدیمی محافظت میکند.)
- --max-size=SIZE
- این گزینه به rsync میگوید از انتقال هر پروندهای که بزرگتر از SIZE مشخصشده باشد خودداری کند. یک مقدار عددی میتواند با یک رشته برای تعیین واحدهای عددی پسونددهی شود یا بدون پسوند برای مشخص کردن بایت رها شود، و مقدار عددی میتواند دارای بخش کسری باشد، مانند --max-size=1.5m.
- این گزینه یک TRANSFER RULE است، بنابراین انتظار هیچ اثر جانبی ناشی از مستثنیسازی (exclude) را نداشته باشید.
- حرف اول رشته واحدها میتواند B (بایت)، K (کیلو)، M (مگا)، G (گیگا)، T (ترا) یا P (پتا) باشد. اگر رشته یک نویسه تکی باشد یا "ib" به آن اضافه شده باشد (مانند "G" یا "GiB")، واحدها مضاربی از ۱۰۲۴ هستند. اگر از یک پسوند دو حرفی استفاده کنید که به "B" ختم میشود (مانند "kb")، واحدهایی به دست میآورید که مضاربی از ۱۰۰۰ هستند. حروف رشته میتوانند هر ترکیبی از حروف بزرگ و کوچک باشند که میخواهید استفاده کنید.
- در نهایت، اگر رشته به "+1" یا "-1" ختم شود، به اندازه یک بایت در جهت نشاندادهشده تغییر مکان مییابد. بزرگترین مقدار ممکن معمولاً 8192P-1 است.
- مثالها: --max-size=1.5mb-1 برابر با ۱۴۹۹۹۹۹ بایت است، و --max-size=2g+1 برابر با ۲۱۴۷۴۸۳۶۴۹ بایت است.
- --min-size=SIZE
- این گزینه به rsync میگوید از انتقال هر پروندهای که کوچکتر از SIZE مشخصشده باشد خودداری کند، که میتواند به عدم انتقال پروندههای کوچک و زائد کمک کند. برای شرح SIZE و اطلاعات دیگر، گزینه --max-size را ببینید.
- --max-alloc=SIZE
- بهطور پیشفرض rsync هر malloc/realloc منفرد را به اندازهای در حدود 1GB محدود میکند. برای بیشتر کاربران این محدودیت به خوبی عمل کرده و از خطای پروتکلی که منجر به درخواست مقادیر بسیار زیاد حافظه توسط rsync میشود جلوگیری میکند. با این حال، اگر در یک انتقال میلیونها پرونده دارید، سرور حافظه زیادی دارد و نمیخواهید انتقال خود را به چندین بخش تقسیم کنید، میتوانید حد مجاز هر تخصیص را افزایش دهید تا به rsync اجازه مصرف حافظه بیشتری داده شود.
- به یاد داشته باشید که این محدودیتی برای اندازه کل حافظه تخصیصیافته نیست، بلکه مقداری برای بررسی سلامت هر تخصیص منفرد است.
- برای توضیحات درباره چگونگی تعیین SIZE گزینه --max-size را ببینید. پسوند پیشفرض در صورت مشخص نشدن، بایت است.
- از نسخه 3.2.7، مقدار 0 روشی آسان برای تعیین SIZE_MAX (بزرگترین حد ممکن) بود. با این حال، از نسخه 3.5.0 به بعد، مقدار 0 به دلایل امنیتی نامعتبر دانسته و رد میشود (یک سقف 0 بایتی میتواند برای غیرفعال کردن محدودیت تخصیص استفاده شود که ممکن است منجر به حمله انکار سرویس از طریق اتمام حافظه گردد). اگر حد بسیار بالایی میخواهید، یک مقدار بزرگ صریح تعیین کنید.
- میتوانید با استفاده از متغیر محیطی RSYNC_MAX_ALLOC و مقادیر SIZE پشتیبانیشده توسط این گزینه، یک مقدار پیشفرض تنظیم کنید. اگر rsync در سمت مقصد گزینه --max-alloc را متوجه نشود، میتوانید مقدار محیطی را با مشخص کردن --max-alloc=1g بازنویسی کنید، که باعث میشود rsync از ارسال گزینه به سمت مقصد خودداری کند (زیرا "1G" پیشفرض است).
- --block-size=SIZE, -B
- این گزینه اندازه بلوک استفادهشده در الگوریتم انتقال دلتای rsync را به یک مقدار ثابت تحمیل میکند. این مقدار بهطور عادی بر اساس اندازه هر پروندهای که بهروزرسانی میشود انتخاب میگردد. برای جزئیات به گزارش فنی مراجعه کنید.
- مقدار SIZE را میتوان با یک پسوند تعیین کرد، همانطور که در گزینه --max-size توضیح داده شده است.
- --rsh=COMMAND, -e
- این گزینه به شما اجازه میدهد تا یک برنامه پوسته راهدور جایگزین برای ارتباط بین نسخههای محلی و راهدور rsync انتخاب کنید. معمولاً rsync بهطور پیشفرض برای استفاده از ssh پیکربندی شده است.
- اگر این گزینه همراه با [user@]host::module/path استفاده شود، آنگاه پوسته راهدور COMMAND برای اجرای یک دیمن rsync روی میزبان راهدور استفاده خواهد شد و تمامی دادهها به جای اتصال سوکت مستقیم به یک دیمن در حال اجرای rsync در میزبان راهدور، از طریق آن اتصال پوسته راهدور منتقل میشوند. بخش USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION در بالا را ببینید.
- متغیر محیطی RSYNC_PORT زمانی که اتصال دیمن از طریق یک اتصال پوسته راهدور برقرار میشود، تنظیم خواهد شد. اگر پورت پیشفرض دیمن فرض شود، مقدار آن روی 0 قرار میگیرد، یا روی مقدار پورت rsync تنظیم میشود که از طریق گزینه --port یا یک مقدار پورت غیرخالی در نشانی rsync:// مشخص شده است (برای مثال rsync://host.example.com:984). این مورد زمانی مفید است که برنامه در حال اجرا واقعاً rsync نبوده بلکه اسکریپت کمکی مانند SSL یا stunnel باشد؛ اسکریپت میتواند از RSYNC_PORT برای تشخیص اتصال به پورت پیشفرض یا جایگزین استفاده کند.
- آرگومانهای خط فرمان در COMMAND مجاز هستند، به شرطی که COMMAND به عنوان یک آرگومان واحد به rsync ارائه شود. برای جداسازی دستور و آرگومانها از یکدیگر باید از فاصله (نه تب یا سایر فاصلههای خالی) استفاده کنید، و میتوانید برای حفظ فاصلهها در یک آرگومان از نقلقول تکی یا دوتایی (اما نه بکاسلش) استفاده کنید. توجه داشته باشید که تکرار نقلقول تکی در یک رشته با نقلقول تکی، یک نقلقول تکی ایجاد میکند؛ همچنین برای نقلقولهای دوتایی نیز چنین است (هرچند باید توجه داشته باشید که کدام نقلقولها توسط پوسته شما و کدام نقلقولها توسط rsync پردازش میشوند). چند مثال:
-
-e 'ssh -p 2234' -e 'ssh -o "ProxyCommand nohup ssh firewall nc -w1 %h %p"'
- (توجه داشته باشید که کاربران ssh میتوانند بهجای این کار، گزینههای اتصال مختص هر میزبان را در پروندهٔ .ssh/config خود سفارشیسازی کنند.)
- همچنین میتوانید برنامهٔ پوستهٔ راهدور را با استفاده از متغیر محیطی RSYNC_RSH مشخص کنید که همان دامنهٔ مقادیر -e را میپذیرد.
- همچنین گزینهٔ --blocking-io را ببینید که تحت تأثیر این گزینه قرار میگیرد.
- --rsync-path=PROGRAM
- از این گزینه برای تعیین برنامهای که باید جهت راهاندازی rsync روی ماشین راهدور اجرا شود، استفاده کنید. معمولاً زمانی کاربرد دارد که rsync در مسیر پیشفرض پوستهٔ راهدور قرار ندارد (مانند --rsync-path=/usr/local/bin/rsync). توجه داشته باشید که PROGRAM بهکمک یک پوسته اجرا میشود، بنابراین میتواند هر برنامه، اسکریپت، یا دنبالهای از دستورات باشد، تا زمانی که ورودی و خروجی استاندارد مورد استفادهٔ rsync برای ارتباط را مختل نکند.
- یک نمونهٔ کاربردی، تنظیم یک دایرکتوری پیشفرض متفاوت روی ماشین راهدور برای استفاده همراه با گزینهٔ --relative است. برای نمونه:
-
rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/
- --remote-option=OPTION, -M
- این گزینه برای شرایط پیشرفتهتری استفاده میشود که در آنها میخواهید برخی اثرات تنها به یک سمت از انتقال محدود شود. برای نمونه، اگر میخواهید --log-file=FILE و --fake-super را به سیستم راهدور ارسال کنید، آن را به این صورت مشخص کنید:
-
rsync -av -M --log-file=foo -M--fake-super src/ dest/
- اگر میخواهید گزینهای که بهطور معمول بر هر دو سمت اثر میگذارد تنها بر سمت محلی انتقال تأثیر بگذارد، نقیض آن را به سمت راهدور ارسال کنید. مانند این:
-
rsync -av -x -M--no-x src/ dest/
- در استفاده از این قابلیت محتاط باشید، زیرا ممکن است گزینهای را تغییر دهید که باعث شود rsync برداشت متفاوتی از دادههای مورد انتظار بعدی روی سوکت پیدا کند و با خطایی مبهم متوقف شود.
- توجه داشته باشید که باید برای هر گزینهٔ راهدوری که میخواهید ارسال کنید، یک گزینهٔ -M جداگانه به کار ببرید. در نسخههای قدیمیتر rsync، وجود هرگونه فاصله در آرگومان remote-option میتوانست باعث تقسیم آن به آرگومانهای راهدور مجزا شود، اما این کار در rsync امروزی نیازمند استفاده از --old-args است.
- هنگام انجام انتقال محلی، سمت «محلی» فرستنده و سمت «راهدور» گیرنده است.
- توجه داشته باشید برخی از نسخههای کتابخانهٔ تحلیل گزینهٔ popt دارای باگی هستند که مانع از استفاده از یک آرگومان چسبیدهٔ حاوی علامت مساوی در کنار حرف کوتاه گزینه میشود (مانند -M--log-file=/tmp/foo). اگر این باگ نسخهٔ popt شما را تحت تأثیر قرار داده است، میتوانید از نسخهٔ popt ارائهشده همراه با rsync استفاده کنید.
- --cvs-exclude, -C
- این یک میانبر کاربردی برای مستثنی کردن دامنهٔ گستردهای از پروندهها است که معمولاً نمیخواهید بین سیستمها منتقل شوند. این گزینه از الگوریتمی مشابه با CVS برای تعیین نادیده گرفتن پرونده استفاده میکند.
- فهرست موارد استثنا با موارد زیر مقداردهی اولیه میشود (این موارد اولیه به عنوان زوالپذیر -- علامتگذاری شدهاند؛ بخش قواعد فیلتر (FILTER RULES) را ببینید):
- RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/ .git/ .hg/ .bzr/
- سپس، فایلهای فهرستشده در $HOME/.cvsignore و هر فایلی که در متغیر محیطی CVSIGNORE آمده باشد به فهرست اضافه میشوند (تمام نامهای cvsignore با فاصله از هم جدا میشوند).
- در نهایت، هر فایلی که در همان پوشه با یک فایل .cvsignore قرار داشته باشد و با یکی از الگوهای فهرستشده در آن مطابقت کند نادیده گرفته میشود. برخلاف فایلهای فیلتر/استثنای rsync، این الگوها بر اساس فاصله از هم تفکیک میشوند. برای اطلاعات بیشتر به راهنمای cvs(1) مراجعه کنید.
- اگر -C را با قواعد --filter خود ترکیب میکنید، باید توجه داشته باشید که این استثناهای CVS صرفنظر از محل قرارگیری -C در خط فرمان، به انتهای قواعد شما اضافه میشوند. این مسئله باعث میشود نسبت به قواعدی که صریحاً تعیین کردهاید اولویت پایینتری داشته باشند. اگر میخواهید محل درج این استثناهای CVS در قواعد فیلتر خود را کنترل کنید، باید گزینه خط فرمانی -C را حذف کرده و از ترکیب --filter=:C و --filter=-C استفاده کنید (چه در خط فرمان یا با قرار دادن قواعد ":C" و "-C" در یک فایل فیلتر در کنار سایر قواعدتان). گزینه نخست، پویش پوشهبهپوشه برای فایل .cvsignore را فعال میکند. گزینه دوم، استثناهای CVS اشارهشده در بالا را یکباره وارد میکند.
- --filter=RULE, -f
- این گزینه امکان افزودن قواعد برای مستثنی کردن انتخابی فایلهای مشخص از فهرست فایلهای در حال انتقال را فراهم میکند. این قابلیت بیشترین کاربرد را در ترکیب با انتقال بازگشتی دارد.
- میتوانید به تعداد دلخواه از گزینه --filter در خط فرمان برای ساخت فهرست فایلهای استثنا استفاده کنید. اگر فیلتر شامل فاصله است، حتماً آن را درون علامت نقلقول قرار دهید تا پوسته، قاعده را به عنوان یک آرگومان واحد به rsync تحویل دهد. میتوانید به جای فاصله از زیرخط (_) برای جداسازی قاعده از آرگومان آن استفاده کنید.
- برای اطلاعات دقیق درباره این گزینه، بخش قواعد فیلتر (FILTER RULES) را ببینید.
- -F
- گزینه -F روشی خلاصهنویسی برای افزودن دو قاعده --filter به دستور شما است. نخستین باری که استفاده شود، خلاصهای از این قاعده است:
-
--filter='dir-merge /.rsync-filter'
- این گزینه به rsync میگوید در سلسلهمراتب به دنبال فایلهای .rsync-filter مربوط به هر دایرکتوری بگردد و از قواعد آنها برای فیلتر کردن فایلها در انتقال استفاده کند. اگر -F تکرار شود، خلاصهای از این قاعده خواهد بود:
-
--filter='exclude .rsync-filter'
- این کار خود فایلهای .rsync-filter را از فرایند انتقال مستثنی میکند.
- برای اطلاعات دقیق درباره نحوه کارکرد این گزینهها بخش «قواعد فیلتر (FILTER RULES)» را ببینید.
- --exclude=PATTERN
- این گزینه شکل سادهشدهای از گزینه --filter است که یک قاعده مستثنیسازی (exclude) را مشخص میکند و اجازه استفاده از ساختار نحوی کامل تجزیه قواعد فیلتر عادی را نمیدهد. این معادل با مشخص کردن -f'- PATTERN' است.
- برای اطلاعات دقیق درباره این گزینه بخش «قواعد فیلتر (FILTER RULES)» را ببینید.
- --exclude-from=FILE
- این گزینه به گزینه --exclude مربوط است، اما یک FILE حاوی الگوهای مستثنیسازی (یک الگو در هر خط) را مشخص میکند. خطوط خالی در فایل نادیده گرفته میشوند، همچنین کامنتهای تمامخطی که با ';' یا '#' شروع میشوند نادیده گرفته میشوند (قواعد نام فایلی که شامل این کاراکترها هستند تحت تأثیر قرار نمیگیرند).
- اگر خطی با "- " (خط تیره، فاصله) یا "+ " (مثبت، فاصله) آغاز شود، نوع قاعده بهطور صریح به عنوان مستثنیسازی یا گنجاندن مشخص میشود (به ترتیب). هر قاعدهای بدون چنین پیشوندی به عنوان مستثنیسازی در نظر گرفته میشود.
- اگر خطی فقط شامل "!" باشد، قواعد فیلتر فعلی پیش از افزودن هر قاعده دیگر پاکسازی میشوند.
- اگر FILE برابر با '-' باشد، فهرست از ورودی استاندارد خوانده خواهد شد.
- --include=PATTERN
- این گزینه شکل سادهشدهای از گزینه --filter است که یک قاعده گنجاندن (include) را مشخص میکند و اجازه استفاده از ساختار نحوی کامل تجزیه قواعد فیلتر عادی را نمیدهد. این معادل با مشخص کردن -f'+ PATTERN' است.
- برای اطلاعات دقیق درباره این گزینه بخش «قواعد فیلتر (FILTER RULES)» را ببینید.
- --include-from=FILE
- این گزینه به گزینه --include مربوط است، اما یک FILE حاوی الگوهای گنجاندن (یک الگو در هر خط) را مشخص میکند. خطوط خالی در فایل نادیده گرفته میشوند، همچنین کامنتهای تمامخطی که با ';' یا '#' شروع میشوند نادیده گرفته میشوند (قواعد نام فایلی که شامل این کاراکترها هستند تحت تأثیر قرار نمیگیرند).
- اگر خطی با "- " (خط تیره، فاصله) یا "+ " (مثبت، فاصله) آغاز شود، نوع قاعده بهطور صریح به عنوان مستثنیسازی یا گنجاندن مشخص میشود (به ترتیب). هر قاعدهای بدون چنین پیشوندی به عنوان گنجاندن در نظر گرفته میشود.
- اگر خطی فقط شامل "!" باشد، قواعد فیلتر فعلی پیش از افزودن هر قاعده دیگر پاکسازی میشوند.
- اگر FILE برابر با '-' باشد، فهرست از ورودی استاندارد خوانده خواهد شد.
- --files-from=FILE
- استفاده از این گزینه به rsync میگوید فهرست دقیق فایلها برای انتقال را از FILE (یا در صورتی که FILE برابر با '-' باشد، از ورودی استاندارد) بخواند. همچنین رفتار پیشفرض rsync را تغییر میدهد تا انتقال صرفاً فایلها و دایرکتوریهای مشخصشده آسانتر شود:
- o
- گزینهٔ --relative (-R) بهطور ضمنی فعال است، که اطلاعات مسیر مشخصشده برای هر مورد در پرونده را حفظ میکند (در صورت تمایل به غیرفعالکردن آن از --no-relative یا --no-R استفاده کنید).
- o
- گزینهٔ --dirs (-d) بهطور ضمنی فعال است، که دایرکتوریهای مشخصشده در فهرست را در مقصد ایجاد میکند، به جای آنکه با ایجاد سر و صدا از آنها صرفنظر کند (در صورت تمایل به غیرفعالکردن آن از --no-dirs یا --no-d استفاده کنید).
- o
- رفتار گزینهٔ --archive (-a) شامل گزینهٔ --recursive (-r) نمیشود، بنابراین در صورت نیاز، آن را صراحتاً مشخص کنید.
- o
- این اثرات جانبی، حالت پیشفرض rsync را تغییر میدهند، بنابراین موقعیت گزینهٔ --files-from در خط فرمان تأثیری بر نحوهٔ پردازش سایر گزینهها ندارد (به عنوان مثال -a قبل یا بعد از --files-from یکسان عمل میکند، همانطور که --no-R و سایر گزینهها عمل میکنند).
- نامهای پروندهای که از FILE خوانده میشوند همگی نسبت به دایرکتوری مبدأ نسبی هستند: هرگونه اسلش ابتدایی حذف میشود، و مؤلفههای ".." برطرف میشوند تا یک مدخل نتواند به بالاتر از دایرکتوری مبدأ برود -- به عنوان مثال "../foo" به عنوان "foo" در داخل دایرکتوری مبدأ در نظر گرفته میشود. مدخلی که پس از این برطرفسازی همچنان حاوی یک ".." فعال باشد (موردی که قابل خلاصهسازی نباشد) با خطا رد میشود. مدخلهای خالی و همچنین یادداشتهای کل مدخل که با ';' یا '#' آغاز میشوند، نادیده گرفته میشوند. برای مثال، این دستور را در نظر بگیرید:
-
rsync -a --files-from=/tmp/foo /usr remote:/backup
- اگر پروندهٔ /tmp/foo حاوی رشتهٔ "bin" (یا حتی "/bin") باشد، دایرکتوری /usr/bin به صورت /backup/bin در میزبان راهدور ایجاد خواهد شد. اگر حاوی "bin/" باشد (به اسلش انتهایی توجه کنید)، محتویات بیواسطهٔ دایرکتوری نیز بدون نیاز به ذکر صریح در پرونده ارسال خواهد شد. در هر دو حالت، اگر گزینهٔ -r فعال باشد، کل ساختار سلسلهمراتبی آن دایرکتوری نیز منتقل میشود (به یاد داشته باشید که -r باید صراحتاً همراه با --files-from مشخص شود، زیرا بهطور ضمنی از -a ناشی نمیشود). همچنین توجه داشته باشید که اثر گزینهٔ -r (که بهطور پیشفرض فعال است) تنها بازتولید اطلاعات مسیری است که از پرونده خوانده شده است -- این گزینه تکثیر مسیر مشخصشده در مبدأ (/usr در این مورد) را تحمیل نمیکند.
- علاوه بر این، در صورتی که عبارت ":host" را در جلوی نام پرونده مشخص کنید، پروندهٔ --files-from میتواند به جای میزبان محلی از میزبان راهدور خوانده شود (میزبان باید با یکی از دو طرف انتقال مطابقت داشته باشد). به عنوان یک میانبر، میتوانید فقط از پیشوند ":" استفاده کنید که به معنای «استفاده از طرف راهدور انتقال» است. برای مثال:
-
rsync -a --files-from=:/path/file-list src:/ /tmp/copy
- این دستور تمامی پروندههای مشخصشده در پروندهٔ /path/file-list را که در میزبان راهدور "src" قرار داشت رونوشت میکند.
- اگر گزینههای --iconv و --secluded-args مشخص شده باشند و نامهای پروندهٔ --files-from از یک میزبان به میزبان دیگر ارسال شوند، نام پروندهها از مجموعهنویسهٔ (charset) میزبان فرستنده به مجموعهنویسهٔ میزبان گیرنده ترجمه خواهند شد.
- نکته: مرتبسازی فهرست پروندهها در ورودی --files-from به rsync کمک میکند تا کارآمدتر عمل کند، زیرا از پیمایش مجدد اجزای مسیری که بین مدخلهای مجاور مشترک هستند جلوگیری میکند. اگر ورودی مرتب نشده باشد، ممکن است برخی از اجزای مسیر (دایرکتوریهای ضمنی) چندین بار پویش شوند، و rsync در نهایت پس از تبدیل آنها به عناصر فهرست پرونده، موارد تکراری را حذف خواهد کرد.
- --from0, -0
- این گزینه به rsync اعلام میکند که قواعد یا نامهای فایلی که از یک فایل میخواند با نویسه تهی ('\0') خاتمه مییابند، نه با NL، CR یا CR+LF. این مورد بر --exclude-from، --include-from، --files-from و هر فایل ادغامشده مشخصشده در قاعده --filter تأثیر میگذارد. بر --cvs-exclude تأثیری ندارد (زیرا تمام نامهای خواندهشده از فایل .cvsignore با فضای خالی تفکیک میشوند).
- --old-args
- این گزینه به rsync میگوید از مقادیر آرگومانهای ارسالی به سمت راهدور در برابر تفکیک ناخواسته کلمات یا سایر تفاسیر نادرست محافظت نکند. همچنین به کلاینت اجازه میدهد به جای ایجاد خطا، با یک آرگومان خالی مانند یک "." رفتار کند.
- پیشفرض در rsync امروزی این است که نویسههای «فعال در شل» (شامل فاصلهها) در آرگومانهای ارسالی به شل راهدور با بکاسلش گریزدهی (escape) شوند. نویسههای عامهپسند (wildcard) شامل *، ?، [ و ] در آرگومانهای نام فایل گریزدهی نمیشوند (امکان بسط آنها به چندین نام فایل فراهم میماند)، در حالی که در آرگومانهای گزینهها مانند --usermap محافظت میشوند.
- اگر اسکریپتی دارید که نیازمند تفکیک آرگومان به سبک قدیمی در نامهای فایل است، این گزینه را یک بار مشخص کنید. اگر شل راهدور با هر نوع گریزدهی بکاسلش مشکل دارد، این گزینه را دو بار مشخص کنید.
- امکان کنترل این تنظیم از طریق متغیر محیطی RSYNC_OLD_ARGS نیز وجود دارد. با مقدار "1"، rsync به صورت پیشفرض روی تنظیم تکگزینهای قرار میگیرد. با مقدار "2" (یا بیشتر)، پیشفرض روی تنظیم گزینه تکرارشده قرار میگیرد. با مقدار "0"، رفتار پیشفرض گریزدهی اعمال میشود. متغیر محیطی همواره توسط گزینههای مثبت یا منفیِ دستی بازنویسی میشود (گزینه منفی --no-old-args است).
- توجه داشته باشید این گزینه بررسی امنیتی اضافی را نیز غیرفعال میکند؛ بررسیای که مانع از گنجاندن موارد سطحبالای ناخواسته در فهرست فایلها توسط فرستنده راهدور میشود. این اثر جانبی لازم است زیرا هنگام تفسیر آرگومانها توسط شل راهدور، پیشبینی دقیق نامها ممکن نیست.
- این گزینه با گزینه --secluded-args تداخل دارد.
- --secluded-args, -s
- این گزینه تمام نامهای فایل و اکثر گزینهها را به جای خط فرمانِ شل راهدور، از طریق پروتکل به rsync راهدور ارسال میکند؛ این امر احتمال تغییر آنها توسط شل راهدور را از بین میبرد. نویسههای عامهپسند به جای شل، توسط rsync در میزبان راهدور بسط داده میشوند.
- بدون این گزینه، rsync برای جلوگیری از مسائلی چون تفکیک فاصله و عوارض ناخواسته نویسههای خاص، آرگومانها را با بکاسلش گریزدهی میکند که معمولاً برای جلوگیری از تغییرات شل کافی است. این گزینه زمانی کاربرد دارد که تبدیل مجموعه نویسههای آرگومان برای میزبان راهدور لازم باشد، شل راهدور با روش پیشفرض گریزدهی سازگار نباشد، یا نیاز به دور زدن خط فرمان شل راهدور برای اکثر گزینهها و آرگومانها وجود داشته باشد.
- این گزینه با نسخههای rsync راهدور قبل از 3.0.0 (مارس ۲۰۰۸) ناسازگار است. همچنین عیب رد شدن توسط شلهای محدودشده (restricted shells) را دارد که مقادیر تمام گزینهها را جهت امنیت بررسی میکنند.
- در صورت ترکیب این گزینه با --iconv، آرگومانهای مربوط به سمت راهدور از مجموعه نویسههای محلی به راهدور ترجمه میشوند. این ترجمه قبل از بسط نویسههای عامهپسند رخ میدهد. گزینه --files-from را نیز ببینید.
- کنترل این تنظیم از طریق متغیر محیطی RSYNC_PROTECT_ARGS نیز ممکن است. با مقدار غیرصفر، به طور پیشفرض فعال و در غیر این صورت غیرفعال خواهد بود. هر دو وضعیت با مشخص کردن دستی نسخه مثبت یا منفی این گزینه بازنویسی میشوند (نسخههای منفی --no-s و --no-secluded-args هستند). متغیر محیطی غیرصفرِ RSYNC_OLD_ARGS نیز بر این متغیر محیطی تقدم دارد.
- این گزینه با گزینه --old-args تداخل دارد.
- این گزینه قبلاً --protect-args نامیده میشد (قبل از ۳.۲.۶، سپتامبر ۲۰۲۲) و آن نام قدیمیتر همچنان میتواند استفاده شود (اگرچه مشخص کردن آن به صورت -s همیشه سادهترین و سازگارترین انتخاب است).
- --trust-sender
- این گزینه دو بررسی اعتبارسنجی اضافی را که یک کلاینت محلی روی فهرست فایل ایجاد شده توسط فرستنده راهدور انجام میدهد، غیرفعال میکند. این گزینه تنها زمانی باید استفاده شود که به فرستنده اعتماد داشته باشید که مورد مخربی در فهرست فایل قرار نمیدهد (چیزی که احتمالاً میتواند از طریق یک rsync دستکاریشده، یک شل دستکاریشده، یا برخی دستکاریهای مشابه دیگر انجام شود).
- بهطور معمول، کلاینت rsync هنگام دریافت فایلها از یک rsync راهدور، دو بررسی اعتبارسنجی اضافی را انجام میدهد:
- توجه داشته باشید که اگر گزینهای با اعتبارسنجی تداخل داشته باشد، گزینههای مختلف میتوانند یک یا هر دوی این بررسیها را غیرفعال کنند. برای مثال:
- o
- استفاده از یک فایل فیلتر به ازای هر دایرکتوری (per-directory)، قواعد فیلتری را میخواند که فقط سرور از آنها مطلع است، بنابراین بررسی فیلتر غیرفعال میشود.
- o
- استفاده از گزینه --old-args به فرستنده اجازه میدهد آرگومانهای درخواستشده را دستکاری کند، بنابراین بررسی آرگومان غیرفعال میشود.
- o
- خواندن فهرست files-from از سمت سرور بدین معنی است که کلاینت فهرست آرگومانها را نمیداند، بنابراین بررسی آرگومان غیرفعال میشود.
- o
- استفاده از --read-batch هر دو بررسی را غیرفعال میکند زیرا محتویات فایل دستهای هنگام ایجاد آن تأیید شده است.
- اگر تطبیق الگوی اضافی سرعت کار را در یک انتقال بسیار بزرگ کاهش میدهد، این گزینه ممکن است به یک کلاینت یا سرور کمتوان کمک کند. همچنین میتواند برای انتقال از یک فرستنده قابل اعتماد به عنوان یک راهکار موقت در صورت وجود باگ در منطق اعتبارسنجی استفاده شود.
- هنگام استفاده از این گزینه، ایده خوبی است که یک دایرکتوری مقصد اختصاصی تعیین کنید، همانطور که در بخش SECURITY مورد بحث قرار گرفته است.
- --copy-as=USER[:GROUP]
- این گزینه به rsync دستور میدهد که از USER و (در صورت تعیین پس از دو نقطه) از GROUP برای عملیات کپی استفاده کند. این تنها در صورتی کار میکند که کاربری که rsync را اجرا میکند، توانایی تغییر کاربر را داشته باشد. اگر گروه مشخص نشده باشد، از گروههای پیشفرض کاربر استفاده میشود.
- این گزینه میتواند به کاهش خطر در مواردی کمک کند که rsync به عنوان root اجرا میشود، و در حال کپی به داخل یا خارج از دایرکتوریای است که ممکن است تغییرات زندهای در آن رخ دهد، و شما میخواهید مطمئن شوید که اقدامات خواندن یا نوشتن در سطح root روی فایلهای سیستمی امکانپذیر نیست. در حالی که میتوانید به جای آن، کل rsync را به عنوان کاربر تعیینشده اجرا کنید، گاهی اوقات نیاز است اعتبارنامههای دسترسی به میزبان در سطح root استفاده شود؛ بنابراین این ویژگی به rsync اجازه میدهد پس از برقراری ارتباط remote-shell یا دیمن، دسترسی root را برای بخش کپیِ عملیات رها کند.
- این گزینه تنها روی یک طرف انتقال تأثیر میگذارد مگر اینکه انتقال محلی باشد، که در این صورت روی هر دو طرف اثر میگذارد. از --remote-option برای تأثیرگذاری روی طرف راهدور استفاده کنید، مانند -M--copy-as=joe. برای یک انتقال محلی، فایل پشتیبانی lsh (یا lsh.sh) یک اسکریپت کمکی شل محلی ارائه میدهد که میتواند برای تعیین مشخصه میزبان "localhost:" یا "lh:" بدون نیاز به راهاندازی هیچ شل راهدوری استفاده شود، که به شما امکان میدهد گزینههای راهدوری را تعیین کنید که بر طرفی از انتقال که از مشخصه میزبان استفاده میکند اثر بگذارد (و استفاده از نام میزبان "lh" از بازنویسی دایرکتوری راهدور به دایرکتوری خانگی کاربر جلوگیری میکند).
- برای مثال، دستور rsync زیر فایلهای محلی را با عنوان کاربر "joe" مینویسد:
-
sudo rsync -aiv --copy-as=joe host1:backups/joe/ /home/joe/
- این کار باعث میشود مالکیت تمام فایلها برای کاربر "joe" تنظیم شود، گروهها به گروههای دردسترس آن کاربر محدود شوند، و سوءاستفاده زمانی (timed exploit) از مسیر برای اعمال تغییر روی فایلی که کاربر joe اجازه تغییر آن را ندارد، غیرممکن شود.
- دستور زیر یک رونوشت محلی را با عنوان کاربر "joe" در دایرکتوری "dest/" انجام میدهد (با این فرض که support/lsh را در دایرکتوری درون $PATH خود نصب کرده باشید):
-
sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/
- --temp-dir=DIR, -T
- این گزینه به rsync دستور میدهد تا هنگام ساخت رونوشتهای موقت از فایلهای منتقلشده در سمت گیرنده، از DIR به عنوان دایرکتوری موقت کاری (scratch) استفاده کند. رفتار پیشفرض، ساخت هر فایل موقت در همان دایرکتوری فایل مقصد مربوطه است. نام فایلهای موقت درون DIR مشخصشده دارای پیشوند نقطه اضافی نخواهد بود، هرچند همچنان یک پسوند تصادفی به آنها اضافه میشود.
- این گزینه بیشتر زمانی استفاده میشود که پارتیشن دیسک گیرنده فضای خالی کافی برای نگهداری رونوشتی از بزرگترین فایل در حال انتقال را نداشته باشد. در این حالت (یعنی زمانی که دایرکتوری موقت روی پارتیشن دیسک دیگری قرار دارد)، rsync قادر نخواهد بود هر فایل موقت دریافت شده را مستقیماً بر روی فایل مقصد مربوطه تغییر نام دهد، بلکه در عوض باید آن را در محل مقصد رونوشت کند. rsync این کار را با بازنویسی فایل روی فایل مقصد انجام میدهد؛ به این معنی که فایل مقصد در طول این رونوشت شامل دادههای ناقص و بریدهشده خواهد بود. اگر این کار بدین شکل انجام نمیشد، ممکن بود فایل قدیمی همچنان فضای دیسک را اشغال کند (اگر برنامهای آن را باز نگه داشته باشد)، و در نتیجه فضای کافی برای قرارگیری نسخه جدید روی دیسک به صورت همزمان وجود نداشته باشد.
- اگر از این گزینه به دلایلی غیر از کمبود فضای دیسک استفاده میکنید، ممکن است بخواهید آن را با گزینه --delay-updates ترکیب کنید؛ این کار تضمین میکند که تمام فایلهای رونوشتشده در زیردایرکتوریهایی در سلسلهمراتب مقصد قرار بگیرند و منتظر پایان انتقال بمانند. اگر فضای کافی برای تکثیر تمام فایلهای ورودی در پارتیشن مقصد ندارید، راه دیگر برای اعلام این موضوع به rsync که بیش از حد نگران فضای دیسک نیستید، استفاده از گزینه --partial-dir با یک مسیر نسبی است؛ زیرا این به rsync میگوید ذخیره موقت یک رونوشت از یک تکفایل در یک زیردایرکتوری درون سلسلهمراتب مقصد مجاز است، و rsync از partial-dir به عنوان یک محیط آمادهسازی برای آوردن فایل رونوشتشده استفاده کرده و سپس آن را از آنجا به محل اصلی تغییر نام میدهد. (مشخص کردن --partial-dir با یک مسیر مطلق این اثر جانبی را ندارد.)
- --fuzzy, -y
- این گزینه به rsync میگوید که باید به دنبال یک فایل پایه برای هر فایل مقصدی که وجود ندارد بگردد. با این گزینه، rsync در همان دایرکتوریِ فایل مقصد، به دنبال فایلی با اندازه و زمان تغییر یکسان، یا فایلی با نام مشابه میگردد. در صورت پیدا شدن، rsync از فایل پایه فازی برای افزایش سرعت انتقال استفاده میکند.
- اگر این گزینه تکرار شود، پایش فازی در دایرکتوریهای مقصد جایگزین منطبقی که از طریق --compare-dest، --copy-dest، یا --link-dest مشخص شدهاند نیز انجام خواهد شد.
- توجه داشته باشید که استفاده از گزینه --delete ممکن است فایلهای منطبق فازی بالقوه را حذف کند؛ بنابراین اگر نیاز به جلوگیری از این موضوع دارید، از --delete-after استفاده کنید یا برخی استثنائات نام فایل را مشخص نمایید.
- --compare-dest=DIR
- این گزینه به rsync دستور میدهد تا از DIR روی ماشین مقصد به عنوان یک سلسلهمراتب اضافی برای مقایسه فایلهای مقصد هنگام انجام انتقالها استفاده کند (در صورتی که فایلها در دایرکتوری مقصد موجود نباشند). اگر فایلی در DIR یافت شود که با فایل فرستنده یکسان باشد، آن فایل به دایرکتوری مقصد منتقل نخواهد شد. این ویژگی برای ایجاد یک پشتیبان پراکنده (sparse backup) تنها از فایلهایی که نسبت به پشتیبان قبلی تغییر کردهاند کاربرد دارد. این گزینه معمولاً برای رونوشت در یک دایرکتوری خالی (یا تازه ساختهشده) استفاده میشود.
- میتوان چندین دایرکتوری --compare-dest مشخص کرد، که باعث میشود rsync فهرست را به ترتیب تعیینشده برای یافتن یک تطابق دقیق جستجو کند. اگر تطابقی یافت شود که تنها در مشخصهها تفاوت دارد، یک رونوشت محلی ایجاد شده و مشخصهها بهروزرسانی میشوند. اگر تطابقی پیدا نشود، یک پرونده مبنا از یکی از DIRs انتخاب خواهد شد تا سرعت انتقال را بهبود بخشد.
- اگر DIR یک مسیر نسبی باشد، نسبت به دایرکتوری مقصد سنجیده میشود. همچنین --copy-dest و --link-dest را ببینید.
- نکته: در صورتی که تطابق دقیقی در یکی از سلسلهمراتبهای compare-dest یافت شود، rsync پرونده را از یک ساختار مقصد غیرخالی حذف میکند تا نتیجه نهایی بیشتر شبیه به یک رونوشت تازه باشد.
- --copy-dest=DIR
- این گزینه رفتاری مانند --compare-dest دارد، اما rsync پروندههای بدون تغییرِ یافتشده در DIR را نیز با استفاده از یک رونوشت محلی به دایرکتوری مقصد کپی میکند. این قابلیت برای انتقال به یک مقصد جدید بدون دستزدن به پروندههای موجود، و سپس تغییر مسیر آنی (flash-cutover) پس از انتقال موفقیتآمیز تمام پروندهها، کاربردی است.
- میتوان چندین دایرکتوری --copy-dest مشخص کرد، که باعث میشود rsync فهرست را به ترتیب تعیینشده برای یافتن یک پرونده بدون تغییر جستجو کند. اگر تطابقی یافت نشود، یک پرونده مبنا از یکی از DIRs انتخاب خواهد شد تا به افزایش سرعت انتقال کمک کند.
- اگر DIR یک مسیر نسبی باشد، نسبت به دایرکتوری مقصد سنجیده میشود. همچنین --compare-dest و --link-dest را ببینید.
- --link-dest=DIR
- این گزینه مشابه --copy-dest عمل میکند، با این تفاوت که پروندههای بدون تغییر از DIR به دایرکتوری مقصد پیوند سخت (hard link) میشوند. پروندهها باید در تمام مشخصههای حفظشده (مانند مجوزهای دسترسی و در صورت امکان مالکیت) یکسان باشند تا بتوانند به یکدیگر پیوند داده شوند. یک مثال:
-
rsync -av --link-dest=$PWD/prior_dir host:src_dir/ new_dir/
- اگر پروندهها پیوند نمیخورند، مشخصههای آنها را دوباره بررسی کنید. همچنین بررسی کنید که آیا برخی مشخصهها خارج از کنترل rsync تحمیل میشوند یا خیر؛ مانند گزینه سوار کردنی (mount option) که کاربر root را به یک کاربر منفرد محدود میکند (squish)، یا یک درایو جداشدنی را با مالکیت عمومی سوار میکند (مانند گزینه "Ignore ownership on this volume" در OS X).
- میتوان چندین دایرکتوری --link-dest تعیین کرد، که موجب میشود rsync فهرست را به ترتیب تعیینشده برای یافتن تطابق دقیق جستجو کند (محدودیت ۲۰ دایرکتوری برای این حالت وجود دارد). اگر تطابقی یافت شود که تنها در مشخصهها تفاوت دارد، یک رونوشت محلی ایجاد شده و مشخصهها بهروزرسانی میشوند. در صورت عدم یافتن تطابق، یک پرونده مبنا از یکی از DIRs انتخاب خواهد شد تا به افزایش سرعت انتقال کمک کند.
- هر سیستمپروندهای قادر به ایجاد پیوند سخت برای یک پیوند نمادین (symlink)، گره دستگاه (device node)، لوله FIFO یا سوکت نیست، و سیستمپرونده مقصد لزوماً نباید مشابه سامانهای باشد که rsync روی آن ساخته شده است -- ساختهای macOS روی APFS هستند که این امکان را دارد، اما ممکن است روی HFS+ بنویسند که از آن پشتیبانی نمیکند. در صورتی که مقصد از پیوند زدن چنین ورودیای امتناع کند، به جای آن کپی میشود و انتقال ادامه مییابد؛ بنابراین تنها همان ورودی مزیت صرفهجویی در فضا را از دست میدهد. این قاعده برای هر نوع خطای امتناع اعمال میشود، زیرا خطا به تنهایی علت را مشخص نمیکند: فراخوان link(2) خطای EPERM را هم برای سیستمپرونده فاقد قابلیت پیوند سخت و هم برای رد مجوز عادی گزارش میدهد. پروندههای معمولی همیشه به همین شکل رفتار کردهاند.
- یک حالت پوشش داده نشده است. با گزینه --hard-links (-H)، گروهی از چنین ورودیهایی که در مبدأ به یکدیگر پیوند سخت دارند، نیازمند یک پیوند دوم، از عضو اول به سایرین، در داخل خود مقصد هستند. در جایی که این پیوند نیز رد شود -- مقصدی که بهطور کلی قادر به پیوند سخت آن نوع داده نیست -- اعضای بعدی ساخته نمیشوند و انتقال با شکست مواجه میشود. استفاده از --link-dest روی یک سیستمپرونده دیگر مشکلی ندارد: در آن حالت فقط پیوند به DIR غیرممکن است، و پیوندهای درون ساختار مقصد همچنان با موفقیت ایجاد میشوند.
- این گزینه هنگام رونوشت به یک ساختار سلسلهمراتبی مقصدِ خالی بهترین بازدهی را دارد، زیرا ممکن است مشخصههای پروندههای موجود تغییر یابد و این امر میتواند از طریق پیوندهای سخت روی پروندههای مقصدِ جایگزین اثر بگذارد. همچنین، گزارش جزئیات تغییرات (itemizing) ممکن است کمی مبهم شود. توجه داشته باشید که تا پیش از نسخه 3.1.0 (سپتامبر ۲۰۱۳)، در صورتی که پرونده مقصد از قبل وجود داشت، تطابق دقیق دایرکتوری جایگزین هرگز پیدا نمیشد (و به مقصد پیوند داده نمیشد).
- توجه داشته باشید که اگر این گزینه را با --ignore-times ترکیب کنید، rsync هیچ فایلی را به یکدیگر پیوند نخواهد داد زیرا فقط فایلهای یکسان را به عنوان جایگزینی برای انتقال فایل پیوند میدهد، نه به عنوان یک بررسی اضافی پس از بهروزرسانی فایل.
- اگر DIR یک مسیر نسبی باشد، نسبت به دایرکتوری مقصد سنجیده میشود. همچنین گزینههای --compare-dest و --copy-dest را ببینید.
- توجه داشته باشید نسخههای rsync قبل از 2.6.1 (آوریل ۲۰۰۴) باگی داشتند که در صورت تعیین (یا ضمنی بودن) --owner (-o)، میتوانست مانع از کارکرد درست --link-dest برای کاربر غیر ریشه شود. میتوانید با اجتناب از گزینه -o (یا استفاده از --no-o) هنگام ارسال به یک rsync راهدور بسیار قدیمی، این باگ را دور بزنید.
- --compress, -z
- با این گزینه، rsync دادههای فایل را هنگام ارسال به ماشین مقصد فشرده میکند که مقدار دادههای در حال انتقال را کاهش میدهد -- قابلیتی که روی اتصالهای کند مفید است.
- برنامه rsync از چندین روش فشردهسازی پشتیبانی میکند و یکی را برای شما انتخاب خواهد کرد، مگر اینکه با استفاده از گزینه --compress-choice (--zc) انتخاب را اجبار کنید.
- دستور rsync --version را اجرا کنید تا فهرست پیشفرض فشردهسازی کامپایلشده در نسخه خود را ببینید.
- هنگامی که هر دو طرف انتقال حداقل نسخه 3.2.0 (ژوئن ۲۰۲۰) باشند، هر طرف الگوریتم با بالاترین اولویت خود را که در فهرست طرف مقابل نیز وجود دارد انتخاب میکند. هر دو طرف فهرستهای خود را با اولویت قویترین مرتب میکنند، بنابراین بر سر قویترین انتخاب مشترک توافق میکنند. اگر هیچ روش فشردهسازی مشترکی یافت نشود، rsync با یک خطا خارج میشود. اگر rsync راهدور بیش از حد قدیمی باشد و نتواند از مذاکره چکسام پشتیبانی کند، فهرست آن "zlib" فرض میشود.
- ترتیب پیشفرض را میتوان با تنظیم متغیر محیطی RSYNC_COMPRESS_LIST روی فهرستی از نامهای فشردهسازی مجاز که با فاصله جدا شدهاند، سفارشیسازی کرد. اگر رشته حاوی نویسه "&" باشد، به صورت "client string & server string" تفکیک میشود، در غیر این صورت همان رشته برای هر دو طرف اعمال میشود. اگر رشته (یا بخشی از رشته) فاقد نویسههای غیرفاصلهای باشد، فهرست فشردهسازی پیشفرض استفاده میشود. هر نام فشردهسازی ناشناخته از فهرست حذف میشود، اما فهرستی که تنها شامل نامهای نامعتبر باشد منجر به شکست مذاکره خواهد شد.
- برخی از نسخههای قدیمیتر rsync وجود دارند که برای رد کردن گزینه -z و الزام به استفاده از -zz پیکربندی شده بودند، زیرا کتابخانه فشردهسازی آنها با روش فشردهسازی پیشفرض zlib سازگار نبود. معمولاً میتوانید این رفتار غیرعادی را نادیده بگیرید، مگر اینکه سرور rsync خطا دهد و از شما بخواهد -zz را مشخص کنید.
- --compress-choice=STR, --zc=STR
- این گزینه میتواند برای بازنویسی مذاکره خودکار الگوریتم فشردهسازی که هنگام استفاده از --compress رخ میدهد، استفاده شود. این گزینه به معنی فعال بودن --compress است، مگر اینکه "none" مشخص شده باشد که در این صورت به معنی --no-compress خواهد بود.
- گزینههای فشردهسازی که ممکن است قادر به استفاده از آنها باشید عبارتند از:
- دستور rsync --version را اجرا کنید تا فهرست پیشفرض فشردهسازی کامپایلشده در نسخه خود را ببینید (که ممکن است با فهرست بالا تفاوت داشته باشد).
- توجه داشته باشید اگر خطایی درباره گزینهای به نام --old-compress یا --new-compress مشاهده کردید، این تلاش rsync برای ارسال گزینه --compress-choice=zlib یا --compress-choice=zlibx به شیوهای سازگار با گذشته است که نسخههای بیشتری از rsync آن را درک میکنند. این خطا نشان میدهد که نسخه قدیمیتر rsync روی سرور به شما اجازه تحمیل نوع فشردهسازی را نمیدهد.
- توجه داشته باشید که الگوریتم فشردهسازی «zlibx» صرفاً همان الگوریتم «zlib» است که دادههای منطبقشده از جریان فشردهسازی آن مستثنی شدهاند (جهت تلاش برای سازگاری بیشتر با یک پیادهسازی خارجی zlib).
- --compress-level=NUM, --zl=NUM
- صراحتاً سطح فشردهسازی مورد استفاده را بهجای استفاده از پیشفرض تنظیم کنید (نگاه کنید به --compress، -z). تا زمانی که سطح انتخابشده یک سطح «عدم فشردهسازی» برای الگوریتم فشردهسازی فعال نباشد، گزینه --compress بهطور ضمنی اعمال میشود (برای مثال، فشردهسازی zlib سطح 0 را بهعنوان «خاموش» در نظر میگیرد).
- مقادیر سطح بسته به چکسام فعال متفاوت است. از آنجا که rsync بهطور پیشفرض بر سر انتخاب چکسام مذاکره میکند (زمانی که rsync سمت راهدور به اندازه کافی جدید باشد)، ترکیب این گزینه با یک گزینه --compress-choice (--zc) میتواند مفید باشد مگر اینکه از انتخاب فعال مطمئن باشید. برای مثال:
-
rsync -aiv --zc=zstd --zl=22 host:src/ dest/
- برای فشردهسازی zlib و zlibx مقادیر معتبر از 1 تا 9 هستند که 6 مقدار پیشفرض است. مشخص کردن --zl=0 فشردهسازی را خاموش میکند، و مشخص کردن --zl=-1 سطح پیشفرض 6 را انتخاب میکند.
- برای فشردهسازی zstd مقادیر معتبر از -131072 تا 22 هستند که 3 مقدار پیشفرض است. مشخص کردن 0 مقدار پیشفرض 3 را انتخاب میکند.
- برای فشردهسازی lz4 هیچ سطحی وجود ندارد، بنابراین مقدار همیشه 0 است.
- اگر مقداری بیش از حد بزرگ یا بیش از حد کوچک مشخص کنید، عدد بدون هشدار به یک مقدار معتبر محدود میشود. این به شما امکان میدهد چیزی مانند --zl=999999999 را مشخص کنید و مطمئن باشید که صرفنظر از الگوریتم انتخابشده، حداکثر سطح فشردهسازی را دریافت خواهید کرد.
- اگر میخواهید از سطح فشردهسازی فعال مطلع شوید، --debug=nstr را مشخص کنید تا نتایج «رشته مذاکرهشده» را ببینید. این مورد خروجیای شبیه به "Client compress: zstd (level 3)" را (بههمراه انتخاب چکسام فعال) گزارش میدهد.
- --compress-threads=NUM, --zt=NUM
- تعداد ریسههای مورد نیاز برای ایجاد هنگام فشردهسازی دادهها را تنظیم کنید. تنظیم این گزینه روی 1 یا بیشتر به کتابخانه فشردهسازی دستور میدهد 1 یا چند ریسه برای فشردهسازی ایجاد کند. در حالت ایدهآل، اگر انتقال در سمت فرستنده محدود به پردازنده باشد، افزایش تعداد ریسهها سرعت انتقال را افزایش میدهد.
- این گزینه تأثیری بر خارج کردن از حالت فشرده ندارد.
- الگوریتمهای فشردهسازی که امکان استفاده از ریسهها را میدهند:
- o
- zstd (فقط زمانی که libzstd با پشتیبانی از ریسهبندی کامپایل شده باشد)
- اگر یکی از الگوریتمهای بالا بهعنوان --compression-choice انتخاب نشده باشد یا فشردهسازی فعال نباشد، این گزینه نادیده گرفته میشود.
- --skip-compress=LIST
- نکته: در حال حاضر هیچ روش فشردهسازی از تغییرات فشردهسازی بهازای هر فایل پشتیبانی نمیکند، بنابراین این گزینه هیچ تأثیری ندارد.
- فهرست پسوندهای فایلی را که تا حد امکان کمتر فشرده میشوند، بازنویسی کنید. rsync میتواند سطح فشردهسازی را بهصورت مجزا برای هر فایل و بر اساس پسوند فایل تنظیم کند. اگر الگوریتم فشردهسازی دارای سطح «خاموش» باشد، هیچ فشردهسازی برای آن فایلها رخ نمیدهد. سایر الگوریتمهایی که از تغییر برخط سطح جریان پشتیبانی میکنند، سطح فشردهسازی را به حداقل میرسانند تا مصرف پردازنده برای یک فایل منطبق تا حد امکان کاهش یابد.
- مقدار LIST باید یک یا چند پسوند پرونده (بدون نقطه) باشد که با اسلش (/) از هم جدا شدهاند. میتوانید یک رشته خالی مشخص کنید تا نشان دهید هیچ پروندهای نباید نادیده گرفته شود.
- تطبیق ساده ردههای نویسهای پشتیبانی میشود: هر کدام باید شامل فهرستی از حروف داخل قلابها باشد (برای نمونه هیچ رده خاصی مانند "[:alpha:]" پشتیبانی نمیشود و '-' معنای خاصی ندارد).
- نویسههای ستاره (*) و علامت سوال (?) هیچ معنای خاصی ندارند.
- در اینجا مثالی آمده است که ۶ پسوند را برای صرفنظر کردن مشخص میکند (زیرا ۱ مورد از ۵ قاعده با ۲ پسوند مطابقت دارد):
-
--skip-compress=gz/jpg/mp[34]/7z/bz2
- پسوندهای پیشفرض پرونده در فهرست skip-compress در این نسخه از rsync عبارتند از:
- 3g2 3gp 7z aac ace apk avi bz2 deb dmg ear f4v flac flv gpg gz iso jar jpeg jpg lrz lz lz4 lzma lzo m1a m1v m2a m2ts m2v m4a m4b m4p m4r m4v mka mkv mov mp1 mp2 mp3 mp4 mpa mpeg mpg mpv mts odb odf odg odi odm odp ods odt oga ogg ogm ogv ogx opus otg oth otp ots ott oxt png qt rar rpm rz rzip spx squashfs sxc sxd sxg sxm sxw sz tbz tbz2 tgz tlz ts txz tzo vob war webm webp xz z zip zst
- این فهرست در همه شرایط به جز یک مورد با فهرست --skip-compress شما جایگزین خواهد شد: رونوشت از یک دیمن rsync، پسوندهای نادیدهگرفتهشده شما را به فهرست فایلهای فشردهنشده خود اضافه میکند (و ممکن است فهرست آن با یک پیشفرض متفاوت پیکربندی شده باشد).
- --numeric-ids
- با این گزینه، rsync به جای استفاده از نامهای کاربری و گروهی و نگاشت آنها در هر دو طرف، شناسههای عددی (ID) گروه و کاربر را منتقل میکند.
- به طور پیشفرض، rsync از نام کاربری و نام گروه برای تعیین مالکیت فایلها استفاده میکند. شناسه ویژه uid 0 و گروه ویژه 0 هرگز از طریق نامهای کاربر/گروه نگاشت نمیشوند، حتی اگر گزینه --numeric-ids مشخص نشده باشد.
- اگر کاربر یا گروهی در سیستم مبدأ نامی نداشته باشد یا در سیستم مقصد مطابقتی برای آن پیدا نشود، شناسه عددی از سیستم مبدأ به جای آن استفاده میشود. همچنین به تنظیم use chroot در صفحه راهنمای rsyncd.conf برای نکاتی درباره چگونگی تأثیر تنظیمات chroot بر توانایی rsync در جستجوی نامهای کاربران و گروهها و کارهایی که میتوانید در این مورد انجام دهید مراجعه کنید.
- --usermap=STRING, --groupmap=STRING
- این گزینهها به شما اجازه میدهند کاربرانی و گروههایی را مشخص کنید که باید توسط سمت دریافتکننده به مقادیر دیگری نگاشت شوند. مقدار STRING شامل یک یا چند جفت مقدار FROM:TO است که با ویرگول از هم جدا شدهاند. هر مقدار منطبق FROM از سمت فرستنده با یک مقدار TO از سمت گیرنده جایگزین میشود. شما میتوانید نامهای کاربری یا شناسههای کاربری را برای مقادیر FROM و TO مشخص کنید، همچنین مقدار FROM میتواند یک رشته دارای نویسه عمومی (wild-card) باشد که با نامهای فرستنده مطابقت داده میشود (نویسههای عمومی با شمارههای ID مطابقت داده نمیشوند، اگرچه برای اینکه چرا یک '*' با همه چیز مطابقت دارد به ادامه مطلب نگاه کنید). شما میتوانید به جای آن، محدودهای از شمارههای ID را از طریق یک بازه شامل شونده مشخص کنید: LOW-HIGH. برای مثال:
-
--usermap=0-99:nobody,wayne:admin,*:normal --groupmap=usr:1,1:usr
- نخستین تطابق در فهرست، موردی است که استفاده میشود. شما باید تمام نگاشتهای کاربر خود را با استفاده از یک گزینه --usermap واحد، و/یا تمام نگاشتهای گروه خود را با استفاده از یک گزینه --groupmap واحد مشخص کنید.
- توجه داشته باشید که نام فرستنده برای کاربر و گروه 0 به گیرنده ارسال نمیشود، بنابراین باید این مقادیر را با استفاده از 0 تطبیق دهید، یا از نامهای معتبر در سمت گیرنده (معمولاً "root") استفاده کنید. همه نامهای دیگر FROM با نامهای در حال استفاده در سمت فرستنده مطابقت دارند. همه نامهای TO با نامهای در حال استفاده در سمت گیرنده مطابقت دارند.
- هر شناسهای (ID) که در سمت فرستنده نامی نداشته باشد، به منظور تطبیق به عنوان یک نام خالی در نظر گرفته میشود. این امر به آنها اجازه میدهد از طریق یک "*" یا با استفاده از یک نام خالی مطابقت داده شوند. برای مثال:
-
--usermap=:nobody --groupmap=*:nobody
- یک مقدار خالی FROM تنها با شناسههای بدون نام در سمت فرستنده مطابقت دارد. این یک نویسه عمومی برای کاربران یا گروههای دارای نام نیست؛ زمانی که میخواهید هر نام در سمت فرستنده را نگاشت کنید از "*" استفاده کنید.
- هنگامی که گزینه --numeric-ids استفاده میشود، فرستنده هیچ نامی ارسال نمیکند، بنابراین با تمام شناسهها به عنوان شناسههای دارای نام خالی رفتار میشود. این بدان معناست که اگر میخواهید این شناسههای بدون نام را به مقادیر دیگری نگاشت کنید، باید مقادیر عددی FROM را مشخص کنید.
- برای کارکرد گزینه --usermap، گیرنده باید به عنوان کاربر ارشد (super-user) اجرا شود (همچنین گزینههای --super و --fake-super را ببینید). برای کارکرد گزینه --groupmap، گیرنده باید دسترسی لازم برای تنظیم آن گروه را داشته باشد.
- گزینه --usermap به معنای فعال بودن گزینه --owner (-o) است، و گزینه --groupmap به معنای فعال بودن گزینه --group (-g) است (زیرا rsync برای کارکرد گزینههای نگاشت نیاز به فعال بودن این گزینهها دارد).
- یک کلاینت قدیمی rsync ممکن است برای جلوگیری از خطا درباره نویسههای عام (wildcard) به استفاده از -s نیاز داشته باشد، اما یک rsync مدرن این موضوع را بهطور خودکار مدیریت میکند.
- --chown=USER:GROUP
- این گزینه اجبار میکند که مالکیت تمام فایلها به USER با گروه GROUP تغییر کند. این رابطی سادهتر نسبت به استفاده مستقیم از --usermap و --groupmap است، اما در لایههای داخلی با استفاده از همان گزینهها پیادهسازی شده و بنابراین نمیتوان آنها را ترکیب کرد. اگر USER یا GROUP خالی باشد، هیچ نگاشتی برای کاربر/گروه نادیدهگرفتهشده رخ نخواهد داد. اگر GROUP خالی باشد، میتوان دونقطه انتهایی را حذف کرد، اما اگر USER خالی باشد، باید دونقطه ابتدایی مشخص شود.
- اگر "--chown=foo:bar" را مشخص کنید، دقیقاً معادل مشخص کردن "--usermap=*:foo --groupmap=*:bar" است، تنها سادهتر (و با همان گزینههای ضمنی --owner و/یا --group).
- یک کلاینت قدیمی rsync ممکن است برای جلوگیری از خطا درباره نویسههای عام (wildcard) به استفاده از -s نیاز داشته باشد، اما یک rsync مدرن این موضوع را بهطور خودکار مدیریت میکند.
- --timeout=SECONDS
- این گزینه به شما امکان میدهد حداکثر زمان انتظار ورودی/خروجی (I/O) را بر حسب ثانیه تنظیم کنید. اگر دادهای برای مدت زمان مشخصشده منتقل نشود، rsync خارج خواهد شد. مقدار پیشفرض 0 است، که به معنای نبود زمان انتظار است.
- --contimeout=SECONDS
- این گزینه به شما اجازه میدهد مدت زمانی را که rsync برای موفقیتآمیز بودن اتصال به یک دیمن rsync منتظر میماند تعیین کنید. اگر زمان انتظار به پایان برسد، rsync با یک خطا خارج میشود.
- --address=ADDRESS
- بهطور پیشفرض rsync هنگام اتصال به یک دیمن rsync به آدرس عمومی (wildcard) متصل (bind) میشود. گزینه --address به شما اجازه میدهد یک آدرس IP مشخص (یا نام میزبان) را برای اتصال تعیین کنید.
- همچنین نسخه دیمن گزینه --address را ببینید.
- --port=PORT
- این گزینه یک شماره پورت TCP جایگزین را به جای پورت پیشفرض 873 مشخص میکند. این تنها زمانی لازم است که از نحو دودونقطه (::) برای اتصال به یک دیمن rsync استفاده میکنید (زیرا ساختار URL روشی برای تعیین پورت به عنوان بخشی از URL دارد).
- همچنین نسخه دیمن گزینه --port را ببینید.
- --sockopts=OPTIONS
- این گزینه میتواند سرگرمی بیپایانی برای افرادی باشد که دوست دارند سیستمهای خود را تا بالاترین حد ممکن تنظیم کنند. میتوانید انواع گزینههای سوکت را تنظیم کنید که ممکن است انتقال را سریعتر (یا کندتر!) کنند. برای جزئیات مربوط به برخی از گزینههایی که ممکن است قادر به تنظیم آنها باشید، راهنمای فراخوانی سیستمی setsockopt() را بخوانید. بهطور پیشفرض هیچ گزینه سوکت خاصی تنظیم نشده است. این گزینه تنها بر اتصالات سوکت مستقیم به یک دیمن rsync راهدور تأثیر میگذارد.
- همچنین نسخه دیمن گزینه --sockopts را ببینید.
- --blocking-io
- این گزینه به rsync دستور میدهد هنگام راهاندازی انتقال پوسته راهدور از I/O مسدودکننده (blocking) استفاده کند. اگر پوسته راهدور rsh یا remsh باشد، پیشفرض rsync استفاده از I/O مسدودکننده است، در غیر این صورت پیشفرض استفاده از I/O غیرمسدودکننده است. (توجه داشته باشید که ssh استفاده از I/O غیرمسدودکننده را ترجیح میدهد.)
- --outbuf=MODE
- این گزینه حالت بافر خروجی را تنظیم میکند. این حالت میتواند None (یا همان Unbuffered)، Line، یا Block (یا همان Full) باشد. میتوانید برای حالت حتی یک تکحرف مشخص کنید، و از حروف بزرگ یا کوچک استفاده کنید.
- کاربرد اصلی این گزینه تغییر بافرسازی از Full به Line است زمانی که خروجی rsync به یک فایل یا پایپ ارسال میشود.
- --itemize-changes, -i
- یک فهرست تفکیکشده ساده از تغییراتی که روی هر فایل اعمال میشود را درخواست میکند، شامل تغییرات ویژگیها. این دقیقاً مشابه تعیین --out-format='%i %n%L' است. اگر این گزینه را تکرار کنید، فایلهای بدون تغییر نیز خروجی داده میشوند، اما تنها در صورتی که نسخه rsync دریافتکننده حداقل 2.6.7 (مارس 2006) باشد. میتوانید از -vv در نسخههای قدیمیتر rsync استفاده کنید، اما این کار خروجی سایر پیامهای پرحرف را نیز فعال میکند.
- نویسه گریز "%i" دارای خروجی رمزی با طول ۱۱ حرف است. قالب کلی مانند رشته YXcstpoguax است، که در آن Y با نوع بهروزرسانی در حال انجام، X با نوع پرونده جایگزین میشود، و سایر حروف نشاندهنده ویژگیهایی هستند که در صورت تغییر یافتن ممکن است در خروجی نمایش داده شوند.
- انواع بهروزرسانی که جایگزین Y میشوند به شرح زیر است:
- o
- علامت < به این معنی است که یک پرونده به میزبان راهدور منتقل میشود (ارسالشده).
- o
- علامت > به این معنی است که یک پرونده به میزبان محلی منتقل میشود (دریافتشده).
- o
- علامت c به این معنی است که یک تغییر/ایجاد محلی برای مورد رخ میدهد (مانند ایجاد یک دایرکتوری یا تغییر یک پیوند نمادین و غیره).
- o
- علامت h به این معنی است که مورد یک پیوند سخت به موردی دیگر است (نیازمند --hard-links).
- o
- علامت . به این معنی است که مورد بهروزرسانی نمیشود (اگرچه ممکن است ویژگیهایی داشته باشد که در حال تغییر هستند).
- o
- علامت * به این معنی است که باقیمانده بخش خروجی جزئیبندیشده شامل یک پیام است (مانند "deleting").
- انواع پرونده که جایگزین X میشوند عبارتند از: f برای یک پرونده، d برای یک دایرکتوری، L برای یک پیوند نمادین، D برای یک دستگاه، و S برای یک پرونده ویژه (مانند سوکتهای نامگذاریشده و fifoها).
- سایر حروف موجود در رشته نشان میدهند که آیا برخی از ویژگیهای پرونده تغییر کردهاند یا خیر، به شرح زیر:
- ویژگی مرتبط با هر حرف به شرح زیر است:
- o
- حرف c یا به این معنی است که یک پرونده عادی دارای جمعآزمای (checksum) متفاوتی است (نیازمند --checksum) یا اینکه یک پیوند نمادین، دستگاه، یا پرونده ویژه مقدار تغییریافتهای دارد. توجه داشته باشید اگر در حال ارسال پروندهها به یک rsync پیش از 3.0.1 (آوریل ۲۰۰۸) هستید، این پرچم تغییر فقط برای پروندههای عادی با تفاوت checksum نمایش داده خواهد شد.
- o
- حرف s به این معنی است که اندازه یک پرونده عادی متفاوت است و با انتقال پرونده بهروزرسانی خواهد شد.
- o
- حرف t به این معنی است که زمان ویرایش متفاوت است و به مقدار فرستنده بهروزرسانی میشود (نیازمند --times). مقدار جایگزین T به این معنی است که زمان ویرایش روی زمان انتقال تنظیم خواهد شد؛ این حالت زمانی رخ میدهد که یک پرونده/پیوند نمادین/دستگاه بدون --times بهروزرسانی شود و یا زمانی که یک پیوند نمادین تغییر کرده و گیرنده نتواند زمان آن را تنظیم کند.
- o
- حرف p به این معنی است که دسترسیها (permissions) متفاوت هستند و به مقدار فرستنده بهروزرسانی میشوند (نیازمند --perms).
- o
- حرف o به این معنی است که مالک متفاوت است و به مقدار فرستنده بهروزرسانی میشود (نیازمند --owner و دسترسیهای کاربر ارشد).
- o
- حرف g به این معنی است که گروه متفاوت است و به مقدار فرستنده بهروزرسانی میشود (نیازمند --group و مجوز لازم برای تعیین گروه).
- o
- o
- حروف u|n|b
بیانگر
اطلاعات
زیر هستند:
حرف u به این معنی است که زمان دسترسی (استفاده) متفاوت است و به مقدار فرستنده بهروزرسانی میشود (نیازمند --atimes)
- o
- حرف n به این معنی است که زمان ایجاد (تازگی) متفاوت است و به مقدار فرستنده بهروزرسانی میشود (نیازمند --crtimes)
- o
- حرف b به این معنی است که هر دو زمان دسترسی و ایجاد در حال بهروزرسانی هستند
- یک خروجی دیگر نیز ممکن است: هنگام حذف فایلها، "%i" برای هر موردی که حذف میشود رشته "*deleting" را خروجی میدهد (با این فرض که با نسخه به اندازه کافی جدیدی از rsync کار میکنید که موارد حذفی را لاگ میکند نه اینکه آنها را به شکل پیام پرجزئیات نمایش دهد).
- --out-format=FORMAT
- به شما امکان میدهد دقیقاً مشخص کنید که کلاینت rsync در هر بهروزرسانی چه چیزی را به کاربر خروجی دهد. این قالب یک رشته متنی شامل توالیهای گریز تکنویسهای درونمتنی است که با نویسه درصد (%) مشخص میشوند. اگر هر یک از گزینههای --info=name یا -v مشخص شده باشد، قالب پیشفرض "%n%L" در نظر گرفته میشود (این قالب فقط نام فایل و در صورت پیوند بودن، مقصد آن را نشان میدهد). برای فهرست کامل نویسههای گریز معتبر، تنظیم log format را در صفحه راهنمای rsyncd.conf ببینید.
- مشخص کردن گزینه --out-format به معنی فعال شدن گزینه --info=name است، که هر فایل، پوشه و غیره را که بهصورت اساسی بهروزرسانی شده ذکر میکند (یک فایل منتقلشده، یک پیوند نمادین/دستگاه از نو ایجادشده یا یک پوشه دستکاریشده). علاوه بر این، اگر توالی گریز تغییرات جزئی (%i) در رشته موجود باشد (برای مثال اگر گزینه --itemize-changes استفاده شده باشد)، گزارشگیری نامها افزایش مییابد تا هر موردی را که به هر نحوی تغییر کرده ذکر کند (تا زمانی که نسخه سمت دریافتکننده حداقل 2.6.4 باشد). برای توضیحات خروجی "%i" گزینه --itemize-changes را ببینید.
- برنامه rsync رشته out-format را پیش از انتقال فایل خروجی میدهد مگر اینکه یکی از توالیهای گریز آمار انتقال درخواست شده باشد، که در آن صورت ثبت گزارش در پایان انتقال فایل انجام میشود. هنگامی که این ثبت گزارش دیرهنگام فعال باشد و --progress نیز مشخص شده باشد، rsync همچنین نام فایل در حال انتقال را پیش از اطلاعات پیشرفت آن خروجی میدهد (که البته با خروجی out-format دنبال میشود).
- --log-file=FILE
- این گزینه باعث میشود rsync گزارش عملیات خود را در یک فایل بنویسد. این مشابه ثبت گزارشی است که یک دیمن انجام میدهد، اما میتواند برای سمت کلاینت و/یا سمت سرور یک انتقال غیردیمن درخواست شود. در صورت مشخص شدن به عنوان گزینه کلاینت، ثبت گزارش انتقال با قالب پیشفرض "%i %n%L" فعال میشود. در صورت تمایل به تغییر این رفتار، گزینه --log-file-format را ببینید.
- نمونه دستور زیر از سمت راهدور درخواست میکند رخدادها را ثبت کند:
-
rsync -av --remote-option=--log-file=/tmp/rlog src/ dest/
- این گزینه زمانی که نیاز به عیبیابی علت بستهشدن غیرمنتظره اتصال داشته باشید بسیار مفید است.
- همچنین نسخه دیمن گزینه --log-file را ببینید.
- --log-file-format=FORMAT
- به شما امکان میدهد دقیقاً مشخص کنید چه اطلاعاتی به ازای هر بهروزرسانی در فایل مشخصشده توسط گزینه --log-file (که برای تأثیرگذاری این گزینه باید مشخص شده باشد) ثبت شود. اگر یک رشته خالی تعیین کنید، پروندههای بهروزرسانیشده در فایل گزارش ذکر نخواهند شد. برای فهرستی از نویسههای گریز ممکن، تنظیم log format را در صفحه راهنمای rsyncd.conf ببینید.
- قالب (FORMAT) پیشفرض مورد استفاده در صورتی که --log-file تعیین شده باشد و این گزینه مشخص نشده باشد '%i %n%L' است.
- همچنین نسخه دیمن گزینه --log-file-format را ببینید.
- --stats
- این به rsync میگوید تا مجموعهای مفصل از آمار انتقال فایل را چاپ کند، که به شما امکان میدهد میزان اثربخشی الگوریتم انتقال تفاضلی (delta-transfer) rsync را برای دادههای خود ارزیابی کنید. این گزینه در صورت ترکیب با ۰ یا ۱ گزینه -v معادل --info=stats2 است، یا در صورت ترکیب با ۲ یا تعداد بیشتری گزینه -v معادل --info=stats3 خواهد بود.
- آمار کنونی به شرح زیر است:
- o
- Number of files تعداد کل «پروندهها» (به معنای عام) است که شامل پوشهها، پیوندهای نمادین و غیره میشود. در ادامه تعداد کل، فهرستی از تعداد بر اساس نوع فایل خواهد آمد (اگر مجموع غیرصفر باشد). برای مثال: "(reg: 5, dir: 3, link: 2, dev: 1, special: 1)" مجموع پروندههای عادی، پوشهها، پیوندهای نمادین، دستگاهها و پروندههای خاص را فهرست میکند. اگر هر مقداری ۰ باشد، به طور کامل از فهرست حذف میشود.
- o
- Number of created files تعداد «پروندههایی» (به معنای عام) است که ایجاد شدهاند (در مقایسه با بهروزرسانیشدهها). در ادامه تعداد کل، فهرستی از تعداد بر اساس نوع فایل خواهد آمد (اگر مجموع غیرصفر باشد).
- o
- Number of deleted files تعداد «پروندههایی» (به معنای عام) است که حذف شدهاند. در ادامه تعداد کل، فهرستی از تعداد بر اساس نوع فایل خواهد آمد (اگر مجموع غیرصفر باشد). توجه داشته باشید که این خط تنها در صورتی چاپ میشود که حذفها فعال باشند، و فقط در صورتی که پروتکل توافقشده حداقل ۳۱ باشد (پیشفرض زمانی که هر دو طرف نسخه ۳.۱.۰، سپتامبر ۲۰۱۳، یا جدیدتر باشند).
- o
- Number of regular files transferred تعداد پروندههای عادی است که از طریق الگوریتم delta-transfer در rsync بهروزرسانی شدهاند، که شامل دایرکتوریها، پیوندهای نمادین و غیره نمیشود.
- o
- Total file size مجموع کل حجم تمام پروندهها در انتقال است. این مقدار شامل حجم پوشهها یا پروندههای خاص نمیشود، اما حجم پیوندهای نمادین را در بر میگیرد.
- o
- Total transferred file size مجموع کل حجم پروندهها فقط برای فایلهای منتقلشده است.
- o
- Literal data مقدار دادههای نامنطبق بهروزرسانی فایل است که فرستنده مجبور به ارسال آن به گیرنده شده تا بتواند پروندههای بهروزرسانیشده را بازسازی کند.
- o
- Matched data مقدار دادهای است که گیرنده هنگام بازسازی فایلهای بهروزرسانیشده به طور محلی دریافت کرده است.
- o
- File list size حجم دادههای فهرست پرونده هنگام ارسال آن از فرستنده به گیرنده است. این مقدار به دلیل فشردهسازی برخی دادههای تکراری هنگام ارسال فهرست توسط rsync، از اندازه فهرست پرونده در حافظه کمتر است.
- o
- File list generation time تعداد ثانیههایی است که فرستنده صرف ایجاد فهرست پرونده کرده است. وجود این مورد نیازمند نسخه جدیدی از rsync در سمت ارسالکننده است.
- o
- File list transfer time مدت زمان (به ثانیه) صرف شده توسط فرستنده برای ارسال فهرست پروندهها به گیرنده است.
- o
- Total bytes sent مجموع تمام بایتهایی است که rsync از سمت کلاینت به سمت سرور ارسال کرده است.
- o
- Total bytes received مجموع تمام بایتهای غیرپیامی است که rsync در سمت کلاینت از سمت سرور دریافت کرده است. بایتهای «غیرپیامی» به این معنی است که بایتهای پیامهای پرگو (verbose) ارسالشده از سرور محاسبه نمیشوند، که این کار آمار را یکدستتر میکند.
- --8-bit-output, -8
- این گزینه به rsync میگوید تمام نویسههای بیتبالا (high-bit) را در خروجی (خروجی استاندارد یا خطای استاندارد) بدون گریز (unescaped) رها کند، بهجای اینکه معتبر بودن آنها را در لوکال (locale) فعلی بررسی کرده و موارد نامعتبر را با نویسه گریز جایگزین کند. تمام نویسههای کنترلی (بهجز تبها) صرفنظر از تنظیمات این گزینه، همیشه گریز داده میشوند (escaped).
- قاعده گریز که از نسخه 2.6.7 (مارس ۲۰۰۶) آغاز شد، چاپ یک بکاسلش واقعی (\) و یک هش (#) به همراه دقیقاً ۳ رقم در مبنای هشت (اکتال) است. برای نمونه، نویسه خط جدید بهصورت «\#012» چاپ میشود. یک بکاسلش واقعی در نام پرونده گریز داده نمیشود، مگر اینکه بلافاصله پس از آن یک علامت هش و ۳ رقم (0-9) بیاید.
- --human-readable, -h
- چاپ اعداد در قالبی خواناتر برای انسان. ۳ سطح ممکن وجود دارد:
- 1.
- چاپ اعداد با یک جداکننده بین هر ۳ رقم (کاما یا نقطه، بسته به اینکه ممیز اعشاری با نقطه نشان داده میشود یا کاما).
- 2.
- چاپ اعداد در مضارب ۱۰۰۰ (همراه با پسوند نویسهای برای واحدهای بزرگتر -- زیر را ببینید).
- 3.
- چاپ اعداد در مضارب ۱۰۲۴.
- پیشفرض، سطح ۱ خوانایی برای انسان است. هر گزینه -h سطح را یک واحد افزایش میدهد. با مشخص کردن گزینه --no-human-readable (--no-h) میتوانید سطح را به ۰ برسانید (تا اعداد بهصورت ارقام خالص چاپ شوند).
- حروف یکاها که در سطوح ۲ و ۳ اضافه میشوند عبارتند از: K (کیلو)، M (مگا)، G (گیگا)، T (ترا)، یا P (پتا). برای نمونه، یک پرونده ۱۲۳۴۵۶۷ بایتی در سطح ۲ بهصورت 1.23M نمایش داده خواهد شد (با فرض اینکه ممیز اعشاری محلی شما نقطه باشد).
- یادداشت سازگاری روبهعقب: نسخههای rsync پیش از 3.1.0 (سپتامبر ۲۰۱۳) از سطح ۱ خوانایی برای انسان پشتیبانی نمیکنند و پیشفرض آنها سطح ۰ است. بنابراین، مشخص کردن یک یا دو گزینه -h در نسخههای قدیم و جدید رفتار مشابهی خواهد داشت، تا زمانی که پیش از یک یا چند گزینه -h گزینه --no-h را تعیین نکرده باشید. برای مشاهده یک تفاوت، گزینه --list-only را ببینید.
- --partial
- بهطور پیشفرض، اگر انتقال قطع شود rsync هر پرونده منتقلشده بهصورت نیمهکاره را حذف میکند. در برخی شرایط نگه داشتن پروندههای ناقص مطلوبتر است. استفاده از گزینه --partial به rsync میگوید پرونده ناقص را نگه دارد که این امر انتقال مجدد باقیمانده پرونده در آینده را بسیار سریعتر میکند.
- --partial-dir=DIR
- این گزینه رفتار گزینه --partial را تغییر میدهد و همزمان فعال بودن آن را نیز اعمال میکند. این روش ارتقایافته مدیریت پروندههای ناقص، هر پرونده نیمهکاره را بهجای نوشتن مستقیم در پرونده مقصد، درون DIR مشخصشده قرار میدهد. در انتقال بعدی، rsync از پرونده موجود در این پوشه به عنوان داده برای افزایش سرعت ازسرگیری انتقال استفاده میکند و پس از انجام هدفش، آن را حذف خواهد کرد.
- توجه داشته باشید که اگر --whole-file مشخص شده باشد (یا بهطور ضمنی اعمال گردد)، هرگونه پرونده درون partial-dir که برای یک پرونده در حال بهروزرسانی یافت شود، حذف خواهد شد (زیرا rsync پروندهها را بدون استفاده از الگوریتم انتقال تفاضلی delta-transfer میفرستد).
- برنامه rsync در صورت عدم وجود DIR آن را ایجاد میکند، اما فقط آخرین دایرکتوری را -- نه تمام مسیر را. این امر استفاده از یک مسیر نسبی (مانند "--partial-dir=.rsync-partial") را آسان میکند تا rsync دایرکتوری فایلهای ناقص (partial-directory) را در صورت نیاز درون دایرکتوری فایل مقصد ایجاد کرده و هنگام حذف فایل ناقص، دوباره آن را پاک کند. توجه داشته باشید که این حذف دایرکتوری فقط برای مسیرهای نسبی انجام میشود، زیرا انتظار میرود مسیر مطلق برای دایرکتوریای باشد که به عملیات partial-dir اختصاص یافته است.
- اگر مقدار partial-dir یک مسیر مطلق نباشد، rsync یک قاعده استثنا (exclude) را به انتهای تمام قواعد استثنای موجود شما اضافه میکند. این کار از ارسال هرگونه فایلهای partial-dir که ممکن است در سمت ارسالکننده وجود داشته باشند جلوگیری کرده و همچنین مانع از حذف نابهنگام موارد partial-dir در سمت گیرنده میشود. به عنوان مثال: گزینه --partial-dir بالا معادل این استثنای «فاسدشدنی» (perishable) را در انتهای سایر قواعد فیلتر اضافه میکند: -f '-p .rsync-partial/'
- اگر قواعد استثنای سفارشی خود را تعیین میکنید، ممکن است لازم باشد قاعده استثنا/پنهانسازی/محافظت (exclude/hide/protect) خود را برای partial-dir اضافه کنید زیرا:
- 1.
- قاعده اضافهشده بهصورت خودکار ممکن است در انتهای سایر قواعد شما بیاثر باشد، یا
- 2.
- ممکن است بخواهید انتخاب استثنای rsync را بازنویسی (override) کنید.
- به عنوان مثال، اگر میخواهید rsync دایرکتوریهای partial بهجامانده را پاکسازی کند، باید --delete-after را مشخص کرده و یک قاعده فیلتر «ریسک» (risk) اضافه کنید، مانند -f 'R .rsync-partial/'. از استفاده از --delete-before یا --delete-during خودداری کنید، مگر اینکه نیازی نداشته باشید rsync در حین اجرای فعلی از دادههای partial-dir بهجامانده استفاده کند.
- مهم: دایرکتوری partial-dir نباید توسط سایر کاربران قابل نوشتن باشد، در غیر این صورت یک خطر امنیتی محسوب میشود! مثلاً از "/tmp" اجتناب کنید!
- همچنین میتوانید مقدار partial-dir را با متغیر محیطی RSYNC_PARTIAL_DIR تنظیم کنید. تنظیم این متغیر در محیط، فعالسازی --partial را تحمیل نمیکند، بلکه مشخص میکند در صورت تعیین --partial، فایلهای ناقص در کجا قرار گیرند. به عنوان مثال، به جای استفاده از --partial-dir=.rsync-tmp همراه با --progress، میتوانید RSYNC_PARTIAL_DIR=.rsync-tmp را در محیط خود مقداردهی کرده و سپس از گزینه -P برای فعال کردن استفاده از پوشه .rsync-tmp جهت انتقالهای ناقص بهره ببرید. تنها مواقعی که گزینه --partial این مقدار محیطی را بررسی نمیکند عبارتند از:
- 1.
- زمانی که --inplace مشخص شده باشد (زیرا --inplace با --partial-dir تداخل دارد)، و
- 2.
- زمانی که --delay-updates مشخص شده باشد (پایین را ببینید).
- هنگامی که یک نسخه جدید rsync انتقال یک فایل در partial-dir را از سر میگیرد، آن فایل ناقص اکنون بهجای ایجاد یک رونوشت دیگر از فایل موقت، درجا (in-place) بهروزرسانی میشود (بنابراین حداکثر فضای اشغالی dest + tmp خواهد بود، به جای dest + partial + tmp). این قابلیت نیازمند آن است که هر دو طرف انتقال حداقل دارای نسخه 3.2.0 (ژوئن 2020) باشند.
- برای اهداف تنظیمات "refuse options" در پیکربندی دیمن، گزینه --partial-dir بهمعنای فعالسازی ضمنی --partial نیست. این بدان منظور است که بتوان از رد کردن گزینه --partial برای جلوگیری از رونویسی فایلهای مقصد با انتقال ناقص استفاده کرد، در حالی که همچنان استفاده از شیوه امنتر ارائهشده توسط --partial-dir مجاز باشد.
- --delay-updates
- این گزینه فایل موقت حاصل از هر فایل بهروزرسانیشده را تا پایان انتقال در یک پوشه نگهدارنده قرار میدهد، و در آن هنگام تمام فایلها بهسرعت و پشت سر هم به جای اصلی خود تغییر نام پیدا میکنند. این کار باعث میشود بهروزرسانی فایلها به حالت اتمیک (اتمام یکباره) نزدیکتر شود. بهطور پیشفرض فایلها در پوشهای با نام .~tmp~ درون دایرکتوری مقصد هر فایل قرار میگیرند، اما اگر گزینه --partial-dir را مشخص کرده باشید، به جای آن از آن پوشه استفاده خواهد شد. توضیحات بخش --partial-dir را برای بررسی نحوه مستثنی شدن این پوشه .~tmp~ از انتقال، و نحوه پاکسازی پوشههای قدیمی .~tmp~ بهجامانده توسط rsync ببینید. با گزینههای --inplace و --append تداخل دارد.
- این گزینه --no-inc-recursive را فعال میکند زیرا برای پیمایش فهرست در انتها، به کل فهرست پروندهها در حافظه نیاز دارد.
- این گزینه در سمت گیرنده حافظه بیشتری مصرف میکند (یک بیت به ازای هر پرونده منتقلشده) و همچنین به فضای دیسک خالی کافی در سمت گیرنده برای نگهداری یک نسخه اضافی از تمام پروندههای بهروزشده نیاز دارد. توجه داشته باشید که نباید از مسیر مطلق برای --partial-dir استفاده کنید مگر اینکه:
- 1.
- هیچ احتمالی برای همنام بودن پروندهها در انتقال وجود نداشته باشد (زیرا اگر مسیر مطلق باشد، تمام پروندههای بهروزشده در یک پوشه واحد قرار میگیرند)، و
- 2.
- هیچ نقطه اتصالی در سلسلهمراتب وجود نداشته باشد (زیرا اگر نتوان نام پروندههای بهروزشده با تاخیر را در محل اصلی تغییر داد، شکست خواهند خورد).
- همچنین برای یک الگوریتم بهروزرسانی که حتی به حالت اتمیک نزدیکتر است (که از --link-dest و یک سلسلهمراتب موازی از پروندهها استفاده میکند)، اسکریپت پایتون "atomic-rsync" را در زیرپوشه "support" ببینید.
- --prune-empty-dirs, -m
- این گزینه به rsync گیرنده میگوید که پوشههای خالی را از فهرست پروندهها حذف کند، شامل پوشههای تودرتویی که فرزند غیرپوشهای ندارند. این قابلیت برای جلوگیری از ایجاد مجموعهای از پوشههای بیاستفاده هنگام پیمایش بازگشتی سلسلهمراتب پروندهها توسط rsync فرستنده با استفاده از قواعد include/exclude/filter مفید است.
- اگر از TRANSFER_RULES استفاده کنید، این گزینه ممکن است همچنان پوشههای خالی را در سمت گیرنده باقی بگذارد.
- از آنجا که فهرست پروندهها عملاً هرس میشود، این گزینه بر پوشههایی که هنگام فعال بودن عملیات حذف پاک میشوند نیز تأثیر میگذارد. با این حال، به خاطر داشته باشید که پروندهها و پوشههای مستثنیشده میتوانند از حذف موارد موجود جلوگیری کنند، زیرا یک استثنا هم پروندههای مبدأ را پنهان میکند و هم از پروندههای مقصد محافظت میکند. برای نحوه جلوگیری از این مورد، گزینه قاعده فیلتر perishable را ببینید.
- میتوانید با استفاده از یک فیلتر سراسری "protect" از هرس شدن برخی پوشههای خالی از فهرست پروندهها جلوگیری کنید. برای نمونه، این گزینه اطمینان میدهد که پوشه "emptydir" در فهرست پروندهها حفظ میشود:
-
--filter 'protect emptydir/'
- این یک مثال است که تمام پروندههای .pdf را در یک سلسلهمراتب رونوشت میکند، فقط پوشههای مقصد لازم برای نگهداری پروندههای .pdf را میسازد، و اطمینان حاصل میکند که هرگونه پرونده و پوشه اضافی در مقصد حذف شوند (توجه کنید که به جای یک exclude از فیلتر hide برای موارد غیرپوشه استفاده شده است):
-
rsync -avm --del --include='*.pdf' -f 'hide,! */' src/ dest
- اگر نمیخواهید پروندههای اضافی مقصد را حذف کنید، گزینههای سنتیتر --include='*/' --exclude='*' به جای فیلتر hide بهخوبی کار خواهند کرد (اگر این روش برای شما طبیعیتر است).
- --progress
- این گزینه به rsync میگوید اطلاعات مربوط به پیشرفت انتقال را چاپ کند. این کار چیزی برای تماشا در اختیار کاربر قرار میدهد. در یک نسخه مدرن rsync، این مورد معادل تعیین --info=flist2,name,progress است، اما هرگونه تنظیمات ارائهشده توسط کاربر برای این پرچمهای info اولویت دارد (مانند --info=flist0 --progress).
- هنگامی که rsync در حال انتقال یک پرونده عادی است، خط پیشرفتی شبیه به این را بهروزرسانی میکند:
-
782448 63% 110.64kB/s 0:00:04
- در این مثال، گیرنده ۷۸۲۴۴۸ بایت یا ۶۳٪ از پرونده فرستنده را بازسازی کرده است، که با نرخ ۱۱۰.۶۴ کیلوبایت بر ثانیه بازسازی میشود، و اگر نرخ فعلی تا انتها حفظ شود، انتقال در ۴ ثانیه به پایان خواهد رسید.
- اگر الگوریتم انتقال تفاضلی (delta-transfer) rsync در حال استفاده باشد، این آمار میتواند گمراهکننده باشد. برای مثال، اگر پرونده فرستنده شامل پرونده پایه و به دنبال آن دادههای اضافی باشد، زمانی که گیرنده به دادههای لفظی (literal data) میرسد، نرخ گزارششده احتمالاً به شدت افت خواهد کرد و پایان انتقال احتمالاً بسیار بیشتر از آنچه گیرنده در زمان اتمام بخش منطبق پرونده تخمین زده بود طول خواهد کشید.
- هنگامی که انتقال پرونده پایان مییابد، rsync خط پیشرفت را با یک خط خلاصه جایگزین میکند که شبیه این است:
-
1,238,099 100% 146.38kB/s 0:00:08 (xfr#5, to-chk=169/396)
- در این مثال، حجم کل پرونده ۱,۲۳۸,۰۹۹ بایت بوده، میانگین نرخ انتقال برای کل پرونده در طول ۸ ثانیهای که تکمیل آن طول کشید ۱۴۶.۳۸ کیلوبایت بر ثانیه بوده، این پنجمین انتقال یک پرونده عادی در طول نشست فعلی rsync بوده است، و از مجموع ۳۹۶ پرونده موجود در فهرست پروندهها (file-list)، ۱۶۹ پرونده دیگر برای بررسی توسط گیرنده باقی مانده است (تا بررسی شود که آیا بهروز هستند یا خیر).
- در یک پویش بازگشتی افزایشی (incremental recursion scan)، rsync تا زمانی که به پایان پویش نرسد تعداد کل پروندهها در فهرست پروندهها را نمیداند، اما از آنجا که انتقال پروندهها را در حین پویش آغاز میکند، خطی با متن "ir-chk" (برای بررسی بازگشتی افزایشی) را به جای "to-chk" تا زمانی که اندازه کامل فهرست را بفهمد نمایش میدهد، و در آن نقطه به استفاده از "to-chk" تغییر وضعیت میدهد. بنابراین، مشاهده "ir-chk" به شما اطلاع میدهد که تعداد کل پروندهها در فهرست پروندهها همچنان افزایش خواهد یافت (و هر بار که این اتفاق میافتد، تعداد پروندههای باقیمانده برای بررسی به اندازه تعداد پروندههای اضافهشده به فهرست افزایش مییابد).
- -P
- گزینه -P معادل "--partial --progress" است. هدف آن سادهتر کردن تعیین این دو گزینه برای انتقالی طولانی است که ممکن است دچار وقفه شود.
- همچنین گزینه --info=progress2 وجود دارد که آمار را بر اساس کل انتقال خروجی میدهد، نه پروندههای جداگانه. اگر میخواهید وضعیت انتقال را بدون اسکرول شدن صفحه با نامهای زیاد مشاهده کنید، از این پرچم بدون خروجی دادن نام پرونده استفاده کنید (برای مثال از -v خودداری کنید یا --info=name0 را تعیین کنید). (برای استفاده از --info=progress2 نیازی به تعیین گزینه --progress ندارید.)
- در نهایت، میتوانید با ارسال یک سیگنال SIGINFO یا SIGVTALRM به rsync، یک گزارش پیشرفت فوری دریافت کنید. در سیستمهای BSD، سیگنال SIGINFO با فشردن کلیدهای Ctrl+T ایجاد میشود (لینوکس در حال حاضر از سیگنال SIGINFO پشتیبانی نمیکند). هنگامی که فرایند سمت کلاینت یکی از این سیگنالها را دریافت میکند، پرچمی را برای خروجی دادن یک گزارش پیشرفت تکی تنظیم میکند که پس از پایان انتقال پرونده فعلی نمایش داده میشود (بنابراین اگر هنگام رسیدن سیگنال پرونده بزرگی در حال پردازش باشد، ممکن است کمی طول بکشد). یک نام پرونده (در صورت نیاز) خروجی داده میشود و پس از آن اطلاعات پیشرفت در قالب --info=progress2 میآید. اگر نمیدانید کدامیک از ۳ فرایند rsync فرایند کلاینت است، مشکلی ندارد که به همه آنها سیگنال بفرستید (زیرا فرایندهای غیر کلاینت سیگنال را نادیده میگیرند).
- هشدار: ارسال SIGVTALRM به نسخههای قدیمیتر rsync (پیش از ۳.۲.۰، ژوئن ۲۰۲۰) آن را خواهد کشت (kill).
- --password-file=FILE
- این گزینه به شما اجازه میدهد گذرواژهای را برای دسترسی به دیمن rsync از طریق یک پرونده یا از طریق ورودی استاندارد (اگر FILE برابر با - باشد) فراهم کنید. پرونده باید فقط حاوی گذرواژه در خط اول باشد (تمام خطوط دیگر نادیده گرفته میشوند). اگر FILE برای همه قابل خواندن (world readable) باشد یا اگر دستور rsync اجراشده توسط کاربر root پروندهای متعلق به غیر از root را بیابد، rsync با خطا خارج خواهد شد.
- این گزینه گذرواژهای را به بستر انتقال پوسته راهدور مانند ssh ارائه نمیدهد؛ برای یادگیری نحوه انجام آن، به مستندات پوسته راهدور مراجعه کنید. هنگام دسترسی به دیمن rsync با استفاده از یک پوسته راهدور به عنوان بستر انتقال، این گزینه تنها پس از اتمام احراز هویت پوسته راهدور اعمال میشود (یعنی اگر در پرونده پیکربندی دیمن نیز یک گذرواژه مشخص کرده باشید).
- --early-input=FILE
- این گزینه به rsync اجازه میدهد تا سقف ۵ کیلوبایت داده را از طریق stdin به اسکریپت "early exec" ارسال کند. یک کاربرد احتمالی این دادهها، ارائه یک راز به اسکریپت است که میتوان از آن برای سوار کردن یک سیستمفایل رمزشده استفاده کرد (که باید آن را در اسکریپت "post-xfer exec" پیادهسازی/unmount کنید).
- نسخه دیمن باید حداقل 3.2.1 (ژوئن ۲۰۲۰) باشد.
- --list-only
- این گزینه باعث میشود فایلهای مبدأ بهجای انتقال، فهرست شوند. اگر تنها یک آرگومان مبدأ وجود داشته باشد و مقصدی مشخص نشده باشد، این گزینه بهطور ضمنی فعال در نظر گرفته میشود؛ بنابراین کاربردهای اصلی آن عبارتند از:
- 1.
- تبدیل یک دستور کپی شامل آرگومان مقصد به یک دستور فهرستبندی فایل، یا
- 2.
- امکان تعیین بیش از یک آرگومان مبدأ. نکته: حتماً مقصد را درج کنید.
- هشدار: به خاطر داشته باشید که یک آرگومان مبدأ دارای نویسه عام (wild-card) توسط پوسته به چندین آرگومان گسترش مییابد، بنابراین تلاش برای مشخص کردن یک آرگومان عام منفرد جهت فعالسازی خودکار این گزینه هرگز ایمن نیست. یک مثال ایمن:
-
rsync -av --list-only foo* dest/
- این گزینه همیشه از قالب خروجی مشابه این استفاده میکند:
-
drwxrwxr-x 4,096 2022/09/30 12:53:11 support -rw-rw-r-- 80 2005/01/11 10:37:37 support/Makefile
- تنها گزینهای که بر این شیوه خروجی تأثیر میگذارد، گزینه --human-readable (-h) است. حالت پیشفرض، نمایش اندازهها به صورت شمارش بایت با جداکنندههای ارقام است (در ستونی با پهنای ۱۴ نویسه). تعیین حداقل یک گزینه -h باعث میشود اندازهها همراه با پسوند واحد نمایش داده شوند. اگر اندازه شمارش بایت به سبک قدیمی و بدون جداکنندههای ارقام (و در ستونی با پهنای ۱۱ نویسه) را میخواهید، از --no-h استفاده کنید.
- نکته سازگاری: هنگام درخواست فهرست راهدور فایلها از یک rsync با نسخه 2.6.3 یا قدیمیتر (یعنی پیش از ۲۰۰۵)، در صورت درخواست فهرست غیربازگشتی ممکن است با خطا مواجه شوید. دلیل این امر آن است که فهرست کردن فایلها مستلزم گزینه --dirs بدون --recursive است، و نسخههای قدیمیتر rsync این گزینه را ندارند. برای جلوگیری از این مشکل، یا گزینه --no-dirs را مشخص کنید (اگر نیازی به باز کردن محتوای دایرکتوری ندارید)، یا حالت بازگشتی را فعال کرده و محتوای زیرپوشهها را مستثنی کنید: -r --exclude='/*/*'.
- --bwlimit=RATE
- این گزینه به شما اجازه میدهد حداکثر نرخ انتقال دادههای ارسالی از طریق سوکت را بر حسب واحد بر ثانیه تعیین کنید. مقدار RATE میتواند یک پسوند رشتهای برای تعیین ضریب اندازه داشته باشد و میتواند یک مقدار اعشاری باشد (مانند --bwlimit=1.5m). در صورت عدم تعیین پسوند، مقدار بر حسب واحدهای ۱۰۲۴ بایتی در نظر گرفته میشود (گویی "K" یا "KiB" اضافه شده است). برای توضیحات تمام پسوندهای موجود، گزینه --max-size را ببینید. مقدار 0 بیانگر عدم اعمال محدودیت است.
- به دلایل سازگاری با گذشته، محدودیت نرخ به نزدیکترین واحد KiB گرد خواهد شد، بنابراین هیچ نرخی کمتر از 1024 بایت بر ثانیه امکانپذیر نیست.
- برنامه rsync دادهها را از طریق سوکت در بلوکهایی مینویسد، و این گزینه هم اندازه بلوکهایی که rsync مینویسد را محدود میکند و هم تلاش میکند نرخ انتقال میانگین را در حد درخواستشده نگه دارد. ممکن است مقداری حالت جهشی مشاهده شود که در آن rsync یک بلوک داده را نوشته و سپس برای رساندن نرخ میانگین به مقدار مطابق، به خواب میرود.
- به دلیل بافرسازی داخلی دادهها، گزینه --progress ممکن است بازتاب دقیقی از سرعت ارسال دادهها نباشد. دلیل این امر آن است که هنگام بافر شدن سریع دادهها، برخی فایلها ممکن است طوری نمایش داده شوند که گویا بهسرعت ارسال شدهاند، در حالی که سایر فایلها هنگام تخلیه بافر خروجی ممکن است بسیار کُند به نظر برسند. این مورد ممکن است در نسخههای بعدی برطرف شود.
- همچنین نسخه دیمن گزینه --bwlimit را ببینید.
- --stop-after=MINS, (--time-limit=MINS)
- این گزینه به rsync میگوید پس از سپری شدن تعداد دقایق مشخصشده، رونوشتبرداری را متوقف کند.
- برای حداکثر انعطافپذیری، rsync این گزینه را به rsync راهدور منتقل نمیکند، زیرا معمولاً کافی است که یک سمت اتصال طبق دستور خارج شود. این امر امکان استفاده از گزینه را حتی زمانی که تنها یک سمت اتصال از آن پشتیبانی میکند فراهم میسازد. در صورت نیاز، میتوانید با استفاده از --remote-option (-M) محدودیت زمانی را به سمت راهدور اعلام کنید.
- نسخه --time-limit از این گزینه منسوخ شده است.
- --stop-at=y-m-dTh:m
- این گزینه به rsync میگوید با رسیدن به نقطه زمانی مشخصشده، رونوشتبرداری را متوقف کند. تاریخ و زمان میتوانند بهطور کامل در یک قالب عددی year-month-dayThour:minute (مانند 2000-12-31T23:59) در منطقه زمانی محلی مشخص شوند. میتوانید اعداد تاریخ را بهجای خط تیره با خط مورب (اسلش) جدا کنید.
- مقدار همچنین میتواند به روشهای گوناگون خلاصه شود، مانند مشخص کردن سال ۲ رقمی و/یا حذف مقادیر مختلف. در همه موارد، مقدار بهعنوان نزدیکترین نقطه زمانی ممکن که با اطلاعات ارائهشده مطابقت دارد در نظر گرفته میشود. اگر مقدار، زمان فعلی یا زمانی در گذشته را مشخص کند، rsync با خطا خارج میشود.
- برای مثال، "1-30" تاریخ ۳۰ ژانویه بعدی (در نیمهشب به وقت محلی)، "14:00" ساعت ۱۴:۰۰ بعدی، "1" روز اول ماه بعدی در نیمهشب، "31" ماه بعدی که بتوان در روز سیویکمش متوقف شد، و ":59" پنجاه و نهمین دقیقه بعدی بعد از ساعت را مشخص میکند.
- برای حداکثر انعطافپذیری، rsync این گزینه را به rsync راهدور منتقل نمیکند، زیرا معمولاً کافی است که یک سمت اتصال طبق دستور خارج شود. این امر امکان استفاده از گزینه را حتی زمانی که تنها یک سمت اتصال از آن پشتیبانی میکند فراهم میسازد. در صورت نیاز، میتوانید با استفاده از --remote-option (-M) محدودیت زمانی را به سمت راهدور اعلام کنید. به یاد داشته باشید که ممکن است میزبان راهدور منطقه زمانی پیشفرض متفاوتی نسبت به میزبان محلی شما داشته باشد.
- --fsync
- باعث میشود سمت گیرنده روی هر فایل تمامشده فراخوانی fsync انجام دهد. این امر ممکن است روند انتقال را کُند کند، اما هنگام بهروزرسانی فایلهای حیاتی میتواند موجب اطمینان خاطر شود.
- --write-batch=FILE
- فایلی را ثبت میکند که بعداً میتواند با --read-batch روی یک مقصد یکسان دیگر اعمال شود. برای جزئیات بخش "حالت دستهای (BATCH MODE)" و همچنین گزینه --only-write-batch را ببینید.
- این گزینه فهرستهای مذاکرهشده checksum و compress را لغو کرده و همیشه انتخابی بر پایه گزینههای قدیمی md5/md4/zlib را مذاکره میکند. این بدان معناست که حالت دستهای با گزینههای فشردهسازی جدیدتر مانند zstd یا lz4 سازگار نیست.
- --only-write-batch=FILE
- مانند --write-batch عمل میکند، با این تفاوت که هنگام ایجاد بسته دستهای، هیچ بهروزرسانی روی سیستم مقصد انجام نمیشود. این به شما اجازه میدهد تغییرات را از روشهای دیگر به سیستم مقصد منتقل کرده و سپس آنها را از طریق --read-batch اعمال کنید.
- توجه داشته باشید که میتوانید دسته را مستقیماً روی یک رسانهٔ قابلحمل بنویسید: اگر ظرفیت این رسانه پیش از پایان انتقال پر شود، میتوانید صرفاً همان انتقال ناقص را روی مقصد اعمال کرده و کل فرایند را برای دریافت مابقی تغییرات تکرار کنید (البته تا زمانی که با بهروزرسانیِ ناقص سامانهٔ مقصد در حین انجام چرخهٔ چندمرحلهای بهروزرسانی مشکلی نداشته باشید).
- همچنین توجه داشته باشید که صرفهجویی در پهنایباند تنها هنگام ارسال (push) تغییرات به یک سامانهٔ راهدور رخ میدهد، چرا که این کار اجازه میدهد دادههای دستهای بدون نیاز به جریان روی شبکه به سمت دریافتکننده، از فرستنده مستقیماً به داخل پروندهٔ دستهای هدایت شوند (هنگام دریافت یا pull، فرستنده در سمت راهدور قرار دارد و بنابراین نمیتواند پروندهٔ دستهای را بنویسد).
- --read-batch=FILE
- تمام تغییرات ذخیرهشده در FILE را اعمال میکند؛ پروندهای که پیشتر توسط --write-batch ایجاد شده است. اگر FILE برابر با - باشد، دادههای دستهای از ورودی استاندارد خوانده خواهند شد. برای جزئیات بیشتر بخش «حالت دستهای (BATCH MODE)» را ببینید.
- --protocol=NUM
- استفاده از یک نسخهٔ قدیمیتر پروتکل را اجباری میکند. این گزینه برای ایجاد یک پروندهٔ دستهای که با نسخهٔ قدیمیتر rsync سازگار باشد کاربرد دارد. برای نمونه، اگر rsync 2.6.4 به همراه گزینهٔ --write-batch استفاده میشود، اما برای اجرای گزینهٔ --read-batch از rsync 2.6.3 استفاده خواهد شد، باید هنگام ایجاد پروندهٔ دستهای از «--protocol=28» استفاده کنید تا استفاده از نسخهٔ قدیمیتر پروتکل در پروندهٔ دستهای اجباری شود (با این فرض که نمیتوانید rsync را روی سامانهٔ خواننده ارتقا دهید).
- --iconv=CONVERT_SPEC
- ابزار rsync میتواند با استفاده از این گزینه، نام پروندهها را بین مجموعهنویسههای مختلف تبدیل کند. استفاده از «.» به عنوان CONVERT_SPEC به rsync میگوید که مجموعهنویسهٔ پیشفرض را از طریق تنظیمات محلی (locale) بیابد. بهعلاوه، میتوانید تبدیل مورد نظر را با مشخص کردن مجموعهنویسهٔ محلی و راهدور که با کاما جدا شدهاند، به ترتیبِ --iconv=LOCAL,REMOTE مشخص کنید، مانند --iconv=utf8,iso88591. این ترتیب تضمین میکند که گزینه چه هنگام ارسال (push) و چه دریافت (pull) پروندهها یکسان باقی بماند. در نهایت، میتوانید با تعیین --no-iconv یا قرار دادن «-» به عنوان CONVERT_SPEC هرگونه تبدیل را غیرفعال کنید. تنظیم پیشفرض این گزینه به سامانه بستگی دارد و از طریق متغیر محیطی RSYNC_ICONV نیز قابل تغییر است.
- برای دریافت فهرستی از نام مجموعهنویسههایی که کتابخانهٔ iconv محلی شما پشتیبانی میکند، میتوانید دستور «iconv --list» را اجرا کنید.
- اگر گزینهٔ --secluded-args (-s) را مشخص کنید، rsync نام پروندههایی را که در خط فرمان مشخص کردهاید و به میزبان راهدور ارسال میشوند، تبدیل نویسه خواهد کرد. گزینهٔ --files-from را نیز ببینید.
- توجه داشته باشید که rsync هیچ تبدیلی روی نامها در پروندههای فیلتر (شامل پروندههای include/exclude) انجام نمیدهد. این بر عهدهٔ شماست که مطمئن شوید قواعدی تعیین میکنید که در هر دو طرف انتقال مطابقت داشته باشند. برای نمونه، اگر تفاوتهایی در نام پروندهها در دو طرف وجود دارد که باید در نظر گرفته شوند، میتوانید قواعد include/exclude اضافهای تعیین کنید.
- هنگامی که گزینهٔ --iconv را به یک دیمن rsync ارسال میکنید که این قابلیت را مجاز میداند، دیمن بدون توجه به مجموعهنویسهٔ راهدوری که شما ارسال کردهاید، از مجموعهنویسهٔ مشخصشده در پارامتر پیکربندی «charset» خود استفاده میکند. بنابراین، میتوانید برای انتقال با دیمن فقط مجموعهنویسهٔ محلی را مشخص کنید (مانند --iconv=utf8).
- --ipv4, -4 یا --ipv6, -6
- به rsync اعلام میکند که هنگام ایجاد سوکتها یا اجرای ssh، پروتکل IPv4/IPv6 را ترجیح دهد. این مورد روی سوکتهایی اثر میگذارد که rsync کنترل مستقیمی بر آنها دارد؛ مانند سوکت خروجی هنگام برقراری ارتباط مستقیم با یک دیمن rsync، و همچنین ارسال گزینهٔ -4 یا -6 به ssh زمانی که rsync تشخیص میدهد ssh به عنوان پوستهٔ راهدور استفاده میشود. برای سایر پوستههای راهدور باید گزینهٔ «--rsh SHELL -4» (یا هر گزینهٔ اشارهگر IPv4/IPv6 دیگری که استفاده میکند) را مستقیماً مشخص کنید.
- نسخهٔ مربوط به دیمن این گزینهها را نیز ببینید.
- اگر rsync بدون پشتیبانی از IPv6 کامپایل شده باشد، گزینهٔ --ipv6 بیاثر خواهد بود. در این صورت خروجی rsync --version حاوی «no IPv6» خواهد بود.
- --checksum-seed=NUM
- مقدار بذر (seed) مجموعوارسی را برابر با عدد صحیح NUM قرار میدهد. این بذر مجموعوارسی ۴ بایتی در محاسبهٔ مجموعوارسی هر بلوک و پروندهٔ MD4 گنجانده میشود (مجموعوارسیهای جدیدتر پرونده از بذر استفاده نمیکنند). به طور پیشفرض، بذر مجموعوارسی توسط کارساز تولید میشود و پیشفرض آن خروجی فعلی time() است. این گزینه برای تنظیم یک بذر مجموعوارسی مشخص استفاده میشود، که برای کاربردهایی که نیازمند مجموعوارسی بلوکی تکرارپذیر هستند یا مواردی که کاربر بذر مجموعوارسی تصادفیتری میخواهد، کاربرد دارد. تنظیم NUM روی ۰ باعث میشود rsync از مقدار پیشفرض time() برای بذر مجموعوارسی استفاده کند.
گزینههای دیمن (DAEMON OPTIONS)
گزینههای مجاز هنگام راهاندازی دیمن rsync به شرح زیر است:
- --daemon
- این گزینه به rsync اعلام میکند که باید به عنوان یک دیمن اجرا شود. دیمنی که راهاندازی میکنید با استفاده از کلاینت rsync و ساختار دستوری host::module یا rsync://host/module/ قابل دسترسی خواهد بود.
- اگر ورودی استاندارد یک سوکت باشد، rsync فرض میکند که از طریق inetd اجرا شده است؛ در غیر این صورت از ترمینال فعلی جدا شده و به یک دیمن پسزمینه تبدیل میشود. دیمن در هر اتصال برقرار شده توسط کلاینت، فایل پیکربندی (rsyncd.conf) را میخواند و بر این اساس به درخواستها پاسخ میدهد.
- برای جزئیات بیشتر به صفحه راهنمای rsyncd.conf(5) مراجعه کنید.
- --address=ADDRESS
- بهطور پیشفرض هنگامی که rsync با گزینه --daemon به صورت دیمن اجرا میشود، به آدرس همهپذیر (wildcard) متصل میشود. گزینه --address به شما اجازه میدهد تا یک آدرس IP مشخص (یا نام میزبان) را برای اتصال تعیین کنید. این قابلیت در ترکیب با گزینه --config، امکان میزبانی مجازی (virtual hosting) را فراهم میسازد.
- همچنین گزینه سراسری address در صفحه راهنمای rsyncd.conf و نسخه کلاینت گزینه --address را ببینید.
- --bwlimit=RATE
- این گزینه به شما امکان میدهد حداکثر نرخ انتقال دادههایی را که دیمن روی سوکت ارسال میکند مشخص کنید. کلاینت همچنان میتواند مقدار --bwlimit کمتری تعیین کند، اما مقدار بیشتر مجاز نخواهد بود.
- برای برخی جزئیات بیشتر، نسخه کلاینت گزینه --bwlimit را ببینید.
- --config=FILE
- این گزینه یک فایل پیکربندی جایگزین برای مقدار پیشفرض تعیین میکند. این گزینه تنها زمانی کاربرد دارد که --daemon مشخص شده باشد. مقدار پیشفرض /etc/rsyncd.conf است مگر اینکه دیمن از طریق یک برنامه شل راه دور اجرا شود و کاربر راه دور ابرکاربر (super-user) نباشد؛ در این حالت پیشفرض، rsyncd.conf در دایرکتوری فعلی (معمولاً $HOME) است.
- --dparam=OVERRIDE, -M
- این گزینه میتواند برای تنظیم یک پارامتر پیکربندی دیمن هنگام راهاندازی rsync در حالت دیمن استفاده شود. این عمل معادل افزودن پارامتر در انتهای تنظیمات سراسری پیش از تعریف اولین ماژول است. در صورت تمایل، نامهای پارامترها را میتوان بدون فاصله مشخص کرد. برای مثال:
-
rsync --daemon -M pidfile=/path/rsync.pid
- --no-detach
- هنگام اجرا به عنوان دیمن، این گزینه به rsync دستور میدهد که از ترمینال جدا نشده و به یک فرآیند پسزمینه تبدیل نشود. این گزینه هنگام اجرا به عنوان یک سرویس در Cygwin الزامی است، و همچنین ممکن است زمانی که rsync توسط برنامهای مانند daemontools یا System Resource Controller در AIX نظارت میشود مفید باشد. همچنین اجرای --no-detach زمانی که rsync تحت یک دیباگر اجرا میشود توصیه میشود. این گزینه در صورتی که rsync از inetd یا sshd اجرا شود هیچ تاثیری ندارد.
- --port=PORT
- این گزینه یک شماره پورت TCP جایگزین به جای پورت پیشفرض 873 برای گوش دادن دیمن تعیین میکند.
- همچنین نسخه کلاینت گزینه --port و تنظیم سراسری port در صفحه راهنمای rsyncd.conf را ببینید.
- --log-file=FILE
- این گزینه به دیمن rsync اعلام میکند که به جای استفاده از تنظیم "log file" در فایل پیکربندی، از نام فایل لاگ داده شده استفاده کند.
- همچنین نسخه کلاینت گزینه --log-file را ببینید.
- --log-file-format=FORMAT
- این گزینه به دیمن rsync اعلام میکند که به جای استفاده از تنظیم "log format" در فایل پیکربندی، از رشته FORMAT داده شده استفاده کند. همچنین این گزینه "transfer logging" را فعال میکند مگر اینکه رشته خالی باشد، که در این صورت لاگگیری انتقال خاموش میشود.
- همچنین به نسخه کلاینت گزینه --log-file-format مراجعه کنید.
- --sockopts
- این گزینه تنظیم socket options را در فایل rsyncd.conf بازنویسی میکند و دارای ساختار نحوی مشابهی است.
- همچنین به نسخه کلاینت گزینه --sockopts مراجعه کنید.
- --verbose, -v
- این گزینه مقدار اطلاعاتی را که دیمن در طول مرحله راهاندازی ثبت میکند افزایش میدهد. پس از اتصال کلاینت، سطح پرگویی (verbosity) دیمن توسط گزینههای مورد استفاده کلاینت و تنظیم "max verbosity" در بخش پیکربندی ماژول کنترل خواهد شد.
- همچنین به نسخه کلاینت گزینه --verbose مراجعه کنید.
- --ipv4, -4 or --ipv6, -6
- به rsync اعلام میکند که هنگام ایجاد سوکتهای ورودی که دیمن rsync برای شنود اتصالات استفاده میکند، IPv4/IPv6 را ترجیح دهد. یکی از این گزینهها ممکن است در نسخههای قدیمیتر لینوکس برای دور زدن یک باگ IPv6 در هسته مورد نیاز باشد (اگر خطای "address already in use" را در شرایطی که هیچ چیز دیگری از پورت استفاده نمیکند مشاهده کردید، مشخص کردن --ipv6 یا --ipv4 را هنگام شروع دیمن امتحان کنید).
- همچنین به نسخه کلاینت این گزینهها مراجعه کنید.
- اگر rsync بدون پشتیبانی از IPv6 کامپایل شده باشد، گزینه --ipv6 هیچ اثری نخواهد داشت. خروجی rsync --version در این حالت شامل "no IPv6" خواهد بود.
- --help, -h
- هنگامی که پس از --daemon مشخص شود، صفحه راهنمای کوتاهی را چاپ میکند که گزینههای موجود برای راهاندازی دیمن rsync را توصیف میکند.
قواعد فیلتر (FILTER RULES)
قواعد فیلتر امکان کنترل سفارشی جنبههای مختلف نحوه مدیریت فایلها را فراهم میکنند:
- o
- کنترل اینکه طرف ارسالکننده چه فایلهایی را در فهرست فایلی که سلسلهمراتب انتقال را توصیف میکند، قرار دهد
- o
- کنترل اینکه وقتی فایل در فهرست فایلهای ارسالکننده نیست، طرف دریافتکننده از حذف چه فایلهایی محافظت کند
- o
- کنترل اینکه هنگام کپی کردن xattrs، کدام نامهای ویژگیهای گسترشیافته نادیده گرفته شوند
این قواعد یا مستقیماً از طریق آرگومانهای گزینهها مشخص میشوند یا میتوان آنها را از یک یا چند فایل خواند. فایلهای قواعد فیلتر حتی میتوانند بخشی از ساختار سلسلهمراتبی فایلهای در حال رونوشت باشند و بخشهای مختلف درخت را به روشهای متفاوتی تحت تأثیر قرار دهند.
قواعد ساده INCLUDE/EXCLUDE (SIMPLE INCLUDE/EXCLUDE RULES)
ابتدا مبانی چگونگی تأثیر قواعد include و exclude بر فایلهای منتقلشده را بدون در نظر گرفتن اثرات جانبی حذف پوشش خواهیم داد. قواعد فیلتر عمدتاً محتویات دایرکتوریهایی را که rsync به صورت بازگشتی وارد آنها میشود تحت تأثیر قرار میدهند، اما میتوانند بر روی آیتمهای سطح بالا در انتقال که به عنوان آرگومان مشخص شدهاند نیز تأثیر بگذارند.
حالت پیشفرض برای هر فایل/دایرکتوری بدون تطابق این است که در انتقال گنجانده شود، که فایل/دایرکتوری را در فهرست فایلهای ارسالکننده قرار میدهد. استفاده از قاعده exclude باعث میشود یک یا چند فایل/دایرکتوری منطبق از فهرست فایلهای فرستنده کنار گذاشته شوند. از یک قاعده include میتوان برای محدود کردن اثر یک قاعده exclude که با فایلهای بسیار زیادی تطابق دارد استفاده کرد.
ترتیب قواعد مهم است زیرا نخستین قاعدهای که مطابقت پیدا کند اعمال میشود. بنابراین، اگر قاعدهای پیشین یک فایل را مستثنی کند، هیچ قاعده include بعد از آن اثری نخواهد داشت. این بدان معناست که شما باید هر بازنویسی include را در نقطهای پیش از قاعده exclude که قصد محدود کردن آن را دارد قرار دهید.
وقتی یک پوشه مستثنی (exclude) میشود، تمام محتویات و زیرمجموعههای آن نیز مستثنی میشوند. ارسالکننده اصلاً درون آن را پیمایش نمیکند، که این امر هنگام نادیده گرفتن زیردرختهای بزرگ و غیرضروری میتواند زمان زیادی را ذخیره کند.
همچنین مهم است درک کنید که قواعد گنجاندن/استثنا کردن (include/exclude) روی هر فایل و دایرکتوری که فرستنده به صورت بازگشتی وارد آن میشود، اعمال میشوند. بنابراین، اگر میخواهید یک فایل خاص در عمق مسیر گنجانده شود، باید مطمئن شوید هیچیک از دایرکتوریهایی که در مسیر رسیدن به آن فایل باید پیمایش شوند استثنا نشده باشند، وگرنه فایل هرگز برای گنجانده شدن پیدا نخواهد شد. به عنوان مثال، اگر دایرکتوری "a/path" به عنوان آرگومان انتقال داده شده باشد و بخواهید مطمئن شوید که فایل "a/path/down/deep/wanted.txt" بخشی از انتقال است، فرستنده نباید در هنگام پیمایش درخت فایل، دایرکتوریهای "a/path"، "a/path/down" یا "a/path/down/deep" را استثنا کند.
هنگامی که روی قواعد کار میکنید، میتواند مفید باشد که از rsync بخواهید به شما بگوید چه چیزی و به چه دلیلی استثنا یا گنجانده میشود. مشخص کردن --debug=FILTER یا (هنگام دریافت فایلها) -M--debug=FILTER سطح ۱ از اطلاعات اشکالزدایی FILTER را فعال میکند که در صورت گنجانده شدن یا استثنا شدن هر فایل یا دایرکتوری، پیامی به همراه قاعدهای که با آن تطابق یافته چاپ میکند. از نسخه 3.2.4 به بعد، این گزینه همچنین در صورت وجود نویسه فاصله در انتهای یک قاعده فیلتر هشدار میدهد، چرا که استثنا کردن "foo " (با یک فاصله در انتها) فایلی با نام "foo" را استثنا نخواهد کرد.
قواعد استثنا و گنجاندن میتوانند از «قواعد تطبیق الگو» (PATTERN MATCHING RULES) با نویسههای عام (مشابه نویسههای عام شل) استفاده کنند که به شما اجازه میدهد مواردی مانند پسوند فایل یا بخشی از نام فایل را تطبیق دهید.
یک قاعده میتواند تنها با قرار دادن یک اسلش در انتهای نام فایل، فقط بر یک دایرکتوری اثر بگذارد.
مثال ساده گنجاندن/استثنا کردن (SIMPLE INCLUDE/EXCLUDE EXAMPLE)
با فرض وجود درخت فایل زیر در سمت فرستنده:
mkdir x/ touch x/file.txt mkdir x/y/ touch x/y/file.txt touch x/y/zzz.txt mkdir x/z/ touch x/z/file.txt
سپس دستور rsync زیر فایل "x/y/file.txt" و دایرکتوریهای مورد نیاز برای نگهداری آن را منتقل خواهد کرد که نتیجه آن ایجاد مسیر "/tmp/x/y/file.txt" روی میزبان راهدور است:
rsync -ai -f'+ x/' -f'+ x/y/' -f'+ x/y/file.txt' -f'- *' x host:/tmp/
نکته جانبی: این رونوشت میتوانست با استفاده از گزینه -R نیز انجام شود (اگرچه این ۲ دستور در صورت فعال بودن حذف، رفتار متفاوتی دارند):
rsync -aiR x/y/file.txt host:/tmp/
دستور زیر نیازی به گنجاندن دایرکتوری "x" ندارد زیرا بخشی از انتقال نیست (به اسلش پایانی دقت کنید). اجرای این دستور تنها "/tmp/x/file.txt" را کپی میکند زیرا دایرکتوریهای "y" و "z" استثنا میشوند:
rsync -ai -f'+ file.txt' -f'- *' x/ host:/tmp/x/
این دستور پروندهٔ zzz.txt را هنگام رونوشت از «x» و هر آنچه درون آن است نادیده میگیرد:
rsync -ai -f'- zzz.txt' x host:/tmp/
قواعد فیلتر هنگام حذف (FILTER RULES WHEN DELETING)
بهطور پیشفرض، قواعد فیلتر include و exclude هم بر فرستنده (هنگام ایجاد فهرست پروندههایش) و هم بر گیرنده (هنگام ایجاد فهرست پروندهها برای محاسبهٔ موارد حذفی) اثر میگذارند. اگر هیچ گزینهٔ حذفی فعال نباشد، گیرنده از ایجاد فهرستهای پروندهٔ مربوط به حذف صرفنظر میکند. این پیشفرض دوطرفه میتواند بهصورت دستی لغو شود تا تنها قواعد فرستنده یا قواعد گیرنده را تعیین کنید، همانطور که در بخش FILTER RULES IN DEPTH توضیح داده شده است.
هنگام حذف، یک exclude پرونده را در سمت گیرنده از حذفشدن محافظت میکند، در حالی که یک include این محافظت را لغو میکند (و پرونده را در معرض خطر حذف قرار میدهد). حالت پیشفرض این است که پرونده در معرض خطر باشد -- امنیت آن به تطابق با پروندهای متناظر از فرستنده بستگی دارد.
نمونهای از اثر دوطرفهٔ exclude را میتوان با رونوشت یک دایرکتوری توسعهٔ C میان ۲ سیستم نشان داد. هنگام انجام یک رونوشت تکمیلی، ممکن است بخواهید از رونوشت پروندهٔ اجرایی ساختهشده و پروندههای .o صرفنظر کنید (پنهانسازی فرستنده) تا سمت گیرنده بتواند پروندههای خودش را بسازد و هیچ پروندهٔ شیء (object file) که از قبل درست است را از دست ندهد (محافظت گیرنده). برای نمونه:
rsync -ai --del -f'- *.o' -f'- cmd' src host:/dest/
توجه داشته باشید که استفاده از -f'-p *.o' حتی بهتر از -f'- *.o' است اگر این احتمال وجود داشته باشد که ساختار دایرکتوری تغییر کرده باشد. اصلاحکنندهٔ «p» در FILTER RULE MODIFIERS بررسی شده است.
یک نکتهٔ پایانی، اگر پوستهٔ شما با نویسههای عام (wildcard) بازنشده مشکلی ندارد، میتوانید نوشتن گزینههای فیلتر را با استفاده از زیرخط بهجای فاصله و حذف نقلقولها سادهتر کنید. برای نمونه، میتوان از -f -_*.o -f -_cmd (و موارد مشابه) بهجای گزینههای فیلتر بالا استفاده کرد.
بررسی دقیق قواعد فیلتر (FILTER RULES IN DEPTH)
برنامهٔ rsync از قواعد سبک قدیمی include/exclude و قواعد سبک جدید فیلتر پشتیبانی میکند. قواعد قدیمیتر با استفاده از --include و --exclude و همچنین --include-from و --exclude-from مشخص میشوند. اینها در رفتار محدود هستند اما نیازی به پیشوند «-» یا «+» ندارند. یک قاعدهٔ exclude سبک قدیمی به یک قاعدهٔ فیلتر «- name» (بدون اصلاحکننده) تبدیل میشود و یک قاعدهٔ include سبک قدیمی به یک قاعدهٔ فیلتر «+ name» (بدون اصلاحکننده) تبدیل میگردد.
برنامهٔ rsync فهرستی مرتبشده از قواعد فیلتر را همانطور که در خط فرمان مشخص شده و/یا از پروندهها خوانده شده است، ایجاد میکند. قواعد فیلتر سبک جدید نحو زیر را دارند:
RULE [PATTERN_OR_FILENAME] RULE,MODIFIERS [PATTERN_OR_FILENAME]
شما میتوانید نامهای کوتاه یا بلند RULE را مطابق شرح زیر انتخاب کنید. اگر از قاعده با نام کوتاه استفاده کنید، نویسهٔ «,» که RULE را از MODIFIERS جدا میکند اختیاری است. عبارت PATTERN یا FILENAME پس از آن (در صورت وجود) باید پس از یک فاصله یا یک زیرخط (_) قرار گیرد. هرگونه فاصله و/یا زیرخط اضافی بخشی از نام الگو در نظر گرفته میشود. در اینجا پیشوندهای موجود برای قواعد آورده شده است:
- exclude, '-'
- الگوی استثنا (exclude) را مشخص میکند که (بهطور پیشفرض) هم hide و هم protect است.
- include, '+'
- الگوی شمول (include) را مشخص میکند که (بهطور پیشفرض) هم show و هم risk است.
- merge, '.'
- یک merge-file را در سمت کلاینت برای خواندن قواعد بیشتر مشخص میکند.
- dir-merge, ':'
- یک merge-file به ازای هر دایرکتوری را مشخص میکند. استفاده از این نوع قاعده فیلتر مستلزم اعتماد به بررسی فیلتر در سمت فرستنده است، بنابراین اثر جانبی ذکر شده ذیل گزینه --trust-sender را به همراه دارد.
- hide, 'H'
- الگویی را برای پنهان کردن فایلها از انتقال مشخص میکند. معادل با یک استثنای فقط-فرستنده است، بنابراین -f'H foo' میتواند بهصورت -f'-s foo' نیز مشخص شود.
- show, 'S'
- فایلهایی که با الگو مطابقت دارند پنهان نمیشوند. معادل با یک شمول فقط-فرستنده است، بنابراین -f'S foo' میتواند بهصورت -f'+s foo' نیز مشخص شود.
- protect, 'P'
- الگویی را برای محافظت فایلها از حذف شدن مشخص میکند. معادل با یک استثنای فقط-گیرنده است، بنابراین -f'P foo' میتواند بهصورت -f'-r foo' نیز مشخص شود.
- risk, 'R'
- فایلهایی که با الگو مطابقت دارند محافظت نمیشوند. معادل با یک شمول فقط-گیرنده است، بنابراین -f'R foo' میتواند بهصورت -f'+r foo' نیز مشخص شود.
- clear, '!'
- فهرست شمول/استثنای (include/exclude) فعلی را پاک میکند (هیچ آرگومانی نمیگیرد)
هنگامی که قواعد از یک فایل خوانده میشوند (با استفاده از merge یا dir-merge)، خطوط خالی و همچنین خطوط کامنت که با '#' شروع میشوند نادیده گرفته میشوند (قواعد نام فایلی که شامل نویسه هش هستند تحت تأثیر قرار نمیگیرند).
همچنین توجه داشته باشید که گزینههای --filter، --include و --exclude هر کدام یک قاعده/الگو میپذیرند. برای افزودن چندین مورد، میتوانید گزینهها را در خط فرمان تکرار کنید، از نحو merge-file در گزینه --filter استفاده کنید، یا از گزینههای --include-from / --exclude-from بهره ببرید.
قواعد تطبیق الگو (PATTERN MATCHING RULES)
بیشتر قواعد ذکر شده در بالا آرگومانی دریافت میکنند که مشخص میکند قاعده باید با چه چیزی تطبیق داده شود. اگر rsync در حال پیمایش بازگشتی در سلسلهمراتب پوشهها باشد، به یاد داشته باشید که همزمان با یافتن نام فایلها برای ارسال، هر الگو با نام تکتک پوشهها در مسیر پیمایش تطبیق داده میشود.
قواعد تطبیق برای آرگومان الگو به چند شکل است:
- o
- اگر یک الگو شامل / (بدون در نظر گرفتن اسلش پایانی) یا "**" (که میتواند با اسلش تطبیق یابد) باشد، آنگاه الگو با کل مسیر فایل، شامل تمام پوشههای والد درون انتقال، تطبیق داده میشود. اگر الگو شامل / (غیر پایانی) یا "**" نباشد، تنها با بخش پایانی نام فایل یا مسیر تطبیق داده میشود. برای مثال، foo بدین معناست که مؤلفه پایانی مسیر باید "foo" باشد در حالی که foo/bar با ۲ عنصر پایانی مسیر تطبیق مییابد (تا زمانی که هر دو عنصر درون انتقال باشند).
- o
- الگویی که به یک / ختم میشود تنها با یک دایرکتوری تطبیق مییابد، نه با یک فایل معمولی، پیوند نمادین (symlink) یا دستگاه (device).
- o
- الگویی که با یک / شروع میشود، به جای انتهای مسیر انتقال، به ابتدای آن متصل (anchor) میشود. برای مثال، /foo/** یا /foo/bar/** فقط با مؤلفههای ابتدایی مسیر تطبیق مییابند. اگر قاعده از یک فایل فیلتر به ازای هر دایرکتوری خوانده شود، مسیر انتقال مورد تطبیق، به جای بالاترین سطح انتقال، از سطح همان فایل فیلتر شروع خواهد شد. برای توضیحات کامل در مورد نحوه مشخص کردن الگویی که با ریشه انتقال تطبیق یابد، بخش ANCHORING INCLUDE/EXCLUDE PATTERNS را ببینید.
ابزار rsync بین تطبیق رشتهای ساده و تطبیق با نویسههای عام (wildcard) بر اساس وجود یکی از این سه نویسه عام در الگو تصمیم میگیرد: '*'، '?' و '[' :
- o
- یک '?' با هر تکنویسهای بهجز اسلش (/) مطابقت دارد.
- o
- یک '*' با صفر یا چند نویسه غیر از اسلش مطابقت دارد.
- o
- یک '**' با صفر یا چند نویسه، شامل اسلشها، مطابقت دارد.
- o
- یک '[' ردهای از نویسهها مانند [a-z] یا [[:alpha:]] را معرفی میکند که باید با یک نویسه مطابقت داشته باشد.
- o
- یک *** در انتهای الگو، روش کوتاهی است که به شما امکان میدهد با یک قاعده منفرد، یک پوشه و تمام محتویات آن را مطابقت دهید. برای مثال، مشخص کردن «dir_name/***» هم با پوشه «dir_name» (مانند حالتی که «dir_name/» مشخص شده باشد) و هم با همه موارد درون پوشه (مانند حالتی که «dir_name/**» مشخص شده باشد) مطابقت مییابد.
- o
- میتوان از بکاسلش برای گریز (escape) دادن یک نویسه عام استفاده کرد، اما بکاسلش تنها زمانی به عنوان نویسه گریز تفسیر میشود که حداقل یک نویسه عام در الگوی تطبیق وجود داشته باشد. برای نمونه، الگوی «foo\bar» با همان تکبکاسلش بهصورت لفظی مطابقت مییابد، در حالی که الگوی «foo\bar*» باید به «foo\\bar*» تغییر داده شود تا از تبدیل «\b» به تنها «b» جلوگیری شود.
در اینجا چند مثال از تطبیق شاملسازی/مستثنیسازی (exclude/include) آورده شده است:
- o
- گزینه -f'- *.o' تمام نامهای پرونده که به .o ختم میشوند را مستثنی میکند
- o
- گزینه -f'- /foo' یک پرونده (یا پوشه) به نام foo را در پوشه ریشه انتقال مستثنی میکند
- o
- گزینه -f'- foo/' هر پوشهای به نام foo را مستثنی میکند
- o
- گزینه -f'- foo/*/bar' هر پرونده/پوشهای به نام bar را که در دو سطح پایینتر از پوشهای به نام foo قرار دارد مستثنی میکند (در صورتی که foo در انتقال باشد)
- o
- گزینه -f'- /foo/**/bar' هر پرونده/پوشهای به نام bar را که در دو سطح یا بیشتر زیر یک پوشه سطحبالا به نام foo باشد مستثنی میکند (توجه داشته باشید که /foo/bar با این قاعده مستثنی نمیشود)
- o
- گزینههای -f'+ */' -f'+ *.c' -f'- *' تمام پوشهها و پروندههای منبع .c را شامل میشوند و نه هیچ چیز دیگری
- o
- گزینههای -f'+ foo/' -f'+ foo/bar.c' -f'- *' تنها پوشه foo و foo/bar.c را شامل میشوند (پوشه foo باید بهطور صریح شامل شود وگرنه توسط «- *» مستثنی خواهد شد)
اصلاحکنندههای قواعد فیلتر (FILTER RULE MODIFIERS)
اصلاحکنندههای زیر پس از یک قاعده شاملسازی (+) یا مستثنیسازی (-) پذیرفته میشوند:
- o
- یک / مشخص میکند که قاعده شاملسازی/مستثنیسازی باید در برابر مسیر مطلق آیتم جاری مطابقت داده شود. برای مثال، -f'-/ /etc/passwd' پرونده passwd را در هر زمانی که انتقال در حال ارسال پروندهها از پوشه "/etc" باشد مستثنی میکند، و "-/ subdir/foo" همیشه "foo" را زمانی که درون پوشهای به نام "subdir" باشد مستثنی خواهد کرد، حتی اگر "foo" در ریشه انتقال جاری باشد.
- o
- یک ! مشخص میکند که شاملسازی/مستثنیسازی باید در صورت عدم تطابق الگو اعمال شود. برای نمونه، -f'-! */' تمام موارد غیرپوشه را مستثنی میکند.
- o
- یک C نشان میدهد که تمام قواعد سراسری CVS-exclude باید به جای «-C» به عنوان موارد مستثنیشده درج شوند. هیچ آرگومانی نباید به دنبال آن بیاید.
- o
- یک s برای نشان دادن این موضوع استفاده میشود که قاعده روی سمت ارسالکننده اعمال میشود. هنگامی که یک قاعده سمت ارسالکننده را تحت تأثیر قرار میدهد، بر این که چه پروندههایی در فهرست پروندههای ارسالکننده قرار میگیرند اثر میگذارد. حالت پیشفرض این است که قاعده بر هر دو سمت اثر بگذارد مگر اینکه --delete-excluded مشخص شده باشد، که در این صورت قواعد پیشفرض تنها مختص سمت ارسالکننده میشوند. همچنین قواعد hide (H) و show (S) را ببینید که روشی جایگزین برای تعیین شاملسازیها/مستثنیسازیهای سمت ارسالکننده هستند.
- o
- یک r برای نشان دادن اعمال قاعده بر سمت دریافتکننده استفاده میشود. وقتی قاعدهای بر سمت دریافتکننده اثر میگذارد، از حذف پروندهها جلوگیری میکند. برای اطلاعات بیشتر تغییردهنده s را ببینید. همچنین قواعد protect (P) و risk (R) را ببینید که روشی جایگزین برای تعیین include/exclude در سمت دریافتکننده هستند.
- o
- یک p نشان میدهد که قاعده فناپذیر (perishable) است، به این معنی که در دایرکتوریهای در حال حذف نادیده گرفته میشود. به عنوان مثال، قواعد پیشفرض گزینه --cvs-exclude (-C) که مواردی مانند "CVS" و "*.o" را مستثنی میکنند، به عنوان فناپذیر علامتگذاری شدهاند و مانع از حذف دایرکتوری حذفشده در مبدأ، در مقصد نخواهند شد.
- o
- یک x نشان میدهد که یک قاعده بر نامهای xattr در عملیات کپی/حذف xattr اثر میگذارد (و بنابراین هنگام تطبیق نامهای پرونده/دایرکتوری نادیده گرفته میشود). اگر هیچ قاعده تطبیق xattr مشخص نشده باشد، یک قاعده فیلتر پیشفرض xattr استفاده میشود (گزینه --xattrs را ببینید).
قواعد فیلتر پرونده ادغامی (MERGE-FILE FILTER RULES)
میتوانید با مشخص کردن یک قاعده فیلتر merge (.) یا dir-merge (:) تمام پروندهها را در قواعد فیلتر خود ادغام کنید (همانطور که در بخش قواعد فیلتر (FILTER RULES) در بالا معرفی شد).
دو نوع پرونده ادغامشده وجود دارد -- تکنمونه ('.') و بهازای-دایرکتوری (':'). پرونده ادغام تکنمونه یک بار خوانده میشود و قواعد آن بهجای قاعده "." در فهرست فیلتر گنجانده میشوند. برای پروندههای ادغام بهازای-دایرکتوری، rsync هر دایرکتوری را که میپیماید برای پرونده نامبرده بررسی کرده و در صورت وجود پرونده، محتویات آن را در فهرست فعلی قواعد به ارث رسیده ادغام میکند. این پروندههای قواعد بهازای-دایرکتوری باید در سمت فرستنده ایجاد شوند، زیرا سمت فرستنده است که برای پروندههای موجود جهت انتقال پیمایش میشود. اگر بخواهید این پروندهها بر حذف نشدن فایلها اثر بگذارند، ممکن است نیاز به انتقال آنها به سمت دریافتکننده نیز باشد (بخش PER-DIRECTORY RULES AND DELETE را در ادامه ببینید).
چند مثال:
merge /etc/rsync/default.rules . /etc/rsync/default.rules dir-merge .per-dir-filter dir-merge,n- .non-inherited-per-dir-excludes :n- .non-inherited-per-dir-excludes
تغییردهندههای زیر پس از قاعده merge یا dir-merge پذیرفته میشوند:
- o
- یک - مشخص میکند که پرونده باید فقط شامل الگوهای exclude باشد، بدون تجزیه هیچ قاعده دیگری به جز کامنتهای درون پرونده.
- o
- یک + مشخص میکند که پرونده باید فقط شامل الگوهای include باشد، بدون تجزیه هیچ قاعده دیگری به جز کامنتهای درون پرونده.
- o
- یک C روشی برای تعیین خوانده شدن پرونده به شیوه سازگار با CVS است. این حالت 'n' ،'w' و '-' را فعال میکند، اما امکان مشخص کردن توکن پاکسازی فهرست (!) را نیز فراهم میسازد. اگر نام پروندهای ارائه نشود، ".cvsignore" فرض میشود.
- o
- یک e نام پرونده ادغامی را از انتقال مستثنی میکند؛ مثلاً "dir-merge,e .rules" مانند "dir-merge .rules" و "- .rules" عمل میکند.
- o
- یک n مشخص میکند که قواعد توسط زیردایرکتوریها به ارث برده نمیشوند.
- o
- یک w مشخص میکند که قواعد بهجای تفکیک سطری معمول، بر اساس فاصله خالی (whitespace) به کلمات تفکیک شوند. این حالت همچنین کامنتها را غیرفعال میکند. نکته: با فاصلهای که پیشوند را از قاعده جدا میکند بهطور ویژه رفتار میشود، بنابراین "- foo + bar" به عنوان دو قاعده تجزیه میشود (با فرض اینکه تجزیه پیشوند نیز غیرفعال نشده باشد).
- o
- همچنین میتوانید هر یک از تغییردهندههای قواعد «+» یا «-» (در بالا) را مشخص کنید تا قواعدی که از پرونده خوانده میشوند بهطور پیشفرض آن تغییردهنده را داشته باشند (به جز تغییردهنده ! که کاربردی ندارد). برای نمونه، "merge,-/ .excl" محتوای .excl را به عنوان استثناهای مسیر مطلق در نظر میگیرد، در حالی که "dir-merge,s .filt" و ":sC" هر کدام باعث میشوند تمام قواعد بر-پوشه (per-directory) آنها تنها در سمت ارسالکننده اعمال شوند. اگر قاعده ادغام، سمتهای تحت تأثیر را مشخص کند (از طریق تغییردهنده s یا r یا هر دو)، آنگاه قواعد درون پرونده نباید سمتها را مشخص کنند (از طریق تغییردهنده یا پیشوند قاعده مانند hide).
قواعد بر-پوشه در تمام زیرپوشههای پوشهای که پرونده ادغام در آن پیدا شده به ارث میرسند، مگر اینکه از تغییردهنده 'n' استفاده شده باشد. قواعد هر زیرپوشه به عنوان پیشوند به قواعد بر-پوشه به ارث رسیده از والدین اضافه میشوند، که به قواعد جدیدتر اولویت بالاتری نسبت به قواعد ارثبریشده میدهد. کل مجموعه قواعد dir-merge در همان نقطهای که پرونده ادغام مشخص شده گروهبندی میشوند، بنابراین میتوان قواعد dir-merge را با قاعدهای که پیشتر در فهرست قواعد سراسری مشخص شده لغو و بازنویسی کرد. هنگامی که قاعده پاکسازی فهرست ("!") از یک پرونده بر-پوشه خوانده میشود، تنها قواعد ارثبریشده برای پرونده ادغام فعلی را پاک میکند.
راه دیگر برای جلوگیری از به ارث رسیدن یک قاعده منفرد از پرونده dir-merge، مهار کردن (anchor) آن با یک اسلش ابتدایی است. قواعد مهارشده در یک پرونده ادغام بر-پوشه نسبت به پوشه همان پرونده ادغام سنجیده میشوند، بنابراین الگوی "/foo" تنها با پرونده "foo" در همان پوشهای که پرونده فیلتر dir-merge در آن یافت شده مطابقت مییابد.
در اینجا نمونهای از یک پرونده فیلتر آورده شده که میتوانید از طریق --filter=". file" مشخص کنید:
merge /home/user/.global-filter - *.gz dir-merge .rules + *.[ch] - *.o - foo*
این ساختار محتوای پرونده /home/user/.global-filter را در ابتدای فهرست ادغام کرده و همچنین نام پرونده ".rules" را به یک پرونده فیلتر بر-پوشه تبدیل میکند. تمامی قواعدی که پیش از آغاز پویش پوشه خوانده شوند، از قواعد مهار سراسری پیروی میکنند (یعنی یک اسلش ابتدایی با ریشه انتقال مطابقت مییابد).
اگر یک پرونده ادغام بر-پوشه با مسیری مشخص شود که پوشه والد اولین پوشه انتقال است، rsync تمام پوشههای والد را از آن نقطه آغازین تا پوشه انتقال برای یافتن پرونده بر-پوشه مشخصشده میپوید. برای نمونه، این یک فیلتر رایج است (به -F مراجعه کنید):
--filter=': /.rsync-filter'
این قاعده به rsync میگوید که پیش از شروع پویش عادی پوشه برای پروندههایی در پوشهها که به عنوان بخشی از فرایند انتقال فرستاده میشوند، به دنبال پرونده .rsync-filter در تمام پوشهها از ریشه به سمت پایین تا پوشه والد انتقال بگردد. (نکته: برای یک دیمن rsync، ریشه همیشه همان "path" ماژول است.)
چند نمونه از این پیشپویش برای پروندههای بر-پوشه:
rsync -avF /src/path/ /dest/dir rsync -av --filter=': ../../.rsync-filter' /src/path/ /dest/dir rsync -av --filter=': .rsync-filter' /src/path/ /dest/dir
دو دستور نخست در بالا، پیش از آغاز پویش عادی برای یافتن فایل در «/src/path» و زیرپوشههای آن، بهدنبال «.rsync-filter» در «/» و «/src» میگردند. دستور آخر از پویش پوشه والد صرفنظر کرده و تنها بهدنبال فایلهای «.rsync-filter» در هر پوشهای میگردد که بخشی از انتقال است.
اگر میخواهید محتویات یک «.cvsignore» را در الگوهای خود بگنجانید، باید از قاعده «:C» استفاده کنید که یک ادغام پوشهای (dir-merge) از فایل .cvsignore ایجاد میکند، اما به شیوهای سازگار با CVS تجزیه میشود. با قرار دادن «:C» در هر کجای قواعد فیلتر خود، میتوانید تعیین کنید که گنجاندن فایل per-directory .cvsignore توسط گزینه --cvs-exclude (-C) در کجای قواعد شما قرار گیرد. بدون این کار، rsync قاعده ادغام پوشهای برای فایل .cvsignore را در انتهای تمام قواعد دیگر شما اضافه میکند (که اولویتی کمتر از قواعد خط فرمان شما به آن میدهد). برای مثال:
cat <<EOT | rsync -avC --filter='. -' a/ b + foo.o :C - *.old EOT rsync -avC --include=foo.o -f :C --exclude='*.old' a/ b
هر دو دستور rsync بالا همسان هستند. هر کدام تمام قواعد per-directory .cvsignore را بهجای انتهای فهرست، در میانه فهرست ادغام میکنند. این کار اجازه میدهد قواعد خاص پوشه آنها بر قواعدی که پس از :C میآیند برتری یابند، بهجای اینکه تابع تمام قواعد شما باشند. برای تأثیرگذاری بر سایر قواعد استثنای CVS (یعنی فهرست پیشفرض استثناها، محتویات $HOME/.cvsignore، و مقدار $CVSIGNORE) باید گزینه خط فرمان -C را حذف کرده و بهجای آن یک قاعده «-C» درون قواعد فیلتر خود درج کنید؛ مثلاً «--filter=-C».
قاعده فیلتر پاکسازی فهرست (LIST-CLEARING FILTER RULE)
میتوانید فهرست گنجاندن/استثنای (include/exclude) فعلی را با استفاده از قاعده فیلتر «!» (همانطور که در بخش قواعد فیلتر (FILTER RULES) در بالا معرفی شد) پاک کنید. فهرست «فعلی» یا فهرست سراسری قواعد است (اگر این قاعده هنگام تجزیه گزینههای فیلتر دیده شود) یا مجموعهای از قواعد هر پوشه (per-directory) است (که در زیرفهرست خود به ارث برده میشوند، بنابراین یک زیرپوشه میتواند از این برای پاک کردن قواعد والد استفاده کند).
لنگراندازی الگوهای گنجاندن/استثنا (ANCHORING INCLUDE/EXCLUDE PATTERNS)
همانطور که پیشتر ذکر شد، الگوهای سراسری include/exclude به «ریشه انتقال» لنگر میشوند (برخلاف الگوهای per-directory که به پوشه فایل ادغام لنگر شدهاند). اگر انتقال را بهصورت زیردرختی از نامها که از فرستنده به گیرنده ارسال میشوند در نظر بگیرید، ریشه انتقال (transfer-root) جایی است که درخت شروع به تکثیر شدن در پوشه مقصد میکند. این ریشه تعیین میکند الگوهایی که با / آغاز میشوند در کجا مطابقت داده شوند.
از آنجا که تطبیق نسبت به ریشه انتقال سنجیده میشود، تغییر اسلش انتهایی در مسیر مبدأ یا تغییر در استفاده شما از گزینه --relative، بر مسیری که باید در تطبیق خود استفاده کنید اثر میگذارد (علاوه بر تغییر اینکه چه مقدار از درخت فایل در میزبان مقصد تکثیر میشود). مثالهای زیر این موضوع را نشان میدهند.
فرض کنید میخواهیم دو فایل مبدأ را مطابقت دهیم، یکی با مسیر مطلق «/home/me/foo/bar»، و دیگری با مسیر «/home/you/bar/baz». نحوه تفاوت انتخابهای گوناگون دستور برای یک انتقال با ۲ مبدأ بهصورت زیر است:
Example cmd: rsync -a /home/me /home/you /dest +/- pattern: /me/foo/bar +/- pattern: /you/bar/baz Target file: /dest/me/foo/bar Target file: /dest/you/bar/baz
Example cmd: rsync -a /home/me/ /home/you/ /dest +/- pattern: /foo/bar (note missing "me") +/- pattern: /bar/baz (note missing "you") Target file: /dest/foo/bar Target file: /dest/bar/baz
Example cmd: rsync -a --relative /home/me/ /home/you /dest +/- pattern: /home/me/foo/bar (note full path) +/- pattern: /home/you/bar/baz (ditto) Target file: /dest/home/me/foo/bar Target file: /dest/home/you/bar/baz
Example cmd: cd /home; rsync -a --relative me/foo you/ /dest +/- pattern: /me/foo/bar (starts at specified path) +/- pattern: /you/bar/baz (ditto) Target file: /dest/me/foo/bar Target file: /dest/you/bar/baz
سادهترین روش برای دیدن اینکه چه نامی را باید فیلتر کنید، بررسی خروجی هنگام استفاده از --verbose و قرار دادن یک / در ابتدای نام است (اگر هنوز آماده رونوشت پروندهها نیستید از گزینه --dry-run استفاده کنید).
قواعد به ازای هر پوشه و حذف (PER-DIRECTORY RULES AND DELETE)
بدون گزینه حذف، قواعد به ازای هر پوشه تنها در سمت فرستنده مرتبط هستند، بنابراین میتوانید بدون تأثیر بر فرایند انتقال، خود پروندههای ادغام را مستثنی کنید. برای آسانتر شدن این کار، اصلاحکننده 'e' این استثنا را برای شما اضافه میکند، همانطور که در این دو دستور معادل دیده میشود:
rsync -av --filter=': .excl' --exclude=.excl host:src/dir /dest rsync -av --filter=':e .excl' host:src/dir /dest
با این حال، اگر میخواهید در سمت گیرنده عملیات حذف انجام دهید و میخواهید برخی پروندهها از حذف شدن مستثنی شوند، باید مطمئن شوید که سمت گیرنده میداند چه پروندههایی را مستثنی کند. سادهترین راه، گنجاندن پروندههای ادغامِ به ازای هر پوشه در فرایند انتقال و استفاده از گزینه --delete-after است؛ زیرا این کار تضمین میکند که سمت گیرنده قبل از اقدام به حذف هر چیزی، همه قواعد استثنای مشابه سمت فرستنده را دریافت میکند:
rsync -avF --delete-after host:src/dir /dest
اما اگر پروندههای ادغام بخشی از فرایند انتقال نباشند، باید یا چند قاعده استثنای سراسری تعیین کنید (یعنی در خط فرمان مشخص شوند)، یا پروندههای ادغام به ازای هر پوشه را خودتان در سمت گیرنده نگهداری کنید. نمونهای از حالت اول به این صورت است (فرض کنید پروندههای .rules دوردست خودشان را مستثنی میکنند):
rsync -av --filter=': .rules' --filter='. /my/extra.rules' --delete host:src/dir /dest
در مثال بالا پروندهی extra.rules میتواند بر هر دو سمت انتقال اثر بگذارد، اما (در سمت فرستنده) قواعد نسبت به قواعد ادغامشده از پروندههای .rules در اولویت پایینتری قرار دارند، زیرا پس از قاعده ادغام به ازای دایرکتوری مشخص شدهاند.
در یک مثال پایانی، سمت راهدور پروندههای .rsync-filter را از انتقال مستثنی میکند، اما ما میخواهیم از پروندههای .rsync-filter خودمان برای کنترل آنچه در سمت گیرنده حذف میشود استفاده کنیم. برای انجام این کار باید بهطور مشخص پروندههای ادغام به ازای دایرکتوری را مستثنی کنیم (تا حذف نشوند) و سپس قواعدی را در پروندههای محلی قرار دهیم تا کنترل کنیم چه چیزهای دیگری نباید حذف شوند. مانند یکی از این دستورات:
rsync -av --filter=':e /.rsync-filter' --delete host:src/dir /dest rsync -avFF --delete host:src/dir /dest
قواعد انتقال (TRANSFER RULES)
علاوه بر قواعد فیلتر (FILTER RULES) که بر پیمایش بازگشتی پروندهها جهت تولید فهرست پرونده در سمت فرستنده و (هنگام حذف) سمت گیرنده تأثیر میگذارند، قواعد انتقال نیز وجود دارند. این قواعد بر اینکه تولیدکننده (generator) کدام پروندهها را برای انتقال لازم تشخیص دهد اثر میگذارند، بدون اینکه اثرات جانبی قاعده فیلترِ استثنا (exclude) را داشته باشند. قواعد انتقال تنها بر پروندهها اثر میگذارند و هرگز شامل دایرکتوریها نمیشوند.
از آنجا که یک قاعده انتقال بر آنچه وارد فهرست پروندههای فرستنده (و گیرنده) میشود اثری ندارد، نمیتواند هیچ اثری بر اینکه کدام پروندهها در سمت گیرنده حذف میشوند داشته باشد. برای نمونه، اگر پروندهی "foo" در فهرست فرستنده موجود باشد اما اندازهی آن طوری باشد که به دلیل یک قاعده انتقال نادیده گرفته شود، سمت گیرنده پرونده را درخواست نمیکند. با این حال، حضور آن در فهرست پروندهها به این معنی است که مرحله حذف، پرونده منطبق با نام "foo" را در سمت گیرنده پاک نخواهد کرد. از سوی دیگر، استثنا کردن (پنهانسازی یا hide) پروندهی "foo" در سمت سرور، پرونده را از فهرست پروندههای سرور خارج میکند و در صورت نبود استثنا در سمت گیرنده (محافظت یا protect)، چنانچه حذف درخواست شده باشد، گیرنده پرونده منطبق با نام "foo" را حذف خواهد کرد.
با توجه به اینکه پروندهها همچنان در فهرست پروندههای فرستنده قرار دارند، گزینه --prune-empty-dirs یک دایرکتوری را خالی در نظر نمیگیرد، حتی اگر تنها شامل پروندههایی باشد که قواعد انتقال آنها را نادیده گرفتهاند.
به همین ترتیب، یک قاعده انتقال تأثیر مضاعفی بر اینکه چه پروندههایی در سمت گیرنده حذف شوند ندارد، بنابراین تنظیم حداکثر اندازه پرونده برای انتقال، مانع از حذف پروندههای بزرگ نمیشود.
نمونههایی از قواعد انتقال شامل الگوریتم پیشفرض "بررسی سریع (quick check)" (که اندازه و زمان تغییر را مقایسه میکند)، گزینه --update، گزینه --max-size، گزینه --ignore-non-existing و چند مورد دیگر است.
حالت دستهای (BATCH MODE)
حالت دستهای میتواند برای اعمال مجموعهای یکسان از بهروزرسانیها بر روی چندین سیستم یکسان به کار رود. فرض کنید ساختار درختی دارید که روی چندین میزبان کپی شده است. حال فرض کنید تغییراتی در این درخت مبدأ ایجاد شده و نیاز است آن تغییرات به سایر میزبانها منتقل شوند. برای انجام این کار با استفاده از حالت دستهای، rsync با گزینه write-batch اجرا میشود تا تغییرات اعمالشده در درخت مبدأ را روی یکی از درختهای مقصد اعمال کند. گزینه write-batch باعث میشود کلاینت rsync تمام اطلاعات لازم برای تکرار این عملیات در برابر سایر درختهای مقصدِ یکسان را در یک "پرونده دستهای (batch file)" ذخیره کند.
ایجاد پرونده دستهای برای یک بار، مانع از انجام مکرر بررسی وضعیت پرونده، محاسبه چکسام و تولید بلوکهای داده هنگام بهروزرسانی چندین درخت مقصد میشود. به جای ارسال دادههای یکسان به تکتک میزبانها بهصورت جداگانه، میتوان از پروتکلهای انتقال چندپخشی (multicast) برای انتقال همزمان و موازی پروندههای بهروزرسانی دستهای به چندین میزبان استفاده کرد.
برای اعمال تغییرات ثبتشده روی یک درخت مقصد دیگر، rsync را همراه با گزینه read-batch، با مشخص کردن نام همان پرونده دستهای و درخت مقصد اجرا کنید. ابزار rsync با استفاده از اطلاعات ذخیرهشده در پرونده دستهای، درخت مقصد را بهروزرسانی میکند.
برای راحتی شما، هنگامی که گزینه write-batch استفاده میشود، یک فایل اسکریپت نیز ایجاد میشود: نام آن همانند فایل دستهای خواهد بود با پسوند ".sh". این فایل اسکریپت شامل یک خط فرمان مناسب برای بهروزرسانی درخت مقصد با استفاده از فایل دستهای مربوطه است. این اسکریپت میتواند با استفاده از یک شل Bourne (یا شبیه به Bourne) اجرا شود، همراه با امکان ارسال اختیاری مسیر یک درخت مقصد جایگزین که سپس به جای مسیر مقصد اصلی استفاده میشود. این قابلیت زمانی مفید است که مسیر درخت مقصد در میزبان فعلی با مسیر استفادهشده برای ایجاد فایل دستهای متفاوت باشد.
مثالها:
$ rsync --write-batch=foo -a host:/source/dir/ /adest/dir/ $ scp foo* remote: $ ssh remote ./foo.sh /bdest/dir/
$ rsync --write-batch=foo -a /source/dir/ /adest/dir/ $ ssh remote rsync --read-batch=- -a /bdest/dir/ <foo
در این مثالها، rsync برای بهروزرسانی /adest/dir/ از /source/dir/ استفاده شده و اطلاعات لازم برای تکرار این عملیات در "foo" و "foo.sh" ذخیره میشود. سپس میزبان "remote" با دادههای دستهای که به دایرکتوری /bdest/dir وارد میشوند بهروزرسانی میشود. تفاوتهای میان دو مثال، بخشی از انعطافپذیری شما را در نحوه مدیریت دستهها نشان میدهد:
- o
- مثال اول نشان میدهد که رونوشت اولیه نیازی نیست محلی باشد -- شما میتوانید بر حسب نیاز، دادهها را با استفاده از نحو پوسته راهدور یا نحو دیمن rsync به/از یک میزبان راهدور ارسال یا دریافت کنید.
- o
- مثال اول از فایل ایجادشده "foo.sh" برای دریافت گزینههای صحیح rsync هنگام اجرای دستور read-batch روی میزبان راهدور استفاده میکند.
- o
- مثال دوم دادههای دستهای را از طریق ورودی استاندارد میخواند تا نیازی به رونوشت اولیه فایل دستهای به دستگاه راهدور نباشد. این مثال از اسکریپت foo.sh اجتناب میکند زیرا نیاز به استفاده از گزینه تغییریافته --read-batch داشت، اما در صورت تمایل میتوانید فایل اسکریپت را ویرایش کنید تا از آن استفاده نمایید (فقط مطمئن شوید که گزینه دیگری مانند گزینه --exclude-from=- سعی در استفاده از ورودی استاندارد ندارد).
هشدارها:
گزینه read-batch انتظار دارد درخت مقصدی که در حال بهروزرسانی آن است، دقیقاً مشابه درخت مقصدی باشد که برای ایجاد مجموعه فایلهای بهروزرسانی دستهای استفاده شده است. هنگامی که تفاوتی بین درختهای مقصد مشاهده شود، ممکن است بهروزرسانی با یک هشدار لغو شود (اگر پرونده از قبل بهروز به نظر برسد) یا تلاش برای بهروزرسانی پرونده انجام شود و سپس در صورت عدم موفقیت در اعتبارسنجی پرونده، بهروزرسانی با یک خطا لغو گردد. این بدان معناست که در صورت متوقف شدن دستور، اجرای مجدد عملیات read-batch باید ایمن باشد. اگر میخواهید تلاش برای بهروزرسانی دستهای بدون در نظر گرفتن اندازه و تاریخ پرونده همواره اجبار شود، از گزینه -I (هنگام خواندن دسته) استفاده کنید. در صورت بروز خطا، درخت مقصد احتمالاً در وضعیت بهروزرسانی جزئی قرار خواهد گرفت. در این حالت، rsync میتواند در حالت عملیاتی عادی (غیر دستهای) خود برای اصلاح درخت مقصد استفاده شود.
نسخه rsync استفادهشده در تمام مقصدها باید حداقل به همان تازگی نسخهای باشد که برای تولید فایل دستهای استفاده شده است. اگر نسخه پروتکل در فایل دستهای برای rsync خواننده دسته بیش از حد جدید باشد، rsync با خطا متوقف خواهد شد. همچنین گزینه --protocol را برای روشی ببینید که در آن rsync سازنده، فایل دستهای را طوری تولید کند که یک rsync قدیمیتر بتواند آن را درک کند. (توجه داشته باشید که قالب فایلهای دستهای در نسخه 2.6.3 (سپتامبر ۲۰۰۴) تغییر کرد، بنابراین ترکیب نسخههای قدیمیتر از آن با نسخههای جدیدتر کار نخواهد کرد.)
هنگام خواندن یک فایل دستهای (batch file)، اگر گزینهها را مشابه دستور ایجاد دسته تنظیم نکرده باشید، rsync مقدار برخی گزینهها را به گونهای اجبار میکند که با دادههای موجود در فایل دستهای مطابقت پیدا کند. سایر گزینهها میتوانند (و باید) تغییر کنند. برای نمونه، --write-batch به --read-batch تغییر مییابد، --files-from نادیده گرفته میشود، و نیازی به گزینههای --filter / --include / --exclude نیست مگر اینکه یکی از گزینههای --delete مشخص شده باشد.
کدی که فایل BATCH.sh را ایجاد میکند، تمام گزینههای filter/include/exclude را به یک فهرست واحد تبدیل کرده و آن را به صورت یک سند "here" به فایل اسکریپت شل پیوست میکند. کاربر پیشرفته در صورت نیاز به تغییر مواردی که با --delete حذف میشوند، میتواند از این ویژگی برای تغییر فهرست استثناها استفاده کند. کاربر معمولی میتواند از این جزئیات صرفنظر کرده و تنها از اسکریپت شل به عنوان راهی ساده برای اجرای دستور مناسب --read-batch برای دادههای دستهای استفاده نماید.
پیوندهای نمادین (SYMBOLIC LINKS)
هنگامی که rsync با یک پیوند نمادین در دایرکتوری مبدأ مواجه میشود، سه رفتار پایهای امکانپذیر است.
بهطور پیشفرض، پیوندهای نمادین به هیچ وجه منتقل نمیشوند. پیام "skipping non-regular" برای تمام پیوندهای نمادین موجود صادر میشود.
اگر --links مشخص شود، پیوندهای نمادین به فرایند انتقال افزوده میشوند (بهجای اینکه با پیام نادیده گرفته شوند)، و رفتار پیشفرض، بازسازی آنها با همان مقصد در مقصد است. توجه داشته باشید که --archive به طور ضمنی شامل --links است.
اگر --copy-links مشخص شود، پیوندهای نمادین با کپی کردن فایل مرجع آنها به جای خود پیوند نمادین، "ادغام" (collapse) میشوند.
ابزار rsync همچنین قادر است پیوندهای نمادین «امن» (safe) و «ناامن» (unsafe) را تشخیص دهد. یک مثال از کاربرد آن، آینه (mirror) یک وبگاه است که میخواهد اطمینان حاصل کند ماژول rsync کپیشده شامل پیوندهای نمادین به /etc/passwd در بخش عمومی سایت نباشد. استفاده از --copy-unsafe-links باعث میشود هر پیوند ناامن به صورت فایلی که به آن اشاره میکند در مقصد رونوشت شود. استفاده از --safe-links باعث میشود پیوندهای ناامن توسط گیرنده نادیده گرفته شوند. (توجه داشته باشید که برای اثرگذاری --safe-links، باید گزینه --links را به صورت صریح یا ضمنی مشخص کنید.)
پیوندهای نمادین در صورتی ناامن در نظر گرفته میشوند که پیوندهای مطلق باشند (با / شروع شوند)، خالی باشند، یا شامل مؤلفههای ".." به تعداد کافی برای بالا رفتن از سطح ریشه انتقال باشند.
در اینجا خلاصهای از نحوه تفسیر گزینههای پیوند نمادین آمده است. این فهرست به ترتیب اولویت است؛ بنابراین اگر ترکیب گزینههای شما در اینجا ذکر نشده است، از اولین خطی که زیرمجموعه کاملی از گزینههای شما است استفاده کنید:
- --copy-links
- تبدیل تمام پیوندهای نمادین به فایلها و دایرکتوریهای عادی (عدم باقیگذاشتن پیوند نمادین در فرایند انتقال برای تأثیرگذاری سایر گزینهها).
- --copy-dirlinks
- تنها تبدیل پیوندهای نمادین به دایرکتوریها به دایرکتوریهای واقعی، و باقی گذاشتن سایر پیوندهای نمادین برای مدیریت طبق موارد زیر.
- --links --copy-unsafe-links
- تبدیل تمام پیوندهای نمادین ناامن به فایل و ایجاد تمام پیوندهای نمادین امن.
- --copy-unsafe-links
- تبدیل تمام پیوندهای نمادین ناامن به فایل و رد کردن تمام پیوندهای نمادین امن همراه با گزارش.
- --links --safe-links
- گیرنده از ایجاد پیوندهای نمادین ناامنِ یافتشده در انتقال صرفنظر میکند و پیوندهای امن را ایجاد مینماید.
- --links
- ایجاد تمام پیوندهای نمادین.
برای اطلاع از اثر --munge-links، توضیحات بخش مربوط به آن گزینه را مشاهده کنید.
توجه داشته باشید که گزینه --keep-dirlinks بر پیوندهای نمادین موجود در انتقال تأثیری ندارد، بلکه بر نحوه برخورد rsync با پیوند نمادین به دایرکتوریای که از پیش در سمت گیرنده وجود دارد تأثیر میگذارد. برای مشاهده هشدارها، به بخش مربوط به آن گزینه مراجعه کنید.
عیبیابی (DIAGNOSTICS)
برنامه rsync گاهی اوقات پیامهای خطایی تولید میکند که ممکن است کمی مبهم به نظر برسند. پیامی که بیشترین سردرگمی را ایجاد میکند "protocol version mismatch -- is your shell clean?" است.
این پیام معمولاً به دلیل اسکریپتهای راهاندازی یا ابزار شل راهدور رخ میدهد که دادههای زائد ناخواستهای روی جریانی تولید میکنند که rsync برای انتقال خود استفاده میکند. روش عیبیابی این مشکل این است که شل راهدور خود را به این صورت اجرا کنید:
ssh remotehost /bin/true > out.dat
سپس فایل out.dat را بررسی کنید. اگر همهچیز به درستی کار کند، out.dat باید فایلی با طول صفر باشد. اگر خطای بالا را از rsync دریافت میکنید، احتمالاً خواهید دید که out.dat حاوی مقداری متن یا داده است. محتویات آن را بررسی کنید و مشخص کنید چه چیزی آن را تولید میکند. رایجترین علت، اسکریپتهای راهاندازی شل با پیکربندی نادرست (مانند .cshrc یا .profile) هستند که حاوی دستورات خروجی برای ورودهای غیرتعاملی میباشند.
اگر در اشکالزدایی الگوهای فیلتر با مشکل مواجه شدید، از گزینه -vv استفاده کنید. در این سطح از پرگویی، rsync دلیل گنجانده شدن یا حذف شدن هر فایل را به صورت جداگانه نمایش میدهد.
کدهای خروج (EXIT VALUES)
- o
- 0 - موفقیتآمیز
- o
- 1 - خطای نحوی یا خطای استفاده از دستور
- o
- 2 - ناسازگاری پروتکل
- o
- 3 - خطا در انتخاب فایلها یا دایرکتوریهای ورودی/خروجی
- o
- o
- 5 - خطا در شروع پروتکل کلاینت-سرور
- o
- 10 - خطا در ورودی/خروجی سوکت
- o
- 11 - خطا در ورودی/خروجی فایل
- o
- 12 - خطا در جریان داده پروتکل rsync
- o
- 13 - خطا در عیبیابی برنامه
- o
- 14 - خطا در کد IPC
- o
- 15 - پردازه همنیا دچار فروپاشی شد (مانند core dumped).
- o
- 16 - پردازه همنیا توسط یک سیگنال متوقف شد (کشته شد).
- o
- 19 - سیگنال SIGUSR1 دریافت شد.
- o
- 20 - سیگنال SIGINT، SIGTERM یا SIGHUP دریافت شد.
- o
- 21 - خطایی توسط waitpid() بازگردانده شد
- o
- 22 - خطا در تخصیص بافرهای حافظه اصلی
- o
- 23 - انتقال ناقص به دلیل بروز خطا
- o
- 24 - انتقال ناقص به دلیل ناپدید شدن فایلهای مبدأ
- o
- 25 - محدودیت --max-delete حذفها را متوقف کرد
- o
- 30 - اتمام مهلت زمانی در ارسال/دریافت داده
- o
- 35 - اتمام مهلت زمانی در انتظار برای اتصال دیمن
متغیرهای محیطی (ENVIRONMENT VARIABLES)
- CVSIGNORE
- متغیر محیطی CVSIGNORE هر الگوی نادیدهگرفتن موجود در فایلهای .cvsignore را تکمیل میکند. برای جزئیات بیشتر گزینه --cvs-exclude را ببینید.
- RSYNC_ICONV
- یک تنظیم پیشفرض --iconv را با استفاده از این متغیر محیطی مشخص کنید.
- RSYNC_OLD_ARGS
- مقدار "1" را تعیین کنید اگر میخواهید گزینه --old-args به صورت پیشفرض فعال باشد، "2" (یا بیشتر) اگر میخواهید در حالت تکرار گزینه فعال باشد، یا "0" برای اطمینان از اینکه به صورت پیشفرض غیرفعال است. هنگامی که این متغیر محیطی روی یک مقدار غیر صفر تنظیم شود، جایگزین متغیر RSYNC_PROTECT_ARGS میشود.
- اگر --old-args، --no-old-args یا --secluded-args در خط فرمان مشخص شده باشند، این متغیر نادیده گرفته میشود.
- اولین بار در 3.2.4 (آوریل 2022) پشتیبانی شد.
- RSYNC_PROTECT_ARGS
- یک مقدار عددی غیر صفر مشخص کنید اگر میخواهید گزینه --secluded-args به طور پیشفرض فعال باشد، یا یک مقدار صفر برای اطمینان از اینکه به طور پیشفرض غیرفعال است.
- اگر --secluded-args، --no-secluded-args یا --old-args در خط فرمان مشخص شده باشند، این متغیر نادیده گرفته میشود.
- از نسخه 3.2.4 (آوریل 2022)، اگر RSYNC_OLD_ARGS روی یک مقدار غیر صفر تنظیم شده باشد، این متغیر نادیده گرفته میشود.
- RSYNC_RSH
- این متغیر محیطی به شما اجازه میدهد تا شل پیشفرض مورد استفاده به عنوان بستر انتقال rsync را بازنویسی کنید. گزینههای خط فرمان پس از نام دستور مجاز هستند، درست مانند گزینه --rsh (-e).
- RSYNC_PROXY
- این متغیر محیطی به شما امکان میدهد هنگام اتصال به یک دیمن rsync، کلاینت rsync خود را به استفاده از یک وبپراکسی هدایت کنید. باید RSYNC_PROXY را روی یک مقدار hostname:port تنظیم کنید.
- RSYNC_PASSWORD
- این متغیر محیطی به شما اجازه میدهد تا گذرواژه را برای اتصال به daemon rsync تنظیم کنید، که از درخواست گذرواژه جلوگیری میکند. توجه داشته باشید که این متغیر گذرواژهای برای انتقال از طریق شل راهدور مانند ssh ارائه نمیدهد (برای نحوه انجام آن به مستندات مربوطه مراجعه کنید).
- USER or LOGNAME
- متغیرهای محیطی USER یا LOGNAME برای تعیین نام کاربری پیشفرض ارسالشده به دیمن rsync استفاده میشوند. اگر هیچکدام تنظیم نشده باشند، نام کاربری به طور پیشفرض "nobody" خواهد بود. اگر هر دو تنظیم شده باشند، USER اولویت دارد.
- RSYNC_PARTIAL_DIR
- این متغیر محیطی پوشهای را که برای انتقال --partial استفاده میشود مشخص میکند، بدون اینکه دلالت بر فعال بودن انتقالهای ناقص داشته باشد. برای جزئیات کامل گزینه --partial-dir را ببینید.
- RSYNC_COMPRESS_LIST
- این متغیر محیطی به شما اجازه میدهد با تعیین ترتیبی جایگزین یا فهرستی کاهشیافته از نامها، مذاکره الگوریتم فشردهسازی را سفارشیسازی کنید. دستور rsync --version را برای مشاهده نامهای فشردهسازی موجود اجرا کنید. برای جزئیات کامل گزینه --compress را ببینید.
- RSYNC_CHECKSUM_LIST
- این متغیر محیطی به شما امکان میدهد با مشخص کردن ترتیبی جایگزین یا فهرستی کاهشیافته از نامها، مذاکره الگوریتم چکسام (checksum) را سفارشیسازی کنید. دستور rsync --version را برای مشاهده نامهای چکسام موجود اجرا کنید. برای جزئیات کامل گزینه --checksum-choice را ببینید.
- RSYNC_MAX_ALLOC
- این متغیر محیطی حداکثر تخصیص حافظه را تنظیم میکند، درست مانند زمانی که از گزینه --max-alloc استفاده کرده باشید.
- RSYNC_PORT
- این متغیر محیطی توسط rsync خوانده نمیشود، بلکه هنگام اجرای شل راهدور در ترکیب با اتصال دیمن، در زیرمحیط آن مقداردهی میشود. این امر به اسکریپتهایی مانند rsync-ssl اجازه میدهد تا شماره پورت مشخصشده توسط کاربر در خط فرمان را بدانند.
- HOME
- این متغیر محیطی برای یافتن فایل پیشفرض .cvsignore کاربر استفاده میشود.
- RSYNC_CONNECT_PROG
- این متغیر محیطی عمدتاً در راهاندازیهای عیبیابی برای تعیین برنامهای که هنگام برقراری اتصال دیمن باید استفاده شود، به کار میرود. برای جزئیات کامل بخش CONNECTING TO AN RSYNC DAEMON را ببینید.
- RSYNC_SHELL
- این متغیر محیطی عمدتاً در راهاندازیهای عیبیابی برای تعیین برنامهای که باید برای اجرای برنامه مشخصشده توسط RSYNC_CONNECT_PROG استفاده شود، به کار میرود. برای جزئیات کامل بخش CONNECTING TO AN RSYNC DAEMON را ببینید.
فایلها (FILES)
/etc/rsyncd.conf یا rsyncd.conf
همچنین ببینید (SEE ALSO)
باگها (BUGS)
- o
- زمانها به عنوان مقادیر time_t یونیکس منتقل میشوند.
- o
- هنگام انتقال به فایلسیستمهای FAT ممکن است rsync فایلهای تغییرنیافته را مجدداً همگامسازی کند. توضیحات گزینه --modify-window را ببینید.
- o
- مجوزهای فایل، دستگاهها و غیره به صورت مقادیر عددی نیتیو منتقل میشوند.
- o
- همچنین توضیحات مربوط به گزینه --delete را ببینید.
لطفاً باگها را گزارش دهید! به وبگاه زیر مراجعه کنید: https://rsync.samba.org.
نسخه (VERSION)
این صفحه راهنما مربوط به نسخه 3.5.0 برنامه rsync است.
گزینههای داخلی (INTERNAL OPTIONS)
گزینههای --server و --sender به صورت داخلی توسط rsync استفاده میشوند و در شرایط عادی هرگز نباید توسط کاربر وارد شوند. در برخی سناریوها، مانند زمان تنظیم لاگینی که فقط مجاز به اجرای دستور rsync است، ممکن است آگاهی از این گزینهها لازم باشد. برای مثال، دایرکتوری support در توزیع rsync شامل یک اسکریپت نمونه به نام rrsync (برای rsync محدودشده) است که میتواند با لاگین محدودشده ssh استفاده شود.
دستاندرکاران (CREDITS)
برنامه Rsync تحت مجوز GNU General Public License توزیع شده است. فایل COPYING را برای جزئیات ببینید.
وبگاه rsync در آدرس زیر در دسترس است: https://rsync.samba.org. این سایت شامل یک FAQ-O-Matic است که ممکن است به سوالات پاسخدادهنشده در این صفحه راهنما پاسخ دهد.
پروژه گیتهاب rsync: https://github.com/RsyncProject/rsync.
اگر این برنامه برایتان مفید بوده است، خوشحال میشویم از شما بشنویم. لطفاً با فهرست پستی در rsync@lists.samba.org مکاتبه کنید.
این برنامه از کتابخانه فشردهسازی عالی zlib که توسط Jean-loup Gailly و Mark Adler نوشته شده، استفاده میکند.
تشکرها (THANKS)
تشکر ویژه از: John Van Essen، Matt McCutchen، Wesley W. Terpstra، David Dykstra، Jos Backus، Sebastian Krahmer، Martin Pool و رفیق از دست رفته اما فراموشنشدنی ما، J.W. Schultz.
همچنین با تشکر از Richard Brent، Brendan Mackay، Bill Waite، Stephen Rothwell و David Bell. احتمالاً نام برخی از قلم افتاده باشد که اگر چنین است پوزش میطلبم.
نویسنده (AUTHOR)
برنامه rsync در ابتدا توسط Andrew Tridgell و Paul Mackerras نوشته شد. افراد بسیاری از سراسر جهان در نگهداری و بهبود آن مشارکت داشتهاند.
تشکر ویژه از Wayne Davison که از سال 2004 تا 2024 نگهداری rsync را بر عهده داشت.
فهرستهای پستی برای پشتیبانی و توسعه در https://lists.samba.org در دسترس هستند.
| 13 Aug 2026 | rsync 3.5.0 |