سرور مجازی

۲ مطلب با کلمه‌ی کلیدی «خریدسرورلینوکس» ثبت شده است

  • ۰
  • ۰

نحوه پیکربندی Suricata به عنوان یک سیستم پیشگیری از نفوذ (IPS) در راکی لینوکس 8

معرفی

در این آموزش نحوه پیکربندی حالت داخلی سیستم پیشگیری از نفوذ (IPS) Suricata را در راکی ​​لینوکس 8 خواهید آموخت. به طور پیش فرض Suricata به گونه ای پیکربندی شده است که به عنوان یک سیستم تشخیص نفوذ (IDS) اجرا شود، که فقط هشدارها را تولید می کند و ترافیک مشکوک را ثبت می کند. هنگامی که حالت IPS را فعال می کنید، Suricata می تواند به طور فعال ترافیک شبکه مشکوک را علاوه بر ایجاد هشدار برای تجزیه و تحلیل بیشتر، حذف کند.

قبل از فعال کردن حالت IPS، مهم است که بررسی کنید کدام امضاها را فعال کرده‌اید و اقدامات پیش‌فرض آنها را بررسی کنید. امضای پیکربندی نادرست یا امضای بیش از حد گسترده ممکن است منجر به کاهش ترافیک قانونی به شبکه شما شود یا حتی دسترسی شما به سرورهای خود را از طریق SSH و سایر پروتکل های مدیریتی مسدود کند.

در قسمت اول این آموزش، امضاهایی را که نصب و فعال کرده اید بررسی می کنید. همچنین یاد خواهید گرفت که چگونه امضاهای خود را وارد کنید. هنگامی که بدانید از کدام امضاها می خواهید در حالت IPS استفاده کنید، عملکرد پیش فرض آنها را به حذف یا رد ترافیک تبدیل می کنید. با امضای خود، یاد خواهید گرفت که چگونه ترافیک شبکه را از طریق Suricata با استفاده از netfilter NFQUEUE iptables target ارسال کنید و سپس مقداری ترافیک شبکه نامعتبر ایجاد کنید تا اطمینان حاصل کنید که Suricata آن را همانطور که انتظار می رود حذف می کند.

پیش نیازها

  •  Suricata را روی سرور Rocky Linux 8 اجرا کنید.
  • همچنین باید مجموعه قوانین باز ET را با استفاده از دستور suricata-update دانلود کرده و در امضاهای Suricata خود قرار دهید.
  • خط فرمان jq ابزار پردازش JSON. اگر آن را از آموزش قبلی نصب نکرده اید، می توانید با استفاده از دستور dnf این کار را انجام دهید:

sudo dnf install jq

 

مرحله 1 – شامل امضاهای سفارشی

آموزش های قبلی در این مجموعه به بررسی نحوه نصب و پیکربندی Suricata و همچنین نحوه درک امضاها پرداخته است. اگر می‌خواهید قوانین خود را ایجاد و اضافه کنید، باید فایل /etc/suricata/suricata.yaml Suricata را ویرایش کنید تا یک مسیر سفارشی برای امضاهای خود داشته باشید.

ابتدا، بیایید IP های عمومی سرور خود را پیدا کنیم تا بتوانید از آنها در امضاهای سفارشی خود استفاده کنید. برای پیدا کردن IP های خود می توانید از دستور ip استفاده کنید:

ip -brief address show

شما باید خروجی هایی مانند زیر دریافت کنید:

 
Output
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             203.0.113.0.5/20 10.20.0.5/16 2001:DB8::1/32 fe80::94ad:d4ff:fef9:cee0/64
eth1             UP             10.137.0.2/16 fe80::44a2:ebff:fe91:5187/64

آدرس(های) IP عمومی شما مشابه آی پی های هایلایت شده 203.0.113.0.5 و 2001:DB8::1/32 در خروجی خواهد بود.

اکنون اجازه دهید امضای سفارشی زیر را برای اسکن ترافیک SSH به پورت های غیر SSH ایجاد کنیم و آن را در فایلی به نام /var/lib/suricata/rules/local.rules قرار دهیم. فایل را با nano یا ویرایشگر دلخواه خود باز کنید:

sudo vi /var/lib/suricata/rules/local.rules

امضای زیر را کپی و پیست کنید:

Invalid SSH Traffic Signature
alert ssh any any -> 203.0.113.0.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; flow:to_client, not_established; classtype: misc-attack; target: dest_ip; sid:1000000;)
alert ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; flow:to_client, not_established; classtype: misc-attack; target: dest_ip; sid:1000001;)

آدرس IP عمومی سرور خود را به جای آدرس های 203.0.113.5 و 2001:DB8::1/32 در قانون جایگزین کنید. اگر از IPv6 استفاده نمی کنید، می توانید از افزودن آن امضا در این قوانین و قوانین زیر صرفنظر کنید.

بسته به شبکه و برنامه های خود می توانید به افزودن امضاهای سفارشی به این فایل local.rules ادامه دهید. به عنوان مثال، اگر می خواهید در مورد ترافیک HTTP به پورت های غیر استاندارد هشدار دهید، می توانید از امضاهای زیر استفاده کنید:

HTTP traffic on non-standard port signature
alert http any any -> 203.0.113.0.5 !80 (msg:"HTTP REQUEST on non-HTTP port"; flow:to_client, not_established; classtype:misc-activity; sid:1000002;)
alert http any any -> 2001:DB8::1/32 !80 (msg:"HTTP REQUEST on non-HTTP port"; flow:to_client, not_established; classtype:misc-activity; sid:1000003;)

