12 noderīgas komandas teksta filtrēšanai efektīvām failu operācijām Linux


Šajā rakstā mēs pārskatīsim vairākus komandrindas rīkus, kas darbojas kā filtri Linux. Filtrs ir programma, kas nolasa standarta ievadi, veic ar to operāciju un uzraksta rezultātus standarta izvadā.

Šī iemesla dēļ to var izmantot, lai efektīvi apstrādātu informāciju, piemēram, pārstrukturējot produkciju, lai izveidotu noderīgus pārskatus, modificētu tekstu failos un daudzus citus sistēmas administrēšanas uzdevumus.

Ņemot to vērā, zemāk ir daži noderīgi Linux failu vai teksta filtri.

1. Awk komanda

Awk ir ievērojama modeļu skenēšanas un apstrādes valoda, to var izmantot, lai izveidotu noderīgus filtrus Linux. Jūs varat sākt to izmantot, izlasot mūsu Awk sērijas 1. un 13. daļu.

Papildus informācijai un lietošanas iespējām izlasiet arī awk man lapu:

$ man awk

2. Sed komanda

sed ir spēcīgs straumes redaktors teksta filtrēšanai un pārveidošanai. Mēs jau esam uzrakstījuši divus noderīgus rakstus par sed, kurus šeit varat apskatīt:

  1. Kā izmantot GNU ‘sed’ komandu, lai izveidotu, rediģētu un manipulētu ar failiem Linux
  2. 15 noderīgi komandu padomi un ieteikumi ikdienas Linux sistēmas administrēšanas uzdevumiem

Sed man lapā ir pievienotas vadības iespējas un instrukcijas:

$ man sed

3. Komandas Grep, Egrep, Fgrep, Rgrep

Šie filtrē izejas līnijas, kas atbilst noteiktajam paraugam. Viņi lasa rindas no faila vai standarta ievades un pēc noklusējuma visas standarta līnijas izdrukā atbilstošās rindas.

Piezīme. Galvenā programma izmanto īpašas grep opcijas, kā norādīts zemāk (un tās joprojām tiek izmantotas savietojamībai atpakaļ):

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

Tālāk ir norādītas dažas grep komandas:

[email  ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:

[email  ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:

Jūs varat uzzināt vairāk par to, kāda ir atšķirība starp Grep, Egrep un Fgrep Linux?

4. galva Komanda

head tiek izmantots, lai parādītu pirmās faila daļas, tas pēc noklusējuma izdod pirmās 10 rindas. Lai norādītu rādāmo rindu skaitu, varat izmantot karodziņu -n num:

[email  ~ $ 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)

[email  ~ $ 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

Uzziniet, kā efektīvi izmantot Linux, izmantojot komandu ar asti un kaķi.

5. astes komanda

aste izvada faila pēdējās daļas (pēc noklusējuma 10 rindas). Izmantojiet slēdzi -n num, lai norādītu parādāmo rindu skaitu.

Zemāk esošā komanda izdos norādītā faila pēdējās 5 rindas:

[email  ~ $ 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.

Turklāt tail ir īpaša opcija -f , lai reāllaikā skatītos faila izmaiņas (īpaši žurnālfailus).

Šī komanda ļaus uzraudzīt izmaiņas norādītajā failā:

[email  ~ $ 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.

Izlasiet astes cilvēka lapu, lai iegūtu pilnu lietošanas iespēju sarakstu un instrukcijas:

$ man tail

6. kārtot komandu

kārtot izmanto, lai kārtotu teksta faila rindas vai no standarta ievades.

Zemāk ir faila ar nosaukumu domains.list saturs:

[email  ~ $ 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

Lai kārtotu faila saturu, varat palaist vienkāršu komandu Kārtot:

[email  ~ $ 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

Kārtot komandu var izmantot dažādos veidos, izlasiet dažus noderīgus rakstus par komandu Kārtot šādi:

  1. 14 noderīgi Linux ‘sort’ komandu piemēri - 1. daļa
  2. 7 interesanti Linux komandu ‘kārtot’ piemēri - 2. daļa
  3. Kā atrast un kārtot failus, pamatojoties uz modifikācijas datumu un laiku
  4. Kā sakārtot komandas “ls” izvadi pēc pēdējās modificēšanas datuma un laika

7. uniq komanda

komandu uniq izmanto, lai ziņotu vai izlaistu atkārtotas rindas, tā filtrē līnijas no standarta ievades un rezultātu raksta standarta izvadē.

Pēc kārtošanas palaišanas ievades straumē varat noņemt atkārtotas rindas ar uniq, kā parādīts zemāk esošajā piemērā.

Lai norādītu līnijas atkārtošanās gadījumu skaitu, izmantojiet opciju -c un ignorējiet atšķirības gadījumā, salīdzinot, iekļaujot opciju -i :

[email  ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com

[email  ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.linux-console.net
2 linux-console.net
1 windowsmint.com 

Izlasiet uniq rokasgrāmatu, lai iegūtu papildinformāciju par lietošanu un karodziņus:

$ man uniq

8. fmt komanda

fmt vienkāršs optimālais teksta formatētājs, tas formatē punktus norādītajā failā un izdrukā rezultātus standarta izvadā.

Šis ir saturs, kas iegūts no faila domain-list.txt:

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

Lai formatētu iepriekš minēto saturu standarta sarakstā, palaidiet šādu komandu ar slēdzi -w , lai noteiktu maksimālo līnijas platumu:

[email  ~ $ cat domain-list.txt 
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

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

9. pr Komanda

pr komanda pārveido teksta failus vai standarta ievadi drukāšanai. Piemēram, Debian sistēmās visas instalētās paketes varat uzskaitīt šādi:

$ dpkg -l

Lai sakārtotu sarakstu lapās un slejās, kas ir gatavas drukāšanai, izdodiet šādu komandu.

[email  ~ $ 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

.....

Šeit tiek izmantoti šādi karogi:

  1. --column nosaka izvadē izveidoto kolonnu skaitu.
  2. -l norāda lapas garumu (noklusējums ir 66 rindas).

10. tr Komanda

Šis rīks tulko vai izdzēš rakstzīmes no standarta ievades un raksta rezultātus standarta izvadē.

Tr izmantošanas sintakse ir šāda:

$ tr options set1 set2

Apskatiet tālāk sniegtos piemērus, pirmajā komandā set1 ([: upper:]) apzīmē ievades rakstzīmju reģistru (visi lielie burti).

Tad set2 ([: Lower:]) apzīmē gadījumu, kurā būs iegūtās rakstzīmes. Tas ir tas pats, kas otrajā piemērā un bēgšanas secībā nozīmē izdruku uz jaunas rindas:

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

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

11. vairāk Komanda

vairāk komandu ir noderīgs failu pārskatīšanas filtrs, kas izveidots galvenokārt sertifikātu skatīšanai. Tas parāda faila saturu tādā lappuses formātā, kur lietotāji var nospiest [Enter], lai apskatītu vairāk informācijas.

Varat to izmantot, lai skatītu lielus failus, piemēram:

[email  ~ $ 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 ([email ) (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. mazāk komandu

mazāk ir pretstats iepriekš minētajai komandai vairāk, taču tas piedāvā papildu funkcijas, un tas ir nedaudz ātrāk, izmantojot lielus failus.

Izmantojiet to tāpat kā vairāk:

[email  ~ $ 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 ([email ) (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
:

Uzziniet, kāpēc komanda “mazāk” ir ātrāka nekā “vairāk” efektīvai failu navigācijai Linux.

Tagad tas ir viss, dariet mums zināmu visus noderīgos komandrindas rīkus, kas šeit nav minēti, kas darbojas kā teksta filtri Linux, izmantojot zemāk esošo komentāru sadaļu.