Sunteți pe pagina 1din 15

Trabajo Práctico No 2

GNU/Linux
1.- Proceso de Arranque
a) Enumere los pasos del proceso de inicio de un sistema GNU/Linux, desde
que se prende la PC hasta que se logra obtener el login en el sistema.

Respondido en la práctica 1.

b) Proceso INIT. ¿Quién lo ejecuta? ¿Cuál es su objetivo?

El proceso de arranque init de Sys V es el primer proceso que se ejecuta en el sistema, es el más importante, del que
dependen el resto de todos los demás
procesos. En el arranque de GNULinux, el núcleo ejecuta init. Este programa, ahora como proceso, cargará los
subprocesos necesarios para la puesta en marcha
del sistema.

Inmediatamente después de que el kernel se cargue en memoria, inicialice el hardware adecuadamente, y monte el
sistema de ficheros, el comando /sbin/init da lugar al primer proceso del sistema, init, que es el padre de todos los
procesos y el encargado de gestionar la configuración de los runlevels para iniciar los servicios adecuados.

Completo en la práctica 1.

c) RunLevels. ¿Qué son? ¿Cuál es su objetivo? Cite los estándar definidos.


¿Dónde se define que Runlevel ejecutar? ¿todas las distribuciones
respetan estos estándares?

Los RUNLEVELS o también llamados NIVELES DE EJECUCIÓN son un concepto importante en los sistemas
UNIX y por extensión en Linux. Hay varios runlevels disponibles, del 0 al 6 (puede haber alguno más, pero
generalmente estos son los que se usan), y cada uno de estos runlevels es una configuración de arranque distinta.
¿Qué quiere decir esto? Entendámoslo bien. Pongamos por caso que tenemos una máquina que tiene dos usos, PC de
escritorio y servidor de red. Estableceríamos entonces dos runlevels distintos. En uno de ellos configuraríamos para
arrancar simplemente el servidor gráfico XWindow y un entorno de ventanas, y en el otro los distintos demonios
servidores: servidor web, servidor DNS...
Cada uno de estos runlevels tendría un número distinto. Si durante una época determinada la máquina sólo va a
funcionar como servidor, la configuraríamos para usar el runlevel correspondiente, que sólo cargaría al inicio los
demonios de los servidores, y no cargaría el servidor gráfico de ventanas XWindow puesto que no lo necesita. Si
durante otra época va a funcionar como PC de escritorio, la configuraríamos para usar el otro runlevel y nos
evitaríamos tener que estar deteniendo los demonios que no necesitamos.
El runlevel 0 es para apagar la máquina, y el runlevel 6 es para reiniciarla. Es obvio que no debemos poner el número
de runlevel por defecto a ninguno de estos dos; de hacerlo, el sistema no llegaría a arrancar. Otros runlevels típicos
son el 3 y el 5 (generalmente significan arrancar el sistema en modo multiusuario; a veces pueden ser equivalentes, o
el 5 arrancar el servidor gráfico X y el 3 no hacerlo -- el equivalente en Debian suele ser el 2). El nivel 1 queda
reservado para el modo monousuario que nos servirá para administrar la máquina; normalmente este modo no tendrá
red y pedirá la password de root antes de permitir ejecutar ningún comando.
En /etc/init.d residen unos scripts, uno por cada servicio, que aceptan siempre un primer argumento, que puede
ser "start" o "stop" (arrancar o detener el servicio). En cada runlevel podremos decidir cuáles de estos scripts se
ejecutarán y cuáles no.
Para hacer esto, cada runlevel tiene un directorio asociado, /etc/rcN.d o bien /etc/rc.d/rcN.d dependiendo
de la distribución de Linux usada, donde N es el número de runlevel correspondiente. Dentro de cada uno de ellos,
hay una serie de enlaces simbólicos que apuntan hacia los scripts de los servicios en /etc/init.d. Para un
runlevel determinado, sólo habrá enlaces para los servicios que se quieran ejecutar en ese runlevel.
Los nombres de esos enlaces son ANNservicio, donde A es una letra, y NN es un número. El objetivo de esta
forma de nombrarlos es que en un runlevel determinado se ejecutan en orden alfabético. Así, para una misma letra, un
número bajo indica que será ejecutado antes.

d) Archivo /etc/inittab. ¿Cuál es su finalidad? ¿Qué tipo de información se


almacena en el? ¿Cuál es la estructura de la información que en el se
almacena?

En este fichero definiremos qué es lo que el sistema ejecutará en cada runlevel y todos esos extraños scripts de
/etc/init.d empezarán a tener sentido.
El fichero tiene diversas entradas, del tipo:
identificador:runlevels:acción:orden_a_ejecutar
                        

Donde:
 identificador es un nombre asociado a cada línea del fichero generalmente no superior a 4 caracteres.
 runlevels es una lista de runlevels (todos seguidos) para los cuales esta línea se tendrá en cuenta.
 acción indica de qué forma o bajo qué condiciones se ejecuta el comando del campo siguiente.
 orden_a_ejecutar es el comando que se ejecuta para esta entrada en los runlevels especificados.
De los campos anteriores, el campo acción merece especial interés, sobre todo porque algunos valores de este
campo hacen que se ignore el campo runlevels. Las distintas opciones de este campo se pueden consultar en la
página man inittab.
Lo mejor es ver algún ejemplo típico de un fichero /etc/inittab para ver cómo se combinan las diversas
opciones. Este fichero suele tener comentarios que clarifican cómo están dispuestos los scripts de inicio por la
distribución de Linux que estemos usando. En el ejemplo, los números indicados representan puntos que se comentan
a continuación.
# Número de runlevel por defecto 

id:2:initdefault:

# Script que se ejecuta siempre en cada inicio,
# independientemente del runlevel 

si::sysinit:/etc/init.d/rcS # (Debian y similares)
si::sysinit:/etc/rc.d/rc.sysinit # (Redhat y similares)

# Comando para cada runlevel 
# En RedHat y sucedáneas es rc.d, Debian es init.d

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Qué hacer en todos los runlevels si se presiona la combinación
# de teclas CTRL+ALT+DEL en una terminal 

ca:12345:ctrlaltdel:/sbin/shutdown ­t1 ­a ­r now

# Lanzar las terminales para el login de los usuarios 

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
                        

Este podría ser un fichero de configuración de init a grandes rasgos. Algunas distribuciones añadirán más cosas, por
ejemplo podrían poner un campo que ejecutase xdm (el programa de login gráfico) en el runlevel especificado,
mientras que otras podrían tenerlo como un servicio aparte. Estudiemos el fichero por partes:
En el ejemplo, el runlevel 2 es en el que iniciará el sistema por defecto. Puede editarse este fichero y
cambiarse por otro.

Existen una serie de operaciones, como ya vimos, que son necesarias en todos los runlevels, así que el script
indicado en esta línea será ejecutado antes de cargar cualquier runlevel (esto lo causa "sysinit" al estar en el
campo acción).

Esto está resuelto de formas distintas en distribuciones distintas, pero el script indicado tendrá comentarios y
referencias que nos ayudarán a entender cómo funciona en nuestro sistema.

En RedHat y similares, es este fichero el que contiene los comandos a ejecutar directamente. En Debian, el
script ejecuta todos los scripts que haya dentro del directorio /etc/rcS.d por orden alfabético, lo cual
resulta ciertamente más ordenado.

Para cada runlevel se ejecuta el comando rc (cuya localización puede variar según la distribución) con un
argumento, el número de runlevel en cuestión. Así, este comando se encarga de ejecutar los scripts enlazados
en el directorio rcN.d, donde N es el número de runlevel, pasándoles generalmente el argumento "start" para
iniciar estos servicios.

La acción "wait" indica a init que debe esperar a que la ejecución de rc termine, esto es, a que se hayan
iniciado los servicios.

Esta línea asocia el evento de la pulsación de la combinación de teclas Ctrl+Alt+DEL con el comando
especificado, en este caso, reiniciar la máquina mediante shutdown.

Estas líneas inician las terminales en los runlevels indicados. El comando que lo hace puede ser getty o
alguno similar. tty1 a tty6 son las terminales locales accesibles mediante Ctrl+Alt+F1 a F6. tty7 suele
estar reservado para utilizar el servidor gráfico X-Window. Estas terminales esperan a que les sea introducido
un nombre de usuario y después llaman a login para autentificar al usuario y devolverle una shell válida en
caso de éxito. Algunos comandos similares a getty permiten lanzar terminales en los puertos serie (incluso
permitirían un inicio de sesión remoto a través de la línea telefónica mediante un módem).

La acción "respawn" indica que si el proceso de la terminal se detiene (por ejemplo, el usuario termina la
sesión en una termin

e) Indique como haría para cambiar de un runlevel a otro.

Con el sistema en marcha, es posible cambiar de runlevel en un momento determinado. Esto causará la detención de
los procesos del runlevel actual e iniciará los del nuevo runlevel (si alguno de los procesos actuales es común a ambos
runlevels no será parado y luego iniciado de nuevo). Si un proceso de los que deben detenerse no lo hace, será
matado por init.
En un momento determinado puede interesar más detener un sólo proceso que efectuar un “Cambio de runlevel”.
Para cambiar de runlevel se utilizará:
# telinit ­t SEC NUM
                        

En realidad, es equivalente telinit e init en este caso. Aunque tradicionalmente se viene usando telinit para cambiar
de nivel de ejecución.
SEC es el número de segundos que esperará init a que un proceso se detenga antes de matarlo. Si no se especifica
esta opción, el número de segundos por defecto es 5.
NUM es el número de runlevel o nivel de ejecución al que se quiere cambiar.
Un usuario no privilegiado no podrá cambiar de runlevel (por otra parte es obvio, si no le pertenecen esos procesos
no tendrá ningún derecho sobre ellos).
Un claro ejemplo de cambio de runlevel es cuando utilizamos alguno de los comandos que nos permiten apagar la
máquina. En definitiva lo que hacen es un cambio al runlevel 6.

f) Scripts RC. ¿Cuál es su finalidad? ¿Dónde se almacenan?


Cuando un sistema GNU/Linux arranca o se detiene se ejecutan scripts,
indique como determina que script ejecutar ante cada acción. ¿Existe un
orden para llamarlos? Justifique.

Los scripts rc se encargan de cargar o cerrar los servicios necesarios para que el sistema funcione, de acuerdo con el
runlevel que se está iniciando. Por ejemplo: lpd (servicio para imprimir), fetchmail (servicio para coger correo-e),
sshd (SecureShell, para abrir sesiones remotas de una manera segura), networking (abre las conexiones de red)...
Todos estos servicios se encuentran en /etc/init.d/.
Sin embargo, no todos los servicios se cargan en todos los runlevels. Por ejemplo, networking no se cargará si el
runlevel es 1 o 2. Entonces, ¿Cómo sabe el rc que servicios tiene que cargar?. Los servicios a cargar se encuentran en
el directorio /etc/rcX.d/, donde X es el runlevel a cargar: /etc/rc0.d para el runlevel 0, /etc/rc1.d para
el runlevel 1... En realidad, en estos directorios no hay más que enlaces simbólicos a /etc/init.d/
2.- Usuarios
a) ¿Qué archivos son utilizados en un sistema GNU/Linux para guardar la información de los usuarios?

Cualquiera que sea el tipo de usuario, todas las cuentas se encuentran definidas en el archivo de configuración
'passwd', ubicado dentro del directorio /etc. Este archivo es de texto tipo ASCII, se crea al momento de la instalación
con el usuario root y las cuentas especiales, más las cuentas de usuarios normales que se hayan indicado al momento
de la instalación.

La información de cada usuario está dividida en 7 campos delimitados cada uno por ':' dos puntos.
/etc/passwd
Campo 1 Es el nombre del usuario, identificador de inicio de sesión (login). Tiene que ser único.
La 'x' indica la contraseña encriptada del usuario, además también indica que se está haciendo uso
Campo 2 del archivo /etc/shadow, si no se hace uso de este archivo, este campo se vería algo así como:
'ghy675gjuXCc12r5gt78uuu6R'.
Número de identificación del usuario (UID). Tiene que ser único. 0 para root, generalmente las
Campo 3 cuentas o usuarios especiales se numeran del 1 al 100 y las de usuario normal del 101 en delante, en
las distribuciones mas recientes esta numeración comienza a partir del 500.
Numeración de identificación del grupo (GID). El que aparece es el número de grupo principal del
Campo 4
usuario, pero puede pertenecer a otros, esto se configura en /etc/groups.
Campo 5 Comentarios o el nombre completo del usuario.
Campo 6 Directorio de trabajo (Home) donde se sitúa al usuario después del inicio de sesión.
Campo 7 Shell que va a utilizar el usuario de forma predeterminada.
b) ¿A que hacen referencia las siglas UID y GID? ¿Pueden coexistir UIDs
iguales en un sistema GNU/Linux? Justifique.

Los usuarios en Unix/Linux se identifican por un número único de usuario, User ID, UID. Y pertenecen a un grupo
principal de usuario, identificado también por un número único de grupo, Group ID, GID. El usuario puede
pertenecer a más grupos además del principal.

c) ¿Qué es el usuario root? ¿Puede existir más de un usuario con este perfil
en GNU/Linux? ¿Cuál es la UID del root?

Usuario root
• También llamado superusuario o administrador.
• Su UID (User ID) es 0 (cero).
• Es la única cuenta de usuario con privilegios sobre todo el sistema.
• Acceso total a todos los archivos y directorios con independencia de propietarios y permisos.
• Controla la administración de cuentas de usuarios.
• Ejecuta tareas de mantenimiento del sistema.
• Puede detener el sistema.
• Instala software en el sistema.
• Puede modificar o reconfigurar el kernel, controladores, etc.

d) Investigue la funcionalidad y parámetros de los siguientes comandos:


 useradd ó adduser: Crea un nuevo usuario o actualiza su información.

# useradd ­g users ­d /home/usuario ­s /bin/bash ­m ­k /etc/skel usuario
                

 ­g Indica cuál es el grupo principal al que pertenece el usuario; en este caso, users
 ­d Establece el que será el directorio de trabajo del usuario, por convenio para usuarios normales, es
/home/nombre_de_usuario
 ­s Es la shell por defecto que podrá usar el usuario después de hacer login. Lo normal es que sea
/bin/bash, esto es, el shell bash.
 ­m ­k Estas dos opciones se complementan. La primera, hace que se cree el directorio de trabajo del usuario
en el caso de que este no exista. La segunda, copia los ficheros del directorio especificado al que se ha creado
del usuario.
 usuario Por último, usuario es el nombre del usuario que estamos creando.

 userdel: Elimina un usuario.


 groupadd: Crea un nuevo Grupo.
-g: gid ID para el grupo, el cual debe ser único y mayor que 499.
-r: Crea un grupo de sistema con un GID menor que 500.
-f: Sale con un error si el grupo ya existe. (El grupo no es alterado.) Si se especifica -g y -f, pero el
grupo ya existe, la opción -g es ignorada.
 groupdel: Elimina un grupo.
 passwd : En este caso no se exige al superusuario la contraseña vigente para el usuario, pero las
reglas para validar contraseñas se siguen aplicando a menos que se utilice la opción -o . El superusuario
puede tener razones legítimas para elegir una contraseña no conforme a las reglas. El uso de los dos parámetros
asigna al usuario la contraseña indicada en el segundo parámetro. Puede ser útil cuando se debe dar a
muchos usuarios una contraseña inicial predefinida. Pero también puede ser extremadamente
peligroso. Un simple fallo en un programa podría cambiar la contraseña del superusuario (root) a cualquier cosa
desconocida.

 who : muestra quién está conectado al sistema. Si se da un argumento que no es una opción, who usa
