Title: πŸ” diff / patch β€” File Comparison Group: Files & Archives Icon: πŸ” Order: 4 ## Table of Contents - [diff β€” Compare Files](#-diff--compare-files) - [patch β€” Apply Changes](#-patch--apply-changes) - [Directory Comparison](#-directory-comparison--сравнСниС-ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²) - [Git-Style Diffs](#-git-style-diffs--diff-Π²-стилС-git) - [Advanced Usage](#-advanced-usage--ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅-использованиС) - [Real-World Examples](#-real-world-examples--ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹-ΠΈΠ·-ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ) --- # πŸ” diff β€” Compare Files ### Basic Comparison / Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ сравнСниС diff file1.txt file2.txt # Compare two files / Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° diff -q file1.txt file2.txt # Brief (quiet) mode / ΠšΡ€Π°Ρ‚ΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ diff -s file1.txt file2.txt # Report identical files / Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… diff -i file1.txt file2.txt # Ignore case / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСгистр diff -w file1.txt file2.txt # Ignore whitespace / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ diff -b file1.txt file2.txt # Ignore blank lines / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ пустыС строки ### Output Formats / Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° diff -u file1.txt file2.txt # Unified format (recommended) / Π£Π½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (рСкомСндуСтся) diff -c file1.txt file2.txt # Context format / ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ diff -y file1.txt file2.txt # Side-by-side / Π‘ΠΎΠΊ ΠΎ Π±ΠΎΠΊ diff -y -W 200 file1.txt file2.txt # Side-by-side wide / Π‘ΠΎΠΊ ΠΎ Π±ΠΎΠΊ ΡˆΠΈΡ€ΠΎΠΊΠΎ diff --normal file1.txt file2.txt # Normal format / ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ### Save to Patch File / Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» ΠΏΠ°Ρ‚Ρ‡Π° diff -u old.conf new.conf > change.patch # Create unified patch / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‡ diff -Naur old/ new/ > changes.patch # Recursive patch / РСкурсивный ΠΏΠ°Ρ‚Ρ‡ diff -u file1.txt file2.txt | tee change.patch # Save and display / Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ### Color Output / Π¦Π²Π΅Ρ‚Π½ΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄ diff --color=always file1.txt file2.txt # Colored diff / Π¦Π²Π΅Ρ‚Π½ΠΎΠΉ diff diff --color=auto file1.txt file2.txt # Auto color / Авто Ρ†Π²Π΅Ρ‚ --- # πŸ”§ patch β€” Apply Changes ### Basic Patching / Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ patch file.txt < change.patch # Apply patch / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ patch -p0 < change.patch # Apply at current level / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ patch -p1 < change.patch # Strip one directory / Π£Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ patch -p2 < change.patch # Strip two directories / Π£Π±Ρ€Π°Ρ‚ΡŒ Π΄Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ### Reverse & Test / ΠžΡ‚ΠΊΠ°Ρ‚ ΠΈ тСстированиС patch -R file.txt < change.patch # Reverse patch / ΠžΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ patch --dry-run -p1 < change.patch # Test without applying / ВСст Π±Π΅Π· примСнСния patch -b file.txt < change.patch # Backup original / РСзСрвная копия ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° patch -b -V numbered file.txt < change.patch # Numbered backups / НумСрованныС Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ ### Interactive & Verbose / Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ patch -i change.patch # Read from file / Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° patch -v -p1 < change.patch # Verbose output / ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ patch -f -p1 < change.patch # Force (skip prompts) / ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ подтвСрТдСния) ### Directory Patching / ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ cd /path/to/project # Change to project / ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ patch -p1 < /path/to/changes.patch # Apply patch / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ --- # πŸ“‚ Directory Comparison / Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ### Recursive Comparison / РСкурсивноС сравнСниС diff -r dir1/ dir2/ # Recursive diff / РСкурсивный diff diff -qr dir1/ dir2/ # Brief recursive / ΠšΡ€Π°Ρ‚ΠΊΠΈΠΉ рСкурсивный diff -ur dir1/ dir2/ # Unified recursive / Π£Π½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ рСкурсивный diff -Naur dir1/ dir2/ > changes.patch # Create patch / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ ### Exclude Patterns / Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ diff -r --exclude=".git" dir1/ dir2/ # Exclude .git / Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ .git diff -r --exclude="*.log" dir1/ dir2/ # Exclude log files / Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π»ΠΎΠ³ΠΎΠ² diff -r --exclude-from=exclude.txt dir1/ dir2/ # Exclude from file / Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ### Only Show Differences / Волько различия diff -qrl dir1/ dir2/ # List different files / Бписок Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ„Π°ΠΉΠ»ΠΎΠ² diff -qr dir1/ dir2/ | grep "^Only in" # Files only in one dir / Π€Π°ΠΉΠ»Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ diff -qr dir1/ dir2/ | grep "differ$" # Files that differ / Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ --- # πŸ”€ Git-Style Diffs / Diff Π² стилС Git ### Git Diff Format / Π€ΠΎΡ€ΠΌΠ°Ρ‚ Git diff diff -u --label="old version" --label="new version" file1.txt file2.txt # Custom labels / ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΊΠΈ git diff --no-index file1.txt file2.txt # Git-style diff / Diff Π² стилС Git git diff --no-index --color-words file1.txt file2.txt # Word diff / Diff ΠΏΠΎ словам ### Git Patch Creation / Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Git git format-patch -1 # Create patch from commit / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ ΠΈΠ· ΠΊΠΎΠΌΠΌΠΈΡ‚Π° git format-patch HEAD~3..HEAD # Patches from last 3 commits / ΠŸΠ°Ρ‚Ρ‡ΠΈ ΠΈΠ· послСдних 3 ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² git diff > changes.patch # Working tree diff / Diff Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° git diff --cached > staged.patch # Staged changes / Staged измСнСния ### Apply Git Patches / ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Git ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ git apply changes.patch # Apply patch / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ git apply --check changes.patch # Check if applicable / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡ‚ΡŒ git apply --reject changes.patch # Apply with reject files / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ с reject Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ git am < email.patch # Apply mail format / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠΎΡ‡Ρ‚Ρ‹ --- # πŸ”¬ Advanced Usage / ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ использованиС ### Ignore Specific Changes / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ измСнСния diff -I "^#" file1.txt file2.txt # Ignore lines starting with # / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с # diff -I ".*timestamp.*" file1.txt file2.txt # Ignore lines with pattern / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки с шаблоном diff -B file1.txt file2.txt # Ignore blank lines / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ пустыС строки diff -w -B file1.txt file2.txt # Ignore whitespace and blank / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ пустыС ### Context Lines / ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Ρ‹Π΅ строки diff -U 5 file1.txt file2.txt # 5 lines of context / 5 строк контСкста diff -U 0 file1.txt file2.txt # No context / Π‘Π΅Π· контСкста diff -C 3 file1.txt file2.txt # 3 lines context format / 3 строки контСкстного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ### Binary Files / Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ diff --brief file1.bin file2.bin # Binary comparison / Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ сравнСниС cmp file1.bin file2.bin # Byte-by-byte comparison / ΠŸΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ΅ сравнСниС cmp -l file1.bin file2.bin # List all differences / Бписок всСх Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ### Diff Statistics / Бтатистика diff diff -u file1.txt file2.txt | diffstat # Show statistics / ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ статистику diff -u file1.txt file2.txt | wc -l # Count diff lines / ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строки diff --- # 🌟 Real-World Examples / ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ### Compare Configuration Files / Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ```bash # Compare configs and create patch / Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ diff -u /etc/nginx/nginx.conf.backup /etc/nginx/nginx.conf > nginx.patch # Apply to another server / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ сСрвСрС scp nginx.patch @:/tmp/ ssh @ "cd /etc/nginx && sudo patch -p0 < /tmp/nginx.patch" ``` ### Sync Directory Changes / Бинхронизация ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ```bash # Create patch of all changes / Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ diff -Naur /var/www/old/ /var/www/new/ > website.patch # Apply to production / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ cd /var/www/html patch -p1 < website.patch # Verify / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ patch --dry-run -p1 < website.patch ``` ### Code Review Workflow / ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π΅Π²ΡŒΡŽ ΠΊΠΎΠ΄Π° ```bash # Generate review patch / Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‡ для Ρ€Π΅Π²ΡŒΡŽ diff -Naur src.old/ src.new/ > review.patch # Review changes / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ измСнСния less review.patch vim review.patch # Apply if approved / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ссли ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ cd src.new/ patch -R -p1 < review.patch # Reverse if needed / ΠžΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ Ссли Π½ΡƒΠΆΠ½ΠΎ ``` ### Migration Scripts / Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ```bash # Compare database schemas / Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ схСмы Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… diff -u schema.old.sql schema.new.sql > migration.patch # Generate SQL migration / Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ SQL ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ diff -u schema.old.sql schema.new.sql | grep "^+" | sed 's/^+//' > migration.sql ``` ### Security Audits / Аудит бСзопасности ```bash # Check for unauthorized changes / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ нСсанкционированныС измСнСния diff -qr /etc.backup/ /etc/ | tee /var/log/config-audit.log # Detailed diff of changed files / ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ diff ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² diff -ur /etc.backup/ /etc/ > /var/log/config-changes.patch ``` ### Automated Testing / АвтоматичСскоС тСстированиС ```bash # Compare test outputs / Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ тСстов ./test.sh > output.new diff -u output.expected output.new if [ $? -eq 0 ]; then echo "PASS"; else echo "FAIL"; fi # Regression testing / РСгрСссионноС тСстированиС diff -qr baselines/ results/ || echo "Regression detected" ``` ### Documentation Updates / ОбновлСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ```bash # Track doc changes / ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ измСнСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ diff -u README.md.old README.md > doc-updates.patch # Generate changelog from diff / Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ changelog ΠΈΠ· diff diff -u v1.0/ v2.0/ | grep "^+" | grep -v "^+++" > CHANGES.txt ``` ### Backup Verification / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ ```bash # Verify backup integrity / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ diff -qr /data/ /backup/data/ | tee backup-verification.log # Find files missing in backup / Найти Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ diff -qr /data/ /backup/data/ | grep "^Only in /data" ``` ### Container Image Layers / Π‘Π»ΠΎΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ```bash # Compare Dockerfiles / Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ Dockerfiles diff -u Dockerfile.old Dockerfile.new > docker.patch # Compare container filesystems / Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² docker export container1 | tar -x -C /tmp/c1 docker export container2 | tar -x -C /tmp/c2 diff -qr /tmp/c1 /tmp/c2 ``` ### Multi-Server Consistency / Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрами ```bash # Check config consistency / ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ for server in server1 server2 server3; do ssh $server "cat /etc/app/config.yml" > config.$server done diff -u config.server1 config.server2 diff -u config.server1 config.server3 ``` # πŸ’‘ Best Practices / Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ # Always use -u for unified format / ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -u для ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° # Test patches with --dry-run / ВСстируйтС ΠΏΠ°Ρ‚Ρ‡ΠΈ с --dry-run # Backup files before patching / Π”Π΅Π»Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ # Use -p1 for most patch applications / Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -p1 для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ # Exclude version control dirs (.git, .svn) / Π˜ΡΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ контроля вСрсий # Document patches with descriptive names / Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ‚Ρ‡ΠΈ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ # πŸ”§ Useful Options / ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ # -u: Unified format (most readable) / Π£Π½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ) # -r: Recursive / РСкурсивно # -N: Treat absent files as empty / Π Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΊ пустыС # -a: Treat all files as text / Π Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ всС ΠΊΠ°ΠΊ тСкст # -q: Brief output / ΠšΡ€Π°Ρ‚ΠΊΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ # -i: Ignore case / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСгистр # -w: Ignore whitespace / Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ # πŸ“‹ Patch Levels / Π£Ρ€ΠΎΠ²Π½ΠΈ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ # -p0: Apply at current directory / ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ # -p1: Strip top-level directory / Π£Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ # -p2: Strip two levels / Π£Π±Ρ€Π°Ρ‚ΡŒ Π΄Π²Π° уровня # Common: Use -p1 for git patches / ΠžΠ±Ρ‹Ρ‡Π½ΠΎ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ -p1 для git ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ # πŸ” Alternative Tools / ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ инструмСнты # vimdiff: Visual diff editor / Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ diff Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ # meld: GUI diff tool / GUI инструмСнт diff # kompare: KDE diff tool / KDE инструмСнт diff # colordiff: Colored diff / Π¦Π²Π΅Ρ‚Π½ΠΎΠΉ diff