Al in mei had Nettuts + een geweldig artikel getiteld "7 eenvoudige en bruikbare opdrachtregel-tips"; dit was een geweldig artikel om aan de slag te gaan met het gebruik van de opdrachtregel. Maar er is nog veel meer dat je kunt leren over het gebruik van een shell, en ik zal je naar het volgende niveau in deze tutorial brengen!
Als je Mac OS X gebruikt, of je favoriete smaak Linux, ben je helemaal klaar. Start gewoon de terminal op en blijf doorgaan. Als je Windows gebruikt, is de standaardopdrachtenset niet helemaal wat een bash-shell is. Als je wat meer power wilt, kijk dan eens naar Microsoft PowerShell; de onderstaande opdrachten werken daar echter niet noodzakelijk. U kan een bash-shell op Windows krijgen, hoewel:
Oké, laten we naar binnen gaan!
Als ontwikkelaar is een van uw meest voorkomende taken het maken van bestanden. Als u vanaf de opdrachtregel werkt, geeft u meestal alleen de naam van het bestand dat u aan uw editor wilt toevoegen:
$ mate index.html $ mvim default.css
Af en toe wilt u echter een of meer bestanden maken, zonder deze te bewerken. In dit geval gebruikt u de aanraken
commando:
$ touch index.html $ touch one.txt two.txt three.txt
Het is zo makkelijk. Eigenlijk, de aanraken
opdracht is voor het bijwerken van de toegang / gewijzigde datum van een bestand; het is gewoon een leuk neveneffect dat als het bestand niet bestaat, het het zal creëren.
Nou, aangezien het allemaal om bestanden gaat, is er een goede verandering, je wilt de inhoud van een bestand van de terminal vroeg of laat zien. Er zijn een paar commando's die dit voor je doen. De eerste is kat
; kat
is een afkorting voor "concatenate", en deze opdracht doet meer dan de uitvoer van bestanden; maar dat is wat we hier zullen bekijken. Het is zo simpel als het doorgeven van de opdracht een bestand:
$ cat shoppingList.txt
Als het bestand echter groot is, scrolt de inhoud langs u en blijft u helemaal onderaan staan. Toegegeven, je kunt terugbladeren, maar dat is slecht. Hoe zit het met het gebruik minder
?
$ less shoppingList.txt
Minder is een veel betere manier om grote bestanden op de opdrachtregel te inspecteren. Je krijgt een scherm vol tekst per keer, maar niet meer. U kunt een regel omhoog of een regel naar beneden verplaatsen met de k
en j
en verplaats een venster omhoog of omlaag met b
en f
. U kunt naar een patroon zoeken door te typen /patroon
. Als je klaar bent, druk je op q
om de minder
viewer.
Aangezien u waarschijnlijk met uw redelijke hoeveelheid framework-bibliotheken werkt, zult u vaak merken dat u deze bestanden downloadt terwijl u werkt. Oh, ik weet het: je kunt het gewoon downloaden van het web, naar de map navigeren, het decomprimeren en de stukken naar je project kopiëren, maar klinkt dat niet als zoveel werk? Het is veel eenvoudiger om de opdrachtregel te gebruiken. Om bestanden te downloaden, kunt u gebruiken Krul
; ga als volgt verder:
$ curl -O http://www.domain.com/path/to/download.tar.gz
De -O
vlag vertelt Krul
om de gedownloade inhoud te schrijven naar een bestand met dezelfde naam als het externe bestand. Als u deze parameter niet opgeeft, geeft krul waarschijnlijk alleen het bestand in de regel commmand weer (ervan uitgaande dat het een tekst is).
Curl is een behoorlijk uitgebreid hulpmiddel, dus bekijk de man-pagina (zie hieronder) als je denkt dat je het veel gaat gebruiken. Hier is een nette tip die de beugeluitbreiding van de shell gebruikt:
$ curl -0 http://www.domain.com/one,two,three.txt
Ja, het is zo gemakkelijk om meerdere bestanden tegelijk te downloaden. (Merk op dat dit geen curl-functionaliteit is; het maakt deel uit van de shell, dus je kunt deze notatie gebruiken in andere commando's, vink deze link aan voor meer)
Dus nu ben je aan het slingeren op de opdrachtregel; Er is echter een grote kans dat de meeste dingen die je download worden gearchiveerd en gzipped, met een extensie van .tar.gz (of, alternatief, .tgz). Wat doe je daarmee? Laten we even een stapje terug doen en begrijpen wat precies "gearchiveerd en gzipte" betekent. Je bent waarschijnlijk bekend met archieven. U hebt .zip-bestanden gezien; ze zijn een incarnatie van archieven. Kort gezegd is een archief slechts één bestand dat meer dan één bestand samenvoegt. Vaak comprimeren archieven de bestanden, zodat het uiteindelijke bestand kleiner is dan het originele bestand samen. Je kunt echter nog steeds een beetje kleiner worden door het archief te comprimeren ... en dat is waar gzipping binnenkomt. Gzipping is een vorm van compressie.
Dus, terug naar die download. Het is geasfalteerd (gearchiveerd) en gzipped. Je zou het kunnen uitpakken en het vervolgens onzichtbaar maken, maar het gaat hier om minder toetsaanslagen, toch? Dit is wat je zou doen:
$ tar xvzf download.tar.gz
Wacht wat? Dit is de verdeling: teer
is de opdracht die we uitvoeren; xvzf
zijn de vlaggen die we gebruiken (meestal heb je een streepje ervoor, maar dat is hier optioneel). De vlaggen zijn als volgt:
X
laten we teer
weet dat we e zijnXtracting, niet archivering.v
laten we teer
weet dat we willen dat het is verbose (geef ons wat output over de actie die hij uitvoert).z
laten we teer
weet dat het bestand waarmee we werken is gzipped (dus het uitgepakt het bestand).f
laten we teer
weet dat we het de naam van het archiefbestand doorgeven.Als u een van deze gzipped-archieven wilt maken, is het net zo eenvoudig als het vervangen van de X
vlag met een c
(naar create een archief). De v
en z
vlaggen zijn opties: wil je output? wat dacht je van gzipping? Natuurlijk, ga weg f
; je moet de bestandsnaam opgeven voor het nieuwe archief (anders wordt het allemaal uitgevoerd naar de opdrachtregel). Hierna geeft u de opdracht door aan alle bestanden die u in het archief wilt plaatsen:
$ tar cvzf archive.tar.gz index.html css js auth.php $ tar cvzf archive.tar.gx * .txt
Voor de volledigheid zal ik vermelden dat je archieven (of andere bestanden) afzonderlijk kunt gzippen; Wanneer u dit doet, vervangt gzip het oorspronkelijke bestand door de gzipped-versie. Om de verwijdering ongedaan te maken, voegt u de -d
vlag (denk aan decompress).
$ gzip something.txt $ gzip -d something.txt.gz
Een ander ding dat u vaak zult doen als een webontwikkelaar, is het wijzigen van bestandsrechten. Er zijn drie rechten die u kunt instellen en er zijn drie klassen die deze rechten kunnen ontvangen. De rechten zijn lezen, schrijven, en uitvoeren; de klassen zijn gebruiker, groep, en anderen. De gebruiker is meestal de eigenaar van het bestand, de gebruiker die het bestand heeft gemaakt. Het is mogelijk om groepen gebruikers te hebben en de groepsklasse bepaalt de machtigingen voor de gebruikers in de groep die toegang hebben tot het bestand. Zoals te verwachten, omvat de klasse anderen iedereen. Alleen de gebruiker (eigenaar van het bestand) en de supergebruiker kunnen bestandsrechten wijzigen. Oh, en alles wat je net hebt gelezen, geldt ook voor mappen.
Dus, hoe kunnen we deze rechten instellen? De opdracht hier chmod
(change moderne). Er zijn twee manieren om het te doen. Ten eerste kun je het doen met octale notatie; dit is een beetje cryptisch, maar als je er eenmaal achter bent, is het sneller. In feite krijgt execute 1 'punt', krijgt write 2 en leest read 4. Je kunt deze toevoegen om meerdere permissies te geven: read + write = 6, read + write + execute = 7, etc. Dus voor elke klasse, krijg dit nummer en zet het op een rij om een driecijferig nummer voor gebruiker, groep en anderen te krijgen. 764 geeft de gebruiker bijvoorbeeld alle rechten, geeft lees- en schrijfmogelijkheden voor groepen en geeft anderen de toestemming om te lezen. Voor een betere uitleg, bekijk het Wikipedia-artikel.
Als je het moeilijk vindt om de octale notatie te onthouden, zou je symbolische notatie gemakkelijker kunnen vinden (hoewel het nog een paar toetsaanslagen vereist). In dit geval gebruikt u de eerste 'u', 'g' en 'o' voor respectievelijk de gebruiker, groep en anderen (en 'a' voor alle klassen). Vervolgens gebruik je 'r', 'w' en 'x' voor lezen, schrijven en uitvoeren. Ten slotte gebruikt u de operator '+', '-' en '=' om machtigingen toe te voegen, af te trekken en absoluut in te stellen. Hier leest u hoe u deze symbolen gebruikt: class, operator, permissies. Bijvoorbeeld, u + rwx
voegt alle rechten toe aan de gebruikersklasse; go-x
verwijdert uitvoerbare toestemming van groep en anderen; a = rw
stelt alle klassen in op alleen lezen en schrijven.
Om al deze theorie op de commandolijn te gebruiken, begin je met het commando (chmod
), gevolgd door de machtigingen, gevolgd door de bestanden of mappen:
$ chmod 760 someScript.sh $ chmod u = rwx g + r o-x dataFolder
Als je versiebeheer zoals Git of Subversion hebt gebruikt, weet je hoe handig een dergelijk systeem is wanneer je een project met andere ontwikkelaars wilt delen, of houd je gewoon de versies bij. Maar wat als u een vriend enkele updates naar één bestand wilt sturen? Of wat als een andere ontwikkelaar je een e-mail heeft gestuurd met de nieuwe versie van een bestand dat je hebt bewerkt sinds je het laatste exemplaar hebt ontvangen? Soms is volledig versiebeheer te veel, maar je hebt nog steeds iets kleins nodig. Nou, de commandolijn heeft je gedekt. Je zult de diff
commando. Voordat u wijzigingen in een bestand aanbrengt, kopieert u het bestand zodat u het origineel hebt. Nadat u hebt bijgewerkt, uitvoeren diff
; Als u de uitvoer niet naar een bestand verzendt, wordt deze gewoon uitgevoerd naar de opdrachtregel, dus voeg een toe >
met de naam voor uw patchbestand:
$ cp originalFile nieuwBestand $ vim nieuwBestand #edit nieuwBestand $ diff origineelBestand nieuwBestand 1c1 < This is a sentence. --- > Dit is een korte zin. $ diff originalFile nieuwBestand> changes.patch
Zoals u kunt zien, de diff
is gewoon een eenvoudig tekstbestand dat de syntaxis gebruikt diff
en lap
commando zal begrijpen. lap
? Wel, dat is het bevel dat hand in hand gaat diff
. Als u een patchbestand hebt ontvangen, werkt u het origineel als volgt bij:
patch originalFile2 changes.patch
En nu ben je allemaal bijgewerkt.
sudo
is niet echt een commando zoals de anderen, maar het is er een waar je behoefte aan zult hebben naarmate je dieper ingaat op de wereld van de commandoregel. Dit is het scenario: er zijn een aantal dingen die gewone gebruikers niet zouden moeten kunnen doen op de opdrachtregel; het is niet moeilijk om onherroepelijke schade aan te richten. De enige gebruiker die het recht heeft om alles te doen wat hij of zij wil, is de supergebruiker of rootgebruiker. Het is echter niet echt veilig om als supergebruiker ingelogd te zijn vanwege al die kracht. In plaats daarvan kunt u de sudo
(super user do) opdracht om u rootrechten voor een enkele opdracht te geven. U wordt om het wachtwoord van uw gebruikersaccount gevraagd en wanneer u dat hebt opgegeven, voert het systeem de opdracht uit.
Voor het installeren van een robijn edelsteen zijn bijvoorbeeld supergebruikersrechten vereist:
$ gem installeer heroku ERROR: Tijdens het uitvoeren van gem ... (Errno :: EACCES) Machtiging geweigerd - /Users/andrew/.gem/ruby/1.9.1/cache/heroku-1.9.13.gem $ sudo gem install heroku Wachtwoord: succesvol geïnstalleerd heroku-1.9.13
De meeste opdrachten die je in een bash-shell gebruikt, zijn behoorlijk flexibel en hebben veel verborgen talenten. Als u vermoedt dat een opdracht kan doen wat u wilt, of als u alleen algemene instructies over het gebruik van een opdracht wilt zien, wordt het tijd om de handleidingen of manpagina's te gebruiken, zoals ze worden genoemd. Typ gewoon man
gevolgd door het commando waar je nieuwsgierig naar bent.
$ man ln
Je zult merken dat de man-pagina's worden geopend minder
.
Wanneer u klaar bent voor de dag, kunt u uw computer zelfs uitschakelen via de opdrachtregel. Het commando in de schijnwerper is stilgelegd
, en je zult moeten gebruiken sudo
om het uit te voeren. Je moet het commando een of twee vlaggen geven; de meest voorkomende zijn -h
het systeem stoppen (afsluiten), -r
om opnieuw op te starten, en -s
om het in slaap te brengen. Vervolgens geeft u de tijd door waarin het zou moeten gebeuren, als volgt nu
, +numberOfminutes
, of yymmddhhmm
. Ten slotte kunt u een bericht doorgeven dat aan gebruikers getoond moet worden wanneer de akte op het punt staat te gebeuren. Als ik in een half uur mijn computer in slaap zou willen laten, zou ik dit doen:
$ sudo shutdown -s +30
Omdat de commandoregel alles draait om efficiëntie, is het de bedoeling dat het gemakkelijk is om opdrachten te herhalen. Er zijn een paar manieren om dit te doen. Ten eerste kunt u de geschiedenis
commando om een genummerde lijst te krijgen van veel van je recente commando's. Voer vervolgens een uitroepteken en het geschiedenisnummer in om een ervan uit te voeren.
$ geschiedenis ... 563 chmod 777 one.txt 564 ls -l 565 ls 566 cat one.txt ... $! 565
Toegegeven, dit is een verschrikkelijk voorbeeld, want ik typ meer tekens om de geschiedenis te gebruiken dan het zou duren om de opdracht opnieuw in te voeren. Maar als u eenmaal opdrachten combineert om lange reeksen te maken, zal dit sneller zijn.
Het is zelfs sneller om toegang te krijgen tot de laatste opdracht en het laatste argument dat u hebt gebruikt. Gebruik voor de nieuwste opdracht !!
; de gebruikelijke use case die hiervoor wordt gegeven is het toevoegen van sudo aan de voorzijde van een commando. Gebruik voor het laatste argument !$
; hiermee is waarschijnlijk het gebruikelijke voorbeeld om naar een nieuwe map te gaan. In beide gevallen zal de shell het volledige commando afdrukken, zodat u kunt zien wat u werkelijk aan het uitvoeren bent.
$ gem install datamapper ERROR: Terwijl het uitvoeren van gem ... (Errno :: EACCES) Toestemming geweigerd - /Users/andrew/.gem/ruby/1.9.1/cache/datamapper-1.0.0.gem $ sudo !! sudo gem install datamapper Wachtwoord: succesvol geïnstalleerd datamapper-1.0.0 $ mkdir lib $ cd! $ cd lib
Als je net zo gepassioneerd bent over productiviteit als ik, zou het idee om de opdrachtregel zo veel mogelijk te gebruiken, bij jou moeten resoneren. Wat ik je hier heb laten zien, is slechts een greep uit de ingebouwde commando's ... dan zijn er veel meer dan je jezelf kunt installeren (kijk bijvoorbeeld naar bijvoorbeeld de homebrew pakketbeheerder). Maar misschien beheer je de commandoregel al; zo ja, kunt u nog een geweldig commando delen met de rest van ons? Klik op de opmerkingen!