ডিরেক্টরিতে ফাইলগুলির সমস্ত মালিকের একটি তালিকা কীভাবে পাবেন


14

আমি বর্তমানে আমার কোটা সিস্টেম ঠিক করার চেষ্টা করছি। আমার সমস্যাটি হ'ল কোনও ডিরেক্টরিতে থাকা সমস্ত ফাইল একই ব্যবহারকারীর মালিকানাধীন কিনা তা আমি নির্ধারণ করতে পারি না। যদি সম্ভব হয় তবে কোনও ডিরেক্টরিতে ফাইলগুলির বিভিন্ন মালিককে তালিকা করার একটি উপায় রয়েছে (পুনরাবৃত্তভাবে)।

যেমন get-owners-of DIRNAME


1
সুতরাং আপনি কি কেবলমাত্র সমস্ত মালিককে বা তাদের মালিকদের সাথে সমস্ত ফাইল বা নির্দিষ্ট ব্যবহারকারী ব্যতীত অন্য কারও মালিকানাধীন সমস্ত ফাইল তালিকাবদ্ধ করতে চান?
বাইট কমান্ডার

উত্তর:


25

আপনি findব্যবহারকারীর (মালিক) এবং গোষ্ঠীটি মুদ্রণ করতে পারেন এবং তারপরে ইউনিট সংমিশ্রণগুলি বের করতে পারেন যেমন

$ sudo find /var -printf '%u:%g\n' | sort -t: -u
_apt:root
avahi-autoipd:avahi-autoipd
clamav:adm
clamav:clamav
colord:colord
daemon:daemon
lightdm:lightdm
lp:lp
man:root
root:adm
root:crontab
root:lp
root:mail
root:mlocate
root:root
root:shadow
root:staff
root:syslog
root:utmp
root:whoopsie
speech-dispatcher:root
statd:nogroup
steeldriver:crontab
steeldriver:lightdm
steeldriver:steeldriver
syslog:adm
systemd-timesync:systemd-timesync
testuser:crontab

1
কেবল ডিরেক্টরি সামগ্রীর মূল্যায়ন করতে (এবং অনুসন্ধানের মূল ডিরেক্টরি / -আই নয়) এর -mindepth 1আগে যুক্ত করুন -printfsudoওপি যখন প্রয়োজনীয় প্রসঙ্গে কাজ করতে উপস্থিত না হয় তখন আমি উদাহরণটিতে অন্তর্ভুক্ত করব না ।
ডেভিড ফোস্টারস্টার

না -t:এই প্রেক্ষাপটে একটি পার্থক্য করতে?
ক্যাস্পার্ড

@ ক্যাস্পার্ড ভাল পয়েন্ট - সম্ভবত না (এটি সাজানোর ক্রমে প্রভাব ফেলতে পারে - তবে আমরা এতে সত্যই আগ্রহী
নই

19
stat -c %U * 

সমস্ত ফাইলের মালিকদের তালিকাবদ্ধ করবে।

এটি বাছাই করা যায় এবং এটিতে পাইপ দিয়ে নকলগুলি সরানো যায় sort -u:

stat -c %U * | sort -u

স্টিল্ড্রাইভার দ্বারা নির্দেশিত হিসাবে, এটি পুনরাবৃত্ত হয় না। আমি মিস করেছি যে এটির জন্য জিজ্ঞাসা করা হয়েছিল। গ্লোবস্টার সক্ষম করে এটি পুনরুক্তি করা যায়:

shopt -s globstar
stat -c %U **/* | sort -u

সামগ্রিকভাবে, স্টিল্ড্রাইভারের উত্তর সম্ভবত আরও ভাল এবং এটি গ্রহণযোগ্য উত্তর হওয়া উচিত :)


অনুসন্ধানে প্রচুর সংখ্যক ফাইল উপস্থিত থাকলে কমান্ড-লাইন দৈর্ঘ্যটি অতিক্রম করবে না? যদি তা হয় তবে @ স্টিলড্রাইভারের উত্তর আরও ভাল।
সিএসএম

@ সিএসএম এটি করবে। যে কারণে আমি বলি স্টিল্ড্রাইভার্স উত্তর অনেক ক্ষেত্রেই ভাল one
ভিডার্লো

2
@ সিএসএম আমি অনুমান করি যে ARG_MAXকোনও সমস্যা যদি আপনি করতে পারেন printf '%s\0' **/* | xargs -0 stat -c %U(যেহেতু printfএকটি
বিল্টিন তাই এটির

5

ব্যবহারকারীর মালিকানাধীন নয় এমন ফাইলগুলি সরাসরি অনুসন্ধান করতে আপনি আরও দক্ষ হতে পারেন ...

find /directory ! -user username -printf "%u %p\n" 

4

পাইথনের মাধ্যমে DIY পদ্ধতি:

#!/usr/bin/env python3
import sys,os,pwd
for f in sys.argv[1:]:
    username = pwd.getpwuid(os.stat(f).st_uid).pw_name
    print( ":".join([f,username])  )

কমান্ড-লাইনে তালিকাভুক্ত সমস্ত ফাইলের উপর এটি পুনরাবৃত্তি করে, ফাইলের মালিকের ইউআইডি পায় এবং পিডব্লিউডি মডিউল ব্যবহার করে মালিকের ব্যবহারকারীর নাম পাওয়া যায়। এর পরে, ফাইলের নাম এবং ব্যবহারকারীর নামটি প্রিন্টিংয়ের জন্য যুক্ত হয়ে কোলনের মাধ্যমে পৃথক হয়েছিল। যেমনটি কাজ করে:

$ ./get_owners.py /etc/* 
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.