Guia Linux - Sobrevivir a la terminal - Parte 1

Table of Contents

linux-terminal.png

1. Enlaces

1.1. Conceptos

Existen dos tipos de enlaces, blandos y duros, el que más nos interesa por ahora es el primero.

1.2. Enlaces blandos

Es parecido al acceso directo en Windows, permite dirigirse al archivo o directorio desde otro archivo ubicado donde uno quiera.

ln -s original_file new_file

2. Directorios

2.1. Crear un arbol de directorios

Con mkdir -p seguido de los directorios que se quieran crear, a diferencia de usar solo mkdir sin el parametro p, es que este crea multiples directorios padres.

mkdir -p git/proyectos/prueba1 # crea la carpeta git, dentro proyectos y dentro prueba1

2.2. Eliminar multiples directorios

Se opera de igual forma que con crear, pero se utiliza rm en vez de mkdir

rm -p git/proyectos/sistemaDeControl # se borran todos los directorios

Observacion: Se puede también utilizar el parametro -r en vez de -p

3. Compresión de Archivos

3.1. Conceptos

La compresión de archivos permite reducir el espacio que ocupan en disco, por tanto permite adjuntar en un correo, subir a la nube con mayor velocidad.

3.2. Comprimir con gzip y bzip2

3.2.1. Conceptos

Con gzip se puede comprimir un archivo que le agrega la extensión .gz, mientras que con bzip2 comprime el archivo aún más y le agrega la extensión .bz. En ambos casos los comprime de manera individual es decir no los agrupa en un solo archivo, pero que si lo permite tar

3.2.2. Comprimir un archivo con gzip

gzip finanzas.txt # finanzas.txt se comprime y convierte en finanzas.txt.gz

3.2.3. Comprimir un archivo con gzip con la mejor compresión posible

gzip -9 finanzas.txt # finanzas.txt se comprime y convierte en finanzas.txt.gz

3.2.4. Comprimir con gzip varios archivos en una linea

gzip *.txt # comprime todos los archivos de extension .txt

3.2.5. Extraer con gzip el contenido de un archivo

gzip -d finanzas.txt.gz # descomprime el archivo y vuelve al formato original finanzas.txt
gunzip - finanzas.txt.gz # otra manera de descomprimir sin pasar parametros

Observación: Solo se necesita agregar el parametro -d antes del nombre del archivo

3.3. Comprimir con tar

Esta herramienta incluye gzip y bzip2 para comprimir multiples archivos, con el formato .tar.gz o .tar.bz

La lista de los parametros que se le pueden pasar son:

Parametro Descripción
c Crea el archivo
x Extrae el contenido
v Muestra el paso a paso
z Comprime con gzip
j Comprime con bzip2
f Para indicar nombre del archivo

3.3.1. Comprimir una carpeta

El parametro v permite visualizar por pantalla el paso a paso de que comprime, extrae, etc..

tar -cvzf archivos.tar.gz finanzas # comprime y agrupa en archivos.tar.gz, lo que tenga la carpeta en un solo archivo

Observación: Es importante respetar el orden de los parámetros, sino no funciona el comando.

3.3.2. Comprimir multiples archivos

tar -cvzf archivos.tar.gz *.txt # comprime y agrupa en archivos.tar.gz, los archivos de extension **.txt**

3.3.3. Descomprimir un archivo .tar.gz

La diferencia con comprimir es que se cambia el parametro c por x

tar -xczf achivos.tar.gz # extrae el contenido del archivo .tar.gz

4. Permisos

4.1. chown

Para cambiar la propiedad de un archivo a un usuario

4.2. chgrp

Para cambiar la propiedad de un archivo a un grupo

4.3. chmod

Para asignar permisos a directorios y/o archivos, se puede realizar de dos maneras

  • Modo Simbólico
  • Modo Númerico

Observación: En lo personal prefiero la simbólica.

4.4. Modo Númerico

Permiso Descripción
1 Ejecución
2 Escritura
4 Lectura

