Tips en Trucs 2022

Meer hulpprogramma's

We kennen allemaal de GNU core hulpprogramma's die standaard geïnstalleerd zijn op alle Linux en Unix-achtige besturingssystemen. Dit zijn de basis bestands-, shell- en tekstmanipulatie programma's van het GNU besturingssysteem. De GNU core hulpprogramma's bevatten de opdrachten, zoals cat, ls, rm, mkdir, rmdir, touch, tail, wc en nog veel meer, voor het uitvoeren van de dagelijkse handelingen. Onder deze hulpprogramma's zijn er ook enkele andere nuttige Unix-hulpprogramma's die niet standaard zijn opgenomen in de Unix-achtige besturingssystemen. Maak kennis met moreutils, een groeiende verzameling van meer nuttige Unix programma's. De moreutils kunnen worden geïnstalleerd op GNU/Linux, en verschillende Unix smaken zoals FreeBSD, openBSD en Mac OS.

Moreutils biedt de volgende extra hulpprogramma's.

Moreutils installeren

Moreutils is voor veel Linux-distributies als standaard pakket beschikbaar, dus je kunt het installeren met de pakketbeheerder van de distributie.

Op openSUSE Leap 15.4 voer je de volgende opdracht uit om moreutils te installeren.

dany@pindabook:~> sudo zypper install moreutils
[sudo] wachtwoord voor root:
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

De volgende 2 aanbevolen pakketten zijn automatisch geselecteerd:
  perl-IO-Tty perl-Readonly

De volgende 5 NIEUWE pakketten zullen worden geïnstalleerd:
  moreutils perl-IO-Tty perl-IPC-Run perl-Readonly perl-Time-Duration

5 nieuwe te installeren pakketten.
Totale downloadgrootte: 310,3 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 726,0 KiB worden gebruikt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
pakket perl-IO-Tty-1.12-1.28.x86_64 wordt opgehaald                                            (1/5),  44,2 KiB ( 81,1 KiB uitgepakt)
Ophalen: perl-IO-Tty-1.12-1.28.x86_64.rpm ...................................................................................[gereed]
pakket perl-Readonly-2.05-1.22.noarch wordt opgehaald                                          (2/5),  36,5 KiB ( 74,3 KiB uitgepakt)
Ophalen: perl-Readonly-2.05-1.22.noarch.rpm .................................................................................[gereed]
pakket perl-Time-Duration-1.210000-bp154.1.34.noarch wordt opgehaald                           (3/5),  26,5 KiB ( 38,9 KiB uitgepakt)
Ophalen: perl-Time-Duration-1.210000-bp154.1.34.noarch.rpm ......................................................[gereed (1,1 KiB/s)]
pakket perl-IPC-Run-20200505.0-bp154.1.55.noarch wordt opgehaald                               (4/5), 129,5 KiB (364,8 KiB uitgepakt)
Ophalen: perl-IPC-Run-20200505.0-bp154.1.55.noarch.rpm ......................................................................[gereed]
pakket moreutils-0.66-bp154.1.20.x86_64 wordt opgehaald                                        (5/5),  73,6 KiB (166,8 KiB uitgepakt)
Ophalen: moreutils-0.66-bp154.1.20.x86_64.rpm ...............................................................................[gereed]

Controleren op conflicten tussen bestanden: .................................................................................[gereed]
(1/5) Installeren van: perl-IO-Tty-1.12-1.28.x86_64 .........................................................................[gereed]
(2/5) Installeren van: perl-Readonly-2.05-1.22.noarch .......................................................................[gereed]
(3/5) Installeren van: perl-Time-Duration-1.210000-bp154.1.34.noarch ........................................................[gereed]
(4/5) Installeren van: perl-IPC-Run-20200505.0-bp154.1.55.noarch ............................................................[gereed]
(5/5) Installeren van: moreutils-0.66-bp154.1.20.x86_64 .....................................................................[gereed]

Een collectie nuttige Unix hulpprogramma's

Laten we eens kijken naar de gebruiksdetails van enkele moreutils opdrachten.

Combine

Zoals de naam al aangeeft, combineert combine de reeksen regels uit twee bestanden met behulp van booleaanse bewerkingen zoals and, not, or, xor.

Met een voorbeeld wordt duidelijk wat dit hulpprogramma precies doet. We maken twee bestanden, namelijk bestand1 en bestand2 met de volgende inhoud.

dany@pindabook:~> echo -e "Linux\nBSD\nRaspberry\nopenSUSE\ndebian" > bestand1
dany@pindabook:~> echo -e "Linux\nRaspberry\ndebian" > bestand2
dany@pindabook:~> cat bestand1
Linux
BSD
Raspberry
openSUSE
debian
dany@pindabook:~> cat bestand2
Linux
Raspberry
debian

