+ All Categories
Home > Documents > Introducción a Unix y Linux I - infor.uva.esteodoro/Intro Unix-Linux 2016.pdf · ... Shell: Parte...

Introducción a Unix y Linux I - infor.uva.esteodoro/Intro Unix-Linux 2016.pdf · ... Shell: Parte...

Date post: 03-Oct-2018
Category:
Upload: trandien
View: 234 times
Download: 0 times
Share this document with a friend
54
Introducción a Unix y Linux Departamento de Informática Universidad de Valladolid
Transcript

Introducción a Unix y Linux

Departamento de InformáticaUniversidad de Valladolid

Contenidos

1. Breve historia de Unix y Linux2. ¿Cómo accedo al sistema?3. El sistema de archivos de Linux4. Estructura de una orden (command)5. Órdenes básicas 6. El editor vim7. Redirecciones y tuberías (pipes)8. Procesos y su gestión

• El libro de Linux. S.M. Sarwar, R. Koretsky, S.A.Sarwar. Ed. Pearson, 2005.

- Resumen de Unix. César Llamas. Depto de Informática, Universidad de Valladolid. http://www.infor.uva.es/~cllamas/fi1/unix/raiz.pdf

- Unix y Linux. Guía Práctica. Sebastián Sánchez. Ed. Ra-Ma. 2002.

- Manual de órdenes del S.O. Unix

Bibliografía

• Nacimiento: Bell AT&T (desarrollado por usuarios)• Basado en proyecto MULTICS: MIT y Bell AT&T• Ken Thompson y Dennis Ritchie• UNIX como una simplificación de MULTICS• Primero ensamblador, luego C• Finales de los 70: versiones Free BSD (Berkeley

Software Distribution)• A lo largo de las décadas de los 70 y 80 se van

añadiendo nuevas funcionalidades: memoria virtual, gestión de red, etc.

• Finales de los 80: AT&T normaliza Sistema V (SVR2/3)

1. Breve historia de Unix

• Es un sistema UNIX compuesto de software libre y de código abierto

• Licencia GNU• Desarrollado por Linus Torvalds

desde 1991-92• Distribuciones Linux• Todo tipo de aplicaciones gratuitas

Breve historia de Linux

RANKING S.O.

Servidores: https://infogr.am/estadisticas-de-uso

Escritorio: pc y portátiles

DISTRIBUCIONES LINUX

● Arquitectura:https://es.wikipedia.org/wiki/Distribuci%C3%B3n_Linux#/media/File:Arquitectura_linux.png

● Kernels:https://es.wikipedia.org/wiki/N%C3%BAcleo_Linux

● Distros:Google: principales distros

● Distros Ubuntu:http://ubunlog.com/category/distribuciones-basadas-en-ubuntu/

● Otros linux:

– IOS (Mac OS X). Unificación sobremesa y móviles– Android (google). Alternativa: CyanoGemMod

• Portabilidad (SO y software)• Sistema de archivos jerárquico• Multiusuario: android, no.• Multitarea: android, hasta la versión 4, tampoco.

El sistema operativo Linux: características

Componentes de LinuxKernel:

Acceso al ordenadorManejo de memoriaAsignación de recursos a usuarios

Shell:Parte que ve el usuarioEscucha, analiza, ejecutaCada usuario tiene un shellTambién actúa como lenguaje de programación

2. ¿Cómo accedo al sistema?Vamos a usar distintas herramientas para acceder. La primera es ssh

El host es: alumnos.est.cie.uva.es (157.88.39.111)Se accede en modo terminal con un cliente ssh a través del puerto 22222

Cuentas de alumnos que van de "alumno01" a "alumno20"Sus passwords van de "alumno1" a "alumno20"

Una vez que hayamos entrado la primera vez, podemos crear un perfil (profile), para no tener que aprendernos la dirección IP

2. ¿Cómo accedo al sistema?Pero en casa puedes usar otro software como Bitvise SSH client o XShell

Pero en casa puedes usar otro software como Bitvise SSH client o XShell

• Lo primero que haremos dentro del sistema es cambiar la contraseña mediante el mandato:

$ passwd [enter]

El sistema Linux / UNIX nos forzará a elegir una combinación de letras y números que sean “seguros”. Recuerda lo que acabas de escribir, porque será lo que tengas que usar en sucesivas sesiones.– Comprueba que todo ha ido bien volviendo a

entrar.– Desde este entorno y desde esta sesión puedes

entrar en otros sistemas Linux/UNIX: $ ssh [email protected] –p22222

• ¿Cómo termino?$ exit

3. El sistema de archivos Linux

• Estructura jerárquica de archivos. Concepto matemático• Se organiza desde directorio raíz /

– Cada usuario accede a un directorio por defecto ($HOME)

• Archivos de distinto tipo: ficheros, directorios, especiales• Se diferencian mayúsculas y minúsculas• Ficheros:– “Conjunto de datos relacionados entre sí debidamente

referenciados mediante un identificador único”– Nombres válidos de archivos:

• 255 caracteres como máximo• Caracteres alfanuméricos, _ • No deben usarse caracteres con valores especiales (*, =, ^, |) ni [, ],

‘, “, `, ni ASCII < 32 ni ASCII > 127• Ni ñ ni acentos

• Directorios:– “Fichero que contiene información sobre

otros ficheros o directorios”– Nombres válidos de directorios igual que

para ficheros– Genera una estructura jerárquica (para el

almacenamiento lógico, no el físico): padres e hijos (estructura de árbol)

– La ruta completa (secuencia de directorios, separados por /) forma parte del nombre de archivo

• Directorios:– Directorios más habituales:

/ Directorio raíz. Directorio actual.. Directorio padre“home” Directorio de entrada ($ echo $HOME)

– Las rutas de acceso pueden ser:• absolutas (desde /)

/home/profesor/belarmino/home/profesor/belarmino/Introduccion Informatica

• relativas (al directorio actual . )./Informatica General/Sesion01/ejemplo.txt../../curso ../../bin

//

boot/boot/ dev/dev/ tmp/tmp/ home/home/

alumnos

alumnos

1111111x

1111111x 2222222y2222222y

ProfesorProfesor

belarminobelarmino

usr/usr/

bin/bin/

4. Estructura de una orden (mandato o comando)

orden [-opciones] [argumentos]• orden nombre de la orden, por ejemplo, clear• opciones especifica más la orden: ls -l• argumentos nombres de los archivos o directorios

sobre los que se realiza la orden$ ls –l Sesion01$ cd $HOME

• Siempre [enter] después de escribirla para que se realice• Debe ir separada por espacios de las opciones y

argumentos• Se pueden escribir varias seguidas separadas por ;• Si hay espacios en los argumentos, puede necesitar “”• Los argumentos pueden usar caracteres comodín: *, ?, {},[] $ man orden proporciona ayuda sobre cualquier orden

Algunas órdenes para probar

• man• clear• who• who am I• date• echo

5.1. Órdenes o comandos sobre directorios

• Mostrar (list) el contenido de un directorio– ls ruta_hasta_el_dir– Muestra los ficheros y directorios que están contenidos

dentro de otro– Opciones

• -l listado largo • -a listado completo• -R recursivo

– ls –l /home– ls –la $HOME

• man ls

5. Órdenes básicas

• Borrar directorio– rmdir ruta_hasta_el_dir_a_eliminar

– Borra un directorio existente descrito por la ruta que se indica• No debe ser el directorio actual• Debe estar vacío• Por tanto, NO varios directorios a diferentes niveles en la

misma orden

• Crear directorio– mkdir ruta_hasta_el_nuevo_dir_a crear– Crea un nuevo directorio siguiendo la ruta indicada– La ruta debe finalizar con el nombre del nuevo

directorio– NO se puede crear varios directorios a diferentes

niveles en una sola orden

5.1. Órdenes o comandos sobre directorios

• Mostrar (list) el contenido de un directorio– ls ruta_hasta_el_dir– Muestra los ficheros y directorios que están contenidos

dentro de otro– Opciones

• -l listado largo • -a listado completo• -R recursivo

– ls –l /home– ls –la $HOME

• man ls

5. Órdenes básicas

• Cambiar directorio– cd ruta_hasta_el_dir

– Cambia el directorio actual– Nos desplazamos en el árbol de directorios• cd / nos movemos a la raíz del sistema

• cd $HOME• cd ..• cd ruta

– pwd después para saber dónde estamos

• Copiar fichero– cp ruta_fich_origen ruta__destino– Copia el fichero(s) indicado(s) como fichero(s)

origen en el directorio indicado en segundo lugar– Se puede copiar cambiando de nombre– Admite metacaracteres (comodines): *,?,[,]

5. 2. Órdenes o comandos sobre ficheros

• Borrar fichero– rm ruta_hasta_el_fichero_a_eliminar

– Borra un fichero que esté en la ruta indicada• No hay posibilidad de recuperar• ¡¡CUIDADO!!

• Visualizar ficheros– cat ruta_hasta_el_fichero

– more ruta_hasta_el_fichero– Visualiza el contenido del fichero sin

necesidad de editarlo con vi

• Mover fichero(s)– mv ruta_fich_origen ruta__destino– Mueve el fichero indicado como fichero origen al

directorio indicado en segundo lugar

– mv ruta_fich_origen ruta__fichero_nuevo_nombre

– Cambia de nombre el fichero

5.3. Más sobre el sistema de archivos

• Más sobre la orden ls –l-rwxr-xr-x 1 belarmino infor 153 2012-10-25 leeme.txt-rwxr-xr-x tipo de archivo: -, d, c, b

modo de protección del archivo para r (lectura), w escritura) y x (ejecución) para el Usuario, su Grupo y

Otros1 número de enlaces al archivo (en general 1, pero

puede haber más tenemos un grafo y no un árbol) o número subdirectorios

belarmino nombre de usuarioInfor nombre de grupo 153 tamaño en Bytes2012-10-25 fecha última modificación leeme.txtnombre del archivo

chmod modo archivo(s)Cambia el modo del archivo para el Usuario,

su Grupo u Otros:rwxrwxrwxCada grupo rwx puede tener el permiso activado

o desactivado (-). Cada uno representa un bit, que es 1 activado y 0 desactivado representa un número entre 0 y 7 en binario

chmod 754 ficherochmod u+w ficherochmod –w ficherochmod r-xr-x—x fichero

6. Editor vi/vim

• Sirve para crear nuevos ficheros, editar/escribir sobre ficheros, crear programas etc…

• No tiene menú, ni interfaz gráfico• Tiene dos modos de trabajo:– Modo orden o comando: para llevar a cabo

operaciones sobre el fichero editado– Modo edición: para escribir

• vi nombre_del fichero.ext

Modo comando

Modo edición

i a o I A O

EscEsc

Editor Vi/Vim

• Modo comando:– Moverse: • con las teclas del cursor o bien con las teclas h, j, k, l• $ ir al final de la línea• ^ ir al principio• w avanzar una palabra• b, B retroceder una palabra

– Borrar• un carácter: esc + x• una línea: esc + dd• reemplazar un carácter: esc + r

– Deshacer• el último cambio: esc + u

– Refrescar la pantalla• CTRL L

• Modo comando:– Buscar inicio del fichero: esc + :0– Buscar fin del fichero: esc + :$– Buscar inicio de línea: esc + 0– Buscar fin de línea: esc + $– Buscar una palabra• Hacia delante : esc + /palabra_a_buscar• Siguiente : esc + n• Hacia atrás: esc + ?palabra_a_buscar

– Substituir una palabra:• esc inicio,fin s/palabra_a_buscar/palabra_a_cambiar

– Copiar un bloque de texto• esc + numeroyy

– Pegar el bloque copiado• esc + p

• Modo comando:– Ir a una línea• esc + :numerolinea

– Colorear• esc + :syntax on

– Ver las opciones• esc + :set all

– Indentar• esc + :set autoindent

– Completar pares {}, [], ()• esc + :set sm

– Ver números de línea• esc + :set nu

– Borrar la opción:• esc + :set noopcion

• Modo comando:– Guardar : esc + :w– Guardar como: esc + :w nuevo_nombre– Guardar y salir : esc + :wq– Salir sin guardar: esc + :q!– Salir (habiendo guardado): esc + :q– Leer otro archivo, cargándolo en este:

esc + : r nombre_archivoUna vez en modo comando se puede

llamar a cualquier orden del shell mediante el símbolo !

esc + :! shesc + :! ls

7. Procesos y su gestión7.1. Conceptos previosProceso: programa cargado en memoria y

ejecutándose: (orden top)– Cada proceso tiene asignados recursos (E/S, memoria, CPU)– Cada proceso tiene un identificador (propio, PID, y de su

proceso padre, PPID)– El shell es un proceso, y todas las órdenes son procesos hijo

• Unix:– Multiusuario– Multitarea– Monoprocesador (varios núcleos)

• Procesos en CPU:– Quantum o time-slice– Planificación– Algoritmos de planificación

7.2. Estados de un Proceso

Ejecutándose(O: Running)

Listo(R: Ready)

Durmiendo(S: Sleeping)

Detenido(T: Stopped)

Zombie(Z)

Estados de un proceso

• Para conocer el identificador de un proceso podemos usar ps

Al crear un proceso (hijo), con fork():– Nuevo hilo de ejecución (diferencia con proceso)– Hereda entorno del padre– Atributos del padre

También se pueden crear procesos con exec(), pero éstos substituyen al actual proceso (imagen en memoria).

DIFERENCIA HILO-PROCESO

Proceso #i

Proceso #j

● Mismo procesador:● Mismo núcleo● Distinto

● Diferentes procesadores

Proceso #k

Hilo #1

Hilo #2

Hilo #3

Hilo #4

Hilo #n

● Comparten entorno de trabajo

● Posibilidad de ejecutarse en diferentes núcleos

7.3. Remitir Trabajos

• Desde:– Consola– Fichero de comandos (script)

• Cómo:– Primer Plano– Segundo plano (background), usando &,

podemos seguir usando la terminal mientras el proceso (o proceso por lotes, batch) termina. Ejemplo: find / -name teodoro

– Emplazado, para lanzarlo en algún momento en el futuro (generalmente asociado al mantenimiento del sistema)

Remitir Trabajos

• Primitivas relativas a remitir trabajos:– <orden> & segundo plano – nohup <orden> & std.in>/dev/n std.out > nohup.out– at <opciones> <time> <orden>

• - v verbose mode• - m send an email• -r remove

– sleep sg– time orden [argumentos]

7.4. Control de Trabajos

• Primitivas relativas al control de trabajos:– ps

- f- u- e- l

– time <orden>– nice <orden> change scheduling– kill [-señal] PID [PID]

• Algunas señales (1. SIGHUP, 9. SIGKILL, 15. SIGTERM, 18. SIGCLD)

Algunos ejemplos

Utilizando los conceptos y las órdenes que hemos visto sobre procesos, así como el manual de unix, responde qué órdenes serían necesarias para responder a las siguientes preguntas:• ¿Cuántos procesos se están ejecutando en tu

máquina en este momento? • Localiza en tu terminal cuál es el proceso del

intérprete del shell. Envía la señal número 9 (kill) al intérprete de órdenes. ¿Qué ocurre?

• Inicia un proceso en segundo plano, por ejemplo sleep 5000. Termina la sesión y vuelve a conectarte. ¿El proceso se sigue ejecutando?

• ¿Cómo se podría evitar que al finalizar la sesión dejase de ejecutarse?

8. Redirecciones y tuberías• Una de las abstracciones importantes en UNIX es el stream:

canal de entrada-salida con una interfaz estándar. • Cada proceso (programa cargado en memoria y ejecutándose)

en UNIX tiene por derecho propio tres streams asignados: stdin, stdout y stderr, aunque se pueden definir más

Stdout

Programa en

ejecución

Stdin Stderr

EscrituraSalida

Por defecto, pantalla (&1)

Por defecto, teclado Por defecto,

pantalla (&2)

Escritura

Salidade errorEntrada

Lectura

● Dar la orden:find / > salida.txt

● Identificar stderr y stdin

• 0 stdin es la entrada estándar y se asocia inicialmente al teclado del terminal. Por este canal recibe los datos cada proceso.

• 1 stdout (o &1) es la salida estándar y se asocia inicialmente al dispositivo de salida del terminal, abreviando: la pantalla. Por este canal se envían los resultados del procesamiento.

• 2 stderr (o &2) es la salida estándar de errores y se asocia inicialmente a la pantalla. Por este canal se suelen enviar las advertencias y errores que ocurren en el proceso.

Un pequeño problema es que la salida de error aparece mezclada con la salida estándar y, además, no siempre están «sincronizadas», es decir, las líneas que salen por stdout y stderr no tienen que estar ordenadas temporalmente.

Lo interesante está en que estos canales de entrada-salida pueden conectarse (y reconectarse) entre sí:

– con un canal que parte o llega a un archivo; – con un canal que parte o llega a un dispositivo;– los canales de un proceso con los de otro (lo que se denomina

tuberías)

Por lo tanto, realizar tareas complejas se convierte, muchas veces, en conectar procesos simples entre sí.

Al procedimiento de redirigir las conexiones desde su configuración de partida se le denomina redireccionamiento:

- Cambiar el canal de entrada de un proceso se hace con < ó <<- Cambiar el canal de salida de un proceso se consigue con >,

>> ó 1>, 1>>- Cambiar el canal de salida de errores de un proceso se

consigue con 2> ó 2>>

Redirección de entrada:orden < archivo

Conecta la entrada estándar de una orden con un archivo. De esta forma, cualquier orden que recibe sus datos desde el teclado se puede conectar con un archivo.

La redirección de la salida estándar es fácil también: orden > archivo

Crea un archivo y se envía la salida de la orden orden 1> archivo

(idem al anterior)

Con la salida de error estándar podemos hacer algo parecido. orden 2> archivo

Crea un archivo y se envía la salida de errores de la orden orden 2>> archivo

Añade al archivo la salida de errores de la orden Si queremos, podemos guardar los mensajes de error

de una orden en un archivo normal.

La redirección de la salida estándar es fácil también (cont.) orden >> archivo

Añade al archivo la salida de la orden orden 1>> archivo (idem del anterior)

No necesitamos programar la salida de datos hacia un archivo:Podemos hacerlos desde el shell de UNIX.

● Dar las órdenes:find / 1>salida.txt &

find / 1>salida.txt 2>errores.txt &

8.1. Filtros• Cualquier proceso que lea su entrada de la

entrada estándar (stdin) y escriba su salida en la salida estándar (stdout) se denomina filtro.

• Ejemplos de filtros:– cat

Si no lleva argumentos, lee de teclado hasta que pulsemos [CTRL+D]

– sort [-ndtX] [+campo] [archivo(s)]Ordena líneas de fichero(s) donde hay campos (separados por tabuladores u otro separador), pero manda la salida a stdout

– grep [-inv] patrón [archivo(s)]Busca en los ficheros el patrón (literal o con metacaracteres) y lo muestra en stdout

– wc [-lwc] [archivo(s)]Cuenta el números de líneas/palabras/caracteres de un fichero

● Dar la orden sort – Escribir palabras, una en cada línea (ejemplo:

nombre(s) y apellidos, uno por línea). Acabar con CTRL+D.

● Dar la orden:ps -el | grep ss*

● Dar la orden:find / | wc -l

Ejemplos de redirección de entradaSupongamos que tenemos un archivo con unas cuantas líneas, denominado ejemplo: $ cat < ejemplo

Muestra en pantalla los contenidos del canal de entrada, que se encuentra asociado al archivo ejemplo.

$ sort < ejemploOrdena lexicográficamente los contenidos del archivo

anterior.$ wc < ejemplo

Cuenta las líneas, palabras y caracteres del archivo.

Ejemplos de redirección de salida:$ echo Hola > Hola

Creamos el archivo Hola con una línea de contenido: Hola.

$ cat < ejemplo > dl.t Creamos el archivo dl.t a partir del archivo ejemplo.

$ wc dl.t > abc Crea el archivo abc con las cuentas del archivo dl.t.

$ wc dl.t 1> abc (idem del anterior)

$ wc dl.t >> abc si queremos mantener el contenido anterior de

abc.

Ejemplos de redirección de la salida de error:$ wc no-existo 2> basura

Suponemos que el archivo no-existo no existe $ wc no-existo > basura 2>&1

(idem del anterior), pero se conecta la salida estándar al archivo basura y, la salida de errores, a la salida estándar!!

$ wc no-existo 2> basura 1>&2 (idem del anterior), pero se conecta la salida de errores alarchivo basura y, la salida estándar, a la salida de errores!!

En el ejemplo anterior se ilustra cómo también podemos conectar stdout y stderr entre sí. ¡Cuidado! Porque si cambiamos el orden de las redirecciones, el shell se puede quejar.

8.2. Tuberías• Conexión de la salida de una orden con la entrada

de la siguiente, mediante el símbolo |• Crea un vínculo entre la salida del primer proceso

y la entrada del segundo, y actúa como una tubería (First In First Out)$ who > temporal $ who | wc –l $ wc –l < temporal$ rm temporal

$ ls –l | grep “.txt”

• Se pueden conectar varios procesos: orden1 | orden2 | orden3$ ls –l | grep “.txt” | wc –l

Problema: A la vista de estos conceptos y lo que hemos visto sobre procesos y su control, una vez que has visto cuántos procesos hay en el sistema, ¿qué órdenes tendrías que dar para saber automáticamente cuántos son tuyos?


Recommended