linux - stud.netgroup.uniroma2.itstud.netgroup.uniroma2.it/~lorenzo/fondinf2018/linux.pdf · linux...

42
LINUX LORENZO BRACCIALE [email protected]

Upload: ngothien

Post on 27-Apr-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

LINUX

LORENZO BRACCIALE

[email protected]

IL SISTEMAOPERATIVO• Strato software che opera sopra l’hardware e gestisce

l’elaboratore• Windows, Linux, MacOs X, Symbian, etc.

• Funzioni• Astrazione e gestione delle risorse hardware

• Processore, Memoria, Dischi, etc,• Multitasking• Interfacce standard• Sicurezza• Prestazioni

• I programmi vedono l’elaboratore solo tramite il SistemaOperativo

LINUX• Kernel (nucleo del

sistema operativo) scritto nel 1991 da Linus Torvalds• studente di 21 anni

dell’università di Helsinki• attulmente 6 milioni di

righe di codice C• Usato in supercomputer• Dispositivi embedded

VERSIONI

GNU• Acronimo ricorsivo “GNU’s not Unix”

• Progetto lanciato da da Richard Stallman nel 1984

• per la creazione di un sistema operativo“libero”

• Il kernel “GNU Hurd” aveva problemi…

• Sistema operativo GNU/Linux

• spesso chiamato “Linux”• Adotta come kernel “Linux”

• Software GNU (e Linux) rilasciati con licenza GNU Public Licence (GPL)

• Software libero• Licenza “virale”• more info @

http://www.gnu.org/copyleft/gpl.html

IL SISTEMA OPERATIVOGNU/LINUX

Scheduler

Device Drivers

OS Kernel

MemoryManagement

Human Interface

Filesystem

Compiler Editor

Debugger

Build Automator

Networking

GPL

Scheduler

Device Drivers

OS Kernel

MemoryManagement

Human Interface

Filesystem

Compiler Editor

Debugger

Build Automator

Networking

GPL

GUI Web Server Utilities Package Manager

etc...

UNA DISTRIBUZIONE LINUX

LINUX IS EVERYWHERE

• Costo stimato ri-sviluppo da 0 (stime):• Nel 2004 (v. 2.6.0): ~467M€• Nel 2006 (v. 2.6.8): ~882M€• Nel 2011 (v. 3.0.0): ~2200M€ • Nel 2018 (v4.14.4): ~12500M€

src: http://en.wikipedia.org/wiki/Linux_kernel#Estimated_cost_to_redevelop

embedded(ad es. routers)

smartphone/tablet

Servers/mainframes

src: http://en.wikipedia.org/wiki/Usage_share_of_operating_systems

Supercomputer market share

COME INSTALLARLO?• Scaricare linux

• Distribuzione consigliata: xubuntu• Installarlo

• Partizione nativa• Un bootloader vi farà scegliere all’avvio quale sistema

operativo usare• Macchina virtuale

• VirtualBox (free software, multipiattaforma, www.virtualbox.org)

• VMWare (a pagamento, Windows/OSX)• Live CD/DVD

• Basta inserire il cd/dvd e riavviare il computer• Attenzione! ogni riavvio tutti i dati saranno persi (se non

salvati ad es. su una chiavetta esterna)

UTILIZZIAMO ILTERMINALETerminale: dispositivo che invia e riceve caratteri da/a un programmaTerminal emulator: un programma che agisce da terminale

Teletype (o teleprinter)(primi terminali)

Terminal Emulator VT100

USERSWhoami?

• Ogni utente ha un ID (UID) ed appartiene ad uno o più gruppi• Ogni gruppo ha un ID (GID)• utente “root” = amministratore di sistema

Guardare /etc/passwd e /etc/groups

Comandi utili: adduser, userdel, su, sudo, whoami, who, last

COMANDI UTILIName Actionls listcd change directorypwd print working directorycp/mv/rm copy/move/removecat concatenatetail/head view the first/last lines of a filemkdir/rmdir create/remove a directoryfind/locate search for a file/directorygrep search inside filesln Linktouch create an empty file

