shell-opdrachttaal. commando shell

annotatie: Commando shell-concept. Overzicht van opdrachtshells. bash-opdrachtshell. Functies van het werk (opdrachtgeschiedenis, operator "!", acties bij het indrukken van een toets ). Multitasken in de console. Taken. Taak beheer. Omgevingsvariabelen van de middernachtcommandant

Lesvoortgang

1. In de wereld van Linux en Unix is ​​werken op een computer onlosmakelijk verbonden met het concept commando shell- een programma waarmee de gebruiker met het systeem kan communiceren door opdrachten in te voeren en uit te voeren. Echter, commando shell is een vast programma. U kunt dit bewijzen door als standaard shell in het bestand in te stellen passwd voor de gebruiker een ander programma. Maar om ervoor te zorgen dat het systeem het als een shell kent, moet u de absolute bestandsnaam toevoegen aan /etc/schelpen.

Linux wordt geleverd met verschillende opdrachtshells, hun samenstelling kan variëren afhankelijk van de distributie, maar je kunt altijd het volgende vinden:

Bourne Shell (sh) - de oudste en meest voorkomende commando shell voor Unix-systemen. Er is geen enkel Unix-systeem waar het niet zou worden gebruikt.

Bourne Again Shell (bash) - uitgebreide Bourne Shell. Het heeft veel aangename voordelen, daarom is het de laatste tijd zo populair geworden. Het is de "standaard" shell voor bijna alle Linux-distributies.

Ook populaire skins zijn:

csh- shell, waarvan het commandosysteem dicht bij de programmeertaal C ligt

tcsh is een shell waarvan het commandosysteem dicht bij de Tcl-programmeertaal ligt.

zsh is waarschijnlijk de krachtigste shell. Het is een uitbreiding van sh (bourne shell) .

Omdat Linux bash "standaard" gebruikt, zullen we erover praten.

2. commando shell bash was oorspronkelijk een freeware alternatief voor Bourne Shell. Later, toen zijn mogelijkheden groeiden, begon het als een onafhankelijk product te worden beschouwd. De belangrijkste kenmerken van bash zijn:

Tabel 1.1.
Mogelijkheid Commentaar
1 Regelbewerking De mogelijkheid om het ingevoerde commando te bewerken in plaats van het opnieuw te schrijven
2 Kanaalorganisatie Mogelijkheid I/O-omleidingen, kanalen tussen taken organiseren
3 Makkelijk te gebruiken Gebruik van opdrachtaliassen, opdrachtgeschiedenis, automatisch aanvullen
4 Taakbeheer Mogelijkheid om achtergrondtaken te maken en te beheren
5 Flexibiliteit Inlogscriptbestanden gebruiken voor elke gebruiker afzonderlijk, omgevingsvariabelen

I/O-omleiding en leidingen komen later in les 8 aan de orde. Daarom laten we dit punt achterwege. Maar laten we het hebben over de kenmerken van werken in bash, over de voordelen die het biedt.

Bash schrijft automatisch alle opdrachten die door de gebruiker zijn getypt naar een bestand ~/.bash_history. De geschiedenisopdracht wordt gebruikt om dit bestand te beheren. geschiedenis is ingebouwd commando bash. Dat wil zeggen, er is geen uitvoerbaar bestand dat overeenkomt met deze opdracht. Haarzelf commando shell voert alle handelingen uit. Ingevoerd zonder opties, geeft het eenvoudig alle commando's weer die in dit bestand zijn opgeslagen en is identiek aan cat ~/.bash_history .

De opdrachtgeschiedenis bestaat om de reeks veelgebruikte opdrachten te vereenvoudigen. De geschiedenis van commando's kan door de lijst worden gesorteerd met de toetsen <вверх>en<вниз> .

Een andere manier is om te typen! en commando start en druk op . Het laatste commando uit de geschiedenis, waarvan de eerste letters overeenkomen met de getypte letters, wordt uitgevoerd. Bijvoorbeeld:

$ !/usr /usr/bin/perl ./ptest.pl OK $ !xfonts bash: !xfonts: evenement niet gevonden $

Maar hoe kunnen we de invoer versnellen als het commando dat we nodig hebben nog niet in de geschiedenis staat? In dit geval zal de sleutel ons helpen . Nadat u de eerste paar letters van de opdracht (of het bestandspad) hebt getypt, drukt u op en bash zal uw opdracht (of padelement) automatisch voltooien. In het geval dat meerdere bestanden overeenkomen of geen bestanden overeenkomen, geeft het systeem een ​​geluidssignaal. Als de knop druk nogmaals, als er meerdere bestanden passen - het systeem zal een lijst weergeven, en als er geen - herhaal de piep

3. Vanaf de eerste les had je moeten onthouden dat Linux een multitasking-omgeving is. Tot nu toe heb je echter nog steeds niet kunnen profiteren van de multitasking. Op het eerste gezicht lijkt het erop dat je met de console de multitasking-mogelijkheden van het systeem niet kunt gebruiken, en alleen in een grafische omgeving kun je twee of meer programma's tegelijkertijd uitvoeren. Maar dat is het niet! De console is ook multitasking.

Ten eerste kunt u meerdere consoles openen door in elk ervan een programma te openen. Schakelen tussen consoles gebeurt met de toetsen ctrl+ , waar x is het consolenummer.

En zelfs in één console kunt u met behulp van opdrachtbesturingsopdrachten ten volle profiteren van alle voordelen van een multitasking-systeem.

- een toetsencombinatie die een ongrijpbaar signaal naar het proces stuurt sigstop. Hiermee kunt u de uitvoering van het proces stoppen om de controle over te dragen naar de opdrachtregel.

commando & - met het & symbool achter het commando kun je het op de achtergrond uitvoeren.

jobs - Toont een lijst van huidige shell jobs.

bg<#j>– zet job #j op de achtergrond. Hiervoor moet de taak worden gestopt door de toetsencombinatie . Als de tolk op dit moment maar één taak heeft, kan het nummer worden weggelaten.

fg<#j>- zet job #j in de uitvoeringsmodus op de voorgrond. De taak moet worden gestopt door een toetscombinatie of op de achtergrond zijn. Als de tolk op dit moment maar één taak heeft, kan het nummer worden weggelaten.

$ man bash ^Z + Gestopt man bash $ vim ^Z vim + Gestopt vim $ bg 1 + man bash & $ jobs + Gestopt man bash + Gestopt vim $ fg 2 + vim $ fg + man bash $

4. Omgevingsvariabelen– systeeminformatie die uw voorkeuren aangeeft, zoals: tekstverwerker standaard, zoekpaden voor uitvoerbare bestanden, enz., evenals gebruikers-, systeem- en shell-identiteiten zoals gebruikersnaam, versie van Linux, enz. gebruikt door de shell en andere programma's.

Veelgebruikte variabelen door de gebruiker zijn:

PATH - de variabele bevat de paden waarin het systeem naar uitvoerbare bestanden moet zoeken als de volledige of relatief pad naar hen.

PWD - de variabele bevat de volledige naam van de huidige map.

HOME - de variabele bevat het volledige pad thuismap gebruiker.

HOSTNAME - de variabele bevat de naam van de computer.

LOGNAME - bevat gebruikersnaam

SHELL - bevat de naam van de opdrachtshell die in de huidige sessie wordt uitgevoerd.

GEBRUIKER - bevat gebruikersnaam De sessie die momenteel open is.

De lijst met variabelen die in het systeem zijn geïnstalleerd, kan worden bekeken met het exportcommando, ingevoerd zonder parameters.

De bash-shell heeft zijn eigen variabelen. Om ervoor te zorgen dat lokale variabelen systeemvariabelen worden, moeten ze worden geëxporteerd met dezelfde exportopdracht. Bijvoorbeeld:

$ export declareren -x HOME="/home/gserg" declareren -x HOSTNAME="WebMedia" declareren -x LANG="en_RU.KOI8-R" declareren -x LOGNAME="gserg" declare -x PATH="/bin: /usr/bin:/usr/local/bin:/home/gserg/bin" declareren -x PWD="/home/gserg" declareren -x SHELL="/bin/bash" declareren -x TERM="Eterm" declareren -x USER="gserg" $ EDITOR=/bin/vim $ export EDITOR $ export declare -x EDITOR="/bin/vim" declare -x HOME="/home/gserg" declare -x HOSTNAME="WebMedia" declare -x LANG="ru_RU.KOI8-R" declareren -x LOGNAME="gserg" declareren -x PATH="/bin:/usr/bin:/usr/local/bin:/home/gserg/bin:" declareren - x PWD="/home/gserg" declareren -x SHELL="/bin/bash" declareren -x TERM="Eterm" declareren -x USER="gserg" $

Team uitgeschakeld verwijdert een systeemvariabele. Bijvoorbeeld:

