Bash ค้นหาไฟล์แบบเรียกซ้ำ ค้นหาคำสั่ง: ความสามารถในการค้นหาไฟล์มากมายบน Linux การทำงานของไฟล์

ไม่ต้องสงสัยเมื่อทำงานกับ Linux บางครั้งมันจำเป็น ค้นหาไฟล์   มีลักษณะบางอย่าง คุณสมบัติเหล่านี้อาจรวมถึงขนาดหรือประเภทของไฟล์การอนุญาตและอื่น ๆ

ห้องว่างใน คำสั่ง Linux หาช่วยได้มากด้วย ค้นหาไฟล์   ตามเกณฑ์ต่างๆ

วันนี้เราจะวิเคราะห์ ค้นหาไฟล์ Linux   และให้ตัวเลือกหลักของคำสั่ง หาที่คุณสามารถนำไปใช้ในการทำงานของคุณ

รายชื่อของไฟล์ทั้งหมดที่มีอยู่ในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อย

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

ค้นหาไฟล์ตามเส้นทางที่ระบุ

ค้นหาไฟล์ตามชื่อ

  สลับเงื่อนไขการค้นหา ค้นหาเฉพาะไฟล์หรือไดเรกทอรีเท่านั้น ค้นหาหลายไดเรกทอรี มันมีประโยชน์มากที่จะสามารถค้นหาไดเรกทอรีหรือเส้นทางต่าง ๆ พร้อมกันและเพิ่มไปยังพารามิเตอร์เท่านั้น Luis Armando Medina ติดตามฉันบน Twitter


รูปแบบคำสั่ง หา:

หาทางตัวเลือก

ที่ไหน ทาง   - นี่คือไดเรกทอรีที่จะค้นหา คุณสามารถระบุค่าต่อไปนี้เป็นเส้นทาง:

.   - ค้นหาในไดเรกทอรีปัจจุบัน

/   - ค้นหาจากไดเรกทอรีราก;

~   - ค้นหาในโฮมไดเร็กตอรี่

สำหรับตัวเลือกนั้นมีรายการที่ใหญ่กว่าซึ่งจำเป็นอย่างมากในการอ่านอย่างละเอียด (สิ่งนี้จะช่วยได้มากในอนาคต!) ดังนั้น, ตัวเลือกหลักของคำสั่ง find:

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

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

-ชื่อ - ค้นหาไฟล์ตามชื่อโดยใช้แม่แบบด้านบน

ของผู้ใช้   - ค้นหาไฟล์ที่เป็นของผู้ใช้ที่ระบุ;

-กลุ่ม   - ค้นหาไฟล์ที่เป็นของกลุ่มที่ระบุ;

ดัด   - ค้นหาไฟล์ด้วยโหมดการเข้าถึงที่ระบุ;

ประเภท   - ค้นหาไฟล์บางประเภท นอกจากนี้ยังมีประเภทเพียงพอ:

  • b - ไฟล์บล็อกพิเศษ
  • d เป็นไดเรกทอรี
  • c - ไฟล์อักขระพิเศษ
  • f เป็นไฟล์ปกติ
  • l คือลิงก์สัญลักษณ์
  • p คือไพพ์ที่มีชื่อ
  • s คือซ็อกเก็ต
- ขนาด n   - ค้นหาไฟล์ที่มีขนาด n หน่วย;

-mtime -n + n   - ค้นหาไฟล์ที่มีการเปลี่ยนแปลงเนื้อหาน้อยกว่า (-) หรือมากกว่า (+) วันที่แล้ว

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

เครื่องมือจัดฟันที่ว่างเปล่าจะถูกแทนที่ด้วยพา ธ ไปยังไฟล์ที่พบ แบ็กสแลชก่อนเซมิโคลอนมีความสำคัญ แต่เครื่องหมายอัฒภาคเป็นอักขระที่มักจะแยกคำสั่ง เมื่อเปิดใช้อัฒภาคจะถูกเข้าใจว่าเป็นตัวคั่นคำสั่ง ดังนั้นเราจำเป็นต้องประมวลผลด้วย \\\\ หรือเขียนวิธี; ตัวอย่างจะพบได้ในการดำเนินการ ไดเรกทอรีและไดเรกทอรีย่อยสำหรับไฟล์ทั้งหมดและแสดงรายละเอียด ตัวอย่างก่อนหน้านี้แสดงให้เราเห็นพลังของการฟ้องร้อง

