7 sfaturi simple și utile de linie de comandă

Unul dintre instrumentele cele mai utile, dar insuficient folosite, pe care un dezvoltator web le are, este linia de comandă. Terminalul îi sperie adesea pe oameni; așa că aici iată câteva dintre cele mai utile comenzi de zi cu zi.


1. Elementele de bază

Dacă sunteți nou la linia de comandă, veți dori să știți câteva lucruri pentru a vă ajuta să găsiți drumul în jur.

Schimbarea directoarelor

Puteți trece la un alt director cu următoarele:

cd ... / relative / path / to / other / director / sau / fișier
cd / absolute / path / to / other / director / sau / fișier

Dacă vă pierdeți, vă puteți întoarce în directorul "home" cu comanda "cd ~".

Afișarea fișierelor și a directoarelor

Dacă trebuie să știți ce fișiere conține un anumit director:

ls ... / relative / path / to / other / director / sau / fișier
ls / absolute / path / to / other / director / sau / fișier

Puteți utiliza comutatorul "-l" pentru a afișa conținutul ca listă, iar comutatorul "-A" pentru a afișa și fișierele ascunse (pe mașinile bazate pe Linux, fișierele și directoarele al căror nume începe cu un "." Sunt considerate "ascunse „).

Afișarea directorului dvs. curent

Uneori doriți doar să aflați în ce direcție sunteți în prezent!

PWD

Aceasta va afișa o cale către dosarul dvs. curent.

Copierea fișierelor

Copierea fișierelor dintr-un loc în altul este rapidă și ușoară:

cp / files / sau / directoare / la / copy / directory / to / copy / to /

De asemenea, puteți folosi comutatorul "-R" atunci când copiați pentru a deveni recursiv, astfel încât toate subdirectoarele și fișierele sunt, de asemenea, copiate.

Dar scrierea este lentă, și dacă nu îmi amintesc calea sau comanda exactă?

De cele mai multe ori, linia de comandă are activată funcția de completare a filelor, astfel încât să puteți începe să tastați numele unei comenzi sau a unei căi de fișiere, să apăsați fila și aceasta să o completeze. Dacă există mai multe opțiuni, nu se va finaliza pentru dvs., dar dacă apăsați dublu, va fi afișată opțiunile.

Executarea tab-urilor face să scrieți căi lungi de fișiere mult mai repede!

De unde știi ce opțiuni are o comandă?

Există câteva moduri de a determina ce opțiuni are o comandă. Cele mai multe comenzi au un operator --help (sau -help, sau -h) disponibil, care listează posibilele argumente și opțiuni pe care le puteți utiliza:

cd --help

Dacă observați că scurta asistență oferită de operatorul --help nu este suficientă, puteți citi mai multe detalii cu programul Om:

om

Ceea ce vă va spune totul despre programul "nano". Comenzile simple precum "cd" pot să nu aibă o intrare în om.


2. Realizarea unei copii de rezervă a bazei de date (cu compresie GZip)

Backup-ul bazei de date este ceva ce ar trebui să faceți de multe ori. La fel ca majoritatea lucrurilor, există multe modalități de a face acest lucru, dar utilizarea liniei de comandă este una dintre cele mai bune. De ce? Deoarece vă ajută să depășiți problemele potențiale cum ar fi timpul de execuție pentru instrumente cum ar fi phpMyAdmin și eventualele abandonări ale rețelei de la utilizarea unui instrument de administrare locală, cum ar fi MySQL Workbench.

Comanda pentru a rula copia de rezervă este destul de mică, dar poate necesita explicații:

mysqldump -u mysqluser -p mysqldatabase

Acum, pentru a explica ce se întâmplă aici! Programul "mysqldump" este un instrument pentru crearea de copii de rezervă ale bazei de date. Parametrii utilizați sunt:

  • Comutatorul "-u" înseamnă că veți specifica un nume de utilizator pentru conectare, care trebuie să urmeze, precum "-u mysqluser" de mai sus
  • Comutatorul "-p" înseamnă că ori veți specifica imediat parola de utilizat (fără spațiu) sau vă va solicita o singură dată
  • Parametrul final utilizat în exemplul de mai sus este numele bazei de date care trebuie salvat (bineînțeles!)

Dacă ați executat comanda de mai sus, ați fi văzut conținutul bazei dvs. de date scânteind pe ecran. Asta e bine, pentru că știm că acea parte funcționează (conectându-se la baza de date), dar este și rău, pentru că ... unde a mers? Răspuns: nicăieri! A trecut pe jos, și asta a fost. Acum trebuie să o capturăm și să o punem într-un dosar.

Pentru a plasa conținutul intrării într-un fișier, pentru a face backup, trebuie să folosim ceea ce se numește a redirecționare.

mysqldump -u mysqluser -p mysqldatabase> db_backup.sql

Așa că am adăugat un redirecter și numele fișierului în care vroiaam ieșirea să intre. Acum ar trebui să puteți vedea un fișier numit "db_backup.sql" și dacă îl deschideți, puteți vedea un script SQL cu structura și conținutul bazei de date pregătite pentru restaurare sau migrare.

Un ultim lucru care ar putea fi util pentru o copie de siguranță este comprimarea scriptului SQL. Pentru acest exemplu, voi folosi compresia GZip, pentru că este destul de obișnuit, dar puteți folosi și Bzip2 sau altceva.

Pentru a adăuga compresie în această comandă, facem doar ceea ce se numește tubulatură. Efectuăm ieșirea din mysqldump prin gzip și apoi redirecționăm-o în fișierul dorit, așa cum este:

mysqldump -u mysqluser -p mysqldatabase | gzip> db_backup.sql.gz

De asemenea, am adăugat ".gz" la numele fișierului, așa că știu că este comprimat și nu doar text simplu (va fi, de asemenea, mai mic!)


3. Restaurare dintr-o copie de rezervă a bazei de date (cu compresie GZip)

Deci, aveți o copie de rezervă a bazei dvs. de date (fie folosind metoda de mai sus, fie într-un alt mod) și ceva a mers prost și trebuie să restabiliți sau îl migrați la un server nou. Ați putea folosi unul dintre celelalte instrumente menționate anterior, dar în exemplul phpMyAdmin, ce ar fi dacă fișierul dvs. de backup de bază de date este mai mare decât dimensiunea permisă de încărcare? Din fericire, linia de comandă nu-i deranjează.

Comanda pentru restaurare este foarte asemănătoare cu cea pentru copierea de rezervă. În primul rând, fără compresia GZip:

cat db_backup.sql | mysql -u mysqluser -p mysqldatabase

Utilizăm comanda "pisică" pentru a scoate conținutul scriptului de rezervă și conduce conținutul său în programul mysql. După cum puteți vedea, programul mysql are aceleași opțiuni ca mysqldump-ul făcut în secțiunea a doua.

Acum, dacă scriptul a fost comprimat în GZip, nu putem exporta conținutul său în mysql, deoarece vor fi comprimate în loc de un script SQL frumos. Deci, facem următoarele:

gunzip < db_backup.sql.gz | mysql -u mysqluser -p mysqldatabase

Vezi, e foarte familiar, tocmai sa schimbat putin.

Ce se întâmplă aici este că rulați și "gunzip" și redirecționați scriptul de rezervă în el pentru a fi decomprimat. Apoi, conducem ieșirea decomprimată în programul "mysql".


4. Găsiți / înlocuiți într-un fișier text

Uneori aveți un fișier mare, cum ar fi poate un export de baze de date, și trebuie să faceți ceva găsiți / înlocuiți pe el ... dar nu se va deschide în nici unul dintre editorii de text, pentru că mașina dvs. nu are memorie în încercarea de ao deschide! Ei bine, aici este o cale în jurul valorii de faptul că, folosind linia de comandă și câteva expresii regulate.

Modul în care funcționează este de a scoate conținutul scriptului SQL (sau orice fișier pe care îl utilizați), îl conduceți printr-un program numit "sed", care este în mod special prin manipularea conținutului streaming și apoi redirecționați ieșirea către noul fișier . Sunet complicat? Păi ... Cred că este puțin, dar comanda în sine arată simplu!

cat original_dump.sql | sed / Japheth / Japh /> new_dump.sql

Noua parte aici este într-adevăr programul "sed". Practic, ceea ce face este să ia o intrare și să se potrivească cu primul model (în acest caz, numele meu, "Japheth") și să îl înlocuiesc cu al doilea model (în acest caz, o scurtare a numelui meu, "Japh" acea.


5. Copierea securizată a fișierelor către / de pe un server (peste SSH cu SCP)

Dacă lucrați la linia de comandă și trebuie să copiați un fișier, mai ales dacă aveți nevoie să o faceți în siguranță, de ce să mergeți și să vă declanșați clientul FTP? Doar utilizați un program numit Secure Copy, sau SCP, care este în special pentru a face copiat fișierul la distanță în siguranță. Secure Copy folosește SSH pentru a copia fișierele, deci trebuie să vă asigurați că vă puteți conecta la computerul la distanță prin intermediul SSH-ului (vom vorbi despre acest lucru ceva mai mult la sfârșitul articolului, deci țineți-vă că gândul).

Sintaxa comenzii scp este similară cu cea a comenzii cp acoperită în secțiunea 1, cu adăugarea numelui de gazdă a computerului eliminați și a utilizatorului de conectare cu:

scp / path / to / local / nume de fișier @ username: / path / to / copy / to /

Bitii care trebuie notați sunt "username @ hostname:", care, așa cum am explicat mai sus, sunt numele de utilizator pe care îl folosiți și numele de gazdă pe care îl folosiți la conectare. Vi se va cere să introduceți parola pentru acel utilizator și veți obține, de asemenea, un indicator de progres pentru copiere pentru a vedea cum merge.

Puteți utiliza comutatorul "-r" (notă: este scris cu majuscule pentru scp, majuscule pentru cp) cu copiere securizată pentru a face recursiv. De asemenea, dacă aceasta este prima dată când utilizați SCP sau SSH pentru a vă conecta la aparatul de la distanță, vi se poate solicita să acceptați o amprentă RSA pentru securitate, pe care ar trebui să o acceptați (presupunând că sunteți sigur că vă conectați la serverul corect).

Merită menționat faptul că acest lucru funcționează în ambele sensuri. De asemenea, puteți copia fișiere de pe computerul la distanță în mașina dvs. locală prin comutarea argumentelor:

nume de utilizator scp @ hostname: / path / to / remote / file / local / path / to / copy / to /

Dacă sunteți SSHed într-un singur server web și doriți să copiați fișiere în altul, puteți utiliza această comandă pentru a copia direct fișierele fără a fi nevoie să le descărcați pe computerul local!


6. Găsirea fișierelor specifice într-un proiect mare

Găsirea unui fișier cu un anumit nume

Doriți să găsiți un anumit fișier, dar nu sunteți sigur de unde se ascunde în numeroasele directoare ale proiectului dvs.? (sau chiar dacă există mai multe!)

găsi ./ -iname "index.php"

Comanda "find" este pentru localizarea fișierelor dintr-o heirarhie de directoare. Are multe opțiuni, deci utilizările sale sunt destul de variate. Aici am specificat căutarea în directorul curent cu "./" și a folosit comutatorul "-iname", ceea ce înseamnă căutarea unui fișier cu un nume ca cel furnizat. Există, de asemenea, un comutator "-name", dar comutatorul "-iname" este insensibil pentru majuscule, așa că va găsi și INDEX.php.

Găsirea unui fișier cu conținut special

Știai că ai scris o funcție pentru ceva, dar nu-ți amintești în care fișier a fost?

grep -iR myFunction ./

"grep" este un program pentru imprimarea de linii care se potrivesc cu un anumit tipar. Aveți posibilitatea să-l furnizați cu niște switch-uri, cum ar fi "-i" pentru a face case-insensitive, și "-R" pentru a face recursiv în exemplul meu. Apoi, furnizați un model și calea de căutare (aici căut directorul curent cu "./"). Acest exemplu va arăta numele fișierului și linia din acel fișier pentru orice potrivire pe care o găsește în "myfunction" (caz-insensitve din cauza "-i").

Dacă proiectele dvs. sunt copii de lucru subversion, puteți afla că este enervant să vedeți rezultate din directoarele ".svn". Pentru a exclude anumite directoare din căutare, utilizați comutatorul "--exclude-dir =", de exemplu "--exclude-dir = .svn".


7. Efectuarea de acțiuni în vrac pe anumite fișiere

Acum știm cum să găsim fișiere particulare; ce se întâmplă dacă vrem să facem anumite lucruri cu aceste dosare? De exemplu, lucrez adesea pe un Mac și găsesc că atunci când salvez fișierele în acțiuni Windows sau în acțiuni de distribuție Linux Samba în rețea, Mac OS X folosește fișiere ".filename" peste tot. Așadar, îmi place să pot curăța aceste lucruri în mod regulat.

Pentru a găsi astfel de fișiere, folosesc ambele metode din secțiunea anterioară pentru a găsi fișiere cu un anumit nume:

găsi ./ | grep "\. \ _. *"

Căutăm o cale de ieșire a tuturor fișierelor din directorul curent (recursiv), apoi trasăm ieșirea în grep, ceea ce asigură că se potrivește cu expresia mea regulată. Expresiile regulate spun doar: "potriviți tot ce începe cu un literal, urmat de un literal _ urmat de 0 sau mai mult de orice altceva". Rulați-o ca să vă asigurați că vedeți fișierele dorite.

Acum, pentru a face ceva cu toate fișierele pe care le-ați capturat din acea comandă, îl înfășurați cu cotații ("). Dacă vroiam să le șterg pe toate:

rm -f 'găsi ./ | grep "\. \ _. *" "

Am comanda "rm" (pentru a elimina sau șterge fișierele) un comutator "-f" (ceea ce înseamnă a forța o ștergere fără a cere confirmarea) și se va executa pentru fiecare fișier returnat de comanda din spate -citate!

Cred că ar fi iresponsabil să nu menționez aici că ar trebui să fii foarte atent folosind comanda "rm". Dacă utilizați comanda "rm" cu comutatorul "-f", asigurați-vă că știți exact ce veți șterge și că într-adevăr doriți să plecați! Dacă utilizați "-f", nu veți avea oa doua șansă.


Cum primesc acces la linia de comandă la gazda Web?

Am menționat mai devreme în articol despre conectarea la un computer la distanță prin SSH. Multe dintre aceste comenzi sunt cele mai utile atunci când sunt utilizate pe serverul dvs. web, care probabil rulează linux, deci va trebui să vă puteți conecta la linia de comandă. Modul de a face acest lucru este prin utilizarea unui program numit SSH, care o face în siguranță.

Pe Mac OS X sau pe linux, puteți rula SSH din aplicația Terminal:

numele de utilizator ssh

Dacă sunteți pe Windows, va trebui să utilizați un program disponibil gratuit, numit PuTTY.

Vi se va solicita parola când vă conectați.

Dacă nu aveți deja acces SSH la gazda dvs. Web, probabil că veți putea să o solicitați, iar dvs. îl veți configura.


În concluzie…

Ca cele mai multe lucruri, "nu știți, ce nu știți". Ar putea părea dificil să descoperiți cum să utilizați linia de comandă; dar există o cantitate imensă de energie disponibilă după ce vă împachetați capul în jurul său! Sperăm că acest articol vă va face să începeți să explorați! Alte intrebari?

Cod