terminal

De Wikicima
Saltar a: navegación, buscar

La mayoría de usuari.x.s GNU/linux trabajan directamente des de la terminal. Básicamante, su uso facilita y accelera el trabajo.

Contenido

Terminal

La terminal otorga una interfaz al usuari.x. mediante la cuál se acceden a los fichero y aplicaciones. En el entorno gráfico Gnome, Se llega a ella a través de buscarla por el menú de actividades cómo Terminal. Se recomienda ponerla en las herrmamientas favoritas.

Terminal.png

Des de ella se accede a la línea de comandos desde la cuál ejecutamos instrucciones de shell, aplicaciones y programas

Ideas básicas

El sistema operativo se configura a través de unas variables de sistema generales

  • $HOME: Ubicación inicial al abrir una terminal cómo usuarix (/home/[usuarix])
  • $PATH: Directorios que ya están cargados automáticamente al abrir un terminal. Suelen ser directorios con aplicaciones, así no hace falta saber dónde se encuentran las aplicaciones. Por ejemplo:
/home/lluis/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
  • $LD_LIBRARY_PATH: Librerias cargadas en el sistema

coreutils

Las coreutils son pequeñas herramientas instaladas por defecto con el sistema, que hacen muy eficientemente operaciones muy sencillas. Hay de distinto tipos: ficheros, shell y texto

Instrucciones básicas

Las herramientas del coreutils, se utilizan mediante 'flags' (normalmente '-flag') que regulan la ejecución de la herramienta

$ [herramienta] -flag1 -flag2 ...

Se accede a la ayuda de la herramienta con: -h --h -help --help (en función de la herramienta)

$ [herramienta] --h

O bien en un formato texto con man (sólo aparecerá si se ha instalado la documentación de la aplicación)

$ man [herramienta]

Distintos comandos básicos... (normalmentes nombre fruto de una abreviación...)

  • ls: 'list', lista el contenido de un directorio (un directorio es el equivalente de 'carpeta' de Windows)
$ ls
20160324_bash.pdf  install.inf  prueba.bash  Terminal.png  test.bash
$ ls -l
total 244
-rw-r--r-- 1 lluis lluis 221654 Jun  6 10:49 20160324_bash.pdf
-rw-rw-r-- 1 lluis lluis    328 Apr 25 14:53 install.inf
-rwxr--r-- 1 lluis lluis    114 Jun  6 11:27 prueba.bash
-rw-r--r-- 1 lluis lluis  11172 Apr 11 16:27 Terminal.png
-rw-r--r-- 1 lluis lluis   4056 Jun  6 10:49 test.bash
  • mkdir: 'makedirectoy', creación de un directorio
$ mkdir parTUXza
$ ls
20160324_bash.pdf  install.inf  parTUXza  prueba.bash  Terminal.png  test.bash
$ ls parTUXza
$
  • cp: 'copy', copiar fichero
$ cp [origen] [destino]
$ cp Terminal.png parTUXza
$ ls parTUXza
$ Terminal.png
  • mv: 'move', mover un fichero y/o cambiar el nombre
$ mv [origen] [destino]
$ mv parTUXza/Terminal.png parTUXza/Terminal2.png
$ ls parTUXza
Terminal2.png
  • rm: 'remove', borrar fichero, directorio...
$ rm [fichero]
$ rm parTUXza/Terminal2.png
$ ls parTUXza
$
  • rmdir: 'removedirectory', borra directorio vacío...
$ cp Terminal.png parTUXza
$ rmdir parTUXza
rmdir: failed to remove 'parTUXza/': Directory not empty
  • date: manejo de fechas
$ date
Wed Jun  6 12:27:16 -03 2018
$ date "+%Y/%m/%d %H:%M:%S"
2018/06/06 12:27:21
$ date -d"35 days"
Wed Jul 11 12:27:27 -03 2018
$ date -d"35 days ago"
Wed May  2 12:27:32 -03 2018

Atributos fichero

Al hacer un list con -l, nos aparecen la lista de atributos del fichero:

  • ls: 'list', lista el contenido de un directorio (un directorio es el equivalente de 'carpeta' de Windows)
$ ls -l
[AtributosDueñx][AtributosGrupo][AtributosTodxs] [ID] [Dueñx] [Grupo] [Tamaño] [Fecha] [NombreFichero]
total 244
-rw-r--r-- 1 lluis lluis 221654 Jun  6 10:49 20160324_bash.pdf
-rw-rw-r-- 1 lluis lluis    328 Apr 25 14:53 install.inf
-rwxr--r-- 1 lluis lluis    114 Jun  6 11:27 prueba.bash
drwxr-xr-x 2 lluis lluis   4096 Jun  6 12:25 parTUXza
-rw-r--r-- 1 lluis lluis  11172 Apr 11 16:27 Terminal.png
-rwxr--r-- 1 lluis lluis   4056 Jun  6 10:49 test.bash
  • -rw-r--r-- 1 lluis lluis 221654 Jun 6 10:49 20160324_bash.pdf, fichero pdf
    • -rw-: Dueño sólo puede leerlo y modificarlo
    • r--: El grupo sólo puede leerlo
    • r--: Todo el mundo sólo puede leerlo
    • lluis: dueño del fichero
    • lluis: grupo del fichero
    • 221654: Tamaño en bytes del fichero
    • Jun 6 10:49: fecha del fichero
  • -rwxr--r-- 1 lluis lluis 4056 Jun 6 10:49 test.bash: script de shell, sólo el dueñx puede ejecutarlo -rwx
  • drwxr-xr-x 2 lluis lluis 4096 Jun 6 12:25 parTUXza: directorio (drwx), para linux, los directorios son ejectuables para todxs!

Trucos del terminal

Para ahorrarse teclear demasiado, el terminal tiene ayudas para eso

  • Tab: Finalización de nombre de fichero. Cuando se escribe un nombre de fichero o directorio, basta con anotar el principio del nombre del fichero, con la tecla tabulador tabKey.png se termina de escribir automáticamente el nombre.
  • CTR + a: Principio de línea. Se manda el cursos al principio de la línea de comando
  • CTR + e: Final de línea. Se manda el cursos al final de la línea de comando

Shell scripting

La shell es la envolvente del hardware y el kernel del ordenador. El usari.x. accede al kernel y a las componentes del ordenador a través de ella.

Esta shell permite la ejecución de scripts para automatizar esas tareas que sean repetitivas. Estas scripts se pueden programar en distintas shells. En esta introducción se dan detalles de la bash: bourn-again Shell (hay distitnas shells: csh, sh, ksh, ...). En estas shells se pueden utilizar todos los coreutils. Estas scripts constituyen un lenguajde de programación interpreatado que es masivamente utilizando dentro del entorno linux

Estas scripts de shell son programas ejecutables interpretados por el kernel. Así que tienen que tener permiso de ejecución. Se realiza con la aplicación chmod (change mode, cambiar el modo):

$ chmod u+x [ScriptShell]

O bien directamente al llamar <ode>bash</code> (si el script es de bash)

$ bash [ScriptShell]

El ejemplo más senzillo de script, con nombre hola.bash (se elige la extensión .bash, pero no es obligatorio)

#!/bin/bash
echo "Hola mundo!!"
  • Al ejecutarse:
$ ./hola.bash
Hola mundo!!
  • En la primera línea se dice que se va a ejecutar con bash

Conceptos básicos

Utilizando un script test llamado test.bash

  • #: carácter para comentarios
  • ;: carácter para concatenar líneas de código
  • echo: impresión en la terminal
  • Variables: Se utilizan cómo $[NombreVariable] o ${[NombreVariable]}. Se asignan con '=' (sin espacios!!!)
#!/bin/bash

number=3
echo "Numero: "${number}
    • Ejecutando
$ chmod u+x test.bash
$ ./test.bash
Numero: 3
    • Asignación de un valor después de ejecutar un comando (con ``)
fecha=`date "+%Y/%m/%d"`
echo "HOY: "${fecha}
    • Ejecutando
HOY: 2018/06/06
  • IF: Condición
valor='Hola'

if test ${valor} == 'Hola'; then
  echo "Hello !"
