[marcador] Bash para principiantes: 21 comandos útiles

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 bash

Té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 cd

touch 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 otra

first_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ía

Tenga 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ás

Si 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 gato

cat 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 grep

grep 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 ag

ag 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 Tar

Los 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

Source: https://habr.com/ru/post/445270/


All Articles