อะไรคือความแตกต่างระหว่าง“ s” และ“ S” ใน ls -la


67

เมื่อฉันls -laมันพิมพ์คุณสมบัติมากมาย บางสิ่งเช่นนี้

-rwSrwSr-- 1 www-data www-data   45 2012-01-04 05:17 README

ฉันต้องยอมรับว่าฉันไม่รู้ความหมายที่แท้จริงของแต่ละคุณสมบัติ ตัวอย่างเช่นความหมายของใหญ่Sในสตริง-rwSrwSr--คืออะไร? ต่อไปนี้1คืออะไร? ฉันรู้จักคนอื่นอย่างเกรี้ยวกราด


19
Eonil: ไม่มีอะไรน่าอายที่ต้องถามคำถามเพราะนั่นคือสิ่งที่เว็บไซต์นี้เกี่ยวข้อง และสำหรับผู้ที่พูด RTFM พวกเราหลายคนทำอย่างนั้นและยังไม่สามารถหาคำตอบที่ง่ายที่สุดหลังจากลุยผ่านหน้าเอกสารที่เขียนโดยโปรแกรมเมอร์ที่อ่านยาก (และฉันเป็นโปรแกรมเมอร์) ในบางกรณีเราอยู่ในระบบที่ไม่ได้ติดตั้ง man pages ด้วยเหตุผลเหล่านั้นและอื่น ๆ อีกมากมายเว็บไซต์เช่นนี้เป็นสวรรค์ ขอบคุณที่ถามคำถามเดียวกันกับฉัน
อลัน

1
คำถามที่ดี - เฉพาะเจาะจงมากพร้อมกับตัวอย่างที่เป็นรูปธรรม
Ole

คำตอบ:


49

เอกสารของlsคำสั่งตอบคำถามเหล่านี้ สำหรับตัวแปรยูนิกซ์ส่วนใหญ่ให้ค้นหาlsหน้าคน ( man lsหรือออนไลน์) บน Linux ดูเอกสารข้อมูล (ที่info ls) หรือออนไลน์

ตัวอักษรsแสดงว่าบิตsetuid (หรือ setgid ขึ้นอยู่กับคอลัมน์) เมื่อเรียกใช้งานไฟล์ได้ setuid จะรันในฐานะผู้ใช้ที่เป็นเจ้าของไฟล์เรียกใช้งานแทนผู้ใช้ที่เรียกใช้โปรแกรม ตัวอักษรแทนตัวอักษรs xเป็นไปได้ที่ไฟล์จะถูก setuid แต่ไม่สามารถเรียกใช้งานได้ สิ่งนี้ถูกแสดงด้วยโดยSที่ตัวพิมพ์ใหญ่Sเตือนคุณว่าการตั้งค่านี้อาจผิดเพราะบิต setuid เป็น (เกือบตลอดเวลา) ไร้ประโยชน์หากไฟล์นั้นไม่สามารถใช้งานได้

เมื่อไดเรกทอรีมีสิทธิ์ setuid (หรือ setgid) ไฟล์ใด ๆ ที่สร้างขึ้นในไดเรกทอรีนั้นจะเป็นของผู้ใช้ (หรือกลุ่ม) ที่ตรงกับเจ้าของ (หรือกลุ่ม) ของไดเรกทอรี

จำนวนหลังจากการอนุญาตคือการนับการเชื่อมโยงอย่างหนัก ฮาร์ดลิงก์คือพา ธ ไปยังไฟล์ (ชื่อหรือกล่าวอีกนัยหนึ่ง) ไฟล์ส่วนใหญ่มีเส้นทางเดียว แต่คุณสามารถสร้างเพิ่มเติมด้วยlnคำสั่ง (ซึ่งแตกต่างจากลิงก์สัญลักษณ์: ลิงก์สัญลักษณ์บอกว่า“ โอ้จริง ๆ แล้วไฟล์นี้อยู่ที่อื่นไปที่ <location>”) ไดเรกทอรีมี N + 2 ฮาร์ดลิงก์โดยที่ N คือจำนวนไดเรกทอรีย่อยเพราะสามารถเข้าถึงได้ จากผู้ปกครองของพวกเขาจากตัวเอง (ผ่าน.รายการ) และจากแต่ละไดเรกทอรีย่อย (ผ่าน..รายการ)


