निर्देशिका में फ़ाइलों के सभी मालिकों की सूची कैसे प्राप्त करें


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
केवल निर्देशिका सामग्री का मूल्यांकन करने के लिए (और स्वयं की रूट निर्देशिका / -ies नहीं) -mindepth 1पहले जोड़ें -printf। और मैं sudoउदाहरण में शामिल नहीं होगा जब ओपी एक संदर्भ में काम करने के लिए प्रकट नहीं होता है जहां इसकी आवश्यकता होती है।
डेविड फोस्टरस्टर

क्या -t:इस संदर्भ में कोई फर्क पड़ता है?
केस्परड

@kasperd अच्छा बिंदु - शायद नहीं (यह क्रम क्रम को प्रभावित कर सकता है - लेकिन हम वास्तव में उस में रुचि नहीं रखते हैं)
स्टीलड्राइवर

19
stat -c %U * 

सभी फ़ाइलों के मालिकों की सूची देगा।

इसे हल करके डुप्लिकेट को हटाया जा सकता है sort -u:

stat -c %U * | sort -u

जैसा कि स्टीलड्राइवर ने कहा है, यह पुनरावर्ती नहीं है। मैंने याद किया कि यह पूछा गया था। ग्लोबस्टार को सक्षम करके इसे पुनरावर्ती बनाया जा सकता है:

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

कुल मिलाकर, स्टीलड्राइवर का उत्तर शायद बेहतर है और यहां स्वीकृत उत्तर होना चाहिए :)


क्या कमांड-लाइन की लंबाई से अधिक नहीं होगी, अगर खोज में बड़ी संख्या में फाइलें हैं? यदि ऐसा है, तो @steeldriver का उत्तर बेहतर है।
CSM

@CSM यह होगा यही कारण है कि मैं कहता हूं कि स्टीलड्राइवर्स का जवाब कई मामलों में बेहतर है।
विदरलो

2
@CSM मुझे लगता है कि 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])  )

यह कमांड-लाइन पर सूचीबद्ध सभी फ़ाइलनामों पर आधारित है, फ़ाइल के मालिक का यूआईडी प्राप्त करता है, और pwd मॉड्यूल का उपयोग करने से मालिक का उपयोगकर्ता नाम प्राप्त होता है। उसके बाद, फ़ाइल नाम और उपयोगकर्ता नाम मुद्रण के लिए जुड़ गए और बृहदान्त्र के माध्यम से अलग हो गए। इस तरह काम करता है:

$ ./get_owners.py /etc/* 
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.