พิจารณาบ้าง ตัวอย่างคำสั่ง หา :

ตัวเลือกที่ใช้บ่อยที่สุดคือตัวเลือก -ชื่อซึ่งค้นหาไฟล์ตามชื่อ

ตัวอย่างที่มีตัวเลือก -name :

$ find / mnt / usb -name "* .mp3" - พิมพ์

จะค้นหาไฟล์ทั้งหมด (เครื่องหมาย * บ่งบอกถึงสิ่งนี้) ด้วยนามสกุล. mp3 บนอุปกรณ์ USB ที่ติดตั้งในไดเรกทอรี / mnt / usb

$ ค้นหา ~ -name "test *" - พิมพ์

แสดงรายการไฟล์โฮมไดเร็กตอรี่ที่เริ่มต้นด้วยการทดสอบ

หากคุณต้องการค้นหาไฟล์ที่ขึ้นต้นด้วยตัวอักษรบางตัว (เช่นจาก a ถึง j) คุณสามารถใช้นิพจน์ทั่วไปที่สะดวกในการใช้งานได้อย่างมาก:

$ find / -name "*" - พิมพ์

คำสั่งดังกล่าวจะช่วยให้คุณค้นหาไฟล์ทั้งหมดในระบบเริ่มต้นด้วยตัวอักษรจาก a ถึง j

ค้นหาไฟล์ด้วยโหมดการเข้าถึงเฉพาะ

หากคุณต้องการค้นหาไฟล์ที่มีโหมดการเข้าถึงบางอย่างตัวเลือกจะช่วยคุณ ดัดซึ่งจะช่วยได้อย่างง่ายดาย

ตัวอย่างเช่นเราจะค้นหาไฟล์ที่มีโหมดการเข้าถึง 775 (เจ้าของและกลุ่มมี สิทธิอย่างเต็มรูปแบบ   และส่วนที่เหลือของบันทึกมีผู้ใช้อื่น ๆ ) อยู่ในไดเรกทอรีปัจจุบัน:

$ หา. -perm 775 - พิมพ์

ทำการค้นหาด้วย หา ด้วยตัวเลือก -perm คุณสามารถใช้วิธีอื่น - คุณสามารถใส่เครื่องหมายยัติภังค์ที่ด้านหน้าของค่าโหมดจากนั้นไฟล์จะถูกค้นหาซึ่งตั้งค่าบิตสิทธิ์ที่ระบุไว้ทั้งหมด ยิ่งไปกว่านั้นบิตที่เหลือในกรณีนี้จะถูกละเว้น

ตัวอย่างเช่นเราค้นหาไฟล์ที่ผู้ใช้ของกลุ่มสามารถเข้าถึงแบบเต็ม:

$ หา. -perm -070 - พิมพ์

แทนที่จะใช้เครื่องหมายยัติภังค์คุณสามารถระบุเครื่องหมายบวก ในกรณีนี้จะทำการค้นหาไฟล์ที่มีบิตสิทธิ์อย่างน้อยหนึ่งชุดที่ระบุ บิตที่เหลือจะถูกละเว้น

ค้นหาไฟล์ ผู้ใช้เฉพาะ   หรือกลุ่ม

การค้นหาไฟล์สำหรับผู้ใช้เฉพาะนั้นง่ายมากในการนำไปใช้งาน หากต้องการทำสิ่งนี้ให้เรียกใช้คำสั่ง:

$ ค้นหา / -user ผู้ดูแลระบบ - พิมพ์

คำสั่งดังกล่าวจะผลิต ค้นหาไฟล์   บนระบบที่ผู้ใช้ admin เป็นเจ้าของ

ในการค้นหาไฟล์ที่อยู่ในกลุ่ม (เช่นผู้จัดการ) ให้เรียกใช้คำสั่ง:

$ find / -group managers -print

คุณสามารถใช้ตัวเลือกเพื่อค้นหาไฟล์ของผู้ใช้หรือกลุ่มที่ไม่มีอยู่ -nouser   และ -nogroup:

$ find / -nouser -print

$ find / -nogroup -print

ค้นหาไฟล์ประเภทเฉพาะ

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

ค้นหาลิงก์สัญลักษณ์ในไดเร็กทอรี / etc:

$ find / etc -type l -print

แสดงรายการของไดเรกทอรีที่มีอยู่ในไดเรกทอรี / mnt / raid

$ ค้นหา / mnt / raid -type d -print

ค้นหาไฟล์ที่มีขนาดเฉพาะ

ตัวเลือก -ขนาด   ช่วยให้คุณค้นหาไฟล์ที่มีขนาดที่แน่นอนและมีลักษณะดังต่อไปนี้เมื่อดำเนินการ:

$ หา. - ขนาด 2000k - พิมพ์

คำสั่งดังกล่าวจะค้นหาและแสดงไฟล์หน้าจอขนาด 2 เมกะไบต์ในไดเรกทอรีปัจจุบัน ตัวอย่างเช่นหากคุณต้องการค้นหาไฟล์ที่มีขนาดน้อยกว่า 500 กิโลไบต์คำสั่งจะมีลักษณะดังนี้:

$ หา. - ขนาด -500k - พิมพ์

หากคุณต้องการค้นหาไฟล์ที่มีขนาดใหญ่กว่า 600 เมกะไบต์ให้ใช้คำสั่ง:

$ find / -size + 600M- พิมพ์

ค้นหาไฟล์โดยใช้ตัวเลือก -mtime

ตัวเลือก -mtime   ช่วยให้คุณค้นหาไฟล์ที่มีการเปลี่ยนแปลงเมื่อเวลาผ่านไป

ตัวอย่างเช่นเรามีหน้าที่ค้นหาไฟล์ที่อยู่ในไดเรกทอรี / mnt / raid / upload และมีการเปลี่ยนแปลงในช่วง 5 วันที่ผ่านมา ทีมจะช่วยเราในเรื่องนี้:

$ find / mnt / raid / upload -mtime -5 -print

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

$ find / mnt / raid / upload -7 -print

ทีม หา   เป็นเครื่องมือที่สะดวกอย่างยิ่งสำหรับ ค้นหาไฟล์ และยังสามารถใช้สำหรับ ค้นหาไฟล์   บนไดรฟ์ NFS (เครือข่าย ระบบไฟล์) แต่ในกรณีนี้มีความจำเป็นที่จะต้องพิจารณาว่าจะใช้เวลาในการค้นหาบางอย่างใน NFS มากกว่าดิสก์ท้องถิ่น

ในบทความนี้เราได้ครอบคลุมเฉพาะตัวเลือกพื้นฐานของคำสั่ง find ที่จะช่วยคุณในการทำงานของคุณ ใช้สิ่งที่สะดวกและไม่ต้องกังวลกับอะไร!

ในสภาพแวดล้อมเซิร์ฟเวอร์การทำงานกับบรรทัดคำสั่งใช้เวลานาน มักใช้ bash shell - เชลล์คำสั่งโดยค่าเริ่มต้นของการแจกแจงส่วนใหญ่

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

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

คู่มือนี้แสดงให้เห็นถึงคุณสมบัติทั้งหมดใน VPS ด้วย Ubuntu 12.04 แต่เกือบทั้งหมดมีความทันสมัย linux ดิสทริบิวชัน   จะทำงานในลักษณะเดียวกัน

การตั้งค่าประวัติในทุบตี

ก่อนที่จะใช้เรื่องราวคุณต้องแก้ไขการตั้งค่า bash บางอย่างเพื่อให้สามารถใช้งานได้มากขึ้น

Bash ช่วยให้คุณสามารถแก้ไขจำนวนคำสั่งก่อนหน้าที่คุณต้องการบันทึกในประวัติ มีสองตัวเลือกแยกกันสำหรับสิ่งนี้ใน bash: พารามิเตอร์“ HISTFILESIZE” ตั้งค่าจำนวนคำสั่งที่เก็บไว้ในไฟล์ประวัติและ“ HISTSIZE” หมายถึงจำนวนคำสั่งที่เก็บไว้ในหน่วยความจำสำหรับเซสชันปัจจุบัน

ซึ่งหมายความว่าในหน่วยความจำคุณสามารถตั้งค่าขีด จำกัด ที่เหมาะสมกับขนาดของประวัติสำหรับเซสชันปัจจุบันรวมถึงเก็บประวัติขนาดใหญ่บนดิสก์สำหรับใช้ในอนาคต

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

หากต้องการเปลี่ยนตัวเลือกเหล่านี้ให้เปิดไฟล์“ ~ / .bashrc” โดยใช้เครื่องมือแก้ไข:

ค้นหาตัวเลือก HISTSIZE และ HISTFILESIZE หากมีการตั้งค่าสำหรับพวกเขาให้เปลี่ยนพวกเขา หากไม่มีพารามิเตอร์ดังกล่าวในไฟล์นี้ให้ป้อนพวกเขา คู่มือนี้มีราคา 10,000 บรรทัดสำหรับดิสก์และ 5,000 บรรทัดเก็บไว้ในหน่วยความจำ สิ่งเหล่านี้เป็นค่าที่พอเหมาะสำหรับระบบส่วนใหญ่ แต่ถึงแม้ว่าจะต้องลดลงหากมีผลกระทบต่อประสิทธิภาพ:

HISTSIZE \u003d 5,000
  HISTFILESIZE \u003d 10,000

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

สิ่งนี้สามารถหลีกเลี่ยงได้โดยการตั้งค่าพารามิเตอร์“ histappend” ซึ่งจะเพิ่มประวัติไม่ใช่เขียนทับมัน มันอาจถูกติดตั้งแล้ว; มิฉะนั้นสามารถเปิดใช้งานได้โดยเพิ่มบรรทัดต่อไปนี้:

shopt -s histappend

เพื่อให้ทุบตีเพื่อป้อนคำสั่งลงในประวัติทันทีโดยไม่ต้องรอให้เซสชันสิ้นสุด (เพื่อให้คำสั่งของเทอร์มินัลหนึ่งพร้อมใช้งานได้ทันที) คุณสามารถติดตั้งหรือเพิ่มคำสั่ง“ history –a” สำหรับตัวเลือก“ PROMPT_COMMAND” บรรทัดคำสั่ง

แต่ทีมดังกล่าวต้องการเคล็ดลับในการทำงานอย่างถูกต้อง คุณต้องเพิ่ม“ history –a” ในไฟล์ประวัติจากนั้นล้างประวัติปัจจุบันของเซสชันนี้โดยใช้“ history –c” จากนั้นอ่านไฟล์ประวัติที่แก้ไขแล้วกลับไปที่ประวัติของเซสชันนี้โดยใช้“ history –r”

ดูเหมือนว่า:

ส่งออก PROMPT_COMMAND \u003d "ประวัติ -a; history -c; history -r; $ PROMPT_COMMAND"

หลังจากเสร็จสิ้นการดำเนินการนี้ให้บันทึกการเปลี่ยนแปลงและปิดไฟล์

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

แหล่งที่มา ~ / .bashrc

ดูประวัติก่อนหน้าในทุบตี

หากต้องการดูประวัติใน Bash ให้ใช้คำสั่ง“ history” จะแสดงคำสั่งก่อนหน้านี้ในคำสั่งต่อบรรทัด ในกรณีส่วนใหญ่ควรพิมพ์จำนวนบรรทัดที่กำหนดโดยค่า "HISTSIZE" ปัจจุบันมีทีมไม่มาก:

ประวัติศาสตร์
. . .
  43 คนทุบตี
  44 คน fc
  45 คนทุบตี
  46 fc -l -10
  47 ประวัติศาสตร์
  48 ls -a
  49 vim .bash_history
  50 ประวัติศาสตร์
  51 ประวัติคน
  52 ประวัติศาสตร์ 10
  53 ประวัติศาสตร์

นอกจากนี้ยังแสดงหมายเลขซีเรียลของคำสั่ง แต่ละคำสั่งจะเชื่อมโยงกับตัวเลขเพื่อให้ง่ายต่อการใช้งาน

เอาต์พุตสามารถลดลงได้โดยการระบุจำนวนคำสั่งหลัง "history" ตัวอย่างเช่นหากคุณต้องการแสดงเฉพาะคำสั่งที่ป้อน 5 ครั้งล่าสุดเราสามารถพิมพ์:

ประวัติ 5
  50 ประวัติศาสตร์
  51 ประวัติคน
  52 ประวัติศาสตร์ 10
  53 ประวัติศาสตร์
  54 ประวัติศาสตร์ 5

ในการค้นหาคำสั่งทั้งหมดในประวัติที่มีสตริงเฉพาะคุณสามารถใช้ grep หลังอักขระไพพ์ได้ ตัวอย่างเช่นหากต้องการค้นหาบรรทัดที่มี "cd" ให้พิมพ์:

ประวัติศาสตร์ grep cd
  33 cd รูปภาพ /
  37 cd ..
  39 cd Desktop /
  61 cd / usr / bin /
  68 cd
  83 cd / etc /
  86 cd resolvconf /
  90 cd resolv.conf.d /

ประวัติการเรียกใช้คำสั่งใน Bash

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