ese en vez de /etc/utmp como el nombre del fichero que contiene el registro de los usuarios conectados.
Con frecuencia, se da /etc/wtmp como argumento de who para ver aquellos usuarios que previamente se
conectaron al sistema.

Si se dan dos argumentos que no son opciones, who imprime solo la


entrada del usuario que lo está ejecutando (determinado por la entrada
estándar), precedido por el nombre del ordenador. Tradicionalmente,
los dos argumentos dados son ‘am i’, como en ‘who am i’ (N. del T.-
literalmente ‘quién soy yo’) .

 su: Ejecuta una shell con identificadores de grupo y de usuario dis‐


tintos . Por defecto, su no cambia el directorio actual. su modifica las vari‐
ables de entorno ‘HOME’ y ‘SHELL’ de acuerdo con la entrada del fichero
de passwords correspondiente al USUARIO, y si el USUARIO no es el supe‐
rusuario, coloca en las variables ‘USER’ y ‘LOGNAME’ el valor de
USUARIO. Por defecto, la shell ejecutada no es una shell de entrada al
sistema.
 usermod : El comando usermod modifica el inicio de sesión de usuario en el sistema al cambiar la
información relativa al inicio de sesión.

3.- FileSystem
a) ¿Cómo son definidos los permisos sobre archivos en un sistema GNU/Li-
nux?

Para entender mejor el concepto de permisos se tendrá que tener en cuenta que cada usuario puede pertenecer a uno o
más grupos. Cada usuario pertenece por lo menos a un grupo, que es establecido en el momento en que el usuario se
crea. El administrador del sistema puede agregar al usuario a otros grupos. Estos grupos son necesarios para poder
establecer una política de acceso más organizada dado que en cualquier momento se podría dar a un archivo el acceso
a personas de un grupo determinado. Lo único que se tendría que hacer es agregar a los usuarios que se quieran dar
permisos a ese grupo.
Para cada objeto (archivo) que se encuentre en el sistema, GNU/Linux guarda información administrativa en la tabla
de inodos, tema que abarcaremos en mayor detalle más adelante. Entre los datos que se guardan en esta tabla se
encuentran la fecha de creación del archivo, modificación del archivo y la fecha en que se cambio el inodo. Pero
además contiene los datos en los que se centra toda la seguridad en Un*x. Estos son
• El dueño de archivo
• El grupo del archivo
• Los bits de modo o también llamados permisos de archivo
En este tramo nos centraremos en primer medida en entender los permisos y en establecer la forma en que pueden
trabajar con ellos.

Conceptos
Al ser Un*x y GNU/Linux sistemas operativos multiusuario, para que se puedan proteger los archivos se estableció
un mecanismo por el cual se otorgan permisos a un determinado usuario y/o grupo. Esto permite, por ejemplo, que si
existe un archivo creado por un usuario en particular, este será propiedad del usuario y también tendrá el grupo del
usuario. Se permite que los archivos sean compartidos entre usuarios y grupos de usuarios. Por ejemplo si shrek
quisiera puede prohibir los accesos a un archivo determinado que le pertenezca a todos los usuarios que no
pertenezcan a su grupo de usuarios.
Los permisos están divididos en tres tipos: lectura, escritura y ejecución (rwx). Estos permisos pueden estar fijados
para tres clases de usuario: el propietario del archivo, el grupo al que pertenece el archivo y para todo el resto de los
usuarios. El permiso de lectura permite a un usuario leer el contenido del archivo o en el caso de que el archivo sea
un directorio, la posibilidad de ver el contenido del mismo. El permiso de escritura permite al usuario modificar y
escribir el archivo. En el caso de un directorio permite la crear nuevos archivos en él o borrar archivos existentes. El
permiso de ejecución permite al usuario ejecutar el archivo, si tiene algo para ejecutarse. Para los directorios permite
al usuario cambiarse a él con el comando cd.

Como se interpretan los permisos
Para poder interpretar los permisos de archivos nada mejor que utilizar el comando ls ­la. Con esto vemos un
listado largo de un directorio.
[shrek@pantano:~]$ ls ­la
total 13
drwxr­sr­x   2 shrek    user        1024 May  2 09:04 .
drwxrwsr­x   4 root     staff       1024 Apr 17 21:08 ..
­rw­­­­­­­   1 shrek    user        2541 May  2 22:04 .bash_history
­rw­r­­r­­   1 shrek    user         164 Apr 23 14:57 .bash_profile
­rw­r­­r­­   1 shrek    user          55 Apr 23 14:44 .bashrc
­rwxrwxr­x   1 shrek    user           0 Apr 14 19:29 a.out
­rwxrwxr­x   1 shrek    user          40 Apr 30 12:14 hello.pl
­r­­­­­­­­   1 shrek    user          64 Apr 29 14:04 hola
­rwxrw­r­­   1 shrek    user         337 Apr 29 13:57 lista
­rw­rw­r­­   1 shrek    user         40  Apr 30 12:31 listador
­rw­rw­r­­   1 shrek    user           0 May  2 09:04 null
­rwxrwxr­x   1 shrek    user         175 Apr 30 12:30 prue.pl
­rwxrwxr­x   1 shrek    user          56 Apr 23 15:08 que.sh

Como se puede apreciar en este listado, también están el directorio actual, representado por un punto . y el directorio
padre representado por dos puntos .. . Ellos también poseen permisos y atributos que son mostrados. Para ir
entendiendo un poco más vamos a explicar que significan los primeros 10 dígitos. Tomemos como ejemplo el
siguiente archivo
­rw­r­­r­­   1 shrek    user         337 Apr 29 13:57 lista

