¿Cuáles son algunos consejos para ahorrar tiempo que todos los usuarios de Linux deben saber?

[Una versión ampliada de esta respuesta ahora está en Github.]

Aquí hay una selección de consejos de línea de comandos que me han resultado útiles al trabajar en Linux. El énfasis está en técnicas algo menos conocidas que son generalmente importantes o útiles para los usuarios técnicos. Es un poco largo, y los usuarios ciertamente no necesitan conocerlos a todos, pero he hecho todo lo posible por revisar que vale la pena leer cada artículo en términos de ahorro de tiempo proyectado, si usa Linux en gran medida.

Para obtener más información sobre un comando mencionado, primero intente “man “. En algunos casos, debe instalar un paquete para que esto funcione: intente con aptitude o yum. Si eso falla, buscalo en Google.

Lo esencial

  • Aprende Bash básico. En realidad, lea toda la página de manual de bash; Es bastante fácil de seguir y no es tan largo. Los shells alternativos pueden ser agradables, pero bash es poderoso y siempre está disponible (el aprendizaje principalmente de zsh o tcsh lo restringe en muchas situaciones).
  • Aprender vim Realmente no hay competencia para la edición aleatoria de Linux (incluso si usas Emacs o Eclipse la mayoría del tiempo).
  • Conozca ssh y los conceptos básicos de la autenticación sin contraseña, a través de ssh-agent, ssh-add, etc.
  • Familiarícese con la gestión de trabajos de bash: &, Ctrl-Z, Ctrl-C, jobs, fg, bg, kill, etc.
  • Administración básica de archivos: ls y ls -l (en particular, aprenda lo que significa cada columna en “ls -l”), menos, cabecera, cola y cola -f, ln y ln -s (aprenda las diferencias y ventajas de hard vs. enlaces blandos), chown, chmod, du (para un resumen rápido del uso del disco: du -sk *), df, mount.
  • Gestión básica de red: ip o ifconfig, dig.
  • Conozca bien las expresiones regulares, y las distintas banderas para grep / egrep. Vale la pena conocer las opciones -o, -A y -B.
  • Aprenda a usar apt-get o yum (dependiendo de la distribución) para encontrar e instalar paquetes.

Uso diario

  • En bash, use Ctrl-R para buscar en el historial de comandos.
  • En bash, use Ctrl-W para matar la última palabra, y Ctrl-U para matar la línea. Ver man readline para las combinaciones de teclas predeterminadas en bash. Hay mucho Por ejemplo, Alt-. pasa por los argumentos previos y Alt- * expande un globo.
  • Para volver al directorio de trabajo anterior: cd –
  • Si está a medio camino de escribir un comando pero cambia de opinión, presione Alt- # para agregar un # al principio e ingréselo como un comentario (o use Ctrl-A, #, ingrese). A continuación, puede volver a él más tarde a través del historial de comandos.
  • Utilice xargs (o paralelo). Es muy poderoso. Tenga en cuenta que puede controlar cuántos elementos se ejecutan por línea (-L) así como el paralelismo (-P). Si no estás seguro de si va a hacer lo correcto, usa primero xargs echo. Además, -I {} es útil. Ejemplos:

encontrar . -nombre \ *. py | xargs grep some_function

anfitriones de gatos | xargs -I {} ssh [correo electrónico protegido] {} nombre de host

  • pstree -p es una visualización útil del árbol de procesos.
  • Utilice pgrep y pkill para buscar o señalar procesos por nombre (-f es útil).
  • Conoce las distintas señales que puedes enviar a los procesos. Por ejemplo, para suspender un proceso, use kill -STOP [pid]. Para la lista completa, ver señal man 7
  • Use nohup o disown si desea que un proceso en segundo plano continúe ejecutándose para siempre.
  • Compruebe qué procesos están escuchando a través de netstat -lntp. Véase también lsof.
  • En los scripts de bash, use set -x para depurar la salida. Use set -e para abortar en los errores. Considere usar set -o pipefail también, para ser estricto con los errores (aunque este tema es un poco sutil). Para scripts más involucrados, también use trap.
  • En los scripts de bash, las subshells (escritas entre paréntesis) son formas convenientes de agrupar comandos. Un ejemplo común es moverse temporalmente a un directorio de trabajo diferente, por ejemplo,

# hacer algo en el directorio actual

(cd / some / other / dir; other-command)

