Lệnh history Linux là một lệnh dòng lệnh trong hệ điều hành Linux và Unix, dùng để liệt kê lại danh sách các lệnh mà người dùng đã từng nhập vào terminal trong quá trình làm việc. Trong bài viết này, mình sẽ cùng bạn tìm hiểu về cách sử dụng lệnh history chi tiết và hữu ích nhất, từ cơ bản đến nâng cao và những lưu ý về bảo mật bạn cần quan tâm khi thực thi lệnh.
Những điểm chính
- Khái niệm và cơ chế: Hiểu rõ lệnh
historylà gì, ý nghĩa của lệnh trong việc tăng tốc thao tác và cách lệnh này lưu trữ lịch sử lệnh thông qua bộ nhớ đệm và file.bash_history. - Hướng dẫn sử dụng từ cơ bản đến nâng cao: Nắm vững các kỹ thuật hữu ích như ghi lại thời điểm thực thi, tìm kiếm và gọi lại lệnh cũ nhanh chóng, cũng như cách dọn dẹp và kiểm soát lịch sử.
- Lưu ý về bảo mật: Nhận thức được những rủi ro bảo mật khi
historylưu lại thông tin nhạy cảm và biết cách áp dụng các biện pháp phòng ngừa hiệu quả. - Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các câu hỏi thực tế về cách sử dụng, quản lý, và các vấn đề liên quan đến việc lưu trữ lịch sử lệnh.
Lệnh history Linux là gì?
Định nghĩa
Lệnh history trong Linux là một công cụ dòng lệnh dùng để hiển thị và quản lý danh sách các lệnh đã được người dùng nhập vào terminal trong các phiên làm việc trước đó. Cụ thể, khi bạn sử dụng terminal để thao tác hệ thống, mỗi lệnh bạn gõ sẽ được hệ thống lưu lại vào một file lịch sử (thường là ~/.bash_history đối với Bash hoặc tương tự với các shell khác). Lệnh history sẽ liệt kê lại toàn bộ danh sách này, giúp bạn dễ dàng xem lại, tìm kiếm, gọi lại hoặc thao tác nhanh với các lệnh đã sử dụng trước đó.

history được dùng để hiển thị và quản lý danh sách các lệnh đã được người dùng nhập vào terminal trước đó.Ý nghĩa của lệnh history
- Tăng tốc thao tác: Lệnh
historycho phép thực hiện lại nhanh các lệnh hoặc chuỗi lệnh đã từng nhập mà không cần nhớ hoặc gõ lại chi tiết. - Điều tra và xử lý sự cố: Giúp kiểm tra quá trình thao tác trên hệ thống, phát hiện lệnh gây lỗi hoặc truy vết khi điều tra an ninh.
- Quản lý lịch sử: Cung cấp các tùy chọn để xóa dòng lệnh nhạy cảm, tùy chỉnh việc lưu lịch sử hoặc đồng bộ giữa nhiều phiên terminal.