Para esclarecer un poco mas que significa cada uno de estos caracteres al inicio, utilizaremos unas tablas. Primero
veamos aquellos caracteres que podrían aparecer en el primer lugar, que en el ejemplo anterior es un solo guión. Esto
nos indica que es un archivo común. La tabla siguiente explica el significado del primer símbolo de acuerdo al tipo
de archivo.

Tabla 2. Tipos de permisos

Permiso Significado

r Permiso de lectura
Permiso Significado

w Permiso de escritura

x Permiso de ejecución

Tabla 3. Grupos de permisos

Columnas Se aplica a Significado

2,3,4 owner Establece los permisos para el dueño del archivo

5,6,7 group Establece los permisos para el grupo del archivo

8,9,10 other Establece los permisos para los usuarios que no entran en las categorías
anteriores

b) Investigue la funcionalidad y parámetros de los siguientes comandos


relacionados con los permisos en GNU/Linux:
 chmod: El comando chmod se emplea utilizando símbolos como a,u,g,o que representan a todos (a
"all"), al usuario (u), al grupo (g) y a todos los demás (o). Existen símbolos para agregar (+) quitar (-) o dejar
invariantes los permisos (=). Además tendrán que usarse los símbolos característicos para cada tipo de permiso. Para
el permiso de lectura (r), para el permiso de escritura (w) y para el permiso de ejecución (x). Solo el dueño del
archivo puede cambiarlo con él; excepción del root que también lo puede hacer. Para ejemplificar un cambio de
permisos usaremos el archivo lista.
[shrek@pantano:~]$ ls ­l lista
total 1
­rwxrw­r­­   1 shrek    user         337 Apr 29 13:57 lista
[shrek@pantano:~]$ chmod a­r lista
[shrek@pantano:~]$ ls ­l lista
total 1
­­wx­w­­­­   1 shrek    user         337 Apr 29 13:57 lista

De esta forma se le ha sacado a todos los grupos y usuarios los permisos de lectura.
 chown: chown cambia el propietario de cada fichero, usuario o grupo, según el
primer argumento que no sea una opción, el cual se interpreta como
sigue. Si sólo se da un nombre de usuario (o UID numérico), entonces
ese usuario se convierte en el propietario de cada fichero dado y el
grupo al que pertenece el fichero no cambia. Si al nombre de usuario
sigue un signo de dos puntos y un nombre de grupo (o GID numérico),
sin espacios entre ellos, entonces también se cambia el grupo al que
pertenece cada fichero.
 chgrp: cambia el grupo al que pertenece cada fichero dado a grupo, que
puede ser o bien un nombre de grupo o bien un identificador de grupo
numérico (GID).
c) Explique los conceptos de “full path name” y “relative path name”. De
ejemplos claros de cada uno de ellos.
d) ¿Con qué comando puede determinar en qué directorio se encuentra
actualmente? ¿Existe alguna forma de ingresar a su directorio personal sin
necesidad de escribir todo el path completo? ¿Podría utilizar la misma idea
para acceder a otros directorios? ¿Cómo? Explique con un ejemplo

e) Investigue la funcionalidad y parámetros de los siguientes comandos


relacionados con el uso del FileSystem:
 cd: El comando cd nos permite cambiar de directorio, igual que en DOS.
Por ejemplo, cd / nos lleva al directorio raíz, que es de donde surgen todos los directorios del sistema.
Para cambiar a otro directorio dentro del arbol, podemos utilizar cd usr, o cd /home/user.
 mkdir: mkdir crea directorios con los nombres especificados.
 rmdir: rmdir borra directorios vacíos.
 mount: En Linux, antes de que un disco duro (o cualquier otro dispositivo de almacenamiento) pueda ser
utilizado, se necesita que el sistema "coloque" ese dispositivo dentro de un directorio. Este directorio casi siempre
suele ser el directorio /mnt, pero en realidad se puede utilizar cualquiera. El comando para montar dichos dispositivos
es mount.
 umount: La orden umount despega de la jerarquía o árbol de ficheros el/los sis‐
tema(s) de ficheros mencionado(s). Un sistema de ficheros se puede
especificar bien dando el directorio donde ha sido montado, o bien
dando el dispositivo o fichero especial donde reside.
 du: informa de la cantidad de espacio de disco usada por los ficheros
especificados, y por cada directorio en las jerarquías cuyas raíces
están en los ficheros especificados. Aquí, ‘espacio de disco usado’
significa espacio usado por la jerarquía de ficheros por debajo del
fichero especificado.
 df:informa de la cantidad de espacio de disco usada y de la disponible
en sistemas de ficheros.
 mv: mueve o renombra ficheros o directorios.
Si el último argumento nombra a un directorio existente, mv mueve cada
uno de los otros ficheros a un fichero con el mismo nombre en ese
directorio. Si no, si sólo se dan dos ficheros, renombra el primero al
segundo. Es un error que el último argumento no sea un directorio y se
den más de dos ficheros.
 cp: copia ficheros (o, opcionalmente, directorios). Uno puede bien
copiar un fichero a un destino dado, o copiar arbitrariamente varios
ficheros a un directorio destino.
 pwd: El comando pwd es muy sencillo, nos muestra la ruta de directorios en la que estamos situados en
