Diferencia entre revisiones de «Exercicis resolts del shell de Linux»

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
 
(No se muestran 30 ediciones intermedias del mismo usuario)
Línea 12: Línea 12:
$ ls ../
$ ls ../
</syntaxhighlight>
</syntaxhighlight>
}}
Si execute '''ls''' sense arguments, de quin directori fa el llistat?:
{{res|
Del directori actiu de la terminal, el que estem en aquest moment.
}}
}}
Mostrar el directori actual:
Mostrar el directori actual:
Línea 18: Línea 22:
$ pwd
$ pwd
$ echo $PWD
$ echo $PWD
</syntaxhighlight>
}}
Crear dos directoris, un dins de l'altre:
{{res|
<syntaxhighlight lang="bash">
$ mkdir -p dir1/dir2
</syntaxhighlight>
}}
Llistar els executables del sistema:
{{res|
<syntaxhighlight lang="bash">
$ ls /bin/ /sbin/ /usr/bin/ /usr/sbin/
$ ls ${PATH//:/ }
</syntaxhighlight>
En el segon cas, utilitzem la variable PATH, que conté les rutes dels programes i una [[Scripts_Bash#Par.C3.A1metros.2C_variables_y_argumentos|sustitució de caracters]] en la variable.
}}
Llistar totes les particions de discs SATA:
{{res|
<syntaxhighlight lang="bash">
$ ls /dev/sd*
$ sudo fdisk -l
</syntaxhighlight>
}}
Fer que un arxiu tinga com a propietari i grup l'usuari i el grup root:
{{res|
<syntaxhighlight lang="bash">
$ chown root:root arxiu.txt
</syntaxhighlight>
}}
Crear un enllaç de l'arxiu /var/log/syslog al meu home:
{{res|
<syntaxhighlight lang="bash">
$ ln -s /var/log/syslog ~/
</syntaxhighlight>
Hem creat un enllaç simbòlic amb -s.
}}
Averiguar la quantitat de disc utilitzada:
{{res|
<syntaxhighlight lang="bash">
$ df -h
</syntaxhighlight>
}}
Averiguar la quantitat de disc utilitzada en total pel directori home:
{{res|
<syntaxhighlight lang="bash">
$ sudo du -sh /home
</syntaxhighlight>
}}
Donar permís d'execució per a l'usuari a un script:
{{res|
<syntaxhighlight lang="bash">
$ chmod u+x script.sh
$ chmod 744 script.sh
</syntaxhighlight>
}}
Moure tots els fitxers que tinguen extensió txt del directori /home/ubuntu a directori personal:
{{res|
<syntaxhighlight lang="bash">
$ mv /home/ubuntu/*.txt ~/
</syntaxhighlight>
}}
Trobar tots els arixus en el teu directori personal majors que 500MB:
{{res|
<syntaxhighlight lang="bash">
$ find -size +500M
</syntaxhighlight>
}}
Trobar tots els arixus modificats en els últims dos dies en /etc:
{{res|
<syntaxhighlight lang="bash">
$ sudo find /etc -mtime -1 -ls
</syntaxhighlight>
}}
Mostrar un llistat de tots els directoris (no arxius) que té el directori /tmp:
{{res|
<syntaxhighlight lang="bash">
$ ls -ad **/
</syntaxhighlight>
El ** és una utilitat de bash per a recorrer recursivament els subdirectoris.
}}
Mostrar un llistat de tots els arixus del sistema amb extensió .jpg:
{{res|
<syntaxhighlight lang="bash">
$ sudo find / -name '.*\.jpg'
</syntaxhighlight>
Ho fem en sudo per poder entrar en quasi tots els directoris.
}}
Mostrar un llistat de tots els arxius que, efectivament, siguen imatges jpg:
{{res|
<syntaxhighlight lang="bash">
$ find / -type f -exec file --mime-type {}  \; | grep 'image/jpeg'
</syntaxhighlight>
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:
{{res|
<syntaxhighlight lang="bash">
$ sudo cp -a /home /backup
</syntaxhighlight>
}}
Fer una còpia de seguretat '''incremental''' mantinguent permissos de tot els /home:
{{res|
<syntaxhighlight lang="bash">
$ rsync -ravzX --delete /home /backup/
</syntaxhighlight>
    -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
{{res|
<syntaxhighlight lang="bash">
$ mkdir -p clase/alumno clase/alumno2/linux clase/alumno2/windows
</syntaxhighlight>
}}
Explica el següent comandament:
chmod g+w `ls -l > /home/listado` /home/listado
{{res|
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'
{{res|
<syntaxhighlight lang="bash">
$ cat /etc/a*.conf
</syntaxhighlight>
}}
Veure el tipus d'arxius que són els que comencen per 'b' del teu directori personal demanant permís per a cadascun:
{{res|
<syntaxhighlight lang="bash">
$ find $HOME -name "b*" -ok file {} \;
</syntaxhighlight>
}}
Crear un fitxer amb el llistat del directori /etc ordenat i mostrar-lo per pantalla pausant l'eixida.
{{res|
<syntaxhighlight lang="bash">
$ ls /etc | sort > listado.txt && less listado.txt
</syntaxhighlight>
}}
== Usuaris ==
Iniciar sessió en un altre usuari en la meua terminal:
{{res|
<syntaxhighlight lang="bash">
$ su usuari
</syntaxhighlight>
}}
Saber quin usuari estem utilitzant:
{{res|
<syntaxhighlight lang="bash">
$ whoami
</syntaxhighlight>
}}
Detectar usuaris connectats al sistema:
{{res|
<syntaxhighlight lang="bash">
$ who
</syntaxhighlight>
}}
Mostrar el grups al que pertany l'usuari lliurex:
{{res|
<syntaxhighlight lang="bash">
$ id lliurex
</syntaxhighlight>
}}
Crear l'usuari '''platon''' que pertany al grup '''idealistes''', amb directori personal i bash en un comandament:
{{res|
<syntaxhighlight lang="bash">
$ useradd -m -G idealistes -s /bin/bash platon
</syntaxhighlight>
}}
Mostrar tots els grups del sistema en orden alfabètic:
{{res|
<syntaxhighlight lang="bash">
$ cat /etc/group | cut -d":" -f1  | sort
</syntaxhighlight>
</syntaxhighlight>
}}
== Processos i programes ==
Llistar els processos en execució:
{{res|
<syntaxhighlight lang="bash">
$ ps -e
$ ps aux
</syntaxhighlight>
}}
Mostrar l'ús de memòria:
{{res|
<syntaxhighlight lang="bash">
$ free
</syntaxhighlight>
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:
{{res|
<syntaxhighlight lang="bash">
$ sudo reboot
</syntaxhighlight>
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:
{{res|
<syntaxhighlight lang="bash">
$ ps -e  # Per averiguar el PID
$ kill <PID>
$ kill -9 <PID>  # Forçar la mort
</syntaxhighlight>
}}
Executar en segón planol un procés:
{{res|
<syntaxhighlight lang="bash">
$ htop &
</syntaxhighlight>
}}
Tornar del segón planol a la terminal un procés:
{{res|
<syntaxhighlight lang="bash">
$ fg
</syntaxhighlight>
}}
Buscar la ubicació d'un programa:
{{res|
<syntaxhighlight lang="bash">
$ whereis nano
</syntaxhighlight>
}}
Mostrar la data en format DD/MM/AAAA HH:MM:
{{res|
<syntaxhighlight lang="bash">
$ date +"%d/%m/%Y %H:%M"
</syntaxhighlight>
}}
Consultar l'historial de comandaments:
{{res|
<syntaxhighlight lang="bash">
$ history
</syntaxhighlight>
}}
Mostrar el '''PATH''' dels executables de Libreoffice:
{{res|
<syntaxhighlight lang="bash">
$ whereis libreoffice
</syntaxhighlight>
}}
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:
{{res|
<syntaxhighlight lang="bash">
$ (umask 026; alias > alias.txt)
</syntaxhighlight>
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:
{{res|
<syntaxhighlight lang="bash">
$  dmesg | (echo "Primeres línies: " && head -50 && echo "Últimes línies:" && tail -50)
</syntaxhighlight>
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.
}}
}}


Línea 32: Línea 314:


El comandament recomanable és el de ip, ja que forma part d'un paquet nou de ferramentes per substituir el ifconfig, considerat obsolet.
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:
{{res|
<syntaxhighlight lang="bash">
$ sudo ifdown eth0
$ sudo ifup eth0
$ /etc/init.d/networking restart # En debian no funciona correctament
</syntaxhighlight>
}}
== Monitorització ==
Traure la memòria RAM lliure:
{{res|
<syntaxhighlight lang="bash">
$ free -h | grep 'Mem:' | awk '{print $4}'
</syntaxhighlight>
}}
}}

Revisión actual - 15:58 3 mar 2017

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}'