Core utilities (Español)

From ArchWiki
Jump to: navigation, search

Este artículo trata sobre las utilidades de los sistemas GNU/Linux denominadas core, tales como less, ls, y grep. El ámbito de este artículo incluye (pero no está limitado) a las utilidades del paquete coreutils de GNU. Los siguientes son trucos, consejos e información relacionada con dichas utilidades.

Comandos básicos

La siguiente tabla lista los comandos básicos de consola que todo usuario linux debería conocer. Comandos en negrita son parte de la línea de comandos, los otros son programas separados llamados desde la consola. Véase las siguientes secciones y Artículos relacionados para más detalles.

Comando Descripción Ejemplo
man Muestra la página del manual para ese comando man ed
cd Cambia de directorio cd /etc/pacman.d
mkdir Crea un directorio mkdir ~/newfolder
rmdir Elimina un directorio vacío rmdir ~/emptyfolder
rm Elimina un fichero rm -r ~/file.txt
rm -r Elimina directorios y sus contenidos rm -r ~/.cache
ls Lista archivos ls *.avi
ls -a Lista archivos ocultos ls -a /home/archie
ls -al Lista archivos ocultos y propiedades de los archivos
mv Mueve un fichero mv ~/compressed.zip ~/archive/compressed2.zip
cp Copia un fichero cp ~/.bashrc ~/.bashrc.bak
chmod +x Da permisos de ejecución a un fichero chmod +x ~/.local/bin/myscript.sh
cat Muestra el contenido de un archivo cat /etc/hostname
strings Muestra caracteres imprimibles en un fichero binario strings /usr/bin/free
find Busca un archivo find ~ -name myfile
mount Monta una partición mount /dev/sdc1 /media/usb
df -h Muestra el espacio disponible en todas las particiones
ps -A Muestra todos los procesos en ejecución
killall Mata todas las instancias de un proceso en ejecución

cat

cat (concatenate) es una utilidad estándar de unix que concatena y lista ficheros.

  • Dado que cat no es un comando integrado en la consola, en bastantes ocasiones encontrará más conveniente usar una redirección (English), por ejemplo en scripts, o si le preocupa el rendimiento. De hecho < file hace lo mismo que cat file.
  • cat es capaz de trabajar con múltiples líneas, aunque esto se ve a veces como una mala práctica.
$ cat << EOF >> ruta/al/fichero
primera linea
...
últimalinea
EOF
Una alternativa mejor es el comando echo:
$ echo "\
primera línea
...
última línea" \
>> ruta/al/fichero
  • Si necesita lista las líneas del fichero en orden inverso, existe una utilidad llamada tac tac (cat invertido).

dd

dd es un comando de sistemas operativos Unix y tipo-Unix cuyo propósito principal es convertir y copiar un fichero.

Note: cp hace lo mismo que dd sin pasarle argumentos pero no está diseñado para procedimientos de borrado de discos más versátiles.

Comprobar el progreso de dd en ejecución

Por defecto, no hay salida para dd hasta que la tarea ha terminado. Con kill y la señal USR1 puede forzar a imprimir el estatus sin matar al programa. Habra una segunda terminal como root e introduzca el siguiente comando:

# killall -USR1 dd
Note: Esto afectará de igual manera a todas las instancias en ejecución de dd.

O:

# kill -USR1 pid_del_comando_dd

Por ejemplo:

# kill -USR1 $(pidof dd)

Esto provoca que dd imprima de forma inmediata el progreso en la terminal. Por ejemplo:

605+0 records in
605+0 records out
634388480 bytes (634 MB) copied, 8.17097 s, 77.6 MB/s

Usando el visor de tubería (pv)

Como alternativa puede usar pv para monitorizar el pipeline de dd:

# dd if=/origen/de/flujo_de_archivo | pv -opciones_de_monitorización -s tamaño_del_archivo | dd of=/destino/de/flujo_de_archivo

Para usar el visor de tuberías con mayor facilidad puede añadir esto a bashrc o a zshrc:

copy() {
    size=$(stat -c%s $1)
    dd if=$1 &> /dev/null | pv -petrb -s $size | dd of=$2
}

Y usarlo con:

# copy /fichero/de/origen /fichero/de/destino

