Een Linux-terminal vol tekst op een laptop.

Als je de Bash-shell onder Linux, macOS of een ander UNIX-achtig systeem wilt beheersen, zijn speciale tekens (zoals ~, *, | en>) van cruciaal belang. We helpen je deze cryptische Linux-opdrachtreeksen te ontrafelen en een held van hiërogliefen te worden.

Wat zijn speciale karakters?

Er zijn een aantal karakters die de Bash-shell op twee verschillende manieren behandelt. Wanneer u ze in de shell typt, fungeren ze als instructies of opdrachten en vertellen ze de shell om een ​​bepaalde functie uit te voeren. Beschouw ze als opdrachten met één teken.

Soms wil je gewoon een personage afdrukken en heb je het niet nodig om als een magisch symbool te fungeren. Er is een manier waarop je een personage kunt gebruiken om zichzelf te vertegenwoordigen in plaats van de speciale functie ervan.

We laten u zien welke karakters "speciale" of "meta-" karakters zijn, en hoe u ze functioneel en letterlijk kunt gebruiken.

~ Home Directory

De tilde (~) is een afkorting voor je homedirectory. Het betekent dat u niet het volledige pad naar uw homedirectory hoeft in te typen in opdrachten. Waar u zich ook in het bestandssysteem bevindt, u kunt deze opdracht gebruiken om naar uw homedirectory te gaan:

cd ~
De opdracht

Je kunt deze opdracht ook gebruiken met relatieve paden. Als u zich bijvoorbeeld ergens in het bestandssysteem bevindt dat niet onder uw thuismap staat en u wilt overschakelen naar de archiefdirectory in uw werkdirectory, gebruik dan de tilde om het te doen:

cd ~ / werk / archief
De opdracht

. Huidige directory

Een punt (.) Vertegenwoordigt de huidige directory. Je ziet het in directoryvermeldingen als je de -a (all) optie gebruikt met ls.

ls -a
Het

U kunt ook de punt in opdrachten gebruiken om het pad naar uw huidige map weer te geven. Als u bijvoorbeeld een script vanuit de huidige directory wilt uitvoeren, zou u het als volgt noemen:

./script.sh

Dit vertelt Bash om in de huidige map te zoeken naar het script.sh-bestand. Op deze manier zoekt het niet in de mappen op uw pad naar overeenkomend uitvoerbaar bestand of script.

De opdracht

.. Bovenliggende map

De dubbele punt of "dubbele punt" (..) vertegenwoordigt de bovenliggende map van uw huidige. U kunt dit gebruiken om een ​​niveau omhoog te gaan in de mappenboom.

cd ..
De opdracht

U kunt deze opdracht ook gebruiken met relatieve paden, bijvoorbeeld als u een niveau omhoog wilt gaan in de mappenboom en vervolgens een andere map op dat niveau wilt invoeren.

U kunt deze techniek ook gebruiken om snel naar een directory te gaan op hetzelfde niveau in de directorystructuur als uw huidige. Je springt een niveau omhoog en vervolgens een niveau terug in een andere map.

cd ../gc_help
De opdracht

/ Path Directory Separator

Je kunt een forward-slash (/) - vaak gewoon een slash genoemd - gebruiken om de mappen in een padnaam te scheiden.

ls ~ / werk / archief
De opdracht

Eén schuine streep naar voren vertegenwoordigt het kortst mogelijke mappad. Omdat alles in de Linux-directorystructuur begint bij de hoofdmap, kunt u deze opdracht gebruiken om snel naar de hoofdmap te gaan:

cd /
De opdracht

# Commentaar of snaren

Meestal gebruik je het hekje of het hekje (#) om de shell te vertellen wat volgt, het is een opmerking en het mag er niet op reageren. Je kunt het gebruiken in shell-scripts en - minder nuttig - op de opdrachtregel.

# Dit wordt genegeerd door de Bash-shell
Het

Het wordt echter niet echt genegeerd, omdat het is toegevoegd aan je opdrachtgeschiedenis.

Je kunt de hash ook gebruiken om een ​​stringvariabele in te korten en wat tekst vanaf het begin te verwijderen. Deze opdracht maakt een stringvariabele genaamd this_string.

In dit voorbeeld wijzen we de tekst "Dave Geek!" naar de variabele.

this_string = "Dave Geek!"

Deze opdracht gebruikt echo om de woorden "How-To" af te drukken naar het terminalvenster. Het haalt de waarde op die is opgeslagen in de stringvariabele via een parameteruitbreiding. Omdat we de hash en de tekst 'Dave' toevoegen, snijdt het dat deel van de tekenreeks af voordat het wordt doorgegeven aan de echo.

echo How-To $ {this_string # Dave}
Een

Dit verandert de waarde die is opgeslagen in de stringvariabele niet; het heeft alleen invloed op wat naar de echo wordt gestuurd. We kunnen echo gebruiken om de waarde van de stringvariabele nogmaals af te drukken en dit te controleren:

echo $ this_string
De opdracht

? Jokerteken met één teken

Bash shell ondersteunt drie jokertekens, waaronder het vraagteken (?). U gebruikt jokertekens om tekens in bestandsnaamsjablonen te vervangen. Een bestandsnaam die een jokerteken bevat, vormt een sjabloon dat overeenkomt met een reeks bestandsnamen, in plaats van slechts één.

Het jokerteken met vraagteken vertegenwoordigt precies één teken. Overweeg de volgende bestandsnaamsjabloon:

Is het een badge? .txt

Dit vertaalt zich als "lijst elk bestand met een naam die begint met 'badge' en wordt gevolgd door een willekeurig teken vóór de bestandsnaamextensie."

Het komt overeen met de volgende bestanden. Merk op dat sommige nummers hebben en sommige letters na het "badge" -gedeelte van de bestandsnaam. Het vraagteken-jokerteken komt overeen met zowel letters als cijfers.

De opdracht

Die bestandsnaamsjabloon komt echter niet overeen met "badge.txt", omdat de bestandsnaam geen enkel teken heeft tussen "badge" en de bestandsextensie. Het vraagteken-jokerteken moet overeenkomen met een overeenkomstig teken in de bestandsnaam.

U kunt ook het vraagteken gebruiken om alle bestanden met een bepaald aantal tekens in de bestandsnamen te vinden. Dit toont alle tekstbestanden die precies vijf tekens bevatten in de bestandsnaam:

ls ?????. txt
Een

* Tekenreeks Wildcard

U kunt het jokerteken met een asterisk (*) gebruiken voor elke reeks tekens, inclusief geen tekens. Overweeg de volgende bestandsnaamsjabloon:

ls badge *

Dit komt overeen met al het volgende:

Een

Het komt overeen met "badge.txt" omdat het jokerteken een willekeurige reeks tekens of geen tekens vertegenwoordigt.

Deze opdracht komt overeen met alle bestanden die "source" worden genoemd, ongeacht de bestandsextensie.

ls bron. *
Een

[] Wildcard met tekenset

Zoals hierboven behandeld, gebruikt u het vraagteken om een ​​willekeurig teken aan te geven en het sterretje om een ​​reeks tekens aan te geven (inclusief geen tekens).

U kunt een jokerteken vormen met de vierkante haken ([]) en de tekens die ze bevatten. Het relevante teken in de bestandsnaam moet dan overeenkomen met ten minste één van de tekens in de jokertekenset.

In dit voorbeeld vertaalt de opdracht zich in: "elk bestand met een" .png "-extensie, een bestandsnaam die begint met" pipes_0 "en waarin het volgende teken 2, 4 of 6 is."

ls badge_0 [246] .txt
Een

U kunt meer dan één set haakjes per bestandsnaamsjabloon gebruiken:

ls badge_ [01] [789] .txt
Een

U kunt ook bereiken opnemen in de tekenset. De volgende opdracht selecteert bestanden met de nummers 21 tot 25 en 31 tot 35 in de bestandsnaam.

ls badge_ [23] [1-5] .txt
Een

; Shell Command Separator

U kunt op de opdrachtregel zoveel opdrachten typen als u wilt, zolang u ze maar van elkaar scheidt met een puntkomma (;). We doen dit in het volgende voorbeeld:

ls> count.txt; wc -l count.txt; rm count.txt
Een count.txt; wc -l count.txt; rm count.txt" -opdracht in een terminalvenster" src="https://imgstore.nyc3.cdn.digitaloceanspaces.com/tvaschool-org/1587087897826.png" />

Merk op dat de tweede opdracht wordt uitgevoerd, zelfs als de eerste mislukt, de derde zelfs als de tweede mislukt, enzovoort.

Als je de volgorde van uitvoering wilt stoppen als een opdracht mislukt, gebruik dan een dubbele ampersand (&&) in plaats van een puntkomma:

cd ./doesntexist && cp ~ / Documents / reports / *.
Een

& Achtergrondproces

Nadat u een opdracht in een terminalvenster hebt getypt en deze is voltooid, keert u terug naar de opdrachtprompt. Normaal duurt dit maar een paar tellen. Maar als u een andere applicatie start, zoals gedit, kunt u uw terminalvenster niet gebruiken totdat u de applicatie sluit.

U kunt echter een toepassing als achtergrondproces starten en het terminalvenster blijven gebruiken. Om dit te doen, voegt u gewoon een ampersand toe aan de opdrachtregel:

gedit command_address.page &
Een

Bash toont u de proces-ID van wat is gestart en brengt u vervolgens terug naar de opdrachtregel. Vervolgens kunt u uw terminalvenster blijven gebruiken.

Veel Linux-opdrachten accepteren een bestand als parameter en halen hun gegevens uit dat bestand. De meeste van deze opdrachten kunnen ook input ontvangen van een stream. Om een ​​stream te maken, gebruikt u de haakse haak (<), zoals weergegeven in het volgende voorbeeld, om een ​​bestand om te leiden naar een opdracht:

sorteer Een 

Als een commando invoer heeft omgeleid, kan het zich anders gedragen dan wanneer het leest uit een benoemd bestand.

Als we wc gebruiken om de woorden, regels en tekens in een bestand te tellen, worden de waarden en vervolgens de bestandsnaam afgedrukt. Als we de inhoud van het bestand omleiden naar wc, drukt het dezelfde numerieke waarden af, maar kent het niet de naam van het bestand waaruit de gegevens afkomstig zijn. Het kan geen bestandsnaam afdrukken.

Hier zijn enkele voorbeelden van hoe u wc kunt gebruiken:

wc words.txt
wc Een 

> Uitvoeromleiding

U kunt de haakse haak (>) gebruiken om de uitvoer van een opdracht om te leiden (meestal naar een bestand); Hier is een voorbeeld:

ls> files.txt
cat files.txt
Een files.txt" -opdracht in een terminalvenster." src="https://imgstore.nyc3.cdn.digitaloceanspaces.com/tvaschool-org/1587087900863.png" />

Uitvoeromleiding kan ook foutmeldingen omleiden als u een cijfer (2, in ons voorbeeld) gebruikt met>. Hier is hoe het te doen:

wc doesntexist.txt 2> errors.txt
cat errors.txt
Een errors.txt" -opdracht in een terminalvenster." src="https://imgstore.nyc3.cdn.digitaloceanspaces.com/tvaschool-org/1587087901637.png" />

GERELATEERD: Wat zijn stdin, stdout en stderr op Linux?

| Pijp

Een "pijp" ketent commando's samen. Het neemt de uitvoer van het ene commando en voert het naar het volgende als invoer. Het aantal piped-opdrachten (de lengte van de ketting) is willekeurig.

Hier gebruiken we cat om de inhoud van het words.txt-bestand in grep in te voeren, dat elke regel extraheert die een kleine letter of een hoofdletter "C" bevat. grep zal dan deze regels doorgeven om te sorteren. sort gebruikt de optie -r (reverse), dus de gesorteerde resultaten verschijnen in omgekeerde volgorde.

We typten het volgende:

kat words.txt | grep [cC] | sorteren -r
Een

! Pipeline logical NOT en History Operator

Het uitroepteken (!) Is een logische operator die NIET betekent.

Deze opdrachtregel bevat twee opdrachten:

[! -d ./backup] && mkdir ./backup
  • Het eerste commando is de tekst tussen de vierkante haken; Het tweede commando is de tekst die volgt op de dubbele ampersands &&.

Het eerste commando gebruikt! als logische operator. De vierkante haken geven aan dat er een test zal worden uitgevoerd. De optie -d (directory) test op de aanwezigheid van een directory met de naam backup. De tweede opdracht maakt de directory aan.

Omdat dubbele ampersands de twee commando's scheiden, zal Bash de tweede alleen uitvoeren als de eerste slaagt. Dat is echter het tegenovergestelde van wat we nodig hebben. Als de test voor de map "backup" slaagt, hoeven we deze niet te maken. En als de test voor de map "backup" mislukt, wordt de tweede opdracht niet uitgevoerd en wordt de ontbrekende directory niet gemaakt.

Dit is waar de logische operator! komt binnen. Het werkt als een logisch NIET. Dus als de test slaagt (dat wil zeggen, de directory bestaat), de! zet dat om naar "GEEN succes", wat een mislukking is. Het tweede commando is dus niet geactiveerd.

Als de directorytest mislukt (dwz de directory bestaat niet), wordt de! verandert de reactie op "NOT failure", wat een succes is. Dus de opdracht om de ontbrekende directory te maken, wordt uitgevoerd.

Dat kleine! pakt veel punch in wanneer je het nodig hebt!

Om de status van de back-upmap te controleren, gebruikt u de opdracht ls en de opties -l (lange lijst) en -d (directory), zoals hieronder weergegeven:

ls -l -d back-up
Een

U kunt ook opdrachten uitvoeren vanuit uw opdrachtgeschiedenis met het uitroepteken. De geschiedenisopdracht geeft uw opdrachtgeschiedenis weer en typ vervolgens het nummer van de opdracht waarmee u opnieuw wilt uitvoeren! om het uit te voeren, zoals hieronder weergegeven:

! 24
Een

Het volgende voert de vorige opdracht opnieuw uit:

!!

$ Variabele uitdrukkingen

In de Bash-shell maak je variabelen om waarden vast te houden. Sommige, zoals omgevingsvariabelen, bestaan ​​altijd en u hebt er altijd toegang toe wanneer u een terminalvenster opent. Deze bevatten waarden, zoals uw gebruikersnaam, homedirectory en pad.

U kunt echo gebruiken om de waarde van een variabele te zien - ga gewoon vooraf aan de variabelenaam met het dollarteken ($), zoals hieronder wordt weergegeven:

echo $ USER
echo $ HOME
echo $ PATH
Een

Om een ​​variabele te maken, moet u deze een naam geven en een waarde geven om vast te houden. U hoeft het dollarteken niet te gebruiken om een ​​variabele te maken. Je voegt alleen $ toe wanneer je naar een variabele verwijst, zoals in het volgende voorbeeld:

ThisDistro = Ubuntu
MyNumber = 2001
echo $ ThisDistro
echo $ MyNumber
Een

Voeg accolades ({}) toe rond het dollarteken en voer een parameteruitbreiding uit om de waarde van de variabele te verkrijgen en verdere transformaties van de waarde mogelijk te maken.

Dit creëert een variabele die een reeks tekens bevat, zoals hieronder weergegeven:

MyString = 123456qwerty

Gebruik de volgende opdracht om de tekenreeks naar het terminalvenster te herhalen:

echo $ {MyString}

Gebruik het volgende commando om de substring te retourneren vanaf positie 6 van de hele string (er is een nul-offset, dus de eerste positie is nul):

echo $ {myString: 6}

Gebruik de volgende opdracht als u een substring wilt weergeven die begint op positie nul en de volgende zes tekens bevat:

echo $ {myString: 0: 6}

Gebruik de volgende opdracht om een ​​substring te herhalen die begint op positie vier en de volgende vier tekens bevat:

echo $ {myString: 4: 4}
Een

Speciale tekens aanhalen

Als je een speciaal teken als een letterlijk (niet-speciaal) teken wilt gebruiken, moet je de Bash-shell vertellen. Dit wordt citeren genoemd en er zijn drie manieren om dit te doen.

Als u de tekst tussen aanhalingstekens (“…”) plaatst, voorkomt dit dat Bash op de meeste speciale tekens inwerkt en dat ze alleen worden afgedrukt. Een opvallende uitzondering is echter het dollarteken ($). Het functioneert nog steeds als het teken voor variabele expressies, dus u kunt de waarden van variabelen opnemen in uw uitvoer.

Deze opdracht drukt bijvoorbeeld de datum en tijd af:

echo "Vandaag is $ (datum)"

Als u de tekst tussen enkele aanhalingstekens ('…') plaatst, zoals hieronder weergegeven, stopt de functie van alle speciale tekens:

echo 'Vandaag is $ (datum)'

U kunt een backslash (\) gebruiken om te voorkomen dat het volgende teken als een speciaal teken functioneert. Dit wordt het personage 'ontsnappen' genoemd; zie onderstaand voorbeeld:

echo "Vandaag is \ $ (datum)"
Een

Denk maar aan speciale tekens als zeer korte opdrachten. Als u hun gebruik onthoudt, kan dit uw begrip van de Bash-shell - en de scripts van andere mensen - enorm ten goede komen.

GERELATEERD: 37 Belangrijke Linux-opdrachten die u moet kennen