Referencia practica de Comandos de Linux

No falta la oportunidad cuando necesitamos administrar nuestro servidor dedicado linux y no recordamos la sintaxis de los comandos unix. Aca les comparto una lista de referencia con los mas usados de todos los comandos en linux.

Comando

Descripción

apropos palabraVer comandos relacionados con palabra. Ver también threadsafe
which comandoVer la ruta completa de comando
time comandoMedir cuanto tarda comando
time catIniciar cronómetro. Ctrl-d para detenerlo. Ver también sw
nice infoLanzar comando con prioridad baja (info en este ejemplo)
renice 19 -p $$Darle prioridad baja al shell (guión). Usar para tareas no interactivas

Navegación de directorios

cd –Volver al directorio anterior
cdIr al directorio personal (home)
(cd dir && comando)Ir a dir, ejecutar comando y volver al directorio inicial
pushd .Guardar el directorio actual en la pila para luego, poder hacer popd y volver al mismo
alias l=’ls -l –color=auto’listado de directorio rápido
ls -lrtListar archivos por fecha. Ver también newest
ls /usr/bin | pr -T9 -W$COLUMNSImprimir 9 columnas en ancho de la terminal
find -name ‘*.[ch]’ | xargs grep -E ‘expre’Buscar ‘expre’ en este directorio y subdirectorios. Ver también findrepo
find -type f -print0 | xargs -r0 grep -F ‘ejemplo’Buscar ‘ejemplo’ en todos los archivos regulares en este directorio y subdirectorios
find -maxdepth 1 -type f | xargs grep -F ‘ejemplo’Buscar ‘ejemplo’ en todos los archivos regulares de este directorio
find -maxdepth 1 -type d | while read dir; do echo $dir; echo cmd2; doneProcesar cada elemento con muchos comandos (con un bucle while)
find -type f ! -perm -444Hallar archivos sin permiso general de lectura (util para sedes web)
find -type d ! -perm -111Hallar directorios sin permiso general de acceso (util para sedes web)
locate -r ‘file[^/]*\.txt’Buscar nombres en indice en cache. Este re es igual a glob *file*.txt
look referenciaBúsqueda rápida (ordenada) de prefijo en diccionario
grep –color referencia /usr/share/dict/palabrasResaltar ocurrencias de expresión regular en diccionario

Archivos

gpg -c fileEncriptar archivo
gpg file.gpgDesencriptar archivo
tar -c dir/ | bzip2 > dir.tar.bz2Crear archivo compacto de dir/
bzip2 -dc dir.tar.bz2 | tar -xExtraer archivo compacto (usar gzip en vez de bzip2 para archivos tar.gz )
tar -c dir/ | gzip | gpg -c | ssh [email protected] ‘dd of=dir.tar.gz.gpg’Crear compactado encriptado de dir/ en equipo remoto
find dir/ -name ‘*.txt’ | tar -c –files-from=- | bzip2 > dir_txt.tar.bz2Crear compactado de subconjunto de dir/ y subdirectorios
find dir/ -name ‘*.txt’ | xargs cp -a –target-directory=dir_txt/ –parentsCopiar subconjunto de dir/ y subdirectorios
( tar -c /dire/de/copiame ) | ( cd /este/dir/ && tar -x -p )Copiar (con permisos) directorio copiame/ a directorio /este/dir/
( cd /dire/de/copiame && tar -c . ) | ( cd /este/dir/ && tar -x -p )Copiar (con permisos) contenido del directorio copiame/ a directorio /este/dir/
( tar -c /dire/de/copiame ) | ssh -C [email protected] ‘cd /este/dir/ && tar -x -p’Copiar (con permisos) directorio copiame/ a directorio remoto /este/dir/
dd bs=1M if=/dev/hda | gzip | ssh [email protected] ‘dd of=hda.gz’Respaldo de disco duro en equipo remoto
rsync (Usar la opción –dry-run para probarlo)
rsync -P rsync://rsync.servidor.com/ruta/a/archivo archivoObtenerr solo diffs. Repetir muchas veces para descargas conflictivas
rsync –bwlimit=1000 desdearchivo alarchivoCopia local con taza límite. Parecido a nice para E/S (I/O)
rsync -az -e ssh –delete ~/public_html/ remoto.com:’~/public_html’Espejo de sede web (usando compresión y encriptado)
rsync -auz -e ssh remote:/dir/ . && rsync -auz -e ssh . remote:/dir/Sincronizando directorio actual con uno remoto

