¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Ubuntu
  3. Uso de la línea de comandos
Extrait - Ubuntu Administración de un sistema Linux (2a edición)
Extractos del libro
Ubuntu Administración de un sistema Linux (2a edición) Volver a la página de compra del libro

Uso de la línea de comandos

Intérprete de comandos

1. Rol

Los diseñadores de Ubuntu han realizado esfuerzos considerables para que el uso de Linux sea lo más fácil posible. La complejidad de la administración en la versión Desktop queda ocultada por una interfaz agradable y solo hay que utilizar sus programas sin tener que realizar manipulaciones complejas.

Sin embargo, no es posible proclamarse administrador de Linux (o Ubuntu) sin saber cómo usar la línea de comandos a través del intérprete de comandos. Ya ha visto que el servidor de Ubuntu no tiene una interfaz gráfica, así que el paso por la consola es obligatorio.

La consola está accesible desde cualquier terminal usando las teclas [F3] a [F6].

 Presione, por ejemplo, [Ctrl][Alt][F3]. La sesión gráfica desaparece. Se le presenta una ventana de inicio de sesión en modo consola.

images/05RIT00.png

Esta le permitirá encontrarse en un ambiente similar al de la versión Server.

Use [Alt][F2] para volver a la terminal en la que se cargó el entorno gráfico o [Alt][F1] para volver a la terminal de inicio de sesión en modo gráfico.

También es posible emular una consola desde el menú Mostrar aplicaciones, haciendo clic en Utilidades - Terminal. Esto es lo que se abrirá:

images/05RIT01.png

El usuario tiene, entonces, acceso al intérprete de comandos, que permite ejecutar instrucciones a través del teclado o por medio de un guion devolviendo los resultados. Al intérprete también se le llama shell.

Hay varias shells, cada una con sus propias especificidades, pero Ubuntu elije la shell más común en Linux, la bash (Bourne Again SHell).

La lista de shells presentes en su instalación de Linux está incluida en el archivo /etc/shells. Para verificar qué shell está usando, escriba echo $SHELL y pulse [Intro].

2. El shell y el administrador

El propósito de este capítulo no es el de enseñarle a dominar el shell y su programación (existen, para ello, otros libros disponibles en Ediciones ENI con este objetivo), sino proporcionarle el mínimo de fundamentos y comandos para permitirle explotar su sistema Ubuntu correctamente.

En la práctica, un administrador necesita saber cómo utilizar el shell y, en particular, crear scripts para facilitar su trabajo y evitar las tareas repetitivas....

El editor vi

El editor predefinido de Linux/UNIX se llama vi (visual editor). No es el más ergonómico, pero, a diferencia de nano, está disponible en todos los Linux/UNIX. Es posible instalar una versión mejorada de vi, vim, mediante el comando sudo apt install vim.

vi [opciones] Archivo [Archivo2 ...] 

vi no tiene menús, ni interfaz gráfica de usuario, y no es intuitivo. Hay que saber de memoria los métodos abreviados. Pero, una vez dominado, vi demuestra ser rápido y práctico, al punto de que los usuarios se vuelven más eficaces que con los editores de texto.

A continuación, encontrará los comandos de base de vi, que son suficientes en el 99 % de los casos.

1. Funcionamiento

Hay tres modos de funcionamiento:

  • Modo comando: los caracteres introducidos representan comandos. Se accede a ellos pulsando [Esc]. Cada tecla o combinación de teclas desencadena una acción (borrar líneas, insertar, mover, copiar, pegar, etc.).

  • Modo edición: es la entrada de texto clásica.

  • Modo línea de comandos: una línea en la parte inferior de la pantalla permite introducir comandos especiales, confirmados con la tecla [Intro]. Se accede a ella presionando la tecla [:] en el modo comando.

Cuando lanza vi, se sitúa de forma predefinida en modo comando. Para empezar a escribir texto, se debe escribir el comando añadir ([a]) o insertar ([i]): [Esc]+[i] permite introducir texto. Para salir, pase al modo línea de comandos: [Esc]+[:], [q] + [Intro].