MAN

PERMESSI SUFILE/DIR

prova a vederli con ls -alchmod XXX file_name

LE ESTENSIONI DEI FILE

• Le estensioni sono “metadati” per definire la codifica di un file• Usati da alcuni sistemi operativi per capire con quale

programma aprire un file• Ad es: jpg = foto condificata in jpeg, txt file di testo

semplice, html pagina scritta in HTML ecc• E’ possibile capire cosa contiene un file utilizzanto l’utility

“file”• file /etc/passwd• file /bin/ls

Appunti.txt EstensioneNome del file:

TUTTO E’ UN FILE!STRUTTURA DELLE DIRECTORY SU LINUX

MAN – THE MANUALman ls #see the manual for the command ls (first section)man –k list #search for a keyword in all the manual pagesman 3 printf # see the third section of the command printf

The standard sections of the manual include:

1 User Commands2 System Calls3 C Library Functions4 Devices and Special Files5 File Formats and Conventions6 Games et. Al.7 Miscellanea8 System Administration tools and Deamons

Distributions customize the manual section to their specifics, which often include additional sections.

PROC FSUn sistema per vedere/editare informazioni su kernel e

processi

ad esempio:

root@web:~# cat /proc/uptime

12901954.29 12678743.37

Esempio: dire al kernel di NON rispondere ai PING

cat /proc/sys/net/ipv4/icmp_echo_ignore_all

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

DEV FSAccesso ai dispositivi fisici (sound card, ram, hard drive, serial/parallel interface …) e “presudo” device (/dev/null, /dev/zero, /dev/random)

Esempio: Crea 1 Giga di random data

dd if=/dev/random of=/home/myhome/randomdata bs=1M count=1024

RUSSIAN ROULETTE

dd if=/dev/urandomof=/dev/kmembs=1 count=1 seek=$RANDOM

IL COMANDO MOUNTmount -t type device dir (umount)

• Aggiunge al filesystem il contenuto del devicein /dev/fstab informazioni su cosa montare all’avvioE’ possibile montare dei file (-o loop)

• Associa un file con un loop dev node (e.g. /dev/loop1) e …• montare il loop dev node ad un mounting point

lorenzo@ale:~$ mount/dev/sda1 on / type ext4 (rw)proc on /proc type proc (rw)sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)fusectl on /sys/fs/fuse/connections type fusectl (rw)none on /sys/kernel/debug type debugfs (rw)none on /sys/kernel/security type securityfs (rw)udev on /dev type devtmpfs (rw,mode=0755)devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)none on /run/shm type tmpfs (rw,nosuid,nodev)

INSTALLARESOFTWAREIl problema delle dipendenze

• alcuni programmi dipendono da molte librerieGnu Build System

• Autoconf, Automake, LibtoolsSu debian-like:

• apt-get install foo• apt-cache search foo• apt-get update• apt-file search filename.txt

./configuremakemake install

ARCHIVIARE, COMPRIMERE E DECOMPRIMERETar: archive file/dir in one file .tar (nessuna compressione)Spesso usato con algoritmo di compressione (ad es. gunzip, bunzip2)Archivio+ gunzip:

• tar cfvz nameofarchive.tar.gz target_dir• ( For bunzip2 substitute z with j )

Decompressione• tar xvfz nameofarchive.tar.gz

Se l’estensione del file non ci dice abbastanza, usare ilcomando “file”

SHELLLa nostra interfaccia sul sistema operativo…

• Permette di eseguire comandi• Permette di definire “script” (definire variabili, cicli etc)

I comandi accettati che chiamano programmi eseguibili)

• percorso assoluto o relativo• spesso eseguibili contenuti in directory incluse nella variabile PATH• provare ad eseguire: “which NAME_OF_COMMAND”

Variable:

• Shell variable (locale, relativa a una particolare instanza della shell)• per avere la lista set, per settare VAR=VALUE, per ottenere il valore di una echo $VAR

• Environment variable (valide in tutto il sistema)• per avere la lista: env, per settare export, ottenere il valore di una printenv o echo $VAR

l@ale:~$ export PIPPO="pluto"l@ale:~$ printenv PIPPOpluto

l@ale:~$ PLUTO=”ciao"l@ale:~$ echo $PLUTOciao

Qual è la mia shell? echo $SHELL

STANDARD STREAMSAd ogni file aperto è associato un numero

• Descrittore di file – FILE descriptorOgni programma che gira, parte già con tre file aperti

• stdin: input da tastiera – FD 0• stdout: output a video – FD 1• stderr: output di errori a video – FD 2

Possiamo redirigere gli input/output usando: < , << , >>, >• echo "hello world" > myfile• Imposta lo stdout del programma echo a myfile

n>&m permette di redirigere il FD n verso il FD m• program 2>&1 myfile• Tutti gli output e gli errori del programmi rediretti a myfile

PIPELINES• Le “Pipes“ permettono a processi separati di comunicare

tra loro senza essere specificatamente progettati per lavorare insieme

• Esempio:• ls | grep x• Significato: prendi l’output del comando ls e passalo come

input al comando grep x

• Su Linux esistono tantissimi comandi “semplici” (tipo cat, cut, sed, grep, echo …) che possono essere combinati traloro attraverso le pipe

SHELL TRICKS!

ESC + . à ripete l’ultimo parametroCTRL + A à vai al primo carattereCTRL + E à vai all’ultimo carattereCTRL + K à cancella ogni carattere dalla posizione corrente finoalla fine della riga

Altri? man getline

PROCESSI E SEGNALI• Ad Ogni processo è associato un numero identificativo

chiamato PID (Process ID)

ps –aux à lista dei processi (ps: “process snapshot”)

• top / htop per vederli in tempo reale• il comando kill manda segnali ai processi (SIGTERM,

SIGKILL)

• Un segnale è un “messaggio”• Quando un programma riceve un segnale, esegue alcune

operazioni definite dal programmatore in una routine chiamata “handler del segnale”

EDITOR

http://www.viemu.com/a-why-vi-vim.html

VIM MODES

Normal Visual Select

Insert Cmdline Ex

+6 additional modes!http://vimdoc.sourceforge.net/htmldoc/usr_toc.htmlvimtutor

VIM: BASIC COMMANDS<Esc> Enter command mode

i Enter insert mode

:w Save File

:q! Exit vim without saving

x Delete the character under the cursor

dw Delete the current word

dd Delete the current line

d$ Delete everything Right of the cursor

yy Yank the current line onto the clipboard

p Paste the clipboard

u Undo

:redo Redo

G Jump to bottom of file

/text Search for the textfrom the cursor

> Indent

set numbersyntax onVisual mode: markerssubstitute all::%s/AAAA/BBBB/g

EXERCISEUsando vim, scrivere questo file:

#!/bin/bash echo “Hello World“

more on bash scripting: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

Quindi renderlo eseguibile e lanciare lo script

BASH SCRIPTINGVariabili:

• modify the previous script in this way:

#!/bin/bash STR="Hello World!”echo $STR

BASH SCRIPTINGIf and arguments

#!/bin/bashif [ $1!=“pippo” ]; then

echo “usage: $0 pippo”exit

fiecho You Win!

BASH SCRIPTINGloop (for, while, until) and commands:

• modify the previous script in this way:

#!/bin/bash -xfor i in $( ls ); do

echo “item: $i”done

2014 BASH BUG: SHELLSHOCKenv x='() { :;}; echo vulnerable' bash -c "echo this is a test”

Esecuzione di codice scritto al di fuori della funzione

Pericoloso dato che molti servizi web chiamano script bash (CGI) e potrebbero passare parametri inviati dall’utente

More info: bash shellshock

FILM CONSIGLIATI