Guía avanzada del usuario

Capítulo 3 Trabajar con archivos y directorios

La línea de comando de SunOS se utiliza para manipular archivos y directorios. Para llevar a cabo operaciones específicas es necesario escribir el nombre del archivo y del directorio junto con los comandos de SunOS. Es un sistema diferente al de OpenWindows, en el que los archivos se muestran como iconos que se pueden mover y hacer clic sobre ellos, y los comandos se seleccionan en los menús.

Este capítulo le presenta los conceptos y procedimientos que se utilizan para trabajar con archivos y directorios desde la línea de comando SunOS. Dichas operaciones son aplicables para cualquier línea de comando SunOS, independientemente de que esté usando una Herramienta del shell o una Herramienta de comandos en el entorno OpenWindows o esté conectado a un terminal remoto. Para hacer un uso completo del sistema operativo SunOS es esencial que entienda los conceptos que se presentan en este capítulo.

Conceptos de archivo

El archivo es la unidad básica del sistema operativo SunOS. Casi todo es tratado como si fuese un archivo, incluyendo:

Las siguientes secciones explican los comandos utilizados para crear, listar, copiar, mover y eliminar archivos. También podrá ver cómo listar el contenido de un archivo y cómo determinar su naturaleza.

Uso de los comandos de archivo

Cada uno de los comandos que se presentan en esta sección incluye un ejemplo de su uso. Realice los ejemplos según vaya leyendo el texto. Esta práctica hará que los comandos y sus respectivos conceptos sean más fáciles de entender y recordar.

Antes de comenzar

Antes de que empiece a experimentar con archivos, asegúrese de que está en el directorio de usuario. Éste es un directorio que le estableció el administrador de su sistema cuando le creó la autorización de acceso. Si ejecuta las tareas que se muestran en los siguientes ejemplos desde el directorio de usuario, le será más difícil crear, copiar, mover o (en el peor de los casos) eliminar archivos de partes del sistema que otros usuarios esperan que permanezcan inalteradas.

Para cerciorarse de que se encuentra en el directorio de usuario, escriba solamente el comando cd (abreviatura de change directory). Esto le llevará a su directorio de usuario (predeterminado). Después escriba el comando pwd (print working directory) para mostrar la posición actual dentro del sistema de archivos. El directorio que aparezca será su directorio de usuario.

$ cd
$ pwd
/export/home/nombre_del_usuario

En este ejemplo, el directorio de usuario es /export/home/nombre_del_usuario, en donde nombre_del_usuario es el nombre del usuario al que pertenece el directorio de usuario.

Crear un archivo de prueba

Utilice el comando touch para crear un archivo vacío. Si no existe un archivo con el nombre que haya especificado, el comando touch creará un archivo vacío (si dicho archivo ya existe, touch actualizará la hora del último acceso al archivo).

$ touch archivoprueba
$ 

Listar archivos (ls)

Ahora liste el archivo con el comando ls para verificar que lo ha creado:

$ ls archivoprueba
tempfile 

Si introduce el comando ls solamente, éste listará todos los archivos situados en la posición actual. Si introduce el comando ls con un nombre de archivo determinado, listará sólo dicho archivo, si es que existe.

Si desea más información sobre el comando ls(1), consulte man Pages(1): User Commands.

Copiar archivos (cp)

Utilice el comando cp para copiar tempfile en un archivo llamado copyfile:

$ cp tempfile copyfile
$ 

Ahora intente listar ambos archivos. Observe que los dos nombres acaban con los caracteres "file". Puede utilizar el carácter comodín (*), para sustituir a cualquier carácter o secuencia de caracteres. Por lo tanto, el comando ls *file debe listar tanto tempfile como copyfile (y cualquier archivo de ese directorio cuyo nombre termine en file):

$ ls *file
copyfile    tempfile

Observe que copyfile se lista primero. Los archivos se listan por orden alfabético, (las letras mayúsculas y los números preceden a las letras minúsculas).

Si desea una información detallada acerca del comando cp(1), consulte man Pages(1): User Commands.

Mover y renombrar archivos (mv)

