Escuela de Técnica y Cultura Hacker

Terminal: Comandos básicos

Introducción

Unix es un sistema operativo nacido hacia los años 70 por programadores buscando un ambiente de trabajo menos frustrante, hacia los años 80 comenzó a utilizarse por círculos más informales como un sistema operativo universal.

El diseño del sistema está inspirado en la experiencia de trabajo de sus programadores, Ken Thomson y Dennis Ritchie, quienes produjeron un legado aún vigente en los sistemas operativos modernos. Diseñaron un sistema en base a principios filosófico-técnicos (llamados en su conjunto "filosofía Unix") usando como base el minimalismo y la modularidad, consistente en producir programas simples que hagan una cosa bien y que puedan trabajar en conjunto, esto se hace posible usando el texto como interfaz universal, esto es, como método de comunicación entre los programas.

En el tiempo varios sistemas operativos han sido creados basados en estos principios y las herramientas que existían originalmente en Unix (llamados sistemas Unix-like), entre ellos GNU/Linux, el cual es una implementación libre. Esto signfica que un usuario puede ejecutar, estudiar, modificar y distribuir la copia del software que recibió.

Las herramientas que utilizaremos en su mayoría son POSIX (Portable Operating System Interface), esto significa que su funcionalidad básica debiera funcionar igual en todos los sistemas Unix-like.

Nomenclatura

  • :no-posix: no es una funcionalidad POSIX
  • :general: no es una expresión específica de un comando

Manejo de la terminal :no-posix:

<tab>
autocompletar
Ctrl + Shift + c
copiar
Ctrl + Shift + v
pegar
Ctrl + r
buscar en historial
Up and down
explorar historial
Ctrl + _
deshacer
Ctrl + c
detener la ejecución de un comando
Ctrl + l, clear
limpiar la terminal
reset
limpiar en serio

Navegación y movimiento

mkdir
crear directorio
{,..}
brace expansion :no-posix:general:
-p
crear todos los directorios necesarios
<tab>
autocompletar nombres de archivos y directorios
rmdir
borrar directorio
-f o –flag
cambiar opciones de un comando
man
manual de un comando
pwd
directorio actual
cd
cambiar de directorio
ruta relativa :general:
/…
ruta absoluta :general:
-
directorio anterior
<sin opciones>
home del usuario
~
home del usuario :general:
touch
crear archivo vacío o modificar sus fechas
ls
listar los contenidos de un directorio
?
cualquier caracter :general:
*
múltiples caracteres :general:
-l
vista avanzada
-a
incluir archivos ocultos
tree
árbol del sistema de archivos :no-posix:
cp
copiar archivo
.
directorio actual
-r
recursivo, copia directorios
mv
mover o renombrar
rm
borrar archivo
-r
recursivo
-f
forzar sin preguntar nada (mala idea)
du -sh
peso de un directorio
ln
crear link duro
-s
crear link simbólico

mención honrosa: rsync :no-posix:

RTFM

  • man
  • info :no-posix:
  • help
  • –help

Manipulación y visualización

variable="asignación"
asignar un valor a una variable
echo
imprimir a STDOUT
|
conectar comandos pasándolos de STDOUT a STDIN
tee
leer de STDIN y escribir en archivos, > tiene el mismo efecto
-a
agregar a archivo en lugar de sobreescribir, >> tiene el mismo efecto
cat (y zcat)
concatenar e imprimir archivos a STDOUT
-
es un "archivo" especial, corresponde a STDIN
sort, uniq y wc
ordenar, no-repetir y contar
head y tail
mostrar el inicio o término de un archivo o STDIN
-n, -<n>
primeras o últimas <n> líneas
&&
ejecutar comandos consecutivamente hasta que falle o termine
;
ejecutar comandos consecutivamente sin detenerse
grep
buscar dentro de archivos
find
buscar nombres de archivo
xargs
añadir argumentos desde STDIN

mención honrosa: sed y awk

watch
ejecutar comandos cada cierto tiempo
ps -e
ver comandos en ejecución
-f
mayor detalle
pstree
ver árbol de procesos :no-posix:
kill -9 <pid>
matar comando
sudo
ejecutar un comando como otro usuario :no-posix:
su
ejecutar más de un comando como otro usuario :no-posix:
chown
cambiar dueño:grupo de un archivo
chgrp
cambiar grupo de un archivo
chmod
cambiar permisos de archivo

Shell scripting

variables
export
alias
funciones
loops
condicionales

Herramientas interactivas

more

Ver archivo o STDOUT paginado

<espacio>
avanzar una pantalla completa
<enter>
avanzar una línea
/<texto>
buscar
n
buscar siguiente
.
repetir comando previo
=
info en línea actual
v
abrir en $EDITOR
Ctrl+l
redibujar pantalla
q
salir

less (y zless)

Less is more. Puede abrir archivos más grandes, es más amigable, maneja mejor múltiples archivos y tiene muchas más opciones.

?<texto>
buscar hacia atrás
&<texto>
mostrar sólo lineas coincidentes, y volver de ahí
N
búsqueda en dirección reversa
:n
anterior archivo
:p
siguiente archivo
:x
primer archivo
:d
cerrar archivo
:e<archivo>
abrir archivo
<n>g
ir a línea <n>

vi

Editor de texto.

h, j, k, l o flechas
movimiento
i, I, a, A, o, O
modo edición
<esc>
modo comandos
/…, n, N
buscar
u
deshacer
yy
copiar línea
dd
borrar línea
x
borrar un caracter
p, P
pegar
:!<comando>
ejecutar comando
:<numero de línea>!<comando>
insertar resultado de comando
:w
guardar
:q
salir
:q!
salir sin guardar