===== Linux =====

{{ debian.jpg?200 }}

En este apartado os prepararé una lista de comandos Linux útiles para la asignatura. También podéis echar un ojo a la zona de [[extra:referencias|Referencias]] donde encontraréis enlaces a documentación sobre Linux.

También podéis consultar alguna de las //Quick Reference Cards// que os dejo aqui:
  * [[http://www.linuxdevcenter.com/excerpt/LinuxPG_quickref/linux.pdf|Linux Quick Reference Card]]
  * [[https://files.fosswire.com/2007/08/fwunixref.pdf|Unix/Linux Command Reference]]

==== Estructura del sistema ====

<code bash>
bin boot dev etc home lib mnt opt proc root sbin tmp usr var
                 /  \                                     |  
             user1  user2                                log  
</code>

  * **bin**
  * **boot**: Almacena los ficheros de arranque del sistema, como el kernel
  * **dev**: Almacena ficheros que representan a cada uno de los dispositivos (''devices'') del sistema
  * **etc**: Almacena los ficheros de configuración del sistema y de las diferentes aplicaciones que se instalen
  * **home**: Almacena las carpetas de cada uno de los usuarios del sistema, excepto ''root''
  * **lib**
  * **media**
  * **mnt**
  * **opt**: En principio está vacía ya que su utilidad es la instalación de software que no se integre con el sistema (''optional'')
  * **proc**
  * **root**: Carpeta de inicio del usuario ''root''
  * **run**
  * **sbin**
  * **srv**
  * **sys**
  * **tmp**: Almacén de ficheros y carpetas temporales del sistema. Se vacía en cada arranque
  * **usr**
  * **var**:
==== Información del sistema ====

  * Mostrar la carga media del sistema

<code bash>
santi@zenbook:$ uptime
 09:44:52 up 5 min,  2 users,  load average: 0.00, 0.05, 0.03
</code>

  * Mostrar información sobre el uso de CPU y los procesos del sistema

<code bash>
santi@zenbook:$ top
</code>

Mostrará, ocupando toda la pantalla, la siguiente información (se sale pulsando la tecla ''q'')

<code bash>
top - 09:45:09 up 6 min,  2 users,  load average: 0.00, 0.05, 0.02
Tasks:  69 total,   1 running,  68 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.3 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2052640 total,  1824764 free,    43292 used,   184584 buff/cache
KiB Swap:  2095100 total,  2095100 free,        0 used.  1865816 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                         
 1304 daw       20   0   42692   3620   3064 R  0.3  0.2   0:00.01 top                             
    1 root      20   0   57056   6820   5268 S  0.0  0.3   0:00.88 systemd                         
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                        
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.02 ksoftirqd/0                     
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                    
    7 root      20   0       0      0      0 S  0.0  0.0   0:00.08 rcu_sched                       
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                          
    9 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                     
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain                   
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 watchdog/0                      
   12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 cpuhp/0                         
. . .
. . .
</code>

  * Mostrar información sobre el Sistema Operativo

<code bash>
santi@zenbook:$ uname -a
Linux despliegue-daw 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u5 (2017-09-19) x86_64 GNU/Linux
</code>

  * Mostrar los usuarios que tienen iniciada una sesión actualmente

<code bash>
santi@zenbook:$ who
daw      tty1         Oct  7 09:39
daw      pts/0        Oct  7 09:44 (192.168.1.3)
</code>

  * Muestra los usuarios que han iniciado sesión en el sistema (similar al comando ''who'') y alguna información extra al respecto

<code bash>
santi@zenbook:$ w
 09:55:54 up 16 min,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
daw      tty1     -                09:39   11:14   0.14s  0.09s -bash
daw      pts/0    192.168.1.3      09:44    1.00s  0.10s  0.00s w
</code>

  * Mostrar el uso de disco

<code bash>
santi@zenbook:$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            992M     0  992M   0% /dev
tmpfs           201M  3.0M  198M   2% /run
/dev/sda1       5.9G  917M  4.7G  17% /
tmpfs          1003M     0 1003M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs          1003M     0 1003M   0% /sys/fs/cgroup
tmpfs           201M     0  201M   0% /run/user/1000
</code>

  * Mostrar la información sobre un proceso (en este caso los que contengan la cadena ''apache'')

<code bash> 
santi@zenbook:$ ps aux | grep apache
root       397  0.0  0.2  75608  4316 ?        Ss   09:39   0:00 /usr/sbin/apache2 -k start
www-data   401  0.0  0.1 364768  4068 ?        Sl   09:39   0:00 /usr/sbin/apache2 -k start
www-data   402  0.0  0.1 364768  4072 ?        Sl   09:39   0:00 /usr/sbin/apache2 -k start
daw       1378  0.0  0.0  12756   972 pts/0    S+   09:55   0:00 grep apache
</code>

==== Carpetas y directorios ====

  * Listar el contenido de una carpeta (en este caso de ''/usr/local'')

<code bash>
santi@zenbook:$ ls /usr/local
bin  etc  games  include  lib  man  sbin  share  src
</code>

<code bash>
santi@zenbook:$ ls -la /usr/local
total 40
drwxrwsr-x 10 root staff 4096 Oct  4 23:06 .
drwxr-xr-x 10 root root  4096 Oct  4 23:06 ..
drwxrwsr-x  2 root staff 4096 Oct  4 23:06 bin
drwxrwsr-x  2 root staff 4096 Oct  4 23:06 etc
drwxrwsr-x  2 root staff 4096 Oct  4 23:06 games
drwxrwsr-x  2 root staff 4096 Oct  4 23:06 include
drwxrwsr-x  4 root staff 4096 Oct  4 23:11 lib
lrwxrwxrwx  1 root staff    9 Oct  4 23:06 man -> share/man
drwxrwsr-x  2 root staff 4096 Oct  4 23:06 sbin
drwxrwsr-x  7 root staff 4096 Oct  4 23:11 share
drwxrwsr-x  2 root staff 4096 Oct  4 23:06 src
</code>

<code bash>
santi@zenbook:$ cd mis_trabajos
</code>

<code bash>
santi@zenbook:$ pwd
/home/santi/mis_trabajos
</code>

<code bash>
santi@zenbook:$ mkdir mis_trabajos
</code>

  * Eliminar un directorio (en este caso el directorio ''mis_trabajos'')

<code bash>
santi@zenbook:$ rmdir mis_trabajos
</code>

<code bash>
santi@zenbook:$ cp trabajo.pdf trabajos/
</code>

<code bash>
santi@zenbook:$ cp -r trabajos/ mas_trabajos/
</code>

<code bash>
santi@zenbook:$ mv trabajo.pdf trabajos/
</code>

<code bash>
santi@zenbook:$ mv trabajo.pdf mi_trabajo.pdf
</code>

<code bash>
santi@zenbook:$ rm trabajos/mitrabajo.pdf
</code>

<code bash>
santi@zenbook:$ rm -rf trabajos/
</code>

<code bash>
santi@zenbook:$ tar cvzf mis_trabajos.tar.gz mis_trabajos/
</code>

<code bash>
santi@zenbook:$ tar xvzf mis_trabajos.tar.gz
</code>

==== Ficheros de texto/configuración ====

  * Mostrar el contenido (completo) de un fichero de texto (en este caso del fichero ''/etc/apache2/apache2.conf'')

<code bash>
santi@zenbook:$ cat /etc/apache2/apache2.conf
</code>

  * Muestra las últimas líneas de un fichero (en este caso de ''/var/log/apache2/error.log'')

<code bash>
santi@zenbook:$ tail /var/log/apache2/error.log
</code>

  * Muestra las últimas 100 líneas de un fichero (en este caso de ''/var/log/apache2/error.log'')

<code bash>
santi@zenbook:$ tail -n 100 /var/log/apache2/error.log
</code>

  * Busca una cadena de texto (en este caso ''php'') entre las últimas 100 líneas de un fichero (en este caso ''/var/log/apache2/error.log'')

<code bash>
santi@zenbook:$ tail -n 100 /var/log/apache2/error.log | grep 'php' 
</code>

==== Permisos ====

  * Añade permisos de ejecución al propietario de un fichero (en este caso ''fichero_ejecutable.sh'')

<code bash>
santi@zenbook:$ chmod u+x fichero_ejecutable.sh
</code>

  * Añade permisos de lectura y ejecución al resto de usuarios para un fichero (en este caso ''fichero_ejecutable.sh'')

<code bash>
santi@zenbook:$ chmod a+rx fichero_ejecutable.sh
</code>

  * Añade permisos de lectura y ejecución al usuario y grupo de un fichero (en este caso ''fichero_ejecutable.sh'')

<code bash>
santi@zenbook:$ chmod ug+rx fichero_ejecutable.sh
</code>

  * Elimina permisos de lectura al grupo de un fichero (en este caso ''fichero_ejecutable.sh'')

<code bash>
santi@zenbook:$ chmod g-r fichero_ejecutable.sh
</code>

  * Fijar usuario y grupo (usuario.grupo) al fichero ''mi_trabajo.pdf''

<code bash>
santi@zenbook:$ chown santi.santi mi_trabajo.pdf
</code>

==== Gestión de usuarios ====

  * Añadir un usuario al sistema (en este caso a ''otro_usuario'')

<code bash>
santi@zenbook:$ sudo adduser otro_usuario
</code>

  * Eliminar un usuario (y su carpeta de inicio) (en este caso al usuario ''otro_usuario'')

<code bash>
santi@zenbook:$ sudo userdel -r otro_usuario
</code>

  * Cambiar la contraseña del usuario actual

<code bash>
santi@zenbook:$ passwd
</code>

  * Añade un usuario a un grupo (en este caso añade al usuario ''santi'' al grupo ''sysadmin'')

<code bash>
santi@zenbook:$ sudo adduser santi sysadmin
</code>

  * Cambiar la contraseña de otro usuario (siendo ''root'')

<code bash>
santi@zenbook:$ sudo passwd otro_usuario
</code>

  * Convertirse en superusuario (root)

<code bash>
santi@zenbook:$ su
Password: 
root@zenbook:$ | 
</code>

==== Redes ====

  * Visualizar la configuración de red

<code bash>
santi@zenbook:$ sudo ifconfig
</code>

  * Comprobar la conectividad de red con otro equipo (en este caso con ''192.168.1.3'')

<code bash>
santi@zenbook:$ ping 192.168.1.3
PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.161 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.327 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.275 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.345 ms
64 bytes from 192.168.1.3: icmp_seq=5 ttl=64 time=0.305 ms
64 bytes from 192.168.1.3: icmp_seq=6 ttl=64 time=0.274 ms
^C
--- 192.168.1.3 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5044ms
rtt min/avg/max/mdev = 0.161/0.281/0.345/0.060 ms
</code>

  * Reiniciar la configuración de red del equipo

<code bash>
santi@zenbook:$ sudo /etc/init.d/networking restart
</code>

  * Solicitar una IP al servidor DHCP (al router)

<code bash>
santi@zenbook:$ sudo dhclient
</code>

  * Reiniciar el servidor web Apache

<code bash>
santi@zenbook:$ sudo service apache2 restart
</code>

==== Inicio/Apagado ====

  * Reiniciar el equipo

<code bash>
santi@zenbook:$ sudo shutdown -r now
</code>

<code bash>
santi@zenbook:$ sudo reboot
</code>

  * Apagar el equipo

<code bash>
santi@zenbook:$ sudo shutdown -h now
</code>
==== Instalación/Desinstalación de aplicaciones ====

  * Instalar un paquete/aplicación (en este caso ''apache2'')

<code bash>
santi@zenbook:$ sudo apt-get install apache2
</code>

  * Reconfigurar un paquete ya instalado (en este caso ''phpmyadmin'')

<code bash>
santi@zenbook:$ sudo dpkg-reconfigure phpmyadmin
</code>

  * Eliminar completamente un paquete (en este caso ''apache2'')

<code bash>
santi@zenbook:$ sudo apt-get remove apache2 --purge
</code>

  * Listar todos los paquetes instalados

<code bash>
santi@zenbook:$ dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                          Version                        Architecture Description
+++-=============================-==============================-============-======================
=========================================================
ii  adduser                       3.115                          all          add and remove users a
nd groups
ii  apache2                       2.4.25-3+deb9u3                amd64        Apache HTTP Server
ii  apache2-bin                   2.4.25-3+deb9u3                amd64        Apache HTTP Server (mo
dules and other binary files)
ii  apache2-data                  2.4.25-3+deb9u3                all          Apache HTTP Server (co
mmon files)
ii  apache2-utils                 2.4.25-3+deb9u3                amd64        Apache HTTP Server (ut
ility programs for web servers)
ii  apt                           1.4.7                          amd64        commandline package ma
nager
ii  apt-listchanges               3.10                           all          package change history
 notification tool
ii  apt-utils                     1.4.7                          amd64        package management rel
ated utility programs
ii  aspell                        0.60.7~20110707-3+b2           amd64        GNU Aspell spell-check
er
. . .
. . .
</code>

  * Mostrar información detallada sobre un paquete (en este caso ''apache2'')

<code bash>
santi@zenbook:$ apt-cache show apache2
</code>

  * Corregir los fallos de alguna instalación previa que no ha terminado bien

<code bash>
santi@zenbook:$ sudo apt-get install -f
</code>

  * Reinstalar un paquete (en este caso ''apache2'')

<code bash>
santi@zenbook:$ sudo apt-get install --reinstall apache2
</code>

  * Actualizar la base de datos del repositorio de paquetes

<code bash>
santi@zenbook:$ sudo apt-get update
</code>

  * Actualizar todos los paquetes instalados a su versión más reciente

<code bash>
santi@zenbook:$ sudo apt-get upgrade
</code>

==== Ayuda ====

  * Mostrar el manual de un comando de Linux, en este caso del comando ''ls'' (se sale pulsando la letra ''q'')

<code bash>
santi@zenbook:$ man ls
LS(1)                                     User Commands                                     LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information about the FILEs (the current directory by default).  Sort entries alpha-
       betically if none of -cftuvSUX nor --sort is specified.

       Mandatory arguments to long options are mandatory for short options too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..

       --author
              with -l, print the author of each file
. . .
. . .
</code>

  * Mostrar la ayuda en línea de un comando (''ls'' en este caso)

<code bash>
santi@zenbook:$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      scale sizes by SIZE before printing them; e.g.,
                               '--block-size=M' prints sizes in units of
                               1,048,576 bytes; see SIZE format below
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                               modification of file status information);
                               with -l: show ctime and sort by name;
. . .
. . .
</code>

----

(c) 2017 Santiago Faci
