Redirección

Section header image

Redirección 20

Agregar contenido a archivos en Linux puede hacerse de varias maneras. Linux posee algunos editores de texto que pueden usarse para agregar contenido a un archivo. Sin embargo, este método requiere cierta familiaridad con los comandos del editor de texto de Linux.

Nota

Los editores de texto de Linux están cubiertos en la siguiente sección de este curso.

En Linux, se puede agregar contenido a un archivo rápidamente usando una función de línea de comandos llamada redirección de entrada/salida (E/S) (input/output; I/O). La redirección E/S (I/O) permite enviar la información de la línea de comandos a archivos, dispositivos y otros comandos. La entrada o salida de un comando se redirige desde su destino predeterminado a una ubicación diferente. La redirección E/S es como una serie de vías de tren, donde se puede habilitar un conmutador para dirigir la salida de un comando a una vía diferente que vaya a otro lugar en el shell. En esta sección, escribiremos a archivos a través de la redirección de la salida de un comando hacia otro archivo.

Cuando se trata de comandos de entrada y salida, existen tres rutas, o “vías”. Estas rutas se denominan descriptores de archivos. El primer descriptor de archivo es la entrada estándar, abreviada como STDIN (standard input). La entrada estándar es la información que el comando recibe y procesa cuando se ejecuta, esencialmente lo que un usuario escribe en el teclado. El segundo descriptor de archivo es la salida estándar, abreviada como STDOUT (standard output). La salida estándar es la información que muestra el comando, la salida del comando. El último descriptor de archivo es el error estándar, abreviado como STDERR (standard error). STDERR, son los mensajes de error generados por comandos que no se ejecutan correctamente. Los siguientes son ejemplos de cómo aparecerán los descriptores de archivos en la terminal:

Entrada estándar (STDIN)

sysadmin@localhost:~$ ls ~/Documents

Salida estándar (STDOUT)

sysadmin@localhost:~$ ls                                                        
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

Error estándar (STDERR)

sysadmin@localhost:~$ ls fakefile                                               
ls: cannot access fakefile: No such file or directory

Esta sección cubrirá uno de los tres descriptores de archivos, STDOUT, y cómo redirigir STDOUT desde donde normalmente aparece en el terminal, a un archivo en el sistema de archivos. Para ejecutar la redirección, simplemente use el símbolo “mayor que” > junto al nombre del archivo:

[COMANDO] > [ARCHIVO]

Para demostrar cómo funciona la redirección, usaremos la salida del comando cat. Sin redirección, la salida del comando cat se mostrará en el terminal:

Siga leyendo

Utilice el siguiente comando para cambiar al directorio Documents:

sysadmin@localhost:~$ cd ~/Documents
sysadmin@localhost:~/Documents$ cat food.txt                                    
Food is good.

Ahora utilice el carácter > para redirigir el STDOUT del comando cat food.txt anterior a un nuevo archivo llamado newfile1.txt:

sysadmin@localhost:~/Documents$ cat food.txt > newfile1.txt

Como puede ver, no se muestra ninguna salida ya que el STDOUT se ha redirigido al archivo newfile1.txt. Compruebe que el STDOUT del comando cat food.txt se encuentra en newfile1.txt:

sysadmin@localhost:~/Documents$ cat newfile1.txt                     
Food is good.

Esta función es útil si necesita copiar contenido de un archivo importante a otro archivo para editar su contenido sin modificar el archivo original. Sin embargo, ¿qué sucede si desea agregar un comentario o una nota a un archivo ya existente? Para hacer esto, puede usar el comando echo. El comando echo se utiliza para imprimir una salida en la terminal:

sysadmin@localhost:~/Documents$ echo "Hello"           
Hello                                                                   

Imprimir comentarios en la pantalla es una función curiosa, pero el comando echo puede ser más útil cuando se usa con la redirección. Mediante el comando echo, puede agregar contenido al archivo newfile1.txt:

sysadmin@localhost:~/Documents$ cat newfile1.txt         
Food is good.     
sysadmin@localhost:~/Documents$ echo "I like food." > newfile1.txt
sysadmin@localhost:~/Documents$ cat newfile1.txt             
I like food.                                           

Observe que el STDOUT del comando echo ha reemplazado el contenido original del archivo. Esto se debe a que el carácter > sobrescribe cualquier contenido de un archivo existente. Para añadir contenido a un archivo, en lugar de sobrescribir, utilice el símbolo “mayor que” dos veces >>:

sysadmin@localhost:~/Documents$ echo "This food is good." >> newfile1.txt
sysadmin@localhost:~/Documents$ cat newfile1.txt              
I like food.                                                      
This food is good.                                 

Importante

Para redirigir la información a un archivo existente, el usuario debe tener permisos de escritura para ese archivo.

 
 

Editor de texto

Section header image

Editor de texto 21

El principal editor de texto para Linux y UNIX es un programa llamado vi. Si bien hay numerosos editores disponibles para Linux incluyendo desde el pequeño editor nano hasta el editor masivo emacs, el editor vi tiene varias ventajas:

  • El editor vi está disponible en todas las distribuciones Linux del mundo. Esto no ocurre con ningún otro editor.

  • El editor vi se puede ejecutar tanto en una CLI (interfaz de línea de comandos) como en una GUI (interfaz gráfica de usuario).

  • Aunque se han añadido nuevas características al editor vi, las funciones principales han existido durante décadas. Esto significa que si alguien aprendió a usar el editor vi en la década de 1970, podrá usar la versión moderna sin ningún problema. Aunque eso pueda parecer trivial, puede que dentro de veinte años no sea tan trivial.

A tener en cuenta

La forma correcta de pronunciar el nombre del editor vi es vi-ay. Las letras vi representan visual, pero nunca se pronunció de esta manera. En su lugar se pronuncia la letra v (vi) seguida de la letra i (ay) en inglés.

En realidad, la mayoría de los sistemas Linux no incluyen el editor vi original, sino una versión mejorada del mismo conocida como vim (vi mejorada) (vi improved). Este hecho puede estar oculto en la mayoría de las distribuciones de Linux. En su mayor parte, vim funciona igual que vi, pero presenta funciones adicionales. Para los temas que se tratan en este curso, tanto vi como vim funcionarán perfectamente

Para comenzar a usar vi, simplemente escriba el comando seguido del nombre de ruta del archivo que quiere editar o crear:

sysadmin@localhost:~$ vi newfile.txt

Los tres modos utilizados en vi son los siguientes: modo de comando, modo de inserción y modo ex.

Modo de comando: Movimiento

Inicialmente, el programa empieza en modo de comando. El modo de comando se utiliza para escribir comandos, como los utilizados para desplazarse por un documento, manipular texto o acceder a los otros dos modos. Para volver al modo de comando en cualquier momento, presione la tecla Esc.

Una vez haya agregado texto a un documento, deberá presionar la tecla Esc para volver al modo de comando y realizar acciones como mover el cursor. Esto parece que sea mucho trabajo, pero recuerde que vi funciona en un entorno terminal en el cual un mouse es inservible.

Los comandos de movimiento en vi tienen dos aspectos, el movimiento (motion) y un prefijo numérico opcional (count) que indica cuántas veces se debe repetir ese movimiento. El formato general es el siguiente:

[número] movimento

En la siguiente tabla se resumen las teclas de movimiento disponibles:

Movimiento Resultado
h Un carácter a la izquierda
j A la línea siguiente
k A la línea anterior
l Un carácter a la derecha
w Una palabra adelante
b Una palabra hacia atrás
^ Al principio de la línea
$ Al final de la línea

Nota

En la actualización vim también es posible usar las teclas de flecha     en lugar de los caracteres h j k l respectivamente.

Estos movimientos se pueden anteponer con un número para indicar cuántas veces se debe realizar el movimiento. Por ejemplo, 5h moverá el cursor cinco caracteres a la izquierda y 3w moverá el cursor tres palabras a la derecha.

Para mover el cursor a un número de línea específico, escriba ese número de línea seguido del carácter G. Por ejemplo, para llegar a la quinta línea del archivo, escriba 5G. Puede usar 1G o gg para moverse a la primera línea del archivo, mientras que una G única le llevará a la última línea. Para averiguar en qué línea se encuentra el cursor, utilice CTRL+G.

Modo de comando: Acciones

La convención estándar para editar contenido con procesadores de texto es usando copiar, cortar y pegar. El programa vi no tiene ninguno de estos. En su lugar, vi utiliza los tres comandos siguientes:

Estándar Vi Significado
cortar d eliminar (delete)
copiar y sacar (yank)
pegar P | p poner (put)

Los movimientos aprendidos en la página anterior se utilizan para especificar dónde se llevará a cabo la acción, comenzando siempre con la ubicación actual del cursor. Cualquiera de los siguientes formatos generales es aceptable para comandos de acción:

acción [número] movimento
[número] acción movimento

Eliminar

Eliminar (delete) suprime el texto indicado de la página y lo guarda en el búfer, siendo el búfer el equivalente al “portapapeles” (clipboard) utilizado en Windows o Mac OSX. En la siguiente tabla se proporcionan algunos ejemplos de uso comunes:

Acción Resultado
dd Elimina la línea actual
3dd Elimina las tres líneas siguientes
dw Elimina la palabra actual
d3w Elimina las tres palabras siguientes
d4h Elimina cuatro caracteres hacia la izquierda

Cambiar

La función cambiar (change) es muy similar a la de eliminar; el texto se elimina y se guarda en el búfer. Sin embargo, el programa cambia a modo de inserción y permite la introducción de cambios inmediatos en el texto. En la siguiente tabla se proporcionan algunos ejemplos de uso comunes:

Acción Resultado
cc Cambiar la línea actual
cw Cambiar la palabra actual
c3w Cambiar las tres palabras siguientess
c5h Cambiar cinco caracteres hacia la izquierda

Sacar

Sacar (yank) coloca el contenido en el búfer sin eliminarlo. En la siguiente tabla se proporcionan algunos ejemplos de uso comunes:

Acción Resultado
yy Sacar la línea actual
3yy Sacar las tres líneas siguientes
yw Sacar la palabra actual
y$ Sacar el fragmento desde el cursor hasta el final de la línea actual

Poner

Poner (put) coloca el texto guardado en el búfer antes o después de la posición del cursor. Tenga en cuenta que estas son las dos únicas opciones, poner no utiliza movimientos como los comandos de acción anteriores.

Acción Resultado
p Poner o pegar después del cursor
P Poner antes del cursor

Buscar en vi

Otra función estándar que ofrecen los procesadores de texto es la función de búsqueda (find). A menudo, las personas usan CTRL+F o miran en el menú de edición. El programa vi utiliza la búsqueda. La función de búsqueda es más potente que la función find porque admite patrones de texto literales y expresiones regulares.

Para buscar hacia adelante desde la posición actual del cursor, use la / para iniciar la búsqueda, escriba un término de búsqueda y, a continuación, presione la tecla Enter para iniciar la búsqueda. El cursor se moverá al primer resultado que coincida con su término de búsqueda.

