De Linux-opdrachtregelinterpreter selecteren. Commandoregelparsing, geselecteerde bash-functies. Enkele conventies van deze handleiding

Dit spiekbriefje behandelt de volgende onderwerpen: inleiding tot de shell, navigatie, basisopdrachten, omgevingsvariabelen, connectoren, leidingen, I/O-omleiding, machtigingen en sneltoetsen.

Bash Shell: Inleiding

Een shell, of shell, is een programma, in ons geval 'bash' genoemd, wat een afkorting is van Bourne Again Shell. De shell accepteert uw opdrachten en geeft deze door aan het besturingssysteem. Om met het systeem te communiceren, worden terminals gebruikt, zoals gnome-terminal, eterm, nxterm, enz.

Navigatie

IN Linux-bestanden en mappen hebben een hiërarchische organisatie, dat wil zeggen dat er een bepaalde initiële map is die de root wordt genoemd. Het bevat bestanden en submappen, die op hun beurt bestanden en hun eigen submappen bevatten.

pwd

Het pwd-commando, een afkorting van werkmap afdrukken, displays huidige locatie in de directorystructuur.

CD

Met het cd-commando kunt u naar nieuwe catalogus.

mkdir

Met de opdracht mkdir wordt een nieuwe map in de huidige map gemaakt.

Basiscommando's

man

Het man-commando geeft commandohandleidingen weer. Met het volgende commando wordt bijvoorbeeld alle informatie over het cat-commando weergegeven:

$ mens kat

kat

Het cat-commando leest het als argument doorgegeven bestand en drukt de inhoud ervan af standaard kanaal uitgang. Als u meerdere bestanden als argument doorgeeft, wordt de samengevoegde inhoud van alle bestanden afgedrukt.

echo

Het echo-commando drukt zijn argumenten af ​​naar standaarduitvoer.

$ echo Hallo wereld Hallo wereld

Als u echo zonder argumenten aanroept, wordt deze afgedrukt lege tekenreeks.

hoofd

Het head-commando leest de eerste 10 regels van elke ingevoerde tekst en voert deze uit naar de standaardpipe. Het aantal weergegeven regels kan worden gewijzigd:

$head -50 test.txt

staart

Het staartcommando werkt op dezelfde manier als het hoofdcommando, maar leest de regels vanaf het einde:

$ staart -50 test.txt

U kunt ook in realtime zien welke regels aan een bestand worden toegevoegd met behulp van de vlag -f:

$ staart -f test.txt

minder

Met het commando less kunt u in beide richtingen door een overgedragen bestand of stuk tekst navigeren.

$ minder test.txt $ ps aux | minder

Lees meer over het doel van het symbool | wordt hieronder behandeld in het geschiedenisgedeelte van de opdracht.

Veelgebruikte sneltoetsenBeschrijving
GGaat naar het einde van het bestand
GGaat naar het begin van het bestand
:50 Gaat naar regel 50 van het bestand
QGa minder uit
/zoektermZoek hieronder naar een string die overeenkomt met 'zoekterm' huidige lijn
/
?zoektermEen regel zoeken die overeenkomt met 'zoekterm' boven de huidige regel
? Gaat naar het volgende overeenkomende zoekresultaat
omhoogGaat één regel omhoog
omlaagVerplaatst één regel naar beneden
pagina omhoogGaat één pagina omhoog
pagina omlaagGaat één pagina naar beneden

WAAR

Het true-commando retourneert altijd nul als uitvoerstatus om succes aan te geven.

vals

Het false-commando retourneert altijd een niet-nul als uitvoerstatus om een ​​fout aan te geven.

$?

$? is een variabele die de uitvoerstatus van de laatste opdrachtuitvoering bevat. Status verwijst meestal naar de retourcode van het programma. 0 betekent succesvolle uitvoering van het programma; elke waarde groter dan 0 weerspiegelt het feit dat er tijdens de uitvoering fouten zijn opgetreden. Dit is trouwens de reden waarom in bash 0 als waar wordt beschouwd, en alles wat niet 0 is, is onwaar:

$waar$echo$?

0 $ false $ echo $?

1 grep:

Het grep-commando zoekt naar de doorgegeven tekenreeks in

opgegeven bestand $ cat users.txt gebruiker:student wachtwoord:123 gebruiker:leraar wachtwoord:321 $ grep "student` file1.txt gebruiker:student wachtwoord:123 grep kan ook meerdere bestanden accepteren en

reguliere expressies

om het tekstformaat te verduidelijken.

geschiedenis

Met de opdracht geschiedenis wordt de geschiedenis van de opdrachtregel weergegeven. Het wordt meestal gebruikt in combinatie met het grep-commando om naar een specifiek commando te zoeken. Met de volgende code worden bijvoorbeeld alle opdrachten gevonden die de tekenreeks g++ bevatten: $geschiedenis | grep g++ 155 g++ bestand1.txt 159 g++ bestand2.txt Het |.-symbool wordt hier ook gebruikt. - dit is de zogenaamde transportband (buis). Dankzij dit kun je de uitvoer van het ene commando omleiden naar de invoer van een ander commando - dus in het bovenstaande voorbeeld het hele verhaal, dat in

normale modus

uitvoer door het geschiedeniscommando rechtstreeks naar de terminaluitvoer zal worden omgeleid naar grep als invoer. We zullen de uitvoer van het geschiedeniscommando niet zien, maar we zullen de uitvoer van het grep-commando zien.

Dit kan behoorlijk moeilijk te begrijpen zijn zonder oefening, dus experimenteer zelf met de commando's ls , history , ps (hieronder beschreven) en stuur hun uitvoer bijvoorbeeld om naar grep , sed of minder.

exporteren

Met de exportopdracht worden omgevingsvariabelen ingesteld die worden doorgegeven aan onderliggende processen. Zo kun je bijvoorbeeld een naamvariabele met de waarde student doorgeven:

$ exportnaam=student ps.

Met de opdracht ps wordt informatie weergegeven over

lopende processen

  • $ ps PID TTY TIJD CMD 35346 pts/2 00:00:00 bash
  • Er worden vier elementen uitgevoerd:
  • Proces-ID (PID),
  • de naam van de opdracht die het proces heeft gestart (CMD).

akelig

De opdracht awk zoekt en vervangt tekst in bestanden met behulp van een bepaald patroon: awk "pattern (action)" test.txt

wg

Met de opdracht wget worden bestanden van internet gedownload en in de huidige map geplaatst.

$ wget https://github.com/mikeizbicki/ucr-cs100

nc

ping

Het ping-commando test een netwerkverbinding.

$ ping google.com PING google.com (74.125.224.34) 56(84) bytes aan gegevens.

64 bytes van lax17s01-in-f2.1e100.net (74.125.224.34): icmp_req=1 ttl=57 tijd=7,82 ms --- google.com pingstatistieken --- 1 pakketten verzonden, 1 ontvangen, 0% pakketverlies , tijd 8 ms rtt min/avg/max/mdev = 7,794/8,422/10,792/0,699 ms

De statistieken aan het einde tonen het aantal verbindingen dat is gemaakt voordat de opdracht is voltooid en de tijd die nodig was om deze te voltooien.

git

Omgevingsvariabelen

Omgevingsvariabelen zijn benoemde variabelen die waarden bevatten die door een of meer applicaties worden gebruikt.

De PATH-variabele bevat een lijst met mappen waarin het systeem naar uitvoerbare bestanden zoekt.

De HOME-variabele bevat het pad naar de thuismap van de huidige gebruiker.

Connectoren

Met connectoren kunt u meerdere opdrachten tegelijkertijd uitvoeren.

$ true && echo Hallo Hallo $ false || echo Hallo Hallo $ echo Hallo ; ls Hallo test.txt bestand1.txt bestand2.txt

Transportbanden

Met transportbanden of leidingen kunt u de in- en uitvoerkanalen van verschillende teams met elkaar verbinden. In het volgende voorbeeld wordt de uitvoer van het ls-commando doorgegeven aan head en worden alleen de eerste 10 elementen afgedrukt.

$ ls-l | hoofd

I/O-omleiding

Uitvoeromleiding

De symbolen > en >> worden gebruikt voor standaard uitvoeromleiding.

Deze code stuurt ls-uitvoer bijvoorbeeld naar een bestand in plaats van naar het scherm:

$ ls > bestanden.txt $ cat bestanden.txt bestand1.cpp voorbeeld.txt

Als het bestand niet bestaat, wordt het gemaakt en als het bestaat, wordt het overschreven. Om overschrijven te voorkomen, moet u de opdracht >> gebruiken. Hiermee worden gegevens aan het einde van het bestand toegevoegd.

Invoeromleiding< . В следующем примере sort берет входные данные из файла, а не с клавиатуры:

Gebruik het symbool voor standaard uitvoeromleiding< files.txt b c

$ cat-bestanden.txt c b $ sorteren

Met het sorteercommando wordt de inhoud van het bestand naar het scherm afgedrukt omdat we de uitvoer niet hebben omgeleid. Dit kan als volgt worden gedaan:< files.txt >$sorteren

bestanden_gesorteerd.txt

Geavanceerde omleiding Het toevoegen van & aan > resulteert in een omleiding zoals standaard stroom

output- en foutstroom. Het bestand test.cpp zal bijvoorbeeld de regel stdout naar cout en de regel stderr naar cerr uitvoeren.

$ g++ test.cpp $ ./a.out >& test.txt $ cat test.txt stdout stderr Als u een specifiek bestandsbeschrijving

, kunt u het nummer ervan toewijzen aan > .NaamBeschrijving
Beschrijving0 Standaard invoer
stoer1 Standaarduitvoer
stderr2 Standaard foutuitvoer

Als u stderr bijvoorbeeld wilt omleiden naar test.txt, doet u het volgende:

$ g++ test.cpp $ ./a.out 2> test.txt stdout $ cat test.txt stderr

Toegangsrechten

De opdracht ls -l geeft veel informatie weer over de machtigingen van elk bestand:

chmod

Het chmod-commando wijzigt de rechten van een bestand. Hier zijn typische combinaties van vlaggen voor het wijzigen van de rechten van specifieke gebruikers:

U kunt chmod aanroepen met een beschrijving van wat u met een specifiek bestand moet doen. Het - symbool betekent het verwijderen van rechten, het + symbool betekent het toevoegen ervan. Het volgende voorbeeld maakt het bestand leesbaar en schrijfbaar voor de eigenaar en de groep:

