jueves, 21 de febrero de 2008

Artículo: Herramientas y comandos útiles (Parte II | Comandos básicos)

Ya hemos dejado más o menos claro la utilidad de acceder por SSH. El iPod/iPhone cmo hemos dicho en otra ocasión corren bajo una versión de MAC OS, y esta deriva de Darwin que a su vez deriva de Unix. Muchas de las herramientas/utilidades que a día de hoy encontramos en linux/unix las encontraremos igualmente en el juegete, sobre todo después de instalar la aplicación BSD Subsystem. BSD Subsystem lo único que hace es por decirlo completar ese unix/linux que ya de por sí tenemos, añadiendo utilidades y herramientas en modo de comandos por supuesto.

Muchas personas tan solo están acostumbradas a ver una interfaz gráfica dnd todo es mucho más intuitivo, y para muchos es completamente un dolor de cabeza imaginar como funciona una shell. Así que intentaré explicar como funciona más o menos ese ente abstracto de archivos, carpetas... Así que apartir de ahora vamos a imaginarnos tan solo que lo que vamos a tener delante en todo momento es un Árbol. Así que la primera vez que accedamos por SSH o Terminal evitaremos ver una pantalla negra vacía, sino que veremos un árbol. Un Árbol tiene un tronco, que sería la parte principal que lo sujeta al suelo. Pero a su vez, este tronco (raiz) tiene tanto hojas como ramas unidas a él. Pero estas nuevas ramas tb pueden o no tener más hojas y más ramas... imaginemos por tanto que las hojas son los archivos y las ramas las carpetas. De este modo tenemos raiz (el tronco, el inicio, de dnd nace todo lo demás) el cual tiene o puede tener archivos, y carpetas q ha su vez pueden o no tener más archivos y mas carpetas que...

Cuando accedemos por SSH (o terminal) simplemente lo que hacemos es colocarnos en algún lugar del árbol que a priori no sabemos cual es. Da igual que veamos todo en negro, nosotros sabemos que estamos en algún lugar del árbol. dnd? lo veremos más adelante, pero por ahora no es importante. Evidentemente si queremos efectuar cualquier acción sobre cualquier archivo (hoja) tendremos que o estár en la rama dnd se encuentra dicho archivo o especificar exactamente que archivo de que rama de la rama de la rama... no podemos podar una rama si no sabemos dnd está. Por eso lo primero que se debe de aprender es a desplazarse por el árbol, de rama en rama, así como los comandos para listar que ramas más pequeñas u hojas tenemos en la rama actual. Visto esta pequeña analogía, vamos a dejar de hablar de ramas, hojas o raíz, y llamaremos a cada cosa como se debe.

Como no podemos suponer que todos nacen sabiendo, antes de entrar en cosas un poco más específico se debe de conocer lo más basico. Desde como movernos entre carpetas a como listarlas.


pwd

La shell nos devolverá a la salida le directorio de trabajo en el que estamos. Esto puede ser muy util si no sabemos en que lugar del "árbol" estamos. Con teclear este comando la salida será la ruta en la que estamos.


cd


Heredado desde los tiempos de MS-DOS. Se usa para acceder a un directorio hijo especificando la nueva ruta. Cada directorio (carpeta) hija se especificará con la barra invertida '/'. Así por ejemplo si quisiésemos acceder a la carpeta mobile, que se encuentra dentro de la carpeta var, q a su vez se encuentra dentro de la carpeta private, deberíamos de escribir:

cd /Private/Var/Mobile

Al acabar de escribirlo (y presionar intro), estaríamos posicionado en la carpeta citada. Del ejemplo citado, si se desease moverse a raiz, tan solo deberíamos de escribir:

cd /


ls

lista las carpetas y/o archivos contenidos en la carpeta de trabajo en la q estemos en ese dicho momento. Acepta una gran cantidad de argumentos q no discutiremos todos, tan solo pondremos algunos ejemplos:

"ls -l" listará archivos y carpetas, especificando tb los permisos, el propietario, el grupo, el tipo de archivo o carpeta...
"ls -a" listará todos los archivos y carpetas, incluso los ocultos.
"ls -R" listara archivos y carpetas, y tb se incluirán los archivos y carpetas anidados dentro de las carpetas.
"ls -laR" se pueden incluir más de un parámetro tb.


