Sessió 3 curs programació linux

De Wikijoan
Dreceres ràpides: navegació, cerca

Sessió 3. Bash. 25/04/2008

===============

procés init -> és el procés pare a partir del qual neixen els processos fills el procés init s'inicia amb el sistema


Linux té 6 terminals: tty1 -> tty6

hi podem accedir mitjançant:

Ctrl+Alt+F1 -> anem a la terminal getty1

Alt+F7 per tornar a la termina gràfica


Quan ens loguem en un terminal com el tty1, ens apareix el bash com a interfície per defecte.


Escriptoris:

el Josep és partidari del

icewm -> ice window manager

és un escriptori lleuger i auster, i no té l'estètica del KDE o el GNOME és senzill i adaptable a les teves necessitars


gnome, kde, icewm i altres són clients per al servidor X es distingeix entre gestor de sessió (kde, gnome) i gestor de finestres (icewm, fvwm) el gestor de sessió sap passar informació entre

finestres: per ex, en el cas Windows, passar informació entre l'Excel i el Word.


xterm ens obre un terminal des del gestor de sessions o finestres, que simula el terminal hardware del 1969.


Ubuntu utilitza Gnome per defecte:

--Yo también prefiero Gnome, pero por razones personales, no técnicas. Tengo máquina de sobra para utilizar cualquiera de los dos, pero prefiero la sencillez y la funcionalidad del Gnome antes que el estilo recargado y cuasi-barroco de KDE. Pero como he dicho alguna vez, la preferencia Gnome-KDE obedece más a criterios personales que a otra cosa. No son mejores ni peores, son diferentes, y es el usuario quién decide cuál prefiere.--


$cat fitxer -> visualitza fitxers de text en pantalla $cat fitxer1 fitxer2 -> concatena fitxers en el canal estàndar de sortida


cat Concatena fitxers al canal de sortida (Visualitza fitxers text en pantalla).

Exemple: $ cat fitxer1 fitxer2

fitxer3

cp Còpia un fitxer(s) a un altre fitxer

Exemple: $ cp fitxer1 fitxer4 mv Mou un fitxer(s) cap a un altre fitxer (Canvi nom fitxer, directori, etc)

Exemple: $ mv fitxer1 fitxer5 rm Esborra fitxer(s)

Exemple: $ rm -f fitxer5 (-f, force)

Exemple: $ rm -i fitxer5 -> -i, estàs segur que vols esborrar? interactive

Ex: rs -Rf * -> se'ns esborra tot el disc


el canal de sortida pot ser la pantalla o un altre dispositiu, com ara la impressora per exemple, puc enviar un fitxer wav directament a la placa de so:

cat elvispresley.wav > /dev/dsp

envio el fitxer al canal de sortida que especifico, i sona la música


chmod Canvia proteccions fitxer(s)

Exemple: $ chmod a-w fitxer4

Exemple: $ chmod g-r fitxer4

Exemple: $ chmod u-r fitxer4

Exemple: $ chmod 777 fitxer4

chown Canvia propietari fitxer(s)

Exemple: $ chown lluis fitxer4

chgr p Canvia grup propietari de fitxer(s)

Exemple: $ chgr p alumnes fitxer4

umask Estableix proteccions per defecte

Exemple: $ umask 022


cmp Compara dos fitxers

Exemple: $ cmp fitxer1 fitxer2 diff Compara dos fitxers

Exemple: $ diff fitxer4 fitxer2

Exemple: $ diff -r dir1 dir2

find Cerca de fitxers que responen a un criteri

Exemple: $ find . -name "*.dat” -print od Exposa contingut fitxer en octal o hexadecimal en stdout

Exemple: $ od -c fitxer2


cd /proc -> els fitxers que són números, són els processos que estan funcionant en el SO això no vol dir que hi hagi un directori que es digui /proc. No. És el Kernel. Estem dialogant amb el kernel cat /proc/cpuinfo -> el resultat que obtenim és una resposta del kernel


--

Comandes i albarans:

http://platea.pntic.mec.es/~jlopez5/cv3.html

http://platea.pntic.mec.es/~jlopez5/cv4.html

--


ls Visualitza els fitxers existents d’un o més directoris

Exemple: $ ls

Exemple: $ ls -la

pwd Visualitza els directori de treball per defecte

Exemple: $ pwd

mkdir Crea un directori

Exemple: $ mkdir dir1

rmdir Esborra un directori

Exemple: $ rmdir dir1


Operacions sobre processos:

ps Status de processos

kill Para bruscament un proces

nice Executa comanda amb baixa prioritat

<ctrl-z> Suspén l’execució de la comanda actual

bg Continua execució comanda suspesa en el background.

fg Torna a activar comanda suspesa.

sleep Suspèn l’execució durant n segons.

at Encua una comanda per ser executada a par tir d’un

temps especificat. Examina la cua de treballs pendents Esborra de la cua un treball.

nohup Executa una comanda inmune a qualsevol senyal

que intenti aturarla. Si hom sur t de la sessió, la comanda seguirà executant-se batch. Executa una comanda quan la càrrega del sistema ho permeti. El canal de sor tida standard serà el correu electronic Ampersand wikipedia (put ?)


Exemple

$ emacs -> podem treballar amb emcas, però no podem treballar amb la consola perquè està ocupada $ emacs & -> podem treballar amb emacs i amb la consola en background


$ emacs -> no podem treballar amb la consola.

Aleshores:

$ ctrl-z -> treballem amb la consola i no podem treballar amb el emacs $bg (background) -> ja podem treballar amb el emacs


Bash


només hi ha un tipus de variables: cadena de caràcters. No cal declarar les variables

Ex:

VAR=V1