historyVí dụ cơ bản:
history # Hiển thị danh sách các lệnh đã nhập cùng số thứ tự
history -d n # Xóa lệnh số thứ tự n khỏi lịch sử
history -c # Xóa toàn bộ lịch sử phiên làm việc hiện tạiTìm hiểu cơ chế lưu trữ của history
Lịch sử dòng lệnh là một cơ chế gồm hai giai đoạn được kiểm soát bởi các biến môi trường:
- Bộ nhớ đệm: Khi bạn đang làm việc trong một phiên terminal, tất cả các lệnh bạn gõ sẽ được lưu tạm thời vào bộ nhớ đệm trong RAM. Số lượng lệnh tối đa được lưu ở đây được quy định bởi biến môi trường
HISTSIZE. - Lưu trữ dài hạn: Khi bạn đóng phiên terminal, các lệnh từ bộ nhớ đệm sẽ được ghi vào một file văn bản. Đối với Bash, file này mặc định là
~/.bash_history. Số lượng dòng tối đa được phép lưu trong file này được kiểm soát bởi biếnHISTFILESIZE.
Thông thường, HISTFILESIZE được đặt lớn hơn HISTSIZE để đảm bảo lịch sử từ nhiều phiên khác nhau được lưu giữ lâu dài.
Ví dụ cấu hình trong ~/.bashrc:
# Giữ 5000 lệnh trong bộ nhớ đệm của phiên hiện tại
export HISTSIZE=5000
# Lưu trữ 10000 lệnh gần nhất vào file ~/.bash_history
export HISTFILESIZE=10000
Hướng dẫn sử dụng lệnh history trong Linux từ cơ bản tới nâng cao
Ghi lại thời điểm thực thi lệnh
Việc ghi lại thời điểm một lệnh được thực thi là rất quan trọng khi bạn cần đối chiếu với các file log hệ thống (/var/log/secure, lastlog) để tìm ra kẻ tấn công đã làm gì và vào lúc nào. Để bật tính năng này, hãy thêm dòng sau vào file ~/.bashrc của bạn:
echo 'export HISTTIMEFORMAT="%F %T "' >> ~/.bashrc%F: Hiển thị ngày tháng năm đầy đủ (YYYY-MM-DD).%T: Hiển thị thời gian đầy đủ (HH:MM:SS).
Sau khi thêm, bạn hãy chạy source ~/.bashrc hoặc mở lại terminal để áp dụng. Từ giờ, mỗi lệnh trong history sẽ có một dấu thời gian rõ ràng.
Tìm kiếm, gọi lệnh cũ nhanh chóng
1. Tìm kiếm thông minh với Ctrl + R
Ctrl + R là tổ hợp phím hữu ích, thay vì dùng mũi tên lên để tìm lại một lệnh cũ, bạn hãy nhấn Ctrl + R. Terminal sẽ hiển thị một lời nhắc (reverse-i-search, lúc này, bạn hãy bắt đầu gõ bất kỳ phần nào của lệnh bạn nhớ và history sẽ ngay lập tức hiển thị lệnh gần nhất khớp với chuỗi bạn đang gõ. Sau đó, bạn nhấn Ctrl + R một lần nữa để tìm các kết quả cũ hơn.

2. Gọi lại lệnh cũ nhanh chóng
!!: Thực thi lại lệnh ngay trước đó, rất hữu ích khi bạn quênsudo.
$ cat /etc/shadow
# Lỗi "Permission denied" $ sudo !!
# Tương đương với "sudo cat /etc/shadow"
!n: Thực thi lại lệnh ở dòng thứntronghistory.
$ !2011 # Chạy lại lệnh ở dòng 2011
history.!string: Thực thi lại lệnh gần nhất bắt đầu bằngstring.
$ !vim # Mở lại file gần nhất bạn đã sửa bằng vim!$: Lấy tham số cuối cùng của lệnh trước đó.
$ mkdir -p /var/www/html/my-new-project
$ cd !$ # Tương đương với "cd /var/www/html/my-new-project"Dọn dẹp và kiểm soát lịch sử
1. Xóa lịch sử
Khi bạn vô tình gõ mật khẩu hoặc một thông tin quan trọng vào terminal, history sẽ lưu lại các thông tin này và điều này có thể gây ra những rủi ro về bảo mật.
- Để xóa một dòng cụ thể, bạn thực hiện lệnh sau:
$ history # Tìm số thứ tự của lệnh cần xóa, ví dụ 999
$ history -d 999- Để xóa toàn bộ lịch sử của phiên làm việc hiện tại, bạn tiến hành chạy lệnh sau:
$ history -c2. Chạy lệnh và không lưu vào lịch sử
Nếu muốn chạy một lệnh mà không muốn bị lưu vào history, bạn có thể bắt đầu lệnh đó bằng một dấu cách.
Lưu ý
$ mysql -u root -pMyPassword123 # Dấu cách ở đầu sẽ ngăn lệnh này bị lưuChia sẻ history giữa tất cả các cửa sổ terminal
Nhiều trường hợp bạn sẽ cảm thấy bất tiện khi gõ một lệnh ở terminal này, nhưng lại không tìm thấy lệnh đó trong history của terminal khác. Để giải quyết vấn đề này, bạn thêm đoạn code vào ~/.bashrc để đồng bộ history ngay lập tức giữa tất cả các phiên terminal đang mở của mình.
# Không lưu các dòng lệnh trùng lặp.
export HISTCONTROL=ignoreboth:erasedups
# Nối thêm vào file history, không ghi đè.
shopt -s histappend
# Tăng kích thước history.
export HISTSIZE=10000
export HISTFILESIZE=20000
# Sau mỗi lệnh, ghi vào file và đọc lại history ngay lập-tức.
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r Lưu ý về bảo mật khi triển khai history
Triển khai history có thể vô tình lưu lại các thông tin quan trọng như mật khẩu, API key, token truy cập dưới dạng văn bản thô và bất kỳ ai có quyền truy cập vào tài khoản người dùng của bạn (hoặc file backup) đều có thể đọc được file ~/.bash_history.
Biện pháp phòng ngừa:
- Kiểm soát quyền truy cập file: Đảm bảo file lịch sử của bạn chỉ có thể được đọc bởi chính bạn.
chmod 600 ~/.bash_history- Chủ động tránh lưu lệnh quan trọng: Bạn tận dụng tính năng
ignorespacebằng cách thêm một dấu cách trước các lệnh chứa thông tin bí mật. - Dọn dẹp định kỳ: Bạn hãy sử dụng
history -d <số dòng>để xóa ngay lập tức một lệnh chứa thông tin nhạy cảm sau khi gõ. Đối với các hệ thống an ninh cao, bạn có thể cân nhắc việc xóa định kỳ file~/.bash_history.

Câu hỏi thường gặp
Lệnh history dùng để làm gì trong Linux?
Lệnh history giúp người dùng tra cứu, quản lý, và thực thi lại các lệnh đã từng được nhập trên terminal. Công cụ này hỗ trợ tăng tốc thao tác, kiểm tra lịch sử vận hành, hỗ trợ điều tra an ninh máy chủ và khắc phục sự cố.
File lịch sử lệnh ở đâu và có thể chỉnh sửa được không?
Thông thường, lịch sử lệnh được lưu tại ~/.bash_history (với Bash) hoặc tương tự với các shell khác. Người dùng hoàn toàn có thể chỉnh sửa, xóa dòng, hoặc xóa toàn bộ lịch sử lệnh bằng các công cụ văn bản hoặc lệnh như history -d, history -c.
Có cách nào tăng số lượng lệnh được lưu lại trong history không?
Có, bạn chỉnh sửa các biến môi trường:export HISTSIZE=10000export HISTFILESIZE=20000
Giá trị càng lớn thì càng lưu được nhiều lệnh hơn.
Có thể phục hồi lại lịch sử lệnh khi bị xóa file ~/.bash_history không?
Câu trả lời là có thể nhưng việc khôi phục trực tiếp là rất khó, trừ khi có hệ thống backup. Lời khuyên là bạn hãy luôn sao lưu định kỳ file này nếu hệ thống yêu cầu audit nghiêm ngặt.
Lệnh history có áp dụng được trên mọi shell hay không?
Lệnh history phổ biến trên Bash, Zsh, Fish shell, nhưng cú pháp và tùy chọn có thể thay đổi tùy theo từng loại shell. Vì vậy bạn nên tham khảo tài liệu chính thức hoặc sử dụng lệnh man bash để kiểm tra chi tiết shell mình đang dùng
Lệnh history trong Linux là một công cụ vừa đơn giản vừa mạnh mẽ, đóng vai trò ghi lại toàn bộ quá trình thao tác của bạn trên dòng lệnh. Khi biết cách tận dụng và quản lý lịch sử lệnh hiệu quả, bạn sẽ tăng tốc công việc, chủ động xử lý sự cố cũng như bảo vệ thông tin cá nhân tốt hơn. Đầu tư cấu hình và thực hiện các mẹo bảo mật với lệnh history là những bước đi thiết yếu giúp bạn làm chủ hoàn toàn môi trường terminal chuyên nghiệp và an toàn.




