Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Làm chủ lịch sử dòng lệnh Linux:15 mẹo và ví dụ hữu ích

Làm chủ lịch sử dòng lệnh Linux:15 mẹo và ví dụ hữu ích Khi bạn sử dụng dòng lệnh Linux thường xuyên, việc sử dụng lịch sử một cách hiệu quả có thể giúp tăng năng suất đáng kể. Trên thực tế, khi bạn đã nắm vững 15 ví dụ mà tôi cung cấp ở đây, bạn sẽ thấy việc sử dụng dòng lệnh thú vị và vui nhộn hơn.

1. Hiển thị dấu thời gian bằng HISTTIMEFORMAT

Thông thường khi bạn nhập lịch sử từ dòng lệnh, nó sẽ hiển thị lệnh # và lệnh. Vì mục đích kiểm tra, việc hiển thị dấu thời gian cùng với lệnh như dưới đây có thể có ích.

# export HISTTIMEFORMAT='%F %T '
# history | more
1 2008-08-05 19:02:39 service network restart
2 2008-08-05 19:02:39 exit
3 2008-08-05 19:02:39 id
4 2008-08-05 19:02:39 cat /etc/redhat-release

2. Tìm kiếm lịch sử bằng Control+R

Tôi thực sự tin tưởng, đây có thể là đặc điểm lịch sử được bạn sử dụng thường xuyên nhất. Khi bạn đã thực hiện một lệnh rất dài, bạn có thể chỉ cần tìm kiếm lịch sử bằng từ khóa và thực hiện lại lệnh đó mà không cần phải nhập đầy đủ. Nhấn Control+R và nhập từ khóa . Trong ví dụ sau, tôi đã tìm kiếm red , hiển thị lệnh trước đó “cat /etc/redhat-release ” trong lịch sử có chứa từ đỏ.

# [Press Ctrl+R from the command prompt,
which will display the reverse-i-search prompt]
(reverse-i-search)`red': cat /etc/redhat-release
[Note: Press enter when you see your command,
which will execute the command from the history]
# cat /etc/redhat-release
Fedora release 9 (Sulphur)

Đôi khi bạn muốn chỉnh sửa một lệnh từ lịch sử trước khi thực hiện nó. Ví dụ:bạn có thể tìm kiếm httpd , sẽ hiển thị dừng dịch vụ httpd từ lịch sử lệnh, chọn lệnh này và thay đổi điểm dừng thành bắt đầu và thực hiện lại như hình bên dưới.

# [Press Ctrl+R from the command prompt,
which will display the reverse-i-search prompt]
(reverse-i-search)`httpd': service httpd stop
[Note: Press either left arrow or right arrow key when you see your
command, which will display the command for you to edit, before executing it]
# service httpd start

3. Lặp lại nhanh lệnh trước đó bằng 4 phương pháp khác nhau

Đôi khi bạn có thể lặp lại các lệnh trước đó vì nhiều lý do. Sau đây là 4 cách khác nhau để lặp lại lệnh được thực hiện gần đây nhất.

  1. Sử dụng mũi tên lên để xem lệnh trước đó và nhấn enter để thực thi lệnh đó.
  2. Nhập !! và nhấn enter từ dòng lệnh
  3. Nhập !-1 và nhấn enter từ dòng lệnh.
  4. Nhấn Control+P sẽ hiển thị lệnh trước đó, nhấn enter để thực thi nó

4. Thực thi một lệnh cụ thể từ lịch sử

Trong ví dụ sau, Nếu bạn muốn lặp lại lệnh số 4, bạn có thể thực hiện !4 như được hiển thị bên dưới.

# history | more
1 service network restart
2 exit
3 id
4 cat /etc/redhat-release
# !4
cat /etc/redhat-release
Fedora release 9 (Sulphur)

5. Thực thi lệnh trước đó bắt đầu bằng một từ cụ thể

Nhập ! theo sau là một vài chữ cái bắt đầu của lệnh mà bạn muốn thực hiện lại. Trong ví dụ sau, gõ !ps và enter, đã thực thi lệnh trước đó bắt đầu bằng ps, tức là 'ps aux | grep yp’.

# !ps
ps aux | grep yp
root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind
root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp

6. Kiểm soát tổng số dòng trong lịch sử bằng HISTSIZE

Nối hai dòng sau vào .bash_profile và đăng nhập lại vào bash shell để xem sự thay đổi. Trong ví dụ này, chỉ lệnh 450 sẽ được lưu trữ trong lịch sử bash.

# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450

7. Thay đổi tên tệp lịch sử bằng HISTFILE

Theo mặc định, lịch sử được lưu trữ trong ~/.bash_history tập tin. Thêm dòng sau vào .bash_profile và đăng nhập lại vào bash shell, để lưu lệnh lịch sử trong tệp .commandline_warrior thay vì tệp .bash_history. Tôi vẫn chưa tìm ra cách sử dụng thực tế cho việc này. Tôi có thể thấy điều này được sử dụng khi bạn muốn theo dõi các lệnh được thực thi từ các thiết bị đầu cuối khác nhau bằng tên tệp lịch sử khác.

# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior

Nếu bạn có lý do chính đáng để thay đổi tên tệp lịch sử, vui lòng chia sẻ với tôi vì tôi muốn tìm hiểu cách bạn sử dụng tính năng này.

8. Loại bỏ mục nhập lặp lại liên tục khỏi lịch sử bằng HISTControl

Trong ví dụ sau pwd được gõ ba lần, khi bạn thực hiện lịch sử, bạn có thể thấy cả 3 lần xuất hiện liên tục của nó. Để loại bỏ các bản sao, hãy đặt HISTControl thành các phần bị bỏ qua như hiển thị bên dưới.

# pwd
# pwd
# pwd
# history | tail -4
44 pwd
45 pwd
46 pwd [Note that there are three pwd commands in history, after
executing pwd 3 times as shown above]
47 history | tail -4
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd [Note that there is only one pwd command in the history, even after
executing pwd 3 times as shown above]
58 history | tail -4

9. Xóa các bản sao trong toàn bộ lịch sử bằng HISTControl

Các phần bị bỏ qua được hiển thị ở trên chỉ loại bỏ các bản sao nếu chúng là các lệnh liên tiếp. Để loại bỏ các bản sao trong toàn bộ lịch sử, hãy đặt HISTControl thành các bản đã xóa như hiển thị bên dưới.

# export HISTCONTROL=erasedups
# pwd
# service httpd stop
# history | tail -3
38 pwd
39 service httpd stop
40 history | tail -3
# ls -ltr
# service httpd stop
# history | tail -6
35 export HISTCONTROL=erasedups
36 pwd
37 history | tail -3
38 ls -ltr
39 service httpd stop
[Note that the previous service httpd stop after pwd got erased]
40 history | tail -6

10. Buộc lịch sử không ghi nhớ một lệnh cụ thể bằng HISTControl

Khi bạn thực thi một lệnh, bạn có thể hướng dẫn lịch sử bỏ qua lệnh đó bằng cách đặt HISTControl thành bỏ qua khoảng trắng VÀ gõ một khoảng trắng trước lệnh như hiển thị bên dưới. Tôi có thể thấy rất nhiều quản trị viên hệ thống cấp dưới cảm thấy hào hứng với điều này vì họ có thể ẩn một lệnh khỏi lịch sử. Thật tốt khi hiểu cách hoạt động của không gian bỏ qua. Tuy nhiên, cách tốt nhất là đừng cố tình che giấu bất cứ điều gì khỏi lịch sử.

# export HISTCONTROL=ignorespace
# ls -ltr
# pwd
#  service httpd stop [Note that there is a space at the beginning of service,
to ignore this command from history]
# history | tail -3
67 ls -ltr
68 pwd
69 history | tail -3

11. Xóa tất cả lịch sử trước đó bằng tùy chọn -c

Đôi khi bạn có thể muốn xóa tất cả lịch sử trước đó nhưng muốn giữ lịch sử tiếp tục phát triển.

# history -c

12. Thay thế các từ trong lệnh lịch sử

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

Trong ví dụ bên dưới, !!:$ bên cạnh lệnh vi lấy đối số từ lệnh trước đó đến lệnh hiện tại.

