Sức mạnh của lệnh 'history' trong Shell Bash Linux

Ta thường sử dụng lệnh history trong công việc hàng ngày để kiểm tra lịch sử các lệnh hoặc để có thông tin về các lệnh được thực thi bởi người dùng.

Trong bài viết này, ta sẽ tìm hiểu cách sử dụng lệnh history một cách hiệu quả để trích xuất các lệnh đã được thực thi bởi người dùng trong Bash shell. Điều này có thể hữu ích cho mục đích kiểm tra hoặc tìm hiểu lệnh đã được thực thi vào một ngày và thời gian cụ thể.

Mặc định, ngày và timestamp không hiển thị khi thực thi lệnh history. Tuy nhiên, Bash shell cung cấp các công cụ giao diện dòng lệnh (CLI) để chỉnh sửa lịch sử lệnh của người dùng.

Hãy khám phá một số mẹo hữu ích, thủ thuật và sức mạnh của lệnh history.

1. Liệt kê tất cả các lệnh đã được thực thi gần đây trên Linux

Để xem danh sách đầy đủ các lệnh được thực thi gần đây cùng với số dòng của chúng, sử dụng lệnh sau.

history
Hiển thị lệnh đã được thực thi gần đây

2. Liệt kê tất cả các lệnh với ngày và timestamp

Để liệt kê tất cả các lệnh với ngày và timestamp trên Linux, bạn có thể sử dụng lệnh history kết hợp với biến môi trường HISTTIMEFORMAT như sau.

export HISTTIMEFORMAT="%F %T "

Bây giờ, bạn có thể sử dụng lệnh history để liệt kê tất cả các lệnh với các ngày và timestamps tương ứng.

history

Dưới đây là các định dạng được sử dụng trong HISTTIMEFORMAT='%F %T ':

  • %F: Đại diện cho ngày đầy đủ trong định dạng “YYYY-MM-DD”.
  • %T: Đại diện cho thời gian trong định dạng “HH:MM:SS”.
Kích hoạt Timestamp trong lệnh history

3. Bỏ qua một số lệnh trong lịch sử

Để bỏ qua một lệnh trong lệnh history, bạn có thể sử dụng biến môi trường "HISTIGNORE", được sử dụng để chỉ định các lệnh không nên được ghi lại trong lịch sử lệnh.

Bạn có thể đặt nó bằng cách sử dụng lệnh "export" kế tiếp là lệnh muốn bỏ qua.

export HISTIGNORE='ls -l:pwd:date:'

Trong ví dụ này, “ls -l“, “pwd“ và “date” được chỉ định, có nghĩa là bất kỳ lệnh nào chứa các chuỗi này sẽ không được lưu trong lịch sử.

4. Bỏ qua các lệnh trùng lặp trong lịch sử

Để bỏ qua các lệnh trùng lặp trong lịch sử, bạn có thể sử dụng lệnh sau, nó sẽ chỉ định hệ thống không lưu lại các lệnh lặp lại trong lịch sử, giúp giữ cho lịch sử sạch và không có các bản ghi trùng lặp dư thừa.

export HISTCONTROL=ignoredups

Tùy chọn ignoredups cho biết hệ thống không ghi lại các lệnh trùng lặp khi ghi chúng vào lịch sử. Nếu bạn thực thi cùng một lệnh nhiều lần liên tiếp, chỉ có lần xuất hiện đầu tiên sẽ được lưu trong lịch sử.

5. Lưu lệnh xuất khẩu vĩnh viễn

Để lưu cấu hình cho HISTTIMEFORMATHISTIGNORE, và HISTCONTROL vĩnh viễn trong môi trường Linux của bạn, bạn có thể thêm chúng vào tệp .bash_profile để thực thi mỗi khi bạn khởi động một phiên shell mới.

nano ~/.bash_profile

Thêm các dòng sau vào tệp .bash_profile để đặt các biến môi trường:

export HISTTIMEFORMAT="%F %T "
export HISTIGNORE="some:commands:to:ignore"
export HISTCONTROL=ignoredups

Để áp dụng những thay đổi, bạn có thể khởi động lại cửa sổ terminal hoặc chạy lệnh sau trong terminal:

source ~/.bash_profile

6. Hủy lệnh xuất khẩu

Để hủy các thiết lập cho biến môi trường HISTTIMEFORMAT và HISTCONTROL, bạn có thể sử dụng lệnh unset để xóa giá trị của chúng, từ đó khôi phục lại các thiết lập mặc định.

unset HISTTIMEFORMAT
unset HISTCONTROL

Sau khi thực thi các lệnh này, hiển thị timestamp trong lịch sử lệnh sẽ trở về cấu hình mặc định và các lệnh trùng lặp sẽ không được lọc tự động nữa.

