El material, cuya traducción publicamos hoy, está destinado a aquellos que desean dominar la línea de comandos de Linux. La capacidad de usar esta herramienta de manera efectiva ahorra mucho tiempo. En particular, se tratará del shell Bash y 21 comandos útiles. También hablaremos sobre cómo usar banderas de comando y alias Bash para acelerar la entrada de instrucciones largas.

→
Lea también en nuestro blog una serie de publicaciones sobre scripts de bashTérminos
A medida que aprende a usar la línea de comandos de Linux, puede encontrar muchos conceptos que serán útiles para navegar. Algunos de ellos, como "Linux" y "Unix", o "shell de comandos" y "terminal", a veces se confunden. Hablemos de estos y otros términos importantes.
Unix es un popular sistema operativo desarrollado por Bell Labs en la década de 1970. Su código era privado.
Linux es el sistema operativo tipo Unix más popular. Se usa hoy en una variedad de dispositivos, incluidas las computadoras.
Un terminal, o emulador de terminal, es un programa que proporciona acceso al sistema operativo. Puede abrir varias ventanas de terminal al mismo tiempo.
Un shell es un programa que le permite enviar comandos escritos en un lenguaje especial al sistema operativo.
Bash significa Bourne Again Shell. Este es el lenguaje shell más común utilizado para interactuar con el sistema operativo. Además, macOS utiliza el shell Bash predeterminado.
La interfaz de línea de comandos (CLI) es una forma de interacción entre una persona y una computadora, cuando se usa la cual el usuario ingresa comandos desde el teclado, y la computadora, al ejecutar estos comandos, muestra mensajes en forma de texto para el usuario. Básicamente, la CLI se utiliza para obtener información actualizada sobre ciertas entidades, por ejemplo, archivos, y para trabajar con archivos. La interfaz de línea de comandos debe distinguirse de la Interfaz gráfica de usuario (GUI), que se usa principalmente con el mouse. La interfaz de línea de comando a menudo se conoce simplemente como la línea de comando.
Un script es un pequeño programa que contiene una secuencia de comandos de shell. Los scripts se escriben en archivos, puede usarlos repetidamente. Al escribir scripts, puede usar variables, construcciones condicionales, bucles, funciones y otras características.
Ahora que hemos considerado términos importantes, quiero señalar que aquí usaré los términos "Bash", "shell" y "línea de comando" como intercambiables, así como los conceptos de "directorio" y "carpeta".
Los
flujos estándar que usaremos aquí son entrada estándar (entrada estándar,
stdin
), salida estándar (salida estándar,
stdout
) y salida de error estándar (error estándar,
stderr
).
Si en los ejemplos de los comandos que se darán a continuación, se encuentra algo como
my_whatever
, esto significa que este fragmento debe ser reemplazado por algo suyo. Por ejemplo, el nombre del archivo.
Ahora, antes de continuar con el análisis de los equipos a los que se dedica este material, echemos un vistazo a su lista y sus breves descripciones.
Equipo 21 Bash
▍ Obtención de información
man
: muestra el manual del usuario (ayuda) para el comando.pwd
: muestra información sobre el directorio de trabajo.ls
: muestra el contenido del directorio.ps
: le permite ver información sobre los procesos en ejecución.
▍ Manipulación del sistema de archivos
cd
: cambia el directorio de trabajo.touch
: crea un archivo.mkdir
: crea un directorio.cp
: copiar archivo.mv
: mover o eliminar un archivo.ln
: creación de enlaces.
▍ redirección de E / S y tuberías
<
: redireccionamiento stdin
.>
: redirección stdout
.|
: redirige la salida de un comando a la entrada de otro comando usando la canalización.
▍Lectura de archivos
head
: lee el comienzo del archivo.tail
: leer el final del archivo.cat
: leer un archivo y mostrar su contenido en la pantalla o concatenar archivos.
▍ Eliminar archivos, detener procesos
rm
: borra el archivo.kill
: detiene el proceso.
▍Buscar
grep
: busca información.ag
: equipo de búsqueda avanzada.
▍Archivo
tar
: crea y trabaja con archivos.
Hablemos de estos comandos con más detalle.
Detalles del equipo
Para comenzar, tratemos con equipos cuyos resultados se muestran en forma de
stdout
. Por lo general, estos resultados aparecen en una ventana de terminal.
▍ Obtención de información
man command_name
: la salida del manual de comandos, es decir, información de referencia.
pwd
: muestra la ruta al directorio de trabajo actual. Al trabajar con la línea de comando, el usuario a menudo necesita averiguar exactamente dónde se encuentra en el sistema.
ls
: muestra el contenido del directorio. Este comando también se usa con bastante frecuencia.
ls -a
: genera archivos ocultos. La bandera
-a
del
ls
aplica aquí. El uso de banderas ayuda a personalizar el comportamiento del equipo.
ls -l
: muestra información detallada del archivo.
Tenga en cuenta que las banderas se pueden combinar. Por ejemplo, así:
ls -al
.
ps
: ver los procesos en ejecución.
ps -e
: muestra información sobre todos los procesos en ejecución, no solo los relacionados con el shell de usuario actual. Este comando se usa a menudo en este formulario.
▍ Manipulación del sistema de archivos
cd my_directory
: cambie el directorio de trabajo a
my_directory
. Para ir un nivel más alto en el árbol de directorios, use la ruta relativa
../
como
my_directory
.
Comando cdtouch my_file
: cree
my_file
en la ruta especificada.
mkdir my_directory
:
my_directory
carpeta
my_directory
en la ruta especificada.
mv my_file target_directory
: mueve el archivo
my_file
a la carpeta
my_file
. Al especificar el directorio de destino, debe usar la ruta absoluta al mismo (y no una construcción como
../
).
El comando
mv
también se puede usar para cambiar el nombre de archivos o carpetas. Por ejemplo, podría verse así:
mv my_old_file_name.jpg my_new_file_name.jpg
cp my_source_file target_directory
mv my_old_file_name.jpg my_new_file_name.jpg
cp my_source_file target_directory
: cree una copia de
my_source_file
y póngala en la carpeta
target_directory
.
ln -s my_source_file my_target_file
: crea un enlace simbólico
my_target_file
a
my_source_file
. Si cambia el enlace, el archivo original también cambiará.
Si el archivo
my_source_file
se elimina, entonces
my_target_file
permanecerá. La bandera
-s
del comando
ln
permite crear enlaces para directorios.
Ahora hablemos sobre la redirección de E / S y las tuberías.
▍ redirección de E / S y tuberías
my_command < my_file
: reemplaza el descriptor del archivo de entrada estándar (
stdin
) con el archivo
my_file
. Esto puede ser útil si el comando espera ingresar algunos datos del teclado, y estos datos se almacenan en un archivo de antemano.
my_command > my_file
: redirige los resultados del comando, es decir, lo que generalmente entra en
stdout
y se muestra en la pantalla, al archivo
my_file
. Si el archivo
my_file
no existe, se crea. Si el archivo existe, se sobrescribe.
Por ejemplo, después de ejecutar el
ls > my_folder_contents.txt
, se
ls > my_folder_contents.txt
un archivo de texto que contiene una lista de lo que está en el directorio de trabajo actual.
Si en lugar del símbolo
>
usa la construcción
>>
, entonces, siempre que haya un archivo al que se redirija la salida del comando, este archivo no se sobrescribirá. Los datos se agregarán al final de este archivo.
Ahora eche un vistazo a los datos de canalización.
Lo que sale de un comando se alimenta a la entrada de otro comando. Es como conectar una tubería a otrafirst_command | second_command
first_command | second_command
: símbolo de tubería,
|
, se utiliza para enviar los resultados de un equipo a otro equipo. El hecho de que el comando ubicado en el lado izquierdo de la construcción descrita se envía a
stdout
cae en el
stdin
comando, que se encuentra a la derecha del símbolo de la tubería.
En Linux, los datos de canalización se pueden organizar utilizando casi cualquier comando correctamente compuesto. A menudo se dice que todo en Linux es una tubería.
Usando el símbolo del transportador, puede encadenar varios comandos juntos. Se ve así:
first_command | second_command | third_command
Se puede comparar un transportador de varios equipos con una tuberíaTenga en cuenta que cuando un comando está a la izquierda de
|
imprime algo en
stdout
, lo que imprime inmediatamente está disponible como un
stdin
segundo comando. Es decir, resulta que, usando la canalización, estamos lidiando con la ejecución paralela de comandos. A veces esto puede conducir a resultados inesperados. Los detalles sobre esto se pueden encontrar
aquí .
Ahora hablemos de leer datos de archivos y mostrarlos en la pantalla.
▍Lectura de archivos
head my_file
: lee líneas desde el comienzo del archivo y las muestra. Puede leer no solo el contenido de los archivos, sino también lo que los comandos envían a
stdin
, utilizando este comando como un elemento de la tubería.
tail my_file
: lee líneas desde el final del archivo. Este comando también se puede usar en la tubería.
La cabeza está adelante y la cola atrásSi está trabajando con datos utilizando la biblioteca de pandas, entonces los comandos de
head
y
tail
le serán familiares. Si este no es el caso, eche un vistazo a la figura anterior y los recordará fácilmente.
Veamos otras formas de leer archivos y hablemos sobre el
cat
.
El
cat
muestra el contenido del archivo en la pantalla o concatena varios archivos. Depende de cuántos archivos se pasan a este comando cuando se llama.
Equipo de gatocat my_one_file.txt
: cuando un comando se transfiere a este comando, lo muestra en
stdout
.
Si le das dos o más archivos, entonces ella se comporta de manera diferente.
cat my_file1.txt my_file2.txt
: después de haber recibido varios archivos como entrada, este comando concatena su contenido y muestra lo que sucedió en
stdout
.
Si el resultado de concatenar archivos necesita guardarse como un archivo nuevo, puede usar el operador
>
:
cat my_file1.txt my_file2.txt > my_new_file.txt
Ahora hablemos sobre cómo eliminar archivos y detener procesos.
▍ Eliminar archivos, detener procesos
rm my_file
: elimina el archivo
my_file
.
rm -r my_folder
: elimina la carpeta
my_folder
y todos los archivos y carpetas que contiene. El indicador
-r
indica que el comando funcionará en modo recursivo.
Para evitar que el sistema solicite confirmación durante cada operación para eliminar un archivo o carpeta, use el indicador
-f
.
kill 012345
: detiene el proceso de ejecución especificado, dándole tiempo para apagarse correctamente.
kill -9 012345
: finaliza por la fuerza el proceso de ejecución especificado. Una bandera de la forma
-s SIGKILL
significa lo mismo que una bandera
-9
.
▍Buscar
Puede usar diferentes comandos para buscar datos. En particular,
grep
,
ag
y
ack
. Comenzamos nuestra introducción a estos comandos con
grep
. Este es un equipo confiable y probado en el tiempo, que, sin embargo, es más lento que otros y no les gusta, conveniente para usar.
Comando grepgrep my_regex my_file
: busca
my_regex
en
my_file
. Cuando se encuentran coincidencias, se devuelve la cadena completa para cada una de ellas. Por defecto,
my_regex
trata como una expresión regular.
grep -i my_regex my_file
: la búsqueda no distingue entre mayúsculas y minúsculas.
grep -v my_regex my_file
: devuelve todas las líneas que no contienen
my_regex
. El indicador
-v
significa inversión; se parece al operador
NOT
, que está disponible en muchos lenguajes de programación.
grep -c my_regex my_file
: devuelve información sobre el número de coincidencias con el patrón de búsqueda encontrado en el archivo.
grep -R my_regex my_folder
: realiza una búsqueda recursiva en todos los archivos ubicados en una carpeta determinada y en las carpetas ubicadas en ella.
Ahora hablemos del equipo
ag
. Ella apareció más tarde
grep
, es más rápida, es más conveniente trabajar con ella.
Equipo agag my_regex my_file
: devuelve información sobre los números de línea y las líneas mismas, en las que se encuentran
my_regex
con
my_regex
.
ag -i my_regex my_file
: la búsqueda no distingue entre mayúsculas y minúsculas.
El comando
ag
procesa automáticamente el archivo
.gitignore
y excluye de la salida lo que se encuentra en las carpetas o archivos enumerados en este archivo. Es muy conveniente.
ag my_regex my_file -- skip-vcs-ignores
: el contenido de los archivos de los sistemas automáticos de control de versiones (como
.gitignore
) no se tiene en cuenta durante la búsqueda.
Además, para indicarle al comando
ag
qué rutas de archivo excluir de la búsqueda, puede crear un archivo
.agignore
.
Al comienzo de esta sección, mencionamos el comando
ack
. Los comandos
ack
y
ag
son muy similares; podemos decir que son 99% intercambiables. Sin embargo, el comando
ag
es más rápido, así que lo describí específicamente.
Ahora hablemos de trabajar con archivos.
▍Archivo
tar my_source_directory
: combina los archivos de la carpeta
my_source_directory
en un solo archivo tarball. Es conveniente usar dichos archivos para transferir grandes conjuntos de archivos a alguien.
Comando TarLos archivos tarball creados por este comando son archivos con la extensión
.tar
(Tape ARchive). El hecho de que la palabra "cinta" esté oculta en el nombre del comando y en la extensión de los nombres de los archivos creados por ella indica cuánto tiempo ha existido este comando.
tar -cf my_file.tar my_source_directory
: crea un archivo tarball llamado
my_file.tar
con el contenido de la carpeta
my_source_directory
. El indicador
-c
significa "crear" y el indicador
-f
significa "archivo".
Para extraer archivos que están en un archivo
.tar
, use el comando
tar
con las banderas
-x
("extracto", extracción) y
-f
("archivo", archivo).
tar -xf my_file.tar
:
tar -xf my_file.tar
archivos de
my_file.tar
en el directorio de trabajo actual.
Ahora hablemos sobre cómo comprimir y descomprimir archivos
.tar
.
tar -cfz my_file.tar.gz my_source_directory
: aquí, usar el indicador
-z
(algoritmo de compresión "zip") indica que
gzip
(GNU zip) debe usarse para comprimir archivos. La compresión de archivos ahorra espacio en disco al almacenar dichos archivos. Si los archivos están planificados, por ejemplo, para transferirlos a otros usuarios, esto contribuye a una descarga más rápida de dichos archivos.
Puede descomprimir el archivo
.tar.gz
agregando el indicador
-z
al comando para extraer el contenido de los archivos
.tar
, que examinamos anteriormente. Se ve así:
tar -xfz my_file.tar.gz
Cabe señalar que el comando
tar
tiene muchos más indicadores útiles.
Alias Bash
Los alias Bash (también llamados alias o abreviaturas) están diseñados para crear nombres abreviados de comandos o sus secuencias, cuyo uso en lugar de los comandos ordinarios acelera el trabajo. Si, por
python setup.py sdist bdist_wheel
, tiene un alias
bu
, detrás del cual
python setup.py sdist bdist_wheel
, para llamar a este comando, simplemente use este alias.
Para crear dicho alias, simplemente agregue el siguiente comando al archivo
~/.bash_profile
:
alias bu="python setup.py sdist bdist_wheel"
Si su sistema no tiene un archivo
~/.bash_profile
, puede crearlo usted mismo utilizando el comando
touch
. Después de crear un alias, reinicie el terminal, después de lo cual puede usar este alias. En este caso, la entrada de dos caracteres reemplaza la entrada de más de tres docenas de caracteres del comando, que está diseñado para
construir paquetes Python.
En
~/.bash_profile
puede agregar alias para cualquier comando comúnmente utilizado.
▍ Resultados
En este artículo, analizamos 21 equipos populares de Bash y hablamos sobre la creación de alias para los equipos. Si está interesado en este tema,
aquí está la serie de publicaciones Bash.
Aquí puede encontrar la versión en pdf de estas publicaciones. Además, si desea aprender Bash, recuerde que aquí, como con el estudio de cualquier otro sistema de software, la práctica es importante.
Estimados lectores! ¿Qué comandos que son útiles para que los principiantes conozcan agregarían a los discutidos en este artículo?
→
Lea también en nuestro blog una serie de publicaciones sobre scripts de bash