Puede mover y renombrar archivos utilizando el mismo comando: mv (move). En este ejemplo, use el comando mv para renombrar tempfile como emptyfile:

$ mv tempfile emptyfile
$ 

Ahora liste de nuevo ambos archivos para verificar el cambio:

$ ls *file
copyfile    emptyfile

Como ve, tempfile ha sido reemplazado por emptyfile.

Si desea más información acerca del comando mv(1), consulte man Pages(1): User Commands.

Eliminar archivos (rm)

Finalmente, use el comando rm (remove) para eliminar copyfile y compruebe el resultado con el comando ls:

$ rm copyfile
$ ls *file
emptyfile


Precaución - Precaución -

GraphicUna vez que elimine un archivo, éste desaparecerá para siempre. A no ser que exista una copia de seguridad, no podrá restablecer el archivo. Tenga cuidado al usar el comando rm, y en especial si lo usa junto al carácter comodín (*). Los archivos eliminados con rm no se podrán recuperar.


Si desea una información más detallada acerca del comando rm(1), consulte man Pages(1): User Commands.

Mostrar el contenido del archivo (more, cat)

Use el comando more para mostrar el contenido de un archivo. Escriba more seguido del nombre del archivo que se va a mostrar. El contenido del archivo se desplazará hacia abajo en la pantalla. Si el archivo es más largo que una pantalla, aparecerá el siguiente mensaje:

--Más--(4%)

donde nn es el porcentaje de archivo ya mostrado.

También puede usar el comando cat para mostrar el contenido de un archivo, pero éste muestra de una vez el archivo completo sin pararse. El comando cat (concatenate) se usa más frecuentemente para unir dos o más archivos y formar otro más grande, como se ve en el ejemplo siguiente:

$ cat file1 file2 file3 > bigfile
$ ls *file
bigfile
file1
file2
file3
$

Si desea más información acerca de los comandos more(1) o cat(1), consulte man Pages(1): User Commands.

Mostrar el tipo de archivo (file)

Algunos archivos como los binarios o los ejecutables no se pueden imprimir ni mostrar en pantalla. El comando file puede resultarle útil si no está seguro del tipo de archivo.

Use el comando file para mostrar el tipo de archivo:

$ file copyfile
copyfile:    ascii text

Directorios y jerarquía

Hasta ahora ha aprendido a listar, copiar, renombrar y eliminar archivos. Sin embargo, se estará preguntando acerca de aspectos más complicados, como por ejemplo ¿dónde se encuentran dichos archivos? Esta sección explica la jerarquía del directorio. Lea con atención el siguiente texto, y después realice los ejemplos de las secciones siguientes.

Jerarquía de directorios

Los archivos se agrupan en directorios, que a su vez se organizan en una jerarquía. En la cima de la jerarquía está el directorio "raíz", representado por "/".

Como se muestra en el ejemplo de la Figura 3-1, cada directorio del sistema de archivos puede incluir muchos otros directorios. La convención consiste en distinguir niveles de directorio mediante el carácter /. Teniendo esto en cuenta, observe que el directorio/ (raíz) contiene entre otros los subdirectorios /usr, /bin, /home y /lib. El subdirectorio /home contiene user1, user2, y user3.

Los directorios (y los archivos que hay en su interior) se especifican incluyendo el nombre de los directorios en los que están. A esto se le llama nombre de ruta. de acceso. Por ejemplo, el nombre de la ruta de acceso del directorio user3 de la próxima figura es /home/user3.

Figura 3-1 Jerarquía del sistema de archivos

Graphic

Todos los subdirectorios y nombres de archivo que incluya un directorio deben ser únicos. Sin embargo, los nombres pertenecientes a directorios diferentes pueden ser iguales. Por ejemplo, el directorio /usr contiene el subdirectorio /usr/lib. No hay ningún conflicto entre /usr/lib y /lib porque los nombres de ruta de acceso son diferentes.

