[置顶] linux-命令收集
引入一个更为专业的命令收集站点 :
统计第一列相同,第二列平均值
cat xxx |awk '{a[$1]+=$2;c[$1]++}END{l=asorti(a,b);for(i=1;i<=l;i++)print b[i],a[b[i]]/c[b[i]]}'
时间段统计日志:
sed -n '/2018:02:30/,/2018:03:00/p' www.log |awk '{a[$1]+=1;} END {for(i in a){print a[i]" "i;}}' |sort -t " " -k 1 -n
sed -n '/2018:01:50/,/2018:02:00/p' www.log |grep "list?" |awk '{a[$1]+=1;} END {for(i in a){print a[i]" "i;}}' |sort -t " " -k 1 -n
按照ip排序
# 升序
sort -t'.' -k1,1n -k2,2n -k3,3n -k4,4n ip.txt
# 降序
sort -t'.' -k1,1nr -k2,2nr -k3,3nr -k4,4nr ip.txt
shell中获取脚本绝对路径
SHELL_DIR=$(dirname $(readlink -f "$0"))
SHELL_DIR=$(cd `dirname $0`; pwd)
tailf 显示高亮
tail -f www.log | perl -pe 's/(\/CandyActivity\/GetSilkProductRecord)/\e[1;31m$1\e[0m/g'
证书生成
## 自签证书
openssl req -newkey rsa:2048 -x509 -nodes -days 3560 -out server.crt -keyout server.key
## ssl key ,csr 生成
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
https://blog.csdn.net/cy_cai/article/details/54632671
#CA合并
#厂商提供的cer文件,全部合并为后缀为pem的文件,并将域的cer放在文件最前面,cat 在后面
#nginx导入key和pem即可
openssl 通过证书加密解密大文件
mkdir /etc/encrypt && cd /etc/encrypt
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
openssl rand -base64 32 > key.bin # 远程传输建议每次都新建
# 加密
openssl rsautl -encrypt -pubin -inkey /etc/encrypt/public.pem -in /etc/encrypt/key.bin -out /etc/encrypt/key.bin.enc
openssl aes-256-cfb -a -pbkdf2 -salt -in filename.gz -out filename.gz.enc -k $(cat /etc/encrypt/key.bin)
# 解密
openssl rsautl -decrypt -inkey private.pem -in key.bin.enc -out key.bin
openssl aes-256-cfb -d -a -pbkdf2 -in filename.gz.enc -out filename.gz -k $(cat key.bin)
# 加密
tar -czf - * | openssl aes-256-cfb -salt -k "8CASiU6zxAWy9QZ8wj+MgIzqHsBnXjgkHNvWeJ0urHw=" -out ssh.key.pem.enc
openssl aes-256-cfb -d -salt -in ssh.key.pem.enc -out ssh_key.pem.tar.gz
免密登陆
# 172.16.10.11 无密码登陆 172.16.10.12
# 172.16.10.11 生成秘钥
# rsa 默认 2048
ssh-keygen -t rsa -b 2048
# 然后一直回车,可以设置认证密码
# id_rsa 私钥(不要外传)
# id_rsa.pub (公钥导入本地authorized_keys(600)中,将私钥传给客户端,客户端即可通过私钥连接当前服务器)
# 将本地的秘钥复制到服务器上就可以了,或者拷贝追加到服务器的authorized_keys文件中,即可本地登陆远程主机
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.10.12
手动检测: 每分钟连接次数
netstat -ntu | awk '{print $5}' |cut -d: -f1|sort|uniq -c |sort -n
netstat -an |grep ^tcp.*:80|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn
linux 用tcpdump查看80端口访问有哪些IP
tcpdump -i eth0 -tnn dst port 80 -c 1000|awk -F"." '{print $1"."$2"."$3"."$4}'|sort|uniq -c|sort -rn|head -n20
查看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
linux 查看命令来源于那个包(yum也适用)
dnf provides htop
linux 查看已安装的命令原来于那个包
rpm -qf /usr/bin/htop
linux 查看rpm包信息
rpm -qpi xxx.rpm
linux 查看rpm包内容
rpm -qpl xxx.rpm
linux 查看rpm包依赖
rpm -qpR xxx.rpm
linux 查看rpm包带的执行脚本
rpm -qp --scripts xxx.rpm
linux 自动安装rpm包依赖(dnf默认已存在该功能)
yum -y localinstall xxx.rpm
linux rpm循环安装包依赖
# 关于循环安装是指的是主rpm包的所有的依赖包在同一目录下,会自动安装其依赖后在安装主rpm包,(此方法缺陷较大)
rpm -ivh --aid *.rpm
清除僵死进程
ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9
docker 修改重命名镜像
docker tag IMAGEID(镜像id) REPOSITORY:TAG仓库:标签)
docker 将容器修改为随docker启动而启动
docker update --restart always xxxx
LNMP/LAMP 环境查看编译参数
# nginx
/pathto/nginx/sbin/nginx -V
# apache
/pathto/apache/build/config.nice
# mysql
grep CONFIGURE_LINE /usr/bin/mysqlbug
# php
/pathto/php/bin/php -i|grep configure
让不同的进程使用不同的cpu
# taskset -c,--cpu-list command
taskset -c 0,1,2,3 /etc/init.d/mysql start
watch 监测命令运行结果
# 类似tailf,但是针对命令
# 查看当前目录内容变化
# watch ls
# watch "netstat -ntu | awk '{print $5}' |cut -d: -f1|sort|uniq -c |sort -n"
创建一个具有特定权限的空文件
#install -b -m <权限> <来源> <目标>
install -b -m 777 /dev/null file.txt
通过sshfs 远程挂载目录
yum install sshfs
# mount
sshfs -o reconnect,_netdev,user,idmap=user,identityfile=/pathto/id_rsa,default_permissions user@host:/path /mnt/pathto
# /etc/fstab
user@host:/path /mnt/pathto fuse.sshfs noauto,x-systemd.automount,reconnect,_netdev,user,idmap=user,identityfile=/pathto/id_rsa,allow_other,default_permissions 0 0
tmpfs 一种基于内存的文件系统
mount -t tmpfs -o size=1024M tmpfs /mnt/usb02
文件描述符相关
点击展开详细内容
-
系统最大打开的文件描述符数量
cat /proc/sys/fs/file-nr 10848 0 6815744 # 第一个值: 当前系统已分配使用的打开文件描述符数 # 第二个值: 为分配后已释放的(目前已不再使用) # 第三个值: 等于/proc/sys/fs/file-max(打开的最大fd数量) -
获取打开的文件数量
-
获取整个系统打开的文件数量
lsof | wc -l -
获取某个用户打开的文件数量
lsof -u test |wc -l -
获取某个程序打开的文件数量
for i in `pidof dotnet`; do lsof -p "$i" | wc -l ; done -
获取某个程序打开的文件描述符数量
for i in `pidof dotnet` ; do echo -n "$i : "$(ll /proc/$i/fd|wc -l) done
-
-
查看系统里占用fd最多的进程
lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr |head -n 10
#第一列是占用的fd数量,第二列是进程的pid
字符串拆分
echo "hello" |awk -F '' '{for(i=1;i<=NF;i++)print $i}'
#echo "hello" |awk '{split($0,a,"''");for(v in a)print a[v]}'
去除文本第一行和最后一行
seq 5 |awk'NR>2{print s}{s=$0}'
查看当前主机类型
cat /sys/class/dmi/id/product_name
find 查看特定后缀的文件
# find ./ -regex ".*\.tar.gz\|.*\.7z"
# find ./ -type f -regextype posix-extended -regex ".*\.(tar.gz|7z)"
shell 范围随机数
# echo $((RANDOM % (max - min) + min))
echo $((RANDOM % (99 - 80) + 80))
linux 将时间戳转换为时间
date +"%F_%T" -d$timestamp
linux 远程桌面连接
# freerdp-2.2.0-1.fc32.x86_64
xfreerdp /v:<hostip> /u:<username> /drive:shares,<本地目录>
linux 打包文件夹为 ISO 文件
mkisofs -o file.iso -J -R -V 01 file/