Me gustaría abrir una discusión que acumule las mejores prácticas y consejos de la línea de comandos de Linux (CLI).
He buscado una discusión para compartir el comentario a continuación, pero no he encontrado una, 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 todas las demás prácticas relacionadas con la administración del sistema Linux / Unix, las mejores prácticas de programación de shell para el beneficio de todos nosotros.
Respuestas:
Use screen , 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 su conexión, por lo que puede reanudarla más tarde o desde su hogar.
fuente
SSH!
SSH es el comando de Dios: creo que es el comando global más valioso para 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 al respecto. 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 ejecutándose.
Montar un sistema de archivos a través de internet
buscar en la red SSHFS
Reenviar comandos .
¡El protocolo SVN + SSH es Subversion de un cliente remoto a un servidor sin ejecutar ningún DEAMON! El comando SVN inicia el servidor a través del shell ssh y pasa la información de un lado a otro a través de la tubería existente. El programa rsync hace lo mismo, se ejecuta contra un servidor sin demonio rsync al iniciar uno a través de SSH. Es fácil escribir sus propios archivos bash para hacer trucos similares.
Cadena para atravesar firewalls
Lo uso todo el tiempo para saltar a través de mi servidor Linux en casa a mi Mac.
Puertos de reenvío:
parece moderadamente útil hasta que se da cuenta de que puede rebotar a través del firewall de su hogar y configurar su enrutador en el hogar desde el trabajo como si lo estuviera haciendo desde su red doméstica).
Reenviar X solicitudes:
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 tiene que tener un servidor X ejecutándose en su servidor remoto, el impacto de la CPU en su servidor es mínimo, puede tener un servidor TINY Linux que sirva enormes aplicaciones para su poderosa PC de juego con Windows y cygwin / X.
Por supuesto, VI y EMACS funcionan sobre SSH, pero cuando estoy corriendo en casa, a veces quiero más. ¡Uso ssh -X para iniciar una copia de Eclipse! Si su servidor es más potente que su computadora portátil, tiene la GUI justo allí 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
(lo que significa 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 mediante el uso de claves de cifrado (más seguras). El segundo es que puede especificar un comando en la CLI de SSH. Lo he usado de algunas maneras interesantes: como cuando falla una compilación en el servidor remoto, lo tendría en SSH en mi computadora y reproduzco un archivo de sonido).
Recuerde que puede redirigir la salida desde el comando remoto y usarla dentro de su archivo por lotes local, por lo que también podría estar localmente siguiendo una compilación que se ejecuta en su servidor.
Construido en Mac
Tanto el servidor como el cliente están integrados en mac y linux. En el caso de Mac y Ubuntu, habilitar un servidor es tan simple como encontrar la casilla de verificación correcta.
En una PC, 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:
Cuando escribo "ssh home" (nada más), actúa como si hubiera escrito:
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:
así que una vez que he hecho un "ssh home" y todavía tengo la ventana abierta, puedo escribir "ssh mac" y la computadora en el trabajo aquí intentará conectarse a su propio puerto 1025 que ha sido enviado a "mac: 22 "por 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 pudiera estar interesado. El guión se llama "authMe"
Si tiene este script en su directorio de inicio y hay un host al que puede conectarse (a través de ssh), puede escribir "./authMe hostName".
Si es necesario, creará un par de claves público / privado para usted, luego se enviará 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 debe solicitar su contraseña cuando se conecta a ese sistema remoto, utilizará el par de claves público / privado.
Si su computadora remota no siempre es segura, debería 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.
fuente
ssh-copy-id
y es tan simple comossh-copy-id user@someserver
Me gusta usar
para cambiar al directorio anterior. ¡Muy útil!
fuente
Recientemente descubrí el
pv
comando (visor de tuberías) que es como cat pero con detalles de transferencia.Entonces en lugar de
Puedes usar
Entonces, en lugar de no tener idea de cuándo terminará su operación, ¡ahora lo sabrá!
Cortesía de Peteris Krumins.
fuente
tee(1)
.Vuelva a ejecutar el comando anterior como root.
[El comando superior actual en el sitio http://www.commandlinefu.com , un sitio con el tema de esta pregunta.]
fuente
Presione Ctrl-R y comience a escribir un comando (o cualquier parte de él): busca en el historial de comandos. Al presionar Ctrl-R nuevamente, saltará a la siguiente coincidencia, enter ejecuta el comando que se muestra actualmente y la flecha derecha (al menos) le permitirá editarlo primero.
Había usado Linux durante unos 7 años como mi sistema operativo principal antes de enterarme de esto, pero ahora que lo sé, es bastante útil.
fuente
stty -ixon
primero para desactivar el significado de control de flujo XON / XOFF (esto también hace que Ctrl-Q esté disponible, de forma predeterminada se asigna para que sea lo mismo que Ctrl-V entre comillas, pero puede cambiarlo a otra cosa ) Verman stty
yman readline
para más información. Elstty
comando se puede agregar a su~/.bashrc
La línea de comando es algo gracioso. Creo que solo puedes aprender mucho por tu cuenta y el resto lo aprendes por accidente mirando a alguien más usando una línea de comando.
Estuve usando el shell durante años escribiendo minuciosamente los nombres de directorio a mano. Un día estaba viendo a un amigo perder el tiempo en un sistema y él seguía presionando la tecla de tabulación. Le pregunté "¿por qué estás presionando la pestaña?" Respuesta: intenta completar el directorio o nombre de archivo. ¿Quién lo hubiera 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, dicho amigo me estaba mirando en la línea de comando y me vio escribir algo como:
¿Quién lo hubiera adivinado? Nunca supo sobre
popd
/pushd
. Supongo que somos incluso ...fuente
Aprende Vim.
Es (posiblemente) el mejor editor, pero sin duda el mejor editor disponible en un servidor Linux desnudo.
fuente
A veces es útil dejar un programa en ejecución incluso después de haber cerrado sesión. He visto algunas soluciones que usan nohup o incluso pantalla para ese propósito. Lo más simple que sé es:
También puede separar un programa en ejecución:
fuente
Cuando quiero asegurarme de que uso el comando real y no un alias, uso una barra diagonal inversa inicial:
fuente
builtin
".Este consejo hará que su CLI sea más cómoda (al menos para mí):
cree un archivo ~ / .inputrc con los siguientes contenidos:
Vuelva a cargar bash (por ejemplo, escribiendo "exec bash"). Cuando escriba el prefijo de un comando y presione la flecha hacia arriba, buscará los comandos que comienzan con su prefijo, por ejemplo, si escribió ssh, mostrará sus conexiones anteriores con shells remotos. Si su mensaje está vacío, la flecha hacia arriba examinará el historial de la manera normal.
fuente
exec bash
man readline
y memorizar sus accesos directos predeterminadosbind -f ~/.inputrc
para recargar la entrada sin tener que iniciar un nuevo bash y borrar su entorno actual.Use en
&&
lugar de;
cuando ejecuta múltiples comandos a la vez. Se detiene cuando se produce un error y no ejecuta los otros comandos.Ejemplo clásico:
fuente
dosomething && echo "success" || echo "teh fail"
Al escribir bucles en la línea de comandos en bash, a menudo prefijo comandos riesgosos con el comando 'echo'.
De esta manera puedo ver el 'algo arriesgado' en su totalidad antes de comprometerme a ejecutarlo. Ayuda cuando su comando arriesgado incluye expansiones variables y globos. Y 'set -x' es muy útil al escribir scripts de bash.
'set -x' habilita la depuración. Consulte http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html para obtener información sobre la depuración de bash.
fuente
Requisito
Debe probar el ancho de banda máximo entre 2 servidores.
Solución
En SERVER1 haz:
En SERVER2 haz:
Verá resultados como:
117 MB / s es el factor interesante aquí, que muestra el ancho de banda de transferencia de red real.
Explicacion :
Como el paquete comenzará a fluir a través de la red, podrá ver estadísticas de ancho de banda en SERVER2, que es una muy buena estimación del ancho de banda máximo real posible entre los 2 servidores.
Copia por UDP (para evitar la sobrecarga de TCP).
Copiando desde la memoria (/ dev / zero) en el SERVIDOR1 a la memoria (/ dev / null) en el SERVIDOR2, evitando así que la E / S del disco se convierta en el cuello de botella.
fuente
Ver las estructuras del directorio de colores es más fácil.
Editar
fuente
Algunos pequeños consejos sobre la visualización de registros:
fuente
tail -f
usted puede ver múltiples registros a la vez! Por ejemplo:tail -f log1.txt -f log2.txt
Aprendí un truco de un amigo hace mucho tiempo para cambiar fácilmente la extensión de un archivo:
La expansión de Shell expandirá esto a:
Esto también se puede usar para cambiar el nombre de un archivo de otras maneras, como agregar algo en:
fuente
ls -l /bin/c
luego presionar Alt-Shift- {y completará estols -l /bin/c{at,h{grp,mod,own,vt},p{,io},sh}
para usted.Use "tar xf" para extraer archivos comprimidos. La j para bzip2 y la z para gzip no son necesarias, ya que tar detectará el tipo de archivo de su archivo. Tampoco es el signo '-' antes de los argumentos. Ahorrará mucho tiempo (más de un milenio ;-)).
Mejor aún, use unfoo para extraer cualquier archivo con un solo comando sin argumentos innecesarios.
fuente
alias ut="tar xf"
, hace que extraer archivos sea aún más fácil.Instale el paquete bash-complete. Contiene una serie de reglas de finalización predefinidas para shell. Habilítelo escribiendo "source / etc / bash_completion" si la distribución no lo hace por usted. Luego, por ejemplo, cada vez que complete después de kpdf, solo verá una lista de directorios y archivos PDF. Es tan inteligente como completar archivos remotos después de scp ssh: // server / XXX (si habilitó inicios de sesión sin contraseña).
fuente
Uso constantemente estos
ALT-. (ESC +. En algunos terminales) copia el último argumento utilizado (súper útil)
CTRL-W elimina palabra
Terminal CTRL-L clear (como el comando clear pero más rápido)
ALT-B (ESC + B en algunas terminales) retrocede una palabra
ALT-F (ESC + F en algunas terminales) avanza una palabra
CTRL-E salta a EOL
CTRL-A salto a BOL
Búsqueda CTRL-R en el historial
fuente
En bash, uso ! $ Mucho. Repite el último argumento del último comando:
Ejecutará el ls, luego, si desea editarlo, no tiene que volver a escribirlo, solo use! $. Esto es realmente útil para nombres largos de ruta / archivo. Además ,! * Repite todos los argumentos del comando anterior. No lo uso tanto, pero parece útil.
Sabía que habían sido mencionados, pero uso mucho vim, screen y cd.
Olvidé noclobber:
De man bash :
fuente
Alt-.
.Cambie de bash a zsh y vea cómo mejora su productividad:
Google te dirá muchos más beneficios.
fuente
Vieja escuela, moviendo un árbol de directorios de un lugar a otro, conservando enlaces simbólicos, permisos y todo lo bueno:
o a través de la red
Nueva escuela:
o a través de la red
fuente
tar xvBpf - -C /destination
==(cd /destination; tar xvBpf -)
Un poco menos escribiendo y más fácil de usar sobre ssh.rsync -avh
es mejor en una sola máquina:h
garantiza que los enlaces duros se transfieran correctamente sin convertir cada enlace en un archivo separado, aunque si tiene una gran cantidad de archivos, puede usar mucha memoria.rsync -avzh . foo.com/destination
es el equivalente para la red y, por lo general, no necesita el-e ssh
que rsync sabrá para usar ssh.rsync -aSHuvrx --delete / --link-dest=/backup/$PREV /backup/$HOUR
Requisito : tiene un directorio que contiene una gran lista de archivos que desea eliminar. rm -r fallará!
ejemplo
Solución :
Explicacion :
Editar: explicación de la fijación después del comentario @ephemient.
find proporcionará argumentos a rm por los argumentos máximos permitidos. Esto permitirá que rm elimine archivos en lotes, que es la técnica más rápida que conozco sin usar la operación -delete de find. Es equivalente a
que puede resultarle útil si
find
no lo admite-exec ... +
.fuente
\;
con+
: luegofind
hará lo quexargs
hace de manera predeterminada, que es agrupar los argumentos tanto como sea posible (sin exceder el límite de la lista de argumentos). O simplemente use-delete
intead de-exec rm
(GNU Findutils necesarios para ambos)find ... -delete
, si tu hallazgo está tan dotado.Utilizo estos dos consejos con tanta frecuencia que pensé que sería una buena idea compartir:
Lanzará el último comando en el archivo de historial que comienza con "foo" (a menudo lo uso cuando compilo,
!gcc
por ejemplo).El otro es un atajo de teclado (Ctrl + O en lugar de Retorno), esto ejecutará el comando Y mostrará el siguiente comando en el archivo de historial. Por ejemplo, cuando compilo y pruebo un archivo siempre hago 3 o 4 comandos, make, cd al directorio de la prueba, ejecuto la prueba, cd al directorio del archivo MAKE. Usar Ctrl + O hace que esta tarea sea mucho más fácil :)
¡Espero que esto ayude!
fuente
Cómo usar subversion en Linux sin la ayuda de interfaces gráficas sofisticadas que pueden no estar disponibles.
Esto impide que muchos desarrolladores usen Linux, curiosamente.
fuente
Comando de la vieja escuela más ignorado:
find
Ayer reparé un error de permisos brutos:
fuente
chmod 644 $(find . -type f)
,chmod 755 $(find . -type d)
-perm
opción defind
ubicar archivos que tienen permisos establecidos de cierta manera.Para shells como
bash
yksh
, puede hacer que la línea de comando responda a comandos de navegación como su editor de texto:o
le permitirá buscar en su historial y moverse por la línea de comandos de la forma en que está acostumbrado a hacerlo en archivos de texto (por ejemplo, en modo vi, presionando
ESC
y escribiendo/string
buscará en sus comandos anteriores "cadena" - puede usarn
yN
mover entre partidos)fuente
grep es mi amigo Seriamente.
Lista de
.rb
archivos que contienen el textoclass foo
:Lista de
.rb
archivos que no contienen el textoclass foo
:Enumere los
.rb
archivos que no contienen foo o bar (puede usar cualquier expresión regular con -e, pero necesita escapar de los operadores):fuente
La sustitución de la carcasa se realiza con
^
:fuente