برای افزودن امضایی که ترافیک TLS را به پورت هایی غیر از 443 پیش فرض برای سرورهای وب بررسی می کند، موارد زیر را اضافه کنید:

TLS traffic on non-standard port signature
alert tls any any -> 203.0.113.0.5 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; flow:to_client, not_established; classtype:misc-activity; sid:1000004;)
alert tls any any -> 2001:DB8::1/32 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; flow:to_client, not_established; classtype:misc-activity; sid:1000005;)

پس از تکمیل امضا، فایل را ذخیره کرده و ببندید. اگر از vi استفاده می کنید، ESC و سپس 😡 و سپس ENTER را برای ذخیره و خروج فشار دهید.

اکنون که تعدادی امضای سفارشی تعریف کرده‌اید، فایل پیکربندی Suricata /etc/suricata/suricata.yaml را با استفاده از nano یا ویرایشگر دلخواه خود ویرایش کنید تا آنها را در بر بگیرد:

sudo vi /etc/suricata/suricata.yaml

فایل های قانون را پیدا کنید: بخشی از پیکربندی. اگر از vi استفاده می کنید، 1879gg را برای رفتن به خط وارد کنید. مکان دقیق فایل شما ممکن است متفاوت باشد، اما شما باید در ناحیه کلی فایل قرار داشته باشید.

بخش را ویرایش کنید و خط برجسته شده زیر را اضافه کنید – local.rules:

/etc/suricata/suricata.yaml
. . .
rule-files:
  - suricata.rules
  - local.rules
. . .

فایل را ذخیره کرده و از آن خارج شوید. مطمئن شوید که پیکربندی Suricata را پس از افزودن قوانین خود تأیید کنید. برای این کار دستور زیر را اجرا کنید:

sudo suricata -T -c /etc/suricata/suricata.yaml -v

بسته به تعداد قوانینی که در فایل پیش‌فرض suricata.rules بارگیری کرده‌اید، آزمایش ممکن است کمی طول بکشد. اگر متوجه شدید که آزمایش خیلی طول می کشد، می توانید با اضافه کردن یک # به ابتدای خط، روی خط – suricata.rules در تنظیمات نظر دهید و سپس دوباره تست پیکربندی خود را اجرا کنید. اگر می‌خواهید از امضای suricata.rules در پیکربندی نهایی در حال اجرا استفاده کنید، حتماً # نظر را حذف کنید.

هنگامی که از امضاهایی که با استفاده از ابزار suricata-update ایجاد یا اضافه کرده اید راضی شدید، می توانید به مرحله بعدی بروید، جایی که عملکرد پیش فرض امضاهای خود را از هشدار یا ثبت به حذف فعال ترافیک تغییر دهید.

مرحله 2 – پیکربندی اقدامات امضا

اکنون که امضاهای سفارشی خود را آزمایش کرده‌اید و با Suricata کار می‌کنید، می‌توانید عمل را به حذف یا رد تغییر دهید. وقتی Suricata در حالت IPS کار می کند، این اقدامات به طور فعال ترافیک نامعتبر را برای هر امضای منطبق مسدود می کند.

این دو عمل در آموزش قبلی این مجموعه، درک امضای سوریکاتا توضیح داده شده است. انتخاب این که از کدام عمل استفاده کنید به شما بستگی دارد. یک عمل رها کردن بلافاصله یک بسته و هر بسته بعدی را که به جریان شبکه تعلق دارد دور می اندازد. اگر ترافیک مبتنی بر TCP باشد، یک اقدام رد برای مشتری و سرور یک بسته بازنشانی و یک بسته خطای ICMP برای هر پروتکل دیگری ارسال می‌کند.

بیایید از قوانین سفارشی بخش قبل استفاده کنیم و آنها را به استفاده از اکشن drop تبدیل کنیم، زیرا ترافیکی که آنها مطابقت دارند احتمالاً یک اسکن شبکه یا یک اتصال نامعتبر دیگر است.

فایل /var/lib/suricata/rules/local.rules خود را با استفاده از nano یا ویرایشگر دلخواه خود باز کنید و عمل هشدار را در ابتدای هر خط در فایل تغییر دهید تا رها شود:

sudo vi /var/lib/suricata/rules/local.rules

/var/lib/suricata/rules/local.rules
drop ssh any any -> 203.0.113.0.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000000;)
drop ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000001;)

مرحله بالا را برای هر گونه امضا در /var/lib/suricata/rules/suricata.rules که می‌خواهید به حالت رها یا رد تبدیل کنید، تکرار کنید.

هنگامی که همه امضاها را با عملکردی که می خواهید انجام دهند پیکربندی کردید، مرحله بعدی پیکربندی مجدد و سپس راه اندازی مجدد Suricata در حالت IPS است.

مرحله 3 – فعال کردن حالت nfqueue

Suricata به طور پیش فرض در حالت IDS اجرا می شود، به این معنی که به طور فعال ترافیک شبکه را مسدود نمی کند. برای تغییر به حالت IPS، باید فایل پیکربندی /etc/sysconfig/suricata Suricata را ویرایش کنید.

فایل را در nano یا ویرایشگر دلخواه خود باز کنید:

sudo vi /etc/sysconfig/suricata