En cualquiera de los casos y sin importar lo que pase, si se encuentra perdido,  pulse la tecla [Esc] para volver siempre al modo comando.

2. Comandos de base

a. Editar

Las siguientes acciones están en modo comando. Deben precederse por una pulsación de la tecla [Esc]:

Comando

Acción

a

Añadir después del carácter actual (add).

A

Añadir texto al final de la línea.

i

Insertar delante del carácter actual, como en un procesador de textos (insert).

I

Insertar texto al principio de la línea.

o

Agregar una línea debajo de la línea activa.

O

Insertar una línea por encima de la línea actual.

b. Salir y guardar

Como recordatorio, los : significan que el comando se escribe en la línea de comando: [Esc]+[:]; introduzca el comando y luego [Intro].

Comando

Acción...

Gestión de archivos

1. Sistema de archivos FHS

Un sistema de archivos, llamado comúnmente filesystem o FS, define la organización de datos sobre un soporte de almacenamiento; es decir, cómo gestiona el sistema operativo la organización de archivos.

Linux es un sistema de explotación enteramente orientado a archivos. Todo (o casi todo) se representa por un archivo, tanto los datos como los periféricos o incluso los medios de comunicación (sockets, named pipes, etc.). El sistema de archivos es el corazón de todo sistema Linux/UNIX.

images/chap6_01.png

El sistema de archivos de Linux es jerárquico. Describe una arborescencia de directorios y subdirectorios, partiendo de un elemento base llamado raíz o root directory. La jerarquía se llama FHS (Filesystem Hierarchy Standard) e incluye los siguientes directorios:

Rutas

Contenido

/

Directorio raíz, base del sistema de archivos.

/bin

Archivos binarios ejecutables.

/boot

Archivos que se requieren para iniciar.

/cdrom

Directorio de montaje predefinido para los CD y DVD.

/dev

Archivos especiales para los periféricos.

/etc

Archivos de configuración del sistema y de diversas aplicaciones.

/home

Carpetas personales de los usuarios.

/lib

Bibliotecas del sistema.

/lib64

Ídem, pero en 64 bits.

/lost+found

Directorio que contiene los archivos huérfanos o dañados que se encuentran después de una verificación del sistema de archivos. Su presencia indica que el directorio actual es la raíz de un sistema de archivos.

/media

Directorio de montaje de periféricos temporales (llave USB, CD, disco externo, etc.).

/mnt

Directorio de montaje más bien usado para las pruebas del administrador o montajes manuales.

/opt

Aplicaciones o bibliotecas adicionales que deberán colocarse en una estructura de árbol específica.

/proc

Sistema de archivos virtual que proporciona una interfaz hacia las funciones y parámetros del núcleo.

/root

Carpeta del administrador.

/sbin

Archivos binarios ejecutables dedicados al administrador.

/srv

Datos de los servicios ofrecidos por el sistema.

/sys

Sistema de archivos virtual, similar a /proc, pero dedicado principalmente a los periféricos del tipo de bloques.

/tmp

Archivos temporales.

/usr

Archivos binarios, bibliotecas, fuentes, documentación, etc., que el usuario puede utilizar.

/var

Archivos y carpetas de contenidos...

Buscar

1. Buscar archivos

El comando find permite buscar archivos dentro de una arborescencia del sistema de archivos utilizando criterios y da la posibilidad de actuar sobre los resultados devueltos.

find ruta criterios opciones 

El comando find es recursivo; solo hay que especificar un directorio base para que toda la arborescencia sea recorrida a partir de ese directorio. Si bien la sintaxis muy completa, solo se explican aquí algunas nociones básicas. Consulte el manual del comando para más información.

a. Criterios de búsqueda

Los parámetros permiten definir los criterios de búsqueda. Estos criterios, si son varios, se combinan entre sí mediante una conjunción Y (criterio1 Y criterio2). 

Criterio

Búsqueda

-name, -iname

Buscar los archivos indicados, según el modelo.

-iname no distingue entre minúsculas y mayúsculas.

-type

Por tipo de archivo (f: ordinario, d: directorio, etc.).

-user, -group

Por usuario o grupo.

-size

Por tamaño. El sufijo puede ser b (bloque de 512 bytes), c (bytes) o k (kB). El valor puede ser predefinido: + (más de) o - (menos de).

-empty

Archivos vacíos.

-atime, -mtime, -ctime

Por fecha de acceso, modificación o cambio, expresada en días, eventualmente precedida por + o -.

Ejemplo de búsqueda de archivos que terminan en mkv, de más de 4 GB y a los que no se ha accedido durante seis meses:

$ find / -iname...

Redirecciones

1. Canales

Todo flujo de datos que entre o salga de un comando pasa a través de un canal. Es posible desviar el flujo de datos a otro destino (un archivo, por ejemplo) o desde otra fuente. Un sistema UNIX ofrece tres canales predefinidos, llamados canales estándar:

  • Canal 0 o STDIN: la entrada, predefinido como el teclado.

  • Canal 1 o STDOUT: la salida estándar, predefinido como la terminal.

  • Canal 2 o STDERR: la salida de errores, predefinido como la terminal.

2. De salida

El carácter > se utiliza para redirigir la salida estándar (la que normalmente va a la terminal). A continuación, se indica el nombre del archivo donde se colocará el resultado del comando.

$ ls -l > resultado.txt 
$ cat resultado.txt 
total 1 
-rw-r--r--    1 Administ ssh_user        0 Jul  4 12:04 TOTO 
-rw-r--r--    1 Administ ssh_user        0 Jul 25 15:13 resultado.txt 
-rw-r--r--    1 Administ ssh_user      171 Jul 25 15:13 test.txt 

El shell crea primero el archivo y luego ejecuta el comando. Si el archivo no existe, se creará. Si existe, su contenido se sobrescribirá, aunque el comando tecleado sea incorrecto.

Para añadir datos al final del archivo sin sobrescribir su contenido, se utiliza la doble redirección...

Algunos filtros y utilitarios

Un comando filtro es un programa que lee y escribe los datos a través de los canales, modificando la salida.

1. Las tuberías o pipes

Las tuberías o pipes permiten redirigir el canal de un comando directamente al canal de entrada de otro. El carácter que permite esto es |, accesible usando [Alt Gr][1] en los teclados en español.

$ ls -l|wc 
     57     519    3602 

El último comando puede ser en sí mismo objeto de una redirección de salida.

$ ls -l | wc > resultado.txt 

2. Buscar líneas

Se trata de extraer líneas de un flujo según diversos criterios. Para ello utilizará el comando grep.

grep [Opciones] modelo [Archivo1...] 

El modelo consiste en criterios de búsqueda de tipo texto con posibles secuencias de sustitución. El siguiente comando busca las líneas que contienen «root» en el archivo de los usuarios:

$ grep root /etc/passwd 
root:x:0:0:root:/root:/bin/bash 

He aquí algunas opciones interesantes.

  • -v efectúa la búsqueda inversa: muestra todas las líneas que no corresponden con los criterios.

  • -c solo regresa el número de líneas encontradas, sin mostrarlas.

  • -i no distingue entre mayúsculas y minúsculas.

  • -n indica el número de línea para cada línea encontrada.

Si el criterio comienza con ^, la línea debe iniciar con el criterio.

Si el criterio termina con $, la línea debe finalizar con el criterio.

3. Cortar campos

El comando cut permite seleccionar las columnas y campos de un archivo.

La sintaxis es la siguiente:

cut -cColumnas [fic1...] 

o:

cut -dc -fCampos [fic1...] 

El siguiente comando proporciona los caracteres de la primera a la quinta columna de un archivo:

$ cut -c1-5 lista 
Produ 
ratón 
disco 
panta 
tecla 