# continuar en dir original

  • En bash, note que hay muchos tipos de expansión variable. La comprobación de una variable existe: $ {nombre:? Mensaje de error}. Por ejemplo, si una secuencia de comandos bash requiere un solo argumento, simplemente escriba input_file = $ {1:? Uso: $ 0 input_file}. Expansión aritmética: i = $ (((i + 1)% 5)). Secuencias: {1..10}. Recorte de cadenas: $ {var% suffix} y $ {var # prefix}. Por ejemplo, si var = foo.pdf, echo $ {var% .pdf} .txt imprime “foo.txt”.
  • La salida de un comando se puede tratar como un archivo a través de <(algún comando). Por ejemplo, compare local / etc / hosts con uno remoto: diff / etc / hosts <(ssh somehost cat / etc / hosts)
  • Conozca los “documentos aquí” en bash, como en cat << EOF….
  • En bash, redirija la salida estándar y el error estándar a través de: some-command> logfile 2> & 1. A menudo, para garantizar que un comando no deje un identificador de archivo abierto en la entrada estándar, atándolo al terminal en el que se encuentra, también es una buena práctica agregar “</ dev / null".
  • Use man ascii para una buena tabla ASCII, con valores hexadecimales y decimales.
  • En sesiones ssh remotas, use screen o dtach para guardar su sesión, en caso de que se interrumpa.
  • En ssh, saber cómo conectar un túnel con -L o -D (y ocasionalmente -R) es útil, por ejemplo, para acceder a sitios web desde un servidor remoto.
  • Puede ser útil hacer algunas optimizaciones a su configuración ssh; por ejemplo, este archivo .ssh / config contiene configuraciones para evitar conexiones caídas en ciertos entornos de red, no requiere confirmación para conectarse a nuevos hosts, reenviar la autenticación y usar compresión (lo cual es útil para scp en conexiones de bajo ancho de banda):

TCPKeepAlive = yes

ServerAliveInterval = 15

ServerAliveCountMax = 6

StrictHostKeyChecking = no

Compresión = si

ForwardAgent = yes

  • Para obtener los permisos de un archivo en formato octal, que es útil para la configuración del sistema pero no está disponible en “ls” y es fácil de desentrañar, use algo como

stat -c ‘% A% a% n’ / etc / timezone

Procesamiento de datos

  • Para convertir HTML a texto: lynx -dump -stdin
  • Si debe manejar XML, xmlstarlet es antiguo pero bueno.
  • Para JSON, use jq.
  • Para Amazon S3, s3cmd es conveniente (aunque inmaduro, con fallas ocasionales).
  • Conozca la clasificación y la uniq (incluidas las opciones -u y -d de uniq).
  • Saber sobre cortar, pegar y unir para manipular archivos de texto. Mucha gente usa el corte pero olvídate de unirse.
  • A veces es muy útil que pueda configurar intersecciones, uniones y diferencias de archivos de texto a través de ordenar / uniq. Supongamos que a y b son archivos de texto que ya están sin clasificar. Esto es rápido y funciona en archivos de tamaño arbitrario, hasta muchos gigabytes. (La clasificación no está limitada por la memoria, aunque es posible que deba usar la opción -T si / tmp está en una partición raíz pequeña).

gato ab | ordenar uniq> c # c es una unión b

gato ab | ordenar uniq -d> c # c es una intersección b

gato abb | ordenar uniq -u> c # c es la diferencia establecida a – b

  • Sepa que la configuración regional afecta a muchas herramientas de línea de comandos, incluido el orden de clasificación y el rendimiento. La mayoría de las instalaciones de Linux establecerán LANG u otras variables de configuración regional en una configuración local como el inglés de EE. UU. Esto puede hacer que la ordenación u otros comandos se ejecuten varias veces más lentamente. (Tenga en cuenta que incluso si usa el texto UTF-8, puede ordenar de forma segura por orden ASCII para muchos propósitos). Para deshabilitar las rutinas i18n lentas y usar el orden tradicional basado en bytes, use export LC_ALL = C (de hecho, considere poner esto en su .bashrc).
  • Conocer awk básico y sed para munging de datos simple. Por ejemplo, sumando todos los números en la tercera columna de un archivo de texto: awk ‘{x + = $ 3} FIN {imprimir x}’. Esto es probablemente 3 veces más rápido y 3 veces más corto que el equivalente de Python.
  • Para reemplazar todas las ocurrencias de una cadena en su lugar, en uno o más archivos:

perl -pi.bak -e ‘s / old-string / new-string / g’ my-files – *. txt

  • Para renombrar muchos archivos a la vez de acuerdo con un patrón, use renombrar. (O si quieres algo más general, mi propia herramienta de reparación puede ser útil).

renombra ‘s / \. bak $ //’ * .bak

  • Use shuf para barajar o seleccionar líneas aleatorias de un archivo.
  • Conozca las opciones de ordenación. Conozca cómo funcionan las teclas (-t y -k). En particular, tenga en cuenta que debe escribir -k1,1 para clasificar solo por el primer campo; -k1 significa ordenar de acuerdo a toda la línea.
  • La ordenación estable (sort -s) puede ser útil. Por ejemplo, para ordenar primero por el campo 2 y luego por el campo 1, puede usar sort -k1,1 | sort -s -k2,2
  • Si alguna vez necesita escribir un literal de tabulación en una línea de comando en bash (por ejemplo, para el argumento -t para ordenar), presione Ctrl-V o escriba $ ‘\ t’ (este último es mejor, ya que puede copiar / pégalo).
  • Para archivos binarios, use hd para simples volcados hexadecimales y bvi para la edición binaria.
  • También para archivos binarios, cadenas (más grep, etc.) le permite encontrar bits de texto.
  • Para convertir codificaciones de texto, intente iconv. O uconv para un uso más avanzado; Es compatible con algunas cosas avanzadas de Unicode. Por ejemplo, este comando va en minúsculas y elimina todos los acentos (expandiéndolos y soltándolos):

uconv -f utf-8 -t utf-8 -x ‘:: Any-Lower; :: Cualquier-NFD; [: Marca sin espacios:]>; :: Cualquier-NFC; ‘ output.txt

  • Para dividir archivos en partes, vea dividir (para dividir por tamaño) y csplit (para dividir por un patrón).

Depuración del sistema

  • Para la depuración web, curl y curl son útiles y / o sus equivalentes wget.
  • Para conocer el estado del disco / cpu / red, use iostat, netstat, top (o el mejor htop), y (especialmente) dstat. Bueno para tener una idea rápida de lo que está sucediendo en un sistema.
  • Para conocer el estado de la memoria, ejecute y comprenda la salida de free y vmstat. En particular, tenga en cuenta que el valor “almacenado en caché” es la memoria del kernel de Linux como caché de archivos, por lo que efectivamente cuenta para el valor “libre”.
  • La depuración del sistema Java es un hervidor diferente de peces, pero un truco simple en Sun y en algunas otras JVM es que puede ejecutar kill -3 y un seguimiento completo de la pila y un resumen del montón (incluidos los detalles de la recolección de basura generacional, que puede ser altamente informativo) será volcado a stderr / logs.
  • Use mtr como un mejor traceroute, para identificar problemas de red.
  • Para ver por qué un disco está lleno, ncdu ahorra tiempo con los comandos habituales como “du -sk *”.
  • Para encontrar qué socket o proceso está usando ancho de banda, intente iftop o nethogs.
  • La herramienta ab (que viene con Apache) es útil para la comprobación rápida y sucia del rendimiento del servidor web. Para pruebas de carga más complejas, intente asedio.
  • Para una depuración de red más seria, wireshark o tshark.
  • Conozca la strace y la ltrace. Estos pueden ser útiles si un programa falla, se cuelga o se bloquea, y no sabe por qué, o si desea obtener una idea general del rendimiento. Tenga en cuenta la opción de creación de perfiles (-c) y la capacidad de conectarse a un proceso en ejecución (-p).
  • Saber sobre ldd para comprobar bibliotecas compartidas etc.
  • Sepa cómo conectarse a un proceso en ejecución con gdb y obtenga los rastreos de su pila.
  • Utilice / proc. Es increíblemente útil a veces cuando se depuran problemas en vivo. Ejemplos: / proc / cpuinfo, / proc / xxx / cwd, / proc / xxx / exe, / proc / xxx / fd /, / proc / xxx / smaps.
  • Al depurar por qué algo salió mal en el pasado, sar puede ser muy útil. Muestra estadísticas históricas sobre CPU, memoria, red, etc.
  • Para sistemas más profundos y análisis de rendimiento, vea stap (systemtap) y perf.
  • Confirme qué distribución de Linux está utilizando (funciona en la mayoría de las distribuciones): “lsb_release -a”
  • Use dmesg siempre que algo esté actuando de forma realmente divertida (podría tratarse de problemas de hardware o controladores).

Un par de respuestas más en el mismo sentido: ¿Cuáles son las frases más útiles de “navaja suiza” en Unix? Es decir, ¿cuál es tu comando favorito de una sola línea que hace el trabajo de un programa mucho más detallado escrito en un lenguaje de alto nivel? ¿Cuáles son algunos comandos de Unix menos conocidos pero útiles? ¿Qué hace el comando y por qué es útil?

Descargo de responsabilidad: el hecho de que pueda hacer algo en bash no significa necesariamente que deba hacerlo. 😉

Esta pregunta merece una respuesta larga más allá del alcance de Quora. Déjame saber si se pone molesto. Enviarme ediciones para reducir el contenido.

Mejor manera de cambiar el directorio:
Si usted es un usuario de la línea de comandos, autojump es un paquete que debe tener. Puede cambiar el directorio simplemente especificando una parte del nombre del directorio (sin subdirectorios). También puede usar jumpstat para obtener estadísticas de los saltos de directorio.

$ j log
/ var / log
$ j ard
/ inicio / ab / trabajo / arduino

Libere espacio en el disco:
bleachbit es una utilidad ordenada para buscar y eliminar archivos según el conocimiento específico de la aplicación. Algunas herramientas más útiles: localepurge, deborphan / orphaner, computer-janitor-gtk.

Recuperar para la consola: guardar la frustración.
libtrash proporciona una funcionalidad similar a la papelera / papelera de reciclaje para los usuarios de la consola. También mire e2undel, recupere, recupere herramientas de jpeg .

Herramientas relativamente desconocidas para administradores de sistemas:
dstat
htop, iotop
ettool, mii-herramienta
dmidecode
lsof, netstat -nt
freeipmi

Ejecutar editor de nivel: guardar un tiempo de arranque.
rcconf : herramienta basada en el cursor para Debian, Ubuntu y clones
ntsysv : herramienta basada en cursas para Red Hat y clones
chkconfig : herramienta de línea de comandos para Red Hat y clones
systemctl : nueva herramienta de línea de comandos para Red Hat y clones
update-rc.d: herramienta de línea de comandos para Debian, Ubuntu y clones

Búsqueda de paquetes:
Encuentra a qué paquete pertenece esta ruta / archivo:

dpkg -S / ruta / a / archivo

rpm -qf / ruta / a / archivo

rpm -qa, apt-file son comandos adicionales útiles para echar un vistazo.

X Windows – Iniciar aplicación como otro usuario:

$ xhost + local:
$ su – otro usuario
$ export DISPLAY =: 0.0
$ xeyes

Copia de seguridad de correo electrónico:
offlineimap para usuarios imap.

Visualización en blanco:
Pantalla en blanco:

$ xset -display: 0 dpms force standby

Habilitar / deshabilitar la suspensión de pantalla:

xset s en; xset + dpms

xset s off; xset -dpms

Escalado de frecuencia de CPU manual
Agregue estos alias a su .bashrc

alias cpupowersave = ‘sudo cpupower conjunto de frecuencias -g powersave’
alias cpuconservative = ‘sudo cpupower conjunto de frecuencias -g conservativo’
alias cpuondemand = ‘sudo cpupower frequency-set -g ondemand’
alias cpuperformance = ‘sudo cpupower frequency-set -g performance’
alias freqinfo = ‘cpupower frequency-info’
alias freqlist = ‘cat / sys / devices / system / cpu / cpu0 / cpufreq / scaling_available_governors’
cputemperature () {awk ‘{print (“Temperature:” $ 2 “° F”);}’

Lenovo / Thinkpad Control de ventilador manual
Para habilitar el control manual del ventilador, ejecute este comando una vez.

Opciones de $ echo “thinkpad_acpi fan_control = 1″> /etc/modprobe.d/thinkpad_acpi.conf
$ rmmod thinkpad_acpi; modprobe thinkpad_acpi

Luego agregue estos alias a su .bashrc. El comando “fan-disengaged” desencadenará el ventilador a la velocidad máxima. Lo uso para enfriar rápidamente mi CPU cuando hace demasiado calor viendo un video o atrapado dentro de mi manta.

alias fan-off = ‘sudo bash -c “nivel de eco 0> / proc / acpi / ibm / fan”‘
alias fan-low = ‘sudo bash -c “nivel de eco 2> / proc / acpi / ibm / fan”‘
alias fan-med = ‘sudo bash -c “nivel de eco 4> / proc / acpi / ibm / fan”‘
alias fan-max = ‘sudo bash -c “nivel de eco 7> / proc / acpi / ibm / fan”‘
alias fan-auto = ‘sudo bash -c “nivel de eco auto> / proc / acpi / ibm / fan”‘
alias fan-disengaged = ‘sudo bash -c “nivel de eco desactivado> / proc / acpi / ibm / fan”‘ ## la desactivación puede dañar su ventilador con el uso frecuente

Sonido Mute / Unmute:

$ amixer set Master on | off

Listado de redes inalámbricas:

$ iwlist INTERFACE scan

P.ej. $ iwlist wlan0 scan | grep ESSID

Reemplace cadenas a través de múltiples archivos:

sed -i ‘s / OLD / NEW / g’ * .txt

Si usted es alérgico a las expresiones regulares, puede utilizar una herramienta de “reemplazo” menos potente.

SSH inversa:
Es útil cuando desea permitir que alguien del mundo exterior ingrese a SSH en su red local protegida con cortafuegos (sin IP pública). Úsalo con precaución.
SSH desde la computadora portátil local al host remoto:

$ ssh -C -g -R: $ REM-PORT: 127.0.0.1: 22 $ REM-HOST

Ahora, desde cualquier lugar, si desea realizar una conexión a REMOTE-HOST: REMOTE-PORT, se conectará a la red local (desde la oficina a su computadora portátil conectada a la red doméstica).

$ ssh $ REM-HOST -p $ REM-PORT

Comandos de directorio para usuarios de la consola:

pushd Empuje el directorio actual para apilar. Puede empujar múltiples direcciones.
Popd chdir a la parte superior de la pila.
cd – chdir al directorio anterior.

También eche un vistazo a wcd y autojump, puede cambiar a dir en función de los nombres de archivos, patrones coincidentes o marcadores.

Edición con teclas de Readline:
La biblioteca Readline proporciona GNU Emacs o Vi como enlaces de teclas. La cantidad de paquetes, como GNU bash y ncftp, utiliza libreadline para CLI y la finalización automática. Puedes hacer trucos increíbles con la interfaz de línea de lectura si recuerdas algunos golpes de tecla Emacs of Vi de GNU.

Aquí solo voy a enumerar los golpes de tecla de Emacs de GNU .. El modo Vi probablemente lo hará más lento. No vi bashing 😉

BASIC:

Ctrl + a Ir al principio de la línea.
Ctrl + e Ir al final de la línea
Ctrl + f Ir a la derecha un carácter.
Ctrl + b Ir a la izquierda un carácter.
Ctrl + p Ir a la línea anterior (“arriba”) (solo funciona en áreas de texto de varias líneas).
Ctrl + n Ir a la siguiente línea (“abajo”) (solo funciona en áreas de texto multilínea).
Ctrl + k Borrar al final de la línea
Ctrl + y pega desde el búfer.
Ctrl + u Borrar toda la línea
Ctrl + w Borrar palabra, izquierda.
Ctrl + h Eliminar carácter, izquierda (retroceso).
Ctrl + d Eliminar carácter, a la derecha.
Ctrl + _ Deshacer.
Ctrl + t Char swap.
Ctrl + c Cancelar

Teclas avanzadas:

Alt +. Última palabra del comando anterior. Puedes golpear varias veces.
Alt + u / d / c Caso arriba / Caso abajo / Capitalizar.
Ctrl + r Invertir búsqueda de historial.
Alt + { Auto completar comodín expr de los contenidos de directorio actuales
Alt + < / > (<) Inicio, (>) fin de la historia.
Alt + NUM comando de repetición. Por ejemplo: Alt + 13 seguido de ‘e’ imprime 13 ‘e’s. También puede prefijar comandos. Alt + 4, Ctr + d borra 4 caracteres hacia adelante. Alt + 4, Ctrl + h borra 4 caracteres hacia atrás. La parte divertida es que puedes usar números negativos. Alt + -4, Ctrl + d borra 4 caracteres hacia atrás (comandos negativos).

También descomenta lo siguiente en tu .bashrc. Permitirá la finalización automática sensible al contexto

si [-f / etc / bash_completion] &&! shopt -oq posix; entonces
. / etc / bash_completion
fi

Agregue estas líneas a su ~ / .bashrc para el comando pdfinvert. Gira los documentos PDF en su lugar a 180 grados. Debe tener instalado el paquete pdftk.

pdfinvert ()
{
si [-z “$ 1”]; entonces
echo “Uso: pdfinvert FILE.PDF”
más
pdftk “$ 1” cat 1-endD salida “$ 1.bak” && \
mv -f “$ 1.bak” “$ 1”
fi
}

Readline incluso tiene un archivo de inicio. Es bastante potente. Siga la URL:
http://cnswww.cns.cwru.edu/php/c

Readline para aplicaciones basadas en Gnome / GTK:
Si está utilizando el escritorio de Gnome, pruebe este comando. Todas las aplicaciones GTK + responderán a sus pulsaciones de tecla Emacs de GNU. gconftool-2 agrega permanentemente esta configuración a su base de datos de configuración de Gnome (registro). Los cambios se aplican al instante sin necesidad de reiniciar la aplicación.

$ gconftool-2 –set / desktop / gnome / interface / gtk_key_theme Emacs –tipo cadena

Línea de lectura para intérprete de Python:
Puede activar la línea de lectura dentro del intérprete de Python y las funciones de tabulación completa. También puedes probar ” bpython ” o ” ipython ” alternativamente.

$ python
>>> importar rlcompleter, readline
>>> readline.parse_and_bind (‘tab: complete’)

Línea de lectura para GNU Guile Intérprete:
Puede activar readline dentro de las funciones de intérprete de guile y de tabulación completa.

$ guile
guile> (módulos de uso (ice-9 readline))
guile> (activar-readline)

Readline para Ruby Intérprete:
Puede activar readline dentro de las funciones de intérprete de Ruby y de tabulación completa.

$ irb
irb (main): 001: 0> requiere ‘irb / completed’
=> verdadero

Línea de lectura para la gestión de paquetes APT:
Instale shell APT interactivo capaz de readline en Debian, Ubuntu y clones.

$ apt-get install aptsh
$ aptsh

Trucos GNU Emacs relativamente desconocidos:
GNU Emacs es un sistema operativo en sí mismo. Listado de tesoros de emacs será interminable.
Copia de corte rectangular: C-DEL región de marca, Cx rk – región de corte rectangular, Cx ry – región de inserción rectangular.
Ch b : describe los enlaces de teclas y sus funciones específicas del modo actual.
CUALQUIER CLASIFICACIÓN PARCIAL, Ch – Describe posibles terminaciones. Por ejemplo prueba, Cx r, Ch.
Ch f – Describir la función de emacs.
Mx apropos-command : lista las opciones de configuración para los comandos que coinciden aproximadamente.
Cx Ce – evalúa la expresión del punto precedente dentro de un búfer.
CMx – evaluar la expresión en el punto.
Intenta evaluar esta cadena ‘(+ 99 24 444)’  
Mx flyspell-buffer – sobre la marcha del corrector ortográfico.
Mx global-font-lock-mode – para cambiar el color de la sintaxis.
Mx wdired-change-to-wdired-mode : cuando esté en el modo de listado de directorios, intente este comando. Podrás editar nombres de archivos y directorios como texto. Incluso encontrarlos y reemplazarlos. Cuando hayas terminado, simplemente presiona Cx Cs para aplicar los cambios. Utilizo esta función para editar de forma masiva los nombres de los archivos de música en combinación con id3tool.
. Archivo de inicio de emacs : las siguientes variables permiten que Emacs administre los archivos de respaldo en un directorio personalizado.

(conjunto de variables personalizadas
‘(copia de seguridad por copia t)
‘(copia de seguridad mediante copia cuando está vinculado)
‘(backup-directory-alist (quote ((“. *”. “~ / .emacs-backup”)))
‘(eliminar versiones antiguas t))
(menu-bar-mode nil) ;; ahorra espacio en la barra de menú
(modo de visualización de tiempo) ;; muestra el tiempo siempre en la barra de estado

Si nada funciona, al menos recuerda Cx, Cc para apagar con gracia GNU Emacs ;-).

Primero, sugiero usar bash en lugar de cualquier alternativa como tcsh, fish o zsh . Estas son buenas alternativas, pero bash es la opción predeterminada en la gran mayoría de los sistemas Linux y otros sistemas Unix modernos y derivados (incluidos los sistemas MacOS X y * BSD). No lo aprendas simplemente. No lo uses solo. MAESTRO BASH !

También master vi (por el cual me refiero principalmente al subconjunto compatible con vi de vim ).

Eres un fan de emacs . Multa. Puedes vivir en emacs . Pero si va a pasar una cantidad significativa de tiempo en cualquier tipo de indicador de comando de Linux, entonces es probable que esté involucrado en la administración u operación de muchas máquinas Linux o instancias de máquinas virtuales en un clúster. (Se trata principalmente de los detalles administrativos y operativos donde le importa si se trata de Linux en comparación con cualquier otro sistema operativo similar a Unix).

Si se está moviendo entre una multitud de sistemas, tener que detenerse y asegurarse de que las herramientas como emacs o zsh estén instaladas le costará mucho tiempo. Puede invertir su tiempo en la personalización de los sistemas (y cualquier infraestructura que exista para automatizar dicha personalización) … y probablemente debería hacerlo. Pero también puedes invertir parte de tu tiempo en adaptar nuestras habilidades para que te sientas muy cómodo usando el shell predeterminado y el editor predeterminado más rápido.

Si encuentra algún sistema que inicia nano o algún otro editor cuando ejecuta comandos que intentan invocar automáticamente editores, a continuación, agregue: export EDITOR = $ (which vim) (o cual vi) … a su entorno / perfil.

Combina estas dos sugerencias anteriores. Use set -o vi con bash para establecer su línea de comandos y el historial de edición de enlaces clave en un subconjunto de enlaces vi . También me gusta agregar bind Cl: clear-screen Ci: complete … para recuperar un par de configuraciones de la configuración de bash predeterminada (modo emacs ).

También: use el comando fc (el “comando de reparación”) (está en bash , shell Korn y probablemente zsh) .

fc lanza su editor preferido para permitir la edición en pantalla completa de algún comando o rango de comandos de su historial.

Esto es particularmente útil cuando se utiliza cortar y pegar desde navegadores web, otras ventanas de terminal y editores con comandos complejos. (Con frecuencia, tiene que copiar varios extractos diferentes de dichas fuentes … y hacerlo con operaciones separadas para cada uno es tedioso y requiere mucho tiempo).

Con fc , simplemente haga una “copia descuidada” de todo el pasaje que contiene los diversos fragmentos de texto que necesita y todo el texto que desea eliminar. La emisión de un comando como:

fc for [Enter]

… pegar es todo el desorden y luego use sus comandos de edición y macros favoritos para formular el resto de su comando. (En este ejemplo, sería su comando más reciente y probablemente estaría pegando en una lista de objetivos a iterador, y un cuerpo de comandos para ejecutar en cada uno, por ejemplo).

Cuando guarda y sale … el comando se ejecuta automáticamente por su shell.

Obviamente, cuando los cambios son simples, entonces puede guardar las pulsaciones de teclado utilizando las diferentes aplicaciones antiguas compatibles con csh . operadores de historial, incluido ^ (por ejemplo, cambiar algo como foo a bar en el comando más reciente usando ^ foo ^ bar [Intro] ). Pero si pasa mucho tiempo haciendo comandos ad hoc, complejos, multilínea, … fc no puede ser vencido

Un patrón de concha común que uso va algo como esto:

d = ‘x xxx xxx …
yyy yyyy …
z zzzz zzzz …

echo “$ d” | mientras leía hfr; echo echo__algo $ h –someswitch “$ f” –otros interruptores $ r; hecho

En otras palabras, use una variable de shell para contener algunas líneas de texto, cada línea que contiene algunos argumentos (todos preparados generalmente en mi editor en otra ventana, generalmente con una base de datos creativa u otras búsquedas, etc.). Luego, realice una iteración sobre aquellos que completan una plantilla de comando con mis nombres de host, comandos y conmutadores ssh , etc. Lo ejecuto una vez y miro la salida para ver si los comandos generados se ven bien. Después de eso, puedo usar ^ do echo ^ do … para volver a emitir el mismo comando, pero en realidad para hacer algo en lugar de simplemente inspeccionar cómo se ve la representación de la plantilla resultante.

Un truco es que puede almacenar una cantidad significativa de texto arbitrario en una variable de shell (fácilmente sobre 100K) y usar eso en lugar de archivos temporales para la mayoría de los propósitos. Puede iterar sobre las líneas y analizarlas en listas de variables utilizando el | mientras leía xyz; hacer …; patrón hecho Al analizar (separando las líneas en campos en los que asociar las variables (x, y, z, aquí), se usará la configuración IFS de su shell (por lo que manejará archivos triviales separados por comas o delimitados por dos puntos, por ejemplo). El comando de lectura respetará cualquier cita en la línea de entrada (de acuerdo con las reglas normales de comillas y escapadas del shell). Además, todos los contenidos restantes en la línea se asignarán a la última variable de la lista.

En general me refiero a este último patrón: | mientras se lee …; hacer… .; hecho como el pipemill modelo. Estás escribiendo código para “fresar” sobre la salida de una tubería. Es un ejemplo muy simple del patrón “productor-consumidor” y es el patrón de scripting de shell más flexible que he encontrado.

También puedes hacer cosas como: ifconfig -a | egrep ‘Link | inet’ | mientras lee iface x; lee xax; do echo $ iface $ {a ## *:}; hecho para leer la primera y la segunda línea de cada descripción de la interfaz desde la salida de ifconfig -a (la expresión regular de egrep se establece en un par de patrones que solo aparecen en la primera y la segunda línea respectivamente). Así que leemos cada uno de esos en nuestro bucle while, usando la variable x repetidamente para “tirar” los campos que no nos interesan. Luego, solo mostramos el nombre de la interfaz desde la primera línea y la dirección IP desde la segunda línea. (eliminando las cosas hasta el: en ese campo usando una sustitución de parámetro bash ). Este es un ejemplo trivial, pero muestra que el pipemill no se limita simplemente a consumir insumos orientados en líneas individuales para cada trabajo. También puedes tirar una línea de cabecera usando algo como: ps laxwww | {leer x; mientras se lee xup ppid xxxxx state xx cmd args; … hecho; } … Aquí tiramos la línea del encabezado impresa por ps y tomamos solo las columnas que nos interesan (usuario, PID, PID principal, el estado del proceso, el nombre del comando o argv [0] y la lectura del comando argumentos. Esto es dar para encontrar zombies y matando a sus padres por ejemplo).

La siguiente sugerencia de productividad mejora lo que ya he dicho. Use la pantalla GNU (Pantalla GNU – Proyecto GNU – Fundación de software libre) … o tmux (tmux). Recomiendo el primero por la misma razón que recomiendo a bash sobre sus alternativas. La pantalla GNU se instala de forma predeterminada en la mayoría de los sistemas Linux y otros sistemas modernos similares a Unix. Sin embargo, esta sugerencia tiene menos peso ya que normalmente solo estará ejecutando el multiplexor de consola de texto ( pantalla o tmux ) en su estación de trabajo local o en un cuadro de salto preferido o sistema de “torre de control”.

La ventaja de estos sistemas es que puede mantener una sesión persistente con todas sus sesiones de shell, conectado a varios sistemas diferentes y ejecutando varios programas por todas partes. Puede separar, volver a adjuntar, e incluso permitir que otros se conecten y compartir su sesión (obviamente, solo sus colegas más confiables para su sesión principal, aunque también puede coordinar para ejecutar sesiones de enlace separadas según sea necesario). La pantalla GNU , en particular, también tiene algunas funciones avanzadas de búsqueda de desplazamiento hacia atrás y funciones de macro-corte y pegado para el teclado.

En mi patrón de uso diario, mantengo un editor de “notas” en mi primera ventana de pantalla . Ejecuta vi con una macro para insertar la marca de fecha / hora actual con una sola pulsación de tecla ([F8] en mi caso). Casi siempre trabajo en la parte inferior del archivo y lo dejo crecer arbitrariamente. Cada vez que salgo del script de envoltorio, me envía una copia. Utilizo esto para la mayoría de los casos en los que usaría fc (como se describe anteriormente) … pero solo dejo el contenido (notas para el futuro) y pego los resultados en mis otras ventanas para ejecutar como comandos, etc. Cuando confirmo cambios en git . Pego la salida del registro de git en mis notas; cuando estoy trabajando en un ticket de Jira, pego la URL en mis notas (donde puedo volver, haga clic con el botón derecho del mouse y luego recupere eso). Cuando edito un archivo en el sistema de producción (si no está bajo algún tipo de git u otro control de versión), pego una copia en mis notas (y generalmente también en un comentario de Jira). Cuando uso un panel de control basado en la web o trabajo en algo de PagerDuty o de cualquier front-end de Nagios ( Check_MK, Thrux, Opsview) basado en la web , pego las URLs ReSTful en mis notas.

La pantalla Gnu usa vi- keybindings para la mayoría de sus operaciones de búfer de desplazamiento y características similares de forma predeterminada. Así que usarlo también se basa en los mismos principios que mencioné anteriormente. Domine vi y use esos enlaces en su shell y en cualquier otro lugar que las bibliotecas de readline lo permitan (a través de la configuración ~ / .inputrc , por ejemplo). Los habilito en iPython también.

También utilizo con frecuencia iPython para mezclar datos en alguna forma que pueda usar para todo este otro trabajo. Por ejemplo, en mi contrato actual, mi jefe termina con varias hojas de cálculo de Excel, de las que necesita extraer datos. Normalmente los exporto a .CSV, los leo y los analizo en una sesión interactiva y escribo los resultados como texto. En un caso reciente, tuvo versiones de la misma hoja de cálculo (el mes pasado y la actual) y quiso saber qué hosts se agregaron o eliminaron de uno a otro. Solo toma un par de minutos leer ambos, extraer esa columna de cada uno, almacenar cada uno en un conjunto de Python () y luego tomar las diferencias en cada dirección y finalmente imprimir los resultados ordenados de cada uno (pegarlos en mis notas y en la e (Respuesta de correo para él). En otro caso, en una larga hoja de cálculo que enumera todos los incidentes de inactividad del servidor en nuestros grupos de producción durante los últimos tres meses y quería saber qué sistemas aparecen con mayor frecuencia en esa lista. (Esto es, básicamente, lo que obtendría canalizando solo la parte relevante a través de sort | uniq -c | sort -nr | head -n XX … pero, en este caso, lo hice utilizando las colecciones Python. .most_common () método). (También utilicé el comando % save de iPython’s para guardar esa sesión y convertir el historial en un archivo de script para que pueda reutilizarlo de ahora en adelante con datos similares).

En otro caso, utilicé datos de una tabla de texto ([Tab] -delimitado en este caso) para generar los 40 o más comandos necesarios para crear un nuevo grupo de clústeres. Las columnas de la tabla eran nombres de host (que generé utilizando cadenas de patrones con números interpolados), ID de imagen de OpenStack e ID de “sabor” (como AWS AMI y designaciones de tipo), así como algunos datos de redes y otros parámetros. Simplemente interpoé los campos de cada fila en un comando de inicio de nova (análogo al comando de ejecución aws ec2 ) y escribí los resultados en un archivo. Luego adjunté el archivo al ticket de Jira y lo ejecuté desde el entorno adecuado. (Sí, gran parte de la edición también había pasado por mi archivo de notas).

El hecho de que mi script esté adjunto al boleto de Jira da una “declaración de trabajo” completamente inequívoca para una revisión posterior y fue útil cuando se me pidió que cambiara la capacidad de uno de los tipos de clúster (pude simplemente pegar una copia de las líneas relevantes de mi secuencia de comandos en una nueva secuencia de comandos, busque y reemplace con el “sabor” más grande: elimine las instancias antiguas y gire sus reemplazos. Agregar o reemplazar nodos también es fácil para cualquier persona en el equipo porque tienen los comandos exactos fácilmente adjunto. La construcción de un entorno completamente nuevo (la preparación para una región diferente) es igualmente fácil.

Todas estas prácticas de flujo de trabajo trabajan juntas. Me da tiempo para divertirme en quora mientras me veo productivo. 🙂

Hay ocasiones en que una aplicación se descompone y deja de responder y no se cierra incluso cuando hace clic en el botón Cerrar. El ennegrecimiento ocasional de la pantalla indica un uso intensivo de la CPU. Este problema surge con bastante frecuencia si no tiene la costumbre de cerrar aplicaciones y tiene docenas de pestañas de Chrome abiertas en cualquier momento del día mientras trabaja en una computadora tonta.
Y su top se ve similar a esto:

En este escenario, una utilidad simple llamada ‘xkill’ es útil. Xkill es parte de las utilidades X11 preinstaladas en Ubuntu y una herramienta para terminar el mal comportamiento de los clientes X o los programas que no responden.

Simplemente presione Alt + F2 para ingresar un comando y escriba ‘xkill’,
y su puntero cambia a una ‘x’. La pantalla de tu computadora congelada se convierte en un juego de contraataque, donde derribas los programas atascados apuntando con el puntero “x” hacia ellos y disparándolos.

Esto ahorra mucho tiempo, y muchas veces, ahorra el esfuerzo de asfixiar la computadora y reiniciarla, perdiendo todos los otros programas junto con ella.

Puedes muy bien crear un atajo de teclado para el mismo. Aquí está cómo hacerlo (Fuente: askUbuntu):

  1. Escriba el teclado en el Dash de Unity y haga clic en el icono. Seleccione la pestaña de accesos directos.
  2. Allí, desplácese hasta la sección de accesos directos personalizados y haga clic en el botón +
  3. Ahora nombre su acceso directo algo y deje que el comando sea xkill y luego haga clic en Aceptar.
  4. Finalmente, haga clic en el acceso directo de xkill y presione el combo de teclas deseado para asignarle un acceso directo y eso es todo (me gusta Ctrl + Meta + X).
  5. Al presionar el método abreviado del teclado, se activará la utilidad siempre que lo necesite.

Solo presiona Ctrl + Meta + X, y te convertirás en un cazador de zombies.

Estos son algunos de los trucos. Solo menciono los comandos, puedes encontrar detalles sobre los comandos en las páginas de manual 🙂

Transfiriendo archivos sin ftp o scp:
nc -l -p 1234 | descomprimir -c | tar xvfp
Y en el servidor de envío ejecute:
tar cfp – / some / dir | comprimir -c | nc -w 3 [destino] 1234

Sin contraseña ssh:
ssh-keygen -t dsa -C [correo electrónico protegido]
# Ingrese una contraseña para su clave. Esto coloca la clave secreta en ~ / .ssh / id_dsa y la clave pública en ~ / .ssh / id_dsa.pub. Ahora vea si tiene un ssh-agent en ejecución en este momento:
echo $ SSH_AGENT_PID
# La mayoría de los gestores de ventanas lo ejecutarán automáticamente si está instalado. Si no, comience uno:
eval $ (agente ssh)
# Ahora, dile al agente acerca de tu clave:
ssh-add
# e ingrese su contraseña. Tendrá que hacer esto cada vez que inicie sesión; Si # estás usando X, intenta agregar
SSH_ASKPASS = ssh-askpass ssh-add
# a su archivo .xsession. (Es posible que necesite instalar ssh-askpass.)
ssh-copy-id -i ~ / .ssh / id_dsa.pub [correo electrónico protegido]
#Es una forma más elegante de hacer lo que hace la copia de la clave pública al archivo #server: ~ / .ssh / authorized_keys.
# Ahora, para cada servidor en el que inicie sesión, cree el directorio ~ / .ssh y copie el archivo # ~ / .ssh / id_dsa.pub en él como ~ / .ssh / authorized_keys. Si inició el ssh- # agent a mano, mátelo con
ssh-agent -k
# cuando se desconecta.

Eliminar los binarios suid:
busque / -perm +6000 -type f -exec ls -ld {} \; > setuid.txt &
#Esto creará un archivo llamado setuid.txt que contiene los detalles de todos los
# archivos coincidentes presentes en su sistema. Para eliminar los bits de s de cualquier herramienta.
#que no usas, escribe:
chmod como programa

Copia de seguridad de su sector de arranque:
dd if = / dev / hda of = bootsector.img bs = 512 count = 1
dd if = bootsector.img de = / dev / hda

¿Dónde se montó esa unidad ?:
dmesg grep SCSI
#Esto filtrará las especificaciones de unidad reconocidas de la salida dmesg. Probablemente subas un texto como:
Dispositivo SCSI sda: 125952 sectores hdwr de 512 bytes (64 MB)

Desmontar unidades ocupadas:
lsof + D / mnt / windows

Accede a tus programas de forma remota:
X11 Adelante sí
ssh -X 192.168.0.2 gimp

Tomando una captura de pantalla sin X:
capítulo 7; dormir 2; import -display: 0.0 -window root sshot1.png; chvt 1;

Buscando los archivos más grandes:
ls -lSrh

Truco rápido para compartir archivos (Comparte uno o más archivos):
Si desea compartir un archivo o carpeta de su directorio actual en su red local, puede crear rápidamente un servidor web para este propósito. Todo lo que necesita es Python instalado en su sistema. Una vez que Python está instalado, esto es lo que tienes que hacer:
$ python -m SimpleHTTPServer
El comando anterior iniciará un servidor web HTTP básico en el puerto 8000 de su sistema.
Puedes verificarlo escribiendo lo siguiente en tu navegador web:
http: // localhost: 8000 /
Por lo tanto, otros usuarios en su red pueden descargar fácilmente los archivos requeridos desde su servidor web.

Por último, pero no menos importante, viendo Star Wars en el terminal de Linux:
$ telnet towel.blinkenlights.nl

  • Aprenda lo que el man , la info y el -h/--help en la mayoría de los casos.
  • Aprende qué significa el número dentro de algo como ls(1) o perror(3) .
  • Obtenga zsh(1) y personalícelo de modo que la finalización de tabulación funcione de la manera que desea (puede ser mucho más potente que bash(1) ), y active la opción que le permite tabular completamente las opciones de programas. Use Mq y Cr extensivamente en el shell (el primero inserta el comando que se está escribiendo en ese momento en una pila y le da un nuevo aviso, luego vuelve a mostrar el antiguo comando en el indicador cuando sale el siguiente comando que ejecuta, y el segundo le permite buscar hacia atrás a través de su historia). Explore todas las opciones de zsh(1) , hay demasiadas opciones importantes para enumerar aquí.
  • Obtenga información sobre gpg-agent(1) , ssh-agent(1) , keychain(1) , .authinfo , .zshrc .
  • Aprenda a usar vi(1) para ediciones rápidas. Aprende que vim(1) tiene K limitado a !man . Aprenda a usar emacs(1) y sus modos inferiores ( Mx eshell es bueno, al igual que Ch i y Mx man ) para largas secuencias de investigación y configuración.
  • Aprende a escribir pequeños programas para hacer cosas por ti. Esto podría ser vim(1) o emacs(1) macros, combinaciones de sed(1) , awk(1) , grep(1) y perl(1) una sola línea o shell scripts. Aprenda a escribir un bucle for y un bucle while en el shell, y exactamente cómo funcionan y [[]] en los scripts de shell, y cuáles son las diferencias entre los distintos shells ( csh(1) / bash(1) / etc. ).
  • Use pgrep(1) lugar de ps aux | grep | grep -v grep ps aux | grep | grep -v grep ps aux | grep | grep -v grep .
  • Encienda usted mismo la opción “NOPASSWD” de sudo(8) (vea sudoers(5) ).
  • Almacene sus archivos de configuración (“archivos de puntos”) en el control de código fuente y realice una copia de seguridad en algún lugar (github funciona) para que cuando vuelva a instalar, pueda simplemente git clone y volver a estar en funcionamiento.
  • Instale un servidor DNS de almacenamiento en caché ( unbound(8) , dnsmasq(8) o djbdns(8) ), y tal vez un proxy HTTP de almacenamiento en caché ( polipo(1) ).
  • Donde sea posible, mantenga sus manos en el teclado y no toque el mouse. El administrador de ventanas y los accesos directos a aplicaciones son muy importantes, al igual que aprender a hacer todo lo que pueda desde la línea de comandos.

Hay un poco de finalización de Bash que rara vez veo mencionada, pero me resulta tan útil que no puedo vivir sin ella. En el indicador de Bash, puede escribir el comienzo de un comando, al menos un carácter y tantos más que desee, y luego presionar “Re Pág.” Para desplazarse a través de cada comando que haya almacenado en su historial de Bash que comienza con ese personaje / esos personajes Por ejemplo, digamos que a menudo usa cd de su directorio de inicio para ir a un directorio en particular bajo varias capas de anidamiento, pero no lo suficiente como para justificar la creación de un alias o un script para él (por ejemplo, ha estado usando mucho ese directorio). recientemente, pero no se imagina que tendrá que seguir haciéndolo indefinidamente). En mi caso, uno que he usado bastante a menudo recientemente es:

cd .local / share / Steam / SteamApps / common /

Así que escribo “cd”, luego presiono “PageUp” hasta que aparezca ese comando específico. Es mucho más rápido y fácil que otras formas de completar, a menos que lo haya usado recientemente. Es posible que su distribución ya lo tenga configurado de esa manera. De lo contrario, debe agregar lo siguiente a / etc / inputrc (asegúrese de que las teclas “PageUp” y “PageDn” no estén asignadas a otra cosa):

“\ e [5 ~”: historial de búsqueda hacia atrás
“\ e [6 ~”: historial de búsqueda hacia adelante

Y no sé qué tan hábil eres de un usuario, pero una buena respuesta a tu pregunta es que la mayoría (o tal vez, no sé) los administradores de ventanas asignan “Ctrl + Alt + Esc” a xkill, que es realmente útil si tiene un software defectuoso, especialmente uno que está en pantalla completa, demasiado atrasado para que pueda hacer mucho con él y simplemente quiere matarlo. Advertencia: a veces esto solo elimina el extremo frontal, así que siempre verifique “ps -A” desde la línea de comandos o su administrador de procesos gráfico favorito para asegurarse de que no está dejando atrás algún proceso para ocupar su memoria y los ciclos de la CPU. Ah, y si llamas a xkill (tu cursor se convertirá en una calavera y huesos cruzados … o tal vez solo una X … Creo que FVWM solía hacer eso) en un accidente o cambia de opinión y no quieres usarlo, pulsa Esc para recupera tu cursor normal

Lamentablemente, cada vez es menos utilizable, ya que ciertas aplicaciones ignoran la forma en que X hace las cosas para hacerlo más parecido a Windows: aprender a usar tanto el portapapeles como el pegado de selección. La mayoría de las aplicaciones aún obedecen a esto, así que es bueno saberlo. Si has usado Windows, sabes cómo funciona un portapapeles. Pero también puede pegar rápidamente algo de texto simplemente seleccionándolo, luego haciendo clic con el botón central (haciendo clic en la rueda del mouse, o con los botones izquierdo y derecho del mouse al mismo tiempo si Chord-Middle está habilitado) donde desee pegarlo. El texto seleccionado no reemplaza lo que está en el portapapeles a menos que lo coloques allí específicamente (con una combinación de teclado o copia usando un menú), por lo que es casi como tener dos portapapeles (pero no del todo).

  • ctrl-c y ctrl-d son tan vitales para saber en linux como ctrl-alt-delete en windows
  • Al principio, joder “man” y google para tutoriales. Una vez que sepa lo que está haciendo, use man y no moleste a n00bs diciéndoles a rtfm.
  • use screen o tmux si alguna vez inicia sesión en una máquina de forma remota; estas cosas son increíbles. Utilice estos en lugar de nohup, etc.
  • aprende vim, emacs, o si debes nano – vim plus%! más las herramientas posix es, en última instancia, cómo cambié a Ubuntu desde Windows
  • aprenda cómo encadenar comandos con |, 2> & 1 y>
  • aprenda cómo preparar arroyos con cola, cabeza, más, menos, gato, etc., especialmente con respecto a todos los pequeños interruptores fáciles de pasar por alto. Por ejemplo, ¿sabía que cat -n se puede usar para agregar números de línea?
  • aprenda cómo empujar trabajos en segundo plano o en primer plano (fg y bg, ctrl-z);
  • aprenda regex y úselo con grep, o posiblemente con algo más sofisticado (como python / perl / etc.);
  • aprender awk básico y / o corte para editar secuencias;
  • lea un tutorial de blindaje para evitar que su caja sea hackeada – versión de velocidad, no ejecute ssh el 22, no permita el inicio de sesión como root, no use un nombre de inicio de sesión que la gente espera, use las teclas ssh si sabe cómo y de otra manera una contraseña simple de> 8 caracteres, ejecute la menor cantidad de servicios / demonios que pueda, ponga su caja detrás de un enrutador y use ssh tunneling para abrir el acceso a cualquier cosa que no sea ssh.
  • Realice copias de seguridad regularmente, especialmente si alguna vez usa rm -rf. Mi solución personal en estos días implica ejecutar Dropbox (que tiene un cliente de Linux) y un script cron que ejecuta rsync
  • aprender cron. Lo pospuse por muchos años pero vale la pena.
  • si alguien le dice a ./configure && make && make install, intente no hacerlo. Si no se compila, detente ahí y prueba una herramienta diferente. Perderás tantos días de tu vida lidiando con códigos rotos, especialmente si NO eres un programador. sudo apt-get install ha cambiado mi vida en linux.
  • de manera similar, si alguien te dice que recompiles tu kernel, no lo hagas, estamos más allá de los días en que esto debería ser necesario
  • wget es increíblemente útil sobre el punto y haga clic dentro de un navegador web. lynx también puede tener secuencias de comandos, aunque cada vez es menos conocido.
  • cada distro es diferente; Encuentre un buen recurso para su configuración particular y consúltelo.

La gente ya mencionó CR para buscar la historia de bash.

La inserción debajo de la línea en ~ / .bashrc me resulta muy útil
exportación HISTSIZE = 32768

El historial de Bash puede contener 32768 elementos ahora.

ACTUALIZAR:
Me sorprende que muchas personas estén interesadas en este consejo. A continuación, presentamos algunos consejos adicionales sobre la gestión del historial de bash:

punta 1
====
Haga su ~ / .bash_history bajo git y haga una copia de seguridad en el repositorio privado de github. Los comandos que escribes en tu vida nunca se perderán.

Antes de confirmar el ~ / .bash_history, necesita un sistema único y limpiar los comandos un poco (por ejemplo, eliminar los que contengan menos de 5 caracteres).

Así que inserta la línea debajo de ~ / .bashrc. Ahora ejecuta el comando “cleanfile ~ / .bash_history” para limpiar el historial:

función cleanfile () {
si [-z “$ 1”]; entonces
echo “Uso: eliminar líneas duplicadas sin sortdt”
echo “cleanfile ~ / .bash_history”
más
local bkfile = “$ 1.backup”
# \ + no funciona en OSX sed
# Delte comandos cortos, eliminar comandos relacionados con git
sed ‘s / * $ // g;’ $ 1 | sed ‘/^.\{1,4\}$/d’ | sed ‘/ ^ g [nlabcdusfp] \ {1,5 \}. * / d’ | sed ‘/ ^ git [nr] / d’ | sed ‘/ ^ rm / d’ | sed ‘/ ^ cgnb / d’ | sed ‘/ ^ touch / d’> $ bkfile
# @ver Page on stack Overflow / questions / 11532157 / unix-removal-duplicate-lines-without-sort
cat $ bkfile | awk ‘! x [$ 0] ++’> $ 1
rm $ bkfile
fi
}

Tenga en cuenta que el guión anterior NO clasifica el historial. Ordenar la historia es una mala idea en la práctica.

En realidad uso el siguiente comando para hacer el trabajo:
cleanfile ~ / .bash_history; git add ~ / .bash_history; git commit -m ‘bash history’

punta 2
====
Esto es en realidad * NO HACER * consejo. Desactivo la cadena de marca de tiempo porque la marca de tiempo es una distracción en la pantalla cuando se busca el historial. Así que NO inserte debajo de la línea en su ~ / .bashrc :
export HISTTIMEFORMAT = “% m-% d:”

Gracias por recordar a Andrew Daviel. No deberías seguir mis instrucciones a ciegas. Siempre trabajo como desarrollador de Linux . Por lo general, me concentro en cómo reutilizar la línea de comandos lo más rápido posible. Todo lo que no esté relacionado con la codificación se considera ruido y se purgará.

Los administradores del sistema pueden tener diferentes vistas. La marca de tiempo se considera una parte crítica del registro del sistema para ellos.

Por favor, lea mi otro consejo con el pensamiento crítico.

punta 3
=====
CR busca en los últimos comandos. A veces tengo memoria vaga sobre un comando usado hace meses y quiero reutilizarlo .

Así que acabo de escribir:
historia | grep “keyword” | grep “keyword2”
Se muestra el ID de ese comando, digamos que es “9899”.

Luego simplemente escribe el siguiente texto para ejecutar ese comando:
! 9899

Hasta ahora no he revelado la punta todavía !

El truco es que rara vez reutilizo el comando antiguo sin editar. Así que inserta la línea debajo de ~ / .bashrc:
shopt -s histverify

entonces! 9899 insertará el comando en shell en lugar de ejecutarlo.

punta 4
====
El comando history se usa con tanta frecuencia por lo que es necesario asignar un alias para ~ / .bashrc:
alias h = historia

punta 5
====
Podría haber una mejor manera de buscar, filtrar el historial si usa percol de mooz (Masafumi Oyamada).

Usted podría “h palabra clave” para encontrar el comando y colocarlo en el portapapeles del sistema.

Pasos para instalar el percol:
1. descargue mooz / percol, ese paquete encontrará un directorio llamado percol, póngalo en ~ / bin /, también hay un programa python llamado percol, cámbiele el nombre a percol.py y colóquelo en ~ / bin / también.

2. inserte el código siguiente en ~ / .bashrc:

[$ (uname -s | grep -c CYGWIN) -eq 1] && OS_NAME = “CYGWIN” || OS_NAME = `uname -s`

función pclip () {
si [$ OS_NAME == CYGWIN]; entonces
putclip [correo electrónico protegido] ;
elif [$ OS_NAME == Darwin]; entonces
pbcopy [correo electrónico protegido] ;
más
si [-x / usr / bin / xsel]; entonces
xsel -ib [correo electrónico protegido] ;
más
si [-x / usr / bin / xclip]; entonces
xclip -selección c [correo electrónico protegido] ;
más
echo “¡Ni xsel ni xclip están instalados!”
fi
fi
fi
}

función h () {
# Invierta el historial, seleccione una línea, elimine los nuevos caracteres de línea y póngalos en el portapapeles
si [-z “$ 1”]; entonces
historia | sed ‘1! G; h; $! d’ | ~ / bin / percol.py | sed -n ‘s / ^ * [0-9] [0-9] * * \ (. * \) $ / \ 1 / p’ | tr -d ‘\ n’ | pclip
más
historia | grep “$ 1” | sed ‘1! G; h; $! d’ | ~ / bin / percol.py | sed -n ‘s / ^ * [0-9] [0-9] * * \ (. * \) $ / \ 1 / p’ | tr -d ‘\ n’ | pclip
fi
}

Aquí está el elenco de la pantalla:

Para Bash 4 (OSX use bash3), usar la siguiente configuración es suficiente (Cr se vuelve a enlazar),

bind -x ‘”\ CR”: READLINE_LINE = $ (history | grep “$ {READLINE_LINE}” | tac | ~ / bin / percol.py | sed “s / ^ * [0-9] * * // g” ) READLINE_POINT = ‘

punta 6
====
Coloque la configuración siguiente en ~ / .bashrc, que insertará el comando escrito en ~ / .bash_history inmediatamente después de que ejecute el comando:

PROMPT_COMMAND = “history -a” # update histfile después de cada comando

Vea la página en stackoverflow.com, la respuesta de raychi.

punta 7
====
percol.py te da una segunda oportunidad para filtrar el historial.

Por ejemplo, bash cli “xrandr -s 1024 × 768” se usa para cambiar a la resolución SVGA.

Pero también puede ingresar “xrandr -s 1024 × 768 # switch resolution vga”, las palabras clave después de “#” no se ejecutarán, pero se registrarán en ~ / .bash_history, así que cuando busque el historial de bash, “switch” y “vga” podría considerarse como un TAG. ya que perlcol.py admite la búsqueda de caracteres comodín, puede utilizar ambas palabras clave o cualquiera de ellas.

No significa que necesite comentar todos los clics en el momento, puede revisar y modificar ~ / .bash_history más adelante.

punta 8
====
Los comandos que contienen una ruta relativa no se pueden reutilizar porque deben ejecutarse en un directorio determinado. Excluyo estos comandos de ~ / .bash_history

Aquí está mi configuración en ~ / .bashrc para ignorarlos:
export HISTIGNORE = “cd [a-zA-Z0-9 _. *] *: mv [a-zA-Z0-9 _. *] *”

punta 9
====
Combina varias líneas de comandos en una sola línea porque es fácil de buscar

punta 10
====
Enfócate en lo específico y sigue mejorándolo durante mucho tiempo. Como he demostrado aquí para “bash history management”. Asegúrate de llegar al nivel de clase mundial. Entonces, ¡compártelo!

El punto clave es que la calidad del conocimiento que usted comparte determina la calidad que obtiene a cambio.


Obteniendo ayuda

  • man Haz esto como un hábito y aprende a usar al hombre.
  • ¿Cómo uso las páginas de manual para aprender a usar comandos?
  • whatis breve descripción del comando
  • type proporciona información sobre si el comando es shell incorporado, alias o ruta real del comando

  • Encontrando archivos

    • find | grep find | grep sintaxis más fácil de recordar si se busca un archivo
    • aprenda a usar find – muchas opciones de filtrado como nombre, tiempo, tamaño, profundidad dentro del directorio, etc. y opción -exec para pasar los archivos filtrados a otro comando
  • locate búsqueda más rápida de archivos que se actualizan en la base de datos
  • locate -b '\filename' Nombre de archivo exacto

  • Control de procesos

    • ps pgrep top , kill , free , etc
    • obtener htop si es posible

    Guarda tus pulsaciones

    • alias a='alias' alias el comando alias en sí mismo
    • a ls='ls --color=auto' Mejora visualmente la salida de ls
    • a grep='grep --color=auto' resalta el patrón coincidente
    • \command anular un alias, ejemplo – \ls
    • atajo útil para navegar ‘atrás’ la jerarquía
    • a b1='cd ../'
    • a b2='cd ../../'
    • a b3='cd ../../../'
  • ch() { whatis $1; man $1 | sed -n "/^\s*$2/,/^$/p" ; } ch() { whatis $1; man $1 | sed -n "/^\s*$2/,/^$/p" ; } funciones se pueden utilizar para crear sus propios comandos
    • Véase también esta mejor versión de shell script.

    $ ch () {whatis $ 1; hombre $ 1 | sed -n “/ ^ \ s * $ 2 /, / ^ $ / p”; }
    $ ch grep -l
    grep (1) – imprime líneas que coinciden con un patrón
    -l, –archivos-con-partidos
    Suprimir la salida normal; en su lugar, imprima el nombre de cada archivo de entrada del que normalmente tendría salida
    sido impreso El escaneo se detendrá en la primera partida.

    $ ch ls -v
    ls (1) – lista los contenidos del directorio
    -v tipo natural de (versión) números dentro del texto


    • chmod +x script.sh agregar permiso de ejecución
    • chmod -w -R evita la eliminación accidental de directorios (la opción -R garantiza que los subdirectorios también estén protegidos)

    • tail -q power.log timing.log > result.log guarda las últimas 10 líneas de ambos archivos sin nombre de archivo en result.log (la opción -q significa silencio)
    • head -n -2 report.log muestra todas las últimas 2 líneas de report.log
    • man grep | grep -i 'EXIT STATUS' -A 5 man grep | grep -i 'EXIT STATUS' -A 5 imprimirá una línea coincidente y 5 líneas después de contener las palabras ‘estado de salida’ independientemente del caso
    • grep -m 5 -i 'error' report.log imprimirá un máximo de 5 líneas que contienen la palabra error
    • find report -name '*log*' -delete eliminar todo archivo que contiene log en su nombre del informe y las subcarpetas
    • sort -bn numbers.txt -o numbers.txt numéricamente y sobrescribir el archivo con salida ordenada
    • sed -i 's/cat/dog/g' ¡busca y reemplaza texto y guarda el resultado en el mismo nombre de archivo! (Mucho mejor que tener que escribir un guión)

    • du -sh * | sort -h du -sh * | sort -h ordenar en formato legible por humanos
    • df -h muestra estadísticas de uso de todos los sistemas de archivos disponibles

    Aprenda al menos un lenguaje de scripting como Bash / Perl / Python
    Aprende editor de texto como Vim / Emacs / Sublime / Atom


    Enlaces de bonificación:

    • commandlinefu – también explora diferentes etiquetas como awk, grep, sed, etc.
    • hoja de trucos de bash
    • 50 comandos de uso frecuente con ejemplos.
    • trucos de linea de comando
    • learnbyexample / scripting_course – Una guía de referencia para la línea de comandos de Linux, Vim y Scripting

    Aprende vi y Emacs. Usted se sorprenderá de que puede operar y saltar fácilmente en shell con las combinaciones de teclas de ellos.
    Ejemplo:
    $:> cat data2 | sed ‘/ ^ $ / d’

    1. Para saltar al principio de la línea: C a
    2. Para saltar al final de la línea: C e
    3. Para volver un personaje: C b
    4. Para retroceder una palabra: M b
    5. Para avanzar un personaje: C f
    6. Para avanzar una palabra: M f
    7. Para eliminar el contenido desde la posición actual hasta el final de la línea: C k
    8. Deshacer: C /
    9. Para borrar caracteres debajo del cursor: C d
    10. Para borrar hasta el final de la palabra bajo el cursor: M d
    11. Para transponer el carácter bajo el cursor con anterior: C t
    12. Para transponer la palabra bajo el cursor con anterior: M t

    donde, C es la tecla Ctrl, y M es la tecla Alt.
    Si está utilizando el terminal en su distribución de Linux con la barra de menú presente, es posible que deba ocultar la barra de menú para que M f funcione. Para las distribuciones basadas en gnome, puede hacerlo mediante: gnome-terminal –hide-menubar

    Del mismo modo, si estás leyendo un documento largo,
    Ejemplo: cat / etc / passwd | Menos
    Puedes navegar en la página por

    • j o C n para bajar.
    • k o C p para subir.
    • Puede buscar algo por: / frase de búsqueda (tenga en cuenta que puede usar fácilmente las expresiones regulares en la búsqueda).
    • q para dejar de fumar.

    Yo tampoco soy un experto, pero oye, ¡aprender y dominar las expresiones regulares es muy divertido! sed, gawk, grep tienen un poder insondable. Tienen una capacidad impresionante para hacer una tarea compleja más rápido.

    Ejemplo:
    $:> aviso gato

    Esto es para informar al estudiante a continuación:
    GENTE
    que son detenidos.
    Por favor, no se moleste en asistir a ninguna clase a partir de ahora.
    En interés de * todos *.

    $:> gente del gato

    Ted
    Marshall
    Robin
    Barney
    Lirio

    $:> aviso gato | sed ‘/ PEOPLE / {
    r personas
    re
    } ‘
    O
    aviso de gato | sed ‘/ GENTE / r personas’ | sed ‘/ LIST / d’

    Esto es para informar al estudiante a continuación:
    Ted
    Marshall
    Robin
    Barney
    Lirio
    que son detenidos.
    Por favor, no se moleste en asistir a ninguna clase a partir de ahora.
    En interés de * todos *.

    Las posibilidades son infinitas.

    Uso del comando de búsqueda 🙂

    La sintaxis general del comando de búsqueda es la siguiente.

    #find [Directorio] [criterios]

    Directorio es donde queremos buscar
    Criterios es lo que estamos dando para buscar. Eg file name, user name, Inode number etc.

    The following command will search a file with file name file_name in current working directory.
    #find -name file_name

    http: //
    The default nature of the find is case sensitive. if u search for file abc, it will list only abc. Not ABC,Abc, abC.
    To make it case insensitive use “-iname” instead of “-name”

    #find -iname file_name

    The following command will search a file with filename file_name in /etc and its subdirectories.

    #find /etc -name file_name

    The following command will search a file with filename file_name in / and its subdirectories, ie the whole system.

    #find / -name file_name

    The following command will search for all the files & directories whose owner is randeep.

    #find / -user randeep

    The following command will search for all the files & directories whose owner is randeep and group is ibm.

    #find / -user randeep -group ibm

    The following command will search for all the files & directories whose owner is randeep or nibul.

    #find / -user randeep -o -user nibul

    The following command will search for all the files & directories whose owner is randeep and group is NOT hp.

    #find / -user randeep -not -group hp

    Find and Permissions
    Find command can be used for finding files with specific permissions.

    The following command will find the files and directories with 755 permissions.

    #find / -perm 755

    The following command will find the files and directories in which anyone can write.

    #find / -perm +2

    The following command will find the files and directories in which everyone can write.

    #find / -perm -2

    The following command will find the files and directories in which others can write.

    #find / -perm +o+w

    The following command will find the files and directories in which others can not write.

    #find / -perm +ox

    Find and file sizes
    Find can be used to find the files with specified size.

    The followng command will list the files with size 10M [9.5-10.5]

    #find / -size 10M

    The followng command will list the files with size less than 10M.

    #find / -size -10M

    The followng command will list the files with size greater than 10M.

    #find / -size +10M

    Find and Access times
    Find command can be associated with access times.

    A file has three kind of times.

    atime – access time. When file was last read
    mtime – modified time. When file was last modified.
    ctime – Change in metadata. When file metadata last changed.

    We can see the information about the above times using stat command.
    [ [email protected] ~]# stat abc.txt
    File: `abc.txt’
    Size: 0 Blocks: 0 IO Block: 4096 regular empty file
    Device: 802h/2050d Inode: 621459 Links: 1
    Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
    Access: 2010-10-28 16:17:15.000000000 +0530
    Modify: 2010-10-28 16:17:15.000000000 +0530
    Change: 2010-10-28 16:17:15.000000000 +0530
    [ [email protected] ~]#

    Following command will list the files which are accessed five days ago.

    #find / -atime 5

    Following command will list the files which are accessed less than five days ago.

    #find / -atime -5

    Following command will list the files which are accessed more than five days ago.

    #find / -atime +5

    Following command will list the files which are modified less than 10 days ago

    #find / -mtime -10

    Following command will list the files which are changed metadata less than 10days ago. Changing timestamp, permissions etc.

    #find / -ctime -10

    Following command will list the files which are newer than abc.txt

    #find -newer abc.txt

    Following command will list the files which are older than abc.txt

    #find -not -newer abc.txt

    Find and Execute
    We can execute commands on the result of find, on the flow.

    Suppose we want to take the backup of all the text files in the system. The following command will search for text files and copy each to the dir /text_files.

    #find / -name “*.txt” -exec cp {} /text_files \;

    The following command will search for configuration files and copy each to the dir /conf_files

    #find / -name “*.conf” -exec cp {} /conf_files \;

    The following command will search for the file with inode number 23453 and will delete it.

    #find / -inum 23453 -exec rm -rf {}\;

    Other options

    To search only in the partition where present working directory belongs to.

    #find / -xdev -name abc.txt

    To search for only the directories of name abc.

    #find / -type d -name abc

    To search for only the files of name abc.

    #find / -type f -name abc

    If you are looking for an old file its is better you use locate command. its fast.

    #locate filename

    if the database for the locate is old, updating it by

    #updatedb&

    if the locate command is not found, install the mlocate package

    #yum install mlocate

    You can get more details in the following link.
    http://Usage of find command in redhat linux rhel5

    Despite what Chen Bin says, I like having timestamps in bash history. I use HISTTIMEFORMAT=’%s ‘ which gives me one-second resolution should I need it. It’s useful for correlating actions with logfile entries and file timestamps, some time after the event.

    Setting “LogLevel VERBOSE” in sshd_config causes sshd to log key fingerprints in syslog. Then, since “ssh-keygen -l” will list fingerprints from an authorized_keys file, it’s possible to audit logins by key. Eg you might be able to tell not just which user ID was logged into, but which actual person logged in from which laptop.

    Keep all machines on UTC time and synchronized with NTP. That way, logfiles line up across machines and sites.

    If you keep using a particular directory, make an environment variable. I set W3 to my webserver document root (originally /usr/local/etc/httpd/htdocs in NCSA httpd), then use eg “vi $W3/index.html”.

    Learn to use “find”. Useful in forensics, eg
    “find -ctime -40 -ctime +31 -type f -exec ls -l {} \;” will find files that changed on disk between 31 and 40 days ago.

    On RedHat-derived systems, “rpm -V -qf `which top`” will tell you if /usr/bin/top has been tampered with (does not match the digitally-signed hash in the RPM database)

    No reinventes la rueda. Don’t build a program from source if you can install one using a package manager.
    If you do build a program from source, build it as a managed package.
    On RedHat Enterprise (CentOS etc.), use yum-priorities to prefer Redhat and EPEL repositories and ensure that your libraries don’t deadlock in dependency hell in a couple of months (if you are pulling in video codecs etc. from non-GPL repos).

    some usefull shell
    1 sudo !!
    !! exec your last command
    exec your last command with root permission.

    2 :w !sudo tee %
    in vim, it’ll save the file by root permission.
    Scene: you edited a file and saved it , when you found you didn’t have the permission , oh no, quit and opened it again with root ? no need. this would help you 。

    3 alias bk =’cd -‘
    `cd -` mean returning the last directory .
    it’s convenient to jump between two directories.

    4 ^foo^bar
    replace `foo` in the last command with `bar` and exec it

    5 cp filename{,.bak}
    back up the file quickly, just type less character.

    6 man ascii
    quick reference to ascii

    7 > file.txt
    create a new file, maybe better than `touch`

    8 du -cks * | sort -rn | head -n 10
    get the top 10 largest file in your current directory.
    it often happen to you that there isn’t enough space in your computer .

    9 ssh-copy-id
    help you to login without password.

    10 another way for ssh-login
    add in your .bashrc :
    “`
    function comm_put_ser()
    {
    user=$1
    ip_fix=$2
    port=$3
    passwd=$4
    sshpass -p”$passwd” scp -o GSSAPIAuthentication=no -q -2 -P $port $6 [email protected] $ip_fix.$5:~/
    }

    function comm_get_ser()
    {
    user=$1
    ip_fix=$2
    port=$3
    passwd=$4
    sshpass -p”$passwd” scp -o GSSAPIAuthentication=no -q -2 -P $port [email protected] $ip_fix.$5:~/$6 .
    }

    function alias_comm_cmd()
    {
    flag=$2
    user=$3
    ip_fix=$4
    port=$5
    passwd=$6
    user_flag=$7
    eval “alias c$flag$1$user_flag=’sshpass -p\”$passwd\” ssh -o GSSAPIAuthentication=no -q -2 -p$port [email protected] $ip_fix.$1′ ”
    eval “alias put$flag$1$user_flag=’ comm_put_ser $user $ip_fix $port \”$passwd\” $1 ‘ ”
    eval “alias get$flag$1$user_flag=’ comm_get_ser $user $ip_fix $port \”$passwd\” $1 ‘ ”
    }
    “`

    for example , if you want to login [email protected] with passwords “xxxxx”,
    just add the following to your .bashrc
    alias_comm_cmd 99 ”” root 10.1.1 xxxxx

    Now , login to the host
    type `c99`
    scp a file to it
    type `put99 yourfile`
    scp a file from it
    type `get99 yourfile`

    It is convenient if you have a lot of hosts to login, but it is not very safe .

    Here’s a subtle but powerful tip, in my estimation –

    You can create an entire directory tree with a single ‘mkdir -p’ command.

    I do this in userdata for EC2 spot instances that I spawn each night. I put the sendmail queues on the ephemeral disks, since they have fast I/O. I need to recreate the whole queue structure from scratch on each bootup, so:

    mkdir -p /var/spool/clientmqueue/qdir.0/{xf,qf,df}
    mkdir -p /var/spool/mqueue/qdir.0/{xf,qf,df}

    technically that could be made even more terse, now that I look at it:

    mkdir -p /var/spool/{clientmqueue,mqueue}/qdir.0/{xf,qf,df}

    I take no credit for this tip, it’s from a fantastic couple of pages on IBM’s site:

    UNIX tips: Learn 10 good UNIX usage habits

    Editar:
    Just to sweeten this up a little, here’s the super-duper mkdir for setting up sendmail queues:

    mkdir -p /var/spool/{clientmqueue,mqueue}/qdir.{0,1,2}/{xf,qf,df}

    and that creates

    /var/spool/
    clientmqueue/
    qdir.0/
    xf
    qf
    df
    qdir.1/
    xf
    qf
    df
    qdir.2/
    xf
    qf
    df
    mqueue/
    qdir.0/
    xf
    qf
    df
    qdir.1/
    xf
    qf
    df
    qdir.2/
    xf
    qf
    df

    And here’s one I used today to set up chroot bind:

    mkdir -p /var/lib/named/{etc,dev,var/{cache/bind,run/bind/run}}

    Suppose you start entereing a command in your terminal, but realize that you want to execute another command before this one… use Esc-q to put your current entered line on a stack and clear your command line. Once you entered a new command (which can be a blank line), the line which were placed in the stack will be pop’ed back onto your command line.
    (Works on Mac, probably Linux as well).

    Edit: This isn’t working for a lot of people. If you’re among them, check the comments. However, there might be another way:

    1. Enter the command which you want to postpone executing
    2. Press Ctrl+U
    3. Enter one or more commands
    4. Press Ctrl+Y to get the command you removed with Ctrl+U back.

    Install Guake Terminal , quick way to access your terminal by just pressing F12 .

    Usefull .vimrc config The ultimate Vim configuration

    Usefull .bashrc config The Ultimate Bashrc File

    Some of my bashrc functions

    1) The immediate command you would usually run once you cd into a directory is ls . So why don’t we use single command for it ?

    function cd() { builtin cd ${1:-$HOME } && ls;

    2) similary when you create a directory , you would cd into it . So why can’t we make into a single command ?

    function mkdircd () { mkdir -p ” [email protected] ” && eval cd “\”\$$#\””; }

    Here i have created a new command mkdircd for creating a directory and cd into it . If you want to use it with cd , then replace mkdircd with mkdir .

    Update-1

    Found this one useful for me , people who make much typos would like it . Mando
    “shopt -s cdspell”

    This command auto-correct when you use cd .

    # cd /etc/mall
    -bash: cd: /etc/mall: No such file or directory
    # shopt -s cdspell
    # cd /etc/mall
    # pwd /etc/mail

    You need to run this command each time when you open the terminal . So a handy trick is to enable it automatically when you open bash by adding this command to end of the .bashrc in your home directory .

    Update-2
    For person’s like me how’s lazy to find the process id and kill it using kill command, xkill is the simplest way.

    This command would bring a cross-hair cursor , now click on the window which you want to kill !!! BANG !!!

    Some funny commands possibly are man cat , man cut | cat | tail -1 , whereis cat , whois cat , man whoami . Two hands are required to handle your cat from keyboard. Use [CTRL] + [S] to stop running a bigger cat. Read the manual’s manual running man man command. Here are some very basic tips, not exactly time saving.

    cat shows things and echo write things with this direction >
    Por ejemplo,
    cat /etc/nginx/sites-available/default
    we use unix pipelining with cut, grep to filter out. But if I run :
    echo " " > /etc/nginx/sites-available/default
    it will empty the whole file. It might be a deserved action if you know. For server, always keep a backup of main files after and before tweaking with date stamp :
    cp default /path/to/backup/default_$(date +%F)


    Actually you can send email with curl :

    curl –url “smtps://smtp.google-email-example.com:465″ –ssl-reqd –mail-from ” [email protected] ” –mail-rcpt ” [email protected] ” –upload-file mailcontent.txt –user ” [email protected] :password” –insecure


    Most new users fear unix pipelining. Muy fácil. Suppose you want to get the header of my one blog for seeking HSTS header or whether there is any HTTP error.

    curl -I https://www.thecustomizewindows.com

    It is huge output.

    curl -I -s https://thecustomizewindows.com | grep “HTTP”
    It will return me :

    HTTP / 1.1 200 OK

    I added -s , you can test without -s. If I run:

    curl -I -s https://www.thecustomizewindows.com | grep “HTTP”

    Output will be :
    HTTP / 1.1 301 movido permanentemente


    If I want to wget and install WordPress, I can make it short :

    cd /usr/share/nginx/html && rm -r *
    wget http://wordpress.org/latest.tar.gz && tar -xzvf l*
    rm l* && cd w*
    mv * .. && cd ..
    rm -r wo*
    In the last line I used wo* because there are wp-content, wp-admin, wp-admin etc directories starting with w. I could shorten because I know there is only a default html file, what are directories after expanding. These are helpful for compiling from source code. We usually run ls to check what are there.


    The next is very useful to move any sql database. On the database server technically run on Linux servers for poor peoples like us who are not interested about Windows, suppose you have the backup in sql format (take it as file_name.sql ). On MySQL (or the fork of it), you can easily restore it if there is, suppose a blank database exists (your-database is example) :

    mysql -u root -p
    # mysql -u -p
    # mysql session will start with >
    show databases;
    # output
    +————————-+
    | Database |
    +————————-+
    | information_schema |
    | mysql |
    | your-database |
    +————————-+
    # select database
    use your-database;
    \. file_name.sql
    # it will take time and ultimately will end returning to >
    show tables;
    # it will show you wp-posts , wp-postmeta like things for WordPress


    I usually use tmux full screen. Sometimes we need to surf a webpage while on server! You can build links browser on SSH.
    People says Vi is difficult, the older version of VIM more hard. Vi is very powerful text editor, but nano is great for the new users. It takes a bit time to learn Vi. Vi will need one key to handle, has powerful syntax highlighting and lot of features.


    Github, Github Gist are good sources of useful bash scripts, dot files. IBM developer works has very good resources.
    do release upgrade command upgrades Linux version like 12.04 to 14.04 from SSH. It is a bit risky work. There are difference between apt-get upgrade -y and apt-get upgrade. It is not very simple like apt-get update -y. If there was a warning to replace a file, which you need not upgrade, can get replaced.
    Many have no degree on computing like me. We learn from trial and error. What you do not know, use Wikipedia. You never heard of EOF, if you do not understand a bit basic theory, you can not change the usage like of yours. I am unix for 2 decades. Obviously, time will add a slight advantage.


    And regarding programming languages, Ruby, Python, Java, Perl – these are very important languages. Many of us started computing with a black screen.

    Some practical day-to-day time-saving steps:

    Easy to use:

    Learn about cd ~ and cd -

    If you are new to Linux, Start with ‘ nano ‘ instead of vim/emacs

    Learn how to put a process to background ( ctrl+z ) and resume a process with fg .

    To compare two source code files use ‘ vimdiff

    Instead of using history | grep "command" use ctrl+r

    For basic calculator use ‘ python ‘ interpreter.

    >>> 2+3
    5

    To debug shell script use ‘ -x ‘ option and $?

    Performance:

    Know the difference between ‘ find -exec ‘ and ‘ find -xargs ‘.

    Avoid network issues:

    Always use rsync instead of scp or cp huge directory

    Learn about screen command. When you ssh into remote system

    create ‘ screen ‘ and then start working.

    Some Internals:

    Understand why deleted space doesn’t show up on ‘ df ‘ output. ( hint: lsof | grep "deleted" )

    What happens when you delete a file which is in-use!

    How to solve ” Argument list too lon g .” with rm,cp or mv command. (hint: ARG_MAX)

    CommonErrorMessages/ArgumentListTooLong – Debian Wiki

    rm -rf/chmod nightmares:

    If you are paranoid about ‘ rm -rf ‘ , perform chattr +i

    $ sudo chattr +i /critical/directory/or/file
    $ sudo rm -rf /critical/directory/or/file

    rm: cannot remove ‘/critical/directory/or/file’: Operation not permitted

    To avoid chmod 777 /etc/ and wondering how to restore the permission. Learn to backup

    file attributes:

    getfacl -R /some/path > permissions.txt
    setfacl –restore=permissions.txt

    Logs . I believe that logs are the most important thing in Linux and my life changed drastically when I learned this.

    Having previously been in a Windows/Linux environment on and off, I never needed to stress up because when ‘shit’ got real I just shifted.

    Then I found myself stuck with Centos after a huge fight with my computer. With Linux, your logs are your ‘Oracle’. They tell you the will of the ‘gods’, and explain why your computer is being weird.

    Learning to locate them and read them properly is the greatest service you can ever do for yourself.

    Am talking rsyslog, journalctl, using tail, learning text manipulation so as to only fetch specific kinds of logs even from cron jobs and other automagic schemes you might have up your sleeve. Coming up with bash scripts that send you these logs etc.

    Understand logs and you shall never again suffer at the hand of Linux and unexplainable errors.

    Learn bash. Ever had the pleasure of being woken up every time the server starts up so you can launch the tools and services? It is not a pleasant experience especially when you promised your girlfriend a romantic night.

    Automate everything if you can. Write bash scripts and systemd scripts to start and stop anything start able and stop able. (tip- if the service already exists, use ntsysv , saves you a lot of time).

    Recursive Commands am not sure that’s how we call them. Ya sabes the Ctrl + R thing? When you spend an entire day with a black screen in front of you, let’s just say typing is not friendly. Use all the tricks that can reduce that:

    Ctrl + R for remembering those previously typed commands.

    Grep which can be used together with history

    There is a reason we have Copy and Paste , use it. Not always, but use it.

    Write notes chances are, you will forget whatever you were doing. You will definitely need that command tomorrow. Save yourself some Google time and keep notes.

    [Edit: The notes are more for explaining why you made certain logical decisions. When you do a lot in a day, figuring out why you did what you did yesterday can take you ages.]

    Learn how to type . Más rápido typing, faster delivery.

    Always remember who is the constant . I have worked with people who always blame technology for their errors. Most will say, ‘oh this distro is bad’, ‘oh postgres has a bug’. Am not saying tech never fails but in most cases, you are the problem. The sooner you learn that, the faster you can troubleshoot.

    Remote Access , use it. You have ssh and others like VNC(which although unencrypted can be tunnelled via ssh). Don’t hop from machine to machine, you’ll get a headache. Use ssh keys if you are lazy to type passwords.

    Lastly and most importantly, if you want to be extremely fast with Linux, GO LOW. Understand Linux to its most low level functionality. That enables you to build an infrastructure based on efficiency and compatibility. Make your life easier.

    Saludos,

    A Linux Ninja 🙂