El orden de los permisos es:

  1. Propietario
  2. Grupo
  3. Invitado (cualquier usuario)
#### Permiso de sólo ejecución(1) para el Propietario
chmod 100 archivo.txt

#### Permiso de ejecución(1) y lectura(4) para el Propietario
chmod 500 archivo.txt

#### Permiso de ejecución(1), lectura(4) y escritura(2) para el Propietario
chmod 700 archivo.txt

#### Permiso de ejecución(1), lectura(4) para el Propietario, y el grupo
chmod 550 archivo.txt

#### Permiso de ejecución(1), lectura(4) para el Propietario, el grupo, invitados
chmod 555 archivo.txt

#### Permiso de ejecución(1), lectura(4), Escritura(2) para el Propietario y ejecución(1), lectura(4) el grupo, invitados
chmod 755 archivo.txt

4.5. Modo Simbólico

4.5.1. Conceptos

Para agregar, eliminar permisos se agrega primero a quien (usuario, grupo, cualquier usuario) seguido del operador +, -, = que agrega, elimina, reemplaza los permisos respectivamente.

Permiso Descripción
x Ejecución
w Escritura
r Lectura
  • u: se refiere al usuario
  • g: al grupo al que pertenece
  • o: es cualquier usuario

4.5.2. Agregar permisos al usuario

Se utiliza el operador suma +permiso

# Permiso de Ejecucion
chmod u+x archivo.txt

# Permiso de Ejecución y lectura
chmod u+xr archivo.txt

# Permiso de Ejecución, lectura y escritura
chmod u+xwr archivo.txt

4.5.3. Agregar permisos al usuario, grupo e invitados

# Permiso de ejecución, lectura para el Usario/Grupo
chmod ug+xr archivo.txt

# Permiso de ejecución, lectura para el Usuario/Grupo/Invitados
chmod ugo+xwr archivo.txt

4.5.4. Agregar diferentes permisos

Los permisos se deben separar por comas

# Permiso de ejecución, lectura, escritura al Usuario,
# y permisos de ejecución, lectura al Grupo/Invitados
chmod u+xwr, go+xr archivo.txt

4.5.5. Eliminar Permisos

Se utiliza el operador menos -permiso, funciona igual que agregar pero con el signo -

# Eliminar Permiso de ejecucion para el Propietario
chmod u-x archivo.txt

# Eliminar Permiso de ejecución(x) y lectura(r) para el Propietario(u)
chmod u-xr archivo.txt

4.5.6. Sobreescribir Permisos

Tambien se procede de igual forma que los dos anteriores pero se cambia el operador por el =

# Asignar Permiso de ejecución(x) y lectura(r) para el Propietario(u)
chmod u=xr archivo.txt

# Asignar solo Permiso de ejecución(x) y lectura(r) para el Propietario(u), Grupo, e Invitado
chmod ugo=xr archivo.txt

Observación: Si ya disponia de permisos, serán eliminados y reemplazaran por estos nuevos

5. Listar directorios

5.1. Listar las carpetas y archivos de un directorio

Para esto utilizamos el comando ls que nos da información del directorio en el que nos encontremos, como también podemos pasarle una ruta del directorio que queremos saber.

Algunos parametros que le podemos pasar al comando ls:

  • a: muestra todos los archivos, hasta los ocultos
  • l: muestra los archivos y sus permisos
# lista los archivos del directorio actual
ls

# lista todos los archivos hasta los ocultos
ls -a

# lista los archivos y sus permisos
ls -l

ls -la

6. Tuberia (Pipe) y Redirección de datos

Una tuberia se representa con el simbolo | y permite utilizar la salida de un programa como entrada de otro es decir pasarlo por parametro.

6.1. Filtrar el listado de directorio

Con ls listamos el directorio c

# listamos todo el directorio o señalamos los que digan "control"
ls -l | grep "control"

6.2. Redirigir la salida de un programa como entrada de otro

