shell-y-sistema-de-ficheros
Shell y sistema de ficheros
Section titled “Shell y sistema de ficheros”Uso diario de la shell: moverse por el sistema, gestionar ficheros y permisos, comodines, entorno y configuración.
Navegación y gestión de ficheros
Section titled “Navegación y gestión de ficheros”Estructura de directorios
Section titled “Estructura de directorios”| Ruta | Contenido |
|---|---|
/ |
Raíz del sistema. |
/home |
Directorios personales de los usuarios. |
/root |
Directorio personal del usuario root. |
/etc |
Ficheros de configuración. |
/var |
Datos variables: logs, colas, cachés. |
/tmp |
Temporales (se limpian al reiniciar o periódicamente). |
/usr |
Programas y librerías. |
/bin, /sbin |
Binarios esenciales (en muchas distribuciones enlaces a /usr/bin). |
/opt |
Software adicional. |
/dev |
Ficheros de dispositivos (/dev/null, /dev/tcp). |
/proc |
Información del kernel y procesos en forma de ficheros. |
- Absoluta: empieza por
/(/etc/hosts). - Relativa: depende del directorio actual (
../datos/fichero.txt). .directorio actual,..directorio padre,~directorio personal,-directorio anterior (cd -).
Comandos esenciales
Section titled “Comandos esenciales”pwd # directorio actualcd /etc # cambiar de directoriocd # ir al directorio personalcd - # volver al directorio anterior
ls # listarls -la # largo, incluye ocultosls -lh # tamaños legiblesls -lt # ordenado por fecha
mkdir proyecto # crear directoriomkdir -p a/b/c # crear con padres
touch fichero.txt # crear vacío o actualizar fechacp origen destino # copiarcp -r carpeta copia # copiar directoriomv antiguo nuevo # mover o renombrarrm fichero # borrar ficherorm -r carpeta # borrar directorio y contenidormdir carpeta_vacia # borrar directorio vacío
cat fichero # mostrar contenidofile fichero # tipo de ficherostat fichero # metadatos detalladosln -s destino enlace # enlace simbólicorm no tiene papelera. Conviene usar rm -i o comprobar antes con ls el patrón que se va a borrar.
Los ficheros y directorios cuyo nombre empieza por . están ocultos y solo aparecen con ls -a.
Permisos y propietarios
Section titled “Permisos y propietarios”Salida de ls -l:
-rwxr-xr-- 1 usuario grupo 1024 ene 1 10:00 script.sh│└┬┘└┬┘└┬┘│ │ │ └── permisos de otros│ │ └───── permisos del grupo│ └──────── permisos del propietario└────────── tipo (- fichero, d directorio, l enlace)Significado
Section titled “Significado”| Permiso | En un fichero | En un directorio |
|---|---|---|
r (4) |
Leer contenido | Listar contenido |
w (2) |
Modificar | Crear, borrar y renombrar dentro |
x (1) |
Ejecutar | Entrar (cd) y acceder a lo que contiene |
Modo octal (suma de 4, 2 y 1 para propietario, grupo y otros):
chmod 755 script.sh # rwxr-xr-xchmod 644 fichero.txt # rw-r--r--chmod 600 clave.txt # rw-------Modo simbólico:
chmod +x script.sh # añadir ejecución a todoschmod u+x script.sh # solo al propietariochmod g-w fichero # quitar escritura al grupochmod o= fichero # quitar todo a otroschmod -R 750 carpeta # recursivoPropietarios
Section titled “Propietarios”chown usuario ficherochown usuario:grupo ficherochown -R usuario:grupo carpetachgrp grupo fichero
id # usuario, uid, gruposwhoamiDefine los permisos que se quitan al crear ficheros nuevos.
umask # 0022 es habitual# ficheros: 666 - 022 = 644 directorios: 777 - 022 = 755Permisos especiales
Section titled “Permisos especiales”| Bit | Efecto | Octal |
|---|---|---|
| SUID | El fichero se ejecuta con los privilegios de su propietario | 4000 |
| SGID | Ejecución con el grupo del fichero; en directorios, los nuevos ficheros heredan el grupo | 2000 |
| Sticky | En un directorio, solo el propietario puede borrar sus ficheros (/tmp) |
1000 |
Globbing y comodines
Section titled “Globbing y comodines”El globbing lo expande la shell antes de ejecutar el comando.
| Patrón | Coincide con |
|---|---|
* |
Cualquier cadena (incluida vacía) |
? |
Un único carácter |
[abc] |
Uno de los caracteres indicados |
[a-z] |
Un carácter del rango |
[!abc] o [^abc] |
Cualquier carácter excepto los indicados |
{a,b,c} |
Expansión de llaves (genera cada alternativa) |
ls *.txt # todos los .txtls fichero?.txt # fichero1.txt, ficheroa.txtls [0-9]* # empiezan por un dígitols *.{jpg,png} # ambos formatoscp informe.txt{,.bak} # equivale a: cp informe.txt informe.txt.bakNotas:
*no incluye ficheros ocultos. Para incluirlos:shopt -s dotglob.- Si el patrón no coincide con nada, Bash lo deja literal (salvo con
shopt -s nullglob, que lo vacía). - Para evitar la expansión, se entrecomilla:
find . -name "*.txt". - Globbing y expresiones regulares son cosas distintas:
*en glob significa “cualquier cosa”; en regex significa “repetir lo anterior”.
Variables de entorno y PATH
Section titled “Variables de entorno y PATH”Las variables de entorno se heredan por los procesos hijos.
env # listar todasprintenv HOME # una concretaecho "$HOME" "$USER" "$PWD" "$SHELL"
export MI_VAR="valor" # exportar a procesos hijosMI_VAR=valor ./script.sh # solo para esa ejecuciónunset MI_VARLista de directorios (separados por :) donde la shell busca ejecutables.
echo "$PATH"export PATH="$PATH:$HOME/bin" # añadir un directorio al finalexport PATH="$HOME/bin:$PATH" # añadir al principio (prioridad)
command -v python3 # qué ejecutable se usaríaPara que el cambio sea permanente se añade la línea a ~/.bashrc.
Variables comunes:
| Variable | Contenido |
|---|---|
HOME |
Directorio personal |
USER |
Usuario actual |
PWD / OLDPWD |
Directorio actual / anterior |
SHELL |
Shell por defecto |
PATH |
Rutas de búsqueda |
EDITOR |
Editor por defecto |
LANG |
Idioma y codificación |
Alias, historial y atajos
Section titled “Alias, historial y atajos”alias ll='ls -lah'alias actualizar='sudo apt update && sudo apt upgrade'alias # listar los definidosunalias ll # eliminarPara que persistan se guardan en ~/.bashrc. Los alias no se expanden dentro de scripts no interactivos; ahí se usan funciones.
Historial
Section titled “Historial”history # lista numeradahistory | grep ssh # buscar un comando previo!! # repetir el último comando!42 # repetir el comando número 42!ssh # repetir el último que empezó por "ssh"!$ # último argumento del comando anteriorsudo !! # repetir el anterior con sudoEl historial se guarda en ~/.bash_history. Variables útiles en ~/.bashrc:
HISTSIZE=10000HISTFILESIZE=20000HISTCONTROL=ignoredups:ignorespace # ignora duplicados y líneas que empiezan con espacioAtajos de teclado
Section titled “Atajos de teclado”| Atajo | Acción |
|---|---|
Ctrl+R |
Búsqueda inversa en el historial |
Ctrl+A / Ctrl+E |
Inicio / final de línea |
Ctrl+U |
Borrar desde el cursor hasta el inicio |
Ctrl+K |
Borrar desde el cursor hasta el final |
Ctrl+W |
Borrar la palabra anterior |
Ctrl+L |
Limpiar pantalla |
Ctrl+C |
Interrumpir el comando en ejecución |
Ctrl+Z |
Suspender el comando (pasa a segundo plano parado) |
Ctrl+D |
Fin de entrada / cerrar la shell |
Tab |
Autocompletar (doble Tab muestra opciones) |
Alt+. |
Insertar el último argumento del comando anterior |
Ficheros de configuración
Section titled “Ficheros de configuración”Bash lee distintos ficheros según cómo se inicie.
| Tipo de shell | Cuándo ocurre | Ficheros que lee |
|---|---|---|
| Login | Inicio de sesión (consola, SSH, bash -l) |
/etc/profile, luego el primero que exista de ~/.bash_profile, ~/.bash_login, ~/.profile |
| No login interactiva | Abrir una terminal en el escritorio, ejecutar bash |
~/.bashrc |
| No interactiva | Ejecución de un script | Ninguno (salvo la variable BASH_ENV) |
Configuración habitual:
~/.bashrc: alias, funciones, prompt, historial,PATHpara sesiones interactivas.~/.bash_profileo~/.profile: variables de entorno de sesión. Es común que~/.bash_profilecargue~/.bashrc:
if [[ -f ~/.bashrc ]]; then source ~/.bashrcfi~/.bash_logout: se ejecuta al cerrar una sesión login.
Aplicar cambios sin reiniciar la terminal:
source ~/.bashrcPersonalizar el prompt:
PS1='\u@\h:\w\$ ' # usuario@equipo:ruta$