[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
- ¿Cuáles son algunos consejos sobre la gestión de criadas en la India?
- ¿Cuáles son algunos consejos para escribir una buena nota de suicidio?
- ¿Cuáles son algunos de los consejos y trucos de Android menos conocidos?
- ¿Cuáles son los mejores hacks para ganar dinero que la gente no conoce?
- ¿Cuáles son algunos consejos para descifrar los CDS (Servicios de defensa combinados)?
- 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. 😉