หลักสูตรที่สอดคล้องกัน https://www.bilibili.com/video/BV18p4y167Md
หลักสูตร Correspondence ระบบปฏิบัติการ การบรรยายภาคปฏิบัติระบบปฏิบัติการ 45
สารบัญ CSAPP ความเข้าใจเชิงลึกเกี่ยวกับระบบคอมพิวเตอร์มาจาก https://www.bilibili.com/video/BV17K4y1N7Q2 หัวหน้า
yangminz
ของ Microsoft (กำลังอัปเดต)
สารบัญ ซีรีส์การเขียนโปรแกรมเชิงวัตถุ C++ จากซีรีส์การเขียนโปรแกรมเชิงวัตถุ CPP ของ Master Hou Jie (เสร็จสมบูรณ์)
ความรู้เบื้องต้นเกี่ยวกับการใช้งานพื้นฐานและตัวเลือกของคำสั่ง
Man ย่อมาจาก manual ซึ่งแสดงข้อมูลเฉพาะของคำสั่ง
เมื่อดำเนินการวันที่ man วันที่ (1) จะปรากฏขึ้น ตัวเลขในนั้นแสดงถึงประเภทของคำสั่งที่ใช้กันทั่วไปและประเภทมีดังนี้:
ชื่อรหัส | พิมพ์ |
---|---|
1 | คำแนะนำหรือไฟล์ปฏิบัติการที่ผู้ใช้สามารถดำเนินการในสภาพแวดล้อมเชลล์ |
5 | ไฟล์การกำหนดค่า |
8 | คำสั่งการดูแลระบบสำหรับผู้ดูแลระบบ |
ข้อมูลคล้ายกับมนุษย์ แต่ข้อมูลจะแบ่งเอกสารออกเป็นหน้าๆ และแต่ละหน้าสามารถข้ามได้
/usr/share/doc จัดเก็บชุดเอกสารที่สมบูรณ์สำหรับซอฟต์แวร์
ก่อนที่จะปิดเครื่อง คุณต้องใช้คำสั่ง who เพื่อตรวจสอบว่ามีผู้ใช้รายอื่นออนไลน์อยู่หรือไม่
เพื่อเพิ่มความเร็วในการอ่านและเขียนไฟล์ในดิสก์ ข้อมูลไฟล์ที่อยู่ในหน่วยความจำจะไม่ถูกซิงโครไนซ์กับดิสก์ทันที ดังนั้นจึงจำเป็นต้องมีการดำเนินการซิงโครไนซ์การซิงโครไนซ์ก่อนที่จะปิดเครื่อง
# # shutdown [-krhc] 时间 [信息] |
-k : 不会关机,只是发送警告信息,通知所有在线的用户
-r : 将系统的服务停掉后就重新启动
-h : 将系统的服务停掉后就立即关机
-c : 取消已经在进行的 shutdown 指令内容
เส้นทางไปยังไฟล์ปฏิบัติการได้รับการประกาศใน PATH คั่นด้วย :
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
sudo อนุญาตให้ผู้ใช้ทั่วไปใช้คำสั่งปฏิบัติการรูทได้ แต่เฉพาะผู้ใช้ที่เพิ่มในไฟล์คอนฟิกูเรชัน /etc/sudoers เท่านั้นที่สามารถใช้คำสั่งนี้ได้
RPM และ DPKG เป็นเครื่องมือการจัดการแพ็คเกจซอฟต์แวร์ที่พบบ่อยที่สุดสองประเภท:
การกระจาย Linux เป็นเวอร์ชันรวมของเคอร์เนล Linux และซอฟต์แวร์แอปพลิเคชันต่างๆ เครื่องมือการจัดการแพ็คเกจตามการแจกแจงเชิงพาณิชย์ การแจกแจงชุมชน RPM Red Hat Fedora/CentOS DPKG Ubuntu Debian
คำสั่ง | ผล |
---|---|
:w | เขียนลงดิสก์ |
:w! | บังคับให้เขียนลงดิสก์เมื่อไฟล์เป็นแบบอ่านอย่างเดียว จะสามารถเขียนได้หรือไม่นั้นขึ้นอยู่กับการอนุญาตของผู้ใช้ในไฟล์ |
:q | ออกจาก |
:คิว! | ถูกบังคับให้ออกโดยไม่บันทึก |
:wq | เขียนลงดิสก์แล้วออกไป |
:wq! | บังคับให้เขียนลงดิสก์แล้วออก |
โครงการ GNU ซึ่งแปลว่าโครงการของแท้ มีเป้าหมายเพื่อสร้างระบบปฏิบัติการฟรีที่เรียกว่า GNU และซอฟต์แวร์เนื้อหาได้รับการเผยแพร่อย่างสมบูรณ์ภายใต้ GPL ชื่อเต็มของ GPL คือ GNU General Public License ซึ่งรวมถึงเนื้อหาต่อไปนี้: เสรีภาพในการรันโปรแกรมนี้เพื่อวัตถุประสงค์ใดๆ ก็ตาม เสรีภาพในการทำซ้ำ เสรีภาพในการปรับปรุงโปรแกรมนี้และเผยแพร่การปรับปรุงสู่สาธารณะ ¶เลือกใบอนุญาตโอเพ่นซอร์ส (เปิดหน้าต่างใหม่) จะเลือกใบอนุญาตโอเพ่นซอร์สได้อย่างไร (เปิดหน้าต่างใหม่)
IDE (ATA) ย่อมาจาก Advanced Technology Attachment ความเร็วอินเทอร์เฟซสูงสุดคือ 133MB/s เนื่องจากประสิทธิภาพการป้องกันการรบกวนของสายเคเบิลพอร์ตขนานต่ำเกินไป และสายเคเบิลใช้พื้นที่ขนาดใหญ่ ซึ่งไม่เอื้อต่อความร้อนภายใน คอมพิวเตอร์ที่ค่อยๆ หายไป ก็ค่อยๆ ถูกแทนที่ด้วย SATA
ชื่อเต็มของ SATA คือ Serial ATA ซึ่งเป็นอินเทอร์เฟซ ATA ที่ใช้พอร์ตอนุกรม มีการป้องกันการแทรกแซงที่แข็งแกร่ง มีข้อกำหนดด้านความยาวของสายเคเบิลข้อมูลต่ำกว่า ATA มาก และรองรับฟังก์ชันแบบ Hot-swappable และฟังก์ชันอื่นๆ ความเร็วอินเทอร์เฟซของ SATA-II คือ 300MiB/s ในขณะที่มาตรฐาน SATA-III ใหม่สามารถเข้าถึงความเร็วในการส่งข้อมูลที่ 600MiB/s สายเคเบิลข้อมูล SATA นั้นบางกว่า ATA มาก ซึ่งเป็นประโยชน์ต่อการไหลเวียนของอากาศในแชสซีและทำให้จัดระเบียบสายเคเบิลได้ง่ายขึ้น
ชื่อเต็มของ SCSI คือ Small Computer System Interface มีการพัฒนามาหลายชั่วอายุคน ตั้งแต่ SCSI-II รุ่นแรกๆ ไปจนถึง Ultra320 SCSI และ Fiber-Channel ในปัจจุบัน พร้อมด้วยอินเทอร์เฟซประเภทต่างๆ ฮาร์ดไดรฟ์ SCSI มีการใช้กันอย่างแพร่หลายในคอมพิวเตอร์ส่วนบุคคลและเซิร์ฟเวอร์ระดับเวิร์กสเตชัน ดังนั้นจึงใช้เทคโนโลยีขั้นสูงมากขึ้น เช่น ความเร็วดิสก์สูงถึง 15,000 รอบต่อนาที และมีการใช้งาน CPU ต่ำกว่าในระหว่างการส่งข้อมูล อย่างไรก็ตาม ราคาต่อหน่วยก็สูงกว่าเช่นกัน กว่าฮาร์ดไดรฟ์ ATA และ SATA ที่มีความจุเท่ากัน มีราคาแพงกว่า
ฮาร์ดแวร์ทุกชิ้นใน Linux จะถือเป็นไฟล์ รวมถึงดิสก์ด้วย ดิสก์ได้รับการตั้งชื่อตามประเภทอินเทอร์เฟซของดิสก์ ชื่อไฟล์ดิสก์ทั่วไปมีดังนี้:
การกำหนดหมายเลขซีเรียลหลังชื่อไฟล์จะสัมพันธ์กับลำดับที่ระบบตรวจพบดิสก์ และไม่เกี่ยวข้องกับตำแหน่งสล็อตที่ใส่ดิสก์
ตารางพาร์ติชันดิสก์มีสองรูปแบบหลัก รูปแบบหนึ่งคือตารางพาร์ติชัน MBR ที่มีข้อจำกัดมากกว่า และอีกรูปแบบหนึ่งคือตารางพาร์ติชัน GPT ที่ใหม่กว่าและมีข้อจำกัดน้อยกว่า
ใน MBR เซกเตอร์แรกคือส่วนที่สำคัญที่สุด ประกอบด้วยมาสเตอร์บูตเรกคอร์ด (MBR) และตารางพาร์ติชัน มาสเตอร์บูตเรกคอร์ดใช้พื้นที่ 446 ไบต์ และตารางพาร์ติชันใช้พื้นที่ 64 ไบต์
ตารางพาร์ติชั่นมีขนาดเพียง 64 ไบต์และสามารถจัดเก็บพาร์ติชั่นได้สูงสุด 4 พาร์ติชั่นเท่านั้น ซึ่งได้แก่ พาร์ติชั่นหลัก (หลัก) และพาร์ติชั่นขยาย (ขยาย) มีพาร์ติชันเสริมเพียงพาร์ติชันเดียวเท่านั้น ซึ่งใช้เซกเตอร์อื่นในการบันทึกตารางพาร์ติชันเพิ่มเติม ดังนั้น พาร์ติชันเพิ่มเติมจึงสามารถแบ่งตามพาร์ติชันขยายได้ พาร์ติชันเหล่านี้เรียกว่าโลจิคัลพาร์ติชัน
Linux ยังถือว่าพาร์ติชันเป็นไฟล์ วิธีการตั้งชื่อไฟล์พาร์ติชันคือ: ชื่อไฟล์ดิสก์ + หมายเลข เช่น /dev/sda1 โปรดทราบว่าการกำหนดหมายเลขของโลจิคัลพาร์ติชันเริ่มต้นที่ 5
ดิสก์ที่แตกต่างกันมีขนาดเซกเตอร์ที่แตกต่างกัน เช่น 512 ไบต์และ 4k สำหรับดิสก์รุ่นล่าสุด เพื่อให้เข้ากันได้กับดิสก์ทั้งหมด GPT จะใช้ที่อยู่บล็อกแบบลอจิคัล (ที่อยู่บล็อกแบบลอจิคัล, LBA) ในเซกเตอร์ที่กำหนด ขนาดเริ่มต้นของ LBA คือ 512 ไบต์
บล็อกแรกของ GPT จะบันทึก Main Boot Record (MBR) ตามด้วย 33 บล็อกเพื่อบันทึกข้อมูลพาร์ติชัน และ 33 บล็อกสุดท้ายใช้เพื่อสำรองข้อมูลพาร์ติชัน บล็อกแรกจาก 33 บล็อกนี้คือบันทึกส่วนหัว GPT ส่วนนี้จะบันทึกตำแหน่งและขนาดของตารางพาร์ติชันและตำแหน่งของพาร์ติชันสำรอง นอกจากนี้ยังวางรหัสตรวจสอบ (CRC32) ของตารางพาร์ติชันด้วย ใช้รหัสตรวจสอบนี้เพื่อตรวจสอบว่า GPT ถูกต้องหรือไม่ หากมีข้อผิดพลาด คุณสามารถใช้พาร์ติชั่นสำรองเพื่อกู้คืนได้
GPT ไม่มีแนวคิดเรื่องพาร์ติชั่นแบบขยาย โดยแต่ละ LAB สามารถแบ่งออกเป็น 4 พาร์ติชั่นได้ ดังนั้นจึงสามารถแบ่งพาร์ติชั่นได้ทั้งหมด 4 * 32 = 128 พาร์ติชั่น
MBR ไม่รองรับฮาร์ดไดรฟ์ที่มีขนาดเกิน 2.2 TB ในขณะที่ GPT รองรับสูงสุด 233 TB = 8 ZB
BIOS (ระบบอินพุต/เอาท์พุตพื้นฐาน) คือเฟิร์มแวร์ (ซอฟต์แวร์ที่ฝังอยู่ในฮาร์ดแวร์) โปรแกรม BIOS จะถูกจัดเก็บไว้ในหน่วยความจำแบบอ่านอย่างเดียวซึ่งจะไม่สูญเสียเนื้อหาหลังจากไฟฟ้าดับ
BIOS เป็นโปรแกรมแรกที่ดำเนินการโดยคอมพิวเตอร์เมื่อเปิดเครื่อง โปรแกรมนี้รู้จักดิสก์ที่สามารถบู๊ตได้และอ่าน main boot record (MBR) ของเซกเตอร์แรกของดิสก์ โปรแกรมการจัดการการบูต โปรแกรมการจัดการการบูตนี้จะโหลดไฟล์หลักของระบบปฏิบัติการ
ตัวจัดการการบูตใน Main Boot Record (MBR) มีฟังก์ชันต่อไปนี้:
เมนู โหลดไฟล์หลัก และถ่ายโอนไปยังโปรแกรมจัดการการบูตอื่นๆ คุณสามารถใช้ฟังก์ชันการถ่ายโอนเพื่อใช้มัลติบูตได้ คุณเพียงต้องติดตั้งโปรแกรมการจัดการการบูตของระบบปฏิบัติการอื่นบนเซกเตอร์การบูตของพาร์ติชันอื่น เมื่อเริ่มโปรแกรมการจัดการการบูต คุณสามารถเลือกที่จะเริ่มระบบปฏิบัติการปัจจุบันหรือ เริ่มระบบปฏิบัติการปัจจุบันผ่านเมนู ถ่ายโอนไปยังโปรแกรมการจัดการการบูตอื่นเพื่อเริ่มระบบปฏิบัติการอื่น
ในรูปด้านล่าง โปรแกรมจัดการการบูตในบันทึกการบูตหลัก (MBR) ของเซกเตอร์แรกจะมีสองเมนู: M1, M2 ชี้ไปที่ระบบปฏิบัติการ Windows และ M2 ชี้ไปที่เซกเตอร์สำหรับบูตของพาร์ติชันอื่นซึ่งประกอบด้วย โปรแกรมการจัดการการบูตอีกโปรแกรมหนึ่งมีเมนูที่ชี้ไปที่ Linux
หากต้องการติดตั้งมัลติบูต วิธีที่ดีที่สุดคือติดตั้ง Windows ก่อนแล้วจึงติดตั้ง Linux เนื่องจาก Main Boot Record (MBR) จะถูกเขียนทับเมื่อติดตั้ง Windows Linux จึงสามารถเลือกติดตั้งโปรแกรมจัดการการบูตใน Main Boot Record (MBR) หรือบูตเซกเตอร์ของพาร์ติชันอื่น ๆ และสามารถตั้งค่าเมนูของโปรแกรมจัดการการบูตได้ .
BIOS ไม่สามารถอ่านตารางพาร์ติชัน GPT ได้ แต่ UEFI สามารถทำได้
การฟอร์แมตพาร์ติชันคือการสร้างระบบไฟล์บนพาร์ติชัน โดยทั่วไปพาร์ติชั่นสามารถฟอร์แมตได้ด้วยระบบไฟล์เดียวเท่านั้น แต่เทคโนโลยี เช่น ดิสก์อาร์เรย์ สามารถฟอร์แมตพาร์ติชั่นที่มีระบบไฟล์ได้หลายระบบ
ส่วนประกอบที่สำคัญที่สุดมีดังนี้:
นอกจากนี้ยังรวมถึง:
หมายความว่าบล็อกที่มีเนื้อหาของไฟล์อยู่กระจัดกระจายเกินไป
ขนาดบล็อกที่รองรับในระบบไฟล์ Ext2 คือ 1K, 2K และ 4K ขนาดที่แตกต่างกันจะจำกัดขนาดสูงสุดของไฟล์เดียวและระบบไฟล์
ขนาด | 1กิโลไบต์ | 2KB | 4KB |
---|---|---|---|
ไฟล์เดียวที่ใหญ่ที่สุด | 16GB | 256GB | 2TB |
ระบบไฟล์สูงสุด 2TB 8TB 16TB หนึ่งบล็อกสามารถใช้ได้เพียงไฟล์เดียวเท่านั้น และส่วนที่ไม่ได้ใช้จะสูญเปล่าโดยตรง ดังนั้น หากคุณต้องการจัดเก็บไฟล์ขนาดเล็กจำนวนมาก วิธีที่ดีที่สุดคือเลือกบล็อกที่เล็กกว่า
inode มีข้อมูลต่อไปนี้โดยเฉพาะ:
inode มีลักษณะดังต่อไปนี้:
ไอโหนดจะบันทึกหมายเลขบล็อกที่มีเนื้อหาไฟล์อยู่ แต่แต่ละบล็อกมีขนาดเล็กมาก ไฟล์ขนาดใหญ่ต้องใช้บล็อกนับแสนบล็อก ไอโหนดมีขนาดที่จำกัดและไม่สามารถอ้างอิงหมายเลขบล็อกจำนวนมากได้โดยตรง ดังนั้นจึงมีการใช้การอ้างอิงทางอ้อม การอ้างอิงทางอ้อมสองเท่า และทางอ้อมสามทาง การอ้างอิงทางอ้อมหมายความว่าบล็อกอ้างอิงที่บันทึกโดย inode จะบันทึกข้อมูลอ้างอิง
เมื่อสร้างไดเร็กทอรี ระบบจะจัดสรรไอโหนดและบล็อกอย่างน้อยหนึ่งบล็อก เนื้อหาที่บันทึกโดยบล็อกคือหมายเลขไอโหนดและชื่อไฟล์ของไฟล์ทั้งหมดในไดเร็กทอรี จะเห็นได้ว่า inode ของไฟล์นั้นไม่ได้บันทึกชื่อไฟล์ แต่ชื่อไฟล์จะถูกบันทึกไว้ในไดเร็กทอรี ดังนั้นการดำเนินการเช่นการเพิ่มไฟล์การลบไฟล์และการเปลี่ยนชื่อไฟล์จึงเกี่ยวข้องกับการอนุญาตของ w ไดเรกทอรี
หากไฟฟ้าดับกะทันหัน จะเกิดข้อผิดพลาดในระบบไฟล์ ตัวอย่างเช่น บล็อกบิตแมปได้รับการแก้ไขก่อนไฟฟ้าดับเท่านั้น แต่ข้อมูลไม่ได้ถูกเขียนลงในบล็อกจริงๆ ระบบไฟล์ ext3/ext4 มีฟังก์ชันบันทึก ซึ่งสามารถใช้เพื่อซ่อมแซมระบบไฟล์ได้
การติดตั้งใช้ไดเร็กทอรีเป็นจุดเข้าของระบบไฟล์ กล่าวคือ หลังจากเข้าสู่ไดเร็กทอรีแล้ว ข้อมูลระบบไฟล์จะสามารถอ่านได้
เพื่อรักษาความสอดคล้องในโครงสร้างไดเร็กทอรีของ Linux ที่แตกต่างกัน Filesystem Hierarchy Standard (FHS) จะระบุโครงสร้างไดเร็กทอรีของ Linux
ไดเร็กทอรีพื้นฐานที่สุดสามไดเร็กทอรีมีดังนี้:
ผู้ใช้มีสามประเภท ได้แก่ เจ้าของไฟล์ กลุ่ม และอื่นๆ ผู้ใช้ที่ต่างกันจะมีสิทธิ์ในไฟล์ที่แตกต่างกัน
เมื่อใช้ ls เพื่อดูไฟล์ ข้อมูลของไฟล์จะปรากฏขึ้น เช่น drwxr-xr-x. 3 root root 17 May 6 00:14 .config
ประเภทไฟล์ทั่วไปและความหมายคือ:
ในช่องสิทธิ์อนุญาตไฟล์ 9 หลัก ทุกๆ 3 หลักจะอยู่ในกลุ่ม และมีทั้งหมด 3 กลุ่ม แต่ละกลุ่มแสดงถึงสิทธิ์ของไฟล์สำหรับเจ้าของไฟล์ กลุ่มที่เป็นเจ้าของไฟล์ และบุคคลอื่น ตัวเลขสามหลักในชุดสิทธิ์คือสิทธิ์ r, w และ x ซึ่งระบุว่าสามารถอ่าน เขียนได้ และปฏิบัติการได้
เวลาไฟล์มีสามประเภท:
แสดงรายการข้อมูลของไฟล์หรือไดเร็กทอรี ข้อมูลของไดเร็กทอรีคือไฟล์ที่มีอยู่ในนั้น
# # ls [-aAdfFhilnrRSt] file|dir
-a : 列出全部的文件
-d : 仅列出目录本身
-l : 以长数据串行列出,包含文件的属性与权限等等数据
cd [相对路径或绝对路径]
# # mkdir [-mp] 目录名称
-m : 配置目录权限
-p : 递归创建目录
rmdir [-p] 目录名称
-p : 递归删除目录
# # touch [-acdmt] filename
-a : 更新 atime
-c : 更新 ctime,若该文件不存在则不建立新文件
-m : 更新 mtime
-d : 后面可以接更新日期而不使用当前日期,也可以使用 --date= "日期或时间"
-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]
คัดลอกไฟล์. หากมีไฟล์ต้นฉบับมากกว่าสองไฟล์ ไฟล์ปลายทางจะต้องเป็นไดเร็กทอรี
cp [-adfilprsu] source destination
-a : 相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明
-d : 若来源文件为链接文件,则复制链接文件属性而非文件本身
-i : 若目标文件已经存在时,在覆盖前会先询问
-p : 连同文件的属性一起复制过去
-r : 递归持续复制
-u : destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制
--preserve=all : 除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了
# # rm [-fir] 文件或目录
-r : 递归删除
ย้ายไฟล์
# # mv [-fiu] source destination
# # mv [options] source1 source2 source3 .... directory
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
ชุดสิทธิ์สามารถแสดงเป็นตัวเลขได้ ในขณะนี้ ชุดสิทธิ์สามบิตถือเป็นบิตของเลขฐานสอง น้ำหนักของแต่ละบิตจากซ้ายไปขวาคือ 4, 2 และ 1 คือน้ำหนักดิจิทัลที่สอดคล้องกับแต่ละสิทธิ์ ค่าคือ r: 4, w: 2, x: 1
# # chmod [-R] xyz dirname/filename
ตัวอย่าง: เปลี่ยนการอนุญาตของไฟล์ .bashrc เป็น -rwxr-xr--
# # chmod 754 .bashrc
คุณยังสามารถใช้สัญลักษณ์เพื่อตั้งค่าการอนุญาตได้
# # chmod [ugoa] [+-=] [rwx] dirname/filename
- u: 拥有者
- g: 所属群组
- o: 其他人
- a: 所有人
- +: 添加权限
- -: 移除权限
- =: 设定权限
ตัวอย่าง: เพิ่มสิทธิ์การเขียนลงในไฟล์ .bashrc สำหรับผู้ใช้ทั้งหมด
# # chmod a+w .bashrc
**ชื่อไฟล์ไม่ได้จัดเก็บไว้ในเนื้อหาของไฟล์ แต่อยู่ในไดเร็กทอรีที่ไฟล์นั้นอยู่ **ดังนั้นการอนุญาตไฟล์จึงไม่สามารถแก้ไขชื่อไฟล์ได้ ไดเร็กทอรีจัดเก็บรายชื่อไฟล์ และการอนุญาตของไดเร็กทอรีคือการอนุญาตในรายการไฟล์
**ดังนั้น การอนุญาต r ของไดเร็กทอรีหมายความว่าสามารถอ่านรายการไฟล์ได้ การอนุญาต w หมายความว่ารายการไฟล์สามารถแก้ไขได้ โดยเฉพาะการเพิ่ม ลบไฟล์ และการแก้ไขชื่อไฟล์ ไดเร็กทอรีเป็นไดเร็กทอรีที่ใช้งานได้ และการอนุญาต x สามารถทำให้ไดเร็กทอรีเป็นไดเร็กทอรีที่ทำงานได้ มันเป็นพื้นฐานของสิทธิ์ r และ w หากไดเร็กทอรีไม่สามารถสร้างไดเร็กทอรีที่ใช้งานได้ จะไม่มีวิธีการอ่านรายการไฟล์หรือแก้ไข รายการไฟล์ -
# # ln [-sf] source_filename dist_filename
-s : 默认是 hard link,加 -s 为 symbolic link
-f : 如果目标文件存在时,先删除目标文件
สร้างรายการในไดเร็กทอรีเพื่อบันทึกชื่อไฟล์และหมายเลขไอโหนด ลบรายการใดๆ และไฟล์จะยังคงอยู่ ตราบใดที่จำนวนการอ้างอิงไม่เป็นศูนย์ มีข้อจำกัดดังต่อไปนี้: ไม่สามารถขยายระบบไฟล์และไม่สามารถลิงก์ไดเร็กทอรีได้
# # ln /etc/crontab .
# # ll -i /etc/crontab crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
ไฟล์ลิงก์สัญลักษณ์จะบันทึกเส้นทางที่แน่นอนของไฟล์ต้นฉบับ และจะอยู่ที่ไฟล์ต้นฉบับเมื่ออ่าน ซึ่งสามารถเข้าใจได้ว่าเป็นทางลัดไปยัง Windows เมื่อไฟล์ต้นฉบับถูกลบ ไฟล์ที่เชื่อมโยงจะไม่สามารถเปิดได้ สามารถสร้างลิงก์ไปยังไดเร็กทอรีได้
# # ll -i /etc/crontab /root/crontab2
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 - > /etc/crontab
# # cat [-AbEnTv] filename
-n : 打印出行号,连同空白行也会有行号,-b 不会
# # head [-n number] filename
-n : 后面接数字,代表显示几行的意思
ค้นหาคำสั่ง
# # which [-a] command
-a : 将所有指令列出,而不是只列第一个
ค้นหาไฟล์ เร็วกว่าเพราะค้นหาเฉพาะไดเร็กทอรีเพียงไม่กี่ไดเร็กทอรีเท่านั้น ## โดยที่ [-bmsu] dirname/ชื่อไฟล์
ค้นหาไฟล์ คุณสามารถค้นหาโดยใช้คำหลักหรือนิพจน์ทั่วไป Locate ใช้ฐานข้อมูล /var/lib/mlocate/ เพื่อค้นหา โดยจะจัดเก็บไว้ในหน่วยความจำและอัปเดตวันละครั้ง ดังนั้นคุณจึงไม่สามารถใช้ Locate เพื่อค้นหาไฟล์ที่สร้างขึ้นใหม่ได้ คุณสามารถใช้ addeddb เพื่ออัพเดตฐานข้อมูลได้ทันที
# # locate [-ir] keyword
-r: 正则表达式
ค้นหาไฟล์ คุณสามารถค้นหาโดยใช้คุณสมบัติและการอนุญาตของไฟล์
# # find [basedir] [option]
example: find . -name " shadow* "
(1) ตัวเลือกที่เกี่ยวข้องกับเวลา
-mtime n : 列出在 n 天前的那一天修改过内容的文件
-mtime +n : 列出在 n 天之前 (不含 n 天本身) 修改过内容的文件
-mtime -n : 列出在 n 天之内 (含 n 天本身) 修改过内容的文件
-newer file : 列出比 file 更新的文件
(2) ตัวเลือกที่เกี่ยวข้องกับเจ้าของไฟล์และกลุ่ม
-uid n
-gid n
-user name
-group name
-nouser : 搜索拥有者不存在 /etc/passwd 的文件
-nogroup: 搜索所属群组不存在于 /etc/group 的文件
(3) ตัวเลือกที่เกี่ยวข้องกับการอนุญาตและชื่อไฟล์
-name filename
-size [+-]SIZE: 搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有: c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k
-type TYPE
-perm mode : 搜索权限等于 mode 的文件
-perm -mode : 搜索权限包含 mode 的文件
-perm /mode : 搜索权限包含任一 mode 的文件
มีชื่อไฟล์บีบอัดจำนวนมากภายใต้ Linux ชื่อทั่วไปมีดังนี้:
ส่วนขยาย | คอมเพรสเซอร์ |
---|---|
*.ซ | บีบอัด |
*.zip | ซิป |
*.gz | gzip |
*.bz2 | bzip2 |
*.xz | xz |
*.tar | ข้อมูลที่จัดทำแพ็กเกจโดยโปรแกรม tar จะไม่ถูกบีบอัด |
*.tar.gz | ไฟล์ที่จัดทำแพ็กเกจโดยโปรแกรม tar และบีบอัดโดย gzip |
*.tar.bz2 | ไฟล์ที่แพ็กเกจโดยโปรแกรม tar และบีบอัดโดย bzip2 |
*.tar.xz | ไฟล์ที่แพ็กเกจโดยโปรแกรม tar และบีบอัดโดย xz |
gzip เป็นคำสั่งบีบอัดที่ใช้กันอย่างแพร่หลายใน Linux และสามารถขยายขนาดไฟล์ที่บีบอัดด้วยการบีบอัด zip และ gzip
หลังจากการบีบอัด gzip ไฟล์ต้นฉบับจะไม่มีอยู่อีกต่อไป มีระดับการบีบอัดให้เลือกถึง 9 ระดับ คุณสามารถใช้ zcat, zmore และ zless เพื่ออ่านเนื้อหาของไฟล์บีบอัดได้
$ gzip [-cdtv#] filename
-c : 将压缩的数据输出到屏幕上
-d : 解压缩
-t : 检验压缩文件是否出错
-v : 显示压缩比等信息
-# # : ## 为数字的意思,代表压缩等级,数字越大压缩比越高,默认为 6
ให้อัตราส่วนการบีบอัดที่สูงกว่า gzip ดูคำสั่ง: bzcat, bzmore, bzless, bzgrep
$ bzip2 [-cdkzv#] filename
-k : 保留源文件
ให้อัตราส่วนการบีบอัดที่ดีกว่า bzip2 จะเห็นได้ว่าอัตราส่วนการบีบอัดของ gzip, bzip2 และ xz ได้รับการปรับให้เหมาะสมอย่างต่อเนื่อง อย่างไรก็ตาม ควรสังเกตว่ายิ่งอัตราส่วนการอัดสูงเท่าไร เวลาการอัดก็จะนานขึ้นเท่านั้น
ดูคำสั่ง: xzcat, xzmore, xzless, xzgrep
$ xz [-dtlkc#] filename
คำสั่งการบีบอัดสามารถบีบอัดไฟล์ได้เพียงไฟล์เดียว ในขณะที่แพ็กสามารถแพ็กหลายไฟล์เป็นไฟล์ขนาดใหญ่ไฟล์เดียวได้ Tar ไม่เพียงแต่ใช้สำหรับบรรจุภัณฑ์เท่านั้น แต่คุณยังสามารถใช้ gip, bzip2 และ xz เพื่อบีบอัดไฟล์ที่บรรจุไว้ได้อีกด้วย
$ tar [-z | -j | -J] [cv] [-f 新建的 tar 文件] filename... ==打包压缩
$ tar [-z | -j | -J] [tv] [-f 已有的 tar 文件] ==查看
$ tar [-z | -j | -J] [xv] [-f 已有的 tar 文件] [-C 目录] ==解压缩
-z : 使用 zip;
-j : 使用 bzip2;
-J : 使用 xz;
-c : 新建打包文件;
-t : 查看打包文件里面有哪些文件;
-x : 解打包或解压缩的功能;
-v : 在压缩/解压缩的过程中,显示正在处理的文件名;
-f : filename: 要处理的文件;
-C 目录 : 在特定目录解压缩。
การใช้งาน | คำสั่ง |
---|---|
แพ็คและบีบอัด | tar -jcv -f filename.tar.bz2 ชื่อของไฟล์หรือไดเร็กทอรีที่จะบีบอัด |
ตรวจสอบ | tar -jtv -f ชื่อไฟล์.tar.bz2 |
แตกไฟล์ | tar -jxv -f filename.tar.bz2 -C Directory ที่จะขยายขนาด |
คุณสามารถร้องขอเคอร์เนลเพื่อให้บริการผ่านเชลล์ได้ และ Bash ก็คือเชลล์ประเภทหนึ่ง
ประวัติคำสั่ง: บันทึกคำสั่งที่ใช้ คำสั่งและการเสร็จสิ้นไฟล์: ปุ่มลัด: แท็บ การตั้งชื่อนามแฝง: ตัวอย่างเช่น lm เป็นนามแฝงของเชลล์สคริปต์ ls -al Wildcard: ตัวอย่างเช่น ls -l /usr/bin/X* รายการ /usr/ bin ไฟล์ทั้งหมดด้านล่างนี้ขึ้นต้นด้วย X
$
ก่อนตัวแปร หรือคุณสามารถใช้แบบฟอร์ม ${}
;$ x=abc
$ echo $x
$ echo ${x}
หากมีช่องว่างในเนื้อหาตัวแปร ต้องใช้เครื่องหมายคำพูดคู่หรือเครื่องหมายคำพูดเดี่ยว
x="lang is $LANG"
จากนั้นค่าของ x คือ lang คือ zh_TW.UTF-8;x='lang is $LANG'
ดังนั้นค่าของ x คือ lang คือ $LANG
指令
หรือ $(指令)
เพื่อกำหนดผลการดำเนินการของคำสั่งให้กับตัวแปร ตัวอย่างเช่น version=$(uname -r) ค่าของ version คือ 4.15.0-22-generic คุณสามารถใช้คำสั่งส่งออกเพื่อแปลงตัวแปรแบบกำหนดเองให้เป็นตัวแปรสภาพแวดล้อมได้ ตัวแปรสภาพแวดล้อมสามารถใช้ในโปรแกรมย่อยได้ โปรแกรมย่อยที่เรียกว่า Bash ที่สร้างโดย Bash ปัจจุบัน ตัวแปร Bash สามารถประกาศเป็นอาร์เรย์และตัวเลขจำนวนเต็มได้ โปรดทราบว่าประเภทตัวเลขไม่มีตัวเลขทศนิยม หากไม่ได้ประกาศ ค่าเริ่มต้นจะเป็นประเภทสตริง ตัวแปรจะถูกประกาศโดยใช้คำสั่ง Dec: $ declare [-aixr] variable
-a : 定义为数组类型
-i : 定义为整数类型
-x : 定义为环境变量
-r : 定义为 readonly 类型
ใช้ [ ] เพื่อสร้างดัชนีอาร์เรย์:
$ array[1]=a
$ array[2]=b
$ echo ${array[1]}
$PATH
แล้วดำเนินการการเปลี่ยนเส้นทางหมายถึงการใช้ไฟล์แทนอินพุตมาตรฐาน เอาต์พุตมาตรฐาน และเอาต์พุตข้อผิดพลาดมาตรฐาน
1 | รหัส | ตัวดำเนินการ |
---|---|---|
อินพุตมาตรฐาน (stdin) | 0 | < หรือ << |
เอาต์พุตมาตรฐาน (stdout) | 1 | > หรือ >> |
เอาต์พุตข้อผิดพลาดมาตรฐาน (stderr) | 2 | 2> หรือ 2>> |
ลูกศรหนึ่งอันบ่งบอกถึงการเปลี่ยนเส้นทางในลักษณะการเขียนทับ ในขณะที่ลูกศรสองอันบ่งชี้ถึงการเปลี่ยนเส้นทางในลักษณะต่อท้าย
เอาต์พุตมาตรฐานที่ไม่จำเป็นและเอาต์พุตข้อผิดพลาดมาตรฐานสามารถเปลี่ยนเส้นทางไปที่ /dev/null ซึ่งเทียบเท่ากับการทิ้งลงในถังขยะ หากคุณต้องการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานและเอาต์พุตข้อผิดพลาดมาตรฐานไปยังไฟล์พร้อมกัน คุณต้องแปลงเอาต์พุตหนึ่งเป็นเอาต์พุตอื่น ตัวอย่างเช่น 2>&1 หมายถึงการแปลงเอาต์พุตข้อผิดพลาดมาตรฐานเป็นเอาต์พุตมาตรฐาน
$ find /home -name .bashrc > list 2>&1
$ nohup latte-dock --replace > /dev/null 2>&1 & # 没有任何输出的后台任务
Pipelining คือการใช้เอาต์พุตมาตรฐานของคำสั่งหนึ่งเป็นอินพุตมาตรฐานของคำสั่งอื่น Pipelining สามารถใช้ได้เมื่อข้อมูลต้องได้รับการประมวลผลในหลายขั้นตอนก่อนที่เราจะได้สิ่งที่เราต้องการ
ใช้ |. ระหว่างคำสั่งเพื่อแยกคำสั่งไปป์ไลน์แต่ละรายการ
$ ls -al /etc | less
cut จะแยกข้อมูลและแยกส่วนที่ต้องการ กระบวนการแบ่งส่วนดำเนินไปทีละบรรทัด
$ cut
-d : 分隔符
-f : 经过 -d 分隔后,使用 -f n 取出第 n 个区间
-c : 以字符为单位取出区间
$ last
root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in
root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 (06:33)
root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 (01:16)
$ last | cut -d ' ' -f 1
$ export
declare -x HISTCONTROL= " ignoredups "
declare -x HISTSIZE= " 1000 "
declare -x HOME= " /home/dmtsai "
declare -x HOSTNAME= " study.centos.vbird "
.....(其他省略).....
$ export | cut -c 12-
ใช้ในการเรียงลำดับ
$ sort [-fbMnrtuk] [file or stdin]
-f : 忽略大小写
-b : 忽略最前面的空格
-M : 以月份的名字来排序,例如 JAN,DEC
-n : 使用数字
-r : 反向排序
-u : 相当于 unique,重复的内容只出现一次
-t : 分隔符,默认为 tab
-k : 指定排序的区间
$ cat /etc/passwd | sort -t ' : ' -k 3
root:x:0:0:root:/root:/bin/bash
dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash
alex:x:1001:1002::/home/alex:/bin/bash
arod:x:1002:1003::/home/arod:/bin/bash
คุณสามารถรับข้อมูลซ้ำได้เพียงข้อมูลเดียวเท่านั้น
$ uniq [-ic]
-i : 忽略大小写
-c : 进行计数
$ last | cut -d ' ' -f 1 | sort | uniq -c
1
6 (unknown
47 dmtsai
4 reboot
7 root
1 wtmp
การเปลี่ยนเส้นทางเอาต์พุตจะเปลี่ยนเส้นทางเนื้อหาเอาต์พุตไปยังไฟล์ และทีไม่เพียงแต่สามารถทำหน้าที่นี้ให้สมบูรณ์เท่านั้น แต่ยังรักษาเอาต์พุตบนหน้าจอไว้ด้วย นั่นคือเมื่อใช้คำสั่ง tee เอาต์พุตจะถูกส่งไปยังทั้งไฟล์และหน้าจอ
$ tee [-a] file
ใช้เพื่อลบอักขระในบรรทัดหรือแทนที่อักขระ
$ tr [-ds] SET1 ...
-d : 删除行中 SET1 这个字符串
$ last | tr ' [a-z] ' ' [A-Z] '
แปลงอักขระแท็บเป็นอักขระช่องว่าง
$ col [-xb]
-x : 将 tab 键转换成对等的空格键
แปลงแท็บเป็นช่องว่างตามจำนวนที่กำหนด ค่าเริ่มต้นคือ 8
$ expand [-t] file
-t : tab 转为空格的数量
รวมแถวที่มีข้อมูลเดียวกันเข้าด้วยกัน
$ join [-ti12] file1 file2
-t : 分隔符,默认为空格
-i : 忽略大小写的差异
-1 : 第一个文件所用的比较字段
-2 : 第二个文件所用的比较字段
วางสองบรรทัดเข้าด้วยกันโดยตรง
$ paste [-d] file1 file2
-d : 分隔符,默认为 tab
split แบ่งไฟล์ออกเป็นหลายไฟล์
$ split [-bl] file PREFIX
-b : 以大小来进行分区,可加单位,例如 b, k, m 等
-l : 以行数来进行分区。
- PREFIX : 分区文件的前导名称
g/re/p (ค้นหานิพจน์ทั่วไปและพิมพ์ทั่วโลก) ใช้นิพจน์ทั่วไปเพื่อค้นหาและพิมพ์ทั่วโลก
$ grep [-acinv] [--color = auto] 搜寻字符串 filename
-c : 统计个数
-i : 忽略大小写
-n : 输出行号
-v : 反向选择,也就是显示出没有 搜寻字符串 内容的那一行
--color=auto : 找到的关键字加颜色显示
$ grep -n ' the ' regular_express.txt
8:I can ' t finish the test.
12:the symbol ' * ' is represented as start.
15:You are the best is mean you are the no. 1.
16:The world Happy is the same with "glad".
18:google is the best tools for search keyword
เนื่องจาก { และ } มีความหมายพิเศษในเชลล์ จึงต้องหลีกโดยใช้อักขระหลีก
$ grep -n ' go{2,5}g ' regular_express.txt
สำหรับเอาต์พุตที่จัดรูปแบบแล้ว มันไม่ได้อยู่ในคำสั่งไปป์ไลน์ คุณต้องใช้แบบฟอร์ม $() เมื่อส่งข้อมูลไปยัง printf
$ printf ' %10s %5i %5i %5i %8.2f n ' $( cat printf.txt )
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
สร้างขึ้นโดย Alfred Aho, Peter Weinberger และ Brian Kernighan ชื่อ awk เป็นชื่อย่อของผู้ก่อตั้งทั้งสามคน
awk ประมวลผลทีละบรรทัด หน่วยการประมวลผลที่เล็กที่สุดคือฟิลด์ วิธีการตั้งชื่อของแต่ละฟิลด์คือ