Buenas costumbres para la terminal

Que tal, vagabundeando por la red me topé con esto, me parecio muy interesante y me parecio buena idea compartirlo.

Os pongo a vuestra consideracón

Traducción asistida por google

Introducción

Cuando se utiliza un sistema a menudo, se tiende a caer en patrones de uso establecidas. A veces, no iniciar el hábito de hacer las cosas de la mejor manera posible. A veces, hasta recoger las malas prácticas que llevan a la confusión y torpeza. Una de las mejores formas de corregir esas deficiencias es tomar conciencia de hasta unos hábitos saludables que contrarrestarlas. Este artículo propone 10 hábitos de línea de comandos UNIX-vale la pena recoger - los buenos hábitos que le ayudan a romper muchas debilidades uso común y hacerlo más productivo en la línea de comandos en el proceso. Cada hábito se describe con más detalle después de la lista de buenos hábitos.

Adoptar buenos hábitos de 10

Diez buenos hábitos a adoptar son:

1.- Hacer árboles de directorios en un solo golpe.
2.- Cambie la ruta; no se mueve el archivo.
3.- Combine sus comandos con los operadores de control.
4.- Cotización variable con precaución.
5.-Usar secuencias de escape para la gestión de entrada a largo.
6.- Grupo de los comandos juntos en una lista.
7.- Utilice xargs fuera de encontrar.
8.- Sepa cuándo debe hacer el grep contar - y cuándo debe hacerse a un lado.
9.- Match determinados campos de la producción, no sólo las líneas.
10.- Make directory trees in a single swipe
Hacer árboles de directorios en un solo golpe

Listado 1 ilustra uno de los malos hábitos más comunes de UNIX en torno a: la definición de un directorio de los árboles a la vez.
Listado 1. Ejemplo de mal hábito # 1: Definición de los á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 de mkdir y hacer todos los directorios de los padres junto con sus hijos en un solo comando. Pero incluso los administradores que saben acerca de esta opción están todavía atrapados pasar a través de los subdirectorios en que lo hacen en la línea de comandos. Vale la pena su tiempo para elegir a conciencia el buen hábito:

Listado 2. Ejemplo de buen hábito # 1: Definición de los árboles de directorios con un solo comando

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

Puede utilizar esta opción para que toda árboles de directorios complejos, que son grandes utilizar secuencias de comandos en el interior, no sólo las jerarquías simple. Por ejemplo:

Listado 3. Otro ejemplo de buen hábito # 1: Definición de los árboles complejo directorio con un comando

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

En el pasado, la única excusa para definir los directorios de forma individual fue que su aplicación mkdir no apoya esta opción, pero esto ya no es así en muchos sistemas. IBM AIX ® mkdir, mkdir GNU, y otras que se ajusten a la Single UNIX Specification ahora tienen esta opción.

A los pocos sistemas que todavía carecen de la capacidad, utilice la secuencia de comandos mkdirhier (ver Recursos), que es un contenedor para mkdir que hace la misma función:

~ $ Mkdirhier proyecto / (lib / ext, bin, src, doc / (html, info, pdf), demo / stat / a)

Cambie la ruta; no se mueve el archivo

Otro patrón de uso malo es que trasladar un archivo tar. Archivo en un directorio determinado, ya que pasa a ser el directorio que desea extraer pulg Uno nunca tiene que hacer esto. Puede descomprimir cualquier archivo. Tar en un directorio que te gusta - eso es lo que la opción-C es para. Use la opción-C cuando se descomprimen un archivo de almacenamiento para especificar el directorio para descomprimirlo en:

Listado 4. Ejemplo de buen hábito # 2: Utilizar la opción-C para desempaquetar un archivo tar archivo.

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

Hacer un hábito de usar-C es preferible mover el archivo en donde desea se puede desempaquetar, cambiar a ese directorio, y sólo entonces la extracción de su contenido - especialmente si el archivo de almacenamiento pertenece a otra parte.
Combine sus comandos con los operadores de control

Usted probablemente ya sabe que en la mayoría de los depósitos, puede combinar comandos en una sola línea de comandos mediante la colocación de un punto y coma (;) entre ellos. El punto y coma es un operador de control de depósito, y si bien es útil para encadenar varios comandos discretos en una sola línea de comandos, no funciona para todo. Por ejemplo, supongamos que utiliza un punto y coma para combinar dos comandos en el que la correcta ejecución de la segunda orden depende por completo de la finalización con éxito de la primera. Si el primer comando no sale como esperaba, el segundo comando todavía funciona - y falla. En su lugar, un uso más adecuado de control de los operadores (algunos se describen en este artículo). Siempre y cuando su caparazón les apoya, que vale la pena entrar en el hábito de usarlas.

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

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

