ทำไม getfacl จึงลบชื่อพา ธ / ชื่อพา ธ สัมบูรณ์ออก


10

ฉันอยู่ท่ามกลางการเรียนรู้เกี่ยวกับ ACL สำหรับ CentOS / Red Hat 6; เมื่อฉันรันgetfaclโดยใช้พา ธ สัมบูรณ์ฉันจะได้ผลลัพธ์ที่:

getfacl: การลบ '/' นำหน้าจากชื่อพา ธ สัมบูรณ์

ทำไมต้องทำเช่นนี้? คุณจะต้องใช้ปุ่ม-pหรือ--absolute-namesสวิตช์ในสถานการณ์ใด

หนังสือของฉันโดย Wale Soyinka และ Michael Jang ไม่ได้เอ่ยถึงเรื่องนี้เลยฉันไม่เห็นเบาะแสใด ๆ ในหน้า man และดูเหมือนว่าฉันจะไม่พบไซต์ใด ๆ ที่ตอบรับคำเตือนนี้โดยตรง


1
มันเป็นเช่นนี้มาตั้งแต่รุ่งอรุณของ ACL ในลินุกซ์ ฉันไม่รู้ว่าทำไม
Gilles 'หยุดความชั่วร้าย'

ขอบคุณที่ช่วยฉันดูมันและสำหรับลิงค์ ทักษะการเขียนโปรแกรมของฉันเป็นพื้นฐานเล็กน้อยในขณะนี้ แต่ฉันได้บันทึกไฟล์ไว้เมื่อฉันเริ่มจัดการ C / C ++ ด้วยหนังสือ Gaddis ของฉัน
Seananigans

คำตอบ:


6

จากหน้าคนของgetfacl:

-p, --absolute-names
       Do not strip leading slash characters (`/'). The  default  behavior
       is to strip leading slash characters.

ข้อความเตือนจะถูกปล่อยออกมาเมื่อคุณจัดหาเส้นทางที่แน่นอนโดยไม่ต้องใช้-pสวิตช์

เอาต์พุตแตกต่างกันเมื่อกำหนดพา ธ สัมบูรณ์ให้กับgetfaclคำสั่ง

ไม่มี-pสวิตช์:

$ getfacl /path/foo/bar
getfacl: Removing leading '/' from absolute path names
# file: path/foo/bar
[Output truncated...]

หมายเหตุเครื่องหมายสแลชนำหน้าในไฟล์พา ธ แสดงเฉพาะเมื่อ-pใช้สวิตช์

$ getfacl -p /path/foo/bar
# file: /path/foo/bar
[Output truncated...]

-p มีประโยชน์ในการรักษาสแลชนำเมื่อคุณไพพ์เอาต์พุตสำหรับการประมวลผลเพิ่มเติม

เอาต์พุตจะเหมือนกันเมื่อกำหนดพา ธ สัมพัทธ์ให้กับgetfaclคำสั่ง

$ getfacl bar
# file: bar
[Output truncated...]

ไม่มีการเปลี่ยนแปลง:

$ getfacl -p bar
# file: bar
[Output truncated...]

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

2
ใน distros อื่น ๆ (เช่น FreeBSD) สวิตช์นี้ไม่มีอยู่ โดยการดูที่มาของแพ็คเกจ RHEL ดูเหมือนว่า--absolute-namesจะจัดการเฉพาะกับสตริงเอาต์พุต - "# file:" แต่ไม่ใช่ตรรกะที่อยู่เบื้องหลัง ตอนแรกฉันเดาว่ามันอาจเป็นคุณสมบัติความปลอดภัย setfaclอย่างไรก็ตามสวิทช์ไม่ได้อยู่ใน ข้อสันนิษฐานสุดท้ายของฉันคือผู้เขียนต้องการจำลองtarพฤติกรรมแม้ว่าการ-pใช้สวิตช์getfaclอาจไม่ได้ผล
Ivan Chau

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