We combineren ze met behulp van de booleanse and operatie.

dany@pindabook:~> combine bestand1 and bestand2
Linux
Raspberry
debian

Zoals je in bovenstaand voorbeeld ziet, geeft de Booleaanse operator and regels weer die in bestand1 staan als ze ook in bestand2 staan. Om dit duidelijker te stellen, het geeft de gemeenschappelijke regels weer (bijv. Linux, Raspberry, debian) die in beide bestanden aanwezig zijn.

Laten we nu de not operator gebruiken en het resultaat bekijken.

dany@pindabook:~> combine bestand1 not bestand2
BSD
openSUSE

Zoals je ziet in de bovenstaande uitvoer, toont de not operator de regels die alleen in bestand1 staan, maar niet in bestand2.

Ifdata

Het hulpprogramma ifdata kan worden gebruikt om te controleren of een netwerkinterface bestaat, om informatie over de netwerkinterface te verkrijgen, zoals zijn IP-adres. In tegenstelling tot de standaard opdrachten zoals ifconfig of ip, heeft ifdata eenvoudig te ontleden uitvoer die is ontworpen om gemakkelijk door een shellscript te worden gebruikt.

Om IP adres details van een netwerk interface, zoals eth0, weer te geven, voer je de volgende opdracht uit:

dany@pindabook:~> ifdata -p eth0
192.168.1.10 255.255.255.0 192.168.1.255 1500

Om enkel het netmasker weer te geven:

dany@pindabook:~> ifdata -pn eth0
255.255.255.0

Om het hardware adres van een NIC te controleren:

dany@pindabook:~> ifdata -ph eth0
64:D1:A3:29:46:81

Om te controleren of een NIC bestaat of niet, gebruik je de -pe optie.

dany@pindabook:~> ifdata -pe eth0
yes

Pee

Pee is enigszins vergelijkbaar met de tee opdracht.

Laat ons een voorbeeld bekijken van de tee opdracht.

dany@pindabook:~> echo "Welkom bij PindaNet" | tee bestand1 bestand2
Welkom bij PindaNet

Bovenstaande opdracht maakt twee bestanden aan, bestand1 en bestand2. Voegt vervolgens de regel "Welkom bij PindaNet" toe aan beide bestanden. En geeft tenslotte het bericht "Welkom bij PindaNet" weer in de terminal.

De pee opdracht voert een vergelijkbare functie uit, maar verschilt iets van de tee opdracht:

dany@pindabook:~> echo "Welkom bij PindaNet" | pee cat cat
Welkom bij PindaNet
Welkom bij PindaNet

Zoals je in de bovenstaande uitvoer ziet, ontvangen de twee instanties van de opdracht cat de uitvoer van de opdracht echo en geven ze tweemaal weer in de terminal.

Sponge

Sponge leest standaard input en schrijft het naar het opgegeven bestand. In tegenstelling tot een shell redirect, absorbeert sponge al zijn invoer voordat het uitvoerbestand wordt geschreven.

We vullen opnieuw bestand1 met enkele tekstregels en tonen die op het scherm:

dany@pindabook:~> echo -e "Linux\nBSD\nRaspberry\nopenSUSE\ndebian" > bestand1
dany@pindabook:~> cat bestand1
Linux
BSD
Raspberry
openSUSE
debian

Zoals je ziet, bevat het bestand enkele willekeurige regels, met name niet in alfabetische volgorde. Je wilt de inhoud in alfabetische volgorde sorteren. Wat zou je doen?

dany@pindabook:~> sort bestand1 > gesorteerd

Correct, is het niet? Natuurlijk! Zoals je ziet in de bovenstaande opdracht, heb ik de inhoud van bestand1 gesorteerd op alfabetische volgorde en opgeslagen in een nieuw bestand genaamd "gesorteerd". Maar je kunt hetzelfde doen zonder een nieuw bestand te maken (d.w.z. gesorteerd) met de opdracht sponge:

dany@pindabook:~> sort bestand1 | sponge bestand1

Controleer nu of de inhoud in alfabetische volgorde is gesorteerd.

dany@pindabook:~> cat bestand1
BSD
debian
Linux
openSUSE
Raspberry

Zie je? We hoeven geen nieuw bestand te maken. Het is erg handig in scripting. En het mooie is dat sponge de rechten van het uitvoerbestand bewaart als het al bestaat.

Ts

Het hulpprogramma ts drukt de tijdstempel af aan het begin van elke regel in de uitvoer van elke opdracht.

