Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

ประวัติบรรทัดคำสั่ง Master Linux:15 เคล็ดลับและตัวอย่างอันทรงพลัง

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

1. แสดงการประทับเวลาโดยใช้ HISTTIMEFORMAT

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

# export HISTTIMEFORMAT='%F %T '
# history | more
1 2008-08-05 19:02:39 service network restart
2 2008-08-05 19:02:39 exit
3 2008-08-05 19:02:39 id
4 2008-08-05 19:02:39 cat /etc/redhat-release

2. ค้นหาประวัติโดยใช้ Control+R

ฉันเชื่ออย่างยิ่งว่านี่อาจเป็นคุณลักษณะที่คุณใช้บ่อยที่สุดในประวัติศาสตร์ เมื่อคุณดำเนินการคำสั่งที่ยาวมากแล้ว คุณสามารถค้นหาประวัติโดยใช้คำหลักและดำเนินการคำสั่งเดิมอีกครั้งโดยไม่ต้องพิมพ์ทั้งหมด กด Control+R แล้วพิมพ์คำหลัก . ในตัวอย่างต่อไปนี้ ฉันค้นหา สีแดง ซึ่งแสดงคำสั่งก่อนหน้า “cat /etc/redhat-release ” ในประวัติศาสตร์ที่มีคำว่าสีแดง

# [Press Ctrl+R from the command prompt,
which will display the reverse-i-search prompt]
(reverse-i-search)`red': cat /etc/redhat-release
[Note: Press enter when you see your command,
which will execute the command from the history]
# cat /etc/redhat-release
Fedora release 9 (Sulphur)

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

# [Press Ctrl+R from the command prompt,
which will display the reverse-i-search prompt]
(reverse-i-search)`httpd': service httpd stop
[Note: Press either left arrow or right arrow key when you see your
command, which will display the command for you to edit, before executing it]
# service httpd start

3. ทำซ้ำคำสั่งก่อนหน้าอย่างรวดเร็วโดยใช้ 4 วิธีที่แตกต่างกัน

บางครั้งคุณอาจทำซ้ำคำสั่งก่อนหน้านี้ด้วยเหตุผลหลายประการ ต่อไปนี้เป็น 4 วิธีในการทำซ้ำคำสั่งที่ดำเนินการครั้งล่าสุด

  1. ใช้ลูกศรขึ้น เพื่อดูคำสั่งก่อนหน้าแล้วกด Enter เพื่อดำเนินการ
  2. พิมพ์ !! และกด Enter จากบรรทัดคำสั่ง
  3. พิมพ์ !-1 และกด Enter จากบรรทัดคำสั่ง
  4. กด Control+P จะแสดงคำสั่งก่อนหน้า กด Enter เพื่อดำเนินการ

4. ดำเนินการคำสั่งเฉพาะจากประวัติ

ในตัวอย่างต่อไปนี้ หากคุณต้องการทำซ้ำคำสั่ง #4 คุณสามารถทำได้ !4 ดังที่แสดงด้านล่าง

# history | more
1 service network restart
2 exit
3 id
4 cat /etc/redhat-release
# !4
cat /etc/redhat-release
Fedora release 9 (Sulphur)

5. ดำเนินการคำสั่งก่อนหน้าที่ขึ้นต้นด้วยคำเฉพาะ

พิมพ์ ! ตามด้วยตัวอักษรเริ่มต้นของคำสั่งที่คุณต้องการดำเนินการอีกครั้ง ในตัวอย่างต่อไปนี้ พิมพ์ !ps แล้ว enter ดำเนินการคำสั่งก่อนหน้าโดยขึ้นต้นด้วย ps ซึ่งก็คือ 'ps aux | grep ใช่แล้ว'

# !ps
ps aux | grep yp
root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind
root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp

6. ควบคุมจำนวนบรรทัดทั้งหมดในประวัติโดยใช้ HISTSIZE

