Làm chủ lệnh history trên Linux

Khi mới làm quen với Linux, việc nhớ cũng như cách sử dụng các lệnh trong Linux không phải dễ dàng nếu bạn không sử dụng lệnh đó 1 cách thường xuyên. Một cách để tra cứu lại những lệnh đã thực thi, hoặc copy lại những lệnh quá dài đó là lệnh history.

Bài viết này sẽ giới thiệu với các bạn một số thao tác với lệnh history trên Linux.

Xem thêm loạt bài tổng hợp câu lệnh trên Linux:

Xem thông tin hệ thống

Tập tin và thư mục (1)

Tập tin và thư mục (2)

Làm việc với tập tin định dạng TEXT

Cài đặt ứng dụng

Mạng và Tường lửa

Quản trị hệ thống

In ra màn hình lịch sử câu lệnh

Khi bạn gõ lệnh history, hệ thống sẽ in ra màn hình lịch sử những câu lệnh mà user hiện tại đã thực hiện trước đó.

Ví dụ:

[user@centos7 ~]$ history
    1  ip a
    2  exit
    3  ls -la
    4  pwd
[user@centos7 ~]#

In lịch sử câu lệnh với số dòng nhất định

Nếu chỉ muốn in một số lượng dòng nhất định, các bạn thêm tham số sau lệnh history. Nó sẽ in ra số dòng mà bạn thực thi gần nhất.

Ví dụ:

[user@centos7 ~]$ history 3
   16  passwd
   17  getenforce
   18  history 3

Thực thi lại câu lệnh gần nhất

Để thực thi lại câu lệnh gần nhất, các bạn gõ 2 dấu “!”

Ví dụ:

[root@centos7 ~]# date
Wed Feb 27 01:55:48 UTC 2019
[root@centos7 ~]# !!
date
Wed Feb 27 01:56:03 UTC 2019
[root@centos7 ~]#

Thực hiện lại câu lệnh thứ n

Để thực hiện lại câu lệnh thứ “n” trong lịch sử câu lệnh các bạn sử dụng cú pháp !n

Ví dụ:

[root@centos7 ~]# history 2
  101  date
  102  history 2
[root@centos7 ~]# !101
date
Wed Feb 27 01:55:48 UTC 2019

Lặp lại câu lệnh bắt đầu bằng chuỗi string

Để thực hiện lại câu lệnh cuối cùng bắt đầu bằng một chuỗi kí tự xác định. bạn dùng cú pháp !string

Ví dụ:

[root@centos7 ~]# systemctl start httpd
[root@centos7 ~]# systemctl stop firewalld
[root@centos7 ~]# systemctl restart httpd
[root@centos7 ~]# !systemctl
systemctl restart httpd

Kết hợp câu lệnh history và grep

Khi muốn xem lịch sử câu lệnh về một vấn đề cụ thể, chúng ta có thể kết hợp lệnh history và grep.

Ví dụ:

[root@centos7 ~]# history | grep httpd
   65  yum install httpd -y
  106  systemctl stop httpd
  107  systemctl start httpd
  117  history | grep httpd

Ghi lịch sử câu lệnh ra file

Khi thực hiện câu lệnh ghi lịch sử ra file, hệ thống sẽ ghi vào file users ~/.bash_history với option “w”

[root@centos7 ~]# history -w

Xóa lịch sử câu lệnh

Để xóa lịch sử câu lệnh đã thực thi các bạn dùng lệnh sau:

[root@centos7 ~]# history -c

Xóa một dòng trong lịch sử câu lệnh

Để xóa một dòng nào đó các bạn dùng cú pháp history -d n

Ví dụ:

[root@centos7 ~]# history | grep password
  121  Wed 27 Feb 2019 01:56:03 AM PDT mysql -u root -p oops_this_is_my_password
  122  Wed 27 Feb 2019 01:56:03 AM PDT history | grep password
