it-swarm.asia

كيف يمكنني العثور على الملفات القابلة للتنفيذ فقط ضمن دليل معين في Linux؟

كيف يمكنني العثور على الملفات القابلة للتنفيذ فقط ضمن دليل معين في Linux؟

145
HaiYuan Zhang

يمكن إجراء التحقق من الملفات القابلة للتنفيذ باستخدام -perm (غير مستحسن) أو -executable (مستحسن ، لأنه يأخذ ACL في الاعتبار). لاستخدام الخيار -executable:

find <dir> -executable

إذا كنت ترغب في العثور على الملفات القابلة للتنفيذ فقط وليس الدلائل القابلة للبحث ، فقم بالاقتران مع -type f:

find <dir> -executable -type f
148
knittl

استخدم خيار البحث -perm. سيجد هذا ملفات في الدليل الحالي قابلة للتنفيذ إما بواسطة مالكها أو أعضاء المجموعة أو غيرهم:

find . -perm /u=x,g=x,o=x

تصحيح:

لقد وجدت خيارًا آخر موجود على الأقل في GNU find 4.4.0:

find . -executable

هذا يجب أن يعمل بشكل أفضل لأن ACLs تعتبر أيضًا.

31
innaM

أعرف أن السؤال يذكر نظام Linux على وجه التحديد ، ولكن نظرًا لأنه النتيجة الأولى على Google ، فقد أردت فقط إضافة الإجابة التي كنت أبحث عنها (على سبيل المثال إذا كنت - مثلي في الوقت الحالي - أجبرت من قبل صاحب العمل على استخدام غير جنو/نظام لينكس).

تم اختباره على macOS 10.12.5

find . -perm +111 -type f
12
friederbluemle

لديّ طريقة أخرى ، في حالة ما تريده حقًا هو القيام بشيء ما باستخدام ملفات قابلة للتنفيذ - وليس بالضرورة فرض البحث لتصفية نفسه:

for i in `find -type f`; do [ -x $i ] && echo "$i is executable"; done

أفضل هذا لأنه لا يعتمد على -executable وهو نظام أساسي مخصص ؛ ولا يعتمد على -perm وهو عبارة عن غامضة بعض الشيء ، ونظام أساسي معين ، وكما هو مكتوب أعلاه يتطلب الملف أن يكون قابلاً للتنفيذ للجميع (ليس أنت فقط).

يعد -type f مهمًا لأنه في الدلائل * nix يجب أن تكون قابلة للتنفيذ بحيث يكون قابلاً للاكتشاف ، وكلما زاد الاستعلام في الأمر find ، كلما زادت كفاءة الذاكرة لديك.

على أي حال ، مجرد تقديم طريقة أخرى ، لأن * nix هي أرض المليار التي تقترب منها.

3
Mark McKenna

لا يلزم أن يكون الملف القابل للتنفيذ أو الملف قابلاً للتنفيذ أو للتحميل.

إليكم ما أستخدمه:

find ./ -type f -name "*" -not -name "*.o" -exec sh -c '
    case "$(head -n 1 "$1")" in
      ?ELF*) exit 0;;
      MZ*) exit 0;;
      #!*/ocamlrun*)exit0;;
    esac
exit 1
' sh {} \; -print
2
AjayKumarBasuthkar

كمشجع للبطانة الواحدة ...

find /usr/bin -executable -type f -print0 | xargs file | grep ASCII

استخدام "xargs" لأخذ الإخراج من أمر find (باستخدام print0 لضمان التعامل مع أسماء الملفات ذات المسافات بشكل صحيح). لدينا الآن قائمة بالملفات القابلة للتنفيذ ونوفرها ، واحدة تلو الأخرى ، كمعلمة للأمر "file". ثم grep للمصطلح ASCII لتجاهل الثنائيات. يرجى استبدال - قابل للتنفيذ في العثور على الأمر مع النمط الذي تفضله (انظر الإجابات السابقة) أو ما يعمل على 'NIX OS الخاص بك

لقد طلبت أعلاه للعثور على الملفات التي تحتوي على eval في البرامج النصية المملوكة من قبل الجذر ، لذلك قمت بإنشاء ما يلي للمساعدة في العثور على نقاط الضعف في التصعيد حيث يقوم المستخدم الجذر بتشغيل البرامج النصية مع معلمات غير آمنة ...

echo -n "+ Identifying script files owned by root that execute and have an eval in them..."
find /  -not \( -path /proc -Prune \)  -type f -executable -user root -exec grep -l eval {} \; -exec file {} \; | grep ASCII| cut -d ':' -f1 > $outputDir"/root_owned_scripts_with_eval.out" 2>/dev/null &
1
Richard Braganza