Exercicis resolts del shell de Linux

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

Arxius

Visualitzar els arxius i permisos del directori actiu:

$ ls -l

Visualitzar els arxius del directori pare del que estem actualment:

$ ls ../

Si execute ls sense arguments, de quin directori fa el llistat?:

Del directori actiu de la terminal, el que estem en aquest moment.

Mostrar el directori actual:

$ pwd
$ echo $PWD

Crear dos directoris, un dins de l'altre:

$ mkdir -p dir1/dir2

Llistar els executables del sistema:

$ ls /bin/ /sbin/ /usr/bin/ /usr/sbin/
$ ls ${PATH//:/ }

En el segon cas, utilitzem la variable PATH, que conté les rutes dels programes i una sustitució de caracters en la variable.

Llistar totes les particions de discs SATA:

$ ls /dev/sd*
$ sudo fdisk -l

Fer que un arxiu tinga com a propietari i grup l'usuari i el grup root:

$ chown root:root arxiu.txt

Crear un enllaç de l'arxiu /var/log/syslog al meu home:

$ ln -s /var/log/syslog ~/

Hem creat un enllaç simbòlic amb -s.

Averiguar la quantitat de disc utilitzada:

$ df -h

Averiguar la quantitat de disc utilitzada en total pel directori home:

$ sudo du -sh /home

Donar permís d'execució per a l'usuari a un script:

$ chmod u+x script.sh
$ chmod 744 script.sh

Moure tots els fitxers que tinguen extensió txt del directori /home/ubuntu a directori personal:

$ mv /home/ubuntu/*.txt ~/

Trobar tots els arixus en el teu directori personal majors que 500MB:

$ find -size +500M

Trobar tots els arixus modificats en els últims dos dies en /etc:

$ sudo find /etc -mtime -1 -ls

Mostrar un llistat de tots els directoris (no arxius) que té el directori /tmp:

$ ls -ad **/

El ** és una utilitat de bash per a recorrer recursivament els subdirectoris.

Mostrar un llistat de tots els arixus del sistema amb extensió .jpg:

$ sudo find / -name '.*\.jpg'

Ho fem en sudo per poder entrar en quasi tots els directoris.

Mostrar un llistat de tots els arxius que, efectivament, siguen imatges jpg:

$ find / -type f -exec file --mime-type {}  \; | grep 'image/jpeg'

A tots els arxius del sistema els executa un file --mime-type per veure el seu tipus i filtra els que són jpeg

Fer una còpia de seguretat mantinguent permissos de tot els /home:

$ sudo cp -a /home /backup

Fer una còpia de seguretat incremental mantinguent permissos de tot els /home:

$ rsync -ravzX --delete /home /backup/
   -r : recursiu
   -a :  igual a:
       -r 
       -l – copiar enllaços simbòlics
       -p – preservar permisos
       -t – preservar temps de modificació
       -g – preservar group
       -o – preservar owner
       -D – preservar arxius de sistema
   -v – verbosity, que diu més coses
   -z – Comprimir
   -X – Preservar atributs estesos 
   -A – Preservar ACL
   -S – handle sparse files efficiently
   --delete – Si l'axius és esborrat, s'esborra en destí.

Fes la següent estructura de directoris en un sol comandament:

/home
 |-- clase
     |-- alumno1
     |-- alumno2
         |-- linux
         |-- windows
$ mkdir -p clase/alumno clase/alumno2/linux clase/alumno2/windows

Explica el següent comandament:

chmod g+w `ls -l > /home/listado` /home/listado

Dona permís de escriptura als arxius i directoris dins de /home/listado i al propi directori per al grup propietari.

Visualitzar el contingut de tots els arxius de dins dels directori /etc/ que comencen per 'a' i tenen d'extensió '.conf'

$ cat /etc/a*.conf

Veure el tipus d'arxius que són els que comencen per 'b' del teu directori personal demanant permís per a cadascun:

$ find $HOME -name "b*" -ok file {} \;

Crear un fitxer amb el llistat del directori /etc ordenat i mostrar-lo per pantalla pausant l'eixida.

$ ls /etc | sort > listado.txt && less listado.txt

Usuaris

Iniciar sessió en un altre usuari en la meua terminal:

$ su usuari

Saber quin usuari estem utilitzant:

$ whoami

Detectar usuaris connectats al sistema:

$ who

Mostrar el grups al que pertany l'usuari lliurex:

$ id lliurex

Crear l'usuari platon que pertany al grup idealistes, amb directori personal i bash en un comandament:

$ useradd -m -G idealistes -s /bin/bash platon

Mostrar tots els grups del sistema en orden alfabètic:

$ cat /etc/group | cut -d":" -f1  | sort

Processos i programes

Llistar els processos en execució:

$ ps -e
$ ps aux

Mostrar l'ús de memòria:

$ free

Hi ha moltes ferramentes que donen informació de l'ús de la memòria. Free és la més coneguda i concreta, però en top, htop i altres també trobem aquesta informació.

Reiniciar el sistema:

$ sudo reboot

Hi ha moltes ferramentes que donen informació de l'ús de la memòria. Free és la més coneguda i concreta, però en top, htop i altres també trobem aquesta informació.

Matar un procés:

$ ps -e   # Per averiguar el PID 
$ kill <PID>
$ kill -9 <PID>  # Forçar la mort

Executar en segón planol un procés:

$ htop &

Tornar del segón planol a la terminal un procés:

$ fg

Buscar la ubicació d'un programa:

$ whereis nano

Mostrar la data en format DD/MM/AAAA HH:MM:

$ date +"%d/%m/%Y %H:%M"

Consultar l'historial de comandaments:

$ history

Mostrar el PATH dels executables de Libreoffice:

$ whereis libreoffice

Crear un fitxer amb permisos de lectura i escriptura per al usuari, de lectura per al grup i res per als altres que continga tots els alies del sistema:

$ (umask 026; alias > alias.txt)

Anem a analitzar aquest comandament. Primer configurem el umask per a que mai tinga altres permisos el fitxer. Després s'executa el comandament alias que redirecciona l'eixida estàndar a alias.txt. Però tot això es fa dins de () per a fer-lo en un bash diferent i no conservar els umask.

Crear un fitxer anomenat events.txt amb les primeres 50 línies que s'ha generat al arrencar en sistema i les últimes 50. Cal escriure títols que indiquen si són les primeres i on comencen les últimes:

$  dmesg | (echo "Primeres línies: " && head -50 && echo "Últimes línies:" && tail -50)

El resultat de dmesg s'envia a l'entrada estàndard de tots els programes que es fiquen entre parèntesis. El head i tail mostren les línies i el echo no fa cas i mostra el que li pases com a paràmetres.

Xarxa

Assignar una IP a una targeta de xarxa anomenada eth0:

$ sudo ifconfig eth0 192.168.0.2/24
$ sudo ip addr add 192.168.0.2/24 dev eth0

El comandament recomanable és el de ip, ja que forma part d'un paquet nou de ferramentes per substituir el ifconfig, considerat obsolet.

Reiniciar una targeta de xarxa eth0:

$ sudo ifdown eth0
$ sudo ifup eth0
$ /etc/init.d/networking restart # En debian no funciona correctament

Monitorització

Traure la memòria RAM lliure:

$ free -h | grep 'Mem:' | awk '{print $4}'