Esto se podria usar para guardar información en caso de tener fallas al instalar o configurar un programa y se necesite consultar en algún foro que soliciten información de lo que devuelve ejecutar un comando

# guardamos en datos.txt lo que devuelve el comando ls (listado del directorio)
ls > /tmp/datos.txt

Observación: Si volvemos a ejecutar el comando, sobreescribirá el archivo, borrando el contenido que ya tenía:

6.3. Redirigir como entrada la salida de otro programa

# El contenido del .txt se lo pasa al grep
grep 'pedro' < /archivos/clientes.txt

6.4. Insertar texto a un archivo

Si usamos lo aprendido, podemos insertar texto a un archivo Esta manera lleva más pasos, pero es una manera de entender algunos comandos

# 1. Creamos archivos temporales con texto
echo "Su nombre es Carlos" > /tmp/empleado-nombre.txt
echo "su país es Argentina" > /tmp/empleado-pais.txt

# 2. Creamos un segundo archivo y le agregamos el contenido del anterior
cat /tmp/empleado-nombre.txt >> empleado.txt
cat /tmp/empleado-pais.txt >> empleado.txt

# 3. Borramos los archivos temporales que ya no necesitamos
# se borran los archivos .txt que empiecen con empleado seguido de un guión
rm /tmp/empleado-*.txt

6.5. Insertar texto al principio de un archivo en una linea con cat

Esta manera lleva menos pasos, pero es mejor entender primero el mecanismo del anterior

echo "Su nombre es Carlos" | cat - empleado.txt > tmp && mv tmp empleado.txt

Explicación paso a paso de la anterior linea de comando:

1. Con `echo` imprimimos por pantalla un texto, lo que esté entre comillas seguido de él

2. Con ` | ` ó conocido como **pipe** utiliza como entrada la salida de otro programa,
en este caso reutilizamos lo que imprimimos por pantalla, lo que queremos como texto
pasar a un archivo.

3. Con `cat` concatenamos texto de archivos, en este caso la salida del **echo**,
el primer parámetro es un guión **-** que quiere decir que le pasaremos un texto no un archivo,
el segundo parámetro **empleado.txt** es el nombre de archivo con el que concatena el texto

4. Con `>` utilizado para **redireccionar de la salida de un comando** pasará el texto
que concatenamos con **cat**, y lo guardará en el archivo temporal **tmp** que podría
haber tenido cualquier otro nombre que quisieramos

5. Con `&&` indicamos que cuando se cumpla el comando anterior (de concatenar el texto con
el archivo y guardarlo en otro temporal) entonces prosiga con el siguiente comando, pero
sólo si solo el comando anterior tuvo éxito en realizarse. En caso que lanze un error,
no ejecutará lo que le siga

6. Con `mv` sobreescribimos el archivo **empleado.txt** con lo que se guardó en **tmp**

6.6. Insertar texto al principio de un archivo con el comando sed

Con el comando `sed` se puede mostrar, y modificar un archivo mediante expresiones regulares Aunque esta manera parezca incluso más fácil que las anteriores, pero siempre es bueno conocer otras alternativas y entender como funcionan los comandos básicos de linux.

# agregamos un texto al principio seguido de un salto de linea
sed -i "1iSu nombre es Carlos\n" empleado.txt
Su explicación sería:

1. Con `-i` como parámetro nos referimos que vamos a insertar texto
2. Con `"1i"` al principio de la cadena de texto, hacemos referencia a la primera linea

7. Documentación de los programas

7.1. Conceptos

Al usar el comando man, nos despliega información necesaria de como utilizar otros comandos y programas

7.2. Obtener documentación resumida de un programa

Se le pasa el parametro -f

# devuelve información acerca del comando grep
man -f grep

7.3. Obtener documentación más ordenada de un programa

El comando info es otra herramienta parecida a man pero más fácil de entender, aunque no tan completa. Esta nueva dispone de hipervinculos de referencia

# devuelve información acerca del comando grep
info grep

8. Otros comandos interesantes

8.1. Ejecutar multiples comandos en una linea

