আমি কোনও কনফিগার ফাইল এডিট করার পরে কীভাবে মূল ইনস্টল করা সংস্করণে ফিরে যেতে পারি?


24

আমি কোনও ফাইলটিকে /etc/মূল-ইনস্টল করা ফর্মটিতে ফিরে যেতে চাই। ফাইলটি ইনস্টল হওয়ার পরে থেকে আমি সম্পাদনা করেছি। আমি এই কনফিগার ফাইলটি কীভাবে ফিরিয়ে আনব? এপিটি সম্পাদিত কনফিগার ফাইলগুলি ওভাররাইট না করার জন্য যথেষ্ট স্মার্ট , তাই আমি কীভাবে এটি বলব যে আমি এটি এটি করতে চাই ?

যুক্তির স্বার্থে, বলি যে আমি /etc/foo.confপ্যাকেজটি থেকে ফাইলটি ফিরিয়ে নিতে চাই foo


2
যারা মুছে ফেলা এবং পুনরায় ইনস্টল করার পরামর্শ দেন তাদের জন্য foo, যদি barনির্ভর করে fooএবং আমি অপসারণ করতে চাই না তবে barকী হবে?
রায়ান সি থম্পসন

উত্তর:


15

রায়ান থমসন প্রদত্ত উত্তরটি সঠিক পথে চলছিল। তবুও এটি কাজটি করতে সক্ষম হবে না (বিশদ কারণ নীচে দেওয়া হয়েছে)।

এর সঠিক (এবং সবচেয়ে সহজ) উপায়টি হচ্ছে ডিপি কেজি বিকল্পটি পাস করার -oসাথে সাথে aptআপনি dpkgপরিবর্তিত কনফিগার ফাইল বা মূল ফাইলগুলি ধরে রাখতে চান কিনা তা জিজ্ঞাসা করতে বাধ্য করা force কমান্ডটি এরকম হবে -

sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo

এটি আপনাকে একটি প্রশ্ন জিজ্ঞাসা করবে

Configuration file '/etc/foo/foo.conf'
 ==> Modified (by you or by a script) since installation.
     Version in package is the same as at last installation.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** foo.conf (Y/I/N/O/D/Z) [default=N] ? 

প্যাকেজ রক্ষণাবেক্ষণকারীর আসল কনফিগারেশন ফাইলটি ইনস্টল করতে আপনাকে Y বা I চাপতে হবে। এমনকি কী কী পরিবর্তন হয় তা দেখতে আপনি ডি চাপতে পারেন বা নিজেকে ঠিক করার জন্য জেড বিকল্পের সাহায্যে একটি রুট শেল শুরু করতে পারেন।

দ্রষ্টব্য: প্রতিস্থাপনের পরে, আপনি নিজের পরিবর্তিত ফাইলটি খুঁজে পাবেনat /etc/foo/foo.conf.dpkg-old


অন্যান্য বিকল্প কেন কাজ করবে না?

কারণ dpkg এ অন্যান্য অপশনগুলি ভাল কাজ করে না। প্যাকেজের কনফিগার ফাইলগুলির সাথে সম্পর্কিত বিকল্পগুলি হ'ল

  • --force-confmiss
  • --force-confnew
  • --force-confold
  • --force-confdef

--force-confmissপ্যাকেজ সংস্করণ পরিবর্তন না হলে কাজ করবে না। ম্যান-পৃষ্ঠা থেকে

যদি একটি কনফিলে পরিবর্তন করা হয়েছে এবং প্যাকেজের সংস্করণটি পরিবর্তিত হয়েছে, সর্বদা প্রম্পট না করেই নতুন সংস্করণ ইনস্টল করুন, যদি না --ফোর্স-কনফিডেফ নির্দিষ্ট না করা থাকে, এই ক্ষেত্রে ডিফল্ট ক্রিয়াটি অগ্রাধিকার দেওয়া হয়।

--force-confmissনিখোঁজ কনফিলেস নিয়ে কাজ করে। সংস্করণ পরিবর্তন না হলে এটিও ব্যর্থ হবে। ম্যান-পৃষ্ঠা উদ্ধৃতি

স্বীকার করুন: যদি কোনও কনফিলে অনুপস্থিত থাকে এবং প্যাকেজের সংস্করণ পরিবর্তিত হয়, সর্বদা বিনা অনুরোধে নিখোঁজ কনফিলটি ইনস্টল করুন। এটি বিপজ্জনক, কারণ এর অর্থ ফাইলটিতে করা পরিবর্তন (অপসারণ) সংরক্ষণ করা নয় ser

