立刻关机
halt
centos安装yum
apt-get install yum
查找文件夹
find / - name 需要查找文件名称
vi里面 查找字符串
“/”,后面跟要查找的字符串,再按回车。vi将光标定位在该串下一次出现的地方上。键入n跳到该串的下一个出现处,键入N跳到该串的上一个出现处。
要查找一个以search为行首的行,则键入/^search ,要查找一个以search为行尾的行,则键入/search$。
解压
tar -zxvf archive_name.tar.gz
unzip elasticsearch-head-master.zip
unzip -oq elastic-job-lite-console.war -d elastic-job-lite-console
//unzip 命令详解
http://www.2cto.com/os/201308/239355.html
压缩
tar czvf robot4.tar robot4
查看文件修改时间
stat 555.txt
查看当前目录下所有文件夹及文件
tree
如果想把内容输出到文本
tree > file.txt
读取标准输入的数据,并将其内容输出成文件
tee
例如:
bin/logstash -f config/logstash-hdy.conf --debug | tee debug.log
将调试日志输入到文本中
显示当前所有Java进程pid的命令
jps
查看文件大小(后缀是m)
du -sh alarm.log | sort -rn
linux 端口占用
netstat -anp | grep 80
lsof -i:17428
Ubuntu内存cpu监控
sudo apt-get install htop
安装完成后执行命令:htop即可
远程拷贝文件
scp monitor-kafka-consumer-0.0.1-SNAPSHOT.jar root@10.119.37.115:/usr/local// 目录拷贝 -r
scp -r ./elasticsearch-7.6.2 root@10.10.11.235:/home/es
放开所有端口
iptables -I IN_public_allow 1 -j ACCEPT
java后台启动jar包 后台启动,并且不记录日志输出
nohup java -jar jarfilename.jar >/dev/null &
nohup java -jar jarfilename.jar >log.txt &
操作系统版本查看
// Centos
cat /etc/redhat-release
// 所有
cat /proc/version
cat /etc/os-release
移除当前目录下非war结尾的文件
find . ! -name "*.war" -exec rm -rf {} \;
war 解压
//解压 到activiti-app文件夹中(没有会自动创建)
unzip activiti-app.war -d activiti-app
linux java安装路径查看
http://www.cnblogs.com/kerrycode/p/4762921.html
查看文件的第5行到第10行
sed -n '5,10p' /etc/passwd
查找过滤文本文件内容
//查看cockpit-schedule-task.log日志中包含CustomDayCounterThread关键字
//忽略大小写,可以用-i参数
grep -i CustomDayCounterThread cockpit-schedule-task.log
根据进程号 查找程序所在文件夹
ll /proc/PID
比如:ll /proc/12132
更改用户的密码过期时间
比如:给jiankunking延期3000天
sudo chage -M 3000 jiankunking
查看jiankunking过期时间信息
chage -l jiankunking
查询当前文件夹下文件数量
ls -l | grep "^-" | wc -l
查询某个文件夹下所有文件(包含文件夹中的文件)
find ./monitor-cockpit -type f | wc -l
wc是(Word Count)的缩写,即统计单词数。 -l 统计行数
xargs用作替换工具,读取输入数据重新格式化后输出
查找某个文件夹下 包含error的内容
find ./monitor-cockpit -type f | xargs cat | grep -i error
ssh登陆
ssh jiankunking@10.138.40.221
回到你操作过的上一个目录去
只需敲入 cd – 就会返回到你操作过的上一个目录中去。
kill -HUP pid
pid 是进程标识。如果想要更改配置而不需停止并重新启动服务,请使用该命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。
tcpdump
tcpdump -i ens160 host 10.119.37.147 and port 17428
//-X表示解码
tcpdump -i ens160 host 10.119.37.147 -X
判断当前主机是物理机还是虚拟机
dmidecode -s system-product-name
通过命令(nc)监听端口
nc -l 1211
Linux快速查询到历史输入命令
ctrl+r
按下这个快捷键后,进入了反向搜索状态,这时你输入一个字符,系统会找到最近一个包含这个字符的命令,如果不是你想要的命令,你可以继续输入,系统继续查找最近一个包含你所输入的字符串的命令,直到找到你要的命令。
找到你想要的命令后,你可以按回车执行这条命令,还可以按上下键查找该命令前后的命令,按左右键移动光标并修改这条命令。
为了提高查找效率,你应该输入该条命令中最特别的字符(别的命令不包含的字符)
ssh 调试模式
ssh -v jiankunking@10.119.37.199
linux查询某个关键字附近几行
grep -C 40 AlarmThread_run_error cockpit-schedule-task-2017-11-17.3.log
杀掉所有含有关键字"ansible"的进程
ps -ef|grep ansible|grep -v grep|cut -c 9-15|xargs kill -9
https://www.cnblogs.com/lichkingct/archive/2010/08/27/1810463.html
linux时间排序
//按照时间升序
ls -lrt
//按照时间降序(最新修改的排在前面)
ls -lt
临时配置java环境
export JAVA_HOME=/usr/local/java/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
将当前时间以Unix时间戳表示
date +%s
Ubuntu /etc/hosts 生效
sudo /etc/init.d/networking restart
~
当前用户的根目录
比如:jiankunking用户 ~代表:/home/jiankunking
比如:root用户 ~代表:/root
查找当前目录下所有包含sshd_config字符串的文件
find .|xargs grep -ri "sshd_config"
使用env命令显示所有的环境变量
env
linux命令查看开放哪些端口
netstat -nupl (UDP类型的端口)
netstat -ntpl (TCP类型的端口)
su sudo
su - root(或者其他用户名)这里加了"-"后表示也切换的当前的环境变量到新用户的环境变量,
su root(或者其他用户名)表示不切换环境变量到当前用户下。
查看IP连接数状况
netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
查看连接的各种状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
Linux 快速清空文件内容
> test.txt(文件大小被截为0字节)//文件内容清空
echo > filebeat.yml
https://my.oschina.net/open1900/blog/99061
文件赋予执行权限
u:表示文件所有者
g:表示同组用户
o:表示其它用户
a:表示所有用户
opt则是代表操作,可以为:
+:添加某个权限
-:取消某个权限
=:赋予给定的权限,并取消原有的权限
将/data/hlht/data/elasticsearch赋给elsearch用户组中的elsearch用户
chown -R elsearch:elsearch /data/hlht/data/elasticsearch
chmod 777 /data/hlht/data/elasticsearch
查看当前用户所属组:groups
查看进程启动及运行时间
# ps -eo lstart 启动时间
# ps -eo etime 运行多长时间ps -eo pid,lstart,etime | grep 5176
查看某个目录下文件资源占用大小
du -sh /var/log/*
查看文件夹下文件排序并显示
du -sh ./*| sort -k1 -n
某个进程内存占用
top -p 进程号
显示内存单位是K
CentOS7使用firewalld打开关闭防火墙与端口
https://www.cnblogs.com/moxiaoan/p/5683743.html
添加具有root权限用户
useradd es
vi /etc/sudoers
es ALL=(ALL) NOPASSWD:ALL
测试
su es -
sudo su -
查看磁盘空间大小命令(linux系统以磁盘分区为单位查看文件系统)
df -hl
查看已经挂载的分区和文件系统类型
df -T
0.0.0.0
一个非常特殊的IP:0.0.0.0
这个IP相当于java中的this,代表当前设备的IP。
服务重新加载
systemctl daemon-reload
Linux下 查看哪些进程占用的CPU内存资源最多
linux下获取占用内存资源最多的10个进程,可以使用如下命令组合:
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
或者
在命令行提示符执行top命令
输入大写P,则结果按CPU占用降序排序。输入大写M,结果按内存占用降序排序。(注:大写P可以在capslock状态输入p,或者按Shift+p)
磁盘io利用率
iostat -xdm 1
%util 代表磁盘繁忙程度。100% 表示磁盘繁忙, 0%表示磁盘空闲。但是注意,磁盘繁忙不代表磁盘(带宽)利用率高
https://www.cnblogs.com/quixotic/p/3258730.html
进程级IO监控 iotop
iotop 顾名思义, io版的top
多U多核CPU监控
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况
第三行:cpu状态
6.7% us — 用户空间占用CPU的百分比。
0.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
92.9% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比
centos查看安装了某个包
yum方法安装的,可以用yum list installed查找,如果是查找指定包,命令后加 | grep “软件名或者包名”;
swap
关闭
swapoff -a
在关闭的时候,可以通过free -mh查看swap内存占用,swapoff -a会逐渐将swap内存转移到内存中
打开
swapon -a
echo "vm.swappiness = 1">> /etc/sysctl.conf
sysctl -p (执行这个使其生效,不用重启)
软连接
将/data/blog/wordpress/nginx_conf/2_jiankunking.com.key(真实存在) 软连接到/etc/nginx/目录下
ln -s /data/blog/wordpress/nginx_conf/2_jiankunking.com.key /etc/nginx/
移动到文件末尾
可以按 shift+g 即可跳到文件底部
要返回文件顶部的时候 按 gg即可
shift+$是移动到行尾,0是移动到行首
字符替换
86替换成 214
sed -i "s/10.133.0.86/10.138.25.214/g" lishan.txt
粗暴安装openjdk
yum install java-1.8.0-openjdk* -y
sudo apt-get install default-jdk -y
CentOS7 查看开机启动项和程序服务
systemctl list-unit-files (查看开机启动项)systemctl list-unit-files | grep 程序名称 (查看某些服务开机启动状态)systemctl list-unit-files | grep enable (查看哪些为开机启动服务)
ldd
ldd命令 用于打印程序或者库文件所依赖的共享库列表。
可以用来查看golang编译的二进制程序的依赖。
Golang 在编译的时候,可以关闭CGO(CGO_ENABLED=0),从而移除依赖。
iptables 放开某个端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
pmap
pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息。
语法或用法:
pmap PID
pmap [options] PID
在输出中它显示全部的地址,kbytes,mode还有mapping。
选项
- -x extended显示扩展格式
- -d device显示设备格式
- -q quiet不显示header/footer行
- -V 显示版本信息
扩展进程内存
[root@info ~]# pmap -x 1013
1013: /usr/sbin/sshd
Address Kbytes RSS Dirty Mode Mapping
00110000 1480 92 0 r-x- libcrypto.so.1.0.0
00282000 80 80 80 rw-- libcrypto.so.1.0.0
00296000 12 8 4 rw-- [ anon ]
00299000 36 0 0 r-x- libkrb5support.so.0.1
002a2000 4 4 4 rw-- libkrb5support.so.0.1
002a3000 16 0 0 r-x- libplc4.so
002a7000 4 4 4 rw-- libplc4.so
002ab000 88 4 0 r-x- libaudit.so.1.0.0
002c1000 4 4 4 r--- libaudit.so.1.0.0
002c2000 4 4 4 rw-- libaudit.so.1.0.0
002c3000 216 4 0 r-x- libgssapi_krb5.so.2.2
002f9000 4 4 4 rw-- libgssapi_krb5.so.2.2
002fa000 808 4 0 r-x- libkrb5.so.3.3
003c4000 24 24 24 rw-- libkrb5.so.3.3
003ca000 152 4 0 r-x- libk5crypto.so.3.1
003f0000 4 4 4 rw-- libk5crypto.so.3.1
003f1000 92 0 0 r-x- libnssutil3.so
00408000 12 12 12 rw-- libnssutil3.so
0040b000 12 0 0 r-x- libplds4.so
0040e000 4 4 4 rw-- libplds4.so --- --- --- --- ---
total kB 8232 - - -
这里的Address,Kbyte,Dirty,RSS,mode还有mapping的说明如下
扩展和设备格式区域
- Address: 内存开始地址
- Kbytes: 占用内存的字节数(KB)
- RSS: 保留内存的字节数(KB)
- Dirty: 脏页的字节数(包括共享和私有的)(KB)
- Mode: 内存的权限:read、write、execute、shared、private (写时复制)
- Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈)
- Offset: 文件偏移
- Device: 设备名 (major:minor)
lsof
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。
在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
直接输入lsof部分输出为:
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。
lsof输出各列信息的意义如下:
- COMMAND:进程的名称 PID:进程标识符
- USER:进程所有者
- FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等
- DEVICE:指定磁盘的名称
- SIZE:文件的大小
- NODE:索引节点(文件在磁盘上的标识)
- NAME:打开文件的确切名称
FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改,txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。
其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为 10。u 表示该文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。
与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。
根据进程号查看某个进程文件的启动位置
ls -al /proc/进程id
输出
注意:
- cwd符号链接的是进程运行目录;
- exe符号连接就是执行程序的绝对路径;
- cmdline就是程序运行时输入的命令行命令;
- environ记录了进程运行时的环境变量;
- fd目录下是进程打开或使用的文件的符号连接。
linux 查看进程启动命令
先通过ps找到进程pid,再在/proc/进程pid/cmdline查看启动命令
cat /proc/进程pid/cmdline
可使用 tr 或者 strings命令将命令分割成可读方式(推荐第二种)
cat /proc/进程pid/cmdline | tr "\0" " "
或者
cat /proc/进程pid/cmdline | strings -1
查看系统进程中的线程
ps -xH
在宿主机上根据进程PID查找归属容器ID
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i &&echo ID=$i; done |grep -A 10 27888
查看网络状态
netstat -s
结果如下:
[jiankunking@7b76fa ~]# netstat -s
Ip:274142020723 total packets received7 with invalid headers78827273118 forwarded36 with unknown protocol0 incoming packets discarded195314721724 incoming packets delivered263133635745 requests sent out8 dropped because of missing route14 reassemblies required7 packets reassembled ok
Icmp:31269654 ICMP messages received163 input ICMP message failed.ICMP input histogram:destination unreachable: 12385timeout in transit: 7echo requests: 31256550echo replies: 519timestamp request: 38timestamp reply: 4address mask request: 8731274363 ICMP messages sent0 ICMP messages failedICMP output histogram:destination unreachable: 17235time exceeded: 6echo request: 584echo replies: 31256496timestamp requests: 4timestamp replies: 38
IcmpMsg:InType0: 519InType3: 12385InType8: 31256550InType11: 7InType13: 38InType14: 4InType15: 18InType17: 87InType37: 23InType165: 23OutType0: 31256496OutType3: 17235OutType8: 584OutType11: 6OutType13: 4OutType14: 38
Tcp:83061084 active connections openings228457168 passive connection openings10120176 failed connection attempts66634474 connection resets received1032 connections established194719468285 segments received303802796563 segments send out393689996 segments retransmited126107 bad segments received.2611637745 resets sentInCsumErrors: 60267
Udp:524696654 packets received6207 packets to unknown port received.0 packet receive errors532508922 packets sent0 receive buffer errors0 send buffer errors
UdpLite:
TcpExt:53308 invalid SYN cookies received9941962 resets received for embryonic SYN_RECV sockets51 packets pruned from receive queue because of socket buffer overrun8514 ICMP packets dropped because they were out-of-window3486343 TCP sockets finished time wait in fast timer39519279 TCP sockets finished time wait in slow timer10913 passive connections rejected because of time stamp1765 packets rejects in established connections because of timestamp3469035831 delayed acks sent1166770 delayed acks further delayed because of locked socketQuick ack mode was activated 20460837 times21159 times the listen queue of a socket overflowed32135 SYNs to LISTEN sockets dropped264888 packets directly queued to recvmsg prequeue.45574288 bytes directly in process context from backlog444237272 bytes directly received in process context from prequeue106173559010 packet headers predicted118340 packets header predicted and directly queued to user8022602149 acknowledgments not containing data payload received88651458774 predicted acknowledgments24287671 times recovered from packet loss by selective acknowledgements1 bad SACK blocks receivedDetected reordering 7554 times using FACKDetected reordering 4775 times using SACKDetected reordering 3228 times using time stamp5436 congestion windows fully recovered without slow start6007 congestion windows partially recovered using Hoe heuristic2656395 congestion windows recovered without slow start by DSACK730936 congestion windows recovered without slow start after partial ackTCPLostRetransmit: 11413154972076 timeouts after SACK recovery11391 timeouts in loss state245558666 fast retransmits8591359 forward retransmits21274413 retransmits in slow start4923871 other TCP timeoutsTCPLossProbes: 112468779TCPLossProbeRecovery: 946472822301617 SACK retransmits failed1 times receiver scheduled too late for direct processing1596 packets collapsed in receive queue due to low socket buffer20477405 DSACKs sent for old packets37717 DSACKs sent for out of order packets93676458 DSACKs received10583 DSACKs for out of order packets received64236162 connections reset due to unexpected data65947 connections reset due to early user close6268 connections aborted due to timeoutTCPSACKDiscard: 1TCPDSACKIgnoredOld: 12821TCPDSACKIgnoredNoUndo: 62129283TCPSpuriousRTOs: 612581TCPSackShifted: 308947475TCPSackMerged: 410173050TCPSackShiftFallback: 191165233TCPDeferAcceptDrop: 34467IPReversePathFilter: 25380TCPRetransFail: 30045TCPRcvCoalesce: 6992560873TCPOFOQueue: 654814955TCPOFOMerge: 38603TCPChallengeACK: 660379TCPSYNChallenge: 66622TCPSpuriousRtxHostQueues: 72550TCPAutoCorking: 31101563246TCPFromZeroWindowAdv: 879TCPToZeroWindowAdv: 884TCPWantZeroWindowAdv: 10290TCPSynRetrans: 17888328TCPOrigDataSent: 230944418777TCPHystartTrainDetect: 5900185TCPHystartTrainCwnd: 171155215TCPHystartDelayDetect: 21081TCPHystartDelayCwnd: 3272500TCPACKSkippedSynRecv: 12TCPACKSkippedPAWS: 85TCPACKSkippedSeq: 21918TCPACKSkippedTimeWait: 35TCPACKSkippedChallenge: 156
IpExt:InMcastPkts: 198449OutMcastPkts: 201InBcastPkts: 39281084InOctets: 337132214927778OutOctets: 445692198946724InMcastOctets: 61908851OutMcastOctets: 31553InBcastOctets: 3190817867InNoECTPkts: 418945982547InECT0Pkts: 517992
你可能会问:这些不是静态值吗,我想知道当前情况啊?这个也很好解决,你可以这样做:
watch --diff netstat -s
这个命令会把发生变化的数值进行高亮,方便我们查看:
如果想看被拒绝的
[jiankunking@7b76fa ~]# netstat -s |grep reject10913 passive connections rejected because of time stamp1765 packets rejects in established connections because of timestamp
这个错误信息就是服务器tcp_tw_recycle参数引起的
https://blog.csdn.net/zhuyiquan/article/details/68925707?spm=1001.2014.3001.5506
Linux 开机自启配置文件位置
/usr/lib/systemd/system/
/etc/systemd/system/
80、linux 下查看硬盘型号、大小等信息
[jiankunking@hddxps8156 ~]# smartctl --all /dev/sda
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1160.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org=== START OF INFORMATION SECTION ===
Vendor: INSPUR
Product: LOGICAL VOLUME
Revision: 5.00
Compliance: SPC-3
User Capacity: 5,761,048,862,720 bytes [5.76 TB]
Logical block size: 512 bytes
Physical block size: 4096 bytes
Rotation Rate: Solid State Device
Logical Unit id: 0x600508b1001c19b6fe897d643b229c7a
Serial number: RANA18EC0649A10
Device type: disk
Local Time is: Thu Aug 3 16:42:10 2023 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Temperature Warning: Disabled or Not Supported=== START OF READ SMART DATA SECTION ===
SMART Health Status: OK
Current Drive Temperature: 0 C
Drive Trip Temperature: 0 CError Counter logging not supportedDevice does not support Self Test logging
Smartctl安装命令
yum install smartmontools -y
tcpdump保存到pcap文件
tcpdump -i eth0 host 10.201.36.156 -w /tmp/10.201.36.156.cap
tcpdump 安装命令集锦
if command -v apt >/dev/null 2>&1; thenecho 'Dectect apt,running...'apt-get -y --allow-releaseinfo-change update// 或者 apt-get update apt-get -y install tcpdumpelif command -v yum >/dev/null 2>&1; thenecho 'Dectect yum,running...'yum -y install tcpdumpelif command -v apk >/dev/null 2>&1;thenecho 'Dectect apk,running...'apk -y updateapk -y add tcpdumpelseecho "Err: no path to apt-get or yum or apk" >&2;fi
–allow-releaseinfo-change
允许update命令继续从更改了发行信息存储库中下载数据,这些信息指示了一个新的主要版本。对于这种存储库,APT将在update时失败,直到确认了更改,以确保用户为更改做好了准备。另请参阅 apt-secure(8) 了解有关概念和配置。
阿里云 ECS Docker、Docker Compose安装
https://blog.csdn.net/jiankunking/article/details/135203144?spm=1001.2014.3001.5501
netstat分组统计源ip连接数量
netstat -ant |awk '{print $5}'|cut -d ":" -f1|sort |uniq -c |sort -nr |head -10
解释如下:
netstat -ant 获取网络连接
netstat -ant |awk ‘{print $5}’ 获取第五列,也就是源ip:端口
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1 切割第5列,等同于split,获取切割后的第一个字段,也就是源ip
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1|sort |uniq -c 排序加统计
netstat -ant |awk ‘{print $5}’|cut -d “:” -f1|sort |uniq -c |sort -nr |head -10 再排序取前十