Làm thế nào tôi có thể tạo một danh sách với các lệnh được sử dụng nhiều nhất trong terminal?


13

Làm thế nào tôi có thể tạo một danh sách với các lệnh được sử dụng nhiều nhất trong terminal?

Tôi biết rằng câu hỏi này có thể không gây khó chịu cho bất kỳ đề xuất nào trong tương lai đối với một số người trong chúng ta, nhưng ngay cả như thế này, danh sách này có thể hữu ích khi chúng ta không nhớ một lệnh được sử dụng một lần hoặc một vài lần trong quá khứ, khi chúng ta có thể tìm kiếm tại cuối danh sách này.


Nhà ga nào?
Elijah Lynn

Câu trả lời:


20

Chúng tôi sẽ sử dụng các hồ sơ từ .bash_historytập tin để làm điều này. Lệnh tiếp theo sẽ cung cấp cho bạn một danh sách tất cả các lệnh để bạn sử dụng chúng thường xuyên nhất:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr

Nếu bạn chỉ muốn top 10, bạn phải thêm headvào lệnh trên:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head

Để có được một đầu cụ thể, ví dụ top 5, hãy sử dụng headvới -n 5tùy chọn:

5 lệnh hàng đầu

Nếu bạn muốn danh sách theo thứ tự ngược lại (đầu với các lệnh hiếm khi được sử dụng), đừng sử dụng roprion cho lần thứ hai sort:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -n

Và cuối cùng để có được một danh sách với các lệnh được sử dụng một lần, ví dụ, sử dụng grep ' 1 '(thay đổi 1với số lượng mong muốn):

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | grep ' 1 '

Để xử lý sudocác lệnh (như sudo vim foo), thay vì chỉ {print $3}trong lệnh awk, hãy sử dụng:

{if($3 ~ /sudo/) print $4; else print $3}

Vì vậy, toàn bộ lệnh sẽ trông như sau:

history | awk 'BEGIN {FS="[ \t]+|\\|"} {if($3 ~ /sudo/) print $4; else print $3}' | sort | uniq -c | sort -nr

Ví dụ:

$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
    284 vim
    260 git
    187 find
    174 man
    168 echo
    149 rm
    134 awk
    115 pac
    110 sudo
    102 l

$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {if($3 ~ /sudo/) print $4; else print $3}' | sort | uniq -c | sort -nr | head
    298 vim
    260 git
    189 find
    174 man
    168 echo
    153 rm
    134 awk
    115 pac
    102 l
     95 cd

Bạn có thể thấy sự nhảy vọt trong tính cho vim, rmvv


1
Có thể muốn ghi có nguồn của bạn vào câu trả lời của bạn: stackoverflow.com/a/68390/1210983
ohaal

3
@ohaal Tin hay không, tôi không biết về nguồn trên; chân thành đây là một vấn đề trong phòng thí nghiệm của một người bạn đang học tại Khoa học máy tính của Iasi .
Radu Rădeanu

@muru Bản chỉnh sửa bạn thực hiện cho sudo không hoạt động cho một cái gì đó giống như sudo -ivì nó cho tôi -ilàm lệnh
geek1011

1
@ geek1011 sudo -ibắt đầu một vỏ mới. Lịch sử đó không còn trong lịch sử của bạn, mà rootlà của. Rõ ràng các lệnh này không hoạt động cho nhiều trường hợp cạnh; không có cách nào để xử lý tất cả các lệnh có thể mà không cần viết trình phân tích cú pháp của riêng bạn cho ngôn ngữ shell.
muru

1
@ geek1011 chắc chắn, thêm một kiểm tra khác, đại loại như:if ($3 ~ /sudo/ && $4 !~ /^-/)
muru

3

Lệnh bên dưới cũng sẽ liệt kê các top 10lệnh đầu cuối được sử dụng thường xuyên nhất,

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

Lệnh liệt kê tất cả các lệnh thường được sử dụng trong terminal,

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn

2

Fish & Bash - Câu hỏi không chỉ định một vỏ cụ thể, chỉ là 'thiết bị đầu cuối'. Thay đổi đầu thành bất cứ số nào bạn muốn.

history | awk '{print $1}' | sort | uniq --count | sort --numeric-sort --reverse | head -10

517 git
314 drush
197 sudo
171 cd
115 man
103 echo
 95 vi
 81 dig
 67 set
 66 ls

Bash này dường như hoạt động và ngắn hơn một chút và dễ hiểu hơn các câu trả lời khác. Tôi thích các tùy chọn dài để giúp dễ đọc trong các loại ví dụ này.

Bash

history | awk '{print $2}' | sort | uniq --count | sort --numeric-sort --reverse | head -10

73 drush
72 exit
65 sudo
46 g
40 echo
35 ll
34 tmux
30 history
30 fish
27 mux
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.