前
这里主要收集一些不是那么常用,但是一用起来就很麻烦的一些小trick
清除删除的文件空间
sudo find /proc/*/fd -ls | grep '(deleted)'
cat /dev/null > ${filename}
> ${filename}
单IP限制每分钟连接数
使用 iptable
来进行单IP的每分钟最大的连接次数限制
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT
Screen 会话共享
# A会话
screen -S test
# B 会话
scree -x
可以实现两个会话共享一个 screen
sysrq-trigger
一个“危险的”调试入口
# 立即重新启动计算机
echo "b" > /proc/sysrq-trigger
# 立即关闭计算机
echo "o" > /proc/sysrq-trigger
# 导出内存分配的信息 (可以用/var/log/message 查看)
echo "m" > /proc/sysrq-trigger
# 导出当前CPU寄存器信息和标志位的信息
echo "p" > /proc/sysrq-trigger
# 导出线程状态信息
echo "t" > /proc/sysrq-trigger
# 故意让系统崩溃
echo "c" > /proc/sysrq-trigger
# 立即重新挂载所有的文件系统
echo "s" > /proc/sysrq-trigger
# 立即重新挂载所有的文件系统为只读
echo "u" > /proc/sysrq-trigger
修改上一条命令
如果修改上一条命令,但是太难调整光标怎么办?试试fc
吧
快速100%
cat /dev/zero | md5sum
终端命令发送
write root # 用户组
wrtie root pts/1 # 指定会话
wall "test" # 通知所有人
快速查看当前硬件架构
arch
x86_64
进程优先级的设置
top 的第三列PR
表示当前进程的优先级,越小,那么资源会被越优先进行调度。priority = PR+NI
进程优先级体现在 nice值
的设置上面,使用 top命令可以看到第四列就是的NI
就是指得是我们的进程优先级调整参数,为负数提升优先级,反之降低优先级,使用r
,输入PID来进行进程nice 的重新指定。
- 或者,
nice
eg:nice [OPTION] [COMMAND [ARG]...] nice -5 ls
- 或者使用
renice
renice [-n] priority [-gpu] identifier... renice -5 -p 1234
网络路由指定
route add -net 192.168.62.0 netmask 255.255.255.0 gw 192.168.1.1
route del -net 192.168.122.0 netmask 255.255.255.0
指定网络号和其指定的路由网关
iptables 的备份和恢复
iptables-save > /opt/iptables.txt ###备份所有表的规则
iptables-restore < /opt/iptables.txt # 对iptables'的规则进行恢复
原来iptables重启,没有保存的规则会丢失。。。。
命令实现简单的发包
Linux的天然的网络特性可以实现简单的IP发包
# UDP
echo "test" > /dev/udp/127.0.0.1/8888
# TCP
echo "test" > /dev/tcp/127.0.0.1/8080
简单的命令实现 基本的传输层的发包操作,简单易得
已删除单空间未释放
文件已删除,但是空间没有释放
losf| grep deleted
因为使用这个文件的服务还没有停止,文件句柄是无法释放的。
sar 查看性能历史统计
查看历史的性能数据,CPU,IO,network
sar -p # CPU
sar -d # disk
sar -b # 所有块设备
sar -n <DEV,SOCK,FULL,EDEV>
TIPs 使用-d
参数得到的是 dev8-240
,怎么和 sd*
来进行对应呢?
A:这里的 8 和 16 指的是主设备号和次设备号,一一对应即可
[[email protected] /]$ ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 Sep 22 14:34 /dev/sda
brw-rw---- 1 root disk 8, 1 Sep 22 14:34 /dev/sda1
brw-rw---- 1 root disk 8, 2 Sep 22 14:34 /dev/sda2
brw-rw---- 1 root disk 8, 3 Sep 22 14:34 /dev/sda3
brw-rw---- 1 root disk 8, 4 Sep 22 14:34 /dev/sda4
brw-rw---- 1 root disk 8, 16 Jul 18 15:21 /dev/sdb
brw-rw---- 1 root disk 8, 17 Jul 18 15:21 /dev/sdb1
GZ的流解压
在查看nginx的日志的时候,其默认的配置是对历史的日志文件进行 gzip 的压缩。查看日志的时候,需要指定流解压
cat /var/log/nginx/error.*.gz | gzip -d
查看电池状态
$ upower -i /org/freedesktop/UPower/devices/battery_BAT0
benchmark工具
sudo curl -fsSL https://ilemonrain.com/download/shell/LemonBench.sh | sudo bash -s fast
很全面的benchmark的脚本,测试整机的性能。
journalctl 分级查看日志
- u 指定服务
- p 指定等级(1-8)
-f follow滚动
使用strace来排查问题
使用strace 来进行进程的性能排查
strace -c -T -tt -o out.txt -p pid
该命令会收集进程的系统调用,排查性能问题。
解决自动补全
有些时候用起来bash发现竟然不能自动补全,一想这功能应该随时带的有啊。实际上这个是bash 一个插件,有些时候是没有被安装的。所以这里给出一键安装的命令,安装 bash—completion
即可:
yum install bash-completion
查看当前的动态库的链接情况
ldconfig -p | grep pcap
#ldconfig -p:打印当前缓存所保存的所有库的名字。
#grep pcap:用管道符解析libpcap.so是否已加入缓存中。
使用上面的方法可以很好的查看所有的已经配置了的连接库
同样的使用ldd
可以查看二进制文件所需要的链接库
ldd a.out
SHELL中实现串口通信
liunx 里面一切皆文件,所以之间对串口的操作是十分方便的。先需要对串口进行配置,使用stty
在LINUX下首先需要检测串行口驱动是否正常,而串行口设备一般为/dev/ttyS,如果是USB转串行口的,则为/dev/ttyUSB,
使用命令来进行串口的参数配置,
sudo stty -F /dev/ttyUSB0 raw speed 9600 cs8 -parenb -cstopb cread clocal
# -F /dev/ttyUSB0 使用-F可以指定设备名
# raw 这是一组设置的组合体,详情可man stty
# speed 9600 指定波特率
# cs8 指定数据位
# -parenb 无奇偶效检
# -cstopb 1停止位(如果为2位,则为cstopb)
# cread 允许输入能够接收
# clocal 禁止调制解调器的控制信号(不明)
sudo cat /dev/ttyUSB0
sudo echo asd > /dev/ttyS0
# 来发送十六进制的数据
sudo echo -en "\x80\x123\x8F" > /dev/ttyS0
双网卡时候添加路由
在树莓派的双网卡配置的时候,很容易出现上不了网的情况,因为流量都到另一个接口了,所以添加正确的路由即可:
sudo route add default gw 192.168.0.1 #192.168.0.1默认的网关的地址
使用 watch 命令
watch
这个工具可以帮助我们定时的执行一个命令并且返回结果,就像我们的top一样,watch 的命令是普适的,可以实现对与命令的执行并且进行内容的刷新。
screen 来保存会话以及 shell 的分屏
screen -S <>
开始一个新的会话screen -r <>
恢复一个会话
统计开机时的服务加载时间
用于开机缓慢的时候进行的排除,是之前看书里遇到的。这里有用到了就再记录一下。用来分析启动时间的systemd-analyze
systemd-analyze blame 列出所有的服务启动时间
systemd-analyze plot > img.svg # 打印出矢量图
journalctl -u -f [servicename] 查看服务的日志。
使用SSH的反向隧道
很多时候需要内网穿透,用到Ngork 或者 frp ,殊不知使用SSH也可以很容易的实现端口的隧道。
ssh -p 22 -qngfNT -R 6766:localhost:22 [email protected]
使用dpkg来查看所有的包大小并排序
dpkg-query -W --showformat='${Installed-Size} ${Package} ${Status}\n'|grep -v deinstall|sort -n|awk '{print $1" "$2}'
解决so依赖问题
有些时候一些应用跑不起来,由于缺运行库的原因,一般使用 ldd
来查看二进制文件所需要的so依赖是否满足,如果显示有 not found,那么一般就是直接安装对于的lib即可。
但是在一些情况下,so的版本各异,所以有的时候需要自己来手动的添加对应的版本的链接。使用sudo ldconfig -v
来刷新以及来列出目前的所有的so文件。来根据需要进行排查,并可以使用 |less
来找到so文件的所在路径。
递归计算目录的所有文件的哈希
对当前目录的所有文件得到一个统一的哈希,用于进行整体的文件校验:
find path/to/folder -type f -print0 | sort -z | xargs -0 sha1sum | sha1sum