本篇并不是大而全的命令合集,只是摘录了本人工作中经常遇到或者使用到的一些命令及使用场景。
sort data | uniq -c | sort -r
egrep -c "Keyword_or_regPattern" file.log
其中sort -g 表示按照数值排序,默认为按照ascii码
egrep -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" pg-01-30.csv | uniq -c | sort -rgk1
gzip -c *.gz | grep TAG
awk 'BEGIN{} {statement;statement;statement;} END{}' filename BEGIN区域可以设定初始化参数,比如分割符,常见初始变量为: FS=列分隔符,NR=行(记录分隔符) 多个分隔符用[]包括起来,如FS="[=;]"表示"="和";"都作为列分隔符
# 按照第四列(内存列降序排序) ps aux | sort -rk4 | more
ps -e -o pid,comm=,wchan,trs,drs,vsz,rss --sort=-vsz ps ax o pid,%cpu,%mem,psr,trs,drs,vsz,rss,cmd k -vsz -o 列表 pid: 进程号 comm=: 命令行 args: 完整命令行 wchan: 等待链,运行中的程序用"-"标识,多线程程序用"*"标识 trs: 进程代码空间占用的内存数量 drs: 进程数据空间占用的内存数量,drs == vsz - trs vsz: 进程申请的内存数量(不代表实际占用的数量) rss: 进程实际占用的内存数量 %mem: 内存百分比 %cpu: cpu百分比 --sort=[+-]%cpu, 按照cpu使用排序,+为升序,-为降序
Linux kslowd占用CPU问题临时解决办法
# Linux Kernel 2.6.35 及以下内核出现问题 echo N> /sys/module/drm_kms_helper/parameters/poll
mkdir /swap dd if=/dev/zero of=/swap/swap01 bs=1M count=512 #创建一个512M的文件 chmod 0600 /swap/swap01 #将权限设置为0600,否则系统会告警 mkswap /swap/swap01 #创建swap文件 swapon /swap/swap01 #启用swap文件 free -h #查看可用的内存
注:有些云虚机未开启swap文件,虚拟机内存小,开启swap后对性能提升还是有用的。
swapoff -a swapon -a
sync echo 1 > /proc/sys/vm/drop_caches
postmaster(13648): WRITE block 108389744 on unknown-block(253,2) (16 sectors) postmaster(13649): WRITE block 108389744 on unknown-block(253,2) (16 sectors) postmaster(13650): WRITE block 108389744 on unknown-block(253,2) (16 sectors) postmaster(13651): WRITE block 108389744 on unknown-block(253,2) (16 sectors) postmaster(13652): WRITE block 108389744 on unknown-block(253,2) (16 sectors) postmaster(13653): WRITE block 108389744 on unknown-block(253,2) (16 sectors) postmaster(13654): WRITE block 108389744 on unknown-block(253,2) (16 sectors) postmaster(13655): WRITE block 108389744 on unknown-block(253,2) (16 sectors) postmaster(13656): WRITE block 108389744 on unknown-block(253,2) (16 sectors) postmaster(13657): WRITE block 108389744 on unknown-block(253,2) (16 sectors) 进行统计之后就知道哪个程序写得比较多了。 统计命令: dmesg | egrep "READ|WRITE|dirtied" | awk -F: '{print $1}'|sort|uniq -c|sort -rn|head -n 10
dd if=/dev/zero of=~/disk-test count=4k bs=64k conv=fdatasync #使用写缓存,最后落盘 df if=/dev/zero of=~/disk-test count=4k bs=64k oflag=dsync #写每一块都落盘,不使用写缓存,相当于严格测试,测出来速度也非常低
df -h #查看整体空间占用 du -h --max-depth=1 #查看占用较大的文件 df -h /tmp #查看特定目录。特别的,此命令还可查看特定目录使用的挂载点,比如/tmp目录,有可能使用了/目录的挂载位置,占用了根目录的空间。 df -i #查看Inode使用情况,如果Inode占用满了,也可能导致系统出现异常。 特别地,如果挂载点丢失,文件会被写入到挂载点对应的目录里面,占用根文件系统空间。
# 实时时钟RTC
cat /sys/class/rtc/rtc0/date #日期 cat /sys/class/rtc/rtc0/time #时间 cat /proc/driver/rtc #RTC相关信息
# 查找文件
查找一天内、一天前修改|创建的文件 find ./ -mtime -1 find ./ -mtime +1 find ./ -name xxx 查找文件名包含xxx的文件 find ./ -mtime -1 -exec cp -rpf {} ./newf/ \; 查找文件并复制到newf目录下 watch -n3 "find ./ -mtime -1 | wc" 每三秒种执行一次find命令,并统计文件数目
## 查找释放特定文件的包: yum provides "*/filename" ## 查找特定软件包释放的文件 rpm -ql pkg_name ## 查找软件包 yum search pkg_name ## 查看是否安装软件包 rpm -qa | grep pkg_name
ssh-keygen -R 1.1.6.3
echo StrictHostKeyChecking no > ssh.conf #自动保存公钥到 KnownHosts ssh -F ssh.conf [email protected]
> 可以多个服务器均使用一个密钥对登录,但不建议。b)如果使用的私钥文件不是id_rsa,需要手动指定,命令为: ssh -i file.key user@server_name
ssh-keygen -p 并输入旧密码,新密码留空
# Socat - Socket CAT, Socket双向数据连接 基础用法: socat [opt] <addr> <addr> # 在指定的两个数据通道上建立连接 基础原理为: a) 先启动第一个连接,成功后再启动第二个连接。 b) 两个连接均启动成功后,如果有数据则进行双向交换
## 端口转发: 监听LocalAddr:12345端口,并将请求转发到1.1.1.1:12345上 ## $ socat tcp4-listen:12345,bind=LocalAddr,reuseaddr,fork tcp:1.1.1.1:12345 选项: bind=LocalAddr, 指定绑定的本地地址 reuseaddr, 指定地址重用(必须明确指定IP地址,才可以使用reuseaddr,主要避免端口未完全关闭导致的监听失败) fork, 建立子程序处理链入请求,不然处理一个请求后程序就退出去了。 ## $socat tcp4-listen:12345 tcp-listen:23456 先监听端口12345,如果有传入连接,再启动监听23456。
1. 在编译过程中出现“config.status: error: connot find input file:…“这种错误时,使用以下命令序列生成所需文件
aclocal libtoolize –force automake –add-missing autoconf autoheader make clean
:set ff=unix
注,dos格式文件在打开时会在底栏显示[dos]字样
直接修改文件: sed -i command filename 流式修改文件: sed cmd file
注:2)与7)的不同之处是2)是将指定行修改为新的内容,7)是只将搜索到的内容替换为新的内容
vi,sed,grep 使用BRE正则
awk,egrep 使用扩展正则
ref: http://www.4e00.com/blog/linux/2016/01/21/posix-bre-and-ere-regular-expression.html
CentOS 7 以后防火墙 systemctl status firewalld systemctl enable firewalld systemctl unmask/mask firewalld #MASK了以后就无法再进行启动 systemctl start firewalld firewall-cmd --add-port=22/tcp #允许一个端口经过防火墙,立即生效(不保存配置文件) firewall-cmd --add-port=22/tcp --permanent #允许一个端口经过防火墙,重新装载后生效(保存配置文件) firewall-cmd --list-* #列出防火墙运行中的规则,*可以是ports, sources, rich-rules等 firewall-cmd --zone=public --add-rich-rule="rule family='ipv4' source address='$IP' port port=22 protocol=tcp drop" #禁止一个IP地址访问特定端口,可以用drop,可以用reject firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop' #禁止PING
# redis-cli 命令直接写系统文件 echo "keys 'cf_a1s2_*' " | redis-cli -h $HOST -p 6379 -a '123456' > /tmp/cf_a1_keys.txt telnet $HOST 6379 config set dir $DIR set shell "ABCDEFG" config set $FILE save
cat /proc/sys/kernel/random/uuid
ls -tr | head -10 | xargs -I{} rm -rf {}
其中:
# 关于符号链接,第一个参数为要链接的文件或者目录,第二个参数为链接名称(经常搞反)
ln -s work_dir name
wget https://github.com/tsl0922/ttyd/releases/download/1.6.3/ttyd.x86_64 chmod +x ttyd.x86_64 ln -s /path/to/ttyd.x86_64 /usr/bin/ttyd ttyd -p32768 bash #在端口32768上启用一个WebShell 注:该程序既可用于黑客等非法用途,也可自己用于合法用途,还是看自己用法吧。
注意: