ดูสิทธิ์ / เจ้าของแผนผังไดเรกทอรีแบบเต็ม


27

ฉันจำได้ว่ากำลังทำอะไรเช่น "XXX / home / user / dir / child / file" และมันคืนเจ้าของและ / หรือได้รับอนุญาตจาก:

/home
/home/user
/home/user/dir
/home/user/child
/home/user/child/file

แต่ฉันจำไม่ได้ว่าคำสั่งนี้คืออะไร ใครมีความคิด?


ไม่เห็นสิ่งที่ตรัสรู้จากapropos modeหรือapropos permissionsใน OS X และ Debian คุณรู้หรือไม่ว่าแพลตฟอร์ม / การกระจายที่คุณใช้อยู่ มันอาจจะเป็นคำสั่งเว็บไซต์ท้องถิ่น? คุณสามารถสคริปต์เครื่องมือเช่นการใช้และdirname stat
mrb

การใช้ Arch Linux และการติดตั้งวานิลลาที่สวยงามจึงไม่ได้ติดตั้งเครื่องมือพิเศษมากเกินไป โปรดทราบว่ามันเป็นเจ้าของสิทธิ์และ / หรือฉันไม่แน่ใจในจุดนี้ ทั้งสองจะเป็นประโยชน์
โปรดลบฉัน

คำตอบ:


31

คำสั่งอาจเป็น:

namei -m /home/user/dir/child/file

6
namei -moมันยอดเยี่ยมมากมันช่วยให้คุณเป็นเจ้าของ
earthmeLon

2
ระวัง: namei จะไม่แสดง linux ACL หรือ SELinux MAC ของ ฉันคิดว่า ACL บล็อก nginx โดยตรวจสอบด้วยตนเองsudo su nginx -s/bin/bash
Ray Foss

28

ฉันคิดว่าคุณอาจจะคิดถึงtreeคำสั่ง ตัวอย่างเช่น:

$ tree -pufid apps/glassfish3/ | less
apps/glassfish3
[drwxr-xr-x saml    ]  apps/glassfish3/bin
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/bin
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/config
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/doc-files
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation/security
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/annotation/sql
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/decorator
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/ejb
[drwxr-xr-x saml    ]  apps/glassfish3/glassfish/docs/api/javax/ejb/embeddable
...
...

สวิตช์ข้างต้นทำสิ่งต่อไปนี้:

  • -p - การอนุญาต
  • -u - ชื่อผู้ใช้ / หมายเลขผู้ใช้
  • -f - เส้นทางเต็ม
  • -i - อย่าพิมพ์บรรทัดการเยื้อง
  • -d - พิมพ์ไดเรกทอรีเท่านั้น

อ้างอิง


3
ฉันคิดว่ามันถูกขอให้แสดงบรรพบุรุษที่/home/user/dir/child/fileไม่ใช่เด็ก
Raphael Ahrens

@RaphaelAhrens - ใช่ฉันรู้ว่า แต่ไม่มีคำสั่งที่ฉันรู้ว่าทำอย่างนั้น แต่มีคำสั่งต้นไม้ที่ทำในสิ่งที่ฉันแสดงให้เห็นและมันก็คล้ายกับสิ่งที่ OP คิด
slm

เป็น-uสิ่งที่จำเป็นจริงๆ? ดูเหมือนว่าจะเป็นค่าเริ่มต้นที่นี่ (เวอร์ชันต้นไม้ 1.6.0 ภายใต้ GNU bash 4.2.45) มีตัวเลือกในการปิดเสียง "ชื่อผู้ใช้ / หมายเลขผู้ใช้" หรือไม่?
Nikos Alexandris

1
@NikosAlexandris - ถ้าฉันปล่อยสวิตช์นั้นฉันจะไม่ได้รับชื่อผู้ใช้ My ver: tree v1.6.0 ฉันใช้ Fedora 19, GNU bash, รุ่น 4.2.45 (1) - ปล่อย (x86_64-redhat-linux-gnu)
slm