Los nombres de ruta de acceso de los archivos trabajan exactamente igual que los nombres de ruta de acceso de los directorios. El nombre de ruta de acceso de un archivo describe la posición que ocupa dentro de la jerarquía del sistema de archivos. Por ejemplo, si el directorio /home/user2 contiene un archivo llamado report5, el nombre de ruta de acceso será /home/user2/report5. Esto indica que el archivo report5 está dentro del directorio user2, que a su vez está incluido en el directorio home, que se encuentra en el directorio raíz (/).

Los directorios pueden contener sólo directorios, sólo archivos, o ambos.

Imprimir el directorio en uso (pwd)

El comando pwd (print working directory) le indica donde se encuentra dentro de la jerarquía del sistema de archivos:

$ pwd
/home/user1

El resultado que obtenga será algo diferente al del ejemplo, ya que la estructura de su directorio es diferente. Recuerde que el directorio en uso es su posición actual dentro de la jerarquía del sistema de archivos.

Directorio de usuario

Cada usuario tiene un directorio de usuario. Cuando abre por primera vez la ventana de la Herramienta de comandos o la Herramienta del shell en el entorno OpenWindows, la posición inicial en que se encuentra (directorio en uso) es su directorio de usuario. Dicho directorio lo estableció el administrador de su sistema cuando creó su cuenta de acceso.

Cambiar el directorio en uso (cd)

El comando cd (change directory) le permite moverse dentro de la jerarquía del sistema de archivos:

$ cd /usr/lib
$ pwd
/usr/lib

Si escribe el comando cd solamente, volverá al directorio de usuario. Por ejemplo, si éste era /home/user1:

$ cd
$ pwd
/home/user1

En el shell C, el signo tilde (~) se usa como un método abreviado para especificar el directorio de usuario. Por ejemplo, para cambiar el subdirectorio music deberá escribir lo siguiente dentro del directorio de usuario:

example% cd ~/music

También puede usar dicho método abreviado para especificar el directorio de usuario de otro usuario. Por ejemplo:

example% cd ~nombre_del_usuario

donde nombre_del_usuario es el nombre de entrada de otro usuario, y cambiaría al directorio de usuario de dicho usuario.


Nota -

Si está utilizando el shell Bourne, el método abreviado ~ no funcionará.


Si está usando el shell Bourne, es posible que el administrador de su sistema lo haya configurado para que pueda escribir $home para especificar su directorio de usuario. Si éste es el caso, escriba:

$ $home/music

esto le trasladará al subdirectorio music del directorio de usuario. Del mismo modo, si escribe:

$ $home/nombre_del_usuario

se trasladará al directorio de usuario del usuario que haya especificado, donde nombre_del_usuario representa el nombre de entrada del otro usuario..

El directorio situado justo "por encima" de un subdirectorio se denomina directorio maestro. En el ejemplo anterior, /home es el directorio maestro de /home/user1. El símbolo.. ("punto, punto") representa el directorio maestro. Por lo tanto, el comando cd .. cambia el directorio en uso al directorio maestro, como muestra este ejemplo:

$ pwd
/home/user1
$ cd ..
$ pwd
/home

Suponga que su directorio en uso actual es /home/user1 y desea trabajar con varios archivos en /home/user2. El siguiente método abreviado podrá serle útil:

$ pwd
/home/user1
$ cd ../user2
$ pwd
/home/user2

../user2 ordena al sistema buscar user2 en el directorio maestro. Como puede observar, esto resulta más sencillo que escribir el nombre de ruta de acceso /home/user2 entero.

Crear un directorio (mkdir)

Crear un directorio nuevo es fácil. Escriba el comando mkdir seguido del nombre del nuevo directorio:

$ mkdir veggies
$ cd veggies
$ mkdir broccoli
$ cd broccoli
$ pwd
/home/user2/veggies/broccoli

Nombres de ruta de acceso relativos

El nombre de ruta de acceso completo de un directorio o de un archivo comienza por un signo (/) y describe toda la estructura del directorio comprendida entre dicho archivo (o directorio) y el directorio raíz. Sin embargo, a menudo puede usar un nombre mucho más corto que define el archivo o directorio en relación con el directorio actual en uso.