Listado 5. Ejemplo de buen hábito # 3: La combinación de los comandos con los operadores de control

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

En este ejemplo, el contenido de los archivos se extraen en el directorio ~ / tmp / a / b / c de directorio a menos que el directorio no existe. Si el directorio no existe, el comando tar no se ejecuta, así que nada se extrae.

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

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

Listado 6. Otro ejemplo de buen hábito # 3: La combinación de los comandos con los operadores de control

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

También puede combinar los operadores de control descritos en esta sección. Cada uno trabaja en el último comando de ejecución:

Listado 7. Un ejemplo combinado de buen hábito # 3: La combinación de los comandos con los operadores de control

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

Cotización variables con precaución

Siempre tenga cuidado con la expansión de depósito y los nombres de variables. Es generalmente una buena idea para incluir las llamadas variables entre comillas dobles, a menos que tenga una buena razón para. Del mismo modo, si usted es inmediatamente después de un nombre de variable con texto alfanumérico, asegúrese de incluir también el nombre de la variable de llaves (()) para distinguirlo del texto circundante. De lo contrario, el shell interpreta el texto final como parte de su nombre de la variable - y lo más probable devuelve un valor nulo. Listado de 8 proporciona ejemplos de cotización diferentes y no cotización de las variables y sus efectos.

Listado de 8. Ejemplo de buen hábito # 4: Citando (y citando no) una variable

               
~ $ Ls / tmp
a, b
~ $ VAR = "tmp / *"
~ $ Echo $ VAR
tmp / tmp un / b
~ $ Echo "$ VAR"
tmp / *
~ $ Echo $ VARA

~ $ Echo "$ VARA"

~ $ Echo "$ (var) una"
tmp / * un
~ $ Echo $ (VAR) un
tmp / a
~ $

Usar secuencias de escape para la gestión de entrada a largo

Usted probablemente ha visto ejemplos de código en el que una barra invertida (\) sigue una larga línea más a la línea siguiente, y usted sabe que la mayoría de los depósitos tratar lo que escribe a través de líneas sucesivas unidas por una barra invertida como una línea larga. Sin embargo, es posible que no se aproveche de esta función en la línea de comandos con la frecuencia que sea posible. La barra invertida es especialmente útil si su terminal no maneja varias líneas envolver adecuadamente o cuando la línea de comandos es más pequeño de lo habitual (por ejemplo, cuando usted tiene una larga trayectoria en el sistema). La barra invertida también es útil para dar sentido a las líneas de entrada siempre que se escriban, como en el ejemplo siguiente:

Listado 9. Ejemplo de buen hábito # 5: El uso de una barra invertida para la entrada a largo

mkdir-p / a / b / c & & \
tar> xvf-C tmp / a / b / c ~ / archivo.tar

Por otra parte, la configuración también los siguientes trabajos:

Listado 10. Alternativa ejemplo de buen hábito # 5: El uso de una barra invertida para la entrada a largo

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

Sin embargo se divide una línea de entrada en varias líneas, el shell siempre lo trata como una línea continua, porque siempre tiras a cabo todas las barras invertidas y espacios adicionales.

Nota: En la mayoría de los depósitos, al pulsar la tecla de flecha hacia arriba, toda la entrada de varias líneas se vuelve a dibujar en una sola línea, entrada de tiempo.

Grupo de los comandos juntos en una lista

La mayoría de los depósitos tienen formas de agrupar un conjunto de comandos juntos en una lista para que usted pueda pasar su salida de la suma total-por una tubería u otro medio redirigir cualquier o todas las fuentes hasta el mismo lugar. En general, usted puede hacer esto mediante la ejecución de una lista de comandos en un subshell o ejecutando una lista de comandos en el shell actual.

Ejecutar una lista de comandos en un subshell

Utilice paréntesis para encerrar una lista de comandos en un solo grupo. Si lo hace, corre los comandos en un subshell nueva y le permite redirigir o cualquier forma de recolectar la salida de la totalidad, como en el ejemplo siguiente:

Listado 11. Ejemplo de buen hábito # 6: Ejecución de una lista de comandos en un subshell

               
~ $ (Cd tmp / a / b / c / | | mkdir-p tmp / a / b / c & & \
> VAR = $ PWD; cd ~; tar xvf-C $ archivo.tar VAR) \
> | Mailx admin-S "del archivo contenido"

En este ejemplo, el contenido del archivo se extrae en el tmp / a / b / c / directorio mientras que la salida de los comandos agrupados, incluyendo una lista de archivos extraídos, se envía por correo a la dirección de correo.

El uso de una subcapa es preferible en casos en los que están redefiniendo las variables de entorno en la lista de comandos y no desea que las definiciones que se aplican a su shell actual.

Ejecutar una lista de comandos en el shell actual

