<ก่อนหน้านี้ | Contents | ถัดไป>
rm: ลบไดเร็กทอรี 'เก็บถาวร' หรือไม่ y
เราจะพูดถึงวิธีทำให้ตัวเลือกนี้เป็นค่าเริ่มต้นในบทที่ 7 ซึ่งจะกล่าวถึงการกำหนดสภาพแวดล้อมเชลล์ของคุณเอง
3.3.3. ค้นหาไฟล์
3.3.3.1. การใช้คุณสมบัติของเชลล์
ในตัวอย่างการย้ายไฟล์ เราได้เห็นแล้วว่าเชลล์สามารถจัดการไฟล์หลายไฟล์พร้อมกันได้อย่างไร ในตัวอย่างนี้ เชลล์จะค้นหาโดยอัตโนมัติว่าผู้ใช้หมายถึงอะไรจากข้อกำหนดระหว่างเครื่องหมายปีกกา "[" และ "]" เชลล์สามารถใช้แทนช่วงของตัวเลขและอักขระตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กได้เหมือนกัน นอกจากนี้ยังแทนที่อักขระได้มากเท่าที่คุณต้องการด้วยเครื่องหมายดอกจัน และอักขระเพียงตัวเดียวที่มีเครื่องหมายคำถาม
สามารถใช้การทดแทนได้ทุกประเภทพร้อมกัน เปลือกมีเหตุผลมากเกี่ยวกับเรื่องนี้ ตัวอย่างเช่น Bash shell ไม่มีปัญหากับนิพจน์เช่น ls นามสกุล/*/*/*[2-3].
ในเชลล์อื่น ๆ เครื่องหมายดอกจันมักใช้เพื่อลดความพยายามในการพิมพ์: ผู้คนจะป้อน cd ผบ* แทน cd ไดเรกทอรี. อย่างไรก็ตามใน Bash สิ่งนี้ไม่จำเป็นเนื่องจาก GNU เชลล์มีคุณสมบัติที่เรียกว่าชื่อไฟล์สมบูรณ์ หมายความว่าคุณสามารถพิมพ์อักขระสองสามตัวแรกของคำสั่ง (ที่ใดก็ได้) หรือไฟล์ (ในไดเร็กทอรีปัจจุบัน) และหากไม่มีความสับสนเกิดขึ้น เชลล์จะค้นหาว่าคุณหมายถึงอะไร ตัวอย่างเช่น
ในไดเร็กทอรีที่มีไฟล์จำนวนมาก คุณสามารถตรวจสอบว่ามีไฟล์ใดบ้างที่ขึ้นต้นด้วยตัวอักษร A เพียงแค่พิมพ์ ls A และกดปุ่ม แถบ คีย์สองครั้งแทนที่จะกด เข้าสู่. หากมีไฟล์เดียวที่ขึ้นต้นด้วย "A" ไฟล์นี้จะแสดงเป็นอาร์กิวเมนต์ของ ls (หรือคำสั่งเชลล์ใด ๆ สำหรับเรื่องนั้น) ทันที
3.3.3.2. ข้อใด
วิธีง่ายๆ ในการค้นหาไฟล์คือการใช้ ที่ คำสั่ง เพื่อค้นหาไฟล์ที่ต้องการในไดเร็กทอรีที่ระบุในพาธการค้นหาของผู้ใช้ แน่นอน เนื่องจากเส้นทางการค้นหามีเพียงเส้นทางไปยังไดเร็กทอรีที่มีโปรแกรมปฏิบัติการ ที่ ใช้งานไม่ได้กับไฟล์ทั่วไป NS ที่ คำสั่งมีประโยชน์ในการแก้ไขปัญหา "Command not Found" ในตัวอย่างด้านล่าง ผู้ใช้ Tina ไม่สามารถใช้ อะโครเร้ด โปรแกรมในขณะที่เพื่อนร่วมงานของเธอไม่มีปัญหาใด ๆ ในระบบเดียวกัน ปัญหาคล้ายกับ เส้นทาง ปัญหาในส่วนที่แล้ว: เพื่อนร่วมงานของ Tina บอกเธอว่าเขาสามารถดูโปรแกรมที่จำเป็นใน
/opt/acroread/bin แต่ไดเร็กทอรีนี้ไม่อยู่ในเส้นทางของเธอ:
ทีน่า:~> ซึ่ง acroread
/usr/bin/which: ไม่มี acroread ใน (/bin:/usr/bin:/usr/bin/X11)
ทีน่า:~> ซึ่ง acroread
/usr/bin/which: ไม่มี acroread ใน (/bin:/usr/bin:/usr/bin/X11)
ปัญหาสามารถแก้ไขได้โดยการให้พาธแบบเต็มไปยังคำสั่งเพื่อรัน หรือโดยการส่งออกเนื้อหาของ
ตัวแปรเส้นทาง:
ทีน่า:~> ส่งออก PATH=$PATH:/opt/acroread/bin
ทีน่า:~> เสียงสะท้อน $PATH
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
ทีน่า:~> ส่งออก PATH=$PATH:/opt/acroread/bin
ทีน่า:~> เสียงสะท้อน $PATH
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
การใช้ ที่ คำสั่งยังตรวจสอบเพื่อดูว่าคำสั่งนั้นเป็นนามแฝงสำหรับคำสั่งอื่นหรือไม่:
gerrit:~> ซึ่ง -a ls
ls มีนามแฝงว่า `ls -F --color=auto' ls คือ /bin/ls
gerrit:~> ซึ่ง -a ls
ls มีนามแฝงว่า `ls -F --color=auto' ls คือ /bin/ls
หากวิธีนี้ใช้ไม่ได้กับระบบของคุณ ให้ใช้ปุ่ม นามแฝง คำสั่ง:
จนถึง@www:~/mail$ นามแฝง ls
นามแฝง ls='ls --color'
จนถึง@www:~/mail$ นามแฝง ls
นามแฝง ls='ls --color'
3.3.3.3. ค้นหาและค้นหา
เหล่านี้เป็นเครื่องมือจริงที่ใช้เมื่อค้นหาเส้นทางอื่นนอกเหนือจากที่ระบุไว้ในเส้นทางการค้นหา NS พบ เครื่องมือที่รู้จักจาก UNIX นั้นทรงพลังมาก ซึ่งอาจเป็นต้นเหตุของไวยากรณ์ที่ค่อนข้างยากขึ้น GNU พบอย่างไรก็ตาม เกี่ยวข้องกับปัญหาทางไวยากรณ์ คำสั่งนี้ไม่เพียงแต่ช่วยให้คุณค้นหาชื่อไฟล์เท่านั้น แต่ยังยอมรับขนาดไฟล์ วันที่เปลี่ยนแปลงล่าสุด และคุณสมบัติไฟล์อื่นๆ เป็นเกณฑ์สำหรับการค้นหา การใช้งานทั่วไปคือการค้นหาชื่อไฟล์:
พบ -ชื่อ
สิ่งนี้สามารถตีความได้ว่า "ดูในไฟล์และไดเรกทอรีย่อยทั้งหมดที่อยู่ในเส้นทางที่กำหนด และพิมพ์ชื่อไฟล์ที่มีสตริงการค้นหาในชื่อ" (ไม่ใช่ในเนื้อหา)
แอปพลิเคชั่นอื่นของ พบ ใช้สำหรับค้นหาไฟล์ที่มีขนาดตามตัวอย่างด้านล่าง โดยที่ user ปีเตอร์
ต้องการค้นหาไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบันหรือหนึ่งในไดเร็กทอรีย่อยที่ใหญ่กว่า 5 MB:
ปีเตอร์:~> หา . -ขนาด +5000k
psychotic_chaos.mp3
ปีเตอร์:~> หา . -ขนาด +5000k
psychotic_chaos.mp3
หากคุณขุดในหน้าคนคุณจะเห็นว่า พบ ยังสามารถดำเนินการกับไฟล์ที่พบ ตัวอย่างทั่วไปคือการลบไฟล์ เป็นการดีที่สุดที่จะทดสอบครั้งแรกโดยไม่ใช้ -Exec ตัวเลือกที่เลือกไฟล์ที่ถูกต้อง หลังจากนั้นสามารถรันคำสั่งใหม่เพื่อลบไฟล์ที่เลือกได้ ด้านล่าง เราค้นหาไฟล์ที่ลงท้ายด้วย .tmp:
ปีเตอร์:~> หา . -name "*.tmp" -exec rm {} \;
ปีเตอร์:~>
ปีเตอร์:~> หา . -name "*.tmp" -exec rm {} \;
ปีเตอร์:~>
เพิ่มประสิทธิภาพ!
คำสั่งนี้จะเรียกใช้ rm มากที่สุดเท่าที่จะพบไฟล์ที่ตอบสนองความต้องการ ในกรณีที่เลวร้ายที่สุด อาจเป็นพันหรือล้านครั้ง นี่เป็นภาระในระบบของคุณ
วิธีการทำงานที่สมจริงยิ่งขึ้นคือการใช้ไพพ์ (|) และ xargs เครื่องมือกับ rm เป็นอาร์กิวเมนต์ ด้วยวิธีนี้ rm คำสั่งจะถูกเรียกเมื่อบรรทัดคำสั่งเต็มเท่านั้น แทนที่จะเป็นทุกไฟล์ ดูบทที่ 5 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้การเปลี่ยนเส้นทาง I/O เพื่อให้งานประจำวันง่ายขึ้น
ต่อมา (ในปี พ.ศ. 1999 ตามหน้าคู่มือ หลังจาก 20 ปีของ พบ), ค้นหา ได้รับการพัฒนา โปรแกรมนี้ใช้ง่ายกว่า แต่มีข้อจำกัดมากกว่า พบเนื่องจากผลลัพธ์จะขึ้นอยู่กับฐานข้อมูลดัชนีไฟล์ที่อัพเดตเพียงวันละครั้งเท่านั้น ในทางกลับกัน การค้นหาใน ค้นหา ฐานข้อมูลใช้ทรัพยากรน้อยกว่า พบ จึงแสดงผลได้แทบจะในทันที
ลีนุกซ์ส่วนใหญ่ใช้ ค้นหา ทุกวันนี้ การค้นหาที่ปรับปรุงความปลอดภัย เวอร์ชั่นทันสมัยของ ค้นหา ที่ป้องกันไม่ให้ผู้ใช้ได้รับผลลัพธ์ที่พวกเขาไม่มีสิทธิ์ในการอ่าน ไฟล์ใน รากโฮมไดเร็กทอรีของเป็นตัวอย่างดังกล่าว ซึ่งปกติไม่สามารถเข้าถึงได้โดยสาธารณะ ผู้ใช้ที่ต้องการหาคนที่รู้เกี่ยวกับ C เชลล์อาจออกคำสั่ง ค้นหา .cshrcเพื่อแสดงผู้ใช้ทั้งหมดที่มีไฟล์การกำหนดค่าที่กำหนดเองสำหรับ C เชลล์ สมมติว่าผู้ใช้ ราก และ สัตว์ตัวเมีย กำลังรัน C เชลล์ จากนั้นเฉพาะไฟล์
/home/เจนนี่/.cshrc จะถูกแสดงไม่ใช่หนึ่งใน รากโฮมไดเร็กทอรีของ ในระบบส่วนใหญ่
ค้นหาเป็นลิงค์สัญลักษณ์ไปยังโปรแกรม slocate:
บิลลี่:~> ls -l /usr/bin/ค้นหา
lrwxrwxrwx 1 root slocate 7 ต.ค. 28 14:18 /usr/bin/locate -> slocate*
บิลลี่:~> ls -l /usr/bin/ค้นหา
lrwxrwxrwx 1 root slocate 7 ต.ค. 28 14:18 /usr/bin/locate -> slocate*
ผู้ใช้งาน Tina ได้ใช้ ค้นหา เพื่อค้นหาแอปพลิเคชันที่เธอต้องการ:
ทีน่า:~> ค้นหา acroread
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/local/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
ทีน่า:~> ค้นหา acroread
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/local/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
ไดเร็กทอรีที่ไม่มีชื่อ ถัง ไม่สามารถมีโปรแกรมได้ - ไม่มีไฟล์ปฏิบัติการ มีความเป็นไปได้สามทางที่เหลือ ไฟล์ใน / usr / local / bin เป็นคนเดียว Tina ต้องการ: มันเป็นลิงค์ไปยังเชลล์สคริปต์ที่เริ่มโปรแกรมจริง:
ทีน่า:~> ไฟล์ /usr/local/bin/acroread
/usr/local/bin/acroread: ลิงก์สัญลักษณ์ไปยัง ../Acrobat4/bin/acroread
ทีน่า:~> ไฟล์ /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread: ข้อความสคริปต์เชลล์เป้าหมายที่เรียกใช้งานได้
ทีน่า:~> ไฟล์ /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread: ELF 32-bit LSB executable, Intel 80386, เวอร์ชัน 1, ลิงก์แบบไดนามิก (ใช้
ทีน่า:~> ไฟล์ /usr/local/bin/acroread
/usr/local/bin/acroread: ลิงก์สัญลักษณ์ไปยัง ../Acrobat4/bin/acroread
ทีน่า:~> ไฟล์ /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread: ข้อความสคริปต์เชลล์เป้าหมายที่เรียกใช้งานได้
ทีน่า:~> ไฟล์ /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread: ELF 32-bit LSB executable, Intel 80386, เวอร์ชัน 1, ลิงก์แบบไดนามิก (ใช้
ที่ใช้ร่วมกัน ลิบส์) ไม่ เปลือยเปล่า เพื่อให้เส้นทางสั้นที่สุดเท่าที่จะเป็นไปได้เพื่อให้ระบบไม่ต้องค้นหานานเกินไปทุกครั้งที่ผู้ใช้ต้องการรันคำสั่งเราเพิ่ม / usr / local / bin ไปยังเส้นทางและไม่ใช่ไดเร็กทอรีอื่นซึ่ง
มีไฟล์ไบนารีของโปรแกรมเฉพาะหนึ่งโปรแกรมเท่านั้นในขณะที่ / usr / local / bin มีประโยชน์อื่น ๆ
โปรแกรมอีกด้วย
คำอธิบายคุณสมบัติทั้งหมดของ .อีกครั้ง พบ และ ค้นหา สามารถพบได้ในหน้าข้อมูล
3.3.3.4. คำสั่ง grep
3.3.3.4.1. การกรองสายทั่วไป
โปรแกรมที่เรียบง่าย แต่ทรงพลัง grep ใช้สำหรับกรองบรรทัดอินพุตและส่งคืนรูปแบบบางอย่างไปยังเอาต์พุต มีแอพพลิเคชั่นมากมายสำหรับ grep โปรแกรม. ในตัวอย่างด้านล่าง เจอร์รี่ ใช้ grep เพื่อดูว่าเขาทำอะไรกับ พบ:
เจอร์รี่:~> grep -a ค้นหา .bash_history
หา . -name userinfo คน find
ค้นหา ../ -name common.cfg
เจอร์รี่:~> grep -a ค้นหา .bash_history
หา . -name userinfo คน find
ค้นหา ../ -name common.cfg
ประวัติการค้นหา
มีประโยชน์ในกรณีเหล่านี้คือฟังก์ชันการค้นหาใน ทุบตี, เปิดใช้งานโดยกด Ctrl+R ในครั้งเดียว เช่น ในตัวอย่างที่เราต้องการตรวจสอบว่าเราทำได้อย่างไร พบ อีกครั้ง:
โทมัส ~> ^R
(reverse-i-search)`find': ค้นหา `/home/thomas` -name *.xml
โทมัส ~> ^R
(reverse-i-search)`find': ค้นหา `/home/thomas` -name *.xml
พิมพ์สตริงการค้นหาของคุณที่พร้อมท์การค้นหา ยิ่งคุณพิมพ์อักขระมากเท่าใด การค้นหาก็จะยิ่งจำกัดมากขึ้นเท่านั้น สิ่งนี้จะอ่านประวัติคำสั่งสำหรับเซสชันเชลล์นี้ (ซึ่งเขียนถึง
.bash_history ในโฮมไดเร็กทอรีของคุณเมื่อคุณออกจากเซสชันนั้น) ระบบจะแสดงสตริงการค้นหาล่าสุดของคุณ หากคุณต้องการดูคำสั่งก่อนหน้าที่มีสตริงเดียวกัน ให้พิมพ์ Ctrl+R อีกครั้ง
ดูหน้าข้อมูลบน ทุบตี สำหรับข้อมูลเพิ่มเติม
UNIX ทั้งหมดที่มีความเหมาะสมเพียงเล็กน้อยมีพจนานุกรมออนไลน์ ลินุกซ์ก็เช่นกัน พจนานุกรมคือรายการคำที่รู้จักในไฟล์ชื่อ คำ, ตั้งอยู่ที่ /usr/share/dict. ในการตรวจสอบการสะกดคำที่ถูกต้องอย่างรวดเร็ว ไม่จำเป็นต้องใช้โปรแกรมกราฟิก:
วิลเลียม:~> grep พินกวิน /usr/share/dict/words
วิลเลียม:~> grep เพนกวิน /usr/share/dict/words
เพนกวิน เพนกวิน
วิลเลียม:~> grep พินกวิน /usr/share/dict/words
วิลเลียม:~> grep เพนกวิน /usr/share/dict/words
เพนกวิน เพนกวิน
พจนานุกรมกับรายการคำ
การแจกแจงบางส่วนเสนอ Dict คำสั่งซึ่งมีคุณสมบัติมากกว่าการค้นหาคำในรายการ
ใครคือเจ้าของโฮมไดเร็กทอรีที่อยู่ถัดจากฉัน นี่มันเบอร์โทรศัพท์เขา!
ลิซ่า:~> grep gdbruyne / etc / passwd
gdbruyne:x:981:981:Guy Debruyne โทร 203234:/home/gdbruyne:/bin/bash
ลิซ่า:~> grep gdbruyne / etc / passwd
gdbruyne:x:981:981:Guy Debruyne โทร 203234:/home/gdbruyne:/bin/bash
แล้ว E-mail address ของ Arno อีกครั้งคืออะไร?
serge:~/mail> grep -i อาร์โน *
ส่งเมล์: ถึง:
send-mail: ในวันจันทร์ที่ 24 ธันวาคม 2001 Arno.Hintjens@celeb.com เขียนว่า:
serge:~/mail> grep -i อาร์โน *
ส่งเมล์: ถึง:
send-mail: ในวันจันทร์ที่ 24 ธันวาคม 2001 Arno.Hintjens@celeb.com เขียนว่า:
ค้นหาและค้นหามักใช้ร่วมกับ grep เพื่อกำหนดข้อความค้นหาที่จริงจัง สำหรับข้อมูลเพิ่มเติม โปรดดูบทที่ 5 เกี่ยวกับการเปลี่ยนเส้นทาง I/O
3.3.3.4.2. อักขระพิเศษ
ตัวละครที่มีความหมายพิเศษต่อเปลือกจะต้องเป็น หนี. อักขระหลีกใน Bash คือแบ็กสแลช เช่นเดียวกับในเชลล์ส่วนใหญ่ นี้จะนำความหมายพิเศษของอักขระต่อไปนี้ออกไป เชลล์รู้เกี่ยวกับอักขระพิเศษบางตัวในบรรดา /, ., ? และ *. รายการทั้งหมดสามารถพบได้ในหน้าข้อมูลและเอกสารประกอบสำหรับเชลล์ของคุณ
ตัวอย่างเช่น สมมติว่าคุณต้องการแสดงไฟล์ "*" แทนไฟล์ทั้งหมดในไดเร็กทอรี คุณจะต้องใช้