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ử?
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âu trả lời:
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 đó ls
và ls -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.
sort
trướ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
Tôi đã thấy cả câu trả lời vucar và tok , 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
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à lastcomm
cho nhật ký đang chạy và sa
cho 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 -n
sẽ đư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.
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