Utilice llaves (()) para incluir una lista de comandos para ejecutar en el shell actual. Asegúrese de incluir los espacios entre las llaves y los comandos reales, o si el depósito no puede interpretar correctamente las llaves. Además, asegúrese de que el último comando de la lista termina con un punto y coma, como en el ejemplo siguiente:

Listado 12. Otro ejemplo de buen hábito # 6: Ejecución de una lista de comandos en el shell actual

               
~ ($ Cp $ (VAR) una. & & Guest.guest chown-R un & & \
tar> newarchive.tar cvf uno;) | mailx admin-S "archivo nuevo"

Utilice xargs fuera de encontrar

Utilice la herramienta xargs como un filtro para hacer un buen uso de la producción extraídas del comando find. El precepto general es que proporciona un plazo encontrar una lista de archivos que cumplen algunos criterios. Esta lista se comunica a xargs, que luego se ejecuta algún comando que pueda resultar útil a esa lista de archivos como argumentos, como en el ejemplo siguiente:

Listado 13. Ejemplo del uso clásico de la herramienta xargs

              
~ $ Find-file-algunos criterios de algunos-file-path | \
Algunos xargs-grande-de comandos que las necesidades-filename-argumentos

Sin embargo, no piensan en xargs como un simple auxiliar para encontrar, es una de esas herramientas que subutilizados, cuando usted consigue en el hábito de usarlo, quieres probar en todo, incluyendo los siguientes usos.

Pasar una lista delimitada por espacios

En su forma más simple invocación, xargs es como un filtro que toma como entrada una lista (con todos los miembros en una sola línea). La herramienta pone a los miembros en una sola línea separados por espacio:

Listado 14. Ejemplo de salida de la herramienta xargs

               
~ $ Xargs
                una
                b
                c
               
                    Control-D
               
a b c
~ $

Puede enviar la salida de cualquier herramienta que los nombres de archivo a través de salidas xargs para obtener una lista de argumentos a favor de alguna otra herramienta que lleva los nombres de archivo como argumento, como en el ejemplo siguiente:

Listado 15. Ejemplo del uso de la herramienta xargs

              
~ / Tmp $ ls -1 | xargs
December_Report.pdf README un mkdirhier.sh archivo.tar
~ / Tmp $ ls -1 | xargs archivo
December_Report.pdf: en formato PDF, versión 1.3
README: texto ASCII
uno: El directorio
archivo.tar: Archivo de alquitrán de POSIX
mkdirhier.sh: Bourne shell script ejecutable de texto
~ / Tmp $

El comando xargs es útil para más que pasar los nombres de archivo. Utilícelo cada vez que necesite para filtrar el texto en una sola línea:

Listado 16. Ejemplo de buen hábito # 7: El uso de la herramienta xargs para filtro de texto en una sola línea

               
~ / Tmp $ xargs ls-l |
-Rw-r - r - 7 joe joe 12043 27 de enero 20:36 December_Report.pdf-rw-r - r - 1 \
root root 238 03 de diciembre 08:19 README drwxr-xr-x 38 joe joe 354082 02 de noviembre \
16:07 un rw--r - r - 3 joe joe 14 de diciembre 5096 14:26 archivo.tar-rwxr-xr-x 1 \
joe joe 30 de septiembre 3239 12:40 mkdirhier.sh
~ / Tmp $

Sea cauteloso con xargs

Técnicamente, una situación rara que ocurre en la que podría meterse en problemas usando xargs. De forma predeterminada, la cadena al final de su archivo es un guión bajo (_), y si ese carácter se envía como un argumento de entrada única, después de todo lo que se ignora. Como medida de precaución contra esto, utilice la opción-e, que, sin argumentos, se apaga la cadena de fin de archivo completo.

Sepa cuándo debe hacer el grep contar - y cuándo debe hacerse a un lado

Evite una tubería grep para wc-l con el fin de contar el número de líneas de producción. La opción-c para grep da un recuento de las líneas que coincidan con el formato específico y que es generalmente más rápido que una pipa de aseo, como en el ejemplo siguiente:

Listado 17. Ejemplo de buen hábito # 8: Contar con líneas y sin grep

              
~ $ grep tiempo y / tmp a / longfile.txt | wc-l
2811

0m0.097s real
0m0.006s usuario
sistema 0m0.032s
~ $ Grep-c el tiempo y / tmp a / longfile.txt
2811

0m0.013s real
0m0.006s usuario
sistema 0m0.005s
~ $

Una adición al factor de la velocidad, la opción-c es también una forma mejor de hacer el recuento. Con varios archivos, grep con la opción-c devuelve un recuento independiente para cada archivo, una en cada línea, mientras que un tubo para wc da un recuento total de todos los archivos juntos.

Sin embargo, independientemente de las consideraciones de la velocidad, el ejemplo muestra otro error común de evitar. Estos métodos de recuento sólo dan cuenta del número de líneas que contienen patrones ajustados entre sí - y si eso es lo que está buscando, que es grande. Pero en los casos en que las líneas pueden tener varias instancias de un patrón particular, estos métodos no te dan una cuenta verdadera de la cantidad real de casos coincidentes. Para contar el número de casos, su uso wc para contar, después de todo. En primer lugar, ejecutar un comando grep con la opción-o, si la versión que soporta. Esta opción sólo muestra el patrón coincide, uno en cada línea, y no la línea misma. Pero no se puede utilizar en combinación con la opción-c, así que use wc-l para contar las líneas, como en el ejemplo siguiente:

Listado de 18 años. Ejemplo de buen hábito # 8: Contar con grep patrón de casos

En este caso, una llamada a wc es ligeramente más rápido que una segunda llamada a grep con un patrón simulado a poner en juego y contar cada línea (como grep-c).

Match determinados campos de la producción, no sólo las líneas

Una herramienta como awk es preferible grep cuando quiera para que coincida con el patrón en sólo un campo específico de las líneas de producción y no sólo en cualquier parte de las líneas.

El siguiente ejemplo muestra cómo simplificada a la lista sólo los archivos modificados en diciembre:

Listado 19. Ejemplo de mal hábito # 9: Uso de grep para encontrar patrones en sectores específicos

               
~ / Tmp $ ls-l / tmp / a / b / / | grep c diciembre
-Rw-r - r - 7 joe joe 12043 27 de enero 20:36 December_Report.pdf
-Rw-r - r - 1 root root 238 03 de diciembre 08:19 README
-Rw-r - r - 3 joe joe 14 de diciembre 5096 14:26 archivo.tar
~ / Tmp $

En este ejemplo, grep filtros de las líneas, todos los archivos con la salida en diciembre su modificación, así como las fechas en sus nombres. Por lo tanto, un archivo, como December_Report.pdf es igual, aunque no se ha modificado desde enero. Esto probablemente no es lo que quieres. Para coincidir con un patrón en un campo particular, es mejor usar awk, cuando un operador relacional coincida con el campo exacto, como en el ejemplo siguiente:

Listado 20. Ejemplo de buen hábito # 9: Uso de awk para encontrar patrones en sectores específicos

               
~ / Tmp $ awk | ls-l '$ 6 == "diciembre"'
-Rw-r - r - 3 joe joe 14 de diciembre 5096 14:26 archivo.tar
-Rw-r - r - 1 root root 238 03 de diciembre 08:19 README
~ / Tmp $

Lea la sección Recursos para obtener más detalles acerca de cómo utilizar awk.

Deje de tuberías gatos

Un error de grep uso básico-pero-común consiste en una tubería de la salida de cat a grep para buscar en el contenido de un archivo único. Esto es absolutamente innecesaria y una pérdida de tiempo, porque las herramientas como grep tomar los nombres de archivo como argumentos. Simplemente no es necesario utilizar gato en esta situación en todo, como en el ejemplo siguiente:

Listado 21. Ejemplo de hábitos buenos y malos # 10: Uso de grep con y sin gato

               
~ $ Tmp tiempo cat / a / grep longfile.txt | y
2811

0m0.015s real
0m0.003s usuario
sistema 0m0.013s
~ $ grep tiempo y / tmp a / longfile.txt
2811

0m0.010s real
0m0.006s usuario
sistema 0m0.004s
~ $

Este error se aplica a muchas herramientas. Porque la mayoría de instrumentos tienen la entrada estándar como un argumento con un guión (-), aunque el argumento para el uso de gato para intercalar varios archivos con stdin a menudo no es válida. En realidad, sólo es necesario para concatenar antes de una tubería cuando se utiliza gato con una de sus varias opciones de filtrado.

Conclusión:

Es bueno para examinar sus hábitos de línea de comandos para cualquier patrón de mal uso. Los malos hábitos que usted reduzca la velocidad y conducen a menudo a errores inesperados. Este artículo presenta 10 nuevos hábitos que pueden ayudarle a romper con muchos de los errores de uso más común. Recogiendo estos buenos hábitos es un paso positivo hacia afilar sus habilidades de UNIX de línea de comandos.

Saludos

Fuente http://www.ibm.com/developerworks/aix/library/au-badunixhabits.html?ca=d...

Podría ir al wiki, pero traduciéndolo de forma no automática porque:

Using grep with and without cat 

traducido por:

Uso de grep con y sin gato

chirría un poco que porque se refiere al comando cat, no a un gato meparto .

Que tal, vagabundeando por la red me topé con esto, me parecio muy interesante y me parecio buena idea compartirlo.
Os pongo a vuestra consideracón
Traducción asistida por google
Introducción