خط OPTIONS=”-i eth0 –user suricata” را پیدا کنید و با اضافه کردن یک # به ابتدای خط آن را نظر دهید. سپس یک خط جدید OPTIONS=”-q 0 -vvv –user suricata” اضافه کنید که به Suricata می گوید در حالت IPS اجرا شود.

پس از اتمام ویرایش، فایل شما باید دارای خطوط برجسته زیر باشد:

/etc/sysconfig/suricata
. . .
# OPTIONS="-i eth0 --user suricata"
OPTIONS="-q 0 -vvv --user suricata"
. . .

ذخیره کنید و فایل را ببندید. اکنون می توانید Suricata را با استفاده از systemctl مجددا راه اندازی کنید:

sudo systemctl restart suricata.service

وضعیت Suricata را با استفاده از systemctl بررسی کنید:

sudo systemctl status suricata.service

شما باید خروجی هایی مانند زیر دریافت کنید:

 
Output
● suricata.service - Suricata Intrusion Detection Service
   Loaded: loaded (/usr/lib/systemd/system/suricata.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-12-14 16:52:07 UTC; 6s ago
     Docs: man:suricata(1)
  Process: 44256 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS)
 Main PID: 44258 (Suricata-Main)
    Tasks: 10 (limit: 11188)
   Memory: 52.8M
   CGroup: /system.slice/suricata.service
           └─44258 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -q 0 -vvv --user suricata

. . .
Dec 14 16:52:07 suricata suricata[44258]: 14/12/2021 -- 16:52:07 - <Notice> - all 4 packet processing threads, 4 management threads initialized, engine started.

به خط فعال (در حال اجرا) برجسته شده توجه کنید که نشان می دهد Suricata با موفقیت مجدد راه اندازی شده است.

با این تغییر اکنون در مرحله بعد آماده ارسال ترافیک به Suricata با استفاده از Firewalld هستید.

مرحله 4 – پیکربندی فایروالد برای ارسال ترافیک به Suricata

اکنون که Suricata را برای پردازش ترافیک در حالت IPS پیکربندی کرده اید، گام بعدی هدایت بسته های ورودی به Suricata است. اگر آموزش های پیش نیاز این مجموعه را دنبال کرده اید و از سیستم Rocky Linux 8 استفاده می کنید، باید Firewalld را نصب و فعال کنید.

برای افزودن قوانین لازم برای Suricata به فایروالد، باید دستورات زیر را اجرا کنید:

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter INPUT 0 -p tcp –dport 22 -j NFQUEUE –queue-bypass

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter OUTPUT 0 -p tcp –sport 22 -j NFQUEUE –queue-bypass

این دو قانون تضمین می‌کنند که ترافیک SSH در رابط‌های IPv4 از Suricata عبور می‌کند تا بتوانید با استفاده از SSH به سرور خود متصل شوید، حتی زمانی که Suricata در حال اجرا نیست. بدون این قوانین، یک امضای نادرست یا بیش از حد گسترده می تواند دسترسی SSH شما را مسدود کند. علاوه بر این، اگر Suricata متوقف شود، تمام ترافیک به هدف NFQUEUE ارسال می شود و سپس از آنجایی که Suricata در حال اجرا نیست، حذف می شود.

با استفاده از دستورات زیر قوانین مشابهی را برای IPv6 اضافه کنید:

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter INPUT 0 -p tcp –dport 22 -j NFQUEUE –queue-bypass

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter OUTPUT 0 -p tcp –sport 22 -j NFQUEUE –queue-bypass

در مرحله بعد، قوانین FORWARD را اضافه کنید تا مطمئن شوید که اگر سرور شما به عنوان دروازه ای برای سیستم های دیگر عمل می کند، تمام آن ترافیک نیز برای پردازش به Suricata می رود.

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter FORWARD 0 -j NFQUEUE

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter FORWARD 0 -j NFQUEUE

دو قانون نهایی INPUT و OUTPUT تمام ترافیک باقیمانده را که ترافیک SSH نیستند برای پردازش به Suricata ارسال می کند.

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter INPUT 1 -j NFQUEUE

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter OUTPUT 1 -j NFQUEUE

دستورات را برای ترافیک IPv6 تکرار کنید:

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter INPUT 1 -j NFQUEUE

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter OUTPUT 1 -j NFQUEUE

اکنون فایروالد را مجدداً بارگیری کنید تا قوانین پایدار بماند:

sudo firewall-cmd –reload

در این مرحله از آموزش شما Suricata را برای اجرا در حالت IPS پیکربندی کرده اید و ترافیک شبکه شما به طور پیش فرض به Suricata ارسال می شود. شما می توانید سرور خود را در هر زمانی راه اندازی مجدد کنید و قوانین Suricata و فایروال شما پایدار خواهند بود.

آخرین مرحله در این آموزش این است که تأیید کنید Suricata ترافیک را به درستی حذف می کند.

مرحله 5 – تست ترافیک نامعتبر

اکنون که Suricata و فایروال خود را برای پردازش ترافیک شبکه پیکربندی کرده‌اید، می‌توانید آزمایش کنید که آیا Suricata بسته‌هایی را که با امضاهای سفارشی شما و سایر امضاهای موجود مطابقت دارند را حذف می‌کند یا خیر.

امضای sid:2100498 را از آموزش قبلی به یاد بیاورید، که در این مثال برای رها کردن بسته های منطبق اصلاح شده است:

sid:2100498
drop ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)

