Iniciación al Sistema Operativo Linux Septiembre de 2006
Profesor: Héctor Perez Email:
[email protected]
Red Porteña Telemática Ministerio de Educación Gobierno de la Ciudad Autónoma de Buenos Aires
1
2
Sobre el docente Héctor Perez se ha desempeñado por varios años como docente de informática de la Escuela Técnica 30 del Distrito Escolar Nº 2, Norberto Piñero. Actualmente integra el equipo de soporte técnico a escuelas Medias del programa Re.Por.Te., dependiente del Ministerio de Educación del Gobierno de la Ciudad Autónoma de Buenos Aires. Posee una amplia formación técnica y se encuentra finalizando la carrera de “Automatización y Robótica” en el Instituto Superior del Profesorado Técnico de la Universidad Tecnológica Nacional.
Sobre el Programa Re.Por.Te. REPORTE, la Red Porteña Telemática de Educación, tiene como uno de sus objetivos, diseñar, gestionar y promover el uso de las tecnologías de la información y la comunicación en el ámbito de la Secretaría de Educación de la Ciudad de Buenos Aires. REPORTE, se constituye así como la coordinación que se ocupa, entre otras tareas, de la Intranet educativa de la Ciudad de Buenos Aires, del Portal de Educación de la Ciudad y del uso de las aplicaciones de Internet en las escuelas públicas de la ciudad.
3
Índice Portada Sobre el docente Sobre el Programa Re.Por.Te. Índice Introducción Historia de GNU/Linux y el copyright Las bases de GNU/Linux Distribuciones Algunos conceptos básicos El núcleo del Sistema (Kernel) Procesos El manual del sistema Introducción al Shell de Linux Inicio y primeros pasos Administración de usuarios Adición y eliminación de usuarios Definición de contraseñas Trabajo con grupos Utilización de comandos básicos Utilización de los comandos de manipulación de directorios Gestión de Archivos y Directorios Arranque y apagado del Sistema Comprender el proceso de arranque Servicio y Demonios Sistema de Archivos Uso básico del Editor VI Montar y desmontar sistemas de archivos Interprete de Comandos Búsqueda de Archivos Copias de Seguridad Permisos de archivos Ampliando Conceptos sobre procesos Planificación de tareas con CRON Instalación de paquetes Introducción a redes TCP/IP Compartiendo archivos con NFS Shell scripting
Página 1 Página 2 Página 2 Página 3 Página 4 Página 5 Página 6 Página 6 Página 7 Página 8 Página 8 Página 8 Página 8 Página 9 Página 9 Página 9 Página 9 Página 9 Página 10 Página 10 Página 11 Página 12 Página 12 Página 14 Página 14 Página 15 Página 16 Página 16 Página 20 Página 21 Página 22 Página 27 Página 27 Página 28 Página 29 Página 29 Página 31
4
Introducción En este curso se explicarán conceptos que inciden en el conocimiento interno del sistema operativo. A estas alturas más de uno empezará a preguntarse si es necesario conocer todos estos detalles para un simple uso de un S.O. Lo cierto es que actualmente existen escritorios gráficos que permiten hacer muchas cosas de forma intuitiva, tenemos por ejemplo KDE o GNOME. Sin embargo la amigabilidad tiene un precio; los entornos intuitivos consumen muchos recursos de CPU y memoria. Este curso esta orientado al uso de Linux desde la consola. Muchos no consideran necesario que sea importante asimilar conceptos básicos previos ya que la experiencia anterior con otros S.O. más intuitivos les indujo a pensar que con el simple uso del sistema podrían alcanzar ese conocimiento por ellos mismos. Los que tuvieron la suerte de recibir un buen curso o para los que tuvieron la paciencia de investigar por su cuenta los fundamentos de este S.O. es fácil que se enamoren de el. Unix siempre ha despertado este tipo de reacciones: hay quien lo adora y hay quien lo odia. Los que lo adoran aseguran que es un SO sencillo, elegante, potente, seguro y flexible. Los que lo odian dicen que es difícil de usar. Intentaremos con este curso que llegue a pensar como los primeros. Héctor Perez
5
Historia de GNU/Linux y el copyright Muchas personas creen que Linux es el primer SO que surge con las características de libre y con los fuentes a disposición, pero esto no es tan así. No podríamos hablar de la historia de Linux sin incluir a GNU ya que este proyecto de la Free Software Foundation fue el comienzo de lo que es Linux hoy en día. La FSF fue creada por Richard Stallman, quién una vez que entró en el M.I.T en 1971 comenzó a dar muestras de su gran habilidad para la programación. El proyecto GNU fue el precursor de lo que es el SO Linux de hoy en día. Este proyecto comenzó en el año 1984 dándole el nombre recursivo de GNU que significa GNU no es UNIX (GNU's not UNIX), para crear un sistema operativo compatible con UNIX. Este proyecto es el padre de un sinnúmero de programas que actualmente forman parte de cualquier distribución de Linux y por ello es correcto hablar de GNU/Linux en lugar de Linux a secas. Algunos de los programas que se crearon a partir del proyecto GNU son el GCC, un compilador de lenguaje C, el GNU Emacs, un editor de textos, las librerías GNU de lenguaje C y además uno de los proyectos más grandes como lo es el entorno gráfico GNOME. La idea era simple; se podía tener todo un SO funcional, libre y gratuito. Pero no hay que engañarnos con el significado de libertad. La libertad del software se basa en que uno es dueño del programa que adquiere y/o desarrolla por ello tiene derecho a obtener sus fuentes y hacer lo que se quiera con él, cambiarlo, mejorarlo y hasta venderlo. Linux esta regido por lo que se denomina Licencia Pública General de GNU, o GPL por General Public License. La GPL fue desarrollada por la FSF para el proyecto GNU y hace una serie de previsiones sobre la distribución y modificación del software. Originalmente Linus Torvalds lanzó Linux con una licencia más restrictiva que la GPL que permitía que fuese distribuido libremente pero prohibía lucrar con él. Sin embargo la GPL autoriza a la gente a vender su software, aunque no permite restringir el derecho que tiene el comprador de copiarlo y venderlo a su vez. Hay que aclarar que libre no significa de dominio público. El software de dominio público pertenece a la humanidad y carece de copyright. El software regido por GPL si tiene copyright que pertenece al autor y esta protegido por estas leyes internacionales. El software GPL tampoco es shareware. El shareware es propiedad del autor y exige a los usuarios que paguen cierta cantidad de dinero por usarlo y/o obtener mayores funcionalidades. En cambio el software GPL puede ser distribuido y usado sin pagar a nadie. La GPL permite a los usuarios el modificar los programas y redistribuirlos. Sin embargo, cualquier trabajo derivado de un programa bajo licencia GPL también se tendrá que regir por esta licencia. Cuando Linus Torvalds comenzó con el desarrollo de Linux, mucho del trabajo ya estaba hecho por el proyecto GNU, y el kernel que Linus Torvalds y un ejército de programadores pudo hacer, fue el pegamento que unió todo el sistema que hoy conocemos.
6
Las bases de GNU/Linux GNU/Linux es una reimplementación de la funcionalidad de Unix de libre distribución. Como habíamos dicho, su núcleo o kernel fue desarrollado en sus comienzos por Linus Torvalds. Fue un desarrollo de muchos programadores de todo del mundo, que gracias a Internet pudieron ir coordinando el proyecto. Una curiosidad es que a pesar de ser en un 95% compatible con la funcionalidad de UNIX, el kernel Linux no usa ni siquiera una línea del UNIX de la empresa AT&T.Es más, como antes dijimos, muy buena parte del software del SO GNU/Linux esta bajo licencia GPL. Linus Torvalds se inspiró en otro sistema operativo desarrollado por Andrew Tenenbaum, llamado MINIX, un SO pensado con fines educativos y que Andy Tenenbaum explica muy bien en su Libro Sistemas Operativos. La meta de Linus era mejorar este SO que presentaba sus limitaciones por ser un sistema pensado para enseñar, no para fines comerciales. El kernel Linux aprovecho en sus comienzos de las características que contaba de conmutación de tareas del flamante Intel386 y fue escrito en su totalidad en ensamblador. La versión original, la 0.0.1, ni siquiera funcionó y se tuvo que esperar hasta el 5 de octubre de 1991 cuando Linus anunció la versión 0.0.2 donde ya se podía ejecutar el shell GNU Bash y el GCC (compilador de C de GNU). Luego de un muy corto tiempo de liberada la versión 0.0.3, se saltó gracias a la ayuda de una comunidad de programadores que ayudaron en el proyecto, a la versión 0.10. Se alcanzó la versión 0.95 tras muchas revisiones hasta que en el año 1992 se logró la primer versión libre de errores, la 1.0. Hoy el Kernel se encuentra en una versión estable de la serie 2.6.x y sigue evolucionando, adoptando a su paso toda una serie de nuevas tecnologías, que son probadas y arregladas por los desarrolladores y betatesters antes de que salgan a las masas. Para entender algo más acerca de la versiones, hay que decir que una versión con numero de subversión par es estable. Ej. 2.6.x, siendo x el número que indica el nivel de revisión o parche. En cambio una versión con número de subversión impar Ej. 2.7.x, es una versión inestable que todavía no es 100% confiable. Hoy GNU/Linux se perfila como uno de los mejores SO que existen, compitiendo con SO's que fueron líderes hasta el momento. Todo gracias a personas como Richard Stallman y Linus Torvalds que vieron que una empresa como esta era posible. También hay que agradecer a Internet, ya que sin su existencia esta tarea hubiera resultado mucho más difícil.
Distribuciones Linux es un núcleo de un SO pero para tener un SO completo hay que dotarlo de un montón de utilidades, una estructura de directorios, así como de archivos de configuración y scripts para distintas tareas. Un script es un archivo que contiene órdenes para el intérprete de comandos. Algunas distribuciones incluyen software comercial de su propiedad. Otras en cambio solo incorporan software GPL o similar (Software Libre) Distribuciones libres son Slackware y Debian por ejemplo. Distribuciones propietarias son Fedora, Suse y Mandriva entre otras. Cada distribución tiene sus propias características que la hacen más o menos adecuada para ciertos usos. Uno de los aspectos mas importantes de las distribuciones es su sistema de actualización de paquetes que permiten actualizar el SO a cada nueva versión teniendo en
7
cuenta las dependencias entre unos paquetes y otros.
Algunos conceptos básicos Variables de entorno: En UNIX las variables del sistema se llaman variables de entorno y para consultar el valor de una variable se utiliza el comando echo echo $VAR "se coloca el signo $ delante del nombre de la variable" Directorios: En UNIX la estructura de los directorios es en forma de árbol, y para localizar un punto cualquiera hay que utilizar cada uno de los directorios que conducen a ese punto desde el directorio raíz / Ese camino se llama PATH. La variable PATH guarda esos caminos necesarios para ubicar los archivos binarios echo $PATH Si un comando no esta ubicado en ninguno de estos caminos deberá ser referenciado indicando el camino completo. El comando which se usa para saber donde se encuentra un binario. which echo Los comandos cd mkdir y pwd sirven para cambiar de directorio actual, crear un directorio y averiguar en que directorio nos encontramos actualmente. Linux es un sistema operativo multiusuario y eso implica una filosofía de uso especial. Cuando un usuario va a usar un SO tipo Unix lo primero que debe hacer es identificarse para ser autorizado a abrir una sesión de trabajo. También es multitarea y por ello en el mismo instante varios procesos pueden estar corriendo y cada uno puede pertenecer a usuarios distintos. La información que se guarda en el disco duro también puede pertenecer a distintos usuarios y por esto existen atributos de usuario que se asocian a los archivos. En función de esto habrá cosas que estarán permitidas a ciertos usuarios y a otros no. Los usuarios pueden estar organizados en distintos grupos a fin de poder manejar permisos a nivel de grupo. Los usuarios y los grupos dentro del sistema se manejan como un número llamado UID y GID respectivamente. Existe un usuario especial que goza absolutamente de todos los privilegios y que se llama root. Su número de usuario es decir su UID es 0.
EL NUCLEO DEL SISTEMA (Kernel)
El kernel es el encargado de realizar la mayoría de las funciones básicas del sistema y gestiona entre otras cosas la memoria, los archivos, los usuarios, los procesos, etc.
8
PROCESOS Un proceso a diferencia de un programa es algo vivo, es decir algo que esta funcionando constantemente. A cada proceso le corresponde un número de identificación PID. Además de esto guarda la identificación del usuario propietario UID.
EL MANUAL DEL SISTEMA
man es el manual en línea de todos los sistemas tipo UNIX. Ejemplo: man ls
INTRODUCCION AL SHELL DE LINUX Una shell no es solo un intérprete de comandos. Una shell es sobre todo un intérprete de un potente lenguaje. Un introductor (en Ingles llamado prompt) es aquello que el interprete de comandos muestra para indicar que esta esperando a que se introduzca una orden. A continuación veremos algunos de los elementos del lenguaje shellscript Comandos: son archivos ejecutables Opciones: generalmente las opciones de un comando son letras precedidas del signo ''" Operadores de control: || & && ; ;; () |
9
INICIO Y PRIMEROS PASOS Al arrancar el sistema tendrá que colocar su nombre de usuario y contraseña. Una cuenta de usuario proporciona al usuario un directorio de trabajo predeterminado, denominado directorio /home o inicial.
Administración de usuarios En muchos sistemas, el responsable del mantenimiento de las cuentas de usuarios recibe el nombre de administrador del sistema. A este también se lo suele denominar superusuario puesto que controla todo el sistema y en sistemas Linux se denomina root. El administrador del sistema tiene la responsabilidad de administrar a los usuarios. Esta tarea incluye darles de alta para que puedan entrar al sistema, establecer privilegios, crear y asignar directorios, asignar usuarios a grupos y darles de baja cuando sea necesario. Cada usuario deberá tener un nombre de entrada único, además de una contraseña.
Adición y eliminación de usuarios Cuando se da de alta un usuario, el resultado es una entrada en el archivo de contraseñas de usuarios, /etc/passwd. Para agregar un usuario al sistema: adduser [nombre_de_usuario]
Para eliminar un usuario:
deluser [nombre_de_usuario] "elimina el usuario del sistema pero no elimina su
directorio en /home" Con esto se logra impedir el ingreso del usuario al sistema pero se conservan sus archivos. deluser removehome [nombre_de_usuario] "elimina el usuario y su directorio en
/home"
Se elimina completamente el usuario y todo su directorio de trabajo.
Definición de contraseñas Las contraseñas se definen utilizando el comando passwd. El administrador del sistema debe definir una contraseña para cada usuario que se añada al sistema. Los usuarios pueden cambiar su contraseña al entrar al sistema. El sistema encripta la contraseña y la guarda en el archivo /etc/shadow. Piense que una buena contraseña es un requisito básico para la seguridad, es aconsejable cambiarla de vez en cuando y enseñar a los usuarios a elegir una contraseña adecuada. Quizás necesitemos cambiar momentáneamente de usuario, por ejemplo, pasar a ser el root para realizar alguna tarea de administración; usamos entonces el comando su (switch user).
Trabajo con grupos
Cada usuario es miembro de un grupo. La información sobre los grupos se guarda en el archivo /etc/group.
10
Para adicionar un nuevo grupo usamos addgroup [nombre_de_grupo] Para eliminar un grupo usamos delgroup [nombre_de_grupo] Para agregar usuarios a un determinado grupo simplemente editamos el archivo /etc/group.
UTILIZACION DE COMANDOS BASICOS Es necesario conocer algunos comandos básicos para poder desplazarse por el sistema. Muchos de los comandos que se presentan en los apartados siguientes son, de hecho, programas de utilidad que Linux utiliza para ampliar su grupo de comandos. Estos programas se encuentran en los directorios /bin, /sbin y /usr/bin. Para obtener ayuda inmediata sobre algún comando de Linux escriba man [comando].
Utilización de los comandos de manipulación de directorios
cd cambia el directorio de trabajo actual cd .. vuelve al directorio inmediato anterior cd / va directamente al directorio raíz ls muestra información acerca de archivos y directorios mkdir crea nuevos directorios rmdir borra el directorio Al terminar de trabajar con el sistema deberá "desconectarse" ingresando logout o exit
GESTION DE ARCHIVOS Y DIRECTORIOS Utilización de los comandos de manipulación de archivos cp : copia archivos. cp [/desde/nombre de archivo] [/hasta/nombre de archivo]
mv : mueve archivos. mv [/desde/nombre de archivo] [/hasta/nombre de archivo]
rm: borra archivos. rm [nombre de archivo] La opción r permite borrar un árbol de directorios completo. rm r nombre de directorio "use con cuidado esta sentencia"
less: muestra el contenido de un archivo. Ej less /etc/passwd "comandos simulares a less son cat y more".
clear: borra la pantalla del terminal.
11
12
ARRANQUE Y APAGADO DEL SISTEMA Desconexión del sistema El administrador del sistema puede apagar el equipo usando shutdown shutdown h now apaga el sistema ahora shutdown h 30 apaga el sistema en 30 minutos Si cambiamos el parámetro h por r hacemos un reinicio del sistema en lugar de apagarlo. Ej: shutdown r 23:00
COMPRENDER EL PROCESO DE ARRANQUE Al arrancar, el Kernel de Linux ejecuta el programa init que se encuentra en el directorio
/sbin. init inicia todos los procesos que requiere el sistema para ejecutar las tareas, como permitir operaciones de red, utilizar el mouse y funciones básicas como la terminal de E/S. El sistema de niveles de ejecución SysV init provee de un proceso estándar para controlar cuáles programas init lanza o detiene cuando se inicializa un nivel de ejecución. Los archivos de configuración para SysV init están en el directorio /etc. init.d/ rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ El directorio /etc/init.d/ contiene los scripts usados por el comando /sbin/init cuando se controlan los servicios. Cada uno de los directorios numerados representa los seis niveles de ejecución predeterminados. La idea detrás de los niveles de ejecución de SysV init gira alrededor del hecho que sistemas diferentes se pueden usar de formas diferentes. Por ejemplo, un servidor corre de forma más eficiente sin el consumo de recursos del sistema excesivo creado por el sistema X. Otras veces, el administrador del sistema puede necesitar operar el sistema en un nivel más bajo de ejecución para realizar tareas de diagnóstico, como reparar corrupción del disco duro en el nivel de ejecución 1.
13
Las características de un nivel de ejecución dado determinan qué servicios son detenidos o iniciados por init. Por ejemplo, el nivel de ejecución 1 (modo usuario único) detiene cualquier servicio de red, mientras que el nivel 3 arranca estos servicios. Asignando servicios específicos a ser detenidos o iniciados en un nivel dado, init puede fácilmente cambiar el modo de la máquina sin que el usuario tenga que manualmente arrancar o detener servicios. Niveles de ejecución: 0 Parar 1 Modo texto usuario único 2 Sin usar (usuariodefinible) 3 Modo texto multiusuario completo 4 Sin usar (usuariodefinible) 5 Modo gráfico multiusuario completo 6 Rearrancar Generalmente, los usuarios utilizan el nivel de ejecución 3 o nivel de ejecución 5 — ambos modos multiusuario. Ya que los niveles de ejecución 2 y 4 no son usados, los usuarios a veces personalizan estos niveles para cubrir necesidades específicas. El nivel de ejecución por defecto para el sistema está listado en /etc/inittab. Para saber el nivel de ejecución por defecto de un sistema, busque por la línea similar a la que se muestra abajo cerca de la parte superior de /etc/inittab. id:5:initdefault: El nivel de ejecución predeterminado en este ejemplo es cinco, como indica el número después del punto y coma. Para cambiarlo, modifique /etc/inittab como usuario root.
14
SERVICIOS Y DEMONIOS Servicios y demonios guardan una estrecha relación con los niveles de ejecución. El nombre de "servicio" es un poco ambiguo pero generalmente se refiere a un demonio del sistema. Cada uno de ellos tiene un archivo asociado en /etc/init.d que es un script que acepta un argumento (podría ser, al menos, "start" o "stop", aunque pueden ser otros complementarios para proveer al usuario de opciones adicionales, por ejemplo "restart", "status"...). Demonio: en Unix/Linux se conoce como un programa que permanece en segundo plano ejecutándose continuamente para dar algún tipo de servicio. Ejemplos de demonio, son los servidores de correo, impresora, sistemas de conexión con redes, etc. Ejemplo: Podemos detener y rearrancar el servidor de correo sendmail escribiendo: /etc/init.d/sendmail stop /etc/init.d/sendmail start
SISTEMA DE ARCHIVOS Bajo Linux, el espacio de archivo que resulta visible para los usuarios se basa en una estructura de árbol, con la raíz en la parte superior. Los distintos directorios y archivos se ramifican hacia abajo desde la raíz. El directorio superior se conoce como directorio raíz /. / /bin /dev /etc /home /carlos /maria /lib /proc /root /sbin /usr /bin /etc /lib /tmp /var /spool /mail /news /adm
15
/bin contiene programas ejecutables (binarios). /sbin contiene programas ejecutables del sistema y solo root tiene permisos para ejecutarlos. El directorio /etc contiene la mayoría de los archivos de configuración del sistema. Aquí se encuentra por ejemplo el archivo de contraseñas (passwd), así como la lista de archivos que se montaran al iniciar el sistema (fstab). Además están los archivos de comando de inicio de Linux, etc. /lib se almacenan aquí las bibliotecas compartidas que utilizan los distintos programas al ejecutarse. /dev contiene archivos especiales que se conocen como "archivos de dispositivos" y se utilizan para acceder a los distintos dispositivos de hardware que hay en el sistema. /proc es realmente un sistema de archivos virtual. Se utiliza para leer información de los procesos desde la memoria. /tmp se utiliza para almacenar archivos temporales que crean los programas al ejecutarse. El directorio /home es el directorio base para los directorios iniciales de los usuarios. /usr contiene varios subdirectorios que a su vez contienen programas importantes del sistema; normalmente en /usr están los paquetes de software que se instalan.
USO BASICO DEL EDITOR VI VI es el editor estándar en cualquier UNIX y es de vital importancia su manejo, aunque sea de manera básica. Para abrir el editor simplemente tipee vi A diferencia de otros editores vi inicia en modo comandos por lo que para comenzar a escribir deberemos pasar a modo edición pulsando a o i. Una vez que hemos terminado de editar deberemos pasar nuevamente a modo comandos pulsando ESC. Y para guardar el archivo ponemos :w con lo que se nos pedirá un nombre de archivo. Luego para cerrar el editor y volver al shell ponemos :q y si queremos salir sin guardar :q!
16
MONTAR Y DESMONTAR SISTEMAS DE ARCHIVOS Linux utiliza el comando mount para que el usuario pueda montar un sistema de archivos. mount device mountpoint device es el dispositivo físico que se quiere montar y mountpoint el punto de montaje en el árbol de archivos donde se desea que aparezca. Ej : mount /dev/cdrom /cdrom mount /dev/fd0 /floppy mount /dev/hda1 /mnt mount /dev/sda2 /mnt Para desmontar se usa umount Ej : umount /mnt Se puede montar sistemas de archivos en el arranque editando /etc/fstab.
INTERPRETE DE COMANDOS Linux presenta una interfaz de línea de comandos, llamada consola o shell, la cual permite al usuario interactuar con el sistema operativo de una forma amigable. BASH (acrónimo de BourneAgain Shell) es un intérprete de comandos compatible con sh, puede leer comandos desde la entrada estándar (standar input) o de un archivo. Una salida típica de un shell de usuario puede verse así: ~ $ _ Si la salida contiene un signo de almohadilla (#), en lugar del signo de dólar, quiere decir que esta loggeado como root. ~ # _ a. Completando comandos: $ ls /bin/m[tab][tab] mkdir mkfifo mknod more mount mv $ ls /bin/mor[tab] $ ls /bin/more
17
b. Repitiendo el último comando que se digitó: $ [UP] c. Utilizando el historial: El comando history mostrará un historial enumerado de los últimos comandos digitados. $ history 1 cd /home/ 2 cd /mnt/cdrom/ 3 ls 4 history para hacer uso de alguno de los comandos digitados, es posible llamarlos utilizando el signo de admiración (!) seguido del número del comando digitado en el historial, por ejemplo: $ !3 ls arch* domainname@ ln* sed* awk@ du* loadkeys* setterm* bash* echo* login* sh@ bunzip2@ ed* ls* shred* d. Ejecutando una lista de comandos: Para ejecutar más de un comando en la línea de entrada, solamente digite cada comando en orden separando cada comandos con un punto y coma (;). Por ejemplo para limpiar la consola y luego desloggearse del sistema puede hacer: $ clear; logout e. Redireccionado la entrada y salida: Utilice el operador '>' para redireccionar la salida estándar de un comando a un archivo al cual se va a escribir la salida, y el operador '>>' para anexar la salida a un archivo (el archivo puede existir, o no). Por ejemplo: $ ls > /tmp/contenido.de.bin f. Mostrando el contenido de un archivo: Hay herramientas para ver el contenido de un archivo de texto entre ellas las más comunes son: less, more, most y cat, aunque el comando cat tiene más funcionalidad que solamente mostrar el contenido de un archivo.
18 Del ejemplo anterior: $ cat /tmp/contenido.de.bin arch* awk@ bash* bunzip2@ bzcat@ bzip2* ... O bien se puede direccionar la entrada de cat del archivo contenido.de.bin, de la siguiente forma: $ cat < /tmp/contenido.de.bin arch* awk@ bash* bunzip2@ bzcat@ bzip2* ... g. Redireccionando mensajes de error a un archivo: Para redireccionar la salida error estándar utilice el operador '>' precedido de '2' (2 representa al archivo de error estándar) luego el archivo al cual se va a escribir el error: $ ls archivoquenoexiste 2 > command.error Para redireccionar la salida estándar y el error estándar a un mismo archivo haga: $ ls archivoquenoexiste &> command.error por ejemplo, si se quisiera redireccionar la salida estándar a la salida de error estándar se puede hacer lo siguiente: $ (ls /bin/ 1>&2)>a.txt arch* awk@ bash* bunzip2@ bzcat@ bzip2* ... $ cat a.txt Observará que a.txt no contiene ningún dato, ya que la redirección '> a.txt' recibe la salida estándar, la cual está siendo redireccionada al error estándar, por tanto a.txt se encuentra
19
vacío. gg. Operador grave: Cuando colocamos algo dentro de comillas graves ` la shell lo interpreta como un comando. Ej: echo date produce `date` date > archi`whoami``date +%Y` h. El background y foreground: Usted puede ejecutar comandos sin que estos bloqueen la línea de comandos en su ejecución, a esto se le llama background y regresarlos a la salida en la línea de comandos (foreground). Para ejecutar un comando en background solamente tiene que añadir el operador '&' al final del comando: $ ls /bin/ > contenido.de.bin & [1] 683 [1] Done ls /bin/ >contenido.de.bin Donde 1 es el número de proceso siendo ejecutado en la shell que se utiliza y 683 es el identificador del proceso, asignado por el kernel. La última línea le informa cuando el comando finalizó su ejecución. Ahora bien, si yo estoy utilizando alguna aplicación y la quiero detener para poder ejecutar otro comando, utilizo el keystroke Ctrlz Y para ver la lista de procesos que están siendo ejecutados bajo esa shell: $ jobs [1]+ Stopped vi De nuevo el 1 me va a mostrar el número de proceso para dicha shell y 'Stopped' me dice, que el comando esta detenido de ejecución en ese momento, si quiero seguir ejecutando ese proceso en el background, se utiliza el comando bg, seguido por el numero de proceso del shell. En nuestro caso (aunque no tenga mucho sentido ejecutar un editor en background) se utiliza: $ bg %1 [1] vi & Para regresar un comando proceso al foreground se utiliza el comando fg, seguido por el número de proceso para la terminal. Por ejemplo: $ fg %1
20 para 'matar' algún proceso que esté en bg puedo utilizar el comando kill seguido por el número del proceso para la shell. Ejemplo: $ kill %1 [1]+ Stopped vi i. Tubería entre aplicaciones: La característica principal de la shell de Linux (y sistemas parecido UNIX) es que no existen programas monolíticos para algo complejo, sin embargo la shell ofrece comandos de fin sencillo pero que uniéndolos hacen un proceso bastante complejo. Para comunicar programas entre sí, se utiliza el operador '|' (pipe), esto lo que hace es comunicar la salida estándar de un comando con la entrada estándar de otro comando, por ejemplo, si quisiéramos contar la cantidad de archivos en el directorio /dev, podemos utilizar: $ ls /dev/ | wc l 2561 Donde el comando `wc l' lo que hace es contar la cantidad de líneas que recibe de una entrada estándar, en este caso el resultado de ls dev.
BUSQUEDA DE ARCHIVOS El comando find es usado para buscar archivos, su sintaxis es la siguiente : find [path] name [nombre archivo] Ej: find /home name dato*
21
COPIAS DE SEGURIDAD Uso de tar La utilidad tar (Tape Archiver) es una herramienta de fácil manejo disponible en todas las versiones de Unix que permite volcar ficheros individuales o directorios completos en un único fichero; inicialmente fue diseñada para crear archivos de cinta (esto es, para transferir archivos de un disco a una cinta magnética y viceversa), aunque en la actualidad casi todas sus versiones pueden utilizarse para copiar a cualquier dispositivo o fichero, denominado `contenedor'. c x t r v f Z z p
Crea un contenedor. Extrae archivos de un contenedor. Testea los archivos almacenados en un contenedor. Añade archivos al final de un contenedor. Modo verbose. Especifica el nombre del contenedor. Comprime o descomprime mediante compress/uncompress. Comprime o descomprime mediante gzip. Conserva los permisos de los ficheros.
En primer lugar debemos saber cómo crear contenedores con los archivos deseados; por ejemplo, imaginemos que deseamos volcar todo el directorio /export/home/ a la unidad de desquettes /dev/fd0. Esto lo conseguimos con la siguiente orden: root:~# tar cvf /dev/fd0 /export/home/ En muchas situaciones también resulta útil comprimir la información guardada (tar no comprime, sólo empaqueta); esto lo conseguiríamos con las opciones cvzf. Si en lugar de (o aparte de) un único directorio con todos sus ficheros y subdirectorios quisiéramos especificar múltiples archivos (o directorios), podemos indicárselos uno a uno a tar en la línea de comandos; así mismo, podemos indicar un nombre de archivo contenedor en lugar de un dispositivo. Por ejemplo, la siguiente orden creará el fichero /tmp/backup.tar, que contendrá /etc/passwd y /etc/hosts*: root:~# tar cvf /tmp/backup.tar /etc/passwd /etc/hosts* Si lo que queremos es recuperar ficheros guardados en un contenedor utilizaremos las opciones xvf (o xvzf si hemos utilizado compresión con gzip a la hora de crearlo). Podemos indicar el archivo o archivos que queremos extraer; si no lo hacemos, se extraerán todos: root:~# tar xvf /tmp/backup.tar etc/passwd Una vez creado el contenedor podemos testear su contenido con la opción `t' para comprobar la integridad del archivo, y también para ver qué ficheros se encuentran en su interior: anita:~# tar tvf /tmp/backup.tar
22
PERMISOS DE ARCHIVOS
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. 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. [juan@debian:~]$ ls la total 13 drwxrsrx 2 juan user 1024 May 2 09:04 . drwxrwsrx 4 root staff 1024 Apr 17 21:08 .. rw 1 juan user 2541 May 2 22:04 .bash_history rwrr 1 juan user 164 Apr 23 14:57 .bash_profile rwrr 1 juan user 55 Apr 23 14:44 .bashrc rwxrwxrx 1 juan user 0 Apr 14 19:29 a.out rwxrwxrx 1 juan user 40 Apr 30 12:14 hello.pl r 1 juan user 64 Apr 29 14:04 hola rwxrwr 1 juan user 337 Apr 29 13:57 lista rwrwr 1 juan user 40 Apr 30 12:31 listador rwrwr 1 juan user 0 May 2 09:04 null rwxrwxrx 1 juan user 175 Apr 30 12:30 prue.pl rwxrwxrx 1 juan 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 rwrr 1 juan user 337 Apr 29 13:57 lista
r : permiso de lectura. w: permiso de escritura. x: permiso de ejecución. Cambiando permisos 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.
23
[juan@debian:~]$ ls l lista total 1 rwxrwr 1 juan user 337 Apr 29 13:57 lista [juan@debian:~]$ chmod ar lista [juan@debian:~]$ ls l lista total 1 wxw 1 juan user 337 Apr 29 13:57 lista De esta forma se les ha sacado a todos los grupos y usuarios los permisos de lectura. Algunos ejemplos más [juan@debian:~]$ chmod u+r lista [juan@debian:~]$ ls l lista total 1 rwxw 1 juan user 337 Apr 29 13:57 lista [juan@debian:~]$ chmod o+w lista [juan@debian:~]$ ls l lista total 1 rwxww 1 juan user 337 Apr 29 13:57 lista [juan@debian:~]$ chmod ogw lista [juan@debian:~]$ ls l lista total 1 rwx 1 juan user 337 Apr 29 13:57 lista
Ahora bien, esta es la forma simbólica. Pero existe una forma un poco más sistemática que es la forma de representación octal. El comando chmod permite establecer los permisos de un archivo por medio de un número octal. Comúnmente nosotros usamos para contar una representación decimal (0,1,2,3,4,5,6,7,8,9) pero en una representación octal solo se usan 8 números (0,1,2,3,4,5,6,7). Para establecer el permiso habrá que sumar los dígitos octales de acuerdo a una tabla que se dará a continuación. Dado que no se realiza acarreo, la suma será trivial.
24 Permisos en notación octal Numeración Octal 4000 2000 1000 0400 0200 0100 0040 0020 0010 0004 0002 0001
Permiso Establece el número de identificación de usuario al ejecutarse SUID [a] Establece el número de identificación de grupo al ejecutarse SGID[a] Establece el bit adhesivo[a] Lectura por parte del dueño Escritura por parte del dueño Ejecución por parte del dueño Lectura por parte del grupo Escritura por parte del grupo Ejecución por parte del grupo Lectura por parte de otros Escritura por parte de otros Ejecución por parte de otros
Para dar un ejemplo de la suma que se tendrá que realizar, tomemos un archivo con los permisos expresados en forma simbólica y realicemos la conversión. Para representar rwxrx 0400 Lectura por parte del dueño + 0200 Escritura por parte del dueño + 0100 Ejecución por parte del dueño + 0040 Lectura por parte del grupo + 0010 Ejecución por parte del grupo 0750 Resultado De esta forma si lo que quisiéramos es cambiar los permisos de un archivo, solo se tendría que efectuar la suma necesaria y establecerlo con el comando chmod. Si quisiéramos cambiar los permisos para que el dueño tenga permisos de lectura y escritura y que el grupo y otros solo tengan permisos de lectura, la sintaxis es [juan@reporte:~]$ chmod 0644 lista [juan@reporte:~]$ ls l lista total 1 rwrr 1 juan user 337 Apr 29 13:57 lista Cambiando grupos y usuarios Lo que nos queda por ver es el caso en que se quisiera cambiar el usuario o el grupo del archivo. Para esto se usa el comando chown y su sintaxis es similar a la de chmod pero con la variante que se dan los nombres del usuario y del grupo. Si quisiéramos cambiar el nombre de usuario del archivo lista tendremos [root@reporte:/home/]# ls l lista
25
total 1 rwrr 1 juan user 337 Apr 29 13:57 lista [root@reporte:/home/juan]# chown maria lista [root@reporte:/home/juan]# ls l lista total 1 rwrr 1 maria user 337 Apr 29 13:57 lista Si se quisiera cambiar también el nombre del grupo, se tendría que poner un punto entre el nombre de usuario y el grupo [root@reporte]# ls l lista total 1 rwrr 1 juan user 337 Apr 29 13:57 lista [root@reporte]# chown maria.ventas lista [root@reporte]# ls l lista total 1 rwrr 1 maria ventas 337 Apr 29 13:57 lista
UMASK Esta es la abreviatura de user filecreation mode mask o máscara del modo de creación de archivos de usuario y es un número octal de cuatro dígitos que se utilizan para fijar los permisos de los archivos recién creados. Esto puede ocasionar confusión pero en realidad es una utilidad que permite el uso del sistema por múltiples usuarios sin que peligre la privacidad. En la mayoría de los Un*x los archivos que son creados por el usuario, poseen permisos 0666 que dan permiso de lectura y escritura a cualquier usuario. En relación con los programas, estos se crean con 0777 donde cualquier usuario puede leer, escribir y ejecutar el programa. Normalmente el administrador del sistema aplica una máscara al usuario en el archivo .bash_profile y esta es usada para la creación de archivos haciendo una operación simple "AND" bit por bit con el complemento del valor umask bit por bit. La función umask esta integrada al intérprete de comandos. Para ejemplificar el proceso tomemos un archivo creado por el usuario. 0666 Modo predeterminado de creación de archivos 0022 Umask 0644 Modo resultante
El modo resultante es que el dueño tiene permisos de lectura y escritura y los demás y el grupo solo de lectura. 0666 Modo predeterminado de creación de archivos 0077 Umask 0600 Modo resultante
26 El modo resultante es que el dueño tiene permisos de lectura y escritura y los demás y el grupo no tienen ningún permiso. Una forma de darse cuenta de la forma en que funciona el umask es tener en cuenta que el valor 2 inhabilita el permiso de escritura mientras que el valor 7 inhabilita los permisos de lectura escritura y ejecución.
SUID y SGID Existen ocasiones que los usuarios necesitan ejecutar algún programa que requiere de privilegios. Un ejemplo de esto es el uso del programa passwd para cambiar la contraseña. Sería un error darles a los usuarios los privilegios necesarios para que puedan ejecutar esta clase de programas ya que el usuario podría cambiarse de grupo o crear una cuenta con privilegios de root. Para que esto no suceda, se implemento en Un*x, un sistema por el cual un programa que cuente con SUID o SGID puede ser ejecutado con los privilegios del dueño y/o grupo del programa. Para que quede más claro se tiene que saber que cada usuario esta identificado por el sistema con un número de identificación tanto para él, como para el grupo. Este número se denomina UID (user ID) para el caso de los usuarios y GID para el caso de los grupos. Por ejemplo, un usuario podría tener un UID 100 y un GID 500. En el caso del root, este tiene UID 0 y GID 0. Más adelante sé verá esto en mayor detalle. Lo que se efectúa con el sistema SUID es una adquisición temporal de un UID o GID distinto al propio cuando se está ejecutando el programa. Cuando un programa cambia de UID se denomina SUID (set UID: se establece UID) y cuando cambia de GID se denomina SGID (setGID: se establece GID) Un programa puede ser SUID y SGID al mismo tiempo. Para darse cuenta si un programa es SUID o SGID basta con hacer un listado largo con el comando ls l y se verá que donde tendría que estar una x, que asigna permisos de ejecución, va a estar una letra s. [juan@reporte:~]$ ls l /usr/bin/passwd rwsrsr 1 root bin 36068 20030623 20:40 /usr/bin/passwd* /usr/bin/passwd Bit adhesivo En los antiguos sistemas Unix, la memoria era algo esencial y escasa dado su costo. Para poder aprovechar más esta, se empleó una tecnología que mantenía parte de programas esenciales en el área swap de memoria para que pudieran ser usados más rápidamente. Estos archivos así marcados eran los que valía la pena mantener ya que esas partes del programa que se guardaban en memoria también podían ser usadas por otros.
27
AMPLIANDO CONCEPTOS SOBRE PROCESOS Comando ps Muestra los procesos activos. ps aux para ver todos los procesos del sistema. PID Es el valor numérico que identifica al proceso. TTY es el terminal asociado a ese proceso. Los demonios del sistema no tienen ningún terminal asociado y en este campo figurara un ? STAT Tienen tres campos que indican el estado del proceso. TIME indica el tiempo de CPU que lleva consumido ese proceso desde que fue arrancado. COMMAND muestra el comando y los argumentos que le fueron comunicados. Para matar un proceso usamos kill. ej : kill 9 PID Otro comando interesante es top el cual muestra un ranking de procesos que mas consumen CPU.
PLANIFICACION DE TAREAS CON CRON El demonio cron es el que administra la programación de tareas, veremos un ejemplo de esto. Edite un archivo con lo siguiente: 30 16 * * * cal Y sálvelo por ejemplo con el nombre micron Luego utilizaremos el comando crontab para poner dicha tarea en espera para ejecutarse en el tiempo en que fue programada. crontab micron
El formato que debe usarse es el siguiente: Minutos hora mes diadelmes diadesemana "separado por tabulador" Hay muchas formas más de configurar el momento de ejecución como por ejemplo 10,20,30 * * * * cal Ejecutaría la orden cal cada 10 minutos
28
INSTALACION DE PAQUETES Cada distribución linux posee un sistema propio de manejo de paquetes de software, en este caso trataremos el sistema de manejo de paquetes dpkg usado por la distribución Debian. Si bien el programa dpkg manipula paquetes generalmente se usa otra herramienta que facilita y complementa a dpkg. Estamos hablando de apt. Instalación: aptget install [paquete] Eliminación: aptget remove [paquete] Búsqueda de paquetes: aptcache search [paquete] Inclusive se puede actualizar a una nueva release del sistema: aptget distupgrade "la herramienta apt usa un archivo en donde se especifican las ubicaciones de los servidores de descarga de paquetes desde Internet. Este archivo esta en /etc/apt y su nombre es sources.list. Puede editar este archivo y actualizar luego con aptget update" Mantenimiento de los sistemas de archivos Conviene comprobar de vez en cuando los sistemas de archivos para ver si contienen archivos dañados o deteriorados. Usamos para esto el comando fsck La forma mas básica del comando es fsck filesystem a arregla automáticamente cualquier problema detectado r pide confirmación antes de repara el sistema de archivos V modo verbose A recorre el archivo /etc/fstab y trata de comprobar todos los archivos de una sola pasada.
29
INTRODUCCION A REDES TCP/IP
La configuración en red TCP/IP de Linux esta controlada por unos archivos en /etc. Estos archivos informan a Linux de su dirección IP, nombre de sistema, nombre de dominio y controlan las interfaces de red. /etc/hosts "Asigna los nombres de sistema a las direcciones IP" /etc/networks "Asigna los nombres de dominio y de la red" Inicializar interfaces Ethernet El programa ifconfig es usado para supervisar y cambiar el estado de las interfaces de red. ifconfig eth0 192.168.0.1 up "Activo primer Interfaz de red y le asigno una dirección IP " ifconfig eth1 down "desactivo la segunda interfaz de red"
Compartiendo archivos con NFS (Network File System) El sistema NFS (Network File Sistem) fue desarrollado para permitir montar una partición perteneciente a una máquina remota como si fuese una partición local. Nos proporciona, por tanto, un método rápido y eficaz de compartir archivos y espacio de disco entre distintas computadoras de una red que soporten este sistema. ¿Qué necesitamos? Necesitaremos tener instalado portmap y el paquete nfsuserserver (nfsd) en la maquina que vaya a hacer de servidor de disco. El portmap nos permitirá realizar conexiones RPC al servidor y es el encargado de permitir o no el acceso al servidor a los equipos que especifiquemos. Compartiendo el disco Una vez tenemos los servicios en marcha únicamente nos falta determinar qué queremos compartir. Debemos editar el archivo /etc/exports e introducir: /home/curso 192.168.0.0/255.255.255.0(rw) /var/db 192.168.0.0./255.255.255.0(rw) Con esto estamos indicando que vamos a exportar /home/curso y /var/db permitiendo acceso a nuestro rango de direcciones locales en modo de lectura/escritura.
Configuración de un equipo cliente NFS. Ahora que ya tenemos el servidor funcionando vamos a acceder al espacio compartido desde un ordenador cliente.
30
Como root ejecutamos mount <servidor>:
Ejemplo: mount 192.168.0.2:/home /mnt/nfs Un simple ls /mnt/nfs nos tendría que permitir ver que ya tenemos acceso al disco del servidor. Si queremos que el sistema de archivos NFS sea montado al arrancar deberemos añadir una entrada en /etc/fstab. En nuestro ejemplo añadiríamos 192.168.0.2:/home /mnt/nfs nfs rw,hard,intr 0 0
31
Shell scripting Un shell script es una secuencia ordenada de comandos que puede ser interpretada por el shell o interprete de comandos. Como primera linea debe indicarse #!/bin/bash que en este caso indica que debe interpretarse por el Bash (Bourne Again Shell). Un ejemplo simple: #!/bin/bash echo "hola, $USER. aqui tienes la lista de tus archivos" ls $HOME # lista de archivos Variables: Cualquier lenguaje de programacion necesita variables. La difinicion de variables es muy simple: x=1 o x="hola mundo" Operadores: Operador Descripcion n z d f eq neq = != lt gt le ge
longitud distinta de cero longitud igual a cero comprueba si existe directorio comprueba si existe archivo comprueba si dos enteros son iguales opuesto a eq comprueba igualdad de cadenas opuesto a = comprueba si operando1 es menor que operando2 comprueba si operando1 es mayor que operando2 comprueba si operando1 es menor o igual que operando2 comprueba si operando1 es mayor o igual que operando2
Condicionales if [condicion] then sentencia1 sentencia2 .......... else sentencia3 fi
Nº de operandos 1 1 1 1 2 2 2 2 2 2 2 2
32 if [condicion1] then sentencia1 sentencia2 .......... elif [condicion2] then sentencia3 sentencia4 ........ elif [condicion3] then sentencia5 sentencia6 ........ fi
Ejemplos: #!/bin/bash
if [ 1 = 2 ] then echo "HOLA" fi
#!/bin/bash X="n" Y="" if [ $X = $Y ] then echo "X=Y" fi
#!/bin/bash
if [ d "/home/juan" ] then echo HOLA JUAN else echo NO ESTAS fi
Loops For #!/bin/bash for X in red green blue do echo $X done #!/bin/bash for i in `seq 1 10`; do echo $i done
While #!/bin/bash COUNTER=0 while [ $COUNTER lt 10 ] do echo The counter is $COUNTER let COUNTER=COUNTER+1 done
Until #!/bin/bash COUNTER=20 until [ $COUNTER lt 10 ] do echo COUNTER $COUNTER let COUNTER=1 done
Operadores aritméticos + (adición) (sustracción) * (producto) / (división) % (módulo)
33
34 #!/bin/bash echo "" echo " EJEMPLO DE SUMA DE DATOS" echo " Suma de 2 valores " echo n "primer valor a sumar: " read numero1 echo n "segundo valor a sumar: " read numero2 numero3=$[numero1+numero2] echo "" echo "Los dos numeros a sumar seran $numero1 mas el $numero2" echo "El total es = $numero3 "
35
Prácticas correspondientes al curso de Iniciación al Sistema Operativo GNU/Linux Práctica 1 Administración de cuentas de usuario y grupos a) Loguearse como root. Agregar un usuario "elija un nombre". Establecer una contraseña para dicho usuario. Desconectar usuario root y loguearse con el usuario antes adicionado. Cambiar su contraseña.
b) Observe lo que sucede cuando un usuario estándar intenta acceder al contenido de los siguientes archivos de configuración. cat /etc/passwd cat /etc/shadow Que conclusiones saca al respecto? ............................................................................................. ...................................................................................................................................................... c) Cuando quiero cambiar de usuario utilizo .............. d) Explique los 2 niveles de eliminación de usuarios ...................................................................................................................................................... ...................................................................................................................................................... e) Agregue el grupo "curso" al sistema. f) Edite el archivo /etc/group y agregue su usuario al grupo "curso". Requiere conocimiento previo de editor vi. Consulte al docente.
g) Elimine el grupo "curso" del sistema.
36
Practica 2 Archivos y directorios a) Crear la siguiente estructura de directorios /practica /cartas /documentos /oficina /personal /scripts b) Utilizar vi para crear el siguiente el siguiente archivo de texto dentro del directorio /practica/documentos/personal Esto es una practica de edicion con el editor vi. y nuestros nombres son: Grabar con el nombre texto1 y salir de vi. c) Observar el contenido del archivo recien creado. ............................................... d) Usar ls R para ver el contenido de los distintos subdirectorios. e) Usar comando echo y los redireccionadores para agregar sus nombres al final del archivo. .................................................................................................................................................... f) Mover el archivo texto1 hasta /practica/cartas y luego copiarlo a /practica/documentos/oficina. g) borrar el directorio /personal h) borrar el directorio /oficina en forma recursiva.
Práctica 3 Montaje de dispositivos de almacenamiento
a) Coloque un disquete y montelo en /floppy (si no existe este directorio creelo). Copie en el disquete el archivo /etc/issue y editelo nuevamente con vi (cambielo por el mensaje que desee). b) Renombre el archivo issue por issue.back y copie en su lugar el archivo editado en el disquete. c) Desmonte el dispositivo.
37
38
Practica 4 Permisos
a) Crear el siguiente archivo con vi : #!/bin/sh echo echo HOLA son las `date +%H` horas `date +%M` minutos. echo b) Ponerle permisos de ejecucion y ejecutarlo. c) Quitarle los permisos de escritura y probar de modificarlo. d) Quitarle los permisos de lectura y darle permisos de escritura. Que observa? ......................................................................................................................................... e) Extender el uso de chmod usando tanto la notacion octal como la clasica. f) Loguearse como root y establecerse como dueno del archivo de la practica anterior. g) Extender el uso de chown para cambiar duenos y grupos. (opcion de recursividad R)
39
Practica 5 Tareas programadas y copias de seguridad Se desea hacer una copia de seguridad en el segundo disco IDE (segunda partición) del directorio home cada viernes a las 18 hs. Búsqueda de archivos Se desea realizar una búsqueda de : archivos que terminen con "conf" no se sabe en que directorio pueden estar Crear un archivo llamado "encontrados" con el contenido de la busqueda. Shell scripting a) Realizar un script que haga una copia de seguridad de la carpeta /home/user/personal en un disquete. b) Realizar un script que haga un calculo matematico . Ej : raiz cuadrada, superficie de triangulo, etc. c) Realizar un script que se ejecute al iniciar el sistema.