অ্যাপ্লিকেশন এবং বর্তমান ফাইলগুলির সাথে ইনস্টল করা মূল ফাইলগুলির মধ্যে বিভিন্ন পরিবর্তন পান


19

আমি php5-fpmপ্যাকেজ ব্যবহার করে ইনস্টল করেছি apt; তারপরে আমি পিএইচপি কনফিগারেশন ফাইলগুলিতে কিছু পরিবর্তন করেছি।

এখন আমি আসল ফাইল সংস্করণগুলির মধ্যে পার্থক্য পেতে পারি (প্যাকেজটি ইনস্টল করা আছে) এবং বর্তমান সংস্করণগুলি (আমার দ্বারা সংশোধিত)। এটা কিভাবে করতে হবে?


আপনি ঠিক কী জানতে চান তা বোঝা শক্ত। এমনকি আপনার পরিস্থিতি কী তাও পরিষ্কার নয়।
হউক লেগেছে

আমি apt আপনি বলতে পারেন যে জানি না, কিন্তু কি আমি সুপারিশ করব করা হয় /etcপুনর্বিবেচনা নিয়ন্ত্রণ (আমি যে জন্য তত্পর ব্যবহার করুন) এবং অধীন addএবং commitনিয়মিত। এইভাবে আপনি মূল ফাইলগুলিতে ফিরে যেতে পারেন বা মধ্যবর্তী পরিবর্তিত রাজ্যে ফিরে যেতে hg diffপারেন এবং এর সাহায্যে আপনি পরিবর্তনগুলি দেখতে পারেন। আপনি যদি aptএটির কোনও উপায় না খুঁজে পান তবে আপনার পরিবর্তিত ফাইলগুলি ব্যাকআপ করুন, প্যাক্যাগ (এস) পুনরায় ইনস্টল করুন, কনফিগার ফাইলগুলিকে পুনর্বিবেচনা নিয়ন্ত্রণে আনুন এবং আপনার পরিবর্তনগুলি অনুলিপি করুন। এর পরে আপনি একটি ভিন্ন করতে পারেন।
অ্যান্থন

@ হক্কেটিং আমি ইংরেজিতে ভাল নই, আমি দুঃখিত
mdesantis


1
পুনঃটুইট করুন আমি ভিন্নতা চাই
mdesantis

উত্তর:


12

এরকম কিছু চেষ্টা করুন:

# exit on failure
set -e

package=php5-fpm
mkdir $package
cd $package

# you could also get the file from a package mirror if you have
#  an older version of apt-get that doesn't support 'download' 
#  or if you would like more control over what package version
#  you are downloading.
# (e.g. http://archive.ubuntu.com/ubuntu/pool/main/)
apt-get download $package

# deb package files are ar archives
ar vx ${package}*.deb
# containing some compressed tar archives
tar xzf data.tar.gz
# now you have the files

# you can get diffs for all of the files in etc if you would like
find etc -type f |
while read file ; do
    diff $file /$file
done

অন্যদের পরামর্শ অনুসারে, আপনার কনফিগারেশন ফাইলগুলি অবশ্যই সংশোধন নিয়ন্ত্রণের অধীনে রাখুন। এইভাবে, আপনি ঠিক কী পরিবর্তন করেছেন এবং কখন এটি পরিবর্তন করেছেন তা দেখতে পাবেন।


ধন্যবাদ! আমাকে কিছুটা কোডটি সংশোধন করতে হয়েছিল: gist.github.com/ProGNOMmers/5404609 আপনি যদি ওয়ার্কিং কোড দিয়ে আপনার প্রশ্ন আপডেট করেন তবে আমি তা গ্রহণ করতে পেরে খুশি
হব

আমি খুশি যে আমার সমাধান আপনার পক্ষে কাজ করেছে। আমি আপনার কোডগুলিতে আপনার পরিবর্তনগুলি এবং সংশোধনগুলি অন্তর্ভুক্ত করেছি।

2
tar xzf data.tar.gztar xf data.tar.xzসাম্প্রতিক উবুন্টুর জন্য হওয়া উচিত
জর্নার্কাস

