DIFFOSCOPE(1) User Commands DIFFOSCOPE(1)

diffoscope - مقایسه عمیق و موشکافانه فایل‌ها، آرشیوها و دایرکتوری‌ها

diffoscope --help
diffoscope [OPTIONS] [--json output_diff] path1 path2
diffoscope [OPTIONS] diff
diffoscope [OPTIONS] < diff

""

دستور diffoscope تلاش می‌کند تا ریشه و علت اصلی تفاوت‌های میان فایل‌ها یا دایرکتوری‌ها را بیابد. این ابزار به صورت بازگشتی انواع گوناگون آرشیوها را باز کرده و فرمت‌های باینری مختلف را به ساختاری خواناتر برای انسان تبدیل می‌کند تا بتوان آن‌ها را مقایسه کرد. این برنامه می‌تواند دو فایل فشرده tar، ایمیج‌های ISO یا اسناد PDF را به آسانی مقایسه کند.

می‌توان از طریق کدهای خروج برای آن اسکریپت‌نویسی کرد و گزارشی شامل تفاوت‌های شناسایی‌شده تولید نمود. این گزارش می‌تواند متنی یا به صورت HTML باشد. هنگامی که هیچ نوع گزارشی انتخاب نشده باشد، diffoscope به صورت پیش‌فرض یک گزارش متنی در خروجی استاندارد می‌نویسد.

پروژه diffoscope در ابتدا توسط پروژه دبیان "ساخت‌های تکرارپذیر" (reproducible builds) آغاز شد و اکنون به عنوان بخشی از ابتکار عمل (گسترده‌تر) ساخت‌های تکرارپذیر توسعه می‌یابد https://reproducible-builds.org. هدف این ابزار آن است که بتوان به سرعت دریافت چرا دو ساخت متفاوت از یک بسته، خروجی‌های گوناگونی تولید می‌کنند. diffoscope پیش‌تر با نام debbindiff شناخته می‌شد.

برای شروع به بخش مثال‌های خط فرمان (COMMAND-LINE EXAMPLES) در ادامه مراجعه کنید، همچنین توضیحات دقیق‌تر درباره تمامی گزینه‌های خط فرمان ارائه شده است. همین اطلاعات در مسیر /usr/share/doc/diffoscope/README.rst یا موارد مشابه نیز در دسترس است.

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

نمایش پیام‌های اشکال‌زدایی.
باز کردن دیباگر pdb پایتون در صورت بروز کرش یا خطا.
ارسال وضعیت ماشین‌خوان به توصیف‌کننده فایل FD.
نمایش نوار پیشرفت تقریبی. پیش‌فرض: yes اگر stdin یک ترمینال (tty) باشد، در غیر این صورت no.
غیرفعال کردن اکثر محدودیت‌های پیش‌فرض خروجی و محدودیت‌های محاسبه تفاوت (diff).
بارگذاری یک diff موجود از فایل. برای خواندن diff مربوط به diffoscope از ورودی استاندارد (stdin)، مقدار "-" را مشخص کنید.

نوشتن خروجی متن ساده در فایل داده‌شده (برای stdout از - استفاده کنید).
زمان نمایش خروجی diff رنگی. WHEN یکی از مقادیر {never, auto, always} است. پیش‌فرض: auto، به این معنی که اگر خروجی یک ترمینال باشد بله، در غیر این صورت خیر.
در صورتی که هیچ تفاوتی وجود نداشت، برای هر نوع خروجی مشخص‌شده یک diff خالی ایجاد شود. در خروجی --text، یک فایل خالی نوشته می‌شود.
نوشتن گزارش HTML در فایل داده‌شده (برای stdout از - استفاده کنید).
نوشتن گزارش HTML چندفایلی در دایرکتوری داده‌شده.
پیوند دادن به یک CSS اضافی برای گزارش HTML.
پیوند URL به jQuery، برای خروجی --html و --html-dir. اگر این یک URL نسبی ناموجود باشد، diffoscope یک پیوند نمادین (symlink) به نسخه نصب‌شده در سیستم ایجاد می‌کند (مسیرهای جستجو: /usr/share/javascript/jquery/jquery.js). در صورت عدم تعیین، خروجی --html از جاوااسکریپت استفاده نخواهد کرد، اما خروجی --html-dir در صورت یافتن استفاده می‌کند؛ برای غیرفعال کردن جاوااسکریپت در تمام خروجی‌ها، مقدار "disable" را بدهید.
نوشتن خروجی متنی JSON در فایل داده‌شده (برای stdout از - استفاده کنید).
نوشتن خروجی متنی Markdown در فایل داده‌شده (برای stdout از - استفاده کنید).
نوشتن خروجی متنی RsT در فایل داده‌شده (برای stdout از - استفاده کنید).
مقایسه تفاوت‌ها به صورت دانه‌به‌دانه با استفاده از دستور خارجی مشخص‌شده، مشابه با git-difftool(1).
نوشتن اطلاعات پروفایل‌سازی کارایی در فایل داده‌شده (برای stdout از - استفاده کنید).

