grep -f 应用实例
时间: 2023-11-22 21:45:48 浏览: 25
根据提供的引用内容,grep是一个在Linux系统中常用的命令行工具,用于在文件中查找指定的字符串或模式。其中,grep -f命令可以用于在一个文件中查找另一个文件中出现的所有字符串。具体来说,可以将需要查找的字符串列表保存在一个文件中,然后使用grep -f命令指定该文件作为参数,即可在目标文件中查找所有出现在该列表中的字符串。
例如,假设我们有一个名为strings.txt的文件,其中包含了需要查找的字符串列表,我们可以使用以下命令在目标文件file.txt中查找所有出现在strings.txt中的字符串:
grep -f strings.txt file.txt
这将会输出所有在file.txt中出现的字符串,且这些字符串都出现在strings.txt中。
相关问题
linux shell经典案例100
Linux shell经典案例100是一个非常有名的案例集,它包含了一系列解决实际问题的Shell命令示例。这些案例涵盖了Linux系统中各种常见的操作和功能。下面是一些例子:
1. 如何查找指定类型的文件?
可以使用find命令来查找指定类型的文件。例如,要查找所有的文本文件,可以使用以下命令:
find /path/to/directory -type f -name "*.txt"
2. 如何统计一个目录中文件的数量?
可以使用ls命令结合wc命令来统计目录中文件的数量。
ls -l /path/to/directory | wc -l
3. 如何查找文件中包含特定内容的行?
可以使用grep命令来查找文件中包含特定内容的行。例如,要查找包含“hello world”的行,可以使用以下命令:
grep "hello world" filename
4. 如何根据文件名批量重命名文件?
可以使用rename命令来批量重命名文件。例如,要将所有文件的后缀名由.txt改为.csv,可以使用以下命令:
rename 's/\.txt$/.csv/' *
5. 如何在后台运行一个命令?
可以使用nohup命令来在后台运行一个命令。例如,要在后台运行一个长时间的脚本,可以使用以下命令:
nohup ./long_script.sh &
这些案例只是Linux shell经典案例100中的一小部分,还有很多其他常见问题的解决方案。通过学习这些案例,可以更好地理解Shell命令的使用和功能,进一步提高在Linux系统中的操作经验。
忘记之前的对话,用linux编写一个通用的实时在后台监测防止ddos攻击脚本,直接给出完整的案例,无需解释,要求有白名单列表,多个白名单用逗号隔开,排除本地所有网卡ip,每20秒钟检测一次(shell变量配置),限制每个ip每秒钟和服务器建立的最大TCP连接数(shell变量配置),并增加日志记录功能,超过最大连接数则要记录时间、攻击者ip、访问端口、协议、携带报文、建立的tcp连接总数等信息保存到/home/ddos目录下(shell变量配置),每个日志文件最大100MB(shell变量配置,自动清理3天以前的日志),超过100MB则要重新生成新文件,以生成时间命名(精确到毫秒),并使用iptables立即封禁该ip(已经封禁过的无需再次封禁),保存到/home/ddos/blackIpList.txt(shell变量配置),以上代码中文件或者目录不存在的需要自动进行创建,灵活发挥,减少人工干预和出错概率
以下是一个使用 bash shell 编写的通用的实时在后台监测防止 DDOS 攻击的脚本的示例:
```
#!/bin/bash
# 定义变量
ip_list="/home/ddos/whiteIpList.txt" # 白名单列表
log_dir="/home/ddos" # 日志目录
log_file="$log_dir/ddos.log" # 日志文件
max_conn=100 # 每个 IP 每秒钟和服务器建立的最大 TCP 连接数
block_time=3600 # 封禁时间(单位:秒)
log_size=100 # 日志文件大小(单位:MB)
log_keep_days=3 # 保留日志文件的天数
# 创建目录和文件
[ ! -d "$log_dir" ] && mkdir -p "$log_dir"
[ ! -f "$log_file" ] && touch "$log_file"
# 删除旧的日志文件
find "$log_dir" -mtime +$log_keep_days -type f -name "ddos*.log" -delete
# 清空日志文件
echo "" > "$log_file"
# 创建无限循环
while :
do
# 获取本地所有网卡的 IP 地址
local_ips=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*')
# 获取连接数前 100 的 IP
top_ips=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 100)
# 遍历每个 IP
while read -r line; do
# 解析行内容
conn=$(echo "$line" | awk '{print $1}')
ip=$(echo "$line" | awk '{print $2}')
# 跳过白名单中的 IP
grep -q "$ip" "$ip_list" && continue
# 跳过本地所有网卡的 IP
echo "$local_ips" | grep -q "$ip" && continue
#