--force-confoldসংস্করণ পরিবর্তন করা হয় তবেই পরিবর্তিত সংস্করণ ধরে রাখতে পারবেন । একই প্যাকেজের জন্য, এটিও ব্যর্থ হবে। ম্যান-পৃষ্ঠা উদ্ধৃতি

কনফোল্ড: যদি কোনও কনফিল পরিবর্তন করা হয় এবং প্যাকেজের সংস্করণটি পরিবর্তিত হয়, সর্বদা বিনা অনুরোধে পুরানো সংস্করণটি রাখুন, যদি না --ফোর্স-কনফিডেফ নির্দিষ্ট না করা থাকে, তবে এই ক্ষেত্রে ডিফল্ট ক্রিয়াটি অগ্রাধিকার দেওয়া হয়।

--force-confdefএছাড়াও ব্যর্থ হবে কারণ ডিফল্ট ক্রিয়াটি পুরানো ফাইল ধরে রাখতে হয় (সাথে দেখানো বার্তাটি থেকে নির্দেশিত --force-confaskIt এটির রেখা রয়েছে (Y/I/N/O/D/Z) [default=N]যার মানে ধরে রাখা ডিফল্ট above উপরে দেখুন)। এবং যদি --force-confnewনির্দিষ্ট করা থাকে তবে সংস্করণ পরিবর্তন হয় না, এটিও কার্যকর হবে না। ম্যান-পৃষ্ঠা উদ্ধৃতি

কনফিডেফ: যদি কোনও কনফিল পরিবর্তন করা হয় এবং প্যাকেজের সংস্করণ পরিবর্তন হয় তবে সর্বদা প্রম্পট না করেই ডিফল্ট ক্রিয়াটি চয়ন করুন। যদি কোনও ডিফল্ট ক্রিয়া না হয় তবে এটি ব্যবহারকারীকে জিজ্ঞাসা করা বন্ধ করে দিবে যদি না - ফোর্স - কনফিউ বা --ফোর্স-কনফোল্ডও দেওয়া না হয়, তবে এই ক্ষেত্রে এটি চূড়ান্ত ক্রিয়া সিদ্ধান্ত নেওয়ার জন্য ব্যবহার করবে।

কেবলমাত্র --force-confaskকাজ করবে, কারণ সংস্করণটি সমান হলেও এটি আপনাকে স্পষ্টভাবে প্রশ্ন জিজ্ঞাসা করবে। ম্যান-পৃষ্ঠা উদ্ধৃতি

কনফাস্ক: যদি কোনও কনফিল পরিবর্তন করা থাকে তবে সর্বদা এটি প্যাকেজের সংস্করণে প্রতিস্থাপনের প্রস্তাব দেয়, প্যাকেজের সংস্করণটি পরিবর্তিত না হলেও (dpkg 1.15.8 থেকে)) যদি কোনো --force-confmiss , --force-confnew , --force-confold , অথবা --force-confdef এছাড়াও দেওয়া হয় যার ফলে চূড়ান্ত কর্ম সিদ্ধান্ত নিতে ব্যবহার করা হবে।

আশা করি এটি সাহায্য করবে।


আপনার উত্তরটি খুব ব্যাপক ছিল, ধন্যবাদ। "কার্যকরভাবে কার্যকরভাবে" প্রশ্নের উত্তর স্বয়ংক্রিয়ভাবে "y" দিয়ে দেওয়া কি সম্ভব --force-confnew? আমি চেষ্টা করেছি apt-get […] -y, কিন্তু কাজ হয়নি। (যদি এটি সম্ভব না হয় তবে দয়া করে এটির উত্তরও সম্পাদনা করুন))
টিম ল্যান্ডস্কেড্ট

@ টিমল্যান্ডশিড আপনি জিজ্ঞাসা করছেন না জিজ্ঞাসা না করে এটি ব্যবহার করা সম্ভব --force-confnewকিনা? আমি মনে করি এটি ডিফল্ট কেস, যার অর্থ এটি আপনার পরিবর্তনগুলি বজায় রাখবে। সবসময় প্রশ্ন জিজ্ঞাসা করে --force-confaskতোলে apt, অন্যথায়, আপনি যদি ইতিমধ্যে উত্তরটি জানেন তবে আপনি অন্যান্য বিকল্পগুলি ব্যবহার করবেন।
আনোয়ার

1
হা, আমি -o Dpkg::Options::=--force-confnewব্যর্থ চেষ্টা করেছি (আপনার উত্তর পূর্বাভাস হিসাবে) এবং চেষ্টা করার সময় ত্রুটি বার্তাটি পড়িনি -o Dpkg::Options::="--force-confask --force-confnew"। তবে, এর apt-get --reinstall -o Dpkg::Options::=--force-confask -o Dpkg::Options::=--force-confnew install $packageকনফিগারেশন ফাইলগুলির পরিবর্তনটি সঠিকভাবে ওভাররোট করুন $package। ধন্যবাদ!
টিম ল্যান্ডস্কিডে

