Sistemas de archivos
Archivo
■ Es un conjunto de datos al que se le asigna
un nombre.
■ Normalmente reside en un dispositivo de
almacenamiento secundario.
■ Se puede manipular como una unidad.
2
Operaciones sobre archivos
■ Abrir
■ Cerrar
■ Crear
■ Destruir
■ Copiar
■ Renombrar
■ Listar
3
Archivos
■ Los elementos de información individuales
en un archivo se pueden manipular con
operaciones como:
⚪ Leer
⚪ Escribir
⚪ Modificar
⚪ Eliminar
⚪ Insertar
4
Archivos
■ Volatilidad: Frecuencia con que se cambia
la información de un archivo.
■ Actividad: Porcentaje de registros a los que
se tuvo acceso en un período dado.
■ Tamaño
5
File System
■ Un componente fundamental en cualquier SO es
el sistema de archivos.
■ Los FS contienen:
⚪ Métodos de acceso
⚪ Administración de archivos
⚪ Administración de almacenamiento secundario
⚪ Mecanismos de integridad de los archivos
6
File system
■ El FS se ocupa de administrar el espacio de
almacenamiento secundario, sobre todo espacio
en disco.
■ Aquí aparecen los conceptos de:
⚪ Cuenta
⚪ Dueño
⚪ Permisos
⚪ Estructura jerárquica del FS
■ Un SO puede dar seguridad de archivos (y ser
multiusuario) sólo si su FS lo permite.
7
Funciones del FS
■ Se debe poder:
⚪ Crear, modificar y eliminar archivos.
⚪ Compartir archivos selectivamente.
⚪ Al compartir, se deben ofrecer varios tipos de
acceso controlados: lectura, escritura, etc.
⚪ Agrupar los archivos en una estructura
jerárquica.
⚪ Transferir información entre archivos.
⚪ Respaldo y recuperación.
⚪ Nombres simbólicos en sustitución de los
físicos.
⚪ Cifrado.
⚪ Interfaz amable con el usuario, vista lógica
8
adecuada.
Bloques y buffers
■ Bloque o registro físico: unidad de
lectura/escritura para un dispositivo.
■ Registro lógico: unidad de lectura/escritura
para el usuario.
■ Pueden relacionarse 1 a 1, n a 1 o 1 a n.
9
Organización de archivos
■ Refiere a la forma en que se acomodan los registros en un
archivo en el almacenamiento secundario.
■ Los métodos más comunes:
⚪ Secuencial: Los registros se colocan en orden físico. OK
para cintas (secuenciales).
⚪ Directo: Se obtiene acceso directo a los registros por su
dirección en el propio dispositivo.
⚪ Secuencial indizado: Registros ordenados en forma lógica
según un campo clave. Se manejan índices físicos y
lógicos.
⚪ De partición: organización en directorios.
■ Se llama volumen al medio de grabación.
10
Asignación y liberación de espacio
■ La fragmentación es el gran problema y
degrada la performance del sistema.
■ Para evitarla se pueden realizar
compactaciones y garbage collections.
■ Algunos FS ya optimizan al mover/copiar
(NTFS p/ej).
11
Distintas técnicas de asignación
■ Asignación contigua
⚪ Los archivos se asignan a zonas contiguas del almacenamiento
secundario.
⚪ Los usuarios especifican por adelantado el tamaño del área
requerida para guardar cierto archivo… y sólo se autoriza si hay
espacio (esto se ve claramente no es muy flexible).
⚪ Los directorios son fáciles de implementar, basta dar la dirección
de inicio y la longitud del archivo.
12
⚪ Desventajas:
■ Se generan huecos al asignar/borrar (fragmentación). Esto requiere
condensaciones periódicas, etc.
■ Cuando los archivos crecen dinámicamente, es inconveniente por ser
necesario reubicar continuamente los archivos.
Asignación no contigua
■ Contempla el problema del crecimiento dinámico
de los archivos.
14
Asignación de bloques
■ Maneja de forma más eficiente el almacenamiento
secundario.
■ Reduce el overhead en tiempo y espacio.
■ Es una mezcla de asignación contigua y no contigua.
■ Se asignan bloques de sectores contiguos.
■ Al asignar bloques nuevos, se busca asignar los más
cercanos físicamente.
■ Una forma de implementarlo es el encadenamiento
de bloques y el encadenamiento de bloques de índice
(figura)
15
Encadenamiento de bloques
16
● ventaja principal respecto a la asignación contigua, no posee tanta fragmentación (al borrar o crear
archivos)
● Desventaja los punteros ocupan espacio en los bloques y la pérdida de una referencia genera la pérdida de
gran parte de información.
Tiende a dejar fragmentos de los ficheros tras borrarlos, lo que con el
tiempo ralentiza las operaciones L/E.
FAT
No es redundante a fallos (ante fallos, como fallos eléctricos, puede dejar el
sistema en un estado incongruente).
Fue diseñado para ficheros de tamaño reducido.
No soporta permisos de seguridad.
Encadenamiento de bloques
de índice
19
● Los bloques se acceden de forma directa a través de un bloque de indexación.
● Debido a que el bloque de indexación ocupa espacio, pueden surgir varios bloques de indexación por
archivo.
“Algunos sistemas de archivos diferencian las letras mayúsculas de las
minúsculas, mientras que otros no. UNIX cae en la primera categoría;
MS-DOS en la segunda. Así, un sistema UNIX puede tener los
siguientes nombres como tres archivos distintos: maria, Maria y
MARIA. En MS-DOS, todos estos nombres se refieren al mismo
archivo.”
Dr Luis Castellanos. 2014. Sistemas Operativos: una Guía de Estudios
Control de acceso
■ Para el control de acceso existen normalmente
un conjunto de permisos, los que se habilitan o
deshabilitan según los usuarios.
■ Esto da lugar a una matriz de control de acceso.
■ También aparecen diferentes roles y grupos de
usuarios y categorías de archivos, para simplificar
la administración.
■ Aparece la figura del dueño de un archivo.
22
En caso de problemas…
■ El FS puede administrar ciertas redundancias, a
nivel de sus estructuras (duplicando partes vitales
por ejemplo), o a nivel del almacenamiento
común.
■ El SO puede dar mayor o menor soporte a los
respaldos o dejarlo en manos de herramientas
que corren sobre él.
■ Puede haber respaldos completos o
incrementales o combinación.
23
Bloque de paridad
Para explicarlo de una forma sencilla, la paridad es la suma de todos los
dispositivos utilizados en una matriz. Recuperarse del fallo de dispositivo es
posible leyendo los datos buenos que quedan y comparándolos con el dato de
paridad almacenado en el conjunto.
http://www.onraidservices.com/paridad.htm
■ No es un RAID técnicamente
hablando.
■ Sin respaldo de datos. Pero si
falla un disco solo se pierde la
información de él.
■ Datos espejados
■ La capacidad de
almacenamiento se
disminuye a la mitad
■ No ganamos rendimiento
■ Enfocado a la detección de errores de disco.
■ Actualmente no se utiliza.
■ Los discos antiguos no tenían detección de errores,
era necesario aplicar algoritmos de detección de
errores y guardar su resultado en un disco.
■ Los discos son sincronizados por la controladora y
funcionan como uno. Se lee info de los primeros
discos y se verifica su correctitud con la información
contenida en el disco ultimo.
■ A mayor cantidad de tipos de error, mayor cantidad
de discos de verificación.
■ Actualmente no se utiliza (el raid 4 es similar pero
dividiendo por bloques de datos)
■ Sincroniza la controladora para que los 3 primeros
discos trabajen como uno, guardando la información
como bytes (y no como bloque). Lo cual lo vuelve
muy veloz.
■ Puede reconstruir la info a través del disco de paridad
■ Similar a Raid 3 pero con bloques.
■ Permite reconstruir cuando falla un disco
■ Tiene una desventaja respecto a raid 5, que estresa
mucho el disco de paridad (al estar concentrado en
un único disco, pudiendo generar su ruptura)y no
distribuye las lecturas.
■ Incrementa rendimiento de lectura.
■ Se precisa poco espacio para backup (1 disco).
■ Sin embargo, ante fallas de múltiples discos, pierde
información.
■ Similar pero con tolerancia a dos discos rotos a la
vez.
Esquemas combinados
https://www.redeszone.net/2019/03/12/tipos-raid-nas/
Linux
Laboratorio 1.
UNIX
● 1965
Bell Telephone Laboratories y General Electric Company intervienen en el
proyecto MAC del MIT para desarrollar un nuevo sistema operativo
(MULTICS).
El cual tenía como objetivo ofrecer un sistema multiusuario, de gran
capacidad de almacenamiento y facilidades para compartir datos entre
procesos.
● 1969
Bell se retira del proyecto y desarrolla su propio sistema operativo para la
computadora PDP-7. El cual constituyó la primer versión de UNIX.
● 1971
Ritchie crea el lenguaje C (continuación de B, inspirado este último en BCPL
y FORTRAN).
● 1973
Se escribe en C la versión de UNIX
● 1974
Se introduce UNIX en las universidades con fines educativos
● 1977
Nace la primera versión comercial de UNIX, conocida como versión 6.
● 1981
Nace la primer versión de UNIX para computadoras personales.
Ventajas
★ Escrito en lenguaje de alto nivel C
★ Sistema jerárquico de procesos y
archivos
★ Interface con perifericos
★ Multiusuario y tiempo compartido
★ Adapta sus programas a cualquier
máquina (hardware) con UNIX
★ No está ligado a ningún fabricante de
computadoras particular
$ nombre [calificador] [argumento] [terminador]
● Nombre
nombre del comando
● Calificador
Posibles variaciones de actuación del comando.
● Argumento
Nombre del elemento (archivo, directorio, etc) sobre el que se quiere aplicar
el comando
● Terminador
Delimitador que sirve para separar comando
Ejemplo linux:
ls -ltrh /home ;
Nota,
--help | less
Herramientas
El sistema operativo UNIX proporciona al usuario una serie
de herramientas o programas de utilidad para el desarrollo
del software, como puede ser:
● Editor de Pantalla Vi
● CC compilador de C
● MAKE es un programa que acepta especificaciones de
las dependencias existentes entre módulos de un
programa y establece mecanismos para mantener las
versiones del programa, trasladando al resto de
módulos los cambios que se realicen en uno de ellos.
Es decir, nos ayuda a compilar los programas.
● AWK es el intérprete de un lenguaje de programación
cuyo fin es tabular, dar formato y pre procesar archivos
de datos.
Free Software Foundation
FSF-1985
La Free Software Foundation (FSF) es una organización sin fines de lucro con la
misión mundial de promover la libertad de los usuarios de computadoras.
Defendemos los derechos de todos los usuarios de software.
Free Software Foundation
“Linux y todo su desarrollo no tendría cabida si no hubiera existido el concepto de
Software Libre como lo pensó Richard Stallman que en 1985 crea la FSF. Y
publica el manifiesto GNU, de hecho uno de los principales objetivos de GNU era
precisamente desarrollar un sistema operativo libre del que Hurd (así lo llamó)
sería el núcleo (kernel).”
Principios
● La libertad de ejecutar el programa como lo desee, con cualquier propósito
(libertad 0).
● La libertad de estudiar el funcionamiento del programa y modificarlo de modo
que realice las tareas como usted desee (libertad 1). El acceso al código
fuente es un prerrequisito para esto.
● La libertad de redistribuir copias para ayudar a los demás (libertad 2).
● La libertad de distribuir copias de sus versiones modificadas a otras personas
(libertad 3). Al hacerlo da a toda la comunidad la oportunidad de beneficiarse
de sus cambios. El acceso al código fuente es un prerrequisito para esto.
LINUX
GNU LINUX
● GNU = GNU’s not UNIX
Sigue un diseño de tipo Unix y se mantiene compatible, pero se distingue de
UNIX por ser software libre y por no contener código de UNIX.
● Auspiciado por la FSF
● Con el tiempo, distintos grupos de personas empezaron a aunar esfuerzos
para crear lo que se conoce como distribuciones de Linux. La mayor parte de
estas distribuciones se diferenciaban solamente en los conjuntos de software
que incluyen. A medida que pasaba el tiempo, las diferentes distribuciones
diversificaron sus ofertas, añadiendo algunas veces software escrito
específicamente para las propias distribuciones (como utilidades de
empaquetamiento e interfaces gráficas) en un esfuerzo por diferenciarse del
resto.
Distribuciones
https://es.wikipedia.org/wiki/Distribuci%C3%B3n_Linux#/media/Archivo:Linux_Dist
ribution_Timeline.svg
Kernel
Repositorio
● “Un repositorio es un servidor accesible mediante internet que almacena paquetes y programas
para que nosotros los podamos descargar e instalar en nuestra distribución GNU-Linux.”
● sudo nano /etc/apt/sources.list
sudo apt-get update
Recopilación de distribuciones
https://distrowatch.com/
Comandos Básicos
File System
Archivos y directorios
● Archivos
Son los archivos del usuario (contienen programas, texto, etc)
● Directorios
Son particiones lógicas que a su vez son archivos que contienen la
información necesaria para poder encontrar un archivo en el disco
● Archivos Especiales
Se utilizan para designar periféricos de entrada y salida.
Cada archivo tiene asociado un conjunto de permisos que determinan qué puede
hacerse con él y quienes tienen acceso.
Permisos
https://blog.desdelinux.net/permisos-linux-administradores-desarrolladores-sistemas/
http://programacion.jias.es/2017/02/linux-unix-como-cambiar-permisos-en-archivos-o-directorios-chmod/
https://www.emezeta.com/articulos/10-comandos-para-trabajar-en-linux
Cat /etc/groups
Nombregrupo:x:140:lucas,gabriel, pepe
● X, es la contraseña cifrada
● 140 es el GID (group ID)
● Lucas, gabriel y pepe los integrantes
del grupo
$ sudo groupadd <grupo>
$ groups gabriel
$ sudo usermod -a -G <grupos> <usuario>
Otras Utilidades
Crontab
crontab -e
crontab -l
Relaciones de Confianza
ssh-keygen
Respaldos Rsync + crontab + relación
de confianza
Bibliografia
● Linux (6º Edición)
David Bandel/Robert Napier.
● Introducción a los Sistemas Operativos
Alcalde / Morera
● Linux La guia definitiva
Facundo Arena
● Linux Easy Steps
Mike Mcgrath
● WEBS
○ https://www.fsf.org/es
○ https://es.wikipedia.org/
○ https://geekland.eu/que-son-los-repositorios-en-linux/
○ https://blogcitochia.wordpress.com/2017/03/22/estructura-jerarquica-de-directorios-de-linux/
○ https://miro.medium.com/max/1760/1*ijflPgo4L7qWkePRclcQfA.png
○ https://es.wikipedia.org/wiki/GnuLinEx
○
Bash Scripting y
Regex
Scripts
● Lista de comandos reunidos en un archivo,
posibilitando su ejecución, de forma de
reutilizar el código.
● La filosofía de los scripts es la de crear
comandos complejos a partir de agrupar
comandos simples.
Bash Scripting
● Fusión entre programación y comandos de la shell.
● Busca automatizar las acciones repetitivas
Nota: Estas diapositivas muestran ejemplos prácticos sencillo, omite
información y posibilidades de Bash Scripting, tan solo para simplificar.
Primera Línea
● #!/bin/bash
○ #!
shebang, caracteres que se encuentran al inicio
de los programas ejecutables interpretados.
○ /bin/bash
Ruta completa al programa necesario para
ejecutar las instrucciones contenidas en el script.
○ Básicamente la línea “#!/bin/bash” referencia a
quien interpreta los comandos del script.
○ ¿Dónde está el bash?
which bash
Comentarios y mostrar en Pantalla
#!/bin/dash
# Esto es un comentario
echo Hola Mundo
Ejecución
● Guardar como archivo .sh
● Sea unejemplo.sh, se ejecuta:
○ ./unejemplo.sh
Variables
VaR1=a
VAR2=2
echo "Variables: $VaR1 $VAR2"
● Tener en cuenta que es “case sensitive”
● Los nombres de variable pueden únicamente contener letras, números o guión bajo y comenzar
con una letra o con el guión bajo.
Impresión de texto
#!/bin/bash
var1=que
var2=" tal ?"
echo "una salida"
echo "hola $var1 $var2"
echo "hola \$var1"
echo "hola 'que tal'"
Los caracteres encerrados entre comillas simples preservan su valor literal.
Impresión de texto
Algunos caracteres especiales
● \a alerta (speaker)
● \n nueva línea
● \\ imprimir barra
echo -e "\n linea 1 \n linea 2 \n"
Función con y sin parámetros
testfunction(){
echo "My first function"
}
testfunction
testfunction(){
echo $1
echo $2
}
testfunction "Hello" "World"
Lectura de línea
read valorPorTeclado
echo "Valor entrado por teclado: "$valorPorTeclado
condicional
read menuvalor
if [ $menuvalor = 1 ]; then
echo "Se ingresa la opcion 1"
elif [ $menuvalor = 2 ]; then
echo "Se ingresa la opcion 2 "
else
echo "no se ingresa una opcion
valida"
fi
Condicionales
-eq Igual -lt menor
if [ "$a" -eq "$b" ]
if [ "$a" -lt "$b" ]
-ne Distinto
-le menor o igual
if [ "$a" -ne "$b" ]
if [ "$a" -le "$b" ]
-gt Mayor
if [ "$a" -gt "$b" ]
-ge mayor o igual
if [ "$a" -ge "$b" ]
Iteración
#! /bin/bash
OPCION=0
while [ $OPCION -eq 0 ]; do
echo "itero"
read OPCION
done
Iteración
#!/bin/bash
for numero in {1..20};
do
echo Este es el número: $numero
sleep 5
done
apertura de archivo
while IFS= read -r line
do
echo "$line"
done < archivos.txt
Ejm. Crear Carpeta y archivo
mkdir unac
touch unac/una.txt
echo 'text here' >> unac/una.txt
REGEX
En cómputo teórico y teoría de lenguajes formales, una expresión regular, o
expresión racional, también conocidas como regex o regexp por su contracción de
las palabras inglesas regular expression, es una secuencia de caracteres que
conforma un patrón de búsqueda. Se utilizan principalmente para la búsqueda
de patrones de cadenas de caracteres u operaciones de sustituciones.
Las expresiones regulares proporcionan una manera muy flexible de buscar o
reconocer cadenas de texto. Por ejemplo, el grupo formado por las cadenas
Handel, Händel y Haendel se describe con el patrón "H(a|ä|ae)ndel".
Metacaracteres
^ $ . |{}[]()*+?\
Online Regex:
https://www.regextester.com/
https://www.freeformatter.com/regex-tester.html
El .
● a
Toma todas las a del texto.
● .
El punto puede referir a cualquier carácter.
● .a
Selecciona las a y el carácter precedente.
● ..a
Selecciona las a y dos caracteres precedentes.
\
\ transforma metacaracteres en caracteres.
● \.
muestra todos los puntos
Corchetes []
Se utiliza para seleccionar ocurrencias de caracteres (ejemplo [ab] agrupa todas
las a y b que aparezcan (inclusive por separado). De ser ab (sin paréntesis
cuadrados), detecta únicamente la combinación ab.
● [0123456789]
Selecciona todas las ocurrencias de numeros
● [a-z]
selecciona todas las ocurrencias de la ‘a’ a la ‘z’ minusculas.
● [0-9]
Selecciona todas las ocurrencias de numeros
Repetición ?
el ? implica que el carácter antecesor debe aparecer cero o una vez.
● 123?
reconocerá 12 , 123, pero no 1253 o 1233
Repetición +
el + implica que el carácter aparecerá una o más veces.
● 123+
reconocerá 123, 1233, 12333, etc
Repetición *
el * implica que el carácter aparecerá cero, una o más veces.
● 123*
reconocerá 12, 123, 1233, 12333, etc
Repetición {}
Define la cantidad de veces que debe aparecer lo que antecede
● [0-9]{4}
reconocerá cifras de 4 dígitos
^
Dentro de [^] implica exclusión
● [^0-9]
implica todo menos números
● por fuera de los paréntesis cuadrados, implica comienzo de linea.
$
Implica indicar el final del texto. es útil cuando se trata de archivos de varias
lineas.
Ejm
● (no|bu|oo)(t|k)
reconocerá not, but, oot, nok, buk, ook
● history | grep -E “sh$”
● history | grep -E "echo..[a-zA-Z0-9]*..>>.[a-zA-Z0-9]*.txt"
● history | grep -E "[0-9]{7}-[^0-9]"
Reconocer un mail...
(?:[a-z0-9!#$%&'*+/=?^_`{|}~
-]+(?:\.[a-z0-9!#$%&'*+/=?^_
`{|}~-]+)*|"(?:[\x01-\x08\x0b\x
0c\x0e-\x1f\x21\x23-\x5b\x5d
-\x7f]|\\[\x01-\x09\x0b\x0c\x0
e-\x7f])*")@(?:(?:[a-z0-9](?:[
a-z0-9-]*[a-z0-9])?\.)+[a-z0-9
](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?
:(2(5[0-5]|[0-4][0-9])|1[0-9][0-
9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-
5]|[0-4][0-9])|1[0-9][0-9]|[1-9]
?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\
x01-\x08\x0b\x0c\x0e-\x1f\x2
1-\x5a\x53-\x7f]|\\[\x01-\x09\
x0b\x0c\x0e-\x7f])+)\])
Cibergrafía
● https://overthewire.org/wargames/bandit/bandit2.html
https://www.youtube.com/watch?v=RUorAzaDftg
● https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular
● https://www.robertoballester.com/pequeno-manual-sobre-expresiones-regular
es-regex/
● https://stackoverflow.com/questions/201323/how-can-i-validate-an-email-addr
ess-using-a-regular-expression
● https://tldp.org/LDP/abs/html/comparison-ops.html
● https://explainshell.com/
103