Cuando se encuentre en el directorio maestro, puede desplazarse a un subdirectorio utilizando sólo el nombre del directorio y no el nombre de ruta de acceso completo. En el ejemplo anterior, el comando cd veggies usa el nombre de ruta de acceso relativo del directorio veggies. Si el directorio en uso actual es /home/user2, el nombre de ruta de acceso completo de este directorio es /home/user2/veggies.

Intente crear varios subdirectorios diferentes y después muévase por ellos dentro de la estructura del directorio. Use los nombres de ruta de acceso completos y los nombres de ruta de acceso relativos y confirme su posición con el comando pwd.

Mover y renombrar directorios

Un directorio se renombra moviéndolo a un nombre diferente. Use el comando mv para renombrar archivos:

$ pwd
/home/user2/veggies
$ ls
broccoli
$ mv broccoli carrots
$ ls
carrots

También puede usar mv para mover un directorio a una posición de otro directorio:

$ pwd
/home/user2/veggies
$ ls
carrots
$ mv carrots ../veggies2
$ ls ../veggies2
carrots

En este ejemplo, el directorio carrots se mueve de veggies a veggies2 con el comando mv

Copiar directorios

Use el comando cp -r para copiar directorios y los archivos que contengan:

$ cp -r veggies veggies3
$

Este comando copia todos los archivos y directorios dentro del directorio veggies en un nuevo directorio veggies3. Esta es una copia recursiva, como designa la opción -r. Si intenta copiar un directorio sin usar esta opción, aparecerá un mensaje de error.

Eliminar directorios (rmdir)

Para eliminar un directorio vacío utilice el comando rmdir como sigue:

$ rmdir veggies3
$ 

Si el directorio contiene todavía archivos o subdirectorios, el comando rmdir no lo eliminará.

Use rm -r (agregando la opción recursiva -r al comando rm) para eliminar un directorio y su contenido, incluyendo cualquier subdirectorio y sus archivos, del modo siguiente:

$ rm -r veggies3
$


Precaución - Precaución -

GraphicLos directorios eliminados con el comando rmdir no pueden recobrarse, igual que sucede con los directorios y su contenido eliminados con el comando rm -r.


Ver las diferencias entre directorios (diff)

Ocurre a menudo que diversas personas con acceso a un archivo hacen copias de él que después editan.El comando diff le muestra las diferencias existentes entre las versiones de un archivo ASCII. El comando:

$ diff leftfile rightfile

explora cada línea de los archivos leftfile y rightfile para encontrar las diferencias. Cuando encuentra una línea o líneas diferente/s, determina si las diferencias son resultado de una acción de agregar, eliminar, o cambiar una línea, y cuántas líneas han sido afectadas. También le indica el correspondiente número o números de línea de cada archivo, seguido del texto pertinente.

Si la diferencia es el resultado de una acción de agregar, diff muestra una línea con el siguiente formato:

l[,l] a r[,r]

donde l es un número de línea de leftfile y r es un número de línea de rightfile.

Si la diferencia es el resultado de una eliminación, diff utiliza una d en lugar de una a; si es el resultado de un cambio de línea, diff usa una c.

Las líneas correspondientes a ambos archivos siguen inmediatamente a la información de número de línea. El texto de leftfile va precedido por el signo (<). El texto de rightfile va precedido por un signo (>).

A continuación se muestran dos ejemplos de archivos, seguidos del resultado de aplicarles el comando diff:

$ cat sched.7.15
Week of 7/15

Day:  Time:        Action Item:          Details:

T     10:00        Hardware mtg.         every other week
W     1:30         Software mtg.
T     3:00         Docs. mtg.
F     1:00         Interview
$ cat sched.7.22
Week of 7/22

Day:  Time:        Action Item:          Details:

M     8:30         Staff mtg.            all day
T     10:00        Hardware mtg.         every other week
W     1:30         Software mtg.
T     3:00         Docs. mtg.
$ diff sched.7.15 sched.7.22
1c1
< Week of 7/15
---
> Week of 7/22
4a5
> M     8:30         Staff mtg.            all day
8d8
< F     1:00         Interview

