Weboldal keresés

12 hasznos parancs a szövegszűréshez a hatékony fájlműveletek érdekében Linux alatt


Ebben a cikkben áttekintünk néhány parancssori eszközt, amelyek szűrőként működnek a Linuxban. A szűrő egy olyan program, amely beolvassa a szabványos bemenetet, műveletet hajt végre rajta, és az eredményeket a szabványos kimenetre írja.

Emiatt hatékony módon használható információk feldolgozására, például a kimenet átstrukturálására hasznos jelentések generálására, a fájlok szövegének módosítására és sok más rendszeradminisztrációs feladatra.

Ezzel együtt az alábbiakban felsorolunk néhány hasznos fájl- vagy szövegszűrőt a Linuxban.

1. Awk Command

Az Awk egy figyelemre méltó mintaolvasó és -feldolgozó nyelv, amely hasznos szűrők létrehozására használható Linuxban. Elkezdheti használni, ha elolvassa az Awk sorozat 1. részétől 13. részéig.

Ezenkívül olvassa el az awk man oldalt további információkért és használati lehetőségekért:

man awk

2. Sed parancs

A sed egy hatékony adatfolyam-szerkesztő a szöveg szűrésére és átalakítására. Már írtunk két hasznos cikket a sed-ről, amelyeket itt olvashatsz:

  1. A GNU „sed” parancs használata fájlok létrehozására, szerkesztésére és manipulálására Linux alatt
  2. 15 hasznos „sed” parancstipp és trükk a napi Linux rendszerfelügyeleti feladatokhoz

A sed man oldal vezérlési opciókat és utasításokat tartalmaz:

man sed

3. Grep, Egrep, Fgrep, Rgrep parancsok

Ezek szűrik az adott mintának megfelelő kimeneti sorokat. Sorokat olvasnak be egy fájlból vagy szabványos bemenetről, és alapértelmezés szerint minden egyező sort kinyomtatnak a szabványos kimenetre.

Megjegyzés: A fő program a grep, a változatok egyszerűen megegyeznek az alábbi grep-beállításokkal (és továbbra is használatban vannak a visszafelé kompatibilitás érdekében):

egrep = grep -E
fgrep = grep -F
rgrep = grep -r  

Az alábbiakban néhány alapvető grep-parancs található:

tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:

tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:

További információ a mi a különbség a Grep, az Egrep és az Fgrep között Linuxban?.

4. fej Parancs

A head a fájl első részeinek megjelenítésére szolgál, alapértelmezés szerint az első 10 sort adja ki. A -n num jelzővel megadhatja a megjelenítendő sorok számát:

tecmint@TecMint ~ $ head /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root
Jan  2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)

tecmint@TecMint ~ $ head  -n 5 /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root

Ismerje meg, hogyan használhatja a head parancsot a tail és cat parancsokkal a hatékony használat érdekében Linuxon.

5. farok Parancs

A farok a fájl utolsó részeit (alapértelmezés szerint 10 sort) adja ki. A -n num kapcsolóval adja meg a megjelenítendő sorok számát.

Az alábbi parancs a megadott fájl utolsó 5 sorát adja ki:

tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

Ezenkívül a tail rendelkezik egy speciális -f opcióval, amellyel valós időben figyelheti meg a fájl változásait (különösen a naplófájlokat).

A következő paranccsal figyelheti a megadott fájl változásait:

tecmint@TecMint ~ $ tail -f /var/log/auth.log
Jan  6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

Olvassa el a tail kézikönyvoldalt a használati lehetőségek és utasítások teljes listájáért:

man tail

6. sort Parancs

A rendezés egy szövegfájl sorainak rendezésére szolgál, vagy szabványos bemenetről.

Alább látható a domains.list nevű fájl tartalma:

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com

Futtathat egy egyszerű rendezési parancsot a fájl tartalmának rendezéséhez, például:

tecmint@TecMint ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.linux-console.net
news.linux-console.net
linux-console.net
linux-console.net
windowsmint.com
windowsmint.com

A sort parancsot sokféleképpen használhatja, olvassa el a rendezési parancsról szóló hasznos cikkeket az alábbiak szerint:

  1. 14 hasznos példa a Linux „rendezési” parancsára – 1. rész
  2. 7 érdekes Linux „rendezési” parancspélda – 2. rész
  3. Fájlok keresése és rendezése a módosítás dátuma és időpontja alapján
  4. Az „ls” parancs kimenetének rendezése az utolsó módosítás dátuma és időpontja szerint

7. egyedi parancs

Az uniq parancs az ismétlődő sorok jelentésére vagy kihagyására szolgál, kiszűri a sorokat a szabványos bemenetről, és az eredményt a szabványos kimenetre írja.

A bemeneti adatfolyamon a rendezés futtatása után az alábbi példában látható módon eltávolíthatja az ismétlődő sorokat az uniq funkcióval.