Para proceder al siguiente resultado coincidente usando el mismo patrón, presione la tecla n. Para volver al resultado anterior, presione la tecla N. Si se alcanza el final o el comienzo del documento, la búsqueda se ajustará automáticamente para continuar con el resto del documento.

Para empezar a buscar desde la posición del cursor hacia atrás, empiece por escribir ?, entonces escriba el patrón de búsqueda y presione la tecla Enter.

Modo Insertar

El modo Insertar se utiliza para agregar texto a un documento. Hay algunas maneras de entrar en el modo de inserción desde el modo de comando, cada una diferenciada por donde comienza la inserción de texto. La siguiente tabla presenta los más comunes:

Entrada Función
a Comenzar a insertar justo después del cursor
A Comenzar a insertar al final de la línea
I Comenzar a insertar justo antes del cursor
I Comenzar a insertar al principio de la línea
o Comenzar a insertar en una nueva línea después del cursor
O Comenzar a insertar en una nueva línea antes del cursor

Modo Ex

Originalmente, el editor vi se llamaba editor ex. El nombre vi era la abreviatura del comando visual en el editor ex que cambiaba el editor al modo “visual”.

En el modo normal original, el editor ex sólo permitía a los usuarios ver y modificar una línea cada vez. En el modo visual, los usuarios podían ver la mayor parte del documento que podía caber en la pantalla. Dado que la mayoría de los usuarios preferían el modo visual al modo de edición por línea, el archivo de programa ex se vinculó a un archivo vi. De este modo los usuarios podían iniciar ex directamente en modo visual al ejecutar el enlace vi.

Eventualmente, el archivo de programa fue renombrado vi y el editor ex se convirtió en un enlace que apuntaba al editor vi.

Cuando se utiliza el modo ex del editor vi, es posible ver o cambiar su configuración, así como ejecutar comandos de archivo como abrir, guardar o cancelar cambios en un documento. Para acceder al modo ex, escriba el carácter : en el modo de comando. En la tabla siguiente se enumeran algunas acciones comunes realizadas en modo ex:

Entrada Función
:w Escribir el documento actual al sistema de archivos
:w nombre_del_archivo Guardar una copia del documento actual bajo el nombre nombre_del_archivo
:w! Forzar escritura al documento actual
:1 Ir a la primera línea (o otra línea indicada por el número)
:e nombre_del_archivo Abrir nombre_del_archivo
:q Suspender (salir) (quit) si no se han realizado cambios al documento
:q! Suspender sin guardar los cambios realizados al documento

Un análisis rápido de la tabla anterior revela que cuando un signo de exclamación, ! , se agrega a un comando, se intentará forzar la operación. Por ejemplo, imagine que realiza cambios a un archivo en el editor vi y luego intenta salir usando :q, solo para descubrir que el comando falla. En este caso, el editor vi no quiere salir del documento sin guardar los cambios realizados, pero usted puede forzar la salida con el comando ex :q!.

A tener en cuenta

Aunque el modo ex ofrece varias maneras de guardar y salir, también está disponible el comando ZZ; éste es el equivalente a :wq. Hay muchas más funciones que se solapan entre el modo ex y el modo de comando. Por ejemplo, el modo ex se puede utilizar para navegar a cualquier línea del documento escribiendo : seguido del número de línea, mientras que G se puede utilizar en modo de comando como se ha demostrado anteriormente.

Siga leyendo

Si tiene un archivo de texto abierto, salga ejecutando el comando :q!. Esto lo cerrará sin guardar cambios.

~
~
:q!_
 
 

Apagar

Section header image

Apagar 15

El comando shutdown prepara el sistema para un apagado seguro. Todos los usuarios que han iniciado una sesión reciben la notificación de que el sistema se está apagando y se evitan nuevos inicios de sesión en los cinco minutos previos al apagado completo del sistema.

shutdown [OPCIONES] HORA [MENSAJE]

Siga leyendo

El comando shutdown requiere acceso administrativo, cambie a la cuenta root para esta sección utilizando el siguiente comando. Use netlab123 como contraseña.

sysadmin@localhost:~$ su -                                                   
Password:                                                                       
root@localhost:~#

¡En realidad nuestras máquinas virtuales no se apagan! Use el comando pero tenga en cuenta que, en lugar de apagar el sistema, solamente regresará a la línea de comandos. Quizás tenga que presionar Enter o Ctrl+C para volver a ver la línea de comandos.

root@localhost:~# shutdown now                                         
                                                                                
Broadcast message from sysadmin@localhost                                       
        (/dev/pts/0) at 2:05 ...                                              
                                                                                
The system is going down for maintenance NOW!

A diferencia de otros comandos utilizados para apagar el sistema, el comando shutdown requiere un argumento de tiempo para especificar cuándo debe comenzar el apagado. Los formatos de este argumento de tiempo pueden ser la palabra now (ahora), una hora del día en el formato hh:mm o el número de minutos de retraso utilizando el formato +minutos.

Piense sobre lo siguiente

El reloj de nuestro sistema puede estar configurado en una zona horaria diferente a la que se encuentra usted. Para verificar la hora en la terminal, use el comando date. En nuestras máquinas, el formato predeterminado de la salida del comando date es el siguiente:

dia_de_la_semana  mes  hora:minuto:segundo  UTC  año

o en ingles:

weekday month day hour:minute:second UTC year

Las letras UTC presentes en la salida indican que la hora se muestra de acuerdo con el Horario Coordinado Universal.

