De flesta nybörjare av Unix-system, särskilt Linux, känner inte till de grundläggande kommandoradsoperatörer som används i detta operativsystem. Låt oss titta närmare på funktionerna och användningen av hitta och grep operatörer.
Använda Find och Grep-kommandon i Linux.
HITTA
Linux-find-kommandot är ett kommandoradsverktyg för att kryssa filhierarkin. Det kan användas för att söka efter filer och kataloger och utföra efterföljande operationer med dem. Den stöder sökning efter fil, mapp, namn, skapningsdatum, ändringsdatum, ägare och behörigheter. Med -exec kan andra UNIX-kommandon utföras för hittade filer eller mappar. syntax:
$ hitta [var du ska starta sökningen] [uttryck bestämmer vad du ska hitta] [-alternativ] [vad man ska hitta]
alternativ:
- -exec - den obligatoriska filen som uppfyller ovanstående kriterier och returnerar 0 som ett utgångsläge för framgångsrikt kommandotillförsel;
- -ok - fungerar på samma sätt som -exec, förutom att användaren först uppmanas
- -inum N - sök med numret "N";
- -länkar N - sök med länkar "N";
- -namn demo - sök efter filer som anges i "demo";
- -nyckelfil - sök efter filer som har ändrats / skapats efter "fil";
- -perm oktal - sök om upplösningen är oktal;
- -print - visa sökvägen till de dokument som hittades med de andra kriterierna
- -empty - sök efter tomma dokument och kataloger;
- -size + N / -N - sökblock "N"; "N" och "c" kan användas för att mäta storleken i tecken; "+ N" betyder en större storlek av "N" -block, och "-N" betyder en mindre storlek av "N" -block;
- - Användarnamn - Sök efter dokument som tillhör användarnamnet eller identifieraren "Namn";
- \ (expr \) - True om "expr" är sant; Används för att gruppera kriterier i samband med OR eller AND.
GREP
Grep-kommandot används för att söka efter filer. Funktionen står för "global utskrift av reguljära uttryck" och är en av de mest kraftfulla och ofta använda kommandon i Linux. Kommandot söker efter en eller flera inmatningsfiler som matchar det angivna mönstret och skriver varje motsvarande rad till standardutmatningen. Om inga filer är angivna, läser kommandot från standardinmatningen, som vanligtvis är resultatet av ett annat kommando. I den här artikeln visar vi hur du anger ett kommando med praktiska exempel och detaljerade förklaringar av de vanligaste GNU grep-alternativen.
Kommandosyntax
Innan vi börjar använda kommandot, låt oss börja med att granska den grundläggande syntaksen. Användningsuttryck har följande formulär:
[OPTIONS] PATTERN [FIL ...]
Artiklar i kvadratkonsoler är frivilliga.
- OPTIONS - noll eller fler val. Laget ger ett antal alternativ som styr dess beteende.
- PATTERN - Sökmönster.
- FIL - noll eller flera inmatningsfilnamn.
Så här anger du ett kommando för att söka efter filer
Huvudsyftet med kommandot är att söka efter text i filen. Till exempel, för att visa från filen / etc / passwd som innehåller baslinjen kan du använda följande kommando:
$ grep bash / etc / passwd
Utgången ska se ut så här:
root 0: 0: root: / root: / bin / bash
domain1000: 1000: domain: / home / domain: / bin / bash
Om strängen innehåller mellanslag måste du bifoga den i enkla eller dubbla citat:
$ "Gnome Display Manager" / etc / passwd
Inverter Match (ex)
För att visa linjer som inte matchar mönstret, ange parametern -v (eller -invert-match). Om du till exempel vill visa en fil som inte innehåller nologin från filen / etc / passwd, kan du ange följande kommando:
$ -v nologin / etc / passwd
Output:
root 0: 0: root: / root: / bin / bash
kolord 124: 124 :: / var / lib / kolord: / bin / false
git 994: 994: Git Daemon-användare: /: / usr / bin / git-shell
linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash
Så här använder du kommandot för att söka i utmatningen
I stället om du anger inmatningsfiler kan du omdirigera utmatningen från ett annat kommando och visa bara de rader som matchar det angivna mönstret. Till exempel, för att ta reda på vilka processer som körs på ditt system som en www-data-användare, kan du använda följande kommando:
$ ps -ef | www-data som
Output:
www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www
root 18272 17714 0 16:00 pts / 0 00:00:00 -färg = auto-exclude-dir = .bzr -exclude-dir = CVS -exclude-dir = .git -exclude-dir = .hg -exclude-dir = .svn www-data
www-data 31147 12770 0 okt22? 00:05:51 nginx: arbetarprocess
www-data 31148 12770 0 okt22? 00:00:00 nginx: cache manager process
Du kan också kombinera flera kanaler till ett lag. Som du kan se i utgången ovan finns det också en rad som innehåller processen. Om du inte vill att den här raden ska visas ska du skicka utmatningen till en annan instans, som visas nedan.
$ ps -ef | www-data | grep -v grep
Output:
www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www
root 18272 17714 0 16:00 pts / 0 00:00:00 -färg = auto-exclude-dir = .bzr -exclude-dir = CVS -exclude-dir = .git -exclude-dir = .hg -exclude-dir = .svn www-data
www-data 31147 12770 0 okt22? 00:05:51 nginx: arbetarprocess
www-data 31148 12770 0 okt22? 00:00:00 nginx: cache manager process
Rekursiv sökning
För att rekursivt söka efter ett mönster anger du alternativet -r (eller -recursivt). Det här låter dig söka igenom alla filer i den angivna katalogen och hoppa över symboliska länkar som uppträder rekursivt. För att gå igenom alla symboliska länkar, använd alternativet -r (eller -referens-rekursivt). I följande exempel söker vi efter domain.com i alla filer i katalogen / etc:
$ -r domain.com / etc
Kommandot skriver ut motsvarande fält med hela filvägs prefixet.
/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;
Om istället för -r du använder alternativet -R följer kommandot alla symboliska länkar:
$ -R domain.com / etc
Observera det sista utmatningsfältet. Detta skrivs inte ut i exemplet ovan, eftersom filerna i Nginx-katalogen med webbplatser är symboliska länkar till konfigurationsfiler i den tillgängliga katalogen.
Output:
/etc/hosts:127.0.0.1 node2.domain.com
/etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;
/etc/nginx/sites-enabled/domain.com: server_name domain.com www.domain.com;
Visa endast filnamn
För att undertrycka standardutmatningen och bara skriva ut namnen på filer som innehåller det matchade mönstret, kan du ange alternativet -l (eller -filer-med-matchningar). Om du t.ex. vill söka efter alla filer som slutar i .conf i den nuvarande arbetsmappen och bara skriva ut filnamn som innehåller domain.com-typen skriver du:
$ -L domain.com * .conf
Utgången kommer att se ut så här:
tmux.conf
haproxy.conf
-L-alternativet brukar användas i samband med rekursivt -R-alternativet:
$ -Rl domain.com / tmp
Fall okänslighet
Kommandot är som standard huvudkänsligt, vilket betyder att versaler och små bokstäver behandlas som olika. För att ignorera fallet när du söker, ange alternativet -i (eller -ignore-case). Om du till exempel söker efter en Zebra utan något alternativ, kommer följande kommando inte att visa någon utmatning, dvs. det matchar.
$ Zebra / usr / dela / ord
Men om du utför en iögonfallande sökning, använd alternativet -i, det kommer att matcha både stora och små bokstäver:
$ grep -i Zebra / usr / dela / ord
Indikationen "Zebra" kommer att motsvara "Zebra", "ZEbrA" eller någon annan kombination av versaler och små bokstäver.
Output:
zebra
Zebras
zebror
Exakt matchning
När du söker, skriver gnu också gnu, där större ord sätts in, till exempel cygnus eller magnum.
$ gnu / usr / share / words
Output:
cygnus
GNU
interregnum
lgnu9d
lignum
magnum
Magnuson
sphagnum
wingnut
För att returnera endast de uttryck där det angivna fältet är ett helt ord (ej bifogat i ord) kan du använda alternativet -w (eller -word-regexp).
VIKTIGT. Tecknen i ordet innehåller alfanumeriska tecken (az, az och 0-9) och understrykningspunkter (_). Alla andra tecken behandlas som icke-verbala tecken.Om du kör samma kommando som ovan, inklusive alternativet -w, returneras kommandot bara de som innehåller gnu som ett separat ord.
$ grep -w gnu / usr / share / words
Utgång: gnu
Visa nummer
För att visa antalet rader som innehåller ett mönster, använd parametern -n (eller -linjenummer). Med det här alternativet skrivs ut matchningar till standardutgången med prefixet för numret där det hittades. Om du exempelvis vill visa från filen / etc / services som innehåller bash-prefixet med motsvarande nummer kan du använda följande kommando:
$ grep -n 10000 / etc / tjänster
Utgången nedan visar att matcherna är vid 10423 och 10424.
Output:
10423: ndmp 10.000 / tcp
10424: ndmp 10000 / utp
räkna
För att skriva ut antalet matchande linjer till standardutmatningen, använd parametern -c (eller -count). I exemplet nedan räknar vi antalet konton som har skalet / usr / bin / zsh.
$ grep -c '/ usr / bin / zsh' / etc / passwd
Utgång: 4
Flera linjer (mönster)
Operatören OR kan kombinera två eller flera sökmönster |. Som standard tolkar kommandot mönstret som det huvudsakliga reguljära uttrycket, i vilket metatapeer förlorar sin speciella betydelse och deras versioner med backslash ska användas. I exemplet nedan söker vi efter alla händelser av orden dödlig, fel och kritisk i Nginx-felloggfilen:
$ grep 'dödlig \ | error \ | critical' /var/log/nginx/error.log
Om du använder det utökade regelbundna uttrycksalternativet -E (eller -extended-regexp), ska uttalandet inte undvikas, enligt nedan:
$ grep -E 'dödlig | error | critical' /var/log/nginx/error.log
Regelbundet uttryck
GNU Grep har två uppsättningar av reguljära expressionsfunktioner - Basic och Extended. Som standard tolkar funktionen mönstret som ett grundläggande reguljärt uttryck, för att växla till förlängda reguljära uttryck, måste du använda alternativet -E. När du använder reguljära uttryck i huvudläget är alla andra tecken, utom meta tecken, faktiskt vanliga uttryck som motsvarar varandra. Nedan följer en lista över de vanligaste metateklarna:
- Använd ^ tecknet (karet karaktären) för att matcha uttrycket i början av en rad. I följande exempel kommer ^ känguru att matcha endast om det inträffar i början: $ grep "^ kangaroo" file.txt
- Använd $ (dollar) symbolen för att matcha uttrycket i slutet. I följande exempel kommer känguru $ bara att matcha om det uppstår i slutet: grep "kangaroo $" file.txt
- Använd symbolen. (punkt) för att matcha alla enskilda tecken. Till exempel, för att matcha allt som börjar med kan med två tecken och slutar med roo, kan du använda följande mönster: $ grep "kan..roo" file.txt
- Använd [] (parentes) för att matcha alla enskilda tecken i parentes. Hitta till exempel de som innehåller accept eller "accent, du kan använda följande mönster: $ grep" acce [np] t "file.txt
För att undvika den speciella betydelsen av nästa tecken, använd tecknet \ (backslash).
Utökade reguljära uttryck
För att tolka ett mönster som ett utökat regelbundet uttryck, använd parametern -E (eller -extended-regexp). Utökade reguljära uttryck inkluderar alla grundläggande metakarakterer, samt ytterligare metateklar för att skapa mer komplexa och kraftfulla sökmönster. Nedan följer några exempel:
- Matcha och extrahera alla e-postadresser från den här filen: $ grep -E -o "\ b [A-Za-z0-9 ._% + -] [A-Za-z0-9 .-] + \. [A-Za-z] {2.6} \ b "file.txt
- Karta och extrahera alla giltiga IP-adresser från den här filen: $ grep -E -o '(25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0 -9] a) (25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9] 5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?). (25 [0-5] | 2 [0-4] [0- 9] | [01]? [0-9] [0-9]?) 'File.txt
Alternativet -O används för att endast skriva ut matchningar.
Skriv ut innan du räknar
Om du vill skriva ut ett visst antal rader innan du matchar, använd parametern -B (eller -för-kontext). Om du till exempel vill visa 5 rader av inledande sammanhang innan du matchar kan du använda följande kommando: $ grep -A 5 root / etc / passwd
Skriv ut efter sökning
Om du vill skriva ut ett visst antal rader efter en match använder du parametern -A (eller -kontext). Om du till exempel visar 5 rader i det slutliga sammanhanget efter matchande strängar kan du använda följande kommando: $ grep -B 5 root / etc / passwd
Detta är allt som behövs för fullständig användning av kommandoninformation. Om du redan använder Linux och kan ge några råd till nybörjare, dela kommentarer enligt denna artikel.