Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Buscador

Entradas Mensuales

Suscripción

¿Quieres recibir las últimas novedades del blog en tu correo?

¡Suscríbete al feed!

Foro de elhacker.net - Noticias

elhacker.NET en Facebook

Entradas populares

PostHeaderIcon "El Arte del Terminal de Comandos" en GNU/Linux




The art of command line, es un proyecto colaborativo disponible en GitHub que nos ofrece una guía para dominar los comandos más útiles que nos podemos encontrar en sistemas GNU/Linux, Unix y Mac OS X.




En definitiva un montón de información y material útil para convertirnos en unos ninjas de la linea de comandos, disponible desde una sencilla página en GitHub traducida a varios idiomas, entre ellos el español.

Fundamentos

  • Aprende conocimientos básicos de Bash, de hecho, escribe man bash y al menos échale un vistazo a todo el asunto. Es bastante fácil de seguir y no es tan largo. Alternar entre shells puede ser agradable, pero Bash es poderoso y siempre está disponible (conocer solo zsh, fish, etc., aunque resulte tentador en tu propia laptop, Te restringe en muchas situaciones, tales como el uso de servidores existentes).
  • Aprende bien al menos un editor de texto, idealmente Vim (vi), como no hay realmente una competencia para la edición aleatoria en un terminal (incluso si usa Emacs, un gran IDE, o un editor alternativo (hipster) moderno la mayor parte del tiempo).
  • Conoce como leer la documentación con man (Para curiosos, man man lista las secciones enumeradas, ej. 1 es comandos "regulares", 5 son archivos/convenciones, y 8 para administración). Encuentra las páginas de man apropos. Sepa que alguno de los comandos no son ejecutables, pero son Bash builtins, y que puedes obtener ayuda sobre ellos con help y help -d.
  • Aprende sobre redirección de salida >, entrada < y pipes utilizando |. Conozca que > sobrescribe el archivo de salida y >> añade. Aprende sobre stdout y stderr.
  • Aprende sobre expansión de archivos glob con * (y tal vez ? y [...]) y quoting y la diferencia entre comillas dobles " y simples '. (Ver más en expansión de variables más abajo.)
  • Familiarízate con la administración de trabajo en Bash: &, ctrl-z, ctrl-c, jobs, fg, bg, kill, etc.
  • Conoce ssh y lo básico de autenticación sin contraseña, vía ssh-agent, ssh-add, etc.
  • Administración de archivos básica: ls y ls -l (en particular, aprende el significado de 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 entre enlaces hard y soft), chown, chmod, du (para un resumen rápido del uso del disco: du -hs *). Para administración de archivos de sistema, df, mount, fdisk, mkfs, lsblk. Aprenda que un inode es ls -i or df -i).
  • Administración básica de redes: ip o ifconfig, dig.
  • Conoce bien las expresiones regulares y varias opciones (flags) para grep/egrep. Las opciones -i, -o, -v, -A, -B y -C son dignas de ser recordadas.
  • Aprende el uso de apt-get, yum, dnf o pacman (dependiendo de la distribución "distro") para buscar e instalar paquetes. Y asegúrate que tienes pip para instalar la herramienta de línea de comando basada en Python (un poco más abajo esta explicado como instalar vía pip).

