วิธีใช้คำสั่ง stat บน Linux

เผยแพร่แล้ว: 2022-01-29
เทอร์มินัล Linux บนเดสก์ท็อปสไตล์ Ubuntu
Fatmawati Achmad Zaenuri/Shutterstock.com

คำสั่ง Linux stat จะแสดงรายละเอียดให้คุณเห็นมากกว่าที่ ls ทำ แอบมองหลังม่านด้วยยูทิลิตี้ที่ให้ข้อมูลและกำหนดค่าได้นี้ เราจะแสดงวิธีใช้งานให้คุณดู

สถิติพาคุณไปเบื้องหลัง

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

คำสั่ง Linux พื้นฐาน 10 คำสั่งสำหรับผู้เริ่มต้น
คำสั่ง Linux พื้นฐาน 10 คำสั่ง ที่เกี่ยวข้อง สำหรับผู้เริ่มต้น

ls จะแสดงข้อมูลมากมายเกี่ยวกับไฟล์ เช่น สิทธิ์ที่กำหนดไว้ในไฟล์ และขนาดไฟล์ และไม่ว่าจะเป็นไฟล์หรือลิงก์สัญลักษณ์ ในการแสดงข้อมูลนี้ ls อ่านจากโครงสร้างระบบไฟล์ที่เรียกว่าไอโหนด

ทุกไฟล์และไดเร็กทอรีมีไอโหนด ไอโหนดเก็บข้อมูลเมตาเกี่ยวกับไฟล์ เช่น ระบบไฟล์ใดที่บล็อกไฟล์นั้น และการประทับวันที่ที่เกี่ยวข้องกับไฟล์ ไอโหนดเป็นเหมือนการ์ดห้องสมุดสำหรับไฟล์ แต่ ls จะแสดงข้อมูลบางส่วนเท่านั้น หากต้องการดูทุกอย่าง เราต้องใช้คำสั่ง stat

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

ที่เกี่ยวข้อง: วิธีใช้คำสั่ง ls เพื่อแสดงรายการไฟล์และไดเรกทอรีบน Linux

การเปรียบเทียบอย่างรวดเร็ว

ลองใช้ ls เพื่อแสดงรายการยาว ( -l ตัวเลือก) พร้อมขนาดไฟล์ที่มนุษย์อ่านได้ ( -h ตัวเลือก):

 ls -lh ana.h 

โฆษณา

จากซ้ายไปขวา ข้อมูลที่ ls ให้ไว้คือ:

  • อักขระตัวแรกคือยัติภังค์ “-” และสิ่งนี้บอกเราว่าไฟล์นั้นเป็นไฟล์ปกติ ไม่ใช่ซ็อกเก็ต ลิงก์สัญลักษณ์ หรืออ็อบเจกต์ประเภทอื่น
  • เจ้าของ กลุ่ม และการอนุญาตอื่นๆ จะแสดงอยู่ในรูปแบบฐานแปด
  • จำนวนฮาร์ดลิงก์ที่ชี้ไปยังไฟล์นี้ ในกรณีนี้และโดยมากแล้วมันจะเป็นอย่างใดอย่างหนึ่ง
  • เจ้าของไฟล์คือเดฟ
  • เจ้าของกลุ่มคือเดฟ
  • ขนาดไฟล์ 802 ไบต์
  • ไฟล์ถูกแก้ไขล่าสุดในวันศุกร์ที่ 13 ธันวาคม 2558
  • ชื่อไฟล์คือ ana.c

ลองดูด้วย stat :

 สถิติ ana.h 

ข้อมูลที่เราได้รับจาก stat คือ:

  • ไฟล์ : ชื่อของไฟล์ โดยปกติแล้ว จะเหมือนกับชื่อที่เราส่งไปยัง stat บนบรรทัดคำสั่ง แต่อาจแตกต่างออกไปหากเราดูที่ลิงก์สัญลักษณ์
  • ขนาด : ขนาดของไฟล์เป็นไบต์
  • บล็อก : จำนวนระบบไฟล์ที่บล็อกไฟล์ที่ต้องการเพื่อจัดเก็บไว้ในฮาร์ดไดรฟ์
  • IO Block : ขนาดของบล็อกระบบไฟล์
  • ประเภทไฟล์ : ประเภทของวัตถุที่ข้อมูลเมตาอธิบาย ประเภทที่พบบ่อยที่สุดคือไฟล์และไดเร็กทอรี แต่ก็สามารถเป็นลิงก์ ซ็อกเก็ต หรือไพพ์ที่มีชื่อได้
  • อุปกรณ์ : หมายเลขอุปกรณ์เป็นเลขฐานสิบหกและทศนิยม นี่คือ ID ของฮาร์ดไดรฟ์ที่ไฟล์ถูกเก็บไว้
  • ไอ โหนด : หมายเลขไอโหนด นั่นคือหมายเลข ID ของไอโหนดนี้ หมายเลขไอโหนดและหมายเลขอุปกรณ์จะระบุไฟล์โดยไม่ซ้ำกัน
  • ลิงก์ : ตัวเลขนี้ระบุจำนวนฮาร์ดลิงก์ที่ชี้ไปที่ไฟล์นี้ แต่ละฮาร์ดลิงก์มีไอโหนดของตัวเอง อีกวิธีหนึ่งในการคิดเกี่ยวกับตัวเลขนี้คือจำนวนไอโหนดที่ชี้ไปยังไฟล์นี้ ทุกครั้งที่มีการสร้างหรือลบฮาร์ดลิงก์ หมายเลขนี้จะถูกปรับขึ้นหรือลง เมื่อถึงศูนย์ ไฟล์จะถูกลบและไอโหนดจะถูกลบออก หากคุณใช้ stat ในไดเร็กทอรี หมายเลขนี้จะแสดงจำนวนไฟล์ในไดเร็กทอรี รวมทั้ง "." รายการสำหรับไดเร็กทอรีปัจจุบันและรายการ ".." สำหรับไดเร็กทอรีหลัก
  • การเข้าถึง : สิทธิ์ของไฟล์จะแสดงในรูปแบบ rwx ฐานแปดและดั้งเดิม (รูปแบบอ่าน เขียน ดำเนินการ)
  • Uid : ID ผู้ใช้และชื่อบัญชีของเจ้าของ
  • Gid : ID กลุ่มและชื่อบัญชีของเจ้าของ
  • การเข้าถึง : การประทับเวลาการเข้าถึง ไม่ตรงไปตรงมาอย่างที่คิด การกระจาย Linux สมัยใหม่ใช้รูปแบบที่เรียกว่า relatime ซึ่งพยายามเพิ่มประสิทธิภาพการเขียนฮาร์ดไดรฟ์ที่จำเป็นในการอัปเดตเวลาการเข้าถึง พูดง่ายๆ ก็คือ เวลาเข้าถึงจะได้รับการอัปเดตหากเก่ากว่าเวลาที่แก้ไข
  • Modify : การประทับเวลาการแก้ไข นี่คือเวลาที่ เนื้อหา ของไฟล์ถูกแก้ไขครั้งล่าสุด (โชคดีที่มีเนื้อหาในไฟล์นี้ถูกเปลี่ยนล่าสุดเมื่อสี่ปีที่แล้วเป็นวันนี้)
  • Change : การประทับเวลาการเปลี่ยนแปลง นี่คือเวลาที่ แอตทริบิวต์ หรือ เนื้อหา ของไฟล์มีการเปลี่ยนแปลงครั้งล่าสุด หากคุณแก้ไขไฟล์โดยตั้งค่าการอนุญาตไฟล์ใหม่ การประทับเวลาการเปลี่ยนแปลงจะได้รับการอัปเดต (เนื่องจาก แอตทริบิวต์ของ ไฟล์มีการเปลี่ยนแปลง) แต่การประทับเวลาที่แก้ไขจะไม่ได้รับการอัปเดต (เนื่องจาก เนื้อหา ของไฟล์ไม่มีการเปลี่ยนแปลง)
  • กำเนิด : สงวนไว้เพื่อแสดงวันที่สร้างดั้งเดิมของไฟล์ แต่สิ่งนี้ไม่ได้ใช้งานใน Linux

การทำความเข้าใจการประทับเวลา

การประทับเวลามีความละเอียดอ่อนของเขตเวลา -0500 ที่ส่วนท้ายของแต่ละบรรทัดแสดงว่าไฟล์นี้ถูกสร้างขึ้นบนคอมพิวเตอร์ในเขตเวลา Coordinated Universal Time (UTC) ซึ่งเร็วกว่าเขตเวลาของคอมพิวเตอร์ปัจจุบันห้าชั่วโมง ดังนั้นคอมพิวเตอร์เครื่องนี้จึงช้ากว่าคอมพิวเตอร์ที่สร้างไฟล์นี้ห้าชั่วโมง อันที่จริง ไฟล์ถูกสร้างขึ้นบนคอมพิวเตอร์เขตเวลาของสหราชอาณาจักร และเรากำลังดูไฟล์นี้ที่นี่บนคอมพิวเตอร์ในเขตเวลามาตรฐานตะวันออกของสหรัฐอเมริกา

การแก้ไขและการเปลี่ยนแปลงการประทับเวลาอาจทำให้เกิดความสับสนได้เพราะสำหรับคนที่ไม่ได้ฝึกหัด ชื่อของพวกเขาฟังราวกับว่ามีความหมายเดียวกัน

ลองใช้ chmod เพื่อแก้ไขการอนุญาตไฟล์ในไฟล์ชื่อ ana.c เราจะทำให้ทุกคนสามารถเขียนได้ การดำเนินการนี้จะไม่ส่งผลต่อเนื้อหาของไฟล์ แต่จะส่งผลต่อแอตทริบิวต์ของไฟล์

 chmod +w ana.c

จากนั้นเราจะใช้ stat เพื่อดูการประทับเวลา:

 สถิติ ana.c 

โฆษณา

การประทับเวลาการเปลี่ยนแปลงได้รับการอัปเดตแล้ว แต่เวลาที่แก้ไขไม่ได้รับการอัปเดต

การประทับเวลาที่ แก้ไข จะได้รับการอัปเดตก็ต่อเมื่อเนื้อหาของไฟล์มีการเปลี่ยนแปลง การประทับเวลา การเปลี่ยนแปลง ได้รับการอัปเดตสำหรับทั้งการเปลี่ยนแปลงเนื้อหาและการเปลี่ยนแปลงแอตทริบิวต์

การใช้สถิติกับหลายไฟล์

หากต้องการให้รายงานสถิติของไฟล์หลายไฟล์พร้อมกัน ให้ส่งชื่อไฟล์ไปที่ stat บนบรรทัดคำสั่ง:

 สถิติ ana.h ana.o 

หากต้องการใช้ stat กับชุดของไฟล์ ให้ใช้การจับคู่รูปแบบ เครื่องหมายคำถาม “?” แทนอักขระตัวเดียว และเครื่องหมายดอกจัน "*" แทนสตริงของอักขระใดๆ เราสามารถบอก stat ให้รายงานในไฟล์ใดๆ ที่เรียกว่า “ana” ด้วยนามสกุลตัวอักษรเดียว โดยใช้คำสั่งนี้:

 สถิติอนา.? 

การใช้สถิติในการรายงานบนระบบไฟล์

stat สามารถรายงานสถานะของระบบไฟล์รวมถึงสถานะของไฟล์ได้ อ็อพชัน -f (ระบบไฟล์) บอกให้ stat รายงานเกี่ยวกับระบบไฟล์ที่ไฟล์นั้นอาศัยอยู่ โปรดทราบว่าเราสามารถส่งผ่านไดเร็กทอรีเช่น “/” ไปยัง stat แทนชื่อไฟล์ได้

 stat -f ana.c 

stat ข้อมูลให้เราคือ:

  • ไฟล์ : ชื่อของไฟล์
  • ID : ID ระบบไฟล์ในรูปแบบเลขฐานสิบหก
  • Namelen : ความยาวสูงสุดที่อนุญาตสำหรับชื่อไฟล์
  • Type : ประเภทของระบบไฟล์
  • ขนาดบล็อก : จำนวนข้อมูลที่จะขออ่านเพื่ออัตราการถ่ายโอนข้อมูลที่เหมาะสมที่สุด
  • ขนาดบล็อกพื้นฐาน : ขนาดของแต่ละบล็อกระบบไฟล์

บล็อก:

  • Total : จำนวนบล็อคทั้งหมด n ระบบไฟล์
  • ฟรี : จำนวนบล็อกว่างในระบบไฟล์
  • พร้อมใช้งาน : จำนวนบล็อกฟรีสำหรับผู้ใช้ทั่วไป (ที่ไม่ใช่รูท)

ไอโหนด:

  • ทั้งหมด : จำนวน inodes ทั้งหมดในระบบไฟล์
  • ฟรี : จำนวนไอโหนดฟรีในระบบไฟล์

การอ้างอิงลิงก์สัญลักษณ์