เพิ่มสองบรรทัดต่อไปนี้ต่อท้าย .bash_profile และเข้าสู่ระบบ bash shell อีกครั้งเพื่อดูการเปลี่ยนแปลง ในตัวอย่างนี้ จะมีเพียง 450 คำสั่งเท่านั้นที่จะถูกเก็บไว้ในประวัติทุบตี

# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450

7. เปลี่ยนชื่อไฟล์ประวัติโดยใช้ HISTFILE

ตามค่าเริ่มต้น ประวัติจะถูกจัดเก็บไว้ใน ~/.bash_history ไฟล์. เพิ่มบรรทัดต่อไปนี้ใน .bash_profile และเข้าสู่ระบบ bash shell อีกครั้งเพื่อจัดเก็บคำสั่ง history ในไฟล์ .commandline_warrior แทนที่จะเป็นไฟล์ .bash_history ฉันยังคิดไม่ออกว่าจะใช้สิ่งนี้ได้จริงหรือไม่ ฉันเห็นว่าสิ่งนี้ถูกนำมาใช้เมื่อคุณต้องการติดตามคำสั่งที่ดำเนินการจากเทอร์มินัลที่แตกต่างกันโดยใช้ชื่อไฟล์ประวัติที่แตกต่างกัน

# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior

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

8. กำจัดรายการซ้ำอย่างต่อเนื่องจากประวัติโดยใช้ HISTCONTROL

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

# pwd
# pwd
# pwd
# history | tail -4
44 pwd
45 pwd
46 pwd [Note that there are three pwd commands in history, after
executing pwd 3 times as shown above]
47 history | tail -4
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd [Note that there is only one pwd command in the history, even after
executing pwd 3 times as shown above]
58 history | tail -4

9. ลบรายการที่ซ้ำกันในประวัติทั้งหมดโดยใช้ HISTCONTROL

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

# export HISTCONTROL=erasedups
# pwd
# service httpd stop
# history | tail -3
38 pwd
39 service httpd stop
40 history | tail -3
# ls -ltr
# service httpd stop
# history | tail -6
35 export HISTCONTROL=erasedups
36 pwd
37 history | tail -3
38 ls -ltr
39 service httpd stop
[Note that the previous service httpd stop after pwd got erased]
40 history | tail -6

10. บังคับประวัติไม่ให้จำคำสั่งเฉพาะโดยใช้ HISTCONTROL

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

# export HISTCONTROL=ignorespace
# ls -ltr
# pwd
#  service httpd stop [Note that there is a space at the beginning of service,
to ignore this command from history]
# history | tail -3
67 ls -ltr
68 pwd
69 history | tail -3

11. ล้างประวัติก่อนหน้าทั้งหมดโดยใช้ตัวเลือก -c

บางครั้งคุณอาจต้องการล้างประวัติก่อนหน้าทั้งหมด แต่ต้องการให้ประวัติก้าวไปข้างหน้า

# history -c

12. แทนที่คำจากคำสั่งประวัติศาสตร์

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

ในตัวอย่างด้านล่าง !!:$ ถัดจากคำสั่ง vi จะได้รับอาร์กิวเมนต์จากคำสั่งก่อนหน้าไปยังคำสั่งปัจจุบัน

# ls anaconda-ks.cfg
anaconda-ks.cfg
# vi !!:$
vi anaconda-ks.cfg

ในตัวอย่างด้านล่าง !^ ถัดจากคำสั่ง vi จะได้รับอาร์กิวเมนต์แรกจากคำสั่งก่อนหน้า (เช่น คำสั่ง cp) ไปยังคำสั่งปัจจุบัน (เช่น คำสั่ง vi)

# cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
# vi !^
vi anaconda-ks.cfg

13. แทนที่อาร์กิวเมนต์เฉพาะสำหรับคำสั่งเฉพาะ

ในตัวอย่างด้านล่าง !cp:2 ค้นหาคำสั่งก่อนหน้าในประวัติศาสตร์ที่ขึ้นต้นด้วย cp และรับอาร์กิวเมนต์ที่สองของ cp และแทนที่ด้วยคำสั่ง ls -l ดังที่แสดงด้านล่าง

# cp ~/longname.txt /really/a/very/long/path/long-filename.txt
# ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt

ในตัวอย่างด้านล่าง !cp:$ ค้นหาคำสั่งก่อนหน้าในประวัติศาสตร์ที่ขึ้นต้นด้วย cp และรับอาร์กิวเมนต์สุดท้าย (ในกรณีนี้ ซึ่งเป็นอาร์กิวเมนต์ที่สองดังที่แสดงด้านบนด้วย) ของ cp และแทนที่ด้วยคำสั่ง ls -l ดังที่แสดงด้านล่าง

# ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

14. ปิดการใช้งานประวัติโดยใช้ HISTSIZE

หากคุณต้องการปิดการใช้งานประวัติทั้งหมดพร้อมกันและไม่ต้องการให้ bash shell จดจำคำสั่งที่คุณพิมพ์ ให้ตั้งค่า HISTSIZE เป็น 0 ดังที่แสดงด้านล่าง

# export HISTSIZE=0
# history
# [Note that history did not display anything]

15. ละเว้นคำสั่งเฉพาะจากประวัติโดยใช้ HISTIGNORE

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

# export HISTIGNORE="pwd:ls:ls -ltr:"
# pwd
# ls
# ls -ltr
# service httpd stop
# history | tail -3
79 export HISTIGNORE="pwd:ls:ls -ltr:"
80 service httpd stop
81 history
[Note that history did not record pwd, ls and ls -ltr]

การอ่านที่แนะนำ

ประวัติบรรทัดคำสั่ง Master Linux:15 เคล็ดลับและตัวอย่างอันทรงพลัง Bash 101 Hacks โดย Ramesh Natarajan . ฉันใช้เวลาส่วนใหญ่กับสภาพแวดล้อม Linux โดยธรรมชาติแล้วฉันเป็นแฟนตัวยงของบรรทัดคำสั่ง Bash และการเขียนสคริปต์เชลล์ 15 ปีที่แล้ว ตอนที่ฉันทำงานกับ *nix รสชาติต่างๆ ฉันเคยเขียนโค้ดจำนวนมากบน C เชลล์และ Korn เชลล์ หลายปีต่อมา เมื่อฉันเริ่มทำงานบน Linux ในฐานะผู้ดูแลระบบ ฉันค่อนข้างจะเป็นอัตโนมัติทุกงานที่เป็นไปได้โดยใช้ Bash Shell Scripting จากประสบการณ์ Bash ของฉัน ฉันได้เขียน eBook Bash 101 Hacks ซึ่งมีตัวอย่างเชิงปฏิบัติ 101 ตัวอย่างทั้งบนบรรทัดคำสั่ง Bash และการเขียนสคริปต์เชลล์ หากคุณกำลังคิดถึงการเรียนรู้ Bash ให้เชี่ยวชาญ ลองอ่านหนังสือเล่มนี้ดู ซึ่งจะช่วยให้คุณควบคุมบรรทัดคำสั่ง Bash และเชลล์สคริปต์ได้

บทความเกี่ยวกับ Linux ที่ยอดเยี่ยม

ต่อไปนี้คือ 15 ตัวอย่าง ที่ยอดเยี่ยมบางส่วน บทความที่คุณอาจพบว่ามีประโยชน์

  • คำสั่ง Unix LS:ตัวอย่างการใช้งานจริง 15 ตัวอย่าง
  • ยึดครอง Grep! – 15 ตัวอย่างคำสั่ง Grep ที่ใช้งานได้จริง
  • Linux Crontab:15 ตัวอย่างงาน Cron ที่ยอดเยี่ยม
  • แม่ครับ ผมเจอแล้ว! — 15 ตัวอย่างคำสั่งค้นหา Linux ที่ใช้งานได้จริง