VAR=V1 V2 -> dóna error

VAR="V1 V2" -> no dóna error


echo -> repeteix en el cana estàndar de sortida echo hola amb echo puc mirar el contingut de les variables echo $VAR el bash, abans de invocar echo, ha substituït $VAR pel seu valor. Per tant, echo el que veu és "V1 V2"


echo * -> visualitzem els fitxers del directori, perquè * és un meta-caràcter echo "*"


VAR=$VAR+1 -> compte! sense espais. Les variables són cadenes de caràcters i el que obtenim és "V1 V2+1"


la suma la puc fer per ex:

VAR=$(($VAR+1)) (vàlid si VAR conté un número)


echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games


la separació de directoris és amb ':'


PATH=$PATH":." -> afegim al PATH el ., que és el directori de treball


la primera paraula en la línia de comandes ha de ser un executable una alternativa a modificar la variable PATH per execurar la comanda aaa és ./aaa (li estem indicant la ruta del directori de treball)



escrivim en el fitxer exemple1, li donem permisos d'escriptura, i l'executem #!/bin/bash for pep ; do echo $pep ; done


quin valor té la variable pep? doncs la mateixa línia


      $ chmod +x exemple1
      $ ./exemple1 hola que tal
      $ ./exemple1 *

-> hem fet el primer guió, que és un fitxer executable

que conté comandes de bash o d'un altre llenguatge interpretat.

És un text executable gràcies a un conveni:

  1. !/bin/bash
  1. és un comentari en la primera línia, i en aquest cas en diu que les comandes que conté són bash. /bin/bash és l'executable que interpretarà el text. El mateix faríem per perl o per python.


Si no, hauríem de fer #bash exemple1, que també és factible.


Originalment, el for el que fa és prendre valors d'una llista (per defecte, de la línia de comandes)


for pep in "això sembla que funciona, oi?"; do echo $pep ; done for pep in això sembla que funciona, oi?; do echo $pep ; done -> ho agafa paraula per paraula


paraules="això sembla que funciona, oi?"

for pep in $paraules; do echo $pep ; done


$ for ((i=1; $i<=5 ; i++)); do echo $i; done -> és el for del C, que és un 'mentres' camuflat


$ if gcc -o prova.c ; then ./prova; else echo "programa incorrecte"; fi només s'executa prova si és el muntatge ha estat correcte


per comptar números amb el while:

i=1; while [ $i -le 5 ]; do echo $i; i=$(($i+1)); done [] és una comanda, i $i -le 5 són els arguments de la comanda [] és el sinònim de test, que retorna cert o fals depenent dels arguments man test while llista;...

[$i -le 5 ] simula la llista


      INTEGER1 -le INTEGER2
             INTEGER1 is less than or equal to

INTEGER2



$ function quants () {

> i=1; for a in $*; do i=$(($i+1)); done echo la funció $0 ha detectat

>$i arguments }

$ quants avui farem 4


Es pot reemplaçar la comanda per la sortida de la comanda. Substituir el nom de la comanda per la seva sortida bash permet dues formes de fer-ho:

$(comanda)

` comanda`


si la variable i conté 4:

echo $(($i+1)) -> dóna 5

echo $($i+1) -> dóna error

aquesta és la grandesa del UNIX (i la dificultat)


Còpia de seguretat desatesa del contingut del portàtil (el fitxer sencer està més avall)


hi ha unes eines molt bona per fer backups (paquets de

Debian): rdiff-backup (utilitza el protocol rsync), i dirvish


linux/crondaily/backup


  1. m h dom mon dow command -> minut, hora, dia del mes, mes, dia de la setmana, comanda a executar

5 0 * * * run-parts ${HOME}/linux/cron.daily -> cada dia, a les 00:05, executo run-parts amb l'argument...


/etc/init.d -> hi ha els guions d'inicialització (que poden activar dimonis). Per exemple, guions per iniciar el X11, la xarxa,...

tot el que trobi en el directori cron.daily intentarà executar-ho


date +%Y%m%d -> date i un argument per indicar com s'escriu date


rsh -> remote shell

tar -zcf -> comprimir, crear, fitxer . Fem un tar remot, em posa el tar a un recurs de la xarxa el protocol que utilitza el tar depèn de variables de entorn


necessito saber quants backups hi ha:

quants=$(rsh $nomhost -l$usuari ls -t

$dirBackup/"cursice*.tgz"| wc -l )

-t -> faig un ls temporal (no alfabètic) dels *.tgz la sortida de ls l'envio a un pipe, amb un filtre que és un comptador de línies (wc -l) vull eliminar còpies antigues, de manera que en quedin 3.


tail -> agafo la cua del llistat. Recullo els últims $num \rm -> no facis cap cas del alias. Vull que executi rm directament


==== FITXER CRONTAB ========================

export MAILTO="cursice"

usuari=cursice

home=/home/cursice

nomhost=festuc

dirBackup=elsMeusBackups

aGuardar=/home/cursice/

arxiuBackup=$dirBackup/cursice$(date +%Y%m%d).tgz

guarda=3

rsh -l$usuari $nomhost ls ">" $ArxiuBackup tar -zcf $usuari@$nomhost:$backupfile $aGuardar echo Backup $arxiuBackup finalitzat quants=$(rsh $nomhost -l$usuari ls -t $dirBackup/"cursice*.tgz"| wc -l )

num=$(($quants-$guarda))

echo $quants $num

if [ $num -gt 0 ] then l=$(rsh $nomhost -l$usuari ls -t $dirBackup/"cursice*.tgz" | tail -n $num ); echo esborrant $l ; rsh $nomhost -l$usuari "\rm" -f $l fi

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines