Bash ค้นหาไฟล์แบบเรียกซ้ำ ค้นหาคำสั่ง: ความสามารถในการค้นหาไฟล์มากมายบน Linux การทำงานของไฟล์
ไม่ต้องสงสัยเมื่อทำงานกับ Linux บางครั้งมันจำเป็น ค้นหาไฟล์ มีลักษณะบางอย่าง คุณสมบัติเหล่านี้อาจรวมถึงขนาดหรือประเภทของไฟล์การอนุญาตและอื่น ๆ
ห้องว่างใน คำสั่ง Linux หาช่วยได้มากด้วย ค้นหาไฟล์ ตามเกณฑ์ต่างๆ
วันนี้เราจะวิเคราะห์ ค้นหาไฟล์ Linux และให้ตัวเลือกหลักของคำสั่ง หาที่คุณสามารถนำไปใช้ในการทำงานของคุณ
รายชื่อของไฟล์ทั้งหมดที่มีอยู่ในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อย
สิ่งสำคัญที่คุณควรรู้คือวิธีใช้คำสั่งนี้และบทสรุปที่คุณพบโดยใช้คำสั่ง "ค้นหาคน" ไม่เงียบมากเพราะถ้านั่นคือสิ่งที่มันพูด ค้นหาสถานที่ที่จะมอง คำสั่งนี้เทียบเท่ากับการป้อนสิ่งต่อไปนี้
ค้นหาไฟล์ตามเส้นทางที่ระบุ
ค้นหาไฟล์ตามชื่อ
สลับเงื่อนไขการค้นหา ค้นหาเฉพาะไฟล์หรือไดเรกทอรีเท่านั้น ค้นหาหลายไดเรกทอรี มันมีประโยชน์มากที่จะสามารถค้นหาไดเรกทอรีหรือเส้นทางต่าง ๆ พร้อมกันและเพิ่มไปยังพารามิเตอร์เท่านั้น Luis Armando Medina ติดตามฉันบน Twitterรูปแบบคำสั่ง หา:
หาทางตัวเลือก
ที่ไหน ทาง - นี่คือไดเรกทอรีที่จะค้นหา คุณสามารถระบุค่าต่อไปนี้เป็นเส้นทาง:
. - ค้นหาในไดเรกทอรีปัจจุบัน
/ - ค้นหาจากไดเรกทอรีราก;
~ - ค้นหาในโฮมไดเร็กตอรี่
สำหรับตัวเลือกนั้นมีรายการที่ใหญ่กว่าซึ่งจำเป็นอย่างมากในการอ่านอย่างละเอียด (สิ่งนี้จะช่วยได้มากในอนาคต!) ดังนั้น, ตัวเลือกหลักของคำสั่ง find:
ตอนแรกมันจะดูเหมือนตัวอักษรไม่สมเหตุสมผลและคุณจะไม่มีวันจำได้ โครงสร้างคำสั่งมีลักษณะดังนี้: ค้นหาเส้นทางนิพจน์ เส้นทางชัดเจน - ไดเรกทอรีนี้จะดูด้านล่าง ตัวอย่างเช่นใช้บ่อยครั้งที่เจ้าของ อีกตัวเลือกที่สำคัญคือการกระทำที่เรียกว่า สิ่งนี้ทำให้เราสามารถเรียกใช้คำสั่งระบบใด ๆ และส่งไปยังไฟล์เป็นพารามิเตอร์ สุดท้ายเรามีโอเปอเรเตอร์สำหรับนิพจน์แบบพับได้
เราจะเน้นการสาธิตเชิงปฏิบัติ เข้าถึงไดรฟ์สำหรับไดเรกทอรีทั้งหมดที่เรียกว่าการทดลอง เราต้องพิจารณาบันทึกเพื่อที่เชลล์จะไม่ตีความ หากเราต้องการค้นหาไดเรกทอรีย่อยในไดเรกทอรีปัจจุบันและไม่ต้องเรียกซ้ำ
-ชื่อ - ค้นหาไฟล์ตามชื่อโดยใช้แม่แบบด้านบน
ของผู้ใช้ - ค้นหาไฟล์ที่เป็นของผู้ใช้ที่ระบุ;
-กลุ่ม - ค้นหาไฟล์ที่เป็นของกลุ่มที่ระบุ;
ดัด - ค้นหาไฟล์ด้วยโหมดการเข้าถึงที่ระบุ;
ประเภท - ค้นหาไฟล์บางประเภท นอกจากนี้ยังมีประเภทเพียงพอ:
- b - ไฟล์บล็อกพิเศษ
- d เป็นไดเรกทอรี
- c - ไฟล์อักขระพิเศษ
- f เป็นไฟล์ปกติ
- l คือลิงก์สัญลักษณ์
- p คือไพพ์ที่มีชื่อ
- s คือซ็อกเก็ต
-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— พี: ย้อนกลับประวัติ
- ปุ่มลูกศรลง: เลื่อนประวัติไปข้างหน้า
- CTRL— n: เลื่อนเรื่องไปข้างหน้า;
- 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 /
สรุป
คู่มือนี้จะช่วยให้คุณเข้าใจหลักการใช้ประวัติ แน่นอนฟังก์ชั่นที่อธิบายไว้บางส่วนจะมีประโยชน์ในกรณีที่เกิดขึ้นได้ยาก แต่ก็จำเป็นต้องรู้เกี่ยวกับมันและสามารถใช้งานได้
โดยทั่วไปความเป็นไปได้ที่อธิบายไว้ทั้งหมดของการใช้เรื่องราวสามารถเพิ่มความเร็วในการทำงานได้อย่างมาก
แท็ก :,