ไดเร็กทอรี“ / sys” มีไว้เพื่ออะไร


16

/sysขณะที่ผ่านมาผมสังเกตเห็นไดเรกทอรีนี้ที่ผมไม่เคยเห็นมาก่อน ฉันค้นคว้าเล็กน้อยและอ่านว่า "ระบบ Linux ที่ทันสมัย" มักจะมีไดเรกทอรีนี้และจัดการอุปกรณ์ ฉันคิดว่านั่นคือสิ่งที่ / dev มีไว้เพื่อ ฉันดูเหมือนจะไม่พบข้อมูลมากมายเกี่ยวกับไดเรกทอรีนี้นอกเหนือจากที่ฉันพูดถึงและสิ่งนี้อ้างถึงจากหน้านี้ :

/ sys เป็นระบบไฟล์เสมือนที่สามารถเข้าถึงเพื่อตั้งค่าหรือรับข้อมูลเกี่ยวกับมุมมองของเคอร์เนลของระบบ

ฉันใช้ Trusty มาระยะหนึ่งแล้วและไม่เคยสังเกตมาก่อนซึ่งเป็นสาเหตุที่ฉันพบว่ามันแปลก ๆ มีคนช่วยเติมฉันด้วยมั้ย ความแตกต่างระหว่างสิ่งนี้และ / dev คืออะไร Ubuntu เริ่มใช้ไดเรกทอรีนี้เมื่อใดและเพราะเหตุใด ขอบคุณ


/sysได้รับรอบกว่าทศวรรษในขณะนี้
muru

1
Sidenote อาจจะมีประโยชน์สำหรับผู้ใช้รายอื่น: / proc และ / sys ซึ่งเป็นระบบแฟ้มเสมือนจะหายไปเมื่อคอมพิวเตอร์ปิดตัวลง หากคุณเคยติดตั้งฮาร์ดไดรฟ์ด้วย Linux บนระบบปฏิบัติการอื่นคุณจะเห็นว่าไดเรกทอรีเหล่านั้นว่างเปล่า
Sergiy Kolodyazhnyy

คำตอบ:


28

/sysคือเก่า มันได้รับการแนะนำก่อนที่เคอร์เนล Linux จะถึง 2.6 (ย้อนกลับเมื่อมีการแยก 2.4 / 2.5) นับตั้งแต่การเปิดตัวครั้งแรกที่ใช้อูบุนตู 2.6 เคอร์เนล , ทุก/sysรุ่นของอูบุนตูมี

/devมีไฟล์อุปกรณ์จริง มันไม่ได้ให้การเข้าถึงอุปกรณ์ทั้งหมดว่าเมล็ดรู้ (เช่นอุปกรณ์อีเธอร์เน็ต, หนึ่ง - ? ทำไมเชื่อมต่อเครือข่ายไม่ได้อยู่ใน / dev เช่นเดียวกับอุปกรณ์อื่น ๆ , ทำไมอุปกรณ์อีเธอร์เน็ตไม่แสดงใน "/ dev" ) มันเป็นอินเทอร์เฟซของอุปกรณ์ - คุณเขียนไปยังอุปกรณ์อ่านจากมันเป็นต้น

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

ข้อมูลเพิ่มเติมสามารถพบได้ในเอกสารประกอบเคอร์เนล :

Top Level Directory Layout
~~~~~~~~~~~~~~~~~~~~~~~~~~

The sysfs directory arrangement exposes the relationship of kernel
data structures. 

The top level sysfs directory looks like:

block/
bus/
class/
dev/
devices/
firmware/
net/
fs/

devices/ contains a filesystem representation of the device tree. It maps
directly to the internal kernel device tree, which is a hierarchy of
struct device. 

bus/ contains flat directory layout of the various bus types in the
kernel. Each bus's directory contains two subdirectories:

    devices/
    drivers/

devices/ contains symlinks for each device discovered in the system
that point to the device's directory under root/.

drivers/ contains a directory for each device driver that is loaded
for devices on that particular bus (this assumes that drivers do not
span multiple bus types).

fs/ contains a directory for some filesystems.  Currently each
filesystem wanting to export attributes must create its own hierarchy
below fs/ (see ./fuse.txt for an example).

dev/ contains two directories char/ and block/. Inside these two
directories there are symlinks named <major>:<minor>.  These symlinks
point to the sysfs directory for the given device.  /sys/dev provides a
quick way to lookup the sysfs interface for a device from the result of
a stat(2) operation.

ตัวอย่างเช่น:

  • วิธีหนึ่งในการตั้งค่าความสว่างของจอภาพแล็ปท็อปคือ:

    echo N > /sys/class/backlight/acpi_video0/brightness
    
  • วิธีรับที่อยู่ MAC ของการ์ดเครือข่าย:

    cat /sys/class/net/enp1s0/address
    
  • ในการรับตัวปรับขนาด CPU ปัจจุบัน:

    cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
    

และอื่น ๆ ...


@muru: ถ้าฉันต้องการลบหนึ่งในไฟล์เหล่านี้ซึ่งใช้หน่วยความจำมาก? ฉันเขียนไดรเวอร์อุปกรณ์ซึ่งเป็นบั๊กกี้ (อาจเป็น) ซึ่งเข้าสู่ลูปและเขียนไปยังไฟล์บางไฟล์ในไดเรกทอรี / sys / devices นอกจากนี้หากฉันลบไฟล์ผิดโดยไม่ตั้งใจจะเกิดอะไรขึ้น
Bhavik Shah

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