Jump to content

UNIX & OS X


mac_cute
 Share

12 posts in this topic

Recommended Posts

UNIX & OS X (borrador)

El propósito de este hilo es una aproximación a responder algunas preguntas frecuentes sobre UNIX & OS X.Principalmente está dirigido a aquellos que se inician en este mundo,pero no está por demás recordarlos a los ya experimentados cuando quieran o necesiten repasar algunos conceptos.Al principio se podrá avisar que puede ser algo corto,pero está sujeto a algunos conceptos fundamentales y cualquier sugerencia o aporte es y será bienvenido por tod@s siempre y cuando no se desvíen de la idea principal (me disculpan el mal Castellano que todavía lo estoy aprendiendo.Mi aliado al momento: http://www.rae.es/rae.html).

 

Preguntas:

1) ¿Cuáles son los aspectos más básicos que necesito saber?

2) ¿Por qué obtengo el error "command not found" cuando intento ejecutar un comando?

3) ¿Cómo configuro la ruta PATH para que sea reconocida por el shell?

4) ¿Cómo puedo saber que shell estoy ejecutando?.

5) ¿Y que hay de los permisos?.¿Cómo los cambio?.

6) ¿Cómo obtengo privilegios de "root"?.¿Necesito habilitar el usuario "root"?

7) ¿Cómo navego entre las diferentes carpetas?

8) ¿Cómo edito archivos de texto (como lo son archivos de configuración/.plist)?

9) ¿Cómo elimino archivos y carpetas?

10) ¿Cuáles son los comandos más comúnmente usados?

11) ¿Cómo funcionan los wildcards o comodines?

Link to comment
Share on other sites

1) ¿Cuáles son los aspectos más básicos que necesito saber?

 

La línea de comandos es una interface que sirve de alternativa a la interfaz gráfica de usuario que provee OS X.La mayoría de los usuario@s de Macintosh (o simplemente Mac) no necesitarán usar la línea de comandos,pero esta proporciona un camino más eficiente para llevar a cabo algunas tareas (especialmente algunas repetitivas).Además,es una herramienta esencial al momento de depuración de errores y en la resolución de algunos problemas.

 

El Terminal

Puedes acceder a la línea de comandos simplemente ejecutando una aplicación llamada "Terminal",la cual se encuentra ubicada en el directorio con ruta "/Applications/Utilities".Cuando ejecutas la aplicación por primera vez obtendrás un mensaje de bienvenida e inmediatamente a continuación el "prompt" en la línea siguiente.

 

El "prompt" en la línea de comandos

Es el texto que se muestra en la ventana del Terminal en el momento es que está listo o a la espera de algún comando.El prompt común muestra el nombre el nombre de tu Mac,el nombre del directorio actual,tu nombre de usuario y termina con un simbolo de dólar ($).Si tu Mac se llama "iron" y tu nombre de usuario es "jose" y estás localizado en tu directorio home (que tiene designación "~"),un ejemplo del prompt sería similar al siguiente:

iron: ~ jose$

 

Ejecutando comandos

Para ejecutar un comando UNIX,primero debes conocer qué comando quieres y su sintaxis.Algunos de ellos de uso muy frecuente serán tratados posteriormente.Escribes el comando deseado luego del prompt en la ventana del Terminal y a continuación presionas Return para que sea ejecutado.

Cualquier salida que pueda derivarse de la ejecución de este comando será mostrada (en la ventana del Terminal) seguida a la línea que recién escribiste.Si algo salió mal con el comando,se mostrará un error describiendo la naturaleza del problema.

Luego de que el comando ha terminado su ejecución,se mostrará de nuevo el prompt en una nueva línea indicando esto que está listo para un nuevo comando.

 

La mayoría de los comandos de uso común realizan su tarea de manera casi inmediata,pero algunos de ellos están designados para mantenerse correindo a menos que sean detenidos por voluntad de usuario a través de una tecla o una secuencia de teclas.

 

¿Éxito o fracaso?

No todos los comandos dan una salida.Es decir,muchos de ellos sólo hacen su tarea sin proporcionar información de su resultado.Por lo tanto,si ejecutas un comando y éste no proporciona salida alguna (cómo por ejemplo,que solamente devuelva al estado del prompt),esto significa que el comando cumplió su fin cualquiera que sea o haya sido su propósito.Pero,si ontienes un mensaje de error,esto significa que el comando no se ejecuto y deberás analizar el por qué del fallo e intentar de nuevo

 

Se cuidados@

Es importante notar que cuando ejecutas comandos a este nivel no existe la opción "deshacer" u otra medida de seguridad.Necesitas entender que hace cada comando y estar segur@ que es eso lo que quieres hacer antes de aceptar presionando Return.

 

Cuando introduzcas comandos proporcionados por terceros es muy importante que revises que los has comprendido exactamente tal cuál.Aquí,cada caracter y espacio es importante.Si te ves en esta situación la mejor manera de ejecutarlos es copiar y pegar en vez de aventurarse a escribirlos por cuenta propia.

 

Nombres de archivos,Carpetas,Directorios y Rutas

Cuando trabajas en el Terminal existe un concepto de estar "dentro" de ciertas ubicaciones en el sistema de archivos.Se habla comúnmente de la "carpeta actual" o "directorio actual".Pueden tratarse como sinónimos y para hacer esto un poco mas "Universal",se tratará con carpetas a lo largo de esta breve explicación.

 

Si tienes la intención de proporcionar el nombre de un archivo como parte de un comando,se presume que se encuentra en la carpeta actual.Si deseas realizar operaciones en un archivo que se encuentra en alguna otra carpeta puedes tanto navegar hacia ella (explicado más adelante) o especificar la ruta a ese archivo colocando como prefijo al archivo los nombres de las carpetas y subcarpetas que llevan a él separados por slashes "/".

 

La carpeta al nivel más alto del drive que contiene todo en ese drive es llamada "/".Tu carpeta Home es una sub-carpeta de la carpeta "/Users" (significa esto que la carpeta "Users" está en la carpeta "/").Si tu nombre de usuari@ es "jose",entonces la ruta completa a tu directorio Home es "/Users/jose".El simbolo "~" puede usarse como una forma alternativa de especificar tu carpeta Home.

 