este momento. Por ejemplo, /home/user.
 ls: Para listar los archivos dentro de un determinado directorio utilizaremos el comando ls. El
equivalente en DOS es 'dir'.
Si ejecutamos ls sin ninguna opción, nos listará los archivos del directorio actual. Si, en cambio, ejecutamos ls 
directorio, nos listará los archivos de ese directorio.
Puede recibir varias opciones:
• ­l: muestra mucha más informacion sobre los archivos, como el usuario y el grupo al que pertenece, el
tamaño, los permisos, etc.
• ­a: muestra todos los archivos, incluyendo los ocultos.
­t: ordena los archivos por fecha de modificación.
 ln: Hay en Unix dos conceptos de ‘enlace’, llamados usualmente enlace duro
(o fíico) y enlace blando (o simbólico). Un enlace duro es simple‐
mente un nombre para un fichero. (Y un fichero puede tener varios nom‐
bres. Se borra del disco solamente cuando se elimine el último nombre.
El número de nombres lo muestra ls(1). No existe el concepto de nom‐
bre ‘original’: todos tienen la misma categoría. Usualmente, pero no
necesariamente, todos los nombres de un fichero se encuentran en el
sistema de ficheros que también contiene sus datos.)
4.- Procesos
a) ¿Qué es un proceso? ¿A que hacen referencia las siglas PID y PPID?
¿Todos los procesos tienen estos atributos en GNU/Linux? Justifique.
Indique que otros atributos tiene un proceso.

UN proceso es un programa en ejecución. Para nosotros, job, tarea y proceso son


sinónimos.
Es importante diferenciar el concepto de programa del de proceso. Cuando editamos
(escribimos) un programa este es simplemente “una receta”, una secuencia de
instrucciones. Cuando lo ejecutamos, se transforma en un proceso.
Mientras el proceso es dinámico, activo, el programa es estático, pasivo.
Un programa no tiene program counter (PC). Un proceso lo tiene.
Hay procesos de usuario y procesos del sistema.
Hay procesos que son propios del sistema operativo para realizar sus funciones, por
ejemplo el proceso que realiza el mantenimiento del spooling, o el que elige a qué
proceso de usuario se le dará la CPU.
Varios procesos pueden ser instancias de un mismo programa. Veámoslo con un
ejemplo de la vida real: supongamos dos cocineros con una sola receta. Cada uno de
ellos tiene su propio conjunto de ingredientes. En un momento dado, uno de ellos puede
ir más adelantado que el otro: aunque se guíen por la misma receta, cada uno tiene sus
tiempos. Mientras uno va por el renglón 2 de la receta, el otro puede ir por el 4. Ahora
pensemos en la receta como el programa, los cocineros son dos usuarios diferentes, el
renglón por donde van, el program counter.

Sobre identificación del proceso, se almacena la Pid (process identificaction) del


proceso, que es un identificador que se le asigna en su creación, y pueden figurar las
PIDs de los procesos hijos y de su padre.

b) Indique que comandos se podrían utilizar para ver que procesos están en
ejecución en un sistema GNU/Linux.

ps muestra una instantánea de los procesos actuales. Si quiere una


actualización contínua, use top. Esta página de manual documenta (o
por lo menos intenta documentar) la versión de ps basada en /proc.

c) ¿Qué significa que un proceso se esta ejecutando en Background? ¿Y en


Foreground?
d) ¿Cómo puedo hacer para ejecutar un proceso en Background? ¿Como
puedo hacer para pasar un proceso de background a foreground y
viceversa?

En cada computadora siempre existirá una gran cantidad de procesos que se ejecutan de manera
simultánea sin que el usuario se de cuenta de ello. Cuando el usuario ejecuta un programa, es decir,
genera un proceso, este se llevará a cabo de dos maneras posibles:
• Modo foreground: Son procesos generados por programas interactivos, es decir, que requieren la
atención del usuario.
• Modo background: Son procesos que no requieren la interacción con el usuario para su ejecución.
Los procesos siempre estarán caracterizados por un número de proceso y por un número de trabajo (job
number).
Para dejar un proceso en background se utilizan los comandos de control de trabajos:
ctrl-z Detiene un programa que se este ejecutando en modo foreground.
bg Coloca el trabajo recién suspendido en modo background.
fg Vuelve a colocar el trabajo en modo foreground.
jobs -l Muestra una lista de los trabajos en background.

e) Pipe ( | ). ¿Cual es su finalidad? Cite ejemplos de su utilización.

Tuberías o pipes 
Este mecanismo nos permite pasar la salida de un comando a otro. Para ello se usa la sintaxis: 
<comando1> | <comando2>. Con esto, la salida de comando1 será la entrada de comando2. Vamos a 
ver unos ejemplos:
$ rpm ­qa | grep <nombre_paquete>
El primero de los dos comandos nos haría una lista de todos los paquetes instalados. Imaginemos 
que sólo queremos saber si tenemos instalado uno en concreto. Con el segundo comando limitamos 
la salida a los paquetes que en el nombre que contengan el patrón que especificamos en 
<nombre_paquete>.

f) Redirección. ¿Qué tipo de redirecciones existen? ¿Cuál es su finalidad?


Cite ejemplos de utilización.

Redirecciones 
En GNU/Linux, al final todo es tratado como si fuera un fichero y como tal, tenemos descriptores de fichero para
aquellos puntos donde queramos acceder. Hay unos descriptores de ficehro por defecto:
• : Entrada estándar (normalmente el teclado).
• 1: Salida estándar (normalmente la consola).
• 2: Salida de error.
Para redirigir las salidas utilizaremos el descriptor de fichero seguido del símbolo '>' (o < si redirigimos la entrada
hacia un comando, pero eso todavía no lo explicaremos). Veamos unos ejemplos:

$ ls ­l >fichero
Guarda la salida de ls -l en fichero. Si no existe lo crea, y si existe lo sobreescribe.
$ ls ­l >>fichero
Añade la salida del comando a fichero. Si no existe lo crea, y si existe, lo añade al final.
$ ls ­l 2>fichero
Si hay algún error, lo guarda en fichero (podría salir un error si no tuviéramos permiso de lectura en el directorio).
Es importante ver que si no se especifica el descriptor de fichero se asume que se redirige la salida estándar. En
el caso del operador < se redirige la entrada estándar, es decir, el contenido del fichero que especificáramos, se
pararía como parámetro al comando.

Si quisiéramos redirigir todas las salidas a la vez havia un mismo fichero, podríamos utilizar >&. Además, con el
carácter & podemos redirigir salidas de un tipo hacia otras, por ejemplo, si quisiéramos redirigir la salida de error
hacia la salida estándar podríamos indicarlo con: 2>&1. Es importante tener en cuenta que el orden de las
redirecciones es significativo: se ejecutarán de izquierda a derecha.

g) Comando Kill. ¿Cuál es su funcionalidad? Cite ejemplos.


Este comando puede servirnos para matar o anular procesos indeseados. Se debe tener en cuenta que
cada proceso lleva su usuario y por tanto solo él (o el superusuario) pueden matarlo.
Normalmente, si los programas que componen el grupo de procesos son civilizados, al morir el padre
mueren todos ellos siempre y cuando el padre haya sido "señalizado" adecuadamente. Para ello, se
emplea el comando
kill <número de señal> PID
siendo PID el número del proceso o del grupo de procesos.
Los números de señal utilizados mas frecuentemente son:
-15: TERM o terminación. Se manda para que el proceso cancele ordenadamente todos sus recursos y
termine.
-1: corte.
-2: interrupción.
-3: quit.
-5: hangup.
-9: kill: la más enérgica de todas pero no permite que los procesos mueran ordenadamente. El proceso
que la recibe finaliza inmediatamente.

h) Investigue la funcionalidad y parámetros de los siguientes comandos


relacionados con el manejo de procesos en GNU/Linux. Además
compárelos entre ellos:
 ps: muestra una instantánea de los procesos actuales. Si quiere una
actualización contínua, use top. Esta página de manual documenta (o
por lo menos intenta documentar) la versión de ps basada en /proc.
 pstree: muestra una instantánea de los procesos actuales en un árbol.
 top: proporciona una visión continuada de la actividad del procesador en
tiempo real. Muestra un listado de las tareas que hacen un uso más
intensivo de la CPU en el sistema, y puede proporcionar una interfaz
interactiva para manipular procesos. Puede clasificar las tareas por
empleo de CPU, uso de memoria y tiempo de ejecución. puede configu‐
rarse mejor que el top normal del conjunto de programas procps. La
mayoría de las características pueden seleccionarse mediante una orden
interactiva o especificándola en el fichero de configuración personal o
general.
 kill: puede servirnos para matar o anular procesos indeseados.
 killall:puede servirnos para matar o anular procesos indeseados. Pero a diferencia del
comando kill, si ponemos killall mozilla, mata todos los procesos del mozilla.
 nice : Si no se añaden argumentos, nice imprime la prioridad de planificación
actual, que es heredada. De otra modo, nice ejecuta el comando (com‐
mand) dado con la prioridad de planificación ajustada. Si no se añade
un ajuste (adjustment), la prioridad del comando es incrementada en 10.
El superusuario puede especificar ajustes negativos. La prioridad puede
ser ajustada por nice en el rango entre -20 (la prioridad más alta) a
19 (la más baja).

5.- Otros comandos de Linux (Indique funcionalidad y parámetros):


 tar: Un archivo-tar puede crearse sobre una unidad de cinta magnética; sin
embargo, también es común en estos días escribir un archivo-tar en un
archivo normal. El primer argumento de tar debe ser una de las
opciones: Acdrtux, seguido por cualesquiera argumentos opcionales que
modifican el comportamiento predeterminado. Los últimos argumentos de
tar son los nombres de los ficheros o directorios que deberán ser
archivados. El empleo de un nombre de directorio siempre implica que
los subdirectorios por debajo de él deben incluirse en el archivo.
 gzip: El programa gzip reduce el tamaño de los ficheros dados mediante el
algoritmo de compresión de Lempel-Ziv (LZ77). Cuando es posible, cada
fichero se reemplaza por otro con la extensión .gz, manteniéndose los
mismos permisos, propietarios y tiempos de modificación. (La extensión
predeterminada es -gz para VMS, y z para MSDOS, la FAT de OS/2, la FAT
de Windows NT, y Atari.) Si no se da ningún fichero, o si un nombre de
fichero es "-", se lee de la entrada estándar, que se comprime y se
manda el resultado a la salida estándar. El programa gzip sólo inten‐
tará comprimir ficheros regulares. En particular, no hará nada con
enlaces simbólicos.

 wc : El nombre del comando wc proviene de word count, y como es de suponer, sirve para contar palabras.