หากคุณใช้ stat ในไฟล์ที่เป็นลิงก์สัญลักษณ์จริง ๆ ไฟล์นั้นจะรายงานเกี่ยวกับลิงก์นั้น หากคุณต้องการให้ stat รายงานเกี่ยวกับไฟล์ที่ลิงก์ชี้ไป ให้ใช้ตัวเลือก -L (dereference) ไฟล์ code.c เป็นลิงก์สัญลักษณ์ไปยัง ana.c ลองดูที่ไม่มีตัวเลือก -L :

 stat code.c 

โฆษณา

ชื่อไฟล์แสดง code.c ที่ชี้ไปที่ ( -> ) ana.c ขนาดไฟล์เพียง 11 ไบต์ มีศูนย์บล็อกสำหรับการจัดเก็บลิงก์นี้ ประเภทไฟล์จะแสดงเป็นลิงก์สัญลักษณ์

เห็นได้ชัดว่าเราไม่ได้ดูไฟล์จริงที่นี่ ลองทำอีกครั้งและเพิ่มตัวเลือก -L :

 stat -L code.c 

ขณะนี้กำลังแสดงรายละเอียดไฟล์สำหรับไฟล์ที่ลิงก์สัญลักษณ์ชี้ไป แต่โปรดทราบว่าชื่อไฟล์ยังคงเป็น code.c นี่คือชื่อของลิงก์ ไม่ใช่ไฟล์เป้าหมาย สิ่งนี้เกิดขึ้นเนื่องจากเป็นชื่อที่เราส่งไปยัง stat บนบรรทัดคำสั่ง

รายงานสั้น

ตัวเลือก -t (สั้น) ทำให้ stat ให้ข้อมูลสรุปแบบย่อ:

 stat -t ana.c 

ไม่มีเบาะแสให้ เพื่อให้เข้าใจ - จนกว่าคุณจะจำลำดับฟิลด์ได้ คุณต้องอ้างอิงโยงเอาต์พุตนี้ไปยังเอาต์พุต stat แบบเต็ม

รูปแบบเอาต์พุตที่กำหนดเอง

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

โฆษณา

มีชุดของลำดับรูปแบบที่แตกต่างกันสำหรับไฟล์และระบบไฟล์ รายการสำหรับไฟล์คือ:

  • %a : สิทธิ์การเข้าถึงเป็นเลขฐานแปด
  • %A : สิทธิ์การเข้าถึงในรูปแบบที่มนุษย์สามารถอ่านได้ ( rwx )
  • %b : จำนวนบล็อกที่จัดสรร
  • %B : ขนาดเป็นไบต์ของแต่ละบล็อก
  • %d : หมายเลขอุปกรณ์เป็นทศนิยม
  • %D : หมายเลขอุปกรณ์เป็นฐานสิบหก
  • %f : โหมดดิบในฐานสิบหก
  • %F ประเภทไฟล์
  • %g : รหัสกลุ่มของเจ้าของ
  • %G : ชื่อกลุ่มของเจ้าของ
  • %h : จำนวนฮาร์ดลิงก์
  • %i : หมายเลขไอโหนด
  • %m : จุดต่อเชื่อม
  • %n : ชื่อไฟล์
  • %N : ชื่อไฟล์ที่ยกมา โดยมีชื่อไฟล์ที่ไม่อ้างอิงหากเป็นลิงก์สัญลักษณ์
  • %o : คำแนะนำขนาดการถ่ายโอน I/O ที่เหมาะสมที่สุด
  • %s : ขนาดรวม หน่วยเป็นไบต์
  • %t : ประเภทอุปกรณ์หลักในหน่วยฐานสิบหก สำหรับไฟล์พิเศษของอุปกรณ์อักขระ/บล็อก
  • %T : ประเภทอุปกรณ์รองในหน่วยฐานสิบหก สำหรับไฟล์พิเศษอักขระ/บล็อกอุปกรณ์
  • %u : ID ผู้ใช้ของเจ้าของ
  • %U : ชื่อผู้ใช้ของเจ้าของ
  • %w : เวลาเกิดไฟล์ มนุษย์สามารถอ่านได้ หรือขีดกลาง “-” หากไม่ทราบ
  • %W : เวลาเกิดไฟล์ วินาทีตั้งแต่ยุค; 0 ถ้าไม่ทราบ
  • %x : เวลาที่เข้าถึงล่าสุด มนุษย์สามารถอ่านได้
  • %X : เวลาที่เข้าถึงล่าสุด วินาทีนับตั้งแต่ยุค
  • %y : เวลาของการแก้ไขข้อมูลล่าสุด มนุษย์สามารถอ่านได้
  • %Y : เวลาของการแก้ไขข้อมูลล่าสุด วินาทีนับตั้งแต่ยุค
  • %z : เวลาที่เปลี่ยนสถานะล่าสุด มนุษย์สามารถอ่านได้
  • %Z : เวลาที่สถานะล่าสุดเปลี่ยน วินาทีนับตั้งแต่ยุค

