ฉันกำลังพยายามแก้ไขระบบโควต้าของฉัน ปัญหาของฉันคือฉันไม่สามารถตรวจสอบว่าไฟล์ทั้งหมดในไดเรกทอรีเป็นของผู้ใช้เดียวกัน หากเป็นไปได้มีวิธีการแสดงรายการเจ้าของไฟล์ต่าง ๆ ในไดเรกทอรี (เรียกซ้ำ)
เช่น get-owners-of DIRNAME
ฉันกำลังพยายามแก้ไขระบบโควต้าของฉัน ปัญหาของฉันคือฉันไม่สามารถตรวจสอบว่าไฟล์ทั้งหมดในไดเรกทอรีเป็นของผู้ใช้เดียวกัน หากเป็นไปได้มีวิธีการแสดงรายการเจ้าของไฟล์ต่าง ๆ ในไดเรกทอรี (เรียกซ้ำ)
เช่น get-owners-of DIRNAME
คำตอบ:
คุณสามารถใช้find
เพื่อพิมพ์ผู้ใช้ (เจ้าของ) และกลุ่มแล้วแยกชุด uniq เช่น
$ 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
-mindepth 1
-printf
และฉันจะไม่รวมsudo
ไว้ในตัวอย่างเมื่อ OP ไม่ทำงานในบริบทที่จำเป็น
-t:
สร้างความแตกต่างในบริบทนี้หรือไม่?
stat -c %U *
จะแสดงรายการเจ้าของไฟล์ทั้งหมด
สิ่งนี้สามารถจัดเรียงและลบออกซ้ำได้โดยการวางลงในsort -u
:
stat -c %U * | sort -u
ตามที่ระบุไว้โดยผู้ขับรถเหล็กนี่ไม่ใช่แบบเรียกซ้ำ ฉันพลาดที่นี่ถูกขอ สามารถทำซ้ำได้โดยเปิดใช้งาน globstar:
shopt -s globstar
stat -c %U **/* | sort -u
โดยรวมแล้วคำตอบของผู้ขับเหล็กน่าจะดีกว่าและควรเป็นคำตอบที่ได้รับการยอมรับที่นี่ :)
ARG_MAX
เป็นปัญหาที่คุณสามารถทำprintf '%s\0' **/* | xargs -0 stat -c %U
(ตั้งแต่printf
เป็น builtin มันไม่ควรมีข้อ จำกัด ที่ยาวเท่ากัน)
คุณอาจพบว่ามีประสิทธิภาพมากขึ้นในการค้นหาไฟล์ที่ผู้ใช้ไม่ได้เป็นเจ้าของ ...
find /directory ! -user username -printf "%u %p\n"
วิธี DIY ผ่าน Python:
#!/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]) )
ซึ่งจะวนซ้ำชื่อไฟล์ทั้งหมดที่อยู่ในบรรทัดคำสั่งรับ UID ของเจ้าของไฟล์และการใช้โมดูลpwdจะได้รับชื่อผู้ใช้ของเจ้าของ หลังจากนั้นชื่อไฟล์และชื่อผู้ใช้เข้าร่วมเพื่อการพิมพ์ที่สวยงามและแยกออกจากลำไส้ใหญ่ ทำงานเป็นเช่นนั้น:
$ ./get_owners.py /etc/*
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .