Instrumente si Tehnic in Informatica Curs 3 - Outline PDF
Document Details

Uploaded by ThrillingObsidian5225
2024
Vlad Olaru
Tags
Summary
These lecture notes cover basic informatics concepts such as command interpreters, file systems, and job control using the Bourne-Again SHell (bash). The content is structured into several subsections, illustrating principles and commands relevant to the shell.
Full Transcript
Instrumente si Tehnici de Baza in Informatica Semestrul I 2024-2025 Vlad Olaru 10/14/2024 Curs 3 - outline interpretorul de comenzi fisiere si directoare (revizitat) 2 ...
Instrumente si Tehnici de Baza in Informatica Semestrul I 2024-2025 Vlad Olaru 10/14/2024 Curs 3 - outline interpretorul de comenzi fisiere si directoare (revizitat) 2 10/14/2024 Interpretorul de comenzi (recapitulare) mod de lucru interactiv (comanda-raspuns) sau batch (automatizarea lucrului cu scripturi) in mod interactiv, afiseaza un prompt indica faptul ca se asteapta o comanda (interna/externa) de la utilizator uzual, $ sau % pt utilizatori obisnuiti, # pt root definit de continutul variabilei de mediu PS1 $ echo $PS1 prompt de continuare in variabila de mediu PS2, uzual > $ cat > out > mai adaugam o line la sfarsitul fisierului out > EOF $ 3 10/14/2024 Mediul de lucru (environment) lista de perechi name = value name este numele unei variabile interne a shell-ului Obs: nu orice variabila interna a shell-ului este variabila de mediu valorile variabilelor influenteaza comportamentul shell-ului, respectiv al comenzilor externe lansate de acesta setate de SO sau utilizator numele scris cu litere mari: PS1, SHELL, HOME, PATH, etc valoarea dereferentiata cu ajutorul simbolului $, eg $SHELL = /bin/bash 4 10/14/2024 Variabile de mediu setate cu comanda interna export marcheaza variabila ca fiind variabila de mediu $ export PS1=“my-new-prompt> ” afisate cu comanda /usr/bin/env intr-un program C, accesibile in al treilea parametru al functiei main a programului lansat in executie de catre shell int main(int argc, char* argv[], char *envp[]) 5 10/14/2024 The Bourne-Again SHell /bin/bash, urmasul primului shell istoric, /bin/sh (Bourne Shell) fisiere de configurare fisiere de start-up inspectate doar la login system-wide: /etc/profile locale, in home directory: ~/.profile, ~/.bash_profile, ~/.bash_login continutul lor e executat automat la login fisiere de start-up inspectate la crearea fiecarui terminal (rc file, “run commands”) ~/.bashrc continutul lor poate fi executat voluntar cu comanda source (sau “.”) source.bashrc..bashrc fisier de logout: ~/.bash_logout continutul executat la iesirea din shell (cu exit sau Ctrl-d) Obs: Ctrl-d in Unix este caracterul EOF, tiparirea Ctrl-d la prompt termina shell-ul istoria comenzilor inregistrata in ~/.bash_history 6 10/14/2024 Structura comenzilor bash pipeline-uri $ cmd1 | cmd2 | … |cmdn # executie paralela a comenzilor $ cmd1 |& cmd2 |& … |& cmdn # “|&” e totuna cu “2>&1 |” liste de comenzi $ cmd1; cmd2; …; cmdn # executie secventiala a comenzilor $ cmd1 && cmd2 && … && cmdn $ cmd1 || cmd2 …. || cmdn variabila bash “?” contine codul de terminare (exit status) al ultimei comenzi executate (valoarea zero inseamna succes) $ echo $? Obs: ? nu e variabila de mediu ! 7 10/14/2024 Job control doua categorii de programe executate in foreground, au acces R/W la terminal executate in background comanda incheiata un “&” ruleaza in background shell-ul returneaza imediat utilizatorului promptul $ cmd & executia unei comenzi in foreground se poate suspenda cu ^Z (Ctrl-z) de fapt, e semnalul SIGTSTP (kill –SIGTSTP ) executia comenzii poate fi reluata ulterior, fie in foreground, fie in background comanda jobs listeaza procesele (joburile) rulate la momentul curent de shell joburile identificate prin numar numarul job-ului poate fi folosit impreuna cu urmatoarele comenzi $ kill %n # termina procesul/job-ul cu nr n $ fg %n # muta in foreground procesul cu nr n $ bg %n # muta jobul n in background $ %n & # muta jobul n in background 8 10/14/2024 Controlul istoriei comenzilor ~/.bash_history exemple !n re-executa comanda cu nr n !-n re-executa comanda curenta – n !string re-executa cea mai recenta comanda care incepe cu string !?string? re-executa cea mai recenta comanda care contine string ^str1^str2 repeta comanda anterioara inlocuind str1 cu str2 interactiv: Ctrl-r urmat de un substring al comenzii cautate din istoric 9 10/14/2024 Comenzi interne: executate direct de catre bash cd alias l=‘ls –l’ fg/bg/kill exit # termina shell-ul cu cod de retur status exec # inlocuieste imaginea bash cu imaginea noului proces # de ex: $ exec firefox externe: programe de pe disc lansate de catre shell pwd echo string ex escape chars: echo –e \a # bell echo –e “aaa\tbbb” # horizontal tab echo –e “aaa\v\bbbb” # vertical tab + backspace echo –e “aaa\t\rbbb” # carriage return echo –e “aaa\t\nbbb” # newline 10 10/14/2024 Tipuri de fisiere fisiere obisnuite (regular files): contin date (text sau binare) directoare: contin numele altor fisiere si informatii despre ele pot fi citite de catre procesele care au permisiunile potrivite DOAR kernelul poate scrie in ele ! fisiere speciale, tip device caracter: pt device-uri caracter (ex: tty, seriala) bloc: pt device-uri orientate pe bloc (ex: discuri) operatiile de R/W nu se fac prin intermediul FS ci al driverelor Obs: orice device (echipament) din sistem e fie fisier bloc, fie caracter FIFO: named pipe, mecanism IPC (Inter-Process Communication) | s.n. anonymous pipes, leaga procese inrudite conecteaza procese fara legatura fisiere de pe disc, cu nume si politica de acces FIFO bidirectionale, spre deosebire de | 11 10/14/2024 Tipuri de fisiere (cont.) socket: abstractie pentru IPC peste retea canal de comunicatie local (socket Unix, un fel de FIFO) canal de comunicatie intre masini conectate in retea (socket TCP/IP) link simbolic: fisier care refera un alt fisier practic fisierul destinatie (link-ul simbolic) contine numele fisierului sursa (fisierul referit) $ ln –s formatul lung al comenzii ls marcheaza in primul caracter tipul fisierului: -, d, c, b, p, s, l comanda generala, distinge si tipuri de fisiere regulate (text, executabile, imagini, etc): $ file 12 10/14/2024 Set UID, set GID fiecare proces (program in executie) are asociat UID, GID real: identitatea reala a utilizatorului provenita din /etc/passwd UID, GID efectiv set-UID, set-GID salvate (copii ale UID/GID efectiv) in mod normal, UID/GID real = UID/GID efectiv cand se executa un program exista posibilitatea de a seta un flag in atributele fisierului executabil a.i.: “pe durata executiei acestui program UID/GID efectiv al procesului devine UID/GID-ul proprietarului fisierului program” Ex: comanda de schimbare a parolei utilizator $ passwd /usr/bin/passwd este un program set-UID la root pt a avea drepturi de scriere in /etc/shadow 13 10/14/2024 Permisiuni de acces la fisiere atribute ale fisierului grupate in trei categorii permisiuni utilizator: S_IRUSR, S_IWUSR, S_IXUSR permisiuni grup: S_IRGRP, S_IWGRP, S_IXGRP permisiuni pt. alti utilizatori: S_IROTH S_IWOTH, S_IXOTH permisiuni speciale: set-uid, set-gid, sticky bit modificabile din shell cu ajutorul comenzii chmod ex: chmod u+rw , chmod g-x , chmod o-rwx , etc sau in octal chmod 755 , chmod 644 , etc accesul la un fisier: conditionat de combinatia dintre UID efectiv (respectiv GID efectiv) al comenzii executate si bitii de permisiune 14 10/14/2024 umask orice fisier nou creat are setata o masca implicita a permisiunilor setata cu comanda umask (comanda interna shell) $ umask 022 bitii setati in umask sunt off in permisiunile noului fisier creat de regula, masca setata in fisierele de configurare shell (eg, /etc/profile) 15 10/14/2024 Stergerea fisierelor un fisier poate avea m.m. link-uri la aceeasi structura interna din kernel (i-node) nume diferite ale aceluiasi fisier s.n. link-uri hard create cu comanda ln $ ln stergerea unui link nu inseamna stergerea fisierului de pe disc ! stergerea ultimului link sterge si fisierul pt. a sterge o intrare de fisier dintr-un director se foloseste rm $ rm stergerea necesita doua permisiuni: permisiunea de a scrie in director permisiunea de a cauta in director (bitul x de executie setat in directorul din care stergem fisierul) 16 10/14/2024 Link-uri simbolice limitari link-uri hard link-ul si fisierul linkat trebuie sa se afle pe acelasi sistem de fisiere (disc formatat) doar root-ul poate crea linkuri hard catre directoare link simbolic: fisier care contine numele fisierului referit (un string) utilizate pentru a circumventa limitarile link-urilor hard create cu comanda ln si flag-ul –s $ ln –s /etc/profile ~/.system-wide-profile in general, comenzile shell dereferentiaza linkul simbolic exceptii: lstat, remove, rename, unlink, samd ex: pt. linkul simbolic creat mai sus $ rm ~/.system-wide-profile # sterge link-ul simbolic, nu sursa, adica /etc/profile $ ls –l ~/.system-wide-profile # afiseaza atributele linkului symbolic, nu ale sursei $ cat ~/.system-wide-profile # afiseaza continutul /etc/profile 17 10/14/2024 Lucrul cu directoare create cu mkdir, sterse cu rmdir $ mkdir $ mkdir –p / # creeaza si directoarele # inexistente on the fly $ rmdir Obs: rmdir nu poate sterge un director decat daca e GOL ! schimbarea directorului curent $ cd # schimba directorul in $ cd # cd $HOME $ cd - # schimba directorul curent in directorul anterior aflarea directorului de lucru curent (current working directory) $ pwd 18