Pregunta ¿Buenas prácticas y consejos para la línea de comandos de Linux?


Me gustaría abrir una discusión que acumule las mejores prácticas y sugerencias de su línea de comandos de Linux (CLI).

He buscado una discusión de este tipo para compartir el comentario a continuación, pero no he encontrado ninguno, de ahí esta publicación.

Espero que todos podamos aprender de esto.

Le invitamos a compartir sus consejos de Bash, grep, sed, AWK, / proc y cualquier otra administración relacionada del sistema Linux / Unix, las mejores prácticas de programación de shell para el beneficio de todos nosotros.


112
2018-03-02 21:23


origen


¿Por qué solo Linux? Muchos consejos pueden ser útiles en casi todos los sabores de Unix. - mouviciel
Esta pregunta puede ser un poco amplia: hay suficientes para las mejores prácticas de línea de comandos de Linux / Unix para llenar libros completos ... - Jonik
Estoy de acuerdo en que las sugerencias de Unix que se pueden aplicar a Linux también son muy bienvenidas, he escrito Linux porque A. Esto es con lo que trabajamos aquí. B. porque está ganando una exposición pública más amplia que Unix en los últimos años. - Maxim Veksler
Creo que es una buena idea hacer una lista de los comandos más útiles e interesantes que usa la gente.
¿Alguno de estos es relevante? refspecs.freestandards.org


Respuestas:


Utilizar pantalla, un multiplexor de terminal gratuito desarrollado por el Proyecto GNU que le permitirá tener varios terminales en uno.

Puede iniciar una sesión y sus terminales se guardarán incluso cuando se pierda la conexión, por lo que puede reanudar más tarde o desde su casa.


111
2018-03-02 22:52



Los conmutadores más comunes que uso son 'screen -D -R' para separar y reanudar mi última sesión de pantalla y 'screen -x' para ver la misma sesión de pantalla desde varios inicios de sesión. Además, consíguete un buen .screenrc de dotfiles.org/.screenrc - Nick Devereaux
Otra cosa buena de la pantalla es que puedes compartir un terminal con otras personas cuando quieras colaborar en algo, usando screen -x - gareth_bowles


SSH!
SSH es el comando de Dios; creo que es el comando más valioso que hay que aprender. Las opciones pueden ser bastante desalentadoras, pero parece que estoy aprendiendo constantemente a usar nuevas opciones de línea de comandos para SSH que nunca pensé que serían necesarias. Puede que los haya usado todos en este punto.

Cuanto más lo usas, más aprendes sobre él. Puedes usarlo para hacer algunas cosas INCREÍBLES.

Nota: TODAS estas cosas se pueden hacer de forma remota sin configuración en su servidor, excepto para tener el servidor ssh en ejecución.

Montar un sistema de archivos a través de internet. 

buscar en la red para SSHFS

Comandos de avance.

¡El protocolo SVN + SSH es Subversion de un cliente remoto a un servidor donde NO se ejecuta DEAMON! El comando SVN inicia el servidor a través del shell ssh y pasa la información a través de la tubería existente. El programa rsync hace lo mismo, se ejecuta contra un servidor sin rsync deamon iniciando uno mismo a través de SSH. Es fácil escribir tus propios archivos bash para hacer trucos similares.

Cadena para atravesar los cortafuegos. 

Lo utilizo todo el tiempo para saltar a través de mi servidor Linux en casa a mi mac.

Puertos delanteros:
Parece solo moderadamente útil hasta que te das cuenta de que puedes saltar a través del firewall de tu casa y configurar tu enrutador en casa desde el trabajo como si lo estuvieras haciendo dentro de tu red doméstica).

Reenviar solicitudes X: 

Este es otro asombroso. Con o sin un servidor X ejecutándose en su sistema remoto, puede ejecutar un programa x-windows y la ventana aparecerá en su pantalla local. Solo usa el interruptor -X, eso es todo!

Como no es necesario que tenga un servidor X en su servidor remoto, el impacto de la CPU en su servidor es mínimo, puede tener un servidor Linux pequeño que ofrece aplicaciones enormes a su potente PC para juegos con Windows y cygwin / X.

Por supuesto, el trabajo de VI y EMACS sobre SSH, pero cuando estoy corriendo en casa, a veces quiero más. ¡Utilizo ssh -X para iniciar una copia de Eclipse! Si su servidor es más poderoso que su computadora portátil, tiene la GUI en su computadora portátil, pero las compilaciones se realizan en su servidor, así que no se preocupe por la carga del sistema.

Ejecutar en archivos por lotes 

(es decir, ejecutar un archivo por lotes local que "hace cosas" en otros sistemas):

Dos cosas se combinan para hacer que este sea genial. Una es que puede eliminar las solicitudes de contraseña usando claves de cifrado (más seguras). La segunda es que puede especificar un comando en la CLI de SSH. He usado esto de algunas formas interesantes: como cuando falla una compilación en el servidor remoto, tengo SSH en mi computadora y reproduzco un archivo de sonido).

Recuerde que puede redirigir la salida del comando remoto y usarlo dentro de su archivo de proceso por lotes local, por lo que también podría estar localizando una compilación que se ejecuta en su servidor.

Construido en Mac

Tanto el servidor como el cliente están integrados tanto en mac como en linux. En el caso de Mac y Ubuntu, habilitar un servidor es tan simple como encontrar la casilla de verificación correcta.

En una computadora, instale cygwin o cygwin / X (cygwin / X le permitirá reenviar su salida de x-window desde su máquina Linux a su PC con Windows - instala un servidor X)

Consejos importantes / archivo de configuración

Nunca use el puerto 22 en su firewall. Obtendrá muchos intentos de pirateo, simplemente no vale la pena. Simplemente haga que su firewall reenvíe un puerto diferente a su servidor.

Existen amplias opciones de configuración que le permiten simplificar significativamente sus comandos ssh. Aquí hay un ejemplo mío en el trabajo:

Host home
    hostname billshome.hopto.org
    Port=12345
    user=bill
    LocalForward=localhost:1025 mac:22

Cuando escribo "ssh home" (nada más), actúa como si hubiera escrito:

ssh -p 12345 bill@billshome.hopto.org

y luego reenvía mi puerto local 1025 a mi sistema "mac" en casa. La razón de esto es que tengo otra entrada en mi archivo:

Host mac
    hostname localhost
    port=1025

así que una vez que haya hecho un "ssh home" y todavía tenga la ventana abierta, puedo escribir "ssh mac" y la computadora en el trabajo aquí realmente intentará conectarse a su propio puerto 1025 que se ha reenviado a "mac: 22 "con el otro comando, por lo que se conectará a mi Mac en casa a través del firewall.

Editar - guión genial!

Desenterré un guión antiguo que me encanta, tuve que volver y publicarlo para cualquiera que esté aquí interesado. El script se llama "authMe"

#!/bin/bash
if [ ! -f ~/.ssh/id_dsa.pub ]
then
    echo 'id_dsa.pub does not exist, creating'
    ssh-keygen -tdsa
fi
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub

Si tiene este script en su directorio de inicio y hay un host al que se puede conectar (a través de ssh), puede escribir "./authMe hostName".

Si es necesario, creará un par de claves públicas / privadas para usted, luego ssh a la otra máquina y copiará su clave pública (el comando ssh le pedirá una contraseña ...)

Después de esto, el comando SSH ya no deberá solicitar su contraseña cuando se conecte a ese sistema remoto, utilizará el par de claves público / privado.

Si su computadora remota no siempre es segura, debe considerar establecer una "frase de contraseña" cuando se le solicite.

También es posible que desee configurar el servidor ssh en el otro extremo para no permitir contraseñas de texto (solo claves) para mayor seguridad.


101



+1 post muy bonito y compacto. - Karsten
Una pequeña nota sobre SSH sobre el puerto 22: siempre que tenga una buena contraseña de root y sus usuarios no tengan contraseñas terribles, solo ejecutar fail2ban (o algo similar) es suficiente para evitar los intentos de crack. Me pareció realmente molesto mantener SSH en otro puerto. - David Wolever
Puede ser irritante a veces, pero el volumen de conexiones fue simplemente aterrador. Sé que no se supone que deben pasar, pero es como si tuvieras a alguien caminando hacia tu casa y jugando con el tirador de tu puerta cada minuto, simplemente desconcertándote.
Hay una versión incorporada de su último comando en la mayoría de las versiones de ssh hoy en día, se llama ssh-copy-id, y es tan simple como ssh-copy-id user@someserver - JamesHannah
Otra forma de hacer su truco 'ssh mac' es usar una directiva ProxyCommand en su archivo .ssh / config. Host mac ProxyCommand ssh -q home "nc% h% p" Esto ejecutará netcat (nc) en casa y redireccionará su conexión ssh directamente a mac. Encuentro eso más fácil de encadenar (por ejemplo, si necesitas conectarte a 'home' para acceder a 'bastion de trabajo' para acceder a 'servidor web de trabajo'. - toppledwagon


Me gusta usar

cd -

para cambiar al directorio anterior. ¡Muy útil!


73



¡Nunca supe esto! ¡Gracias! En una nota relacionada, pushd y popd hacen algo similar, construyendo una pila de dirs. Este tipo de trucos te ayuda cuando estás navegando alrededor de una estructura de directorio profunda.
Esto es pura iluminación. - Manuel Ferreria


Recientemente he descubierto el pv comando (visor de tuberías) que es como cat pero con detalles de transferencia.

Así que en lugar de

$ gzip -c access.log > access.log.gz

Puedes usar

$ pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=>      ] 15% ETA 0:00:59

Entonces, en lugar de no tener idea de cuándo terminará su operación, ¡ahora lo sabrá!

Cortesía de Peteris Krumins 


69



$ gzip -c access.log> access.log.gz Por qué no solo: $ gzip access.log
Oh, eso funciona :) Acabo de tomar el ejemplo del sitio web de Peteris. - Nick Devereaux
Eso se ve bien viejo tee(1). - Daniel C. Sobral
Utilidad extremadamente útil, una que siempre olvido :-( - Patrick


sudo !!

Vuelva a ejecutar el comando anterior como root.

[El comando superior actual en el sitio http://www.commandlinefu.com, un sitio temático a lo largo de las líneas de esta pregunta.]


53



Divulgación - corro commandlinefu.com - codeinthehole
Habría salvado a este chico 16 caracteres: xkcd.com/149


prensa Ctrl-R y comience a escribir un comando (o cualquier parte de él): busca el historial de comandos. Al volver a presionar Ctrl-R saltará a la siguiente coincidencia, enter ejecuta el comando que se muestra actualmente y la flecha derecha (al menos) le permitirá editarlo primero.

$ (reverse-i-search)`svn': svn status

Había usado Linux durante 7 años como mi sistema operativo principal antes de enterarme de esto, pero ahora que lo sé, es bastante útil.


46



Gracias. He estado utilizando la búsqueda inversa, pero no he podido averiguar cómo saltar a la siguiente coincidencia. - Adam
Ctrl-S salta al siguiente partido. Puede que tengas que hacer stty -ixon primero en desactivar el significado de control de flujo de XON / XOFF (esto también hace que Ctrl-Q esté disponible, de forma predeterminada, se asigna para que sea el mismo que Ctrl-V insertado entre comillas, pero puede cambiarlo a otra cosa). Ver man stty y man readline Para más informaciones. los stty comando se puede agregar a su ~/.bashrc - Dennis Williamson


La línea de comando es una cosa divertida. Creo que solo puedes aprender mucho por tu cuenta y el resto lo aprendes por accidente viendo a alguien más usando una línea de comando.

Estuve usando el shell durante años escribiendo con esmero los nombres de los directorios a mano. Un día estaba viendo a un amigo manipular un sistema y él seguía presionando la tecla de tabulación. Le pregunté "¿por qué estás golpeando pestaña?". Respuesta: intenta completar el directorio o nombre de archivo. ¿Quién lo habría adivinado? Escriba un poco del archivo o directorio, presione la pestaña, e intentará terminar lo que escribió (el comportamiento depende de qué shell).

Un día, dijo que un amigo me estaba mirando en la línea de comando y me vio escribir algo como:

coryking@cory ~/trunk/mozi $ pushd /etc
/etc ~/trunk/mozi
coryking@cory /etc $ popd
~/trunk/mozi
coryking@cory ~/trunk/mozi $

¿Quién lo hubiera adivinado? Nunca supo de popd / pushd. Supongo que estamos incluso ...


45



Para mí, completar la pestaña me parece algo "obvio", muy básico, pero tampoco sabía nada de popd / pushd. Ciertamente divertido. :) - Jonik
También vea esta respuesta para poder completar con tabulación mucho más que comandos, archivos y directorios: stackoverflow.com/questions/603696//603919#603919 - Jonik
Eso es muy cierto. Aprendí sobre la búsqueda hacia atrás de la historia de bash (ctrl-r) observando a alguien. Más tarde me di cuenta de que era una función de readline y funcionaba igual en otros programas que incorporan readline (mysql, gdb, python -i, clisp, etc.). - sigjuice
¿Cómo podría usar "la cáscara" durante años y no saber cómo se completó la pestaña? - prestomation
Cuando trate con pushd / popd, no olvide mencionar el comando dirs. Muestra lo que hay en la pila pushd / popd. - slm


Aprender vim

Es (posiblemente) el mejor editor, pero sin duda el mejor editor disponible en un servidor Linux.


41



gvim es también el mejor navegador de archivos en windows;)
Esto también es extremadamente útil ya que una vez que sabes vim, puedes poner la mayoría de los shells en modo vi, y la navegación se vuelve extremadamente fácil y rápida - Patrick


A veces es útil dejar un programa en ejecución incluso después de que se haya desconectado. He visto algunas soluciones que usan nohup o incluso pantalla para ese propósito. Lo más simple que conozco es:

$ your_command_here & disown

También puede separar un programa en ejecución:

$ your_command_here
# Press <Control-Z> to stop the program and bring it to background:
$ bg
$ disown

38



Usar la pantalla es genial porque puede "reconectarse" a esa aplicación desde cualquier lugar más adelante. - prestomation
+1, no había oído hablar de disown. - user18911
Lo mismo ocurre con el rechazo, aunque ya hago lo mismo con la pantalla. - Andy