else
  echo "Goodbye"
fi
    • Ejecutando
Hello
  • DO: bucles. Repetición de un número de veces una instrucción
hoy=`date +%Y%m%d`

echo "hoy: "${hoy}

i=0
while test $i -le 10; do
  nuevodia=`date +%Y%m%d -d"${hoy} $i days"`
  echo "i: "$i" fecha:"${nuevodia}
  i=`expr $i + 1`
done
    • Ejecutando
hoy: 20180611
i: 0 fecha:20180611
i: 1 fecha:20180612
i: 2 fecha:20180613
i: 3 fecha:20180614
i: 4 fecha:20180615
i: 5 fecha:20180616
i: 6 fecha:20180617
i: 7 fecha:20180618
i: 8 fecha:20180619
i: 9 fecha:20180620
i: 10 fecha:20180621

Más ejemplos en IPSL boot camp Archivo:20160324 bash.pdf y sus ejemplos Archivo:test bash.doc (antes de utilizar, renombrar cómo test.bash y darle atributos de ejecución)

Entorno servidores/clústers

Los servidores y clúster de computación, son otras máquinas, con sus usuarixs y entorno linux. Normalmente se encuentran conectadas a internet y se accede a estas máquinas de manera remota des de otra computadora o llamada 'local'

Se acceden a ellos una vez se obtiene una cuenta de usuarix.

Acceso

El acceso a los clúster de computación (HPC del Inglés) o servidores se accede la mayoría de los casos via ssh

$ ssh [NombreUsuarioenServidor]@[nombreServidor].[domino]

Por ejemplo, el CIMA dispone de un clúster de computación llamado hydra y con el domino cima.fcen.uba.ar, así que el acceso a él seria (Se introduce el pasword, sin que aparezca un cursor):

$ ssh juan.perez@hhydra.cima.fcen.uba.ar
password
[juan.perez@hydra ~]$
  • Una vex en el servidor/clúster el usuarix tiene un entorno linux estándard. Al trbajar en un espacio compartido se pide tener un poco más de cuidado que con la compu personal.
  • Para salir, la instrucción exit
[juan.perez@hydra ~]$ exit
$

Copiado de ficheros

Para copiar ficheros se podrían utilizar herramientas gráficas, pero la experiencia recomienda hacerlo desdel terminal. Para tal caso, existen las instrucciones scp y rsync (más potente y muy útil para sincronizar copias)

$ rsync [NombreUsuarixOrig]@[origen]:[fichero/directorio] [NombreUsuarixDest]@[destino]:[directorio] 
  • [NombreUsuarixOrig]: Nombre del usuarix en la máquina donde se encuentra el fichero o directorio a copiar
  • [origen]: nombre de la máquina y su doiminio ([NombreMaquina].[dominio]) donde se encuentra el fichero o directorio
  • [fichero/directorio]: fichero o directorio a copiar
  • [NombreUsuarixDest]: Nombre del usuarix en la máquina donde se quiere copiar el fichero o directorio
  • [destino]: nombre de la máquina y dominio ([NombreMaquina].[dominio]) a la cuál se quiere hacer la copia
  • [directorio]: nombre de directorio en la máquina destino donde se quiere hacer la copia

Cuando se quiere copiar, siempre nos pedirá la clave de acceso de la máquina remota. El destino o el origen no pueden ser los dos remotos. Uno tiene que ser una máquina local. Cuando es la máqiuna local, no se indica [NombreUsuarx]@[maquina] Si no se indica destino de la copia, se copia directamente en el ${HOME}

  • Copia de un fichero local al $HOME de hydra
$ rsync documento.txt juan.perez@hydra.cima.fcen.uba.ar:
  • Copia de un fichero de hydra del directorio ${HOME}/experimentos/WRFsensSFC/run/ a la máquina en local al directorio ${HOME}/estudios/WRFsensSFC/simulacion/control
$ rsync juan.perez@hydra.cima.fcen.uba.ar:experimentos/WRFsensSFC/run/wrfout_d01_2002-12-01_00:00:00 estudios/WRFsensSFC/simulacion/control
Herramientas personales