📝 windows_powershell_android_TAI
← Volver

📚 SISTEMAS OPERATIVOS CLIENTE — WINDOWS, POWERSHELL, ANDROID Y ADMINISTRACIÓN LINUX

Clase magistral para el examen TAI

🎓 Cómo usar este documento: Lee la explicación de cada bloque temático y responde las preguntas antes de pasar al siguiente. Las soluciones comentadas están al final.


BLOQUE 1 — ANDROID: VERSIONES Y CAPAS DE PERSONALIZACIÓN

¿Qué es Android?

Android es el sistema operativo móvil de Google. Su lema oficial es "Be Together, Not The Same", reflejo de su filosofía abierta que permite a los fabricantes modificar libremente la interfaz, aplicaciones preinstaladas, gestión de notificaciones, recursos del sistema, etc.

💡 Este conjunto de modificaciones de cada fabricante se denomina capa de personalización.


Capas de personalización más conocidas

Capa Fabricante
One UI Samsung
OxygenOS OnePlus
MIUI / HyperOS Xiaomi
EMUI Huawei / Honor
Pixel Experience Google
ColorOS OPPO
ZenUI ASUS
FlymeOS Meizu
realme UI Realme
OriginOS Vivo

Versiones de Android — Tabla completa

Versión Nombre Fecha de lanzamiento Nivel de API
1.0 No oficial 23 sep. 2008 1
1.1 No oficial 9 feb. 2009 2
1.5 Cupcake 27 abr. 2009 3
1.6 Donut 15 sep. 2009 4
2.0–2.1 Eclair 26 oct. 2009 5–7
2.2–2.2.3 Froyo 20 may. 2010 8
2.3–2.3.7 Gingerbread 6 dic. 2010 9–10
3.0–3.2.6 Honeycomb 22 feb. 2011 11–13
4.0–4.0.4 Ice Cream Sandwich 18 oct. 2011 14–15
4.1–4.3.1 Jelly Bean 9 jul. 2012 16–18
4.4–4.4.4 KitKat 31 oct. 2013 19–20
5.0–5.1.1 Lollipop 12 nov. 2014 21–22
6.0–6.0.1 Marshmallow 5 oct. 2015 23
7.0–7.1.2 Nougat 22 ago. 2016 24–25
8.0–8.1 Oreo 21 ago. 2017 26–27
9.0 Pie 6 ago. 2018 28
10 No oficial (ant. Quince Tart) 3 sep. 2019 29
11 No oficial (ant. Red Velvet Cake) 8 sep. 2020 30
12 No oficial (ant. Snow Cone) 4 oct. 2021 31
13 No oficial (ant. Tiramisu) 15 ago. 2022 33
14 No oficial (ant. Upside Down Cake) 4 oct. 2023 34

💡 Mnemotecnia de nombres por orden alfabético a partir de la v1.5: Cupcake → Donut → Eclair → Froyo → Gingerbread → Honeycomb → Ice Cream Sandwich → Jelly Bean → KitKat → Lollipop → Marshmallow → Nougat → Oreo → Pie


🧪 TEST — BLOQUE 1: Android

1. ¿Qué nivel de API corresponde a Android 6.0 Marshmallow?


2. ¿Qué capa de personalización de Android usa Samsung?


3. Android 4.4 KitKat fue lanzado en:


4. ¿A partir de qué versión de Android dejaron de usarse nombres de postres de forma oficial?


BLOQUE 2 — ADMINISTRACIÓN DE USUARIOS Y GRUPOS EN LINUX

Ficheros de configuración clave

Ficheros de usuarios y grupos en Linux
├── /etc/passwd     → Todos los usuarios del sistema
│     Formato: Usuario:x:UID:GID:Comentarios:HomeDir:Shell
├── /etc/shadow     → Contraseñas cifradas (más restrictivo en permisos)
│     Campos: nombre, pass cifrada, días desde 1/1/1970 cambio, días mín,
│             días máx, días aviso, días inactividad, fecha expiración, no usado
├── /etc/group      → Todos los grupos y sus miembros secundarios
│     Formato: Grupo:x:GID:Lista_usuarios
├── /etc/gshadow    → Seguridad de grupos (como shadow para usuarios)
│     Formato: Grupo:Clave_cifrada:Administradores:Lista_usuarios
└── /etc/skel       → Plantilla de directorios/ficheros copiados al crear usuario

⚠️ Dato clave: En /etc/group no aparecen los usuarios en su grupo primario, solo en los secundarios.


Comandos de gestión de grupos

Comando Función
groupadd grupo Crear nuevo grupo
groupdel grupo Eliminar grupo
groupmod -n nuevo viejo Renombrar grupo
gpasswd -a usuario grupo Añadir usuario a un grupo
gpasswd -d usuario grupo Eliminar usuario de un grupo
gpasswd -M u1,u2,uN grupo Establecer los miembros del grupo
gpasswd -A u1,u2 grupo Añadir administradores al grupo
newgrp grupo Cambiar de grupo activo (lanza nuevo shell)
groups usuario Ver grupos a los que pertenece un usuario
id usuario UID, GID y todos los grupos del usuario
grpck Comprobar consistencia del fichero de grupos
grpconv Sincronizar /etc/group y /etc/gshadow
chgrp [-R] grupo fichero Cambiar grupo propietario de un fichero

Comandos de gestión de usuarios

Comando Función
useradd [opciones] usuario Crear nuevo usuario
userdel usuario Eliminar usuario (mantiene ficheros)
userdel -r usuario Eliminar usuario y su directorio home
usermod [opciones] usuario Modificar atributos de un usuario
passwd usuario Cambiar contraseña
chage [opciones] usuario Gestionar caducidad de contraseña
chown [-R] usuario[:grupo] fich Cambiar propietario de fichero/directorio

Opciones clave de useradd

Opción Significado
-g IDGroup Grupo primario
-G grupos Grupos secundarios (separados por comas)
-d directorio Directorio home
-m Crear el directorio home
-s shell Shell de conexión
-c info Comentario del usuario
-u IDUser UID del usuario
-e fecha Fecha de expiración de la cuenta
-U Crea un grupo con el mismo nombre que el usuario

Opciones clave de chage (caducidad de contraseñas)

Opción Significado
-l Lista información de caducidad
-d nºDías Días desde 1/1/1970 del último cambio (0 = forzar cambio en próximo login)
-E yyyy-mm-dd Fecha de caducidad de la cuenta
-m nºDías Días mínimos para poder cambiar la contraseña
-M nºDías Días máximos de validez de la contraseña (máx. 99999)
-I nºDías Días de inactividad para bloquear la cuenta (-1 = nunca)
-W nºDías Días de aviso previos a la caducidad

💡 Para deshabilitar completamente la caducidad: chage -m 0 -M 99999 -I -1 -E -1 usuario


Tipos de grupos

Tipo Descripción
Primario Especificado en /etc/passwd. Se asigna al crear el usuario. Al crear un fichero se establece como grupo propietario
Secundarios Los demás grupos. El nombre del usuario aparece en la línea del grupo en /etc/group

💡 El grupo activo suele ser el primario, salvo que se haya cambiado con newgrp.


/etc/skel — Plantillas de usuario

/etc/skel contiene ficheros y directorios que se copian automáticamente al directorio home de cada nuevo usuario al crearlo con useradd.

Ficheros de inicialización de shell
├── Al hacer login:
│     .bash_profile  → Bash (PATH, variables, umask...)
│     .profile       → Bourne Shell (sh)
│     .login         → C Shell (csh)
├── Al ejecutar un shell:
│     .bashrc        → Bash (alias, variables del shell...)
│     .cshrc         → C Shell
└── Al salir del sistema:
      .bash_logout   → Bash
      .logout        → C Shell

🧪 TEST — BLOQUE 2: Usuarios y grupos Linux

5. ¿Qué fichero contiene la información de contraseñas cifradas de los grupos?


6. ¿Qué comando añade al usuario ana al grupo ventas?


7. La opción -r de userdel hace que:


8. ¿Para qué sirve el directorio /etc/skel?


9. ¿Qué hace el comando newgrp ventas?


BLOQUE 3 — POWERSHELL: FUNDAMENTOS

¿Qué es PowerShell?

PowerShell nace en 2006 de la mano de Microsoft y su inventor Jeffrey Snover, definido como "eficiente, extensible y con una curva de aprendizaje poco pronunciada".

Característica Descripción
Tipo Shell de comandos + lenguaje de scripting
Diferencia clave Trabaja con objetos .NET, no con texto plano
Pipeline Pasa objetos entre comandos, no texto
Base Framework .NET (hasta v5.0) / .NET Core (v6.0+)
Multiplataforma A partir de la versión Core 6.0
Open source A partir de la versión Core 6.0
Versión actual PowerShell 7

💡 Para ver la versión instalada: $PSVersionTable


Versiones de PowerShell

Versión Año Windows incluido Novedades clave
1.0 2006 XP SP2, Server 2003 Objetos, cmdlets
2.0 2009 Windows 7, Server 2008 R2 PowerShell ISE, ejecución remota, módulos
3.0 2012 Windows 8, Server 2012 Workflows, sesiones sólidas, tareas programadas
4.0 2013 Windows 8.1, Server 2012 R2 DSC (Desired State Configuration), ForEach, Where
5.0 2016 Windows 10 Clases PS, .NET Enumerados — última versión con .NET Framework
Core 6.0 2018 Primera open source y multiplataforma, .NET Core
Core 6.1 Soporte Windows, macOS y Linux más recientes
Core 6.2 Mejoras de rendimiento y corrección de errores
7 ForEach-Object -Parallel, nuevo Get-Error, operadores &&, \|\|, ??=

Variables en PowerShell

Tipo Descripción Ejemplo
Variables de usuario Creadas por el programador. Prefijo $ $nombre = "Juan"
Variables automáticas Almacenan el estado de PowerShell $? (resultado última operación)
Variables de preferencia Personalizan el comportamiento de PS $ErrorActionPreference
Constantes Valores fijos $true, $false, $null

⚠️ Los nombres de variable no distinguen mayúsculas de minúsculas y pueden incluir espacios (aunque no es recomendable).

💡 Las variables no necesitan declararse antes de usarse. El tipo se asigna automáticamente, aunque se puede indicar manualmente.


Tipos de datos en PowerShell

Tipo Descripción
[string] Cadena de caracteres
[char] Un solo carácter Unicode
[int] Entero con signo de 32 bits
[double] Número en coma flotante de 64 bits
[datetime] Fecha y hora
[bool] Valor lógico (true/false)
[array] Conjunto de valores
# Asignación automática de tipo:
$nombre = "Juan"        # string
$edad = 30              # int

# Asignación manual de tipo:
[int]$numero = 5
[datetime]$fecha = "09/10/2021"

# Ver el tipo de una variable:
$variable.GetType()

Cmdlets

Un cmdlet es un comando ligero del entorno PowerShell que devuelve un objeto .NET.

Formato de nombre de cmdlet: Verbo-Sustantivo
Ejemplo: Get-Command, Set-Alias, New-Item, Remove-Item
Característica Descripción
No son ejecutables Son instancias de clases .NET
Salida Devuelven objetos (no texto) al siguiente comando del pipeline
Orientados a registros Procesan un objeto a la vez
Nombrado Verbo (acción) + Sustantivo (recurso)

Pipeline (canalización)

En PowerShell el pipeline | pasa objetos completos (con propiedades y métodos) entre comandos, no texto plano. Esto hace los scripts más concisos y potentes.

# Ejemplo de pipeline:
Get-Process | Where-Object {$_.CPU -gt 10} | Sort-Object CPU -Descending

Módulos en PowerShell

Tipo de módulo Extensión Descripción
Script .psm1 Módulo escrito en PowerShell
Binario .dll Módulo compilado en .NET
Dinámico Creado en memoria en tiempo de ejecución
Manifiesto .psd1 Describe y referencia todos los componentes del módulo
Import-Module NombreModulo    # Importar módulo
Remove-Module NombreModulo    # Eliminar módulo de la sesión
Get-Module                    # Ver módulos cargados

Operadores en PowerShell

Tipo Operadores
Comparación -eq, -ne, -gt, -lt, -ge, -le
Lógicos -and, -or, -not, -xor
Aritméticos +, -, *, /, %
Asignación =, +=, -=, *=, /=
Cadena -like, -match, -replace, -split, -join

🧪 TEST — BLOQUE 3: PowerShell

10. ¿En qué año nació PowerShell y quién es su inventor?


11. ¿Cuál es la diferencia fundamental entre PowerShell y la mayoría de otros shells?


12. ¿A partir de qué versión PowerShell se convirtió en multiplataforma y open source?


13. ¿Qué comando permite ver la versión de PowerShell instalada?


14. ¿Cuál es el formato correcto para nombrar un cmdlet en PowerShell?


15. En PowerShell, [int]$numero = "cero" generará:


BLOQUE 4 — WINDOWS CLIENTE: COMANDOS Y ADMINISTRACIÓN

Consolas MMC y herramientas de administración

Comando Descripción
DISKMGMT.MSC Administrador de discos — particiones del disco en detalle
TASKSCHD.MSC Programador de tareas
LUSRMGR.MSC Usuarios y grupos locales
SECPOL.MSC Directiva de seguridad local — gestión de contraseñas
WF.MSC Consola de Windows Defender Firewall
MSCONFIG Configuración de inicio del sistema — programas en el arranque
CONTROL USERPASSWORDS2 Gestión avanzada de cuentas de usuario
gpupdate Actualiza directivas de grupo (ejecutar tras cambios en SECPOL.MSC)
Ctrl+May+Escape Administrador de tareas

Gestión de licencias — SLMGR

Opción Función
SLMGR /DLI Muestra información sobre la licencia
SLMGR /IPK clave Indica la clave del producto
SLMGR /SKMS Define el servidor de administración de claves (KMS)
SLMGR /ATO Realiza la activación del sistema

Identidad del usuario

Comando Función
WHOAMI /user Muestra el usuario actual y su número de SID
WHOAMI /groups Muestra el SID de los grupos a los que pertenece el usuario
RUNAS /USER:usuario CMD Cambia de usuario sin cerrar sesión

Gestión de usuarios por consola (NET)

Comando Función
net user [nombre] Consultar usuario
net user nombre pass /add Agregar usuario
net user nombre /delete Eliminar usuario
net user nombre /active:{yes\|no} Habilitar/deshabilitar cuenta
net user nombre /expires:fecha Fecha de caducidad
net localgroup [grupo] Consultar grupo local
net localgroup grupo /ADD Crear grupo local
net localgroup grupo /delete Eliminar grupo local
net localgroup grupo usuario /add Meter usuario en grupo
net localgroup grupo usuario /delete Sacar usuario del grupo
net use X: \\IP\carpeta Montar carpeta compartida en unidad X:
net use X: \\IP\carpeta /persistent:Yes Montaje permanente
net view Ver máquinas compartiendo recursos en la red

Gestión de discos — DISKPART

Comando DISKPART Función
LIST DISK Listar discos del sistema
SELECT DISK nº Seleccionar disco
CONVERT DYNAMIC Convertir disco a dinámico
LIST VOLUME Listar volúmenes
SELECT VOLUME nº Seleccionar volumen
ASSIGN LETTER=X Asignar letra de unidad
FORMAT Formatear volumen
Create volume stripe [size=n] disk=n,n Crear RAID 0
Create volume simple + add disk=nº Crear RAID 1 (espejo)
break disk=n nokeep Separar volumen corrupto del espejo
Create volume raid [size=n] disk=n,n,n Crear RAID 5
repair disk=n Reparar RAID con nuevo disco

Herramientas de ficheros en Windows

Comando Función
CIPHER Cifrar archivos (EFS)
COMPACT Comprimir archivos
FSUTIL Utilidad para trabajar con archivos y sistema de ficheros
MKLINK /D vínculo destino Crear enlace simbólico a directorio
MKLINK /H vínculo destino Crear enlace duro (físico)
MKLINK /J vínculo destino Crear unión de directorios
fsutil hardlink create original nueva_ruta Crear enlace duro con fsutil

Carpetas del sistema Windows — Rutas completas

Carpeta Ruta Bits Descripción
System32 C:\Windows\System32 64 Carpeta de sistema para archivos 64 bits
SysWOW64 C:\Windows\SysWOW64 32 Carpeta de sistema para archivos 32 bits
Archivos de programa C:\Archivos de programa 64 Programas 64 bits
Archivos de programa (x86) C:\Archivos de programa (x86) 32 Programas 32 bits

⚠️ Dato clave (contraIntuitivo): SysWOW64 contiene archivos de 32 bits (WOW64 = Windows on Windows 64), y System32 contiene archivos de 64 bits.


🧪 TEST — BLOQUE 4: Windows Cliente

16. ¿Qué consola MMC permite gestionar las particiones del disco en detalle?


17. ¿Qué hace el comando SLMGR /ATO?


18. ¿Qué comando crea un enlace simbólico en Windows?


19. ¿En qué carpeta se instalan los programas de 32 bits en un Windows de 64 bits?


20. ¿Qué comando de DISKPART se usa para crear un volumen RAID 5?


21. ¿Qué hace net use X: \\192.168.1.10\datos /persistent:Yes?



✅ SOLUCIONES COMENTADAS


1 → c) Android 6.0 Marshmallow tiene el nivel de API 23. Cada versión mayor de Android tiene su propio nivel de API. Marshmallow fue lanzado el 5 de octubre de 2015.

2 → c) One UI es la capa de personalización de Samsung. OxygenOS es de OnePlus, MIUI de Xiaomi y ColorOS de OPPO.

3 → b) Android 4.4 KitKat fue lanzado el 31 de octubre de 2013, con nivel de API 19-20. No confundir con Jelly Bean (julio 2012) ni Lollipop (noviembre 2014).

4 → c) A partir de Android 10 (2019) dejaron de usarse nombres de postres de forma oficial. Las versiones anteriores tenían nombre oficial (hasta Android 9 Pie). Desde Android 10 los nombres de postres son extraoficiales.

5 → d) /etc/gshadow contiene la información de seguridad de los grupos (contraseñas cifradas de grupo, administradores y miembros). Su función es equivalente a /etc/shadow para los usuarios.

6 → b) gpasswd -a ana ventas añade al usuario ana al grupo ventas. La opción -a es "add". La opción -d es "delete". gpasswd -A añade administradores al grupo.

7 → b) La opción -r de userdel elimina el usuario y su directorio home con todo su contenido. Sin -r, solo elimina la cuenta del usuario pero deja intactos sus ficheros y directorios.

8 → c) /etc/skel es la plantilla de directorios y ficheros que se copia automáticamente al directorio home de cada nuevo usuario cuando se crea con useradd. Permite que todos los usuarios partan de la misma configuración inicial.

9 → c) newgrp ventas lanza un nuevo shell en el que el usuario trabaja con el grupo ventas como grupo activo. Los ficheros y directorios que cree en ese shell pertenecerán al grupo ventas. Al salir del shell, vuelve al grupo activo anterior.

10 → b) PowerShell nació en 2006 y fue creado por Jeffrey Snover de Microsoft. Snover lo definió como "eficiente, extensible y con una curva de aprendizaje poco pronunciada".

11 → b) La diferencia fundamental de PowerShell es que trabaja con objetos .NET en lugar de texto plano. Cuando se usa el pipeline |, se pasan objetos completos con propiedades y métodos, no texto que hay que analizar.

12 → c) PowerShell Core 6.0 (lanzado en 2018) fue la primera versión multiplataforma (Windows, Linux, macOS) y open source. A partir de esta versión se usa .NET Core en lugar del .NET Framework.

13 → c) $PSVersionTable es la variable automática que muestra una tabla con la versión de PowerShell y su motor de scripting. Devuelve un objeto con propiedades como PSVersion, PSEdition, etc.

14 → b) Los cmdlets en PowerShell siguen el formato Verbo-Sustantivo (ej: Get-Command, Set-Alias, New-Item). El verbo identifica la acción y el sustantivo el recurso sobre el que actúa. Esta convención hace los nombres fáciles de adivinar.

15 → b) Al declarar [int]$numero se fuerza el tipo entero. Si se intenta asignar la cadena "cero" se genera un MetadataError (ArgumentTransformationMetadataException) porque PowerShell no puede convertir "cero" a [int].

16 → c) DISKMGMT.MSC es el Administrador de discos que muestra las particiones del disco en detalle. LUSRMGR.MSC gestiona usuarios y grupos locales; SECPOL.MSC gestiona directivas de seguridad; TASKSCHD.MSC es el programador de tareas.

17 → c) SLMGR /ATO realiza la activación del sistema operativo Windows. /DLI muestra info de la licencia, /IPK introduce la clave del producto y /SKMS define el servidor KMS.

18 → b) MKLINK /D vínculo destino crea un enlace simbólico a un directorio. /H crea un enlace duro (físico) a un fichero y /J crea una unión de directorios. Los enlaces simbólicos son equivalentes a los ln -s de Linux.

19 → d) Los programas de 32 bits se instalan en C:\Archivos de programa (x86). Los de 64 bits van en C:\Archivos de programa. Es un dato contraIntuitivo: System32 contiene archivos de 64 bits y SysWOW64 contiene archivos de 32 bits.

20 → c) Create volume raid [size=n] disk=n,n,n crea un RAID 5 en DISKPART. Create volume stripe crea RAID 0 y Create volume simple + add disk crea RAID 1 (espejo). El comando repair disk=n repara el RAID con un nuevo disco.

21 → b) net use X: \\192.168.1.10\datos /persistent:Yes monta la carpeta compartida datos del servidor remoto en la unidad X: del equipo local. La opción /persistent:Yes hace que el montaje sea permanente y se restablezca en cada inicio de sesión.


📊 TABLA FLASH FINAL — Datos clave Windows, PowerShell, Android y Linux

Concepto Valor / Respuesta clave
Lema oficial de Android "Be Together, Not The Same"
Capa personalización Samsung One UI
Capa personalización Xiaomi MIUI / HyperOS
Capa personalización Google Pixel Experience
Android 4.4 KitKat — API 19-20 — oct. 2013
Android 5.0 Lollipop — API 21-22 — nov. 2014
Android 6.0 Marshmallow — API 23 — oct. 2015
Android 7.0 Nougat — API 24-25 — ago. 2016
Android 8.0 Oreo — API 26-27 — ago. 2017
Android 9.0 Pie — API 28 — ago. 2018
Último Android con nombre oficial Android 9 Pie
Formato /etc/passwd Usuario❌UID:GID:Comentarios:Home:Shell
Formato /etc/group Grupo❌GID:Lista_usuarios
Grupos secundarios en /etc/group Solo aparecen los secundarios (no el primario)
Crear grupo Linux groupadd grupo
Añadir usuario a grupo Linux gpasswd -a usuario grupo
Cambiar grupo activo Linux newgrp grupo
Eliminar usuario + home Linux userdel -r usuario
Caducidad contraseña Linux chage
Deshabilitar caducidad Linux chage -m 0 -M 99999 -I -1 -E -1 usuario
Plantilla nuevo usuario Linux /etc/skel
Fichero init bash (login) .bash_profile
Fichero init bash (cada shell) .bashrc
PowerShell: inventor y año Jeffrey Snover, 2006
PowerShell: diferencia clave Trabaja con objetos .NET, no texto
PowerShell: ver versión $PSVersionTable
PowerShell multiplataforma desde Core 6.0 (2018)
PowerShell open source desde Core 6.0 (2018)
PowerShell: última versión con .NET Framework 5.0
PowerShell: formato cmdlet Verbo-Sustantivo (Get-Command)
PowerShell: tipo entero [int] (32 bits)
PowerShell: tipo decimal [double] (64 bits)
PowerShell: tipo lógico [bool]
PowerShell: ver tipo variable $variable.GetType()
PowerShell: módulo script .psm1
PowerShell: módulo manifiesto .psd1
Windows: administrador de discos DISKMGMT.MSC
Windows: usuarios y grupos locales LUSRMGR.MSC
Windows: directiva seguridad SECPOL.MSC
Windows: actualizar directivas gpupdate
Windows: activar licencia SLMGR /ATO
Windows: mostrar usuario + SID WHOAMI /user
Windows: cambiar usuario sin cerrar sesión RUNAS /USER:usuario CMD
Windows: crear usuario por consola net user nombre pass /add
Windows: RAID 0 en DISKPART Create volume stripe disk=n,n
Windows: RAID 5 en DISKPART Create volume raid disk=n,n,n
Windows: enlace simbólico MKLINK /D vínculo destino
Windows: enlace duro MKLINK /H vínculo destino
System32 contiene archivos 64 bits
SysWOW64 contiene archivos 32 bits
Programas 64 bits en C:\Archivos de programa
Programas 32 bits en C:\Archivos de programa (x86)