Si los dos archivos que se comparan son idénticos, el comando diff no producirá ningún resultado.

El comando diff(1) tiene muchas más opciones de las que se explican aquí. Si desea más información, consulte man Pages(1): User Commands.

Comparar tres archivos diferentes (diff3)

Si tiene tres versiones de un archivo que quiere comparar a la vez, use el comando diff3 como sigue:

$ diff3 file1 file2 file3

El comando diff3 compara las tres versiones de un archivo y publica series de texto diferenciado, señaladas con estos códigos:

==== los tres archivos son diferentes

====1 file1 es diferente

====2 file2 es diferente

====3 file3 es diferente

Uso de bdiff con archivos grandes

Si compara archivos muy grandes, use bdiff en lugar de diff. Ambos programas trabajan de una forma similar:

$ bdiff leftfile rightfile

Use bdiff en vez de diff para archivos que tengan más de 3500 líneas.

Buscar archivos (find)

El comando find busca archivos que cumplan las condiciones que especifique el usuario, comenzando por el directorio que nombre. Por ejemplo, si quiere buscar nombres de archivos que concuerden con determinado patrón o que hayan sido modificados durante un periodo de tiempo determinado.

Al contrario que la mayoría de los comandos, las opciones de find tienen una longitud de varios caracteres, y el nombre del directorio inicial debe ir antes que éstos en la línea de comando, como se indica a continuación:

$ find directorio opciones

donde directorio es el nombre del directorio inicial y opciones representa las opciones del comando find.

Cada opción describe un criterio de selección de archivos. Un archivo debe cumplir todos los criterios para ser seleccionado. De este modo, cuántas más opciones aplique, más limitado será el campo. La opción -print indica que el usuario desea que se muestre el resultado. (Como se describirá más adelante, puede utilizar find para ejecutar comandos; en ese caso, deberá ordenarle a find que omita la visualización de los archivos seleccionados.)

La opción -name nombre_de_archivo le indica a find que seleccione archivos que concuerden con nombre_de_archivo. Aquí, nombre_de_archivo se considera como el componente que se encuentra más a la derecha del nombre de ruta de acceso completo de un archivo. Por ejemplo, el componente situado más a la derecha de /usr/lib/calendar sería calendar. A esta parte del nombre de un archivo se la denomina a menudo nombre base.

Por ejemplo, para ver que archivos del directorio en uso y sus subdirectorios terminan en s, escriba:

$ find . -name '*s' -print
./programs
./programs/graphics
./programs/graphics/gks
./src/gks
$

Otras opciones incluyen:

-name nombre_de_archivo

Selecciona archivos cuyo elemento situado más a la derecha concuerda con nombre_de_archivo. Escriba nombre_de_archivo entre comillas si éste incluye patrones de sustitución de nombre de archivo.

-user id_usuario

Selecciona archivos pertenecientes a id_usuario. id_usuario pude ser un nombre de entrada o un número de identificación de usuario.

-group grupo

Selecciona archivos pertenecientes a group.

-m time n

Selecciona archivos que han sido modificados hace n días.

-newer checkfile

Selecciona archivos que han sido modificados más recientemente que checkfile.

Puede especificar un orden de preferencia, combinando opciones entre paréntesis (precedidos por una barra inclinada), (por ejemplo,\(options\) ). Dentro de este tipo de paréntesis se puede usar el indicador -o entre las opciones para indicar que find seleccione los archivos que cumplan esta categoría, en vez de aquellos que cumplan ambas.:

$ find . \( -name AAA -o -name BBB \) -print
./AAA
./BBB

Puede invertir el sentido de una opción situando delante de ella un signo de admiración precedido por una barra inclinada. Entonces, find seleccionará archivos a los que no afecte dicha opción:

$ find . \!-name BBB -print
./AAA

También puede usar find para aplicar comandos a los archivos que éste seleccione con la opción:

-exec command '{}' \;

Dicha opción termina con un punto y coma precedido por una barra inclinada (\;). Las llaves entre comillas se reemplazan por los nombres de archivo que find selecciona.