root@localhost:~# date                                                      
Sat Oct  3 01:50:07 UTC 2020 
root@localhost:~# shutdown 01:51                                                
                                                                                
Broadcast message from sysadmin@localhost                                       
        (/dev/pts/0) at 1:50 ...                                              
                                                                                
The system is going down for maintenance in 1 minute!

Broadcast message from sysadmin@localhost                                       
        (/dev/pts/0) at 1:51 ...                                              
                                                                                
The system is going down for maintenance NOW! 

El comando shutdown también posee la opción de añadir un mensaje como argumento. Este mensaje aparecerá en las terminales de todos los usuarios. Por ejemplo:

root@localhost:~# shutdown +1 "Goodbye World!"                                  
                                                                                
Broadcast message from sysadmin@localhost                                       
        (/dev/pts/0) at 3:07 ...                                              
                                                                                
The system is going down for maintenance in 1 minute!                           
Goodbye World!                                                                  
shutdown: Unable to shutdown system                                             
root@localhost:~#                                                             
Broadcast message from sysadmin@localhost                                       
        (/dev/pts/0) at 3:08 ...                                              
                                                                                
The system is going down for maintenance NOW!                                   
Goodbye World!
 
 

Filtrado de entradas

Section header image

Filtrado de entradas 14

El comando grep es un filtro de texto que busca líneas en una entrada y devolverá aquellas que coincidan con un patrón determinado.

grep [OPCIONES] PATRÓN [ARCHIVO]

Siga leyendo

Utilice el siguiente comando para cambiar al directorio Documents:

sysadmin@localhost:~$ cd ~/Documents

Si el siguiente ejemplo le devuelve un mensaje de error, repita el ejemplo de la Sección 11:

sysadmin@localhost:~/Documents$ cp /etc/passwd .

Por ejemplo, el archivo passwd que copiamos anteriormente al directorio Documents contiene los detalles de cuentas especiales del sistema y cuentas de usuarios en el sistema. Este archivo puede ser muy grande, sin embargo, el comando grep se puede utilizar para filtrar y obtener información sobre un usuario específico, como por ejemplo el usuario sysadmin. Utilice sysadmin como argumento de patrón y passwd como argumento de archivo:

sysadmin@localhost:~/Documents$ grep sysadmin passwd                               
sysadmin:x:1001:1001:System Administrator,,,,:/home/sysadmin:/bin/bash 

El comando anterior devolvió la línea del passwd que contiene el patrón sysadmin.

Nota

Esta línea es la entrada /etc/passwd que pertenece al usuario sysadmin y proporciona información que está más allá del alcance de este curso. Para obtener más información sobre este archivo, consulte NDG Linux Essentials.

El ejemplo anterior utiliza un término de búsqueda simple como patrón; sin embargo grep es capaz de interpretar patrones de búsqueda mucho más complejos.

 
 

Patrones básicos

Section header image

Patrones básicos 14.2

Las expresiones regulares son patrones que sólo ciertos comandos pueden interpretar. Las expresiones regulares se pueden expandir para que coincidan con ciertas secuencias de caracteres en el texto. Los ejemplos que se muestran en esta página harán uso de expresiones regulares para demostrar su potencia cuando se utilizan con el comando grep. Además, estos ejemplos proporcionan una demostración muy visual de cómo funcionan las expresiones regulares, el texto que resulta de estas expresiones se mostrará en color rojo en el resultado (output).

Siga leyendo

Utilice el siguiente comando cd para cambiar al directorio Documents.

sysadmin@localhost:~$ cd ~/Documents

La más simple de todas las expresiones regulares solo usa caracteres de significado literal, como el ejemplo de la página anterior:

sysadmin@localhost:~/Documents$ grep sysadmin passwd                               
sysadmin:x:1001:1001:System Administrator,,,,:/home/sysadmin:/bin/bash

Caracteres de anclaje

Los caracteres de anclaje son una de las formas con que se pueden utilizar expresiones regulares para limitar los resultados de una búsqueda. Por ejemplo, el patrón root aparece muchas veces en el archivo /etc/passwd:

sysadmin@localhost:~/Documents$ grep 'root' passwd
root:x:0:0:root:/root:/bin/bash                                                 
operator:x:1000:37::/root:

Para evitar que el shell los malinterprete como caracteres especiales del shell, estos patrones deben escribirse protegidos por comillas sólidas, lo que simplemente significa colocarlos entre comillas.

El primer carácter de anclaje ^ se utiliza para indicar que el patrón debe aparecer al principio de la línea. Por ejemplo, para encontrar todas las líneas en /etc/passwd que comienzan con root use el patrón ^root. Tenga en cuenta que ^ debe ser el primer carácter del patrón para ser efectivo.

sysadmin@localhost:~/Documents$ grep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash

Para el siguiente ejemplo, examine primero el archivo alpha-first.txt. El comando cat se puede utilizar para mostrar el contenido del archivo:

sysadmin@localhost:~/Documents$ cat alpha-first.txt                             
A is for Animal                                                                 
B is for Bear                                                                   
C is for Cat                                                                    
D is for Dog                                                                    
E is for Elephant                                                               
F is for Flower

El segundo carácter de anclaje $ se puede utilizar para indicar que el patrón debe aparecer al final de la línea, reduciendo eficazmente los resultados de la búsqueda. Para encontrar las líneas que terminan con una r en el archivo alpha-first.txt, utilice el patrón r$:

sysadmin@localhost:~/Documents$ grep 'r$' alpha-first.txt
B is for Bear
F is for Flower

