Commandoregel-tolk. Unix-systeemopdrachttaal. shell-tolk

In dit gedeelte worden opdrachten en symbolen beschreven die een speciale betekenis hebben en waarmee u het volgende kunt doen:

  • - zoeken met behulp van een sjabloon en groepen bestanden manipuleren;
  • - voer de opdracht op de achtergrond of op een specifiek tijdstip uit;
  • - voer een groep opdrachten opeenvolgend uit;
  • - standaard invoer en uitvoer omleiden;
  • - Beëindig actieve programma's.

De SHELL-interpreter is een shell voor het gehele besturingssysteem en voert interfacefuncties uit tussen de gebruiker en het besturingssysteem. Het onderschept en interpreteert alle gebruikersopdrachten, genereert en toont antwoordberichten.

Naast het uitvoeren van standaard UNIX-opdrachten en uitvoerbare bestanden, bevat de tolk zijn eigen taal, die qua mogelijkheden dicht bij programmeertalen op hoog niveau ligt. Met deze taal kunt u programma's (shellbestanden, scripts) maken die taaloperatoren en UNIX-opdrachten kunnen bevatten. Dergelijke bestanden vereisen geen compilatie en worden uitgevoerd in de geïnterpreteerde modus, maar ze moeten wel uitvoerbare toestemming hebben (ingesteld met behulp van de opdracht chmod).

De gebruiker communiceert met de opdrachtinterpreter door opdrachten in te voeren vanaf het toetsenbord na het verschijnen van een prompt (uitnodiging), meestal het "$"-symbool. De tolk beschouwt de ingevoerde reeks tekens als de naam van een intern commando of als de naam van een uitvoerbaar bestand.

Aan de shell-procedure (script) kunnen argumenten worden doorgegeven wanneer deze wordt gestart. Aan elk van de eerste negen argumenten wordt een positionele parameter toegewezen van $1 tot $9 ($0 is de naam van de procedure zelf), en met deze namen zijn ze toegankelijk vanuit de tekst van de procedure.

Voordat we naar enkele shell-instructies kijken, moeten we aandacht besteden aan het gebruik van bepaalde symbolen in opdrachten.

Hieronder staan ​​de gebruikte metatekens schelp:

* ? - hiermee kunt u afgekorte bestandsnamen opgeven bij het zoeken op patroon;

& - betekent dat de opdracht op de achtergrond wordt uitgevoerd;

; - scheidt opdrachten op de opdrachtregel;

Overschrijft de speciale betekenis van tekens zoals *, ?, [, ], &, ;,<,

"..." - overschrijf de waarde van spatie als scheidingsteken en speciale waarde

alle karakters;

"..." - annuleert de waarde van de spatie als scheidingsteken en de speciale betekenis van alle tekens, behalve $ en;

> - stuurt de opdrachtuitvoer om naar een bestand;

< - stuurt opdrachtinvoer vanuit een bestand om;

>> - leidt de opdrachtuitvoer om waaraan moet worden toegevoegd

einde van bestaand bestand;

| - creëert een pijp die de uitvoer van het ene commando naar de invoer van een ander commando leidt

`...` - gebruikt in paren; Hiermee kunt u de opdrachtuitvoer gebruiken als

opdrachtregelargumenten;

$ - gebruikt met positionele parameters en door de gebruiker gedefinieerd

variabelenaam, ook standaard gebruikt in

als hint schelp.

Bovendien interpreteren bijna alle opdrachttolken, voor het gemak van het werken met bestanden, de "?"-tekens. en "*", waarbij ze worden gebruikt als bestandsnaampatronen (zogenaamde metatekens):

  • ? - elk symbool;
  • * - willekeurig aantal tekens.

Bijvoorbeeld: *.c - specificeert alle bestanden met de extensie "c";

pr???.* - specificeert bestanden waarvan de naam begint met "pr", vijf tekens bevat en een willekeurige extensie heeft.

Shell-variabelen

Met de shell-taal kunt u met variabelen werken (zonder voorafgaande declaratie). Namen van variabelen beginnen met een letter en kunnen letters en cijfers bevatten. Toegang tot variabelen begint met het teken "$".

Voorbeeld. Naar de homedirectory van de gebruiker gaan: cd $HOME

Toewijzingsoperator. Het toekennen van waarden aan variabelen gebeurt met behulp van de operator `= zonder spaties.

Uit het boek Computerra Magazine nr. 33 van 12 september 2006 auteur Computerra-tijdschrift

SOFTERRA: Een zeer artistieke teamtolk Auteur: Ilya Shpankov Wanneer het gesprek over rastergrafische editors gaat, herinnert de overgrote meerderheid van de mensen zich allereerst Adobe Photoshop. Voorstanders van vrije software mogen dit natuurlijk niet vergeten te vermelden

Uit het boek Laten we een compiler bouwen! van Crenshaw Jack

Uit het boek Architectuur van het UNIX-besturingssysteem auteur Bach Maurice J

Uit het boek DIY Linux-server auteur Kolisnichenko Denis Nikolajevitsj

19.7. De bash-opdrachtinterpreter De opdrachtinterpreter is een programma dat gebruikersopdrachten uitvoert. De standaardinterpreter (of shell) is bash (Bourne Again Shell). De volgende tolken zijn ook heel gebruikelijk: sh, ash, bsh, tcsh, csh, zsh. Lijst

Uit het boek Programming in Prolog for Artificial Intelligence auteur Bratko Ivan

Uit het boek Gratis gesprekken via internet auteur Froezorov Sergej

16.2. Een eenvoudige interpretatie voor patroongestuurde programma's Om patroongestuurde modules te beschrijven, gebruiken we de volgende syntaxis: ConditionPart ---> ActionPartHet voorwaardegedeelte is een lijst met voorwaarden: [Conditie1, Condition2, Condition3, ...]waarbij

Uit het boek Ubuntu 10. Snelstartgids auteur Kolisnichenko D.N.

Hoofdstuk 4 TeamSpeak - teamgesprek via een computernetwerk Hoe TeamSpeak verschilt van TeamTalk Het TeamSpeak-programma lijkt sterk op TeamTalk: dezelfde kanalen, dezelfde mogelijkheid om zowel op internet als op een lokaal netwerk te werken, keuze uit verschillende audiocompressiecodecs , client-server

Uit het boek Firebird DATABASE DEVELOPER'S GUIDE van Borri Helen

Hoofdstuk 22 De bash-commando-interpreter 22.1. Wat je moet weten over bash bash is de meest gebruikte Linux-shell (opdrachtinterpreter). Het belangrijkste doel van bash is het uitvoeren van opdrachten die door de gebruiker zijn ingevoerd. De gebruiker voert een commando in, bash zoekt naar het programma,

Uit het boek UNIX-besturingssysteem auteur Robachevski Andrej M.

Commandomodus Hoewel isql enkele handige interactieve mogelijkheden heeft, is het niet beperkt tot alleen deze modus. Veel interactieve opdrachten zijn ook beschikbaar als opdrachtregelschakelaars. Sommige isql-functies, zoals de extractie van metagegevens, zijn alleen beschikbaar

Uit het boek Linux en UNIX: shell programmeren. Handleiding voor ontwikkelaars. van Tainsley David

Shell Alle moderne UNIX-systemen worden geleverd met ten minste drie shells: de Bourne-shell (/bin/sh), de C-shell (/bin/csh) en de Korn-shell (/bin/ksh). Er zijn verschillende andere tolken, zoals de Bourne-Again-shell (bash), met vergelijkbare functionaliteit.Command

Uit het boek UNIX - een universele programmeeromgeving van Pike Rob

Bourne shell De Bourne shell is de standaard commando-interpreter die bij alle UNIX-systemen wordt geleverd en is compatibel met de bash-interpreter op Linux. In een boek gewijd aan shell-programmering en niet gebonden aan een specifiek besturingssysteem, in het algemeen

Uit het boek van de auteur

De Shell-interpreter Het eerste deel van het boek behandelt algemene kwesties die verband houden met het werken in de shell-interpreter. Hoofdstuk 1 behandelt bestands- en maprechten en hoe symbolische koppelingen kunnen worden gemaakt.

Uit het boek van de auteur

24.1. Een volledige lijst met opdrachten die in de shell-interpreter zijn ingebouwd. 24.1 bevat een volledige lijst met standaard ingebouwde opdrachten. Tabel 24.1. Standaard ingebouwde opdrachten: Null, retourneert altijd waar. Bestanden lezen van de huidige tolk

Karakter stuurprogramma's voor apparaat

Wanneer een opdracht wordt gegeven, wordt de karakterstroom eerst geïnterpreteerd door het karakterapparaatstuurprogramma. Welk stuurprogramma werkt, hangt in elk geval af van de gebruikte apparatuur (voor meer gedetailleerde informatie, zie "Programmabeschrijving. Deel 1. Referentie voor hulpprogramma's" KPDA.10964-01 13 01).

Opmerking. Afhankelijk van uw systeemconfiguratie kunnen sommige toetsaanslagen anders worden verwerkt dan in dit gedeelte wordt beschreven.

Invoermodi

Character I/O-apparaatstuurprogramma's kunnen in beide werken modus van onverwerkte ("ruwe") invoergegevens(onbewerkte invoermodus), of in canonieke modus(canonieke modus), of bewerkbare invoermodus(bewerkte invoermodus). In de onbewerkte invoermodus worden alle tekens doorgegeven aan de applicatie zodra ze worden ingevoerd. In de bewerkbare invoermodus ontvangt de toepassing pas tekens nadat een hele invoerregel is voltooid (meestal aangegeven door een harde return).

Terminal-ondersteuning

Sommige programma's (bijvoorbeeldvi) er is informatie nodig over welke acties uw terminal kan uitvoeren (is het mogelijk om de cursor te verplaatsen, het scherm leeg te maken, enz.). TERM-omgevingsvariabelegeeft het type terminal aan dat wordt gebruikt, en de map /usr/lib/terminfo is een terminaldatabase. Deze map bevat een reeks submappen (a tot en met z) waarin informatie voor de overeenkomstige terminal wordt opgeslagen. Sommige toepassingen gebruiken /etc/termcap, een verouderd databasemodel met één bestand, in plaats van /usr/lib/terminfo.

De standaardterminal isqansi-m (QNX-versie van de ANSI-terminal). Zie subsectie voor meer informatie over het instellen van het terminaltype. "Terminaltypen" in hoofdstuk 9.

Dienst telnet

Bij gebruik van een online diensttelnet voor communicatie tussen twee QNX-machines (met QNX 4 of QNX Neutrino), moet de parameter -8 worden gespecificeerd om het 8-bits datapad in te schakelen. Als u verbinding maakt met een machine waarop QNX Neutrino draait vanaf een machine met een ander besturingssysteem en de terminal werkt niet goed, sluit dan telnet af en voer het hulpprogramma opnieuw uit met de optie -8.

Opmerking . Bij het opstartentelnet van Windows OS gebruikt de ansi- of vt100-modus, afhankelijk van het terminaltype.

Algemene informatie over het toetsenbord

In tabel 4.1 laat zien hoe karakter-I/O-apparaatstuurprogramma's verschillende toetsaanslagen en hun combinaties interpreteren (dat wil zeggen groepen gelijktijdig ingedrukte toetsen). Stuurprogramma's verwerken toetsaanslagen onmiddellijk nadat ze zijn uitgevoerd.

Opmerking. De reactie van het systeem op het gebruik van het toetsenbord door de gebruiker kan afwijken van de hieronder beschreven reactie als:

schelp(shell) in het UNIX-systeem verwijst naar het mechanisme van interactie tussen gebruikers en het systeem. In wezen is het een opdrachtinterpreter die de regels leest die de gebruiker typt en begint met het uitvoeren van de gevraagde systeemfuncties. De volledige commandotaal die door de shell wordt geïnterpreteerd is rijk aan mogelijkheden en behoorlijk complex, maar de meeste commando's zijn gemakkelijk te gebruiken en gemakkelijk te onthouden.

De opdrachtregel bestaat uit de opdrachtnaam (dat wil zeggen de naam van het bestand dat moet worden uitgevoerd), gevolgd door een lijst met argumenten, gescheiden door spaties. De shell verdeelt de opdrachtregel in componenten. Het bestand dat in de opdracht is opgegeven, wordt geladen en krijgt toegang tot de argumenten die in de opdracht zijn opgegeven.

Elke commandotaal in de shell-familie bestaat eigenlijk uit drie delen:

 serviceconstructies waarmee u tekstreeksen kunt manipuleren en complexe opdrachten kunt bouwen op basis van eenvoudige opdrachten;

 ingebouwde opdrachten die rechtstreeks door de opdrachttaalinterpreter worden uitgevoerd;

 opdrachten weergegeven door afzonderlijke uitvoerbare bestanden.

De reeks opdrachten van het laatste type omvat op zijn beurt standaardopdrachten (systeemhulpprogramma's zoals vi, cc, enz.) en opdrachten die door systeemgebruikers zijn gemaakt. Om een ​​door een OSUNIX-gebruiker ontwikkeld uitvoerbaar bestand als shell-opdracht te kunnen uitvoeren, is het voldoende om in een van de bronbestanden een functie met de naam main te definiëren (de naam main moet globaal zijn, dat wil zeggen dat deze niet voorafgegaan moet worden door het trefwoord statisch). Als u de naam van zo'n uitvoerbaar bestand als opdrachtnaam gebruikt, zal de shell een nieuw proces maken en daarin het opgegeven uitvoerbare programma uitvoeren, te beginnen met een aanroep van de hoofdfunctie.

De hoofdtekst van de hoofdfunctie kan over het algemeen willekeurig zijn (voor de tolk is het enige dat telt de aanwezigheid van een toegangspunt in het programma met de naam main), maar om een ​​commando te maken dat parameters kan instellen, moet je zich aan een aantal standaardregels houden. In dit geval moet elke hoofdfunctie worden gedefinieerd met twee parameters: argci en argv. Na het aanroepen van de opdracht komt parameter argc overeen met het aantal tekenreeksen dat is opgegeven als argumenten voor de opdrachtaanroep, en argv is een array van verwijzingen naar variabelen die deze tekenreeksen bevatten. In dit geval vormt de naam van het commando zelf de eerste regel met argumenten (dat wil zeggen dat na de aanroep de waarde van argc altijd groter is dan of gelijk is aan 1). De hoofdfunctiecode moet de geldigheid van de gegeven argc-waarde evalueren en de gegeven tekstreeksen dienovereenkomstig verwerken.

De volgende C-tekst kan bijvoorbeeld worden gebruikt om een ​​opdracht te maken die de tekstreeks afdrukt die als argument is opgegeven:

#erbij betrekken

hoofd(argc, argv)

printf(“gebruik: %s jouw-tekst\n”, argv);

printf(“%s\n”, argv);

Processen

Een proces in UNIX wordt opgevat in de klassieke zin van het woord, dat wil zeggen als een programma dat wordt uitgevoerd in zijn eigen virtuele adresruimte. Wanneer een gebruiker zich aanmeldt, wordt er automatisch een proces aangemaakt dat een shellprogramma uitvoert. Als de commando-interpreter een commando tegenkomt dat overeenkomt met een uitvoerbaar bestand, creëert het een nieuw proces en voert het bijbehorende programma daarin uit, te beginnen met de hoofdfunctie. Dit actieve programma kan op zijn beurt een proces creëren en daarin een ander programma uitvoeren (het moet ook de hoofdfunctie bevatten), enz.

Om een ​​nieuw proces te maken en er een programma in uit te voeren, worden twee API-systeemaanroepen gebruikt: fork() en exe(executable_file_name). De fork-systeemaanroep veroorzaakt de creatie van een nieuwe adresruimte, waarvan de status absoluut identiek is aan de status van de adresruimte van het hoofdproces (dat wil zeggen, deze bevat dezelfde programma's en gegevens). Voor het onderliggende proces worden kopieën van alle gegevenssegmenten gemaakt.

Met andere woorden: onmiddellijk nadat de fork-systeemaanroep is uitgevoerd, zijn de hoofd- (ouder-) en onderliggende processen absolute tweelingen;

de controle in beide bevindt zich op het punt onmiddellijk na de splitsingsoproep. Zodat het programma kan achterhalen in welk proces het nu werkt - het hoofdproces of het voortgebrachte proces - retourneert de fork-functie verschillende waarden: 0 in het voortgebrachte proces en een positief geheel getal (de voortgebrachte procesidentificatie - de zogenaamde PID) in het hoofdproces.

Als we nu een nieuw programma willen uitvoeren in het voortgebrachte proces, moeten we de exec-systeemaanroep aanroepen, waarbij we als argumenten voor de aanroep de naam opgeven van het bestand dat het nieuwe uitvoerbare programma bevat, en mogelijk een of meer tekstreeksen die worden doorgegeven als argumenten aan de nieuwe hoofdfunctieprogramma's. Het uitvoeren van de exec-systeemaanroep zorgt ervoor dat een nieuw uitvoerbaar programma in de adresruimte van het voortgebrachte proces wordt geladen en wordt uitgevoerd vanaf het adres dat overeenkomt met de invoer voor de hoofdfunctie. Met andere woorden, dit zorgt ervoor dat het huidige programmasegment en het huidige datasegment die werden overgenomen toen de fork-oproep werd gedaan, worden vervangen door de overeenkomstige nieuwe segmenten die in het bestand zijn gespecificeerd. Eerdere segmenten gaan verloren. Dit is een effectieve methode om het programma dat een proces uitvoert te veranderen, maar niet het proces zelf. Bestanden die al geopend zijn voordat de exec-primitief wordt uitgevoerd, blijven geopend nadat deze is uitgevoerd.

In het volgende voorbeeld voert het gebruikersprogramma, aangeroepen als een shell-opdracht, de standaard shelllls-opdracht uit in een afzonderlijk proces, dat de inhoud van de huidige bestandsmap afdrukt.

if (fork ()==(0) wait(0); /* ouderproces */

anders execl("ls", "Is", 0); /* voortgebracht proces */

Vanuit praktisch oogpunt is een proces in UNIX dus een object dat is gemaakt als resultaat van het uitvoeren van de functie fork(). Elk proces, met uitzondering van het initiële (nul) proces, wordt voortgebracht als resultaat van een ander proces dat de fork()-bewerking start. Elk proces heeft één ouder, maar kan vele processen voortbrengen. Het initiële proces (nul) is een speciaal proces dat wordt aangemaakt als gevolg van het opstarten van het systeem. Nadat een nieuw proces met ID 1 is voortgebracht, wordt proces nul een wisselproces en wordt het virtuele geheugenmechanisme geïmplementeerd. Het proces met ID 1, bekend als init, is de voorloper van elk ander proces op het systeem en is op een speciale manier aan elk proces gekoppeld.

De interne opdrachten die worden ondersteund door de Cmd.exe-interpreter en de meest gebruikte externe opdrachten (opdrachtregelhulpprogramma's) worden besproken. Mechanismen voor I/O-omleiding, pipelining en voorwaardelijke uitvoering van opdrachten worden beschreven. Er worden voorbeelden gegeven van opdrachten voor het werken met het bestandssysteem.

In Windows worden, net als in andere besturingssystemen, interactieve (getypt vanaf het toetsenbord en onmiddellijk uitgevoerd) opdrachten uitgevoerd met behulp van de zogenaamde opdrachtinterpreter, ook wel de opdrachtprocessor of opdrachtshell genoemd. Vanaf de versie van Windows NT heeft het besturingssysteem een ​​opdrachtinterpreter geïmplementeerd, Cmd.exe, die veel geavanceerdere mogelijkheden heeft.

1.2.1 Lancering van de granaat

Op Windows NT/2000/XP bevinden het bestand Cmd.exe en andere uitvoerbare bestanden die overeenkomen met externe besturingssysteemopdrachten zich in de map %SystemRoot%\SYSTEM32 (de waarde van de omgevingsvariabele %SystemRoot% is de Windows-systeemcode). map, meestal C:\Windows of C:\WinNT). Om de opdrachtinterpreter te starten (een nieuwe opdrachtregelsessie openen), kunt u Uitvoeren... selecteren in het menu Start, de bestandsnaam Cmd.exe invoeren en op OK klikken. Als gevolg hiervan wordt een nieuw venster geopend (zie figuur 1), waarin u opdrachten kunt uitvoeren en het resultaat van hun werk kunt zien.

Rijst. 1 - Commandovenster Cmd.exe-interpreter in Windows XP

1.2.2 Parameters instellen voor het tolkopdrachtvenster

Het opdrachtregelhulpprogramma, dat als standaard Windows-toepassing wordt geleverd, heeft zijn eigen reeks opties en instellingen. Eén manier om deze opties te bekijken is door het item Eigenschappen in het bedieningsmenu van het venster te gebruiken (klik met de rechtermuisknop op de venstertitel). In het eigenschappenvenster (zie Figuur 2) zijn vier tabbladen met opties beschikbaar: algemeen, lettertype, lay-out en kleuren.

Rijst. 2 – venster voor het instellen van tolkeigenschappen

1.2.3. Interne en externe teams. Commandostructuur

Sommige commando's worden direct door de shell zelf herkend en uitgevoerd - deze commando's worden aangeroepen intern(bijvoorbeeld COPY of DIR). Andere OS-opdrachten zijn afzonderlijke programma's, die zich standaard in dezelfde map bevinden als Cmd.exe, die Windows op dezelfde manier laadt en uitvoert als andere programma's. Dergelijke commando's worden genoemd extern(bijvoorbeeld MEER of XCOPY).

Laten we eens kijken naar de structuur van de opdrachtregel zelf en het principe om ermee te werken. Om een ​​opdracht uit te voeren, voert u na de opdrachtregelprompt (bijvoorbeeld C:\>) de naam van deze opdracht in (hoofdlettergebruik is niet belangrijk), de parameters en schakelaars (indien nodig) en drukt u op de toets . Bijvoorbeeld:

C:\>KOPIEER C:\mijnbestand.txt A:\ /V

De opdrachtnaam hier is COPY, de parameters zijn C:\mijnbestand.txt en A:\, en de sleutel is /V. Houd er rekening mee dat bij sommige opdrachten de schakelaars niet met het /-symbool beginnen, maar met het – (min)-symbool, bijvoorbeeld -V.

Veel Windows-opdrachten hebben een groot aantal extra parameters en schakelaars, die vaak moeilijk te onthouden zijn. De meeste opdrachten hebben ingebouwde Help waarin het doel en de syntaxis van de opdracht kort worden beschreven. U kunt deze Help openen door de opdracht in te voeren met de schakeloptie /? Als we bijvoorbeeld de opdracht ATTRIB /? uitvoeren, zien we in het MS-DOS-venster de volgende tekst:

Bestandskenmerken weergeven en wijzigen.

ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[station:][pad]bestandsnaam]

Het attribuut instellen.

Een attribuut verwijderen.

R Alleen-lezen attribuut.

Een kenmerk 'Archief'.

S Kenmerk "Systeem".

H Verborgen attribuut.

/S Verwerk bestanden in alle submappen van het opgegeven pad.

Bij sommige opdrachten kan de ingebouwde helptekst behoorlijk groot zijn en niet op één scherm passen. In dit geval kan de hulp achtereenvolgens op één scherm worden weergegeven met behulp van het MEER-commando en het piping-symbool |, bijvoorbeeld:

In dit geval wordt de helpuitvoer na het vullen van het volgende scherm onderbroken totdat er op een willekeurige toets wordt gedrukt. Bovendien kunt u, door de uitvoeromleidingssymbolen > en >> te gebruiken, de op het scherm weergegeven tekst naar een tekstbestand leiden om deze later te bekijken. Als u bijvoorbeeld Help-tekst voor de XCOPY-opdracht wilt uitvoeren naar het tekstbestand xcopy.txt, gebruikt u de volgende opdracht:

XKOPIËREN /? > XCOPY.TXT

Opmerking. In plaats van de bestandsnaam kunt u de aanduidingen van uw computerapparaten opgeven. Het volgende wordt ondersteund op Windows apparaatnamen: PRN (printer), CON (terminal: toetsenbord voor invoer, monitor voor uitvoer), NUL (leeg apparaat, alle I/O-bewerkingen daarop worden genegeerd).