[root@centos7 ~]# history -d 121
[root@centos7 ~]# history | grep password
  121  Wed 27 Feb 2019 01:56:03 AM PDT history | grep password
  123  Wed 27 Feb 2019 01:56:03 AM PDT history | grep password

Thực thi lệnh mà không bị lưu vào lịch sử

Bạn có thể thực thi lệnh mà không muốn bị lưu vào lịch sử câu lệnh bằng cách sau:

[root@centos7 ~]# echo "secret command";history -d $(history 1)
secret command

Tăng kích thước lưu trữ history

Mặc định hệ thống sẽ lưu lại 1000 dòng lệnh đã thực hiện, để tăng khả năng lưu trữ các bạn làm như sau:

Mở file ~/.bashrc và thêm vào 2 dòng sau:

HISTSIZE=2000
HISTFILESIZE=2000

Sau đó logout và login lại là được.

Kiểm tra xem kích thước hiện tại như sau:

[root@centos7 ~]# echo $HISTFILESIZE
2000
[root@centos7 ~]# echo $HISTSIZE
2000

Thêm thời gian vào lịch sử câu lệnh

Để thêm thời gian vào lịch sử câu lệnh, các bạn sử dụng câu lệnh sau:

echo 'export HISTTIMEFORMAT="%c "' >> ~/.bashrc

Sau đó logout và login trở lại và kiểm tra

[root@centos7 ~]# history 5
   39  Wed 27 Feb 2019 01:46:03 AM PDT firewall-cmd --add-service=http --permanent
   40  Wed 27 Feb 2019 01:48:03 AM PDT firewall-cmd --reload
   41  Wed 27 Feb 2019 01:50:03 AM PDT tailf /var/log/messages
   42  Wed 27 Feb 2019 01:52:03 AM PDT restorecon -v /var/www/html/index.html
   43  Wed 27 Feb 2019 01:56:03 AM PDT history 5

Tìm kiếm lịch sử câu lệnh

Để tìm kiếm lịch sử câu lệnh các bạn bấm tổ hợp phím Ctrl + R sau đó gõ chuỗi kí tự cần tìm kiếm.

Ví dụ:

(reverse-i-search)`cat': cat /etc/*release
root@ITFROMZERO:~# cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS"
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

Không cho lưu một lệnh cụ thể bằng HISTCONTROL

Để không cho hệ thống lưu lại một lệnh cụ thể các bạn làm theo ví dụ sau:

root@ITFROMZERO:~# cd /home/
root@ITFROMZERO:/home# cd /root/
root@ITFROMZERO:~# export HISTCONTROL=ignorespace
root@ITFROMZERO:~#  ls -l
total 0
root@ITFROMZERO:~# history 5
  140  Wed 27 Feb 2019 01:56:03 clear
  141  Wed 27 Feb 2019 01:56:03 cd /home/
  142  Wed 27 Feb 2019 01:56:03 cd /root/
  143  Wed 27 Feb 2019 01:56:03 export HISTCONTROL=ignorespace
  144  Wed 27 Feb 2019 01:56:03 history 5
root@ITFROMZERO:~#

Ở ví dụ trên mình đã không cho lưu lệnh “ls -l” bằng cách bỏ qua lưu lệnh đó với khoảng cách phía trước câu lệnh (export HISTCONTROL=ignorespace)

Điền một tham số từ một lệnh cụ thể

Trong ví dụ sau, !cp:2 tìm kiếm những lệnh trong history bắt đầu bằng cp và lấy tham số thứ hai sau đó điền vào ls -l

root@ITFROMZERO:~# cp test.txt /home/test.csv
root@ITFROMZERO:~# ls -l !cp:2
ls -l /home/test.csv
-rw-r–r– 1 root root 292 2019-02-26 15:02 /home/test.csv

Trên đây là một số thao tác  với câu lệnh history trên Linux. Chúc các bạn thành công.