Como ejemplo, puede usar find para eliminar automáticamente archivos de trabajo temporales. Si nombra coherentemente sus archivos temporales, puede utilizar find para buscarlos y destruirlos siempre que le estorben. Por ejemplo, si llama a sus archivos temporales junk o dummy, el comando los encontrará y eliminará

$ find . \( -name junk -o -name dummy \) -exec rm '{}' \;

Si desea más información sobre el comando find(1), consulte man Pages(1): User Commands.

Seguridad de archivos y directorios


Nota -

Lea esta sección atentamente. Una buena comprensión de los permisos de archivo siempre es importante para el trabajo cotidiano.


Los permisos de archivo protegen a los archivos y los directorios para que no se puedan leer ni escribir sin autorización. A menudo tendrá archivos que quiera que otras personas puedan leer pero no cambiar. En otras ocasiones, deberá compartir archivos ejecutables (programas). Los permisos de archivo le permiten controlar el acceso a sus archivos.

Estos son los tipos básicos de acceso de archivos y directorios:

Existen tres categorías de usuarios para los que puede establecer permisos:

Mostrar permisos y estado (ls -l)

Ya ha utilizado el comando ls para listar archivos. El comando ls dispone de muchas opciones. .Use la opción -l para mostrar una lista con formato largo. Los archivos y directorios se listan por orden alfabético. La Figura 3-2 ejemplifica este método para mostrar archivos:

Figura 3-2 Mostrar permisos y estado

Graphic

El primer carácter de la línea indica el tipo de archivo. Un guión (-) es un archivo corriente; una d indica un directorio, y otros caracteres pueden indicar tipos de archivos especiales.

Los nueve caracteres siguientes indican los permisos del archivo o el directorio. Dichos caracteres están formados por tres grupos de tres elementos, que indican los permisos del propietario del archivo, del grupo de dicho propietario y del mundo respectivamente. Los permisos para emptyfile son rw-r--r--, que indican que el propietario del archivo puede leerlo y escribir en él, que todos pueden leerlo y nadie puede ejecutarlo. Los permisos del directorio veggies2 son rwxr-xr-x, que indican que todos tienen permiso para leerlo y ejecutarlo, pero sólo su propietario puede escribir en él.

Además de los permisos de archivo, la pantalla muestra la siguiente información:

Use el comando cd para desplazarse al directorio de usuario y pruebe el comando ls -l. Por supuesto, el resultado que obtenga será diferente al del ejemplo.

Ahora intente escribir un comando como éste:

$ ls -l nombre_de_directorio

donde nombre_de_directorio es el nombre de un directorio existente en el sistema de archivos. Cuando le pone nombre a un directorio, el comando ls -l imprime información relativa a todos los archivos y directorios (si los hay) de dicho directorio.

Listar archivos "ocultos" (ls -a)

Hay algunos archivos que no son listados por el comando ls. Dichos archivos comienzan por el carácter. (llamado "punto"), como por ejemplo.cshrc,.login o.profile. Use el comando ls -a para listar los citados archivos punto:

$ ls -a
.
..
.cshrc
.login
.profile
emptyfile

Observe que los archivos que comienzan por. son listados antes que los demás. Hay dos archivos especiales en este listado: el archivo. es la referencia del directorio en uso, y el archivo.. es la referencia del directorio maestro.

Hablando en general, los archivos que comienzan por. son usados por utilidades del sistema y el usuario normalmente no los modifica. Existen algunas excepciones al respecto.

Cambiar permisos (chmod)

Use el comando chmod para cambiar los permisos de un archivo o un directorio. El usuario debe ser el propietario del archivo o del directorio, o tener acceso al directorio raíz para cambiar sus permisos. La forma general del comando chmod es:

chmod permisos nombre

donde permisos indica los permisos que se quieren cambiar y nombre es el nombre del archivo o directorio afectado.

Los permisos pueden especificarse de varias formas. A continuación se cita uno de los métodos más sencillos:

  1. Usar una o más letras para indicar los usuarios implicados:

    • u (para el usuario)

  2. g (para el grupo)

  3. o (para otros)

  4. a (all; para todas las categorías anteriores)

  5. Indicar si los permisos se van a agregar (+) o eliminar (-).

  6. Utilizar una o más letras para indicar los permisos:

    • r (read; de lectura)

    • w (write; de escritura)

    • x (execute; de ejecución)

En el ejemplo siguiente, se agrega un permiso de lectura al directorio carrots para los usuarios que pertenezcan al mismo grupo (de esta forma, permisos es g+w y nombre es carrots):

$ ls -l carrots
drwxr-xr-x  3 user2           1024 Feb 10 11:15 carrots
$ chmod g+w carrots
$ ls -l carrots
drwxrwxr-x  3 user2           1024 Feb 10 11:15 carrots
$

Como puede ver, el guión (-) del conjunto de caracteres de grupo se cambia por una w como resultado del uso del comando.

Para que otros usuarios que no pertenezcan al grupo no puedan leer ni ejecutar este mismo directorio (permisos es o-rx), tendría que escribir lo siguiente:

$ ls -l carrots
drwxrwxr-x  3 user2           1024 Feb 10 11:15 carrots
$ chmod o-rx carrots
$ ls -l carrots
drwxrwx---  3 user2           1024 Feb 10 11:15 carrots
$

Ahora, la r (de read) y la x (de execute) del conjunto de caracteres correspondiente a otros usuarios se cambian por guiones (-).

Cuando cree un archivo o un directorio nuevo, el sistema le asignaráautomáticamente permisos.

En general, la configuración predeterminada para los archivos nuevos es:

-rw-r--r--

y para los directorios nuevos es:

drwxr-xr-x

Por consiguiente, para hacer ejecutable un archivo nuevo como turnip su propietario (user2) deberá introducir lo siguiente:

$ ls -l turnip
-rw-r--r--  3 user2           1024 Feb 10 12:27 turnip
$ chmod u+x turnip
$ ls -l turnip
-rwxr--r--  3 user2           1024 Feb 10 12:27 turnip
$

Si quiere afectar a las tres categorías de usuarios a la vez, use la opción a. Si quiere hacer que un archivo nuevo como garlic sea ejecutable por todos, tendrá que introducir lo siguiente:

$ ls -l garlic
-rw-r--r--  3 user2           1024 Feb 10 11:31 garlic
$ chmod a+x garlic
$ ls -l garlic
-rwxr-xr-x  3 user2           1024 Feb 10 11:31 garlic
$

Como resultado de esto, el indicador x aparecerá en las tres categorías.

También puede cambiar los permisos de grupos de archivos o directorios utilizando carácter comodín *. Por ejemplo, para cambiar los permisos de todos los archivos del directorio actual veggies para que sólo el usuario pueda escribir en ellos, deberá escribir lo siguiente:

$ pwd
/home/user2/veggies
$ ls -l
-rwxrwxrwx  3 user2          21032 Feb 12 10:31 beats
-rwxrwxrwx  2 user2             68 Feb 10 11:09 corn
-rwxrwxrwx  3 user2          12675 Feb 08 09:31 garlic
-rwxrwxrwx  1 user2           1024 Feb 14 16:38 onions
$ chmod go-w *
$ ls -l
-rwxr-xr-x  3 user2          21032 Feb 12 10:31 beats
-rwxr-xr-x  2 user2             68 Feb 10 11:09 corn
-rwxr-xr-x  3 user2          12675 Feb 08 09:31 garlic
-rwxr-xr-x  1 user2           1024 Feb 14 16:38 onions
$

En este ejemplo se incluye el comando pwd para mostrar que el directorio en el que realiza la operación chmod debe ser el actual.

Establecer permisos absolutos

Hasta el momento, en esta presentación de los permisos sólo se ha incluido el comando chmod para cambiar permisos relativos a la configuración actual. Si utiliza una forma diferente del comando chmod, que aplica códigos numéricos para especificar permisos, puede establecer el permiso de un archivo o un directorio de manera absoluta.

La sintaxis de este modo de utilizar el comando chmod es:

chmod numcode name

donde numcode es el código numérico y name es el nombre del archivo o del directorio al que está cambiando los permisos.