derivados de dd

Otros programas por el estilo de dd muestra un estatus de salida periódico, p.ej: una simple barra de progreso.

dcfldd 
dcfldd es una versión mejorada de dd con características utiles para análisis forense y seguridad. Acepta la mayoría de los parámetros de dd e incluye salida de estatus. La última versión estable de dcfldd fue el 19 de diciembre de 2006.[1]
ddrescue 
GNU ddrescue es una herramienta de recuperación de datos. Es capaz de ignorar errores de lectura, lo que es una característica útil en situaciones de borrado de disco en casi cualquier caso. Véase official manual para más detalles.

grep

grep (de ed g/re/p, global/regular expression/print) es una utilidad para búsqueda de texto en línea de comandos escrito originalmente para Unix. El comando grep busca ficheros o en la entrada estándar de manera global líneas que coincidan con una expresión regular dada y las imprime en la salida estándar del programa.

  • Recuerde que grep maneja ficheros files, por lo que un comando como cat archivo | grep patrón es remplazable por grep patrón archivo

Salida con colores

La salida con colores de grep puede ser muy útil para aprender expresiones regulares y características adicionales de grep.

Para habilitar el coloreado de grep agregue la siguiente entrada en el archivo de configuración de su terminal (p.ej:. si usa Bash):

~/.bashrc
alias grep='grep --color=auto'

Para incluir numeración de las líneas en la salida, incluya -n en la entrada anterior.

La variable de entorno GREP_COLOR puede usarse para definir el color de resaltado por defecto (por defecto es rojo). Para cambiar el color busque en secuencia de escape ANSI para el color que desee y añádalo con:

export GREP_COLOR="1;32"

GREP_COLORS puede usarse para definir búsquedas específicas.

Salida de error estándar

Algunos comandos envían sus resultados a la salida de error estándar, por lo que grep no parece tener efecto aparente. En este caso redirija la salida de error a la salida estándar con:

$ comando 2>&1 | grep argumentos

o usando el método abreviado de Bash 4:

$ comando |& grep argumentos

Véase también I/O Redirection.

iconv

iconv convierte la codificación de caracteres de una codificación a otra.

El siguiente comando convertirá el fichero foo de ISO-8859-15 a UTF-8 guardándolo en foo.utf:

$ iconv -f ISO-8859-15 -t UTF-8 foo >foo.utf

Vea iconv(1) para más detalles.

Convertir el fichero reemplazándolo

Tip: puede usar recode en lugar de iconv si no quiere tocar el mtime.

Al contrario que sed, iconv no provee una opción para convertir remplazando el propio fichero. Sin embargo, sponge puede usarse para tal fin, esta incluido en moreutils.

$ iconv -f WINDOWS-1251 -t UTF-8 foobar.txt | sponge foobar.txt

Vea sponge(1) para más detalles.

ip

ip permite mostrar información sobre los dispositivos de red, direcciones IP, tablas de enrutamiento y otros objetos en la pila de procotolos IP de Linux. Añadiendo varios comandos, puede manipular y configurar la mayoría de estos objetos.

Note: La utilidad ip la provee el paquete iproute2, que está incluido en el grupo base.
Objecto Propósito Nombre de página en el manual
ip addr manejo de dirección de protocolo ip-address
ip addrlabel manejo etiquetado protocolo ip-addrlabel
ip l2tp Tunel ethernet sobre IP (L2TPv3) ip-l2tp
ip link configuración dispositivo de red ip-link
ip maddr manejo direcciones multicast ip-maddress
ip monitor monitorizado de mensajes netlink ip-monitor
ip mroute manejo de cache de enrutado multicast ip-mroute
ip mrule manejo la base de datos de politicas de enrutado multicast
ip neigh manejo de tablas ARP/Vecinos ip-neighbour
ip netns manejo de proceso del espacio de nombres en red ip-netns
ip ntable configuración tabla de vecinos ip-ntable
ip route manejo de la tabla de enrutamiento ip-route
ip rule manejo de la base de datos de políticas de enrutamiento ip-rule
ip tcp_metrics manejo de metricas TCP ip-tcp_metrics
ip tunnel configuración de tunel ip-tunnel
ip tuntap manejo de dispositivos TUN/TAP
ip xfrm manejo de políticas IPsec ip-xfrm

