12 naudingų komandų, skirtų filtruoti tekstą efektyvioms failų operacijoms sistemoje Linux


Šiame straipsnyje apžvelgsime keletą komandinės eilutės įrankių, kurie veikia kaip filtrai sistemoje Linux. Filtras yra programa, kuri nuskaito standartinę įvestį, atlieka operaciją ir įrašo rezultatus į standartinę išvestį.

Dėl šios priežasties jis gali būti naudojamas informacijai apdoroti galingais būdais, pavyzdžiui, pertvarkyti išvestį, kad būtų generuojamos naudingos ataskaitos, keisti tekstą failuose ir atlikti daugybę kitų sistemos administravimo užduočių.

Tai pasakius, žemiau yra keletas naudingų failų ar teksto filtrų sistemoje „Linux“.

1. Awk komanda

Awk yra puiki šablonų nuskaitymo ir apdorojimo kalba, ją galima naudoti kuriant naudingus filtrus sistemoje „Linux“. Galite pradėti jį naudoti perskaitę mūsų Awk serijos 1–13 dalis.

Be to, daugiau informacijos ir naudojimo parinkčių rasite awk vadovo puslapyje:

man awk

2. Sed komanda

sed yra galinga srauto redagavimo priemonė, skirta tekstui filtruoti ir transformuoti. Jau parašėme du naudingus straipsnius apie sed, kuriuos galite peržiūrėti čia:

  1. Kaip naudoti GNU „sed“ komandą failams kurti, redaguoti ir manipuliuoti „Linux“.
  2. 15 naudingų „sed“ komandų patarimų ir gudrybių kasdienėms „Linux“ sistemos administravimo užduotims atlikti

Sed man puslapyje pridėtos valdymo parinktys ir instrukcijos:

man sed

3. Grep, Egrep, Fgrep, Rgrep komandos

Šie filtrai išvesties linijas, atitinkančias nurodytą šabloną. Jie nuskaito eilutes iš failo arba standartinės įvesties ir pagal numatytuosius nustatymus spausdina visas atitinkančias eilutes į standartinę išvestį.

Pastaba: pagrindinė programa yra grep, variantai yra tokie patys, kaip naudojant konkrečias grep parinktis, kaip nurodyta toliau (ir jos vis dar naudojamos atgaliniam suderinamumui):

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

Žemiau yra keletas pagrindinių grep komandų:

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:

Galite perskaityti daugiau apie tai, kuo skiriasi Grep, Egrep ir Fgrep sistemoje Linux?.

4. galvos Komanda

head naudojama pirmosioms failo dalims rodyti, pagal numatytuosius nustatymus ji išveda pirmąsias 10 eilučių. Norėdami nurodyti rodomų eilučių skaičių, galite naudoti -n num vėliavėlę:

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

Sužinokite, kaip naudoti „head“ komandą su uodegos ir katės komandomis, kad galėtumėte efektyviai naudoti „Linux“.

5. uodega Komanda

uodega išveda paskutines failo dalis (pagal numatytuosius nustatymus 10 eilučių). Norėdami nurodyti rodomų eilučių skaičių, naudokite skaičių jungiklį -n.

Toliau pateikta komanda išves paskutines 5 nurodyto failo eilutes:

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.

Be to, uodega turi specialią parinktį -f, skirtą žiūrėti failo pakeitimus realiuoju laiku (ypač žurnalo failus).

Ši komanda leis stebėti nurodyto failo pakeitimus:

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.

Perskaitykite uodegos puslapį, kuriame rasite visą naudojimo parinkčių sąrašą ir instrukcijas:

man tail

6. Rūšiuoti Komanda

Rūšiuoti naudojamas rūšiuoti teksto failo eilutes arba iš standartinės įvesties.

Toliau pateikiamas failo, pavadinto domains.list, turinys:

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

Norėdami surūšiuoti failo turinį, galite paleisti paprastą rūšiavimo komandą taip:

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

Galite naudoti komandą rūšiuoti įvairiais būdais, peržiūrėkite keletą naudingų straipsnių apie rūšiavimo komandą taip:

  1. 14 naudingų „Linux“ komandos „rūšiavimo“ pavyzdžių – 1 dalis
  2. 7 įdomūs „Linux“ „rūšiavimo“ komandų pavyzdžiai – 2 dalis
  3. Kaip rasti ir rūšiuoti failus pagal pakeitimo datą ir laiką
  4. Kaip rūšiuoti „ls“ komandos išvestį pagal paskutinio modifikavimo datą ir laiką

7. unikali komanda

Komanda uniq naudojama norint pranešti arba praleisti pasikartojančias eilutes, ji filtruoja eilutes iš standartinės įvesties ir įrašo rezultatą į standartinę išvestį.

Paleidę rūšiavimą įvesties sraute, galite pašalinti pasikartojančias eilutes naudodami uniq, kaip parodyta toliau pateiktame pavyzdyje.

Norėdami nurodyti eilutės pasikartojimų skaičių, naudokite parinktį -c ir palygindami nepaisykite skirtumų, įtraukdami parinktį -i:

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 

Perskaitykite unikalus vadovo puslapį, kad gautumėte daugiau informacijos apie naudojimą ir žymes:

man uniq

8. fmt komanda

fmt paprastas optimalus teksto formatavimo įrankis, kuris iš naujo suformatuoja pastraipas nurodytame faile ir spausdina rezultatus į standartinę išvestį.

Toliau pateikiamas turinys, ištrauktas iš failo domain-list.txt:

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

Norėdami performatuoti aukščiau pateiktą turinį į standartinį sąrašą, paleiskite šią komandą su jungikliu -w, kuris naudojamas maksimaliam eilutės pločiui apibrėžti:

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 Komanda

Komanda pr konvertuoja tekstinius failus arba standartinę įvestį spausdinimui. Pavyzdžiui, Debian sistemose visus įdiegtus paketus galite išvardyti taip:

dpkg -l

Norėdami sutvarkyti sąrašą puslapiuose ir stulpeliuose, paruoštuose spausdinti, išduokite šią komandą.

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

.....

Čia naudojamos vėliavos:

  1. --column apibrėžia išvestyje sukurtų stulpelių skaičių.
  2. -l nurodo puslapio ilgį (numatytasis yra 66 eilutės).

10. tr Komanda

Šis įrankis išverčia arba ištrina simbolius iš standartinės įvesties ir įrašo rezultatus į standartinę išvestį.

tr naudojimo sintaksė yra tokia:

tr options set1 set2

Pažvelkite į toliau pateiktus pavyzdžius. Pirmoje komandoje set1( [:upper:] ) reiškia įvesties simbolių didžiąsias ir mažąsias raides.

Tada set2([:lower:]) reiškia atvejį, kuriuo bus gaunami simboliai. Tai yra tas pats antrame pavyzdyje, o pabėgimo seka \n reiškia spausdinimo išvestį naujoje eilutėje:

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. daugiau Komanda

Komanda daugiau yra naudingas failų peržiūros filtras, sukurtas iš esmės sertifikatų peržiūrai. Rodomas failo turinys puslapio formatu, kuriame naudotojai gali paspausti [Enter], kad peržiūrėtų daugiau informacijos.

Galite naudoti jį norėdami peržiūrėti didelius failus, pavyzdžiui:

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. mažiau Komanda

mažiau yra priešinga aukščiau pateiktai komandai daugiau, tačiau ji siūlo papildomų funkcijų ir veikia šiek tiek greičiau naudojant didelius failus.

Naudokite jį taip pat, kaip ir daugiau:

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
:

Sužinokite, kodėl „mažiau“ yra greičiau nei „daugiau“, kad būtų galima efektyviai naršyti failus sistemoje „Linux“.

Kol kas tai viskas, praneškite mums apie visus čia nepaminėtus naudingus komandinės eilutės įrankius, kurie veikia kaip teksto filtrai sistemoje „Linux“, naudodami toliau pateiktą komentarų skyrių.