Comparta sus características y trucos de línea de comandos para Unix / Linux. Intente mantenerlo agnóstico de concha / distro si es posible. Interesado en ver alias, líneas simples, atajos de teclado, pequeños scripts de shell, etc.
fuente
Comparta sus características y trucos de línea de comandos para Unix / Linux. Intente mantenerlo agnóstico de concha / distro si es posible. Interesado en ver alias, líneas simples, atajos de teclado, pequeños scripts de shell, etc.
Esto se expande un poco en el !!
truco mencionado en esta respuesta . En realidad, hay un montón de comandos relacionados con el historial que tienden a olvidarse (las personas tienden a apuñalar Up100 veces en lugar de buscar un comando que saben que escribieron).
history
comando mostrará una lista de comandos ejecutados recientemente con un designador de eventos a la izquierda!N
sustituirá el comando asociado con el designador de eventos N
!-N
sustituirá al N
XX comando más reciente; Por ejemplo !-1
, sustituirá el comando más reciente, !-2
el segundo más reciente, etc.!!
es una forma abreviada de !-1
sustituir rápidamente el último comando!string
sustituirá el comando más reciente que comienza con string
!?string?
sustituirá el comando más reciente que contiene string
Los designadores de palabras se pueden agregar a un !
comando de historial para modificar los resultados. Los dos puntos separan el evento y los designadores de palabras, por ejemplo !!:0
. El designador de eventos !!
puede abreviarse solo !
cuando se usa un designador de palabras, por lo que !!:0
es equivalente a !:0
.
!:0
obtendrá el comando que se ejecutó!:1
obtendrá el primer argumento (y !:2
el segundo, etc.)!:2-3
obtendrá el segundo y tercer argumento!:^
Es otra forma de obtener el primer argumento. !:$
obtendrá el último!:*
obtendrá todos los argumentos (pero no el comando)Los modificadores también se pueden agregar a un !
comando de historial, cada uno precedido por dos puntos. Se puede apilar cualquier número (p !:t:r:p
. Ej .).
h
- En línea con el nombre del archivo baset
- Solo el nombre de archivo baser
- En línea con la extensión del nombre de archivoe
- Solo la extensión del nombre del archivos/search/replacement
- Reemplazar la primera aparición de search
conreplacement
gs/search/replacement
- Reemplace todas las ocurrencias de search
conreplacement
!-#
los tampoco. Utilizo!string
para ejecutar el último comando que comienza con una cadena, pero generalmente lo llevo a tabulación primero (zsh) para asegurarme de que estoy ejecutando lo correcto!N
ejecutará el comando ..." es una descripción demasiado limitada; en realidad,!N
será sustituido por el comando ...; y así sucesivamente para todas las descripciones en la respuesta. ¡Más correcto y abriendo posibilidades mucho más útiles! Por ejemplo, lo mencionadosudo !!
.bash
; en Emacs, para navegar por el historial de comandos y valores de entrada (para Mx u otros valores leídos) uno usa Meta-R en su lugar (Meta-R también se usaeshell
en Emacs). Así que a menudo los arruino.bash - inserta el parámetro final de la línea anterior
alt- . la combinación de teclas más útil de la historia, pruébela y vea, por alguna razón, nadie sabe sobre esta.
presiónelo una y otra vez para seleccionar los últimos parámetros anteriores.
genial cuando quieres hacer algo más al argumento / archivo que usaste hace un momento.
fuente
alt
-.
irá a la orden anterior y tire el último argumento de la misma. Así que si desea que el último argumento de hace tres comandos, simplemente pulsealt
-.
tres veces.yank-last-arg
comando readline, por lo que debería funcionar con cualquier programa vinculado a readline, no solo BASH o ZSH.Mi favorito es
Simple y muy útil.
Echa un vistazo a este sitio web commandlinefu.com .
También puedes echar un vistazo a estos cuatro artículos de Peteris Krumins en su blog.
fuente
ascii
programa separado también es útil. Además de imprimir una tabla, le permite consultar uno o más caracteres individuales.Ejecute el último comando como root:
fuente
No estoy seguro si esto cuenta como un "truco", pero la gente parece desconocer las teclas de acceso rápido estándar de readline. De uso particular en conchas:
fuente
Ctrl+L
corresponde al carácter ascii de FormFeed. Normalmente redibujará la pantalla en aplicaciones de texto con una ventana de pantalla (por ejemplo, vim, less, mc, etc.). Agradable si la pantalla ha sido "contaminada" por algún resultado de otro programa.Ctrl+W
cortar una palabra hacia atrás,Alt+F
avanzar una palabra,Alt+B
ir una palabra hacia atrás en una línea. Me gustaCtrl+Y
yShift+Insert
porque puedes tener dos líneas copiadas. Uno conCtrl+U
(péguelo conCtrl+Y
) y al mismo tiempo puede copiar otra palabra (seleccione la línea) pegar con (Shift+Insert
).CTRL+ Ren BASH para buscar / activar comandos ejecutados previamente (el contenido de ~ / .bash_history).
Esto a menudo es extremadamente útil. Ejecutar este alias servirá el PWD sobre HTTP (indexado) en el puerto 8000:
Y debido a que corro make todo el tiempo, y spaz y tecleo demasiado rápido, estos alias son probablemente los más utilizados (en serio):
Y probablemente mi pieza más utilizada de BASH es un script simple que llamo upload. Lo uso para borrar cualquier tipo de contenido a mi Linode, y copia la URL HTTP resultante en mi portapapeles (clic central). Muy útil para pegar cosas a personas en IRC:
Solo un par. Puedo publicar mucho más tarde, ¡debo volver al trabajo!
fuente
alias mk=make
Más rápido de escribir y menos probabilidades de equivocarse. O compile desde su editor usando una tecla dealias m=make
, o inclusom=make -j6
o similar, excepto que ya usoalias m=mutt
☺diff
La salida de dos comandos sin crear un archivo temporal manualmente (bash):fuente
comm
ya que solo toma archivos, pero en muchos casos es un desperdicio de inodos.Bastante básico, pero la gente no parece saberlo, te devuelve al directorio anterior:
fuente
cd..
desde DOS está arraigada en mi memoria muscular ...cd
(sin argumento) que lo lleva a su directorio de inicio.Expansión de la abrazadera :
Le permite reemplazar líneas tediosas como:
con una instancia más corta
algunos otros usos
Expansión Aritmética :
fuente
foo[123]
que se expandiráfoo1 foo2 foo3
, pero deben ser nombres de archivo para trabajar en ese casoEsto suele estar en mi script de inicio (.bashrc, .profile, lo que sea)
shopt
Dios mío, mira los comentarios:Un alias que guarda las pulsaciones de teclas:
mkdir
ycd
en él:Y por último pero no menos importante, he renunciado a memorizar la sintaxis del alquitrán, así que:
fuente
mkcd
que yo llamo idmd
. Sin embargo, el uso de "$ @" como argumento para cd no tiene ningún sentido ya que no puede cd en más de un directorio. "$ @" funcionará para mkdir, pero entonces está manejando los argumentos de manera diferente para mkdir y cd, por lo que preferiría sugerirmd () { mkdir -p "$1"; cd "$1" }
Dos funciones bash que me ahorran muchas pulsaciones de teclas.
Haga automáticamente un ls después de cada cd exitoso:
Sube n niveles:
fuente
builtin foo
para evitar tener una función definidacd
; He estado usandochdir
en mis funciones. Prácticocd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
Como generalmente estoy a mitad de camino en una línea de comando antes de querer buscar (CTRL-R en bash) tengo lo siguiente en mi .bashrc
Esto significa que si escribo cd y luego presiono arriba / abajo, puedo ver todas las opciones a las que he hecho cd. Básicamente, uso esto para directorios de uso frecuente. Como "cd w" y estoy terminando revisando todos los espacios de trabajo que uso mucho.
fuente
Una cosa que me ahorra mucho tiempo son los comandos pushd / popd. Estos chicos te permiten crear una pila de directorios y reducir mucho la escritura:
fuente
u
yo
defender aquí?setopt autopushd
y todos los cambios en el directorio se enviarán automáticamenteEl
screen
comando . Básicamente guarda su sesión de línea de comando para cuando regrese. Es una especie de administrador de terminales, como un administrador de ventanas. De esa manera, en una sola sesión de terminal, puede tener múltiples terminales virtuales en funcionamiento. Es muy genial.Si se usa
screen
, esta función de shell (ponerlo en.bashrc
) es extremadamente útil:al escribir
scr
, verificará si su sesión principal existe y se adjuntará a ella. De lo contrario, lo creará.fuente
Si necesita editar una línea de comando particularmente larga en bash
lo abrirá en el editor ($ EDITOR).
En zsh puede obtener el mismo comportamiento agregando esto a .zshrc:
fuente
Si usted es un mecanógrafo rápido, estos son útiles:
Esta macro le ayuda a calcular los totales de una columna de salida: tamaños de archivo, bytes, paquetes, todo lo que tiene que hacer es especificar la columna que desea agregar:
Lo usa así, por ejemplo, sin argumentos, agrega el total de la primera columna:
Si proporciona el argumento, sumará esa columna, por ejemplo, esto le da el número total de bytes utilizados por todos los archivos C # en / tmp:
A veces su consola se estropea porque accidentalmente vio un archivo binario (cat / bin / ls por ejemplo), puede restaurar el terminal con esta función de shell:
Me gusta que mi ls use caracteres para distinguir la clase de archivos y también para ocultar los archivos de respaldo generados por mi editor (los archivos de respaldo terminan con el carácter ~):
fuente
s/fast/sloppy/
reset
donde tú usasrestaura
.Uno de mis favoritos cuando olvido
s
:fuente
bindkey -s '\e[12~' "sudo !!\n"
vincular (en este caso) F2 para ejecutar ese comando. Tengo ese enlace, así que cuando ejecuto algo y veo el mensaje de error "olvidaste 'sudo', tonto", puedo apuñalar a F2 con molestiaSi un comando toma una entrada estándar, puede leer la entrada de un archivo con
<filename
. Esto puede aparecer en cualquier parte del comando, por lo que estas líneas son equivalentes:Esto es particularmente útil para grep, ya que le permite colocar la expresión al final de la línea, por lo que puede modificar rápidamente un comando grep presionando Up, sin necesidad de desplazarse hacia la izquierda para pasar el nombre del archivo:
fuente
<input foo | bar | baz >output
, no funciona si intenta mezclar algunas primitivas de bucle de concha comowhile
ofor
en el medio. Así que me di por vencido y lo puse al final según la convención.Puede usar
CDPATH
para configurar el directorio equivalente aPATH
; si lo intentacd foo
y no hay ningunofoo
en el directorio actual, el shell verificará cada uno de los directoriosCDPATH
buscandofoo
en ellos y cambiará al primero que encuentre:fuente
Para cuando no sabes dónde vive algo y tampoco te importa.
fuente
which
automáticamente, entoncesvi =scriptname
$(scriptname)
El comercial . Pone su comando en segundo plano, para que pueda seguir escribiendo.
Trabajando juntos, y después de un tiempo ves:
¡Y tu proceso está hecho! Ideal para cosas en las que no necesita esperar a que terminen.
fuente
&!
al fondo el trabajo y desconéctelo del shell!bash
.nohup
logra esto.Pestaña completada . ¿Qué tan mal sería tener que escribir todos los caracteres de cada ruta?
fuente
rm -fr /
. Así que sí, la finalización de Tab es bastante vital ...ls /usr/lib/game-d*/rott*
rm -rf /
deshabilitado en la mayoría de los sistemas Linux?Desmontar el último dispositivo montado:
!mo
se expande al último comando que comenzó conmo
(al menos en bash). A veces uno lo hacemv
en el medio, poru!m
lo que no funcionará con tanta frecuencia.fuente
Tengo esto en mi .bashrc
Y cuando tengo el código fuente html en el portapapeles y quiero encontrar todos los enlaces que uso
Y tengo todas las URL en el portapapeles
También tengo esta función
qué tamaño de pantalla (legible por humanos) y nombre de archivo.
este alias es para mostrar la temperatura
Con esta función puedo calcular el producto o la suma de argumentos.
Esta es una función útil que divide la entrada estándar separada por expresiones regulares y luego une el resultado.
función factorial
Esta función muestra texto wiki sobre DNS
También tengo tres funciones de color.
Esta función valida el archivo md5 hash.
esto mostrará un mensaje de error para un código dado
Puede imprimir todos los mensajes con
fuente
Otro truco útil de ZSH:
Trate la salida de un comando como un archivo:
Esto abre una versión anterior de un archivo con seguimiento de Mercurial en emacs para una visualización resaltada de sintaxis. Sin eso, tendría que perder el tiempo con
hg revert
,hg archive
o explícitamente enviarhg cat
la salida a un archivo temporal.Por supuesto, esto funciona con cualquier programa que abra archivos y cualquier programa que imprima a la salida estándar.
fuente
Una característica específica de ZSH son los alias de sufijo, configurados al dar
alias
la-s
bandera:Si una extensión dada tiene un alias de sufijo, puede ejecutar un archivo con esa extensión directamente, y ZSH iniciará el programa dado y pasará el nombre del archivo como argumento. Entonces, si el alias anterior está vigente, estas líneas son equivalentes:
fuente
Una de mis características favoritas de todos los tiempos de ZSH son los directorios con nombre. Puede exportar una variable con un nombre determinado, con un valor que apunta a una ruta determinada:
Ahora puede usar
~foo
un comando para referirse a/usr/bin
:fuente
Ver esta cuestión .
Cuando corres
ps ax | grep string
:la última línea que contiene
grep
es algo un poco molestoPuede deshacerse de esto ejecutando
ps ax | grep '[s]tring'
:actualización : o simplemente ejecutar
pgrep string
fuente
'[o]penbox'
). Los corchetes funcionarán como una especie de globo, por lo que si hay openbox en su directorio (digamos que está dentro/usr/bin
) bash solo usará openbox, lo que evitará el truco grep.El comando no hacer nada
:
como enExpansión de abrazaderas en combinación con bucles for:
!
operadores y operadores de cortocircuito||
y&&
usando sub shells en lugar de pop / push (es útil en scripts)
el tipo de comando que es
type
también muy agradable: cuerdas aquí
y mi favorito: redirección en una lista de comandos
fuente
Me encanta meter tantas cosas como puedo en mi PS1. Algunas cosas útiles para recordar:
\e[s
y\e[u
guarde y salve la posición del cursor respectivamente. Lo uso para crear una 'barra de información' en la parte superior de la pantalla, un par de líneas de largo, que puede caber más cosas. Ejemplo:Combinar con
alias clear='echo -e "\e[2J\n"'
. ¡Pruébalo!Además, la
PROMPT_COMMAND
variable define un comando para ejecutar antes de la PS1 cada vez.Otro es el
bg
comando. Si olvida poner&
al final de un comando, simplemente presione ^Zy escribabg
, y se ejecutará en segundo plano.fuente
bg
, cuando tengo un programa ejecutándose en segundo plano yfg
PS1
así que pongo la mayoría de las cosas que quiero en el fondo de mi pantalla ...