Descargas con wget

(cd cmdline && wget -nd -pHEKkGuardar en directorio actual una versión navegable de una página web
wget -cRetomar descarga de un archivo parcialmente descargado
wget -r -nd -np -l1 -A ‘*.jpg’Descargar una serie de archivos en el directorio actual
wget ftp://remoto/archivo[1-9].iso/FTP permite globalizaciones directas
wget -q -O- http://www.pixelbeat.org/timeline.html | grep ‘a href’ | headProcesando directamente la salida
echo ‘wget url’ | at 01:00Descargar la url a 1AM al directorio en que esté
wget –limit-rate=20k urlHacer descargas de baja prioridad (en este caso, no exceder los 20KB/s)
wget -nv –spider –force-html -i bookmarks.htmlRevisando los enlaces de una página
wget –mirrorActualizar eficientemente una copia local de una página web (útil si usamos cron)

Redes

ethtool interfaceListar estado de interfase
ip link showListar interfases
ip link set dev eth0 name wanRenombrar eth0 a wan
ip addr add 1.2.3.4/24 brd + dev eth0Agregar ip y máscara (255.255.255.0)
ip link set dev interface upSubir (o bajar) la interfase
ip route add default via 1.2.3.254Establecer 1.2.3.254 como valor por omisión para la puerta de enlace.
tc qdisc add dev lo root handle 1:0 netem delay 20msecAgregarle 20ms de espera al dispositivo de retorno (para hacer pruebas)
tc qdisc del dev lo rootQuitar la espera agregada antes.
host pixelbeat.orgObtener la dirección ip para el dominio o al revés
hostname -iObtener la dirección ip local (equivale al anfitrión `hostname`)
netstat -tuplListar los servicios de internet de un sistema
netstat -tupListar las conexiones activas de/hacia un sistema

Windows via Samba

smbtreeHallar equipos windows. Ver también findsmb
nmblookup -A 1.2.3.4Hallar el nombre (netbios) de windows asociado con la dirección ip
smbclient -L windows_boxListar archivos compartidos en equipos windows o servidor samba
mount -t smbfs -o fmask=666,guest //windows_box/share /mnt/shareMontar un directorio compartido
echo ‘mensaje’ | smbclient -M windows_boxEnviar mensaje emergente al equipo windows (desactivado por omisión en XP sp2)

Math

echo ‘(1 + sqrt(5))/2’ | bc -lCuentas rápidas (Calcular ?). Ver también bc
echo ‘obase=16; ibase=10; 64206’ | bcConversiones de base (decimal a hexadecimal)
echo $((0x2dec))Conversiones de base (hex a dec) ((expansión aritmética del shell))
echo ‘pad=20; min=64; (100*10^6)/((pad+min)*8)’ | bcMas complejo (int) x.ej. Ejemplo: tasa máxima de paquetes FastE
echo ‘pad=20; min=64; print (100E6)/((pad+min)*8)’ | pythonPython maneja notación científica
echo ‘pad=20; plot [64:1518] (100*10**6)/((pad+x)*8)’ | gnuplot -persistGraficar tasa de paquetes FastE vs. tamaño de paquetes
seq 100 | (tr ‘\n’ +; echo 0) | bcAgregar una columna de números. Ver también add y funcpy
manejo de textos (nota: como sed usa stdin y stdout, para editar archivos, agregar… <viejoarchivo >nuevoarchivo)
sed ‘s/cadena1/cadena2/g’Remplaza cadena1 por cadena2
sed ‘s/\(.*\)1/\12/g’Modificar cualquiercadena1 con cualquiercadena2
sed ‘/ *#/d; /^ *$/d’Quitar comentarios y lineas en blanco
sed ‘:a; /\\$/N; s/\\\n//; ta’Concatenar lineas con \ al final
sed ‘s/[ \t]*$//’Quitar blancos finales de las lineas
sed ‘s/\([\\`\\”$\\\\]\)/\\\1/g’Escapar metacaracteres activos del shell dentro de comillas dobles
sed -n ‘1000p;1000qListar la línea 1000°
sed -n ‘10,20p;20qListar de la linea 10 a la 20
sed -n ‘s/.*<title>\(.*\)<\/title>.*/\1/ip;T;qExtraer titulo de página web en HTML
sort -t. -k1,1n -k2,2n -k3,3n -k4,4nSort de direcciones ip de tipo IPV4
echo ‘Test’ | tr ‘[:lower:]’ ‘[:upper:]’Conversión de cajas
tr -dc ‘[:print:]’ < /dev/urandomFiltrando caracteres no imprimibles
grep ‘processor’ /proc/cpuinfo | wc -lContar lineas
definir operaciones (Nota export LANG=C es para acelerar, aquí también se supone que no hay líneas duplicadas en los archivos)
sort archivo1 archivo2 | uniqUnion de archivos sin ordenar
sort archivo1 archivo2 | uniq -dIntersección de archivos sin ordenar
sort archivo1 archivo1 archivo2 | uniq -uDiferencia de archivos sin ordenar
sort archivo1 archivo2 | uniq -uDiferencia Simétrica de archivos sin ordenar
comm archivo1 archivo2 | sed ‘s/^\t*//’Unión de archivos ordenados
comm -12 archivo1 archivo2Intersección de archivos ordenados
comm -13 archivo1 archivo2Diferencia de archivos ordenados
comm -3 archivo1 archivo2 | sed ‘s/^\t*//’Diferencia Simétrica de archivos ordenados

calendario

cal -3Mostrar calendario
cal 9 1752Mostrar calendario para mes y año determinado
date -d friQue día cae este viernes. Ver también day
date –date=’25 Dec’ +%A¿En que día cae la Navidad, este año?
date –date ‘1970-01-01 UTC 1234567890 seconds’Convertir total de segundos desde la época a una fecha
TZ=’:America/Los_Angeles’ date¿Que hora es en la Costa Oeste de EEUU (usar tzselect para hallar TZ)
echo “mail -s ‘tomar el tren’ [email protected] < /dev/null” | at 17:45Recordatorio por email
echo “DISPLAY=$DISPLAY xmessage cooker” | at “NOW + 30 minutes”Recordatorio emergente

locales

printf “%’d\n” 1234Imprimir numero agrupado por miles de acuerdo a su locale
BLOCK_SIZE=\’1 ls -lpedir que ls agrupe por miles de acuerdo a su locale
echo “Yo vivo en `locale territory`”Extraer información de la base de datos del  locale
LANG=en_IE.utf8 locale int_prefixBuscar información de locale para determinado país. Ver también ccodes
locale | cut -d= -f1 | xargs locale -kc | lessListar campos en base de datos del locale
recode (obsoletos: iconv, dos2unix, unix2dos)
recode -l | lessVer conversiones disponibles (aliases en cada línea)
recode windows-1252.. archivo_a_cambiar.txt“ansi” de Windows a tabla de caracteres locales (auto hace conversión CRLF)
recode utf-8/CRLF.. archivo_a_cambiar.txtutf8 de Windows a tabla de caracteres locales
recode iso-8859-15..utf8 archivo_a_cambiar.txtLatin9 (Europa oriental) a utf8
recode ../b64 < archivo.txt > archivo.b64Codificado Base64
recode /qp.. < archivo.txt > archivo.qpDecodificado de citas imprimibles (qp)
recode ..HTML < archivo.txt > archivo.htmlTexto a HTML
recode -lf windows-1252 | grep euroBuscar tabla de caracteres
echo -n 0x80 | recode latin-9/x1..dumpMostrar representación de un código en tabla de caracteres latin-9
echo -n 0x20AC | recode ucs-2/x2..latin-9/xVer codificado latin-9
echo -n 0x20AC | recode ucs-2/x2..utf-8/xVer codificado utf-8

CDs

gzip < /dev/cdrom > cdrom.iso.gzGuardar una copia de los datos de cdrom
mkisofs -V NOMBRE -r dir | gzip > cdrom.iso.gzCrear imagen de cdrom con el contenido de dir
mount -o loop cdrom.iso /mnt/dirMontar la imagen cdrom en /mnt/dir (solo lectura)
cdrecord -v dev=/dev/cdrom blank=fastLimpiar un CDRW
gzip -dc cdrom.iso.gz | cdrecord -v dev=/dev/cdrom –Grabar un cdrom con imagen (usar dev=ATAPI -scanbus para confirmar ruta dev)
cdparanoia -BExtraer pistas de audio desde un CD a archivos wav en directorio actual
cdrecord -v dev=/dev/cdrom -audio *.wavArmar un CD de audio con todos los wavs en directorio actual (ver también cdrdao)
oggenc –tracknum=’pista’ pista.cdda.wav -o ‘pista.ogg’Crear un archivo ogg con un archivo wav

Espacio en disco

ls -lSrMostrar archivos, de menor a mayor
du -s * | sort -k1,1rn | headMostrar usuarios de disco principales en el directorio actual. Ver también dutop
df -hMostrar espacio libre de disco
df -iMostrar inodos libres
fdisk -lMostrar tamaños y tipos de particiones de disco (pedir como root)
rpm -q -a –qf ‘%10{SIZE}\t%{NAME}\n’ | sort -k1,1nListar todos los paquetes por tamaño instalado (Bytes) de distribuciones RPMs
dpkg-query -W -f=’${Installed-Size;10}\t${Package}\n’ | sort -k1,1nistar todos los paquetes por tamaño instalado (Kbytes) de distribuciones deb
dd bs=1 seek=2TB if=/dev/null of=ext3.testCrear un gran archivo de prueba (sin ocupar espacio). Ver también truncate

Monitoreo/Rastreo

strace -c ls >/dev/nullResumir/perfil de llamadas al sistema hechas con comando
strace -f -e open ls >/dev/nullListar llamadas al sistema hechas con comando
ltrace -f -e getenv ls >/dev/nullListar llamadas a librerías hechas con comando
lsof -p $$Listar las rutas que abrió el id de proceso
lsof ~Listar procesos que solicitaron apertura de rutas
tcpdump not port 22Ver tráfico de redes  excepto ssh. Ver también tcpdump_not_me
ps -e -o pid,args –forestListar procesos de una jerarquía
ps -e -o pcpu,cpu,nice,state,cputime,args –sort pcpu | sed ‘/^ 0.0 /d’Listar procesos por % de uso de cpu
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNSListar procesos por uso de memoria. Ver también ps_mem.py
ps -C firefox-bin -L -o pid,tid,pcpu,stateListar todos los hilos de un proceso determinado
ps -p 1,2Listar información de un ID determinado
last rebootVer historia de reencendido del sistema
free -mVer cantidad de RAM  (que queda) (-m muestra en MB)
watch -n.1 ‘cat /proc/interrupts’Observar continuamente los datos que van cambiando

Información del sistema

hdparm -i /dev/hdaVer informe sobre partición hda
hdparm -tT /dev/hdaHacer una prueba de velocidad de lectura en partición hda
badblocks -s /dev/hdaHallar bloques ilegibles en partición hda
mount | column -tVer particiones montadas en el sistema (y alinear la salida)
cat /proc/partitionsVer todas las particiones registradas en el sistema
grep MemTotal /proc/meminfoVer el total de RAM que registra el sistema
grep “model name” /proc/cpuinfoVer informe de CPU(s)
lspci -tvVer informe de PCI
lsusb -tvVer informe de USB

Interactivo

mcPoderoso administrador de archivos que permite navegar por rpm, tar, ftp, ssh, …
screenTerminales virtuales con capacidad de reacomodamiento, …
linksNavegador web
gnuplotGraficos interactivos/ programables
octaveEntorno parecido a Matlab

Miscelaneo

alias hd=’od -Ax -tx1z -v’Práctico vuelco hexa. (uso x.ej.: • hd /proc/self/cmdline | less)
alias realpath=’readlink -f’Canonicalizar ruta. (uso x.ej.: • realpath ~/../$USER)
set | grep $USERBuscar en el entorno actual
touch -c -t 0304050607 archivoAsignarle a archivo la fecha (AAMMDDhhmm)
python -m SimpleHTTPServerServe current directory tree at http://$HOSTNAME:8000/

2 comments

  1. Estupendo.
    Me ha encantado.

    Siempre se está aprendiendo nuevas cosas con los comandos.
    No se acaba de abarcar el concepto interactivo del funcionamiento de linux, su filosofía elegante y recursiva.

    Si llegasemos a comprender cómo funciona, cómo “piensa” el SO, esto es: Cómo fue pensado por sus programadores, no harían falta apenas “chuletas”/ notas recordatorias.

    Un usuario / root intermitente y temporal, pero recurrente de linux desde 1996.

    Un vez más, aprendiendo a aprender.

Comentario, Preguntas o agradecimientos?