เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | Contents | ถัดไป>

โอเปอร์เตอร์-ผู้ประกอบการ

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


เพื่อสร้างความสัมพันธ์เชิงตรรกะที่ซับซ้อนมากขึ้น เพื่อแสดงการทดสอบดังกล่าว เราสามารถทำได้:



[me@linuxbox ~]$ ค้นหา ~ \( -type f -not -perm 0600 \) -or \( -type d

-ไม่ -ดัด 0700 \)

[me@linuxbox ~]$ ค้นหา ~ \( -type f -not -perm 0600 \) -or \( -type d

-ไม่ -ดัด 0700 \)


เย้! มันคงดูแปลกๆ ทั้งหมดนี้คืออะไร? อันที่จริง ตัวดำเนินการนั้นไม่ได้ซับซ้อนขนาดนั้นเมื่อคุณได้รู้จักพวกมันแล้ว นี่คือรายการ:


ตาราง 17-4: ค้นหาตัวดำเนินการเชิงตรรกะ


คำอธิบายผู้ประกอบการ

คำอธิบายผู้ประกอบการ

-และ จับคู่ว่าการทดสอบทั้งสองด้านของผู้ปฏิบัติงานเป็นจริงหรือไม่ อาจสั้นลงถึง -a. โปรดทราบว่าเมื่อไม่มีตัวดำเนินการ -และ ถูกบอกเป็นนัยโดยปริยาย


ภาพ

หรือ จับคู่ว่าการทดสอบด้านใดด้านหนึ่งของโอเปอเรเตอร์เป็นจริงหรือไม่ อาจสั้นลงถึง -o.


ภาพ

ไม่มีt จับคู่ว่าการทดสอบตามตัวดำเนินการเป็นเท็จหรือไม่ อาจใช้อักษรย่อด้วยเครื่องหมายอัศเจรีย์ (!)


ภาพ

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


ภาพ


ด้วยรายชื่อโอเปอเรเตอร์ในมือ เรามาแยกโครงสร้างของเรา พบ สั่งการ. เมื่อมองจากระดับบนสุด เราจะเห็นว่าการทดสอบของเราจัดเป็นสองกลุ่มโดยคั่นด้วย an หรือ โอเปอเรเตอร์:

( นิพจน์ 1 ) -หรือ ( นิพจน์ 2 )

เรื่องนี้สมเหตุสมผล เนื่องจากเรากำลังค้นหาไฟล์ที่มีชุดสิทธิ์บางอย่างและสำหรับไดเรกทอรีที่มีชุดอื่น หากเรากำลังมองหาทั้งไฟล์และไดเร็กทอรี ทำไมต้องทำ


เราใช้ หรือ แทน -และ? เพราะเป็น พบ สแกนผ่านไฟล์และไดเร็กทอรี แต่ละอันจะได้รับการประเมินเพื่อดูว่าตรงกับการทดสอบที่ระบุหรือไม่ เราอยากรู้ว่ามันคือ ทั้ง ไฟล์ที่มีการอนุญาตที่ไม่ถูกต้อง or ไดเร็กทอรีที่มีการอนุญาตที่ไม่ถูกต้อง ไม่สามารถเป็นทั้งสองอย่างพร้อมกันได้ ดังนั้นถ้าเราขยายนิพจน์ที่จัดกลุ่ม เราจะเห็นได้ดังนี้:

( ไฟล์ที่มีผลเสีย ) - หรือ ( ไดเร็กทอรีที่มีผลเสีย )

ความท้าทายต่อไปของเราคือวิธีทดสอบ "การอนุญาตที่ไม่ถูกต้อง" เราจะทำอย่างนั้นได้อย่างไร? จริงๆแล้วเราไม่ได้ สิ่งที่เราจะทดสอบคือ "การอนุญาตที่ไม่ดี" เนื่องจากเรารู้ว่า "ภารกิจที่ดี" คืออะไร ในกรณีของไฟล์ เรากำหนด good เป็น 0600 และสำหรับไดเร็กทอรีเป็น 0700 นิพจน์ที่จะทดสอบไฟล์สำหรับการอนุญาต "ไม่ดี" คือ:

-type f -และ -not -perms 0600

และสำหรับไดเร็กทอรี:

-type d -และ -not -perms 0700

ดังที่ระบุไว้ในตารางตัวดำเนินการด้านบน -และ สามารถลบโอเปอเรเตอร์ออกได้อย่างปลอดภัย เนื่องจากมีการระบุโดยปริยาย ดังนั้นหากเรารวมทุกอย่างเข้าด้วยกัน เราจะได้คำสั่งสุดท้าย:

ค้นหา ~ ( -type f -not -perms 0600 ) -or ( -type d -not

-ดัด 0700 )

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

มีคุณลักษณะอื่นของตัวดำเนินการทางตรรกะที่สำคัญคือต้องเข้าใจ สมมติว่าเรามีนิพจน์สองนิพจน์คั่นด้วยตัวดำเนินการเชิงตรรกะ:

หมดอายุ1 - ผู้ปฏิบัติงาน หมดอายุ2

ในทุกกรณี, หมดอายุ1 จะดำเนินการเสมอ อย่างไรก็ตามโอเปอเรเตอร์จะพิจารณาว่า

ดำเนินการ expr2 นี่คือวิธีการทำงาน:


ตาราง 17-5: ค้นหา AND/OR Logic


ผลลัพธ์ของ หมดอายุ1

ผู้ประกอบการ

หมดอายุ2 คือ ...

จริง

-และ

ดำเนินการเสมอ

เท็จ

-และ

ไม่เคยทำ

จริง

หรือ

ไม่เคยทำ

เท็จ

หรือ

ดำเนินการเสมอ


ทำไมสิ่งนี้ถึงเกิดขึ้น? ทำเพื่อปรับปรุงประสิทธิภาพ เอามา -และ, ตัวอย่างเช่น. เรารู้ว่านิพจน์ หมดอายุ1 -และ หมดอายุ2 ไม่สามารถเป็นจริงได้หากผลลัพธ์ของ หมดอายุ1 is


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

โอเค มันช่วยให้ไปได้เร็วขึ้น ทำไมสิ่งนี้จึงสำคัญ? เป็นสิ่งสำคัญเพราะเราสามารถพึ่งพาพฤติกรรมนี้เพื่อควบคุมวิธีการดำเนินการดังที่เราจะได้เห็นในเร็วๆ นี้


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: