18 Agosto 2008 · Etiquetas: Consola, OSX, Sistemas
Con la utilidad “Perfil de Sistema” (o System Profiler en inglés) podemos ver toda la información de nuestro sistema de una forma ordenada por temas y muy visual, pero los que solemos hacer scripts y necesitamos información del sistema esta utilidad no es de poca o nula ayuda. Sin embargo hay un comando (system_profiler) de shell que hace lo mismo pero lo devuelve en texto (por defecto) o en XML ambos muy fáciles de parsear en un script.
La ayuda y parámetros de system_profiler de es la siguiente:
system_profiler [-listDataTypes]
system_profiler [-xml] [-detailLevel n]
system_profiler [-xml] [dataType1 ... dataTypeN]
- -detailLevel n
especifica el nivel de detalle que mostrará
mini = muestra poca información (no contiene información identificativa o personal)
basic = información básica de red y hardware
full = toda la información disponible.
- -listDataTypes
Lista todos los tipos de datos (datatypes) para luego mostrar información de ese tipo.
- -xml
Genera salida en XML en vez de texto plano. Si se redirige la salida (vía pipe “|”) a un fichero con extensión “.spx” el fichero se puede abrir desde la utilidad “Perfil de Sistema” (System Profiler en inglés).
Si no se usa ningún parámetro lista TODA la información del sistema al estilo de la utilidad “Perfil de Sistema”, aunque si se usa el parámetro “-detailLevel full” la cantidad de información puede ser abrumadora.
A nivel de script con ejecutar el comando a secas o en toda caso con el parámetro “-xml” para obtener el resultado en XML será más que suficiente y en todo caso para limitar la cantidad de salida o limitar a un tipo de datos concretos añadir el parámetro “datatype” con el tipo de datos que necesitamos.
Un ejemplo de salida de un tipo concreto, donde se muestra el tipo de tarjeta gráfica y monitor que tengo:
$ system_profiler SPDisplaysDataType
Graphics/Displays:
ATI Radeon HD 2600 XT:
Chipset Model: ATI Radeon HD 2600
Type: Display
Bus: PCIe
Slot: Slot-1
PCIe Lane Width: x16
VRAM (Total): 256 MB
Vendor: ATI (0x1002)
Device ID: 0x9588
Revision ID: 0x0000
ROM Revision: 113-B1480A-252
EFI Driver Version: 01.00.252
Displays:
DELL 2407WFP:
Resolution: 1920 x 1200 @ 60 Hz
Depth: 32-bit Color
Core Image: Hardware Accelerated
Main Display: Yes
Mirror: Off
Online: Yes
Quartz Extreme: Supported
Rotation: Supported
Display Connector:
Status: No display connected
5 Agosto 2008 · Etiquetas: Bash, Sistemas
Bash tiene un gran soporte de comparadores de todo tipo que nos permiten hacer comparaciones en los bucles y crear condiciones de todo tipo:
Comparación de enteros (números)
- -eq
es igual a
if [ "$a" -eq "$b" ]
- -ne
no es igual a / distinto
if [ "$a" -ne "$b" ]
- -gt
es mayor que
if [ "$a" -gt "$b" ]
- -ge
es mayor que o igual a
if [ "$a" -ge "$b" ]
- -lt
es menor que
if [ "$a" -lt "$b" ]
- -le
es menor que o igual a
if [ "$a" -le "$b" ]
- <
es menor que (dentro de doble paréntesis)
(("$a" < "$b"))
- <=
es menor que o igual a (dentro de doble paréntesis)
(("$a" <= "$b"))
- >
es mayor que (dentro de doble paréntesis)
(("$a" > "$b"))
- >=
es mayor que o igual a (dentro de doble paréntesis)
(("$a" >= "$b"))
Comparación de cadenas
- =
es igual a
if [ "$a" = "$b" ]
- ==
es igual a
if [ "$a" == "$b" ]
Nota: Aunque es un sinónimo de = el operador == se comporta diferente cuando se usa dentro de corchetes dobles que simples, por ejemplo:
[[ $a == z* ]] # Verdadero si $a empieza con una "z" (expresión regular coincide).
[[ $a == "z*" ]] # Verdadero si $a es igual a z* (coincide literalmente).
[ $a == z* ] # Ocurre división de palabras.
[ "$a" == "z*" ] # Verdadero si $a es igual a z* (coincide literalmente).
!=
no es igual a / Distinto
if [ "$a" != "$b" ]
NOTA: este operador usa coincidencia de patrón dentro de doble corchete.
<
es menor que (en orden alfabético ASCII)
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
Nota: el operador “<” necesita ser escapado dentro de corchetes.
>
es mayor que (en orden alfabético ASCII)
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
Nota: el operador “>” necesita ser escapado dentro de corchetes.
-z
La cadena está vacía (nulll), tiene longitud cero.
cadena='' # Variable de longitud cero (null)
if [ -z "$String" ]
then
echo "\$String está vacía."
else
echo "\$String no está vacía."
fi
-n
cadena no está vacía (contiene algo)
nota: El operador -n exige que la cadena esté entre comillas entre paréntesis. Aunque el uso son comillas puede funcionar es altamente recomendable usar comillas.
Comparaciones lógicas
Éstos últimos operadores son similares a los operadores de Bash && (and) y || (or) cuando se usan con doble corchete:
[[ condition1 && condition2 ]]
27 Julio 2008 · Etiquetas: Debian, OSX, Sistemas
El comando SUDO nos permite ejecutar scripts, aplicaciones como root u otro usuario sin saber la contraseña de estos usando la de nuestro usuario pudiendo configurar infinidad de opciones para tener un mayor control de la seguridad de nuestro sistema.
La configuración está en el fichero /etc/sudoers (Linux) o /private/etc/sudoers (OSX) y debe ser editado (realmente se puede usar cualquier editor pero es recomendable hacerlo) con el comando visudo, que a parte de ejecutar nuestro editor favorito (usando la variable de entorno EDITOR) para editar el fichero antes de salir hace una comprobación del fichero, por si hubiera algún error.
En este artículo solo expongo algunas nociones y apuntes muy resumidos de lo que se puede hacer para ver en profundidad todo lo que se puede hacer lo mejor es ir a la página del manual, man sudoers desde consola o aquí.
Estructura del fichero sudoers
1. Definiciones de alias
Aquí lo que hacemos es definir un alias, que es básicamente una abreviación o agrupación de otros nombres o alias. Su formato es:
Alias_Type NAME = item1, item2, ...
Alias_Type -> puede ser:
- Cmnd_Alias para comandos por ejemplo:
Cmnd_Alias ADMIN = /usr/bin/apt-get, /usr/bin/dpkg
- User_Alias para usuarios
User_Alias COLEGAS = Eduardo, Alex
- Runas_Alias para usuarios privilegiados
Runas_Alias ADMINS = root, operator
- Host_Alias para hosts
Host_Alias REDES = 128.138.0.0/255.255.0.0, 129.32.2.0/24
NAME -> Es el nombre del alias. Debe empezar por letra mayúscula y sólo se permiten letras mayúsculas y números.
itemx puede ser un elemento o un alias el cual será expandido.
NOTA: Existe un alias especial, ALL, que se utiliza para englobar a todos los comandos, usuarios, hosts.
2. Ajuste de opciones
Aquí es donde definimos los valores por defecto de cada usuario para que tenga unas opciones diferentes o específicas. La sintaxis es la siguiente:
Defaults lista_opciones
Defaults:usuario lista_opciones
Defaults@host lista_opciones
La lista_opciones es una lista de opciones separadas por comas. Existen cuatro tipos de opciones:
- Booleanos: Que se activan con sólo escribir el nombre de la opción y se desactivan con el símbolo ! delante.
- Enteros: De la forma nombre_opcion = valor
- Strings: Igual que los enteros nombre_opcion = “valor”
- Listas: Que pueden ser de la forma nombre_opcion = “valor1 valor2″. Éstas opciones también pueden utilizar += y -= en lugar de = para añadir elementos y quitar elementos respectivamente.
NOTA: para ver la lista completa de opciones y su descripción aquí.
3. Reglas de acceso
Aquí es donde definimos que usuario puede ejecutar qué comando bajo que usuario (por defecto root) y en que host lo pueden hacer (por defecto localmente). El formato es (lo que va entre [ ] es opcional):
usuario host = [(usuario_privilegiado)] [NOPASSWD:] comando
Como se puede ver es bastante simple, pero aquí va una breve explicación:
usuario es el usuario al que vamos a permitir ejecutar algo con privilegios.
host es en que máquina puede ejecutar, por defecto (y comodidad) se suele poner ALL.
NOPASSWD: sirve para que SOLO en este comando NO pida nuestra contraseña para validar y ejecutar el comando.
comando, es lo que queremos ejecutar con privilegios, y debe tener el path completo.
4. Ejemplos
#
# Aliases
#
# Comandos para instalar paquetes en Debian
Cmnd_Alias APT = /usr/bin/apt-get, /usr/bin/dpkg
# Usuarios que pueden instalar paquetes
User_Alias ADMIN = paco, felix
# Usuarios privilegiados
Runas_Alias OP = root, operator
#
# Reglas de acceso
#
# Sólo pueden instalar paquetes los usuarios de ADMIN
# (por defecto, como root). No necesitan contraseña.
ADMIN ALL = NOPASSWD: APT
# El usuario edu puede des/montar como si fuese root
edu ALL = (OP) /sbin/mount
# El root puede hacer lo que quiera.
root ALL = (ALL) ALL
13 Julio 2008 · Etiquetas: OSX, Sistemas
El secure mode es un modo en el que es a la vez muy potente y peligroso ya que tenemos acceso TOTAL a todo el sistema como root y sin que sepamos la contraseña ni de un usuario ni la del propio root. Por lo tanto es conveniente que por una parte no dejemos a nadie desconocido nuestro MAC ni hagamos cosas sin saber en este modo porque podemos corromper nuestro sistema y dejarlo inservible.
Para entrar en este modo hacemos lo siquiente:
- Encendemos o reinciamos el MAC
- En cuanto arranque pulsamos y mantenemos pulsadas las tecla command+s (manzana+s o ⌘+s)
- Veremos como arranca en modo texto y terminará mostrandonos el prompt #
Una vez que estemos en el modo seguro (o más bien diría yo inseguro si no sabes lo que haces) podemos hacer cosas interesantes (sin las comillas):
- “/sbin/fsck -y” esto hace un chequeo del disco de sistema de arranque. -y hace que no nos pregunte nada y asume YES (SI) a todas las preguntas.
- /sbin/mount -wu /” por defecto el sistema está en modo solo lectura y con esto pasamos a modo lectura/escritura con lo cual podemos modificar ficheros.
- passwd usuario” cambiamos la contraseña de un usuario del sistema incluida la de root (en alguna ocasión podemos necesitar pasarnos a root, usando su -, aunque es aconsejable usar el comando sudo).
- /sbin/SystemStarter” esto inicializa los servicios de red, que es necesario para obtener acceso a NetInfo.
- En caso de que tengamos problemas con el login o simplemente la ventana de login no aparezca, es muy probable que nuestro directorio NETINFO esté corrupto, podemos borrar y que el sistema cree uno nuevo. ATENCIÓN: esto borra todos los datos del usuario y hay que crearlos desde cero, también necesitamos que root tenga una contraseña y conocerla claro:
Para salir del secure mode podemos usar una de estas tres opciones:
- exit - Continua el proceso de arranque. En caso de que hayamos hecho modificaciones importantres y/o ejecutado SystemStarter o arrando algún demonio es más seguro reiniciar.
- reboot - Reinicia el ordenador.
- shutdown -h now - Apaga el ordenador.
10 Julio 2008 · Etiquetas: OSX, Sistemas
Para ver cuantos micros/nucleos tiene nuestro MAC y que uso tiene cada uno hay una utilidad llamada CPUPalette.app (que está en /Libreria/Application Support/HWPrefs/) que viene con Xcode (con lo cual debe estar instalado) esta utilidad puede ser llamada desde el panel de preferencias o desde el menú del Finder para ello debemos ejecutar Processor.prefPane (que está en /Developer/Extras/PreferencePanes/) que también viene con el Xcode.
CPUPalette.app no muestra un gráfico con el uso de cada núcleo (para ver si realmente aprovechamos todos los núcleos) además nos permite diferentes opciones de visualización (algo ocultas) pulsando el botón ovalado arriba a la derecha.

Processor.prefPane nos permite tener un acceso más simple a CPUPalette.app colocándolo como un icono más en la sección HArdware de Preferencias del Sistema, dentro de sus opciones está colocar un icono en la barra del Finder para un acceso aún más rápido, además podemos indicar que núcleos usar, es decir, que podemos desactivar varios núcleos y nos muestra información de nuestro CPU.

28 Mayo 2008 · Etiquetas: OSX, Sistemas
Si tienes un disco externo de Lacie como el Ethernet Big Disk puede que de repente pierdas el acceso vía AFP (protocolo de Apple) también puede pasar si se produce un corte de luz o accidentalmente desconectas el cable de corriente.
Parece ser que Lacie guarda la Base de Datos de fichero compartido AFP en la memoria por eso si no se apaga correctamente el disco duro externo se corrompe la Base de Datos y deja de funcionar el AFP.
En algunos foros pone que cambiando la IP (se debe tener acceso vía HTTP o estar el disco duro configurado como DHCP) se vuelve a poder usar AFP (no lo he probado) pero el problema es que al acceder a los recursos compartidos (shares) da error porque las Bases de Datos siguen corrompidas.
Para eliminar las Bases de Datos corrompidas sigue estos pasos:
- Para el servidor de AFP de Apple:
Accede vía web a la administración del disco duro y ve a la pestaña Estado (última) y una vez allí pulsa desactivar “Servidor Apple”.
- ahora debes acceder al disco duro bien por FTP o bien por Samba (SMB).
- Una vez que accedas al recurso compartido (por FTP verás TODOS los recursos con lo cual tendrás que entrar recurso a recurso) tienes que entrar al directorio oculto (si usas el finder tendrás que activar ver TODOS los ficheros) ‘.AppleDB‘ y borrar todo su contenido.
- Una vez hecho esto por cada uno de los recursos compartidos que tengas, puedes activar de nuevo el servidor de AFP.
Si esto no soluciona el acceso al disco vía AFP entonces tendrás que hacer un último paso que es restablecer la configuración por defecto de fábrica (a mi la primera vez me asustó pero no se pierden los datos), para ello debes seguir estos pasos:
- Primero y muy importante es apuntar el nombre de TODOS los recursos, si renombraste alguno debes de acordarte del nombre original. Lo mejor es acceder vía ftp usando el usuario de administración (admin) y listar los directorios del raíz que son los nombres reales de los recursos compartidos.
- Seguido apagamos el disco (mantener pulsado el botón hasta que parpadee y soltar se apagará en unos segundos).
- Una vez apagado lo encendemos manteniendo pulsado el botón de encendido hasta que empiece a parpadear (tarda unos 15 segundos).
- Cuendo empiece a parpadear dejar de pulsar el botón de encendido
- Rápidamente (unos 3 segundos o menos) continua parpadeando de forma diferente entonces pulsamos otra vez el botón de encendido.
- Unos segundos después empezará a parpadear de forma diferente a las 2 anteriores ya podemos dejar de pulsar el botón de encendido definitivamente.
- ahora pueden pasar 2 cosas:
- si está bien hecho seguirá parpadeando a ratos y al final quedará encendido y por lo tanto ha sido un éxito y tenemos el disco restaurado a como viene de fábrica.
- Si no hemos sido rápidos al pulsar el botón en el segundo parpadeo el disco duro se apagará lo cual indicará fracaso y habrá que repetir el proceso.
- Cuando hayamos conseguido restaurar el disco a como viene de fábrica (a mi me costó 3 intentos) tenemos que entrar al administrador web (si hemos perdido la IP tendremos que configurarla de nuevo ver para ello el manual).
- En el administrador veremos un solo recurso compartido (el mio se llamó “share”) y estará en rojo con error, así que lo eliminamos y creamos los recursos que teníamos antes (por eso lo primero que se hizo fué apuntarlos).
- También tendremos que crear los usuarios y asignarlos a cada recurso compartido.
Si todo ha ido bien ahora podremos acceder al disco Lacie vía AFP y veremos nuestros recursos tal cual estaban.
NOTA: Importante NO me hago responsable de daños ni perdidas de datos, deberías tener una copia de tus datos aunque casi seguro que no pierdas nada.