$ uitgeschakeld EDITOR $ export declareren -x HOME="/home/gserg" declareren -x HOSTNAME="WebMedia" declareren -x LANG="en_RU.KOI8-R" declareren -x LOGNAME="gserg" declare -x PATH=" /bin:/usr/bin:/usr/local/bin:/home/gserg/bin:" declareren -x PWD="/home/gserg" declareren -x SHELL="/bin/bash" declareren -x TERM= "Eterm" declareren -x USER="gserg" $

5. In de les van vandaag zullen we je kennis laten maken met een andere, enigszins niet-standaard, commando-shell middernacht commandant. Is niet commando shell in de gebruikelijke zin. Dit is een tekstbestandsbeheerder - analoog Norton-commandant of Ver. middernacht commandant uitvoeren met het mc-commando. We zullen het hebben over de mogelijkheden ervan.

Scherm middernacht commandant" verdeeld in twee delen. Bijna de volledige schermruimte wordt ingenomen door twee panelen met een lijst met mappen en bestanden. Standaard is de tweede regel vanaf de onderkant van het scherm de opdrachtregel waar u normale shell-opdrachten kunt uitvoeren, en de onderste regel toont de functietoetshints ( F1-F10). De bovenste regel met symbolen bevat een menu waarmee vele functies kunnen worden uitgevoerd. Om het menu te gebruiken, klikt u op het gewenste item of drukt u op de toets F9 en met behulp van de toetsen cursorbesturing selecteer het gewenste item.

Panelen middernacht commandant bieden weergave van twee mappen tegelijk. Een van de panelen is actief (in die zin dat de gebruiker bepaalde acties kan uitvoeren met de bestanden en mappen erin). In het actieve paneel wordt de naam van een van de bestanden of directory gemarkeerd en wordt de titel van het paneel op de bovenste regel in kleur gemarkeerd. De titelnaam is dezelfde als de naam van de directory die momenteel wordt weergegeven. Bijna alle bewerkingen worden uitgevoerd in het actieve paneel. Sommige bewerkingen, zoals overdracht of bestanden kopiëren gebruik het passieve paneel als een plaats om te kopiëren, over te dragen, enz.

Laten we het nu hebben over de basissneltoetsen waarmee u kunt werken Middernacht commandant "ohm.

toetsen worden gebruikt om het actieve paneel te wijzigen of +

om een ​​bestand te markeren, druk op of +

Klik voor hulp

zal de bestandsviewer oproepen

via je bewerkt het bestand

kunt u het bestand kopiëren.

bestand verplaatsen of hernoemen

Map maken

Sleutel zal een bestand en/of map verwijderen

, zoals reeds vermeld, opent de toegang tot het menu.

- hiermee kunt u afsluiten middernacht commandant.

zal de aanwijzer naar het begin van de lijst met bestanden verplaatsen,

- integendeel - aan het einde van de lijst.

en zal de positie van de indicator per pagina respectievelijk omhoog en omlaag veranderen.

Sleutel <*> op een extra toetsenbord kunt u de selectie van bestanden omkeren (het heeft geen invloed op mappen)

Sleutel <+> op het extra toetsenbord kunt u bestanden markeren met een masker, en <-> deselecteer bestanden per masker.

+ - werk de inhoud van de directory bij (door opnieuw te lezen vanaf schijf of vanaf het netwerk)

+ - rechter en linker panelen verwisselen.

+ - panelen verwijderen/retourneren.

Hoewel sneltoetsen de beste tool zijn om dingen voor elkaar te krijgen Middernacht commandant "ohm zo snel en gemakkelijk mogelijk is, is het voor beginners vrij moeilijk om ze allemaal tegelijk te leren. Om deze leemte op te vullen en andere functies toe te voegen die geen sneltoetsen hebben, middernacht commandant heeft een menu (aangeroepen door F9).

Het menu bestaat uit items: "Linkerpaneel", "Bestand", "Opdracht", "Instellingen", "Rechterpaneel".

"Linker/Rechts Paneel"- deze menu-items zijn precies hetzelfde. De verschillen tussen hen zijn alleen dat de uitgevoerde acties worden geadresseerd aan het linker- of rechterpaneel.

"Lijstformaat"- opent een dialoogvenster waarin u de weergave kunt selecteren waarin de lijst met bestanden / mappen wordt weergegeven. U kunt kiezen uit standaard, korte en uitgebreide formaten. De gebruiker in dit venster kan echter ook het uiterlijk van het paneel zo definiëren dat hij tevreden zal zijn door het keuzerondje "Door gebruiker gedefinieerd" te selecteren.

"Snelle kijk"- schakelt het paneel naar de modus voor automatisch bekijken van bestanden die zijn geselecteerd op het aangrenzende paneel. De focus schakelt automatisch naar het tegenoverliggende paneel.

"Informatie"- schakelt het paneel om informatie te bekijken over het bestand dat is gemarkeerd in het aangrenzende paneel, zoals locatie, toegangsrechten en eigenaar, bestandssysteem en het apparaat waarop het zich bevindt, het aantal harde links dat aan dit bestand is gekoppeld, evenals informatie over het apparaat waarop het bestand zich bevindt.

"Hout"- vertaalt middernacht commandant naar een modus die lijkt op de Explorer-modus van OC Windows. In het paneel waarop de opdracht wordt toegepast "Hout", is er een mappenboom gebouwd, waarin kan worden genavigeerd met behulp van de pijlen cursorbesturing, sleutels PageUp, PageDown, Home, End. Het volgende paneel toont de inhoud van de map die in de boomstructuur is gemarkeerd.

"Sorteervolgorde"- opent een dialoogvenster waarin u een attribuut kunt selecteren waarop bestanden en mappen in de lijst worden gesorteerd, zoals naam, extensie, bewerkingstijd, toegangstijd, attribuutwijzigingstijd, grootte, knooppunt (waarop het bestand zich bevindt ). U kunt de bestanden ook ongesorteerd laten, hoofdlettergevoelig sorteren of in omgekeerde volgorde sorteren.

"Filter"- hiermee kunt u de bestandsnamen selecteren die in het paneel worden weergegeven met behulp van een reguliere expressie die in het dialoogvenster is ingevoerd.

"FTP-verbinding"- met deze opdracht kunt u een verbinding tot stand brengen met een externe (of zelfs lokale) computer met behulp van het protocol ftp. Als alleen het adres van de externe server wordt ingevoerd, dan: middernacht commandant zal proberen een anonieme verbinding tot stand te brengen. De volledige regel waarmee het knooppunt wordt gespecificeerd is als volgt:

ftp:gebruikersnaam:wachtwoord@server_adres:poort/map_op_server

Nadat de verbinding tot stand is gebracht, werkt u met: extern bestandssysteem verloopt op dezelfde manier als het werken met een lokale FS.

"Shell-verbinding"- hiermee kunt u een netwerkverbinding openen via protocol VIS (Bestandsoverdracht via SHell– bestandsoverdracht via shell). VIS maakt gebruik van protocollen RSH (externe schil)– externe shell ) of SSH (Beveiligde Shell)- beschermd omhulsel, analoog RSH, maar met ondersteuning voor codering van verzonden gegevens). De volledige string waarmee de gebruiker de externe host kan specificeren is:

sh:gebruikersnaam@server_address:options/server_dir

Parameter gebruikersnaam, opties en directory_on_server niet verplicht. Als een gebruikersnaam niet gespecificeerd, dan middernacht commandant zal proberen in te loggen op het externe systeem met de gebruikersnaam die op de lokale computer is gebruikt.

"Herzien"- vergelijkbaar met sneltoetsen + - zorgt ervoor dat de lijst met bestanden en mappen in het huidige paneel wordt bijgewerkt door ze opnieuw te lezen vanaf schijf of via het netwerk.

"Bestand"- menusectie, waarvan de items basisfuncties bieden voor het verwerken van bestanden en mappen, zoals:

"Gebruikersmenu"- hiermee kunt u het menu oproepen, dat door de gebruiker zelf wordt ingesteld. Wordt ook aangeroepen door de sleutel .

"Bestand bekijken"- analoog van de functie die wordt uitgevoerd bij het indrukken van . Hiermee kunt u het gemarkeerde bestand bekijken (of een map invoeren). Ondersteunt vele formaten zoals tekstformaten, archieven, Winword DOC, Linux-uitvoerbare bestanden, enz.

"Bestand bekijken..."- hetzelfde als de vorige paragraaf, maar heeft geen invloed op het gemarkeerde bestand, maar op degene waarvan de naam en het pad in het dialoogvenster worden ingevoerd.

"Teamweergave"- hiermee kunt u een opdracht uitvoeren en bekijken standaard uitvoer in de bestandsweergavemodus.

"Bewerken"- opent het bestand om te bewerken. Eenvoudige inline tekstverwerker heeft voldoende ingebouwde functies voor het bewerken van configuratiebestanden, programmabronteksten, enz., en de ingebouwde automatische syntaxis accentueren maakt het bewerken gemakkelijker en bewerkbare teksten beter leesbaar.

"Kopiëren"- kopieert een bestand van het actieve paneel naar het passieve. Een analoog van een functie aangeroepen door . Standaard wordt het bestand (of de groep bestanden) gemarkeerd in het actieve paneel beschouwd als gekopieerd, en de bestemming is de map die in het passieve paneel is geopend. Dit kan worden gewijzigd door de waarden van de velden te corrigeren in het dialoogvenster dat wordt geopend na het aanroepen van deze opdracht.

"Rechten"- hiermee kunt u de machtigingen voor een bestand (of een groep bestanden) in een dialoogvenster wijzigen.

"Symbolische link"- creëert een symbolische link. Standaard wordt het bestand dat is gemarkeerd in het actieve paneel als adresseerbaar genomen en de gemaakte link heeft dezelfde naam en bevindt zich in de map die in het passieve paneel is geopend. De gebruiker kan dit wijzigen in het dialoogvenster dat wordt geopend.

"Eigenaar/Groep"- verandert de eigenaar en/of groep waartoe een bestand/directory behoort.

"Machtigingen (geavanceerd)"- hiermee kunt u tegelijkertijd de toegangsrechten tot het bestand en de eigenaar en / of groep wijzigen. Machtigingen worden weergegeven als drie rwx-reeksen voor eigenaar, groep en alle gebruikers.

"Hernoemen"- hiermee kunt u de naam wijzigen/verplaatsen. Een analoog van een functie aangeroepen door . Standaard wordt het bestand (of de groep bestanden) gemarkeerd in het actieve paneel beschouwd als verplaatst/hernoemd, en de bestemming is de map die in het passieve paneel is geopend. Dit kan worden gewijzigd door de waarden van de velden te corrigeren in het dialoogvenster dat wordt geopend na het aanroepen van deze opdracht.

"Map maken"- maakt een map aan. Een analoog van een functie aangeroepen door . Standaard wordt de directory aangemaakt in de directory die in het actieve paneel is geopend. Dit kan worden gewijzigd door het volledige pad op te geven naar de map die moet worden gemaakt in het dialoogvenster dat wordt geopend.

"Verwijderen"- verwijdert een bestand/groep bestanden/map. Een analoog van een functie aangeroepen door .

"Verander map"- verandert de huidige map. Vergelijkbaar met het cd-commando in de Bash-shell. De gewenste directory wordt in het dialoogvenster ingevoerd.

"Markeer groep"- Markeert een groep bestanden met een masker in de map die in het actieve paneel is geopend. Een analoog van een functie aangeroepen met <+> op het optionele toetsenbord.

=====================================================

LABORATORIUMWERK Nr. 1 (tijd om te voltooien - 3 uur)

Onderwerp: ”Inleiding totschelp

1. Inleiding tot de schaal

Shell is een commando-interpreter (commandoprocessor) die fungeert als een interface tussen de gebruiker en de Unix-kernel. Solaris biedt drie hoofdschillen:

    De standaard Bourne-shell is /sbin/sh

    C-shell -- /bin/csh

    Korn-opdrachtprocessor-- ./bin/ksh

Naast de genoemde biedt Solaris extra shells:

    J shell -- /sbin/jsh

    Beperkte Korn l -- / usr/ bin/rsh

    T-shell -- /usr/bin/tcsh

    GNU Bourne Again -- /usr/bin/bash

    Z-shell - usr/bin/zsh

De keuze van de schaal is een kwestie van persoonlijke voorkeur.

2. Voer opdrachten uit

Elk commando in Unix bestaat uit de naam van het te starten programma (commando), opties (switches) en argumenten die aan het programma worden doorgegeven. Scheidingstekens op de opdrachtregel zijn spaties of tabs.

Voorbeeld

$ /bin/ping –t 10 192.168.2.13

argument

shell-prompt

Als het pad naar het uitvoerbare bestand niet is opgegeven bij het starten van het programma, kijkt het besturingssysteem achtereenvolgens door de mappen die zijn opgegeven in de PATH-variabele. Als er een programma met dezelfde naam in de doorbladerde map is, wordt het gestart voor uitvoering. De huidige werkdirectory wordt niet opgezocht bij het zoeken naar programma's, tenzij deze is ingesteld in de PATH-variabele.

! Om veiligheidsredenen wordt een beheerder geadviseerd om de huidige directory en home (persoonlijke) directory's van de gebruiker niet toe te voegen aan de PATH-variabele.

Voorbeelden

Het programma starten met het volledige pad

$ / usr/ lokaal/ bin/ mijn_ programma

Een programma starten vanuit een hogere (bovenliggende) map

$ ../ lokaal/ bin/ mijn_ programma

Het programma starten vanuit de huidige map

$ ./ mijn_ programma

3. Speciale tekens in de shell

Sommige tekens in de schaal hebben een speciale betekenis.

3.1. Genereringspatronen voor bestandsnamen

? (vraagteken) komt overeen met elk afzonderlijk teken behalve de eerste punt;

(vierkante haakjes) definieer een groep symbolen (één symbool uit de groep wordt geselecteerd);

- (minteken") definieert het bereik van geldige tekens;

! (Uitroepteken) verwerpt de groep tekens die erop volgt;

* (ster symbool) komt overeen met een willekeurig aantal tekens behalve de eerste punt.

3.2. I/O-omleidingssymbolen

< - invoeromleiding;

>, >> - outputomleiding;

2>, 2>> - omleiden van foutmeldingen;

| - transportband.

3.3. Wildcard symbolen

$variabele_naamq - variabele substitutie;

$(opdracht) of `commando` - opdrachtvervanging;

~ - tilde-substitutie.

4. Zoeken

Voor het snel doorzoeken van bestanden en mappen wordt het whereis-commando gebruikt, voor een diepere het find-commando (zoek naar bestanden die voldoen aan de opgegeven vereisten;).

5. vi teksteditor

De vi-teksteditor is een universele teksteditor die op elke Unix te vinden is. Naast het bewerken van tekstbestanden, kan de vi-editor worden gebruikt om de opdrachtregel te bewerken.

De vi-editor heeft 3 werkingsmodi (zie afbeelding).

De vi-editor openen

Verlaat vi

Het teken "~" (tilde) in de eerste positie markeert lege (niet-bestaande) regels van het bestand.

De hoofdmodus is commando, waarin commando's worden ingevoerd door op een bepaalde reeks toetsen te drukken (ze worden op geen enkele manier op het scherm weergegeven).

Door de tekst bladeren in de opdrachtmodus wordt uitgevoerd met behulp van pijlen en toetsen (links) (omlaag), (omhoog), (naar rechts).

Sommige vi-commando's staan ​​in de tabel.

De huidige regel verwijderen

Kopieer huidige regel naar klembord

Cursorbeweging

De met de cursor gemarkeerde tekens in de buffer plaatsen

Voeg onderaan een nieuwe regel in

Voeg bovenaan een nieuwe regel in

Toevoegen na cursor

Toevoegen na huidige regel

Plakken voor cursor

Invoegen vóór huidige regel

Een teken vervangen door een teken dat met het toetsenbord is ingevoerd

Tekst van klembord plakken

. (punt)

Voer de laatst uitgevoerde opdracht opnieuw uit

Laatste opdracht annuleren

Alle wijzigingen op de huidige regel ongedaan maken

Teken boven cursor verwijderen

In de invoermodus worden alle tekens die op het toetsenbord worden getypt in de tekst ingevoegd.

In de laatste regelmodus wordt de opdracht die u typt weergegeven op de laatste regel van het scherm.

6. Hulp

Unix heeft een elektronische handleiding die een beschrijving bevat van het doel van commando's, hun syntaxis, gebruiksvoorbeelden, enz. De handleiding wordt aangeroepen door het man-commando:

7. Basis shell-commando's

wie– het weergeven van informatie over actieve gebruikers;

echo– output berichten naar de terminal;

banier– berichten in hoofdletters naar de terminal sturen;

Mens– het online helpsysteem bellen;

datum – output van de huidige datum;

schrijven– verzending van berichten naar de terminal van een andere gebruiker;

bericht– toestemming/verbod om berichten van andere gebruikers weer te geven;

mail– verzenden/ontvangen van post;

nieuws- kennismaken met het nieuws van het systeem;

pwd– toon de absolute padnaam van de huidige werkdirectory;

CD– het wijzigen van de werkdirectory;

ls– het weergeven van informatie over de inhoud van de directory;

mkdir- het maken van een map;

rmdir– het verwijderen van een map;

aanraken– het bijwerken van de tijdstempel van het bestand;

cp– bestanden kopiëren;

kat- samenvoegen en weergeven van de inhoud van bestanden;

meer– paginering van bestandsinhoud.

mv – een bestand verplaatsen of hernoemen;

rm– het verwijderen van een bestand;

alias– creatie van een pseudoniem;

tr– karakter transformatie;

Uitgang- voltooiing van de huidige schelp-a;

tee– onderschepping van pijplijnresultaten;

snee – selectie van velden uit een string;

grep– zoeken op patroon;

pr– bestandsuitvoer naar standaarduitvoer in het opgegeven formaat;

soort- sorteren;

hoofd– uitvoer van de eerste regels van het bestand;

staart- voer de laatste regels van het bestand uit;

wc- tellen van het aantal karakters, woorden en regels;

lezen, echo - lezen en weergeven van variabele waarden;

test- evaluatie van de waarde van de uitdrukking;

expr, laat- berekening van rekenkundige uitdrukkingen;

8. Schelp-programma's

Met Shell kunt u een reeks opdrachten in een bestand opslaan en vervolgens uitvoeren. Om een ​​bestand uit te voeren met een shell-programma voor uitvoering, moet u het uitvoerrecht toevoegen aan de toegangsrechten:

$ chmod +x programma_bestandsnaam

Vertakking in shell-programma's wordt georganiseerd met behulp van operators:

als dan anders

Loop-instructies:

OPDRACHTEN

1. Welke van de volgende opdrachten zal resulteren in een welkomstbericht op het scherm? Wat zijn niet? Waarom?

$ echo hallo

$ echo hallo

$ echo HALLO, WERELD

$ banier Hallo

$ BANNER HALLO, WERELD

2. Druk een bericht af van meerdere regels met behulp van opdrachten echo en spandoek.

3. Voer de datum uit in twee regels: op de eerste regel - dag, maand, jaar, op de tweede regel - de huidige tijd, waarbij de uitvoer wordt voorzien van een opmerking.

4. Commando gebruiken: schrijven, stuur een bericht naar de console. Stuur berichten naar meerdere terminals tegelijk.

5. Commando gebruiken bericht, bepaal of berichten op uw terminal zijn toegestaan. Schakel berichten uit. Wat zal de reactie van het systeem zijn als iemand u een bericht probeert te sturen?

6. Geef je naam een ​​naam THUIS-catalogus.

7. Blader door de substructuur van mappen beginnend vanuit de /export/home map met behulp van de commando's cd, ls en pwd.

8.. Creëer in je THUIS-directory subdirectories van het formulier:

fruit bloemen

appel peer druiven roos violet paardebloem

donkergroen

9. In je zijn THUIS-directory, maak de volgende submappen aan met een enkele opdrachtregel:

A/B/C/D

10. In je zijn THUIS-directory, verwijder alle subdirectories van de directory A.

11. Binnen zijn THUIS-directory, maak een bestand macintosh in de bestaande catalogus appel en verschillende bestanden in mappen donker en groente. Ga naar de map fverlaagt. In de directory zijn fverlaagt, kopieer alle submappen fruiten samen met de bestanden die ze bevatten naar een speciaal aangemaakte map mand.

12. In de catalogus staan fverlaagt, verwijder map fruiten.

13. Lees het bestand .profiel commando's gebruiken kat en meer.

14. Aanmaken in THUIS- directory tekstbestand mijn bestand van meerdere regels met het commando kat. Een tekstbestand maken MjaFiel, door er dezelfde regels in te schrijven. Hoeveel bestanden heb je gekregen? Waarom?

15. Bekijk de inhoud van het bestand gemaakt in taak 2.2 mijn bestand. Kopieer het bestand mijn bestand archiveren mijn kopie. Bekijk de inhoud van beide bestanden.

16. Verplaats het bestand mijn kopie catalogiseren bloemen.

17. Binnen zijn THUIS-directory, maak een link mjakoppeling per bestand mijn kopie bevindt zich in de map bloemen. Bekijk het linkbestand.

18. Voeg een regel toe aan het bestand mijnkoppeling. Welke van de bestanden mijnkoppeling, mijnkopiëren, mijnhet dossier veranderd? Waarom?

19. Welk commando kan worden gebruikt om het aantal links te bepalen? Bepaal het aantal links voor bestanden mijnkoppeling, mijnkopiëren, mijnhet dossier.

Verwijder bestand mijn kopie. Wat is er met het linkbestand gebeurd? Bepaal het aantal links voor bestanden mijnkoppeling, mijnhet dossier.

20. Maak een alias dir Een die de inhoud van de huidige map in uitgevouwen formaat afdrukt.

21. Log uit en log opnieuw in. Werkt de alias? dir? Wat moet er worden gedaan zodat de alias niet "verloren" gaat tussen sessies?

22. Maak een alias punt, die een lijst met bestanden in de werkdirectory afdrukt waarvan de namen beginnen met een punt.

23. Commando gebruiken aanraken, maak bestanden in een nieuwe map met namen zodanig dat tegelijkertijd:

Sjabloon a* overeenkomende 5 bestanden;

Sjabloon * a overeenkomende 4 bestanden;

Sjabloon ??.? overeenkomende 3 bestanden;

Sjabloon * aa* overeenkomende 2 bestanden;

Sjabloon??? kwam overeen met 1 bestand.

24. Welke opdracht moet worden ingevoerd om het volgende te doen:

a) de namen weergeven van alle bestanden die beginnen met een punt;

b) de namen weergeven van alle bestanden die eindigen op ".tekst";

c) druk de namen af ​​van alle bestanden die het woord bevatten "mijn";

25. Verander alle kleine letters in hoofdletters in een bepaald bestand, alle hoofdletters in kleine letters in een ander bestand. Verwijder alle dubbele spaties uit het bestand.

26. Maak een bestand met de naam * . Verwijder alleen dit bestand. Wees voorzichtig bij het gebruik van karakters voor het genereren van bestandsnamen!

27. Maak een bestand met een spatie in de naam. Hoe verwijder je zo'n bestand?

28. Commando gebruiken kat verdubbel de inhoud van het bestand door de originele inhoud toe te voegen aan het einde van hetzelfde bestand. Ga naar map bloemen. Toevoegen aan bestand lijst lijst directory-inhoud bloemen. De inhoud van een bestand bekijken

29. Probeer te lezen met het commando kat niet-bestaand bestand. Wat is de reactie van het systeem? Doe hetzelfde door foutmeldingen om te leiden naar een bestand myerror. Wat zie je op het scherm? Bestand bekijken myerror.

30. Maak een pijplijn om alleen de namen en machtigingen weer te geven van de bestanden die zich momenteel in uw werkmap bevinden.

31. Wijzig de ingebouwde pijplijn zodat de lijst in een bestand wordt opgeslagen lijst Jouw zijn THUIS-directory, en alleen het aantal bestanden in de lijst werd weergegeven.

32. Geef de inhoud van een bestand weer /etc/passwd, gesorteerd op het gebruikersnaamveld.

33. Maak een alias gelogdAan, die een alfabetisch geordende lijst weergeeft van de namen van de gebruikers die momenteel zijn aangemeld bij het systeem.

33. Geef de huidige datum in hoofdletters weer met behulp van de opdrachten datum en spandoek.

34. Toewijzen aan een variabele IK BEN Uw registratienaam. Voer een andere uit schelp. Zie je deze variabele? Wat moet er worden gedaan om het in de gegenereerde te zien? schelp? De waarde van een variabele wijzigen IK BEN in gegenereerd schelp. Exit voortgebracht schelp. Kijk naar de waarde van deze variabele in het origineel schelp. Leg het resultaat uit.

35. Schrijf schelp-programma info, waarbij de gebruiker wordt gevraagd een naam, adres, dag, maand en geboortejaar in te voeren en deze informatie in omgekeerde volgorde weer te geven

36. Schrijf schelp- een programma dat een uitnodiging toont om een ​​nummer in te voeren, sla het ingevoerde nummer op in een variabele ja en druk een bericht af “Y is groter dan 7”, als waarde ja groter dan 7, en "J is"niet groter dan 7” anders.

37. Schrijf een shell-programma dat de volgende statistieken weergeeft:

a) uw naam;

b) het aantal argumenten waarmee het wordt gelanceerd;

c) drukt elk van zijn argumenten en de lengte van het argument in karakters af;

38. Schrijf schelp-een programma dat het aantal argumenten op de opdrachtregel bepaalt en een foutmelding geeft als het aantal argumenten niet gelijk is aan drie, of de argumenten zelf als hun aantal gelijk is aan drie.

39. Schrijf schelp- een programma dat u vraagt ​​om een ​​gebruikers-ID in te voeren, de ID controleert op overeenstemming met de ID's die in het systeem worden gebruikt en de volledige naam weergeeft THUIS-directory of, in het geval van een ongeldige identifier, een foutmelding geven.

40. Schrijf een shell-programma Hallo, met het volgende antwoord op opdrachtregelargumenten:

Argument "-d"- het programma zal de opdracht uitvoeren datum;

Argument "-l"- het programma toont de inhoud van de huidige directory;

    als er geen argumenten of ongeldige argumenten op de opdrachtregel staan, zal het programma hulp over de opties weergeven.

41. Schrijf een programma woorden, die de gebruiker zal vragen om één woord tegelijk in te voeren totdat hij een woord invoert einde. Onthoud alle ingevoerde woorden. Na het invoeren van het woord einde alle ingevoerde woorden op het scherm weergeven.

42. Wijzig de systeemprompt om de volledige padnaam van de huidige werkdirectory op te nemen .

43. Schrijf een programma virus, die een uitvoerbare kopie van zichzelf maakt met een andere naam en zichzelf vervolgens verwijdert.

44. Schrijf een programma virus2 , die de huidige map doorzoekt naar programma's in de commandotaal en aan hun tekst een commando toevoegt om het woord weer te geven besmet!”.

45. Schrijf een programma virus3 , dat zijn eigen code toevoegt aan de programma's in de commandotaal die het vindt om andere programma's te infecteren.

46. ​​​​Schrijf een programma virus4 door uw virus zo aan te passen dat bij besmetting de infecterende code uit het infecterende programma wordt verwijderd.

47. Schrijf een programma antivirus, die alle shell-programma's zou vinden die door uw virus zijn geïnfecteerd.

48. Pas het ontwikkelde programma aan zodat het niet alleen geïnfecteerde programma's vindt in de door het opgegeven map, maar ze ook "genezen", door de geïnfecteerde versie op te slaan in een nieuw bestand, met de naam waarvan het einde . vir, en het verwijderen van het execute attribuut uit een dergelijk bestand.

49. Schrijf een programma virus5 , welke zou:

a) zou shell-programma's in de huidige map en zijn submappen alleen met een virus infecteren als de gebruiker de opdracht invoerde ls;

b) gedraag je als een team ls, zonder iets uit te geven op de terminal van hun werk.

50. Schrijf een virus6-programma op basis van programma's virus2 -virus5 , waarvan de infecterende code niet kon worden gedetecteerd door het door u ontwikkelde programma antivirus, en infectie zou optreden bij elke waarde van de variabele PAD.

51. Schrijf een programma supervirus, waarvan de lancering uw bestanden infecteert met het virus dat in de vorige taak is ontwikkeld, en elke keer dat u zich aanmeldt bij het systeem, wordt een poging gedaan om de bestanden van uw kameraden te infecteren. Programma supervirus wist zichzelf na de eerste run.

52. Schrijf een programma superantivirus, die alle bestanden in de opgegeven map en zijn submappen van alle ontwikkelde virussen detecteert en volledig "genezen" (als de bijbehorende optie is opgegeven).

    Besturingssystemen van de Linux-familie, evenals alle andere besturingssystemen, vereisen een interface voor interactie tussen de componenten van het computersysteem en de eindgebruiker, d.w.z. de aanwezigheid van een softwarelaag die invoer van commando's en parameters verschaft om de gewenste resultaten. Deze softwarelaag heet "schelp" of, in het Engels - schelp.

Wat is een schil?

opdrachtshell ( schelp) zorgt voor interactie tussen de gebruiker en de Linux-besturingssysteemomgeving. Het is een gespecialiseerd softwareproduct dat de uitvoering van opdrachten en de resultaten van hun uitvoering biedt, of, als het erg vereenvoudigd is, de shell is een programma dat is ontworpen om de uitvoering van andere programma's op verzoek van de gebruiker te garanderen. Een voorbeeld van een shell is bijvoorbeeld een opdrachtinterpreter commando.com MS DOS-besturingssysteem of shell bash Unix/Linux-besturingssystemen.

Alle shells hebben vergelijkbare functies en eigenschappen, in overeenstemming met hun hoofddoel - om gebruikersopdrachten uit te voeren en de resultaten van hun uitvoering weer te geven:

Opdrachtregel interpretatie.

Toegang tot opdrachten en hun resultaten.

Ondersteuning voor variabelen, speciale tekens en gereserveerde woorden.

Bestanden verwerken, standaard invoer- en uitvoerbewerkingen.

Implementatie van een speciale shell-programmeertaal.

    Voor besturingssystemen van de Unix / Linux-familie is het mogelijk om verschillende shells te gebruiken die verschillen in eigenschappen en methoden van interactie met het systeem. De meest voorkomende schelpen zijn:

sh- schelp Bourne, klassieke Unix-shell

bash schelp Weer Bourne(GNU Bourne-Again Shell). Misschien wel de meest voorkomende op dit moment, de shell in de omgeving van de Linux-familie van besturingssystemen.

ksh- schelp Korn, ontworpen als een shell-ontwikkeling Bourne met opdrachtregelgeschiedenis en de mogelijkheid om opdrachten te bewerken.

csh- schelp C, met behulp van de syntaxis van een populaire programmeertaal C

tcsh- shell-versie C met interactieve opdrachtregelbewerking.

Er kunnen verschillende shells op het systeem worden geïnstalleerd en het is voor elke gebruiker mogelijk om zijn eigen standaardshell te gebruiken. Dit alles gebeurt natuurlijk automatisch tijdens het downloaden en registreren van een gebruiker.

    Tijdens het laden van besturingssystemen van de Linux-familie wordt, na het laden van de systeemkernel, een overgang naar de interactieve modus uitgevoerd - de modus van interactie tussen de gebruiker en het besturingssysteem. Op Linux is het eerste proces dat tijdens het opstarten start het initialisatieprogramma. in het, die de inhoud van het configuratiebestand leest /etc/inittab, bepaalt de lijst en kenmerken van de beschikbare terminals in het systeem en roept het interactieve inlogprogramma op getty A die de gebruikersnaam prompt weergeeft. Na het invoeren van de gebruikersnaam en het wachtwoord, zal het programma getty roept het programma op Log in, die het account valideert, naar de homedirectory van de gebruiker navigeert en de controle overdraagt ​​aan het initiële opstartprogramma van de sessie, wat meestal het shell-programma van de gebruiker is, waarvan de specifieke variant wordt bepaald door de inhoud van het bestand /etc/passwd voor deze rekening. Bijvoorbeeld:

gebruiker1:x:508:511::/home/gebruiker1:/bin/sh
interbase:x:510:511::/home/interbase:/bin/csh
apb:x:511:513:apb:/home/apb:/bin/bash

Zoals je kunt zien aan de inhoud van het bestand /etc/passwd, voor de gebruiker gebruiker1 shell wordt gelanceerd sh(Bourne shell), per gebruiker tussenbasis- schelp csh(C-shell) en voor de gebruiker apb- schelp bash(Bourne opnieuw). Nadat de shell is gestart, wordt een opdrachtprompt op het scherm weergegeven (meestal in de vorm van een dollarteken) $ als het werk wordt gedaan in de context van een standaard gebruikersaccount, of lb # als de shell wordt gebruikt onder een geprivilegieerde gebruikersaccount ( wortel).

Bij het verlaten van de shell geeft de systeemkernel de controle terug aan het programma in het, waarmee het inlogproces opnieuw wordt gestart en de gebruikersnaamprompt op de terminal wordt weergegeven. Het verlaten van de shell kan op twee manieren worden gedaan:

Door het team Uitgang uitgevoerd door de gebruiker

Wanneer het shell-proces een signaal ontvangt doden verzonden door de kernel, bijvoorbeeld wanneer het systeem opnieuw wordt opgestart.

Opdrachtregel interpretatie.

    Gebruikersinvoer als reactie op een shell-prompt wordt gewoonlijk aangeduid als opdrachtregel of team. Een Linux-opdracht is een tekenreeks van de opdrachtnaam en argumenten, gescheiden door spaties. Argumenten geven de opdracht extra opties die het gedrag ervan bepalen. De meest gebruikte argumenten zijn: opties en namen bestanden en mappen. Bijvoorbeeld opdrachtregel

ls -l file01 file02

Bevat de opdracht ls, de optie -l en de twee bestandsnamen file01 file02 .

Bij gebruik van meerdere opties kunnen deze worden gecombineerd. De varianten van de volgende commando's zijn bijvoorbeeld identiek:

Ls-l-d
ls-ld

De commando's die deel uitmaken van de shell heten ingebouwd. Dergelijke commando's omvatten bijvoorbeeld cd, if, case, enz. Natuurlijk kunnen ingebouwde commando's verschillen voor verschillende shells. Naast ingebouwde opdrachten is het mogelijk om programmamodules te gebruiken die afzonderlijke uitvoerbare bestanden of bestanden zijn scripts of scenario's- gewone tekstbestanden met sequentieel uitgevoerde regels met shell-commando's. Sommige scripts (scripts) kunnen worden uitgevoerd door Linux-processen, zoals de taakplanner cron. Taakplanner is in de regel ontworpen om geplande systeembeheertaken automatisch uit te voeren. Taken cron zijn commando's of scripts en worden automatisch uitgevoerd, zonder enige menselijke tussenkomst en kunnen worden uitgevoerd in de context van verschillende gebruikersaccounts. In het geval dat de taak van de planner de uitvoering van een script omvat, is er een probleem bij het kiezen van een shell die moet worden gestart als een onderliggend proces cron om opdrachten uit het scriptbestand te verwerken - de shell kan tenslotte elke willekeurige zijn, en de syntaxis van het script omvat in de regel het gebruik van een specifieke shell waarvoor het is geschreven. Om dit probleem op te lossen, is het in de Linux-familie van besturingssystemen gebruikelijk om in de eerste regel van het script het type shell aan te geven dat nodig is voor de uitvoering ervan, in de vorm:

#!/bin/bash- voor shell bash

#!/bin/sh- voor shell sh

Teken # is een teken van een opmerking en de tekens die erop volgen, worden niet als een opdracht geïnterpreteerd. Met deze techniek kunt u expliciet specificeren welke shell moet worden gebruikt om de daaropvolgende inhoud van het bestand te verwerken. Als het script geen item bevat dat expliciet de vereiste shell definieert, dan worden de instellingen van het account gebruikt in de context waarin dit script wordt uitgevoerd. In dit geval is het mogelijk dat een script dat voor een shell is geschreven, bijvoorbeeld tch zal worden doorgegeven aan de shell voor uitvoering bash, waardoor het onmogelijk wordt om uit te voeren.

Bij het uitvoeren van commando's of scripts, omgevingsvariabelen(in Engels - omgeving, waarvan de waarden kenmerkend zijn voor de softwareomgeving waarin de opdrachten worden uitgevoerd. Dergelijke variabelen kunnen algemene systeeminstellingen, grafische of opdrachtshell-opties, uitvoerbare bestandspaden, enzovoort bevatten. Waarden van omgevingsvariabelen worden ingesteld op systeemniveau (voor alle gebruikers) en op het niveau van een bepaalde gebruiker. Om omgevingsvariabelen op systeemniveau in te stellen, wordt de inhoud van de bestanden gebruikt:

/etc/profiel- stelt alleen variabelen in voor shells. Kan alle scripts uitvoeren in shells die compatibel zijn met Bourne-shell.

/etc/bash.bashrc- stelt alleen variabelen in voor interactieve shells. Het voert ook bash-scripts uit.

/etc/omgeving- gebruikt door de PAM-env-module. In dit bestand kunnen alleen paren worden opgegeven. naam=waarde.

Elk van deze bestanden heeft zijn eigen toepassing, dus u moet zorgvuldig degene kiezen die bij uw doeleinden past. Als u bijvoorbeeld een aangepaste map wilt toevoegen ~/bin in een variabele PAD plaats voor alle gebruikers de volgende code in een van de initialisatiebestanden van de systeemomgeving (/etc/profile of /etc/bash.bashrc):

# Als het gebruikers-ID groter is dan of gelijk is aan 1000 en de map ~/bin bestaat en het

#was niet eerder toegevoegd aan de PATH-variabele,

# exporteer ~/bin naar $PATH.

Als [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin)

PATH exporteren=$HOME/bin:$(PATH)

Op Linux-besturingssystemen wordt doorgaans een gebruikers-ID van minder dan 1000 of minder dan 500 gebruikt voor serviceaccounts. In dit voorbeeld wordt de omgevingsvariabele ingesteld voor alle lokale systeemgebruikers met een ID van 1000 of hoger.

Als u de omgeving voor een bepaalde gebruiker moet wijzigen, wijzigt u de inhoud van de omgeving van de gebruiker:

- ~/.bash_profile, ~/.bash_login enzovoort. - shell-initialisatiebestanden uit de thuismap van de gebruiker.

- ~/.profiel- initialisatiebestand voor gebruikersprofielen. Wordt door veel shells gebruikt om omgevingsvariabelen te definiëren.

~/.pam_environment- een aangepast equivalent van het /etc/environment-bestand, dat wordt gebruikt door de PAM-env-module.

Om bijvoorbeeld de map ~/bin van de gebruiker toe te voegen aan het zoekpad voor de uitvoerbare bestanden die zijn opgegeven door de variabele PAD, bijvoorbeeld in een bestand ~/.profiel zet de regel:

export PATH="$(PATH):/home/gebruiker/bin"

Om omgevingsvariabelen voor grafische toepassingen in te stellen, wordt de inhoud van de configuratiebestanden voor de grafische omgeving van de gebruiker gebruikt. ~/.xinitrc

Het is veel gebruikelijker dat omgevingsvariabelen worden ingesteld voor de huidige gebruikerssessie. Om bijvoorbeeld een aangepaste map toe te voegen: ~/bin in het uitvoerbare zoekpad:

export PATH=~/bin:$PATH

Nieuwe variabele waarde PAD duurt slechts tot het einde van de huidige gebruikerssessie.

Om de waarde van een variabele te bekijken, kunt u het commando echo $variabele, Bijvoorbeeld:

echo $PATH

Momenteel is de meest voorkomende shell, zoals hierboven vermeld, bash. Dit is voornamelijk te wijten aan het feit dat de schaal bash is een sh- een compatibele opdrachtshell die handige functies van Korn-shells toevoegt ( ksh) en C-shell ( csh). schelp bash kan de meeste shellscripts uitvoeren zonder enige wijziging sh en probeert zo dicht mogelijk bij de standaard te komen POSIX, wat tot veel verbeteringen heeft geleid, zowel voor programmering als voor interactief gebruik. In moderne uitvoering bash er is een bewerkingsmodus voor de opdrachtregel, een onbeperkte grootte van de opdrachtgeschiedenis, taakbeheertools, de mogelijkheid om aliassen te gebruiken, een uitgebreide lijst met ingebouwde opdrachten, shell-functies, enz. Over het algemeen, bash het beste voldoet aan de behoeften van de gemiddelde gebruiker, waardoor het het meest wordt gebruikt in de Linux-omgeving.

In de beginfase bash zonder opdrachtregelopties start de shell in interactieve modus, waarbij een opdrachtprompt op het scherm wordt weergegeven. Een interactieve shell leest typisch gegevens van en schrijft gegevens naar de terminal van de gebruiker, het standaard invoerapparaat is het toetsenbord en het standaard uitvoerapparaat is het beeldscherm. De gebruiker voert opdrachten in op het toetsenbord en het resultaat van hun uitvoering wordt op het display weergegeven.

Zeker, bijna alle lezers van Habr kennen sh en bash-shells. Ook hebben de meesten van ons iets gehoord over zsh en tcsh. De lijst met bestaande shells houdt daar echter niet op. Het is voorwaardelijk mogelijk om ze in drie groepen te verdelen:

  • Bourne shell-klonen (bash, zsh)
  • C-shell (csh, tcsh)
  • Gebaseerd op populaire programmeertalen (psh, ipython, scsh)
  • Exotisch, specifiek en de rest
De meest interessante zullen worden besproken.

Het doel van het schrijven van dit artikel was niet om alle bestaande opdrachtshells te herzien of te classificeren. Ik wil het alleen hebben over enkele interessante producten op dit gebied, om de horizon van de lezer te verbreden. Ik zal blij zijn. als ik hierdoor iemand aanmoedig om het onderwerp nader te bestuderen of zelfs over te stappen op een andere wandeling.
Eerst even kort wat het is. Een opdrachtshell of opdrachtinterpreter is een toepassing die de gebruiker een opdrachtregelinterface biedt waarin hij opdrachten afzonderlijk invoert of scripts uitvoert die uit een lijst met opdrachten bestaan. Mondeling en in informele teksten wordt het vaak "ging" genoemd, van de Engelse shell - een shell.

De POSIX-compatibele shells die afstammen van de Bourne-shell worden het meest gebruikt, dus laten we ermee beginnen.

Bourne-schelp en zijn klonen

Bourne schelp, uitvoerbaar: sh. Een opdrachtshell genoemd naar de maker Stephen Bourne. De meeste operators zijn door hem geleend van de taal Algol 68. Het werd uitgebracht in de 7e editie van het UNIX-besturingssysteem, waar het de standaard shell was. Tot nu toe heeft de overgrote meerderheid van Unix-achtige systemen /bin/sh, een symbolische of harde link naar een sh-compatibele shell.