قانون را در فایل /var/lib/suricata/rules/suricata.rules خود پیدا کرده و ویرایش کنید تا اگر امضا را در آنجا دارید، از عمل drop استفاده کنید. در غیر این صورت، قانون را به فایل /var/lib/suricata/rules/local.rules خود اضافه کنید.

سیگنال SIGUSR2 را برای Suricata ارسال کنید تا امضاهایش را دوباره بارگیری کند:

sudo kill -usr2 $(pidof suricata)

حالا قانون را با استفاده از curl تست کنید:

curl –max-time 5 http://testmynids.org/uid/index.html

باید خطایی دریافت کنید که زمان درخواست به پایان رسیده است، که نشان می دهد Suricata پاسخ HTTP را مسدود کرده است:

 
Output
curl: (28) Operation timed out after 5000 milliseconds with 0 out of 39 bytes received

می‌توانید تأیید کنید که Suricata پاسخ HTTP را با استفاده از jq برای بررسی فایل eve.log حذف کرده است:

sudo jq ‘select(.alert .signature_id==2100498)’ /var/log/suricata/eve.json

شما باید خروجی هایی مانند زیر دریافت کنید:

 
Output
{
. . .
  "community_id": "1:SbOgFh2T3DZvwsoyMH4xfxOoVas=",
  "alert": {
    "action": "blocked",
    "gid": 1,
    "signature_id": 2100498,
    "rev": 7,
    "signature": "GPL ATTACK_RESPONSE id check returned root",
    "category": "Potentially Bad Traffic",
    "severity": 2,
    "metadata": {
      "created_at": [
        "2010_09_23"
      ],
      "updated_at": [
        "2010_09_23"
      ]
    }
  },
  "http": {
    "hostname": "testmynids.org",
    "url": "/uid/index.html",
    "http_user_agent": "curl/7.61.1",
    "http_content_type": "text/html",
    "http_method": "GET",
    "protocol": "HTTP/1.1",
    "status": 200,
    "length": 39
  },
. . .

خط برجسته “اقدام”: “blocked” تأیید می کند که امضا مطابقت دارد و Suricata درخواست HTTP آزمایشی را رد یا رد کرده است.

نتیجه

در این آموزش شما Suricata را برای مسدود کردن ترافیک شبکه مشکوک با استفاده از حالت IPS داخلی خود در راکی لینوکس 8 پیکربندی کرده‌اید. همچنین امضاهای سفارشی را برای بررسی و مسدود کردن ترافیک SSH، HTTP و TLS در پورت‌های غیر استاندارد اضافه کرده‌اید. برای گره زدن همه چیز به هم، قوانین فایروال را نیز برای هدایت ترافیک از طریق Suricata برای پردازش اضافه کردید.

اکنون که Suricata را در حالت IPS نصب و پیکربندی کرده‌اید و می‌توانید امضاهای خود را بنویسید که ترافیک مشکوک را هشدار می‌دهد یا آن را رها می‌کند، می‌توانید به نظارت بر سرورها و شبکه‌های خود ادامه دهید و امضاهای خود را اصلاح کنید.

هنگامی که از امضاها و پیکربندی Suricata خود راضی شدید، می‌توانید آخرین آموزش این مجموعه را ادامه دهید، که شما را از طریق ارسال گزارش‌ها از Suricata به سیستم مدیریت رویدادهای امنیتی و اطلاعات (SIEM) که با استفاده از Elastic Stack ساخته شده است، راهنمایی می‌کند.

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

استفاده از Grep و عبارات معمولی برای جستجوی الگوهای متن در لینوکس

ورود به سایت

معرفی

دستور grep یکی از مفیدترین دستورات در محیط ترمینال لینوکس است. نام grep مخفف “global regular expression print” است. این بدان معناست که می توانید از grep برای بررسی اینکه آیا ورودی دریافت شده با الگوی مشخص شده مطابقت دارد یا خیر ، استفاده کنید. این برنامه به ظاهر بی اهمیت بسیار قدرتمند است. توانایی مرتب سازی ورودی بر اساس قوانین پیچیده ، آن را به یک پیوند محبوب در بسیاری از زنجیره های فرمان تبدیل می کند.

در این آموزش ، شما گزینه های دستور grep را بررسی می کنید و سپس برای جستجوی پیشرفته تر ، از عبارات معمولی استفاده می کنید.

پیش نیازها

برای پیگیری این راهنما ، به رایانه ای نیاز دارید که از سیستم عامل لینوکس استفاده می کند. این می تواند یک سرور خصوصی مجازی باشد که با SSH یا دستگاه محلی خود به آن متصل شده اید. توجه داشته باشید که این آموزش با استفاده از سرور لینوکس دارای Ubuntu 20.04 تأیید شده است ، اما مثالهای ذکر شده باید در رایانه ای اجرا شود که هر نسخه از توزیع لینوکس را اجرا می کند.

اگر قصد دارید از سرور راه دور برای پیروی از این راهنما استفاده کنید ، توصیه می کنیم ابتدا راهنمای راه اندازی سرور اولیه ما را تکمیل کنید. با انجام این کار شما می توانید یک محیط سرور امن-از جمله کاربر غیر root با امتیازات sudo و فایروال پیکربندی شده با UFW-را تنظیم کنید-که می توانید از آن برای ایجاد مهارت های لینوکس خود استفاده کنید.

به عنوان یک جایگزین ، ما شما را تشویق می کنیم که از ترمینال تعاملی تعبیه شده در این صفحه برای آزمایش دستورات نمونه در این آموزش استفاده کنید. روی راه اندازی یک ترمینال تعاملی زیر کلیک کنید! برای باز کردن پنجره ترمینال و شروع به کار با محیط لینوکس (اوبونتو).

کاربرد اولیه

در این آموزش ، شما از grep برای جستجوی مجوز عمومی GNU نسخه 3 برای کلمات و عبارات مختلف استفاده می کنید.

اگر از سیستم اوبونتو استفاده می کنید ، می توانید فایل را در پوشه/usr/share/common-licenses پیدا کنید. آن را در فهرست اصلی خود کپی کنید:

cp /usr/share/common-licenses/GPL-3 .

اگر از سیستم دیگری استفاده می کنید ، از دستور curl برای بارگیری نسخه استفاده کنید:

curl -o GPL-3 https://www.gnu.org/licenses/gpl-3.0.txt

همچنین در این آموزش از فایل مجوز BSD استفاده خواهید کرد. در لینوکس ، می توانید آن را با دستور زیر در فهرست اصلی خود کپی کنید:

cp /usr/share/common-licenses/BSD .

اگر از سیستم دیگری استفاده می کنید ، فایل را با دستور زیر ایجاد کنید:

cat << ‘EOF’ > BSD
Copyright (c) The Regents of the University of California.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS” AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
EOF

اکنون که فایل ها را دارید ، می توانید کار با grep را شروع کنید.

در ابتدایی ترین شکل ، از grep برای مطابقت با الگوهای تحت اللفظی درون یک فایل متنی استفاده می کنید. این بدان معناست که اگر grep یک کلمه را برای جستجو ارسال کنید ، هر خطی در فایل حاوی آن کلمه چاپ می شود.

دستور زیر را برای استفاده از grep برای جستجوی هر خطی که حاوی کلمه GNU است اجرا کنید:

grep “GNU” GPL-3

اولین استدلال ، GNU ، الگویی است که شما در جستجوی آن هستید ، در حالی که آرگومان دوم ، GPL-3 ، فایل ورودی است که می خواهید جستجو کنید.

خروجی حاصل هر خط حاوی متن الگو خواهد بود:

 

Output

                    GNU GENERAL PUBLIC LICENSE
  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
  Developers that use the GNU GPL protect your rights with two steps:
  "This License" refers to version 3 of the GNU General Public License.
  13. Use with the GNU Affero General Public License.
under version 3 of the GNU Affero General Public License into a single
...
...

در برخی از سیستم ها ، الگویی که جستجو کرده اید در خروجی مشخص می شود.

گزینه های مشترک

به طور پیش فرض ، grep الگوی مشخص شده را در داخل فایل ورودی جستجو می کند و خطوط را پیدا می کند. با افزودن چند پرچم اختیاری به grep ، می توانید این رفتار را مفیدتر کنید.

اگر می خواهید grep “case” پارامتر جستجوی شما را نادیده بگیرد و تغییرات بزرگ و کوچک را جستجو کند ، می توانید گزینه -i یا-حروف کوچک را مشخص کنید.

هر نمونه از کلمه License (با حروف بزرگ ، کوچک یا مخلوط) را در همان فایل قبلی با دستور زیر جستجو کنید:

grep -i “license” GPL-3

نتایج شامل: LICENSE, license, و License:

 

Output

                    GNU GENERAL PUBLIC LICENSE
 of this license document, but changing it is not allowed.
  The GNU General Public License is a free, copyleft license for
  The licenses for most software and other practical works are designed
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price.  Our General Public Licenses are designed to make sure that you
(1) assert copyright on the software, and (2) offer you this License
  "This License" refers to version 3 of the GNU General Public License.
  "The Program" refers to any copyrightable work licensed under this
...
...

اگر نمونه ای در LiCeNsE وجود داشت ، آن نیز بازگردانده می شد.

اگر می خواهید تمام خطوطی که الگوی مشخصی ندارند را پیدا کنید ، می توانید از گزینه -v یا –invert -match استفاده کنید.

هر خطی را که حاوی کلمه the در مجوز BSD نیست با دستور زیر جستجو کنید:

این خروجی را دریافت خواهید کرد:

 

Output

All rights reserved.

Redistribution and use in source and binary forms, with or without
are met:
    may be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...

از آنجا که شما گزینه “نادیده گرفتن مورد” را مشخص نکرده اید ، دو مورد آخر بدون کلمه the برگشت داده شد.

اغلب دانستن شماره خطی که کبریت ها روی آن اتفاق می افتد مفید است. می توانید با استفاده از گزینه -n یا –line -number این کار را انجام دهید. مثال قبلی را با این پرچم اضافه شده دوباره اجرا کنید:

grep -vn “the” BSD

این متن زیر را برمی گرداند:

 

Output

2:All rights reserved.
3:
4:Redistribution and use in source and binary forms, with or without
6:are met:
13:   may be used to endorse or promote products derived from this software
14:   without specific prior written permission.
15:
16:THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17:ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...

اگر می خواهید در هر سطری که شامل خط نیست تغییراتی ایجاد کنید ، می توانید به شماره خط اشاره کنید. این امر به ویژه هنگام کار با کد منبع بسیار مفید است

عبارات با قاعده

در مقدمه ، آموختید که grep مخفف “print global express print” است. “عبارت معمولی” یک رشته متنی است که یک الگوی جستجوی خاص را توصیف می کند.

برنامه های کاربردی مختلف و زبان های برنامه نویسی عبارات معمولی را کمی متفاوت اجرا می کنند. در این آموزش شما فقط یک زیرمجموعه کوچک از نحوه توصیف الگوهای grep را بررسی خواهید کرد.

مسابقات لفظی

در مثالهای قبلی در این آموزش ، هنگامی که کلمات GNU و the را جستجو می کردید ، در واقع به دنبال عبارات معمولی معمولی بودید که با رشته دقیق کاراکترهای GNU و the مطابقت داشته باشد. الگوهایی که کاراکترهای مورد نظر را دقیقاً مشخص می کنند “تحت اللفظی” نامیده می شوند ، زیرا آنها الگو را به معنای واقعی کلمه ، شخصیت به کاراکتر مطابقت می دهند.

مفید است که اینها را به جای تطبیق یک کلمه ، با رشته ای از کاراکترها مطابقت دهید. با یادگیری الگوهای پیچیده تر ، این یک تمایز مهمتر خواهد شد.

همه کاراکترهای الفبایی و عددی (و برخی دیگر از کاراکترها) به معنای واقعی کلمه مطابقت دارند مگر اینکه توسط مکانیسم های بیان دیگر اصلاح شوند.

مسابقات لنگر

لنگرها کاراکترهای خاصی هستند که مشخص می کنند کبریت در کجا باید معتبر باشد.

به عنوان مثال ، با استفاده از لنگرها ، می توانید مشخص کنید که فقط می خواهید در مورد خطوط منطبق با GNU در ابتدای خط بدانید. برای انجام این کار ، می توانید از لنگر ^ قبل از رشته تحت اللفظی استفاده کنید.

دستور زیر را برای جستجوی فایل GPL-3 و یافتن خطوطی که GNU در ابتدای خط رخ می دهد ، اجرا کنید:

grep “^GNU” GPL-3

این دستور دو خط زیر را برمی گرداند:

 

Output

GNU General Public License for most of our software; it applies also to
GNU General Public License, you may choose any version ever published

به طور مشابه ، شما از anchor $ در انتهای الگو استفاده می کنید تا نشان دهید که تطابق فقط در صورتی معتبر خواهد بود که در انتهای یک خط رخ دهد.

این دستور با هر سطری که به کلمه ختم می شود و در فایل GPL-3 مطابقت دارد:

grep “and$” GPL-3

این خروجی را دریافت خواهید کرد:

 

Output

that there is no warranty for this free software.  For both users' and
  The precise terms and conditions for copying, distribution and
  License.  Each licensee is addressed as "you".  "Licensees" and
receive it, in any medium, provided that you conspicuously and
    alternative is allowed only occasionally and noncommercially, and
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
provisionally, unless and until the copyright holder explicitly and
receives a license from the original licensors, to run, modify and
make, use, sell, offer for sale, import and otherwise run, modify and

مطابقت با هر کاراکتر

کاراکتر (.) در عبارات معمولی به این معنی استفاده می شود که هر کاراکتر منفرد می تواند در محل مشخص شده وجود داشته باشد.

برای مثال ، برای مطابقت هر چیزی در فایل GPL-3 که دارای دو نویسه است و سپس رشته cept ، از الگوی زیر استفاده می کنید:

grep “..cept” GPL-3

این دستور خروجی زیر را برمی گرداند:

 

Output

use, which is precisely where it is most unacceptable.  Therefore, we
infringement under applicable copyright law, except executing it on a
tells the user that there is no warranty for the work (except to the
License by making exceptions from one or more of its conditions.
form of a separately written license, or stated as exceptions;
  You may not propagate or modify a covered work except as expressly
  9. Acceptance Not Required for Having Copies.
...
...

این خروجی دارای موارد پذیرش و استثنا و تغییرات دو کلمه است. اگر این الگو نیز یافت می شد ، با z2cept مطابقت داشت.

عبارات براکت

با قرار دادن گروهی از کاراکترها در داخل پرانتز (\ [و \]) ، می توانید مشخص کنید که کاراکتر آن موقعیت می تواند هر یک از کاراکترهای موجود در گروه براکت باشد.

به عنوان مثال ، برای یافتن خطوطی که بیش از یک یا دو مورد را شامل می شوند ، باید با استفاده از الگوی زیر آن تغییرات را به طور مختصر مشخص کنید:

grep “t[wo]o” GPL-3

خروجی نشان می دهد که هر دو تغییر در فایل وجود دارد:

 

Output

your programs, too.
freedoms that you received.  You must make sure that they, too, receive
  Developers that use the GNU GPL protect your rights with two steps:
a computer network, with no transfer of a copy, is not conveying.
System Libraries, or general-purpose tools or generally available free
    Corresponding Source from a network server at no charge.
...
...

نماد براکت گزینه های جالبی را در اختیار شما قرار می دهد. با شروع لیست کاراکترهای داخل براکت ها با کاراکتر ^ ، می توانید الگو را با هر چیزی مطابقت دهید.

این مثال مانند الگوی .ode است ، اما با کد الگو مطابقت ندارد:

grep “[^c]ode” GPL-3

در اینجا خروجی دریافت خواهید کرد:

 

Output

  1. Source Code.
    model, to give anyone who possesses the object code either (1) a
the only significant mode of use of the product.
notice like this when it starts in an interactive mode:

توجه کنید که در خط دوم برگشتی ، در واقع ، کلمه کد وجود دارد. این نقص بیان عادی یا grep نیست. در عوض ، این خط برگشت داده شد زیرا قبلاً در خط ، حالت الگو ، که در کلمه model یافت می شد ، پیدا شد. خط برگشت داده شد زیرا نمونه ای وجود داشت که با الگو مطابقت داشت.

یکی دیگر از ویژگی های مفید براکت ها این است که می توانید طیف وسیعی از کاراکترها را به جای تایپ تک تک کاراکترهای موجود مشخص کنید.

این بدان معناست که اگر می خواهید هر سطری را که با حرف بزرگ شروع می شود پیدا کنید ، می توانید از الگوی زیر استفاده کنید:

grep “^[A-Z]” GPL-3

در اینجا خروجی این عبارت بر می گردد:

 

Output

GNU General Public License for most of our software; it applies also to
States should not allow patents to restrict development and use of
License.  Each licensee is addressed as "you".  "Licensees" and
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
System Libraries, or general-purpose tools or generally available free
Source.
User Product is transferred to the recipient in perpetuity or for a
...
...

با توجه به برخی از مسائل مرتب سازی قدیمی ، استفاده از کلاس های کاراکتر POSIX به جای محدوده کاراکترهایی که قبلاً استفاده کرده اید ، دقیق تر است.

بحث در مورد هر کلاس نویسه POSIX خارج از محدوده این راهنما است ، اما مثالی که همان روال قبلی را انجام دهد ، از کلاس کاراکتر \ [: above: \] در انتخاب کننده براکت استفاده می کند:

grep “^[[:upper:]]” GPL-3

خروجی مانند قبل خواهد بود.

الگوی صفر یا بیشتر را تکرار کنید

سرانجام ، یکی از متا کاراکترهای متداول ، ستاره یا *است که به معنی “تکرار کاراکتر یا عبارت قبلی صفر یا بیشتر” است.

برای یافتن هر خط در فایل GPL-3 که حاوی پرانتز باز و بسته است ، فقط حروف و فاصله های بین آنها وجود دارد ، از عبارت زیر استفاده کنید:

grep “([A-Za-z ]*)” GPL-3

خروجی زیر را دریافت خواهید کرد:

 

Output

 Copyright (C) 2007 Free Software Foundation, Inc.
distribution (with or without modification), making available to the
than the work as a whole, that (a) is included in the normal form of
Component, and (b) serves only to enable use of the work with that
(if any) on which the executable work runs, or a compiler used to
    (including a physical distribution medium), accompanied by the
    (including a physical distribution medium), accompanied by a
    place (gratis or for a charge), and offer equivalent access to the
...
...

تا کنون از علامت ها ، ستاره ها و دیگر کاراکترها در عبارات خود استفاده کرده اید ، اما گاهی اوقات باید به طور خاص آن کاراکترها را جستجو کنید.

فرار از کاراکترهای متا

مواقعی وجود دارد که باید به دنبال یک دوره واقعی یا یک بازوی اصلی باشید ، مخصوصاً هنگام کار با کد منبع یا فایلهای پیکربندی. از آنجا که این نویسه ها در عبارات معمولی معنای خاصی دارند ، باید از این کاراکترها “فرار” کنید تا به grep بگویید که نمی خواهید در این مورد از معنای خاص آنها استفاده کنید.

با استفاده از کاراکتر پشت خط (\) در مقابل کاراکتر که معمولاً معنای خاصی دارد ، از شخصیت ها فرار می کنید.

به عنوان مثال ، برای یافتن هر سطری که با حروف بزرگ شروع می شود و با یک نقطه خاتمه می یابد ، از عبارت زیر استفاده کنید که از پایان دوره فرار می کند به طوری که به جای معنای معمول “هر کاراکتر” یک دوره واقعی را نشان می دهد:

grep “^[A-Z].*\.$” GPL-3

این خروجی است که مشاهده خواهید کرد:

 

Output

Source.
License by making exceptions from one or more of its conditions.
License would be to refrain entirely from conveying the Program.
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
SUCH DAMAGES.
Also add information on how to contact you by electronic and paper mail.

اکنون بیایید به سایر گزینه های بیان معمولی نگاه کنیم.

توسعه عبارات منظم

دستور grep با استفاده از پرچم -E یا با فراخوانی دستور egrep به جای grep از زبان بیان منظم گسترده تری پشتیبانی می کند.

این گزینه ها قابلیت های “عبارات منظم گسترده” را باز می کند. عبارات منظم و گسترده شامل همه متا کاراکترهای اصلی و متا کاراکترهای اضافی برای بیان تطابقات پیچیده تر می شود.

گروه بندی

یکی از مفیدترین توانایی هایی که عبارات معمولی گسترده باز می کند ، توانایی گروه بندی عبارات برای دستکاری یا ارجاع به عنوان یک واحد است.

برای گروه بندی عبارات با هم ، آنها را در پرانتز بپیچید. اگر می خواهید از پرانتز بدون استفاده از عبارات معمولی گسترده استفاده کنید ، می توانید با فعال کردن این قابلیت ، آنها را با پشت سر هم فرار کنید. این بدان معناست که سه عبارت زیر از نظر عملکرد معادل هستند:

grep “\(grouping\)” file.txt
grep -E “(grouping)” file.txt
egrep “(grouping)” file.txt

جایگزینی

مشابه این که چگونه عبارات براکت می توانند گزینه های مختلف ممکن را برای مطابقت با نویسه مشخص کنند ، تناوب به شما امکان می دهد مطابقت های جایگزین برای رشته ها یا مجموعه های بیان را مشخص کنید.

برای نشان دادن تناوب ، از کاراکتر pipe | استفاده کنید. اینها اغلب در گروه بندی پرانتز استفاده می شوند تا مشخص شود که یکی از دو یا چند احتمال باید مطابقت داشته باشد.

موارد زیر یا GPL یا General Public License در متن پیدا می کند:

grep -E “(GPL|General Public License)” GPL-3

خروجی به این شکل است:

 

Output

  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price.  Our General Public Licenses are designed to make sure that you
  Developers that use the GNU GPL protect your rights with two steps:
  For the developers' and authors' protection, the GPL clearly explains
authors' sake, the GPL requires that modified versions be marked as
have designed this version of the GPL to prohibit the practice for those
...
...

Alternation می تواند بین بیش از دو گزینه با افزودن گزینه های اضافی در گروه انتخاب جدا شده با نویسه های اضافی  (|) را انتخاب کند.

کمیسازها(Quantifiers)

مانند * متا کاراکتری که با کاراکتر یا نویسه قبلی صفر یا بیشتر مطابقت داشت ، متا کاراکترهای دیگری نیز در عبارات منظم گسترده وجود دارد که تعداد وقایع را مشخص می کند.

برای مطابقت یک کاراکتر صفر یا یک بار ، می توانید از؟ شخصیت. این باعث می شود که شخصیت یا مجموعه شخصیت هایی که قبل از اختیاری آمده اند ، در اصل باشد.

موارد زیر با قرار دادن کپی در یک گروه اختیاری با حق چاپ و حق مطابقت دارد:

grep -E “(copy)?right” GPL-3

این خروجی را دریافت خواهید کرد:

 

Output

 Copyright (C) 2007 Free Software Foundation, Inc.
  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
know their rights.
  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
  "Copyright" also means copyright-like laws that apply to other kinds of
...

کاراکتر + یک یا چند بار با یک عبارت مطابقت دارد. این تقریباً شبیه کاراکتر * است ، اما با کاراکتر + ، عبارت باید حداقل یک بار مطابقت داشته باشد.

عبارت زیر با رشته رایگان به علاوه یک یا چند کاراکتر که کاراکتر فضای سفید نیستند مطابقت دارد:

grep -E “free[^[:space:]]+” GPL-3

این خروجی را مشاهده خواهید کرد:

 

Output

  The GNU General Public License is a free, copyleft license for
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
  When we speak of free software, we are referring to freedom, not
have the freedom to distribute copies of free software (and charge for
you modify it: responsibilities to respect the freedom of others.
freedomss that you received.  You must make sure that they, too, receive
protecting users' freedom to change the software.  The systematic
of the GPL, as needed to protect the freedom of users.
patents cannot be used to render the program non-free.

تعیین تکرار تطبیق

برای تعیین تعداد دفعات تکرار یک مسابقه ، از کاراکترهای پرانتز ({و}) استفاده کنید. این کاراکترها به شما اجازه می دهند تا تعداد دقیق ، محدوده یا محدوده بالا یا پایین را به تعداد دفعات مطابقت یک عبارت مشخص کنید.

از عبارت زیر برای پیدا کردن همه خطوط موجود در فایل GPL-3 که حاوی سه حروف صدادار هستند استفاده کنید:

grep -E “[AEIOUaeiou]{3}” GPL-3

هر سطر برگشتی دارای یک کلمه با سه مصوت است:

 

Output

changed, so that their problems will not be attributed erroneously to
authors of previous versions.
receive it, in any medium, provided that you conspicuously and
give under the previous paragraph, plus a right to possession of the
covered work so as to satisfy simultaneously your obligations under this

برای مطابقت با کلماتی که بین 16 تا 20 نویسه دارند ، از عبارت زیر استفاده کنید:

grep -E “[[:alpha:]]{16,20}” GPL-3

در اینجا خروجی این فرمان است:

 

Output

    certain responsibilities if you distribute copies of the software, or if
    you modify it: responsibilities to respect the freedom of others.
        c) Prohibiting misrepresentation of the origin of that material, or

فقط خطوط حاوی کلمات در این طول نمایش داده می شود.

نتیجه

grep در یافتن الگوهای درون فایلها یا در سلسله مراتب سیستم فایل مفید است ، بنابراین ارزش وقت گذاشتن برای راحت شدن با گزینه ها و نحو آن را دارد.

عبارات معمولی حتی همه کاره تر هستند و می توانند در بسیاری از برنامه های محبوب استفاده شوند. به عنوان مثال ، بسیاری از ویرایشگران متن عبارات معمولی را برای جستجو و جایگزینی متن پیاده سازی می کنند.

علاوه بر این ، اکثر زبان های برنامه نویسی مدرن از عبارات معمولی برای انجام رویه های خاصی از داده ها استفاده می کنند. هنگامی که عبارات معمولی را درک کردید ، می توانید این دانش را به بسیاری از کارهای رایج مرتبط با رایانه ، از انجام جستجوهای پیشرفته در ویرایشگر متن تا تأیید ورودی کاربر منتقل کنید.

grepالگوهای متن در لینوکسجدیدترین سرور لینوکسخریدسرورلینوکسسرورلینوکسلینوکس

  • behnam gol mohamadi