Kijk eens naar de uitvoer van de volgende opdracht:

dany@pindabook:~> ping -c 2 localhost
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.067 ms

--- localhost ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1007ms
rtt min/avg/max/mdev = 0.053/0.060/0.067/0.007 ms

Voer nu dezelfde opdracht uit met ts:

dany@pindabook:~> ping -c 2 localhost | ts
jul 19 17:56:20 PING localhost(localhost (::1)) 56 data bytes
jul 19 17:56:20 64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.063 ms
jul 19 17:56:21 64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.067 ms
jul 19 17:56:21 
jul 19 17:56:21 --- localhost ping statistics ---
jul 19 17:56:21 2 packets transmitted, 2 received, 0% packet loss, time 1032ms
jul 19 17:56:21 rtt min/avg/max/mdev = 0.063/0.065/0.067/0.002 ms

Zoals je in de bovenstaande uitvoer ziet, voegt ts een tijdstempel toe aan het begin van elke regel.

Vidir

Met het hulpprogramma vidir kun je de inhoud van een opgegeven map bewerken in een vi editor (of, wat je ook in $EDITOR hebt). Als je geen map opgeeft, zal het je huidige map bewerken.

De volgende opdracht bewerkt de inhoud van de map Muziek.

dany@pindabook:~> EDITOR=nano vidir Muziek/
Moreutils vidir

De bovenstaande opdracht zal de opgegeven map openen in de teksteditor nano. Elk item in de te bewerken map zal een nummer bevatten. Je kunt nu de bestanden bewerken zoals je dat doet in de nano teksteditor. Bijvoorbeeld, verwijder regels om bestanden uit de directory te verwijderen, of bewerk bestandsnamen om bestanden te hernoemen.

Je kunt ook de submappen bewerken:

dany@pindabook:~> find | EDITOR=nano vidir -

Let op de "-" aan het eind van de opdracht. Als "-" is opgegeven als de te bewerken map, leest het een lijst met bestandsnamen van stdin en geeft die weer om te bewerken.

Als je alleen de bestanden in de huidige map wilt bewerken, gebruik je:

dany@pindabook:~> find -type f | EDITOR=nano vidir -

Wil je alle bestanden waarvan de naam begint met "bestand" bewerken:

dany@pindabook:~> EDITOR=nano vidir bestand*

Vipe

Met vipe kun je de standaardeditor uitvoeren in het midden van een pipe en de gegevens bewerken die tussen programma's worden uitgewisseld.

de volgende opdracht opent de nano teksteditor en staat je toe om de invoer van de echo opdracht te bewerken (d.w.z. Welkom bij PindaNet) en toont het eindresultaat.

dany@pindabook:~> echo "Welkom bij PindaNet" | EDITOR=nano vipe
Welkom iedereen

Zoals je in de bovenstaande uitvoer ziet, heb ik de invoer "Welkom bij PindaNet" doorgegeven aan de nano teksteditor en ze bewerkt tot "Welkom iedereen" en de uiteindelijke uitvoer getoond.

Tot slot

En, dat is alles voor nu. Ik heb maar een paar hulpprogramma's behandeld. Het pakket moreutils heeft meer nuttige hulpprogramma's (zie inleiding). Je kunt de man pagina's lezen voor meer details over de moreutils opdrachten. Bijvoorbeeld, om meer te weten te komen over de opdracht vidir:

dany@pindabook:~> man vidir

Moreutils volledig van de computer verwijderen

De voorbeeldbestanden verwijderen we met:

dany@pindabook:~> rm bestand1 bestand2 gesorteerd

Moreutils zelf verwijderen we volledig met de opdracht:

dany@pindabook:~> sudo zypper remove -u moreutils
[sudo] wachtwoord voor root: 
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

De volgende 5 pakketten zullen worden VERWIJDERD:
  moreutils perl-IO-Tty perl-IPC-Run perl-Readonly perl-Time-Duration

5 te verwijderen pakketten.
Na de bewerking zal 726,0 KiB worden vrijgemaakt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
(1/5) Verwijderen van moreutils-0.66-bp154.1.20.x86_64 ......................................................................[gereed]
(2/5) Verwijderen van perl-Readonly-2.05-1.22.noarch ........................................................................[gereed]
(3/5) Verwijderen van perl-Time-Duration-1.210000-bp154.1.34.noarch .........................................................[gereed]
(4/5) Verwijderen van perl-IPC-Run-20200505.0-bp154.1.55.noarch .............................................................[gereed]
(5/5) Verwijderen van perl-IO-Tty-1.12-1.28.x86_64 ..........................................................................[gereed]