cat

En realidad es un concatenador, es decir, se usa para unir dos o más archivos en uno solo. En la práctica se suele usar mucho más como el Type de MS-DOS, es decir, para mostrar el contenido de un archivo.

cat /Applications/MobileFinder.app/info.plist mostrará en pantalla el contenido del archivo info.plist


cp / mv

Copiar / mover archivos. En ambos casos se especificará el origen y el destino:

cp archivo_origen carpeta_destino
mv archivo_origen archivo_destino

cp admite algunos parámetros extras q no voy a comentar.
mv se suele usar además de para mover para cambiar el nombre de un archivo cuando el origen y el destino se encuentran en la misma carpeta:

mv info.plis info2.plist renombraría el primer archivo al segundo
mv info.plist /private/var/info.plist mueve el archivo info.plist de la carpeta dnd nos encontramos en el momento de teclear el comando a la carpeta /private/var


mkdir / rmdir / rm

mkdir se usa para crear una carpeta, así como rmdir ó rm se usa para eliminarla. La diferencia entre rmdir y rm, es que rmdir tan solo elimina carpetas que estén vacías, mientras que rm hay q usarlo con cuidado.

rm acepta 3 parámetros: -r para afectar tb las subcarpetas, -f para forzar todo a que si en caso de encontrar alguna advertencia y -i para que nos pida confirmación de cada archivo. El problema con rm es q si no se tiene cuidado se puede eliminar todo el sistema de archivos. Así si entramos con permisos de root por SSH y tecleásemos: "rm -rf /" el resultado sería que se eliminarían absolutamente todos los archivos del iPod/iPhone.

Con estos dos comandos se debería de ser capaz de moverse completamente uno entre las diferentes carpetas y archivos.

Hay q tener en cuenta q rm cuando se encuentra con algún enlace simbólico (que se verá mas abajo) no hace un seguimiento al enlace y borra el contenido de él, sino que sólamente elimina el enlace en sí, no el contenido al que apunta el enlace.


ln

Permite la creación de enlaces. Dependiendo del parámetro que se use será un enlace simbólico (-s) o un enlace duro (sin modificadores). Tambieén existe el modificador -f, que fuerza a crear el enlace aun cuando existe una carpeta o archivo con el mismo nombre. La diferencia entre uno y otro es que un enlace simbólico se rompe si el archivo al que se referencia se mueve o se elimina. Un enlace duro seguirá apuntando al archivo incluso si este se ha movido. En ambos casos la sintaxis es la misma, primero se especifica el archivo físico y despues el archivo o carpeta que será el enlace en sí.

ln -sf /Private/var/Fonts /System/Library/Fonts crearía un enlace simbólico (-s) llamado Fonts en la carpeta /System/Library que siempre que se llamase por cualquier aplicación o programa apuntaría a la carpeta /Private/var/Fonts. Dicho de otro modo, sería un acceso directo a otra carpeta. Como se especificó la opción -f, si antes de crear el enlace en /System/Library/Fonts ya existiese esa carpeta, la carpeta se eliminaría y dejaría tan solo el enlace simbólico.


df

Nos mostrará a la salida el espacio libre, ocupado de cada partición. Normalmente se usa con el parámetro -k para que los valores nos los de en bloques de 1024 bytes, en vez de 512.

df -k nos mostrará la cantidad de espacio libre que tenemos en cada una de las dos particiones principales, en la particion de datos y en la partición del OS.


cmp

no es tan usado como los demás, pero puede llegar a ser útil. Simplemente compara dos archivos. Si son iguales devolverá '0', si son distintos devolverá '1'. Se pueden usar parámetros adicionales como -b, q nso mostrará ademas aquellos bytes que son diferentes.


chmod / chown

Seguramente será mucho más usado chmod que chown. La función de chmod será la de modificar permisos, mientras que la función de chown es la de modificar el propietario y/o grupo.

Cualquier sistema de archivo de hoy en día posee descriptores de seguridad que permiten o deniegan el acceso a determinados recursos. Aparece la necesidad así de diferentes usuarios y el usuario root o administrador, el cual debe de tener acceso ilimitado al sistema.

chmod por tanto se encarca de establecer esos permisos, esos criterios. Dichos permisos a su vez se pueden establecer a un determinado usuario (others) , a un determinado grupo (group) o a su propietario (user) . Así podemos diferenciar 3 permisos principales:

Permisos de Ejecución -> Permite ejecutar el archivo en cuestión. Se representa mediante -x
Permisos de Lectura -> Permite copiar el archivo o leerlo. Se representa mediante -r
Permisos de modificación -> Permite mover un archivo o eliminarlo.se representa mediante -w

A grandes rasgos claro. Evidentemente el propietario del archivo, el que supuestamente es su creador, tendrá por defecto acceso completo, mientras que los usuarios tendrán por defecto acceso de lectura. Por otro lado el grupo hace referencia a los usuarios que existen en el mismo grupo del propietario, de ahí que haya permisos de grupos. Cada archivo por tanto guarda 9 permisos diferentes, 3 permisos diferentes para cada una de las opciones: Propietario, usuarios, grupo.

Mediante chmod es posible modificar cualquier permisos de cualquier archivo, ahroa veremos algunos ejemplos:

chmod +r info.plist -> otorga permisos de lectura a todos.
chmod -w info.plist -> elimina los permisos de ejecución a todos.
chmod u=rwx info.plist -> otorga permisos de lectura, escritura y ejecución tan solo al propietario.
chmod u=rwx, g= , o=r -> Otorga permisos completos al propietario, elimina todos los permisos al grupo y otorga permisos de lectura al resto de propietarios.

es posible usar el formato octal para evitar escribir permiso a permiso. Así por ejemplo escribir:

chmod 777 info.plist equivaldría a establecer todos los permisos a todos los usuarios, pero bueno, esto es algo que no explicaré aquí.

Existe un permiso especial llamado setuid (+s) que lo que realiza es marcar un archivo para que siempre se ejecute (lo ejecute quien lo ejecute) con permisos de root. Se usa para dar acceso a él a cualquier usuario.

Visto esto, se comprende entonces el significado del comando chown. Los permisos se establecen principalmente para un propietario, luego tiene que ser posible modificar el propietario de un archivo. Es posible que el usuario root no tenga acceso incluso a un archivo si él no es el propietario y los permisos tan solo son de acceso para propietarios, pero el root podrá modificar el propietario del archivo a sí mismo si asi lo desea, para poder tener a posteriori acceso a dicho archivo. Mediante el comando chown es posible modificar la propietarierdad de un archivo, así como el grupo al que pertenece:

si el usuario mobile creó el archivo info.plist, el propietario de dicho archivo será mobile con sus permisos determinados. Si deseamos apropiarnos de ese archivo por lo que seá deberíamos de realizar:

chown root:wheel info.plist

y de este modo el archivo pasaría a ser de "propiedad" del usuario root (administrador) perteneciente al grupo wheel.

Tanto para chown como para chmod existe el parámetro -R, que aplicará los permisos o el cambio de propietariedad a todos los arcihvos y carpetas contenidos en la carpeta o archivos:

chmod 775 +R /Applications establererá permisos 755 a toda la carpeta Applications y a todos sus subcarpetas.


top

El comando top es tambien uno de esos comandos útiles. Nos saca en pantalla la lista de procesos en ejecución. Lo que en windows sería el administrador de tareas. Es más util normalmente acompañarlo del parámetro de usuario. Si no se especifica nos listaría todos los procesos abiertos, si se especifica un usuario nos listará los proceos que se estan ejecutando con permisos de ese usuario, para ello se especifica el parámetro -U seguido del usuario:

top -U root -> Muestra los procesos ejecutados como root
top -U mobile -> Muestra los procesos ejecutados como mobile
top -> muestra todos los procesos

Además de mostranos el uso de CPU, memoria etc.. nos muestra tb el ID del hilo que se ejecuta, lo cual es muy util si se desea detener un proceso. (lo veremos a continuación en kill)

Hay q tener en cuenta que una vez lanzado top este no se detendrá. Para detener la ejecución de top lo más sencillo es presionar las teclas Ctr+C, que lo que realiza siempre es detener el proceso actual.


kill

Detiene un proceso especificando su ID, que previamente podemos obtener con top.

kill 721 detendrá el proceso 721


find

con este comando podemos buscar y encontar cualquier archivo que deseemos, ya sea por extensión, por tamaño, por nombre... lo busca todo. Incluso es posible realizar búsquedas concretas y realizar una acción determinada una vez encontrado dicho o dichos archivos.

Su sintaxis es simple, en su versión más sencilla:

find [ruta] [parametros] [archivo]

los parámetros más usuales que podemos usar serán:

-name ó -iname: buscará por nombre de archivo, el primero respetará mayusculas y minusculas y el segunfo le dará igual
-cmin -ctime -amin -atime -mmin -mtime: buscara por fecha de: c-> estado a->acceso m-> modificación. Siendo min minutos y time horas
-size: Busca archivos de hasta ese tamaño. hay q tener en cuenta que unix usa por defecto 512 como unidad, es decir medio KB. Para evitar esto es mejro añadirle la unidad. Así si queremos buscar archivos de hasta 1Mb, podremos poner: -size -1024k

Hay muchas otras opciones, es posible anidar dos find o realizar OR o AND en la misma... os pongo mejor algunos ejemplos:

find / -iname "*.plist" Buscará en todo el sistema todos los archivos que tengan de extensión plist
find /private/var -size +5M -size -10M -iname "*pepito*" buscara todos los archivos de entre 5 megas y 10 megas que contenga el nombre pepito, y solo lo hará en /private/var (y subdirectorios)

find / -iname "*tmp*" -exec rm -f '{}' buscará y eliminará cualquier archivo que contenga en el nombre tmp.

----------


Creo que no me dejo ningún comando básico de unix que pueda ser útil para el iPod, pero si me he dejado alguno podeis comentarlo. En la siguiente parte seguiremos extendiendo la lista, pero serán comandos ya más específicos, aunq puedan ser algunos incluso más útiles.

Un saludo.

6 comentarios:

Ángeles dijo...

Gracias por tu post. Los comandos son imprescindibles para entender un ipod jailbreikeado. Llevo días leyendo por Internet y hasta que no he llegado a tu blog no he visto la luz.

Voy a seguir leyendo, a ver si consigo conectar el iTouch con Amarok. Saludos y gracias de nuevo

Theliel dijo...

Aunq parezca una tontería así lo veo yo. Es cierto q muchas veces no hace falta saber todo a nivel interno, pero si se hace despues tb ahorra tiempo y dolores de cabeza, a fin de cuentas si conoces el funcionamiento interno y tienes un problema, sabes dnd se encuentra y como solucionarlo.

Cuando tenga tiempo además quiero actualizar un poco la lista.

Un saludo.

Ángeles dijo...

¿eres usuario de Windows? Qué raro me parece... Yo aún no he estrenado el iTouch porque no consigo meterle música con Amarok, el reproductor de Ubuntu. Con la información que he sacado de tu blog estoy repasando el script para montar el dispositivo, por si metiera las canciones en root en vez de mobile. Pero aún nada... Eso sí, estoy aprendiendo un huevo...

Anónimo dijo...

Hola. He entrado en el iphone (en terminal) y al mantener pulsado el dedo, me aparece una rueda y una de las opciones en dicha rueda (parecida al mando de un nano) era -d.
He pulsado ahí...¿qué he hecho?.
Gracias y me ha parecdio estupenda tu página porque llevaba mucho rato buscando la información.
Un saludo.

Anónimo dijo...

Antes que nada quiero felicitarte por el blog, es EXCELENTE. Desde que lo encontre googleando ya nose ni cuantos posts lei.
Obviamente ya lo tengo agregado al reader ;)

Te hago una pregunta, ya que lo mencionaste cuando hablabas del comando top.

Cuando estas en una terminal desde la computadora, apretas Ctr+C y se detiene el proceso actual.
Como hago si estoy desde el MobileTerminal del iPod?

Si me lo podes contestar te lo agradeceria, ya que no le encuentro la forma.

Theliel dijo...

top lo puedes abortar desde touch presionando la tecla "q"

Si despues puedes o quieres limpiar la pantalla para que sea mas legible, usa "clear"

 
Creative Commons License
Esta obra está bajo una licencia de Creative Commons.