ค้นหาเว็บไซต์

พลังของ Linux "คำสั่งประวัติศาสตร์" ใน Bash Shell


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

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

1. แสดงรายการคำสั่งที่ดำเนินการล่าสุด/ทั้งหมดใน Linux

การดำเนินการคำสั่ง history อย่างง่ายจากเทอร์มินัลจะแสดงรายการคำสั่งที่ดำเนินการล่าสุดพร้อมหมายเลขบรรทัดทั้งหมด

[narad@tecmint ~]$ history

    1  PS1='\e[1;35m[\u@\h \w]$ \e[m '
    2  PS1="\e[0;32m[\u@\h \W]$ \e[m "
    3  PS1="\u@\h:\w [\j]$ "
    4  ping google.com
    5  echo $PS1
    6   tail -f /var/log/messages
    7  tail -f /var/log/messages
    8  exit
    9  clear
   10  history
   11  clear
   12  history

2. แสดงรายการคำสั่งทั้งหมดพร้อมวันที่และเวลา

วิธีค้นหา วันที่ และ การประทับเวลา เทียบกับคำสั่ง ด้วยคำสั่ง 'export' พร้อมตัวแปร จะแสดงคำสั่งประวัติพร้อมการประทับเวลาที่สอดคล้องกันเมื่อมีการดำเนินการคำสั่ง

[narad@tecmint ~]$ export HISTTIMEFORMAT='%F %T  '

      1  2013-06-09 10:40:12   cat /etc/issue
      2  2013-06-09 10:40:12   clear
      3  2013-06-09 10:40:12   find /etc -name *.conf
      4  2013-06-09 10:40:12   clear
      5  2013-06-09 10:40:12   history
      6  2013-06-09 10:40:12   PS1='\e[1;35m[\u@\h \w]$ \e[m '
      7  2013-06-09 10:40:12   PS1="\e[0;32m[\u@\h \W]$ \e[m "
      8  2013-06-09 10:40:12   PS1="\u@\h:\w [\j]$ "
      9  2013-06-09 10:40:12   ping google.com
     10  2013-06-09 10:40:12   echo $PS1
ความหมายของตัวแปร HISTTIMEFORMAT
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. กรองคำสั่งในประวัติศาสตร์

ดังที่เราเห็นคำสั่งเดียวกันถูกทำซ้ำจำนวนครั้งในเอาต์พุตด้านบน จะกรองคำสั่งง่าย ๆ หรือไม่ทำลายล้างในประวัติศาสตร์ได้อย่างไร?. ใช้คำสั่ง 'ส่งออก' ต่อไปนี้โดยการระบุคำสั่งใน HISTIGNORE='ls -l:pwd:date:' จะไม่ถูกบันทึกโดยระบบและจะไม่แสดงในคำสั่งประวัติ

[narad@tecmint ~]$ export HISTIGNORE='ls -l:pwd:date:'

4. ละเว้นคำสั่งที่ซ้ำกันในประวัติศาสตร์

ด้วยคำสั่งด้านล่างจะช่วยให้เราละเว้นรายการคำสั่งที่ซ้ำกันที่ทำโดยผู้ใช้ มีเพียงรายการเดียวเท่านั้นที่จะแสดงในประวัติ หากผู้ใช้ดำเนินการคำสั่งเดียวกันหลายครั้งใน Bash Prompt

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. ยกเลิกการตั้งค่าคำสั่งส่งออก

ยกเลิกการตั้งค่าคำสั่งส่งออกได้ทันที ดำเนินการคำสั่ง unset Export ด้วยตัวแปรทีละรายการ ไม่ว่าคำสั่งใดจะถูกส่งออกโดยคำสั่ง export

[narad@tecmint ~]$ unset export HISTCONTROL

6. บันทึกคำสั่งส่งออกอย่างถาวร

ป้อนข้อมูลต่อไปนี้ใน .bash_profile เพื่อบันทึกคำสั่ง export อย่างถาวร

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

User specific environment and startup programs

export HISTCONTROL=ignoredups

PATH=$PATH:$HOME/bin
export PATH

7. แสดงรายการคำสั่งที่ดำเนินการของผู้ใช้เฉพาะ

วิธีดูประวัติคำสั่งที่ดำเนินการโดยผู้ใช้เฉพาะ Bash เก็บบันทึกประวัติไว้ในไฟล์ '~/.bash_history' เราสามารถดูหรือเปิดไฟล์เพื่อดูประวัติคำสั่งได้

[narad@tecmint ~]$ vi .bash_history

cd /tmp/
cd logstalgia-1.0.3/
./configure
sudo passwd root
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
./configure
make
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc++
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
apt-get install make
mysql -u root -p
apt-get install grsync
apt-get install unison
unison

8. ปิดใช้งานการจัดเก็บประวัติคำสั่ง

บางองค์กรไม่เก็บประวัติการบังคับบัญชาเนื่องจากนโยบายความปลอดภัยขององค์กร ในกรณีนี้ เราสามารถแก้ไขไฟล์ .bash_profile (เป็นไฟล์ที่ซ่อนอยู่) ของผู้ใช้ และป้อนข้อมูลดังต่อไปนี้

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

User specific environment and startup programs

PATH=$PATH:$HOME/bin
HISTSIZE=0
export PATH
.bash_profile (END)

บันทึกไฟล์และโหลดการเปลี่ยนแปลงด้วยคำสั่งด้านล่าง

[narad@tecmint ~]$ source .bash_profile

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

[narad@tecmint ~]$ export HISTSIZE=0

เคล็ดลับ: ค้นหา 'HISTSIZE' และแก้ไขในไฟล์ '/etc/profile' ด้วย superuser การเปลี่ยนแปลงในไฟล์จะมีผลทั่วโลก

9. ลบหรือล้างประวัติคำสั่ง

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

[narad@tecmint ~]$ history -c

10. ค้นหาคำสั่งในประวัติศาสตร์โดยใช้คำสั่ง Grep

ค้นหาคำสั่งผ่าน '.bash_history' โดยการไพพ์ไฟล์ประวัติของคุณไปที่ 'grep' ตามด้านล่าง ตัวอย่างเช่น คำสั่งด้านล่างจะค้นหาและค้นหาคำสั่ง 'pwd' จากรายการประวัติ

[narad@tecmint ~]$ history | grep pwd

  113  2013-06-09 10:40:12     pwd
  141  2013-06-09 10:40:12     pwd
  198  2013-06-09 15:46:23     history | grep pwd
  202  2013-06-09 15:47:39     history | grep pwd

11. ค้นหาคำสั่งที่ดำเนินการล่าสุด

ค้นหาคำสั่งที่ดำเนินการก่อนหน้านี้ด้วยคำสั่ง 'Ctrl+r' เมื่อคุณพบคำสั่งที่ต้องการแล้ว ให้กด 'Enter' เพื่อดำเนินการคำสั่งเดียวกัน หรือกด 'esc' เพื่อยกเลิก

(reverse-i-search)`source ': source .bash_profile

12. เรียกคืนคำสั่งที่ดำเนินการล่าสุด

เรียกคืนคำสั่งเฉพาะที่ใช้ก่อนหน้านี้ การรวมกันของคำสั่ง Bang และ 8 (!8) จะเรียกคืนคำสั่งหมายเลข 8 ที่คุณได้ดำเนินการ

[narad@tecmint ~]$ !8

13. เรียกคืนคำสั่งเฉพาะที่ดำเนินการล่าสุด

เรียกคืนคำสั่งที่ใช้ก่อนหน้านี้ (netstat -np | grep 22) ด้วย '!' และตามด้วยตัวอักษรบางตัวของคำสั่งนั้น ๆ

[narad@tecmint ~]$ !net
netstat -np | grep 22
(No info could be read for "-p": geteuid()=501 but you should be root.)
tcp        0     68 192.168.50.2:22             192.168.50.1:1857           ESTABLISHED -
tcp        0      0 192.168.50.2:22             192.168.50.1:2516           ESTABLISHED -
unix  2      [ ]         DGRAM                    12284  -                   @/org/freedesktop/hal/udev_event
unix  3      [ ]         STREAM     CONNECTED     14522  -
unix  2      [ ]         DGRAM                    13622  -
unix  3      [ ]         STREAM     CONNECTED     12250  -                   @/var/run/hald/dbus-ujAjOMNa0g
unix  3      [ ]         STREAM     CONNECTED     12249  -
unix  3      [ ]         STREAM     CONNECTED     12228  -                   /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     12227  -

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