La terminal y líneas de comando

#Terminal
La línea de comandos te permite hacer de todo: configuraciones, editar texto, compilar código y utilizar las herramientas que existen dentro de tu sistema operativo.
Todos los comandos se pueden buscar con el comando man.
Shortcuts
  • Control + L Limpiar la pantalla
  • Control + R Buscar comandos usados anteriormente
Ventajas
  • Ahorras memoria puesto que no hay una interfaz gráfica
  • Ahorras tiempo pues hace más sencillo el trabajo.


Comandos

Los comandos, en su mayor parte, no son realmente más que pequeños programas incorporados en el sistema operativo.
Los flags (o banderas) sirven para decirle al comando cómo queremos que realice la acción en particular.
Puntos a tener en cuenta
  • Los comandos se pueden poner todos con un solo -. Por ejemplo, estos dos comandos hacen lo mismo:
    $ ls -l -h 
    $ ls -lh 
    
  • El punto . es el directorio actual.
  • El doble punto .. es el directorio padre.
  • El sombrerito de eñe ~ sirve para ir a mi carpeta personal (home).

Lista de comandos

Listar

ls lista las carpetas y archivos que hay
  • -l lista las carpetas y archivos con su información básica
  • -h ver de forma que sea fácil de entender (para humanos)
  • -a ver archivos ocultos
ls usr/bin ver los binarios ejecutables tengo por el sistema
ls usr/bin | wc -l ver la cantidad de ejecutables (comandos)

Ver directorio actual

pwd
Print Work Directory. Muestra el directorio donde me encuentro.
$ pwd
output: /home/toshio
Cambiar de directorio
cd [ruta]
Change Directory. Sirve para moverse entre directorios.
cd .. retroceder un directorio.
cd ~ se mueve al home.

Crear una carpeta

mkdir [directorio]
Make Directory. Crea un directorio.

Crear archivos

touch [archivo]
  • Si no existe el archivo lo va a crear.
  • Si existe le cambia la fecha de modificación.
touch {1, 2, 3}.txt permite crear varios archivos

Mover un archivo

mv [origen] [destino]
Mueve un archivo a una ruta destino.
$ mv archivo.txt C:/
Cambiar de nombre a un archivo
mv [archivo] [nuevo nombre]
Este comando también se usa para renombrar un archivo.
$ mv archivo.txt nuevo.txt
Eliminar archivos
rm [archivo] elimina archivos o links. No funciona para eliminar un directorio.
rm -rf [directorio] elimina un directorio/carpeta recursivamente.
Ayuda
man [comando]
Es el manual de la terminal, puedes utilizarlo para entender qué hace un comando y sus banderas. Con espacio pasas una página, - con b te regresas una página y con q sales del manual.
Es equivalente a --help
$ man cd
$ cd --help
Copiar
cp [archivo/folder] [pegar]
Copia un archivo a otro directorio.
$ cp archivo.txt C:/
Navegar entre 2 directorios
pushd y popd: te permiten navegar entre dos directorios fácilmente.
pushd [directorio a guardar]
popd me permite regresar al directorio guardado.
Si no se especifica la ruta de pushd, se guarda el directorio actual.
Abrir un archivo
open [archivo]
Abre el archivo especificado.
Ver las primeras líneas de un archivo
more [archivo]
Te da las primeras líneas de lo que hay en el archivo.
  • Para ver la siguiente página utilizamos espacio.
  • Enter para pasar línea por línea.
  • b para regresar.
less [archivo]
En algunas distribuciones ya no se usa more sino less.
Imprimir todo el contenido de un archivo
cat [archivo]
Imprime todo el contenido de un archivo en pantalla.
Ver las últimas líneas de un archivo
tail [archivo] te muestra las últimas 10 líneas de un archivo.
  • -[número] puedes agregarle un número con el - y pedir más que 10 líneas.
  • -f: muestra en tiempo real las últimas líneas del archivo.
Ver ruta ejecutable de un comando
which [comando]
Específica donde se encuentra el ejecutable del comando
$ which ls
output: /usr/bin/ls
Alias para comandos
alias [comando alias]='[comando]'
Crea un alias para un comando definido.
$ alias ll='ls -lh'
En este ejemplo se está creando el comando ll que ejecutará ls -lh.
Todo lo que se agregue después del alias se agrega automáticamente luego del comando.
$ ll -a
$ ls -lh -a
En el ejemplo, los 2 comandos hacen lo mismo.
Cada vez que abrimos la terminal se ejecuta un programa llamado .bash_profile que es una serie de comandos que da de alta unas variables.
En el .bash_profile se guardan los alias.
Ver los procesos que están corriendo
top
Ver todos los procesos que están corriendo en la computadora de manera interactiva. Es decir, la lista de procesos se va actualizando.
ps -wA
Muestra todos los procesos que se están ejecutando y desde donde vienen. Este comando no es interactivo.
Matar procesos
kill -9 [proceso id]
Mata un proceso.
Ejecutar en 2do plano (background)
& espacio y amberson para dejar un proceso en background. Esto quiere decir que el usuario va a seguir teniendo el control de la terminal.
$ npm start &
output: [1] 23954 (Id del proceso)
Ejecutar varios procesos
; con un punto y coma puedo separar procesos para que se ejecuten en una misma linea. El segundo proceso se ejecuta cuando termine el anterior.
$ ls; echo "hola"
Mostrar cantidad de procesos
ps -wA | wc -l
Muestra la cantidad de procesos que se están ejecutando actualmente.
Tiempo de prendida de la computadora
uptime
  • Muestra cuánto tiempo lleva prendida la computadora
  • Cuántos usuarios se han logueado
  • La carga promedio
Uso del disco
du muestra la cantidad de espacio usado por los archivos en un directorio.
  • -h muestra el output de una manera que se pueda leer mejor.
  • -d [número] nivel de profundidad. Cuántos niveles baja de carpeta.
Links
ln -s [ruta del directorio] [alias] Crea un alias que apunta a un directorio.
  • -s link simbólico. Si se usa este parámetro con rm solo se elimina el acceso directo.
ls -s C:/carpeta alias_file 
cd alias_file
La terminal está interpretando cd C:/carpeta.
Nombre de usuario
whoami
Te dice cual es el usuario que está operando
Streams
Los streams son una forma de enviar datos a un comando y recibir un output de salida.
  • STDIN Standard Input. Parámetro de entrada.
  • STDOUT Standard Output. Es la salida por defecto.
  • STDERR Standard Error. Es la salida en caso suceda un error.
<?php 
echo "número: ";
$d = trim(fread(STDIN, 100));
$i = 0;

while(true) {
  if(++$i % $d == 0) {
    fwrite(STDOUT, sprintf("El %d es múltiplo de %d.\n", $i, $d));
  } else {
    fwrite(STDERR,
    sprintf("Error, El %d NO es múltiplo de %d \n", $i, $d));
  }
  sleep(1);
}
?>
php 1-streams.php 1> salida.log 2> error.log
  • > manda el output a un archivo
  • Se guarda la salida en un archivo salida y el error en un archivo error
  • Si se usa >> en vez de >, entonces el archivo se concatena en vez de sobreescribirse
php 1-streams.php 1> salida.log 2>&1
El error y el output aparecen en el mismo archivo

Power Tools

Buscar cadenas de caracteres
grep -r [ruta] -e [expresion] nos ayuda a encontrar cadenas de caracteres dentro de todos los archivos de la ruta que le demos, con expresiones regulares.
  • -r: que sea recursivo
  • -n: numero de linea donde se encuentra la palabra en el archivo
  • -e: expresión regular
  • -i: no importa si es mayuscula o minuscula
  • -v: muestra solo los resultados que no cumplen con el patrón.
Buscar archivos
find [ruta] -name [nombre] busca en base al nombre y la metadata dentro del directorio que le digamos.
  • -name: el nombre del archivo (*.js devuelve todos los archivos que terminan con .js)
  • -type: el tipo
Fecha actual
date
Muestra la fecha actual.
Tiempo del procesador
time
Muestra tiempo del procesador
Tiempo de ejecución de un proceso
date; [proceso]; date
Con este comando se puede evaluar cuánto se demora en ejecutar un proceso
Emular un navegador
curl [url] emula un navegador.
  • > [nombre] descarga el archivo con el nombre que le has dado.
  • -o [nombre] igual que el anterior
Comprimir archivos
zip [nombre.zip] [archivo a comprimir]: agrega o reemplaza las entradas de un archivo zip de la lista, que puede incluir el nombre especial para comprimir la entrada.
upzip [archivo] descomprimir un .zip
  • -vl no descomprime sino que ve lo que hay adentro
tar es un comando similar a zip, junta varios archivos en uno solo sin comprimirlos. Después se le dicta un algoritmo de compresión, que es zip.
  • cfz [archivo.tar.gz] junta y comprime
  • xfz [archivo .tar.gz] descomprime
Pipe
Sirve para encadenar el standard output de un comando con el standard input de otro comando. Para esto se usa |.
  • | wc -l muestra cantidad de líneas del output.
$ ls -l | wc -l
  • | grep [patrón] devuelve las líneas que cumplen con el patrón.
$ cat peliculas.csv | grep Thriller
  • | more muestra la lista de resultados por páginas.
$ cat peliculas.csv | more

Crontab

crontab permite programar la ejecución de scripts.
  • -l muestra la lista de crontab
  • -e editar la tabla crontab. Con esto se pueden agregar más scripts
0   16  *   *   *    $Home/src/cronjobs/daily.sh
0   *   *   *   *    $Home/src/cronjobs/hourly.sh
*   *   *   *   *    $Home/src/cronjobs/minutely.sh
Columnas:
  • minuto 0-59
  • hora 0-23
  • dia mes 1-31
  • mes 1-12
  • dia semana: 0-7 (0 y 7 domingo)
  • script/comando
Permisos
Podemos ver los permisos que tiene un archivo con ls -l.
$ ls -l
drwxr-xr-x 1 Sergio 197609   0 Jul  9 16:43 'a.txt'
Los permisos se muestran en el primer bloque del resultado. En el ejemplo anterior sería drwxr-xr-x.
Los permisos se pueden separar de la siguiente manera:
F/---/---/---
-: dir/link/file
---: permisos del owner (yo)
---: permisos del grupo
---: permisos de todo el mundo
Tipos de permisos:
  • r-– permiso de lectura
  • rw- permiso de lectura y escritura
  • rwx permiso de lectura, escritura y ejecución
Los permisos tiene valores numéricos:
  • r = 4
  • w = 2
  • x = 1
Para otorgar permisos debemos darle un número que sea la suma de cada una de estas tres letras:
---: 0
--x: 1
-r-: 2
-wx: 3
r--: 4
r-x: 5
rw-: 6
rwx: 7
Para asignar los permisos se debe de dar el número tanto para el owner, el grupo y el público.
---/---/---
666: rw-rw-rw-
750: rwxr-x---`
Cambiar permisos
chmod [numero] [archivo]
Permite cambiar los permisos a un archivo.
$ chmod 750 archivo.txt
Ejecutar como superuser
sudo [script/comando]
Ejecuta un comando como superusuario.
Convertir archivos a ejecutable
#! [ruta del ejecutable]
Vuelve un archivo como ejecutable, estamos especificando quién va a ejecutar el comando que sigue.
#! necesariamente debe incluirse al inicio del archivo. En la primera línea.
#! /usr/local/bin/php
<?php
date_default_timezone_set("America/Bogota");
printf("%s\n", data("Y-m-d H:i:s"));
En este caso, estamos indicando a /usr/local/bin/php que ejecute el comando que está en las líneas posteriores.
De este modo cuando ejecutamos ejemplo.php se ejecuta automáticamente y ya no hay que indicar quién se va a encargar de su ejecución.
FIN :)

No hay comentarios.:

Con tecnología de Blogger.