ব্যবহারকারীর হোম ডিরেক্টরিতে ফাইল অনুমতিগুলি ঠিক করতে হবে


24

কারও কাছে কি এমন কোনও সরঞ্জাম বা স্ক্রিপ্ট রয়েছে যা ডিরেক্টরিতে ফাইল অনুমতিগুলি পুনরাবৃত্তভাবে সংশোধন করবে?

উবুন্টু লিনাক্স মেশিনে, একগুচ্ছ ফাইলগুলি ইউএসবি ডিস্কে সম্পূর্ণ 7 permission7 অনুমতি (ব্যবহারকারী, গোষ্ঠী, অন্যান্য - পড়ুন, লিখুন, সম্পাদন করুন) ত্রুটিযুক্ত করে অনুলিপি করা হয়েছিল। আমি তাদের আবার ব্যবহারকারীর ডিরেক্টরিতে সংশোধন করতে চাই।

ডিরেক্টরিগুলি 775 হওয়া উচিত এবং অন্য সমস্ত ফাইল 664 হওয়া উচিত All সমস্ত ফাইল চিত্র, নথি বা এমপি 3, সুতরাং সেগুলির কোনওটিই সম্পাদনযোগ্য হবে না। ডিরেক্টরি বিট সেট করা থাকলে এর এক্সিকিউশন প্রয়োজন, অন্যথায় এটির জন্য কেবল ব্যবহারকারী এবং গোষ্ঠী প্রয়োজন, পড়ুন এবং লিখুন।

আমি বুঝতে পেরেছিলাম যে শেল স্ক্রিপ্ট একসাথে হ্যাক করার আগে এই জাতীয় ইউটিলিটি উপস্থিত রয়েছে কিনা তা যাচাইয়ের জন্য উপযুক্ত :)


আমি এর আগে তৈরি একটি এখানে: http://timwise.blogspot.com/2008/08/reseting-home-folder-perifications-in.html
টিম অবেল

উত্তর:


51

এই কৌতুক করতে হবে:

find /home/user -type d -print0 | xargs -0 chmod 0775
find /home/user -type f -print0 | xargs -0 chmod 0664

1
প্রিন্ট 0 / এক্সার্গস -0 :-) ব্যবহারের জন্য +1।
sleske

14

এক্সেক দিয়ে একাই কৌতুক করতে পারে তা সন্ধান করুন:

find /home/user -type f -exec chmod 0664 {} \;
find /home/user -type d -exec chmod 0775 {} \;

প্রতিটি প্রবেশের জন্য chmod তৈরি করা থেকে বিরত রাখতে:

find /home/user -type f -exec chmod 0664 {} +
find /home/user -type d -exec chmod 0775 {} +

(এটি কার্যকরভাবে একবারে সমস্ত ফাইলের তালিকাসমূহের সাথে একবারে পিএমএল ফাইলের পরিবর্তে প্যারামিটার হিসাবে কল করে)


6
Xargs ব্যবহারের চেয়ে ধীরে ধীরে, আপনি প্রতিটি ফাইলের জন্য একটি chmod তৈরি করছেন, যেখানে xargs যতটা কম্যান্ড লাইনে ফিট করতে পারে তত ফাইল সহ একটি chmod প্রক্রিয়া চালাবে। একটি খুব বড় গাছে, এটি একটি ন্যায্য পার্থক্য করতে পারে।
ডেভিড প্যাশলে

1
এছাড়াও, মুদ্রণ0 / xargs -0 এমনকি খুব অদ্ভুত ফাইলের নামও পরিচালনা করবে; সন্ধানী-এক্সেক সম্পর্কে এতটা নিশ্চিত নয়।
sleske

8

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

# chmod -R . u=rwX,g=rX,o=rX

ম্যাজিকটি এক্সের পরিবর্তে এক্স অনুমতি। Chmod ম্যানপেজ এটি বর্ণনা করে:

যদি ফাইলটি ডিরেক্টরি হয় বা ইতিমধ্যে কিছু ব্যবহারকারীর জন্য অনুমতি কার্যকর করেছে কেবল তখনই সম্পাদন / অনুসন্ধান করুন