คุณสามารถเรียกคำสั่งก่อนหน้าใด ๆ ได้โดยป้อนหมายเลขและวางเครื่องหมายอัศเจรีย์“!” ไว้ข้างหน้า จากตัวอย่างประวัติข้างต้นคุณสามารถแสดงหน้าคู่มือออนไลน์ได้อย่างรวดเร็วเพียงป้อน:

สิ่งนี้จะเรียกและดำเนินการคำสั่งในประวัติศาสตร์ที่หมายเลข 51 ทันที

คุณยังสามารถดำเนินการคำสั่งที่เกี่ยวข้องกับตำแหน่งปัจจุบัน สิ่งนี้ทำโดยใช้ไวยากรณ์“! -N” โดยที่“ n” จะต้องถูกแทนที่ด้วยจำนวนคำสั่งที่จะดำเนินการ

ตัวอย่างเช่นหากคุณต้องการส่งออกและดำเนินการคำสั่งพิมพ์สุดท้ายแล้วคุณสามารถพิมพ์“! -2” ดังนั้นหากเนื้อหาของพา ธ ยาวไปยังไดเร็กทอรีคือเอาต์พุตและจากนั้นป้อนคำสั่ง echo และตอนนี้คุณต้องเอาต์พุตพา ธ อีกครั้งเซสชันอาจมีลักษณะดังนี้:

ls / usr / share / doc / manpages
  สะท้อนเสียงสวัสดี
  ! -2 # แสดงเนื้อหาอีกครั้ง

ในการเรียกใช้งานคำสั่งสุดท้ายอีกครั้งแทนที่จะใช้“! -1” ใน bash คุณสามารถใช้คำสั่ง“ hot”“ !!” ซึ่งดำเนินการ:

หลายคนใช้สิ่งนี้หากพวกเขาพิมพ์คำสั่งที่ต้องใช้สิทธิ์ sudo เมื่อพิมพ์ "sudo !!" คำสั่งนั้นจะเกินด้วยสิทธิ์ sudo เซสชั่นดังกล่าวมีลักษณะเช่นนี้:

สัมผัส / etc / สวัสดี
  touch: ไม่สามารถสัมผัส `/ etc / hello": การอนุญาตถูกปฏิเสธ
  sudo !!
  sudo touch / etc / hello
   รหัสผ่านสำหรับ demouser:

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

ประวัติการเลื่อนใน Bash

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

วิธีที่พบมากที่สุดคือกดลูกศรขึ้นบนบรรทัดคำสั่ง

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

แทนที่จะใช้ปุ่มลูกศรคุณสามารถใช้แป้นพิมพ์ลัดต่อไปนี้:“ CTRL-p” เพื่อเลื่อนดูประวัติและ“ CTRL-n” เพื่อเลื่อนไปข้างหน้า

หากต้องการกลับไปที่บรรทัดคำสั่งปัจจุบันคุณสามารถใช้ "Meta-\u003e" ในกรณีส่วนใหญ่“ เมตา” และสัญลักษณ์“\u003e” แทนที่ชุดค่าผสม“ ALT-Shift-.” สิ่งนี้มีประโยชน์มากหากกระแส บรรทัดคำสั่ง   ตั้งอยู่ไกลพอสมควร

หากต้องการย้ายไปยังบรรทัดแรกของเรื่องให้ใช้กลยุทธ์การย้อนกลับ“ Meta-<». Обычно это сочетание замещает «ALT-Shift-,».

โดยสรุปดังต่อไปนี้เป็นรายการของคีย์การนำทางประวัติที่สำคัญที่สุด:

  • ปุ่มลูกศรขึ้น: เลื่อนดูประวัติ
  • CTRLพี: ย้อนกลับประวัติ
  • ปุ่มลูกศรลง: เลื่อนประวัติไปข้างหน้า
  • CTRLn: เลื่อนเรื่องไปข้างหน้า;
  • ALTเปลี่ยน-. : เลื่อนไปที่ท้ายเรื่อง (ไปยังคำสั่งสุดท้ายที่ป้อน);
  • ALTเปลี่ยน-, : ย้ายไปที่จุดเริ่มต้นของเรื่องราว (ไปยังคำสั่งแรกที่ป้อน)

ประวัติการค้นหาในทุบตี

แม้ว่าการใช้การรวมกันของ "ประวัติศาสตร์ | grep "เป็นวิธีที่ง่ายที่สุดในการดำเนินการบางอย่างการทำงานในหลาย ๆ สถานการณ์นั้นยังห่างไกลจากอุดมคติ
  Bash มีฟังก์ชั่นการค้นหาประวัติ ตัวอย่างเช่นการค้นหาในประวัติมักใช้ในทิศทางตรงกันข้าม (อันดับแรกจะแสดงผลลัพธ์ที่ "สด" ที่สุด) โดยใช้แป้นพิมพ์ลัด "Ctrl-r"

ตัวอย่างเช่นคุณสามารถพิมพ์“ Ctrl-r” และพิมพ์ในส่วนของคำสั่งก่อนหน้า ต้องมีการคัดเลือกทีมงานเพียงบางส่วนเท่านั้น หากค่าที่ป้อนตรงกับคำสั่งที่ไม่จำเป็นคุณสามารถกด "Ctrl-r" อีกครั้งเพื่อแสดงผลลัพธ์ถัดไป

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

บันทึก: ในเทอร์มินัลหลายเครื่องการรวมกันของ CTRL จะบล็อกเซสชันเทอร์มินัล นั่นคือเมื่อคุณพยายามใช้เพื่อค้นหามันจะ“ หยุด” เทอร์มินัล หากต้องการปลดล็อกเซสชันให้พิมพ์“ Ctrl-q”

ฟังก์ชันเหล่านี้ของการหยุดชั่วคราวและการดำเนินการเซสชันต่อนั้นไม่จำเป็นในเทอร์มินัลที่ทันสมัยที่สุดดังนั้นคุณสามารถปิดใช้งานได้โดยพิมพ์

ตอนนี้คุณต้องเพิ่มสิ่งนี้ลงในไฟล์“ ~ / .bashrc” เพื่อให้แน่ใจว่าคำสั่งจะทำงานอย่างต่อเนื่อง

ตอนนี้ชุดการค้นหานี้จะทำงานอย่างถูกต้อง

ค้นหาตามส่วนที่ป้อนของคำสั่ง

วิธีการทั่วไปในการค้นหาคือการป้อนส่วนหนึ่งของคำสั่งตรวจสอบว่าคำสั่งนั้นเสร็จสมบูรณ์ก่อนหน้านี้หรือไม่จากนั้นค้นหาในเรื่อง

วิธีทำการค้นหาโดยใช้ข้อมูลที่ป้อนไว้ในบรรทัดคำสั่งแล้ว เลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดโดยใช้“ CTRL-a” จากนั้นโทรกลับประวัติ“ CTRL-r” แทรกบรรทัดปัจจุบันลงในการค้นหาโดยใช้“ CTRL-y” และใช้“ CTRL-r” อีกครั้งเพื่อย้อนกลับการค้นหา

ตัวอย่างเช่นคุณต้องอัปเดตแคชแพ็กเกจใน Ubuntu คำสั่งนี้ได้รับการดำเนินการแล้ว แต่เพื่อตรวจสอบว่าเป็นกรณีนี้หรือไม่คุณสามารถพิมพ์ sudo:

ในขั้นตอนนี้เป็นที่ชัดเจนว่าคำสั่งนี้ได้รับการดำเนินการอย่างแน่นอนเมื่อเร็ว ๆ นี้ ตอนนี้คลิก:

สิ่งนี้จะเลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัด

สิ่งนี้จะทริกเกอร์การค้นหาประวัติย้อนกลับที่เป็นลำดับ การกระทำนี้มีผลข้างเคียง - คัดลอกเนื้อหาทั้งหมดของบรรทัดคำสั่งที่อยู่หลังตำแหน่งเคอร์เซอร์ปัจจุบันและวางลงในคลิปบอร์ด

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

ตอนนี้คุณต้องเริ่มค้นหาย้อนกลับในประวัติอีกครั้งเพื่อค้นหาคำสั่งที่มีส่วนที่ระบุ

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

นอกจากนี้การกระทำทั้งหมดเหล่านี้สามารถรวมกันเป็นหนึ่งเดียว:

การใช้ประวัติขั้นสูงในการทุบตี

มีการตรวจสอบเทคนิคพื้นฐานสำหรับการใช้ประวัติที่มีอยู่ในทุบตี ในหมู่พวกเขา:

  • !! : พิมพ์คำสั่งสุดท้าย;
  • ! n: ไปที่ทีมด้วยหมายเลขซีเรียล "n";
  • !- n: ไปที่คำสั่งที่มีหมายเลขก่อนหน้าคำสั่งสุดท้าย

ตัวระบุเหตุการณ์

ชุดค่าผสมทั้งสามด้านบนเรียกว่า ตัวระบุเหตุการณ์. อันที่จริงนี่เป็นวิธีเรียกคำสั่งก่อนหน้าจากประวัติโดยใช้เกณฑ์บางอย่าง

ตัวอย่างเช่นในการดำเนินการคำสั่ง ssh ล่าสุดคุณสามารถใช้:

การกระทำนี้ค้นหาบรรทัดที่ขึ้นต้นด้วย“ ssh” ในการค้นหาลำดับที่ไม่ได้อยู่ที่จุดเริ่มต้นของคำสั่งคุณสามารถป้อนอักขระ“?” ก่อนและหลังลำดับ ตัวอย่างเช่นในการทำซ้ำคำสั่งสุดท้าย“ การค้นหา apt-cache” คุณจะต้องพิมพ์:

คุณยังสามารถใช้รูปแบบของผลลัพธ์ของคำสั่งสุดท้าย ("!!") ทำการค้นหาอย่างรวดเร็วและแทนที่ด้วยการพิมพ์:

^ เดิม ^ เปลี่ยน ^

สิ่งนี้จะเรียกคำสั่งสุดท้าย (เช่น“ !!”) ค้นหาการจับคู่กับค่าของ“ ต้นฉบับ” และแทนที่ด้วยค่าของ“ การแทนที่” จากนั้นคำสั่งจะถูกดำเนินการ

มันสะดวกมากที่จะใช้ถ้าจำเป็นเพื่อแก้ไขข้อผิดพลาดการสะกด ตัวอย่างเช่น:

cat / etc / hosst
  cat: / etc / hosst: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
  ^ hosst ^ โฮสต์ ^

คำสำคัญ

หลังจากตัวระบุเหตุการณ์คุณสามารถเพิ่มอักขระโคลอน (:) แล้วแทรก รอบคัดเลือกของคำเพื่อเลือกส่วนหนึ่งของทีมที่ตรงกัน

สิ่งนี้ทำงานโดยการแบ่งคำสั่งเป็น "คำ" - ส่วนที่คั่นด้วยช่องว่าง สิ่งนี้จะเปิดโอกาสใหม่สำหรับการโต้ตอบกับพารามิเตอร์คำสั่ง

คำสั่งนั้นจะถูกกำหนดหมายเลขศูนย์อาร์กิวเมนต์แรกคือ 1 และต่อ ๆ ไป

ตัวอย่างเช่นคุณสามารถแสดงเนื้อหาของไดเรกทอรีและเปลี่ยนมันด้วยวิธีนี้:

ls / usr / share / doc / manpages
  cd !!: 1

หากการดำเนินการนี้ถูกดำเนินการด้วยคำสั่งที่ทำงานล่าสุดชุดค่าผสมนี้สามารถบีบอัดได้โดยลบ“!” ตัวที่สองออก และลำไส้ใหญ่:

สิ่งนี้จะทำงานในลักษณะเดียวกัน

อาร์กิวเมนต์แรกสามารถอ้างอิงได้โดยใช้อักขระ“ ^” และอาร์กิวเมนต์สุดท้ายสามารถอ้างถึงเป็น“ $” อักขระเหล่านี้มีประโยชน์มากขึ้นเมื่อทำงานกับช่วงแทนที่จะเป็นหมายเลขซีเรียล ตัวอย่างเช่นคุณสามารถแยกอาร์กิวเมนต์ทั้งหมดจากคำสั่งก่อนหน้าไปยังอาร์กิวเมนต์ใหม่ได้สามวิธี:

!!:1*
!!:1-$
!!:*

เครื่องหมายดอกจัน“ *” ใช้เพื่อระบุเอาต์พุตของข้อมูลใด ๆ ยกเว้นคำสั่งดั้งเดิม คุณสามารถใช้หมายเลขคำโดยระบุ * หลังจากนั้นเพื่อระบุว่าควรรวมทุกอย่างหลังจากคำที่ระบุ

การปรับเปลี่ยน

สิ่งสุดท้ายที่คุณสามารถเพิ่มให้กับลักษณะการทำงานของสายประวัติที่เรียกว่าคือการเปลี่ยนพฤติกรรมการโทรเพื่อควบคุมข้อความของตัวเอง ตัวดัดแปลงจะถูกเพิ่มหลังจากอักขระเพิ่มเติม“:” ที่ท้ายบรรทัด

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

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

cat / usr / share / doc / manpages / ลิขสิทธิ์

หลังจากนั้นคุณต้องไปที่ไดเรกทอรี สิ่งนี้สามารถทำได้โดยใช้คำสั่ง“ cd” บนสตริงพารามิเตอร์“ ตัด” ชื่อไฟล์ในตอนท้าย

cd !!: $: h
  รหัสผ่าน
  / usr / share / doc / manpages

นอกจากนี้คุณยังสามารถทำตามขั้นตอนย้อนกลับทำให้เส้นทางสั้นลงและใช้เฉพาะชื่อไฟล์โดยใช้ตัวแก้ไข“ t” (ซึ่งหมายถึง“ หาง”) ตัวอย่างเช่นคุณสามารถค้นหาคำสั่งสุดท้าย“ cat” โดยใช้การตั้งค่าสถานะ“ t” เพื่อปล่อยเฉพาะชื่อไฟล์

นอกจากนี้คุณยังสามารถออกจากเส้นทางเต็มและทีมจะทำงานตามที่คาดไว้ แต่บางครั้งก็ไม่เป็นเช่นนั้น ตัวอย่างเช่นหากคุณใช้พา ธ สัมพัทธ์เมื่อทำงานกับไฟล์ที่ซ้อนในหลายไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันและเปลี่ยนไดเรกทอรีย่อยโดยใช้ตัวปรับแต่ง“ h” คุณจะไม่สามารถใช้เส้นทางสัมพัทธ์กับไฟล์นี้ได้อีก

ตัวดัดแปลงที่มีประโยชน์อื่น ๆ คือ“ r” ซึ่งจะลบส่วนต่อท้ายท้ายของแบบฟอร์ม“ .xxx” สิ่งนี้มีประโยชน์เมื่อใช้คำสั่ง tar เพื่อคลายซิปไฟล์และจำเป็นต้องเปลี่ยนเป็นไดเร็กทอรีหลังจากนั้น สมมติว่าชื่อไดเรกทอรีตรงกับชื่อไฟล์คุณสามารถทำสิ่งต่อไปนี้:

tar xzvf long-project-name.tgz
  cd !!: $: r

หาก tarball ใช้ส่วนขยาย tar.gz แทน tgz เพียงป้อนตัวแก้ไขสองครั้ง:

tar xzvf long-project-name.tar.gz
  cd !!: $: r: r

โมเดอเรเตอร์ที่คล้ายกัน“ e” จะลบทุกอย่างยกเว้นนามสกุลหาง

หากต้องการพบคำสั่งที่เรียกใช้และไม่ได้ดำเนินการคุณสามารถใช้ตัวแก้ไข“ p” เพื่อให้ bash แสดงคำสั่งอีกครั้ง

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

ตัวอย่างเช่นคำสั่ง find เคยรันบนโฮมไดเร็กทอรีและตอนนี้จำเป็นต้องรันจากไดเร็กทอรีนี้ (/) ตรวจสอบว่าการทดแทนถูกดำเนินการอย่างถูกต้องดังต่อไปนี้ (โดยมีเงื่อนไขว่าคำสั่งนี้มีหมายเลข 119):

หาคำสั่ง ~ ~ ชื่อ "file1" # ต้นฉบับ
  ! 119: 0: p /! 119: 2 *: p
  find / -name "file1"

หากคำสั่งถูกแสดงอย่างถูกต้องสามารถเปิดใช้โดยใช้:

มีวิธีที่ง่ายกว่าในการทำการทดแทนคำสั่ง: คุณสามารถใช้ไวยากรณ์ s / \u200b\u200boriginal / new /

ตัวอย่างเช่นการกระทำที่อธิบายไว้ข้างต้นสามารถดำเนินการได้ดังนี้:

สิ่งนี้จะแทนที่อินสแตนซ์แรกของรูปแบบการค้นหา ในการทำการเปลี่ยนตัวในแต่ละนัดให้ใช้ตัวดัดแปลง“ g” และ“ s” ตัวอย่างเช่นในการสร้างไฟล์ชื่อ "file1″," file2 "และ" file3 "และไดเรกทอรี" dir1 "," dir2 "," dir3 "คุณต้องใช้:

สัมผัส file1 file2 file3
  mkdir !!: *: gs / file / dir /

สรุป

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

โดยทั่วไปความเป็นไปได้ที่อธิบายไว้ทั้งหมดของการใช้เรื่องราวสามารถเพิ่มความเร็วในการทำงานได้อย่างมาก

   แท็ก :,