Una vez más, la posición de este carácter es importante; el $ debe ser el último carácter en el patrón para ser eficaz como anclaje.

Encontrar caracteres coincidentes usando .

Los siguientes ejemplos usan el archivo red.txt:

sysadmin@localhost:~/Documents$ cat red.txt
Red
Reef
Rot
Reeed
Rd
Rod
Roof
Reed
Root
reel
read

Una de las expresiones más útiles es el carácter . (punto). Representa cualquier carácter excepto el carácter de nueva línea. El patrón r..f encontrará cualquier línea que contenga la letra r seguida de exactamente dos caracteres (que pueden ser cualquier carácter excepto el de nueva línea) y luego la letra f:

sysadmin@localhost:~/Documents$ grep 'r..f' red.txt
reef
roof

El mismo concepto se puede repetir usando otras combinaciones. El comando en el ejemplo siguiente encontrará palabras de cuatro letras que comienzan con r y acaban con d:

sysadmin@localhost:~/Documents$ grep 'r..d' red.txt
reed
read

Este carácter se puede utilizar tantas veces como se desee. Para encontrar todas las palabras de al menos cuatro caracteres se puede utilizar el siguiente patrón:

sysadmin@localhost:~/Documents$ grep '....' red.txt                             
reef
reeed
roof                                                                            
reed
root
reel
read

La línea no tiene que coincidir exactamente, simplemente debe contener el patrón, como se ve a continuación cuando se busca r..t en el archivo /etc/passwd:

sysadmin@localhost:~/Documents$ grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:1000:37::/root:  

Encontrar un carácter único usando []

Los corchetes [ ] se utilizan para indicar caracteres únicos o rangos de caracteres posibles en una lista.

Por ejemplo, dado el archivo profile.txt:

sysadmin@localhost:~/Documents$ cat profile.txt
Hello my name is Joe.
I am 37 years old.
3121991
My favorite food is avocados.
I have 2 dogs.
123456789101112

Para encontrar todas las líneas en el archivo profile.txt que contienen un número, utilice el patrón [0123456789] o [0-9]:

sysadmin@localhost:~/Documents$ grep '[0-9]' profile.txt
I am 37 years old.
3121991
I have 2 dogs.
123456789101112

Por otro lado, para encontrar todas las líneas que contienen caracteres no numéricos, inserte un ^ como primer carácter dentro de los corchetes. Este carácter niega los caracteres que lo siguen:

sysadmin@localhost:~/Documents$ grep '[^0-9]' profile.txt
Hello my name is Joe.
I am 37 years old.
My favorite food is avocados.
I have 2 dogs.

Nota

No confunda el resultado de [^ 0-9] con las líneas que no contienen números. En realidad, esta expresión se refiere a líneas que contienen no-números (caracteres no numéricos). Examine el archivo original para ver la diferencia. Las líneas tercera y sexta sólo contienen números, no contienen caracteres no numéricos, y por lo tanto no han sido incluidas en este último resultado.

Cuando otros caracteres de expresión regular se colocan dentro de corchetes, se tratan como caracteres literales. Por ejemplo, el carácter . normalmente indica cualquier carácter. Pero si se coloca dentro de corchetes simplemente se referirá al carácter . (punto). En el siguiente ejemplo, sólo las líneas que contienen el carácter . se mostrarán en el resultado.

sysadmin@localhost:~/Documents$ grep '[.]' profile.txt
Hello my name is Joe.
I am 37 years old.
My favorite food is avocados.
I have 2 dogs.

Indicar un carácter o patrón repetido utilizando el *

El carácter de expresión regular * se utiliza para indicar la ausencia o la presencia una o más veces del carácter o patrón que lo precede. Por ejemplo, e* indicaría la ausencia (cero) o la presencia, una o más veces, de la letra e:

sysadmin@localhost:~/Documents$ cat red.txt
red
reef
rot
reeed
rd
rod
roof
reed
root
reel
read
sysadmin@localhost:~/Documents$ grep 're*d' red.txt
red
reeed
rd
reed

También es posible indicar la ausencia o presencia una o más veces de una lista de caracteres utilizando los corchetes. El patrón [oe]* utilizado en el siguiente ejemplo se refiere a líneas con ausencia o presencia una o más veces del carácter o o del carácter e:

sysadmin@localhost:~/Documents$ grep 'r[oe]*d' red.txt
red
reeed
rd
rod
reed

Cuando se usa con un solo carácter, * no resulta muy útil. Note que cualquiera de los siguientes patrones coincide con cada una de las líneas (string) del archivo: .* e* b* z*.

sysadmin@localhost:~/Documents$ grep 'z*' red.txt
red
reef
rot
reeed
rd
rod
roof
reed
root
reel
read
sysadmin@localhost:~/Documents$ grep 'e*' red.txt
red
reef
rot
reeed
rd
rod
roof
reed
root
reel
read

Esto se debe a que * puede indicar cero ocurrencias de un patrón. Para que el * sea útil, es necesario crear un patrón que incluya algo más que el carácter que precede al *. Por ejemplo, los resultados anteriores se pueden refinar agregando otra e para hacer que el patrón ee* coincida efectivamente con cada línea que contenga al menos una e.

sysadmin@localhost:~/Documents$ grep 'ee*' red.txt
red
reef
reeed
reed
reel
read

Entrada estándar

Si no se proporciona un nombre de archivo, el comando grep actuará sobre la entrada estándar, que normalmente proviene del teclado y de la entrada proporcionada por el usuario que está ejecutando el comando. Esto permite que el uso de grep se convierta en una experiencia interactiva donde el usuario escribe y grep filtra la entrada a medida que avanza. Pruébelo. Simplemente presione Ctrl+D cuando esté listo para volver al intérprete de comandos (prompt).

