




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Apuntes de la Shell de Linux Apuntes de la Shell de Linux
Tipo: Resúmenes
1 / 125
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































1.- REPASO CONCEPTOS BÁSICOS DE UNIX/LINUX
Todo sistema operativo necesita guardar multitud de archivos: desde los de la configuración del sistema, los de log, los de los usuarios, etc. En general, cada sistema operativo utiliza su propio sistema de ficheros, caracterizándolo en muchos aspectos como pueden ser el rendimiento, seguridad, fiabilidad, etc.
Lo primero que debemos tener claro es que todo el sistema de ficheros parte de una misma raíz, a la cual nos referiremos con el carácter '/ '. Es el origen de todo el sistema de ficheros y sólo existe una. Para organizar los ficheros adecuadamente, el sistema proporciona lo que llamaremos directorios (o carpetas), dentro de las cuales podemos poner archivos y más directorios. De esta forma conseguimos una organización jerárquica como la que vemos en la siguiente figura:
Figura 1.1: Sistema de archivos
1.2.- Manipulación
Ahora que ya sabemos movernos correctamente por la jerarquía de directorios también necesitamos saber cómo copiar, eliminar y manipular correctamente otros aspectos de los ficheros. El comando rm es el que se encarga de eliminar los archivos que le indiquemos. Para eliminar un directorio, podemos utilizar el comando rmdir, aunque sólo lo borrará cuando éste esté vacío. Para copiar archivos de un lugar a otro tenemos el comando cp, con el cual siempre debemos indicarle el fichero o directorio origen y el lugar o nombre de destino, aunque sea en el directorio actual. Si en lugar de copiar los archivos queremos moverlos de sitio podemos utilizar el comando mv. Este comando también se utiliza para renombrar archivos.
4.Crea en el directorio pract2 un archivo que se llame apuntes.txt y otro que se llama ejercicios.txt 5.Escribe al menos 5 líneas en cada uno 6.Copia el fichero apuntes.txt en el directorio pract
Todos los comandos que veremos tienen multitud de opciones y parámetros diferentes que nos permiten manipularlos de la forma que queramos. Desde el principio se tuvo muy en cuenta que es imprescindible contar con una buena documentación para todos ellos. Igualmente, toda esta información también es necesaria para los ficheros de configuración del sistema, las nuevas aplicaciones que utilizamos, etc. Es por esto que el mismo sistema incorpora un mecanismo de manuales con el que podemos consultar casi todos los aspectos de los programas, utilidades, comandos y configuraciones existentes. El comando más utilizado es el man, que nos enseña el manual del programa que le indiquemos como parámetro. Por defecto esta documentación es mostrada utilizando el programa less, con el cual podemos desplazarnos hacia adelante y hacia atrás con las teclas de AVPÁG y REPÁG, buscar una palabra con el carácter “/” seguido de la palabra y
“q” para salir.
Si hay más de un manual disponible para una misma palabra, podemos especificarlo pasándole el número correspondiente de la sección deseada antes de la palabra, por ejemplo “man 3 printf”. Como los otros comandos, man también tiene multitud de opciones diferentes documentadas en su propio manual “man man”. Una de estas opciones que nos puede ir muy bien en las ocasiones que no sepamos exactamente el programa que estamos buscando es “-k”' (el comando apropos hace casi exactamente lo mismo). Con “man -k” seguido de una palabra que haga referencia a la acción que queramos realizar se buscará por entre todos los manuales del sistema y se mostrarán los que en su descripción o nombre aparezca la palabra indicada. De esta forma, podemos encontrar todo los queramos sin tener que recurrir a ningún libro o referencia externa al sistema.
Si el manual no nos proporciona toda la información que necesitemos también podemos usar el comando info, que es lo mismo que el manual pero aún más extendido. Si lo único que queremos es tener una breve referencia de lo que hace un determinado programa podemos utilizar el comando whatis.
11.Pida ayuda sobre los comandos marcados en negrita 12.Busque comandos que permitan comparar (cmp).
Un mecanismo muy útil que nos proporciona el sistema son los patterns (patrones). Hasta ahora hemos visto como aplicar ciertas operaciones sobre un determinado archivo. Cuando estamos manipulando un sistema, en muchos casos nos interesará aplicar alguna de las operaciones que hemos visto pero sobre un grupo grande de ficheros. Los patrones nos permitirán aplicar las operaciones que queramos especificando, en una sola instrucción, varios ficheros que cumplan con una serie de características especificadas. Debemos verlos como plantillas de nombres, que nos permiten hacer referencia de forma abreviada a una serie de archivos cuyos nombres siguen un patrón. La Tabla 1.1 muestra estos metacaracteres.
1.4.- Patrones (metacaracteres de sustitución)
anteriormente, podemos verlos usando la cadena de igualación practica_: $ ls -l p ractic a_ -rw-r--r-- 1 mluque mluque 3 Oct 1 19:44 practica_1.txt -rw-r--r-- 1 mluque mluque 3 Oct 1 19:44 practica_2.txt -rw-r--r-- 1 mluque mluque 3 Oct 1 19:44 practica_3.txt Recordad que en Linux no existe el concepto de nombre y extensión a la hora de nombrar archivos. El punto es un carácter más permitido en el nombre de un archivo.
Los corchetes definen una lista, o clase de caracteres, que se pueden igualar con un sólo carácter. A continuación, ilustramos algunas formas de caracterizar grupos de archivos:
[A-Z]* Iguala todos los archivos que comienzan con una letra mayúscula. [aeiou] Iguala cualquier archivo que finalice con una vocal. tema.[13579] Iguala los temas que finalizan con un número impar tema.0[1-3] Iguala tema.01, tema.02, tema.03. [A-Za-z][0-9]* Iguala los archivos que comienzan con una letra (mayúscula o minúscula), seguida de un dígito, y cero o más caracteres. [!A-Z]* Iguala los archivos que no comiencen por una letra mayúscula
13.Sitúate en tu home 14.Listar todos los archivos que empiecen por s, 15.Listar todos los archivos que contengan una a 16.Listar todos los archivos que empiecen por “a”' o por ``b'' y que contengan cualquier otra cadena.
El uso de las llaves ({}), solas o combinadas con los anteriores caracteres especiales (?,*,[]), nos
1.4.- Patrones (metacaracteres de sustitución)
van a permitir formas expresiones de nombres de archivos más complejas. Las llaves contienen una lista de uno o más caracteres separados por comas. Cada ítem de la lista se utiliza en turno para expandir un nombre de archivo que iguala la expresión completa en la que están inmersas las llaves.
Por ejemplo, a{f,e,d}b se expande en afb, aeb y adb, en este orden exactamente. Las llaves se pueden utilizar más de una vez en una expresión. La expresión s{a,e,i,o,u}{n,t} se expande en san, sen, sin, son, sun, sat, set, sit, sot y sut.
Otro tipo de operación muy útil es la búsqueda de ficheros. Tenemos varios comandos que nos permiten realizar búsquedas de diferentes tipos sobre todos los ficheros del sistema. find es el comando más versátil para realizar esta acción. locate es otro comando pero, a diferencia del anterior, utiliza una base de datos interna que se actualiza periódicamente y nos permite hacer búsquedas bastante más rápidas. Para acabar con los comandos de búsqueda, whereis está orientado a la búsqueda de los archivos binarios (los ejecutables), de ayuda o los de código fuente de un determinado programa.
17.Busca todos los archivos que empiecen por m en el directorio /usr/bin 18.Busca la localización del comando ls
Utilizar la extensión para determinar el tipo de un archivo no es un sistema muy eficaz ya que cualquiera puede cambiarla y generar confusiones y errores en el sistema.
Los archivos que tenemos en nuestro sistema pueden ser de muchos tipos diferentes: ejecutables, de texto, de datos, etc. A diferencia de otros sistemas, que utilizan la extensión del archivo para determinar de qué tipo son, GNU/Linux utiliza un sistema denominado de magic numbers, determinando con un número mágico el tipo de fichero según sus datos. El comando file nos lo indica.
1.6.- Tipos y contenidos de ficheros Con cut podemos separar en campos el contenido de cada línea del fichero especificando qué carácter es el separador, muy útil en tareas de administración del sistema para su automatización. De igual forma, con paste podemos concatenar la líneas de diferentes ficheros. También podemos coger un determinado número de líneas del principio o fin de un archivo con los comandos head y tail respectivamente. Con wc podemos contar el número de líneas o palabras, la máxima longitud de línea de un fichero, etc.
17.Busca la sílaba ma en el fichero apuntes.txt 18.Visualiza las primeras lineas del fichero asignatura.txt 19.Visualiza las ultimas líneas del fichero apuntes.txt Finalmente, para acabar con esta sección de manipulación de ficheros lo único que nos falta por ver es cómo comparar diferentes archivos. Igual que con las otras operaciones, tenemos varios comandos que nos permiten hacerlo. diff, cmp y comm realizan comparaciones de diferentes formas y métodos en los ficheros que les indiquemos.
En cualquier sistema operativo multiusuario necesitamos que los ficheros que guardamos en nuestro disco puedan tener una serie de propiedades que nos permitan verlos, modificarlos o ejecutarlos para los usuarios que nosotros definamos. Aunque hay varias alternativas para hacer esto UNIX utiliza el sistema clásico, que combinado con todos los mecanismos de gestión de usuarios y grupos nos permite cualquier configuración posible. La idea es definir, para cada fichero o directorio, a qué usuario y grupo pertenece y qué permisos tiene para cada uno de ellos y para el resto de usuarios del sistema. Ejecutando ``ls -l'' veremos como por cada archivo del directorio donde estemos aparece una línea parecida a la siguiente:
-rwxr-xr-x 1 user1 grupo1 128931 Feb 19 2000 gpl.txt Los primeros diez caracteres (empezando por la izquierda) nos indican los permisos del fichero de la siguiente forma:
Carácter 1: esta entrada nos indica si es un fichero o un directorio. En caso de ser un fichero
aparece el carácter -, mientras que por los directorios aparece una d'.
Caracteres 2,3,4: nos indican, respectivamente, los permisos de lectura, escritura y ejecución para el propietario del fichero. En caso de no tener el permiso correspondiente activado encontramos el carácter -'' y sinor'', w'' ox'' según si lo podemos leer (Read), escribir (Write) o ejecutar (eXecute).
Caracteres 5,6,7: estos caracteres tienen exactamente el mismo significado que anteriormente pero haciendo referencia a los permisos dados para los usuarios del grupo al que pertenece el fichero.
Caracteres 8,9,10: igual que en el caso anterior pero para todos los otros usuarios del sistema.
20.Determine que permisos tienen los archivos de los directorios pract1, pract2, pract Para cambiar los permisos de un determinado archivo podemos utilizar el comando chmod. Debemos tener en cuenta que sólo el propietario del archivo (o el root) puede cambiar estos permisos ya que sino todo el mecanismo no tendría ningún sentido. Los permisos se indican con un número de tres cifras comprendido entre el 000 y el 777, donde cada una de las cifras codifica los permisos (lectura, escritura y ejecución) asociados al propietario del archivo, al grupo al que pertenece el archivo y al resto de usuarios, respectivamente. Algunos ejemplos 744 = 111 100 100 = rwx r-- r-- 777 = 111 111 111 = rwx rwx rwx 654 = 110 101 100 = rw- r-x r-- Para cambiar el propietario de un fichero, existe el comando chown, que sólo puede utilizar el root por razones de seguridad. Para cambiar el grupo de un determinado archivo se puede utilizar el comando chgrp. Como podemos suponer, cuando un usuario crea un nuevo archivo, el sistema pone como propietario el usuario que lo ha creado y perteneciente al grupo primario del mismo usuario. Los permisos que se ponen por defecto al crear un nuevo archivo los podemos configurar con el comando umask.
2.- COMANDOS SHELL I
Linux es un Unix libre, es decir, un sistema operativo, como el Windows o el MS-DOS (sin embargo, a diferencia de estos y otros sistemas operativos propietarios, ha sido desarrollado por miles de usuarios de computadores a través del mundo, y la desventaja de estos es que lo que te dan es lo que tu obtienes, dicho de otra forma no existe posibilidad de realizar modificaciones ni de saber como se realizó dicho sistema), que fue creado inicialmente como un hobbie por un estudiante joven, Linus Torvalds, en la universidad de Helsinki en Finlandia, con asistencia por un grupo de hackers a través de Internet. Linux tenía un interés en Minix, un sistema pequeño o abreviado del UNIX (desarrollado por Andy Tanenbaum); y decidido a desarrollar un sistema que excedió los estándares de Minix. Quería llevar a cabo un sistema operativo que aprovechase la arquitectura de 32 bits para multitarea y eliminar la barreras del direccionamiento de memoria.
Torvalds empezó escribiendo el núcleo del proyecto en ensamblador, y luego comenzó a añadir código en C, lo cual incrementó la velocidad de desarrollo, e hizo que empezara a tomarse en serio su idea.
Comenzó su trabajo en 1991 cuando realizó la versión 0.02, la cual no se dio a conocer porque ni siquiera tenía drivers de disquete, además de llevar un sistema de almacenamiento de archivos muy defectuoso. Trabajó constantemente hasta 1994 en que la versión 1.0 del núcleo(KERNEL) de Linux se concretó. Actualmente, la versión completamente equipada es la 2.6.18.1 (versión de octubre de 2006), y el desarrollo continúa (se pueden consultar en kernel.org).
Linux tiene todas las prestaciones que se pueden esperar de un Unix moderno y completamente desarrollado: multitarea real, memoria virtual, bibliotecas compartidas, carga de sistemas a demanda, compartimiento, manejo debido de la memoria y soporte de redes TCP/IP.
La parte central de Linux (conocida como núcleo o kernel) se distribuye a través de la Licencia Pública General GNU, lo que básicamente significa que puede ser copiado libremente, cambiado y
distribuido, pero no es posible imponer restricciones adicionales a los productos obtenidos y, adicionalmente, se debe dejar el código fuente disponible, de la misma forma que está disponible el código de Linux. Aún cuando Linux tenga registro de Copyright, y no sea estrictamente de dominio público, la licencia tiene por objeto asegurar que Linux siga siendo gratuito y a la vez estándar.
Por su naturaleza Linux se distribuye libremente y puede ser obtenido y utilizado sin restricciones por cualquier persona, organización o empresas que así lo desee, sin necesidad de que tenga que firmar ningún documento ni inscribirse como usuario. Por todo ello, es muy difícil establecer quienes son los principales usuarios de Linux. No obstante se sabe que actualmente Linux está siendo utilizado ampliamente en soportar servicios en Internet, lo utilizan Universidades alrededor del todo el mundo para sus redes y sus clases, lo utilizan empresas productoras de equipamiento industrial para vender como software de apoyo a su maquinaria, lo utilizan cadenas de supermercados, estaciones de servicio y muchas instituciones del gobierno y militares de varios países. Obviamente, también es utilizado por miles de usuarios en sus computadores personales. El apoyo más grande, sin duda, ha sido Internet ya que a través de ella se ha podido demostrar que se puede crear un sistema operativo para todos los usuarios sin la necesidad de fines lucrativos.
Linux tiene una mascota oficial, el pingüino de Linux, que fue seleccionado por Linus Torvalds para representar la imagen que se asocia al sistema operativo que él creó.
Básicamente podemos decir que hoy Linux es un sistema muy completo. El proyecto de Linus Torvalds aún no ha terminado, y se piensa que nunca se terminará por ésta continua evolución de la Informática.
Como muchos sistemas, Linux puede verse como una pirámide (Figura 2.1). En la base tenemos el hardware, y sobre él, el sistema operativo. Su función es controlar el hardware y suministrar la interfaz de llamadas al sistema a todos los programas. Esta interfaz permite a los usuarios crear y gestionar procesos, archivos, y otros recursos. Como las llamadas al sistema deben hacerse en
if (estamos en el proceso hijo) { ejecuta la orden dada en arg0; else /* es el proceso padre */ if (línea ordenes no aparece el símbolo &) espera hasta que finalice el hijo; } } Cada shell, además de ejecutar las órdenes de LINUX, tiene sus propias órdenes y variables, lo que lo convierte en un lenguaje de programación. La ventaja que presenta frente a otros lenguajes es su alta productividad, una tarea escrita en el lenguaje del shell suele tener menos código que si está escrita en un lenguaje como C.
Respecto a cuando utilizar el shell y cuando utilizar otro lenguaje de programación como C, indicar como recomendación general que debemos utilizar el shell cuando necesitemos hacer algo con muchos archivos, o debamos de hacer la misma tarea repetitivamente. No deberíamos usar el shell cuando la tarea sea muy compleja, requiera gran eficiencia, necesite de un entorno hardware diferente, o requiera diferentes herramientas software.
Respecto a las órdenes, en el bash (el que nosotros vamos a utilizar en prácticas) podemos encontrar los siguientes tipos:
2.2.- Los interpretes de órdenes Los propios shell se comportan como una orden, es decir se pueden ejecutar.
Mira de que shells dispone el sistema y entra en alguna de ellas. Entrar en una shell = nombre de la shell (las shell se encuentran en /bin/) Salir de una shell = exit, o Ctrl+D
Cuando arrancamos el sistema, tras muchos mensajes de inicialización, aparece una pantalla gráfica que nos pedirá las siguiente información login: i62xxxx password: En este momento, el programa /bin/login verifica nuestra identidad comprobando el primer campo del archivo /etc/passwd que contiene nuestro nombre usuario. Si nuestro nombre esta allí, compara el password dado, o palabra calve, con la forma encriptada del mismo que hay en el archivo /etc/shadow. Una vez verificado, el programa login establece el entorno de trabajo que se pasará al shell, es decir, se asignan a las variables HOME, SHELL, USER, y LOGNAME los valores extraídos del archivo /etc/passwd. Después, se crea el shell de entrada o login shell, con lo que podemos iniciar la sesión de trabajo.
La palabra clave debe mantenerse en secreto para nuestra protección y cambiarse con cierta frecuencia (al menos dos veces al año). Podemos cambiar la clave de acceso con la orden passwd.
Una vez en el sistema, disponemos de un manual en línea para consultar la sintaxis y opciones de sus órdenes, e incluso algunos ejemplos de como se utiliza. El manual en línea se puede consultar con la orden man, cuya sintaxis es:
man [opciones] [sección] orden Por ejemplo, si queremos ver que hace y cuales son las opciones de la orden ls, que lista el contenido de un directorio, podemos ejecutar