12 hyödyllistä komentoa tekstin suodattamiseksi tehokkaille tiedostotoiminnoille Linuxissa
Tässä artikkelissa tarkastelemme useita komentorivityökaluja, jotka toimivat suodattimina Linuxissa. Suodatin on ohjelma, joka lukee vakiotulon, suorittaa sen toiminnon ja kirjoittaa tulokset vakiolähtöön.
Tästä syystä sitä voidaan käyttää tietojen käsittelyyn tehokkailla tavoilla, kuten tuotoksen uudelleenjärjestely hyödyllisten raporttien luomiseksi, tiedostojen tekstin muokkaaminen ja monia muita järjestelmänhallintatehtäviä.
Tästä huolimatta alla on joitain hyödyllisiä tiedosto- tai tekstisuodattimia Linuxissa.
1. Awk-komento
Awk on merkittävä skannaus- ja käsittelykieli, jota voidaan käyttää hyödyllisten suodattimien rakentamiseen Linuxissa. Voit aloittaa sen käytön lukemalla Awk-sarjan osa 1 - osa 13.
Lisäksi lue myös awk man -sivulta lisätietoja ja käyttömahdollisuuksia:
$ man awk
2. Sed-komento
sed on tehokas virtaeditori tekstin suodattamiseen ja muuntamiseen. Olemme jo kirjoittaneet kaksi hyödyllistä artikkelia sedistä, jonka voit käydä läpi täällä:
- Kuinka GNU ‘sed’ -komentoa käytetään tiedostojen luomiseen, muokkaamiseen ja käsittelemiseen Linuxissa
- 15 hyödyllistä "sed" -komentovinkkiä päivittäisiin Linux-järjestelmänhallintatehtäviin
Sed-man -sivulla on lisätty ohjausasetuksia ja ohjeita:
$ man sed
3. Grep-, Egrep-, Fgrep- ja Rgrep-komennot
Nämä suodattavat lähtöviivat, jotka vastaavat tiettyä mallia. He lukevat riviä tiedostosta tai vakiotulosta ja tulostavat kaikki vastaavat rivit oletusarvoisesti vakiolähtöön.
Huomaa: Pääohjelma käyttää erityisiä grep-asetuksia kuten alla (ja niitä käytetään edelleen taaksepäin yhteensopivuuteen):
$ egrep = grep -E $ fgrep = grep -F $ rgrep = grep -r
Alla on joitain peruskäskyjä:
[email ~ $ grep "aaronkilik" /etc/passwd aaronkilik:x:1001:1001::/home/aaronkilik: [email ~ $ cat /etc/passwd | grep "aronkilik" aaronkilik:x:1001:1001::/home/aaronkilik:
Voit lukea lisää Grepin, Egrepin ja Fgrepin eroista Linuxissa ?.
4. pääkomento
head-tiedostoa käytetään tiedoston ensimmäisten osien näyttämiseen, se tuottaa oletusarvoisesti ensimmäiset 10 riviä. Voit määrittää -n
num-lipun avulla määritettävien rivien määrän:
[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
Opi käyttämään pääkomentoa hännän ja kissan komentojen kanssa tehokkaaseen käyttöön Linuxissa.
5. hännän komento
tail tuottaa tiedoston viimeiset osat (oletuksena 10 riviä). Määritä näytettävien rivien määrä -n
numer -kytkimellä.
Alla oleva komento antaa määritetyn tiedoston viimeiset 5 riviä:
[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.
Lisäksi taililla on erityinen vaihtoehto -f
tiedostojen (erityisesti lokitiedostojen) reaaliaikaisten muutosten seuraamiseen.
Seuraava komento antaa sinun seurata määritetyn tiedoston muutoksia:
[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.
Lue tail man -sivulta täydellinen luettelo käyttövaihtoehdoista ja ohjeista:
$ man tail
6. lajittele komento
lajittelua käytetään tekstitiedoston rivien lajitteluun tai tavallisesta syötteestä.
Alla on domains.list-nimisen tiedoston sisältö:
[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
Voit lajitella tiedostosisällön yksinkertaisen lajittelukomennon avulla:
[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
Voit käyttää lajittelukomentoa monin tavoin, käydä läpi joitain hyödyllisiä artikkeleita lajittelukomennosta seuraavasti:
- 14 hyödyllistä esimerkkiä Linux-lajittelukomennosta - osa 1
- 7 mielenkiintoista Linux-lajittelukomentoesimerkkiä - osa 2
- Kuinka etsiä ja lajitella tiedostoja muokkauksen päivämäärän ja kellonajan perusteella
- Kuinka ls-komennon lajittelu viimeksi muokatun päivämäärän ja kellonajan mukaan
7. uniq-komento
uniq-komentoa käytetään toistuvien rivien ilmoittamiseen tai jättämiseen pois, se suodattaa rivit vakiotulosta ja kirjoittaa tuloksen vakiotulosteeseen.
Kun olet suorittanut lajittelun syötevirrassa, voit poistaa toistuvat rivit uniq: lla, kuten alla olevassa esimerkissä.
Jos haluat ilmoittaa rivin esiintymien määrän, käytä -c
-vaihtoehtoa ja ohita erot siinä tapauksessa, että vertailet sisällyttämällä -i
-vaihtoehdon:
[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
Lue uniq-man -sivulta lisätietoja käyttötiedoista ja lipuista:
$ man uniq
8. fmt-komento
fmt yksinkertainen optimaalinen tekstin muotoilija, se muotoilee kappaleet uudelleen määritetyssä tiedostossa ja tulostaa tulokset vakiotulosteeseen.
Seuraava on sisältö, joka on purettu tiedostosta domain-list.txt:
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com
Jos haluat alustaa yllä olevan sisällön uudelleen vakioluetteloon, suorita seuraava komento -w
-kytkimellä, jolla määritetään rivin enimmäisleveys:
[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 Komento
pr-komento muuntaa tekstitiedostot tai vakiotulostuksen tulostusta varten. Esimerkiksi Debian-järjestelmissä voit luetella kaikki asennetut paketit seuraavasti:
$ dpkg -l
Järjestä luettelo sivuille ja sarakkeisiin, jotka ovat valmiita tulostamaan, antamalla seuraava komento.
[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 .....
Tässä käytetyt liput ovat:
-
--column
määrittää tulosteessa luotujen sarakkeiden määrän. -
-l
määrittää sivun pituuden (oletus on 66 riviä).
10. tr komento
Tämä työkalu kääntää tai poistaa merkkejä vakiosyötöstä ja kirjoittaa tulokset vakiotulosteeseen.
Tr: n käyttämisen syntaksi on seuraava:
$ tr options set1 set2
Katso alla olevien esimerkkien ensimmäisessä komennossa set1 ([: upper:])
edustaa syötemerkkien kirjainta (kaikki isot kirjaimet).
Tällöin set2 ([: lower:])
edustaa tapausta, jossa tuloksena olevat merkit ovat. Se on sama asia toisessa esimerkissä ja pakosarja \n
tarkoittaa uuden rivin tulosteita:
[email ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:] linux-console.net [email ~ $ echo "news.linux-console.net" | tr [:lower:] [:upper:] NEWS.TECMINT.COM
11. lisää komento
lisää -komento on hyödyllinen tiedostojen tarkastussuodatin, joka on luotu periaatteessa varmenteiden katseluun. Se näyttää tiedostosisällön sivumaisessa muodossa, jossa käyttäjät voivat tarkastella lisätietoja painamalla [Enter].
Voit käyttää sitä suurten tiedostojen tarkasteluun, kuten:
[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. vähemmän komentoa
vähemmän on päinvastainen kuin yllä oleva komento, mutta se tarjoaa lisäominaisuuksia ja on hieman nopeampi suurten tiedostojen kanssa.
Käytä sitä samalla tavalla kuin enemmän:
[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 :
Opi miksi "vähemmän" on nopeampi kuin "enemmän" -komento tehokkaaseen tiedostojen navigointiin Linuxissa.
Tässä kaikki, kerro meille kaikista hyödyllisistä komentorivityökaluista, joita ei mainita tässä ja jotka toimivat tekstisuodattimina Linuxissa alla olevan kommenttiosan kautta.