Siga leyendo

Utilice el siguiente comando cd para volver al directorio principal:

sysadmin@localhost:~/Documents$ cd ~
Linux is Open Source which makes it extremely versatile! Internet of Things, Big Data, Cloud Computing, Cyber Security, Networking and more.

«Linux es open source. ¡Esto lo hace extremadamente versátil!»

Administración de paquetes

Section header image

Administración de paquetes 18

La administración de paquetes es un sistema mediante el cual un software puede ser instalado, actualizado, consultado o eliminado de un sistema de archivos. En Linux, hay muchos sistemas de gestión de paquetes de software diferentes, pero los dos más populares son Debian y Red Hat. Las máquinas virtuales de este curso utilizan Ubuntu, un derivado de Debian.

En el nivel más bajo del sistema de administración de paquetes Debian se encuentra el comando dpkg. Este comando puede ser complicado para los usuarios más nuevos a Linux. La herramienta Advanced Package Tool, apt-get, un programa front-end para la herramienta dpkg, facilita la gestión de paquetes.

Nota:

Un programa front-end es un programa que los usuarios pueden ver y con el que pueden interactuar.

Siga leyendo

Muchos de los comandos de administración de paquetes requieren acceso administrativo, por lo que se precederán del comando sudo. Use netlab123 como contraseña cuando se le solicite.

Instalación de paquetes

Los paquetes de archivos normalmente se instalan por descarga directa desde repositorios ubicados en servidores de Internet. Los repositorios Debian contienen más de 65.000 paquetes de software diferentes. Antes de instalar un paquete, es recomendable actualizar la lista de paquetes disponibles usando el comando apt-get update.

Los siguientes comandos pueden tardar unos minutos en ejecutarse.
sudo apt-get update
sysadmin@localhost:~$ sudo apt-get update                                       
[sudo] password for sysadmin:                                                   
Ign file: amd64/ InRelease                                                      
Ign file: amd64/ Release.gpg                                                    
Ign file: amd64/ Release                                                        
Reading package lists... Done

Para buscar palabras clave (keyword) dentro de estos paquetes, puede utilizar el comando apt-cache search.

apt-cache search [keyword]

La palabra clave que se utiliza debe coincidir con parte del nombre o descripción del paquete que se intenta localizar. Se pueden usar varias palabras clave para especificar aún más la búsqueda; por ejemplo, el término de búsqueda web server proporcionará mejores resultados que web o server.

Para buscar paquetes asociados con la palabra clave cow:

sysadmin@localhost:~$ apt-cache search cow                                      
cowsay - configurable talking cow

Una vez encontrado el paquete (package) que desea instalar, puede utilizar el comando apt-get install para instalarlo:

sudo apt-get install [package]
sysadmin@localhost:~$ sudo apt-get install cowsay                               
[sudo] password for sysadmin:                                                   
Reading package lists... Done                                                   
Building dependency tree                                                        
Reading state information... Done                                               
Suggested packages:                                                             
  filters                                                                       
The following NEW packages will be installed:                                   
  cowsay                                                                        
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.                  
Need to get 0 B/18.5 kB of archives.                                            
After this operation, 90.1 kB of additional disk space will be used.            
                                                                                
Selecting previously unselected package cowsay.                                 
(Reading database ... 24313 files and directories currently installed.)         
Preparing to unpack .../cowsay_3.03+dfsg1-6_all.deb ...                         
Unpacking cowsay (3.03+dfsg1-6) ...                                             
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...                           
Setting up cowsay (3.03+dfsg1-6) ...

A tener en cuenta

¡El comando cowsay es una vaca parlante configurable! Use una palabra o frase como argumento:

sysadmin@localhost:~$ cowsay 'NDG Linux Unhatched'                              
 _____________________                                                          
< NDG Linux Unhatched >                                                         
 ---------------------                                                          
        \   ^__^                                                                
         \  (oo)\_______                                                        
            (__)\       )\/\                                                    
                ||----w |                                                       
                ||     ||

Recomendamos incluir el argumento entre comillas simples para evitar que el shell interprete caracteres especiales.

Actualización de paquetes

El comando apt-get install también puede actualizar un paquete, si ese paquete ya está instalado y existe una versión más reciente disponible. Si el paquete aún no está en el sistema, se instalará; si está en el sistema, se actualizará.

La actualización de todos los paquetes del sistema debe realizarse en dos pasos. Primero, actualice la caché de todos los paquetes disponibles utilizando apt-get update. En segundo lugar, ejecute el comando apt-get upgrade para actualizar todos los paquetes y sus dependencias.

apt-get update
apt-get upgrade
sysadmin@localhost:~$ sudo apt-get update                                       
[sudo] password for sysadmin:                                                   
Ign file: amd64/ InRelease                                                      
Ign file: amd64/ Release.gpg                                                    
Ign file: amd64/ Release                                                        
Reading package lists... Done                                                   
sysadmin@localhost:~$ sudo apt-get upgrade                                      
Reading package lists... Done                                                   
Building dependency tree                                                        
Reading state information... Done                                               
Calculating upgrade... Done                                                     
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Eliminación de paquetes

El comando apt-get puede eliminar o purgar un paquete. La diferencia entre los dos es que purgar suprime todos los archivos del paquete, mientras que eliminar suprime todos los archivos del paquete, excepto los archivos de configuración.

Un administrador puede ejecutar el comando apt-get remove para eliminar un paquete o el comando apt-get purge para purgar un paquete completamente del sistema.