Cuando se utiliza un sistema a menudo, se tiende a caer en patrones de uso establecidas. A veces, no iniciar el hábito de hacer las cosas de la mejor manera posible. A veces, hasta recoger las malas prácticas que llevan a la confusión y torpeza. Una de las mejores formas de corregir esas deficiencias es tomar conciencia de hasta unos hábitos saludables que contrarrestarlas. Este artículo propone 10 hábitos de línea de comandos UNIX-vale la pena recoger - los buenos hábitos que le ayudan a romper muchas debilidades uso común y hacerlo más productivo en la línea de comandos en el proceso. Cada hábito se describe con más detalle después de la lista de buenos hábitos.

Adoptar buenos hábitos de 10

Diez buenos hábitos a adoptar son:

1.- Hacer árboles de directorios en un solo golpe.
2.- Cambie la ruta; no se mueve el archivo.
3.- Combine sus comandos con los operadores de control.
4.- Cotización variable con precaución.
5.-Usar secuencias de escape para la gestión de entrada a largo.
6.- Grupo de los comandos juntos en una lista.
7.- Utilice xargs fuera de encontrar.
8.- Sepa cuándo debe hacer el grep contar - y cuándo debe hacerse a un lado.
9.- Match determinados campos de la producción, no sólo las líneas.
10.- Make directory trees in a single swipe
Hacer árboles de directorios en un solo golpe

Listado 1 ilustra uno de los malos hábitos más comunes de UNIX en torno a: la definición de un directorio de los árboles a la vez.
Listado 1. Ejemplo de mal hábito # 1: Definición de los á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 de mkdir y hacer todos los directorios de los padres junto con sus hijos en un solo comando. Pero incluso los administradores que saben acerca de esta opción están todavía atrapados pasar a través de los subdirectorios en que lo hacen en la línea de comandos. Vale la pena su tiempo para elegir a conciencia el buen hábito:

Listado 2. Ejemplo de buen hábito # 1: Definición de los árboles de directorios con un solo comando

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

Puede utilizar esta opción para que toda árboles de directorios complejos, que son grandes utilizar secuencias de comandos en el interior, no sólo las jerarquías simple. Por ejemplo:

Listado 3. Otro ejemplo de buen hábito # 1: Definición de los árboles complejo directorio con un comando

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

En el pasado, la única excusa para definir los directorios de forma individual fue que su aplicación mkdir no apoya esta opción, pero esto ya no es así en muchos sistemas. IBM AIX ® mkdir, mkdir GNU, y otras que se ajusten a la Single UNIX Specification ahora tienen esta opción.

A los pocos sistemas que todavía carecen de la capacidad, utilice la secuencia de comandos mkdirhier (ver Recursos), que es un contenedor para mkdir que hace la misma función:

~ $ Mkdirhier proyecto / (lib / ext, bin, src, doc / (html, info, pdf), demo / stat / a)

Cambie la ruta; no se mueve el archivo

Otro patrón de uso malo es que trasladar un archivo tar. Archivo en un directorio determinado, ya que pasa a ser el directorio que desea extraer pulg Uno nunca tiene que hacer esto. Puede descomprimir cualquier archivo. Tar en un directorio que te gusta - eso es lo que la opción-C es para. Use la opción-C cuando se descomprimen un archivo de almacenamiento para especificar el directorio para descomprimirlo en:

Listado 4. Ejemplo de buen hábito # 2: Utilizar la opción-C para desempaquetar un archivo tar archivo.

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

Hacer un hábito de usar-C es preferible mover el archivo en donde desea se puede desempaquetar, cambiar a ese directorio, y sólo entonces la extracción de su contenido - especialmente si el archivo de almacenamiento pertenece a otra parte.
Combine sus comandos con los operadores de control

Usted probablemente ya sabe que en la mayoría de los depósitos, puede combinar comandos en una sola línea de comandos mediante la colocación de un punto y coma (;) entre ellos. El punto y coma es un operador de control de depósito, y si bien es útil para encadenar varios comandos discretos en una sola línea de comandos, no funciona para todo. Por ejemplo, supongamos que utiliza un punto y coma para combinar dos comandos en el que la correcta ejecución de la segunda orden depende por completo de la finalización con éxito de la primera. Si el primer comando no sale como esperaba, el segundo comando todavía funciona - y falla. En su lugar, un uso más adecuado de control de los operadores (algunos se describen en este artículo). Siempre y cuando su caparazón les apoya, que vale la pena entrar en el hábito de usarlas.

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

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

Listado 5. Ejemplo de buen hábito # 3: La combinación de los comandos con los operadores de control

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

En este ejemplo, el contenido de los archivos se extraen en el directorio ~ / tmp / a / b / c de directorio a menos que el directorio no existe. Si el directorio no existe, el comando tar no se ejecuta, así que nada se extrae.

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

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

Listado 6. Otro ejemplo de buen hábito # 3: La combinación de los comandos con los operadores de control

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

También puede combinar los operadores de control descritos en esta sección. Cada uno trabaja en el último comando de ejecución:

Listado 7. Un ejemplo combinado de buen hábito # 3: La combinación de los comandos con los operadores de control

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

Cotización variables con precaución

Siempre tenga cuidado con la expansión de depósito y los nombres de variables. Es generalmente una buena idea para incluir las llamadas variables entre comillas dobles, a menos que tenga una buena razón para. Del mismo modo, si usted es inmediatamente después de un nombre de variable con texto alfanumérico, asegúrese de incluir también el nombre de la variable de llaves (()) para distinguirlo del texto circundante. De lo contrario, el shell interpreta el texto final como parte de su nombre de la variable - y lo más probable devuelve un valor nulo. Listado de 8 proporciona ejemplos de cotización diferentes y no cotización de las variables y sus efectos.

Listado de 8. Ejemplo de buen hábito # 4: Citando (y citando no) 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
~ $

Usar secuencias de escape para la gestión de entrada a largo

Usted probablemente ha visto ejemplos de código en el que una barra invertida (\) sigue una larga línea más a la línea siguiente, y usted sabe que la mayoría de los depósitos tratar lo que escribe a través de líneas sucesivas unidas por una barra invertida como una línea larga. Sin embargo, es posible que no se aproveche de esta función en la línea de comandos con la frecuencia que sea posible. La barra invertida es especialmente útil si su terminal no maneja varias líneas envolver adecuadamente o cuando la línea de comandos es más pequeño de lo habitual (por ejemplo, cuando usted tiene una larga trayectoria en el sistema). La barra invertida también es útil para dar sentido a las líneas de entrada siempre que se escriban, como en el ejemplo siguiente:

Listado 9. Ejemplo de buen hábito # 5: El uso de una barra invertida para la entrada a largo

mkdir-p / a / b / c & & \
tar> xvf-C tmp / a / b / c ~ / archivo.tar

Por otra parte, la configuración también los siguientes trabajos:

Listado 10. Alternativa ejemplo de buen hábito # 5: El uso de una barra invertida para la entrada a largo

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

Sin embargo se divide una línea de entrada en varias líneas, el shell siempre lo trata como una línea continua, porque siempre tiras a cabo todas las barras invertidas y espacios adicionales.

Nota: En la mayoría de los depósitos, al pulsar la tecla de flecha hacia arriba, toda la entrada de varias líneas se vuelve a dibujar en una sola línea, entrada de tiempo.

Grupo de los comandos juntos en una lista

La mayoría de los depósitos tienen formas de agrupar un conjunto de comandos juntos en una lista para que usted pueda pasar su salida de la suma total-por una tubería u otro medio redirigir cualquier o todas las fuentes hasta el mismo lugar. En general, usted puede hacer esto mediante la ejecución de una lista de comandos en un subshell o ejecutando una lista de comandos en el shell actual.

Ejecutar una lista de comandos en un subshell

Utilice paréntesis para encerrar una lista de comandos en un solo grupo. Si lo hace, corre los comandos en un subshell nueva y le permite redirigir o cualquier forma de recolectar la salida de la totalidad, como en el ejemplo siguiente:

Listado 11. Ejemplo de buen hábito # 6: Ejecución de una lista de comandos en un subshell

               
~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"

En este ejemplo, el contenido del archivo se extrae en el tmp / a / b / c / directorio mientras que la salida de los comandos agrupados, incluyendo una lista de archivos extraídos, se envía por correo a la dirección de correo.

El uso de una subcapa es preferible en casos en los que están redefiniendo las variables de entorno en la lista de comandos y no desea que las definiciones que se aplican a su shell actual.

Ejecutar una lista de comandos en el shell actual

Utilice llaves (()) para incluir una lista de comandos para ejecutar en el shell actual. Asegúrese de incluir los espacios entre las llaves y los comandos reales, o si el depósito no puede interpretar correctamente las llaves. Además, asegúrese de que el último comando de la lista termina con un punto y coma, como en el ejemplo siguiente:

Listado 12. Otro ejemplo de buen hábito # 6: Ejecución de una lista de comandos en el shell actual

               
~ $ { cp ${VAR}a . && chown -R guest.guest a && \
> tar cvf newarchive.tar a; } | mailx admin -S "New archive"

Utilice xargs fuera de encontrar

Utilice la herramienta xargs como un filtro para hacer un buen uso de la producción extraídas del comando find. El precepto general es que proporciona un plazo encontrar una lista de archivos que cumplen algunos criterios. Esta lista se comunica a xargs, que luego se ejecuta algún comando que pueda resultar útil a esa lista de archivos como argumentos, como en el ejemplo siguiente:

Listado 13. Ejemplo del uso clásico de la herramienta xargs
xargs some-great-command-that-needs-filename-arguments

Sin embargo, no piensan en xargs como un simple auxiliar para encontrar, es una de esas herramientas que subutilizados, cuando usted consigue en el hábito de usarlo, quieres probar en todo, incluyendo los siguientes usos.

Pasar una lista delimitada por espacios

En su forma más simple invocación, xargs es como un filtro que toma como entrada una lista (con todos los miembros en una sola línea). La herramienta pone a los miembros en una sola línea separados por espacio:

Listado 14. Ejemplo de salida de la herramienta xargs

Puede enviar la salida de cualquier herramienta que los nombres de archivo a través de salidas xargs para obtener una lista de argumentos a favor de alguna otra herramienta que lleva los nombres de archivo como argumento, como en el ejemplo siguiente:

Listado 15. Ejemplo del uso de la herramienta xargs

              
~/tmp $ ls -1 | xargs
December_Report.pdf README a archive.tar mkdirhier.sh
~/tmp $ ls -1 | xargs file
December_Report.pdf: PDF document, version 1.3
README: ASCII text
a: directory
archive.tar: POSIX tar archive
mkdirhier.sh: Bourne shell script text executable
~/tmp $

El comando xargs es útil para más que pasar los nombres de archivo. Utilícelo cada vez que necesite para filtrar el texto en una sola línea:

Listado 16. Ejemplo de buen hábito # 7: El uso de la herramienta xargs para filtro de texto en una sola línea

               
~/tmp $ ls -l | xargs
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \
root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \
16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \
joe joe 3239 Sep 30 12:40 mkdirhier.sh
~/tmp $

Sea cauteloso con xargs

Técnicamente, una situación rara que ocurre en la que podría meterse en problemas usando xargs. De forma predeterminada, la cadena al final de su archivo es un guión bajo (_), y si ese carácter se envía como un argumento de entrada única, después de todo lo que se ignora. Como medida de precaución contra esto, utilice la opción-e, que, sin argumentos, se apaga la cadena de fin de archivo completo.

Sepa cuándo debe hacer el grep contar - y cuándo debe hacerse a un lado

Evite una tubería grep para wc-l con el fin de contar el número de líneas de producción. La opción-c para grep da un recuento de las líneas que coincidan con el formato específico y que es generalmente más rápido que una pipa de aseo, como en el ejemplo siguiente:

Listado 17. Ejemplo de buen hábito # 8: Contar con líneas y sin grep

              
~ $ time grep and tmp/a/longfile.txt | wc -l
2811

real    0m0.097s
user    0m0.006s
sys     0m0.032s
~ $ time grep -c and tmp/a/longfile.txt
2811

real    0m0.013s
user    0m0.006s
sys     0m0.005s
~ $

Una adición al factor de la velocidad, la opción-c es también una forma mejor de hacer el recuento. Con varios archivos, grep con la opción-c devuelve un recuento independiente para cada archivo, una en cada línea, mientras que un tubo para wc da un recuento total de todos los archivos juntos.

Sin embargo, independientemente de las consideraciones de la velocidad, el ejemplo muestra otro error común de evitar. Estos métodos de recuento sólo dan cuenta del número de líneas que contienen patrones ajustados entre sí - y si eso es lo que está buscando, que es grande. Pero en los casos en que las líneas pueden tener varias instancias de un patrón particular, estos métodos no te dan una cuenta verdadera de la cantidad real de casos coincidentes. Para contar el número de casos, su uso wc para contar, después de todo. En primer lugar, ejecutar un comando grep con la opción-o, si la versión que soporta. Esta opción sólo muestra el patrón coincide, uno en cada línea, y no la línea misma. Pero no se puede utilizar en combinación con la opción-c, así que use wc-l para contar las líneas, como en el ejemplo siguiente:

Listado de 18 años. Ejemplo de buen hábito # 8: Contar con grep patrón de casos

En este caso, una llamada a wc es ligeramente más rápido que una segunda llamada a grep con un patrón simulado a poner en juego y contar cada línea (como grep-c).

Match determinados campos de la producción, no sólo las líneas

Una herramienta como awk es preferible grep cuando quiera para que coincida con el patrón en sólo un campo específico de las líneas de producción y no sólo en cualquier parte de las líneas.

El siguiente ejemplo muestra cómo simplificada a la lista sólo los archivos modificados en diciembre:

Listado 19. Ejemplo de mal hábito # 9: Uso de grep para encontrar patrones en sectores específicos

               
~/tmp $ ls -l /tmp/a/b/c | grep Dec
-rw-r--r--  7 joe joe  12043 Jan 27 20:36 December_Report.pdf
-rw-r--r--  1 root root  238 Dec 03 08:19 README
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
~/tmp $