$ chmod ug+rw test.txt $ ls -l test.txt -rw-rw---- 1 gebruikersgroep 1097374 26 januari 2:48 test.txt

Bovendien kan chmod worden gebruikt met octale getallen, waarbij 1 is toegestaan ​​en 0 niet:

Rwx = 111 = 7 rw- = 110 = 6 r-x = 101 = 5 r-- = 100 = 4

Het volgende commando werkt hetzelfde als het vorige.

Na het lezen van dit artikel zul je ontdekken wat het is bashen(standaard Linux-opdrachtinterpreter), leer hoe u standaardopdrachten gebruikt: ls, cp, mv...begrijp het doel van inodes, harde en symbolische links, en nog veel meer.

Deze tutorial is bedoeld voor degenen die nieuw zijn bij Linux en voor degenen die hun begrip van de basisprincipes van Linux willen herzien of verbeteren, zoals het kopiëren en verplaatsen van bestanden, het maken van koppelingen, het gebruik van standaard Linux-opdrachten samen met omleidingen en pipelines. In dit artikel vindt u veel voorbeelden die het gepresenteerde materiaal verklaren. Voor beginners zal de meeste informatie nieuw zijn, maar voor meer gevorderde gebruikers kan dit materiaal een uitstekend hulpmiddel zijn om bestaande kennis en vaardigheden samen te vatten.

Inleiding tot bashen

Schelp

Als u Linux gebruikt, weet u dat u na het inloggen wordt begroet door een opdrachttolkprompt. Bijvoorbeeld dit:

\$

Als na het inloggen de grafische shell is geladen, moet u om bij de opdrachtinterpreter te komen een terminalemulator starten (gnome-terminal, xfce4-terminal, konsole, xterm, rxvt...) of overschakelen naar een van de virtuele terminals door te klikken CtrlAltF1 of CtrlAltF2 enz.

De shell-prompt op uw computer kan afwijken van wat in het voorbeeld wordt weergegeven. Het kan de gebruikersnaam, de computernaam en de naam van de huidige werkmap bevatten. Maar ondanks al deze verschillen heet het programma dat deze uitnodiging afdrukt " schelp"(shell), en hoogstwaarschijnlijk is uw opdrachtshell een programma genaamd bashen.

Ben je aan het bashen?

Je kunt controleren of bash actief is met het volgende commando:

\$ echo \$SHELL/bin/bash

Als je een foutmelding krijgt als gevolg van het uitvoeren van dit commando of als de uitvoer ervan afwijkt van die in het voorbeeld, dan is het mogelijk dat je systeem bash niet als commandoshell gebruikt. Desondanks zal het meeste materiaal relevant zijn, maar we raden je toch aan om over te schakelen naar bash. Dit kan gedaan worden (als bash op het systeem geïnstalleerd is) met het commando:

\$ bashen

Wat is bash

Bash (een acroniem voor " B onze- A verdienen SCH ell") is de standaard commando-interpreter op de meeste Linux-systemen. Tot zijn verantwoordelijkheden behoren onder meer het verwerken en uitvoeren van opdrachten waarmee de gebruiker de computer bestuurt. Als u klaar bent, kunt u het shell-proces afsluiten. Na het indrukken van de toetsen CtrlD, ploegen Uitgang of uitloggen Het shell-proces wordt beëindigd en u wordt gevraagd uw gebruikersnaam en wachtwoord opnieuw in te voeren.

"cd" gebruiken

Laten we bash gaan gebruiken om door het bestandssysteem te navigeren. Typ de volgende opdracht om aan de slag te gaan:

$ CD/

Met dit commando hebben we bash verteld waar we naartoe willen verhuizen hoofdmap - / . Alle mappen in het systeem zijn georganiseerd in een boomstructuur en / dit is het begin (of de wortel). Team CD dient om de huidige werkmap te wijzigen.

Paden

Om erachter te komen waar bestandssysteem momenteel bevindt u zich in (huidige werkmap) typ:

\$ pwd /

In het bovenstaande voorbeeld / - commando-argument CD- genaamd pad. Dit is de locatie op het bestandssysteem waarnaar we willen verplaatsen. In dit geval / - absoluut pad betekent dit dat het pad relatief is ten opzichte van de hoofdmap.

Absolute paden

Hier volgen enkele voorbeelden van absolute paden

/dev /usr /usr/bin /usr/local/bin

Zoals je misschien al gemerkt hebt, hebben al deze paden gemeen dat ze beginnen / . Door het pad /usr/local/bin op te geven als argument voor de opdracht CD we vertellen haar dat ze naar de hoofdmap moet gaan / , vervolgens naar de map usr en vervolgens naar local en bin. Absolute paden beginnen altijd met /

Relatieve paden

Het tweede type pad wordt relatief genoemd. Bas, team CD en andere opdrachten tellen deze paden relatief ten opzichte van de huidige map. Relatieve paden beginnen nooit met / . Als we bijvoorbeeld in /usr

\$ cd /usr

Vervolgens kunnen we naar /usr/local/bin gaan met behulp van het relatieve pad

\$ cd lokaal/bin \$ pwd/usr/lokaal/bin

Gebruik ".."

Relatieve paden kunnen een of meer mappen bevatten «..» . ".." geeft de bovenliggende map van onze werkmap aan. Voorbeeld:

\$ pwd/usr/local/bin\$ CD.. \$ pwd/usr/lokaal

Zoals je kunt zien, het team CD..‘tilt ons naar een hoger niveau’.

Je kunt toevoegen .. naar het relatieve pad. Hierdoor kunnen we naar een map gaan die zich op hetzelfde niveau bevindt als de map waarin we ons bevinden. Voorbeeld:

\$ pwd/usr/lokaal\$ cd../deel \$ pwd/usr/deel

Voorbeelden waarbij relatieve paden worden gebruikt

Relatieve paden kunnen behoorlijk lastig zijn. Hier zijn enkele voorbeelden. Het resultaat van het uitvoeren van de opdrachten wordt niet weergegeven. Probeer met bash te bepalen in welke map u zich bevindt.

\$ cd/bak \$ cd ../usr/share/zoneinfo \$ cd /usr/X11R6/bin \$ cd../lib/X11 \$ cd/usr/bin \$ cd../bin/../bin

Werkmap "."

Voordat we over het team praten CD, zijn er nog een paar dingen die het vermelden waard zijn. Ten eerste is er nog een speciale map «.» , die naar de huidige map verwijst. Deze map wordt gebruikt om uitvoerbare bestanden uit te voeren die zich in de huidige map bevinden.

\$ ./mijnprog

In het laatste voorbeeld is myprog een uitvoerbaar bestand dat zich in de huidige map bevindt en dat voor uitvoering zal worden gestart.

cd en de thuismap van de gebruiker

Om naar toe te gaan thuismap, moet u bellen

\$ CD

Zonder argument zal cd je naar je homedirectory verplaatsen. Voor de superuser is de homedirectory meestal /root, en for gewone gebruikers- /home/gebruikersnaam/. Maar wat als we een specifiek bestand in de thuismap willen specificeren. Bijvoorbeeld als argument voor het programma 'mijnprog'? Je kunt schrijven:

\$ ./mijnprog /home/gebruiker/mijnbestand.txt

Het gebruik van absolute paden naar bestanden is echter niet altijd handig. Dezelfde bewerking kan worden uitgevoerd met behulp van ~ –tildes:

\$ ./mijnprog ~/mijnbestand.txt

~ - een speciale naam die verwijst naar de homedirectory van de gebruiker in bash.

De thuismappen van andere gebruikers

Maar wat als we naar een bestand in de thuismap van een andere gebruiker moeten verwijzen? Om dit te doen, moet u na de tilde de naam van deze gebruiker opgeven. Om bijvoorbeeld naar het bestand fredsfile.txt te verwijzen dat zich in de thuismap van gebruiker fred bevindt:

\$ ./mijnprog ~fred/fredsfile.txt

Linux-opdrachten

Inleiding tot l

Waarschijnlijk ken je het team al ls, dat, zonder argumenten aangeroepen, een lijst met bestanden weergeeft die zijn opgeslagen in de werkmap:

\$ cd /usr \$ ls X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 include libexec portage share tmp distfiles i686-linux info local portage.old src

Als u de optie opgeeft -A, kunt u alle bestanden zien, inclusief verborgen bestanden (waarvan de namen beginnen met een punt).

\$ ls-a. bin gentoo-x86 include libexec portage share tmp .. distfiles i686-linux info local portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl

Gedetailleerde lijst met mappen

Na de opdracht zelf ls een of meer bestanden of mappen kunnen als argument worden opgegeven. Als u een bestandsnaam opgeeft, wordt de opdracht ls geeft alleen informatie over dit bestand weer. En als u de mapnaam opgeeft, ls zal de volledige inhoud ervan tonen. Optie '-l' ploegen ls kan erg handig zijn als je meer wilt weten dan alleen bestandsnamen gedetailleerde informatie over hen (rechten voor het bestand, naam van de eigenaar, tijdstip van de laatste wijziging van het bestand en de grootte ervan).

Het volgende voorbeeld toont het gebruik van de optie '-l' om informatie weer te geven over bestanden die zijn opgeslagen in de map /usr

\$ ls -l /usr drwxr-xr-x 7 root root 168 24 november 14:02 X11R6 drwxr-xr-x 2 root root 14576 27 december 08:56 bin drwxr-xr-x 2 root root 8856 26 december 12:47 distfiles lrwxrwxrwx 1 root root 9 22 december 20:57 doc -> share/doc drwxr-xr-x 62 root root 1856 27 december 15:54 gentoo-x86 drwxr-xr-x 4 root root 152 12 december 23:10 i686-linux drwxr-xr-x 4 root root 96 24 november 13:17 i686-pc-linux-gnu drwxr-xr-x 54 root root 5992 24 december 22:30 include lrwxrwxrwx 1 root root 10 22 december 20:57 info -> share/info drwxr-xr -x 28 root root 13552 26 december 00:31 lib drwxr-xr-x 3 root root 72 25 november 00:34 libexec drwxr-xr-x 8 root root 240 22 december 20:57 lokaal lrwxrwxrwx 1 root root 9 22 december 20 :57 man -> share/man lrwxrwxrwx 1 root root 11 december 07:59 portage -> gentoo-x86/ drwxr-xr-x 60 root root 1864 8 december 07:55 portage.old drwxr-xr-x 3 root root 3096 22 december 20:57 sbin drwxr-xr-x 46 root root 1144 24 december 15:32 deel drwxr-xr-x 8 root root 328 26 december 00:07 src drwxr-xr-x 6 root root 176 24 november 14: 25 ssl lrwxrwxrwx 1 root root 10 22 december 20:57 tmp -> ../var/tmp

De eerste kolom toont informatie over de toegangsrechten van elk bestand in de lijst. (Ik zal later uitleggen welke letter wat betekent) De volgende kolom toont het aantal links naar elk lijstelement. De derde en vierde kolom zijn respectievelijk de eigenaar en de groep van het bestand. De vijfde kolom is grootte. De zesde is het tijdstip waarop het bestand voor het laatst is gewijzigd (‘laatst gewijzigde tijd’ of mtime). De laatste kolom is de naam van het bestand of de map (als dit een link is, dan na de ‘ –> ‘ staat voor de naam van het object waarnaar het verwijst).

Hoe u alleen mappen kunt bekijken

Soms is het nodig om alleen informatie over mappen te bekijken, en niet over de hele inhoud ervan. De optie helpt u bij het omgaan met deze taak '-D', wat de opdracht vertelt om alleen informatie over mappen weer te geven. Voorbeeld:

\$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share drwxr-xr-x 4 root root 96 18 december 18:17 ../share drwxr-xr-x 17 root root 576 24 december 09:03 /usr drwxr-xr-x 2 root root 3192 26 december 12:52 /usr /X11R6/bin drwxr-xr-x 2 root root 14576 27 december 08:56 /usr/bin

Recursieve lijst- en inode-informatie

Optie actie '-R' tegenovergestelde van actie '-D'. Hiermee kunt u informatie over bestanden die zich in een map bevinden, recursief weergeven. De inhoud van de directory wordt eerst getoond hoogste niveau, vervolgens de inhoud van alle submappen, enzovoort. De uitvoer van dit commando kan behoorlijk lang zijn, dus we geven geen voorbeeld, maar je kunt het zelf proberen door ' ls-R' of ' ls-Rl‘.

En tot slot de optie '-i' gebruikt om de inodes van elk bestandssysteemobject af te drukken.

\$ ls -i /usr 1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 lokaal 13408 delen 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 92 port leeftijd 36737 ssl 70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp

Wat zijn inodes?

Elk bestandssysteemobject (bestand, map...) heeft zijn eigen unieke nummer, genaamd inode(inodenummer). Deze informatie lijkt misschien onbeduidend, maar als u de functie van inodes begrijpt, kunt u veel bestandssysteembewerkingen begrijpen. Laten we bijvoorbeeld eens kijken «.» En «..» zoals de links in elke map. Om te begrijpen wat een map is «..» , zoek de inode van de map /use/local

\$ ls -id /usr/local 5120 /usr/lokaal

Zoals we kunnen zien is de inode van de map /usr/local 5120. Laten we nu eens kijken wat de inode van de map /usr/local/bin/.. heeft:

\$ ls -id /usr/local/bin/.. 5120 /usr/local/bin/..

Het blijkt dat de inodes van de mappen /usr/local en /usr/local/bin/.. hetzelfde zijn! Dit betekent dat naar inode 5120 wordt verwezen met twee namen: /usr/local en /usr/local/bin/.. Dat wil zeggen dat dit twee verschillende namen zijn voor dezelfde map. Elke inode verwijst naar een specifieke locatie op de schijf.

Aan elke inode kunnen meerdere bestandssysteemobjectnamen zijn gekoppeld. Het aantal bestandssynoniemen (bestandssysteemobjecten die naar dezelfde inode verwijzen) wordt weergegeven door het getal in de tweede kolom van de opdrachtuitvoer ls-l‘.

\$ ls -dl /usr/local drwxr-xr-x 8 root root 240 22 december 20:57 /usr/local

Dit voorbeeld laat zien (tweede kolom) dat naar de map /usr/local wordt verwezen door 8 verschillende bestandssysteemobjecten. Hier zijn hun namen:

/usr/lokaal /usr/lokaal/. /usr/local/bin/.. /usr/local/games/.. /usr/local/lib/.. /usr/local/sbin/.. /usr/local/share/.. /usr/local/ src/..

mkdir

Laten we naar de opdracht kijken mkdir. Het wordt gebruikt om nieuwe mappen te maken. Het volgende voorbeeld demonstreert het aanmaken van drie nieuwe mappen (tic, tac, toe) in de map /tmp

\$ cd/tmp $ mkdir boter-kaas-en-eieren

Standaardopdracht mkdir kan geen geneste mapstructuur maken. Als u daarom meerdere geneste mappen moet maken ( prachtig), dan moet je dit commando drie keer achter elkaar uitvoeren:

\$ mkdir won/der/ful mkdir: kan map "won/der/ful" niet aanmaken: Bestand of map \$ bestaat niet mkdir heeft gewonnen \$ mkdir won/der \$ mkdir won/der/ful

U kunt deze handeling vereenvoudigen door de optie toe te voegen '-P' naar de mkdir-opdracht. Met deze optie kunt u een geneste mapstructuur maken:

\$ mkdir -p eenvoudig/as/pie

Voor meer informatie over de mogelijkheden van dit hulpprogramma leest u de help, die door de opdracht wordt aangeroepen man mkdir. Er is hulp voor bijna alle opdrachten in deze handleiding (bijvoorbeeld man ls), behalve CD, omdat het is ingebouwd in bash (voor dergelijke opdrachten wordt hulp als volgt aangeroepen: hulp-cd)

aanraken

Laten we verder gaan met het bestuderen van commando's cp En mv, gebruikt om bestanden en mappen te kopiëren, hernoemen en verplaatsen. Maar laten we eerst een leeg bestand maken in de map /tmp met behulp van de opdracht aanraken:

\$ cd/tmp \$ raak kopieer mij aan

Team aanraken updates tijd laatste toegang naar het bestand (zesde kolom van de opdrachtuitvoer ls-l) als het al bestaat of maakt een nieuw leeg bestand aan als het nog niet bestaat. Na deze operatie zouden we een leeg bestand moeten hebben /tmp/kopieer.

echo

Nu we een leeg bestand hebben, gaan we erin schrijven tekstreeks met behulp van de opdracht echo, waarmee het argument wordt uitgevoerd dat eraan is doorgegeven standaard apparaat uitvoer (tekstterminal in ons geval).

\$ echo "eerste bestand" eerstebestand

Om een ​​regel naar ons bestand te schrijven, laten we de opdrachtuitvoer ernaar omleiden echo:

\$ echo "eerstebestand"> kopieer mij

Teken > (more) vertelt de shell om de uitvoer van het commando aan de linkerkant om te leiden naar het bestand waarvan de naam aan de rechterkant staat. Als een bestand met dezelfde naam niet bestaat, wordt dit automatisch aangemaakt. En als zo'n bestand al bestaat, wordt het overschreven (de volledige inhoud wordt gewist voordat onze regel wordt geschreven). Team 'ls-l' zal laten zien dat de grootte van ons bestand nu 10 bytes is - negen bytes worden ingenomen door het woord 'firstfile' en één byte door het line feed-teken.

\$ ls -l kopieer mij-rw-r--r-- 1 root root 10 december 28 14:13 copyme

kat en cp

Gebruik de opdracht om de inhoud van een bestand naar de terminal uit te voeren kat:

\$ kat kopieer mij eerstebestand

Nu kunnen we beginnen met het analyseren van de basisfunctionaliteit van de opdracht cp. Deze opdracht heeft twee argumenten nodig. De eerste is de naam van het bestaande bestand (‘copyme’), de tweede is de naam van de nieuwe kopie die we willen maken (‘copiedme’).

\$ cp kopieer mij kopieer mij

Daar kunnen wij voor zorgen nieuw exemplaar bestand heeft een ander inodenummer (dit betekent dat we daadwerkelijk een nieuw afzonderlijk bestand hebben ontvangen, en niet alleen een link naar het oude)

\$ ls -i kopieer mij, kopieer mij 648284 kopieer mij 650704 kopieer mij

mv

Laten we nu het commando gebruiken mv om de naam van het bestand te wijzigen (“copiedme” –> “movedme”). Het inodenummer verandert na deze handeling niet, alleen de bestandsnaam verandert.

\$ mv heeft mij gekopieerd, heeft mij verplaatst \$ ls -ik heb mij verplaatst 648284 heeft mij bewogen

Het inodenummer verandert niet alleen op voorwaarde dat het hernoemde bestand binnen het bestandssysteem blijft waar het zich bevond bronbestand. We zullen de structuur van bestandssystemen nader bekijken in een van de volgende delen van deze tutorial.

Team mv Hiermee kunt u niet alleen bestanden hernoemen, maar ook verplaatsen. Om bijvoorbeeld een bestand te verplaatsen /var/tmp/mijnbestand.txt naar de map /home/gebruiker je moet het commando geven:

\$ mv /var/tmp/mijnbestand.txt /home/user

Het bestand wordt verplaatst naar de thuismap van de gebruiker gebruiker zelfs als het zich op een ander bestandssysteem bevindt (in dit geval wordt het bestand naar een nieuwe locatie gekopieerd, waarna het origineel wordt verwijderd). Zoals je misschien al geraden hebt, verandert het verplaatsen van een bestand naar een ander bestandssysteem de inode. Dit gebeurt omdat elk bestandssysteem zijn eigen afzonderlijke set inodes heeft.

Opgemerkt moet worden dat de mogelijkheid bestaat dat het nieuwe toegewezen inodenummer samenvalt met het oude, maar dit is extreem klein.

Om meerdere bestanden tegelijkertijd naar één map te verplaatsen, moet je schrijven:

\$ mv /var/tmp/mijnbestand1.txt /var/tmp/mijnbestand2.txt /home/user \$ mv -t /home/user /var/tmp/mijnbestand1.txt /var/tmp/mijnbestand2.txt

Als u de optie toevoegt '-v', wordt een rapport over de uitgevoerde handeling op het scherm weergegeven:

\$ mv -vt /home/gebruiker /var/tmp/mijnbestand1.txt /var/tmp/mijnbestand2.txt"/var/tmp/mijnbestand1.txt" -> "/home/gebruiker/mijnbestand1.txt" "/var/tmp/mijnbestand2.txt" -> "/home/gebruiker/mijnbestand2.txt"

Op de meeste Linux-besturingssystemen is bash de standaard opdrachtregelinterpreter. Om de huidige tolk te bepalen, voert u de volgende opdracht in:

$ echo$SHELL
/bin/bash

Dit voorbeeld gebruiktopdrachtregelinterpreter bashen. Er zijn nog veel meer commandotolken. Om een ​​andere tolk te activeren, kunt u de naam ervan op de opdrachtregel invoeren (ksh, tcsh, csh, sh, bash, enz.).

De meeste Linux-besturingssystemen met volledige functionaliteit bieden alle hier beschreven opdrachtinterpreters. Maar op kleinere besturingssystemen kunnen er één of twee tolken aanwezig zijn.

Controleer de beschikbaarheid van het artikel waarin u geïnteresseerd benttolkopdrachtregel

De eenvoudigste manier om de beschikbaarheid van de betreffende opdrachtinterpreter te controleren, is door de naam ervan op de opdrachtregel in te voeren. Als de tolk is gestart, is deze beschikbaar.

Er zijn verschillende redenen om voor alternatieve shells te kiezen.

  • Ervaring met het werken op UNIX System V-systemen (waarvan er vele standaard ksh gebruiken) of Sun Microsystems en andere Berkeley UNIX-systemen (die vaak csh gebruiken). In dit geval het gebruik van deze tolkenopdrachtregelzal handiger zijn.
  • De noodzaak om scripts uit te voeren die zijn gemaakt voor een specifieke opdrachtinterpreter.
  • De mogelijkheden van een alternatieve schil kunnen de voorkeur verdienen. Een lid van de Linux-gebruikersgroep geeft bijvoorbeeld de voorkeur aan ksh omdat hij niet tevreden is met de manier waarop bash aliassen aanmaakt.

Hoewel de meeste gebruikers er de voorkeur aan geven in één schil te werken, helpen de opgedane vaardigheden hen om in andere te leren werken.tolken opdrachtregel , af en toe naar kijken referentiegids(bijvoorbeeld met behulp van de opdracht manbash). De meeste mensen gebruiken bash omdat er geen reden is om over te stappen naar een andere tolk.

Met behulp van Bash en ch

De naam bash is een acroniem voor Bourne Again SHell. Deze afkorting geeft aan dat bash de Bourneshell-interpreter (sh-opdracht) erft, gemaakt door Steve Bourne van AT&TBell Labs. Brian Fox van Free Software Stichting heeft bash gemaakt als onderdeel van het GNU-project. Vervolgens kwam de ontwikkeling in handen van Chet Ramey van de Case Western Reserve University.

De bash-interpreter bevat functies die zijn ontwikkeld voor de sh- en ksh-tolken tijdens de eerdere versies UNIX, evenals een aantal functies van de csh-interpreter.

Je kunt verwachten dat de meeste Linux-systemen, met uitzondering van gespecialiseerde systemen (zoals systemen die ingebed zijn of waarvan opgestart wordt). externe schijf), bash is de standaardinterpreter. In gespecialiseerde systemen kan een kleinere commandotolk nodig zijn, wat ook beperkte mogelijkheden impliceert.

De meeste voorbeelden hierinartikelontworpen voor bash-gebruik.

De bash-interpreter kan in verschillende compatibiliteitsmodi worden uitgevoerd, waarbij het gedrag van andere shells wordt gesimuleerd. Het kan het gedrag nabootsen van de Bourne-shell (sh) of een shell die voldoet aan de POSK-standaarden (bash -positief).

Als gevolg hiervan is de kans groter dat bash configuratiebestanden met succes kan lezen en scripts kan uitvoeren die specifiek voor andere shells zijn geschreven.

Alle meegeleverde Linux-besturingssystemen gebruiken standaard de bash-interpreter, behalve besturingssystemen waarvan wordt opgestart verwisselbare media, die standaard de ash-interpreter gebruiken.

Tcsh gebruiken (en de eerdere csh-interpreter)

De tcsh-opdrachtinterpreter is een open source-implementatie van de Cshell (csh)-interpreter. De csh-interpreter is gemaakt door Bill Joy en wordt standaard gebruikt op bijna alle Berkeley UNIX-systemen (dergelijke systemen werden gedistribueerd door Sun Microsystems).

Veel van de functies van csh, zoals het bewerken van opdrachtregels en beheermethoden voor opdrachtgeschiedenis, zijn geïmplementeerd in tcsh en andere shells. Net zoals het sh-commando de bash-interpreter in sh-compatibele modus uitvoert, voert het csh-commando de tcsh-interpreter uit in csh-compatibele modus.

Met behulp van de astolk

De ash-interpreter is een lichtgewicht versie van de Berkeley UNIX sh-interpreter. Het bevat niet veel basisfuncties en biedt geen functies zoals opdrachtgeschiedenis.

De ash-interpreter is zeer geschikt voor gebruik in embedded systemen met beperkte systeembronnen. Op het FedoraCore 4 besturingssysteem is de ash-interpreter een orde van grootte kleiner dan de bash-interpreter.

Zsh gebruiken

De zsh-interpreter is een andere kloon van de sh-interpreter. Het is POSIX-compatibel (zoals bash), maar heeft andere functies, waaronder spellingcontrole en een andere benadering van het bewerken van opdrachtregels. De zsh-interpreter was de standaard in vroege besturingssystemen. MacOS-systemen X, maar binnen moderne systemen De standaardinterpreter is bash.

Het belangrijkste gebruikersproces is de opdrachtshell (ook bekend als de opdrachtinterpreter, of eenvoudigweg shell). Dit zorgt ervoor dat de gebruiker interactie heeft met het systeem in de tekstmodus, waardoor u opdrachten kunt invoeren. Het is degene die wordt uitgevoerd wanneer u zich aanmeldt bij de tekstconsole en u een opdrachtregelinterface biedt.

U hoeft zich niet te laten meeslepen door gemak GUI, onderschat de opdrachtregel. Ten eerste kunnen veel administratieve taken alleen van daaruit worden uitgevoerd; ten tweede is de opdrachtregel het handigste middel om routinematige procedures te automatiseren. Een opdracht in Linux is alles dat kan worden uitgevoerd: uitvoerbare bestanden, ingebouwde shell-opdrachten, opdrachtaliassen, door de gebruiker gedefinieerde functies, scriptbestanden (scripts) - vooraf voorbereide reeksen opdrachten in tekstvorm.

Dus, commando tolk is een programma dat zijn eigen ingebouwde opdrachten heeft, een eigen variabele omgeving, en waarmee u ook externe opdrachten kunt uitvoeren die in het systeem aanwezig zijn.

De shell accepteert opdrachten die door de gebruiker zijn ingevoerd, verwerkt indien nodig hun argumenten, geeft opdrachten voor uitvoering, accepteert hun retourwaarden en voert bepaalde acties uit, afhankelijk van die waarden. Bovendien heeft de shell een ingebouwde programmeertaal (opdrachttaal) waarmee u complexe vertakte opdrachtscripts kunt schrijven. Het is de commandotaal die verschillende shells van elkaar onderscheidt, en het is de taal waarop gebruikers hun shellkeuze baseren.

Linux is een Unix-achtig besturingssysteem. Linux werd oorspronkelijk ontwikkeld door Linus Torvalds aan de Universiteit van Helsinki (Finland) op basis van Minix, een klein UNIX-systeem gemaakt door Andry Tanenbaum. Vroege ontwikkeling Linux hield zich vooral bezig met het probleem van het wisselen van taken in de beschermde modus voor de 80386. En Linus "begon serieus na te denken over het manische idee om Minix beter te maken dan zichzelf."

De opdrachtshell bestond al in UNIX-systemen; het was de “Bourne-shell” (Bourne-shell of eenvoudigweg shell). Even later ontwikkelden UNIX-systemen de C-shell, die een andere syntaxis gebruikt, die enigszins doet denken aan de syntaxis van de programmeertaal C.

Er zijn veel opdrachttolken ontwikkeld voor Linux. De standaardinstelling is "Bash", ontwikkeld in op schaal gebaseerd en genaamd "New Shell of Bourne" (Bourne Again Shell). Bash is dus een evolutie van de vorige shell en voegt veel nuttige functies toe die gedeeltelijk in de C-shell zijn opgenomen. Omdat Bash kan worden beschouwd als een superset van de oude shell-syntaxis, zou elk programma dat in de goede oude Bourne-shell is geschreven, in Bash moeten werken.

Er moet echter worden opgemerkt dat het Linux-besturingssysteem geen UNIX-systeem is, omdat de code ervan volledig werd herschreven, aanvankelijk door Linus, later met de hulp van veel UNIX-programmeurs en enthousiastelingen van internet, degenen die over voldoende vaardigheden en capaciteiten beschikken om zich te ontwikkelen. het systeem.

De Linux-kernel gebruikt geen code van UNIX of enige andere propriëtaire bron, en de meeste daarvan Linux-programma's ontwikkeld door het GNU-project van de Free Software Foundation in Cambridge, Massachusetts. Maar ook programmeurs over de hele wereld hebben eraan bijgedragen.

Hier zijn de meest voorkomende Linux-shells:

  • Bourne-shell - Bourne-shell, standaard voor veel UNIX-achtige systemen;
  • bash - Bourne Again shell, “de nieuwe Bourne shell” (standaard gebruikt op Linux);
  • csh - C shell, C shell: de syntaxis van de commandotaal is vergelijkbaar met de syntaxis van de C-taal;
  • tcsh - kleine C-shell, minimale C-shell;
  • pdksh - publiek domein Korn-shell, openbare Korn-shell;
  • sash - stand-alone shell, kan worden gebruikt als softwarebibliotheken niet beschikbaar zijn.

Een lijst met alle shell-programma's die op het systeem zijn geïnstalleerd, bevindt zich in het bestand /etc/shells.

De initiële shell voor elke gebruiker die voor hem wordt gestart wanneer hij zich aanmeldt bij het systeem, wordt gespecificeerd in het bestand /etc/passwd. Het hoeft niet noodzakelijk bash te zijn. De beheerder kan dat doorgaans wel bepaalde gebruikers sta inloggen niet toe door /sbin/nologin op te geven als de “shell” die na registratie moet worden geladen. Of specificeer zelfs een speciaal ontworpen script waarmee u bijvoorbeeld logs kunt bekijken.

Om het bestand /etc/passwd in Linux te bewerken is er: speciaal elftal vipw , dat de juistheid van de bewerking controleert (de opdracht is alleen beschikbaar voor de beheerder).

Later, wanneer u in de standaardshell werkt, kunt u de huidige shell wijzigen in een van de geïnstalleerde shells (meer precies, voer een subshell in). Om af te sluiten en terug te keren naar de bovenliggende shell, voert u de opdracht exit in. In de initiële shell beëindigt deze opdracht de sessie.

In elke shell kun je opdrachtscripts uitvoeren die bestaan ​​uit opdrachten uit een andere shell: de eerste regel van elk script bevat een indicatie van in welke shell het moet worden uitgevoerd, en de huidige shell voert het opgegeven onderliggende proces ervoor uit.

Zoals ik al zei, krijgt een nieuwe gebruiker standaard de bash-shell toegewezen. Dit is een geweldige shell, met veel verbeteringen en de beste eigenschappen van andere shells, en ik raad niet aan om deze te veranderen. Als ik in wat volgt ‘shell’ zeg, bedoel ik bash.

2. Parseren van de opdrachtregel, geselecteerde bash-functies

De tolk, die de opdrachtregel heeft ontvangen, voert er een aantal transformaties op uit, met behulp van zijn krachtige functies, namelijk:

  1. Breidt aliassen uit voor snel bellen de meest gebruikte commando's.
  2. Breidt metatekens of jokertekens (*, ?, [, ], ~, (, )) uit om naar bestanden te zoeken met behulp van naampatronen.
  3. Vervangt variabelen die door de shell kunnen worden gebruikt.
  4. Leidt de uitvoer van één commando om als invoer naar een ander commando met behulp van een pipe.
  5. Voert het samenvoegen van opdrachten uit.
  6. Voert de opdracht uit als het een ingebouwde tolkopdracht is, of start een proces als de opdracht extern is.
  7. Omleidingen standaard invoer/conclusie.

Om de laatste drie functies uit te voeren, moet u speciale operators gebruiken. Laten we eens kijken naar alle genoemde functies.

2.1. Bijnamen

Commandoaliassen zijn ontworpen om shell-opdrachten efficiënter in te voeren. Door middel van een alias kan een commando van vrijwel elke complexiteit worden vervangen door een willekeurige string. Gebruik de opdracht alias om de lijst met aliassen te bekijken en er indien nodig een nieuwe alias aan toe te voegen.

Bijvoorbeeld:

$ export HELLO="Hallo vanuit de omgeving! " # spatie moet worden voorzien van aanhalingstekens

Omgevingsvariabelen

Een omgeving is een reeks variabelen waarvan de waarden het gedrag van de shell kunnen veranderen.

Wanneer de shell begint te draaien, worden er verschillende ingesteld omgevingsvariabelen. Hun namen zijn standaard. Programma's en scripts kunnen naar hun waarden vragen in plaats van zelf te proberen de informatie te achterhalen die ze nodig hebben.

Op deze manier bepaalt de opdrachtinterpreter de omgevingsvariabelen die in de huidige sessie worden gebruikt. Elke nieuw ingevoerde opdracht wordt feitelijk uitgevoerd als een onderliggend proces van het bovenliggende proces, wat in dit geval de bash-opdrachtinterpreter is. Omgevingsvariabelen zijn anders dan normale variabelen variabele onderwerpen dat ze beschikbaar zijn voor zowel ouder- als kindprocessen. Automatische detectie van omgevingsvariabelen vindt plaats na gebruikersauthenticatie in het systeem. Als het authenticatieproces met succes is voltooid, bepaalt het loginprogramma, op basis van het bestand /etc/passwd, welke commando-interpreter zal worden gebruikt in de sessie van de gebruiker. Na het definiëren van de opdrachtinterpreter wordt de sessie geconfigureerd volgens de onderstaande configuratiebestanden.

ConfiguratiebestandBeschrijving
/etc/profiel

Definieert omgevingsvariabelen voor alle gebruikers op het systeem. Dit bestand wordt uitgevoerd bij de eerste keer inloggen en bevat basisomgevingsvariabelen, zoals de zoekvariabele PATH-opdrachtlocatie, de HOSTNAME-hostnaamvariabele en de HISTSIZE-groottevariabele van de opdrachtgeschiedenis. Bovendien genereert dit bestand aanvullende omgevingsvariabelen uit configuratiebestanden in de map /etc/profile.d.

/etc/bashrc

Wordt voor alle gebruikers uitgevoerd telkens wanneer de bash-shell wordt gestart. Dit bestand definieert de waarde van de PS1-variabele, evenals aanvullende opdrachtaliassen. Een alias is een verkorte, willekeurig gedefinieerde naam van een opdracht of reeks opdrachten waarmee u complexe reeksen opdrachten kunt uitvoeren zonder deze vanaf het toetsenbord in te voeren, maar door ze aan te roepen door de overeenkomstige alias aan te roepen. Variabelen die in dit bestand zijn gedefinieerd, kunnen opnieuw worden toegewezen door een soortgelijk gebruikersbestand -/.bashrc, dat een hogere prioriteit heeft.

-/.bashprofiel

Gebruikt als een bestand met individuele gebruikersinstellingen. Wordt slechts één keer uitgevoerd wanneer de gebruiker inlogt. Bovendien voert dit bestand het bestand -/.bashrc uit

~/.bashrc

Dit bestand bevat omgevingsvariabelen en aliassen gebruiker geïnstalleerd. Het wordt elke keer uitgevoerd wanneer de gebruiker inlogt of wanneer een nieuwe bash-sessie wordt geopend. Dit bestand is het meest geschikt voor het definiëren van gebruikersvariabelen en aliassen.

~/.bash_logout

Dit bestand wordt elke keer uitgevoerd wanneer u zich afmeldt of de laatste sessie van de bash-interpreter beëindigt. Standaard bevat dit bestand een opdracht om het terminalscherm leeg te maken.

/etc/invoerrc

Dit bestand bevat een beschrijving van de interpretatie van verschillende toetscombinaties, en bevat ook speciale toetscombinaties, waarbij indrukken de uitvoering van gespecificeerde opdrachten veroorzaakt.

Omgevingsvariabelen zijn een redelijk handige manier om informatie op te slaan die vaak wordt gebruikt tijdens de huidige sessie waarin u met het systeem werkt. Indien nodig kan de gebruiker vrijwel alle omgevingsvariabelen maken (probeer de waarden van omgevingsvariabelen die al in gebruik zijn niet te wijzigen) en hun waarden lezen gedurende de hele tijd dat hij met de opdrachtshell werkt. Om een ​​tijdelijke omgevingsvariabele te maken, moet u de naam ervan invoeren en er de juiste waarde aan toekennen. Bijvoorbeeld,

export AB=/usr/dog/contagious/ringbearer/grind

IN in dit voorbeeld Aan de tijdelijke omgevingsvariabele AB wordt het pad toegewezen naar een map die zich behoorlijk “diep” in de maphiërarchie van het bestandssysteem bevindt. Het exportcommando geeft de noodzaak aan om de waarde van de AB-variabele naar een shell te exporteren om deze beschikbaar te maken voor andere shells die mogelijk open zijn binnen de huidige sessie met het systeem. Nu kan de bovenstaande directory worden bereikt door het commando cd $AB uit te voeren

Het enige nadeel van tijdelijke omgevingsvariabelen is dat ze automatisch worden vernietigd wanneer de huidige sessie met het systeem eindigt. Om een ​​permanente (in tegenstelling tot tijdelijke) omgevingsvariabele te creëren, moet deze worden toegevoegd aan het shell-configuratiebestand.bashrc.

Om de configuratiebestanden /etc/profile en /etc/bashrc te wijzigen, moet u root zijn.

Gewone gebruikers kunnen de configuratiebestanden ~/.bash_profile, ~/.bashrc en ~/.bash_Iogout in hun thuismappen wijzigen. Deze configuratiebestanden kunnen worden geconfigureerd om uw omgevingsvariabelen in te stellen met behulp van de exportopdracht en kunnen in elke sessie worden gebruikt.

Een van de meest gewijzigde omgevingsvariabelen is de PATH-variabele. U kunt ook de omgevingsvariabele PATH overschrijven of aanvullen configuratiebestand~/.bashrc.

in dit voorbeeld bevat de PATH-variabele de huidige waarde plus de thuismap als zoekpad voor uitvoerbare bestanden.

Om deze wijzigingen toe te passen in de omgeving van de huidige shell, moet u de opdracht source .bashrc uitvoeren

De meest voorkomende shell-omgevingsvariabelen zijn:

  • BASH-bevat volledige pad Naar bash-commando(meestal is de waarde van deze variabele /bin/bash).
  • BASH_VERSION - Bash-versienummer.
  • DIRSTACK - Een array met de huidige directorystackwaarde.
  • EDITOR is de standaardteksteditor.
  • EUID - Numerieke effectieve identificatie van de huidige gebruiker.
  • FUNCNAME - naam huidige functie in het script.
  • GROEPEN - Een array met een lijst met groepen waartoe de huidige gebruiker behoort.
  • HISTFILE - De locatie van het opdrachtgeschiedenisbestand. Normaal gesproken wordt de opdrachtgeschiedenis opgeslagen in het bestand ~/.bash_history.
  • HISTFILESIZE - Het aantal opdrachtregels dat in het geschiedenisbestand kan worden opgeslagen. Nadat dit aantal is bereikt, worden nieuwe opdrachtregels in de geschiedenis opgenomen door de oudste opdrachtregels te verwijderen. Standaard is de grootte van de lijst met recent gebruikte opdrachten 1000 regels.
  • HOME - De thuismap van de gebruiker.
  • HOSTNAAM - Naam van deze computer(knooppunt).
  • HOSTTYPE - Computertype.
  • LANG - Huidige standaardtaal.
  • LC_CTYPE is een interne variabele die de tekencodering bepaalt.
  • MAIL - Locaties van mailboxbestanden e-mail gebruiker. Normaal gesproken is dit een bestand dat zich in de directory /var/spool/mail bevindt en waarvan de naam dezelfde is als de inlognaam van de gebruiker.
  • MAILCHECK - Interval in minuten tussen postcontroles.
  • OLDPWD - De map die actueel was totdat de map voor het laatst werd gewijzigd.
  • OSTYPE - Huidig ​​besturingssysteem.
  • PATH - Een door dubbele punten gescheiden lijst met mappen waarin naar uitvoerbare bestanden moet worden gezocht. De volgorde waarin directorynamen worden doorzocht, is uiterst belangrijk. Bij het uitvoeren van opdrachten worden de mappen in deze variabele opeenvolgend van links naar rechts gecontroleerd. Wanneer dus de opdracht foo in de directory's /bin en /usr/bin wordt uitgevoerd, wordt de opdracht in de directory /bin uitgevoerd. Om de opdracht foo in de map /usr/bin in een vergelijkbare situatie uit te voeren, moet u het volledige pad naar deze opdracht opgeven of de volgorde van de mapnamen in de omgevingsvariabele PATH wijzigen. De huidige zoekmap moet expliciet worden opgegeven ("."); de shell doorzoekt standaard niet de huidige map. Zoeken naar opstartprogramma's in de huidige map is potentieel gevaarlijk vanwege de mogelijkheid van onbedoelde uitvoering gevaarlijk programma, dus de PATH-variabele wordt meestal geïnitialiseerd zonder de "." Om het pad naar uw eigen opdrachten of shellscripts aan de PATH-variabele toe te voegen, moet u deze in de /bin-submap van uw thuismap plaatsen, die automatisch aan de PATH-variabele wordt toegevoegd. Niet allemaal uitvoerbare opdrachten bevindt zich in de mappen die worden vermeld in de omgevingsvariabele PATH. Sommige opdrachten zijn rechtstreeks in de shell ingebouwd. Andere opdrachten kunnen opnieuw worden gedefinieerd met behulp van aliassen, waardoor opdrachten met parameters van vrijwel elke complexiteit (in termen van syntaxis) kunnen worden vervangen door één eenvoudige naam. Bovendien is het mogelijk om functies te creëren die een hele reeks opdrachten opslaan.
  • PPID- ID-nummer het proces dat overeenkomt met de opdracht die de huidige shell heeft gestart (bijvoorbeeld het proces dat de shell heeft gemaakt).
  • PS1, PS2, PS3, PS4 - Variabelen die het type shell-prompt bepalen.

    De PS1- en PS2-variabelen stellen de primaire en secundaire shell-prompts in.

    Er verschijnt een secundaire prompt (PS2) als u op drukt Voer sleutel in, zonder de opdrachtinvoer syntactisch af te ronden.

    Deze variabele bevat een kleine prompt die optreedt bij tekstbewerking van meerdere regels of bij onvolledige opdrachtinvoer. Standaard wordt dit aangegeven als >.

    PS3. Deze variabele bevat de prompt die aanwezig is in selecteer verklaring, gebruikt om interactieve consolemenu's te organiseren. Standaard is de PS3-prompt in de select-instructie #?.

    PS4. Deze variabele wordt voornamelijk gebruikt bij het debuggen van shellscripts en bevat standaard de tekenreekswaarde "++".

    Voer bijvoorbeeld de opdracht get uit DNS-informatie:

    #nslookup >

  • PWD - De huidige werkmap van de gebruiker. Deze waarde verandert elke keer dat u met de opdracht cd naar een andere map gaat.
  • SECONDEN - looptijd van het script (in seconden).
  • SHELL - Huidige opdrachttolk.
  • SHELLOPTS - Lijst met ingeschakelde tolkopties.
  • SHLVL - Aantal keren dat nieuwe exemplaren van de opdrachtinterpreter worden gelanceerd.
  • UID - Numerieke identificatie van de huidige gebruiker.
  • GEBRUIKER - Huidige gebruikersnaam.
  • $# - Het totale aantal parameters dat aan het script is doorgegeven.
  • $* - Alle argumenten worden niet doorgegeven aan het script (uitvoer naar een regel).
  • $@ - Hetzelfde als de vorige, maar de parameters worden in een kolom weergegeven.
  • $! - PID van het laatste proces dat op de achtergrond draait.
  • $$ - PID van het script zelf.

Om de waarden van alle variabelen in de huidige sessie te bekijken, zowel de variabelen die u definieert als die in de omgeving, geeft u de opdracht set uit zonder parameters of env printenv .

Je kunt een variabele verwijderen met het commando unset.

2.4. Vervangingen en organisatie van interactie tussen commando's

Waarden van omgevingsvariabelen vervangen De huidige sessie met het systeem kan worden uitgevoerd door het metateken dollarteken ($) te gebruiken. Als gevolg hiervan vervangt de shell automatisch de naam van de variabele door zijn waarde. Bijvoorbeeld,

Het resultaat van een rekenkundige uitdrukking vervangen

Er zijn twee syntactische vormen voor het vervangen van het resultaat van een rekenkundige uitdrukking: $[expressie] en $((expressie)). Bijvoorbeeld,

echo "Ik ben $ jaar oud."

Commando vervanging

Met opdrachtvervanging kunt u de uitvoer van één opdracht gebruiken op een opdrachtregel die een andere opdracht bevat. Er kunnen twee alternatieve vervangingsformaten worden gebruikt: $(command) of `command` (enkele aanhalingstekens). Bijvoorbeeld,

Het tilde-teken uitbreiden

Met het tilde-teken (~) kunt u snel directorynamen invoeren.

~ De naam van de thuismap van de gebruiker ~/subdirectory De naam van een van de submappen in thuismap gebruiker ~+ Huidige mapnaam ~- Vorige mapnaam

Uitbreidende accolades

Met accolades kunt u één opdracht invoeren in plaats van meerdere van hetzelfde type. De haakjes moeten een lijst bevatten, waarvan de elementen door komma's moeten worden gescheiden. De tolk leest de elementen één voor één en vormt met elk ervan een afzonderlijk commando, dat hij vervolgens uitvoert. Het commando bijvoorbeeld

mkdir-uitgaven/(januari,februari,maart) is gelijk aan mkdir-uitgaven/januari mkdir-uitgaven/februari mkdir-uitgaven/maart

Kanalen

Het kanaalmetakarakter (|) geeft de noodzaak aan om de interactie tussen commando's te organiseren door het resultaat van de uitvoering (uitvoer) van een ander commando te gebruiken als invoergegevens (invoer) van een commando. Met andere woorden, met behulp van een pipe (pipeline) kunnen de resultaten van het eerste commando worden doorgegeven als invoer voor het tweede commando. Bijvoorbeeld,

cat /etc/passwd | sorteer | hoofd -3

Reeksen en groepen opdrachten

Door gebruik te maken van opdrachtenreeksen en -groepen kunt u meerdere opdrachten op één regel invoeren.

commando1;command2 Voer eerst commando 1 uit, daarna commando 2 (command1;command2) Uitvoeren apart exemplaar interpreter waarin commando's 1 en 2 opeenvolgend moeten worden uitgevoerd (command1;command2) Voer commando's 1 en 2 opeenvolgend uit in de huidige interpreter command1 && command2 Voer commando 2 alleen uit als commando 1 succesvol is uitgevoerd command1 || commando2 Voer commando 2 alleen uit als commando 1 mislukt

Het resultaat van elke opdrachtuitvoering (dat wil zeggen het resultaat van de beëindiging van het overeenkomstige proces) is de exitcode. Succesvolle voltooiing heeft code 0, mislukte voltooiingscode 1. Is de voltooiingscodewaarde toegewezen aan een vooraf gedefinieerde variabele? (vraagteken). Echo $?

Opnieuw uitvoeren van opdrachten

De shell beschikt over faciliteiten waarmee u eerdere opdrachten kunt oproepen en bewerken. De shell-opdrachtgeschiedenis is een lijst met eerder gebruikte opdrachten. Deze lijst kan worden bekeken met behulp van het geschiedeniscommando.

Nadat u een opdrachtregel hebt ingevoerd, plaatst de shell deze in de opdrachtgeschiedenis. Een lijst met eerder gebruikte opdrachten wordt opgeslagen in een bestand, waardoor u op elk gewenst moment elke gewenste opdrachtregel kunt oproepen om deze opnieuw uit te voeren. Nadat u de opdrachtregel opnieuw hebt aangeroepen, kan deze worden bewerkt. De opdrachtgeschiedenis wordt opgeslagen in het bestand .bash_history, dat zich in de thuismap van de gebruiker bevindt. Standaard kan de opdrachtshell maximaal 1000 opdrachtregels "onthouden".

Om een ​​lijst met eerder gebruikte opdrachten te bekijken, voert u de geschiedenisopdracht uit.

Het kan worden gebruikt zonder parameters of met een parameter waarmee u het aantal weer te geven opdrachten kunt opgeven. Elke opdrachtregel heeft zijn eigen nummer in de opdrachtgeschiedenis.

Syntaxis van geschiedenisuitbreiding: !n Voer het opgegeven opdrachtnummer uit!! Voer vorig commando uit!string Voer het meest recente commando uit, beginnend met de opgegeven string!?string? Voer het meest recente commando uit dat de opgegeven string bevat In plaats van de opdrachtregel in de opdrachtgeschiedenis direct uit te voeren, kunt u deze oproepen om later te bewerken. Gebruik de cursortoetsen"pijl omhoog" en "pijl omlaag"

om de opdrachtgeschiedenis stap voor stap te bekijken en de gewenste opdrachtregel te selecteren.

3. Bash-ingebouwde apparaten Lijst met ingebouwde opdrachten bash-schaal

kan worden verkregen met behulp van de help-opdracht of kan worden gevonden op de man-pagina in de SHELL BUILTIN COMMANDS-sectie.

  • Hier zijn enkele nuttige ingebouwde opdrachten:
  • enable - Zorgt ervoor dat de shell een uitvoerbaar bestand met dezelfde naam uitvoert in plaats van een ingebouwde opdracht. Handig als je een eigen script hebt met de naam echo.
  • eval [argumenten] - Creëert direct een opdracht op basis van de opgegeven argumenten en verzendt deze ter uitvoering.
  • let - Evalueer uitdrukkingen.
  • - Lees en voer de opdrachten in het bestand uit. Wordt gebruikt om gebruikersvariabelen te definiëren. en functies.
  • basisnaam - Markeer een lokale naam.
  • expr - Expressie-evaluatie.
  • lezen - Voer de waarde van een variabele in.
  • shift - Verschuif de lijst met parameters.
  • test - Test de toestand.
Andere ingebouwde opdrachten dienen als instructies in de bash-opdrachttaal.

Staatsinstituut voor elektronische technologie van Moskou

(Technische Universiteit)

Afdeling Geïntegreerde Elektronica en Microsystemen

LABORATORIUMPRACTIUM

NAAR CURSUS:

BESTURINGSSYSTEEMLINUX

Samengesteld door: assistent afdeling. IEMS Kozlov A.V.

Moskou, 2007

De laboratoriumworkshop is in de eerste plaats bedoeld voor masters in engineering en technologie die studeren in het eerstejaars Synopsys-programma in de richting 210100.68, om het Red Hat Enterprise Linux (RHEL) 4.0-besturingssysteem onder de knie te krijgen. Het is ook ontworpen voor FreeScale-studenten en alle gebruikers met een instapniveau of geen Linux-ervaring die de Linux-opdrachtomgeving en kerntoepassingen willen leren die de gebruiker nodig heeft bij het werken met computerondersteunde ontwerpsystemen.

Deze workshop bestaat uit acht laboratoriumwerken waarmee de gebruiker de commando's van de commando-interpreter effectief onder de knie kan krijgen, en geleidelijk kan leren bestanden te schrijven - Shell-, Gawk-, Perl- en Tcl-scripts. Elk laboratoriumwerk omvat de volgende secties: titel, taak en doel van het werk; theoretische informatie met controlevragen; voorbeeld van laboratoriumwerk; procedure voor het uitvoeren van laboratoriumwerk; laboratoriumtaak en werkrapportformulier. De syntaxis voor het schrijven van opdrachten in de shell, samen met opties, parameters, acties, expressies en objectpaden, is ontworpen voor de BASH-opdrachtomgeving. Aan het einde van de laboratoriumworkshop wordt een lijst met referenties verstrekt.

MOSKOU STAATSINSTITUUT VOOR ELEKTRONISCHE ENGINEERING (TECHNISCHE UNIVERSITEIT)

LABORATORIUMWERK Nr. 1

IN DE CURSUS “LINUX-BESTURINGSSYSTEEM”

Bash-opdrachten leren op Linux

BESCHRIJVING VOLTOOID:

KOZLOV A.V.

MOSKOU 2007

Laboratoriumwerk nr. 1 Het bestuderen van bash-commando's op Linux

Doel van het werk : gebruik de BASH-opdrachtinterpreter en beheers de vaardigheden van het werken met opdrachten in het Red Hat Enterprise Linux 4.0-besturingssysteem.

Duur van het werk – 4 uur

Theoretische informatie

besturingssysteem Linux werd oorspronkelijk ontwikkeld als een gratis, flexibel, veelzijdig, krachtig platform voor meerdere gebruikers, ontworpen om de problemen van wetenschappers over de hele wereld te dienen en op te lossen. Vanwege zijn ‘wetenschappelijke focus’ beschikte een dergelijk platform aanvankelijk niet over een geavanceerde grafische interface, die veel wordt gebruikt bij het oplossen van huishoudelijke problemen - computerspellen, internet, interactieve programma's voor het verbinden van gebruikers, maar ook voor het oplossen van kantoorproblemen - werken met databasesystemen, grafieken en histogrammen maken. Vaak werd het werk van wetenschappers met het Linux-besturingssysteem eenvoudigweg teruggebracht tot de gebruikelijke interactie van de gebruiker (een persoon die op een computer werkt) met de console (een terminalvenster op het beeldscherm met tekstinformatie). Om opdrachten te begrijpen die door de gebruiker in Linux worden ingevoerd, zijn opdrachttolken ontwikkeld, dit zijn vertalers van opdrachten die voor mensen begrijpelijk zijn, in besturingssignalen die begrijpelijk zijn voor de kernel van het besturingssysteem. De hoofdtaak van het besturingssysteem is het bemiddelen in de overdracht van opdrachten van een persoon naar een computer. En ondanks het feit dat het Linux-besturingssysteem tegenwoordig overal wordt gebruikt, niet alleen in instituten, ontwerpcentra, computercentra, maar ook voor thuis- en kantoordoeleinden, worden consoles (terminalvensters) nog steeds veel gebruikt, en voor velen lijken ze zelfs nog meer handig vergeleken met het werken met de muis en iconen (iconen in Linux) in een grafische omgeving.

Commando tolk is een string-interactieve interface met een opdrachtregelprompt tussen de gebruiker en het besturingssysteem. De gebruiker voert opdrachten in op de opdrachtregel, de opdrachtinterpreter “accepteert” ze en stuurt ze als instructies naar besturingssysteem voor executie. Met de opdrachtinterpreter kunt u niet alleen opdrachten invoeren, maar ook de invoer en uitvoer van de opdrachtregel omleiden, en bewerkingen uitvoeren in achtergrond, waardoor de gebruiker op dit moment andere taken kan uitvoeren.

Er zijn veel opdrachttolken ontwikkeld voor Linux: Bourne Again shell (BASH), Public Domain shell (PDKSH), TCSH-interpreter en Z-shell. Hoewel BASH de standaardinterpreter is, kunt u elke andere omgeving gebruiken. Voor het gemak van het dagelijkse werk is slechts één commandotolk voldoende. Red Hal Linux bevat alle belangrijke shells, maar de BASH-shell wordt standaard geïnstalleerd en gebruikt. Dit betekent dat dit besturingssysteem BASH gebruikt om op de opdrachtregel te werken, tenzij anders aangegeven.

Commandoregel. Commando-interface Linux-reeksen bestaat uit één regel waarin opdrachten met opties en parameters worden ingevoerd. In de BASH-shell is het begin van de opdrachtregel meestal gemarkeerd uitnodiging in de vorm van een dollarteken ($); Andere Linux-shells gebruiken mogelijk een andere vorm van prompt. Zodra daarom wordt gevraagd, kan de gebruiker een enkele opdracht of een opdracht met opties en parameters invoeren. Als de gebruiker niet genoeg grootte heeft voor de opdrachtprompt, is het mogelijk om deze te beperken met het teken “/”. De opdracht wordt ingevoerd vanaf het toetsenbord en ingevoerd met behulp van de toets. Bijvoorbeeld om uit te voeren systeem datum en systeemtijd kan de gebruiker de opdracht gebruiken datum .

$datum

Vr 8 juni 15:42:35 MSD 2007

Of gebruik bijvoorbeeld het cal-commando om een ​​kalender met de huidige maand weer te geven.

$cal

Juli 2007

zo ma di wo do vr za

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

29 30 31

De belangrijkste shell-interface is een opdrachtregelinterface die ingevoerde opdrachten interpreteert en naar het systeem verzendt. Commando's die op de opdrachtregel worden ingevoerd, moeten bepaalde syntaxisregels volgen. De algemene regel voor het invoeren van opdrachten is: het eerste woord dat op de opdrachtregel wordt ingevoerd, moet de naam van de opdracht zijn; De volgende woorden zijn de opdrachtopties en parameters. Elk woord op de opdrachtregel wordt van andere woorden gescheiden door een of meer spaties of tabs.

Optie - is een code van één of meerdere letters, voorafgegaan door een koppelteken dat het type actie wijzigt dat door de opdracht wordt uitgevoerd. Als voorbeeld van een commando met opties geven we het commando ls . Bij gebruik zonder opties produceert deze opdracht een lijst met alle bestanden en mappen in de huidige map. Behalve bestandsnamen met en zonder extensies staat er niets anders in deze lijst. Bijvoorbeeld wanneer u de opdracht invoert ls met optie - l team ls produceert regel-voor-regel uitvoer van informatie voor elk bestand, namelijk de grootte, datum en tijd van de laatste wijziging. In het volgende voorbeeld voert de gebruiker de opdracht in ls met optie - l. Een koppelteken vóór een optie is vereist. Dit is hoe het Linux-systeem een ​​optie van een parameter onderscheidt.

$ ls-l

totaal 28

Met de optie -a kunt u alle bestanden in de huidige map weergeven, inclusief de zogenaamde verborgen bestanden. Configuratiebestanden zijn vaak verborgen. Verborgen bestandsnamen beginnen altijd met een punt en worden daarom vaak genoemd gebeiteldbestanden. In de meeste gevallen worden de opties gecombineerd. In dit geval wordt één gemeenschappelijk koppelteken vóór de groep opties geplaatst. Met de optie -al wordt bijvoorbeeld informatie weergegeven over alle bestanden in de huidige map, inclusief verborgen bestanden. Het nieuwe ttt-bestand wordt weergegeven.

$ ls-al

totaal 40

Parameter is het woord dat op de opdrachtregel na opties wordt ingevoerd. Bestandsbeheeropdrachten gebruiken doorgaans bestandsnamen als parameters. Als u bijvoorbeeld slechts informatie nodig heeft over één bestand, gauss.plx, specificeert u de naam ervan na de optie -l:

$ ls -l gauss.plx

Het werk van de gebruiker begint in de BASH-shellomgeving, die standaard wordt geladen. Het heeft speciale bewerkingsmogelijkheden op de opdrachtregel die erg handig kunnen zijn bij het leren kennen van het Linux-besturingssysteem. Voordat u opdrachten uitvoert, kunt u deze bewerken door de cursor over de opdrachtregel te bewegen en tekens in te voegen of te verwijderen. Dit is vooral handig als u met zeer complexe teams werkt. Bewerkingsbewerkingen helpen bij het corrigeren van een fout bij het typen van een opdracht. Gebruik de |omhoog| U kunt de opdracht weergeven die u zojuist hebt uitgevoerd. U kunt de opdracht vervolgens opnieuw uitvoeren of, nadat u deze hebt bewerkt, de gewijzigde opdracht uitvoeren. Deze functie is erg handig als u bepaalde bewerkingen meerdere keren herhaalt, bijvoorbeeld bij het bewerken van één en hetzelfde bestand.

Het doel van de opdrachtinterpreter is om met bestanden te werken: gegevens maken, kopiëren, hernoemen, verplaatsen, verwijderen en wijzigen. Zelfs als de gebruiker niet rechtstreeks met de console werkt, maar grafische applicaties gebruikt, vinden deze bestandsbewerkingen onafhankelijk van hem plaats.

Aanmaken van bestanden en mappen. In Linux zijn bestand en map twee soorten gegevens, dus het maken ervan gebeurt met behulp van verschillende elftallen. Om een ​​map (map, map) aan te maken, gebruikt u de opdracht die is gereserveerd in Linux mkdir ("make directory" - maak een map aan). In het volgende voorbeeld maken we een map aan die nieuw is in de huidige map. Om dit te doen, gebruikt u de opdracht mkdir en de naam van de map new, gescheiden door een spatie.