“ยุค” คือ Unix Epoch ซึ่งเกิดขึ้นเมื่อวันที่ 1970-01-01 00:00:00 +0000 (UTC)

สำหรับระบบไฟล์ ลำดับรูปแบบคือ:

  • %a : จำนวนบล็อกฟรีสำหรับผู้ใช้ทั่วไป (ที่ไม่ใช่รูท)
  • %b : บล็อคข้อมูลทั้งหมดในระบบไฟล์
  • %c : inodes ทั้งหมดในระบบไฟล์
  • %d : จำนวน inodes ฟรีในระบบไฟล์
  • %f : จำนวนบล็อกว่างในระบบไฟล์
  • %i : ID ระบบไฟล์เป็นเลขฐานสิบหก
  • %l : ความยาวสูงสุดของชื่อไฟล์
  • %n : ชื่อไฟล์
  • %s : ขนาดบล็อก (ขนาดการเขียนที่เหมาะสมที่สุด)
  • %S : ขนาดของบล็อกระบบไฟล์ (สำหรับจำนวนบล็อก)
  • %t : ประเภทระบบไฟล์เป็นเลขฐานสิบหก
  • %T : ประเภทระบบไฟล์ในรูปแบบที่มนุษย์อ่านได้

มีสองตัวเลือกที่ยอมรับสตริงของลำดับรูปแบบ เหล่านี้คือ --format และ --printf ความแตกต่างระหว่างสิ่งเหล่านี้คือ --printf ตีความลำดับการหลีกแบบ C เช่น newline \n และ tab \t และจะไม่เพิ่มอักขระขึ้นบรรทัดใหม่ให้กับเอาต์พุตโดยอัตโนมัติ

มาสร้างสตริงรูปแบบและส่งต่อไปยัง stat ลำดับรูปแบบที่จะใช้คือ %n สำหรับชื่อไฟล์ %s สำหรับขนาดของไฟล์และ %F สำหรับประเภทไฟล์ เราจะเพิ่ม \n Escape Sequence ที่ส่วนท้ายของสตริงเพื่อให้แน่ใจว่าแต่ละไฟล์ได้รับการจัดการในบรรทัดใหม่ สตริงรูปแบบของเรามีลักษณะดังนี้:

 "ไฟล์ %n คือ %s ไบต์ และเป็น %F\n"

เราจะส่งต่อสิ่งนี้เพื่อ stat โดยใช้ตัวเลือก --printf เราจะขอให้ stat รายงานเกี่ยวกับไฟล์ชื่อ code.c และชุดของไฟล์ที่ตรงกับ ana.? . นี่คือคำสั่งเต็มรูปแบบ สังเกตเครื่องหมายเท่ากับ “ = ” ระหว่าง --printf และสตริงรูปแบบ:

 stat --printf="ไฟล์ %n คือ %s ไบต์ และเป็น %F\n" code.c ana/ana.? 

รายงานสำหรับแต่ละไฟล์จะแสดงในบรรทัดใหม่ ซึ่งเป็นสิ่งที่เราร้องขอ ชื่อไฟล์ ขนาดไฟล์ และประเภทไฟล์มีไว้ให้เรา

โฆษณา

รูปแบบที่กำหนดเองช่วยให้คุณเข้าถึงองค์ประกอบข้อมูลได้มากกว่าที่รวมอยู่ในเอาต์พุต stat มาตรฐาน

การควบคุมเม็ดละเอียด

อย่างที่คุณเห็น มีขอบเขตมหาศาลในการแยกองค์ประกอบข้อมูลเฉพาะที่คุณสนใจ คุณอาจเห็นเหตุผลที่เราแนะนำให้ใช้นามแฝงสำหรับคาถาที่ยาวและซับซ้อนมากขึ้น

ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