El comando help está disponible para todos los objetos. Por ejemplo, escribiendo ip addr help se mostrará la sintaxis del comando disponible para el objeto address. Para un uso avanzado véase documentación iproute2.

El artículo Configuración de Red muestra como el comando ip es usado en la práctica para varias tareas típicas.

Nota: Puede que esté familiarizado con el comando ifconfig, que era usado en versiones anteriores de Linux para la configuración de interfaces. Ahora está obsoleto en Arch Linux; debería usar ip en su lugar.

less

less es un visualizador de archivos de texto en consola. Al contrario que otros visualizadores similares como more y pg, less ofrece una interfaz mucho más avanzada y completa feature-set.

Véase List of applications#Terminal pagers para más alternativas.

Salida en color mediante variables de entorno

Añada las siguientes líneas a su archivo de configuración de la terminal:

~/.bashrc
export LESS=-R
export LESS_TERMCAP_me=$(printf '\e[0m')
export LESS_TERMCAP_se=$(printf '\e[0m')
export LESS_TERMCAP_ue=$(printf '\e[0m')
export LESS_TERMCAP_mb=$(printf '\e[1;32m')
export LESS_TERMCAP_md=$(printf '\e[1;34m')
export LESS_TERMCAP_us=$(printf '\e[1;32m')
export LESS_TERMCAP_so=$(printf '\e[1;44;1m')

Cambie los valores a su gusto. Referencias: ANSI escape code.

Salida en color mediante wrappers

Puede habilitar el resaltado de sintaxis en less. Primero, instale source-highlight, y a continuación añada estás lineas a su archivo de configuración de la terminal:

~/.bashrc
export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s"
export LESS='-R '

Usuarios asíduos de la línea de comandos pueden querar instalar lesspipe.

Los usarios puede listar archivos comprimidos dentro de un archivador usando su visualizador:

$ less compressed_file.tar.gz
==> usa archivo_tar:fichero_contenido para ver un fichero en el archivador
-rw------- usuario/grupo  695 2008-01-04 19:24 archivo_comprimido/contenido1
-rw------- usuario/grupo   43 2007-11-07 11:17 archivo_comprimido/contenido2
archivo_comprimido.tar.gz (END)

lesspipe también concede a less la capacidad para interactuar con ficheros que no sean archivadores, sirviendo como alternativa para el comando específico asociado a según el tipo de archivo en concreto (como ver HTML mediante python-html2text).

Vuelva a loguearse tras instalar lesspipe para activarlo, o usando source /etc/profile.d/lesspipe.sh.

Vim como visualizador alternativo

Vim (visual editor improved) tiene un script para ver el contenido de fichero de texto, binarios, directorios. Añada la siguiente línea a su archivo de configuración de la terminal para usarlo como visualizador:

~/.bashrc
alias less='/usr/share/vim/vim74/macros/less.sh'

Existe una alternativa a la macro less.sh, que puede funcionar como la variable de entorno PAGER. Instale vimpager añada lo siguiente a su archivo de configuración de la terminal:

~/.bashrc
export PAGER='vimpager'
alias less=$PAGER

Ahora los programas que usen la variable de entorno PAGER, como git, usarán vim como un visualizador.

Salida coloreada cuando lee de entrada estándar

Nota: Se recomienda añadir #Salida en color mediante variables de entorno a su ~/.bashrc o ~/.zshrc, ya que lo siguiente esta basado en export LESS=R

Cuando ejecuta un comando y redirige su salida estándar (stdout) a less para visualizarla (p.ej: pacman -Qe | less), puede encontrarse con que la salida ya no sale coloreada. Esto suele pasar porque el programa intentar detectar si su salida estándar es un terminal interactivo, en cuyo caso imprime el texto coloreado, en caso contrario no. Esto es un buen comportamiento cuando quiere redirigir la salida estándar a un fichero, p.ej: pacman -Qe > pkglst-backup.txt, pero menos indicado cuando quiere visualizar la salid con less.

Algunos programas proveen una opción para deshabilitar la detección de tty interactiva:

# dmesg --color=always | less

