Entendamos cómo se usa la linea de comandos en Linux / UNIX

Autor:
Ricardo Naranjo Faccini
Fecha de publicación:
Monday 28 September 2020
Tema:
FOSS y Software Libre
Revisado por :
Ricardo Naranjo Faccini
(Monday 28 September 2020)

Resumen

Por medio de un ejemplo práctico ilustraremos la utilidad de la línea de comando en UNIX y Linux


Conexión al servidor

$ ssh -l usuario www.servidor.com

Construir directorios

$ mkdir backs
$ mkdir backs/2015
$ mkdir backs/2015/01

Opción -p
$ mkdir -p backs/2015/01

en el servidor de backups

$ ssh -l usuario www.servidor.com
Password for usuario@www.servidor.com:
$ mkdir -p backs/2015/01
$ mkdir -p backs/2015/02
$ mkdir -p backs/2015/03
...
$ mkdir -p backs/2018/12

foreach en tcsh

$ foreach i (01 02 03 04 05 06 07 08 09 10 11 12)
$     mkdir -p backs/2015/$i
$     mkdir -p backs/2016/$i
$     mkdir -p backs/2017/$i
$     mkdir -p backs/2018/$i
$ end

$ foreach j (2015 2016 2017 2018)
$     foreach i (01 02 03 04 05 06 07
                 08 09 10 11 12)
$         mkdir -p backs/$j/$i
$     end
$ end

Comando date, uso de “`” y variables de sesión

$ date +%Y.%m.%d
2015.05.16
$ setenv FECHA `date +%Y.%m.%d`
$ setenv ANHO `date +%Y`
$ setenv MES `date +%m`
$ echo $FECHA
2015.05.19
$ echo $ANHO
2015
$ echo $MES
05

crontab, Script que crea los directorios

~/bin/crear_backdirs.sh

#!/bin/tcsh
setenv ANHO `date +%Y`
foreach MES (01 02 03 04 05 06 07 08 09 10 11 12)
    mkdir -p ~/backs/$ANHO/$MES
end

crontab, Campos del crontab

  • minute           0-59
  • hour               0-23
  • day of month  1-31
  • month            1-12 (or names, see below)
  • day of week    0-7 (0 or 7 is Sun, or use names)

$ crontab -e
0 0 1 1 * ~/bin/crear_backdirs.sh

PROBLEMA RESUELTO (en el servidor de backups)

.
└── 2015
    ├── 01
    ├── 02
    ├── 03
    ├── 04
    ├── ...
    └── 12

Cómo se hace en el servidor de bases de datos

$ pg_dump -c -U 652_gramo webpactum > 2015.05.16-webpactum.dump
$ bzip2 2015.05.16-webpactum.dump
$ scp -P 35 2015.05.16-webpactum.dump.bz2 usuario@www.servidorbackups.com:~/backs/2015/05
Password for usuario@skinait.com:
2015.05.16-webpactum.dump.bz2   61%  416KB 165.1KB/s
...
...
$
LISTO!!!

Mi primera vez (la repetición de la repetidera)

$ pg_dump -c -U 652_gramo webpactum > 2015.05.16-webpactum.dump
$ bzip2 2015.05.16-webpactum.dump
$ scp -P 35 2015.05.16-webpactum.dump.bz2 usuario@www.servidorbackups.com:~/backs/2015/05
Password for usuario@skinait.com:
2015.05.16-webpactum.dump.bz2             100%  416KB 165.1KB/s   00:01 ETA
$ pg_dump -c -U 652_gramo webdemo > 2015.05.16-webdemo.dump
$ bzip2 2015.05.16-webdemo.dump
$ scp -P 35 2015.05.16-webdemo.dump.bz2 usuario@www.servidorbackups.com:~/backs/2015/05
Password for usuario@skinait.com:
2015.05.16-webdemo.dump.bz2               100%  416KB 165.1KB/s   00:01 ETA
$ pg_dump -c -U 652_gramo webalaken > 2015.05.16-webalaken.dump
$ bzip2 2015.05.16-webalaken.dump
$ scp -P 35 2015.05.16-webalaken.dump.bz2 usuario@www.servidorbackups.com:~/backs/2015/05
Password for usuario@skinait.com:
2015.05.16-webalaken.dump.bz2              82%  416KB 165.1KB/s   00:01 ETA

Cómo se hace usando variables y “`”

$ setenv FECHA `date +%Y.%m.%d`
$ setenv ANHO `date +%Y`
$ setenv MES `date +%m`
$ setenv BDNAME webpactum
$ pg_dump -c -U 652_gramo $BDNAME > {$FECHA}-{$BDNAME}.dump
$ bzip2 {$FECHA}-{$BDNAME}.dump
$ scp -P 35 {$FECHA}-{$BDNAME}.dump.bz2 usuario@www.servidorbackups.com:~/backs/$ANHO/$MES

Segundo intento (primer paso a la automatización)

$ setenv BDNAME webpactum
$ pg_dump -c -U 652_gramo {$BDNAME} > {$FECHA}-{$BDNAME}.dump
$ bzip2 {$FECHA}-{$BDNAME}.dump
$ scp -P 35 {$FECHA}-{$BDNAME}.dump.bz2 usuario@www.servidorbackups.com:~/backs/{$MES}/{$DIA}
Password for usuario@skinait.com:
2015.05.16-webpactum.dump.bz2                      100%  416KB 165.1KB/s   00:04

$ setenv BDNAME webdemo
$ pg_dump -c -U 652_gramo {$BDNAME} > {$FECHA}-{$BDNAME}.dump
$ bzip2 {$FECHA}-{$BDNAME}.dump
$ scp -P 35 {$FECHA}-{$BDNAME}.dump.bz2 usuario@www.servidorbackups.com:~/backs/{$MES}/{$DIA}
Password for usuario@skinait.com:
2015.05.16-webdemo.dump.bz2                        100%  416KB 165.1KB/s   00:05

$ setenv BDNAME webalaken
$ pg_dump -c -U 652_gramo {$BDNAME} > {$FECHA}-{$BDNAME}.dump
$ bzip2 {$FECHA}-{$BDNAME}.dump
$ scp -P 35 {$FECHA}-{$BDNAME}.dump.bz2 usuario@www.servidorbackups.com:~/backs/{$MES}/{$DIA}
Password for usuario@skinait.com:
2015.05.16-webalaken.dump.bz2                       61%  416KB 165.1KB/s   00:03 ETA

Cómo se hace (uso de alias para simplificar)

Al hacer el llamado de:
$ hacerbacks webpactum
webpactum se convierte en \!:1
Configuro los alias en el archivo
~/.tcshrc
alias backupbd "pg_dump -c -U 652_gramo {\!:1} > {`date +%Y.%m.%d`}-{\!:1}.dump"
alias comprimabk “bzip2 {`date +%Y.%m.%d`}-{\!:1}.dump”
alias subirbk "scp -P 35 {`date +%Y.%m.%d`}-{\!:1}.dump.bz2 usuario@www.servidorbackups.com:~/backs/{`date +%Y`}/{`date +%m`}"
alias hacerbacks "backupbd {\!:1}; comprimabk {\!:1}; subirbk {\!:1};"

tercer intento, segundo paso a la automatización

$ hacerbacks webpactum
Password for usuario@skinait.com:
2015.05.16-webpactum.dump.bz2    100%  416KB 165.1KB/s   00:01 ETA
$ hacerbacks webdemo
Password for usuario@skinait.com:
2015.05.16-webdemo.dump.bz2      100%  416KB 165.1KB/s   00:01 ETA
$ hacerbacks webalaken
Password for usuario@skinait.com:
2015.05.16-webalaken.dump.bz2     25%  416KB 165.1KB/s   00:01 ETA

Evitémonos la palabra clave (llaves publica-privada para ssh)

$ ssh-copy-id usuario@servidor.com

Evitémonos la palabra clave, llaves publica-privada para ssh, A la antigua

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/gramo/.ssh/id_rsa): /home/gramo/.ssh/id_rsa_skina
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/gramo/.ssh/id_rsa_skina.
Your public key has been saved in /home/gramo/.ssh/id_rsa_skina.pub.
The key fingerprint is:
bf:e8:98:63:87:7f:30:77:9b:c7:94:88:37:3e:6a:0f gramo@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|        S  . . . |
|        o.o = o  |
|       . +E+ *   |
|      +o..oo= o  |
|     .o=+ooo.o   |
+-----------------+

Evitémonos la palabra clave, llaves publica-privada para ssh, A la antigua

Se copia el contenido de

id_rsa_skina.pub

En el servidor de backups al final del archivo

~/.ssh/authorized_keys

Ya se puede automatizar

Script para hacer el trabajo ~/bin/hacerbacks.sh
#!/bin/tcsh
hacerbacks webpactum
hacerbacks webdemo
hacerbacks webalaken

 $ crontab -e
0 0 * * * ~/bin/hacerbacks.sh

Hoy en día


Conclusiones

  • UNIX permite automatizar todas las actividades de administración
  • El adm. debe conocer
    • Los comandos disponibles
    • La forma en que interactuan
    • El mecanismo de automatización
  • El trabajo del administrador UNIX es:
    • Automatizar procesos
    • Verificar bitácoras

Ricardo Naranjo Faccini

Desarrollador WWW | Experto en Calidad de Software, Seguridad de la Información y Open Source
Ricardo Naranjo Faccini - Desarrollador y Consultor IT

Originario de Barranquilla, Colombia (1971). Ricardo es un referente en la divulgación del software libre con más de 25 años de trayectoria en el sector tecnológico.

Formación Académica

  • Magíster en Ingeniería de Sistemas y Computación - Universidad de Los Andes (1998)
  • Ingeniero Civil - Universidad de Los Andes (1995)
  • Diplomado en Docencia en Ingeniería - Pontificia Universidad Javeriana (2008)

Trayectoria Profesional y Logros

  • Gerente de Skina IT Solutions: Líder en exportación de software y experto en herramientas libres orientadas a la web.
  • CTO de AuthorsGlobe: Proyecto seleccionado en el "TOP 10" del prestigioso concurso MIT 100K (Massachusetts Institute of Technology).
  • Ex-Gerente de Desarrollo de Negocios NOVELL: Gestión estratégica en Nexsys de Colombia (2004-2005).
  • Docente Catedrático: Experiencia académica en la Universidad Javeriana, Los Andes, Universidad de Manizales y UNAB.

Liderazgo en la Comunidad

Co-fundador de LinuxCol (primera comunidad Linux en Colombia) y colaborador de ACIS-Linux. Ha impartido más de 60 conferencias a nivel nacional, promoviendo la soberanía tecnológica.



Calle 95 #47-33 int 8

Calle 95 #48-25, Bogotá, Colombia

Tel: +57 300 214 6210

ventas@skinait.com

Desarrollado por Skina IT Solutions