| DIFFOSCOPE(1) | User Commands | DIFFOSCOPE(1) |
نام (NAME)
diffoscope - مقایسه عمیق و موشکافانه فایلها، آرشیوها و دایرکتوریها
خلاصه دستور (SYNOPSIS)
diffoscope --help diffoscope [OPTIONS] [--json output_diff] path1 path2 diffoscope [OPTIONS] diff diffoscope [OPTIONS] < diff
""
توضیحات (DESCRIPTION)
دستور diffoscope تلاش میکند تا ریشه و علت اصلی تفاوتهای میان فایلها یا دایرکتوریها را بیابد. این ابزار به صورت بازگشتی انواع گوناگون آرشیوها را باز کرده و فرمتهای باینری مختلف را به ساختاری خواناتر برای انسان تبدیل میکند تا بتوان آنها را مقایسه کرد. این برنامه میتواند دو فایل فشرده tar، ایمیجهای ISO یا اسناد PDF را به آسانی مقایسه کند.
میتوان از طریق کدهای خروج برای آن اسکریپتنویسی کرد و گزارشی شامل تفاوتهای شناساییشده تولید نمود. این گزارش میتواند متنی یا به صورت HTML باشد. هنگامی که هیچ نوع گزارشی انتخاب نشده باشد، diffoscope به صورت پیشفرض یک گزارش متنی در خروجی استاندارد مینویسد.
پروژه diffoscope در ابتدا توسط پروژه دبیان "ساختهای تکرارپذیر" (reproducible builds) آغاز شد و اکنون به عنوان بخشی از ابتکار عمل (گستردهتر) ساختهای تکرارپذیر توسعه مییابد https://reproducible-builds.org. هدف این ابزار آن است که بتوان به سرعت دریافت چرا دو ساخت متفاوت از یک بسته، خروجیهای گوناگونی تولید میکنند. diffoscope پیشتر با نام debbindiff شناخته میشد.
برای شروع به بخش مثالهای خط فرمان (COMMAND-LINE EXAMPLES) در ادامه مراجعه کنید، همچنین توضیحات دقیقتر درباره تمامی گزینههای خط فرمان ارائه شده است. همین اطلاعات در مسیر /usr/share/doc/diffoscope/README.rst یا موارد مشابه نیز در دسترس است.
گزینهها (options):
- --debug
- نمایش پیامهای اشکالزدایی.
- --pdb
- باز کردن دیباگر pdb پایتون در صورت بروز کرش یا خطا.
- --status-fd FD
- ارسال وضعیت ماشینخوان به توصیفکننده فایل FD.
- --progress, --no-progress
- نمایش نوار پیشرفت تقریبی. پیشفرض: yes اگر stdin یک ترمینال (tty) باشد، در غیر این صورت no.
- --no-default-limits
- غیرفعال کردن اکثر محدودیتهای پیشفرض خروجی و محدودیتهای محاسبه تفاوت (diff).
- --load-existing-diff INPUT_FILE
- بارگذاری یک diff موجود از فایل. برای خواندن diff مربوط به diffoscope از ورودی استاندارد (stdin)، مقدار "-" را مشخص کنید.
انواع خروجی (output types):
- --text OUTPUT_FILE
- نوشتن خروجی متن ساده در فایل دادهشده (برای stdout از - استفاده کنید).
- --text-color WHEN
- زمان نمایش خروجی diff رنگی. WHEN یکی از مقادیر {never, auto, always} است. پیشفرض: auto، به این معنی که اگر خروجی یک ترمینال باشد بله، در غیر این صورت خیر.
- --output-empty
- در صورتی که هیچ تفاوتی وجود نداشت، برای هر نوع خروجی مشخصشده یک diff خالی ایجاد شود. در خروجی --text، یک فایل خالی نوشته میشود.
- --html OUTPUT_FILE
- نوشتن گزارش HTML در فایل دادهشده (برای stdout از - استفاده کنید).
- --html-dir OUTPUT_DIR
- نوشتن گزارش HTML چندفایلی در دایرکتوری دادهشده.
- --css URL
- پیوند دادن به یک CSS اضافی برای گزارش HTML.
- --jquery URL
- پیوند URL به jQuery، برای خروجی --html و --html-dir. اگر این یک URL نسبی ناموجود باشد، diffoscope یک پیوند نمادین (symlink) به نسخه نصبشده در سیستم ایجاد میکند (مسیرهای جستجو: /usr/share/javascript/jquery/jquery.js). در صورت عدم تعیین، خروجی --html از جاوااسکریپت استفاده نخواهد کرد، اما خروجی --html-dir در صورت یافتن استفاده میکند؛ برای غیرفعال کردن جاوااسکریپت در تمام خروجیها، مقدار "disable" را بدهید.
- --json OUTPUT_FILE
- نوشتن خروجی متنی JSON در فایل دادهشده (برای stdout از - استفاده کنید).
- --markdown OUTPUT_FILE
- نوشتن خروجی متنی Markdown در فایل دادهشده (برای stdout از - استفاده کنید).
- --restructured-text OUTPUT_FILE
- نوشتن خروجی متنی RsT در فایل دادهشده (برای stdout از - استفاده کنید).
- --difftool TOOL
- مقایسه تفاوتها به صورت دانهبهدانه با استفاده از دستور خارجی مشخصشده، مشابه با git-difftool(1).
- --profile [OUTPUT_FILE]
- نوشتن اطلاعات پروفایلسازی کارایی در فایل دادهشده (برای stdout از - استفاده کنید).
محدودیتهای خروجی (output limits):
- --diff-context LINES
- تعداد خطوط سیاق و زمینه diff یکپارچه (unified diff) برای نمایش (پیشفرض: 7).
- --max-text-report-size BYTES
- حداکثر بایتهای نوشتهشده در گزارش --text (مقدار 0 برای غیرفعال کردن، پیشفرض: 0).
- --max-report-size BYTES
- حداکثر بایتهای گزارش در یک قالب دادهشده، در تمامی صفحات آن. توجه داشته باشید که برخی فرمتها مانند --html ممکن است با محدودیتهای حتی کوچکتری نظیر --max-page-size محدود شوند (مقدار 0 برای غیرفعال کردن، پیشفرض: 41943040).
- --max-diff-block-lines LINES
- حداکثر تعداد خطوط خروجی در هر بلوک unified-diff، در تمامی صفحات (مقدار 0 برای غیرفعال کردن، پیشفرض: 1024).
- --max-page-size BYTES
- حداکثر بایتهای صفحه سطح بالا (--html-dir) یا صفحه منفرد (--html) (پیشفرض: 41943040، حتی با --no-default-limits نیز همچنان برقرار میماند).
- --max-page-diff-block-lines LINES
- حداکثر تعداد خطوط خروجی در هر بلوک unified-diff در صفحه سطح بالا (--html-dir) یا صفحه منفرد (--html)، پیش از سرریز شدن به یک صفحه فرزند (--html-dir) یا نادیده گرفتن ادامه بلوک diff (پیشفرض: 128، حتی با --no-default-limits نیز همچنان برقرار میماند).
محاسبه تفاوت (diff calculation):
- --new-file
- در نظر گرفتن فایلهای غایب به عنوان فایل خالی.
- --exclude GLOB_PATTERN
- مستثنی کردن فایلهایی که نام آنها (شامل هر بخشی از دایرکتوری) با GLOB_PATTERN مطابقت دارد. از این گزینه برای نادیده گرفتن فایلها بر اساس نامشان استفاده کنید.
- --exclude-command REGEX_PATTERN
- مستثنی کردن دستوراتی که با الگوی باقاعده REGEX_PATTERN مطابقت دارند. برای نمونه الگوهای '^readelf.*\s--debug-dump=info' و '^radare2.*' میتوانند زمان زیادی ببرند و تفاوتهای موجود در آنها احتمالاً تفاوتهای ثانویه ناشی از چیزی است که در جای دیگری نشان داده شده است. از این گزینه برای غیرفعال کردن دستوراتی که منابع زیادی مصرف میکنند استفاده کنید.
- --exclude-directory-metadata {auto,yes,no,recursive}
- مستثنی کردن متادیتای دایرکتوری. زمانی مفید است که فایلهایی را مقایسه میکنید که قرار نیست متادیتای سطح سیستمفایل آنها به سیستمهای دیگر توزیع شود. این مورد برای سازندگان بستههای اکثر توزیعها صادق است، اما برای خروجی دستوراتی مانند `make install` صدق نمیکند. متادیتای اعضای درون آرشیوها مستثنی نمیشوند مگر اینکه گزینه "recursive" انتخاب شود. از این گزینه برای نادیده گرفتن دسترسیها، برچسبهای زمانی، xattrها و غیره استفاده کنید. پیشفرض: 'no' در صورت مقایسه دو دایرکتوری، در غیر این صورت 'yes'. توجه داشته باشید که متادیتای "فایل" در واقع ویژگی دایرکتوری دربرگیرنده آن است و هنگام توزیع فایل میان سیستمها اهمیتی ندارد.
- --extended-filesystem-attributes, --no-extended-filesystem-attributes
- بررسی ویژگیهای گسترشیافته و بالقوه پرهزینه سیستمفایل مانند POSIX ACLها، ویژگیهای lsattr(1)/chattr(1) و غیره (پیشفرض: False).
- --diff-mask REGEX_PATTERN
- جایگزینی یا یکسانسازی زیررشتههایی که با عبارت باقاعده REGEX_PATTERN در رشتههای خروجی مطابقت دارند، پیش از اعمال diff. برای نمونه، برای فیلتر کردن شماره نسخه یا مسیر تغییریافته.
- --fuzzy-threshold FUZZY_THRESHOLD
- آستانه تطبیق فازی (مقدار 0 برای غیرفعالسازی، 110 پیشفرض است، 400 فازی بودن بالا است).
- --tool-prefix-binutils PREFIX
- پیشوند برای نام برنامههای binutils، مثلاً "aarch64-linux-gnu-" برای باینریهای معماری دیگر، یا "g" اگر روی سیستمی غیر از گنو هستید.
- --max-diff-input-lines LINES
- حداکثر تعداد خطوط ارسالشده به diff(1) (مقدار 0 برای غیرفعالسازی، پیشفرض: 4194304).
- --max-container-depth DEPTH
- حداکثر عمق برای بازگشت به درون کانتینرها و آرشیوها (به دلایل امنیتی نمیتوان آن را غیرفعال کرد، پیشفرض: 50).
- --timeout SECONDS
- تلاش برای اعمال مهلت زمانی کلی (timeout) به ثانیه. در صورت فعال بودن، diffoscope پس از گذشت X ثانیه از کل زمان اجرا، به درون زیرآرشیوهای بیشتر بازگشت نخواهد کرد (پیشفرض: بدون مهلت زمانی) [آزمایشی].
- --max-diff-block-lines-saved LINES
- حداکثر تعداد خطوط ذخیرهشده در هر بلوک diff. اکثر کاربران به این گزینه نیازی ندارند، مگر اینکه با کمبود حافظه مواجه شوید. این گزینه خروجی diff(1) را پیش از درج در گزارش کوتاه میکند و بر تمامی انواع خروجی از جمله --text و --json تأثیر میگذارد (مقدار 0 برای غیرفعالسازی، پیشفرض: 0).
- --use-dbgsym WHEN
- زمان استفاده خودکار از بستههای -dbgsym متناظر هنگام مقایسه فایلهای .deb. مقدار WHEN یکی از {no, auto, yes} است. پیشفرض: auto، به معنی بله اگر دو فایل .changes یا .buildinfo مشخص شده باشند، در غیر این صورت خیر.
- --force-details
- اجبار به ورود به عمق فرمتهای فایل حتی اگر فایلها دارای محتوای یکسان باشند؛ صرفاً برای اشکالزدایی diffoscope کاربرد دارد. پیشفرض: False.
دستورات اطلاعاتی (information commands):
- --help, -h
- نمایش این راهنما و خروج.
- --version
- نمایش شماره نسخه برنامه و خروج.
- --list-tools [DISTRO]
- نمایش ابزارهای خارجی مورد نیاز و خروج. DISTRO میتواند یکی از {arch, debian, FreeBSD, guix} باشد. در صورت تعیین، خروجی بستههایی از آن توزیع را فهرست میکند که این وابستگیها را برآورده میسازند.
- --list-debian-substvars
- فهرست کردن بستههای مورد نیاز برای دبیان در قالب 'substvar'.
- --list-missing-tools [DISTRO]
- نمایش ابزارهای خارجی ناموجود و خروج. DISTRO میتواند یکی از {arch, debian, FreeBSD, guix} باشد. در صورت تعیین، خروجی بستههایی از آن توزیع را فهرست میکند که این وابستگیها را برآورده میسازند.
قالبهای فایل پشتیبانیشده (file formats supported):
- فایلهای APK اندروید، ایمیجهای بوت اندروید، جدول منابع بستههای اندروید (ARSC)، فایلهای mobile provisioning مربوط به Apple Xcode، آرشیوهای ar(1)، آرشیوهای asar، توابع ASM، فایلهای پایگاه داده Berkeley DB، آرشیوهای bzip2، دستگاههای کاراکتری/بلوکی، پروفایلهای رنگی ColorSync (.icc)، ایمیجهای سیستمفایل Coreboot CBFS، آرشیوهای cpio، فایلهای .dex دالویک، فایلهای .buildinfo دبیان، فایلهای .changes دبیان، بستههای سورس دبیان (.dsc)، فایلهای بلاب Device Tree Compiler، دایرکتوریها، باینریهای ELF، سیستمفایلهای ext2/ext3/ext4/btrfs/fat، فایلهای eXtensible ARchive، ایمیجهای سیستمفایل، فایلهای بلاب Flattened Image Tree، فایلهای کش FreeDesktop Fontconfig، فایلهای FreePascal (.ppu)، کاتالوگهای پیام Gettext، فایلهای .hi زبان GHC Haskell، فایلهای تصویری GIF، مخازن Git، فایلهای پایگاه داده GNU R (.rdb)، فایلهای Rscript مربوط به GNU R (.rds)، صفحات گسترده Gnumeric، پایگاههای داده keybox مربوط به GPG، فایلهای فشرده Gzip، پایگاه داده Hierarchical Data Format، فایلهای HTML (.html)، ایمیجهای دیسک ISO 9660، فایلهای .class جاوا، ماژولهای .jmod جاوا، فایلهای JavaScript، تصاویر JPEG، فایلهای JSON، ایمیجهای هسته لینوکس، فایلهای بیتکد LLVM IR، سوکتهای محلی (دامنه یونیکس) و پایپهای نامگذاریشده (FIFOها)، فایلهای فشرده LZ4، فایلهای فشرده lzip، فایلهای فشرده LZMA، باینریهای macOS، فایلهای آیکون مایکروسافت ویندوز، فایلهای docx. مایکروسافت ورد، فایلهای 'Portable Executable' مونو، آرشیوهای ZIP بهینهشده برای موزیلا، متادیتای چندرسانهای، بستههای NuGet، فایلهای اینترفیس OCaml، فایلهای صوتی Ogg Vorbis، فایلهای odt. اپنآفیس، کلیدهای عمومی OpenSSH، آرشیوهای بسته OpenWRT (.ipk)، اسناد PDF، فایلهای PE32، امضاهای PGP، پیامهای رمزنگاریشده/امضاشده PGP، تصاویر PNG، اسناد PostScript، فایلهای استانداردهای رمزنگاری کلید عمومی (PKCS) (نسخه ۷)، فایلهای pyc. پایتون، آرشیوهای RPM، فایلهای آبجکت راست (.deflate)، فایلهای اینونتوری Sphinx، پایگاههای داده SQLite، سیستمفایلهای SquashFS، پیوندهای نمادین (symlinks)، آرشیوهای نوار (.tar)، فایلهای ضبط ترافیک tcpdump (.pcap)، فایلهای متنی، فایلهای فونت TrueType، فایلهای ایمیج قدیمی U-Boot، ایمیج UKI (.efi)، ماژولهای باینری WebAssembly، اسکیمای باینری XML (.xsb)، فایلهای XML، فایلهای XMLB، فایلهای فشرده XZ، آرشیوهای ZIP و فایلهای فشرده Zstandard.
صفحه اصلی diffoscope:
گزارش باگها و مشکلات (bugs/issues):
وضعیت خروج (EXIT STATUS)
وضعیت خروج در صورت یکسان بودن ورودیها 0، در صورت وجود تفاوت 1، و در صورت بروز اشکال یا خطا 2 است.
مثالهای خط فرمان (COMMAND-LINE EXAMPLES)
برای مقایسه دقیق و عمیق دو فایل و تولید گزارش HTML، دستوری مانند زیر را اجرا کنید:
$ diffoscope --html output.html build1.changes build2.changes
در صورتی که هیچ تفاوتی وجود نداشته باشد، diffoscope با وضعیت 0 و اگر تفاوتی باشد با 1 خارج میشود.
برای مشاهده تمامی گزینههای ممکن، دستور زیر را اجرا کنید:
$ diffoscope --help
اگر حافظه رم (RAM) کافی در اختیار دارید، میتوانید با اجرای دستوری مانند زیر کارایی را بهبود بخشید:
$ TMPDIR=/run/shm diffoscope very-big-input-0/ very-big-input-1/
به صورت پیشفرض این حالت مجاز به استفاده از نیمی از حافظه RAM است؛ برای تخصیص بیشتر، سطری شبیه به زیر را:
tmpfs /run/shm tmpfs size=80% 0 0
به فایل /etc/fstab خود اضافه کنید؛ برای جزئیات بیشتر به man mount مراجعه فرمایید.
وابستگیهای خارجی (EXTERNAL DEPENDENCIES)
برنامه diffoscope به پایتون ۳ (Python 3) و ماژولهای زیر که در PyPI موجود هستند نیاز دارد: libarchive-c https://pypi.python.org/pypi/libarchive-c, python-magic https://pypi.python.org/pypi/python-magic.
ابزارهای مقایسهگر گوناگون به وجود دستورات خارجی وابستهاند. برای دریافت فهرستی از آنها، لطفاً دستور زیر را اجرا کنید:
$ diffoscope --list-tools
مشارکتکنندگان (CONTRIBUTORS)
Lunar, Reiner Herrmann, Chris Lamb, Mattia Rizzolo, Ximin Luo, Helmut Grohne, Holger Levsen, Daniel Kahn Gillmor, Paul Gevers, Peter De Wachter, Yasushi SHOJI, Clemens Lang, Ed Maste, Joachim Breitner, Mike McQuaid. Baptiste Daroussin, Levente Polyak.
ارتباط و پشتیبانی (CONTACT)
روش پیشنهادی برای گزارش باگها درباره diffoscope و همچنین پیشنهاد اصلاحات و درخواست بهبود، ارسال گزارشها به سامانه پیگیری مشکلات (issue tracker) در نشانی زیر است:
برای راهنماییهای بیشتر، فایل CONTRIBUTING.rst را در این دایرکتوری مشاهده کنید.
عضویت در فهرست پستی کاربران و توسعهدهندگان: <https://lists.reproducible-builds.org/listinfo/diffoscope>
وبسایت diffoscope در نشانی <https://diffoscope.org> در دسترس است.
مجوز (LICENSE)
برنامه diffoscope یک نرمافزار آزاد است: شما میتوانید آن را تحت شرایط «پروانه عمومی همگانی گنو» (GNU General Public License) که توسط «بنیاد نرمافزارهای آزاد» منتشر شده است، چه نسخه ۳ پروانه و چه (به انتخاب خودتان) هر نسخه بالاتر دیگری، بازتوزیع کرده و/یا تغییر دهید.
برنامه diffoscope به این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت تلویحی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به متن «پروانه عمومی همگانی گنو» مراجعه کنید.
شما باید یک نسخه از پروانه عمومی همگانی گنو را به همراه diffoscope دریافت کرده باشید. در غیر این صورت به <https://www.gnu.org/licenses> مراجعه کنید.
همچنین ببینید (SEE ALSO)
| August 2026 | diffoscope 329 |