El siguiente recorta los campos separados por :; aquí despliega los directorios personales de los usuarios:

$ cut -d: -f6 /etc/passwd 
/root 
/bin 
/sbin 
/var/adm 
/var/spool/lpd 

4. Contar líneas

El comando wc cuenta líneas, palabras y bytes.

wc [-l] [-c] [-w] [-m] fic1 

Opción

Rol

-l

Cuenta el número de líneas.

-w

Cuenta el número de palabras.

-c

Cuenta el número de bytes.

-m

Cuenta el número de caracteres.

$ wc lista ...

Variables

1. Nomenclatura

El nombre de una variable obedece a ciertas reglas:

  • Puede estar compuesto de letras mayúsculas o minúsculas; números y guiones bajos.

  • El primer carácter no puede ser un número.

  • El tamaño de un nombre es, en principio, ilimitado (tampoco se debe abusar). 

2. Declaración y afectación

Una variable se declara tan pronto como se le asigna un valor. La asignación se hace con el signo =, sin espacio ni antes ni después del signo.

var=Hola 

3. Acceso y despliegue

Se accede al contenido de una variable colocando el signo $ delante del nombre de la variable:

$ camino=/tmp/eni 
$ ls $camino 

Atención, porque el espacio tiene un significado especial. El siguiente ejemplo muestra el problema:

$ c=Hola mis amigos 
orden “mis” no encontrada 
$ echo $c 
Hola 

Para usar caracteres especiales, hay que bloquearlos uno a uno o ponerlos entre comillas o apóstrofos.

c=Hola\ mis\ amigos # Solución pesada 
c="Hola mis amigos" # Solución correcta 
c='Hola mis amigos' # Solución correcta 

4. Corchetes

Los corchetes {} permiten identificar el nombre de una variable. Imagine la variable de archivo que contiene el nombre del archivo ’lista’. Quiere copiar lista1 bajo el nombre de lista2 usando con una variable:

$ archivo=lista 
$ cp $archivo1 $archivo2 
cp: falta un archivo como argumento 
Pruebe 'cp --help'...

Efectuar pruebas

El comando test permite realizar pruebas de condiciones. El resultado se puede recuperar por medio de la variable $? (código de retorno). Si este resultado es 0, entonces la condición es posible.

El comando test puede remplazarse por medio de corchetes [...] o [[...]]. Se debe respetar un espacio antes y después de los paréntesis. La diferencia entre los corchetes simples y dobles radica en que: los corchetes simples son un atajo hacia la prueba, mientras que los dobles representan la prueba interna del shell. Utilice corchetes dobles, que en principio son más rápidos.

1. Sobre las cadenas

  • [[ -z "valor" ]]: regresa 0 si el valor está vacío.

  • [[ -n "valor" ]]: regresa 0 si el valor no está vacío.

  • [[ "valor1" = "valor2" ]]: 0 si las dos cadenas son iguales.

  • [[ "valor1" != "valor2" ]]: 0 si las dos cadenas son diferentes.

2. Sobre los valores numéricos

Los operadores son los siguientes:

Opción

Rol

-eq

Equal: Igual

-ne

Not Equal: Diferente

-lt

Less than: Inferior

-gt

Greater than: Superior

-le

Less ou equal: Inferior o igual

-ge

Greater or equal: Superior o igual

He aquí un ejemplo de test:

$ a=10 
$ b=20 
$ [[ "$a" -ne "$b" ]]; echo $? 
0 

3. Sobre los archivos

Todos los operadores sobre los archivos son unarios. La siguiente tabla agrupa algunos operadores...

Procesos

La gestión de los procesos se examinará de forma detallada en el capítulo Tareas de administración. Sin embargo, por ahora, necesita comprender su funcionamiento: cómo ejecutarlos, listarlos y detenerlos.

1. Ejecutar programas