En este ejemplo, grep filtros de las líneas, todos los archivos con la salida en diciembre su modificación, así como las fechas en sus nombres. Por lo tanto, un archivo, como December_Report.pdf es igual, aunque no se ha modificado desde enero. Esto probablemente no es lo que quieres. Para coincidir con un patrón en un campo particular, es mejor usar awk, cuando un operador relacional coincida con el campo exacto, como en el ejemplo siguiente:

Listado 20. Ejemplo de buen hábito # 9: Uso de awk para encontrar patrones en sectores específicos

               
~/tmp $ ls -l | awk '$6 == "Dec"'
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
-rw-r--r--  1 root root  238 Dec 03 08:19 README
~/tmp $

Lea la sección Recursos para obtener más detalles acerca de cómo utilizar awk.

Deje de tuberías gatos

Un error de grep uso básico-pero-común consiste en una tubería de la salida de cat a grep para buscar en el contenido de un archivo único. Esto es absolutamente innecesaria y una pérdida de tiempo, porque las herramientas como grep tomar los nombres de archivo como argumentos. Simplemente no es necesario utilizar gato en esta situación en todo, como en el ejemplo siguiente:

Listado 21. Ejemplo de hábitos buenos y malos # 10: Uso de grep con y sin gato

               
~ $ time cat tmp/a/longfile.txt | grep and
2811

real    0m0.015s
user    0m0.003s
sys     0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811

real    0m0.010s
user    0m0.006s
sys     0m0.004s
~ $

Este error se aplica a muchas herramientas. Porque la mayoría de instrumentos tienen la entrada estándar como un argumento con un guión (-), aunque el argumento para el uso de gato para intercalar varios archivos con stdin a menudo no es válida. En realidad, sólo es necesario para concatenar antes de una tubería cuando se utiliza gato con una de sus varias opciones de filtrado.

Conclusión:

Es bueno para examinar sus hábitos de línea de comandos para cualquier patrón de mal uso. Los malos hábitos que usted reduzca la velocidad y conducen a menudo a errores inesperados. Este artículo presenta 10 nuevos hábitos que pueden ayudarle a romper con muchos de los errores de uso más común. Recogiendo estos buenos hábitos es un paso positivo hacia afilar sus habilidades de UNIX de línea de comandos.

Saludos

Fuente http://www.ibm.com/developerworks/aix/library/au-badunixhabits.html?ca=d...

Si algun moderador puede eliminar el envío inicial, este esta corregido, muchas gracias

m__x_ escribió:

Podría ir al wiki, pero traduciéndolo de forma no automática porque:

Sería cuestión de que los mederadores digan si es posible ponerlo, en ese sentido estoy a lo que digan.

Saludos

Yo leí bastantes faltas de ortografía/malas traducciones. Como "Si su caparazón lo permite" (if your shell).

Obviamente hay que mejorarlo.

gatuno_123 escribió:

Yo leí bastantes faltas de ortografía/malas traducciones. Como "Si su caparazón lo permite" (if your shell).

Obviamente hay que mejorarlo.

"Tuberías gatos" -> pipes cat ----> ¡¡¡¡¡mis ojos!!!!!

No aguanto las traducciones automáticas de google ni a los vagos que las cuelgan sin leerlas/entenderlas.

jsa_ escribió:
gatuno_123 escribió:

Yo leí bastantes faltas de ortografía/malas traducciones. Como "Si su caparazón lo permite" (if your shell).

Obviamente hay que mejorarlo.

"Tuberías gatos" -> pipes cat ----> ¡¡¡¡¡mis ojos!!!!!

No aguanto las traducciones automáticas de google ni a los vagos que las cuelgan sin leerlas/entenderlas.

meparto El texto es horroroso. Se entienden casi mejor los comandos por sí sólos.

soulman escribió:
jsa_ escribió:
gatuno_123 escribió:

Yo leí bastantes faltas de ortografía/malas traducciones. Como "Si su caparazón lo permite" (if your shell).

Obviamente hay que mejorarlo.

"Tuberías gatos" -> pipes cat ----> ¡¡¡¡¡mis ojos!!!!!

No aguanto las traducciones automáticas de google ni a los vagos que las cuelgan sin leerlas/entenderlas.

meparto El texto es horroroso. Se entienden casi mejor los comandos por sí sólos.

En el índice: "Cotización variable con precaución." que

Cotización variables con precaución

Siempre tenga cuidado con la expansión de depósito y los nombres de variables

Al revés lo traduce muy bien

google translator escribió:

Quote variables with caution.
Always be carefull with shell expansion and variable names