Guia Linux - Sobrevivir a la terminal - Parte 1
Table of Contents
- 1. Enlaces
- 2. Directorios
- 3. Compresión de Archivos
- 4. Permisos
- 5. Listar directorios
- 6. Tuberia (Pipe) y Redirección de datos
- 6.1. Filtrar el listado de directorio
- 6.2. Redirigir la salida de un programa como entrada de otro
- 6.3. Redirigir como entrada la salida de otro programa
- 6.4. Insertar texto a un archivo
- 6.5. Insertar texto al principio de un archivo en una linea con cat
- 6.6. Insertar texto al principio de un archivo con el comando sed
- 7. Documentación de los programas
- 8. Otros comandos interesantes
- 8.1. Ejecutar multiples comandos en una linea
- 8.2. Ejecutar un programa luego de otro
- 8.3. Saber la ruta de un programa
- 8.4. Pasar por parametro la salida de un comando
- 8.5. Cambiar de usuario
- 8.6. Saber en que terminal nos encontramos
- 8.7. Saber la ruta en la que se encuentra la terminal
- 8.8. Listar paquetes instalados ordenados por fecha
- 8.9. Conocer el tipo de terminal en ejecución
- 8.10. Personalizar el prompt de la terminal
- 9. Referencias Web
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:
- Propietario
- Grupo
- 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
- Libro - Manual de Administracion de Linux, Steve Shah
- Curso GNU/Linux - Tareas y Procesos [Ver Página]
- Resumen de programas en la terminal [Ver Página]
- Resumen de la Jerarquía del Sistema de Archivos [Ver Página]
- Como utilizar la redirección [Ver Página]
- Proyecto de Informacion sobre Linux [Ver Página]
9.2. Referencias Extraoficiales
9.2.1. Otros
- Ejemplos del comando ps [Ver Página]
- Guia de comandos bash [Ver Página]
9.2.2. - Entendiendo como usar el comando sed
- Ejemplos del comando sed, LikeGeeks [Ver Página]
- Ejemplos del comando sed, LinuxAdictos [Ver Página]
- Ejemplos del comando sed, TecMint [Ver Página]
9.2.3. - Entendiendo como usar el comando cat
- Explicación #1 del comando cat por RedHat [Ver Página]
- Explicación #2 del comando cat [Ver Página]
- Explicación #3 del comando cat [Ver Página]
9.2.4. - Personalizar prompt de la terminal
- Referencia #1, Vitux [Ver Pagina]
- Referencia #2, Ubunlog [Ver Pagina]