De uso diario

  • En Bash, se usa Tab para completar los argumentos o lista todos los comandos disponibles y ctrl-r para buscar a través del historial de comandos (despues de presionar, escribe la búsqueda, presiona ctrl-r repetidamente para hacer un ciclo a través de más coincidencias, presiona Enter para ejecurar el comando encontrado, o presiona la flecha derecha para poner el resultado en la línea actual y editar).
  • En Bash, se usa ctrl-w para borrar la última palabra, y ctrl-u para borrar todo hacia atrás hasta el inicio de la línea. Se usa alt-b y alt-f para moverse entre palabras, ctrl-a para mover el cursor al principio de la línea, ctrl-e para mover el cursor al final de la línea, ctrl-k para eliminar hasta el final de la línea, ctrl-l para limpiar la pantalla. Ver man readline para todos los atajos de teclado por defecto en Bash. Son una gran cantidad. Por ejemplo alt-. realiza un ciclo a través de los comandos previos, y alt-* expande un glob.
  • Alternativamente, si amas los atajos de teclado vi-style, usa set -o vi. (y set -o emacs para regresar a la anterior).
  • Para editar largos comandos, después de configurar to editor (por ejemplo export EDITOR=vim), ctrl-x ctrl-e se abrirá el comando actual en un editor para editar multiples líneas. O en estilo vi, escape-v.
  • Para ver los últimos comandos, history. También existen abreviaciones, tales como, !$ (último argumento) y !! último comando, aunque son fácilmente remplazados con ctrl-r y alt-..
  • Para volver al directorio de trabajo previo: cd -
  • Si estás a medio camino al escribir un comando pero cambias de opinión, presiona alt-# para agregar un # al principio y lo agrega como comentario (o usa ctrl-a, #, enter). Luego puedes regresar a este vía comando history.
  • Usa xargs (o parallel). Es muy poderoso. Ten en cuenta que puedes controlar cuántos elementos son ejecutados por línea (-L), así como el paralelismo (-P). Si no estas seguro de que este haga la cosa correcta, usa xargs echo primero. También, -I{} es útil. Ejemplos:
      find . -name '*.py' | xargs grep some_function
      cat hosts | xargs -I{} ssh root@{} hostname
  • pstree -p es útil para mostrar el árbol de procesos.
  • Usa pgrep y pkill para encontrar o señalar procesos por su nombre (-f es de mucha ayuda).
  • Conoce las señales que puedes enviar a los procesos. Por ejemplo, para suspender un proceso usa kill -STOP [pid]. Con man 7 signal puedes ver la lista completa
  • Usa nohup o disown si quieres que un proceso de fondo se mantenga corriendo para siempre.
  • Verifica que procesos están escuchando vía netstat -lntp o ss -plat (para TCP; agrega -u para UDP).
  • Consulta también lsof para abrir sockets y archivos.
  • Consulta uptime o w para conocer cuánto tiempo el sistema ha estado corriendo.
  • Usa alias para crear atajos para comandos comúnmente usados. Por ejemplo, alias ll="las -latr" crea el alias ll
  • En Bash scripts, usa set -x (o su variantes set -v, que registra las entradas sin procesar, incluyendo variables sin expander y comantarios) para depurar la salida. Usa el modo estricto al menos que tengas una buena razón para no hacerlo: Usa set -e para abortar en caso de errores (códigos de salida distintos a cero). Usa set -u para detectar uso de variables no definidas. Considera set -o pipefail también, para los errores con pipes, también (estudiar mas sobre este como un tema delicado). Para scripts más complejos, usa también trap. en EXIT o ERR. Un hábito útil es para comenzar un script como este, el cual detectará y abortará con errores comunes e imprimirá un mensaje:
    set -euo pipefail
    trap "echo 'error: Falló del Script: ver arriba comando que falló'" ERR
  • En Bash scripts, subshells (escritos con paréntesis) son maneras convenientes para agrupar los comandos. Un ejemplo común es temporalmente moverse hacia un directorio de trabajo diferente, Ej.
      # do something in current dir
      (cd /some/other/dir && other-command)
      # continue in original dir
  • En Bash, considera que hay muchas formas de expansión de variables. Verificar la existencia de una variable: ${name:?error message}. Por ejemplo, si un script Bash requiere un único argumento, solo escribe input_file=${1:?usage: $0 input_file}. Expansión aritmética: i=$(( (i + 1) % 5 )). Secuencias: {1..10}. Reducción de cadenas de texto: ${var%suffix} y ${var#prefix}. Por ejemplo si var=foo.pdf, entonces echo ${var%.pdf}.txt imprime foo.txt.
  • Utilizando la expansión de corchetes {...} puede reducir el tener que retipear un texto similar y automatizar conbinaciones de elementos. Esto es útil en ejemplos como mv foo.{txt,pdf} some-dir (el cual mueve ambos archivos), cp somefile{,.bak} (el cual se expandirá a cp somefile somefile.bak) o mkdir -p test-{a,b,c}/subtest-{1,2,3} (el cual se expandirá en todas las posibles conbinaciones y creará un árbol de directorios).
  • La salida de un comando puede ser tratado como un archivo por medio de <(some command). Por ejemplo, comparar el /etc/hosts local con uno remoto:
      diff /etc/hosts <(ssh somehost cat /etc/hosts)
  • Conocer acerca de "here documents" en Bash, como también de cat <.
  • En Bash, redirecciona ambas la salida estándar y el error estándar, mediante: some-command >logfile 2>&1 o some-command &>logfile. Frecuentemente, para garantizar que un comando no haya dejado abierto un archivo para controlar la entrada estándar vinculada al terminal en el que te encuentras y también como buena práctica puedes agregar
.
  • Usa man ascii para una buena tabla ASCII con valores hexadecimal y decimales. Para información de codificación general, man unicode, man utf-8, y man latin1 son de utilidad.
  • Usa screen o tmux para multiplexar la pantalla, especialmente útil en sesiones ssh remotas y para desconectar y reconectar a una sesión. byobu puede mejorar la pantalla o tmux proporcionando mayor información y gestión ás sencilla. Una alternativa más minimalista para persistencia de la sesión solo sería dtach.
  • En ssh, saber cómo hacer un port tunnel con -L o -D (y de vez en cuando -R) es útil, Ej. para acceder a sitios web desde un servidor remoto.
  • Puede ser útil hacer algunas optimizaciones a su configuración ssh; por ejemplo, ~/.ssh/config, contiene la configuración para evitar desconexiones en ciertos entornos de red, utiliza compresión (cual es útil con scp sobre conexiones con un bajo ancho de banda), y la multiplexión de canales para el 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 a ssh son sensibles en cuanto a seguridad y deben ser usadas con cuidado, Ej. por subnet, host o en redes confiables: StrictHostKeyChecking=no, ForwardAgent=yes.
    • Considera mosh una alternativa para ssh que utiliza UDP, evitando conexiones caidas y agregando conveniencia en el camino. (require configuración del lado del servidor).
    • Para obtener permiso sobre un archivo en forma octal, el cual es útil para la configuración del sistema pero no está disponible con ls y fácil de estropear, usa algo como
          stat -c '%A %a %n' /etc/timezone
    • Para selección interactiva de valores desde la salida de otro comando, use percol o fzf.
    • Para la interacción con archivos basados en la salida de otro comando (como git), use fpp (PathPicker).
    • Para un servidor web sencillo para todos los archivos en el directorio actual (y subdirectorios), disponible para cualquiera en tu red, usa: python -m SimpleHTTPServer 7777 (para el puerto 7777 y Python 2) y python -m http.server 7777 (para 7777 y Python 3).
    • Para ejecutar un comando con privilegios, usando sudo (para root) o sudo -u (para otro usuario). Usa su o sudo bash para realmente ejecutar un shell como este usuario. Usa su - para simular un login fresco como root u otro usuario.

    Procesamiento de archivos y datos

    • Para localizar un archivo por nombre en el directorio actual, find . -iname '*something*' (o similar). Para encontrar un archivo en cualquier lado por nombre, usa locate something (pero tenga en mente que updatedb quizás no haya indexado recientemente los archivos creados).
    • Para búsqueda general a través de archivos fuente o de datos (más avanzado que grep -r), usa ag.
    • Para convertir HTML a texto: lynx -dump -stdin
    • Para Markdown, HTML, y todos los tipos de conversión de documentos, prueba pandoc.
    • Si debe manipular XML, xmlstarlet es viejo pero bueno.
    • Para JSON usa jq.
    • 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 el mas rápido. aws de Amazon y el mejorado saws son esenciales para otras tareas relacionadas al AWS.
    • Conoce acerca de sort y uniq, incluyendo las opciones de uniq -u y -d -- ver one-liners más abajo. Ver también comm
    • Conoce acerca de cut, paste y join para manipular archivos de texto. Muchas personas usan cut pero se olvidan acerca de join.
    • Conoce acerca de wc para contar saltos de línea (-l), caracteres (-m), palabras (-w) y bytes (-c).
    • Conoce acerca de tee para copiar desde el stdin hacia un archivo y también hacia el stdout, al igual que en ls -al | tee file.txt.
    • Conoce que la localización afecta muchas herramientas de línea de comando en forma delicada, incluyendo el ordenamiento (compaginación) y rendimiento. La mayoría de las instalaciones de Linux configuran LANG u otras variables de localización para la configuración local como US English. Pero ten en mente que el ordenamiento puede cambiar si cambia la localización. Y también las rutinas i18n pueden hacer que sort u otros comandos se ejecuten más lentamente. En algunas situaciones (tales como la realización de operaciones u operaciones singulares descritas más abajo) puedes ignorar las rutinas i18n por completo y utilizar el sort tradicional basado en bytes, usando export LC_ALL=C.
    • Conoce los aspectos básicos de awk y sed para manejo de datos. Por ejemplo, sumar todos lo números en la tercera columna de un archivo de texto: awk '{ x += $3 } END { print x }'. Esto es probablemente 3 veces más rápido y 3 veces más corto que su equivalente en Python.
    • Para reemplazar todas las ocurrencias de un string en su lugar, en uno o más archivos:
          perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
    • Para renombrar multiples y/o buscar y remplazar dentro de archivos, intenta repren. (En algunos casos el comando rename también permite multiples renombramientos, pero sea cuidadoso ya que esta funcionalidad no es igual en todas las distribuciones de Linux.)
          # Renombramiento completo de archivos, carpetas y contenidos foo -> bar:
          repren --full --preserve-case --from foo --to bar .
          # Recuperar archivos de respaldo cualquier.bak -> cualquier:
          repren --renames --from '.*)\.bak' --to '\1' *.bak
          # Igual que arriba, utilizando rename, si esta disponible:
          rename 's/\.bak$//' *.bak
    • Como dice la página de man, rsync es una muy rápida y extraordinariamente versatil herramienta de copiado. Esta se conoce por la sincronización entre máquinas pero es igualmente útil localmente. Esta también se encuentra entre las formas más rápidas para borrar un gran número de archivos:
    mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
    • Usa shuf para mezclar o seleccionar líneas aleatorias de un archivo.
    • Conoce las opciones de sort. Para números, usa -n, o -h para manipulación de números humanamente leíbles (Ej. desde du -h). Conoce el trabajo principal de (-t y -k). En particular, esta atento que lo necesitas escribir-k1,1 para ordenar por solo el primer campo; -k1 significa ordenar de acuerdo a toda la línea. Orden estable (sort -s) puede ser útil. Por ejemplo, para organizar el primer por el campo 2, entonces secundariamente hacerlo por el campo 1, Puedes usar sort -k1,1 | sort -s -k2,2.
    • Si alguna vez necesitas escribir un tab literal en una línea de comandos en Bash (Ej. para el argumento -t de ordenar), presiona ctrl-v [Tab] o escribe $'\t' (El último es mejor porque puedes copiarlo/pegarlo).
    • Las herramientas estándar para reparar el código fuente son diff y patch. Consulta también diffstat para resumen estadístico de una diff y sdiff para un diff puesto lado a lado. Considera diff -r trabaja con directorios por completo. Usa diff -r tree1 tree2 | diffstat para el resumen de cambios. Urilizá vimdiff para comparar y editar archivos.
    • Para archivos binarios, usa hd, hexdeump or xxd para volcados hexdecimales simples y bvi o biew para edición de binario.
    • También para archivos binarios, strings (además de grep, etc.) permite encontrar fragmentos de texto.
    • Para diffs binaria (compresión delta), usa xdelta3.
    • Para convertir la codificación del texto, probar iconv. O uconv para uso más avanzado; este soporta algunos elementos Unicode avanzados. Por ejemplo, este comando coloca en minúsculas y remueve todas los acentos (por su expansión y colocándolos):
          uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
    • Para dividir archivos en múltiples partes, consulta split (para dividir por tamaño) y csplit (para dividir por un patrón).
    • Para manipular expresiones de fecha y tiempo, usa dateadd, datediff, strptime etc. de dateutils.
    • Usa zless, zmore, zcat, y zgrep para operar sobre archivos comprimidos.

    Fuente:
    https://github.com/jlevy/the-art-of-command-line/blob/master/README-es.md
    Vía:
    http://lamiradadelreplicante.com/2015/11/24/conquista-la-terminal-con-el-arte-de-la-linea-de-comandos/

    0 comentarios :

    Publicar un comentario

    Los comentarios pueden ser revisados en cualquier momento por los moderadores.

    Serán publicados aquellos que cumplan las siguientes condiciones:
    - Comentario acorde al contenido del post.
    - Prohibido mensajes de tipo SPAM.
    - Evite incluir links innecesarios en su comentario.
    - Contenidos ofensivos, amenazas e insultos no serán permitidos.

    Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.