En el caso de que el programa no proporcione una opción similar, es posible engañarlo para que crea que la salida estándar es un terminal interactivo con las siguientes utilidades:

  • stdoutisatty — Un pequeño programa que captura la llamada a la función isatty .
https://github.com/lilydjwg/stdoutisatty. || stdoutisatty-gitAUR
Ejemplo: stdoutisatty program | less
  • socat — Un relevo para transferencia de datos bidireccional entre dos canales de datos independientes. Esta basado en el programa de GNU readline.
http://www.dest-unreach.org/socat/ || socat
Ejemplo: socat EXEC:"program",pty STDIO | less
  • script — Una utilidad que hace typescript de una sesión de terminal.
|| util-linux
Ejemplo: script -fqc "program" | less or [2]
  • unbuffer — Un script basado en sh y Tcl.
http://expect.sourceforge.net/example/unbuffer.man.html || expect
Ejemplo: unbuffer program | less

De forma alternativa, usando el módulo zpty de zsh: [3]

~/.zshrc
zmodload zsh/zpty

pty() {
	zpty pty-${UID} ${1+$@}
	if [[ ! -t 1 ]];then
		setopt local_traps
		trap '' INT
	fi
	zpty -r pty-${UID}
	zpty -d pty-${UID}
}

ptyless() {
	pty $@ | less
}

Uso:

$ ptyless program

Para redirigirlo a un visualizador (less en este ejemplo):

$ pty program | less

ls

ls (list) es un comando para lista fichero en sistemas operativos Unix y similares.

  • Salida coloreada puede ser habilitada con un simple alias. El fichero ~/.bashrc debería tener la siguiente entrada copiada de /etc/skel/.bashrc:
alias ls='ls --color=auto'

El siguiente paso mejorará aún más la salida coloreada de ls; por ejemplo, enlaces simbólicos rotos (huérfanos) se mostrarán en un tono rojo. Añada la siguiente línea a su archivo de configuración de la terminal:

eval $(dircolors -b)

mkdir

mkdir (make directory) es un comando para crear directorios.

  • Para crear un directorio y toda su jerarquía, es usado el argumento -p, de otra forma se monstraría un error. Como se supone que los usuario saben lo que quieren, el argumento -p puede usarse por defecto:
alias mkdir='mkdir -p -v'
El argumento -v hace que la salida sea más detallada.
  • Cambiar los permisos con chmod tras crear el directorio no es necesario pues la opción -m permite definir los permisos de acceso.
Sugerencia: Si tan solo quiere un directorio temporal, una mejor alternativa es mktemp (make termporary): mktemp -p.

mv

mv (move) es un comando para renombrar y mover ficheros y directorios.

  • Puede ser muy peligroso, por lo que se recomiendo limitar su ámbito:
alias mv=' timeout 8 mv -iv'
Este alias suspende mv tras ocho segundos, pide confirmación para borrar tres o más ficheros, lista las operaciones en curso y no almacena en el historial de la terminal si la terminal esta configurada para no almacenar aquellos comandos que empiezen por un espacio.

rm

rm (remove) es un comando que sirve para eliminar ficheros y directorios.

  • Puede ser muy peligroso, por lo que se recomiendo limitar su ámbito:
alias rm=' timeout 3 rm -Iv --one-file-system'
Este alias suspende rm tras 3 segundos, pide confirmación para borrar tres o más ficheros, lista las operaciones en curso, no involucra mñas de un sistema de ficheros y no almacena en el historial de la terminal si la terminal esta configurada para no almacenar aquellos comandos que empiezen por un espacio. Sustituya -I por -i si prefiere confirmación por cada fichero.
Usuarios de Zsh pueden querer poner noglob antes de timeout para evitar expansiones implicitas.
  • Para eliminar directorios vacíos, use rmdir, si el objetivo contiene ficheros fallará.

sed

sed (stream editor) es una utilidad de Unix que parsea y transforma texto

Aquí hay un puñado list de ejemplo de una línea de como usar sed muy útiles.

Sugerencia: Alternativas más potentes son AWK e incluso el lenguaje Perl.

seq

seq (sequence) es una utilidad para generar secuencias de números. Hay alternativas integradas en la shell disponibles, por lo que es una buena práctica usarlas como se explica en Wikipedia.

Véase también