El código numérico completo consta de tres números. Se usa un número para cada una de las tres categorías: usuario, grupo y otros. Por ejemplo, el siguiente comando establece permisos absolutos de lectura, escritura y ejecución para el usuario y el grupo, y sólo permiso de ejecución para otros usuarios:

$ chmod 771 garlic

La Tabla 3-1 ilustra cómo el código 771 representa los permisos asignados a garlic.

Tabla 3-1 Permisos de garlic

Permiso 

Usuario 

Grupo 

Otros 

Lectura 

Escritura 

Ejecución 

Total 

Cada columna de la Tabla 3-1 representa una de las categorías: usuario, grupo y otros. Para establecer permisos de lectura se agrega un 4 en la columna apropiada, para establecer permisos de escritura un 2 y para permisos de ejecución un 1. El total de las tres columnas, en la última hilera de la tabla, es el código numérico completo.

A continuación se muestra otro ejemplo del uso de este método de establecer permisos absolutos, incluyendo el comando ls -l para demostrar el resultado:

$ ls -l onion
-rw-r--r--  3 user2           1024 Feb 10 11:46 onion
$ chmod 755 onion
$ ls -l onion
-rwxr-xr-x  3 user2           1024 Feb 10 11:48 onion
$

Se establecen los permisos del archivo onion para que el usuario pueda leerlo, escribir en él o ejecutarlo; los miembros del grupo puedan leerlo y ejecutarlo y otros usuarios puedan también leerlo y ejecutarlo. La Tabla 3-2 muestra el desglose de los códigos numéricos utilizados para establecer los permisos de onion.

Tabla 3-2 Permisos de onion

Permiso 

Usuario 

Grupo 

Otros 

Lectura 

Escritura 

Ejecución 

Total 

Por supuesto, para conceder permisos de lectura, escritura y ejecución al propio usuario, a su grupo o a otros usuarios respecto al archivo cabbage, escribiría lo siguiente:

$ ls -l cabbage
-rw-r--r--  3 user2           1024 Feb 10 11:51 cabbage
$ chmod 777 cabbage
$ ls -l cabbage
-rwxrwxrwx  3 user2           1024 Feb 10 11:53 cabbage
$

La Tabla 3-3 muestra el desglose de este ejemplo.

Tabla 3-3 Permisos de cabbage

Permiso 

Usuario 

Grupo 

Otros 

Lectura 

Escritura 

Ejecución 

Total 

El código numérico 777 representa el nivel de permisos máximo que puede conceder.

Se puede utilizar el carácter comodín * para establecer permisos absolutos para todos los archivos del directorio, del mismo modo que se cambian los permisos relativos. Por ejemplo, para establecer permisos absolutos de todos los archivos del directorio veggies de modo que el usuario pueda leer, escribir y ejecutar dichos permisos, su grupo pueda leerlos y ejecutarlos, y los demás usuarios puedan sólo ejecutarlos, tendría que escribir lo siguiente:

$ pwd
/home/user2/veggies
$ ls -l
-rwxrwxrwx  3 user2          21032 Feb 12 10:31 beats
-rwxrwxrwx  2 user2             68 Feb 10 11:09 corn
-rwxrwxrwx  3 user2          12675 Feb 08 09:31 garlic
-rwxrwxrwx  1 user2           1024 Feb 14 16:38 onions
$ chmod 751 *
$ ls -l
-rwxr-x--x  3 user2          21032 Feb 12 10:31 beats
-rwxr-x--x  2 user2             68 Feb 10 11:09 corn
-rwxr-x--x  3 user2          12675 Feb 08 09:31 garlic
-rwxr-x--x  1 user2           1024 Feb 14 16:38 onions
$

En este ejemplo se incluye el comando pwd para ilustrar que el directorio en el que realiza esta operación debe ser el directorio actual. El comando ls -l se muestra sólo para ilustrar los cambios que han sufrido los permisos. Cuando se establecen permisos absolutos no es necesario saber qué permisos están en activo.

Si desea más información acerca del comando chmod(1), consulte man Pages(1): User Commands.