12

যদি ক্ষতিটি ইতিমধ্যে হয়ে যায় তবে কনফিগারেশন ফাইলটির অফিসিয়াল সংস্করণটি ফিরে পাওয়ার কমান্ড লাইন উপায় way প্রথমত, প্যাকেজ ফাইল (হয় সঙ্গে ডাউনলোড apt-get --download-onlyনীচের হিসাবে, বা প্যাকেজ পাতা থেকে packages.ubuntu.com ), তারপর একটি অস্থায়ী অবস্থানে বিষয়বস্তু এক্সট্র্যাক্ট করুন। তারপরে আপনি ফাইলটি অনুলিপি করতে পারেন /etc। আসল অনুমতিগুলি সম্মান করার বিষয়টি নিশ্চিত করুন (এর বেশিরভাগ ফাইলগুলি /etcরুট এবং মোড 64৪৪ (যেমন শব্দ-পাঠযোগ্য এবং রুট-লিখনযোগ্য) এর মালিকানাধীন) তবে প্রতিটি ব্যতিক্রম একটি গুরুত্বপূর্ণ কারণে রয়েছে)

sudo apt-get --download-only --reinstall install foo
mkdir /tmp/foo
dpkg-deb -x /var/cache/apt/archives/foo_VERSION_ARCH.deb /tmp/foo