"ค่าเริ่มต้น" แตกต่างกันระหว่างเวอร์ชันทุบตีหรือไม่ ขอขอบคุณที่แจ้ง
Nikos Alexandris

3

หลังจากที่ให้มันเจ้าบางฉันมากับสิ่งนี้

#!/bin/sh
l_path=$1
while [ "$l_path" != / -a "$l_path" != . ]; do
     ls -ld $l_path
     l_path=$(dirname -- "$l_path")
done

ผลลัพธ์มีลักษณะเช่นนี้

-rw------- 1 tant tant 181016423 Jun 25 23:49:17 2013 /home/tant/test_file
drwxr-xr-x 85 tant tant 5632 Jul  9 19:40:11 2013 /home/tant
lrwxr-xr-x 1 root wheel 8 Sep  4 23:53:27 2012 /home -> usr/home

ฉันหวังว่ามันจะโอเคว่ามันจะอยู่ในลำดับย้อนกลับ

จากความคิดเห็นต่อไปนี้เป็นวิธีการแสดงรายการจากรูทล่าง:

#!/bin/sh
l_path=$1
while [ "$l_path" != / -a "$l_path" != . ]; do
     ls -ld $l_path
     l_path=$(dirname -- "$l_path")
done | sed '1!G;h;$!d'

1
คุณสามารถย้อนกลับด้วย| tacถ้าคุณมีหรือ| sed '1!G;h;$!d'ไม่
mrb

2
สิ่งนี้จะทำลายเส้นทางที่สัมพันธ์กัน ทำ[ "$l_path" != / -a "$l_path" != . ]แทน

@Evan Teitelman dirname ควรให้เส้นทางที่สมบูรณ์
Raphael Ahrens

1
@RaphaelAhrens ไม่มันจะส่งกลับจุดสำหรับเส้นทางสัมพัทธ์ในที่สุด
เร่ง

1
นอกจากนี้stat -lอาจจะหรือstat ls -ld

0

ในไดเรกทอรีที่คุณต้องการทราบสิทธิ์และเจ้าของของ ancester:

for i in $(seq 0 $(pwd | tr -cd / | wc -c)) ; do pwd ; ls -lad ; cd .. ; done

โปรดทราบว่าหลังจากนั้นคุณจะอยู่ใน/:) หากคุณต้องการกลับไปที่ที่คุณอยู่ให้ปิดคำสั่งไว้ข้างใน

HERE=$(pwd)
...
cd ${HERE}

-1

คำสั่งที่คุณกำลังมองหารายชื่อและเจ้าของสิทธิ์ / กลุ่มคือคำสั่ง ls -l

ตัวเลือก -l ใช้สำหรับรูปแบบรายการยาว

ls -l / path / to / list

นอกจากนี้หากคุณต้องการแสดงรายการและไฟล์ที่ซ่อนอยู่ให้เพิ่มตัวเลือก-a (ทั้งหมด)

ls -al / path / to / list

นอกจากนี้หากคุณต้องการแสดงรายการการอนุญาตในไดเรกทอรีย่อยให้ใช้ตัวเลือก-R (เรียกซ้ำ)

ls -Rl / path / to / list

คอลัมน์แรกจะแสดงการอนุญาต (read (r), write (w), execute (x)) และการอนุญาตพิเศษ (directory (d), - (ไฟล์ปกติ)) และคอลัมน์ที่ 3 และ 4 จะแสดงไฟล์ / ไดเรกทอรีให้คุณ เจ้าของและกลุ่มตามลำดับ


2
ฉันไม่คิดว่าเป็นสิ่งที่ขอ ดูเหมือนว่าผู้ถามกำลังมองหารายการสิทธิ์ของไดเรกทอรีที่นำไปสู่ไฟล์
Mat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.