? Čeština ∙ Deutsch ∙ Ελληνικά ∙ English ∙ Español ∙ Français ∙ Indonesia ∙ Italiano ∙ 日本語 ∙ 한국어 ∙ polski ∙ Português ∙ Română ∙ Русский ∙ Slovenščina ∙ Українська ∙ 简体中文 ∙ 繁體中文
Nota: Estoy planeando revisar esto y buscar un nuevo coautor para ayudar a expandir esto en una guía más completa. Si bien es muy popular, podría ser más amplio y un poco más profundo. Si le gusta escribir y está cerca de ser un experto en este material y está dispuesto a considerar ayudar, envíeme una nota en Josh (0x40) Holloway.com. –Jlevy, Holloway. ¡Gracias!

La fluidez en la línea de comando es una habilidad a menudo descuidada o considerada arcana, pero mejora su flexibilidad y productividad como ingeniero de manera obvia y sutil. Esta es una selección de notas y consejos sobre el uso de la línea de comandos que hemos encontrado útil cuando trabajamos en Linux. Algunos consejos son elementales, y otros son bastante específicos, sofisticados u oscuros. Esta página no es larga, pero si puede usar y recordar todos los artículos aquí, sabe mucho.
Este trabajo es el resultado de muchos autores y traductores. Algunos de esto aparecieron originalmente en Quora, pero desde entonces se mudó a Github, donde las personas más talentosas que el autor original han realizado numerosas mejoras. Envíe una pregunta si tiene una pregunta relacionada con la línea de comando. ¡Contribuya si ve un error o algo que podría ser mejor!
Alcance:
Notas:
apt , yum , dnf , pacman , pip o brew (según corresponda) para instalar nuevos programas. Aprende Bash Bash. En realidad, escriba man bash y al menos esconder todo; Es bastante fácil de seguir y no tanto. Las conchas alternativas pueden ser agradables, pero Bash es poderosa y siempre disponible (aprendiendo solo Zsh, pescado, etc., mientras que tentando en su propia computadora portátil lo restringe en muchas situaciones, como usar los servidores existentes).
Aprenda bien al menos un editor basado en texto. El nano Editor es uno de los más simples para la edición básica (apertura, edición, guardado, búsqueda). Sin embargo, para el usuario de energía en un terminal de texto, no hay sustituto para VIM ( vi ), el editor difícil de aprender pero venerable, rápido y completo. Muchas personas también usan los EMAC clásicos, particularmente para tareas de edición más grandes. (Por supuesto, es poco probable que cualquier desarrollador de software moderno que trabaje en un proyecto extenso use solo un editor puro basado en texto y también debe estar familiarizado con las IDE y herramientas gráficas modernas).
Encontrar documentación:
man (para el Inquisitivo, man man enumera los números de sección, por ejemplo, 1 es comandos "regulares", 5 IS Files/Convencions y 8 son para la administración). Encuentra páginas de hombre con apropos .help y help -d . Puede averiguar si un comando es un ejecutable, shell builtin o un alias utilizando type command .curl cheat.sh/command dará una breve "hoja de trucos" con ejemplos comunes de cómo usar un comando shell. Aprenda sobre la redirección de la salida y la entrada usando > y < y tuberías usando | . Conocer > sobrescribe el archivo de salida y >> Agradece. Aprenda sobre Stdout y Stderr.
Aprenda sobre la expansión del global de archivo * (¿y quizás ? Y [ ... ] ) y citando y la diferencia entre las cotizaciones de doble " y ' . (Consulte más sobre la expansión variable a continuación).
Estar familiarizado con la gestión de trabajo de Bash: & , Ctrl-Z , Ctrl-C , jobs , fg , bg , kill , etc.
Conozca ssh y los conceptos básicos de la autenticación sin contraseña, a través de ssh-agent , ssh-add , etc.
Gestión básica de archivos: ls y ls -l (en particular, aprenda lo que significa cada columna en ls -l ), less , head , tail y tail -f (o incluso mejor, less +F ), ln y ln -s (aprende las diferencias y ventajas de los enlaces duros versus los enlaces suaves), chown , chmod , du (para un resumen rápido del uso de discos: du -hs * ). Para la gestión del sistema de archivos, df , mount , fdisk , mkfs , lsblk . Aprenda qué es un inodo ( ls -i o df -i ).
Gestión básica de la red: ip o ifconfig , dig , traceroute , route .
Aprenda y use un sistema de gestión de control de versiones, como git .
Conozca bien las expresiones regulares y las diversas banderas a grep / egrep . Vale la pena conocer las opciones -i , -o , -v , -A , -B y -C .
Aprenda a usar apt-get , yum , dnf o pacman (dependiendo de la distribución) para encontrar e instalar paquetes. Y asegúrese de tener pip para instalar herramientas de línea de comandos basadas en Python (algunas a continuación son más fáciles de instalar a través de pip ).
En BASH, use la pestaña para completar argumentos o enumerar todos los comandos disponibles y CTRL-R para buscar el historial de comandos (después de presionar, escriba para buscar, presione CTRL-R repetidamente para recorrer más coincidencias, presione ENTER para ejecutar el comando encontrado o presione la flecha derecha para poner el resultado en la línea actual para permitir la edición).
En Bash, use CTRL-W para eliminar la última palabra y Ctrl-U para eliminar el contenido del cursor actual hasta el inicio de la línea. Use Alt-B y Alt-F para moverse por palabra, Ctrl-A para mover el cursor al comienzo de la línea, CTRL-E para mover el cursor al final de la línea, Ctrl-K para matar al final de la línea, Ctrl-L para despejar la pantalla. Consulte man readline para obtener todas las mechas de teclas predeterminadas en BASH. Hay mucho. Por ejemplo alt-. ciclos a través de argumentos anteriores, y alt- * expande un globo.
Alternativamente, si te encantan los enlaces de llave al estilo VI, usa set -o vi (y set -o emacs para volver a ponerlo).
Para editar comandos largos, después de configurar su editor (por ejemplo, export EDITOR=vim ), CTRL-X CTRL-E abrirá el comando actual en un editor para la edición de múltiples líneas. O en estilo VI, Escape-V .
Para ver comandos recientes, use history . Siga con !n (donde n es el número de comando) para ejecutar nuevamente. También hay muchas abreviaturas que puedes usar, ¡el más útil probablemente !$ Para el último argumento y !! Para el último comando (ver "Expansión de la historia" en la página del hombre). Sin embargo, a menudo se reemplazan fácilmente con Ctrl-R y Alt-. .
Vaya a su directorio de inicio con cd . Acceda a archivos en relación con su directorio de inicio con el prefijo ~ ( ~/.bashrc ). En sh Scripts, consulte el directorio de inicio como $HOME .
Para volver al directorio de trabajo anterior: cd - .
Si está a la mitad de escribir un comando pero cambia de opinión, presione alt- # para agregar un # al principio e ingresarlo como comentario (o use Ctrl-A , # , Enter ). Luego puede volver a él más tarde a través del historial de comando.
Use xargs (o parallel ). Es muy poderoso. Tenga en cuenta que puede controlar cuántos elementos se ejecutan por línea ( -L ), así como paralelismo ( -P ). Si no está seguro de si hará lo correcto, use primero xargs echo . Además, -I{} es útil. Ejemplos:
find . -name ' *.py ' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname pstree -p es una visualización útil del árbol de proceso.
Use pgrep y pkill para encontrar o señalar procesos por nombre ( -f es útil).
Conozca las diversas señales que puede enviar procesos. Por ejemplo, para suspender un proceso, use kill -STOP [pid] . Para la lista completa, consulte man 7 signal
Use nohup o disown si desea un proceso de fondo para seguir funcionando para siempre.
Verifique qué procesos están escuchando a través de netstat -lntp o ss -plat (para tcp; agregar -u para UDP) o lsof -iTCP -sTCP:LISTEN -P -n (que también funciona en macOS).
Consulte también lsof y fuser para enchufes y archivos abiertos.
Vea uptime o w para saber cuánto tiempo se ha ejecutado el sistema.
Use alias para crear atajos para comandos de uso común. Por ejemplo, alias ll='ls -latr' crea un nuevo alias ll .
Guarde alias, configuraciones de shell y funciones que utiliza comúnmente en ~/.bashrc , y organice los shells de inicio de sesión para obtenerlo. Esto hará que su configuración esté disponible en todas sus sesiones de shell.
Coloque la configuración de las variables de entorno, así como los comandos que deben ejecutarse cuando inicie sesión en ~/.bash_profile . Se necesitará una configuración separada para los shells que inicia desde inicios de sesión de entorno gráfico y trabajos cron .
Sincronice sus archivos de configuración (por ejemplo .bashrc y .bash_profile ) entre varias computadoras con GIT.
Comprenda que se necesita cuidado cuando las variables y los nombres de archivo incluyen espacios en blanco. Rodea tus variables de Bash con citas, por ejemplo "$FOO" . Prefiere las opciones -0 o -print0 para habilitar caracteres nulos para delimitar los nombres de archivo, por ejemplo, locate -0 pattern | xargs -0 ls -al o find / -print0 -type d | xargs -0 ls -al . Para iterar en los nombres de archivo que contienen espacios en blanco en un bucle for, configure su IFS para que sea una nueva línea solo usando IFS=$'n' .
En Bash Scripts, use set -x (o la variante set -v , que registra la entrada sin procesar, incluidas las variables y comentarios no expandidos) para la salida de depuración. Use modos estrictos a menos que tenga una buena razón para no: usar set -e para abortar en errores (código de salida sin cero). Use set -u para detectar usos variables no establecidos. Considere set -o pipefail también, para abortar los errores dentro de las tuberías (aunque lea más si lo hace, ya que este tema es un poco sutil). Para scripts más involucrados, también use trap ON EXIT o ERR. Un hábito útil es iniciar un script como este, que lo hará detectar y abortar en errores comunes e imprimir un mensaje:
set -euo pipefail
trap " echo 'error: Script failed: see failed command above' " ERR # do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir En Bash, tenga en cuenta que hay muchos tipos de expansión variable. Comprobación de una variable existe: ${name:?error message} . Por ejemplo, si un script bash requiere un solo argumento, simplemente escriba input_file=${1:?usage: $0 input_file} . Usando un valor predeterminado si una variable está vacía: ${name:-default} . Si desea tener un parámetro adicional (opcional) agregado al ejemplo anterior, puede usar algo como output_file=${2:-logfile} . Si se omite $2 y, por lo tanto, vacío, output_file se establecerá en logfile . 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 , entonces echo ${var%.pdf}.txt imprime foo.txt .
La expansión de la abrazadera utilizando { ... } puede reducir tener que volver a escribir un texto similar y automatizar combinaciones de elementos. Esto es útil en ejemplos como mv foo.{txt,pdf} some-dir (que mueve ambos archivos), cp somefile{,.bak} (que se expande a cp somefile somefile.bak ) o mkdir -p test-{a,b,c}/subtest-{1,2,3} (que expande todas las combinaciones posibles y crean un árbol de combinaciones y crean directas). La expansión de la abrazadera se realiza antes de cualquier otra expansión.
El orden de las expansiones es: expansión de aparato ortopédico; expansión de tilde, parámetro y expansión variable, expansión aritmética y sustitución de comandos (realizada de forma izquierda a derecha); división de palabras; y expansión del nombre de archivo. (Por ejemplo, un rango como {1..20} no se puede expresar con variables usando {$a..$b} . Use seq o a for bucle en su lugar, por ejemplo, seq $a $b o for((i=a; i<=b; i++)); do ... ; done )
La salida de un comando se puede tratar como un archivo a través de <(some command) (conocido como sustitución del proceso). Por ejemplo, compare local /etc/hosts con uno remoto:
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
En BASH, redirige tanto la salida estándar como el error estándar a través de: some-command >logfile 2>&1 o some-command &>logfile . A menudo, para asegurarse de que un comando no deje un mango de archivo abierto a la entrada estándar, vinculá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. Para la información de codificación general, man unicode , man utf-8 y man latin1 son útiles.
Use screen o tmux para multiplexar la pantalla, especialmente útil en sesiones SSH remotas y para separar y volver a colocar una sesión. byobu puede mejorar la pantalla o TMUX proporcionando más información y una gestión más fácil. Una alternativa más mínima para la persistencia de la sesión es dtach .
En SSH, saber cómo portar túneles con -L o -D (y ocasionalmente -R ) es útil, por ejemplo, acceder a sitios web desde un servidor remoto.
Puede ser útil hacer algunas optimizaciones en su configuración SSH; Por ejemplo, esta ~/.ssh/config contiene configuraciones para evitar conexiones caídas en ciertos entornos de red, utiliza compresión (que es útil con SCP sobre conexiones de bajo ancho de banda) y canales multiplex al mismo servidor con un archivo de control local:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
Algunas otras opciones relevantes para SSH son sensibles a la seguridad y deben habilitarse con cuidado, por ejemplo, por subred o host o en redes de confianza: StrictHostKeyChecking=no , ForwardAgent=yes
Considere mosh una alternativa a SSH que usa UDP, evitando las conexiones caídas y agregando conveniencia en la carretera (requiere la configuración del lado del servidor).
Para obtener los permisos en un archivo en forma octal, que es útil para la configuración del sistema pero no está disponible en ls y fácil de poner en peligro, use algo como
stat -c ' %A %a %n ' /etc/timezone Para la selección interactiva de valores de la salida de otro comando, use percol o fzf .
Para la interacción con los archivos basados en la salida de otro comando (como git ), use fpp (Pathpicker).
Para un servidor web simple para todos los archivos en el directorio actual (y subdirs), disponible para cualquier persona en su red, use: python -m SimpleHTTPServer 7777 (para Port 7777 y Python 2) y python -m http.server 7777 (para Port 7777 y Python 3).
Para ejecutar un comando como otro usuario, use sudo . El valor predeterminado se ejecuta como root; Use -u para especificar a otro usuario. Use -i para iniciar sesión como ese usuario (se le pedirá su contraseña).
Para cambiar el shell a otro usuario, use su username o su - username . Este último con "-" obtiene un entorno como si otro usuario acaba de iniciar sesión. Omitar el nombre de usuario predeterminado a root. Se le pedirá la contraseña del usuario al que está cambiando .
Conozca el límite de 128k en las líneas de comando. Este error de "Lista de argumentos demasiado larga" es común cuando los comodines que coinciden con grandes números de archivos. (Cuando esto sucede, las alternativas como find y xargs pueden ayudar).
Para una calculadora básica (y, por supuesto, acceso a Python en general), use el intérprete python . Por ejemplo,
>>> 2+3
5
Para localizar un archivo por nombre en el directorio actual, find . -iname '*something*' (o similar). Para encontrar un archivo en cualquier lugar por nombre, use locate something (pero tenga en cuenta que updatedb puede no haber indexado los archivos creados recientemente).
Para la búsqueda general a través de los archivos de origen o de datos, hay varias opciones más avanzadas o más rápidas que grep -r , incluyendo (en orden aproximado de más antiguo a nuevo) ack , ag ("The Silver Searcher") y rg (RipGrep).
Para convertir html en texto: lynx -dump -stdin
Para Markdown, HTML y todo tipo de conversión de documentos, pruebe pandoc . Por ejemplo, para convertir un documento de Markdown en formato de palabra: pandoc README.md --from markdown --to docx -o temp.docx
Si debe manejar XML, xmlstarlet es viejo pero bueno.
Para JSON, usa jq . Para uso interactivo, también vea jid y jiq .
Para Yaml, usa shyaml .
Para archivos Excel o CSV, CSVKIT proporciona in2csv , csvcut , csvjoin , csvgrep , etc.
Para Amazon S3, s3cmd es conveniente y s4cmd es más rápido. aws de Amazon y las saws mejoradas son esenciales para otras tareas relacionadas con AWS.
Conozca sort y uniq , incluidas las opciones de UNIQ -u y -d : vea las frases a continuación. Ver también comm .
Conozca sobre cut , paste y join para manipular archivos de texto. Muchas personas usan cut pero se olvidan de join .
Conozca sobre wc para contar NewLines ( -l ), caracteres ( -m ), palabras ( -w ) y bytes ( -c ).
Conozca acerca de tee para copiar de Stdin a un archivo y también a Stdout, como en ls -al | tee file.txt .
Para cálculos más complejos, que incluyen agrupación, inversión de campos y cálculos estadísticos, considere datamash .
Sepa que el lugar afecta muchas herramientas de línea de comando de manera sutil, incluido el orden de clasificación (recopilación) y el rendimiento. La mayoría de las instalaciones de Linux establecerán LANG u otras variables locales en una configuración local como el inglés de EE. UU. Pero tenga en cuenta que la clasificación cambiará si cambia la configuración regional. Y saber que las rutinas de I18N pueden hacer que se ejecute más comandos u otros comandos muchas veces más lento. En algunas situaciones (como las operaciones establecidas o las operaciones de singularidad a continuación) puede ignorar de manera segura las rutinas I18N SLEW y usar el orden de clasificación basado en bytes tradicional, utilizando export LC_ALL=C .
Puede establecer el entorno de un comando específico prefijo su invocación con la configuración de la variable de entorno, como en TZ=Pacific/Fiji date .
Conozca awk y sed básicos para los datos simples de datos. Vea una frase para ejemplos.
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- * .txtrepren . (En algunos casos, el comando rename también permite múltiples renombros, pero tenga cuidado ya que su funcionalidad no es la misma en todas las distribuciones de Linux). # Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from ' (.*).bak ' --to ' 1 ' * .bak
# Same as above, using rename, if available:
rename ' s/.bak$// ' * .bakrsync realmente es una herramienta de copia de archivos rápida y extraordinariamente versátil. Es conocido por sincronizar entre máquinas, pero es igualmente útil localmente. Cuando las restricciones de seguridad lo permiten, el uso de rsync en lugar de scp permite la recuperación de una transferencia sin reiniciar desde cero. También es una de las formas más rápidas de eliminar grandes números de archivos: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir Para monitorear el progreso al procesar archivos, use pv , pycp , pmonitor , progress , rsync --progress o, para copia a nivel de bloque, dd status=progress .
Use shuf para barajar o seleccione líneas aleatorias de un archivo.
Saber las opciones de sort . Para números, use -n o -h para manejar números legibles por humanos (por ejemplo, de du -h ). Sepa cómo funcionan las llaves ( -t y -k ). En particular, ten cuidado de que necesite escribir -k1,1 para ordenar solo el primer campo; -k1 significa clasificar según toda la línea. El sort estable ( sort -s ) puede ser útil. Por ejemplo, para ordenar primero por el campo 2, luego secundariamente por el campo 1, puede usar sort -k1,1 | sort -s -k2,2 .
Si alguna vez necesita escribir una pestaña literal en una línea de comando en Bash (por ejemplo, para el argumento -t para ordenar), presione Ctrl -V [tab] o escriba $'t' (este último es mejor ya que puede copiar/pegarlo).
Las herramientas estándar para parchear el código fuente son diff y patch . Ver también diffstat para estadísticas sumarias de un DIFF y sdiff para un diferencial de lado por lado. Nota diff -r funciona para directorios completos. Use diff -r tree1 tree2 | diffstat para un resumen de los cambios. Use vimdiff para comparar y editar archivos.
Para archivos binarios, use hd , hexdump o xxd para vertederos hexagonales simples y bvi , hexedit o biew para edición binaria.
También para archivos binarios, strings (más grep , etc.) le permite encontrar fragmentos de texto.
Para diferencias binarias (compresión delta), use xdelta3 .
Para convertir las codificaciones de texto, intente iconv . O uconv para un uso más avanzado; Admite algunas cosas avanzadas unicode. Por ejemplo:
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x ' ::Any-Hex; ' < input.txt
uconv -f utf-8 -t utf-8 -x ' ::Any-Name; ' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x ' ::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt Para dividir los archivos en piezas, vea split (para dividir por tamaño) y csplit (para dividir por un patrón).
Fecha y hora: para obtener la fecha y hora actuales en el formato útil ISO 8601, use date -u +"%Y-%m-%dT%H:%M:%SZ" (otras opciones son problemáticas). Para manipular las expresiones de fecha y hora, use dateadd , datediff , strptime etc. de dateutils .
Use zless , zmore , zcat y zgrep para operar en archivos comprimidos.
Los atributos del archivo son configurables a través de chattr y ofrecen una alternativa de nivel inferior a los permisos de archivo. Por ejemplo, para proteger contra la eliminación de archivos accidentales el indicador inmutable: sudo chattr +i /critical/directory/or/file
Use getfacl y setfacl para guardar y restaurar los permisos de archivo. Por ejemplo:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (crea archivos escasos), fallocate (Ext4, XFS, BTRFS y OCFS2 Files Systems), xfs_mkfile (casi cualquier sistema de archivos, viene en el paquete XFSProgs), mkfile (para sistemas similares a Unix como Solaris, Mac OS). Para la depuración web, curl y curl -I son útiles, o sus equivalentes wget , o los httpie más modernos.
Para conocer el estado actual de CPU/disco, las herramientas clásicas son top (o el mejor htop ), iostat e iotop . Use iostat -mxz 15 para CPU básico y estadísticas detalladas por disco por parte y información de rendimiento.
Para los detalles de la conexión de red, use netstat y ss .
Para una visión general rápida de lo que está sucediendo en un sistema, dstat es especialmente útil. Para una visión general más amplia con detalles, use glances .
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 mantenida por el kernel de Linux como caché de archivos, por lo que cuenta efectivamente hacia el valor "libre".
La depuración del sistema Java es una tetera diferente de pescado, pero un simple truco en Oracle's y algunos otros JVM es que puede ejecutar kill -3 <pid> y un resumen completo de rastreo de pila y montón (incluidos los detalles generacionales de recolección de basura, que pueden ser altamente informativos) se verá a STDERR/troncos. Los jps de JDK, jstat , jstack , jmap son útiles. Las herramientas SJK son más avanzadas.
Use mtr como una mejor tracerute para identificar problemas de red.
Para mirar por qué un disco está lleno, ncdu ahorra tiempo sobre los comandos habituales como du -sh * .
Para encontrar qué socket o proceso está utilizando ancho de banda, pruebe iftop o nethogs .
La herramienta ab (viene con Apache) es útil para la verificación rápida y sucia del rendimiento del servidor web. Para pruebas de carga más complejas, prueba siege .
Para la depuración de redes más seria, wireshark , tshark o ngrep .
Conozca strace y ltrace . Estos pueden ser útiles si un programa está fallando, colgando o bloqueando, y no sabe por qué, o si desea obtener una idea general de rendimiento. Tenga en cuenta la opción de perfil ( -c ) y la capacidad de adjuntar a un proceso de ejecución ( -p ). Use la opción Trace Child ( -f ) para evitar faltar llamadas importantes.
Conozca sobre ldd para verificar las bibliotecas compartidas, etc., pero nunca ejecutarlo en archivos no confiables.
Sepa cómo conectarse a un proceso de ejecución con gdb y obtener sus trazas de pila.
Usar /proc . A veces es increíblemente útil al depurar problemas en vivo. Ejemplos: /proc/cpuinfo , /proc/meminfo , /proc/cmdline , /proc/xxx/cwd , /proc/xxx/exe , /proc/xxx/fd/ , /proc/xxx/smaps (donde xxx es la identificación del proceso o pid).
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, mire stap (SystemTAP), perf y sysdig .
Verifique en qué sistema operativo se encuentra con uname o uname -a (Información general de Unix/Kernel) o lsb_release -a (Información de Distro Linux).
Use dmesg siempre que algo actúe muy divertido (podría ser problemas de hardware o controlador).
Si elimina un archivo y no libera el espacio de disco esperado según lo informado por du , verifique si el archivo está en uso por un proceso: lsof | grep deleted | grep "filename-of-my-big-file"
Algunos ejemplos de comandos de enlace:
sort / uniq . Supongamos que a y b son archivos de texto que ya no están Esto es rápido y funciona en archivos de tamaño arbitrario, hasta muchos gigabytes. (Sort no está limitado por la memoria, aunque es posible que deba usar la opción -T si /tmp está en una pequeña partición raíz). Consulte también la nota sobre la opción LC_ALL de arriba y sort 'S -u (queda fuera para la claridad a continuación). sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
Usa grep . * Para examinar rápidamente el contenido de todos los archivos en un directorio (de modo que cada línea se combine con el nombre de archivo), o head -100 * (para que cada archivo tenga un encabezado). Esto puede ser útil para directorios llenos de configuraciones de configuración como las de /sys , /proc , /etc .
Sumando todos los números en la tercera columna de un archivo de texto (esto probablemente sea 3 veces más rápido y 3 veces menos código que el Python equivalente):
awk ' { x += $3 } END { print x } ' myfilels -l recursivo pero es más fácil de leer que ls -lR : find . -type f -lsacct_id que está presente en la URL. Si desea una cuenta de cuántas solicitudes para cada acct_id : egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn Para monitorear continuamente los cambios, use watch , por ejemplo, verifique los cambios en los archivos en un directorio con watch -d -n 2 'ls -rtlh | tail' o para la configuración de red mientras soluciona los problemas de su configuración WiFi con watch -d -n 2 ifconfig .
Ejecute esta función para obtener un consejo aleatorio de este documento (analiza el markdown y extrae un elemento):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed ' /cowsay[.]png/d ' |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v " (html/body/ul/li[count(p)>0])[ $RANDOM mod last()+1] " |
xmlstarlet unesc | fmt -80 | iconv -t US
} expr : Realice operaciones aritméticas o booleanas o evalúe expresiones regulares
m4 : procesador macro simple
yes : imprima mucho una cadena
cal : buen calendario
env : Ejecutar un comando (útil en scripts)
printenv : Imprimir variables de entorno (útil en depuración y scripts)
look : encuentre palabras en inglés (o líneas en un archivo) comenzando con una cadena
cut , paste y join : manipulación de datos
fmt : párrafos de texto de formato
pr : formatear texto en páginas/columnas
fold : envoltura líneas de texto
column : formatear campos de texto en columnas o tablas alineadas de ancho fijo
expand y unexpand : Convierta entre pestañas y espacios
nl : Agregar números de línea
seq : números de impresión
bc : calculadora
factor : factor enteros
gpg : encrypt y firmar archivos
toe : Tabla de entradas de Terminfo
nc : depuración de redes y transferencia de datos
socat : Relé de socket y reenvío de puertos TCP (similar a netcat )
slurm : visualización del tráfico de red
dd : mover datos entre archivos o dispositivos
file : identificar el tipo de archivo
tree : Mostrar directorios y subdirectorios como árbol de anidación; como ls pero recursivo
stat : Información del archivo
time : ejecutar y tiempo un comando
timeout : ejecute un comando durante una cantidad de tiempo especificada y detenga el proceso cuando se complete la cantidad de tiempo especificada.
lockfile : cree un archivo semáforo que solo se pueda eliminar por rm -f
logrotate : Gire, comprimir y registros de correo.
watch : Ejecute un comando repetidamente, mostrando resultados y/o resaltando cambios
when-changed : ejecuta cualquier comando que especifique cada vez que ve el archivo cambiado. Ver inotifywait y entr también.
tac : Imprimir archivos en reversa
comm : Compare archivos ordenados línea por línea
strings : extraer texto de archivos binarios
tr : Traducción o manipulación de personajes
iconv o uconv : conversión para codificaciones de texto
split y csplit : división de archivos
sponge : Lea todas las aportes antes de escribirlo, útil para leer desde entonces escribiendo al mismo archivo, por ejemplo, grep -v something some-file | sponge some-file
units : Conversiones y cálculos de la unidad; Convierte Furlongs por quince días a twips por parpadeo (ver también /usr/share/units/definitions.units )
apg : genera contraseñas aleatorias
xz : compresión de archivos de alta relación
ldd : información dinámica de la biblioteca
nm : símbolos de archivos de objetos
ab o wrk : servidores web de evaluación comparativa
strace : depuración de llamadas del sistema
mtr : Better Traceroute para la depuración de la red
cssh : carcasa concurrente visual
rsync : Sincronización de archivos y carpetas a través de SSH o en el sistema de archivos local
wireshark y tshark : captura de paquetes y depuración de redes
ngrep : GREP para la capa de red
host y dig : Búsquedas DNS
lsof : Descriptor de archivo de procesos e información de socket
dstat : estadísticas útiles del sistema
glances : descripción general de alto nivel y múltiple subsistema
iostat : estadísticas de uso de disco
mpstat : estadísticas de uso de la CPU
vmstat : estadísticas de uso de memoria
htop : versión mejorada de Top
last : historial de inicio de sesión
w : Quién ha iniciado sesión
id : información de identidad de usuario/grupo
sar : estadísticas del sistema histórico
iftop o nethogs : utilización de la red por socket o proceso
ss : estadísticas de socket
dmesg : mensajes de error de arranque y sistema
sysctl : Ver y configurar los parámetros del kernel de Linux en el tiempo de ejecución
hdparm : manipulación de disco SATA/ATA/rendimiento
lsblk : Dispositivos de bloque de lista: una vista de árbol de sus discos y particiones de disco
lshw , lscpu , lspci , lsusb , dmidecode : Información de hardware, incluyendo CPU, BIOS, RAID, gráficos, dispositivos, etc.
lsmod y modinfo : Lista y muestre detalles de los módulos del núcleo.
fortune , ddate y sl : Um, bueno, depende de si considera las locomotoras de vapor y las citas zippy "útiles"
Estos son elementos relevantes solo en macOS.
Gestión de paquetes con brew (casera casera) y/o port (MacPorts). Estos se pueden usar para instalar en macOS muchos de los comandos anteriores.
Copie la salida de cualquier comando a una aplicación de escritorio con pbcopy y pegue la entrada de uno con pbpaste .
Para habilitar la tecla de opción en MacOS Terminal como una tecla ALT (como se usa en los comandos anteriores como Alt -B , Alt -F , etc.), Abra las preferencias -> Perfiles -> teclado y seleccione "Use la opción como Meta Key".
Para abrir un archivo con una aplicación de escritorio, use open o open -a /Applications/Whatever.app .
Spotlight: busque archivos con mdfind y metadatos de lista (como la información de exif de fotos) con mdls .
Ser consciente de MacOS se basa en BSD Unix, y muchos comandos (por ejemplo ps , ls , tail , awk , sed ) tienen muchas variaciones sutiles de Linux, que está influenciada en gran medida por las herramientas de UNIX y GNU al estilo V del sistema V. A menudo puede notar la diferencia al notar que una página de hombre tiene el encabezado "Manual de comandos generales de BSD". En algunos casos, también se pueden instalar versiones de GNU (como gawk y gsed para GNU AWK y SED). Si escribe scripts de bash multiplataforma, evite dichos comandos (por ejemplo, considere Python o perl ) o pruebe cuidadosamente.
Para obtener información de lanzamiento de MacOS, use sw_vers .
Estos elementos son relevantes solo en Windows.
Acceda a la alimentación del shell Unix en Microsoft Windows instalando Cygwin. La mayoría de las cosas descritas en este documento funcionarán fuera de la caja.
En Windows 10, puede usar el subsistema de Windows para Linux (WSL), que proporciona un entorno bash familiar con utilidades de línea de comandos UNIX.
Si desea utilizar principalmente herramientas de desarrollador de GNU (como GCC) en Windows, considere MingW y su paquete MSYS, que proporciona utilidades como Bash, Bawk, Make y GREP. MSYS no tiene todas las características en comparación con Cygwin. MingW es particularmente útil para crear puertos nativos de Windows de herramientas UNIX.
Otra opción para obtener unix look y sensación en Windows es efectivo. Tenga en cuenta que solo hay muy pocos comandos UNIX y opciones de línea de comandos disponibles en este entorno.
Puede realizar y escribir la mayoría de las tareas de administración del sistema de Windows desde la línea de comandos aprendiendo y utilizando wmic .
Herramientas de red de Windows de línea de comandos nativas Puede encontrar útiles incluyen ping , ipconfig , tracert y netstat .
Puede realizar muchas tareas útiles de Windows invocando el comando Rundll32 .
Instale programas UNIX adicionales con el Administrador de paquetes de Cygwin.
Use mintty como la ventana de su línea de comandos.
Acceda al portapapeles de Windows a través de /dev/clipboard .
Ejecute cygstart para abrir un archivo arbitrario a través de su aplicación registrada.
Access the Windows registry with regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! ;)
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.