GREP и Намерете правилата на операторите за Linux

GREP и Намерете правилата на операторите за Linux

Първоначално операционните системи Unix/Linux нямат графичен интерфейс, тъй като са били фокусирани върху използването на сървъра. Днес в това отношение те не са по -ниски от Windows, поради което потребителите, които използват тази ОС, рядко знаят синтаксиса и целта на основните команди на Linux. Междувременно това е много мощен инструмент, който ви позволява бързо да извършвате операции, които, използвайки основните инструменти на ОС, е проблематично или невъзможно. Днес ще срещнете оператори Find и GREP, които са основни за файловата система на всички Linux дистрибуции.

Назначаването на оператори за намиране и GREP

Екипът на Find в Linux е операторът на командния ред, който работи с файлове, заобикалящи съществуващата йерархия. Тя ви позволява да търсите файлове, използвайки много филтри, както и да извършвате определени действия по файлове след успешното им търсене. Сред критериите за търсене на файлове са почти всички налични атрибути, от датата на създаване до резолюция.

Екипът на GREP в Linux също се отнася до търсачките, но вътре в файловете. Буквалният превод на екипа е „глобален печат на редовни изрази“, но печат тук означава заключението на резултатите от работата на устройството по подразбиране, което обикновено е мониторът. Имайки огромен потенциал, операторът се използва доста често и ви позволява да търсите в рамките на един или повече файлове според посочените фрагменти (шаблони). Тъй. Ще се опитаме да премахнем този недостатък.

Grep и Намерете синтаксис

Да започнем с оператора Find. Синтаксисът на екипа за търсене на файлове изглежда така:

Намерете [къде да погледнете] [параметри] [-optic] [Действие]

Някои използват параметри:

  • -Дълбочина: Търсене в текущата папка и субкаталистите;
  • -Версия: Донесете версията на екипа;
  • -Печат: Показване на пълни имена на файлове (в Linux те могат да бъдат произволно големи);
  • -Тип F: Търсене изключително файлове;
  • -Тип D - Директория само за търсене (папки).

Списък на наличните опции (посочени чрез тире):

  • Име: Търсене на файл по име;
  • Потребител: Търсене по името на собственика на файла;
  • Перм: Според атрибута "режим на достъп";
  • mtime: До момента на последната промяна (редактиране) на файла;
  • Група: по група;
  • Atime: До датата на последното отваряне на файла;
  • По -ново: търсене на файл с дата повече от директива, посочена в шаблона;
  • Размер: по размера на файла в байтове;
  • Nouser: Търсене на файлове, които нямат въведен атрибут „Собственик“.

GREP синтаксис:

Шаблон Grep [Options] [Къде да търся]

Опциите трябва да се разбират като допълнителни изясняващи параметри, например, използването на обратния режим или търсенето на даден брой редове.

Шаблонът показва какво трябва да се търси с помощта на директно определена линия или редовен израз.

Възможността за използване на регулярни изрази може значително да разшири възможностите за търсене. Индикация за стандартното заключение може да бъде полезна, ако задачата е да филтрира грешките, записани в дневниците, или да се търси PID процеса в резултатите от командата PS, които могат да бъдат мулти -страница.

Помислете за най -често срещаните параметри на GRAS:

  • -Б: Показване на номера на блока преди издаване на получената линия;
  • -В: Необходимо е да се изчисли броят на записите на желания фрагмент;
  • -I: Търсене без регистриране на регистър;
  • -N: Издайте номер на линия на стандартното изходно устройство, в което е намерен желания фрагмент или шаблон;
  • - L: В резултат на издаване трябва да присъстват само имената на файлове с намерен фрагмент за търсене;
  • -S: Игнорирайте изхода на грешки;
  • -W: Търсене на фрагмент, заобиколен от двете страни от пространства;
  • -V: Обърнато търсене, тоест показването на всички редове, които не съдържат даден фрагмент;
  • -Д: Параметърът показва, че следва да следва допълнително редовен израз, който има свой собствен синтаксис;
  • -AN: Заключението на желания фрагмент и предишни N линии;
  • -BN: Същото, но с линиите след шаблона.

Сега има смисъл да преминете от теоретичната част към практическото.3

Примери за използване на комунални услуги

Ако знаете какво са комбинаториката, тогава трябва да бъде представен истинският брой възможни комбинации от екипите за търсене. Ние ще се ограничим само до най -полезните примери, които могат да ви бъдат полезни по време на работа.

Потърсете текст във файлове

Нека имаме правата на администратора и ние имаме задачата да намерим конкретен потребител в огромен файл с парола. Ще ни трябва доста прост екип, указващ пътя за публикуване на файлове:

Grep nameuser /etc /passwd

Ако резултатът от търсенето е положителен, ще получим произтичаща линия от приблизително следния тип:

NameUser: x: 1021: 1021: nameUser ,,,:/Начало/Потребител:/BIN/BASH

Ако трябва да потърсите фрагмент от текст, без да вземете предвид регистъра на регистъра, екипът ще изглежда така:

Gras -i "nameUser" /etc /passwd

В този случай потребителят на NameUser и неговият "съименник" NameUser, както и всички други възможни комбинации ще бъдат намерени.

Заключението на няколко реда

Нека получим всички грешки от дневника на прозорците Xorg.log. Задачата се усложнява от факта, че след грешен низ, съдържащ ценна информация, може да последва. Решено е, ако принудим командата да покаже няколко реда, използвайки реда "PP" като шаблон:

Gras -a5 "pp"/var/log/xorg.0.log

Получаваме линия, съдържаща шаблон и 5 реда след него.

Gras -c3 "pp"/var/log/xorg.0.log

Изход на линия с фрагмент от текста и три реда преди и след.

Използване на редовни изрази в GREP

Това е един от най -мощните Linux инструменти, които значително разширяват възможността за формиране на шаблон за търсене. Редовните изрази имат свой синтаксис, доста сложни. Няма да се задълбочим в него, ограничавайки се до примера за използването на RV. Както вече знаете, за да посочите, че редовният израз се използва допълнително, параметърът -e се използва.

Позволете ни във файла за съобщения.2 Трябва да хванем всички линии за септември:

Grep "^септември 09"

Резултатът ще бъде нещо подобно:

09 септември 01:11:45 GS124 NTPD [2243]: Нулиране на времето +0.197579 s

09 септември 01:19:10 GS124 NTPD [2243]: Нулиране на времето +0.203484 s

За да се търси шаблон, разположен в края на линията на лентата, се използва символът „$“:

Grep "термин.$ "Съобщения

Резултат:

17 юни 19:01:19 Cloneme Kernel: Термин на демон за лог.

11 септември 06:30:54 Cloneme Kernel: Термин на демон за дневник.

И ето пример за използване на редовен израз, който ви позволява да търсите линии, съдържащи числа, с изключение на нула:

Grep "[1-9]"/var/log/xorg.1.log

Използване на рекурсивно търсене в GREP

Ако сте запознати с термина "рекурсия", тогава в Linux тази техника се използва по -специално за търсене на фрагмент в няколко файла, разположени в каталога и неговите подката. Опцията -R ще посочи наличието на рекурсия. Нека потърсим фрагмент "namesomain.Org "в файлове, разположени в подкоалите на папката /etc /apache1:

Gras -r "nameomain.Org "/etc/apache1/

Резултатът може да е нещо подобно:

/etc/apache1/vhosts.D/ nameomain.Org

Ако името на файла не се изисква, използваме -h: h:

Grep -h -r "nanmayomain.Org "/etc/apache1/

Търсене на думи

Стандартно търсенето на фрагмента QWE ще завърши с издаването на всички думи, в които е намерен този фрагмент: KBQWE, QWE123, AAFRQWE32. За да ограничите търсенето само с даден фрагмент, трябва да използвате параметъра -w:

Gras -w "qwe" къде да намеря

Потърсете две или повече думи

Усложняваме задачата: Трябва да намерим всички редове, където са намерени две думи. Екипът ще бъде такъв:

Gras -w "word01 | word02", където_ да се намери

Броя на линиите

Ако е необходимо за изчисляване. Колко пъти се намира желаният фрагмент във файла, използваме дизайна с параметъра -c:

Gras -c "текст", където да се намери

Параметърът -n помага да се разбере в кой ред е намерен желания шаблон:

Gras -n "nuser" /etc /passwd

Обърнато търсене с помощта на GREP

Понякога задачата за търсене с помощ. Опцията -v ще ни помогне:

Gras -v "txt", където да се намери

Изходът на името на файла

Нека трябва да намерите всички файлове в посочената директория, съдържаща желания шаблон. Това може да се направи с помощта на параметъра -l. И така, пълната команда за изхода на файлове, съдържащи низа "вторичен" в папката /и т.н., ще изглежда както следва:

GREP -L "вторичен" /и т.н

Изход на цвят с помощта на Grep

Да останеш с друг цвят е чудесен начин за визуализиране на желания запис, който значително намалява натоварването на очите, ако операцията често се извършва. Оказва се, че Gras има опция за този изход от резултатите от търсенето:

Grepor -цвят "вторичен" /и т.н

Пристъпваме към разглеждането на примери за използване на полезността за намиране в Linux.

Потърсете всички файлове

За да изтеглим списък с файлове, разположени в текущия каталог, използваме командата в следния формат:

намирам .

Ако трябва да покажете пълното име на файловете, ние използваме командата

намирам . -Печат

Изход на файл в даден каталог

За да търсим файлове в папка, дефинирана от потребителя, използваме командата

намирам ./и т.н

Но как можете да намерите файлове, съдържащи даден фрагмент в текущия каталог:

намирам . -Име "*.Gif "

Ако търсенето трябва да бъде извършено без отчитане на регистъра, командата трябва да бъде променена:

Не вземайте предвид регистъра, когато търсите по име:

намирам . -В мен "*.Gif "

Ограничаване на дълбочината на търсене

Друга доста типична задача е да търсите файлове в определена папка според дадено име:

намирам . -maxdepth01 1 -name "*.Html "

Объркване на шаблона

Вече сме разгледали аналог на екипа за търсене на линии, които не съдържат даден фрагмент. По същия начин можете да направите с файлове, които не съответстват на даден шаблон:

намирам . -не -name "Потребител*"

Търсене по няколко критерия

Ние даваме пример за командния ред, използвайки полезността за намиране на помощ по два критерия, използвайки оператора NOT (Exclusion):

намирам . -Име "Потребител" -NOT -NAME "*.Html "

В този случай файлове, чието име включва потребителски фрагмент, но които имат разширение, няма да бъдат намерени. Вместо оператор на изключения можете да използвате логическия "/" или "::

Намерете -name "*.js "-o -name"*.SQL "

В този случай ще получим пълен списък с файлове с двете разширения, разположени в текущата директория.

Търсене в няколко каталога

Ако трябва да намерим файлове в два каталога, просто посочете от пропастта:

Намерете -тип f ./test01 ./test02 -name "*.SQL "

Потърсете скрити файлове

В Linux, както в Windows, има скрити файлове, които при използване на командата Find няма да бъдат показани без специален символ. Този символ е Тилда, а директивата ще има следния поглед:

Намерете ~ -name ".*"

Потърсете файлове в Linux чрез разрешения

Понякога има нужда от филтриране на каталога за определена маска на правата. Например, ако трябва да намерим файлове с атрибут 0661, използваме командата:

намирам . -Перм 0661

Задачата за филтриране на файлове с атрибута „само за четене“ се решава по следния начин:

Find /etc /user -perm /u = r

Но как ще изглежда търсенето на изпълними файлове в каталога на ETC:

Намерете /etc -perm /a = x

Търсете файлове от групи/потребители

Администраторът често трябва да се сблъсква със задачата да търси файлове, които са собственост на определен потребител и/или група. Търсене от потребител:

намирам . -Потребителски Slavko

За потребителски групи се използва друг параметър:

Намерете /var -групи devs

Търсене по дата на последната промяна

Видимият формат на датата на файла в Linux OS е именно датата на неговата модификация (същият принцип се използва в Windows). За да се формира списък по дата, се използва опцията за mtime. Да речем, че трябва да намерим файлове, променени преди два месеца:

Намерете /Начало -MTIME 60

Сред атрибутите на файла има дата на последното му откритие (без да прави промени). Такива файлове се показват от следната команда:

Намерете /Начало -тим 60

Можете също да зададете интервала от време. За да търсим файлове, модифицирани от преди четири до два месеца, използваме директивата:

Намерете /Начало -MTime +60 -MTime -120

Но как да намерите прясно променени файлове (преди два часа):

Намерете /Начало -CMIN 120

Потърсете файлове по размер

Подозирайте, че някой използва диск за филми? Търсим файлове размер 1.4 ГИГАБАЙТА:

Намерете / -размест 1400м

Или използвайте обхвата:

Намерете / -разне

Потърсете празни файлове/каталози

Да, не се изненадвайте. Задачата за възстановяване на реда на медиите е характерна не само за Android OS. В Linux е решено с помощта на подобна директива:

Намерете /var -тип f -Empty

Пример за действия с намерени файлове

В Linux екипът на Find може рекурсивно да извършва определени действия с тези файлове, търсенето, което провеждате. За да изпълните команди на файлове, трябва да използвате параметъра exec. И така, директивата за показване на информация за всички файлове, използващи командата LS, ще изглежда така:

намирам . -exec ls -l \;

Но как просто можете да изтриете временни файлове с дадена маска в директорията /Начало /Темп:

Намерете /tmp -тип f -name "*.html ”-exec rm -f \;

Разбира се, за начинаещ използването на команден ред с огромен брой опции ще изглежда някак сложен начин, но в Linux е в реда на нещата. И как бихте решили проблемите, описани тук в Windows? Това е същото. В този аспект Linux очевидно е напред.