Jhonatan Pinheiro
Cargando página...
Jhonatan Pinheiro
Cargando página...
Jhonatan Pinheiro
Cargando página...
Navegación, archivos, permisos, usuarios, procesos, paquetes, disco, red, compresión y búsqueda: 200 comandos con ejemplos listos.
Todo servidor que vas a administrar, todo contenedor que vas a depurar y buena parte de las herramientas que usas corren sobre Linux. Aprender la terminal deja de ser opcional muy rápido.
Estos 200 comandos son la base: navegar, leer, editar, dar permisos, matar un proceso, instalar un paquete, ver el disco, probar la red, comprimir y buscar. Los ejemplos usan Debian/Ubuntu como referencia, con la variación de RHEL/Fedora anotada donde cambia.
Un consejo que ahorra horas:
Tabcompleta nombres,Ctrl+Rbusca en el historial yman comando(ocomando --help) responde antes que Google.
Dónde estás, qué hay aquí y cómo mover las cosas de sitio.
Muestra el directorio actual por completo.
pwdEl comando más usado de la terminal.
lsPermisos, dueño, tamaño y fecha de cada elemento.
ls -lLos archivos que empiezan por punto solo aparecen con -a.
ls -la-h cambia los bytes por KB, MB y GB.
ls -lhLos más recientes primero — ideal para encontrar lo que acaba de cambiar.
ls -lt
ls -ltr # los más antiguos primeroNavega a la ruta indicada.
cd /var/logCasa, anterior, arriba. Los tres que más usas.
cd ~ # el home del usuario
cd - # el directorio anterior
cd .. # un nivel arribaSi empieza por / es absoluta; si no, parte de donde estás.
cd /etc/nginx # absoluta
cd nginx/conf.d # relativaCrea una carpeta.
mkdir projetosCrea los padres que falten y no protesta si ya existe.
mkdir -p projetos/api/srcCrea el archivo o actualiza su fecha de modificación.
touch notas.txtCopia un archivo manteniendo el original.
cp origem.txt destino.txt-r es obligatorio para las carpetas.
cp -r projetos/ backup-projetos/-a mantiene los permisos, el dueño y las fechas. La forma correcta de copiar un backup.
cp -a /var/www/ /backup/www/El mismo comando hace las dos cosas.
mv antigo.txt novo.txt
mv relatorio.pdf ~/Documentos/No hay papelera. Lo que sale de aquí, salió.
rm arquivo.txtElimina de forma recursiva.
rm -r pasta-antiga/Pregunta por cada archivo. En un servidor merece la pena el hábito.
rm -i *.logUn espacio de más borra el sistema. Comprueba la ruta dos veces antes del Enter.
rm -rf /caminho/certo # compruébalo antes
# rm -rf / caminho <- el espacio de aquí lo borra todoUn atajo que apunta a otra ruta.
ln -s /var/www/site /home/user/siteVisualiza la estructura; -L limita la profundidad.
tree -L 2Separan el nombre del archivo de la ruta. Muy usados en scripts.
basename /var/log/syslog # syslog
dirname /var/log/syslog # /var/logResuelve enlaces y rutas relativas hasta la ruta absoluta.
realpath ../projetoEl shell expande el patrón antes de que el comando se ejecute.
ls *.log # termina en .log
ls arquivo?.txt # un carácter cualquiera
ls dados[1-3].csv # un intervaloLeer un archivo grande sin bloquear la terminal y editar sin salir del SSH.
Vuelca el contenido entero. Cuidado con un archivo grande.
cat /etc/hostnameFacilita hablar de la línea X del archivo.
cat -n script.shLa forma correcta de abrir un archivo grande. q sale, / busca, G va al final.
less /var/log/syslogLas 10 primeras líneas por defecto.
head arquivo.csv
head -n 50 arquivo.csvLas últimas líneas — donde suele estar el error reciente.
tail -n 100 /var/log/nginx/error.logSigue el archivo mientras crece. El comando de guardia.
tail -f /var/log/nginx/access.logComo -f, pero sobrevive a la rotación del log.
tail -F /var/log/app.logLíneas, palabras y bytes.
wc -l acesso.log # líneas
wc -w texto.txt # palabras
wc -c arquivo.bin # bytesPara quien solo necesita editar y salir. Ctrl+O guarda, Ctrl+X sale.
nano /etc/hostsEstá en cualquier servidor. i inserta, Esc sale del modo, :wq guarda y cierra, :q! sale sin guardar.
vim /etc/nginx/nginx.confOrdena las líneas; -n numérico, -r inverso.
sort nomes.txt
sort -nr valores.txtSolo funciona con líneas adyacentes — combínalo con sort.
sort acessos.log | uniq
sort acessos.log | uniq -c | sort -nr # un rankingExtrae campos por delimitador o por posición.
cut -d: -f1 /etc/passwd # usuarios
cut -c1-10 arquivo.txt # los 10 primeros caracteresConvierte o elimina caracteres del flujo.
echo "texto" | tr 'a-z' 'A-Z'
tr -d '\r' < arquivo-windows.txt > arquivo-unix.txtMuestra lo que cambió entre dos archivos.
diff config-antigo.conf config-novo.conf
diff -u a.txt b.txt # formato unificado, como en gitComo cat -n, con más opciones de formato.
nl arquivo.txtParte un archivo grande en trozos.
split -l 1000 grande.csv parte_Verifican la integridad de una descarga.
sha256sum imagem.iso
sha256sum -c checksums.txtDescubre el tipo real, ignorando la extensión.
file documento.pdf
file *Tamaño, permisos, dueño y las tres fechas del archivo.
stat arquivo.txtEl modelo de seguridad de Unix: quién puede leer, escribir y ejecutar qué.
-rwxr-xr--: tipo, dueño, grupo y otros. r=4, w=2, x=1.
ls -l arquivo.sh
# -rwxr-xr-- dueño: rwx (7) | grupo: r-x (5) | otros: r-- (4)La forma más común: tres dígitos, uno por franja.
chmod 644 arquivo.txt # el dueño lee/escribe, el resto lee
chmod 755 script.sh # todos ejecutan, solo el dueño escribe
chmod 600 ~/.ssh/id_ed25519 # solo el dueño, y nada másAñade o quita un permiso sin recalcularlo todo.
chmod +x script.sh
chmod u+w,go-w arquivo.txt
chmod a-x binarioSe aplica a todo el árbol. Cuidado con dar 777 en el servidor.
chmod -R 755 /var/www/siteUn directorio necesita x para poder atravesarse; un archivo no.
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;Solo root puede dar un archivo a otro usuario.
sudo chown www-data arquivo.html
sudo chown www-data:www-data -R /var/wwwCambia solo el grupo propietario.
sudo chgrp desenvolvedores projeto/Define lo que se resta de los permisos de los archivos nuevos.
umask # 0022 es el valor por defecto
umask 0077 # archivos nuevos solo para el dueñoSe ejecuta con el dueño del archivo, no con quien lo llamó. Por eso funciona passwd.
ls -l /usr/bin/passwd # -rwsr-xr-x
sudo chmod u+s programaEn un directorio, hace que todo archivo creado herede el grupo de la carpeta.
sudo chmod g+s /projetos/compartilhadoEn una carpeta compartida, solo el dueño borra su propio archivo. Es lo que protege /tmp.
ls -ld /tmp # drwxrwxrwt
sudo chmod +t /pasta-compartilhadaVa más allá de dueño/grupo/otros: permisos por usuario concreto.
setfacl -m u:jhonatan:rw arquivo.txt
getfacl arquivo.txt+i deja el archivo inmutable — ni root lo altera sin quitar el atributo.
sudo chattr +i /etc/resolv.conf
lsattr /etc/resolv.conf
sudo chattr -i /etc/resolv.confPide tu contraseña y registra en el log quién hizo qué.
sudo apt updateAbren una shell de root. Prefiere un sudo comando puntual.
sudo -i
su - outro-usuarioEl atajo más satisfactorio de la terminal.
sudo !!Lista los permisos de sudo de tu usuario.
sudo -lPermiso total para cualquier usuario del sistema. Casi siempre hay una combinación de dueño/grupo que lo resuelve.
# en lugar de: chmod -R 777 /var/www
sudo chown -R www-data:www-data /var/www
sudo chmod -R 755 /var/wwwQuién existe en la máquina y qué puede hacer cada uno.
Quién eres y a qué grupos perteneces.
whoami
id
id jhonatanQuién está conectado ahora; w muestra además lo que está ejecutando.
who
wLos últimos accesos a la máquina — la primera parada en una auditoría.
last
last -n 20adduser (Debian) es interactivo y crea el home; useradd es el comando crudo.
sudo adduser maria
sudo useradd -m -s /bin/bash mariaCambia la tuya o la de otro usuario (como root).
passwd
sudo passwd mariaAñade a grupos, cambia la shell, mueve el home.
sudo usermod -aG sudo maria # -a es obligatorio para NO quitar los demás grupos
sudo usermod -s /bin/zsh maria-r borra también la carpeta personal.
sudo userdel maria
sudo userdel -r mariaCrea un grupo y lista los del usuario.
sudo groupadd desenvolvedores
groups mariaDonde se registran usuarios y grupos (la contraseña vive en /etc/shadow).
cat /etc/passwd | cut -d: -f1,3,7
cat /etc/groupImpide el login sin borrar el usuario.
sudo usermod -L maria # bloquea
sudo usermod -U maria # desbloqueaPolítica de cambio periódico.
sudo chage -l maria
sudo chage -M 90 maria # caduca a los 90 díasSin shell y sin login: una aplicación no necesita acceso interactivo.
sudo useradd -r -s /usr/sbin/nologin appQué se está ejecutando, cuánto consume y cómo pararlo.
El listado completo de procesos, con CPU y memoria.
ps auxCombinado con grep, encuentra el proceso concreto.
ps aux | grep nginxMuestra la jerarquía de padres e hijos.
ps auxf
pstree -pSe actualiza solo. q sale, k mata, M ordena por memoria.
topCon colores, scroll y ratón. Merece la pena instalarlo en todo servidor.
htopManda SIGTERM (15): pide que termine correctamente.
kill 12345SIGKILL no se puede ignorar, pero el proceso no guarda nada. Úsalo el último.
kill -9 12345Matan por nombre, sin necesitar el PID.
pkill nginx
killall firefoxBusca un proceso por nombre.
pgrep -a nginx& suelta el proceso; jobs los lista; fg lo trae de vuelta.
./script-longo.sh &
jobs
fg %1El proceso continúa después de que cierres el SSH.
nohup ./backup.sh > backup.log 2>&1 &Suspende el proceso en primer plano y lo reanuda en segundo.
# Ctrl+Z suspende
bg # continúa en segundo plano
fg # lo trae de vueltaSe ejecuta con menor prioridad, para no estorbar al resto.
nice -n 19 ./tarefa-pesada.sh
renice -n 10 -p 12345Mata el comando si se pasa del tiempo.
timeout 30s ./script.shLo ejecuta cada N segundos y muestra el resultado actualizado.
watch -n 2 'df -h /'Descubre quién está usando un archivo o un puerto.
lsof /var/log/app.log
sudo lsof -i :8080Cuánto tiempo lleva la máquina levantada y la carga en 1, 5 y 15 minutos.
uptimeMemoria usada, libre y en caché. available es el número que importa.
free -hInstalar, actualizar y eliminar software en tu distribución.
Actualiza la lista de paquetes. No instala nada.
sudo apt updateActualiza los paquetes instalados.
sudo apt upgrade
sudo apt full-upgradeInstala uno o varios paquetes.
sudo apt install -y htop curl gitremove quita el programa; purge se lleva también los archivos de configuración.
sudo apt remove nginx
sudo apt purge nginxElimina las dependencias que quedaron huérfanas.
sudo apt autoremoveBusca y detalla un paquete antes de instalarlo.
apt search postgresql
apt show postgresql-16Todo lo que está instalado en la máquina.
apt list --installed | lessLos equivalentes de apt en el mundo Red Hat.
sudo dnf install htop
sudo dnf update
sudo dnf remove htopEl gestor de Arch Linux.
sudo pacman -S htop
sudo pacman -SyuInstalan un paquete local, sin resolver las dependencias automáticamente.
sudo dpkg -i pacote.deb
sudo apt install -f # arregla las dependencias
sudo rpm -i pacote.rpmFormatos universales, con la aplicación aislada.
sudo snap install code --classic
flatpak install flathub org.gimp.GIMPDónde está el binario que se va a ejecutar.
which python3
whereis nginxDice si es un binario, un alias, una función o un comando interno del shell.
type ls
type cdAñade una fuente de terceros con su clave de firma.
curl -fsSL https://exemplo.com/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/exemplo.gpg
echo "deb [signed-by=/usr/share/keyrings/exemplo.gpg] https://exemplo.com/apt stable main" | sudo tee /etc/apt/sources.list.d/exemplo.listLibera espacio en un servidor apretado.
sudo apt clean
sudo apt autocleanLa pregunta más común en un servidor: ¿quién llenó el disco?
Visión general del disco. El primer comando cuando algo deja de grabar.
df -hUn disco puede llenarse de archivos aun con espacio libre. Millones de archivillos agotan los inodos.
df -iCuánto ocupa cada carpeta.
du -sh /var/logLa receta para encontrar al villano del espacio.
du -h --max-depth=1 /var | sort -hr | head -20Interactivo: navegas y borras ahí mismo. Merece la pena instalarlo.
ncdu /varEncuentra los archivos grandes de una vez.
find / -type f -size +500M -exec ls -lh {} \; 2>/dev/nullÁrbol de dispositivos de bloque.
lsblk
lsblk -f # con el sistema de archivos y el UUIDConecta un dispositivo a un directorio.
sudo mount /dev/sdb1 /mnt/dados
mount | column -tFalla si algo lo está usando; lsof revela quién.
sudo umount /mnt/dados
sudo lsof +D /mnt/dadosMontajes aplicados en el arranque. Un error aquí puede impedir que la máquina levante.
cat /etc/fstab
sudo mount -a # prueba el fstab sin reiniciarEl log suele ser el primer sospechoso.
sudo du -sh /var/log/*
sudo journalctl --disk-usageUn proceso que aún tiene el archivo abierto retiene el espacio hasta que se reinicia.
sudo lsof | grep deletedEspacio fácil de recuperar en una emergencia.
sudo apt clean
sudo journalctl --vacuum-time=7dGenera un archivo de un tamaño definido para probar el disco.
dd if=/dev/zero of=teste.img bs=1M count=100
fallocate -l 1G teste.imgPrueba rápida de E/S del disco.
dd if=/dev/zero of=teste bs=1M count=1024 oflag=directDescubrir la IP, probar la conexión y ver qué está escuchando.
El sustituto moderno de ifconfig.
ip a
ip -br a # la versión resumidaMuestra la puerta de enlace por defecto y las rutas configuradas.
ip rLa primera prueba de conectividad.
ping -c 4 google.comLa navaja suiza de la web en la línea de comandos.
curl https://api.exemplo.com/status
curl -I https://exemplo.com # solo las cabeceras
curl -s -o /dev/null -w "%{http_code}\n" https://exemplo.comPrueba una API sin salir de la terminal.
curl -X POST https://api.exemplo.com/itens \
-H "Content-Type: application/json" \
-d '{"nome":"teste"}'Descarga resistente, con reanudación.
wget https://exemplo.com/arquivo.tar.gz
wget -c https://exemplo.com/grande.iso # continúa una descarga interrumpidaEl sustituto de netstat. Muestra quién está escuchando.
ss -tuln
sudo ss -tulpn # con el proceso dueño del puertoLa respuesta al "address already in use".
sudo ss -tulpn | grep :8080
sudo lsof -i :8080Resuelve un nombre y muestra la respuesta completa.
dig exemplo.com
dig +short exemplo.com
dig @8.8.8.8 exemplo.comConsultas DNS más sencillas.
host exemplo.com
nslookup exemplo.comMuestra el camino hasta el destino y dónde aparece la latencia.
traceroute exemplo.com
mtr exemplo.com # un traceroute continuoLa dirección con la que tu máquina aparece en internet.
curl -s ifconfig.me
curl -s https://api.ipify.orgEl nombre de la máquina en la red.
hostname
hostname -I # IPs
sudo hostnamectl set-hostname servidor01Resolución local, antes del DNS. Ideal para probar antes de apuntar el dominio.
cat /etc/hosts
# 192.168.0.10 meu-site.localComprueba si el puerto está abierto al otro lado.
nc -zv exemplo.com 443
timeout 3 bash -c "</dev/tcp/exemplo.com/443" && echo abertaEmpaquetar, comprimir y mover archivos entre máquinas.
crea, z comprime con gzip, verbose, file.
tar -czvf backup.tar.gz pasta/x extrae. -C elige el destino.
tar -xzvf backup.tar.gz
tar -xzvf backup.tar.gz -C /destinoComprueba el contenido antes de descomprimir.
tar -tzvf backup.tar.gzUn backup sin node_modules ni .git.
tar -czvf app.tar.gz --exclude=node_modules --exclude=.git app/xz y zstd comprimen mejor; zstd es mucho más rápido.
tar -cJvf backup.tar.xz pasta/
tar --zstd -cvf backup.tar.zst pasta/Comprime un archivo suelto (sustituye al original).
gzip arquivo.log
gunzip arquivo.log.gz
zcat arquivo.log.gz | less # lo lee sin descomprimirFormato universal, compatible con Windows.
zip -r pasta.zip pasta/
unzip pasta.zip -d destino/Transfiere entre máquinas usando la conexión SSH.
scp arquivo.txt usuario@servidor:/caminho/
scp -r pasta/ usuario@servidor:/caminho/
scp usuario@servidor:/caminho/arquivo.txt .Copia solo la diferencia y reanuda donde se quedó. Mejor que scp para volumen.
rsync -avz pasta/ usuario@servidor:/destino/Refleja el destino, borrando lo que ya no existe en el origen.
rsync -avz --delete --exclude=node_modules ./site/ usuario@servidor:/var/www/site/--dry-run muestra lo que haría, sin hacerlo. Úsalo siempre antes del --delete.
rsync -avzn --delete origem/ destino/Sigue la transferencia de un archivo grande.
rsync -avz --progress grande.iso usuario@servidor:/dados/Sesión interactiva de transferencia sobre SSH.
sftp usuario@servidor
# get arquivo.txt / put local.txt / ls / byeEmpaqueta, envía y desempaqueta al otro lado, sin archivo intermedio.
tar -czf - pasta/ | ssh usuario@servidor "tar -xzf - -C /destino"Un patrón sencillo que evita sobrescribir el backup.
tar -czf backup-$(date +%F-%H%M).tar.gz /var/wwwfind busca por atributos; grep busca dentro del contenido.
La búsqueda más común.
find /var -name "*.log"
find . -iname "readme*" # sin distinguir mayúsculasArchivo (f), directorio (d) o enlace (l).
find /etc -type f -name "*.conf"
find /var -type d -name "cache"+ mayor, - menor.
find / -type f -size +100M
find . -type f -size -1kModificados en los últimos días o minutos.
find /var/log -mtime -1 # las últimas 24 h
find /tmp -mmin -30 # los últimos 30 minAuditoría: archivos de un usuario o con un permiso peligroso.
find /home -user maria
find / -perm -4000 -type f 2>/dev/null # binarios SUID-exec ejecuta un comando en cada resultado; -delete lo elimina.
find /tmp -name "*.tmp" -mtime +7 -delete
find . -name "*.sh" -exec chmod +x {} \;Más rápido que -exec con muchos archivos. -print0/-0 maneja nombres con espacios.
find . -name "*.log" -print0 | xargs -0 rmEvita recorrer todo el árbol.
find /var -maxdepth 2 -name "*.conf"Consulta un índice; mucho más rápido, aunque desactualizado hasta el siguiente updatedb.
locate nginx.conf
sudo updatedbBusca el patrón dentro de los archivos.
grep "erro" /var/log/syslogRecorre todo el árbol de directorios.
grep -r "TODO" src/-i ignora la caja.
grep -i "error" app.log-n dice dónde está.
grep -n "senha" config.py-v muestra lo que no casa — ideal para filtrar ruido.
grep -v "DEBUG" app.logLíneas antes y después del hallazgo.
grep -B 3 -A 5 "Exception" app.log
grep -C 3 "Exception" app.log-c cuenta las apariciones; -l lista solo los archivos.
grep -c "404" access.log
grep -rl "senha" /etc-w evita que test case dentro de testing.
grep -w "test" arquivo.txt-E habilita |, + y ? sin escapes.
grep -E "erro|falha|timeout" app.logAntepone a cada resultado el nombre del archivo.
grep "database" /etc/*.confMucho más rápido y ya respeta el .gitignore.
rg "getThemeSelection"
rg -t ts "useState"Atajos, historial y ayuda — lo que hace que escribas menos.
Completa el comando, la ruta y el nombre del archivo. Dos toques listan las opciones.
cd /var/lo<Tab> # se convierte en /var/log/Todos los comandos que has ejecutado.
history
history | grep docker!! repite el último; !123 ejecuta el número 123.
!!
!123
!docker # el último que empieza por dockerEl atajo que más escritura ahorra. Sigue pulsándolo para ir hacia atrás.
# Ctrl+R y empieza a escribir parte del comandoMoverse y borrar sin las flechas.
# Ctrl+A inicio | Ctrl+E final
# Ctrl+U borra hasta el inicio | Ctrl+K hasta el final
# Ctrl+W borra la palabra anterior | Ctrl+L limpia la pantallaInterrumpe el comando actual; termina la entrada/sesión.
# Ctrl+C cancela
# Ctrl+D envía EOF (sale del shell)Un comando largo se convierte en una palabra corta.
alias ll='ls -lah'
alias gs='git status'
alias ..='cd ..'Ponlo en el archivo de perfil de tu shell.
echo "alias ll='ls -lah'" >> ~/.bashrc
source ~/.bashrcVer, crear y exportar a los procesos hijos.
echo $HOME
export API_URL="https://api.exemplo.com"
printenv | sortDonde el shell busca los ejecutables.
echo $PATH
export PATH="$HOME/bin:$PATH"La documentación oficial de cada comando. / busca, q sale.
man tar
man 5 crontab # sección 5: formatos de archivoUn resumen rápido, sin abrir el manual.
tar --help | lessManual resumido, solo con los usos comunes. Merece la pena instalarlo.
tldr tar
tldr findBusca en el manual por lo que hace el comando.
apropos compressLimpia la pantalla; reset arregla la terminal desordenada por una salida binaria.
clear
reset; siempre, && si salió bien, || si falló.
cd /tmp; ls
mkdir dados && cd dados
ping -c1 host || echo "sem resposta"> sobrescribe, >> añade, 2> es el error.
ls > lista.txt
echo "linha" >> log.txt
comando > saida.txt 2> erros.txt
comando > tudo.txt 2>&1Saber dónde estás pisando antes de tocar nada.
Muestra y formatea la fecha. Muy usado en los nombres de archivo.
date
date +"%Y-%m-%d %H:%M:%S"
date +%s # timestamp UnixEl calendario del mes o del año.
cal
cal 2026Configura la zona horaria y la sincronización NTP.
timedatectl
sudo timedatectl set-timezone America/Sao_PauloQué kernel y qué arquitectura usa la máquina.
uname -a
uname -r # solo la versión del kernelEl nombre y la versión del sistema.
cat /etc/os-release
lsb_release -aModelo, núcleos y frecuencia.
lscpu
nproc # solo el número de núcleosInventario de lo que tiene la máquina.
free -h
sudo lshw -short
sudo dmidecode -t memoryTarjeta de red, GPU, dispositivos conectados.
lspci
lsusbDesde cuándo está levantada y el historial de reinicios.
uptime -p
last reboot | headAvisa siempre a quien esté conectado.
sudo shutdown -h now
sudo shutdown -r +5 "Reinício em 5 minutos"
sudo shutdown -c # cancela