Làm chủ command history trên Linux
Posted by dongthao on August 18, 2008 http://kythuatmaytinh.wordpress.com
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
- Dùng mũi tên lên để tìm lệnh trước đó rồi nhấn enter để thực thi
- Gõ !! rồi nhấn enter
- Gõ !-1 rồi nhấn enter
- 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:”
No comments:
Post a Comment