El material que publicamos hoy está destinado a quienes desean dominar la línea de comandos de Linux. Saber utilizar eficazmente esta herramienta permite ahorrar mucho tiempo. En particular, aquí se hablará de la shell Bash y de 21 comandos útiles. También discutiremos cómo utilizar las banderas de los comandos y los alias de Bash, que permiten agilizar la introducción de instrucciones largas.
→
Términos
Al dominar el trabajo en la línea de comandos de Linux, es posible que te encuentres con numerosos conceptos que será útil conocer. Algunos de ellos, como "Linux" y "Unix", o "shell" y "terminal", a veces se confunden. Hablaremos sobre estos y otros términos importantes.
— es un sistema operativo popular, que fue desarrollado por Bell Labs en los años 70. Su código era cerrado.
— es el sistema operativo tipo Unix más popular. Hoy en día, se utiliza en numerosos dispositivos, incluyendo computadoras.
(terminal), o emulador de terminal, es un programa que brinda acceso al sistema operativo. Se pueden abrir varias ventanas de terminal al mismo tiempo.
(shell) es un programa que permite enviar comandos al sistema operativo escritos en un lenguaje especial.
se desglosa como Bourne Again SHell. Este es el lenguaje de shell más utilizado para interactuar con el sistema operativo. Además, la shell Bash se utiliza por defecto en macOS.
(Command Line Interface, CLI) es un método de interacción entre el ser humano y la computadora, en el cual el usuario introduce comandos mediante el teclado, y la computadora, al ejecutar estos comandos, muestra mensajes al usuario en formato de texto. Principalmente, se usa CLI para obtener información actualizada sobre ciertas entidades, como archivos, y para trabajar con ellos. La interfaz de línea de comandos se debe diferenciar de la interfaz gráfica de usuario (Graphical User Interface, GUI), donde se utiliza principalmente el ratón. La interfaz de línea de comandos a menudo se llama simplemente línea de comandos.
(script) es un pequeño programa que contiene una secuencia de comandos de la shell. Los scripts se graban en archivos y se pueden reutilizar. Al escribir scripts, se pueden utilizar variables, estructuras condicionales, bucles, funciones y otras posibilidades.
Ahora que hemos revisado los términos importantes, quiero señalar que aquí utilizaré los términos «Bash», «shell» y «línea de comandos» de manera intercambiable, así como los conceptos de «directorio» (directory) y «carpeta» (folder).
Estándar , con los que trabajaremos aquí, son la entrada estándar (standard input, stdin), la salida estándar (standard output, stdout) y la salida de errores estándar (standard error, stderr).
Si en los ejemplos de comandos que se presenten a continuación encuentras algo como my_whatever esto significa que este fragmento debe ser reemplazado por algo tuyo. Por ejemplo, el nombre del archivo.
Ahora, antes de proceder al análisis de los comandos a los que se dedica este material, veamos su lista y una breve descripción.
21 comandos de Bash
▍Obtener información
man: muestra el manual del usuario (referencia) del comando.pwd: muestra información sobre el directorio actual.Muestra el contenido del directorio. Si no se proporciona una ruta, se muestra el contenido del directorio actual.: muestra el contenido de un directorio.ps: permite visualizar información sobre los procesos en ejecución.
▍Manipulaciones con el sistema de archivos
cd: cambiar el directorio de trabajo.touch: crear un archivo.mkdir: crear un directorio.cp: copiar un archivo.mv: mover o eliminar un archivo.ln: crear un enlace.
▍Redirección de entrada-salida y tuberías
<: redirecciónstdin.>: redirecciónstdout.|: redirección utilizando la tubería de salida de un comando como entrada de otro comando.
▍Leer archivos
head: leer el principio de un archivo.tail: leer el final de un archivo.cat: leer un archivo y mostrar su contenido en pantalla o concatenar archivos.
▍Eliminar archivos, detener procesos
rm: eliminar un archivo.kill: detener un proceso.
▍Buscar
grep: buscar información.ag: comando avanzado para buscar.
▍Archivado
tar: crear archivos comprimidos y trabajar con ellos.
Hablemos de estos comandos en detalle.
Detalles sobre los comandos
Para empezar, analicemos los comandos cuyos resultados se presentan en forma de stdout. Normalmente, estos resultados aparecen en la ventana del terminal.
▍Obtener información
man command_name: muestra el manual del comando, es decir, información de referencia.
pwd: muestra en pantalla la ruta del directorio de trabajo actual. A menudo, los usuarios necesitan saber en qué parte del sistema se encuentran al trabajar con la línea de comandos.
Muestra el contenido del directorio. Si no se proporciona una ruta, se muestra el contenido del directorio actual.: muestra el contenido del directorio. Este comando también se utiliza con bastante frecuencia.
ls -a: muestra los archivos ocultos. Aquí se aplica el indicador -a comando Muestra el contenido del directorio. Si no se proporciona una ruta, se muestra el contenido del directorio actual.. Usar indicadores ayuda a personalizar el comportamiento de los comandos.
ls -l: muestra información detallada sobre los archivos.
Tenga en cuenta que los indicadores se pueden combinar. Por ejemplo, así: ls -al.
ps: visualiza los procesos en ejecución.
ps -e: muestra información sobre todos los procesos en ejecución, no solo sobre aquellos que están relacionados con la shell del usuario actual. Este comando se utiliza a menudo de esta manera.
▍Manipulaciones con el sistema de archivos
cd my_directory: cambia el directorio de trabajo a my_directory. Para subir un nivel en el árbol de directorios, use como my_directory ruta relativa ../.
![[en marcadores] Bash para principiantes: 21 comandos útiles](/wp-content/uploads/2019/03/91815e5212c9dfec88a76bc2ab37955f.png)
El comando cd
touch my_file: crea un archivo my_file en la ruta especificada.
mkdir my_directory: crea una carpeta my_directory en la ruta especificada.
mv my_file target_directory: mueve el archivo my_file a la carpeta target_directory. Al especificar el directorio objetivo, debe utilizar la ruta absoluta hacia él (y no una construcción como ../).
El comando mv, además, se puede usar para renombrar archivos o carpetas. Por ejemplo, podría verse así:
mv my_old_file_name.jpg my_new_file_name.jpg: crea una copia del archivo
cp mi_archivo_de_origen directorio_objetivomy_source_file y la coloca en la carpeta target_directory.
ln -s my_source_file my_target_file: crea un enlace simbólico my_target_file al archivo my_source_file. Si se modifica el enlace, también se modificará el archivo original.
Si el archivo my_source_file se elimina, entonces my_target_file permanecerá. El indicador -s comando ln permite crear enlaces también para directorios.
Ahora hablemos de redirección de entrada-salida y tuberías.
▍Redirección de entrada-salida y tuberías
my_command < my_file: reemplaza el descriptor de archivo de entrada estándar (stdin) con el archivo my_file. Esto puede ser útil si el comando espera la entrada de ciertos datos desde el teclado, y esos datos ya están guardados en un archivo.
my_command > my_file: redirige los resultados del comando, es decir, lo que normalmente aparece 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 comando ls > my_folder_contents.txt , se creará un archivo de texto que contendrá una lista de lo que hay en el directorio de trabajo actual.
Si en lugar del símbolo > se utiliza la construcción >>, por lo tanto, si existe un archivo al que se redirige la salida del comando, este archivo no será sobrescrito. Los datos se agregarán al final de este archivo.
Ahora echemos un vistazo al procesamiento por lotes de datos.
![[en marcadores] Bash para principiantes: 21 comandos útiles](/wp-content/uploads/2019/03/dcc4e500b247cb13adb4d64c36c24f88.png)
Lo que una comando produce, se envía como entrada a otro comando. Es similar a conectar un tubo a otro.
primer_comando | segundo_comando: símbolo de tubería, |, se utiliza para enviar los resultados del trabajo de un comando a otro comando. Lo que el comando en el lado izquierdo de la construcción descrita envía a stdout, llega a stdin el comando que se encuentra a la derecha del símbolo de tubería.
En Linux, el procesamiento por lotes de datos se puede organizar utilizando casi cualquier comando correctamente compuesto. A menudo se dice que todo en Linux es una tubería.
Con el símbolo de la tubería, se pueden encadenar varios comandos. Se ve así:
primer_comando | segundo_comando | tercer_comando ![[en marcadores] Bash para principiantes: 21 comandos útiles](/wp-content/uploads/2019/03/1d94b3f04846ef40c072299877c55b1f.png)
Una tubería de múltiples comandos se puede comparar con una tubería.
Tenga en cuenta que cuando el comando que se encuentra a la izquierda del símbolo |, produce algo en stdout, lo que produjo se vuelve inmediatamente accesible como stdin entrada a la segunda comando. Es decir, resulta que, utilizando una tubería, estamos tratando con la ejecución paralela de comandos. A veces esto puede llevar a resultados inesperados. Puede leer más sobre esto .
Ahora hablemos sobre la lectura de datos de archivos y cómo mostrarlos en pantalla.
▍Leer archivos
cabeza my_file: lee las líneas desde el principio del archivo y las muestra en la pantalla. Se puede leer no solo el contenido de los archivos, sino también lo que los comandos producen en stdin, utilizando este comando como un elemento de la tubería.
cola my_file: lee las líneas desde el final del archivo. Este comando también se puede utilizar en la tubería.
![[en marcadores] Bash para principiantes: 21 comandos útiles](/wp-content/uploads/2019/03/0dd6e0353a1b5995d4a1228ae2550ad9.png)
La cabeza está al frente, mientras que la cola está atrás.
Si está trabajando con datos utilizando la biblioteca pandas, entonces los comandos head y tail deberían ser familiares para usted. Si no es así, eche un vistazo a la figura anterior y los memorizará fácilmente.
Consideremos otras formas de leer archivos, hablemos del comando cat.
Comando cat que ya sea muestra el contenido del archivo en pantalla o concatena varios archivos. Esto depende de cuántos archivos se le pasen a este comando al invocarlo.
![[en marcadores] Bash para principiantes: 21 comandos útiles](/wp-content/uploads/2019/03/708bea2f5d31e1623e9fd80ff5b576af.png)
El comando cat
cat my_one_file.txt: cuando a este comando se le pasa un archivo, lo muestra en stdout.
Si se pasan dos archivos o más, se comporta de manera diferente.
cat my_file1.txt my_file2.txt: al recibir varios archivos, este comando concatena su contenido y mostrará el resultado en stdout.
Si se necesita guardar el resultado de la concatenación de archivos como un nuevo archivo, se puede utilizar el operador >:
cat my_file1.txt my_file2.txt > my_new_file.txtAhora 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. La bandera -r indica que el comando se ejecutará en modo recursivo.
Para que el sistema no solicite confirmación para cada operación de eliminación de un archivo o carpeta, utilice la bandera -f.
kill 012345: detiene el proceso en ejecución especificado, dándole tiempo para completar correctamente su trabajo.
kill -9 012345: finaliza forzosamente el proceso en ejecución especificado. La bandera del tipo -s SIGKILL significa lo mismo que la bandera -9.
▍Buscar
Para buscar datos se pueden utilizar diferentes comandos. En particular — grep, ag y ack. Comencemos nuestra familiarización con estos comandos desde grep. Este es un comando confiable, probado por el tiempo, aunque es más lento que otros y no es tan conveniente.
![[en marcadores] Bash para principiantes: 21 comandos útiles](/wp-content/uploads/2019/03/bc02403dbbd0109f0dfd595eccf239c7.png)
El comando grep
grep my_regex my_file: realiza la búsqueda my_regex en my_file. Si se encuentran coincidencias, se devuelve toda la línea para cada una de ellas. Por defecto my_regex se entiende como una expresión regular.
grep -i my_regex my_file: la búsqueda se realiza sin distinción de mayúsculas y minúsculas.
grep -v my_regex my_file: devuelve todas las líneas que no contienen my_regex. La bandera -v significa inversión, recuerda al operador NOT, que se encuentra 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 buscado, encontradas en el archivo.
grep -R my_regex my_folder: realiza una búsqueda recursiva en todos los archivos dentro de la carpeta dada y en las carpetas anidadas.
Ahora hablemos sobre el comando ag. Apareció más tarde grep, es más rápido y es más fácil de usar.
![[en marcadores] Bash para principiantes: 21 comandos útiles](/wp-content/uploads/2019/03/f0eeb1d38a1e9c22a8463858753dedb5.png)
El comando ag
ag my_regex my_file: devuelve información sobre los números de línea y las propias líneas donde se encontraron coincidencias con my_regex.
ag -i my_regex my_file: la búsqueda se realiza sin distinción de mayúsculas y minúsculas.
Comando ag procesa automáticamente el archivo .gitignore y excluye de la salida lo que se encuentra en las carpetas o archivos listados en este archivo. Es muy conveniente.
ag my_regex my_file --skip-vcs-ignores: contenido de archivos de sistemas de control de versiones (como .gitignore) no se considera en la búsqueda.
Además, para indicar al equipo ag qué rutas de archivos se deben excluir de la búsqueda, se puede crear un archivo .agignore.
Al principio de esta sección mencionamos el comando ack. Los comandos ack y ag son muy similares, se podría decir que son intercambiables en un 99%. Sin embargo, el comando ag funciona más rápido, por lo tanto, describí precisamente este.
Ahora hablemos sobre el trabajo con archivos comprimidos.
▍Archivado
tar my_source_directory: combina archivos de la carpeta my_source_directory en un solo archivo tarball. Este tipo de archivos son útiles para transmitir grandes conjuntos de archivos a alguien.
![[en marcadores] Bash para principiantes: 21 comandos útiles](/wp-content/uploads/2019/03/4531ef1d4084af608fcbe91964a6710b.png)
El comando tar
Los archivos tarball creados por este comando tienen la extensión .tar (Tape ARchive). Que en el nombre del comando y en la extensión de los archivos que crea esté la palabra «tape» (cinta) 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. La bandera — el número de paquetes, después de los cuales se interpreta como «create» (crear), y la opción -f como «file» (archivo).
Para extraer archivos que están en .tar-archivo se utiliza el comando tar con las opciones -x («extract», extracción) y -f «file», archivo).
tar -xf my_file.tar: extrae archivos de my_file.tar en el directorio de trabajo actual.
Ahora hablemos sobre cómo comprimir y descomprimir .tar-archivos.
tar -cfz my_file.tar.gz my_source_directory: aquí, usando la opción -z («zip», algoritmo de compresión) se especifica que se debe usar el algoritmo gzip (GNU zip) para comprimir archivos. Comprimir archivos ayuda a ahorrar espacio en disco al almacenar esos archivos. Si los archivos se planea, por ejemplo, transferir a otros usuarios, esto contribuye a una carga más rápida de esos archivos.
Descomprimir el archivo .tar.gz se puede hacer añadiendo la opción -z al comando para extraer el contenido de .tar-archivos, que discutimos anteriormente. Se ve así:
tar -xfz my_file.tar.gz
Cabe destacar que el comando tar también tiene muchas otras opciones útiles.
Alias Bash
Los alias de Bash (también llamados aliases o abreviaturas) están destinados a crear nombres abreviados para comandos o secuencias de comandos, cuyo uso en lugar de comandos normales acelera el trabajo. Si usted, supongamos, tiene un alias bu, detrás del cual se oculta el comando python setup.py sdist bdist_wheel, entonces para invocar este comando basta con usar este alias.
Para crear un alias similar, simplemente agregue el siguiente comando al archivo ~/.bash_profile:
alias bu="python setup.py sdist bdist_wheel" Si su sistema no tiene este archivo ~/.bash_profile, puede crearlo usted mismo utilizando el comando touch. Después de crear el alias, reinicie el terminal y podrá utilizarlo. 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 paquetes de Python.
En ~/.bash_profile Puede agregar alias para cualquier comando que use con frecuencia.
▍Conclusiones
En este material hemos revisado 21 comandos populares de Bash y hablado sobre la creación de alias para ellos. Si le interesa este tema— tiene un ciclo de publicaciones dedicadas a Bash. Puede encontrar una versión en pdf de estas publicaciones. Además, si desea aprender Bash, recuerde que, al igual que al aprender cualquier otro sistema de programación, la práctica es importante.
¡Estimados lectores! ¿Qué comandos, útiles para principiantes, agregaría a los que se han discutido en este artículo?
→
Fuente: habr.com
