跳转至

shell 使用心得

固定iptable表

防火墙

1
2
3
4
5
6
iptables -A INPUT -s 10.66.30.100 -j ACCEPT
iptables -A INPUT -p tcp -m  multiport --dport 80,443,22,139,445 -j REJECT
iptables -A INPUT -s 10.44.3.0/24 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/8 -j REJECT
iptables -A INPUT -s 172.16.0.0/16 -j REJECT
iptables -A INPUT -s 192.168.0.0/24 -j REJECT

要批量下载保存在当前目录中的链接

可以使用wget或curl等命令行工具。以下是使用wget的示例:

 grep -ohr 'https://wework.qpic.cn/[^)]*' . | wget -i - -P images/

grep -ohr ‘https://wework.qpic.cn/[^)]*’ .: 用于提取以”https://wework.qpic.cn/"开头 到 ) 结束的链接。
|: 管道操作符,将grep的输出传递给下一个命令。
wget -i -P ./images/: 使用wget命令批量下载链接。
-i -: -i选项后跟着-表示从标准输入中读取链接。
-P ./images/: -P选项后跟着保存下载文件的目录路径,这里是./images/,表示当前目录下的images子目录。

将当前目录中所有的 http://image.iswbm.com/ 替换成 xxxxx

find . -type f -exec sed -i 's#http://image.iswbm.com/#xxxxx#g' {} \;
说明

find . -type f: 使用find命令在当前目录及其子目录中查找文件(不包括目录)。
-exec: 用于在找到的每个文件上执行后续的命令。
sed -i ‘s#http://image.iswbm.com/#xxxxx#g’ {} \;: 这是在-exec中执行的命令。
sed: 用于文本替换。
-i: 表示直接在文件中进行替换(原地替换)。
‘s#http://image.iswbm.com/#xxxxx#g’: 这是替换的sed命令,它将”http://image.iswbm.com/"替换为"xxxxx“。
{}: 这个占位符将被find命令找到的文件名替换。
\;: 表示-exec命令结束。

要列出当前目录及其子目录下最大的五个文件

你可以使用find命令和du命令的组合。以下是一条可以完成此任务的命令:

find . -type f -exec du -h {} + | sort -rh | head -n 5

这个命令的工作原理如下:

  1. find .:从当前目录(包括子目录)开始查找文件。
  2. -type f:仅查找普通文件(不包括目录)。
  3. -exec du -h {} +:对找到的每个文件运行du -h命令,以显示文件大小。+ 是find命令中-exec选项的一部分。它的作用是告诉find命令将找到的文件作为参数传递给后面的命令(在这种情况下是du -h),并尽可能多地将文件一次性传递给命令,而不是每个文件都单独执行一次命令。这样做可以提高命令的效率,因为它减少了每次执行命令的开销。这对于需要处理大量文件的情况特别有用。在这个命令中,find会找到所有满足条件的文件,然后将它们一次性传递给du -h命令,du -h会计算文件的大小并以人类可读的方式显示文件大小
  4. sort -rh:按文件大小逆序(从大到小)排序。
  5. head -n 5:显示前五个文件,这些文件是最大的文件。

运行此命令后,将列出当前目录及其子目录下最大的五个文件,并显示它们的文件名和大小。

文件变化inotify 监视工具

以下是一种简单的方法,使用 inotifywait 工具和一个简单的脚本:

安装 inotify-tools

在大多数 Linux 发行版中,可以通过包管理器安装 inotify-tools

sudo apt-get install inotify-tools   # For Debian/Ubuntu
sudo yum install inotify-tools       # For CentOS/RHEL

创建一个脚本来检测配置文件变化并重启 Nginx:

创建一个名为 watch-config.sh 的脚本,内容如下:

#!/bin/bash

CONFIG_FILE="/etc/nginx/nginx.conf"  # 替换为你的 Nginx 配置文件路径

while true; do
    if inotifywait -e modify,move,create,delete "$CONFIG_FILE"; then
        echo "Detected changes in $CONFIG_FILE. Restarting Nginx..."
        nginx -t && systemctl restart nginx  # 替换为适合你系统的命令
        echo "Nginx restarted."
    fi
done

确保为脚本添加执行权限:

chmod +x watch-config.sh

运行脚本:

启动脚本以开始监视配置文件的变化:

./watch-config.sh

这样,当配置文件发生变化时,脚本会检测到并执行 nginx -t 来验证配置文件的正确性,然后执行 systemctl restart nginx 来重启 Nginx。