تعداد خطوط سیاق و زمینه diff یکپارچه (unified diff) برای نمایش (پیش‌فرض: 7).
حداکثر بایت‌های نوشته‌شده در گزارش --text (مقدار 0 برای غیرفعال کردن، پیش‌فرض: 0).
حداکثر بایت‌های گزارش در یک قالب داده‌شده، در تمامی صفحات آن. توجه داشته باشید که برخی فرمت‌ها مانند --html ممکن است با محدودیت‌های حتی کوچک‌تری نظیر --max-page-size محدود شوند (مقدار 0 برای غیرفعال کردن، پیش‌فرض: 41943040).
حداکثر تعداد خطوط خروجی در هر بلوک unified-diff، در تمامی صفحات (مقدار 0 برای غیرفعال کردن، پیش‌فرض: 1024).
حداکثر بایت‌های صفحه سطح بالا (--html-dir) یا صفحه منفرد (--html) (پیش‌فرض: 41943040، حتی با --no-default-limits نیز همچنان برقرار می‌ماند).
حداکثر تعداد خطوط خروجی در هر بلوک unified-diff در صفحه سطح بالا (--html-dir) یا صفحه منفرد (--html)، پیش از سرریز شدن به یک صفحه فرزند (--html-dir) یا نادیده گرفتن ادامه بلوک diff (پیش‌فرض: 128، حتی با --no-default-limits نیز همچنان برقرار می‌ماند).

در نظر گرفتن فایل‌های غایب به عنوان فایل خالی.
مستثنی کردن فایل‌هایی که نام آن‌ها (شامل هر بخشی از دایرکتوری) با GLOB_PATTERN مطابقت دارد. از این گزینه برای نادیده گرفتن فایل‌ها بر اساس نامشان استفاده کنید.
مستثنی کردن دستوراتی که با الگوی باقاعده REGEX_PATTERN مطابقت دارند. برای نمونه الگوهای '^readelf.*\s--debug-dump=info' و '^radare2.*' می‌توانند زمان زیادی ببرند و تفاوت‌های موجود در آن‌ها احتمالاً تفاوت‌های ثانویه ناشی از چیزی است که در جای دیگری نشان داده شده است. از این گزینه برای غیرفعال کردن دستوراتی که منابع زیادی مصرف می‌کنند استفاده کنید.
مستثنی کردن متادیتای دایرکتوری. زمانی مفید است که فایل‌هایی را مقایسه می‌کنید که قرار نیست متادیتای سطح سیستم‌فایل آن‌ها به سیستم‌های دیگر توزیع شود. این مورد برای سازندگان بسته‌های اکثر توزیع‌ها صادق است، اما برای خروجی دستوراتی مانند `make install` صدق نمی‌کند. متادیتای اعضای درون آرشیوها مستثنی نمی‌شوند مگر اینکه گزینه "recursive" انتخاب شود. از این گزینه برای نادیده گرفتن دسترسی‌ها، برچسب‌های زمانی، xattrها و غیره استفاده کنید. پیش‌فرض: 'no' در صورت مقایسه دو دایرکتوری، در غیر این صورت 'yes'. توجه داشته باشید که متادیتای "فایل" در واقع ویژگی دایرکتوری دربرگیرنده آن است و هنگام توزیع فایل میان سیستم‌ها اهمیتی ندارد.
بررسی ویژگی‌های گسترش‌یافته و بالقوه پرهزینه سیستم‌فایل مانند POSIX ACLها، ویژگی‌های lsattr(1)/chattr(1) و غیره (پیش‌فرض: False).
جایگزینی یا یکسان‌سازی زیررشته‌هایی که با عبارت باقاعده REGEX_PATTERN در رشته‌های خروجی مطابقت دارند، پیش از اعمال diff. برای نمونه، برای فیلتر کردن شماره نسخه یا مسیر تغییریافته.
آستانه تطبیق فازی (مقدار 0 برای غیرفعال‌سازی، 110 پیش‌فرض است، 400 فازی بودن بالا است).
پیشوند برای نام برنامه‌های binutils، مثلاً "aarch64-linux-gnu-" برای باینری‌های معماری دیگر، یا "g" اگر روی سیستمی غیر از گنو هستید.
حداکثر تعداد خطوط ارسال‌شده به diff(1) (مقدار 0 برای غیرفعال‌سازی، پیش‌فرض: 4194304).
حداکثر عمق برای بازگشت به درون کانتینرها و آرشیوها (به دلایل امنیتی نمی‌توان آن را غیرفعال کرد، پیش‌فرض: 50).
تلاش برای اعمال مهلت زمانی کلی (timeout) به ثانیه. در صورت فعال بودن، diffoscope پس از گذشت X ثانیه از کل زمان اجرا، به درون زیرآرشیوهای بیشتر بازگشت نخواهد کرد (پیش‌فرض: بدون مهلت زمانی) [آزمایشی].
حداکثر تعداد خطوط ذخیره‌شده در هر بلوک diff. اکثر کاربران به این گزینه نیازی ندارند، مگر اینکه با کمبود حافظه مواجه شوید. این گزینه خروجی diff(1) را پیش از درج در گزارش کوتاه می‌کند و بر تمامی انواع خروجی از جمله --text و --json تأثیر می‌گذارد (مقدار 0 برای غیرفعال‌سازی، پیش‌فرض: 0).
زمان استفاده خودکار از بسته‌های -dbgsym متناظر هنگام مقایسه فایل‌های ‎.deb. مقدار WHEN یکی از {no, auto, yes} است. پیش‌فرض: auto، به معنی بله اگر دو فایل ‎.changes یا ‎.buildinfo مشخص شده باشند، در غیر این صورت خیر.
اجبار به ورود به عمق فرمت‌های فایل حتی اگر فایل‌ها دارای محتوای یکسان باشند؛ صرفاً برای اشکال‌زدایی diffoscope کاربرد دارد. پیش‌فرض: False.

نمایش این راهنما و خروج.
نمایش شماره نسخه برنامه و خروج.
نمایش ابزارهای خارجی مورد نیاز و خروج. DISTRO می‌تواند یکی از {arch, debian, FreeBSD, guix} باشد. در صورت تعیین، خروجی بسته‌هایی از آن توزیع را فهرست می‌کند که این وابستگی‌ها را برآورده می‌سازند.
فهرست کردن بسته‌های مورد نیاز برای دبیان در قالب 'substvar'.
نمایش ابزارهای خارجی ناموجود و خروج. DISTRO می‌تواند یکی از {arch, debian, FreeBSD, guix} باشد. در صورت تعیین، خروجی بسته‌هایی از آن توزیع را فهرست می‌کند که این وابستگی‌ها را برآورده می‌سازند.

فایل‌های 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.

https://diffoscope.org

https://salsa.debian.org/reproducible-builds/diffoscope/issues

وضعیت خروج در صورت یکسان بودن ورودی‌ها 0، در صورت وجود تفاوت 1، و در صورت بروز اشکال یا خطا 2 است.

برای مقایسه دقیق و عمیق دو فایل و تولید گزارش 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 مراجعه فرمایید.

برنامه 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

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.

روش پیشنهادی برای گزارش باگ‌ها درباره diffoscope و همچنین پیشنهاد اصلاحات و درخواست بهبود، ارسال گزارش‌ها به سامانه پیگیری مشکلات (issue tracker) در نشانی زیر است:

برای راهنمایی‌های بیشتر، فایل CONTRIBUTING.rst را در این دایرکتوری مشاهده کنید.

عضویت در فهرست پستی کاربران و توسعه‌دهندگان: <https://lists.reproducible-builds.org/listinfo/diffoscope>

وب‌سایت diffoscope در نشانی <https://diffoscope.org> در دسترس است.

برنامه diffoscope یک نرم‌افزار آزاد است: شما می‌توانید آن را تحت شرایط «پروانه عمومی همگانی گنو» (GNU General Public License) که توسط «بنیاد نرم‌افزارهای آزاد» منتشر شده است، چه نسخه ۳ پروانه و چه (به انتخاب خودتان) هر نسخه بالاتر دیگری، بازتوزیع کرده و/یا تغییر دهید.

برنامه diffoscope به این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت تلویحی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به متن «پروانه عمومی همگانی گنو» مراجعه کنید.

شما باید یک نسخه از پروانه عمومی همگانی گنو را به همراه diffoscope دریافت کرده باشید. در غیر این صورت به <https://www.gnu.org/licenses> مراجعه کنید.

August 2026 diffoscope 329