এটি আপনার ক্ষেত্রে উপযুক্ত নয় কারণ আপনার ফাইলগুলির অনুমতি কার্যকর করার কারণে এটি দ্বিতীয় পরীক্ষার সাথে মিলবে।


1
ছ 775 এবং 664. জন্য rwX হওয়া উচিত
aventurin

1

আমি ফ্রেইহাইটের সমাধানের বাইরে একটি স্ক্রিপ্ট তৈরি করেছি, এটি বেসিক আর্গুমেন্ট চেকিং যুক্ত করে।

#!/bin/sh

if [ $# -lt 1 ]; then
    echo "USAGE: $0 <path>"
    exit 1
fi

find $1 -type d -print0 | xargs -0 chmod 0755
find $1 -type f -print0 | xargs -0 chmod 0644

ভাল ধারণা. যাইহোক, দ্বিতীয় লাইন একটি ত্রুটি ছোঁড়া যখন লক্ষ্য একটি ডিরেক্টরি হল: chmod: missing operand after ‘0644’। লক্ষ্যটির অস্তিত্ব আছে কিনা তা দেখার জন্য আমি কি চেক দিয়ে বিবৃতি সন্ধানের পরামর্শটি মোড়ানো পরামর্শ দিতে পারি? if [ -d $1 ]; then find $1 -type d -print0 | xargs -0 chmod 0755; fi; if [ -f $1 ]; then find $1 -type f -print0 | xargs -0 chmod 0644; fi
এন্ড্রোভার

এটি প্রায় সঠিক; তবে লক্ষ্যটি যদি ডিরেক্টরি হয় তবে আপনি এতে থাকা ফাইলগুলি chmod করতে ভুলে গিয়েছিলেন এবং যদি এটি কোনও ফাইল হয় তবে আপনাকে কেবল সেই ফাইলটি chmod করতে হবে।
শন

0

আপনি ssh ব্যবহার করছেন এমন ক্ষেত্রে, ~/.sshঅনুমতিগুলি পরিবর্তন না করা ভাল idea

DIR=/home/user
find $DIR -type d -not -path "$DIR/.ssh" -print0 | xargs -0 chmod 0775
find $DIR -type f -not -path "$DIR/.ssh/*" -print0 | xargs -0 chmod 0664

0

আমি অন্য দিন সত্যিই একটি সহজ বাশ স্ক্রিপ্ট তৈরি করেছি কারণ আমার অনুমতিগুলি ঠিক করার দরকার ছিল। বেসিক, নন-রুট, ফাইল এবং ফোল্ডার অনুমতিগুলি পুনরায় সেট করার জন্য কেন আনুষ্ঠানিক ইউটিলিটি নেই?

স্ক্রিপ্ট 755 টি সমস্ত ফোল্ডার এবং 644 লাইব্রেরি ব্যবহার করে to এরপরে এটি প্রতিটি বাইনারি এলফ শিরোলেখ রয়েছে কিনা তা দেখার জন্য প্রতিটি ফাইলটি রিডফলের সাথে পরীক্ষা করে। যদি তা না হয় তবে এটি শেবাংয়ের জন্য প্রথম দুটি অক্ষরে স্ক্যান করে #!। এটি 755 দৃষ্টান্তগুলি এবং 644 এর পরে ফাইলটি ইতিমধ্যে ম্যাচের অনুমতি আছে কিনা তা পরীক্ষা করে দেখুন।

*.bakফাইলগুলি উপেক্ষা করার মতো একটি ব্যতিক্রমের সাথে বিশেষ কেসগুলি পরিচালনা করা হয়।

#!/bin/bash
read -r -p "Correct file and folder permissions? [y/N] " chse
if [[ "$chse" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
  echo "Processing ..."
  find -H $(pwd) -type d -exec chmod 0755 {} \;
  # set dirs to 755
  find -H $(pwd) -type f \( -iname '*.so.*' -o -iname '*.so' \) -exec chmod 0644 {} \;
  # libs
  IFS=$'\n'
  for value in $(find -H $(pwd) -type f ! \( -iname '*.so.*' -o -iname '*.so' -o -iname '*.bak' \) -printf '%p\n'); do
    tstbin=$(readelf -l "$value" 2>/dev/null | grep -Pio 'executable|shared')
    if [ -z "$tstbin" ]; then
      tstbat=$(cat "$value" | head -c2 | grep -io '#!')
      if [ -n "$tstbat" ]; then
        perm=$(stat -c '%a' "$value")
        if [ "$perm" != "755" ]; then
          chmod 755 $value
          echo "Set script  755 $value"
          # set batch to 755
        fi
      else
        perm=$(stat -c '%a' "$value")
        if [ "$perm" != "644" ]; then
          chmod 644 $value
          echo "Set regular 644 $value"
          # set regular files to 644
        fi
      fi
      # above aren't elf binary
    else
      perm=$(stat -c '%a' "$value")
      if [ "$perm" != "755" ]; then
        chmod 755 $value
        echo "Set binary  755 $value"
        # set elf binaries to 755
      fi
    fi
  done
  unset IFS
  # process linux permissions for files and folders
else
  echo "Aborted."
fi

0

আমি একটি সরলিকৃত সি-শেল সমাধান পেয়েছি। এটি পুরোপুরি বোকা প্রমাণ নাও হতে পারে তবে বেশিরভাগ ডিরেক্টরিতে কাজ করা উচিত। এটি ইউনিক্স 'ফাইল' কমান্ডটি কাজ করে ধরে নিয়েছে এবং এক্সিকিউটিভ ফাইলগুলি তাদের এক্সিকিউটিভের অনুমতিগুলিতে পুনরায় সেট করতে সন্ধান করে:

find /home/user -type d | xargs chmod 0775
find /home/user -type f | xargs -0 chmod 0664
find /home/user -type f -exec file {} \; | grep executable | cut -d":" -f1 | xargs chmod 0775

1
এটি কেবলমাত্র কয়েকটি উত্তর পুনরাবৃত্তি করে না, এটি একটি ত্রুটি এবং কার্যকারিতাটি ওপি জিজ্ঞাসা করে নি।
র‌্যালফ্রেডল

0

একটি বিকল্প, যা আসল অনুরোধটির সঠিক উত্তর দেয় না, তবে ওপি কী ইচ্ছা করে তা প্রতীকীভাবে অনুমতিগুলি নির্দিষ্ট করে। উদাহরণস্বরূপ, আমি ধরে নিই যে ওপি "জনসাধারণের জন্য লেখার অ্যাক্সেস সরিয়ে ফেলতে এবং সমস্ত ফাইল থেকে নির্বাহযোগ্য অনুমতি সরাতে" চায়।

আপনি যদি প্রতীকী অনুমতি প্রতিনিধিত্ব ব্যবহার করেন তবে এটি সম্ভব।

  • বাহ "জনসাধারণের কাছ থেকে লেখার অ্যাক্সেস সরান" ("ও" - অন্যদের, "-" - সরান, "ডাব্লু" - লিখুন)
  • কুঠারটি হল "কেবলমাত্র ফাইলগুলিতে প্রত্যেকের জন্য এক্সিকিউট করুন" ("ক" - সমস্ত, "-" - সরান, "এক্স" - এক্সিকিউট)

এটি "0664" স্পষ্টভাবে সেট করার পরিবর্তে এভাবে লেখালেখি আপনি দুর্ঘটনাক্রমে আগে লক হয়ে যাওয়া ফাইলগুলিতে অতিরিক্ত অনুমতি দেওয়া এড়াতে চান। উদাহরণস্বরূপ, কোনও ফাইল যদি 0770 হয় তবে এটি ভুল করে 0664 হয়ে উঠবে না।

প্রথম প্রয়োজনীয়তাটি করতে আপনি কেবল ব্যবহার করতে পারেন chmod:

chmod --recursive o-w $dir

দ্বিতীয় প্রয়োজনীয়তা করতে:

find $dir -type f -exec chmod a-x {} +

অথবা উভয়ই করতে হবে:

find $dir -type f -exec chmod a-x,o-w {} +
find $dir -type d -exec chmod o-w {} +
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.