মনে রাখবেন, এই যেমন কনফিগারেশন ফাইল করে একটি প্যাকেজ থেকে নয়, প্রযোজ্য নয় /etc/fstabবা /etc/passwd। আপনি যদি এগুলি হারিয়ে ফেলেন তবে আপনি নিজেরাই। (বেশিরভাগই যাইহোক খুব সিস্টেম-নির্ভর।


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

ডিফল্টরূপে, উবুন্টুতে, ইত্যাদি কিপার বাজার ব্যবহার করে । আপনি যদি দার্কস, গিট বা বুধ পছন্দ করেন /etc/etckeeper/etckeeper.confতবে চলার আগে সেটিংস পরিবর্তন করুন etckeeper init

/etc/foo.confশেষ প্রতিশ্রুতিবদ্ধ সংস্করণে ফিরতে বাজার সহ :

cd /etc
sudo bzr revert foo.conf

আপনি যদি সময়ের সাথে আরও পিছনে যেতে চান sudo bzr log foo.confতবে ফাইলের ইতিহাস দেখতে ব্যবহার করুন এবং sudo bzr revert -r 42 foo.confযদি আপনি এটি স্থির revno: 42করতে চান তবে এটি পুনর্বিবেচনা করতে চান।


7

আপনি প্যাকেজটি প্যাকেজগুলি প্যাকেজগুলি ডাব্লুটিউ ডটকম থেকে ম্যানুয়ালি ডাউনলোড করতে পারেন , ফাইলটি বের করতে এবং এটির সাথে আপনার সংস্করণটি প্রতিস্থাপন করতে পারেন।

অথবা আপনি করতে পারেন:

sudo rm /etc/foo.conf # just for good measure
sudo apt-get --purge --reinstall install foo

দ্বিতীয়টি অনেক বেশি বর্বর বোধ করে। যদি এটি একাধিক ফাইল ব্যবহার করে তবে এটি অন্য কনফিগারেশনটিও মুছতে পারে। প্রথমটি আরও ক্লিক এবং প্রচেষ্টা তবে এটি আরও নিরাপদ বলে মনে হচ্ছে।

দ্বিতীয়টির জন্য, আপনি কেবল ফাইলটি মুছতে সক্ষম হতে পারেন এবং - পুনরায় ইনস্টল করে এটি প্রতিস্থাপন করতে পারে। যদি তা হয় তবে তা নিরাপদ হবে।


2
না, একটি কনফিগারেশন ফাইল মুছে ফেলা বৈধ পরিবর্তন হিসাবে বিবেচিত হয় এবং এটিপি দ্বারা সংরক্ষণ করা হয়।
রায়ান সি থম্পসন

অন্য ইনস্টল করা প্যাকেজগুলির উপর নির্ভর করে যদি কোনও প্যাকেজ শুদ্ধ করে পুনরায় ইনস্টল করা সম্ভব হয়?
রায়ান সি থমসন

@ রায়ানথম্পস হ্যাঁ, নির্ভরকারীদের apt-get --reinstall purge packageক্ষতি করবে না।
অলি

দুর্ভাগ্যক্রমে এটি কাজ করে না।
আনোয়ার

1

প্যাকেজের উপর নির্ভর করে আপনি একটি ডিফল্ট কনফিগারেশন ফাইল খুঁজে পেতে পারেন /usr/share/doc/foo/examples


0

সিনাপটিক ব্যবহার করুন (উবুন্টু টুইট আরও সুবিধাজনক তবে সিন্যাপটিক আরও সোজা এগিয়ে রয়েছে) এবং "সম্পূর্ণ প্যাকেজ অপসারণ করুন" নির্বাচন করুন। এটি সমস্ত কনফিগার ফাইল মুছে ফেলবে (আপনি এই ফাইলগুলির ব্যাকআপ নিতে চাইতে পারেন!)।

তারপরে পুনরায় ইনস্টল করুন। তুমি করেছ.

উবুন্টু টুইকের সাহায্যে আপনি ক্লিনআপ, পুনরায় তালিকাবদ্ধকরণ এবং কনফিগারেশন ব্যাকআপের আরও বেশি বিকল্প পাবেন। আপনি এটি একটি চেহারা দিতে চান। এটি সফ্টওয়্যারসেন্টারে রয়েছে।

পিএস: সিনাপটিক "শুদ্ধি" বিকল্পটিও ব্যবহার করে (যেমন ওলি দ্বারা উল্লিখিত ...) - আরও আরামদায়ক পরিচালনার জন্য একটি জিইউআই সহ।


আপনি যখন প্যাকেজটি আপনার হোম ডিরেক্টরিতে ফাইলগুলি সরিয়ে ফেলেন তখন তা মুছে ফেলবে? আমি এই একটি গুরুতর বাগ বিবেচনা করবে!
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

@ গিলস: ঠিক বলেছেন। আপনার হোম ডিরেক্টরি ভিতরে ব্যক্তিগত সেটিংস শুদ্ধ দ্বারা স্পর্শ করা হবে না। আমি উপরেরটি সম্পাদনা করে সংশোধন করেছি। sry
piedro

অন্যরা যদি এটির উপর নির্ভর করে তবে প্যাকেজ খালি করা কোনও বিকল্প হতে পারে না।
রায়ান সি থমসন

0

আমি অবশেষে উত্তরটি পেয়েছি যা আমি বছর কয়েক আগে অস্পষ্টভাবে মনে রেখেছিলাম:

dpkg --force-confnew --force-confmiss -i PACKAGE.deb

"কনফিনিউ" আর্গুমেন্ট dpkg কে প্যাকেজ-সরবরাহিত ফাইলগুলির সাথে পরিবর্তিত কনফিগার ফাইলগুলি প্রতিস্থাপন করতে বাধ্য করে এবং মুছে ফেলা হয়েছে এমন কনফিগারেশন ফাইলগুলির সাথে "স্বীকারোক্তি" একইভাবে কাজ করে।

এই চ্যাটলগ অনুসারে , আপনি নিম্নলিখিত পদ্ধতিতে অ্যাপটি-গেটের মাধ্যমে এই বিকল্পগুলিও ব্যবহার করতে পারেন:

apt-get -o DPkg::Options::="--force-confnew --force-confmiss" --reinstall install PACKAGE

যা আপনাকে নিজের থেকে ডেব ফাইলটি সন্ধান করার প্রয়োজন থেকে বাঁচায়।

স্পষ্টতই, এই বিকল্পগুলি বিপজ্জনক এবং অপব্যবহার করা হলে গুরুত্বপূর্ণ সিস্টেম কনফিগারেশন ফাইলগুলি উড়িয়ে দেওয়ার সম্ভাবনা রয়েছে।


সমস্যাটি --force-confnewহ'ল সংস্করণ পরিবর্তন হলে এটি কেবল নতুন কনফিগারেশন ফাইল ইনস্টল করবে। যদি আপনি একই সংস্করণটি পুনরায় ইনস্টল করছেন তবে এটি নতুন কনফিগারেশন ফাইলটি ইনস্টল করবে না কারণ আমি এটি স্পষ্টভাবে পরীক্ষা করেছি
আনোয়ার

আর --force-confmissশুধুমাত্র নতুন কনফিগ ফাইল ইনস্টল হবে সংস্করণ পরিবর্তিত হয় এবং কনফিগ অনুপস্থিত। ম্যান পেজে বর্ণিত হিসাবেconfmiss: If a conffile is missing and the version in the package did change, always install the missing conffile without prompting. This is dangerous, since it means not preserving a change (removing) made to the file.
আনোয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.