^ $ Ve ^ # ne anlama geliyor?


17

Anlamıyorum BADIPS=$(egrep -v "^#|^$" $tDB). Bunu açıklayabilir misin? tam kod:

#!/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
alternatif grep grep '^[^#]'bu normal regex başlangıçta en az bir karakter beklemelisiniz ama olmamalı#
Avinash Raj

Yanıtlar:


31

^satırın başlangıcını $işaretlemek ve satırın sonunu işaretlemek için kullanılan normal bir ifade özel karakteridir . İfadeyi bu noktalara tutturmak için kullanılırlar . Yani ^#herhangi bir satır ile başlar #ve ^$boş bir satırdır (çünkü başlangıç ​​ve bitiş arasında hiçbir şey yoktur).

-viçinde grepnegates maç, bu nedenle bu komut diye değil (ile başlayan olmayan hatlar için arayan #) veya boşaltın.


15

egrep bir kalıpla eşleşen dosyaları arar.

-v (Veya --invert-matchegrep tersine çevirir ait) seçeneği eşleştirme hissi, eşleşmeyen satırları seçin.

"^#|^$"boş satır veya yorum satırı olan # ile başlayan, ikisi bash tarafından yürütülmeyen bir satır olarak değerlendirilir. Eşleşmeyi ters çevirmek, boş satır veya yorum satırı olmayan satırlarla değerlendirilir.

$tDB yerel bölge dosyasının değerini depolayan bir değişkendir.

Hepsini bir araya getirmek, kötü IP'leri (engellenecek IP'ler), yerel bölge dosyaları listesinden elde edilen kötü IP'lerin değerlerini saklayan BADIPS'de saklanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.