1 of 40

Cursul #5

Interfața în linia de comandă

1

2 of 40

It was a mistake to think that GUIs ever would, could, or even should, eliminate CLIs.

Jeffrey Snover (Architect of Windows PowerShell)

2

3 of 40

Suport de curs

Capitolul 7 – Interfața în linia de comandă

    • https://github.com/systems-cs-pub-ro/carte-uso/releases

3

4 of 40

Utilizatorul și sistemul de operare

4

hardware

sistem de operare

app1

app2

app3

5 of 40

Shell-ul

5

hardware

sistem de operare

app1

app2

app3

shell

6 of 40

Shell și proces

  • utilizatorul folosește interfața shell-ului
    • butoane, click (GUI)
    • comenzi cu parametri (CLI)
  • shell-ul identifică un fișier executabil
  • shell-ul creează un proces copil
  • procesul copil încarcă informațiile din executabil
  • procesul astfel creat e noul proces/aplicație

6

7 of 40

Shell GUI vs CLI

  • interfață intuitivă
  • culori, personalizare
  • eye-candy
  • ferestre
  • butoane
  • meniu
  • resurse consumate

7

  • interfață text, simplă
  • opțiuni complexe
  • comenzi, parametri
  • consum redus de resurse
  • consecvență

8 of 40

Interfețe în linia de comandă

  • shell-ul CLI al unui sistem de operare (Bash, zsh, tcsh)
  • consola GRUB (bootloader)
  • consola Python
  • consola de configurare de echipamente de rețea (Cisco IOS, Juniper JunOS)
  • consola Matlab, AutoCAD, R
  • consolă de jocuri (FPS)

8

9 of 40

De ce CLI?

  • eficient
  • consecvent
  • posibilitate automatizare sarcini (scripting)
  • ușor de adăugat o opțiune nouă
    • o comandă nouă = un executabil nou

9

10 of 40

Funcționare CLI

  • utilizatorul introduce comanda
  • interfața traduce comanda într-un apel intern sau de executabil intern
  • creează un proces
  • afișează rezultatul rulării comenzii

10

11 of 40

Shell CLI

  • prompt pentru utilizator
  • comenzile sunt:
    • interne: sunt interpretate de shell, nu se caută executabile externe: cd, exit, alias
    • externe: căi către executabile

11

12 of 40

Bash

  • shell implicit în Linux
  • Bourne Again Shell
  • succesor al Sh (Bourne Shell)
  • multe funcționalități sunt comune cu alte shell-uri: zsh, tcsh
  • executabilul este /bin/bash

12

13 of 40

Funcționare shell

  • shell-ul traduce comanda în calea unui executabil
    • variabila de mediu PATH
  • se iau căile din variabila de mediu PATH
  • se localizează executabilul
  • se creează un proces copil
  • se încarcă executabilul
  • se așteaptă încheierea rulării executabilului
  • se reafișează promptul utilizatorului

13

14 of 40

Foreground și background

  • un singur proces rulează în foreground
  • oricâte în background
  • în background pot fi suspendate

14

15 of 40

Foreground și background (2)

15

16 of 40

Shell și terminal

16

17 of 40

Funcționalități terminal

  • tab-uri de terminal
  • Ctrl+d: închide terminalul
  • command history scrolling
  • transparență
  • blinking cursor, terminal bell

17

18 of 40

Funcționalități shell

  • completare comenzi (command completion)
    • Tab
    • Tab Tab
    • Alt+.
  • istoricul de comenzi (reverse history search)
    • Ctrl+r
  • personalizare prompt
    • variabila PS1
  • editarea comenzilor (command line editing)
    • deplasare: Ctrl+a, Ctlr+e, Ctrl+f, Ctrl+b, Alt+f, Alt+b
    • ștergere: Ctrl+c, Ctrl+k, Ctlr+u, Alt+d, Alt+Backspace

18

19 of 40

Caractere speciale în shell

  • spațiu (blank): separator de argumente
  • #: comentariu
  • *: wildcard
  • &, |, ; - înlănțuire comenzi
  • >, < - redirectări
  • $ - expandări
  • ’, ”, \ - escapări

  • https://explainshell.com

19

20 of 40

Globbing

ana@host:~/code/tests$ ls

Makefile endian.c struct_bit struct_bit.o tcp_new_sock.c

endian endian.o struct_bit.c tcp_new_sock tcp_new_sock.o

ana@host:~/code/tests$ ls *.c

endian.c struct_bit.c tcp_new_sock.c

ana@host:~/code/tests$ ls end?an.c

endian.c

ana@host:~/code/tests$ ls [a-s]*.c

endian.c struct_bit.c

ana@host:~/code/tests$ ls *.{c,o}

endian.c endian.o struct_bit.c struct_bit.o tcp_new_sock.c tcp_new_sock.o

20

21 of 40

Escapări

ana@host:/tmp/uso$ ls -l

total 0

-rw-r--r-- 1 ana ana 0 2007-11-18 00:14 alfa beta.txt

-rw-r--r-- 1 ana ana 0 2007-11-18 00:14 d.txt

ana@host:/tmp/uso$ ls alfa beta.txt

ls: alfa: No such file or directory

ls: beta.txt: No such file or directory

ana@host:/tmp/uso$ ls "alfa beta.txt"

alfa beta.txt

ana@host:/tmp/uso$ ls 'alfa beta.txt'

alfa beta.txt

ana@host:/tmp/uso$ ls alfa\ beta.txt

alfa beta.txt

ana@host:/tmp/uso$ echo $a

4

ana@host:/tmp/uso$ echo "$a"

4

ana@host:/tmp/uso$ echo \$a

$a

ana@host:/tmp/uso$ echo '$a'

$a

21

22 of 40

Expandări

ana@host:-$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/PacketTracer5

ana@host:~/tmp$ touch $(seq -f "file-%02g.txt" 1 20)

ana@host:~$ ls

file-01.txt file-03.txt file-05.txt file-07.txt file-09.txt file-11.txt file-13.txt [...]

file-02.txt file-04.txt file-06.txt file-08.txt file-10.txt file-12.txt file-14.txt [...]

ana@host:~$ a=3

ana@host:~$ ((a++))

ana@host:~$ b=$((a+1))

ana@host:~$ echo $b

5

22

23 of 40

Redirectări

  • > - redirectarea ieșirii standard
  • < - redictarea intrării standard
  • 2> - redirectarea ieșirii de eroare standard
  • pentru redirectare formatul comenzii este command operator file
  • în cazul comunicării între procese forma este command1 |command2

23

24 of 40

Înlănțuirea comenzilor

ana@host:~$ svn log | less

root@asgard:~# apt-get update ; apt-get upgrade ; apt-get dist-upgrade

ana@host:~$ id ana &> /dev/null && echo "da" || echo "nu"

da

ana@host:~$ id atilla &> /dev/null && echo "da" || echo "nu"

nu

24

25 of 40

One linere

  • înlănțuirea mai multor comenzi, de obicei prin pipe
  • ieșirea uneia e folosită de alta și tot așa
  • quick’n’dirty
  • funcționalități mai complexe într-o singură linie

25

26 of 40

Filtre de text

  • prelucratoare de text
    • din alte fișiere
    • din alte comenzi
  • comenzi generatoare de text
    • ps, dmesg, find, last, strace
  • filtre/prelucratoare de text
    • cat, tac, rev, nl
    • Head, tail
    • cut, tr
    • sort, uniq, wc
    • grep
    • sed, awk

26

27 of 40

cat, tac, rev, nl

  • cat: afișare conținut fișier
  • tac: afișare conținut fișier în ordinea inversă a liniilor
  • rev: afișare linii inversate (primul element de pe linie devine ultimul)
  • nl: afișare număr de linie

27

28 of 40

head, tail

  • head –n 10: primele 10 linii
  • head –n -10: toate mai puțin ultimele 10 linii
  • tail –n 10: ultimele 10 linii
  • tail –n +11: începând cu linia 11

28

29 of 40

cut, tr

  • cut –d ‘ ‘ –f 1
  • cut –d ’:’ –f 2,3
  • tr ‘ ‘ ‘,’
  • tr –d ‘:’

29

30 of 40

sort, uniq, wc

  • sort: sortează intrările
  • sort –r –n: sortează invers, numeric
  • uniq: elimină duplicatele (trebuie sortate mai întâi)
  • wc: numără elementele
  • wc –c: numără caracterele
  • wc –l: numără liniile

30

31 of 40

Exemplu

31

32 of 40

grep

  • extrage liniile care se potrivesc cu parametrul
  • ps –ef | grep misc
  • grep –r ”main()” code/
  • grep ‘^admin:’ /var/log/messsages

32

33 of 40

Expresii regulate

  • mod de a potrivi (match) mai multe șiruri
  • a*: a de oricâte ori (posibil niciodată)
  • a+: a de oricâte ori, măcar o dată
  • a?: a o dată sau nici o dată
  • ^: început de linie
  • $: sfârșit de linie
  • [a-z]: de la a la z
  • [^a-z]: orice mai puțin de la a la z
  • .: orice

  • https://regex101.com

33

34 of 40

Expresii regulate

[_a-zA-Z][_0-9a-zA-Z]*: nume de variabilă/funcție

07[:digit:]\{8\}: număr de telefon

[:upper:][:alpha:]+: numele unei persoane

[:digit:]\{2\}\.(pdf|png|svg): nume fișiere din două cifre și diferite extensii

([01][:digit:]|2[0-3]):[0-5][:digit:]: timp în ore și minute

^[:upper:]\{1,10\}$: linii conținând maxim 10 majuscule

34

35 of 40

Windows Power Shell

  • CLI pentru Windows
  • rulează de la Windows XP SP2 în sus
  • integrare cu .NET framework
  • cmdlets: aplicații .NET
  • automatizare, scripting
  • pipeline de obiecte (objects), nu de șiruri de caractere ca în Unix

35

36 of 40

Resurse utile

36

37 of 40

Unix Power Tools

  • ediția a 3-a, 2002
  • enciclopedie a facilităților Unix
  • 1100 de pagini, 51 de capitole
  • pentru power users - utilizatori avansați care vor să folosească la maxim sistemul
  • capitole excelente despre shell și shell scripting

37

38 of 40

Rob Pike

  • parte a echipei Unix
  • ulterior, dezvoltator la Plan 9 și Inferno
  • cărți și proiecte împreună cu Ken Thompson, Brian Kernighan
  • UTF-8

38

39 of 40

Amazon

  • Amazon.com, Inc.
  • comerț electronic (online retailer)
  • fondată în 1994, online în 1995
  • inițial librărie online
  • Amazon Kindle
  • în 2010, vânzările de e-books au depășit vânzările de cărți în format printat
  • Amazon Web Services: servicii de stocare și rulare, cloud computing
  • Amazon EC2: închiriere de mașini virtuale
  • Amazon S3: servicii de stocare

39

40 of 40

Cuvinte cheie

  • interfață
  • shell
  • GUI
  • CLI
  • Bash
  • terminal
  • istoric
  • completare comenzi

40

  • editare comenzi
  • globbing
  • escaping
  • expandare
  • redirectare
  • înlănțuire
  • one-liner
  • filtru de text
  • expresii regulate