Trong UNIX, làm thế nào để tìm các lệnh được sử dụng phổ biến nhất trong lịch sử của unix?


8

Trong UNIX, làm thế nào để tìm các lệnh được sử dụng phổ biến nhất trong lịch sử?


Tôi nghĩ rằng đây là chủ đề ở đây, nhưng google hiển thị một số danh sách tốt để tham khảo. Rõ ràng việc sử dụng sẽ thay đổi theo phân phối và tính sẵn có của các lệnh cũng như theo người dùng, mục đích của họ và kiến ​​thức về các lệnh khác, nhưng chắc chắn có một số ít nổi lên trên cùng và hiển thị trong tất cả các danh sách về chủ đề này.
Caleb

7
Bạn có nghĩa là "tập tin lịch sử lệnh shell" hoặc "lịch sử của Unix"?
alex

Câu trả lời:


11

Nó phụ thuộc vào những gì bạn dự định bằng 'lệnh'. Từ một quan điểm, một lệnh chỉ đơn giản là một lệnh thực thi được gọi từ dòng lệnh, do đó lsls -alh /tmp/foo/bar/*tar.bzđều là lệnh ls. Một quan điểm khác là một lệnh là tổng của các phần của nó, có nghĩa là ví dụ trên là 2 lệnh riêng biệt.

Nếu ý định của bạn là đếm các lệnh hoàn toàn duy nhất trong lịch sử, bạn có thể thực thi: history | cut -d' ' -f4- | uniq -c | sort -n

Xin lưu ý rằng điều này đã được thử nghiệm trên hệ thống Debian, cú pháp đầu ra của lệnh lịch sử của bạn có thể thay đổi đôi chút. Điều chỉnh số '4' trong lệnh để chọn các cột thay thế.

Nếu bạn chỉ muốn xem xét lệnh đầu tiên mà không có đối số, thì bạn có thể thực thi: history | cut -d' ' -f4- | cut -d' ' -f1 | uniq -c | sort -n

Để bao gồm các đối số nhưng không phải bất kỳ lệnh chuỗi hoặc chuỗi nào theo sau bạn có thể thực thi: history | cut -d ' ' -f4- | cut -d'|' -f1 | uniq -c | sort -n

Xin lưu ý rằng mỗi loại sắp xếp số lượng lệnh với tần số cao nhất xuất hiện cuối cùng.


Tôi cần thêm một bổ sung sorttrước uniqđể có được số đếm chính xác vì nó chỉ kiểm tra các dòng liền kề:history | cut -d' ' -f4- | cut -d' ' -f1 | sort | uniq -c | sort -n
nocash

4

Tôi đã thấy cả câu trả lời vucartok , chúng rất hữu ích nhưng bạn cũng có thể sử dụng công cụ tuyệt vời này awk:

nếu bạn muốn liệt kê các lệnh bạn 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

để tìm lệnh được sử dụng nhiều nhất:

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

đối với tôi đó là vi:

94 vi

4

Một cách tiếp cận khác là sử dụng kế toán quy trình BSD , cũng có sẵn trên Linux (mặc dù tôi không biết liệu nó có được bật theo mặc định hay không). Về cơ bản, nó giữ một tab của tất cả các chương trình đang chạy (và một số biện pháp khác, như thời gian CPU đã tiêu thụ, v.v.) miễn là kế toán được kích hoạt. Từ đó có một vài thống kê tổng hợp có sẵn, trong số những thứ khác: loại danh sách tất cả các chương trình từng chạy trên hệ thống, được sắp xếp theo số lượng sử dụng hàng đầu.

Các lệnh cần tìm là lastcommcho nhật ký đang chạy và sacho các số liệu thống kê tổng hợp. Quay trở lại câu hỏi ban đầu, giả sử rằng hệ thống trong câu hỏi sẽ được kích hoạt tính toán kể từ khi được cài đặt, sau đó sa -nsẽ đưa ra một danh sách tất cả các lệnh từng được thực hiện trên hệ thống (cho tất cả người dùng), được sắp xếp theo tần suất. Đối với đường ống, tất nhiên mỗi phần của đường ống sẽ được tính riêng, vì mỗi phần bao gồm một quy trình mới sẽ được phân nhánh.

Để biết thêm chi tiết, tạp chí Linux có một bài viết giải thích hoạt động. Bản thân tôi đã có ý tưởng từ hướng dẫn NetBSD ; nhiều mẹo quản trị chung chung trong đó không dành riêng cho NetBSD nhưng cũng áp dụng cho các hệ thống Unix khác.


2

20 lệnh CLI được sử dụng nhiều nhất:

history |  cut -c7- | sort  | uniq -c | sort -nr | head -n 20

1

Bạn có thể sử dụng một lệnh cắt duy nhất:

history | cut -c 7-100  | sort  | uniq -c | sort -nr

1

Nếu nó chỉ dành cho phiên hiện tại, thì hashkhông có đối số.

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.