^ $ Và ^ # nghĩa là gì?


17

Tôi không hiểu BADIPS=$(egrep -v "^#|^$" $tDB). Bạn có thể giải thích nó được không? mã đầy đủ:

#!/bin/bash
# Purpose: Block all traffic from AFGHANISTAN (af) and CHINA (CN). Use ISO code. #
# See url for more info - http://www.cyberciti.biz/faq/?p=3402
# Author: nixCraft <www.cyberciti.biz> under GPL v.2.0+
# -------------------------------------------------------------------------------
ISO="af cn" 

### Set PATH ###
IPT=/sbin/iptables
WGET=/usr/bin/wget
EGREP=/bin/egrep

### No editing below ###
SPAMLIST="countrydrop"
ZONEROOT="/root/iptables"
DLROOT="http://www.ipdeny.com/ipblocks/data/countries"

cleanOldRules(){
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
}

# create a dir
[ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT

# clean old rules
cleanOldRules

# create a new iptables list
$IPT -N $SPAMLIST

for c  in $ISO
do 
    # local zone file
    tDB=$ZONEROOT/$c.zone

    # get fresh zone file
    $WGET -O $tDB $DLROOT/$c.zone

    # country specific log message
    SPAMDROPMSG="$c Country Drop"

    # get 
    BADIPS=$(egrep -v "^#|^$" $tDB)
    for ipblock in $BADIPS
    do
       $IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"
       $IPT -A $SPAMLIST -s $ipblock -j DROP
    done
done

# Drop everything 
$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST

# call your other iptable script
# /path/to/other/iptables.sh

exit 0

1
thay thế gex grep '^[^#]'regex này sẽ mong đợi ít nhất một char khi bắt đầu nhưng nó không nên là#
Avinash Raj

Câu trả lời:


31

^là ký tự đặc biệt biểu thức chính quy được sử dụng để đánh dấu bắt đầu của dòng và $đánh dấu kết thúc của dòng. Chúng được sử dụng để neo biểu thức tại những điểm này. Vì vậy, ^#bất kỳ dòng nào bắt đầu bằng #^$là một dòng trống (vì không có gì giữa bắt đầu và kết thúc).

-vtrong grepphủ định trận đấu, vì vậy lệnh này đang tìm kiếm các dòng không được nhận xét (không bắt đầu bằng #) hoặc trống.


15

egrep tìm kiếm các tập tin phù hợp với một mẫu.

Các -v (hoặc --invert-match) tùy chọn đảo ngược egrep ý thức phù hợp, để chọn dòng không phù hợp.

"^#|^$"ước tính một dòng trống hoặc một dòng bắt đầu bằng # là dòng nhận xét, không phải dòng nào được thực hiện bằng bash. Đảo ngược kết quả đánh giá thành các dòng không phải là dòng trống hoặc dòng nhận xét.

$tDB là một biến lưu trữ giá trị của tệp vùng cục bộ.

Kết hợp tất cả các IP xấu (IP bị chặn) được lưu trữ trong BADIPS, nơi lưu trữ các giá trị của IP xấu thu được từ danh sách các tệp vùng cục bộ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.