3
আপনি ব্যবহার করতে পারে dpkg-deb -x ${package}_*.deb .পরিবর্তে ব্যবহার করার arএবং tar। এছাড়াও apt-get download $(dpkg-query -W -f='${binary:Package}=${Version}' $package)আপনি এটি ইনস্টল করা সংস্করণটি সর্বশেষের পরিবর্তে গ্রহণ করেছেন তা নিশ্চিত করবে, উদাহরণস্বরূপ, আপনি যদি আপগ্রেড করার ঠিক আগে এটি করছেন।
pix

আমি একটি ত্রুটি স্থির করেছিলাম যেখানে কোনও ডাটা.আটার.ডিজেজ নেই তবে data.tar.xz github.com/rubo77/apt-etc-diff - এছাড়াও স্ক্রিপ্টটি কিছুটা বাড়িয়েছে
রুব 77

8

ইত্যাদি ডিরেক্টরি

আপনার /etcডিরেক্টরিতে পরিবর্তনগুলি ট্র্যাক করার জন্য আপনি @ অ্যান্টন যেমন ডিরেক্টরিটি নিয়ন্ত্রণ করতে চান তেমন গিট, সাবভার্সন, মুরারি ইত্যাদি ব্যবহারের পরামর্শ ও ব্যবহার করতে পারেন। এছাড়াও আপনি যেমন একটি হাতিয়ার ব্যবহার করতে পারেন etckeeper । সেখানে একটি টিউটোরিয়াল এর এখানে সেইসাথে এখানে

এন্ডকিপার হ'ল গিট, পার্চিয়াল, বাজার বা ডারাক্স ভাণ্ডারে সংরক্ষণ করার জন্য সরঞ্জামগুলির সংকলন। প্যাকেজ আপগ্রেড করার সময় / ইত্যাদিতে স্বয়ংক্রিয়ভাবে পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করতে এটি উপযুক্ত into এটি ফাইলের মেটাডেটা ট্র্যাক করে যা গিটটি সাধারণত সমর্থন করে না, তবে এটি / ইত্যাদির জন্য যেমন এর অনুমতিগুলির মতো গুরুত্বপূর্ণ /etc/shadow। এটি বেশ মডুলার এবং কনফিগারযোগ্য, আপনি যদি সংস্করণ নিয়ন্ত্রণের সাথে কাজ করার বেসিকগুলি বুঝতে পারেন তবে এটি ব্যবহার করা সহজ।

প্যাকেজ ফাইল

আমার জ্ঞানের aptকাছে ডিস্কে বনাম ফাইলগুলিতে যাচাই করার উপায় নেই যা প্রকৃত ফাইল .deb। না হয় না dpkg, যে সরঞ্জামটি aptআসলে ফাইলগুলির পরিচালনা করতে ব্যবহার করে।

তবে আপনি কোনও সরঞ্জাম ব্যবহার করতে পারেন যেমন debsumsআপনি ইনস্টল করা কয়েকটি ফাইলের তুলনা করতে, এটি কেবলমাত্র তাদের .debসিস্টেমে ডিস্কের মধ্যে থাকা ফাইল বনাম যা তাদের চেকসাম (এমডি 5সাম) দেখায় ।

এই দেখুন serverfault প্রশ্ন সম্পর্কে আরো বিস্তারিত জানার জন্য debsumএবং dpkgchecksumming, সেইসাথে এই askubuntu প্রশ্ন

debsum উদাহরণ

% debsums openssh-server
/usr/lib/openssh/sftp-server                                                  OK
/usr/sbin/sshd                                                                OK
/usr/share/lintian/overrides/openssh-server                                   OK
/usr/share/man/man5/sshd_config.5.gz                                          OK
/usr/share/man/man8/sshd.8.gz                                                 OK
/usr/share/man/man8/sftp-server.8.gz                                          OK

আপনাকে অনেক ধন্যবাদ! আমি /etcপুনর্বিবেচনা নিয়ন্ত্রণে রাখার অনুশীলন সম্পর্কে জানতাম না এবং etckeeperএটি পরিচালনা করার জন্য সঠিক সমাধান বলে মনে করি; আমি এটি গ্রহণ করব
mdesantis

2
নোট করুন যে ওপি চালানো দরকার debsums -a, অন্যথায় কনফিগারেশন ফাইলগুলি চেক থেকে বাদ দেওয়া হবে।
দিমিত্রি গ্রিগরিয়েভ

1
@ দিমিত্রিগ্রিরিভ debums -ceকোন (কনফিগারেশন) ফাইলগুলি দেখতে হবে তা সন্ধানের জন্য উপযুক্ত।
0xC0000022L

6

ডান দেবিয়ান প্যাকেজ থেকে আসল ফাইলটি স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করতে এবং বর্তমান ফাইলটি এর বিপরীতে আলাদা করতে আমি নীচের সহজ স্ক্রিপ্টটি লিখেছিলাম: https://a3nm.net/git/mybin/tree/debdiffconf

এটি নিম্নলিখিত হিসাবে ব্যবহার করুন: debdiffconf FILE

#!/bin/bash

# Usage: debdiffconf.sh FILE
# Produce on stdout diff of FILE against the first installed Debian package
# found that provides it.
# Returns the exit code of diff if everything worked, 3 or 4 otherwise.

# /programming//a/4785518
command -v apt >/dev/null 2>&1 || {
  echo "apt not found, this is probably not a Debian system. Aborting." >&2;
  exit 4; }
command -v apt-file >/dev/null 2>&1 || {
  echo "Please install apt-file: sudo apt install apt-file. Aborting." >&2;
  exit 4; }
command -v realpath >/dev/null 2>&1 || {
  echo "Please install realpath: sudo apt install realpath. Aborting." >&2;
  exit 4; }

FILE=$(realpath -m "$1")
while read PACKAGE
do
  # verify from first installed package
  if dpkg-query -W --showformat='${Status}\n' | grep installed > /dev/null
  then
    DIR=$(mktemp -d)
    cd "$DIR"
    echo "Trying $PACKAGE..." >&2
    apt download "$PACKAGE" >&2
    # downloaded archive is the only file present...
    ARCHIVE=$(ls)
    mkdir contents
    # extract entire archive
    dpkg-deb -x "$ARCHIVE" contents/ >&2
    if [ -f "contents$FILE" ]
    then
      # package contained required file
      diff "contents$FILE" "$FILE"
      RET=$?
      # cleanup
      cd
      rm -Rf "$DIR"
      # exit entire script as this is the main shell
      # with the return code from diff
      exit $RET
    else
      # cleanup
      cd
      rm -Rf "$DIR"
    fi
  fi
done < <(apt-file -l search "$FILE")
# if we are here, it means we have found no suitable package
echo "Could not find original package for $FILE" >&2
exit 3

আপনার স্ক্রিপ্ট এছাড়াও realpathপ্যাকেজ ইনস্টল করা প্রয়োজন ।
এমএক্সএক্স

@ এমএক্সএক্স: ধন্যবাদ, এই প্যাকেজটির জন্য একটি চেক যোগ করার পরে, যদিও ডিবিয়ান জেসি দিয়ে শুরু করে মনে হয় যে কোর্টিলগুলি একটি 'রিয়েলপ্যাথ' কমান্ড সরবরাহ করছে।
a3nm

উবুন্টুতে এটি নিখোঁজ ছিল।
এমএক্সএক্স


1
দুর্ভাগ্যক্রমে, এটি কেবল প্যাকেজগুলির জন্য কাজ করে যা একটি সামগ্রী ফাইল সহ সংগ্রহস্থল থেকে আসে। অন্যথায়, দুর্দান্ত স্ক্রিপ্ট!
মার্টিজন পিটারস

0

আপনি যদি আসল এবং ইনস্টল করা php.iniফাইলের মধ্যে পার্থক্য দেখতে চান তবে ব্যবহার করুন

diff -W COLUMNS --suppress-common-lines -y /usr/share/php5/php.ini-development /etc/php5/apache2/php.ini -W $COLUMNS

আপনি যদি মন্তব্য পাতাগুলি সম্পর্কে পাইপ না করেন তবে এটি পাইপ করুন

| egrep -v '^;.*<$|\s*>.;.*|;.*\|.;'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.