Skip to main content

เปิดคำสั่ง Linux Command และ Unix Command

พื้นฐาน Linux #1 - การใช้คำสั่งเบื้องต้น (เมษายน 2025)

พื้นฐาน Linux #1 - การใช้คำสั่งเบื้องต้น (เมษายน 2025)
Anonim

สรุป

#include #include #include int เปิด (const char * ชื่อพา ธ , int ธง ); int เปิด (const char * ชื่อพา ธ , int ธง , mode_t โหมด ); int creat (const char * ชื่อพา ธ , mode_t โหมด );

ลักษณะ

เปิด() คำสั่ง linux ของระบบเรียกใช้เพื่อแปลงชื่อพา ธ ไปเป็น descriptor ไฟล์ (ขนาดเล็กไม่ใช่จำนวนเต็มลบสำหรับใช้ในภายหลัง I / O เช่นเดียวกับ อ่าน, เขียนฯลฯ ) เมื่อการเรียกประสบความสำเร็จตัวบอกลักษณะไฟล์ที่ส่งคืน wil จะเป็น descriptor ไฟล์ต่ำสุดที่ไม่ได้เปิดอยู่สำหรับกระบวนการนี้ สายนี้สร้างไฟล์ที่เปิดใหม่ซึ่งไม่ได้ใช้ร่วมกับกระบวนการอื่นใด (แต่แชร์ไฟล์ที่เปิดอาจเกิดขึ้นผ่านทางส้อม(2) call ระบบ) descriptor ไฟล์ใหม่ถูกตั้งค่าให้ยังคงเปิดอยู่ข้าม exec functions (ดูfcntl(2)) ไฟล์ออฟเซทตั้งค่าไว้ที่จุดเริ่มต้นของไฟล์

พารามิเตอร์ ธง เป็นหนึ่งในO_RDONLY, O_WRONLY หรือO_RDWR ซึ่งขอเปิดแฟ้มอ่านอย่างเดียวเขียนอย่างเดียวหรืออ่าน / เขียนตามลำดับบิต - หรือ 'd มีศูนย์หรือมากกว่าต่อไปนี้:

O_CREAT

หากไฟล์ไม่มีอยู่ไฟล์จะถูกสร้างขึ้น เจ้าของ (ID ผู้ใช้) ของไฟล์ถูกตั้งค่าเป็น ID ผู้ใช้ที่มีประสิทธิภาพของกระบวนการ ความเป็นเจ้าของกลุ่ม (ID กลุ่ม) ถูกตั้งค่าเป็น ID กลุ่มที่มีประสิทธิภาพของกระบวนการหรือไปยัง ID กลุ่มของไดเร็กทอรีหลัก (ขึ้นอยู่กับชนิดของระบบไฟล์และตัวเลือก mount และโหมดของไดเร็กทอรีหลักดูเช่นส่วนกำหนดค่า ตัวเลือก bsdgroups และ sysvgroups ของระบบไฟล์ ext2 ตามที่อธิบายไว้ในภูเขา(8)).

O_EXCL

เมื่อใช้กับO_CREATหากไฟล์มีอยู่แล้วจะเป็นข้อผิดพลาดและเปิด จะล้มเหลว ในบริบทนี้การเชื่อมโยงแบบสัญลักษณ์มีอยู่โดยไม่คำนึงถึงจุดที่ต้องการO_EXCL เสียบนระบบไฟล์ NFS โปรแกรมที่พึ่งพามันสำหรับการปฏิบัติงานล็อคจะมีสภาพการแข่งขัน โซลูชันสำหรับการล็อกไฟล์อะตอมโดยใช้ไฟล์ล็อกคือการสร้างไฟล์ที่ไม่ซ้ำกันในไฟล์ fs เดียวกัน (เช่นการรวมชื่อโฮสต์และ pid) ใช้ลิงก์ (2) เพื่อสร้างลิงก์ไปยังไฟล์ล็อกไฟล์ ถ้าการเชื่อมโยง () ส่งกลับ 0 ล็อกจะสำเร็จ มิฉะนั้นให้ใช้ สถิติ(2) ในไฟล์ที่ไม่ซ้ำกันเพื่อตรวจสอบว่าจำนวนการเชื่อมโยงได้เพิ่มขึ้นเป็น 2 ซึ่งในกรณีนี้การล็อกยังทำได้สำเร็จ

O_NOCTTY

ถ้า ชื่อพา ธ หมายถึงอุปกรณ์ปลายทาง --- ดูTTY(4) --- มันจะไม่กลายเป็นเครื่องควบคุมของกระบวนการแม้ว่ากระบวนการนี้จะไม่มี

O_TRUNC

ถ้าไฟล์มีอยู่แล้วและเป็นไฟล์ปกติและโหมดเปิดอนุญาตให้เขียน (เช่น O_RDWR หรือ O_WRONLY) จะถูกตัดทอนให้เป็นความยาว 0 ถ้าไฟล์เป็นไฟล์ FIFO หรืออุปกรณ์ปลายทางธง O_TRUNC จะถูกละเว้น มิฉะนั้นผลของ O_TRUNC ยังไม่ระบุ (ใน Linux หลายเวอร์ชันจะไม่มีผลใด ๆ ในเวอร์ชันอื่น ๆ จะแสดงข้อผิดพลาด)

O_APPEND

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

O_NONBLOCK หรือO_NDELAY

เมื่อเป็นไปได้ไฟล์จะถูกเปิดในโหมด non-blocking ทั้งเปิด หรือการดำเนินงานใด ๆ ที่ตามมาในตัวอธิบายไฟล์ที่ถูกส่งคืนจะทำให้กระบวนการโทรรอ สำหรับการจัดการ FIFO (ท่อที่มีชื่อ) โปรดดูที่FIFO(4) โหมดนี้ไม่จำเป็นต้องมีผลกับไฟล์อื่นนอกจาก FIFO

O_SYNC

เปิดไฟล์สำหรับ I / O แบบซิงโครนัส ใดเขียนs ใน descriptor ไฟล์ผลลัพธ์จะบล็อกกระบวนการเรียกจนกว่าจะมีการเขียนข้อมูลทางกายภาพให้กับฮาร์ดแวร์ต้นแบบ ดูข้อ จำกัด ด้านล่างนี้

O_NOFOLLOW

ถ้า ชื่อพา ธ เป็นลิงค์สัญลักษณ์แล้วเปิดไม่ นี่คือส่วนขยาย FreeBSD ซึ่งเพิ่มลงใน Linux ในเวอร์ชัน 2.1.126 การเชื่อมโยงสัญลักษณ์ในคอมโพเนนต์ก่อนหน้าของพา ธ ชื่อจะยังคงปฏิบัติตาม ส่วนหัวของ glibc 2.0.100 และภายหลังรวมถึงคำจำกัดความของธงนี้ เมล็ดก่อน 2.1.126 จะไม่สนใจถ้าใช้ .

O_DIRECTORY

ถ้า ชื่อพา ธ ไม่ใช่ไดเรกทอรีทำให้เปิดไม่สำเร็จ ธงนี้เป็น Linux เฉพาะและถูกเพิ่มลงใน kernel version 2.1.126 เพื่อหลีกเลี่ยงปัญหาการปฏิเสธการให้บริการถ้าopendir(3) เรียกว่า FIFO หรืออุปกรณ์เทป แต่ไม่ควรใช้นอกการใช้งานopendir.

O_DIRECT

พยายามลดผลกระทบจากแคชของ I / O ไปยังและจากไฟล์นี้ โดยทั่วไปจะทำให้ประสิทธิภาพลดลง แต่จะเป็นประโยชน์ในสถานการณ์พิเศษเช่นเมื่อแอปพลิเคชันทำแคชของตนเอง ไฟล์ I / O จะทำขึ้นโดยตรงกับ / จากบัฟเฟอร์พื้นที่ของผู้ใช้ I / O เป็นแบบซิงโครนัสนั่นคือเมื่อเสร็จสิ้นการ อ่าน(2) หรือเขียน(2) สายระบบข้อมูลมีการรับประกันว่าจะได้รับการโอน ขนาดการโอนย้ายและการจัดตำแหน่งของบัฟเฟอร์ของผู้ใช้และการชดเชยไฟล์ต้องทั้งหมดเป็นจำนวนมากของขนาดบล็อกตรรกะของระบบไฟล์ธงนี้ได้รับการสนับสนุนในระบบ Unix หลายแบบ สนับสนุนภายใต้ Linux ใน kernel version 2.4.10อินเทอร์เฟซที่คล้ายคลึงกันเกี่ยวกับความหมายสำหรับอุปกรณ์ป้องกันถูกอธิบายไว้ในดิบ(8).

O_ASYNC

สร้างสัญญาณ (SIGIO ตามค่าเริ่มต้น แต่สามารถเปลี่ยนแปลงได้ผ่านทางfcntl(2)) เมื่อ input หรือ output เป็นไปได้ใน descriptor file นี้ คุณลักษณะนี้มีให้สำหรับเทอร์มินัลเทอร์มินัลหลอกและซ็อกเก็ตเท่านั้น ดูfcntl(2) สำหรับรายละเอียดเพิ่มเติม

O_LARGEFILE

ในระบบ 32 บิตที่สนับสนุนระบบไฟล์ขนาดใหญ่อนุญาตให้ไฟล์ที่มีขนาดไม่สามารถแสดงใน 31 บิตที่จะเปิดขึ้น

บางส่วนของธงที่ไม่จำเป็นเหล่านี้สามารถเปลี่ยนแปลงได้โดยใช้fcntl หลังจากไฟล์ถูกเปิดขึ้น

อาร์กิวเมนต์ โหมด ระบุสิทธิ์ที่จะใช้ในกรณีที่ไฟล์ใหม่ถูกสร้างขึ้น มันถูกแก้ไขโดยกระบวนการของumask ในทางปกติ: สิทธิ์ของไฟล์ที่สร้างขึ้นคือ(โหมด & ~ umask). โปรดทราบว่าโหมดนี้ใช้กับการเข้าถึงไฟล์ที่สร้างขึ้นใหม่ในอนาคตเท่านั้นเปิดเรียกว่าสร้างไฟล์แบบอ่านอย่างเดียวอาจทำให้อ่าน / เขียนไฟล์อธิบายได้ดี

มีการกำหนดค่าคงที่ต่อไปนี้ไว้ โหมด :

S_IRWXU

00700 ผู้ใช้ (เจ้าของไฟล์) ได้อ่าน, เขียนและเรียกใช้สิทธิ์

S_IRUSR (S_IREAD)

ผู้ใช้มีสิทธิ์อ่านแล้ว

S_IWUSR (S_IWRITE)

00200 ผู้ใช้มีสิทธิ์เขียน

S_IXUSR (S_IEXEC)

ผู้ใช้ 00100 ได้รับอนุญาตให้ดำเนินการ

S_IRWXG

00070 กลุ่มได้อ่านอนุญาตเขียนและดำเนินการ

S_IRGRP

กลุ่ม 00040 ได้รับอนุญาตอ่านแล้ว

S_IWGRP

กลุ่ม 00020 มีสิทธิ์ในการเขียน

S_IXGRP

00010 กลุ่มได้รับอนุญาตให้ดำเนินการ

S_IRWXO

00007 คนอื่น ๆ อ่าน, เขียนและดำเนินการได้รับอนุญาต

S_IROTH

00004 คนอื่น ๆ ได้รับอนุญาตอ่าน

S_IWOTH

00002 คนอื่น ๆ ได้รับอนุญาตให้เขียน

S_IXOTH

00001 คนอื่น ๆ ได้รับอนุญาตให้ดำเนินการ

โหมด ต้องระบุเมื่อO_CREAT อยู่ใน ธง และจะถูกละเว้นเป็นอย่างอื่น

creat เท่ากับเปิด กับ ธง เท่ากับO_CREAT | O_WRONLY | O_TRUNC.

คืนมูลค่า

เปิด และcreat return descriptor ไฟล์ใหม่หรือ -1 ถ้ามีข้อผิดพลาดเกิดขึ้น (ในกรณีนี้ errno ถูกตั้งไว้อย่างเหมาะสม) โปรดทราบว่าเปิด สามารถเปิดไฟล์พิเศษของอุปกรณ์ได้ แต่creat ไม่สามารถสร้างได้ - ใช้mknod(2) แทน

บนระบบไฟล์ NFS ที่มีการเปิดใช้งานการแมป UID,เปิด อาจส่งคืนคำอธิบายไฟล์ได้เช่น อ่าน(2) ถูกปฏิเสธด้วยEACCES. เนื่องจากไคลเอ็นต์ดำเนินการเปิด โดยการตรวจสอบสิทธิ์ แต่การทำแผนที่ UID จะดำเนินการโดยเซิร์ฟเวอร์เมื่อมีการอ่านและเขียนคำขอ

หากไฟล์ถูกสร้างใหม่ช่วงเวลา cime, ctime, mtime จะถูกตั้งค่าเป็นเวลาปัจจุบันและฟิลด์ ctime และ mtime ของไดเร็กทอรีหลักจะเป็นเช่นนั้น มิเช่นนั้นถ้าไฟล์ได้รับการแก้ไขเนื่องจากธง O_TRUNC เขตเวลา ctime และ mtime จะถูกตั้งค่าเป็นเวลาปัจจุบัน