Egy sor előfordulásának számának jelzéséhez használja a -c kapcsolót, és az összehasonlítás során hagyja figyelmen kívül a különbségeket a -i kapcsolóval:

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com

tecmint@TecMint ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.linux-console.net
2 linux-console.net
1 windowsmint.com 

Olvassa el az egyedi kézikönyvoldalt további használati információkért és jelzőkért:

man uniq

8. fmt parancs

Az fmt egyszerű, optimális szövegformázó: újraformázza a bekezdéseket egy megadott fájlban, és az eredményeket a szabványos kimenetre nyomtatja.

A következő a domain-list.txt fájlból kivont tartalom:

1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

A fenti tartalom szabványos listává formázásához futtassa a következő parancsot a -w kapcsolóval a maximális vonalszélesség meghatározásához:

tecmint@TecMint ~ $ cat domain-list.txt 
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

tecmint@TecMint ~ $ fmt -w 1 domain-list.txt
1.linux-console.net 
2.news.linux-console.net 
3.linuxsay.com 
4.windowsmint.com

9. pr Parancs

A pr parancs szöveges fájlokat vagy szabványos bemenetet konvertál a nyomtatáshoz. Például Debian rendszereken az összes telepített csomagot a következőképpen listázhatja:

dpkg -l

A lista nyomtatásra kész oldalakba és oszlopokba rendezéséhez adja ki a következő parancsot.

tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20  

2017-01-06 13:19                                                  Page 1


Desired=Unknown/Install ii  adduser		ii  apg
| Status=Not/Inst/Conf- ii  adwaita-icon-theme	ii  app-install-data
|/ Err?=(none)/Reinst-r ii  adwaita-icon-theme- ii  apparmor
||/ Name		ii  alsa-base		ii  apt
+++-=================== ii  alsa-utils		ii  apt-clone
ii  accountsservice	ii  anacron		ii  apt-transport-https
ii  acl			ii  apache2		ii  apt-utils
ii  acpi-support	ii  apache2-bin		ii  apt-xapian-index
ii  acpid		ii  apache2-data	ii  aptdaemon
ii  add-apt-key		ii  apache2-utils	ii  aptdaemon-data


2017-01-06 13:19                                                  Page 2


ii  aptitude		ii  avahi-daemon	ii  bind9-host
ii  aptitude-common	ii  avahi-utils		ii  binfmt-support
ii  apturl		ii  aview		ii  binutils
ii  apturl-common	ii  banshee		ii  bison
ii  archdetect-deb	ii  baobab		ii  blt
ii  aspell		ii  base-files		ii  blueberry
ii  aspell-en		ii  base-passwd		ii  bluetooth
ii  at-spi2-core	ii  bash		ii  bluez
ii  attr		ii  bash-completion	ii  bluez-cups
ii  avahi-autoipd	ii  bc			ii  bluez-obexd

.....

Az itt használt zászlók a következők:

  1. A --oszlop a kimenetben létrehozott oszlopok számát határozza meg.
  2. A -l az oldal hosszát adja meg (az alapértelmezett 66 sor).

10. tr Parancs

Ez az eszköz lefordítja vagy törli a karaktereket a szabványos bemenetről, és az eredményeket szabványos kimenetre írja.

A tr használatának szintaxisa a következő:

tr options set1 set2

Vessen egy pillantást az alábbi példákra, az első parancsban a set1( [:upper:] ) a bemeneti karakterek kis- és nagybetűjét jelenti (minden nagybetű).

Ekkor a set2([:lower:]) azt az esetet jelöli, amelyben az eredményül kapott karakterek lesznek. Ugyanez a helyzet a második példában, és a \n escape szekvencia egy új sorban történő nyomtatást jelenti:

tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
linux-console.net

tecmint@TecMint ~ $ echo "news.linux-console.net" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM

11. több Parancs

A more parancs egy hasznos fájlolvasó szűrő, amelyet alapvetően a tanúsítványok megtekintésére hoztak létre. A fájl tartalmat oldalszerű formátumban jeleníti meg, ahol a felhasználók az [Enter] megnyomásával további információkat tekinthetnek meg.

Használhatja nagy fájlok megtekintéséhez, például:

tecmint@TecMint ~ $ dmesg | more
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
--More--

12. kevesebb Parancs

A less a fenti more parancs ellentéte, de extra funkciókat kínál, és egy kicsit gyorsabb a nagy fájlokkal.

Használja ugyanúgy, mint a többit:

tecmint@TecMint ~ $ dmesg | less
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
:

Ismerje meg, miért gyorsabb a „kevesebb”, mint a „több” parancs a hatékony fájlnavigáció érdekében Linux alatt.

Egyelőre ennyi, tájékoztasson minket az itt nem említett hasznos parancssori eszközökről, amelyek szövegszűrőként működnek a Linuxban az alábbi megjegyzés részben.