Làm chủ command history trên Linux

Khi bạn thường xuyên sử dụng dòng lệnh trên Linux, kĩ năng dùng history hiệu quả sẽ giúp bạn tăng hiệu suất công việc lên rất nhiều. 15 ví dụ sau đây giúp bạn thấy sử dụng dòng lệnh thú vị và hiệu quả như thế nào.

1. Hiển thị thời điểm với HISTTIMEFORMAT

Thông thường khi bạn gõ “history” vào dòng lệnh, nó sẽ hiển thị số thứ tự và lệnh đó, chẳng hạn:

t3318@honey:~$ history
2 ./configure
3 sudo apt-get install gettext
4 ./configure
5 gmcs
6 sudo apt-get install mono-gmcs
7 ./configure
8 make
9 make install

Để theo dõi hiệu quả hơn, ta có thể hiển thị thời điểm kèm theo như ví dụ sau đây:

t3318@honey:~$ export HISTTIMEFORMAT=’%F %T’

t3318@honey:~$ history | more

5 2008-08-18 13:04:06gmcs

6 2008-08-18 13:04:06sudo apt-get install mono-gmcs

7 2008-08-18 13:04:06./configure

8 2008-08-18 13:04:06make

9 2008-08-18 13:04:06make install

10 2008-08-18 13:04:06sudo make install

2. Tìm kiếm trên history bằng Control+R

Chắc chắn chức năng này sẽ rất hữu ích. Khi bạn vừa thực hiện xong một lệnh rất dài, bạn có thể tìm kiếm trong history một cách đơn giản bằng một từ khoá và thực hiện lại y chang lệnh đó mà không cần phải gõ lại từ đầu. Hãy nhấn Control+R and type the keyword.

Trong ví dụ sau, tôi giả sử muốn tìm lại URL của một đoạn video youtube đã lấy về bằng youtube-dl. Tôi tìm chữ “you”, và kết quả như sau:

# [Nhấn Ctrl+R từ dấu nhắc lệnh sẽ hiện ra như sau]