5
มันหมายความว่าอย่างไรใน OS X เมื่อนำไปใช้กับไดเรกทอรีหรือไม่ ตัวอย่างเช่น$ ls /Usersผลตอบแทนdrws--S---+ 12 jdoe staff 408 Jul 9 2013 jdoe

4
@jww หมายความว่าไฟล์ที่สร้างในไดเรกทอรีนั้นจะเป็นของกลุ่มที่เป็นเจ้าของไดเรกทอรี แต่นั่นเป็นค่าเริ่มต้นใน OSX ดูen.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directoriesและunix.stackexchange.com/questions/12842/…
Gilles

@Gilles เมื่อคุณบอกว่าไฟล์ไม่ "ปฏิบัติการ"? หมายความว่าไม่มีสิทธิ์ในการเรียกใช้งานหรือว่าไม่ใช่ประเภทไฟล์ที่สามารถเรียกใช้งานได้
ransh

@ransh ฉันหมายถึงสิทธิ์ดำเนินการ ( x)
Gilles

ฉันได้ส่งการแก้ไขที่คล้ายกับจุดที่ทำในคำตอบของ @ Jag ด้านล่าง
qneill

16

ตามที่ info coreutils ls(ซึ่งอาจไม่ใช่สิ่งที่คุณมี):

`s '
ถ้า setuid หรือ setgid บิตและบิตที่ปฏิบัติการได้สอดคล้องกันทั้งสองชุด

`S '
ถ้า setuid หรือ setgid bit ถูกตั้งค่าไว้ แต่ bit ที่ปฏิบัติการได้นั้นไม่ได้ถูกตั้งค่าไว้

หมายเลขหลังจากส่วนการอนุญาตคือจำนวนฮาร์ดลิงก์


2
โดยพื้นฐานแล้วนี่คือสิ่งที่คุณได้รับด้วยchmod g-x,g+s dir
sanmai

6

ในคำศัพท์ (หวังว่าง่ายกว่า) หมายถึง ไดเรกทอรีนี้เป็น setgid ไฟล์ใด ๆ ที่สร้างขึ้นในนั้นจะถูกครอบครองโดยกลุ่มนั้นของเจ้าของโฟลเดอร์นั้น

อย่างไรก็ตามโฟลเดอร์จะไม่สามารถเรียกใช้งานได้โดยกลุ่มดังนั้นจึงแสดงเป็นตัวพิมพ์ใหญ่ S ซึ่งโดยทั่วไปจะเป็นเมื่อสร้างไดเรกทอรีและไดเรกทอรีจะลงท้ายด้วย setgid

อืม .. ไม่แน่ใจว่าที่จริงฟังเหมือนภาษาอังกฤษธรรมดาข้างต้น ..


1
คำตอบนี้ไม่ได้ให้ข้อมูลมากกว่าหรือต่างไปจากคำตอบเดิม
jayhendren

1
@ jayhendren ใช่มันเป็นเช่นนั้น มันพูดเกี่ยวกับไดเรกทอรี ไม่มีคำตอบอื่นใดที่จะทำ (Gilles ควรรวมข้อคิดเห็นของเขาไว้ในคำตอบของเขา)
Sparhawk

0

มันเป็นเพราะปฏิบัติการที่ขาดหายไป

s -> 'x' ถูกเปิดใช้งาน S -> 'x' ถูกปิดใช้งาน

ดูตัวอย่างด้านล่าง

$ ls -l

total 0

-rwsrw-r--. 1 bpkmails bpkmails 0 Jun 25 20:18 ca

$ chmod u-x ca

$ ls -l

total 0

-rwSrw-r--. 1 bpkmails bpkmails 0 Jun 25 20:18 ca

$

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