Se inicia un programa escribiendo su nombre. Notará rápidamente que «no se rinde» (el indicador permanece bloqueado) hasta que termina o se interrumpe con [Ctrl][c].

El sistema es, por lo tanto, multitarea y un cierto número procesos ya se están ejecutando en la máquina. Cuando se introduce un comando, el shell crea un nuevo proceso para ejecutarlo; pero nada lo obliga a esperar al mensaje del proceso terminado para devolverle el control: solo hay que agregar Y «&» al final de la línea. Esto se conoce como «ejecutar en segundo plano».

images/05RIT02.png

Por ejemplo, para guardar en un archivo el resultado de un ls recursivo desde la raíz, es necesario ejecutarlo en segundo plano debido a la duración del procesamiento (¡lista el contenido de todos los directorios del sistema de archivos!). Este es el comando que se ha de usar:

$ ls -R / > ls.txt 2/dev/null & 
[1] 21976 

Justo después de la línea de datos, aparece un número; es el PID del nuevo proceso lanzado.

Algunas observaciones sobre el uso de la ejecución en segundo plano:

  • El proceso ejecutado no debe esperar más información, ya que de lo contrario existe el riesgo de confusión entre este comando y el prompt del shell.

  • El proceso lanzado no debe mostrar ningún resultado en la pantalla, ya que se corre el riesgo de que lo que se muestra entre en conflicto con lo que el shell despliega (por ejemplo, una línea que aparece en medio de la entrada de datos).

  • Finalmente, cuando sale del shell, también...

Diversos

1. Cálculos

El bash propone una forma simple de cálculo de números enteros, colocando la operación entre $((...)):

$ a=1 
$ a=$((a+1)) 
$ echo $a 
2 
$ b=2 
$ a=$((a*b)) 
$ echo $a 
4 

No es necesario especificar el $ de los nombres de las variables entre doble paréntesis. 

2. Longitud de una cadena

Es posible obtener la longitud de una cadena con el carácter # entre llaves.

$ a=Jules 
$ echo "Longitud de $a: ${#a}" 
Longitud de Jules: 5 

3. Sustitución de comandos

El mecanismo de sustitución permite colocar el resultado de comandos simples o complejos en una variable. Coloque los comandos que se han de ejecutar entre acentos graves `:

$ mi_unix=`uname` 
$ echo ${mi_unix} 
Linux 
$ maquina=`uname -a | cut -d" " -f5` 
echo $maquina 
SMP 

Los acentos graves no son siempre ideales para estas operaciones. De hecho, si hay varios niveles, hay que bloquear los que se encuentran en el interior de los primeros. Además, bash permite usar la sintaxis $(…), que no presenta ese problema.

$ mi_unix=$(uname) 
$ echo ${mi_unix} 
Linux 
$ maquina=$(uname -a | cut -d" " -f5) 
echo $maquina 
SMP 

Puesta en práctica

1. Enunciado

 Verifique en qué directorio está situado.

 Vaya a su directorio personal.

 Cree una carpeta llamada «Ejercicios» y desplácese a esa carpeta.

 Cree un directorio «cursos» con los subdirectorios «francés», «informática» e «historia». 

 En cada subdirectorio, cree los archivos vacíos «curso1», «curso2» y «curso3».

 Renombre el directorio «historia» a «historiaygeo» y el directorio «cursos» a «cursos2020».

 Al mismo nivel que el directorio «cursos2020», cree un directorio «cursos2021». Copie la arborescencia «cursos2020» a «cursos2021».

 Cree un enlace hacia «cursos2020/francés/curso1» en el directorio «curso2021/francés» remplazando el archivo existente.

 Modifique el contenido del archivo «cursos2020/francés/curso1» y compruebe, abriendo el enlace creado anteriormente, que el contenido ha sido modificado. 

 Borre el directorio «cursos2020» y su contenido con un solo comando.

 Compruebe que el archivo «curso1» todavía existe.

 Cree un archivo con el contenido del historial.

 Edite este archivo con vi.

 Copie las primeras 10 líneas...