apt-get remove [package]
apt-get purge [package]

Por ejemplo, para purgar cowsay por completo, ejecute el siguiente comando. Escriba Y cuando se le solicite:

sysadmin@localhost:~$ sudo apt-get purge cowsay                                 
Reading package lists... Done                                                   
Building dependency tree                                                        
Reading state information... Done                                               
The following packages will be REMOVED:                                         
  cowsay*                                                                       
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.                  
After this operation, 90.1 kB disk space will be freed.                         
Do you want to continue? [Y/n] y                                                
(Reading database ... 24377 files and directories currently installed.)         
Removing cowsay (3.03+dfsg1-6) ...                                              
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
 
 

Actualización de contraseñas de usuario

Section header image

Actualización de contraseñas de usuario 19

El comando passwd se utiliza para actualizar la contraseña de un usuario. Los usuarios solo pueden cambiar sus propias contraseñas, mientras que el usuario root puede actualizar la contraseña para cualquier usuario.

passwd [OPCIONES] [USUARIO]

Por ejemplo, ya que hemos iniciado sesión como usuario sysadmin, podemos cambiar la contraseña de esa cuenta. Ejecute el comando passwd. Se le pedirá que introduzca la contraseña actual una vez y la contraseña nueva dos veces. Por razones de seguridad, no se muestra ningún resultado mientras se está escribiendo la contraseña. La salida se muestra de la siguiente manera:

sysadmin@localhost:~$ passwd                                                    
Changing password for sysadmin.                                                 
(current) UNIX password: netlab123                                                       
Enter new UNIX password:                                                       
Retype new UNIX password:                                                       
passwd: password updated successfully

Si el usuario desea ver información sobre su contraseña, puede utilizar la opción -S:

sysadmin@localhost:~$ passwd -S sysadmin                                        
sysadmin P 12/20/2017 0 99999 7 -1

Los campos de salida se explican a continuación:

Campo Ejemplo Significado
Nombre del usuario sysadmin El nombre del usuario.
Estado de la contraseña P

P indica que es una contraseña utilizable.

L indica que la contraseña está bloqueada.

NP indica que no hay contraseña.

Fecha de actualización 03/01/2015 La fecha en la que la contraseña fue actualizada por última vez.
Mínimo 0 El número mínimo de días que deben pasar antes de que el usuario pueda cambiar la contraseña actual.
Máximo 99999 El máximo número de días que restan hasta que expire la contraseña.
Aviso 7 El número de días precedentes a la expiración de la contraseña para que el usuario reciba el aviso.
Inactividad -1 El número de días después de la expiración de la contraseña que la cuenta del usuario se mantendrá activa.

Siga leyendo

Cambie a la cuenta root mediante el siguiente comando:

sysadmin@localhost:~$ su root                                                   
Password:                                                                       
root@localhost:~#

Use netlab123 como contraseña.

El usuario root puede cambiar la contraseña de cualquier usuario. Si el usuario root desea cambiar la contraseña de sysadmin, ejecutará el siguiente comando:

root@localhost:~# passwd sysadmin                                               
Enter new UNIX password:                                                        
Retype new UNIX password:                                                       
passwd: password updated successfully

Siga leyendo

Salga de la cuenta root mediante el comando exit:

root@localhost:~# exit                                                        
exit
 
 

Copiar archivos

Section header image

Copiar archivos 11.1

El comando dd se utiliza para copiar archivos o particiones enteras al nivel de bits.

dd [OPCIONES] OPERANDO

Este comando tiene varias características útiles, entre las que se incluyen:

  • Se puede usar para clonar o eliminar (wipe) discos o particiones enteras.
  • Se puede usar para copiar datos no procesados (raw) a dispositivos extraíbles como dispositivos USB o CD ROMS.
  • Se puede usar para realizar una copia de reserva (backup) y restituir el MBR (Master Boot Record).
  • Se puede usar para crear un archivo de un tamaño específico lleno de ceros binarios, el cual puede utilizarse como archivo de intercambio (swap file) (memoria virtual).

Examinemos el siguiente ejemplo. El comando dd creará un archivo denominado /tmp/swapex con 50 bloques de ceros de un megabyte de tamaño:

Siga leyendo

Utilice el siguiente comando cd para volver al directorio principal:

sysadmin@localhost:~/Documents$ cd ~
sysadmin@localhost:~$ dd if=/dev/zero of=/tmp/swapex bs=1M count=50 
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.825745 s, 635 MB/s

El comando dd utiliza argumentos especiales para especificar cómo funcionará. A continuación se muestran algunos de los argumentos más utilizados:

Argumento Descripción
if

Archivo de entrada (Input File): El archivo de entrada que se va a leer.

dd if=/dev/zero of=/tmp/swapex bs=1M count=50

El ejemplo lee el archivo /dev/zero, un archivo especial que contiene un número ilimitado de ceros.

of

Archivo de salida (Output File): El archivo de salida que se va a escribir.

dd if=/dev/zero of=/tmp/swapex bs=1M count=50
bs

Tamaño de bloque (Block Size): El tamaño de bloque que se va a utilizar. De forma predeterminada, el valor se presenta en bytes. Utilice los sufijos siguientes para especificar otras unidades: KMG y T para kilobytes, megabytes, gigabytes y terabytes respectivamente.

dd if=/dev/zero of=/tmp/swapex bs=1M count=50

En el ejemplo se utiliza un tamaño de bloque de un megabyte.

count

Recuento: El número de bloques que se van a leer desde el archivo de entrada.