Pero no sólo palabras como se verá a continuación. Su sintaxis es como sigue:
wc [opción...] [archivo...]

Si se omite el argumento archivo, wc tomará los datos (naturalmente) de la entrada estándar.


La lista de opciones más importantes es la siguiente:
-c

Contar bytes.

-l

Contar líneas.

-w

Contar palabras.

 grep: Grep busca en la entrada, bien en la que se le especifica con nombres


de ficheros o bien en la entrada estándar si no se le dan dichos nom‐
bres o si uno de éstos consiste en -, líneas que concuerden o coincidan
con el patrón dado. Si no se dice otra cosa, grep muestra las líneas
que concuerden.

Hay tres grandes variantes de grep, controladas por las siguientes


opciones:
-G, --basic-regexp
Interpreta patrón como una expresión regular básica (vea más
abajo). Éste es el comportamiento predeterminado.
-E, --extended-regexp
Interpreta patrón coma una expresión regular extendida (vea más
adelante).
-F, --fixed-strings
Interpreta patrón como una lista de cadenas de caracteres fijas,
separadas por saltos de línea; se busca la concordancia de una
cualquiera de ellas.

6.- Indique que acción realiza cada uno de los comandos indicados a continuación
considerando su orden. Suponga que se ejecutan desde un usuario que no es root ni
pertenece al grupo de root. (Asuma que se encuentra posicionado en el directorio de
trabajo del usuario con el que se logueo). En caso de no poder ejecutarse el comando
indique la razón:
a) ls -l > prueba: Guarda en un archivo llamado prueba mucha más informacion sobre los archivos, como el
usuario y el grupo al que pertenece, el tamaño, los permisos, etc.
b) ps > PRUEBA : Guarda en un archivo llamado prueba los procesos actuales.
c) chmod 710 prueba
d) chown root:root PRUEBA: chown: no se puede acceder a `PRUEBA': No existe el fichero ó directorio.
e) chmod 777 PRUEBA: chmod: no se puede acceder a `PRUEBA': No existe el fichero ó directorio .
f) chmod 700 /etc/passwd: chmod: cambiando los permisos de `/etc/passwd': Operación no permitida.
g) passwd root: passwd: No debería ver o modificar la información de la contraseña para root.
h) rm PRUEBA: rm: no se puede borrar `PRUEBA': No existe el fichero ó directorio
i) man /etc/shadow: No existe entrada de manual para /etc/shadow
j) find / -name *.conf : Busca en el raiz todos lo arvhivos que sean .conf
k) usermod root –d /home/newroot -L
l) cd /root : entra a el directorio /root
m) rm *
n) cd /etc
o) cp * /home –R
p) shutdown

7.- Indique que comando seria necesario ejecutar para realizar cada una de las
siguientes acciones:
a) Terminar el proceso con PID 23 kill -1 23
b) Terminar el proceso llamado init. ¿Qué resultados obtuvo? killall init - ninguno
c) Buscar todos los archivos de usuarios en los que su nombre contiene la
cadena “.conf” find /home -name *.conf
d) Guardar una lista de procesos en ejecución el archivo /home/<su nombre
de usuario>/procesos ps > /home/matias/procesos
e) Cambiar los permisos del archivo /home/<su nombre de usuario>/xxxx a:
a. Usuario: Lectura, escritura, ejecución
chmod u+r+w+x /home/matias/prueba
b. Grupo: Lectura, ejecución
chmod g+r+x /home/matias/prueba
c. Otros: ejecución
chmod o+x /home/matias/prueba
f) Cambiar los permisos del archivo /home/<su nombre de usuario>/yyyy a:
a. Usuario: Lectura, escritura.
b. Grupo: Lectura, ejecución
c. Otros: Ninguno
g) Borrar todos los archivos del directorio /tmp
h) Cambiar el propietario del archivo /opt/isodata al usuario iso2007
i) Guardar en el archivo /home/<su nombre de usuario>/donde el directorio
donde me encuentro en este momento, en caso de que el archivo exista no
se debe eliminar su contenido anterior.
8.- Indique que comando seria necesario ejecutar para realizar cada una de las
siguientes acciones:
a) Ingrese al sistema como usuario “root”
b) Cree un usuario. Elija para como nombre, por convención, la primer letra de su
nombre seguida de su apellido. Asígnele una contraseña de acceso.
c) ¿Qué archivos fueron modificados luego de crear el usuario y qué directorios
se crearon?
d) Crear un directorio en /tmp llamado cursada2007
e) Copiar todos los archivos de /var/log al directorio antes creado.
f) Para el directorio antes creado (y los archivos y subdirectorios contenidos en
él) cambiar el propietario y grupo al usuario creado y grupo users.
g) Agregue permiso total al dueño, de escritura al grupo y escritura y ejecución a
todos los demás usuarios para todos los archivos dentro de un directorio en
forma recursiva.
h) Acceda a otra terminal virtual para loguearse con el usuario antes creado.
i) Una vez logueado con el usuario antes creado, averigüe cual es el nombre de
su terminal.
j) Verifique la cantidad de procesos activos que hay en el sistema.
k) Verifiqué la cantidad de usuarios conectados al sistema.

S-ar putea să vă placă și