7. Liệt kê các lệnh được thực thi của người dùng cụ thể

Để liệt kê các lệnh đã được thực thi của người dùng cụ thể, bạn có thể sử dụng tệp .bash_history của người dùng, chứa lịch sử các lệnh đã được thực thi trong Bash shell.

sudo cat /home/username/.bash_history

Nếu bạn muốn lọc lịch sử lệnh dựa trên mẫu cụ thể, sử dụng lệnh grep kết hợp với các lệnh chứa từ khóa như được hiển thị.

sudo cat /home/username/.bash_history | grep "ls"

8. Vô hiệu hóa việc lưu lịch sử các lệnh

Để vô hiệu hóa việc lưu lịch sử các lệnh trên Linux, bạn có thể hủy đặt biến HISTFILE, mà có trách nhiệm duy trì lịch sử các lệnh trong một tệp tin.

unset HISTFILE

Bằng cách hủy thiết lập biến HISTFILE, bạn ngăn hệ thống lưu lịch sử lệnh, đảm bảo các lệnh được thực thi trong terminal không được ghi lại cho các phiên sau.

Lưu ý quan trọng rằng thay đổi này chỉ áp dụng cho phiên hiện tại và không tồn tại qua các phiên terminal khác nhau. Nếu bạn muốn thực hiện thay đổi này vĩnh viễn, bạn có thể cân nhắc cập nhật tệp cấu hình .bash_profile của shell để hủy đặt biến HISTFILE mỗi khi đăng nhập.

9. Xóa hoặc xóa lịch sử các lệnh

Bạn có thể sử dụng các phím mũi tên lên và xuống để xem các lệnh đã sử dụng trước đó, điều này có thể hữu ích hoặc làm phiền. Để xóa hoặc xóa tất cả các mục khỏi danh sách lịch sử lệnh bash, bạn có thể sử dụng tùy chọn '-c'.

history -c

Để xóa lịch sử lệnh cho tất cả người dùng, bạn có thể xóa hoặc cắt giảm tệp lịch sử nằm tại /home/[username]/.bash_history cho mỗi người dùng.

> /home/[username]/.bash_history
OR
rm /home/[username]/.bash_history

10. Tìm kiếm các lệnh trong lịch sử bằng lệnh grep

Để lọc các lệnh trong đầu ra lệnh history, bạn có thể sử dụng lệnh grep, chỉ hiển thị các lệnh từ lịch sử chứa từ khóa như được hiển thị.

history | grep "ls"
history | grep "pwd"
history | grep "date"

11. Tìm kiếm các lệnh gần đây trong lịch sử

Để tìm kiếm các lệnh gần đây trong lịch sử, bạn có thể sử dụng lệnh grep kết hợp với từ khóa chứa từ khóa như “ssh” từ lịch sử lệnh.

history | grep "ssh"

Bạn cũng có thể tìm kiếm các lệnh đã thực thi trước đó bằng cách sử dụng lệnh Ctrl+r'. Sau khi tìm thấy lệnh mà bạn muốn, nhấn ‘Enter‘ để thực thi nó, hoặc nhấn ‘esc‘ để hủy bỏ.

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

12. Nhớ lại lệnh được thực thi cuối cùng trong lịch sử

Để gọi lại lệnh được thực thi cuối cùng từ một vị trí cụ thể trong lịch sử lệnh trên Linux, bạn có thể sử dụng lệnh history kết hợp với số dòng cụ thể.

Để xem lịch sử lệnh với số dòng, sử dụng lệnh history:

history

Tiếp theo, xác định số dòng liên quan đến lệnh bạn muốn gọi lại, trong trường hợp này là lệnh số 8, sau đó gọi lại lệnh bằng ! kế tiếp là số dòng như được hiển thị.

!8

13. Nhớ lại lệnh cụ thể đã được thực thi gần đây nhất

Bạn có thể gọi lại một lệnh đã được sử dụng trước đó, chẳng hạn như “netstat -np | grep 22”, bằng cách sử dụng ký tự '!' kế tiếp là một số chữ cái từ lệnh đó.

Ví dụ, nếu bạn muốn gọi lại lệnh “netstat -np | grep 22”, bạn có thể nhập '!net' và nhấn Enter trong terminal, điều này sẽ thực thi lệnh gần đây nhất bắt đầu bằng “net” từ lịch sử lệnh của bạn.

!net
Kết luận

Để kết luận, chúng ta đã chỉ ra tính hữu dụng của lệnh history, nhưng vẫn còn nhiều điều để khám phá. Chúng tôi rất muốn nghe về trải nghiệm của bạn với lệnh history!

Chia sẻ chúng với chúng tôi trong ô comment bên dưới.