Command Line History
Bài đăng này đã không được cập nhật trong 6 năm
Bash Command Line History Examples
Khi các bạn sử dụng Linex command line thường xuyên, việc sử dụng history về các câu lệnh mình đã dùng sẽ giúp tăng hiệu suất công việc.
Ví dụ: mấy hôm trước mình có cài 1 đống package hoặc phần mềm gì đó, mà hôm nay không hiểu máy có vấn đề gì mà phải cài lại. Ta có thể xem lại history để coi lại nhưng gì cài đặt lúc trước, thay vì đi tìm tất cả các package trên mạng, rất mất thời gian. Một ví dụ khác: trong khi chúng ta đang thao tác rất mạnh tay, nhưng có một phút không tập trung nào đó. Không nhớ là đã làm cái gì mà tự nhiên chương trình nó bị lỗi, ta cũng có thể xem lại history để xem chúng ta vừa làm cái gì mà chương trình nó lăn ra chết.
Tìm kiếm sử dụng Control+R
Sử dụng Control+R và gõ vào từ khóa muốn search thì sẽ tìm kiếm tới câu lệnh dùng gần nhất với từ khóa mình nhập vào.
dưới đây là kết quả khi mình search với từ khóa "mongodb"
Lặp lại câu lệnh vừa thực hiện với 4 cách khác nhau
- sử dụng mũi tên ↑
- Gõ !!
- !-1
- Sử dụng tổ hợp phím Ctrl+p
Thực thi chính xác câu lệnh đã dùng từ lịch sử
Trong ví dụ dưới đây nếu muốn thực thi chính xác câu lệnh: Gõ lệnh:
$ history | more
màn hình xuất hiện những câu lệnh đã thực hiện, giờ muốn thực thi lại chính xác câu lệnh số 2001:
$ !2001
nhấn enter và kết quả như sau:
Thực thi câu lệnh trước đó, cái mà bắt đầu với chính xác một từ
lấy ví dụ trên, giờ thực hiện câu lệnh sau:
$ !curl
kết quả cũng tương tự.
Xóa lịch sử
$ history -c
Thay thế từ từ lịch sử câu lệnh
Khi sử dụng tìm kiếm thông qua lịch sử câu lênh, chúng ta có thể muốn thực thi một câu lệnh khác nhưng với cùng parameter từ một câu lệnh cũ. Trong ví dụ dưới đây, !! sẽ lấy argument từ câu lệnh trước đó:
$ ls anaconda-ks.cfg
anaconda-ks.cfg
$ vi !!:$
vi anaconda-ks.cfg
Một ví dụ khác:
$ cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
$ vi !^
vi anaconda-ks.cfg
Ví dụ trên thì !^ sẽ lấy argument đầu tiên từ câu lệnh trước đó để làm argument cho câu lệnh hiện tại.
Thay thế một argument cụ thể cho một câu lệnh cụ thể
ví dụ dưới đây, !cp:2 sẽ tìm một câu lệnh bắt đầu bằng cp và lấy đối số thứ 2 cho nó.
$ cp ~/longname.txt /really/a/very/long/path/long-
filename.txt
$ ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt
hoặc
$ ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt
!cp:$ sẽ tìm một câu lệnh trước đó bắt đầu bằng cp và lấy đối số cuối cùng của nó.
History Expansion Examples
Sử dụng History Expansion có thể giúp bạn chọn đúng 1 command cụ thể đã thực hiện, dựa vào đó có thể thực hiện lại hoặc chỉnh sửa nó theo ý muốn. Kí tự ! bắt đầu cho History Expansion.
- !! lặp lai câu lệnh ngay trước đó.
- !10 lặp lại câu lệnh thứ 10 từ lịch sử command.
- !-2 lặp lại câu lênh thứ 2 từ command gần nhất.
- !string lặp lại câu lệnh với một từ khóa cụ thể.
- !?string lặp lại câu lệnh có chứ từ khóa cụ thể.
- ^str1^str2^ tháy thế str1 của command thứ nhất với str2 và thực thi nó.
- !! lấy đối số cuối cu từ câu lệnh trước đó.
- !string:n lấy đối số thứ n từ câu lệnh trước đó với "string" là bắt đầu của câu lệnh.
Ví dụ: !?string
Thực thi câu lệnh:
$ /usr/local/apache2/bin/apachectl restart
Sau đó t muốn thực thi lại câu lệnh trên:
$ !apache
-bash: !apache: event not found
ở đây sẽ gặp lỗi bởi vì không có lệnh nào bắt đầu bằng "apache", nhưng câu lệnh duới đây thì thực hiện được vì nó là một câu lệnh có chứa từ "apache"
$ !?apache
/usr/local/apache2/bin/apachectl restart
Ví dụ: ^str1^str2^
Thực hiện lệnh:
$ ls /etc/sysconfig/network
ta muốn thay ls bằng vi:
$ ^ls^vi
vi /etc/sysconfig/network
Ví dụ: !!
$ cp /etc/passwd /home/ramesh/passwd.bak
Lênh trên là lệnh copy vào thư mục có đường dẫn: /home/ramesh/passwd.bak giờ ta muốn mở file trên:
$ vi !!:$
vi /home/ramesh/passwd.bak
//or
$ vi !:$
vi /home/ramesh/passwd.bak
Ví dụ: !string:n
$ tar cvfz ~/sysconfig.tar.gz /etc/sysconfig/*
Giờ muốn ls tập tin mới tạo ra ta làm như sau:
$ ls -l !tar:2
ls -l ~/sysconfig.tar
Conclusion
Trên đây là một số ví dụ cơ bản về command line history. Hi vọng sẽ giúp ích cho các bạn được phần nào. Cảm ơn vì đã đọc bài của mình.
Nguồn: tham khảo.
All rights reserved