dd if=/dev/zero of=/tmp/swapex bs=1M count=50

En este ejemplo se leen 50 bloques.

A tener en cuenta

No es necesario especificar el tamaño de bloque ni el recuento al copiar dispositivos enteros. Por ejemplo, para clonar de un disco duro (/dev/sda) a otro (/dev/sdb) ejecute el siguiente comando:

dd if=/dev/sda of=/dev/sdb
 
 

Mover archivos

Section header image

Mover archivos 12

El comando mv se utiliza para mover un archivo de una ubicación en el sistema de archivos a otra.

mv ORIGEN DESTINO

El comando mv requiere dos argumentos como mínimo. El primer argumento es la fuente u origen, la ruta al archivo que va a ser movido. El segundo argumento es el destino, la ruta al lugar donde se moverá el archivo. Generalmente, los archivos que se van a mover se denominan origen, y el lugar donde se van a colocar se denomina destino.

Siga leyendo

Utilice el siguiente comando para cambiar al directorio Documents:

sysadmin@localhost:~$ cd ~/Documents

Para mover el archivo people.csv al directorio Work, utilice el nombre del archivo como origen y el nombre del directorio como destino:

sysadmin@localhost:~/Documents$ mv people.csv Work

Si un archivo se mueve de un directorio a otro sin especificar un nuevo nombre para el archivo, éste conservará su nombre original. El movimiento anterior se puede confirmar mediante el comando ls en el directorio Work:

sysadmin@localhost:~/Documents$ ls Work                                         
people.csv

El comando mv puede utilizarse para mover varios archivos, siempre y cuando el argumento final proporcionado al comando sea el destino. Por ejemplo, para mover tres archivos al directorio School:

sysadmin@localhost:~/Documents$ mv numbers.txt letters.txt alpha.txt School        
sysadmin@localhost:~/Documents$ ls School                                       
Art  Engineering  Math  alpha.txt  letters.txt  numbers.txt 

Mover un archivo dentro del mismo directorio es una forma eficaz de cambiarlo de nombre. Por ejemplo, en el ejemplo siguiente, el archivo animals.txt recibe un nuevo nombre zoo.txt:

mv animals.txt zoo.txt
sysadmin@localhost:~/Documents$ ls                                              
School           alpha-second.txt  hello.sh      newhome.txt  red.txt           
Work             alpha-third.txt   hidden.txt    os.csv                         
adjectives.txt   animals.txt       linux.txt     passwd                         
alpha-first.txt  food.txt          longfile.txt  profile.txt 
sysadmin@localhost:~/Documents$ mv animals.txt zoo.txt                          
sysadmin@localhost:~/Documents$ ls                                              
School           alpha-second.txt  hidden.txt    os.csv       zoo.txt           
Work             alpha-third.txt   linux.txt     passwd                         
adjectives.txt   food.txt          longfile.txt  profile.txt                    
alpha-first.txt  hello.sh          newhome.txt   red.txt   

A tener en cuenta

Los permisos pueden afectar comandos de administración de archivos, incluyendo el comando mv. Mover un archivo requiere tener permisos de escritura y ejecución tanto en los directorios de origen como de destino.

Penguins in Space! Nasa Uses Linux. International Space Station runs on Linux. Curiosity the Mars Rover. We migrated key functions from Windows to Linux because we needed an operating system that was stable and reliable.

«¡Pingüinos en el espacio! NASA utiliza Linux. La Estación Espacial Internacional funciona con Linux. “Migramos funciones esenciales de Windows a Linux porque necesitábamos un sistema operativo más estable y fiable.” Keith Chuvala, manager de Operaciones Informáticas Espaciales de NASA. Curiosity, el Rover en Marte.»

 
 

Eliminar archivos

Section header image

Eliminar archivos 13

El comando rm (remove) se utiliza para eliminar archivos y directorios. Es importante tener en cuenta que los archivos y directorios eliminados no aparecen en una “papelera” como ocurre con los sistemas operativos orientados a escritorio. Cuando un archivo se elimina con el comando rm, generalmente siempre desaparece de manera permanente.

rm [OPCIONES] ARCHIVO

Siga leyendo

Utilice el siguiente comando para cambiar al directorio Documents:

sysadmin@localhost:~$ cd ~/Documents

Sin ninguna opción, el comando rm normalmente se utiliza para eliminar archivos ordinarios:

sysadmin@localhost:~/Documents$ rm linux.txt
sysadmin@localhost:~/Documents$ ls linux.txt
ls: cannot access linux.txt: No such file or directory

El comando rm ignorará los directorios que se le pida eliminar. Para eliminar un directorio, utilice una opción recursiva, por ejemplo, las opciones -r o -R. Tenga cuidado ya que estas opciones son “recursivas”, y eliminarán todos los archivos y todos los subdirectorio:

sysadmin@localhost:~/Documents$ rm Work
rm: cannot remove 'Work': Is a directory
sysadmin@localhost:~/Documents$ rm -r Work
sysadmin@localhost:~/Documents$ ls Work                                         
ls: cannot access Work: No such file or directory

Advertencia

El comando rm elimina los archivos de forma permanente. Para repetir los ejemplos anteriores, restablezca el terminal usando el botón de reinicio.

A tener el cuenta

Los permisos pueden afectar a los comandos de administración de archivos, como el comando rm.

Para eliminar un archivo dentro de un directorio, el usuario debe tener permiso de escritura y ejecución en ese directorio. Normalmente, los usuarios ordinarios solo tienen este tipo de permiso en su directorio principal y subdirectorios correspondientes.