$ mkdir nieuw

De map is gemaakt. Soms moet je echter een volledige geneste structuur maken, terwijl er in een reeds gemaakte map nog een andere zou moeten zijn, en daarbinnen nog een andere, enzovoort. Voor deze doeleinden wordt de bijlageoptie –p gebruikt als onderdeel van de mkdir-opdracht. In het volgende voorbeeld wordt één opdracht gebruikt om submappen te maken: eerste map 1, daarbinnen map 2 en daarbinnen map 3.

$ mkdir -p 1/2/3

Je kunt bestanden maken met behulp van opdrachten of met behulp van ingebouwde en externe Linux-teksteditors, zoals kedit, nedit, gedit, enzovoort. De genoemde editors vereisen echter de werking van een grafische shell, wat de werking van het grafische systeem betekent. Als je die niet hebt, kun je bijvoorbeeld een teksteditor gebruiken VIM of analogen waarvoor geen werking van het grafische systeem vereist is. U kunt ook bestanden maken met behulp van tekstbestandsbeheerders zoals Midnight Commander (mc-opdracht). De gebruiker (ontwerper) heeft vaak behoefte tekstbestanden tekstinformatie opslaan die het proces van het berekenen van een geïntegreerd circuit begeleidt, of bijvoorbeeld de elektrische parameters van een gesimuleerd halfgeleiderapparaat. Het is ook noodzakelijk om de ontvangen gegevens te verwerken (verwijderen, toevoegen, sorteren, splitsen). Dergelijke acties worden ook uitgevoerd met behulp van Linux-opdrachten. Een van de eenvoudigste opdrachten voor het maken van een tekstbestand is de opdracht kat.

Het cat-commando heeft geen eigen interface, dus na het invoeren van het cat-commando met een omleidingssymbool (zie hieronder) en de naam van het nieuwe bestand, kunt u onmiddellijk tekstinformatie schrijven door van regel naar regel te gaan met behulp van de Enter-toets. Het verlaten van de katteneditor (filter) gebeurt met de toetsencombinatie Ctrl-D. Hieronder ziet u een voorbeeld van het maken van een bestand met de opdracht cat.

$ kat > nieuw _ bestand

Het resulterende bestand wordt bekeken met behulp van de opdracht cat en de bestandsnaam, gescheiden door een spatie.

$ kat nieuw _ bestand

Of bijvoorbeeld tekstinformatie van de console opslaan wanneer de opdracht wordt uitgevoerd ls met de optie -a om r in te dienen, kunt u de functie voor het omleiden van gegevens (zie hieronder) en de opdracht gebruiken tee met de optie -a.

$ ls-l | tee-een r

Bestanden en mappen kopiëren. Het kopiëren van bestanden en mappen gebeurt met behulp van de opdracht cp, waarna het kopieerobject wordt aangegeven met relatieve of absolute paden, gescheiden door een spatie, en de nieuwe bestemming van de kopie van dit object, gescheiden door een spatie. Het volgende voorbeeld kopieert het bestand gauss.plx van de huidige map naar submap 1, die zich in de huidige map bevindt.

$ cp gauss . plx 1

Als je toegangsrechten hebt tot Linux-objecten (lab. werk nr. 2), kun je dit bestand ook kopiëren naar gebruiker Alex, wiens werkmap het volgende absolute pad /home/alex heeft, met behulp van de volgende opdracht.

$ cp gauss . plx / thuis / Alex

Als er bij het kopiëren van een bestand al een bestand met dezelfde naam op de bestemming bestaat, wordt dit overschreven. Dit kan leiden tot verlies van de benodigde gegevens. Om dit te voorkomen, gebruik je het commando cp met de optie –i, en Linux zal de gebruiker elke keer vragen of hij het bestand echt wil overschrijven. De nieuwe weergave van de laatste opdracht is als volgt.

$ cp -i gauss.plx /home/alex

Mappen worden op dezelfde manier gekopieerd als bestanden. Bij het kopiëren van mappen met bestanden en submappen wordt echter de optie –R gebruikt als onderdeel van de cp-opdracht. Als u zich in de map /home/antonk/111 bevindt, kopieert u de map laba2 naar een hoger niveau, d.w.z. naar de map /home/antonk. Twee stippen geven een hiërarchieniveau aan dat één stap hoger ligt.

$ cp - R laboratorium 2 ..

Bestanden en mappen hernoemen en verplaatsen. Het hernoemen van bestanden en mappen gebeurt met behulp van de opdracht mv, waarna het te hernoemen object wordt aangegeven, gescheiden door een spatie, en de nieuwe naam van het object, gescheiden door een spatie. Het hernoemen van mappen gebeurt op dezelfde manier als bestanden. Laten we het bestand gauss.plx hernoemen naar een nieuw bestand met de naam gauss2.plx. Als er al een bestand met dezelfde naam als de nieuwe naam van het hernoemde bestand in deze map bestaat, wordt dit overschreven met de inhoud van het hernoemde bestand. Om dit te voorkomen, gebruikt u ook de optie –i. Overigens is op Linux het gebruik van extensies niet vereist. Ze worden alleen gebruikt om bestanden en uitvoerbare programma's te koppelen.

$ mv –i gauss.plx gauss2.plx

Bestanden en mappen verwijderen. Het verwijderen van bestanden en mappen in Linux gebeurt met het rm-commando, waarbij de namen van de te verwijderen bestanden worden aangegeven, gescheiden door een spatie. !!! Wees voorzichtig bij het werken met deze opdracht, u kunt de benodigde gegevens verwijderen. Gebruik, net als bij de opdracht cp, de optie –i in combinatie met de opdracht rm. Een commando met deze optie vraagt ​​om bevestiging om elk bestand en elke map te verwijderen. In het volgende voorbeeld verwijderen we het bestand gauss 2. plx , bevestiging vragen voor verwijdering .

rm –i gauss2.plx

Wildcards. Soms moet u bij het werken met de opdrachtinterpreter bestanden vinden of matchen met behulp van een patroon. U kent bijvoorbeeld alleen de eerste letter van een bestandsnaam en wilt alle bestanden in de werkmap vinden die met die letter beginnen. Of u kent een reeks van meerdere letters in een bestandsnaam of extensie en u moet deze tussen honderden andere bestanden vinden. In dit geval moet u speciale Linux-tekens gebruiken. De opdrachtinterpreter gebruikt een reeks speciale karakters, jokertekens genoemd, die kunnen worden gebruikt om naar bestanden te zoeken, deze te matchen en een lijst met bestandsnamen te maken. Deze tekens zijn het sterretje, het vraagteken en vierkante haakjes (*, ?, ). Nadat een gedeeltelijke bestandsnaam is ontvangen, gebruikt de opdrachtinterpreter deze tekens als sjabloon om te zoeken en een lijst met namen van de gedetecteerde bestanden te genereren. Een parameter met een niet-gekwalificeerde bestandsnaam wordt vervangen door een lijst met overeenkomende bestandsnamen. Deze lijst met namen kan worden gebruikt als parameter in opdrachten die op meerdere bestanden werken (bijvoorbeeld ls). De jokertekens van de opdrachtinterpreter worden vermeld in Tabel. 1.

Tabel 1. Speciale tekens van shell

Gemeenschappelijke symbolen

Doel

Opdrachten op één opdrachtregel scheiden

"team"

Een opdracht uitvoeren

Vergelijking met de klasse van mogelijke tekens in bestandsnamen

Geeft het volgende teken aan als speciaal.

Wordt gebruikt om controletekens aan te geven

De standaarduitvoer van één commando doorsturen als invoer voor een ander commando

Een opdracht uitvoeren op de achtergrond

Commando voor het werken met een lijst met eerder ingevoerde commando's

Wildcards

Resultaat van de aanvraag

Komt overeen met elke tekenset in bestandsnamen Komt overeen met elke een apart karakter

bij bestandsnamen

Omleidingssymbolen

Resultaat van de aanvraag Omleidingen standaard uitvoer

Het uitroepteken zorgt ervoor dat het bestand wordt overschreven als het bestaat. Dit symbool heeft voorrang op de optie die overschrijven verhindert. bestaande bestanden

Leidt standaardinvoer van een bestand of apparaat om naar een programma

Leidt standaarduitvoer om naar een bestand of apparaat, waarbij de uitvoer aan het einde van het bestand wordt toegevoegd

bij bestandsnamen

Resultaat van het toepassen van standaardfoutberichtuitvoer

Leidt de standaardfoutuitvoer om en voegt deze toe aan een bestand of apparaat

Leidt standaardfoutuitvoer om naar standaardinvoer

Leidt de standaardfoutuitvoer om naar een bestand of apparaat

Leidt standaardfoutuitvoer door naar de invoer van een ander commando

Het sterretje (*) kan bijvoorbeeld worden gebruikt om te verwijzen naar bestanden waarvan de naam begint of eindigt met een specifieke combinatie van tekens. Het voorbeeld laat zien hoe u het asterisk (*)-teken in elke combinatie van tekens gebruikt.

$ ls

docl doc2 document documenten mydoc maandag dinsdag

Toonde een volledige lijst met bestanden in de werkmap.

$ ls document*

docl doc2 documentdocumenten

Dit voorbeeld liet zien hoe we het asterisk-teken gebruikten om bestandsnamen te “filteren” die niet begonnen met de lettercombinatie “doc”. Alleen bestandsnamen die de combinatie “doc” bevatten, worden weergegeven. In dit geval worden de resterende bestanden niet verwijderd; ze worden eenvoudigweg niet aan de gebruiker weergegeven.

$ ls *dag

Maandag T dinsdag

Hier hebben we bestandsnamen weergegeven die eindigen op de combinatie “dag”.

$ ls [ mt ] * D *

Maandag Dinsdag

En hier hebben we de namen weergegeven van bestanden waarvan het eerste teken de letter “m” of “t” is, de daaropvolgende tekens zijn willekeurig, vervolgens de letter “d” en opnieuw willekeurige tekens.

Wees voorzichtig als u een asterisk gebruikt bij de opdracht rm; dit kan leiden tot verlies van uw gegevens. Met de volgende opdracht wordt de volledige inhoud van de huidige map verwijderd.

rm *

$ ls *dag

docl doc2 documenten

Het vraagteken (?) geeft slechts één niet-gespecificeerd teken in bestandsnamen aan.