Para esto debemos utilizar el símbolo * ; * para separar los comandos a ejecutar

ls -l ; cat /etc/passwd

8.2. Ejecutar un programa luego de otro

A diferencia de utilizar ;, con el operador lógico && podemos pedirle que ejecute un programa luego que uno anterior se haya ejecutado. Podria verse como un si sucede esto,entonces hace este otro también.

mkdir programa1 && programa2

8.3. Saber la ruta de un programa

whereis ls

8.4. Pasar por parametro la salida de un comando

Una alternativa a esto sería el uso de los acentos inversos que nos permiten pasar la salida de un comando como parametro a otro comando

kill `cat carpeta/proceso.pid`

8.5. Cambiar de usuario

En caso que estemos usando varios usuarios, o accedamos a una terminal externa

# cambia el usuario a Neverkas
su neverkas

8.6. Saber en que terminal nos encontramos

En caso de que tengamos varias terminales abiertas ejecutando varios procesos en segundo plano, y queramos buscar los procesos de una terminal específica, pero no sabemos de cual. Nos posicionamos en esa terminal y ejecutamos el comando tty.

# nos devuelve información de la terminal actual
tty

8.7. Saber la ruta en la que se encuentra la terminal

Con pwd podemos saber en que ruta nos encontramos en caso de conectarnos en algun servidor

# muestra la ruta en donde nos encontramos parados
pwd

8.8. Listar paquetes instalados ordenados por fecha

Si necesitamos saber por esas casualidades los paquetes instalados via terminal, y guardarlo en un archivo paquetes-instalados.txt buscamos en dpkg.log

grep -i "install" /var/log/dpkg.log > /tmp/paquetes-instalados.txt

8.9. Conocer el tipo de terminal en ejecución

Existen diversos tipos de terminales, quizás necesitas realizar una configuración y desconoces cual es el tipo de terminal que estas utilizando.

Algunos tipos de terminal son:

  • GNOME
  • KDE
  • XFCE
  • JWM
# Para saber la distribución de linux y el tipo de terminal
env | grep XDG_CURRENT_DESKTOP

# Si es GNOME, algunas opciones para conocer la versión
gnome-shell --version # opcion 1

apt-cache show gnome-shell | grep Version # opcion 2 con apt-cache

8.10. Personalizar el prompt de la terminal

Con prompt nos referimos al texto que aparece antes de las lineas de comando que ejecutamos en la terminal. Este suele indicar el nombre de usuario, el grupo al que pertenece y la ruta de directorios a la que vamos accediendo en el sistema.

8.10.1. Modificamos la configuracion de la terminal

Para modificar necesitamos modificar el archivo `.bashrc` (con cuidado) y buscamos en donde diga lo siguiente

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Y lo modificamos para que se parezca a lo siguiente

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Lo que hicimos fue modificar la segunda linea, acortando la informacion que aparece en la terminal, ahora solo veremos el nombre del usuario seguido de la ruta.

8.10.2. Otras variantes

En caso que queramos entender un poco mas como funciona, y personalizarlo aun mas, esta te compartimos una lista de los parametros y que informacion imprime cada uno.

Caracter Descripción
\u Nombre del usuario de la sesion
\h Nombre del host
\d Fecha en formato mm/dd/YYYY
\A Hora del sistema
\j Cantidad de tareas en ejecucion por esa terminal
# Algunas variantes podrian ser:

PS1="[codeando] \u@\h:\w\$ "
# [codeando] user@group ~/Documents: $

PS1=”\A \u: \w\$# 10:22 user: ~/Documents $

9. Referencias Web

Para armar esta guia me base en algunos libros y sitios web que consideré útiles

9.1. Referencias Oficiales

9.2. Referencias Extraoficiales

9.2.1. Otros

9.2.2. - Entendiendo como usar el comando sed

9.2.3. - Entendiendo como usar el comando cat

9.2.4. - Personalizar prompt de la terminal

Author: jelou

Created: 2021-09-13 lun 11:56

Validate