ข้อผิดพลาด

EEXIST

ชื่อพา ธ มีอยู่แล้วและO_CREAT และO_EXCL ถูกใช้.

EISDIR

ชื่อพา ธ หมายถึงไดเร็กตอรี่และการเข้าถึงที่ร้องขอเกี่ยวกับการเขียน (นั่นคือ,O_WRONLY หรือO_RDWR ถูกตั้งค่าไว้)

EACCES

ไม่อนุญาตการเข้าถึงไฟล์ที่ต้องการหรือหนึ่งในไดเรกทอรีที่มา ชื่อพา ธ ไม่อนุญาตให้ใช้สิทธิ์ในการค้นหา (รัน) หรือไฟล์ยังไม่มีอยู่และเขียนการเข้าถึงไดเรกทอรีหลักไม่ได้รับอนุญาต

ENAMETOOLONG

ชื่อพา ธ ยาวเกินไป

ENOENT

O_CREAT ไม่ได้ถูกตั้งค่าไว้และไม่มีไฟล์ที่ระบุไว้ หรือคอมโพเนนต์ไดเรกทอรีใน ชื่อพา ธ ไม่มีหรือเป็นลิงก์สัญลักษณ์แบบ dangling

ENOTDIR

คอมโพเนนต์ที่ใช้เป็นไดเรกทอรีใน ชื่อพา ธ ไม่ใช่ในความเป็นจริงไดเรกทอรีหรือO_DIRECTORYถูกระบุและ ชื่อพา ธ ไม่ใช่ไดเรกทอรี

ENXIO

O_NONBLOCK | O_WRONLY ถูกตั้งค่าไฟล์ที่มีชื่อเป็น FIFO และไม่มีกระบวนการใดที่มีไฟล์เปิดอ่านอยู่ หรือไฟล์เป็นไฟล์พิเศษของอุปกรณ์และไม่มีอุปกรณ์ที่เกี่ยวข้องอยู่

ENODEV

ชื่อพา ธ หมายถึงอุปกรณ์พิเศษและไม่มีอุปกรณ์ที่เกี่ยวข้อง (นี่คือข้อผิดพลาดของเคอร์เนลใน Linux - ในสถานการณ์เช่นนี้ ENXIO ต้องถูกส่งคืน)

EROFS

ชื่อพา ธ หมายถึงไฟล์บนระบบแฟ้มแบบอ่านอย่างเดียวและได้รับการร้องขอการเขียน

ETXTBSY

ชื่อพา ธ หมายถึงภาพที่ปฏิบัติการซึ่งกำลังดำเนินการอยู่และได้รับการร้องขอการเขียน

EFAULT

ชื่อพา ธ จุดที่อยู่นอกพื้นที่ที่อยู่ที่สามารถเข้าถึงได้

ELOOP

มีการเชื่อมโยงสัญลักษณ์มากเกินไปในการแก้ไข ชื่อพา ธ , หรือO_NOFOLLOW ถูกระบุ แต่ ชื่อพา ธ เป็นลิงค์สัญลักษณ์

ENOSPC

ชื่อพา ธ ถูกสร้างขึ้น แต่อุปกรณ์ที่มี ชื่อพา ธ ไม่มีที่ว่างสำหรับไฟล์ใหม่

ENOMEM

มีหน่วยความจำเคอร์เนลไม่เพียงพอ

EMFILE

กระบวนการมีจำนวนไฟล์ที่เปิดอยู่แล้ว

ENFILE

จำกัด จำนวนไฟล์ที่เปิดอยู่ในระบบแล้ว

สอดคล้องกับ

SVr4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW และO_DIRECTORY ธงเป็น Linux เฉพาะ หนึ่งอาจจะต้องกำหนด_GNU_SOURCE แมโครเพื่อให้ได้คำจำกัดความ

ข้อ จำกัด

มีโปร่งใสมากมายที่มีพื้นฐานมาจาก NFS ซึ่งส่งผลต่อผู้อื่นO_SYNC และO_NDELAY.

POSIX จัดเตรียมตัวแปร I / O ที่ซิงโครไนซ์สามแบบให้สอดคล้องกับธงO_SYNC , O_DSYNC และ O_RSYNC. ขณะนี้ (2.1.130) มีความหมายเหมือนกันทั้งหมดภายใต้ Linux