linux技巧合集

最大20个文件

1
du -h / | sort -rh | head -20
1
find / -type f -exec du -sb {} + | awk '{ size_gb = $1 / (1024*1024*1024); printf "%.2fGB\t%s\n", size_gb, $2 }' | sort -nr | head -n 20

快速命令

查看去掉注释和空行

1
grep -Ev '^\s*($|#|;)' example.conf

单行改密码

1
echo <passwd> | passwd root --stdin

删除30天前文件

1
find /data/app/tmp -mtime +30 -name "*.flv" -exec rm -Rf {} \;

关闭swap

1
sed -ri 's/.*swap.*/#&/' /etc/fstab && swapoff -a

随机密码

1
PASSWORD=$(base64 < /dev/urandom | head -c16); echo "$PASSWORD"; echo -n "$PASSWORD" | sha1sum | tr -d '-' | xxd -r -p | sha1sum | tr -d '-'

当前目录修改字符串

1
for file in $(ls); do sed -i 's/nmg/sz/g' "$file"; done

Docker Build构建使用http代理

1
docker build --build-arg https_proxy=127.0.0.1:8088

yum保存rpm

1
2
3
4
5
6
7
8
9
yum install yum-utils -y

# 保存主软件包
yumdownloader telnet

# 保存主软件包和所有依赖
repotrack telnet

yum localinstall telnet.rpm

htpasswd 密码

1
2
3
4
5
6
7
8
9
USERNAME=muen-admin;
PASSWORD=$(base64 < /dev/urandom | head -c16);
echo "USERNAME:$USERNAME,PASSWORD:$PASSWORD";docker run --rm \
--entrypoint htpasswd \
httpd:alpine \
-mbn $USERNAME $PASSWORD > nginx.htpasswd

# -mbn Force MD5 encryption
# -Bbn Force bcrypt encryption

ssh代理

原生ssh

没必要用到frp的时候,或者需要双保险的时候,可以用到ssh代理

会监听22端口

注:远程机器上如果/etc/ssh/sshd_configGatewayPorts的值不是yes则远程机器只会监听127.0.0.1,只能本机访问

1
2
3
ssh -NfL remote_port:localhost:local_port user@remote_server

ssh -NfL *:16000:192.168.1.1:3020 [email protected]

自动重连

-M后面传0就是随机在远程主机上32768-65535开一个端口来监听,如果传自定义值就是指定端口监听

::: tip

注:还是会监听22端口

:::

1
2
3
yum install -y autossh

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NfR *:11000:172.168.1.1:6061 [email protected]

docker清理

清理镜像

1
docker image prune -a 

显示当前占用磁盘空间的 Docker 资源

1
docker system df

清理构建缓存

1
docker builder prune -a

删除未被使用的容器、网络和数据卷等其他资源

1
docker system prune -a

rsync断点续传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

cmd_status=1
while [ ${cmd_status} != 0 ]; do
# rsync -rP -e "ssh -i /root/test.pem" /data/app/ 192.168.1.1:/data/app/
# 1M/s
# yum install nc -y
# apt install -y netcat-openbsd
# 老版本 nc -x
# rsync -rP --bwlimit=1024 --rsh="ssh -o ProxyCommand='nc -x x.x.x.x:44066 %h %p'" ${des_dir}/ root@${ip}:${src_dir}/${sync_file}
# 新版本 nc --proxy-type socks5 --proxy ${ip}:${port}
# rsync -rP --bwlimit=1024 --rsh="ssh -o ProxyCommand='nc --proxy-type socks5 --proxy-auth username:password --proxy x.x.x.x:44066 %h %p'" ${des_dir}/ root@${ip}:${src_dir}/${sync_file}
rsync -rP --bwlimit=1024 --rsh="ssh" /data/baksvn/20200906 [email protected]:/data/baksvn/
cmd_status=$?
done

:::tip
如果要使用其他用户传输: rsync -e 'ssh -l <user>'
:::

代理相关

curl使用代理

1
2
# socks5代理
curl -x socks5h://user:[email protected]:1080

脚本格式

1
2
# 需要用到dos2unix包
find . -wholename "*.sh" -exec dos2unix {} \;

测试相关

测速

1
2
yum install -y epel-release
yum install -y iperf3
1
2
3
4
5
6
7
8
# 默认端口 5201
# 服务端
iperf3 -s
# 客户端
# 上传
iperf3 -c <server_ip>
# 下载
iperf3 -c <server_ip> -R