명령 줄에서 가장 많이 사용하는 명령을 알고 싶습니다. 커맨드 라인 사용을 향상시킬 수 있도록 알고 싶습니다. 내가 어떤 명령을 가장 많이 사용하는지 알고 있다면, 더 많은 명령을 읽고 사용하는 더 좋은 방법을 찾아 낼 수 있습니다.
나는 역사에 내가 입력 한 모든 이전 명령의 목록을 유지한다는 것을 알고있다. 가장 많이 사용되는 10 또는 20 개의 명령 목록을 보려면 어떻게 처리해야합니까?
명령 줄에서 가장 많이 사용하는 명령을 알고 싶습니다. 커맨드 라인 사용을 향상시킬 수 있도록 알고 싶습니다. 내가 어떤 명령을 가장 많이 사용하는지 알고 있다면, 더 많은 명령을 읽고 사용하는 더 좋은 방법을 찾아 낼 수 있습니다.
나는 역사에 내가 입력 한 모든 이전 명령의 목록을 유지한다는 것을 알고있다. 가장 많이 사용되는 10 또는 20 개의 명령 목록을 보려면 어떻게 처리해야합니까?
답변:
방금 http://linux.byexamples.com/ 에서이 게시물을 보았습니다.
기본적으로 간단한 한 줄 awk 스크립트를 사용합니다.
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
자세한 설명은 위의 링크에서 찾을 수 있습니다.
내 컴퓨터에 넣는 예는 다음과 같습니다.
1 211 21.1% ls
2 189 18.9% sudo
3 58 5.8% man
4 52 5.2% cd
5 43 4.3% ping
6 40 4% apropos
7 34 3.4% less
8 22 2.2% cat
9 18 1.8% which
10 18 1.8% aspell
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
awk 명령은 ~ / .bash_history에서 첫 번째 문자열을 인쇄하고 (명령 옵션 또는 인수를 표시하지 않음) sort는 모든 행을 알파벳순으로 정렬 한 다음 "uniq -c"는 중복 된 행 (입력 된 명령)을 제거하고 계산합니다. 마지막 정렬은 uniq에 의해 반환 된 개수로 명령을 정렬합니다.
-r
명령 끝에 추가 하여 역순으로 정렬하고 | head -10
결과 수를 제한 할 수도 있습니다 .
다른 답변의 스크립트는 각 명령 줄에서 실행 된 첫 번째 명령 만 계산합니다. 파이프 다음에 실행되는 명령 (예 : '|')은 포함되지 않습니다. 예를 들어,이 행 자체가 bash 히스토리에있는 경우 :
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
그런 다음 가장 많이 실행 된 명령의 반환 된 요약에서 'sort'및 'uniq'와 두 번째 'sort'는 행의 첫 번째 토큰이 아니기 때문에 포함되지 않습니다.
nelaar의 대답을 바탕으로 모든 파이프에서 bash 기록의 줄을 먼저 분할하면 충분합니다.
sed 's/|/\n/g' ~/.bash_history | awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
재미있는 추가는 카운트의 막대 차트입니다.
history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -n | tail | perl -lane 'print $F[1], "\t", $F[0], " ", "▄" x ($F[0] / 12)'
산출:
man 226 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cat 230 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
rm 235 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
ls 240 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
aura 273 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
mv 362 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sudo 534 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
vi 611 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
git 693 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
cd 754 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
긴 명령은 간격을 상쇄합니다.
printf
또는 sprintf
대신 print
.
$ history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
상위 10 개의 명령 목록을 얻는 데 사용하십시오 .
예:
1 272 27.2% svn
2 227 22.7% cd
3 159 15.9% sudo
4 57 5.7% ll
5 52 5.2% mc
6 32 3.2% rm
7 23 2.3% mkdir
8 19 1.9% exit
9 13 1.3% subl
10 13 1.3% find
글쎄요, 이것은 "Неделчо Христов"명령의 수정 된 버전입니다. 여기에 복사해서 붙여 넣으십시오 .... bash 기록을 확보하거나 날짜를 표시하면 출력 오류가 발생합니다.
이것은 이것을 사용하는 것이 좋습니다.
awk '{CMD[$1]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' .bash_history | grep -v "#" | sort -nr | nl | column -c3 -s " " -t | head -n 20