Laboratorio 03
Laboratorio 03
Laboratorio 03
CONCEPTOS BÁSICOS
SOBRE LINUX
“Un sistema operativo es un programa que permite al usuario interactuar con el ordenador
y sus componentes (monitor, disco duro, impresora, etc) y que facilita la realización de
tareas básicas como copiar o mover ficheros de un sitio a otro, editar archivos de texto,
establecer una conexión a internet o hacer copias de seguridad”.
• Libre: Se puede descargar de internet, se puede copiar y distribuir sin que por ello se incurra en
ningún tipo de delito. La licencia que establece los términos de uso, copia y distribución se denomina
Licencia GNU (www.gnu.org)
• Hecho por voluntarios: Linux no se creó para obtener beneficios con él sino para satisfacer una serie
de necesidades a la hora de trabajar con el ordenador. Hoy día sigue funcionando así. Cuando alguien
necesita un determinado programa, simplemente lo crea y lo pone al servicio de la comunidad para
que lo use y para que cada cual lo mejore y lo adapte a sus propias necesidades.
• Multiplataforma: Hay versiones de Linux para gran cantidad de plataformas: todos los PCs basados
en procesadores Intel o AMD, ordenadores Digital/Compaq con procesadores Alpha, ordenadores
Apple, ultraportátiles como el Asus Eee e incluso dispositivos móviles como el Sharp Zaurus.
• Estable: Linux es un sistema operativo muy maduro, probado durante mucho tiempo. Hay muchos
servidores que llevan funcionando bajo Linux de forma ininterumpida muchos años sin un solo
cuelgue.
• Eficiente: Linux aprovecha bien los recursos hardware. Incluso los viejos Pentium pueden funcionar
bien con Linux y servir para alguna tarea.
• Hay miles de programas libres: Hay una gran cantidad de programas, desde procesadores de texto
hasta programas de dibujo pasando por todo tipo de servidores, totalmente libres y gratuitos que se
pueden descargar e instalar desde el propio entorno de Linux.
Por ejemplo, si desde una ventana de terminal tecleamos el comando date, se mostrará como resultado la
fecha y la hora actual del sistema. Se podría haber averiguado la fecha haciendo clic con el ratón sobre el
reloj del sistema, en la esquina superior derecha de la pantalla, pero claro, eso es válido en el caso de que
el reloj del sistema esté en ese lugar y de que permita mostrar un calendario. En definitiva, en un terminal,
escribiendo date se obtiene la hora y la fecha, ya se trate de un ordenador doméstico o un servidor de una
agencia espacial independientemente de la versión de Linux utilizada. Sin embargo, realizar una tarea en
un entorno gráfico puede ser muy diferente incluso en ordenadores similares con versiones similares de
Linux ya que estos entornos son muy personalizables y a veces no aparecen los mismos menús ni están
instalados los mismos programas.
Se puede usar Linux sin tener que instalarlo mediante algunos de los siguientes métodos:
• Live-CD: Un live-CD es un disco que permite arrancar Linux y ejecutar programas desde el mismo
disco. Casi todos los discos de instalación de Linux funcionan también como live-CD lo que da la
oportunidad de probar el funcionamiento primero, e instalarlo en nuestro ordenador si nos gusta
después.
• Lápiz de memoria (pen drive): Hay versiones de Linux especialmente ligeras en cuanto a
requerimientos (necesitan poca RAM y poca CPU para funcionar) que se pueden arrancar desde un
lápiz de memoria). El lector puede encontrar más información en http://www.pendrivelinux.com/ así
como instrucciones detalladas sobre la instalación y personalización.
• Telnet: Se trata de una aplicación que permite a un usuario conectarse a otro ordenador y trabajar en
él. Si ese ordenador al que se conecta el usuario tiene Linux, entonces trabajará bajo Linux, aunque en
su máquina local tenga otro sistema operativo.
• Mint: Está basada en Ubuntu y su meta es ofrecer un sistema “listo para funcionar”
y que incluya plugins para el navegador, codecs para ver video, programas para
reproducir DVD, Java, etc. de tal forma que el usuario se ahorre instalar y
configurar estos componentes. Linux Mint es compatible con el software de Ubuntu.
• Fedora: Proviene de otra distribución llamada Red Hat que incluía tanto software
libre como software propietario. El objetivo del proyecto Fedora es construir un
sistema operativo completo, de propósito general, basado exclusivamente en
software libre.
• Debian: Fue Ian Murdock, en 1993, quién inició el proyecto Debian e inicialmente
estaba patrocinado por la Free Software Foundation. Es quizás la distribución que
mejor ha sabido mantener a lo largo del tiempo la filosofía del proyecto inicial de
GNU/Linux.
Por su estabilidad y rendimiento, se utiliza con frecuencia en servidores cuya misión
es crítica.
• MEPIS: La primera versión fue creada por Warren Woodford en el 2002 y está
basada en Debian.
Tiene KDE como entorno de escritorio y está dirigida especialmente a los usuarios
que utilizan el ordenador como estación de trabajo, para tareas ofimaticas y
administrativas más que para su uso como servidor.
Tiene como punto fuerte un buen programa de instalación con posibilidad de
reparticionar NTFS y recuperar el sistema operativo.
• Slackware: Creada por Patrick Volkerding, se trata de una de las distribuciones con
más solera. Intenta mantener la tradición de ser una distribución fácil de usar y
estable. Incluye servidores listos para usar en cuanto se instala el sistema: web, ftp y
correo electrónico.
I've currently ported bash(1.08) and gcc(1.40), and things seem to work.
This implies that I'll get something practical within a few months, and
I'd like to know what features most people would want. Any suggestions
are welcome, but I won't promise I'll implement them :-)
Linus (torvalds@kruuna.helsinki.fi)
PS. Yes - it's free of any minix code, and it has a multi-threaded fs.
It is NOT protable (uses 386 task switching etc), and it probably never
will support anything other than AT-harddisks, as that's all I have :-(.
Traducción al castellano:
Hola a todos los que usan minix. Estoy haciendo un sistema operativo (gratuito) para
clónicos AT 386(486) (sólo como hobby, no será grande ni profesional como gnu). Se ha
estado cociendo desde abril y parece que empieza a estar listo. Me gustaría recibir opiniones
sobre lo que a la gente le gusta/disgusta de MINIX, ya que mi SO se parece a él en algunos
aspectos (el mismo diseño físico del sistema de ficheros debido a razones prácticas).
Actualmente, he incluido el bash(1.08) y el gcc(1.40), y la cosa parece que funciona. Esto
quiere decir que tendré algo funcional en unos pocos meses, y me gustaría saber qué
características querría la mayoría de la gente que tuviera. Cualquier sugerencia es
bienvenida, pero no prometo que sea implementada :-) Linus (torvalds@kruuna.helsinki.fi)
PD: Sí - está libre de cualquier código de minix, y tiene un fs multi-hilo. NO es portable (usa
el task switching del 386, etc.), y, probablemente, nunca soportará discos duros distintos a
los AT, es todo lo que tengo :-(.
Linus publicó la primera versión de Linux, la 0.01, en septiembre de 1991. El resto ya es historia...
• Trabajar mediante comandos, en una ventana de terminal, permite realizar tareas de forma similar en
cualquier versión de Linux o Unix.
• Linux es un sistema operativo que se caracteriza por ser libre y, en la mayoría de los casos también
gratuito. Está hecho por voluntarios. Es multiusuario, multitarea y multiplataforma. Es muy estable y
aprovecha bien los recursos de que dispone la máquina. La mayoría de los programas disponibles para
Linux son también libres.
• La principal diferencia entre Linux y Unix radica en que Linux es libre y multiplataforma mientras
que Unix suele ser comercial y muy orientado al hardware. Windows también es un sistema operativo
comercial y las aplicaciones para este SO también suelen ser comerciales.
• Se puede usar Linux sin tener que instalar nada en el ordenador mediante alguno de estos métodos:
live-CD, lápiz de memoria, telnet.
• Una distribución consta del sistema operativo propiamente dicho más el programa de instalación y
una selección de aplicaciones. Algunas de las distribuciones más importantes son Ubuntu, openSUSE,
Mint, Fedora, Debian y Mandriva.
• La primera versión de Linux fue creada por Linus Torvalds en 1991 con el fin de mejorar MINIX, un
sistema operativo tipo UNIX utilizado en la universidad.
2. Una distribución de Linux es a) el núcleo del SO, junto con un programa de instalación y una
selección de aplicaciones, b) el núcleo del SO, junto con un entorno gráfico y una selección de
aplicaciones o c) las dos respuestas anteriores son correctas.
4. a) ¿Cuáles son las diez distribuciones de Linux más populares del último mes? b) y del último
año?
6. Para ejecutar comandos de Linux en una máquina remota mediante telnet hace falta instalar antes
Linux en la máquina local. a) Verdadero b) Falso.
7. a) ¿La primera versión de Linux se creó para un tipo de máquina concreta o podía funcionar con
cualquier hardware? b) Sucede lo mismo hoy día.
8. La mascota de Linux se llama a) Tuxedo, b) Tux, c) Pingu o d) todas las anteriores son correctas.
10. Citar tres distribuciones de Linux ligeras (con pocas necesidades en cuanto a recursos hardware)
que se puedan instalar en un lápiz de memoria.
El nombre de usuario no puede contener caracteres especiales como signos de puntuación (, ; :), la barra
invertida (/), etc. La clave debe ser suficientemente larga y difícil de adivinar. No es buena idea utilizar
como clave el nombre, apellidos, el número de teléfono, el número de la tarjeta de crédito o un nombre
de mascota. Si la clave que utiliza un usuario es corta o fácil de adivinar corre el riesgo de que alguien
entre en su sistema y borre o modifique información importante.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
nombre_de_usuario@nombre_de_la_máquina:~$
¡Linux ya está listo para ejecutar comandos! El lector puede probar con el comando “date”, visto como
ejemplo en el capítulo anterior.
luisjose@ubuntu-desktop:~$ date
Thu Mar 5 16:55:13 GMT 2009
luisjose@ubuntu-desktop:~$
luisjose@ubuntu-desktop:~$ pwd
/home/luisjose
2.3.2 ls
El comando ls muestra el contenido del directorio actual. Por defecto, los archivos ocultos no se
muestran. Éste es seguramente el comando que más se utiliza.
luisjose@ubuntu-desktop:~$ ls
Desktop Documents Examples Music Pictures Public Templates Videos
Todas las opciones disponibles, tanto para ls como para el resto de comandos se pueden consultar
mediante las páginas del manual, con el comando man seguido del comando del que se quiere obtener
información:
luisjose@ubuntu-desktop:~$ man ls
Esto dará información detallada sobre el comando ls. Para salir del manual basta pulsar la letra “q”.
2.3.3 cd
El comando cd (change dir) permite cambiar de directorio. Si se utiliza tal cual, sin ningún tipo de
argumento, cambia al directorio de trabajo personal. Si se utiliza seguido de una ruta, cambia al
directorio que se indica.
luisjose@ubuntu-desktop:~$ pwd
/home/luisjose
luisjose@ubuntu-desktop:~$ cd /etc
luisjose@ubuntu-desktop:/etc$ pwd
/etc
En este caso, el usuario estaba en su directorio de trabajo, y ha “saltado” al directorio /etc. El lector puede
teclear el comando ls si tiene curiosidad por ver lo que hay dentro.
Las rutas pueden ser absolutas o relativas. Una ruta es absoluta cuando comienza por el carácter “/” y
relativa cuando comienza por cualquier otro carácter.
En el ejemplo anterior se ha usado una ruta absoluta, esto es, /etc. Veamos cómo cambiar a otros
directorios utilizando otras rutas absolutas:
luisjose@ubuntu-desktop:/$ cd /usr/local/
luisjose@ubuntu-desktop:/usr/local$ ls
bin etc games include lib man sbin share src
luisjose@ubuntu-desktop:/usr/local$ cd /var/spool/
luisjose@ubuntu-desktop:/var/spool$ ls
anacron cron cups cups-pdf mail openoffice
Una ruta relativa es algo así como una ruta parcial. La ruta que se aplica es la concatenación de la ruta
actual y de la ruta relativa. Veamos un ejemplo:
luisjose@ubuntu-desktop:/var/spool$ cd
luisjose@ubuntu-desktop:~$ pwd
/home/luisjose
luisjose@ubuntu-desktop:~$ cd Music
luisjose@ubuntu-desktop:~/Music$ pwd
/home/luisjose/Music
Recordemos que el comando cd sin argumentos, nos lleva al directorio de trabajo personal.
Las rutas, tanto las absolutas como las relativas se pueden utilizar en la mayoría de comandos. No son
algo específico que se utilice sólo con cd.
Podemos, por ejemplo, utilizar rutas como argumentos del comando ls.
luisjose@ubuntu-desktop:~/Music$ ls /boot/grub/
default installed-version minix_stage1_5 xfs_stage1_5
device.map jfs_stage1_5 reiserfs_stage1_5
e2fs_stage1_5 menu.lst stage1
fat_stage1_5 menu.lst~ stage2
Dos puntos (..) hacen referencia al directorio que hay justo a un nivel superior.
luisjose@ubuntu-desktop:~/Music$ ls ..
Desktop Documents Examples Music Pictures Public Templates Videos
ls .. muestra el contenido del directorio /home/luisjose que es el directorio que hay justo a un
nivel superior de /home/luisjose/Music
luisjose@ubuntu-desktop:~/Music$ cd ..
luisjose@ubuntu-desktop:~$ pwd
/home/luisjose
2.3.4 mkdir
Se pueden crear directorios con el comando mkdir. Por ejemplo, para crear una estructura de carpetas
donde un estudiante guardará información sobre sus asignaturas según el siguiente esquema:
/Documentos
/Escritorio
/Imágenes
/Música
/examenes_antiguos
/algebra
/home/luisjose /apuntes
/analisis
/matematicas /curso_01
/libros_de_ejercicios
/fisica
/videos
/informatica /compiladores_pascal
/Video
~$ mkdir matematicas
~$ cd matematicas/
~/matematicas$ mkdir curso_01
~/matematicas$ cd curso_01/
~/matematicas/curso_01$ mkdir algebra analisis fisica informatica
~/matematicas/curso_01$ ls
algebra analisis fisica informatica
~/matematicas/curso_01$ cd algebra/
~/matematicas/curso_01/algebra$ mkdir examenes_antiguos apuntes
~/matematicas/curso_01/algebra$ cd ..
~/matematicas/curso_01$ cd fisica
~/matematicas/curso_01/fisica$ mkdir libros_de_ejercicios
~/matematicas/curso_01/fisica$ mkdir videos
~/matematicas/curso_01/fisica$ cd ..
~/matematicas/curso_01$ cd informatica/
~/matematicas/curso_01/informatica$ mkdir compiladores_pascal
Nótese que ya no se muestra en el ejemplo el prompt completo, con el nombre de usuario y el nombre de
la máquina. Se seguirá en el libro esta norma a partir de ahora.
El comando cat muestra por pantalla el contenido de un fichero y, cuando termina, el usuario está otra vez
de vuelta en la línea de comandos.
Por ejemplo,
~$ cat /var/log/dmesg
muestra el contenido del fichero dmesg que está dentro del directorio /var/log. Si el lector ha
probado a hacerlo él mismo, se habrá dado cuenta de que es imposible ver todo el contenido de este
fichero, porque ha pasado por pantalla muy rápido. Por eso cat se suele utilizar para visualizar el
contenido de archivos pequeños.
El comando more hace lo mismo que cat, a diferencia de que muestra el fichero pantalla a pantalla, es
decir, llena de texto la pantalla y se espera a que el usuario pulse la tecla <espacio> para pasar a la
siguiente:
~$ more /var/log/dmesg
El comando less es el más versátil de los tres, ya que permite moverse hacia delante y hacia atrás dentro
del fichero, utilizando los cursores o las teclas de “AvPág” y “RePág”:
En cualquier momento se puede interrumpir la visualización y volver al símbolo del sistema pulsando la
letra “q”.
~$ head /boot/grub/menu.lst
# menu.lst - See: grub(8), info grub, update-grub(8)
# grub-install(8), grub-floppy(8),
# grub-md5-crypt, /usr/share/doc/grub
# and /usr/share/doc/grub-doc/.
## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
~$ tail /boot/grub/menu.lst
root (hd0,0)
kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=409e68a1-6123-476f-abf7-
042854b68f3c ro single
initrd /boot/initrd.img-2.6.24-19-generic
Por defecto, tanto head como tail muestran 10 líneas, pero eso se puede cambiar con la opción -n.
~$ ls
Desktop Documents Examples Music Pictures Public Templates Videos
~$ touch prueba.txt
~$ ls
Desktop Examples Pictures Public Videos
Documents Music prueba.txt Templates
~$ cat prueba.txt
~$
Se puede ver en el ejemplo cómo se ha creado el archivo prueba.txt pero al visualizar su contenido
con cat, no aparece nada en pantalla, por tanto está vacío.
~$ee prueba.txt
Presionando la tecla ESC, el usuario puede salir al menú principal y guardar el fichero.
Podemos comprobar ahora cuál es el contenido del fichero:
~$ cat prueba.txt
Hola, aquí estoy aprendiendo Linux.
Otro editor muy simple es nano. Se deja al lector curioso probar su funcionamiento y compararlo con
ee. En el hipotético caso de no estar instalado alguno de estos editores, su instalación es muy sencilla,
basta con teclear sudo apt-get install seguido del nombre del programa que queremos instalar.
Por ejemplo, si queremos instalar ee:
El programa mcedit es un editor algo más sofisticado que ee o nano (al menos en apariencia) y es una
parte de mc (Midnight Commander), un programa muy al estilo del famoso Norton Commander de MS-
DOS . Vamos a modificar el archivo prueba.txt creado anteriormente. Antes de eso, instalaremos mc,
ya que no está instalado por defecto:
Con la tecla F2 guardamos los cambios y con dos pulsaciones de ESC (o con la tecla F10) salimos del
programa.
Comprobamos ahora que todo se ha grabado bien:
~$ cat prueba.txt
Hola, aquí estoy aprendiendo Linux.
Me encanta, se pueden hacer muchas cosas.
Hemos dejado para el final al editor de Linux por excelencia, se trata de vi. A primera vista es el más
difícil de utilizar, lo cual es cierto, y parece que tiene menos opciones, pero muy al contrario se trata de
un programa muy potente. Cualquier “linuxero” que se precie debe saber manejar bien este programa.
Añadiremos una línea más al fichero prueba.txt. Para ello, seguiremos los siguientes pasos:
~$ vi prueba.txt
• Hay una serie de directorios predefinidos como /bin, /dev, /home, /etc, /var, etc. para todos los
sistemas Linux.
• Hay rutas absolutas, que comienzan por el carácter “/”, y que definen una ruta efectiva completa y
rutas relativas, que no comienzan por el carácter “/”, y cuya ruta efectiva sería la concatenación del
directorio actual con esa misma ruta relativa.
2. Para entrar en un sistema Linux hace falta a) nombre de usuario, contraseña y dirección IP, b)
nombre de usuario y contraseña o c) únicamente una contraseña..
5. ¿En qué día de la semana naciste?, utiliza la instrucción cal para averiguarlo.
8. Muestra todos los archivos que hay en /etc y todos los que hay dentro de cada subdirectorio, de
forma recursiva (con un solo comando).
9. Muestra todos los archivos del directorio /usr/X11R6/bin ordenados por tamaño (de mayor a
menor). Sólo debe aparecer el nombre de cada fichero, sin ninguna otra información adicional.
10. Muestra todos los archivos del directorio /etc ordenados por tamaño (de mayor a menor) junto
con el resto de características, es decir, permisos, tamaño, fechas de la última modificación, etc. El
tamaño de cada fichero debe aparecer en un formato “legible”, o sea, expresado en Kb, Mb, etc.
11. Muestra todos los archivos del directorio /bin ordenados por tamaño (de menor a mayor).
Sólo debe aparecer el tamaño y el nombre de cada fichero, sin ninguna otra información adicional. El
tamaño de cada fichero debe aparecer en un formato “legible”, o sea, expresado en Kb, Mb, etc.
12. Muestra el contenido del directorio raíz utilizando como argumento de ls una ruta absoluta.
18. Crea la siguiente estructura de directorios dentro del directorio de trabajo personal:
multimedia
|
--------------------------------------------------
| | | |
musica imagenes video presentaciones
|
--------------
| |
personales otras
19. Crea un fichero vacío dentro del directorio musica, con nombre estilos_favoritos.txt
20. Utiliza tu editor preferido para abrir el fichero estilos_favoritos.txt e introduce los
estilos de música que más te gusten. Guarda los cambios y sal.
En muchas ocasiones es necesario realizar acciones sobre muchos archivos o directorios al mismo
tiempo. Por ejemplo:
Se pueden crear patrones usando símbolos comodín para no tener que escribir todos y cada uno de los
ficheros.
Para mostrar cada uno de los ficheros que comienzan por docu seguido de un número del uno al seis se
puede utilizar un patrón:
$ cat fich[1-6]
Si se quiere mostrar simplemente el contenido de todos los ficheros que comienzan por fich se puede
hacer:
$ cat fich*
$ ls /usr/bin/a*s
El símbolo “?” representa un carácter cualquiera. De esta forma, la siguiente sentencia muestra todos los
ficheros del directorio /usr/bin cuyo nombre comienza por g, sigue cualquier carácter, a continuación
sigue una o y termina con cualquier cadena de caracteres incluida la cadena vacía:
$ ls /usr/bin/g?o*
Ya se ha visto al principio del capítulo un ejemplo del uso de los corchetes. Los corchetes se utilizan de
una forma parecida al carácter “?” aunque, a diferencia de éste, permiten especificar un poco más. Por
ejemplo [adfg] significa cualquiera de los caracteres a, d, f o g. [Hh]ola es un patrón que encaja
tanto con Hola como con hola. [a-z]* representa cualquier cadena de caracteres que comienza con una
letra minúsculas.
$ cp /etc/hosts /home/alumno/pruebas/
La sentencia anterior copia el fichero hosts, que se encuentra en el directorio /etc al directorio /home/
alumno/pruebas/.
Si no se especifica ningún directorio origen, se toma por defecto el directorio actual. Por ejemplo:
$ cp *.odt textos/
copia todos los archivos con la extensión odt del directorio actual al directorio textos.
Cuando se quiere especificar como directorio destino el directorio actual se utiliza el carácter “.”
Por ejemplo:
$ cp /usr/bin/g* .
copia todos los ficheros del directorio /usr/bin que comienzan por la letra g al directorio actual.
3.2.2 mv
El comando mv sirve para dos cosas, para mover y para cambiar de nombre. Se puede hacer cualquiera de
las dos cosas por separado o las dos cosas al mismo tiempo. Por ejemplo:
En cambio
$ mv carta.txt Documentos/
~$ cd Documentos/
~/Documentos$ mkdir correspondencia
~/Documentos$ mv carta.txt correspondencia/carta01.txt
3.2.3 rm
El comando rm se utiliza para borrar ficheros. Es importante destacar que estos ficheros no se envían a
una papelera así que NO SE PUEDEN RECUPERAR UNA VEZ BORRADOS.
Ejemplo:
$ rm *.txt
Esta sentencia borra todos los archivos con la extensión txt del directorio actual.
Ejemplo:
~$ mkdir multimedia2
~$ cp multimedia/* multimedia2
cp: se omite el directorio «multimedia/imagenes»
cp: se omite el directorio «multimedia/musica»
cp: se omite el directorio «multimedia/presentaciones»
cp: se omite el directorio «multimedia/video»
~$ ls multimedia2
~$
Se ha hecho una copia del contenido del directorio multimedia al directorio multimedia2 pero no
se ha copiado ningún archivo ¿qué ha pasado? Sencillamente no se ha hecho una copia recursiva (con la
opción -R). Se ha intentado copiar únicamente justo dentro del directorio multimedia pero no a un
nivel inferior. Como a ese nivel no había ningún fichero, no se ha copiado nada.
~$ cp -R multimedia/* multimedia2
~$ ls -R multimedia2
multimedia2:
imagenes musica presentaciones video
multimedia2/imagenes:
otras personales
multimedia2/imagenes/otras:
multimedia2/imagenes/personales:
multimedia2/musica:
estilos_favoritos.txt
multimedia2/presentaciones:
multimedia2/video:
Como se puede comprobar, se han copiado tanto la estructura de directorios como los contenidos de cada
uno de ellos.
El comando mv funciona de forma análoga a cp, pero mueve en lugar de copiar. Cuando se trata de
renombrar, funciona exactamente igual que con los ficheros.
Ejemplo:
~$ mv multimedia2 multimedia_copia
~$ rm multimedia_copia/
rm: no se puede borrar «multimedia_copia/»: Es un directorio
Se obtiene un error, ¿qué sucede? Si el lector es perspicaz, sabrá cómo solucionar este problema...
...En efecto, hay que borrar el contenido de forma recursiva:
~$ rm -Rf multimedia_copia/
Además de la opción -R, se ha incluido la opción -f que hace que no se nos pida confirmación por cada
elemento que se quiere borrar.
Ejemplos Significado
* Cualquier cadena de caracteres.
*f* Cadena de caracteres que contienen una f.
z* Cadena de caracteres que empieza por z y le sigue cualquier cosa.
a? Una cadena formada por dos caracteres, el primero una a y el segundo, cualquier
carácter.
[Dd]ocument
o Puede ser Documento o documento.
A[a-z][0-6] Una cadena formada por la A mayúscula seguida de cualquier letra minúscula,
seguida a su vez de un dígito del 0 al 6.
1. Muestra todos los archivos del directorio actual que son imágenes jpg.
2. Muestra todos los archivos del directorio /usr/bin que empiecen por la letra j.
3. Muestra los archivos que empiecen por k y tengan una a en la tercera posición, dentro del
directorio /usr/bin.
5. Muestra todos los archivos que hay en /etc y todos los que hay dentro de cada subdirectorio, de
forma recursiva.
6. Crea un directorio en tu directorio de trabajo con nombre prueba. Copia el archivo gzip del
directorio /bin al directorio prueba. Crea un duplicado de gzip con nombre gzip2 dentro de
prueba.
7. Cambia el nombre de prueba a prueba2. Crea prueba3 en el mismo nivel que prueba2 y mueve
todos los ficheros de prueba2 a prueba3. Borra prueba2.
8. Crea un fichero vacío con nombre “*?Hola caracola?*”. ¿Se puede? En caso de que se pudiera,
¿sería recomendable poner nombres así? Razona la respuesta.
11. Mueve el archivo peliculas.txt, que está dentro de multimedia/video, al directorio que está justo
a un nivel superior. Ahora el archivo debe llamarse mis_peliculas.txt en lugar de películas.
Vimos en un capítulo anterior que los ficheros deben estar organizados en directorios (carpetas) con el fin
de tenerlos ordenados y poder localizarlos convenientemente.
Volvamos a nuestro ejemplo de la oficina. Cada papel está en su sitio, hay carpetas y subcarpetas y todo
está organizado. Ahora bien, el contable deberá tener acceso por ejemplo a las carpetas donde se
encuentras las facturas y los recibos pero no tienen por qué tener acceso a la información sobre desarrollo
de productos o marketing. En un sistema Linux, las carpetas y los archivos funcionan de esta manera. Por
ejemplo, los archivos de configuración que se encuentran en el directorio /etc sólo pueden ser
modificados por el administrador del sistema. Esto previene que cualquier usuario pueda cambiar
información crítica y estropear algo.
El superusuario, administrador del sistema o simplemente el root, es un usuario especial que tiene
privilegios para cambiar la configuración, borrar y crear ficheros en cualquier directorio, crear nuevos
grupos y usuarios, etc.
Una vez hecha esta aclaración, pasemos a hacer algo como root:
$ touch /etc/prueba.txt
touch: no se puede efectuar `touch' sobre «/etc/prueba.txt»: Permiso denegado
$ sudo touch /etc/prueba.txt
$ ls /etc/pru*
/etc/prueba.txt
Hemos intentado primero crear el fichero prueba.txt en el directorio /etc como usuario normal y
acto seguido hemos obtenido un error de “Permiso denegado”, lo que quiere decir que un usuario sin
privilegios no puede hacer eso. A continuación lo hemos intentado como administrador, para ello hemos
usado el comando sudo, tras lo que se nos ha preguntado la clave del administrador. Esta vez sí lo hemos
conseguido. No tendría mucho sentido que el sistema no preguntase por la clave, ya que en ese caso
cualquiera podría ejecutar comandos como administrador con el peligro que ello supone.
4.3 PERMISOS
La información sobre grupos, usuarios y permisos se puede obtener mediante el comando ls junto con la
opción -l. Vamos a ver los permisos que tiene establecidos el fichero whatis que se encuentra en el
directorio /usr/bin.
$ ls -l /usr/bin/whatis
-rwxr-xr-x 1 root root 87792 2008-03-12 14:24 /usr/bin/whatis
En la primera columna aparecen los permisos, en la tercera se indica el usuario (en este caso es el
administrador del sistema) y en la cuarta columna aparece el nombre del grupo (que en este caso coincide
con el de usuario).
- r w x r - x r - x
Tipo de Permisos para el dueño Permisos para el grupo al Permisos para el resto
fichero. del fichero. que pertenece el fichero. de usuarios
r Permiso de lectura.
w Permiso de escritura.
x Permiso de ejecución.
Tipo de fichero
l Enlace simbólico.
c Dispositivo especial de caracteres.
b Dispositivo especial de bloques.
p FIFO (estructura de datos).
s Socket (comunicaciones).
- Ninguno de los anteriores. Puede ser un fichero de texto, un binario, etc.
En el caso que nos ocupa tenemos un carácter “-” como tipo de fichero, porque se trata de un binario (un
programa). El dueño del fichero tiene los permisos rwx, lo que quiere decir que puede leer, escribir y
ejecutar el fichero. Que tiene permiso para escribir significa que puede borrarlo, cambiarle el nombre o
editarlo. Tanto el grupo como el resto de usuarios tienen los permisos r-x, lo que significa que pueden
utilizarlo (pueden leerlo y ejecutarlo) pero no lo pueden modificar.
$ whoami
luisjose
$ su alumno
Contraseña:
$ whoami
alumno
$ whoami
alumno
$ exit
exit
$ whoami
luisjose
luisjose@luisjose-xps1330:~$ groups
luisjose adm dialout cdrom floppy audio dip video plugdev scanner lpadmin admin
netdev powerdev sambashare
Los comandos groupadd, groupdel y groupmod permiten crear, borrar y modificar grupos
respectivamente.
$ groupadd oficina_malaga
groupadd: incapaz de bloquear el fichero de grupos
$ sudo groupadd oficina_malaga
$ sudo groupadd oficina_jaen
$ sudo groupadd oficina_madrit
Vemos que si intentamos crear un grupo como usuario sin privilegios obtenemos un error. Para manejar
grupos y usuarios es necesario ejecutar los comandos con privilegios de administrador, por tanto
deberemos teclear sudo antes del comando en cuestión.
Hemos escrito mal el nombre del segundo grupo, ¡que no cunda el pánico!, este problema se puede
solventar con groupmod.
La directiva de la empresa ha decidido cerrar la oficina de Jaén para ahorrar costes y pasar los recursos a
la oficina de Málaga, así que no hará falta el grupo oficina_jaen. Lo podemos borrar con
groupdel.
La gestión de usuarios, al igual que la de grupos, exige que los comandos se ejecuten con los privilegios
del administrador del sistema. Se puede escribir sudo antes de cada comando, o se puede hacer lo
siguiente:
$ sudo bash
Note el lector que el prompt ha cambiado. Ahora se muestra un carácter “#” en lugar de un “$”. A partir
de ahora, todos los comandos se ejecutarán con privilegios de administrador del sistema. Hay que
acordarse de volver al usuario inicial mediante exit.
Es necesario dar de alta a dos usuarios para el grupo oficina_malaga y uno para
oficina_madrid. Habrá un cuarto usuario que estará yendo y viniendo de una oficina a otra, por tanto
se le dará de alta en las dos.
Hemos matado dos pájaros de un tiro. Hemos creado los usuarios y al mismo tiempo los hemos incluido
dentro de los grupos correspondientes. Estos dos pasos se pueden hacer de forma independiente.
El usuario laura pertenece a dos grupos. En primer lugar se ha creado el usuario y al mismo tiempo se
ha añadido al grupo oficina_malaga con la opción –ingroup. Para añadir un usuario existente a un
grupo, se utiliza adduser sin opciones.
Al crear los usuarios, se nos han pedido las claves, no obstante estas claves se pueden cambiar con el
comando passwd.
# passwd pedro
# passwd ana
# passwd laura
Recuerde el lector salir del modo root con el comando exit cuando no tenga que hacer tareas que
requieran privilegios de administrador.
# exit
De ahora en adelante, simplemente se indicará con el carácter “$” que se trabaja como usuario sin
privilegios y con el carácter “#” que se trabaja como root.
Cabe señalar que para cada usuario, se crea por defecto un directorio dentro de /home. Cuando un
usuario se conecta al sistema, “aterriza” en ese directorio. Es lo que hemos denominado anteriormente
como el directorio de trabajo.
$ ls /home/
alumno ana berta ftp laura luisjose pedro
Imaginemos que el fichero informe.txt ha sido creado por el usuario pedro. Por defecto, el dueño
de un archivo es el usuario que lo crea, en este caso pedro. El grupo del usuario pedro, como hemos
visto antes es oficina_malaga.
$ su pedro
$ cd
$ pwd
/home/pedro
$ touch informe.txt
$ ls -l
-rw-r--r-- 1 pedro oficina_malaga 0 2009-03-19 12:46 informe.txt
# mv informe.txt /home/laura/
# cd /home/laura/
# chown laura informe.txt
# ls -l
-rw-r--r-- 1 laura oficina_malaga 0 2009-03-19 12:46 informe.txt
El comando chmod sirve para cambiar los permisos de uno o varios ficheros. Esos mismos permisos que
se pueden ver con ls -l.
$ ls -l
-rw-r--r-- 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
$ chmod +x hola_mundo.rb
$ ls -l
-rwxr-xr-x 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
Hemos añadido el permiso de ejecución al fichero hola_mundo.rb. Vemos que ahora hay tres x, la
que corresponde al dueño del fichero, la de todos los usuarios que pertenecen al grupo y la del resto de
usuarios.
Cuando no se especifica ninguna de estas tres letras correspondientes a los usuarios (u, g, o) como en el
ejemplo anterior, se sobreentiende que nos referimos a todos ellos. Se puede indicar de forma explícita
con el carácter a (all).
Para entenderlo mejor, en la siguiente tabla, se muestran de forma esquemática, los parámetros del
comando chmod:
+
u g o r w x
-
(group)
(user) (others)
usuarios que dar permiso (read) (write) (execution)
dueño del el resto de
pertenecen al quitar permiso lectura escritura ejecución
fichero usuarios
mismo grupo
Quitaremos ahora el permiso de ejecución para el resto de usuarios (others) y daremos permiso de
escritura (write) a los usuarios del mismo grupo (group).
$ ls -l
-rwxr-xr-x 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
$ chmod o-x hola_mundo.rb
$ chmod g+w hola_mundo.rb
$ ls -l
-rwxrwxr-- 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
4 2 1 Total
r w x 4 + 2 + 1 = 7
r w - 4 + 2 + 0 = 6
r - x 4 + 0 + 1 = 5
r - - 4 + 0 + 0 = 4
- w x 0 + 2 + 1 = 3
- w - 0 + 2 + 0 = 2
- - x 0 + 0 + 1 = 1
En efecto
$ ls -l
-rwxr-xr-x 1 pedro oficina_malaga 0 2009-03-19 15:38 hola_mundo.rb
Los permisos de los directorios se pueden cambiar de la misma forma que los ficheros, aunque el
significado es algo diferente. Si un directorio tiene el permiso de lectura quiere decir que se puede ver su
contenido. Si tiene permiso de escritura, quiere decir que se pueden crear ficheros dentro y si tiene
permiso de ejecución quiere decir que se puede entrar dentro.
Comando Acción
Muestra, entre otras cosas, información sobre los permisos, el usuario y el
ls -l
grupo al que pertenece el fichero.
sudo Permite ejecutar comandos como root.
su Cambia de usuario.
whoami Muestra el nombre del usuario actual.
groups Muestra el/los grupos/s a los que pertenece el usuario actual.
groupadd Añade un nuevo grupo.
groupdel Borra un grupo.
groupmod Modifica las características de un grupo.
adduser Añade un nuevo usuario.
userdel Borra un usuario.
usermod Modifica las características de un usuario.
passwd Asigna o cambia la clave de un usuario.
chown Cambia el dueño de un archivo.
chgrp Cambia el grupo al que pertenece un archivo.
chmod Cambia los permisos.
654
rwxrw-rw-
rwxrwxrwx
520
764
r--r-----
3. Crea los usuarios paco y pablo. Estos usuarios deben pertenecer únicamente al grupo oficina1.
4. Crea los usuarios alba y nerea. Estos usuarios deben pertenecer únicamente al grupo oficina2.
5. Como usuario paco Crea un fichero con nombre topsecret.txt en su directorio de trabajo al que
únicamente él tenga acceso, tanto de lectura como de escritura.
6. Crea otro fichero, también como usuario paco, con nombre ventas_trimestre.txt al que tengan
acceso, tanto para leer como para escribir todos los usuarios que pertenezcan al mismo grupo. Se
deben dejar los permisos que haya por defecto para el dueño y para el resto de usuarios. Comprueba
como usuario pablo que puedes modificar el fichero.
7. Como usuario alba, crea un fichero con nombre empleados.txt al que pueda acceder cualquier
usuario para leer su contenido, y cualquier usuario del mismo grupo para leer o escribir.
9. Como usuario pablo, copia un programa del directorio /usr/bin al directorio de trabajo con un
nombre diferente. Por ejemplo xclock se puede copiar como reloj. Mira los permisos de este
10. Cambia los permisos de reloj de tal forma que sólo lo pueda ejecutar el propietario del archivo.
11. Crea el usuario modesto, perteneciente a oficina2. Dentro de su directorio de trabajo, crea un
directorio de nombre compartido_con_todos.
12. Cambia de usuario en el entorno gráfico (botón salir y botón cambiar de usuario) y entra como
modesto. Crea con OpenOffice.org Calc los ficheros telefono_contactos.ods, gastos_marzo.ods y
sueldos.ods. Inserta varias entradas en cada uno de los ficheros y grábalo todo en el directorio
compartido_con_todos.
13. Da permiso de lectura a la carpeta compartido_con_todos y a todos los ficheros que contenga
para todos los usuarios.
14. Restringe el acceso de escritura sobre el fichero telefono_contactos para que sólo lo puedan
modificar los usuarios del grupo al que pertenece su propietario.
15. Cambia los permisos de gastos_marzo para que sólo pueda modificarlo su propietario y leerlo
cualquiera del mismo grupo.
16. Cambia los permisos de sueldos para que sólo su dueño tenga acceso a él, tanto para lectura como
para escritura.
17. Si un usuario tiene permiso de lectura sobre un fichero pero ese fichero se encuentra dentro de un
directorio sobre el que no tiene permiso de lectura, ¿podrá leer el fichero?, haz la prueba.