Por lo tanto,un archivo llamado "carrera" que está en la sub-carpeta "Documents" de tu carpeta "Home" puede tomar la referencia "/Users/jose/Documents/carrera" o como "~/Documents/carrera". Si te encuentras dentro de tu carpeta Home,entonces puedes hacer la referencia a este archivo como "Documents/carrera" -la ausencia del slash al inicio indica que esta es una ruta "relativa" (relativa a la carpeta actual).

 

Espacios y argumentos de la línea de comandos

La casi Universal convención para comandos UNIX es que en la líinea de comandos los argumentos están separados por espacios.Por ejemplo,en comandos relacionados con archivos,especificas los archivos con los que se opera listandolos con su nobre con un espacio entre ellos.

 

Esto causa dificultades obvias si el nombre de un archivo contiene algún espacio (por ejemplo si el nombre del archivo es "Mac OS X"). Si el nombre de un archivo o carpeta contiene un espacio,se necesita encerrar el nombre entre comillas dobles cuando lo uses con algún comando.Como ejemplo,para el nombre "Mac OS X" un comando hipotético 'rauz',se tendría esto:

rauz  "Mac OS X"

Si se omiten las comillas dobles,el comando 'rauz' estaría buscando tres archivos distintos llamados "Mac","OS" y "X".

Link to comment
Share on other sites

2) ¿Por qué obtengo el error "command not found" cuando intento ejecutar un comando?

 

Cuando escribes un comando en el prompt del shell (en la ventana del Terminal),el shell busca dentro de ciertas carpetas/directorios ese comando.Los lugares donde busca son aquellos definidos en la variable PATH.Se puede ver el contenido de tu variable PATH ejecutando el siguiente comando:

 

echo $PATH

 

Si deseas que el shell sea capaz de ubicar comandos/programas que se encuentran en otras carpetas/directorios,pues necesitas agregar esas ubicaciones a tu variable PATH.La forma de hacerlo se explica a continuación.

 

Como alternativa,puedes siempre ejecutar comandos si especificas la ruta completa a ellos.Por ejemplo,si un comando ejecutable para 'ls' está en la carpeta "/bin",entonces puedes ejecutar el comando 'ls' tecleando:

 

/bin/ls

 

Por supuesto,en el caso de 'ls',no necesitas hacer esto porque "/bin" se encuentra listada en tu variable PATH.Pero supongamos que posees un programa llamado "carrera" en una carpeta llamada "Datos" bajo tu carpeta Home (por lo tanto en ~/Datos) y aún no has dado con agregar la carpeta "Datos" a la variable PATH.Se podría ejecutar el programa "carrera" siempre y cuando escribas la ruta completa a él:

 

~/Datos/carrera

 

Un caso especial es si este ejecutable está en la carpeta actual (en la que te encuentras en la sesión del Terminal -la carpeta que muestra como salida el comando 'pwd'-).Estando en el shell,un punto simple (.) es una abreviación para la carpeta actual,por lo tanto si colocas el prefijo "./" (sin las comillas dobles) al comando es equivalente a colocar la ruta completa.Así,si el programa "carrera" está en la carpeta actual,se puede ejecutar tecleando:

 

./carrera
Link to comment
Share on other sites

3) ¿Cómo configuro la ruta PATH para que sea reconocida por el shell?

 

la respuesta depende de cual shell estás usando.Los shells comúnes usados en OS X son "bash" y "tcsh".Ver la pregunta "Cómo saber que shell estoy ejecutando?" si no sabes cuál usas (y si no sabes por qué debería molestarte el contenido de la variable PATH,revisa la previa de esta sección).

 

 

Configurando a PATH en el shell bash

Para configurar la variable PATH en el bash,editas el archivo ~/.profile (empleando cualquier editor de texto que pueda guardar/trabajar con texto sin formato.Ejemplo,el editor 'pico') añadiendo una línea como esta:

 

export PATH="/bin:/sbin:/usr/bin:/usr/sbin"

 

Lo anterior actualíza la variable PATH con la ubicación de las carpetas:

/bin

/sbin

/usr/bin

/usr/sbin

 

 

Esta es la ruta PATH que ya está configurada por defecto en el archivo /etc/profile (el cual sumininistra una gran cantidad de ajustes y que generalmente no deberían ser editados). Si quieres agregar más carpetas a la variable PATH,podrías añadirlas con el signo ( : ) en lista separada en la línea descrita arriba.

 

 

Configurando a PATH en el shell tcsh

Para configurar la variable PATH en el tcsh,editas el archivo ~/.profile (empleando cualquier editor de texto que pueda guardar/trabajar con texto sin formato.Ejemplo,el editor 'pico') añadiendo una línea como esta:

 

setenv PATH "/bin:/sbin:/usr/bin:/usr/sbin"

 

Lo anterior actualíza la variable PATH con la ubicación de las carpetas::

/bin

/sbin

/usr/bin

/usr/sbin

 

Esta es la ruta PATH que ya está configurada por defecto en el archivo /etc/csh.login (el cual sumininistra una gran cantidad de ajustes y que generalmente no deberían ser editados). Si quieres agregar más carpetas a la variable PATH,podrías añadirlas con el signo ( : )en lista separada en la línea descrita arriba.

 

Colocando la carpeta actual en la variable PATH

Es de hacer notar que la carpera actual (denotada usualmente como ".") no se encuentra en la variable PATH por defecto.Esto significa que un ejecutable que está en la carpeta actual no será encontrado (éste es el por qué se ve el error con el comando './carrera' como se discuti+o anteriormente)

 

Para agregar la carpeta actual a PATH necesitas añadir un punto (.) a la lista separada por dos puntos mencionada arriba que configura el acceso de la variable PATH.

Aunque esto es posible,es usualmente considerado como un riesgo de seguridad mínimo debido a que alguna persona maliciosa podría colocar un ejecutable en alguna carpeta y nombrarlo como algún ejecutable estándar (ej., 'cp') y terminarías ejecutando este malicioso.

Link to comment
Share on other sites

4) ¿Cómo puedo saber que shell estoy ejecutando?.

 

En la versión de Mac OS X 10.3 Panther y posterior el shell por defecto para una nueva cuenta de usuario es bash,mientras que en Mac OS X 10.5.2 Jaguar y anteriores era tcsh (/bin/tcsh).Si la cuenta de usuario que posees es transferida desde una versión anterior de OS X,es probable que el shell por defecto sea el mismo que poseías en ese entonces.

 

El shell por defecto al que se hace referencia arriba es el shell que se ejecutará cuando abres una nueva ventana en el Terminal.Se puede verificar cuál shell está asociado a la cuenta ejecutando el siguiente comando,prestando atención a la {ultima parte de la salida:

 

nidump passwd / | grep $USER

 

O con el comando siguiente:

 

finger $USER

 

De igual manera,también es posible anular el shell por defecto que fué asignado a la cuenta especificando un shell en las preferencias del Terminal.Y,por supuesto,siempre se puede iniciar un sub-shell simplemente escribiendo el nombre del shell que quieres ejecutar.Por ejemplo,si tecleas el comando:

 

tcsh

 

estarías entonces en un sub-shell que está ejecutando tcsh sin importar si tu shell por defecto es bash (para salir del sub-shell,escribes 'exit')

 

Entonces,¿cómo puedo determinar que shell estoy ejecutando?.Una manera es con el comando:

 

echo $0

 

Esto funciona para la mayoría de los shells siempre y cuando el shell tenga la disposición a describir su propio nombre mediante este comando en la variable $0

 

Nótese que el shell tcsh asigna a la variable $shell "tcsh" pero $shell no se le ha asignado ningún valor por el shell bash.Y la variable $SHELL (mayúscula) se ajusta a la ruta del shell por defecto ( "/bin/bash") por lo que estos métodos son poco confiables a la hora de determinar que shell se está ejecutando.

Link to comment
Share on other sites

5) ¿Y que hay de los permisos?.¿Cómo los cambio?.

 

Cada archivo o carpeta se considera propiedad de un usuario o un grupo (usualmente al grupo principal al cual el usuario pertenece).Existe un conjunto de permisos asociados a cada archivo o carpeta el cual determina que acciones puede ejercer un usuario en particular sobre esos archivos o carpetas

 

Una forma de ver la propiedad y permisos de un archivo o carpeta es mediante el comando 'ls' con la opción "-l".Quedando así el comando "compuesto" 'ls -l'.Por ejemplo,si "carrera" es un archivo en la carpeta actual entonces:

 

ls -l carrera

 

podría dar el resultado:

-rw-r--r--   1 jose  family  0 Feb 12 05:15 carrera

 

Esto muestra que el archivo "carrera" es propiedad del usuario "jose" y grupo "family".Los permisos son mostrados por secuencia de diez caracteres al inicio de la línea: "-rw-r--r--".

 

El primer caracter es "-" para un archivo y "d" para una carpeta ("d" representa a un directorio,como se llama usualmente a una carpeta en Unix).

los próximos tres caracteres ("rw-") indican los permisos para el propietario del archivo ("jose").

Los siguientes tres caracteres ("r--") indican los permisos para algun usuario que no es el propietario del archivo pero que está en el grupo que posee el archivo ("family").

los últimos tres caracteres ("r--") indican los permisos para un usuario que no es el propietario del archivo ni pertenece al grupo que posee el archivo (llamado con frecuencia "other").

 

Estos tres caracteres indican "read","write" y "execute" (lectura,escritura y ejecución respectivamente) que se aplican al usuario en cuestión..

 

Una "r" indica que el archivo puede leerse,mientras que la falta de permisos de lectura se indican con un "-".

 

Una "w" indica que el archivo permite escritura,mientras que la falta de permisos de escritura se indican con un "-". Es necesario tener permisos de escritura sobre una carpeta si se desea agregar o eliminar archivos de esa carpeta.Nótese que se puede eliminar un archivo read-only (de sólo lectura) de una carpeta si se tienen permisos de escritura sobre esa carpeta.

 

Una "x" indica que el archico es ejecutable,mientras que la falta de permisos de ejecución se indican con un "-". Solamente archivos de programa (tales como aplicaciones y scripts) son usualmente ejecutables:los documentos no lo son.Aplicado a una carpeta esto significa la habilidad de recorrer la carpeta o hacer un 'cd' a esa carpeta.

 

En particular,si se quiere que alguien tenga acceso a un archivo en una carpeta dada,ese usuario debe tener permisos de "búsqueda" ("x") sobre todas las carpetas a lo largo de la ruta desde el nivel más alto del drive hasta la carpeta donde está contenido el archivo.Luego,este archivo por sí mismo debe tener permisos de "read" ("lectura") para ese usuario.Finalmente,si se quiere que algún usuario sea capaz de ver cuáles archivos están en una carpeta en particular,esa carpeta debe tener permisos de lectura para ese usuario.

 

Para conocer los permisos de una carpeta,necesitas emplear la opción "-d" de 'ls' al igual que la opción "-l".Por ejemplo:

ls -ld miCarpeta

 

Usar solamente 'ls -l' en una carpeta te mostrará información de los archivos en esa carpeta pero no la información sobre la carpeta misma.

 

Cambiando la propiedad

Para cambiar la propiedad de una archivo o carpeta usas el comando 'chown'.Este comando necesita ser ejecutado con privilegios de 'root' (por lo que necesita que anteceda la acción 'sudo' precedido de contraseña.Sólamente los usuarios con cuenta de Administrador pueden usar 'sudo'. Como ejemplo,para cambiar la propiedad del archivo "carrera" al usuario "jose" del grupo "family" usarías el comando:

 

sudo chown jose:family carrera

 

Un comando similar funcionaría para cambiar la propiedad de una carpeta pero con frecuencia se desea cambiar la propiedad de una carpeta y su contenido.Para hacer esto,se hace uso de la opción "-R" al cambiar la propiedad.Por ejemplo:

 

sudo chown -R jose:family miCarpeta

 

Cambiando permisos

Para cambiar los permisos de un archivo o carpeta usas el comando 'chmod'.Existen varias maneras diferentes de usar este comando (ver 'man chmod') pero la forma más fácil es usar los "modos simbólicos" donde puedes especificar cuáles secciones de permisos (propietario,grupo,other) quieres cambiar.Para esto están "+","-" o "=" (para agregar,remover o ajustar permisos) y luego el tipo de permisos que quieres modificar.Se usa 'u' para indicar que el cambio se aplica a la sección "propietario" de los permisos,'g' para indicar que se aplica a la sección de "grupo" y 'o' para indicar que se aplica a la sección "other".

 

A manera de ejemplo,para cambiar los permisos del archivo "carrera" para que los usuarios en el grupo al que le pertenece el archivo tengan permisos de escritura:

 

chmod g+w carrera

 

Por supuesto,si el archivo "carrera" no posee tu propiedad,se requiere anteceder el comando con 'sudo' y proporcionar tu contraseña:

 

sudo chmod g+w carrera

 

Si deseas hacer al archivo "carrera" ejecutable (p.e. si es un script) por el propietario del archivo y para los usuarios en el grupo al que pertence el archivo:

 

chmod ug+x carrera

 

Si deseas que el archivo tenga propiedad de escritura para el propietario y el grupo:

chmod ug+w carrera

 

Si deseas que el archivo se pueda leer,escribir y ejecutar por el propietario y el grupo:

 

chmod ug+rwx carrera

 

Si deseas que el archivo lo puedan leer todos (propietario,grupo y otros):

 

chmod ugo+r carrera

 

si deseas remover los permisos de lectura y escritura para el grupo y "other" ("otros"):

 

chmod go-rw carrera

 

Puedes usar la operación "=" para colocar los permisos a la manera exacta que quieres sean -sin importar cuáles sean los permisos actuales.Por ejemplo,para que el archivo "carrera" se pueda leer y escribir por el propietario,pero solamente se pueda leer por un grupo y "other":

 

chmod u=rw,go=r carrera

 

Si quieres que el archivo se pueda leer,escribir y ejecutar por el propietario,pueda ser leído y ejecutable por el grupo pero solo leído por "other":

 

chmod u=rwx,g=rx,o=r carrera

 

Por comandos similares se cambian los permisos de una carpeta.Pero con frecuencia se quiere tambien cambiar los permisos de una carpeta y todo su contenido.Para hacer esto se usa la opción "-R" de 'chmod'. Por ejemplo,para dar acceso a escritura de la carpeta "miCarpeta" y todo su contenido,para el propietario y grupo:

 

sudo chmod -R ug+w miCarpeta

 

El simbolo especial "X" (nayúscula) es útil cuando se emplea la opción "-R" para asegurar que una carpeta y todas sus subcarpetas tengan el permiso usual de ejecución.Se desea que las carpetas tenagn permisos de ejecución pero no que que los archivos en esas carpetas se vuelvan ejecutables (debido a que los permisos de ejecución no son deseables para los archivos a menos que sean aplicaciones o scripts).Por ejemplo:

 

chmod -R ugo+X miCarpeta

 

Valores numéricos para los permisos.

También es posible asignar permisos usando valores numéricos.Esto es algunas veces más conciso que usando los "modos simbólicos" previos.

El permiso de lectura (read) tiene asignado un valor numérico de 4

El permiso de escritura (write) tiene asignado un valor numérico de 2

El permiso de ejecución (execute) tiene un valor asignado de 1

la suma total de estos valores resulta en el valor numérico del permiso.Por ejemplo,un permiso con valor de 4 indica un permiso de solo lectura;un permiso con valor de 6 indica permisos de escritura y lectura;y un permiso de valor 7 indica permisos de lectura,escritura y ejecución,Un permiso de valor 5 indica permisos de lectura y ejecución (pero no de escritura).

 

Lo anterior se aplica a cada sección de permisos (propietario,grupo y otros -"other"-) por lo que, un valor de permiso de 644 indica que el propietario posee permisos de lectura y escritura,mientras que el grupo y "other" solo permisos de lectura.

Un valor de permiso de 755 indicaque el propietario posee permisos de escritura,lectura y ejecución mientras que el grupo y "other" tienen permisos de lectura y ejecución pero no de escritura.

 

Los siguientes comandos son equivalentes.El escribir cualquiera de ellos cambiarán los permisos del archivo "carrera" como de lectura,escritura y ejecución por el propietario,de lectura y ejecución por el grupo,pero solo de lectura por "other":

 

chmod u=rwx,g=rw,o=r carrera
chmod 754 carrera

Link to comment
Share on other sites

6) ¿Cómo obtengo privilegios de "root"?.¿Necesito habilitar el usuario "root"?

 

Algunas veces se necesita ejecutar un comando con privilegios de 'root'.El usuario 'root' es una cuenta de usuario que posee el control completo de la máquina por lo que también es llamada a veces "superusuario" ("superuser").

 

El registrarse como 'root' está deshabilitado por defecto en OS X (y lo mejor es que esto sea así.Ver a continuación) pero OS X proporciona el comando 'sudo' que permite obtener privilegios de 'root' de manera temporal si la cuenya que posees es de administrador (la primera cuenta que se crea en uns sistema OS X es por defecto una cuenta "admin"-administrador.también puede asignarse este estatus a cualquier miembro a través del panel de preferencias).

 

Para ejecutar un comando con privilegios de 'root',es necesario anteponer el comando con 'sudo' para luego suministrar la contraseña de usuario.Nótese que los caracteres de la contraseña no son mostrados a medida que se introducen ,Si es la primera vez que se usa el comando,se obtendrá también un pequeño mensaje advirtiendo su uso y responsabilidad al momento de hacer algún cambio.

 

Por ejemplo,supóngase que se quiere remover un archivo llamado "carrera" de una carpeta cuyos permisos normalmente te impedirían borrrar archivos,Si se ejecuta el comando siguiente:

 

sudo rm carrera

 

Entonces el archivo "carrera" será removido (una vez se introduzca la contraseña) sin importar los permisos que tenga o se hayan impuesto.

 

Es importante ser cuidadoso cuando se use 'sudo' debido a que cuando se ejecutan comandos como 'root',el sistema no mostrará advertencia alguna inclusive si se trata de destruir el sistema.

 

El uso subsecuente de 'sudo' no preguntará contraseña siempre y cuando no se esté dentro de un período de cinco minutos desde su último uso.Esto para evitar la molestia de introducir la contraseña cada vez que se necesite ejecutar una secuencia de comandos que necesiten privilegios de root.

 

En caso de que necesites privilegios de root por un período extendido de tiempo se puede iniciar un shell como 'root' por medio del comando 'sudo -s'.Si haces esto,asegúrate recordar que el shell se está ejecutando como root y salir de él una vez termines la sesión,Buena idea es cambiar el esquema de colores del Terminal para diferenciar el estatus en que se encuentra.

 

A pesar de todo,no hay necesidad alguna de habilitar al usuario 'root'.Todo lo que puedas necesitar de 'root' puede hacerse por medio del comando 'sudo'.Además,la ventaja de usar 'sudo' (en vez de habilitar al usuario 'root') es que todo lo que se ejecuta lleva un registro por lo que es sencillo saber que fué lo que se hizo y que cambios sufrió el sistema.

Link to comment
Share on other sites

7) ¿Cómo navego entre las diferentes carpetas?

Cuando abres una nueva ventana en el Terminal,por defecto te encuentras en la carpeta Home.El "directorio actual" o "carpeta actual" es el lugar donde "estás" (recuerda que directorio es sinónimo de carpeta.Es la denominación común usada en UNIX).

 

Es posible averiguar la carpeta actual ejecutando el siguiente comando:

 

pwd

(pwd = print working directory=imprimir directorio de trabajo)

 

El prompt de comandos también indica el directorio actual tal como se indicó antes.

 

Para cambiar a una carpeta diferente,usas el comando 'cd' (cd=change directory=cambiar directorio).Por ejemplo si tienes una sub-carpeta en tu carpeta home llamada "Datos" y actualmente te encuentras en la carpeta home podrías cambiar a la carpeta "Datos" con el comando:

cd Datos

Existen dos carpetas especiales que están presentes en cualquier lugar y que poseen nombres especiales: "." y ".." (un punto, y dos puntos).

La carpeta "." representa la carpeta actual,mientras que la carpeta ".." representa a su carpeta "madre" (la carpeta que contiene la carpeta actual).

Podrás ver estas carpetas si usas la opción "-a" de 'ls' porque de otra forma ellas no se muestran en la salida de 'ls' debido a que sus nombres comienzan con un punto.

 

Entonces,si quieres cambiar a la carpeta "madre" de donde sea te encuentres,puedes hacer con el comando:

cd ..

Si quieres cambiar a la carpeta "madre" de la carpeta "madre" actual (o sea,la "abuela"),puedes hacerlo con el comando:

cd ../..

(Estos nombres especiales de carpetas también pueden ser usados con optros comandos.Por ejemplo,podrías listar el contenido de la carpeta "madre" con 'ls ..')

 

La carpeta en el nivel más alto del disco es llamada "/".Se le llama con frecuencia como "root" o "raíz" del disco -pero nótese que no tiene nada que ver con el usuario 'root'.Favor no confundir los términos-.Para cambiar a la carpeta que está al más alto nivel en el disco sería:

cd /

Para regresar a tu carpeta home en cualquier momento,se escribiría:

cd ~

debido a que "~" es una abreviación para tu carpeta home.Pero resulta también que si omites el nombre de la carpeta a la que quieres cambiar,eso te llevará de igual manera a tu carpeta home.Así,lo mismo se obtiene si se usa el comando sencillo:

cd

Si deseas ir a cierta carpeta de la cuál conoces su ruta completa,puedes ir allá en un solo paso simplemente tecleando la ruta completa despues del 'cd'.Por ejemplo,para ir a la carpeta "/etc/miServicio/users",puedes escribir:

 

cd /etc/miServicio/users

 

o haciéndolo paso por paso:

 

cd /
cd etc
cd miServicio
cd users

 

Un punto que vale la pena mencionar cuando se escriben rutas largas es que si se presiona la tecla Tab se presentará completación automática siempre que la ruta sea única.Por ejemplo,si se teclea

cd /etc/miServ

y se presiona la tecla Tab (previo a presionar Return),se esxpandirá la ruta a :

cd /etc/miServicio/users

debido a que es la única carpeta bajo "/etc" que comienza con "mi". Esto puede ahorrar tiempo y evitar errores a la hora de ejecutar comandos.

 

Otra manera de ir a una carpeta es tecleando 'cd' y luego arrastrando la carpeta en cuestión a la ventana del Terminal.Si la ruta es algo complicada,sin duda esta es la mejor forma de hacerlo.

 

 

Accesando a otros discos

 

La carpeta "/" es la carpeta que se encuentra en el nivel más alto del disco desde el cuál se inició el sistema (es decir,desde dónde reside la copia de OS X que estás usando)-sin importar cuál sea el nombre con el que se muestra en el Finder o el que se haya asignado por cuenta propia.

 

Si posees otros discos (discos externos,discos montados a través de red o una imagen de disco -achivos .dmg-) se puede tener acceso a ellos desde el Terminal por medio de la carpeta "/Volumes".Por ejemplo,si tienes un disco externo llamado "Semanal",sus archivos se encontrarán bajo la carpeta "/Volumes/Semanal".

 

Observese que,de igual manera que para cualquier ruta,si existe un espacio (u otro caracter que no sea u a letra) en el nombre del disco externo,necesitarás colocar la ruta completa dentro de comillas dobles como ya se ha explicado antes.

Para ilustrar esto,si un disco externo tiene el nombre "Mi Disco Externo",puedes navegar a él mediante el comando:

 

cd "/Volumes/Mi Disco Externo"

 

Por razones de uniformidad,el disco desde el cuál iniciaste el sistema también es accesible bajo la carpeta "/Volumes".

Link to comment
Share on other sites

8) ¿Cómo edito archivos de texto (como lo son archivos de configuración/.plist)?

 

Los archivos de texto UNIX (a menudo llamados "plain text"="solo texto" o archivos "ASCII") pueden ser editados con cualquier editor de texto que pueda guardar archivos con el formato "plain text" (significa esto sin algún formato especial o fuentes,etc).

 

Otro requisito para cualquier editor de texto UNIX es que sea capaz de seguir la convención estándar de UNIX de caracter de fin de línea o "end-of-line character"

 

Existen varios editores de texto que puedes usar bajo OS X.Podría decirse que pertenecen a dos categorías:aquellos que poseen interfaz gráfica (GUI),y aquellos que se ejecutan dentro de la ventana Terminal.La siguiente es una prequeña lista y es importante dejar claro que hay muchos más.

 

Editores de Texto con GUI

 

TextEdit

- viene con OS X (bajo /Applications)

- puede editar también "texto enriquecido" (inclusive algunos documentos de Microsoft Word) -pero esto se condidera coomo negativo en la edición de archivos de texto Unix ya que hay que asegurarsec siempre que los documentos sean guardados como "plain text".Cuando sea este el caso,no es recomendable usar Text Edit por esta razón.

 

TextWrangler

- Sucesor de "BBedit Lite" y "BBEdit"

- Muchas características de gran calidad.Poderoso editor y de fácil uso.

- Puede editar archivos con priviliegios de "root"

- Puede editar archivos "ocultos" y archivos en servidores FTP

- Encuentra las diferencias entre dos versiones de un archivo y fusiona las diferencias.

- Es de uso gratuito

 

SubEthaEdit

- Brinda una experiencia interactiva a través de su utilidad UNIX de línea de comandos

- Puede editar archivos con privilegios de "root"

- Muy versátil.

- Actualmente disponible como versiones de prueba válida a treinta días.

 

Editores de Texto que se ejecutan dentro del Terminal

 

pico (o nano)

- Vienen con OS X (/usr/bin/pico o /usr/bin/nano)

- Relativa facilidad de uso debido a que proporcionan información en su "pequeña interface"

- Disponibles inclusive en modo "single-user".

- Muchos tutoriales disponibles

 

vi

- Viene con OS X (/usr/bin/vi)

- Dificil de manejar,pero poderoso

- Disponibles inclusive en modo "single-user".

- Posee más características que emacs.Mejor editor

- Muchos tutoriales disponibles

 

emacs

- Vienen con OS X (/usr/bin/emacs)

- Dificil de manejar,pero poderoso

- Mejor editor que 'vi'

- Muchos tutoriales disponibles

 

Los editores de texto con GUI se consideran generalmente como fáciles de utilizar,pero es muy importante saber al menos lo básico de uno de los editores que no poseeen GUI debido a que estos son los únicos a los que se puede acceder en un modo no gráfico (por ejemplo,cuando se trata de la resolución de problemas,cuando se tiene acceso remoto por medio ssh,etc).

 

Editando con 'pico' (o 'nano'):lo básico

 

Se hará una breve mención a cómo editar con el editor 'pico' debido a que es el editor sin GUI más apropiado para cualquier principiante.

Para comenzar a editar un archivo (aquí carrera) escribes en el Terminal:

 

pico carrera

 

Podrás apreciar algunos recordatorios de lo que hacen los comandos en la parte inferior de la ventana del Terminal.El simbolo (^) en estos comandos hace referencia al uso de la tecla Control.Mantienes presionada la tecla Control y luego presionas la tecla a la que se hace referencia.

Usas la teclas "flechas" para navegar dentro del texto del archivo.Introduces el texto que quieres añadir;usas la tecla "delete" para borrar lo que sea necesario -lo usual en cualquier editor-.Al momento de guardar modificaciones,se mantiene presionada la tecla Control mientras se preiona la tecla O -esto mostrará el nombre del archivo en la parte inferior- y luego Return.Si se quiere salir del archivo sin guardar los cambios,se mantiene presionada la tecla Control y luego se presiona la tecla X.

 

Nota:aunque se use 'pico' como invocación a este editor,es posible que se aprecie en la parte superior "nano".Esto es porque 'pico' ha sido reemplazado por 'nano' en algunas versiones "recientes" de OS X (el archivo /usr/bin/pico es en realidad un enlace simbólico a /usr/bin/nano):Estas diferencias no son importantes en esta sección básica.

 

Editando archivos que son propiedad de 'root'

 

Con frecuencia se presenta el caso que se necesita editar un archivo de configuración que es propiedad de 'root',u otro usuario del cuál no se tienen los permisos para editarlo por alguna otra razón.Por ejemplo,el archivo de configuración Apache ubicado en "private/etc/apache2/httpd.conf" es propiedad de 'root' y tiene permisos de escritura solo para el propietario.

Para editar tales archivos con un editor sin GUI (de nuevo,'pico por ejemplo),todo lo que se necesita hacer es anteceder el comando 'pico' con 'sudo'.Para el archivo "carera":

 

sudo pico carrera

 

donde a continuación será necesario introducir la contraseña (necesitas ser un administrador de equipo) para que el editor inicie.Para entonces,ya estarás editando el archivo con privilegios de 'root' sin tener problemas con los permisos.

 

 

Haciendo una copia de seguridad

 

Normalmente es una buena idea hacer una copia de seguridad de cualquier archivo de configuración que se esté editando.De esa forma,si encuentras que se ha cometido algún error,será un paso sencillo revertir esas modificaciones.Para hacer esto,sencillamente escribimos en el shell el comando 'cp'.Por ejemplo:

 

cp carrera carrera.bak

 

donde la copia de seguridad es llamada "carrera.bak",pero puede tener cualquier nombre.También es válido y muy recomendado colocar la fecha de modificación si se quiere y llevar un orden y seguimiento con los cambios que se hacen::

 

cp carrera carrera.enero7

 

Para reestablecer la copia de seguridad,usas el mismo comando 'cp' pero de la manera opuesta.Ejemplo:

 

cp carrera.enero7 carrera

Link to comment
Share on other sites

9) ¿Cómo elimino archivos y carpetas?

 

Para eliminar un archivo,se usa el comando 'rm' ("rm" = remove=remover).Por ejemplo.si existe un archivo llamado "carrera" en la carpeta actual que se desea eliminar,pues se usaría el siguiente comando:

 

rm carrera

 

Nótese que el comando 'rm' elimina archivos de manera inmediata (o sea,que no es que los envía a la papelera como equivale a hacerlos desde el Finder).Por lo general no existe manera alguna de recuperar un archivo que haya sido eliminado con 'rm' .Pero,sin embargo,se podría considerar por el momento que la data aún se encuentra en disco y que puede ser recuperada usando software de recuperción de data de terceros (para asegurar que la data no sea recuperable,puedes uar el comando 'srm' en vez de 'rm')

 

Eliminando varios archivos

 

Puedes eliminar varios archivos con un solo comando listando los nombres de archivos separandolos con un espacio entre ellos (si alguno de los nombres de archivo contiene espacios,necesitas encerrarlo en comillas dobles) .Por ejemplo,si deseas eliminar los tres archivos con nombres "carrera","matutino" y "pan de maíz" sería:

 

rm carrera matutino "pan de maíz"

 

Para eliminar múltiples archivos con un solo comando,es útil con frecuencia usar "wildcards" o "comodines" (ver la pregunta "¿Cómo funcionan los wildcards?" para más detalles).Por ejemplo,si hay archivos "carrera","carrera1","carrera2","carretera","carreta" en la carpeta actual,el comando para eliminarlos sería así:

 

rm carre*

 

Por supuesto,necesitas ser especialmente cuidadoso cuando uses los wildcards con el comando 'rm' debido a que no existe modo de deshacer los cambios si accidentalmente eliminaste mas de lo que se quería eliminar porque el wildcard haya aplicado a más archivos de los que deseabas.Un error común es el de accidentalmente dejar un espacio extra cuando se escribe un comando como el de arriba:

 

rm carre *

 

este eliminaría el archivo "carre" y todos los otros archivos en la carpeta actual /(excepto todos aquellos cuyos nombres comienzan con un punto).

 

Esperando confirmación

Si tu usas la opción "-i" ,se te pedirá confirmación antes de eliminar cada archivo.Esto puede ser entonces una medida de seguridad al usar el comando 'rm' con los wilcards.Por ejemplo:

 

rm -i carre*

 

esperará por tu respuesta antes de eliminar cada uno de los archivos mencionados en el ejemplo de arriba.

 

Tratando con permisos

En caso uses el comando 'rm' con un archivo que es de sólo lectura,se esperará a que confirmes su eliminación.Si estás por eliminar un montón de archivos (p.e. con los wildcards) esto puede ser muy molesto e indeseado.Para forzar la eliminación de archivos sin preguntar por confirmación se puede emplear la opción "-f".

 

Nótese que para eliminar un archivo de una carpeta,sólo necesitas permisos de escritura sobre esa carpeta (los permisos del archivo mismo son irrelevantes).Es por eso que puedes anular la advertencia cuando se elimina un archivo de sólo lectura.

 

Si la propiedad de los permisos son tales que no se permite la eliminación de un archivo,puedes forzar la eliminación antecediendo al comando 'rm' con 'sudo' (ver arriba ¿Cómo obtengo privilegios de "root"?)

Casos particulares

Si tienes dificultad en eliminar algún archivo aún con el uso de 'sudo',es probable que sea debido a que este posee una "flag" o "etiqueta" especial.Para ver este estado puedes usar el comando 'ls -lo' en el archivo.En algunos casos es necesario cambiar las flags antes de que se pueda eliminar el archivo (para esto está el comando 'chflags' )

 

Eliminando una carpeta

Para eliminar una carpeta (directorio),usas el comando 'rmdir' siempre y cuando la carpeta esté vacía..Si hay algún archivo (o sub carpetas) en la carpta,necesitas eliminarlas primero.Si estás teniendo dificultades con esto,recuerda que los archivos/carpetas que comienzan con un punto no son mostradas cuando usas 'ls' - lo que necesitarías sería 'ls -a' para ver todos los archivos/carpetas en la carpeta.

 

Si estás seguro que quieres eliminar una carpeta y todo lo que contiene (archivos y sub-carpetas).puedes usar la opción "-r" ("r" por recursivo) de 'rm'. A menudo es combinado con la opción "-f" para prevenir la confirmación relacionada con archivos de sólo-lectura.Por ejemplo:

 

rm -rf misPodcasts

 

eliminará la carpeta "misPodcasts" y todo los archivos y sub-carpetas contenidas en ella.

Link to comment
Share on other sites

10) ¿Cuáles son los comandos más comúnmente usados?

 

Aquí una pequeña nota de los comandos más comúnmente usados,y cuando no sea obvio se tratrá de describir su origen.Observese que existen más detalles para algunos descritos aquí en otras secciones de estas preguntas más frecuentes.

Para conocer todos los detalles de los comandos,se hace la invitación a leer las paginas 'man' -de 'manual'.Para saber la descripción de un comando,por ejemplo el comando 'cp',hay que buscar y leer 'man cp' (Por cierto,las páginas 'man' o de 'manuales están divididas en secciones.Para un pricipiante,la sección primera es a la que debe acudir debido ya que esta describe los comandos que pueden ejecutarse desde el shell.Generalmente las secciones posteriores describen funciones útiles a programadores y desarrolladores.

 

Si se busca un comando para hacer algo que no se menciona aquí,nótese que 'man -k algún_tema' mostrará una lista de páginas del manual dónde "algún_tema" sea mencionado.Eso podría ayudar a encontrar el comando que quieres.Otro método para encontrar comandos útiles es ver la sección de "comandos relacionados".

 

El comando 'whatis' también es útil a la hora que se desee un rápido sumario de lo que hace un comando dado.

 

Manejo de archivos y carpetas

cd ("change directory") - para navegar a una ubucación diferente en el sistema de archivos

pwd ("print working directory") - muestra la ubicación actual en el sistema de archivos (el "directorio actual").

ls ("list") - muestra los detalles de archivos y carpetas

touch - para crear un archivo "vacío" o para cambiar la fecha de un archivo existente

mkdir ("make directory") - para crear un nuevo directorio

chown ("change owner") - para cambiar al propietario de un archivo o carpeta

chmod ("change mode") - para cambiar los permisos de un archivo o carpeta

mv ("move") - para mover un archivo o carpeta a una ubicación diferente en el sistema de archivos o sólo para renombrarlo

cp ("copy") - para copiar un archivo o carpeta

ln ("link") - para crear un enlace a un archivo o carpeta

rm ("remove") - para eliminar un archivoto delete a file

rmdir ("remove directory") - para eliminar una carpeta

find - para buscar en el sistema de archivos archivos o carpetas que concuerdan con un criterio dado

mdfind - para buscar archivos o carpetas e,pleando la meta-data "Spotlight"

locate - para ver dónde ciertos archivos están ubicados

du ("disk usage") - para mostrar el espacien disco usado por un archivo o carpeta

tar ("tape archive") - para empacar varios archivos o carpetas en uno solo

zip, gzip - para empacar varios archivos o carpetas en uno solo y comprimirlo para que tome menos espacio en disco

unzip, gunzip - para descomprimir un archivo .zip o .gz

 

Contenido de archivos

more - para mostrar el contenido de un archivo página por página (presionar Return para ir a la línea de abajo,presionar la barra espaciadora para pasar la página)

cat ("concatenate") - para mostrar todo el contenido de un archivo o para concatenar dos o más archivos en uno solo.

head - para mostrar la primera parte de un achivo

tail - para mostrar la última parte de un archivo

mdls - muestra la meta-data de un archivo

xattr - muestra los atributos extendidos de un archivo

diff - para comparar dos archivos de texto (o con la opción "-r",dos carpetas)

cmp - para comparar dos archivos binarios

pico - un editor para mostrar y editar texto

grep ("global regular expression print") - para buscar dentro de un archivo líneas que concuerden con un patrón dado

sort - para ordenar las líneas de archivos de texto

uniq - para filtrar o cubrir líneas repetidas de archivos de texto

fold - to wrap long lines of text files (useful when printing)

hexdump - para mostrar el contenido de un archivo como números hexadecimales

textutil - para convertir solo texto a HTML o RTF (y viceversa)

 

Procesos

ps ("process status") - para ver información detallada sobre los procesos que están en ejecución.

top - para obtener un sumario de los procesos que están en ejecución y los recursos consumidos

kill - para finalizar un proceso identificado por un id-process (o para enviar otras señales)

killall - para finalizar un proceso identificado por el nombre de un programa

lsof ("list open files") - para mostrar cuáles archivos (y sockets) están abiertos por cuál programa

fs_usage ("filesystem usage") - muestra cuáles programas están accesando (leyendo o escribiendo) el sistema de archivos

dtrace - rastrea cualquier actividad en el sistema (procesos o acceso de archivos).Leer 'man -k dtrace'

 

Redes

ifconfig ("interface configure") - para mostrar y configurar los parámetros de interfaces de red

ping - para enviar un paquete de prueba a otro equipo

traceroute - para ver la ruta tomada por los paquetes a lo largo de una red

host - para encontrar la dirección IP correspondiente al hostname o viceversa

curl - para descargar contenido de un documento via URL

ftp - línea de comandos cliente FTP

ssh ("secure shell") - registro remoto a otro equipo

 

Información del Sistema

hostname -proporciona el nombre de tu Mac

sw_vers - muestra la versión de Mac que estás usando

system_profiler - muestra el hardware y el software que posees en tu Mac (es la versión de línea de comandos del "System Profiler")

sysctl -a - muestra los valores de los parámetros del kernel

 

Administración de discos

df - muestra información (incluyendo la cantidad de espacio libre) de los discos montados

diskutil - versatil utilidad para la administración de discos (información, formato, montaje, reparación, etc)

Link to comment
Share on other sites

11) ¿Cómo funcionan los wildcards o comodines?

 

Supongase que quieres aplicar un comando sobre una gran cantidad de archivos o carpetas.Podrías por supuesto teclear los nombres de archivos/carpetas a los que quieres aplicar el comando separando cada uno de otro con un espacio,Pero si la cantidad de archivos/carpetas es demasiado grande esto se vuelve poco práctico:el uso de los wildcards soluciona en parte este problema.

 

Por ejemplo,si deseas copiar todos los archivos de la carpeta actual cuyos nombres comienzan con "carre",podrias hacer eso con este comando:

 

 cp carre* mi_Carpeta_destino

 

 

Lo básico

Los comodines a menudo se describen como "globalizadores".La expansión de los comodines para crear una lista de nombres de archivos es manejada por el shell.Esto significa que los detalles a tomar dependen de cuál shell se esté usando.Pero lo básico es lo mismo para todos los shells:

 

* ("asterisco" or "estrella") es un comodín que coincide con cualquier cadena de cero o más caracteres

 

? es un comodín que coincide con un simple caracter

 

[xyz] coincide con cualquier caracter que está dentro de los corchetes

 

Por ejemplo,si deseas copiar los archvivos "sal1","sal2","sal3","salt","sale" pero no los archivos "sal" o "sales" o "salcedo" podrías escribir para eso:

 

cp sal? mi_Carpeta_destino

 

Si deseas copiar todos los archivos con el sufijo ".jpg" podrías usar:

 

cp *.jpg mi_Carpeta_destino

 

Excepciones

Existen dos excepciones relativas al uso de los comodines "*" y "?":no reportan coincidencia a un punto inicial (.) o a un slash (/).

la razón de la excepción del punto inicial es que esos archivos cuyos nombres comienzan con punto tienen la intención de estar ocultos por lo que no es buena idea incluírlos en los comodines.

La razón por la excepción del slash es que esto permite mayor control de coincidencia sobre archivos y carpetas (recuérdese que el slash es un separador de rutas de carpetas o directorios).

 

Si deseas copiar todos los archivos de la carpeta actual excepto aquellos cuyos nombres comienzan con un punto podrias teclear:

 

cp * mi_Carpeta_destino

 

Sin deseas copiar todos los archivos de la carpeta actual incluyendo aquellos cuyos nombres comienzan con un punto:

 

cp * .* mi_Carpeta_destino

 

Adviértase que existe un espacio entre "*" y ".*" en el comando anterior.de esta manera el shell interpretará cada comodín de manera independiente.

 

Si deseas copiar todos los archivos de una carpeta "~/Datos/Inventario" cuyos nombres comienzan con "sal" y que terminen ya sea con "a", "t", or "e" previo al sufijo ".txt",se podría escribir:

 

cp ~/Datos/Inventario/sal*[ate].txt mi_Carpeta_destino

 

Si deseas copiar el mismo grupo de archivos de todas las sub-carpetas en la carpeta "~/Datos", se podría escribir:

 

cp ~/Datos/*/sal*[ate].txt mi_Carpeta_destino

 

Este último comando de ejemplo puede presentar un problema si existe más de un archivo con el mismo nombre en diferentes sub-carpetas que van a ser copiados a la misma carpeta destino.La última versión del mismo archivo sobreescribirá al más antiguo.

 

Los ejemplos anteriores utilizaron el comando para copiar 'cp',pero esto se puede aplicar a cualquier comando que pueda manejar una lista de nombres de archivos.

 

 

Detalles

Para obtener todos los detalles sobre el uso de comodines en el shell bash,recuerda que puedes consultar su manual 'man bash' y buscar la sección "Pathname Expansion". Si deseas emplear el shell tcsh,en 'man tcsh' te podrías ubicar en la sección "Filename substitution".

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...