La terminal es un programa que recibe ordenes, las traduce a algo que el computador puede entender y, en conjunto con el sistema operativo, ejecuta lo que se ingresa, mediante una interfaz de texto (CLI).
Se hace a traves de una interfaz de texto por razones de eficiencia.
- Nombre de programa
- Modificadores (flags o tags): Alteran lo que el programa va a hacer
- Parámetros: Valores de entrada para el programa
comando --flag1 --flag2 arg1 arg2
date
muestra la fecha actualecho "Mauro"
muestra un mensaje en pantallaman date
muestra ayuda sobre un comandohistory
muestra el historial de comandos ingresados!<command_id>
ejecuta el comando del id asociado, que se puede consultar conhistory
.
ls
listar archivosls -a
listar todos los archivos, incluso los ocultosls -l
listar y dar detalles de archivospwd
identificar directoriocd <path>
navegar a otro directoriocd -
navegar al directorio anterior visitadomkdir <dirname>
crear directorio nuevocp <pathToOneFile> <newWantedPath>
copiar un archivorm <filename>
remover un archivomv <pathToOneFile> <newWantedPath>
mover un archivormdir <dirname>
remover un directorio (siempre que esté vacío)touch <filename>
crea un archivo
-
Archivos Binarios
Archivos pensados para que sean ejecutados por un PC, si lo vas no podrás entenderlo.. Programas ejecutables y archivos de datos
-
Archivos de Texto
Son tambien archivos binarios, pero son binarios que corresponden a caracteres, entonces un editor de texto va a poder leerlos.
Interactividad: Programas que procesan en tiempo real.
Para archivos de texto, hay dos grandes: vim
y nano
.
Son programas que procesan texto y emiten el resultado.
-
cat <filename>
ver todo el contenido del archivo -
head <filename>
ver las primeras lineas del archivo.Modificador
-n <numfilas>
especifica el numero de lineas -
tail <filename>
ver las ultimas lineas del archivo -
grep <regexp> <filename>
Devuelve las coincidencias de un archivo con una expresion regular
-
sed
Tratamiento de flujos de caracteres. Utiliza expresiones regulares por ejemplo para reemplazar una expresion con otra.
sed 's/Hanks/Selleck/g' dump1.sql
sustituye Hanks por Selleck en el archivo dump1.sql
sed '$d' nuevasPelis.csv
elimina la ultima linea
-
awk
Tratemiento de textos estructurados (csv, tsv, etc).
awk -F ';' '{print $1 }' nuevasPelis .csv
con
-F ';'
especifico el caracter que esta delimitando la columna. Con'{}'
ejecuto un script, en este caso imprimo la primera columna de cada linea.awk -F ';' 'NR > 1 && $3 > 0 {print $1, $3 * $4 }' nuevasPelis.csv
Se puede agregar una condicion para ejecutar el script.
NR
significa numero de la fila. (empezando por 1).
Un proceso tiene 3 flujos estándar entendidos por la terminal:
- Entrada estándar
- Salida estándar
- Error estándar
Puede haber más flujos, estos son los basicos
Los medios por defecto de entrada y salida de un proceso son los perifericos del PC.. teclado para entrada y pantalla para salida.
Consiste en cambiar alguno de estos medios de entrada y salida.
-
Redireccionar la entrada de un proceso para recibirla desde un archivo en vez del teclado: Operador
<
.<command> < <filename>
Por ejemplo:
mysql -h 127.0.0.1 -u root -p 1234 < dump1.sql
-
Redireccionar la salida de un proceso para almacenarla en un archivo: Operador
>
o>>
<command> > <filename>
<command> >> <filename>
>
crea un archivo nuevo o sobreescribe el especificado,>>
crea un archivo nuevo o escribe el especificado añadiendose al contenido existente.Por ejemplo:
ls > output.txt
-
Redireccionar la salida de un proceso para convertirlo en la entrada de otro proceso, y asi sucesivamente: Operador
|
(pipe).<command1> | <command2> | <command3> | ...
Por ejemplo:
cat dump1.sql | wc -l
Cuando los procesos requieren tiempo para ejecutarse, se pueden enviar a un segundo plano de ejecucion (background). En la terminal se puede enviar un proceso al background agregando &
al final.
Por ejemplo:
mysql -h 127.0.0.1 -u root -p 1234 < dump1.sql &
Esto envia el proceso al background, y cuando se termine la terminal notifica.
Tambien hay procesos que necesitan estar vivos constantemente, por ejemplo servidores. A esos procesos se les conoce como servicios o demons. Un proceso ingresado con un comando se puede convertir en servicio presionando Ctrl + Z
. Se puede traer nuevamente al primer plano escribiendo el comando fg
ps
muestra los procesos que estoy ejecutando yo
ps ax
me arroja todos los procesos del sistema, junto con informacion adicional como el archivo que se esta ejecutando.
ps
y ps aux
son utilidades batch, eso significa que se puede usar el pipe para relacionarlo con otros comandos, por ejemplo
ps aux | grep ruby
muestra todos los procesos que tienen la palabra ruby en algun lado.
top
es una utilidad interactiva que muestra los procesos que más recursos estan consumiendo, en tiempo real.
Los comandos ps
, ps aux
y top
muestran entre otras cosas el PID (Process ID). Con este process ID se puede referenciar el proceso para detenerlo, usando el comando kill
y killall
.
kill
envía por default señales a los procesos para que se detengan. Se envía una señal para que el proceso no se detenga abruptamente, sino que el proceso reciba la señal y la procese cuando sea debido. Para detener un proceso abruptamente se envia el modificador -9
al comando:
kill -9 <pid>
Por otro lado, killall
detiene el proceso, pero recibe el nombre del archivo ejecutable, en lugar del PID.
killall ruby
El sistema Unix tiene una arquitectura pensada para varios usuarios. Alrededor de un archivo hay 3 tipos de usuario:
- Dueño
- Grupo (Usuarios con acceso al archivo)
- Otros
En un archivo se pueden hacer 3 tipos de operación:
- Lectura (
r
) - Escritura (
w
) - Ejecución (
x
)
Los permisos se pueden cruzar con los tipos de usuario y generar esta matriz
Dueño | Grupo | Otros | |
---|---|---|---|
Lectura | |||
Escritura | |||
Ejecución |
En la terminal con el comando ls -l
se pueden ver los permisos que tiene cada usuario sobre cada archivo:
-rw-r--r-- 1 miguelprada staff 92 Jun 11 20:46 archivo.txt
La combinación -rw-r--r--
muestra los permisos sobre el archivo.
-
al comienzo indica que tipo de archivo es (d
para directoriol
para link y-
para archivo)rw-
muestra los permisos del dueño: lectura y escritura pero no ejecuciónr--
muestra los permisos del grupo: solo lectura.r--
muestra los permisos de otros: solo lectura.
-
chmod
permite cambiar los permisos que hay sobre un archivo-
Forma textual
chmod o-w archivo.txt
le quita (-
) el permiso de lectura (w
) al owner (o
).chmod +x archivo.txt
le agrega (+
) el permiso de ejecución (x
) a todos los archivos. -
Forma binaria
Los permisos son un valor binario: o se tienen o se tienen. Se puede ingresar la combinacion de permisos sobre un tipo de usuario con unos y ceros, por ejemplo:
- Solo lectura:
r-- => 100 = 4
- Lectura y escritura:
rw- => 110 = 6
- Lectura escritura y ejecucion:
rwx => 111 = 7
chmod 764 archivo.txt
genera los permisosrwxrw-r--
aarchivo.txt
. - Solo lectura:
-
-
chown
modifica el owner a un archivo (requieresudo
) -
chgrp
modifica el grupo a un archivo (requieresudo
o ser el owner).
gzip
y tar
son utilidades muy usadas
-
gzip
gzip <filename>
para comprimir un solo archivo. Genera un archivo con extensión .gzgzip -d <filename>
para descomprimirlo -
tar
tar cf backup.tar backup/*
agrupa todos los archivos del directoriobackup/*
y lo guarda en el archivobackup.tar
tar xf backup.tar
para desagruparlostar czf backup.tgz backup/*
agrupa y comprime los archivostar xzf backup.tgz
para desagruparlos y descomprimir.
-
locate
busca un archivo por su nombre en todo el sistema de archivos. Se basa en una base de datos que guarda el sistema de archivos, y se debe actualizar manualmente.sudo uptadedb
para actualizar la base de datoslocate <filename>
-
whereis
ubica comandos.whereis echo
-
find
busca dentro de un directorio una serie de criteriosfind . -user mauro -perm 644
busca todos los archivos y carpetas que pertenezcan al usuario mauro (-user mauro
) y que tengan permisos de lectura y escritura para owner y solo lectura para los demás (-perm 644
).find . -type f -mtime +7
busca todos los archivos (-type f
) que fueron modiifcados hace maximo 7 dias (-mtime +7
)find . -type f -mtime + 7 -exec cp {} ./backup/ \;
-
curl
es basica.. hace una peticion, obtiene una respuesta y la recibe en pantallacurl https://www.platzi.com
curl -v https://www.platzi.com
muestra tambien la interaccion HTTP necesaria antes de tener respuesta.curl -v https://www.platzi.com > /dev/null
-
wget
es mas flexiblewget http://www.php.net/distributions/php/distributions
ssh <defined_configs>
los <defined_configs>
estan definidos en la carpeta .ssh/
, con la clave publica y clave privada
echo $<nombreVar>
para ver el valor de una variableexport <varName>=<valor>
para declarar una variable de entorno<varName>=<valor> <comando>
para declarar una variable solamente para la ejecucion del comando
La terminal permite crear scripts, agrupaciones de comandos para ejecutarse cuando se ejecute el archivo en el que se guarda el mismo.
at now +2 minues
crontab -e