/ Var এর অধীনে সমস্ত ফাইলের ডিফল্ট গ্রুপ / ব্যবহারকারীর মালিকানা পুনরুদ্ধার করবেন কীভাবে?


13

আমি ঘটনাক্রমে /varমালিক / গোষ্ঠীটিকে আমার ইউজারনেমে পরিবর্তন করেছি এবং তারপরে এটি আবার রুটে বদলেছি, তবে সমস্ত /varফোল্ডারের মালিকই মূল নয়, তাই কি আবার কোনও ফাইল / ফোল্ডারগুলির মালিক / দলকে ডিফল্ট অবস্থায় পরিবর্তন করতে হবে? অথবা কমপক্ষে প্যাকেজগুলির দ্বারা তৈরি হওয়া ফাইল / ফোল্ডারগুলি?


2
সম্পাদনা করা হয়েছে কারণ আপনার সাধারণ প্রশ্নটি আদেশটি কীভাবে ফিরে যাবে তারchown সঠিক নকল ছিল ? এবং বন্ধ হয়ে যেত।
jw013

মনে হচ্ছে মত এই সমাধানের জন্য কিছু উপায় আছে এই এক না কিন্তু প্রথমেই / var এবং না শুধু RPM ভিত্তিক ডিস্ট্রিবিউশন জন্য।
sepehr

আপনি কোন ডিস্ট্রো চালাচ্ছেন?
ডার্বোবার্ট

@derobert ডেবিয়ান ওরফে হুইজি পরীক্ষা
sepehr

উত্তর:


6

উপরের উত্তরের একটির অনুরূপ, আপনার যদি স্থানীয় ডিরেক্টরিতে "var" নামের সঠিক অনুমতি সহ ডিরেক্টরিটির একটি অনুলিপি থাকে তবে আপনি / var ডিরেক্টরিতে অনুমতি পুনরুদ্ধার করতে নিম্নলিখিত দুটি কমান্ড ব্যবহার করতে পারেন।

sudo find var -exec chown --reference="{}" "/{}" \;
sudo find var -exec chmod --reference="{}" "/{}" \;

10

সবচেয়ে সহজ (এবং সম্ভবত সবচেয়ে সঠিক) উত্তরটি "আপনি পারবেন না", তবে আপনি যদি চেষ্টা করতে চান তবে এখানে একটি বাশ স্ক্রিপ্ট রয়েছে যা .deb প্যাকেজভুক্ত / var এর অধীন ফাইলগুলির অনুমতিগুলি ঠিক করবে।

মন্তব্য:

  • এটি কোনও প্যাকেজের অন্তর্ভুক্ত নয় এমন ফাইলগুলির পার্সম ঠিক করবে না।
  • এটি সেই ফাইলগুলির জন্য পার্মস ঠিক করে না যেখানে প্যাকেজটি অ্যাপটি-গেটের মাধ্যমে ডাউনলোডের জন্য আর উপলব্ধ নেই - যেমন উত্তরাধিকার বা তৃতীয় পক্ষের প্যাকেজ।
  • আফাইক, ডেবিয়ান প্যাকেজগুলিতে কোনও ফাইলের ফাইলের ট্যাব নেই, তাই আমি পড়ার সময় লুপের জন্য টিএফকে আইএফএস হিসাবে ব্যবহার করেছি। আমি ডেবিয়ান সিডের জন্য সামগ্রী-amd64.gz এবং বিষয়বস্তু- i386.gz পরীক্ষা করেছি এবং নিশ্চিত করেছি যে কোনও ট্যাব নেই, তবে তৃতীয় পক্ষের প্যাকেজগুলির কিছু থাকতে পারে।

স্ক্রিপ্টটি ইনস্টল করা প্যাকেজগুলির একটি তালিকা তৈরি করে যা ভারে ফাইল রয়েছে, সেই প্যাকেজগুলি ডাউনলোড করে এবং তারপরে dpkg-deb -cঅনুমতিগুলি কী হবে তা সন্ধান করে।

সবচেয়ে শক্ত অংশটি সেমুড, সেটগিড এবং স্টিকি বিট সহ ক্যাটারিং সহ একাধিক সংখ্যা মোডে অনুমতি দ্বারা স্ট্রিং রূপান্তর করার জন্য ( ls -lবা দ্বারা প্রদর্শিত tar v) ফাংশনটি লিখছিল ... এমন কিছু জিনিস যা একটি সুন্দর অ্যালগরিদম দিয়ে লিখতে সহজ হবে ইন, বলুন, পার্ল বাশ-এ খুব বেশি সমস্যায় পড়েছে, সুতরাং এটিকে কেবল প্রাণঘাতী করা সহজ।

শেষ পর্যন্ত, স্ক্রিপ্টটি "ডিবাগ-মোড" বা "ড্রাই-রান" মোডে থাকতে লেখা হয়। এটিকে প্রকৃতপক্ষে মালিক / গোষ্ঠী / পার্মসকে পরিবর্তন করতে, মন্তব্য-আউট করতে বা __EOF__এখানে ডকুমেন্ট চিহ্নিতকারীগুলির সাথে দুটি লাইন মুছে ফেলুন ।

#! /bin/bash

perm_string_to_mode() {
  string="$1"
  let perms=0

  [[ "${string}" = ?r???????? ]] && perms=$(( perms +  400 ))
  [[ "${string}" = ??w??????? ]] && perms=$(( perms +  200 ))
  [[ "${string}" = ???x?????? ]] && perms=$(( perms +  100 ))
  [[ "${string}" = ???s?????? ]] && perms=$(( perms + 4100 ))
  [[ "${string}" = ???S?????? ]] && perms=$(( perms + 4000 ))
  [[ "${string}" = ????r????? ]] && perms=$(( perms +   40 ))
  [[ "${string}" = ?????w???? ]] && perms=$(( perms +   20 ))
  [[ "${string}" = ??????x??? ]] && perms=$(( perms +   10 ))
  [[ "${string}" = ??????s??? ]] && perms=$(( perms + 2010 ))
  [[ "${string}" = ??????S??? ]] && perms=$(( perms + 2000 ))
  [[ "${string}" = ???????r?? ]] && perms=$(( perms +    4 ))
  [[ "${string}" = ????????w? ]] && perms=$(( perms +    2 ))
  [[ "${string}" = ?????????x ]] && perms=$(( perms +    1 ))
  [[ "${string}" = ?????????t ]] && perms=$(( perms + 1001 ))
  [[ "${string}" = ?????????T ]] && perms=$(( perms + 1000 ))

  echo $perms
}

# generate a list of installed packages that have files etc in /var
grep -l /var/ /var/lib/dpkg/info/*.list  | \
  sed -e 's:/var/lib/dpkg/info/::' -e 's/\.list$//' | \
  xargs dpkg -l | \
  awk '/^[hi]/ {print $2}' > /tmp/packages.list

# clean out the apt cache, so we only have one version of each package
apt-get clean

# download the packages as if we were going to reinstall them
# NOTE: packages which are no longer available for download
# will not have their permissions fixed.  apt-get will complain about
# those packages, so you can get a list by redirecting or tee-ing the
# output of this script.
xargs apt-get -y -d -u --reinstall install < /tmp/packages.list

for pkg in $(cat /tmp/packages.list) ; do
   PKGFILE="/var/cache/apt/archives/${pkg}_*.deb"

   if [ -e $PKGFILE ] ; then

     dpkg-deb -c /var/cache/apt/archives/${pkg}_*.deb | \
       awk '/\.\/var\// {print $1, $2, $6}' | \
       sed -e 's/ /\t/' -e 's/ /\t' | \
       while IFS=$'\t' read permstring ownergroup filename ; do
          # don't change owner/group/perms on symlinks
          if ! [[ "${permstring}" =~ ^l ]] ; then
            mode=$(perm_string_to_mode $permstring)
            # change "owner/group" to "owner:group" for chown
            ownergroup=${ownergroup//\//:}
            # remove leading '.' from filename
            filename=${filename#?}
cat <<__EOF__
            chown "$ownergroup" "$filename"
            chmod "$mode" "$filename"
__EOF__ 
         fi
       done
     echo
   fi
done

স্ক্রিপ্টটি অবশ্যই অন্য যে কোনও ডিরেক্টরিতে বা সমস্ত ডিরেক্টরিতে প্যাকেজড-ফাইল পারম ঠিক করার জন্য খুব সহজেই অভিযোজিত হতে পারে।

এই স্ক্রিপ্টটি অনেক সহজ হত যদি $ প্যাকেজনাম.লিস্ট ফাইলগুলির /var/lib/dpkg/infoমালিক, গোষ্ঠী এবং অষ্টাল পার্মের পাশাপাশি ফাইলের নাম ছিল ... তবে সেগুলি তা না।


1
খুশী হলাম। এছাড়াও, আপনি *। তালিকার মাধ্যমে আপনার গ্রেপ প্রতিস্থাপন করতে সক্ষম হতে পারেন dpkg -S /var। এছাড়াও, এই স্ক্রিপ্টটি প্রয়োগ করার পরে, আমাদের চেক করা দরকার dpkg-statoverride --list '/var/*'
ডারোবার্ট

সত্য, তবে dpkg -Sধীর গতির (এ কারণেই আমি লিখেছি dlocate)। সম্পর্কে ভাল পয়েন্ট dpkg-statoverride, যদিও .... এবং আউটপুট ফর্ম্যাট নিখুঁত।
কাস

1
স্ক্রিপ্ট জন্য ধন্যবাদ। সেড আমন্ত্রণগুলির একটিতে একটি টাইপো রয়েছে, যেখানে ফাঁকা ট্যাবে পরিবর্তন করা হয়েছে, এটি চূড়ান্ত '/' মিস করছে। (এবং আমরা এটির সময়ে, কেন কেবল লেখেন না: সেড-ই '/ + / \ টি / জি' | \
চেলমাইট

3

আপনি পারে।

একই বিতরণ অন্য মেশিন বা একটি ভিএম এ ইনস্টল করুন এবং এর chmod --referজন্য অনুমতিগুলি সিঙ্ক্রোনাইজ করতে ব্যবহার করুন/var


1

সহজ উত্তরটি "আপনি পারবেন না"।

তবে .... যদি আপনার জেএফএসের মতো একটি ফাইল সিস্টেম থাকে যার একটি লগ থাকে তবে আপনি এটির সরঞ্জামগুলি দিয়ে এটি পুনরুদ্ধার করতে পারেন। কিছু প্যাকেজ পরিচালক আপনাকে এটির প্যাকেজগুলি পুনরায় ইনস্টল করার অনুমতি দেয় এবং সম্ভবত এই পদ্ধতিতে আপনি নিজের ফাইলের মালিককে পুনরুদ্ধার করতে পারেন।

আরও একটি উপায় তবে আরও জটিল বিষয় হ'ল আপনি অন্য ডিভাইসে / varটি মাউন্ট করতে পারেন এবং প্রোগ্রামগুলি অনুপস্থিত ডিরেক্টরিটি পুনরায় তৈরি করবে ..

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.