Bourne weer shell, uitvoerbaar: bash. De naam kan worden vertaald als "Revived Bourne Walked". Waarschijnlijk de meest populaire shell tot nu toe. De facto standaard voor Linux. Ik zal er niet over uitweiden, want. er zijn veel goede artikelen over bash op internet. Hier en hier bijvoorbeeld.

Z-schaal, uitvoerbaar: zsh. Een gratis moderne sh-compatibele schaal. Het heeft een aantal voordelen ten opzichte van bash, voornamelijk gerelateerd aan het werken in de interactieve modus. Ze schreven erover op Habré en
Daarnaast zijn er nogal wat schelpen die in deze groep vallen: Kornschelp (ksh) en Almquistschelp (ash) etc, maar we zullen er niet in detail op ingaan.

C-schaal

C-schaal, uitvoerbaar: csh Een opdrachtshell ontwikkeld door vi-auteur Bill Joy. Zoals de naam al aangeeft, werd de C-taal als basis genomen voor de csh-scripttaal. in die tijd, in 1978, was het de meest populaire programmeertaal onder ontwikkelaars en gebruikers van BSD UNIX. Op dit moment is de meer populaire gratis implementatie van csh tcsh.

Tenex C Shell, uitvoerbaar: tcsh. Het was in tcsh dat automatisch aanvullen voor het eerst verscheen. Het is de standaard shell in FreeBSD. U kunt er meer over lezen.
Om het verschil in syntaxis visueel te laten zien, zal ik verschillende voorbeelden geven van scripts die hetzelfde doen voor csh en sh-compatibele commando-interpreter.

Voorwaardelijke constructie:

Een lus die de eerste 10 machten van twee berekent:

#!/bin/sh i=2 j=1 while [ $j -le 10]; do echo "2 **" $j = $i i=`expr $i "*" 2` j=`expr $j + 1` klaar #!/bin/csh set i = 2 set j = 1 while ($j<= 10) echo "2 **" $j = $i @ i *= 2 @ j++ end

De lijst met functies die door recente versies van bash, zsh en tcsh worden ondersteund, lijkt echter erg op elkaar en de keuze voor een bepaalde shell is meestal een kwestie van smaak. Bij minder gebruikelijke schelpen is de situatie anders. Hier zijn de verschillen groter.

Commandoshells gebaseerd op populaire programmeertalen.

Perl Shell, uitvoerbaar: psh. Een shell die de kenmerken van de bovengenoemde shells combineert met de kracht van de Perl-taal. Omdat psh is geschreven in perl en kan zelfs op Windows draaien. Enkele voorbeelden van het gebruik van psh:
ls | s/y/k/ # Vervanging van reguliere expressies ls | ( print ++$i, ": $_"; )q # Snelfilter. Binnen de accolades bevindt zich een perl-expressie waarbij $_ één regel uitvoer bevat. netstat | ($_>2; )g # grep-filters. Alleen die regels worden afgedrukt waarvoor de expressie tussen haakjes true retourneert opdracht >[=FOO] # Redirect naar een open bestandsdescriptoropdracht > file # Gelijk aan opdracht 2> file in bash. Leidt de uitvoer en foutstroom van grep foo lib/**/*.pm om naar een bestand # Gebruik **, wat de huidige map en alle submappen betekent

Scho, uitvoerbaar ssh. Een open source-commandointerpreter die als scripttaal Schema 48 gebruikt. Het ondersteunt geen standaardfuncties voor andere shells (opdrachtgeschiedenis, tekstbewerking op de opdrachtregel, voltooiing van pad/opdracht). Scripting wordt aanbevolen, maar niet voor interactief werk. Kan liefhebbers van functioneel programmeren aanspreken. Het volgende is een voorbeeld van een script dat de namen weergeeft van alle uitvoerbare bestanden die zich in mappen van de PATH-omgevingsvariabele bevinden
#!/usr/local/bin/scsh -s !# (definieer (uitvoerbare bestanden) (with-cwd dir (filter bestand-uitvoerbaar? (directory-bestanden dir #t)))) (definieer (writeln x) (weergave x) (newline)) (voor elke writeln (append-map uitvoerbare bestanden ((infix-splitter ":") (getenv "PATH"))))

IPython. Dit is een interactieve shell voor de programmeertaal Python, die een aantal extra functies heeft. IPython heeft een speciaal profiel om als systeemschil te fungeren. Hoe u deze modus start, hangt, zoals ik het begrijp, af van de versie, maar op mijn machine ziet het er als volgt uit:
ipython3 --profile=pysh

Er is al heel wat geschreven over IPython, ook in het Russisch (links aan het einde van het artikel). Ik zal proberen de belangrijkste kenmerken ervan op te sommen in termen van gebruik als een opdrachtshell:

  • Cross-platform. Er is zelfs een versie voor Windows
  • Python versie 2.x of 3.x als scripttaal, verbeterde introspectie
  • Automatisch aanvullen van Python-code, evenals bestandsnamen en systeemopdrachten.
  • Opdrachtgeschiedenis en daarop gebaseerde macro's
  • Een mechanisme dat navigatie in mappen, bladwijzers en meer versnelt
Zoals je kunt zien, is IPython minstens zo interactief als bash. Wat scripts betreft, is IPython handig voor degenen die python beter kennen dan bash. In feite zullen scripts op IPython alleen verschillen van pure python door een vereenvoudigde aanroep van systeemopdrachten. Hier zijn enkele voorbeelden van het integreren van python- en systeemopdrachten:
# Stel dat we de totale grootte van dpkg-logbestanden willen berekenen: In: cd /var/log/ /var/log In: log_files = !ls -l dpkg.log* In: log_files Out: "-rw-r-- r-- 1 root root 1824 3 november 16:41 dpkg.log" In : voor regel in log_files: ....: size += int(line.split()) ....: In: size Out: 1330009 # . .. of achtereenvolgens tien hosts pingen In : for i in range(100,110): ....: !ping -c 1 192.168.0.$i ....:
Rest
Dit is natuurlijk geen volledige lijst van zelfs populaire shells. Naast de bovenstaande categorieën zijn er ook categorieën die hun eigen syntaxis gebruiken die niet compatibel zijn met sh en die geen bestaande PL's kopiëren. Een voorbeeld is de vriendelijke interactieve schelp (vis). Maar uiteindelijk wil ik je er niet over vertellen, maar over een meer specifieke slaapschaal.

Slaap dummy shell, uitvoerbaar: slaapmuts. Strikt genomen kan sleepshell geen opdrachtprocessor worden genoemd, omdat: hij weet niet hoe hij commando's moet verwerken. En het kan helemaal niets, behalve het periodiek schrijven van sterretjes "*" naar de standaarduitvoer. Het wordt echter juist gebruikt als een opdrachtshell, en dit is waarom: Laten we zeggen dat we iemand de mogelijkheid willen bieden om ssh-tunnels te maken via onze server met Linux of Unix. Lees meer over ssh-tunneling. Maar we hebben niet tegelijkertijd nodig dat deze iemand toegang heeft gekregen tot de opdrachtregel en het bestandssysteem van onze server. Voor een dergelijk geval is sleepshell bedoeld. We maken een account op de server aan als een shell ervoor, installeren sleepshell. De accounteigenaar kan poorten verbinden en doorsturen, maar kan geen opdrachten uitvoeren.

Dat is alles. Hoop dat het interessant was. Ik zal blij zijn met eventuele opmerkingen en advies over de tekst van het artikel.

Gerelateerde Links
www.faqs.org/faqs/unix-faq/shell/shell-differences - overzichtstabel van shell-verschillen en overeenkomsten
www.mariovaldez.net/software/sleepshell - Sleep Dummy Shell
ipython.org/ipython-doc/dev/interactive/shell.html - IPython als systeemschil
www.opennet.ru/base/dev/ipython_sysadmin.txt.html - IPython-shell als systeembeheerderstool

Zeker, bijna alle lezers van Habr kennen sh en bash-shells. Ook hebben de meesten van ons iets gehoord over zsh en tcsh. De lijst met bestaande shells houdt daar echter niet op. Het is voorwaardelijk mogelijk om ze in drie groepen te verdelen:

  • Bourne shell-klonen (bash, zsh)
  • C-shell (csh, tcsh)
  • Gebaseerd op populaire programmeertalen (psh, ipython, scsh)
  • Exotisch, specifiek en de rest
De meest interessante zullen worden besproken.

Het doel van het schrijven van dit artikel was niet om alle bestaande opdrachtshells te herzien of te classificeren. Ik wil het alleen hebben over enkele interessante producten op dit gebied, om de horizon van de lezer te verbreden. Ik zal blij zijn. als ik hierdoor iemand aanmoedig om het onderwerp nader te bestuderen of zelfs over te stappen op een andere wandeling.
Eerst even kort wat het is. Een opdrachtshell of opdrachtinterpreter is een toepassing die de gebruiker een opdrachtregelinterface biedt waarin hij opdrachten afzonderlijk invoert of scripts uitvoert die uit een lijst met opdrachten bestaan. Mondeling en in informele teksten wordt het vaak "ging" genoemd, van de Engelse shell - een shell.

De POSIX-compatibele shells die afstammen van de Bourne-shell worden het meest gebruikt, dus laten we ermee beginnen.

Bourne-schelp en zijn klonen

Bourne schelp, uitvoerbaar: sh. Een opdrachtshell genoemd naar de maker Stephen Bourne. De meeste operators zijn door hem geleend van de taal Algol 68. Het werd uitgebracht in de 7e editie van het UNIX-besturingssysteem, waar het de standaard shell was. Tot nu toe heeft de overgrote meerderheid van Unix-achtige systemen /bin/sh, een symbolische of harde link naar een sh-compatibele shell.

Bourne weer shell, uitvoerbaar: bash. De naam kan worden vertaald als "Revived Bourne Walked". Waarschijnlijk de meest populaire shell tot nu toe. De facto standaard voor Linux. Ik zal er niet over uitweiden, want. er zijn veel goede artikelen over bash op internet. Hier en hier bijvoorbeeld.

Z-schaal, uitvoerbaar: zsh. Een gratis moderne sh-compatibele schaal. Het heeft een aantal voordelen ten opzichte van bash, voornamelijk gerelateerd aan het werken in de interactieve modus. Ze schreven erover op Habré en
Daarnaast zijn er nogal wat schelpen die in deze groep vallen: Kornschelp (ksh) en Almquistschelp (ash) etc, maar we zullen er niet in detail op ingaan.

C-schaal

C-schaal, uitvoerbaar: csh Een opdrachtshell ontwikkeld door vi-auteur Bill Joy. Zoals de naam al aangeeft, werd de C-taal als basis genomen voor de csh-scripttaal. in die tijd, in 1978, was het de meest populaire programmeertaal onder ontwikkelaars en gebruikers van BSD UNIX. Op dit moment is de meer populaire gratis implementatie van csh tcsh.

Tenex C Shell, uitvoerbaar: tcsh. Het was in tcsh dat automatisch aanvullen voor het eerst verscheen. Het is de standaard shell in FreeBSD. U kunt er meer over lezen.
Om het verschil in syntaxis visueel te laten zien, zal ik verschillende voorbeelden geven van scripts die hetzelfde doen voor csh en sh-compatibele commando-interpreter.

Voorwaardelijke constructie:

Een lus die de eerste 10 machten van twee berekent:

#!/bin/sh i=2 j=1 while [ $j -le 10]; do echo "2 **" $j = $i i=`expr $i "*" 2` j=`expr $j + 1` klaar #!/bin/csh set i = 2 set j = 1 while ($j<= 10) echo "2 **" $j = $i @ i *= 2 @ j++ end

De lijst met functies die door recente versies van bash, zsh en tcsh worden ondersteund, lijkt echter erg op elkaar en de keuze voor een bepaalde shell is meestal een kwestie van smaak. Bij minder gebruikelijke schelpen is de situatie anders. Hier zijn de verschillen groter.

Commandoshells gebaseerd op populaire programmeertalen.

Perl Shell, uitvoerbaar: psh. Een shell die de kenmerken van de bovengenoemde shells combineert met de kracht van de Perl-taal. Omdat psh is geschreven in perl en kan zelfs op Windows draaien. Enkele voorbeelden van het gebruik van psh:
ls | s/y/k/ # Vervanging van reguliere expressies ls | ( print ++$i, ": $_"; )q # Snelfilter. Binnen de accolades bevindt zich een perl-expressie waarbij $_ één regel uitvoer bevat. netstat | ($_>2; )g # grep-filters. Alleen die regels worden afgedrukt waarvoor de expressie tussen haakjes true retourneert opdracht >[=FOO] # Redirect naar een open bestandsdescriptoropdracht > file # Gelijk aan opdracht 2> file in bash. Leidt de uitvoer en foutstroom van grep foo lib/**/*.pm om naar een bestand # Gebruik **, wat de huidige map en alle submappen betekent

Scho, uitvoerbaar ssh. Een open source-commandointerpreter die als scripttaal Schema 48 gebruikt. Het ondersteunt geen standaardfuncties voor andere shells (opdrachtgeschiedenis, tekstbewerking op de opdrachtregel, voltooiing van pad/opdracht). Scripting wordt aanbevolen, maar niet voor interactief werk. Kan liefhebbers van functioneel programmeren aanspreken. Het volgende is een voorbeeld van een script dat de namen weergeeft van alle uitvoerbare bestanden die zich in mappen van de PATH-omgevingsvariabele bevinden
#!/usr/local/bin/scsh -s !# (definieer (uitvoerbare bestanden) (with-cwd dir (filter bestand-uitvoerbaar? (directory-bestanden dir #t)))) (definieer (writeln x) (weergave x) (newline)) (voor elke writeln (append-map uitvoerbare bestanden ((infix-splitter ":") (getenv "PATH"))))

IPython. Dit is een interactieve shell voor de programmeertaal Python, die een aantal extra functies heeft. IPython heeft een speciaal profiel om als systeemschil te fungeren. Hoe u deze modus start, hangt, zoals ik het begrijp, af van de versie, maar op mijn machine ziet het er als volgt uit:
ipython3 --profile=pysh

Er is al heel wat geschreven over IPython, ook in het Russisch (links aan het einde van het artikel). Ik zal proberen de belangrijkste kenmerken ervan op te sommen in termen van gebruik als een opdrachtshell:

  • Cross-platform. Er is zelfs een versie voor Windows
  • Python versie 2.x of 3.x als scripttaal, verbeterde introspectie
  • Automatisch aanvullen van Python-code, evenals bestandsnamen en systeemopdrachten.
  • Opdrachtgeschiedenis en daarop gebaseerde macro's
  • Een mechanisme dat navigatie in mappen, bladwijzers en meer versnelt
Zoals je kunt zien, is IPython minstens zo interactief als bash. Wat scripts betreft, is IPython handig voor degenen die python beter kennen dan bash. In feite zullen scripts op IPython alleen verschillen van pure python door een vereenvoudigde aanroep van systeemopdrachten. Hier zijn enkele voorbeelden van het integreren van python- en systeemopdrachten:
# Stel dat we de totale grootte van dpkg-logbestanden willen berekenen: In: cd /var/log/ /var/log In: log_files = !ls -l dpkg.log* In: log_files Out: "-rw-r-- r-- 1 root root 1824 3 november 16:41 dpkg.log" In : voor regel in log_files: ....: size += int(line.split()) ....: In: size Out: 1330009 # . .. of achtereenvolgens tien hosts pingen In : for i in range(100,110): ....: !ping -c 1 192.168.0.$i ....:
Rest
Dit is natuurlijk geen volledige lijst van zelfs populaire shells. Naast de bovenstaande categorieën zijn er ook categorieën die hun eigen syntaxis gebruiken die niet compatibel zijn met sh en die geen bestaande PL's kopiëren. Een voorbeeld is de vriendelijke interactieve schelp (vis). Maar uiteindelijk wil ik je er niet over vertellen, maar over een meer specifieke slaapschaal.

Slaap dummy shell, uitvoerbaar: slaapmuts. Strikt genomen kan sleepshell geen opdrachtprocessor worden genoemd, omdat: hij weet niet hoe hij commando's moet verwerken. En het kan helemaal niets, behalve het periodiek schrijven van sterretjes "*" naar de standaarduitvoer. Het wordt echter juist gebruikt als een opdrachtshell, en dit is waarom: Laten we zeggen dat we iemand de mogelijkheid willen bieden om ssh-tunnels te maken via onze server met Linux of Unix. Lees meer over ssh-tunneling. Maar we hebben niet tegelijkertijd nodig dat deze iemand toegang heeft gekregen tot de opdrachtregel en het bestandssysteem van onze server. Voor een dergelijk geval is sleepshell bedoeld. We maken een account op de server aan als een shell ervoor, installeren sleepshell. De accounteigenaar kan poorten verbinden en doorsturen, maar kan geen opdrachten uitvoeren.

Dat is alles. Hoop dat het interessant was. Ik zal blij zijn met eventuele opmerkingen en advies over de tekst van het artikel.

Gerelateerde Links
www.faqs.org/faqs/unix-faq/shell/shell-differences - overzichtstabel van shell-verschillen en overeenkomsten
www.mariovaldez.net/software/sleepshell - Sleep Dummy Shell
ipython.org/ipython-doc/dev/interactive/shell.html - IPython als systeemschil
www.opennet.ru/base/dev/ipython_sysadmin.txt.html - IPython-shell als systeembeheerderstool