Buenos hábitos para el uso de la línea de comando en Linux

Introducción

Cuando se usa un sistema con frecuencia, tiende a caer en patrones de uso establecidos. A veces, no comienzas el hábito de hacer las cosas de la mejor manera posible. A veces, incluso se recogen las malas prácticas que conducen a desorden y torpeza. Una de las mejores maneras de corregir estas insuficiencias es recoger conscientemente buenos hábitos que los contrarrestan. Este artículo sugiere 10 hábitos para los comandos de línea de comando de Linux dignos de recoger. Estos son buenos hábitos que ayudan a romper muchas de las deficiencias de uso comunes y hacerte más productivo en la línea de comandos .

Hacer árboles de directorios de una sola vez

El Listado 1 ilustra uno de los hábitos de UNIX más comunes en torno a: definir árboles de directorio de uno en uno.

Listado 1. : Ejemplo de definición de árboles de directorios de forma individual

~ $ mkdir tmp
~ $ cd tmp
~/tmp $ mkdir a
~/tmp $ cd a
~/tmp/a $ mkdir b
~/tmp/a $ cd b
~/tmp/a/b/ $ mkdir c
~/tmp/a/b/ $ cd c
~/tmp/a/b/c $

Es mucho más rápido usar la opción -p en mkdir y hacer que todos los directorios padre junto con sus hijos en un solo comando. Pero incluso los administradores que conocen esta opción siguen atrapados a través de los subdirectorios a medida que los hacen en la línea de comandos. Vale la pena su tiempo para recoger conscientemente el buen hábito:

Listado 2: Definición de árboles de directorios con un comando

~ $ mkdir -p tmp/a/b/c

Puede utilizar esta opción para crear complejos árboles de directorios complejos, que son ideales para usar dentro de las secuencias de comandos; No sólo jerarquías simples. Por ejemplo:

Listado 3: Definiendo un árbol de directorio complejo

~ $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

En el pasado, la única excusa para definir directorios individualmente era que la implementación de mkdir no admitía esta opción, pero esto ya no es cierto en la mayoría de los sistemas. IBM AIX® mkdir, GNU mkdir y otros que cumplen con la especificación Single UNIX ahora tienen esta opción.
Para los pocos sistemas que todavía carecen de la capacidad, utilice el script mkdirhier, que es un contenedor para mkdir que hace la misma función:

~ $ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

Cambiar la ruta; No mueva el archivo

Otro patrón de uso incorrecto es mover un archivo de archivo .tar a un directorio determinado porque sucede que es el directorio en el que desea extraerlo. Nunca necesita hacer esto. Puede desempaquetar cualquier archivo .tar en cualquier directorio que desee, es para lo que está la opción -C. Utilice la opción -C para desempaquetar un archivo comprimido para especificar el directorio para descomprimirlo en:

Listado #4:  Usar la opción -C para desempaquetar un archivo .tar

~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

Hacer un hábito de usar -C es preferible a mover el archivo a donde desea descomprimirlo, cambiar a ese directorio, y sólo entonces extraer su contenido, especialmente si el archivo de archivo pertenece a otro lugar.

Combine sus comandos con los operadores de control

Probablemente ya sepa que en la mayoría de los shells, puede combinar comandos en una sola línea de comandos colocando un punto y coma (;) entre ellos. El punto y coma es un operador de control de shell y, aunque es útil para encadenar varios comandos discretos en una sola línea de comandos, no funciona para todo. Por ejemplo, suponga que utilice un punto y coma para combinar dos comandos en los que la ejecución correcta del segundo comando dependa totalmente de la finalización satisfactoria del primero. Si el primer comando no sale como se esperaba, el segundo comando sigue ejecutándose y falla.

En su lugar, utilice operadores de control más apropiados (algunos se describen en este artículo). Mientras su shell los apoye, valen el conseguir del hábito de usarlos.

Ejecutar un comando sólo si otro comando devuelve un estado de salida cero
Utilice el operador de control && para combinar dos comandos para que el segundo se ejecute sólo si el primer comando devuelve un estado de salida cero. En otras palabras, si el primer comando se ejecuta correctamente, se ejecuta el segundo comando. Si falla el primer comando, el segundo comando no se ejecuta en absoluto. Por ejemplo:

Listado #5: Combinar comandos con operadores de control

~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

En este ejemplo, el contenido del archivo se extrae en el directorio ~ /tmp/a/b/c a menos que ese directorio no exista. Si el directorio no existe, el comando tar no se ejecuta, por lo que no se extrae nada.

Ejecutar un comando sólo si otro comando devuelve un estado de salida distinto de cero

Del mismo modo, el || El operador de control separa dos comandos y ejecuta el segundo comando sólo si el primer comando devuelve un estado de salida distinto de cero. En otras palabras, si el primer comando tiene éxito, el segundo comando no se ejecuta. Si falla el primer comando, ejecuta el segundo comando. Este operador se utiliza a menudo cuando se prueba para saber si un directorio dado existe y, si no, crea uno:

Listado #6 : Combinar comandos con operadores de control

~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

También puede combinar los controladores descritos en esta sección. Cada uno funciona en el último comando ejecutado:

Listado #7: Combinando operadores de control

~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar

Citar variables con precaución

Tenga siempre cuidado con la expansión del shell y los nombres de variables. Generalmente es una buena idea incluir llamadas variables entre comillas dobles, a menos que tenga una buena razón para no hacerlo. Del mismo modo, si está siguiendo directamente un nombre de variable con texto alfanumérico, asegúrese de incluir también el nombre de la variable entre llaves ({}) para distinguirlo del texto que lo rodea. De lo contrario, el shell interpreta el texto final como parte de su nombre de variable, y muy probablemente, devuelve un valor nulo. El Listado 8 proporciona ejemplos de varias citas y no cotizaciones de variables y sus efectos.

Listado#8: Citando (y no citando) una variable

~ $ ls tmp/
a b
~ $ VAR="tmp/*"
~ $ echo $VAR
tmp/a tmp/b
~ $ echo "$VAR"
tmp/*
~ $ echo $VARa
~ $ echo "$VARa"
~ $ echo "${VAR}a"
tmp/*a
~ $ echo ${VAR}a
tmp/a
~ $

Utilizar secuencias de escape para administrar entradas largas

Probablemente haya visto ejemplos de código en los que una barra invertida () continúa con una línea larga hasta la línea siguiente y usted sabe que la mayoría de los shell tratan lo que escribe sobre líneas sucesivas unidas por una barra invertida como una línea larga. Sin embargo, es posible que no aproveche esta función en la línea de comandos tan a menudo como sea posible.

La barra invertida es especialmente útil si su terminal no maneja multilínea que envuelve correctamente o cuando su línea de comando es más pequeña . La barra invertida también es útil para dar sentido a las líneas de entrada largas mientras las escribe, como en el ejemplo siguiente:

Listado #9: Usar backslash para entradas largas de comandos

~ $ cd tmp/a/b/c || \
> mkdir -p tmp/a/b/c && \
> tar xvf -C tmp/a/b/c ~/archive.tar

Alternativamente, la siguiente configuración también funciona:

Listado #10: Alternativa al uso d backslash para entradas largas de comandos

~ $ cd tmp/a/b/c \
> || \
> mkdir -p tmp/a/b/c \
> && \
> tar xvf -C tmp/a/b/c ~/archive.tar

Sin embargo, si se divide una línea de entrada en varias líneas, el shell siempre la trata como una línea continua, ya que siempre borra todas las barras invertidas y espacios adicionales.

Nota: En la mayoría de los shells, al presionar la tecla de flecha hacia arriba, la entrada de línea múltiple completa se vuelve a dibujar en una sola línea de entrada larga.

Deja un comentario