(reverse-i-search)`you’: youtube-dl -g “http://www.youtube.com/watch?v=YuppZpVNpiA”

[Nhấn Enter khi bạn thấy lệnh mình muốn xuất hiện và nó sẽ được thực hiện]

t3318@honey:~$ youtube-dl -g “http://www.youtube.com/watch?v=YuppZpVNpiA”

http://lax-v195.lax.youtube.com/get_video?video_id=

YuppZpVNpiA&signature=B740C32BDF978EE6AFE62344948C59

Đôi khi bạn lại muốn hiệu chỉnh một một lệnh từ history trước khi thực hiện nó. Bạn chỉ cần sử dụng phím mũi tên sang trái hoặc sang phải khi kết quả tìm kiếm xuất hiện để chỉnh sửa, sau đó nhấn Enter để thực thi lệnh.

3. Lặp lại lệnh trước đó một cách nhanh chóng theo 4 cách

  1. Dùng mũi tên lên để tìm lệnh trước đó rồi nhấn enter để thực thi
  2. !! rồi nhấn enter
  3. !-1 rồi nhấn enter
  4. Nhấn Control+P để hiển thị lệnh ngay trước đó rồi nhấn enter để thực thi (nhấn Control+P nhiều lần sẽ giống như dùng mũi tên lên)

4. Thực hiện một lệnh xác định từ history

Giả sử bạn muốn lặp lại lệnh số 10, hãy gõ !10 như ví dụ sau:

t3318@honey:~$ history | more

10 2008-08-18 13:04:06sudo make install

11 2008-08-18 13:04:06cd

12 2008-08-18 13:04:06cd .mozilla-thunderbird/q0d4500j.default/extensions/

13 2008-08-18 13:04:06ls

14 2008-08-18 13:04:06cd ..

15 2008-08-18 13:04:06ls

t3318@honey:~$ !12

cd .mozilla-thunderbird/q0d4500j.default/extensions/

t3318@honey:~/.mozilla-thunderbird/q0d4500j.default/extensions$

5. Thực thi lệnh trước đó bắt đầu với một chữ xác định

Gõ ! tiếp theo là vài chữ bắt đầu của lệnh mà bạn muốn thực hiện lại.

t3318@honey:~$ !y

youtube-dl -g “http://www.youtube.com/watch?v=YuppZpVNpiA”

http://lax-v195.lax.youtube.com/get_video?video_id=YuppZpVNpiA&signa…

6. Thiết lập tổng số lệnh lưu trong history bằng HISTSIZE

Thêm hai dòng sau vào file .bash_profile sau đó đăng nhập lại vào shell để thay đổi có hiệu lực. Ví dụ ta muốn history chứa 450 lệnh

HISTSIZE=450
HISTFILESIZE=450

7. Đổi tên file history bằng HISTFILE

Mặc định, history được lưu trong file /.bash_history. Hãy thêm dòng sau vào file .bash_profile và đăng nhập lại shell, để lưu các lệnh trong history vào file .commandline_store thay vì .bash_history. Nếu bạn chưa biết thủ thuật này dùng để làm gì, thì theo dõi các lệnh thực thi trên nhiều terminal khác nhau bằng nhiều file history khác nhau là một trường hợp ví dụ.

HISTFILE=/root/.commandline_warrior

8. Loại bỏ các dòng trùng nhau liên tiếp trong history bằng HISTCONTROL

Chạy lệnh sau trước khi dùng lệnh history:

t3318@honey:~$ export HISTCONTROL=ignoredups

9.Loại bỏ các dòng trùng nhau trong toàn bộ history bằng HISTCONTROL

Thao tác ignoredups ở trên chỉ loại bỏ các dòng trùng nhau khi chúng nằm liên tiếp. Để bỏ các dòng trùng trong toàn bộ history ta thiết lập như sau:

t3318@honey:~$ export HISTCONTROL=erasedups

10. Không cho history lưu lại 1 lệnh cụ thể bằng HISTCONTROL

Khi thực thi một lệnh, bạn có thể cho history bỏ qua lệnh đó bằng cách thiết lập HISTCONTROL ở chế độ ignorespace VÀ gõ một khoảng trắng phía trước lệnh đó

t3318@honey:~$ export HISTCONTROL=ignorespace
t3318@honey:~$ pwd
t3318@honey:~$ ls
t3318@honey:~$ rm -rf new.pls [có khoảng trắng trước rm]
t3318@honey:~$ history | tail -3
527 2008-08-18 14:37:12pwd
528 2008-08-18 14:37:37ls
529 2008-08-18 14:38:17history | tail -3

11. Xoá tất cả các history trước đó bằng tùy chọn -c

Sometime you may want to clear all the previous history, but want to keep the history moving forward.

t3318@honey:~$ history -c

t3318@honey:~$ history

31 2008-08-18 14:40:42history

12. Điền tham số thích hợp từ các lệnh trong history

Khi tìm kiếm trong history, bạn có thể muốn thực thi một lệnh khác nhưng dùng cùng các tham số như là một lệnh vừa tìm ra trong history.

Trong ví dụ sau, kí hiệu !!:$ theo sau vim sẽ lấy tham số của lệnh trước đó làm tham số cho lệnh hiện thời:

t3318@honey:~$ ls postfix-large-fs.patch
postfix-large-fs.patch
t3318@honey:~$ vim !!:$
vim postfix-large-fs.patch

Còn trong ví dụ này, kí hiệu !^ theo sau lệnh vim lấy tham số đầu tiên của lệnh trước đó (trường hợp có nhiều tham số) làm tham số cho lệnh hiện thời

t3318@honey:~$ ls postfix-large-fs.patch sources.list_hardy
postfix-large-fs.patch sources.list_hardy
t3318@honey:~$ vim !^
vim postfix-large-fs.patch

13. Điền một tham số cụ thể 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

t3318@honey:~$ cp sources.list_hardy /home/t3318/Documents/New/sources.list
t3318@honey:~$ ls -l !cp:2
ls -l /home/t3318/Documents/New/sources.list
-rw-r–r– 1 t3318 t3318 292 2008-08-18 15:02 /home/t3318/Documents/New/sources.list

Còn ở ví dụ sau, !cp:$ tìm những lệnh bắt đầu với cp và lấy tham số cuối cùng (cũng là tham số thứ 2 của lệnh cp ở trên)

t3318@honey:~$ ls -l !cp:$
ls -l /home/t3318/Documents/New/sources.list
-rw-r–r– 1 t3318 t3318 292 2008-08-18 15:02 /home/t3318/Documents/New/sources.list

14. Tắt history bằng HISTSIZE

Nếu bạn không muốn lưu lại bất kỳ lệnh gì, hãy thiết lập HISTSIZE bằng 0

t3318@honey:~$ export HISTSIZE=0
t3318@honey:~$ history
t3318@honey:~$

15. Loại bỏ những lệnh xác định ra khỏi history bằng HISTIGNORE

Đôi khi bạn không muốn bị nhiễu khi tìm history bởi quá nhiều lệnh “pwd” hay “ls”. Use HISTIGNORE để xác định tất cả các lệnh bạn muốn loại khỏi history. Lưu ý là thêm lệnh ls vào HISTIGNORE sẽ chỉ loại “ls”‘ chứ không phải “ls -l”. Bạn phải cung cấp lệnh đầy đủ cả tham số nếu cần.

t3318@honey:~$ export HISTIGNORE=”pwd:ls:ls -ltr:”

Tham khảo:

Đọc thêm:


About dongthao

The best things in life, they are free ... (Cry on my shoulder lyric)
This entry was posted in Linux Tutorial and tagged , , . Bookmark the permalink.

Có 1 phản hồi tại Làm chủ command history trên Linux

  1. Pingback: Làm chủ History trên Linux : : Tạp chí Linux

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s