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

Autor:
Ricardo Naranjo Faccini
Fecha de publicación:
lunes 28 septiembre 2020
Tema:
FOSS y Software Libre
Revisado por :
Ricardo Naranjo Faccini
(lunes 28 septiembre 2020)
Entendamos cómo se usa la linea de comandos en Linux / UNIX

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

Ricardo Naranjo Faccini Desarrollador WWW

Nació en Barranquilla, Atl, Colombia el 14 de enero de 1971

  • Magíster en Ingeniería de Sistemas y Computación de la Universidad de Los Andes 1998
  • Ingeniero Civil de la Universidad de Los Andes 1995
  • Diplomado en docencia en Ingeniería de la Pontificia Universidad Javeriana 2008
  • Gerente de la firma Skina IT Solutions, su gestión ha llevado a la empresa al nivel de exportación de software. Experto en calidad en el desarrollo de software con énfasis en el uso de herramientas libres orientadas hacia WWW.
  • CTO de AuthorsGlobe, empresa participante en el MIT 100K, elegida como parte del "TOP 10" entre 300 proyectos presentados en este concurso del Massachussets Institute of Technology MIT.
  • Durante el periodo 2004-2005 se desempeñó como Gerente de desarrollo de negocios NOVELL en Nexsys de Colombia.
  • Ejerce docencia como catedrático en la Universidad Javeriana, al igual que lo ha realizado en la Universidad de Los Andes, Universidad de Manizales y Universidad autónoma de Bucaramanga.
  • Comprometido con la divulgación del software libre y su aplicación en Colombia, ha dictado más de 60 conferencias en todo el país, co-fundador de LinuxCol, la primera comunidad de usuarios de Linux en Colombia.
  • Colaborador del grupo ACIS-Linux.

Calle 95 #47-33 int 8

Calle 95 #47-33 int 8, Bogotá, Colombia

Tel: +57 1 257 9832; Cel: +57 300 214 6210

ventas@skinait.com

Desarrollado por Skina IT Solutions