# ls anaconda-ks.cfg
anaconda-ks.cfg
# vi !!:$
vi anaconda-ks.cfg

Trong ví dụ bên dưới, !^ bên cạnh lệnh vi lấy đối số đầu tiên từ lệnh trước đó (tức là lệnh cp) đến lệnh hiện tại (tức là lệnh vi).

# cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
# vi !^
vi anaconda-ks.cfg

13. Thay thế một đối số cụ thể cho một lệnh cụ thể.

Trong ví dụ bên dưới, !cp:2 tìm kiếm lệnh trước đó trong lịch sử bắt đầu bằng cp và lấy đối số thứ hai của cp và thay thế nó bằng lệnh ls -l như hiển thị bên dưới.

# 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

Trong ví dụ bên dưới, !cp:$ tìm kiếm lệnh trước đó trong lịch sử bắt đầu bằng cp và lấy đối số cuối cùng (trong trường hợp này, cũng là đối số thứ hai như hiển thị ở trên) của cp và thay thế nó bằng lệnh ls -l như hiển thị bên dưới.

# ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

14. Vô hiệu hóa việc sử dụng lịch sử bằng HISTSIZE

Nếu bạn muốn tắt tất cả lịch sử và không muốn bash shell ghi nhớ các lệnh bạn đã nhập, hãy đặt HISTSIZE thành 0 như hiển thị bên dưới.

# export HISTSIZE=0
# history
# [Note that history did not display anything]

15. Bỏ qua các lệnh cụ thể trong lịch sử bằng HISTIGNORE

Đôi khi bạn có thể không muốn làm lộn xộn lịch sử của mình bằng các lệnh cơ bản như pwd và ls. Sử dụng HISTIGNORE để chỉ định tất cả các lệnh mà bạn muốn bỏ qua khỏi lịch sử. Xin lưu ý rằng việc thêm ls vào HISTIGNORE chỉ bỏ qua ls chứ không bỏ qua ls -l. Vì vậy, bạn phải cung cấp lệnh chính xác mà bạn muốn bỏ qua khỏi lịch sử.

# export HISTIGNORE="pwd:ls:ls -ltr:"
# pwd
# ls
# ls -ltr
# service httpd stop
# history | tail -3
79 export HISTIGNORE="pwd:ls:ls -ltr:"
80 service httpd stop
81 history
[Note that history did not record pwd, ls and ls -ltr]

Nên đọc

Làm chủ lịch sử dòng lệnh Linux:15 mẹo và ví dụ hữu ích Bash 101 Hack, của Ramesh Natarajan . Tôi dành phần lớn thời gian của mình cho môi trường Linux. Vì vậy, đương nhiên tôi là một fan hâm mộ lớn của dòng lệnh Bash và kịch bản lệnh shell. 15 năm trước, khi tôi đang nghiên cứu các phiên bản khác nhau của *nix, tôi đã từng viết rất nhiều mã trên shell C và shell Korn. Những năm sau đó, khi tôi bắt đầu làm việc trên Linux với tư cách là quản trị viên hệ thống, tôi đã tự động hóa gần như mọi tác vụ có thể bằng cách sử dụng tập lệnh shell Bash. Dựa trên kinh nghiệm Bash của tôi, tôi đã viết Sách điện tử Bash 101 Hacks chứa 101 ví dụ thực tế về cả dòng lệnh Bash và tập lệnh shell. Nếu bạn đang nghĩ đến việc thành thạo Bash, hãy tự mình đọc cuốn sách này, nó sẽ giúp bạn kiểm soát dòng lệnh Bash và tập lệnh shell của mình.

Các bài viết tuyệt vời về Linux

Sau đây là một vài 15 ví dụ tuyệt vời các bài viết mà bạn có thể thấy hữu ích.

  • Lệnh Unix LS:15 ví dụ thực tế
  • Hãy nắm bắt Grep! – 15 ví dụ về lệnh Grep thực tế
  • Linux Crontab:15 ví dụ về công việc Cron tuyệt vời
  • Mẹ ơi, con tìm thấy rồi! — 15 ví dụ thực tế về lệnh tìm kiếm Linux