TODO LINUX
1. Historia ........................................................................................................... 3
             Antecedentes:............................................................................................................. 3
             Nacimiento:................................................................................................................. 3
             Expansión de Unix:..................................................................................................... 3
             Evolución: ................................................................................................................... 4
             La G.N.U..................................................................................................................... 5
             Distribuciones de Linux. ............................................................................................. 6
         2. Generalidades de la gestión del S.O. ........................................................... 6
         3. Características ............................................................................................... 7
         4. Estructura del S.O. UNIX ............................................................................... 8
             Kernel o Núcleo .......................................................................................................... 8
             Dispositivos ................................................................................................................ 8
             Utilidades .................................................................................................................... 8
             SHELL o Caparazón................................................................................................... 8
         5. Primera Aproximación................................................................................... 9
             Antes de entrar al Sistema: ........................................................................................ 9
             Escribir algunos comandos para tomar contacto. ...................................................... 9
         6. Algunas utilidades para experimentar. ...................................................... 10
             Consultar el manual.................................................................................................. 10
             Hacer cálculos .......................................................................................................... 10
             Mirar el almanaque ................................................................................................... 11
         7. Conceptos Básicos del Sistema de Ficheros ............................................ 12
             Distribución de la información en disco: ................................................................... 12
             Inodos ....................................................................................................................... 12
             Los ficheros pueden ser esencialmente de tres tipos: ............................................. 13
             Trayectoria o pathname:........................................................................................... 16
             Nombres de ficheros y Metacaracteres.................................................................... 16
         8. Trabajo del Usuario con Ficheros Ordinarios. .......................................... 18
             Formato de las órdenes............................................................................................ 18
             Crear ficheros ........................................................................................................... 18
             Listar nombres e informacion sobre ficheros............................................................ 18
             Copiar, Mover, Enlazar y Borrar Ficheros. ............................................................... 19
             Permisos, Propietario y Grupo. ................................................................................ 21
         9. Operaciones Con Ficheros Directorios...................................................... 26
         10. Flujo De Información. .................................................................................. 28
             Entrada y salidas estándar (std)............................................................................... 28



El Sistema Operativo Unix - Linux                                                                                                                1
Redireccionamiento:................................................................................................. 28
             Tuberías (pipes): ...................................................................................................... 29
             Filtros para: Contar, Ordenar y Eliminar Repetidos.................................................. 30
             Filtros para ver que hay en los ficheros.................................................................... 32
             Filtro para cambiar caracteres.................................................................................. 33
             Buscar en ficheros. Familia grep. ............................................................................. 35
             Comparacion de Ficheros. ....................................................................................... 36
             Cortar y Pegar Ficheros. .......................................................................................... 37
         11. Búsqueda de ficheros. ................................................................................ 39
         12. Editores: ....................................................................................................... 42
             Editor VIsual. Generalidades. ................................................................................... 42
             Configuración ........................................................................................................... 44
             Búsquedas y reemplazos. ........................................................................................ 46
             Los Búfers del VI ...................................................................................................... 47
         13. Comunicación entre Usuarios .................................................................... 49
             finger......................................................................................................................... 49
             who ........................................................................................................................... 49
             w ............................................................................................................................... 49
             write .......................................................................................................................... 50
             wall............................................................................................................................ 50
             Mensaje del día. ....................................................................................................... 51
             Mensaje de preentrada............................................................................................. 51
             mail ........................................................................................................................... 51
         14. Empaquetar y Comprimir Ficheros. ........................................................... 54
             tar ............................................................................................................................. 54
             gzip ........................................................................................................................... 55
             Los dos a la vez: tar y gzip ....................................................................................... 56
             zcat ........................................................................................................................... 56
             compress, uncompress ............................................................................................ 56
             bzip2, bunzip2........................................................................................................... 56
         15. Sistema de Impresión.................................................................................. 57
             Mandar trabajos a la impresora ................................................................................ 57
             Control de la cola...................................................................................................... 58




El Sistema Operativo Unix - Linux                                                                                                                   2
Historia

     Antecedentes:
    El SO Multics se utilizó durante algún tiempo en los laboratorios Bell.
     En Europa se había desarrollado el sistema de acceso multiple de Cambridge (The Cambridge
Multiple Access System).
    También se empleó durante algún tiempo el CTSS (sistema de tiempo compartido compatible).
    Los desarrolladores de Unix aprovecharon este trabajo realizado con estos y otros sistemas
operativos, para combinar las mejores características de cada uno.

     Nacimiento:
    El UNIX surgió en 1964-66 cuando Ken Thompson intentaba utilizar un programa de un
ordenador grande, que funcionaba con el SO Multics, en otro ordenador llamado PDP-7. Para ello
escribió un sistema operativo nuevo llamado UNIX.
    A él se unió Dennis Ritchie y el UNIX se comenzó a utilizar en los laboratorios Bell.
     Pronto se adaptó a otros ordenadores y tuvo gran aceptación en el ambiente universitario, del
cual recibió un gran impulso, en especial de la Universidad de Berkeley en California.
    En un principio fue escrito en Ensamblador, pero el hecho de que se pudiese adaptar a
muchos tipos de ordenadores (portabilidad), se debe a que se reescribió casi en su totalidad en
lenguaje C, lenguaje de nivel medio desarrollado por Dennis Ritchie modificando otro ya existente
llamado lenguaje B.
    El nacimiento de UNIX y el lenguaje C se hizo a la par y su posterior desarrollo continuó
paralelo.

     Expansión de Unix:
     El sistema operativo Unix ha estado ejecutándose en ordenadores más de 40 años. En un
principio se ejecutaba en mainframes y miniordenadores, aunque su principal plataforma de
desarrollo han sido las estaciones de trabajo RISC. En la actualidad el acercamiento de los PC,s a
las estaciones de trabajo ha hecho de las plataformas Intel una buena base para utilizar Unix.
    Debido a la gran portabilidad que ofrece el lenguaje    C, no pasó mucho tiempo antes de que
creasen versiones destinadas a otros procesadores.
     La evolución de Unix comenzó a complicarse cuando Unix se escindió para satisfacer a
diferentes plataformas hardware. Por un lado se obtuvo Xenix, de Microsoft, el primero en
ejecutarse en ordenadores Intel. La versión BSD, desarrollada en la Universidad de California, en
Berkeley, encontró alojamiento en multitud de miniordenadores de alta potencia. Unix 2.0, el
predecesor del presente System V Unix de AT&T, fue el que más atención acaparó y es el estándar
de hoy en día.
    El diagrama muestra un árbol genealógico de Unix desde 1969 hasta nuestros días. Obsérvese
cómo Unix se divide en varias versiones. Además, es importante destacar de qué forma se
combinaron diversas versiones con el fin de obtener nuevos enfoques del sistema operativo. El
nacimiento de híbridos de diferentes versiones parece la tendencia del momento. Algunos de los
elementos más destacables de esta numerosa familia son AIX, el sistema operativo IBM RS/6000,
Solaris de SunSoft y Mach.


    El árbol genealógico de Unix.:
                                                        V1


El Sistema Operativo Unix - Linux                                                               3
V6


          Xenix                     2.0                      V7                             BSD

                                    SIII                    32V                            2BSD

                               System V                      V8                            3BSD

                                    SVR2                    V10                            4BSD

           SCO                      SVR3                  Plan 9                             4.2

                                                                                             4.3


                    SVRS3.2
                                                AIX                       V1               Mach


                      SVR4


     Evolución:
    Cuando Unix era joven (versión 6), su código fuente se encontraba por todas partes, con
autorización de AT&T, y se estudiaba frecuentemente en muchas universidades, de las cuales
había recibido y recibía un gran impulso.
    Pero AT&T, en la versión 7 (1979), comprendió que Unix era un valioso producto comercial; y
prohibió el estudio y distribución del código fuente, para evitar poner en peligro su condición de
secreto comercial.
    Para remediar la situación y especialmente con fines educativos, en 1983, Andy Tannembaum
desarrolló un SO nuevo en cuanto a código, pero compatible con Unix en cuanto a su funcionalidad,
evadiendo los problemas legales para su estudio. Lo llamó Minix de Mini-Unix. Finalmente su
creador cedió todos los derechos sobre Minix a una empresa que comenzó a cobrar por licencia.
     A principios de la decada de los 90, un estudiante de informática se pone a trabajar en una
variante de Unix llamada Linux, con la idea de que estubiese enmarcado dentro del proyecto GNU.
El padre de la criatura es Linus Benedict Torvalds, nacido en Helsinki en 1969.
    El 5 de octubre de 1991 Linus dio a conocer la primera versión oficial, que podía ejecutar el
bash (shell de GNU) y el compilador de C. Lo puso en un grupo de noticias con el siguiente
mensaje:
               ”¿Suspiráis por recordar aquellos días del Minix-1.1, cuando los hombres eran
      hombres y escribían sus propios drivers? ¿Os sentís sin ningún proyecto interesante y os
      gustaría tener un verdadero SO, que pudierais modificar a placer?
               ¿Os resulta frustrante el tener sólo a Minix? Entonces, este artículo es para vosotros.
              Como dije hace un mes, estoy trabajando en una versión gratuita de algo parecido a
      Minix para ordenadores AT-386. He alcanzado la etapa en la que puede ser utilizable y voy a




El Sistema Operativo Unix - Linux                                                                        4
poner las fuentes para su distribución. Es sólo la versión 0.02 ... pero he conseguido ejecutar
      en el bash, gcc, gnu-make, gnu-sed, compress, etc.”
    Tras esta versión y el apoyo de voluntarios “enganchados” a Internet, no ha dejado de
evolucionar y mejorarse:
        1992 Linus añadió Linux al proyecto GNU.
        Abril de 1992, aparece la primera versión capaz de ejecutar X.
        Abril de 1994, primera versión completa de Linux, la 1.0.
        Diciembre de 1996 aparece la versión 2.0.
        Para comprobar la versión actual http://www.kernel.org
    Linux ha sido registrado bajo los términos de la Licencia Pública General GNU (GNU General
Public License) o GPL. Esta licencia, escrita por la Free Software Foundation (FSF), está diseñada
para evitar que alguna persona restrinja la distribución de software. En pocas palabras, dice que
aunque Ud. cobre a alguien por entregarle una copia, no podrá impedir que ese alguien la regale.
También significa que debe estar disponible el código fuente. Esto es útil para los programadores.
Cualquiera puede modificar Linux y aún distribuir sus modificaciones, siempre que mantenga el
código bajo la misma licencia.

     La G.N.U.
     Linux está regido por lo que se conoce como la Licencia Pública General de GNU, o GPL,
General Public License. La GPL fue desarrollada para el proyecto GNU por la Free Software
Foundation, que podemos traducir como "Fundación por el Software Gratuito". La licencia hace una
serie de previsiones sobre la distribución y modificación del "software gratis". "Gratis" en este
sentido se refiere a libertad, y no sólo al coste. La GPL puede ser interpretada de distintas formas,
y esperamos que este resumen ayude a entenderla y cómo afecta a Linux. Se puede encontrar una
copia completa de la Licencia en Internet o en cualquier libro de Linux.
     Originalmente, Linus Torvalds lanzó Linux bajo una licencia más restrictiva que la GPL, que
permitía que el software fuera libremente distribuido y modificado, pero prohibía su uso para ganar
dinero. Sin embargo, la GPL autoriza que la gente venda su software, aunque no le permite
restringir el derecho que su comprador tiene a copiarlo y venderlo a su vez.
     En primer lugar, hay que aclarar que el "software gratis" de la GPL no es software de dominio
público. El software de dominio público carece de copyright y pertenece literalmente al público. El
software regido por la GPL sí tiene el copyright de su autor o autores. Esto significa que está
protegido por las leyes internacionales del copyright y que el autor del software está declarado
legalmente. No sólo porque un programa sea de libre distribución puede considerársele del dominio
público.
     El software regido por la GPL tampoco es "shareware". Por lo general, el "shareware" es
propiedad del autor, y exige a los usuarios que le paguen cierta cantidad por utilizarlo después de la
distribución. Sin embargo, el software que se rige por la GPL puede ser distribuido y usado sin
pagar a nadie.
     La GPL permite a los usuarios modificar el software y redistribuirlo. Sin embargo,
cualquier trabajo derivado de un programa GPL se regirá también por la GPL. En otras
palabras, una compañía nunca puede tomar Linux, modificarlo y venderlo bajo una licencia
restringida. Si un software se deriva de Linux, éste deberá regirse por la GPL también.
     La GPL permite distribuir y usar el software sin cargo alguno. Sin embargo, también permite
que una persona u organización gane dinero distribuyendo el software. Sin embargo, cuando se
venden programas GPL, el distribuidor no puede poner ninguna restricción a la redistribución. Esto
es, si compras un programa GPL, puedes a su vez redistribuirlo gratis o cobrando una cantidad.




El Sistema Operativo Unix - Linux                                                                       5
Esto puede parecer contradictorio. ¿Por qué vender software cuando la GPL especifica que
puede obtenerse gratis? Por ejemplo, supongamos que una empresa decide reunir una gran
cantidad de programas GPL en un CD-ROM y venderlo. La empresa necesitará cobrar por el hecho
de haber producido el CD, y asimismo querrá ganar dinero. Esto está permitido por la GPL.
     Las organizaciones que vendan el software regido por la GPL deben tener en cuenta algunas
restricciones. En primer lugar, no pueden restringir ningún derecho al comprador del programa.
Esto significa que si compramos un CD-ROM con programas GPL, podremos copiar ese CD y
revenderlo sin ninguna restricción. En segundo lugar, los distribuidores deben hacer saber que el
software se rige por la GPL. En tercer lugar, el vendedor debe proporcionar, sin coste
adicional, el código fuente del software a distribuir. Esto permite a cualquiera adquirir el software
y modificarlo a placer.
     Permitir a una empresa distribuir y vender programas que son gratis es bueno. No todo el
mundo tiene acceso a Internet para llevarse los programas, como Linux, gratis. La GPL permite a
las empresas vender y distribuir programas a esas personas que no pueden acceder al software
con un coste bajo. Por ejemplo, muchas empresas venden Linux CD-ROM por correo, y hacen
negocio de esas ventas. Los desarrolladores de Linux pueden no tener constancia de estos
negocios. Por ejemplo, Linus sabe que ciertas compañías venden Linux, y él no va a cobrar nada
por esas ventas.

     Distribuciones de Linux.
    Es imprescindible seleccionar una distribución que se adapte a las necesidades de cada uno
para poder instalar, configurar y administrar un sistema Linux con éxito.
     Hace años, cuando Linux empezó a distribuirse por Internet, instalar Linux consistía en bajarse
de Internet todos los archivos necesarios a unos disquetes. En esos tiempos la instalación podía
llegar a ser un laborioso proceso, haciendo que muchos usuarios frustrados acabasen por rendirse.
Por ello, programadores de todo el mundo se unieron para crear distribuciones que incorporasen el
sistema operativo y programas que facilitaran la instalación, además de los paquetes conteniendo
programas de todo tipo. De esta forma la instalación se reducía a seguir unos pasos, dando la
posibilidad a los usuarios con pocos conocimientos de poder instalar un sistema operativo de este
tipo con un menor esfuerzo.
    En este momento hay un buen número de distribuciones en las que poder elegir, pero cada
una de ellas tiene sus pros y sus contras.

     Generalidades de la gestión del S.O.
    Está escrito en C, en lugar de enamblador, como la mayoría de los sistemas, lo que le permite
una completa adaptación a los diferenes ordenadores.
    Como otros SSOO consta de dos partes:
    1. El núcleo, que se encarga de la gestión de la memoria, planificación de la CPU y el
        Sistema de ficheros.
    2. Los programas del sistema, que facilitan la compilación, ejecución y manipulación de
        ficheros.
    La CPU está planificada de forma que favorece los procesos interactivos.
    La planificación de los procesos se hace mediante un algoritmo de prioridades, de forma que a
números mayores corresponde una menor prioridad y procesos del sistema poseen prioridad
negativa. Para los procesos que utilizan mucho la CPU, se les concede tiempo según Round-Robin.
    La espera de un proceso indefinidamente, se resuelve mediante el cambio de prioridad por
envejecimiento de los procesos.
    Existen dos tendencias en la planificación de la memoria, dependiendo de las diferentes
versiones de Unix:



El Sistema Operativo Unix - Linux                                                                  6
a) En unas se utiliza el intercambio (swapping) entre los diferentes procesos. Los
           procesos víctimas se eligen: por estar ociosos, llevar mucho tiempo en memoria o ser
           grandes. Y se cargan en memoria si llevan mucho tiempo fuera o son pequeños.
        b) En las versiones de Berkeley y Linux, se utiliza el sistema de memoria virtual con
           paginación bajo solicitud.


    El sistema de entrada y salida maneja normalmente dos tipos de dispositivos:
    1. De bloque, como discos y cintas.
    2. Y de caracteres, terminales e impresoras.
    Los ficheros se organizan en directorios estructurados en árbol y se manejan mediante bloques
de datos.


    Linux tiene soporte para diferentes sistemas de archivos, algunos son sistemas de archivos de
redes especializados o son sistemas de archivos desarrollados para otros sistemas operativos. Una
sorprendente cantidad de ellos pueden ser utilizados como sistema de archivos nativo en Linux:
ext2, ext3, ext4, ReiserFS, XFS, y Journaled File System (JFS).
    La cuarta extensión del sistema de archivos (ext4fs) existe porque algunos desarrolladores
querían incorporar nuevas y mejoradas características al ext3. La mejora más llamativa de ext4
está en el soporte de archivos y sistemas de archivos de gran tamaño.



     Características
    Multitarea: Un usuario puede ejecutar varios programas (procesos) a la vez, sin tener que
detener una aplicación para ejecutar otra.
    Multiusuario: Varios usuarios pueden acceder a las aplicaciones y a los recursos en el mismo
PC y al mismo tiempo. Con la impresión para cada uno de ellos de estar trabajando solo.
    Tiempo compartido: Es la forma de conseguir las características anteriores, y se basa en que
en una fracción de tiempo muy pequeña, la CPU atiende a varios usuarios. A cada proceso se le
dedica por turno una unidad de tiempo llamada “cuanto”.
    La memoria: es aprovechada al máximo, para acceder al disco el menor número de veces,
consiguiendo mayor rapidez.
     Recuperación automática del sistema de ficheros después de una caída del sistema, o
interrupción eléctrica.
    Seguridad de acceso a la información de cada usuario, mediante una serie de permisos que el
propietario puede conceder o denegar sobre cada uno de sus ficheros.
    Multiplataforma: Corre en muchos PCs distintos (Intel 386/486/Pentium y compatibles,...).
Facilita la portabilidad del software, entre plataformas, al menos a nivel de código fuente.
    Shell programables, lo que le hace ser un SO muy flexible.




El Sistema Operativo Unix - Linux                                                              7
Estructura del S.O. UNIX
     Es un SO jerárquico, ya que se organiza en una serie de estratos, cada uno de los cuales
interactúa con su entorno a través de interfaces bien definidos.


                                       SHELL
                                     Utilidades
                                    Dispositivos
                                     Kernel
                                     Hardware




     Kernel o Núcleo
       Es el corazón del sistema, la parte más cerrada al usuario y más cercana al hardware.
Reside permanentemente en memoria. Su trabajo consiste en:
    •   Planificar, coordinar y gestionar la ejecución de procesos.
    •   Dar servicio al sistema, como entrada / salida y gestión de ficheros.
    •   Manejar las operaciones dependientes del hardware, realizando las operaciones de más
        bajo nivel de manera que se oculten al usuario.

     Dispositivos
    Los ficheros de dispositivo son los intermediarios entre el SO y el dispositivo físico.

     Utilidades
    Estas órdenes también conocidas como herramientas, que van desde el compilador de C,
hasta el editor de texto, pueden utilizarse por separado o de forma conjunta para llevar a cabo
tareas útiles. Se invocan por su nombre a través del Shell.

     SHELL o Caparazón
    Es la parte que permite al usuario comunicarse con el sistema, también se le conoce como
"caparazón".
    Puede estudiarse desde dos puntos de vista:
        1.- Como intérprete de comandos, es un programa que siempre está en ejecución.
    -   Espera que introduzcamos una orden.
    -   Analiza la línea.
    -   Comprueba su corrección y los permisos.
    -   Y llama a ejecución al programa o programas necesarios.


       2.- Como lenguaje de programación: Combina, mediante estructuras de control grupos
de órdenes, estos ficheros se llaman procedimientos Shell, Shell Script o guiones Shell, además
posee sus propias sentencias. (se estudiarán más adelante)




El Sistema Operativo Unix - Linux                                                                 8
Existen varios tipos de SHELL diferentes:
     sh: Bourne Shell (Unix System V, Xenix). Los shell tipo Bourne toman su nombre a partir de su
inventor, Steven Bourne. Este fue el shell original de Unix, denominado sh; a partir de entonces, la
mayoría de los shells tienen un nombre con el sufijo sh para indicar que son extensiones de la idea
original.
      Está diseñado para usuarios experimentados, su prompt por defecto es el signo dólar ($).
Tiene capacidad para redireccionar entradas y salidas, interpretar metacaracteres, usar tuberías y
filtros, manejar variables y además posee su propio lenguaje de programación.
   Tradicionalmente, los shell Bourne se han utilizado para los scripts de shell por razones de
compatibilidad con el sh original
     rsh: Reduced Shell, es un subconjunto del anterior, contiene las órdenes básicas. No permite
el cambio de directorio ni el redireccionamiento.
    csh: C Shell (Berkeley), fue implementado por Bill Joy, los shells C han sido más comunes en
su aplicación interactiva. Es similar al sh, pero añade algunas características específicas para el
programador de C.
     Ksh: Korn Shell, desarrollado por David Korn de Bell Laboratories, incorpora la mayor parte de
las características del csh y conserva la sintaxis y características básicas del sh.
     Bash: Bourne Again Shell. Fue desarrollado en el marco GNU, y es el derivado más extendido
del Bourne Shell.
    Tcsh: Una versión de csh para Linux.
     En principio el Administrador del sistema adjudica un tipo de Shell a cada usuario, aunque este
puede cambiarse tecleando el nombre de otro Shell (si tiene permiso); se sale de un Shell pulsando
Ctrl + d.

     Primera Aproximación

     Antes de entrar al Sistema:
     Debe de tener creada una cuenta de usuario, la cual tendrá un nombre y que además puede
llevar asociada una palabra clave.
     Se podrá acceder al sistema mediante cualquier terminal que esté preparado, en cuyo caso
mostrará por pantalla: login:, esto quiere decir que está esperando a que le introduzcamos un
nombre de usuario. Una vez introducido y pulsado Return puede que nos pida una palabra clave
password: Pasados estos requisitos puede que aparezca algún mensaje y debajo el prompt del
Sistema.
    Para los usuarios habitualmente el prompt es sólo el signo dólar ($), pero en linux suele
aparecer por defecto: el nombre del usuario, el de la computadora y la trayectoria actual en el árbol
de directorios (el directorio de conexión se muestra como ~).

     Escribir algunos comandos para tomar contacto.
     Hay que tener en cuenta que el UNIX distingue entre mayúsculas y minúsculas.
     Se adelantan dos órdenes de gestión de ficheros, para crear un directorio “prueba”, en el que
se realizarán las primeras prácticas:

    mkdir nombre_dir
    Crea un nuevo directorio.




El Sistema Operativo Unix - Linux                                                                  9
cd nombre_dir
    Activa o se traslada al directorio indicado.

    date
    Muestra la fecha actual.

    who
    Indica que usuarios están en ese momento conectados al Sistema.

    clear
    Borra la pantalla.

    echo mensaje
    Vuelve a escribir el mensaje.

   echo mensaje > fichero
   El signo mayor que (>), significa redirigir la salida o resultado de un comando. Guardaría el
mensaje dentro del fichero que hayamos indicado.

    ls
    Lista los nombre de los ficheros.

    cat fichero
    Visualizaría el contenido del fichero, aunque su principal función es concatenar ficheros.

    rm fichero
    Borra el fichero indicado.


    Cuando se desea terminar un programa antes de su fin normal debemos pulsar la tecla Supr
dos veces en Unix y Ctrl + C en Linux.

    Para salirnos del Sistema pulsamos las teclas Ctrl + d.


    1ª Práctica de familiarización con las órdenes anteriores.

     Algunas utilidades para experimentar.

     Consultar el manual
    man orden
    Nos explica la utilidad y el funcionamiento de la orden. Es un auténtico manual adaptado a
nuestro sistema en particular.

     Hacer cálculos
    bc
    Se puede emplear como una calculadora normal.
    Para separar los decimales emplea el punto (.).
    Admite cualquier nivel de paréntesis.
    Las operaciones son: + (suma), - (resta), * (multiplicación), / (división), % (módulo o resto), ^
(exponenciación).




El Sistema Operativo Unix - Linux                                                                 10
Tiene capacidad para asignar valores a variables utilizando el signo igual (=).
   Utiliza unas variables internas que rigen su trabajo, a las que les podemos cambiar su valor,
como son:
              -   obase=nº base del sistema de numeración en el que mostrará los resultados.

              -   ibase=nº ídem para leer las entradas.

              -   scale=nº nº de dígitos decimales que se deben de tener en cuenta en un
                  cálculo, comprendido entre 0 y 99,

    Permite la creación de funciones, lo cual no se explicará por ahora; un ejemplo:
                 define a(x,y){
                 auto z
                 z = x * y
                 return(z)
                 }
         Se usaría: a(4, 7.8)

     Mirar el almanaque
    cal [[mes] año]
    Sin argumento nos muestra fecha, hora y despliega el mes actual, anterior y posterior.
    Con un solo nº del 0 al 9999 muestra todo el calendario del año correspondiente; y si le
especificamos mes y año sólo muestra ese mes.


    2ª Práctica de familiarización con las utilidades anteriores.




El Sistema Operativo Unix - Linux                                                              11
Conceptos Básicos del Sistema de Ficheros

     Distribución de la información en disco:
    - Sector de arranque. Almacena un pequeño programa de inicialización, que a su vez pasa el
control a otro más grande o al mismo KERNEL. En los sistemas de ficheros que no poseen
arranque el primer bloque no se utiliza.
     - Superbloque también conocido como Cabecera del Sistema de Ficheros. Contiene datos
importantes sobre el resto de la distribución del disco, como es:
                       Bloques ocupados por los i-nodos: isize.
                       Bloque ocupados por los ficheros: fsize.
                       Puntero a la tabla de bloques disponibles.
     - Tabla de i-nodos. Se almacenan a partir del bloque 2 con una longitud de isize bloques; están
numerados secuencialmente con un tamaño fijo de 64 bytes en los que se almacena información
relativa a un fichero.
     - Bloques de ficheros. En ellos se almacena la información que contienen los ficheros (y otra
información necesaria como distintas tablas).
    - Area de swap

     Inodos
    Los ficheros son la unidad fundamental del Sistema de Ficheros Linux. Cada fichero al ser
grabado es asociado automáticamente y durante toda su vida a un inodo (nodo-i), este identifica
perfectamente al fichero asociado y contiene los siguientes datos del fichero al que identifica:
        TIPO: ordinario (-), directorio (d), especial (b) o (c), enlace simbólico (l)
        PROPIETARIO: usuario que creó el fichero.
        GRUPO: grupo al que pertenece el usuario.
        PERMISOS: pueden ser de lectura, escritura y ejecución para el propietario, su grupo y
el resto de los usuarios. Estos se pueden alterar según las necesidades de seguridad con el
comando chmod.
        NÚMERO DE ENLACES: un enlace es la unión entre un nombre de fichero y un inodo.
Un mismo fichero puede estar referenciado por otro nombre. Los enlaces se pueden crear con
la orden ln.
       TABLA DE PUNTEROS: es un vector con trece posiciones, cada una de las cuales
almacena un puntero, cuyo significado es:
        -   Los diez primeros punteros señalan a los diez primeros bloques de información del
            fichero.
        -   El décimoprimer puntero señala a otra tabla que contiene punteros, que a su vez
            apuntan a bloques de información.
        -   El décimosegundo puntero señala a otra tabla que contiene punteros, que a su vez
            apuntan a tablas de punteros, que apuntan a bloques de información.
        -   El décimotercer puntero señala a otra tabla de punteros, cada uno de los cuales
            apuntan a tablas de punteros, que a su vez apuntan a tablas de punteros, que
            apuntan a bloques de información.
        FECHA DE CREACION.
        FECHA DE LA ÚLTIMA MODIFICACION.
        FECHA DE LA ÚLTIMA UTILIZACION.



El Sistema Operativo Unix - Linux                                                                12
Para comprobar el nº de inodo, usar la orden ls con la opción -i.

     Los ficheros pueden ser esencialmente de tres tipos:
    ORDINARIOS: lo que normalmente se entiende por ficheros, contienen texto, datos o
programas.
    ESPECIALES: corresponden a dispositivos físicos (hacen de interface entre el Sistema y el
dispositivo físico), sirven para que nos podamos comunicar con discos, impresoras, terminales y la
memoria del Sistema. Son llamados también ficheros especiales de dispositivos, y pueden ser de:
         o Bloques (b), disquete, partición del disco duro, disco duro entero,...
         o Caracteres (c), cinta magnética, puerto paralelo, puerto serie,...
    Esos ficheros se almacenan en el directorio /dev:
         o /dev/fd0 disquete de la primera disquetera (A: en Windows).
         o /dev/sda         primer disco duro (sin considerar particiones) (antes eran /dev/hda para
              discos IDE y /dev/sda para SCSI).
         o /dev/sda1 primera partición del primer disco.
         o /dev/sdb segundo disco duro.
         o /dev/sdc disco USB (se utiliza emulación SCSI).
         o /dev/sdc1 partición de un disco USB.
         o /dev/ttyS1 primera terminal de consola.
         o /dev/ttyS2 segunda terminal de consola.
         o /dev/lp0 primer puerto paralelo.
         o /dev/null cualquier dato enviado a este dispositivo desaparece.
         o /dev/pty pseudoterminales, proporcionan un "terminal" a sesiones remotas.
         o /dev/console consola del sistema, monitor conectado directamente a su sistema.
         o /dev/tty consolas virtuales del sistema.


    DIRECTORIOS:
    Con la orden cat fichero ¿Cómo accede el SO a los bloques de este fichero?.
     Los directorios son ficheros que contienen información sobre ficheros u otros directorios, esta
información es su nombre y número de inodo. Con el comando ls se pueden visualizar los nombres
de los ficheros contenidos en el directorio y otros datos.
    Linux utiliza la estructura de directorios en forma de árbol, para mantener la cohesión entre sus
ramas, cada directorio contiene otro llamado . (punto), que hace referencia a él mismo, y otro .. (dos
puntos), que hace referencia al su directorio padre.
    Para ver la información de los directorios . y .., utilizar la orden ls con la opción -a.
     Utilizar la orden ls -l, que nos muestra la mayor parte de las características de los ficheros y
directorios (tipo, permisos, enlaces, propietario, grupo, ocupación en bytes, fecha última actualización y
nombre del fichero).
    Distingue entre los tipos de ficheros, para ver ficheros de dispositivo en /dev.
    Observa los permisos de los ficheros ordinarios y de los directorios. ¿Son iguales?
    ¿A qué grupo perteneces?
    Estudiar el nº de enlaces de los directorios.
           a) Recién creado.
           b) Con distinto nº de subdirectorios.




El Sistema Operativo Unix - Linux                                                                      13
Organización de directorios en Unix
      Ejemplo de estructura básica de un sistema Linux:
                                                       /.


bin          boot    dev       etc     home            lib      proc         sbin         usr         tmp      var




                      Ftp     Linux          user##          X11R6     bin          doc         etc    lib    local    sbin




                                       bin       lib          man            faq      howto             bin    lib    man


      /      Directorio raiz del sistema de ficheros. En algunos casos directorio home del
             administrador.


      bin    Abreviatura de “binaries”. En este directorio se encuentran los órdenes básicas del SO.
             En /usr/bin también hay órdenes básicas, pero son menos esenciales.


      boot Aquí están los ficheros binarios de arranque del sistema (vmlinuz)


      dev    Contiene los ficheros especiales o de dispositivo (device drivers). Son usados para
             acceder a los dispositivos del sistema y recursos, como discos duros, módems,
             memoria, etc. Por ejemplo, de la misma forma que podemos leer datos de un fichero,
             podemos leerla desde la entrada del módem usando /dev/modem.


      etc    En este directorio se encuentran las órdenes relacionadas directamente con la
             administración del sistema, así como los ficheros de datos asociados. Estos incluyen
             /etc/passwd (la base de datos de usuarios), /etc/rc (guiones de
             inicialización del sistema), etc.


      home Por cada usuario cuelga de home un directorio que por defecto tendrá el mismo nombre
             que el del usuario. Ejemplo /home/user01. Estos a su vez dentro de su directorio pueden
             crear la estructura de ficheros y directorios que necesiten.


      root   En algunos sistemas es el directorio de conexión (home) del administrador.


      lib    Directorio que contiene las librerías compartidas. Estas son comunes para todos los
             programas que las usan, en lugar de tener cada programa su copia.




El Sistema Operativo Unix - Linux                                                                              14
proc No existe físicamente, es un SF virtual. Los ficheros que contiene residen realmente en
           memoria. En él podemos encontrar información sobre el sistema (procesos).


    sbin   Contiene los programa utilizados en la inicialización del sistema y en la recuperación del
           mismo.


    tmp    Contiene los ficheros temporales que el Sistema necesita crear para realizar
           determinados trabajos.


    usr    Para almacenar otros directorios accesibles a los usuarios, tales como: /usr/lib, /usr/bin,
           /usr/share/man, /usr/share/doc. En algunos sistemas, de aquí cuelgan los directorios de
           los usuarios.
           Los directorios descritos arriba son esenciales para que el sistema esté operativo, pero
           la mayoría de las cosas que se encuentran en /usr son opcionales para el sistema. De
           cualquier forma, son estas cosas opcionales las que hacen que el sistema sea útil e
           interesante, contiene la mayoría de los paquetes grandes de programas y sus ficheros
           de configuración.
    /usr/X11R6 Contiene el sistema X Window si lo instalamos. El sistema X Window es un entorno
           gráfico grande y potente el cual proporciona un gran número de utilidades y programas
           gráficos.
    /usr/bin    Es el almacén real de programas del sistema Unix. Contiene la mayoría de los
           programas que no se encuentran en otras partes como /bin.
    /usr/etc     Como /etc contiene diferentes ficheros de configuración y programas del sistema,
           /usr/etc contiene incluso más que el anterior. En general, los ficheros que se encuentran
           en /usr/etc/ no son esenciales para el sistema, a diferencia de los que se encuentran en
           /etc, que si lo son.
    /usr/include         Contiene los ficheros de cabecera para el compilador de C. Estos ficheros
           (la mayoría de los cuales terminan en .h, de header) declaran estructuras de datos,
           subrutinas y constantes usados en la escritura de programas en C. Los ficheros que se
           encuentran en /usr/include/sys son generalmente usados en la programación de Unix a
           nivel de sistema.
    /usr/include/g++        Contiene ficheros de cabecera para el compilador de C++ (muy parecido a
           /usr/include).
    /usr/lib   Contiene las librerías equivalentes stub y static a los ficheros encontrados en /lib.
           Además, varios programas guardan ficheros de configuración en /usr/lib.
    /usr/local En general, los programas que se encuentran en /usr/local son específicos de
           nuestro sistema, esto es, el directorio /usr/local difiere bastante entre sistemas Unix.
           Aquí encontraremos programas grandes como TEX (sistema de formateo de
           documentos) y Emacs (gran y potente editor), si los instalamos.
    /usr/man     Este directorio contiene las páginas de manual.
    /usr/src   Contiene el código fuente (programas por compilar) de varios programas de
           nuestro sistema. El más importante es /usr/src/linux, el cual contiene el código fuente del
           kernel de Linux.


    opt    Este es la raíz del subárbol que contiene los paquetes de aplicación específicos.




El Sistema Operativo Unix - Linux                                                                  15
var    Este contiene los directorios de todos los ficheros que cambian de tamaño o tienden a
           crecer, como /var/adm (ficheros de registro y contabilidad), /var/mail (ficheros de correo
           del usuario), /var/spool (ficheros que van a ser pasados a otro programa), /var/news
           (mensajes de interés común),...


    mnt o media De este cuelgan directorios para montar sistemas de ficheros sobre el Root File
           System. Por ejemplo /mnt/floppy, /mnt/cdrom,...


    lost+found (perdido+encontrado) Contiene ficheros que por algún problema no están enlazados
           al Sistema de Ficheros.
    Explorar la estructura de directorios.

     Trayectoria o pathname:
    Es el camino que hay que seguir dentro de la estructura arborescente de directorios para
encontrar un fichero o directorio.
    Vamos a distinguir dos tipos de trayectorias:
    1. Trayectoria absoluta es la que parte del directorio raíz (root).
    2. Trayectoria relativa es la que parte del directorio de trabajo.


    Referencias a directorios especiales:
              -   Directorio raíz (root) simbolizado con la barra de dividir.
              -   Directorio domicilio o casa (HOME), es el directorio que le corresponde al
                  usuario dentro del directorio home o usr; Nos vamos a casa con cd.
              -   Directorio de trabajo, activo o en curso, es aquel en el que nos encontramos
                  trabajando en un momento determinado, se representa por un punto (.). pwd
                  nos informa del directorio actual.
              -   Directorio padre del directorio en curso, es el directorio del cual cuelga el
                  directorio activo, se representa por dos puntos (..).

     Nombres de ficheros y Metacaracteres
    Linux admite nombres largos de hasta 255 caracteres (Unix originalmente hasta 14 caracteres)
normalmente incluyen caracteres alfanuméricos y el punto (.).
     En un directorio no puede haber dos ficheros con el mismo nombre, pero sí en directorios
diferentes.
    Cuando un nombre empieza por un punto se oculta a algunas órdenes.
     Dentro de los nombres de fichero se interpretan de forma especial los siguientes caracteres,
también llamados metacaracteres. Se usan especialmente para hacer referencia a un grupo de
ficheros:
              -   * Equivale a 0 o más caracteres.
              -   ? Equivale a un solo carácter.
              -   [caracteres] Equivale a cualquier carácter contenido dentro de los corchetes,
                  sólo a uno. Se puede especificar un rango de caracteres con solo indicar el
                  primero y el último separados por un guión (-). También se puede negar el




El Sistema Operativo Unix - Linux                                                                 16
conjunto de caracteres, para indicar cualquier carácter que no esté entre los
                  corchetes, poniéndole delante el signo de admiración [!caracteres].
              -    Suprime el significado propio del metacarácter que vaya a continuación.
El proceso de sustitución de los metacaracteres, por los nombres de los ficheros que
correspandan se llama expansión de los metacaracteres, y es efectuado por el intérprete de
comandos, de esta forma los comandos u órdenes nunca ven los metacaracteres.


    Crear todos los ficheros necesarios para practicar con los metacaracteres, al menos con la orden
    ls.




El Sistema Operativo Unix - Linux                                                                 17
Trabajo del Usuario con Ficheros Ordinarios.

     Formato de las órdenes
    orden [opción(es)] [argumento(s)]
   Siempre es obligatorio el nombre de la orden, teniendo en cuenta que Unix distingue entre
mayúsculas y minúsculas.
    Las opciones matizan la forma de trabajar la orden. Suelen ser un solo carácter, normalmente
precedido por un guión (-), si hay varias se pueden colocar juntas (sin mediar espacio) después de
un solo guión.
     Los argumentos nos indican con que va a trabajar la orden, suelen ser nombres de ficheros, de
directorios, usuarios, terminales, etc. Si hay que indicar varios se pueden utilizar los metacaracteres
o simplemente se separan con un espacio.
    Existen comandos “sucios”, que no responden a este formato.

     Crear ficheros
     Vacío:
    cat /dev/null > fichero
    > fichero
    Las dos órdenes tienen el mismo efecto, en la primera de ellas se emplea el dispositivo nulo.
     Con información tecleada por nosotros:
    cat > fichero
    cat -> fichero
    Esta orden nos permitirá introducir tantas líneas de texto como deseemos, al final de las cuales
pulsaremos ^d como señal de final de fichero, y se almacenarán en el fichero indicado.
     Con información procedente de cualquier otra orden
    Esta otra orden debe de producir una salida redireccionable.
    orden > fichero

     Listar nombres e informacion sobre ficheros.
    ls [opciones] [ficheros | directorio(s)]
     Sin ninguna opción ni argumento produce un listado de los nombres de los ficheros del
directorio activo en orden alfabético. Entre las opciones más interesantes contamos con:
        -l Imprime información detallada sobre el fichero: tipo, permisos, enlaces, propietario,
           grupo, ocupación en bytes, fecha de la última actualización y nombre del fichero. "ls -
           l" se puede abreviar en solo "l".
        -n Igual que -l, pero del propietario y grupo no muestra su nombre, sino su número,
           llamados UserId y GroupId respectivamente.
        -i Muestra el nº de i-nodo de cada fichero.
        -a Indica a la orden que tenga en cuenta a todos los ficheros incluidos los ocultos.
        -d Para que nos muestre información del directorio y no de los ficheros que contiene el
           directorio.
        -t Los muestra ordenados por fecha de actualización, primero los más recientes.
        -r Invierte el orden de mostrar los ficheros.



El Sistema Operativo Unix - Linux                                                                    18
-R Recursividad.
        -F Pone una (/) después de cada directorio y un (*) después de cada ejecutable.
        La orden l es un alias de ls –la.
    Como argumentos se puede especificar: nombre(s) de fichero(s), de directorio(s) y utilizar los
metacaracteres.


    file fichero(s)
     Realiza una suposición sobre qué tipo de información almacena un fichero; así nos puede
indicar sí un fichero es de texto, ejecutable, directorio, un programa fuente, está comprimido ...
      Para ello revisa la primera parte del fichero en busca de palabras clave o números especiales
del linkador, también consulta los permisos de acceso. Sus resultados no siempre son correctos.


     Ojear la salida de órdenes o contenido de ficheros.
    orden | less
    less fichero(s)
    Dosifica la salida por pantalla, cuando el resultado no entra en ella.
    Posee una serie de comandos para poder desplazarnos por la salida.
    h.....................................Ayuda de less.
    q.....................................Para salir de less.
    j, Intro o flecha abajo .....Avanza línea.
    k o flecha arriba.............Retrocede línea.
    Nºj..................................Avanza Nº líneas.
    Nºk.................................Retrocede Nº líneas.
    z.....................................Avanza pantalla.
    w ....................................Retrocede pantalla.
    Barra espaciadora .........Avanza página.
    Ctrl + L...........................Refresca pantalla.

    Si estamos usando “telnet”, deberíamos usar la siguiente configuración, que podemos
establecer en “Terminal Preferencias”:
    Emulación            VT100/ANSI.
    Búfer                24 líneas.
    Flechas VT100        Sí.
    Cursor Intermitente  Sí. (A mí me gusta más)


    Ejercicios:
    Ver más opciones de less y ls con man.
    Probar las distintas opciones y sus combinaciones.
    Seguir practicando con los metacaracteres.
    Ver el nº de enlaces de los directorios.
    Comprobar que los directorios enlazados tienen el mismo nº de inodo.

     Copiar, Mover, Enlazar y Borrar Ficheros.
     Copiar:
    cp [opc.] f_origen f_destino



El Sistema Operativo Unix - Linux                                                               19
-i Pide confirmación antes de sobreescribir.
        -r Copia recursiva, incluyendo subdirectorios.
     Realiza duplicados de ficheros, en el mismo directorio con distinto nombre o en distinto
directorio con cualquier nombre. Sí el nombre del fichero destino ya existe se pierde la información
que pudiera tener.
     Sobre el f_origen hay que tener al menos permiso de lectura (r) y sobre el f_destino, si ya
existe, de escritura (w).
     Como destino se puede indicar un directorio, en cuyo caso se copiarían todos los ficheros
origen en él.
     cp f(s)_origen directorio
      Los ficheros origen se pueden indicar por su nombre completo, separados por blancos o
utilizando metacaracteres; por supuesto se puede emplear una trayectoria.
    Con esta orden al duplicarse la información nunca se pierde el contenido del fichero origen.
     Mover:
    mv [-i] f_origen f_destino
    mv [-i] f(s)_origen directorio
    Renombra un fichero dentro de un directorio o lo traslada a otro directorio.
     La diferencia con la orden cp es que mv no duplica la información, desapareciendo siempre los
ficheros origen.
        -i Si en el destino ya existe el fichero, pregunta antes de sobreescribirlo.
     La mayoría de las veces es más rápida que cp, ya que se limita solo a anotar el cambio en los
ficheros directorio.
     Enlazar:
    ln [-f] f_origen f_destino
        -f No hace preguntas.
     A un mismo fichero se le da otro nombre, los dos nombres se referirán en adelante al mismo
fichero.
    No se hace una copia del fichero origen y el nuevo nombre puede estar en distinto directorio.
    Lo único que realiza esta orden es añadir una nueva entrada en el directorio que corresponda
con el nombre del fichero destino y el nº de i-nodo del fichero origen.
    No es necesario poseer ningún permiso sobre el fichero origen, pero si debemos poseer
permiso de escritura (w) sobre el directorio destino y de lectura sobre el directorio origen.
    Como origen se pueden indicar varios ficheros si el destino es un directorio.
        -s Realiza un enlace simbólico.
    Un enlace o vínculo simbólico es un archivo que sólo contiene el nombre de otro archivo.
Cuando el SO opera sobre el enlace simbólico, se dirige hacia el archivo al que apunta. Se usan
para enlazar ficheros en computadoras diferentes o en distintos sistemas de ficheros, también para
crear varios nombres a un directorio.
    Estas tres órdenes tienen en común, que el contenido del fichero destino, si existe, es
destruido.


     Borrar:
        rm [opc] fichero(s)



El Sistema Operativo Unix - Linux                                                                   20
Para borrar un fichero es necesario poseer permiso de escritura sobre el directorio, no sobre el
fichero, pues lo que realmente se hace es borrar un entrada del directorio.
     Si el fichero a borrar tiene varios enlaces, se borrar el enlace que tiene con el nombre de
fichero indicado, los demás permanecen.
        -f (forzar) Sí no tenemos permiso de escritura sobre el fichero, se salta una pregunta
           de confirmación y lo borra.
        -i (interactivo) Pide confirmación en todos los ficheros.
        -r (recursivo) Borra a partir de donde le indiquemos, toda la posible rama de
           subdirectorios, es rápida y peligrosa.
        Ejemplos peligrosos:
                    rm * .c
                    rm -r dir1


        Ejercicios:
    Duplicar un fichero en el mismo directorio.
    Copiar varios ficheros al mismo tiempo a otro directorio.
    Renombrar un fichero. Comprobar si le ha cambiado el nº de inodo.
    Mover ficheros a otro directorio. ¿Tienen otro inodo?
    Crear enlaces de un fichero en el mismo y distinto directorio. Comprobar inodos y el nº de
    enlaces. Borrar algunos de los enlaces creados y volver a comprobar el nº de enlaces.
    Intentar hacer un enlace duro a un directorio.
    Realizar enlaces simbólicos de ficheros. Comprobar el carácter de tipo de fichero. ¿Concuerda el
    nº de inodo?. Trabajar con el enlace simbólico. Borrar el fichero origen del enlace. Volver a
    trabajar con el enlace simbólico.
    Crear un enlace simbólico a un directorio.
    Estudiar los permisos de vuestro directorio home. ¿Qué permisos tienen los de tu grupo?.
    Entra en el directorio home de algún compañero. Intenta crear ficheros. Borra un fichero.



     Permisos, Propietario y Grupo.
    Las operaciones que se pueden realizar sobre un fichero son: leer (r), escribir (w) y ejecutar (x).
Estos permisos se conceden o deniegan a tres niveles: el propietario del fichero, el grupo al que
este pertenece y el resto de los usuarios.
    Que el grupo posea un permiso determinado no implica que lo posea el usuario, y que el resto
posea un permiso no implica que lo posean el usuario y el grupo.
     En un fichero convencional tener permiso de lectura significa poder consultar el contenido del
fichero, el permiso de escritura indica que se puede modificar y el de ejecución que se pueden
ejecutar las órdenes contenidas en el fichero.


    En los ficheros directorio el permiso de lectura posibilita que podamos averiguar el contenido
del directorio, es decir, los nombres de los ficheros que contiene, el no poseer este permiso no
impide acceder al contenido de los ficheros.
     El permiso de escritura nos permite crear y borrar ficheros, la modificación de un fichero en
particular no la controlan los permisos de directorio sino los de ese fichero.



El Sistema Operativo Unix - Linux                                                                   21
El permiso de ejecución en el caso de directorios impide que podamos usarlo dentro de una
trayectoria o que lo usemos como directorio de trabajo, denegar el permiso de ejecución si es una
protección real para un directorio y los ficheros que contenga. (Si perdemos el permiso de ejecución
sobre el directorio de trabajo o el padre de este, podemos desplazarnos a cualquier otro usando
una trayectoria absoluta.)


     El propietario de un fichero puede cambiarle los permisos con respecto a él mismo, su grupo o
el resto de los usuarios con la orden:


    chmod [quien(es)][+-=][permiso(s)] fichero(s)| directorio(s)
                  [quien]:    u Usuario propietario.
                              g Grupo.
                              o Otros, el resto.
                              a Todos (por defecto).
                  [+-=]:      + Añade permiso.
                              - Elimina permiso.
                              = Asigna o establece permiso. Añade los permisos indicados y quita
                               los demás, para los usuarios indicados.
                  [permiso]: r Lectura.
                              w Escritura.
                              x Ejecución.
        Ejemplos:
           −     Un permiso a un quién:                     chmod g+w fichero
           −     Varios permisos a un quién:                chmod o+rwx fichero
           −     Varios permisos a gente variada:           chmod go-rw fichero
           −     Permisos distintos para varia gente:       chmod o-r,g+w fichero
                                                            (nunca espacio después de la coma)
           −     Asignación absoluta:                       chmod ug=rw fichero


        Ejercicios:
    Si a un fichero con varios enlaces se le cambian los permisos ¿Se cambiarán también en sus
    ficheros enlazados?
    Quitar a un fichero permiso de w: mostrarlo, añadirle información, borrarlo. (Podemos por
    ahora escribir en un fichero añadiéndole información con: orden >> f1)
    Quitar a un fichero permiso de r: mostrarlo, añadirle información, borrarlo.
    Grabar en un fichero:           clear
                                    echo hola mundo
                                    echo te encuentras en
                                    pwd
    Poner su nombre después del prompt, para ejecutarlo.
    Darle permiso de ejecución.
    Poner su nombre después del prompt, para ejecutarlo.




El Sistema Operativo Unix - Linux                                                                22
También se permite una notación numérica, en octal, para indicar los permisos que se van a
establecer a unos determinados ficheros.
    chmod número_octal fichero(s)


     Número_octal: Un fichero tiene 9 permisos, se codifican en binario, si se tiene permiso 1 y si no
se tiene 0; resulta un número binario de 9 dígitos binarios, este se pasa a octal y obtenemos el
número octal de tres dígitos.


    Ejemplo: permiso de escritura al propietario, permiso de ejecución al propietario y al grupo y
permiso de lectura a todos.
    chmod a=r,u+w,ug+x fich
    chmod 754 fich


     Permisos especiales.
    Aún hay otro tipo de permisos que hay que considerar. Se trata de:
         o El bit de permisos SUID (Set User ID).
         o El bit de permisos SGID (Set Group ID).
         o El bit de permisos de persistencia (sticky bit).
    Para entender los dos primeros el SUID y el SGID veamos los permisos para un comando de
uso común a todos los usuarios, que es el comando passwd, que como se sabe sirve para cambiar
la contraseña del usuario, y puede ser invocado por cualquier usuario para cambiar su propia
contraseña, si vemos sus permisos observaremos un nuevo tipo de permiso:
    #> ls -l /usr/bin/passwd
    -r-s--x--x 1 root root 21944 feb 12 2006 /usr/bin/passwd


    SUID
     En vez de la 'x' para el usuario encontramos ahora una 's' (suid). passwd es un comando
propiedad de root, pero sin embargo debe de poder ser ejecutado por otros usuarios, no solo por
root. Es aquí donde interviene el bit SUID, al activarlo obliga al archivo ejecutable binario a
ejecutarse como si lo hubiera lanzado el usuario propietario y no realmente quien lo ejecutó. Es
decir, es poder invocar un comando propiedad de otro usuario (generalmente de root) como si uno
fuera el propietario.
    SGID
    El bit SGID funciona exactamente igual que el anterior solo que aplica al grupo del archivo. Es
decir si, permite ejecutar el comando con los permisos del grupo.
    Se muestra como una 's' en vez del bit 'x' en los permisos del grupo.
    #> ls -l /usr/bin/write
    -rwxr-sr-x 1 root tty 10320 Jun 6 2008 write


    STICKY BIT (Bit de persistencia)
    Este bit se aplica para directorios, como en el caso de /tmp y se indica con una 't':
    #> ls -ld /tmp
    drwxrwxrwt 24 root root 4096 sep 25 18:14 /tmp




El Sistema Operativo Unix - Linux                                                                  23
Puede apreciarse la 't' en vez de la 'x' en los permisos de otros. Lo que hace el bit de
persistencia en directorios compartidos por varios usuarios, es que el sólo el propietario del archivo
pueda eliminarlo del directorio.
    Para cambiar este tipo de bit se utiliza el mismo comando chmod pero agregando un número
octal extra al principio de los permisos, ejemplo:
    #> ls -l /usr/prog
    -r-x--x--x 24 root root 4096 sep 25 18:14 prog
    #>chmod 4511 /usr/prog
    #> ls -l /usr/prog
    -r-s--x--x 24 root root 4096 sep 25 18:14 prog
    Nótese que el valor extra es el '4' y los demás permisos se dejan como se quieran los permisos
para el archivo. Es decir, los permisos originales en este ejemplo eran 511 (r-x--x--x), y al
cambiarlos a 4511, se cambió el bit SUID reemplazando el bit 'x' del usuario por 's'.
    Los posibles valores serían los siguientes:
    - - - - - - - - - = 0 Predeterminado, sin permisos especiales.
     - - - - - - - - t = 1 Bit de persistencia, sticky bit
    - - - - - s - - - = 2 Bit sgid de grupo
    - - s - - - - - - = 4 Bit suid


     MUY IMPORTANTE: Algo sumamente delicado y que se tiene que tomar muy en cuenta es lo
que decidas establecer con permisos de bit SUID y SGID, ya que recuerda que al establecerlos de
esta manera, cualquier usuario podrá ejecutarlos como si fuera el propietario original de ese
programa. Y esto puede tener consecuencias de seguridad severas en tu sistema. Siempre
considera y reconsidera si conviene que un usuario normal ejecute aplicaciones propias de root a
través del cambio de bits SUID o SGID. Mejores alternativas pueden ser los comandos sudo y su.


     Máscara de permisos para la creación de ficheros.
    El propietario también puede definir con que permisos por defecto se crearán sus ficheros.
    umask [número_octal]
    Solamente tiene formato numérico, el nº octal al pasarlo a binario, los unos indican los
permisos que quitamos y a quién.
    La orden tiene efecto para el usuario que la aplica, y a partir de su uso los ficheros y directorios
se crearán con la restricción de los permisos indicada.
     (Atención: a los ficheros de texto, en un principio, no se les asigna permiso de ejecución)
     Si utilizamos la orden sin ningún parámetro, muestra la máscara de creación actual, que suele
ser 022.
    Para dejarlo fijo en la sesión, agregarlo a .bashrc de nuestro directorio de inicio.
     Cambio de propietario.
    El propietario de un fichero en System V (en los sistemas Berkeley solo el administrador)
puede cambiar el fichero de propietario y de grupo.
    chown [-R] nuevo_propietario[:grupo] fichero(s)
        -R Recursividad.
    El nombre del nuevo propietario debe de ser un nombre válido de entrada al sistema (login) o
un número de identificación de usuario; estos y otros datos se encuentran en el fichero /etc/passwd.




El Sistema Operativo Unix - Linux                                                                    24
Si el usuario perteneciese a otro grupo se indica este separado del usuario por (:). Y se cambia
al mismo tiempo de usuario y de grupo.
     Cambio de grupo.
    chgrp nuevo_grupo fichero(s)
    Igualmente el nuevo grupo se puede indicar con el nombre o el número de identificación, que
se encuentra en el fichero /etc/group.


    Ejercicios: (en octal)
    Poner a dos ficheros al mismo tiempo los permisos rw- -wx r--.
    Quitarle a un subdirectorio todos los permisos ¿Qué podéis hacer en él?
    Dejarle todos menos el de ejecución ¿Qué podéis hacer en él?
    Mostrar el contenido de un directorio al que le falta el permiso de lectura.
    Poner al directorio permiso de escritura y un fichero dentro de él sin este permiso, probar a
    borrarlo.
    Poner una máscara de creación, de forma que a los directorios sólo les de permiso de ejecución
    para g y o, y para el propietario todos. Comprobarla creando algún directorio.
    La máscara anterior, que permisos da a los nuevos ficheros ordinarios.
    Intenta cambiar un fichero de propietario.




El Sistema Operativo Unix - Linux                                                                   25
Operaciones Con Ficheros Directorios.
    Ya sabemos visualizar el contenido de un directorio utilizando las orden ls, para lo cual
debemos de poseer permiso de lectura sobre él.


     Creación.
    mkdir trayectoria(s)
    Para crear un directorio necesitamos permiso de escritura sobre el directorio en el que se va a
crear.
     Se pueden crear varios directorios al mismo tiempo, indicando su trayectoria, ya sea absoluta o
relativa.
    Ejemplos.
    ~> mkdir base/direc base2
    ~> mkdir base/dire1 base/dire1/dire2                  (dire1 no existía)


     Cambio de directorio activo.
    cd [directorio]
    Nos podemos desplazar libremente por el árbol de directorios siempre que tengamos permiso
de ejecución sobre los directorios por los que nos desplazamos.
    Si no indicamos directorio se asume el directorio HOME o de conexión.


     Dónde nos encontramos.
    Si necesitamos asegurarnos de cual es nuestro directorio de trabajo utilizaremos la orden
    pwd
     En otras versiones de Unix no era tan fácil que el prompt nos indicase la trayectoria del
directorio de trabajo, por lo que esta orden era más utilizada. Pero todavía puede ser útil en
programas Shell.


     Eliminar directorios
    rmdir directorio(s)
    Se requiere permiso de escritura sobre el directorio padre.
     Antes de borrar un directorio debemos de borrar su contenido y cuidar de que no sea el
directorio de trabajo.
     Otro usuario que tenga permiso para ello nos puede borrar nuestro directorio de trabajo, con lo
que nos dejará "como suspendidos en el aire", pero podemos transladarnos a cualquier otro
directorio.
    El sistema permite borrar el directorio de trabajo.
    Recordar que también se pueden borrar directoros usando la orden rm de forma recursiva.


     Cambio de nombre.
    mv directorio_antiguo directorio_nuevo
    Se requiere permiso de escritura en el directorio padre.




El Sistema Operativo Unix - Linux                                                                26
Copia de directorios.
        cp (-R) DirectorioOrigen DirectorioDestino
         -R       De forma recursiva.


     Variables PS1 y PS2.
    Se usan para definir el prompt o inductor del shell.
    El prompt primario (PS1) aparece para solicitarnos la introducción de una orden.
    El prompt secundario (PS2) se muestra cuando no se ha terminado de introducir un comando.
    Tanto PS1 como PS2 son variables del shell que pueden ser redefinidas por los usuarios (cada
usuario tiene las suyas).
    Esto se hace simplemente asignándole un nuevo valor, con el formato:
    PS1=”NuevoValor”
    El NuevoValor puede ser cualquier cadena, pero hay una serie de códigos con un significado
especial para modificar el inductor, estos son:
    !       Siguiente nº del histórico de sucesos.
    $       Usa el signo $, salvo para root, que usa el signo # (tradicional).
    d       Fecha actual.
    s       Shell actualmente activo.
    t       Hora actual.
    u       Nombre del usuario.
    w       Directorio de trabajo actual (directorio activo).
    h       Nombre de la máquina. Host.


    Ejercicios:
    Crear varios directorios con la misma orden.
            Trayectorias relativas.
            Trayectorias absolutas.
            Que el directorio activo no sea el padre de los subdirectorios.
    Examinar el árbol de directorios de Unix.
    Desplazarse usando ambos tipos de trayectorias.
    Probar a eliminar un directorio no vacío.
    Probar a eliminar un directorio vacío, pero que sea el directorio activo.
    Eliminar varios directorios con la misma orden.
    Cambiar nombres a directorios. Con y sin permiso de escritura sobre el padre.
    Copiar una rama del árbol de directorios de forma recursiva.
    Eliminar la rama recién copiada también de forma recursiva.
    Modificar el prompt primario y secundario incluyendo texto y códigos especiales de la orden.




El Sistema Operativo Unix - Linux                                                                  27
Flujo De Información.

     Entrada y salidas estándar (std).
    Muchas órdenes Unix reciben información desde el teclado, que es la entrada estándar (stdin)
y muestran los resultados por la pantalla, salida estándar (stdout); la pantalla también es la salida
estándar para los posibles errores (stderr).
    Ejemplo:
    Cat
    sort
     Sin opciones ni argumentos leen texto del teclado (stdin) y muestran los resultados por pantalla
(stdout), visualizando los posibles errores, en el caso de que se produzcan, por pantalla (stderr).


     Tanto la entrada como las salidas estándar son tratadas como ficheros especiales, y el shell
los identifica por su número de descriptor de fichero:
              stdin     0
              stdout    1
              stderr    2
     (Deben de emplearse junto al signo de redireccionamiento).


    El guión (-) realiza una entrada por teclado.



     Redireccionamiento:
     Se pueden redireccionar la entrada y salidas estándar mediante metacaracteres de
redireccionamiento: > < >>.
      > Redireccionamiento de salida, envía los datos que normalmente saldrían por pantalla hacia
el fichero que indiquemos.
    Ejemplo:
    cat > file
    cat 1> file
    cat - > file
    Usa la entrada estándar y la salida al fichero especificado.


     >> redireccionamiento de adición, igual que el anterior, pero si el fichero al que se dirige la
salida ya existe no se borra la información que tenga, sino que la nueva se añade al final.
    Ejemplo:
    Cat 1>> file
    Añadiendo información a un fichero desde la entrada estándar.


     < Redireccionamiento de entrada, la orden no tomará la información del teclado, sino del
fichero especificado.
    Ejemplo:
    cat file
    cat < file




El Sistema Operativo Unix - Linux                                                                 28
cat 0< file
    Toma como entrada el fichero indicado, siendo la salida por pantalla.


    cat 0< fichero 1>> otro
    La entrada de un fichero y la salida la añade a otro.


    cat 2> errores 0< fichero 1> fichero1
    cat fichero > fichero1 2> errores
    Entrada fichero, salida fichero1 y errores al fichero errores.


    Cat fichero1 – fichero2 > total
    Entre dos ficheros permite una entrada por teclado


    Con el formato:
    orden >& fichero
    Tanto la salida estándar, como la salida de error se almacenan en el fichero indicado.
    Ejemplo:
    Cat fichero fichero_inexistente >& todo

     Tuberías (pipes):
    Orden | Orden2
    Mediante el uso de tuberías se consigue que la salida de una orden sea la entrada de otra. El
metacarácter tubería es |.
    Ejemplo:
    ls –lR /home | less


     Duplicar la salida
    orden | tee [opciones] fichero(s)
    orden | tee [opciones] | filtro
    La entrada que recibe tee la copia en la salida estándar y en el o los ficheros indicados como
argumentos.
        -i No responde a interrupciones.
        -a Si los ficheros existen le añade la información al final.


    Ejemplo:
    date | tee –a fecha
    ls –l | tee listado
    cat fichero1 – fichero2 | sort | tee FileOrden
    El primero muestra la fecha y además la añade en un fichero.
    E segundo muestra el contenido del directorio y lo almacena en el fichero listado.
    Y el tercero concatena la entrada, la ordena, la muestra ordenada y la almacena en el fichero
FileOrden.




El Sistema Operativo Unix - Linux                                                              29
Ejercicios:
    Practicar todos los redireccionamientos, con todas las formas de indicar la entrada y salida.
    Combinar los redireccionamientos y la tubería.
    En los ejercicios anteriores emplear los filtros vistos: less, cat y sort.

     Filtros para: Contar, Ordenar y Eliminar Repetidos.
     Contar:
    wc [opciones] fichero(s)
    Abreviatura de Word Counting. Sin opciones cuenta el número de líneas, palabras y caracteres
contenidos en un fichero o en la entrada indicada. Si se especifica un grupo de ficheros contabiliza
en cada uno de ellos y además muestra un total.
    Si no especificamos la entrada, toma por defecto la entrada estándar.
    Para que no muestre toda la información o la muestre en otro orden, podemos utilizar las
opciones:
        -l Sólo cuenta las líneas.
        -w Idem las palabras.
        -c Idem los caracteres.
    Ejemplos:
    wc f1 f2 f3
    Cuenta el nº de líneas, palabras y caracteres de cada fichero y hace un total.


    ls | wc -w
    Cuenta el nº de ficheros de un directorio.
     Ordenar:
   Este filtro además de clasificar puede fusionar ficheros. En principio lo hace siguiendo el código
ASCII.
    La entrada, al igual que en todos los filtros, pueden ser: ficheros indicados como argumentos,
pasada por una tubería o suministrada por la entrada estándar.
    sort [opciones] [campos] [fichero(s)]
    Opciones generales:
        -o file Sirve para indicar el fichero de salida. Ya que si redireccionamos la salida a un
           fichero que se llame igual que el de entrada, se pierde la información.
        -m Mezcla los ficheros que supone que están ordenados.
        -c Comprueba si el fichero está ordenado.
        -u Muestra las líneas repetidas una sola vez, útil para la mezcla de ficheros.
    Opciones de ordenación de datos:
        -d (diccionario), sólo tiene en cuenta los caracteres alfabéticos, numéricos y espacio.
        -f Convierte mayúsculas a minúsculas a efectos de la ordenación.
        -b Ignora los blancos iniciales.
        -n Ordenamiento numérico, toman su valor aritmético el signo menos (-) y el punto
           decimal (.). Los blancos iniciales no se tienen en cuenta.




El Sistema Operativo Unix - Linux                                                                   30
-r Ordenación inversa.
        -R Ordenación aleatoria (Random).
    Ordenación de campos:
    Los campos se entienden separados por blancos o tabuladores salvo que se indique la opción:
        -tx Donde x es el carácter delimitador de campos. Es aconsejable poner el carácter
            entre comillas.
     Para indicar a partir de que campo se va a realizar la ordenación, pondremos: +n.c, donde n es
el número de campos que se van a saltar sin ordenar y c el número de caracteres que se saltan
contando a partir del último campo saltado.
        +n Nº de campos que se saltan sin ordenar.
    Pueden indicarse opciones sólo para un campo, si se colocan inmediatamente después del
especificador de campo, no irán precedidas de guiones; estas son b, f, n, r.
    La lista de ficheros caso de ser varios los ordena y mezcla, salvo que se utilice la opción -m,
que sólo mezcla.


    Ejemplos:
    sort -f +1 lista > lista.ord
    Un fichero de nombres y apellidos ordenarlo por apellidos.


    who | sort | tee quien.hay
    Muestra y almacena los usuarios que hay conectados de forma ordenada.


     Eliminar líneas iguales o con parte igual.
    uniq [opc] [-campos] [+carac.] [f_in] [f_out]
        Controla las líneas consecutivas repetidas mostrando sólo una. Opciones:
        -c Precede cada línea del número de repeticiones.
        -d Sólo muestra las que se han repetido alguna vez.
        -u Visualiza las que no se han repetido.
        -campos: Ignora el número de campos que se indique.
        +caracteres: Ignora el número de caracteres que se indique.


    Si no se especifican ficheros de entrada o salida se utilizan la entrada y salida estándar.
    Ejemplos:
    Sort alumnos | uniq -1 | wc -l
     En un fichero de alumnos compuesto por nombre y apellidos, cuenta todos los que hay con
apellidos distintos.
     Sort direcciones | uniq -d –1
    Una vez ordenado el fichero muesta los registros repetidos a partir del primer campo.
    Ejercicios:
    Practicar el filtro wc:
    Sin opciones ni argumentos.
    Con una opción, y varias cambiándolas de orden.



El Sistema Operativo Unix - Linux                                                                 31
Con varios ficheros.
    Pasándole la información mediante una tubería.
    Almacenando el resultado en un fichero.
    Practicar sort:
    Sin argumentos ni opciones.
    Ordenando un fichero.
    Almacenando el resultado en otro fichero.
    Probar las opciones y su combinación.
    Mostrar el listado largo de ficheros de un directorio, ordenado por tamaño, de mayor a menor.
    Ordenar el fichero de grupos (/etc/group) por el nº de grupo (campo 3) de menor a mayor.
    Crear un fichero con los campos: Nombre, Apellidos y Edad, separados por (;).
    Procurar que se repitan algunas edades y algunos apellidos.
    Ordenar por edad de mayor a menor.
    Ordenar por apellido.
    ¿Cuántos hay de cada edad?



     Filtros para ver que hay en los ficheros.
    El filtro más habitual para ver el contenido de un fichero es cat, ya visto.
     Ver el final de un fichero.
    tail [±nº][lbc] [fichero]
    Sin opciones lista las 10 últimas líneas.
     Sí el nº es positivo (+) empieza a mostrar a partir de ese nº de unidades, contando desde el
principio del fichero, en el caso de ser negativo (-) cuenta las unidades indicadas desde el final del
fichero. Las unidades se medirán según la letra que siga inmediatamente al nº, que puede ser:
        b bloques.
        c caracteres.
        l   (ele) líneas. Por defecto.


     Ver el principio de un fichero.
    head [-n] [fichero]
        -n indica el nº de líneas que se van a mostrar, por defecto 10.
     En un fichero tenemos los números del 0 al 9 (cada uno en una línea), escribir la línea de
     comando para que nos muestre uno de ellos aleatoriamente.


     Volcado en octal (octal dump)
    od [opciones] [+desplazamiento] [fichero]
    Es útil para ver que contienen los ficheros objeto o de texto con caracteres no imprimibles.
        -c Los caracteres imprimibles los muestra con caracteres normales, los no imprimibles
           con un nº en octal de tres dígitos, y algunos de estos los muestra de la siguiente
           forma:
                    0      Nulo.
                    b      Retroceso.
                    f      Salto de página.
                    n      Nueva línea.




El Sistema Operativo Unix - Linux                                                                  32
r      Return.
                      t      Tabulador.
        -d Decimal.
        -x Hexadecimal.

     Filtro para cambiar caracteres.
    tr (translate), cambia o traduce caracteres procedentes de una entrada de acuerdo a las reglas
que se le indiquen.
    Supongamos que tenemos un archivo que usa los dos puntos(:) para separar campos, y que
necesitamos cambiar cada dos puntos por otro carácter, por ejemplo el tabulador.
    tr : “t” < fichero                          t     representa un tabulador.
    Formato:

                 tr [opc] lista_de_entrada lista_de_salida
    Las listas deben de tener el mismo nº de caracteres, y la sustitución es posicional, el primer
carácter de la lista de entrada es sustituido por el primero de la lista de salida, ...
    Normalmente se trabaja redireccionando la entrada y la salida.
    Opciones:
        -s (squeeze = estrujar, apretar) elimina caracteres repetidos en la salida.
        -c (complement) toma como lista_de_entrada el complemento.
        -d (delete) borra en la salida los caracteres del conjunto de entrada.


     Indicar rangos
   Se pueden usar conjuntos de caracteres. Por ejemplo para cambiar letras minúsculas por
mayúsculas:
    tr “[a-z]” “[A-Z]” < fichero
     Ejemplo para codificar texto, desplazando cada letra trece posiciones en el alfabeto inglés de
26 letras:
    tr “[a-m][n-z][A-M][N-Z]” “[n-z][a-m][N-Z][A-M]” < fich > fich.13
    Para traducir un conjunto de caracteres de entrada por el mismo carácter de salida, se usa el *
después del carácter de salida indicando que se repita las veces que sea necesario.
    tr “[0-9]” “[#*]” < fichero

     Eliminación de repetidos en la salida
    tr -s “[0-9]” “[#*]” < fichero
    Cada nº con todas sus cifras es reemplazado por un solo símbolo “#”.
     Sustitución de los caracteres complementarios
    tr -c “[a-z][A-Z][0-9]” “[#*]” < fichero
    En el ejemplo anterior todo carácter no alfanumérico es sustituido por “#”.
     Eliminación de caracteres
    tr -cd “[a-z][A-Z][0-9]” < fichero




El Sistema Operativo Unix - Linux                                                               33
Son eliminados todos los caracteres no alfanuméricos incluidos los signos de puntuación,
espacios,...


    Para representar caracteres especiales:
                           NNN     character with octal value NNN.
                           a       audible BEL
                                  backslash
                           b       backspace
                           f       form feed
                           n       new line
                           r       return
                           t       horizontal tab
                           v       vertical tab


    Para representar conjuntos de caracteres:
           CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order
           [:alnum:]         all letters and digits
           [:alpha:]         all letters
           [:digit:]         all digits
           [:cntrl:]         all control characters
           [:lower:]         all lower case letters
           [:upper:]         all upper case letters
           [:graph:]         all printable characters, not including space
           [:print:]         all printable characters, including space
           [:punct:]         all punctuation characters
           [:blank:]         all horizontal whitespace
           [:space:]         all horizontal or vertical whitespace



    Ejercicio:
    Dado un fichero de texto, producir un listado con las palabras que contiene ordenadas
    alfabéticamente, sin que estén repetidas e indicar el nº de veces que aparece cada palabra en el
    fichero.
     tr -s "[:blank:]" "n" < fichero | sort | uniq -c




El Sistema Operativo Unix - Linux                                                                  34
Buscar en ficheros. Familia grep.
        Busqueda de un patrón en un fichero: grep, fgrep, egrep.
       Buscar un patrón dentro de un fichero, grupo de ficheros, entrada estándar o la que se
le especifique mediante tubería o redireccionamiento. Cuando se busca en más de un fichero,
encabeza cada línea con el nombre del fichero.
        En la formación del patrón se pueden usar expresiones regulares, también llamados
formatos de sustitución. Precisamente de las expresiones regulares toma su nombre que viene
de las siglas: Global Regular Expression and Print


    grep [opc] patrón [fichero(s)]


    Reglas importantes de los formatos de sustitución, expresiones regulares:
    Si el patrón está formado por más de una palabra deben de incluirse entre comillas o
apóstrofos según los sistemas.
    El punto (.) sustituye cualquier carácter único, igual que ? para el shell.
    Una lista entre corchetes ([]) tiene el mismo significado que para el shell.
    El circunflejo (^) dentro de unos corchetes precediendo una lista empareja todos los caracteres
que no estén en la lista, igual que la ! en el shell.
    El signo dolar ($) al final de una expresión indica que debe de estar al final de una línea.
    El acento circunflejo (^) al principio de una expresión indica el principio de línea.
    El asterisco (*) sirve por cero o más repeticiones del carácter que le precede.
    La barra invertida () quita el significado especial al siguiente carácter.


    Sin opciones produce como salida las líneas que contienen el patrón.


        -n Al principio de línea aparece su nº de línea.
        -i Ignora mayúsculas y minúsculas.
        -c Sólo indica el nº de líneas que contienen el patrón dentro del fichero.
        -h No imprime los nombres de los ficheros.
        -l (ele) Indica en que fichero(s) se encuentra el patrón.
        -v Devuelve las líneas que no contienen el patrón.
    Ejemplos:
    grep byte *.apuntes
    grep ".f" programas
    grep [^m-t]ata fichero
    grep "^Santa Fe$" america europa
    grep ^[0-9][0-9]* datos




El Sistema Operativo Unix - Linux                                                                  35
fgrep [opc] patrón(es) [fichero(s)]
    La principal diferencia es que puede buscar muchos patrones de forma simultánea (puede
buscar miles de palabras al mismo tiempo), pero no permite el uso de metacaracteres para formar
expresiones regulares, sólo cadenas fijas.
    Es más rápida que sus hermanas grep y egrep.
    Le son válidas las opciones anteriores, y además:
        -f fichero        Sirve para indicar el fichero que contiene los patrones de búsqueda.
    Si se especifican varios patrones en la línea de comando, irán todos entre comillas y separados
por un retorno de carro.
    Ejemplo:
    fgrep –f palabras lista1 lista2


     egrep [opc] patrón(es) [fichero(s)]
    Como fgrep puede leer patrones desde un fichero. Y como grep puede emplear expresiones
regulares.


    Actualmente las órdenes
    grep -E       sustituye a       egrep
    grep –F       sustituye a       fgrep


    Ejercicios:
    Buscar una palabra en un fichero. Comprobar la opción para que no distinga las mayúsculas.
    En varios ficheros buscar una frase e informar del nombre de los ficheros que la contengan.
    Mostrar el nº de veces que aparece la palabra if al principio de línea en un fichero(s).
    Eliminar las líneas en blanco de fichero1 y almacenarlo en fichero2.
    Borrar todas las líneas que contengan Manolo, Manuel, Lolo o Manolín.

     Comparacion de Ficheros.
    diff - busca diferencias entre dos ficheros


    diff [opciones] fichero-origen fichero-destino


     Por defecto muestra los cambios de edición que habría que realizar en f1 para que quedase
igual que f2, de la siguiente forma:
    Línea o rango de f1 operación línea o rango de f2
    Donde operación puede ser:
        a (añadir líneas de f2 a f1)
        d (borrar líneas de f1)
        c (cambiar líneas de f1 por líneas de f2).
    Y a continuación de cada operación muestra las líneas afectadas, si estas se preceden por el
símbolo "<" quiere decir que son de f1, y si se preceden por ">" son de f2.




El Sistema Operativo Unix - Linux                                                                 36
Opciones
        -a Trata todos los ficheros como de texto y los compara línea por línea, incluso si no
           parecen ser de texto.
        -b No se tienen en cuenta los blancos al final de línea y trata los distinto conjuntos de
           blancos como si fuesen iguales.
        -B No hace caso de cambios consistentes en sólo insertar o borrar líneas en blanco.
        -c Emplea el formato de salida de contexto.
        -i Considera las letras mayúsculas y minúsculas equivalentes.
        -q Informa sólo de si los ficheros difieren, no de los detalles de las diferencias.
        -r Cuando compara directorios, compara recursivamente cualesquier subdirectorios
           encontrados.
        -u Emplea el formato de salida unificado.


    Un estado de salida de 0 significa que no se encontraron diferencias, 1 significa que se
encontró alguna diferencia y 2 significa problemas.



     Cortar y Pegar Ficheros.
     Cortar de forma horizontal (por líneas).
    split [-nº] [fichero] [prefijo]
    Divide el "fichero" en trozos de n líneas, los trozos son grabados en ficheros cuyo nombre base
es "prefijo" y se le añaden las terminaciones "aa", "ab", hasta "zz", por lo que se puede dividir hasta
en 676 ficheros. (26 letras)
        -nº      Nº de líneas de cada trozo, por defecto 1000.
    Si no se indica el "fichero" se toma la stdin.
    Si no se indica el nombre base se asume "x".


    Variante de split
    csplit [-f prefijo] fichero arg1 [...argn]
    Divide el fichero en las porciones que indiquen los argumentos, estos pueden ser:
    n            El trozo termina en la línea nº n (no incluida).
    "/exp/"      Hasta la línea que contiene la expresión (no incluida).
    "%exp%" Salta sin grabar en fichero hasta la línea que contiene la expresión, esta línea se
                 graba en el próximo fichero.
    En pantalla se muestra el tamaño de los ficheros en los que se divide. Algunas opciones son:
        -f prefijo Prefijo tiene el mismo significado que en split, si no se pone se asume "xx" y
            se van numerando, desde xx00 hasta xx99.
        -s No muestra el tamaño de las partes en la salida estándar.




El Sistema Operativo Unix - Linux                                                                   37
Pegar de forma horizontal.
    Hemos utilizado la orden cat para crear y visualizar ficheros, con redireccionamientos y
tuberías, pero cat es una abreviatura de concatenar.
    cat [opc] [fichero(s)] [-]
     Concatena los ficheros especificados, y los muestra por stdout, la cual podemos redireccionar.
El guión (-) significa una entrada por teclado.
        -v Muestra los caracteres no imprimibles.
        -t Además los TAB los muestra como ^I. Sólo los TAB –T.
        -e Además en los EOL muestra un $. Sólo los EOL –E.
        -n Numera las líneas de salida.
        -b No numera las líneas en blanco.
        -s No muestra más de una línea en blanco.
        -A Equivale a –vET.
    Ejemplos:
                  cat f1 f2
                  cat f1 - f2 > f3


     Dividir ficheros verticalmente (por columnas).
    cut [opc] [fichero]
    Permite seleccionar columnas (caracteres o campos) de un fichero, el resultado va a stdout.
        -c lista Seleccionamos la columna por caracteres.
        -f lista Indicamos la columna por campos (fields).
    En ambos casos la lista está formada por un conjunto de números separados por comas o
guiones.
        -dcarácter       Informa de cual es el carácter delimitador de campos cuando usamos
           la opción -f, por defecto se asume tab.
        -s Se usa conjuntamente con la opción “f”, para pasar por alto las líneas que no tengan
           el delimitador, como son cabeceras, títulos o líneas vacías.
    Ejemplos:
        Corta el rango de caracteres del 20 al 35:
            cut -c20-35 datos
        Se obtiene el 2º y 4º campo, actuando como separador los “:”
            cut -d”:” -f2,4 datos


     Unir ficheros verticalmente.
    paste [opc] fichero(s)
    Une los ficheros verticalmente, produciendo una única salida nueva.
    Sin opciones, sustituye los caracteres de fin de línea por tab, excepto los del último fichero.
        -dcarácter       Carácter que sustituye los finales de línea.


    Ejercicios:



El Sistema Operativo Unix - Linux                                                                     38
Obtener un listado ordenado de todos los usuarios que son propietarios de algo dentro del
    directorio /home; no deben de estar repetidos. Orientaciones:
           A la salida de la orden ls -l le podemos eliminar la cabecera.
           Cortar la columna de los propietarios.
           Ordenar
           Eliminar los repetidos.
    En un fichero de alumnos, donde tenemos los datos de un alumno por linea, con los datos
    Nombre; Apellidos; Edad. Obtener otro fichero con los datos apellidos, nombre; ordenado por
    apellidos.



     Búsqueda de ficheros.
    find [ruta(s)] [opcion(es)]
    Es útil para localizar ficheros que cumplan determinadas condiciones o características, en las
ramas del árbol de directorio que se le indique. Finalmente sobre los ficheros o directorios
encontrados se puede ejecutar alguna acción.
    Dentro de las opciones, unas indican criterios de búsqueda (en el caso de que se indique más
de un criterio se seleccionan los ficheros que cumplan todos simultáneamente).
    Otras opciones indican las acciones a realizar con los ficheros encontrados.
    Cuando el criterio se acompaña de un nº n, este puede llevar el signo positivo (+), negativo (-) o
ninguno, significando respectivamente mayor que, menor que o igual que.
    Algunas opciones que indican criterios de busqueda:
        -name patrón     Nombre del fichero a buscar, admite metacaracteres. Se aconseja
                         poner el nombre entre comillas, para que los metacaracteres no sean
                         interpretados por el shell.
        -iname patrón Como -name, pero no hace distinción entre mayúsculas y minúsculas.
        -type t          Donde “t” es un carácter que indica el tipo de fichero, este puede ser:
                         f   Ficheros ordinarios.
                         b   Dispositivos de bloques.
                         c   Dispositivos de caracteres.
                         d   Directorios.
                         l   Vínculos simbólicos.
        -links [±]n      Nº de enlaces.
        -inum n          Empareja con los ficheros que tengan como nº de inodo n.
        -perm n          Localiza los ficheros que tengan exactamente los permisos indicados
                         por el nº n (octal).
        -user usuario    Ficheros que pertenezcan al usuario, se indica el nombre del usuario.
        -uid n           Idem, n debe de ser un identificador de usuario. (ls -n muestra uid y gid)
        -group grupo     Ficheros que pertenezcan al grupo.
        -gid n           Idem, n debe de ser un identificador de grupo.
        -size [±]n       Nº de bloques de tamaño del fichero. Si se añade una c detrás del
                         número se interpreta el tamaño en bytes (caracteres), k (Kbytes), w
                         (palabras 2 bytes), b (bloques, por defecto).
        -empty           Si el fichero o el directorio está vacío.
        -atime [±]n      Si ha sido accedido en los últimos n días.




El Sistema Operativo Unix - Linux                                                                     39
-mtime [±]n       Idem modificado.
        -newer fichero Ficheros modificados con posterioridad a la fecha y hora de
                       modificación del fichero especificado.
        -maxdepth n       n indica el nivel de profundidad al que se descenderá buscando ficheros
                          en el árbol de directorios a partir de la trayectoria indicada. 0 Ninguno, 1
                          sólo en el directorio indicado.
        -mindepth n       n indica a partir de que nivel se inicia la búsqueda. 1 a partir del
                          directorio indicado, 2 omite los ficheros del directorio indicado.


    Ejemplos:
    find . -size -25c
    find /home/user07 -name hola -type d
    find programas -name "*.c"
    find /home -atime +30
    Probar todos los criterios vistos y algunas combinaciones entre ellos.


    Estos criterios se pueden alterar y combinar con los operadores relacionales.
    Se listan en orden de prioridad:
        ()        Fuerza a la ejecución prioritaria.
        !         Colocada delante de un criterio este queda negado.
        -a        Operador lógico y. Si no ponemos ninguno este va implícito.
        -o        Entre dos criterios representa el o lógico.


    find . ! -name "*.c" -print
    find ./cartas ./epistolas ( -name pepe -o -name jose ) -ls
    find /home -name "*.txt" -user user07 –fprint txtde07


     Son necesarios los paréntesis, ya que el AND tiene precedencia sobre el OR. Las barras
invertidas son para que estos caracteres sean interpretados por el comando, no por el shell.
Observar los espacios de separación entorno a los paréntesis.


    Opciones que indican acciones a realizar:
        -print            Muestra la trayectoria de los ficheros que se encuentren. Esta será
                          relativa o absoluta, dependiendo del tipo de trayectoria de búsqueda
                          que nosotros indiquemos en la orden. Acción realizada por defecto.
        -fprint file      Almacena el resultado en el fichero indicado.
        -ls               Lista los ficheros encontrados por la salida estándar con el formato de
                          la orden “ls -dils”, es decir, información de directorios, nº de inodo,
                          listado largo y tamaño en bloques.
        -exec orden [{}] ;       Ejecuta la orden con los ficheros encontrados. El juego de
                         llaves representan los ficheros encontrados, el (;) indica el final de la
                         orden y hay que colocarle antes la () para que pierda el significado
                         especial que tiene para el shell.




El Sistema Operativo Unix - Linux                                                                        40
-ok orden [{}] ; Igual que la anterior, pero pide confirmación antes de ejecutar la orden
                          con cada fichero. Los corchetes indican opcionalidad.


    Ejemplos:
    find . -name “carta*” - type f -exec cat {} ;
    find cuentas -atime +90 -ok rm {} ;
    find programas -newer proyec.c -exec mv {} /home/user07/actual ;
    find . -atime +3 -atime -60 -exec mv {} ../reserva ;
    find /home -atime +30 -size +20 -ok rm {} ;


     En ocaciones, esta orden puede tardar bastante, por lo que se suele ejecutar en background, si
no necesitamos su resultado inmediatamente, para ello se añade al final de la orden el carácter &.
En este caso ejecutará las acciones de forma desatendida y la salida estándar la debemos de
redirigir.
    Observar la diferencia entre “find . -name fichero” y “find /home/user07 -name fichero”.
    Para ejecutar acciones sobre los ficheros encontrados, realizar la práctica en vuestro directorio
    de trabajo y preferiblemente con “-ok orden ...”.




El Sistema Operativo Unix - Linux                                                                    41
Editores:

     Editor VIsual. Generalidades.
     Comenzar con VI
          vi [-opciones] [fichero(s)]
              -R Abre el fichero en modo de solo lectura.
              +n Al abrir el fichero se posiciona automáticamente en la línea n.
              + Ídem, pero colocándose al final del fichero.
     Modos de trabajo
          Texto.
          Comando:
               De pantalla (al iniciar).
               De línea de órdenes.
    Entrar a modo texto:

          i   Inserta en la posición del cursor.
          a Inserta después del cursor.
          I   Inserta al principio de la línea.
          A Inserta al final de la línea.
          o Abre una línea debajo de la activa.
          O Abre la línea encima de la activa.
    Pasar a modo comando:

          Pulsando <Esc>.
     Desplazamiento
    En algunos terminales con las teclas de dirección.
    También h j k l (izquierda, abajo, arriba y derecha respectivamente).
    <Ctrl>+f          Avanza pantalla.               <Ctrl>+b   Retrocede pantalla.
    <Ctrl>+d          Avanza 1/2 pantalla.           <Ctrl>+u   Retrocede 1/2 pantalla.
    w                 Avanza una palabra.            b          Retrocede una palabra.


     Sobreescritura
    r     Un solo carácter, y pasa a modo comando.
    R Reemplaza indefinidamente hasta que se pulse <Esc>.


     Grabar y Salir
    :q                  Abandona vi si no se ha modificado el documento.
    :q!                 Abandono imperativo, perdiendo los posibles cambios.




El Sistema Operativo Unix - Linux                                                         42
:wq               Grabar y salir.
    :w fich           Graba en el nombre de fichero que le indiquemos.
    :w! fich          Si el fichero existe lo sobreescribe.
    :w >> fich        Añade al fichero indicado.
    ^g                Muestra el nombre del fichero.


     Borrar
         J Une la línea actual con la siguiente.
         x Borra el carácter sobre el que está el cursor.


    d[n]alcance
         Donde n es el número de veces que se va a repetir la operación.
         El alcance puede ser:
                      d Línea actual.
                      w Palabra siguiente a partir del cursor.
                      b Palabra anterior a partir del cursor.
                      ) Hasta final de frase. (Punto o línea en blanco)
                      ( Hasta principio de frase.
                      } Hasta el final de párrafo. (Pto. y aparte y línea en blanco)
                      { Hasta el principio de párrafo.
                      $ Hasta final de línea.
                      ^ Hasta principio de línea.            Sin nº de veces.
                      G Hasta el final del fichero.
    Al borrar, el texto pasa a un búfer de carácter general. (CORTAR)


     Cambiar
    c[n]alcance
    n y alcance tienen el mismo significado que en la orden anterior, pero para indicar una línea en
alcance, se emplea la letra c.
    El bloque de texto así especificado se sustituye por la siguiente entrada por teclado, hasta que
pasemos a modo comando.


     Copiar al búfer general
    y[n]alcance
    Donde n y alcance tienen el mismo significado que en el comando "d", con la salvedad que
para referirnos a línea en alcance hay que poner y.
    El texto indicado se copia al búfer general sin borrarlo de su ubicación.




El Sistema Operativo Unix - Linux                                                                43
Pegar
    p   Pega el contenido del búfer general después de la posición del cursor.
    P Ídem., pero antes de la posición del cursor.


     Repetición
    . El punto repite la última operación de borrado o el último bloque insertado.


     Deshacer
    u   Deshace la última operación realizada.
    U Restaura la línea actual.



     Configuración
    :set showmode        Indica cuando esta modo INSERT y REPLACE.
                         (En Linux también Command y Buffer)
    :set noshowmode Desactiva la anterior.


    :set list            Muestra los caracteres no imprimibles, TAB como ^I, final de línea como $.
    :set nolist          Desactiva la anterior.


    :set number          Muestra números de línea.
    :set nonumber        Desactiva la anterior.
    Ejemplo de órdenes de la línea de comandos que usan los números de línea:
    :rango_origencolínea_destino          Copiar.
    :rango_origenmlínea_destino           Mover.
    :rangow fichero                       Grabar.
    El Rango se indica con el nº inicial y el final separados por una coma.


    :set wrapscan        Por defecto búsquedas circulares.
    :set nowrapscan No realiza búsquedas circulares.


    :set ignorecase      No diferencia entre mayúsculas y minúsculas.
                         A efectos de búsquedas y reemplazos.
    :set noignorecase Desactiva la anterior.


    :set shiftwidth=n Sangrado izquierdo.
                      ^T deja n espacios más.
                      ^D quita n espacios al sangrado.
                      No afecta a la tecla del tabulador, que inserta 8 espacios.



El Sistema Operativo Unix - Linux                                                                44
:set autoindent      En la nueva línea emplea el mismo margen izq.
    :set noautoindent Desactiva la anterior.


    :set wrapmargin=n Número de espacios del margen derecho.


    :set showcmd         Muestra el comando de pantalla en la línea inferior mientras se escribe, al
                         ejecutarse se borra.
    :set noshowcmd Desactiva la anterior.


    :set ruler           En la línea de estado, muestra la línea y columna donde se encuentra el
                         cursor.
    :set noruler         Desactiva la anterior.


    Para recomponer la pantalla después de un mensaje u otra incidencia pulsar ^L, en modo
    comando.


    :set         Muestra las opciones activas.
    :set all     Muestra todos los posibles set.




     Estos comandos set se pueden utilizar en cualquier momento cuando se esta trabajando con
vi, pero se pueden guardar en un fichero de configuración llamado ".exrc" (“.vimrc” para el editor
vim) y automáticamente se cargaran al comenzar una sesión con vi. Estos ficheros se encuentran
en el directorio home de cada usuario. Por ejemplo .exrc (.vimrc) puede contener:


                                           set showmode
                                           set number
                                           set autoindent
                                           set shiftwidth=4
                                           set wrapmargin=5


     Acceder al shell
    :!orden      Ejecuta la orden y después de pulsar return regresa al vi.
    :sh          Sale al sh y regresa al escribir exit o ^d.


     Abreviaturas
    :ab abreviada cadena_a_abreviar Pone una abreviatura a una cadena.
    :una abreviada                          Deshace la abreviatura.
    :ab                                     Muestra las abreviaturas creadas.




El Sistema Operativo Unix - Linux                                                                45
Búsquedas y reemplazos.
    /texto       El cursor se desplaza a la línea de comandos.
                 La búsqueda se realiza hacia el final del fichero.
    ?texto       Ídem, pero hacia el principio del fichero.
    n            Repite la última búsqueda.
    N            Ídem pero cambiando el sentido.


    La búsqueda no se hará circular si empleamos :set nowrapscan.


    Se puede utilizar una expresión en lugar del texto. Caracteres con un significado especial
dentro de las expresiones de búsqueda:


    .   Cualquier carácter.
    ^   Debe de ser el primer carácter. Indica principio de línea.
    $   Indica final de línea.
    < Comienzo de palabra.
    > Final de palabra.
    [ ] Conjunto de caracteres. Ejemplos:[0-9], [^A-Z], [aeiou].
    *   Ninguna o más repeticiones del carácter anterior.


    Para que estos metacaracteres pierdan su significado se usa .
    También se pueden inhabilitar con :set nomagic.


     Reemplazos globales.
    :ámbitos/patrón1/patrón2/g


    ámbito       n       La línea número n.
                 n1,n2 Rango de líneas.
                 .       Línea actual.
                 $       Final de fichero.
                 %       Todo el fichero.
    s            Es la orden.
    /patrón1     Lo que buscamos.
    /patrón2     Por lo que lo vamos a sustituir. Si no se especifica se borra la expresión buscada.
        /g     En todas las ocurrencias de una línea. De no indicarse se reemplaza la
primera ocurrencia de cada línea.



El Sistema Operativo Unix - Linux                                                                  46
Marcar texto.
    mletra
    Donde m es el comando (mark) marcar, y debe de ir seguido de una letra de la a a la z. Pone
una señal invisible en la posición del cursor.
          Las marcas sirven para:
                  Referirnos a la línea: 'letra (comilla simple).
                  Referirnos al carácter: `letra (acento grave).
     Con las marcas podemos desplazarnos a determinados puntos, solo con teclearlas precedidas
de ' o `.
    También se pueden utilizar para indicar el alcance en comandos como d, y, c. Así por ejemplo
para borrar de la línea en curso hasta la que esta marcada con la letra a d'a.



     Los Búfers del VI
    Podemos distinguir 3 tipos de búfers:


              El búfer sin nombre o de proposito general. Que se usa automáticamente en las
              operaciones de cortar, copiar, pegar y cambiar.


              Los búfers numerados, que son nueve. Y contienen los nueve grupos de líneas
              borradas más recientemente con el comando d o x. Lo borrado más recientemente se
              almacena en el búfer nº 1.
          Se puede pegar su contenido en cualquier parte con el comando p o P.
          Utilizando la sintaxis “nºp.


              Los 26 búfers alfabéticos (de la a a la z). Se emplean en conjunción con las órdenes
              de cortar, copiar y pegar. Para ello se teclea precediendo la orden, comillas dobles y la
              letra del búfer, que se va a utilizar para depositar la información o tomarla de allí.


     Edición de múltiples ficheros.
    Cuando al invocar a vi se especifican varios ficheros (ya sea utilizando una lista o empleando
metacaracteres). Se empieza editando el primero.


    :n Después de que ejecutemos :w (grabar) se pasa al siguiente.
    :n!
    :rew          Después de :w pasa a editar el primero de la lista.
    :rew!
    :args         Informa de los ficheros cargados.




El Sistema Operativo Unix - Linux                                                                   47
:e fichero Pasa a editar el nuevo fichero si se ha grabado el anterior. Aunque no se haya
               cargado inicialmente, no se verá con la orden “:args”.
    :e! fichero Ídem aunque no se haya grabado el anterior.
    :e#          Regresa al fichero anterior.


     Mover texto de un fichero a otro.
    Utilizando los búfers alfabéticos.


    Ejemplo: "ay'z (extrae el texto desde la línea en curso hasta la marcada con z y las almacena
en el búfer a.
    En otro fichero se pegará con la orden “ap.


    No se puede utilizar el búfer sin nombre, ni los numerados (en el vi estándar), pues estos se
borran al pasar de un fichero a otro.


    Otra forma sería grabando el bloque en un fichero temporal:
    :nºLínea1, nºLínea2w fichero Graba el rango de líneas en el fichero indicado.
    :r fichero    Inserta el fichero después de la línea en curso.


    Contamos con otros editores como: emacs, joe, nano, gedit,…




El Sistema Operativo Unix - Linux                                                             48
Comunicación entre Usuarios
    Lo primero será averiguar información sobre los usuarios y los que están conectados

     finger
     Proporciona información sobre los usuarios conectados al sistema, o incluso no conectados si
indicamos su nombre. La sintaxis es:
     finger [opc] [usuario...] [usuario@host...]
    Por defecto muestra la siguiente información sobre cada usuario comectado al host local:
         Nombre de conexión.
         Nombre completo del usuario.
         Nombre del terminal, si va precedido por un * no admite mensajes con write.
         Tiempo que lleva ocioso.
         Hora de conexión.
         Desde dónde se ha establecido la conexión.


    Si sólo queremos información del usuario user07 escribiremos:
    finger user07
    En este caso la muestra aunque no esté conectado.

     who
    who [opciones]
     Con who podemos ver los usuarios conectados a nuestro sistema, además, nos muestra el
terminal en el que están conectados y el tiempo de conexión. who imprime la siguiente información
por cada usuario que actualmente está conectado al sistema:
         Nombre de la cuenta (login name).
         Terminal.
         Momento en el que se conectó.
         Nombre de ordenador remoto o terminal X.
    Si sólo queremos información sobre el usuario que ejecuta la orden escribiremos:
    who -m
    who am i

     w
    w [usuario]
   Nos da información sobre los usuarios que están conectados en el momento que se ejecuta el
comando y sobre que están haciendo.
    También se puede indicar un usuario en concreto.
    Ejemplo:
    $w
    4:59pm up 4:05, 3 users, load average: 0.00, 0.01, 0.01
    USER    TTY      LOGIN@                 IDLE     JCPU       PCPU     WHAT



El Sistema Operativo Unix - Linux                                                              49
paco     tty1      12:54pm 4:04m         11.85s    0.03s    startx
    cursolin tty3      4:59pm 7.00s          0.06s     ?        -
    paco     pts/0     4:53pm 0.00s          0.08s     0.03s    w


    En la primera línea nos informa de
            La hora actual.
            Cuánto lleva el sistema funcionando.
            Cuántos usuarios están conectados.
            Las cargas medias en los anteriores 1, 5 y 15 minutos.
    A continuación para cada usuario se muestra:
            Nombre de login,
            Nombre de tty.
            Tiempo de conexión.
            Tiempo inactivo.
            Jcpu, es el tiempo usado por todos los procesos bajo el terminal tty.
            Pcpu, es el tiempo usado por el proceso en curso.
            La línea de comando del proceso en curso.



     write
    write usuario [terminal]
    El comando write nos permite mandar un mensaje a otro usuario en tiempo real, es decir, el
mensaje aparecerá inmediatamente en la pantalla del destinatario. Estos mensajes no se
almacenan en ningún buzón.
    Por supuesto sólo nos vale si el destinatario está conectado, y además debe tener mesg en y.
    Supongamos que deseamos enviar un mensaje al usuario user07, y que tiene activa la
recepción de mensajes, en ese caso escribiríamos
    write user07
    Una vez escrito el texto que deseemos enviar como mensaje:
    Hola Pepito, que no se te olvide la cita.
    pulsaremos [Ctrl]+[d] y el mensaje será enviado.


    También podemos mantener comunicaciones bidireccionales tipo walkie-talkie.
    Para ello no se pulsa ^d, y el otro usuario debe de escribir la orden write con nuestro nombre,
cada vez que pulsemos return, esa línea aparecerá en el terminal del otro ususario.

     wall
    wall [archivo]
    Si queremos enviar un mensaje, no a un solo usuario, sino a todos los usuarios conectados
usaremos wall. El mensaje puede estar previamente contenido en un fichero, y para enviarlo
escribiremos:
    wall < fichero.txt
    Es una utilidad para el administrador y sólo él puede escribir en los terminales de los usuarios
que hayan denegado la recepción de mensajes.




El Sistema Operativo Unix - Linux                                                                50
Mensaje del día.
    Es otra forma de comunicación, en este caso del administrador con los usuarios.
    Consiste en un pequeño mensaje o aviso que aparecerá en el terminal de cada usuario cuando
este se conecte.
    El administrador colocará este mensaje en el fichero /etc/motd.

     Mensaje de preentrada
     Aparece justo antes de la línea que nos pide el nombre del usuario “login:”, cuando accedemos
al sistema mediante acceso de consola.
    El administrador coloca el mensaje en el fichero /etc/issue.

     mail
    En el caso de que nuestro usuario no esté conectado, el mejor comando para comunicarnos
con él es mail.
     Envio de mensajes
     El mensaje a enviar puede ser tecleado directamente o estar previamente contenido en un
fichero. La sintaxis básica es:
     mail usuario(s)
     mail usuario(s) < fichero
    No admite metacaracteres.
    Si queremos enviar un mensaje a User07 escribiremos:
    mail User07
    Subject: Cita
    Te recuerdo que tenemos una cita
    .
     Se nos pide el asunto y a continuación escribimos el texto, finalmente al principio de una nueva
línea ponemos un punto (.) y pulsamos return.
    Cuando User07 se conecte al sistema, éste le avisará de que tiene un correo:


    Para enviar el contenido de un fichero:
    mail user07 < carta
    Algunas opciones de la línea de comando:
    De esta manera no solicita el asunto, si tenemos interés en indicarlo usaremos la opción -s:
        -s “cadena”      Indicamos el asunto de la correspondencia.
        -c “Usuario(s)” Usuarios que recibirán una copia.
        -b “usuario(s)” Usuarios que recibirán una copia ciega (los demás no se enteran).
    En cualquiera de los dos formatos en lugar de poner un ususario podemos colocar una lista de
destinatarios.
    Si queremos enviar un mensaje a un usuario de otra máquina escribiremos:
    $ mail usuario@nombre_maquina




El Sistema Operativo Unix - Linux                                                                  51
Lectura del correo.
    Entramos en el modo de lectura del correo electrónico simplemente escribiendo “mail” sin
opciones ni argumentos.
    Al entrar muestra un resumen tabular de todos los mensajes existentes en nuestro fichero
buzón “/usr/spool/mail/UserName” (en nuestro sistema “/var/mail/UserName”), esta información
consiste en:
        Estado:
         N      Mensajes nuevos.
         U      No son nuevos, pero no han sido leidos.
         R      Leidos en la actual sesión.
         P      Preservados. leidos y almacenados en el buzón de entrada.
         D      Marcados para ser eliminados.
         O      Mensajes antiguos.
         *      Guardados en otro archivo buzón.
        Nº de mensaje.
        Remitente.
        Fecha y hora de recepción.
        Nº de líneas / caracteres.
        Asunto.
    Finalmente aparece el prompt o inductor de mail, para que le indiquemos cual es la siguiente
operación que vamos a realizar.
    Órdenes para ver mensajes:
        h               Vuelve a visualizar las cabeceras de los mensajes.
        z+ z-           Si la lista de cabecera es muy larga, avanza y retrocede pantalla.
        nº_mensaje      Visualiza el mensaje.
        Intro           Visualiza mensaje siguiente.
        +               Visualiza el mensaje siguiente.
        -               Visualiza el mensaje anterior.


    Eliminación y recuperación de mensajes.
            d nº_mensaje      Marca para eliminar los mensajes indicados.
            q                 Sale de mail, elimina los marcados y guarda los leidos en mbox.
            x                 Sale de mail sin borrar los marcados.
            pre nº_mensaje    Preserva los mensajes en el buzón de entrada aunque estén leidos.
            s nº_mensaje fichero    Almacena los mensajes en el fichero incluida la cabecera.
            w nº_mensaje fichero Almacena los mensajes en el fichero sin cabecera.


     Configuración.
    mail posee un fichero de configuración llamado .mailrc, que es utilizado por mail cada vez que
se ejecuta, en él podemos configurar muchas opciones:
    set asksub           Solicita introducción de asunto.
    set askcc            Solicita, antes de enviarlo, direcciones para copias.



El Sistema Operativo Unix - Linux                                                                 52
set prompt=”cad”       Cambia el inductor de mail.
    set sign=”cad”         Establece cadena de firma que se inserta con ~a.
    set folder=dir         Establece directorio donde almacenar archivos buzón.
    set record=fich        Guarda en el fich todo el correo que se cree o envie.
    set outfolder          Pone el archivo “record” en el directorio “folder”.
    set MBOX=fich          Establece el nombre para el fichero mbox.
    set MBOX=+fich         Con el signo + lo coloca en el directorio “folder”.


     Otra utilidad del fichero de configuración es la de crear alias, un alias en mail es un nombre que
se le da a un grupo de usuarios para mandarle el mismo correo a todos, ahorrándonos de esta
forma tener que teclear el nombre de cada usuario individual. El formato es el siguiente:
     alias NombreAlias ListaUsuarios
    ejemplo:
    alias clase user01 user02 user03 user 04 user05 user06 user07




El Sistema Operativo Unix - Linux                                                                   53
Empaquetar y Comprimir Ficheros.
    Linux dispone de múltiples utilidades y programas para empaquetar y comprimir ficheros,
desde el clásico compress hasta el más moderno bzip2. Sin embargo los más utilizados (hoy por
hoy) son:
               tar para empaquetar
               gzip para comprimir

     tar
    Tar (Tape Archive, archivar en cinta) permite empaquetar o desempaquetar ficheros. El
concepto de empaquetar aquí es el de meter varios ficheros y/o directorios en un solo fichero
(paquete). Posteriormente podremos recuperar esa estructura de ficheros y directorios en el lugar
donde queramos. Su sintaxis básica es:
    tar opciones [archivo.tar] [origen]


    Opciones:
Se pueden combinar, siempre y cuando no indiquen acciones contrarias. Si especificamos varias se escriben
juntas sin mediar espacios entre ellas. Tradicionalmente no se emplea el guión (-), que normalmente precede
a las opciones en las órdenes Unix.
           c Crear un nuevo archivo tar (empaquetado).
           t    Para mostrar el contenido de un paquete.
           x Para extraer archivos empaquetados, se pueden indicar ficheros individuales.
           r    Añade el (los) fichero(s) especificado(s) al final del paquete.
           u Añade el (los) fichero(s), sólo si no están o son de fecha más reciente.
           Siempre se debe usar una de las opciones anteriores inmediatamente después de la
              orden tar.
           v Visualizamos la información en forma detallada.
           f    Indica que el primer argumento, después de las opciones, es el nombre de un
                fichero tar o un dispositivo. Si se pone - , utiliza la entrada o salida estándar, de esta
                manera se puede usar con tuberías.
           M Para crear / desempaquetar paquetes que ocupen varios discos.
           z Filtrar el archivo a través de gzip (tanto para comprimir como descomprimir).
             Tendrán la extensión .tgz.
           j    Linux. Comprime o descomprime con bzip2. Extensión .bz2.
    archivo.tar Nombre del archivo almacén.
    origen           Nombre del directorio(s) / fichero(s) a empaquetar separados por espacios
     Supongamos que deseamos empaquetar dos ficheros llamados linux1.txt y linux2.txt, en un
fichero tar de nombre linux.tar, escribiremos:
    tar -cvf linux.tar linux1.txt linux2.txt
    también podíamos escribir:
    tar -cvf linux.tar linux?.txt
    Para empaquetar todo el contenido del directorio “entrega”:
    tar -cvf entrega.tar entrega




El Sistema Operativo Unix - Linux                                                                            54
Si lo que deseamos es desempaquetar un fichero tar, en vez de escribir la opción -c
escribiremos -x, así para desempaquetar el contenido de la entrega anterior escribiremos:
    tar -xvf entrega.tar
    De esta manera se creará la estructura de subdirectorios que hubiese dentro de entrega.
    Si solamente queremos ver el contenido del fichero empaquetado (tar), ejecutaremos.
    tar -tvf entrega.tar
     Antes de extraer ficheros tar es importante conocer donde deben desempaquetarse los
ficheros, y con qué tipo de trayectoria fueron empaquetados (absoluta o relativa), la opción -t nos
informa de esto. Y así podremos crear los directorios apropiados y poner activo el directorio
correspondiente.
     Uso de dispositivos
    En lugar de un fichero como contenedor para empaquetar los ficheros o directorios, podemos
usar el nombre de un fichero dispositivo, /dev/fd0 para el primer disquete y /dev/rmt0 para la unidad
de cinta.
     Para usar un disquete con tar, no requiere formato MSDOS ni SF Unix, sólo es necesario que
el disco este formateado a bajo nivel, lo cual se consigue con:
     fdformat dispositivo
    Para el caso del disquete (A:) de 1,440 MB
    fdformat /dev/fd0H1440
    Podemos usar tar para hacer copias de seguridad en varios discos (multivolumen), en ese
caso la sintaxis sería:
    tar cvfM /dev/fd0 origen
    Hay que hacer notar que en este caso no se puede empaquetar y comprimir a la vez y que no
podemos poner el guión delante de las opciones, no funciona.
    Para desempaquetar los discos así obtenidos tan sólo tendremos que introducir el primer
disco, y sin montarlo, ejecutar:
    tar xvfM /dev/fd0
    Se nos pedirán los disco uno a uno hasta que termine el proceso.

     gzip
    Gzip permite comprimir ficheros, la sintaxis básica es:
    gzip [opciones] fichero
     Reemplaza el fichero existente por su versión comprimida, añadiéndole al nombre la extensión
“.gz”.
    Opciones:
        -v Comprime y muestra el nombre y porcentaje de reducción de cada fichero.
        -d Para descomprimir archivos.
        -t Para comprobar la integridad del fichero comprimido, si está bien no muestra nada,
           a no ser que la combinemos con la opción “-v”.
        -1 a -9 Nivel de compresión, el -1 indica menor ratio y mayor rapidez, el -9 daría como
           resultado un archivo más pequeño pero un mayor tiempo de compresión. El nivel por
           defecto es –6.
        -c Para que trabaje con la entrada / salida estándar.




El Sistema Operativo Unix - Linux                                                                 55
archivo      Nombre del archivo a comprimir o descomprimir.
     Ya tenemos empaquetado nuestro archivo entrega y deseamos comprimirlo al máximo y
verificar que todo está bien, usaremos:
    gzip -9 entrega.tar
    El resultado es el fichero entrega.tar.gz, si queremos comprobar la integridad del fichero
escribiremos:
    gzip -tv entrega.tar.gz
    entrega.tar.gz: OK
    Si ahora queremos descomprimir este fichero tenemos dos posibilidades, bien usamos:
    gzip -d entrega.tar.gz
    Bien escribimos directamente
    gunzip entrega.tar.gz
    Y posteriormente habrá que desempaquetarlo.

     Los dos a la vez: tar y gzip
    Encadenando los dos comando mediante tuberías.
    tar cvf - /home/user07 | gzip -9c > backup.tar.gz
    gunzip -c backup.tar.gz | tar xv
     Se puede empaquetar y comprimir un directorio directamente sin tener que usar un comando
tras otro, las dos posibilidades son:
    tar -czvf nombre_fichero.tar.gz origen
    tar -czvf nombre_fichero.tgz origen
     En ambos casos, la opción -z es la que señala que tenemos que comprimir. Las extensiones
tar.gz y .tgz son equivalentes.
    También podemos descomprimir y desempaquetar un fichero tar.gz o un tgz usando sólo la
orden tar, la sintaxis sería:
    tar -xzvf fichero.tar.gz

     zcat
    Visualiza ficheros comprimidos.

     compress, uncompress
    Los ficheros comprimidos con compress tienen extensión .Z, para comprimirlos se usa el
programa compress y para descomprimirlos uncompress, es un formato no muy utilizado en este
momento y, además la utilidad gunzip permite descomprimirlos. Así, para descomprimir un fichero
comprimido con compress podemos usar:
    uncompress archivo.Z                 o bien               gunzip archivo.Z

     bzip2, bunzip2
     Para comprimir y descomprimir ficheros existen más herramientas que las ya comentadas pero
la única que merece mención especial es bzip2.
    Prácticas:
    Crear un archivo .tar en vuestro directorio de trabajo.



El Sistema Operativo Unix - Linux                                                           56
Añadirle ficheros, nuevos y modificados, usando distintos tipos de trayectorias..
    Comprobar los ficheros que lo componen.
    Borrar los originales y recuperarlos del paquete.
    Realizar las operaciones anteriores con un disquete y una cinta.



     Sistema de Impresión.
    Órdenes relacionadas con la Impresión: lp, lpr, lpq, lprm lpstat, cancel, pr, lpc.
   La instalación y configuración de una impresora se tratará al hablar de las tareas del
administrador.
    Un sistema Unix puede disponer de varias impresoras (caso de tener muchas se suelen
organizar en grupos), siempre habrá una a la que se dirigirán los trabajos por defecto.
    Los trabajos que se mandan a la impresora se gestionan mediante un spooler o cola de
impresión, al colocarse un trabajo en el spooler se le asigna un nº (request ID), mediante el cual
será identificado hasta que termine de imprimirse o se retire de la cola.
    La impresión se realiza en 2º plano, de forma desatendida, de esta manera no compite con los
procesos interactivos, pudiendo el usuario realizar cualquier otro trabajo inmediatamente después
de mandar un documento a la impresora.
     Los ficheros que están en la cola se colocan normalmente en un directorio llamado
/usr/spool/lpd, donde existe un directorio para cada impresora.
    La gestión de la cola de impresión la lleva a cabo el proceso lpd, que es un demonio, es decir,
un proceso que no está asociado a ningún terminal.

     Mandar trabajos a la impresora
     Orden lpr
    Envía un trabajo a la cola de impresión.
    lpr [opc] fichero(s)
     Si el sistema tiene conectadas varias impresoras, es útil la siguiente opción para usar una
distinta a la impresora por defecto.
        -P NombreImpresora


     (Line Printer) Impresora de líneas.
    lp [opc] [fichero(s)]
    Sin opciones envia los trabajos a la impresora por defecto, e imprime una página identificativa
para cada trabajo.
        -d destino    Impresora o grupo en la que debe de ejecutarse el trabajo.
        -nnº             Nº de copias.
        -c            Realiza una copia temporal del trabajo, para que en la impresión no
                      influyan cambios posteriores.
        -t “título”   Imprime un título, precediendo el trabajo en una hoja banner.
        -m            Envía un correo al usuario al terminar de imprimir su trabajo.
        -s            Suprime los mensajes por pantalla, “request id ...”




El Sistema Operativo Unix - Linux                                                               57
-q nivel_prioridad         El rango es desde 0 (máxima prioridad), hasta 25 (mínima
                      prioridad). En Suse 1 mínima, 100 máxima, 50 por defecto.
    Puede recibir la información a imprimir mediante una tuberia, procedente de otro comando o
con un redireccionamiento. Si no se le indica entrada o se especifica con un guión (-) se usa la
entrada estándar.
     Directamente usando el fichero de dispositivo.
    Los ficheros de dispositivo de las impresoras, como los demás, se encuentran en el directorio
/dev y su nombre comienza por lp seguido de un nº, así tenemos lp0, lp1 y lp2. lp0 se usa para el
primer puerto paralelo, el normalmente usado por la impresora. En el directorio /dev/usb también
contamos con 8 ficheros de dispositivo para la impresora.
    Se puede mandar información directamente a la impresora redirigiéndola a su fichero
dispositivo, aunque esto no sea aconsejable. En nuestro sistema por defecto no se tienen permisos,
salvo los usuarios que pertenezcan al grupo “lp”.
    cat fichero > /dev/lp0
    ls –l > /dev/lp0



     Control de la cola.
     Ver los trabajos de la cola.
    lpq [opc]
     Muestra el estado de la cola de impresión, los trabajos existentes y cuando se han eliminado
de la cola de impresión.
    De las tareas en la cola nos dice: Owner/ID Class NºJob Files Size Time.
        -P NombreImpresora
        -l Listado largo, informa cuando ha sido impreso cada trabajo.



     Información sobre impresoras y la cola de impresión.
    lpstat [opc] [request ID]
    Sin argumentos nos informa sobre el estado de todos nuestros trabajos.
        -c Grupos de impresoras e impresoras de cada grupo.
        -d Impresora por defecto.
        -t Toda la información asociada al estado del sistema de impresión y al estado de la
           cola.
         -u “usuario(s)” Informa sobre las peticiones de esos usuarios.


     Eliminar trabajos de la cola.
    lprm [opc] IDTarea o UserID
    Elimina trabajos de la cola, bien sea indicando el ID del trabajo o el ID del usuario, en cuyo
caso se eliminarán todos los trabajos que tenga en la cola.
        -P NombreImpresora          Elimina todos los trabajos de la cola.




El Sistema Operativo Unix - Linux                                                              58
-   Un solo guión elimina todos los trabajos de impresión del usuario que ejecuta la
             orden. Si lo ejecuta el administrador, elimina todos los trabajos de todos los
             usuarios.


     Cancelar trabajos de impresión.
    cancel [impresora][request ID]
    request ID Elimina el trabajo de la cola.
    impresora Corta o cancela el trabajo que esté actualmente imprimiéndose.


     Administrar la impresión.
    lpc
    Permite comprobar el estado de las impresoras, activar y desactivar las impresoras, iniciar o
detener la impresión de trabajos, así como reorganizar el orden de los trabajos en la cola de
impresión.
     Esta orden muestra su propio prompt (lpc>) en el que admite sus propias órdenes, algunas de
las más útiles son:
        status [all | printer]   Visualiza el estado de los programas demonio y de las colas de
                                 impresión.
        start [all | printer]    Activa la impresión iniciando un programa demonio para la cola. Es
                                 usado cuando por alguna condición anormal el servidor termina
                                 inesperadamente dejando trabajos en la cola.
        stop [all | printer]     Detiene un programa demonio de “spooling”, una vez que haya
                                 terminado el trabajo en curso.
        enable [all | printer] Activa el “spooling” de las impresoras que se listan. Permite
                               nuevos trabajos en la cola de impresión.
        disable [all | printer] Desactiva las colas de impresión y no se aceptan nuevos trabajos.
        topq printer JobId ... Pone los trabajos relacionados al principio de la cola.
        quit o exit              Sale de lpc.
        ? o help                 Muestra una breve descripción de cada orden.




El Sistema Operativo Unix - Linux                                                                     59
Añadir el espacio Swap
Para añadir una partición swap (asumiendo que /dev/hdb2 es la partición que quieres
agregar):

1. Lo primero es saber cuanto de espacio de intercambio tienes, para ello ejecuta el
   comando (con la opción –m, muestra la información en MB):

       free –m

2. Inicia con un Live-CD.

       Desactiva el espacio swap del disco duro (si es que existe) con el comando
       swapoff.

       Crea la partición swap usando Gparted.

       Reinicia tu linux instalado.

3. Ahora que tienes la partición swap, usa el comando mkswap para configurar la
   partición swap.

       mkswap /dev/hdb2


       Genera el UUID (Universally Unique Identifier), anótalo, se aconseja poner en
“fstab” en lugar del dispositivo.

4. Para activar la partición swap inmediatamente, escribe el comando siguiente:

       swapon /dev/hdb2


5. Para activarlo cuando se arranca, edita /etc/fstab para incluir una de estas líneas:

       /dev/hdb2                      none             swap      sw       0   0
       UUID=…                         none             swap      sw       0   0


6. La próxima vez que se arranque el sistema, activará la nueva partición swap.
   El siguiente comando carga “sftab” sin necesidad de reiniciar

       mount -a


7. Asegúrate de que está activa usando alguno de los siguientes comandos.

       cat /proc/swaps
       free
       swapon –s
Como obtener Ayuda en GNU/Linux


1. Introducción
2. Corriendo comandos
3. Obteniendo ayuda
4. El comando whatis y apropos
5. La opción --help
6. El comando man
6.1 Moviéndonos por las Páginas del man
7. El comando info
7.1 Moviéndonos por las Páginas de info
8. Otras opciones de ayuda

Introducción

El objetivo de este wiki, es conocer las diferentes maneras de obtener ayuda sobre sistemas
basado en GNU/Linux. No importa la distribución que manejes, la forma de obtener la sintaxis,
los parámetros y demás acciones de los diferentes comandos y/o forma de invocación.
Daremos una revisión a la forma estándar de correr programas, así como también a las
múltiples opciones de obtener ayuda e interpretarla.

Corriendo Programas

Los sistemas *nix, se han caracterizado por tener una línea de comandos altamente eficiente, y
poderosa, para realizar cualquier tipo de procedimiento sobre ella.
Antes de proceder, acerca de como obtener ayuda, es conveniente dar un acercamiento a la
línea de comandos.
La mayoría de los comandos, tienen una sintaxis parecida a la siguiente:
comando opciones argumento
Aunque actualmente muchos comandos permiten cambiar el orden entre los argumentos y las
opciones, esta es la forma general y universal para cualquier sistemas *NIX.
Las opciones modifican el comportamiento de los comandos y normalmente tienen la siguiente
característica:

    •   Opciones de una sola letra, están precedidas por un -, y es posible unirlas en una sola,
        por ejemplo:
        ls -l -h
        ls -lh
    •   Opciones en forma de palabras, normalmente están precedidas por --, por ejemplo:
        ls --color=tty

Los argumentos se refieren a los nombres de archivos y/o otros datos necesitados por el
comando. Es posible poner múltiples comandos separando uno de otro a través del ;

Obteniendo ayuda

La línea de comandos es muy extensa, y dependiendo de la cantidad de paquetes instalados,
podemos encontrarnos con miles de comandos y cada uno de estos con diferentes opciones
que varían una y otra vez su comportamiento.
La idea es como siempre no tratar de memorizar todo, sino comprender como funciona, y para
entender esto, uno no esta solo. Existen diferentes niveles para la obtención de ayuda sobre
las distintas utilidades del sistema, estos niveles incluyen:

    •   El comando whatis y apropos
•   La opción --help
    •   Las paginas del manual
    •   Las páginas info
    •   La documentación incluida con el paquete
    •   Los grandes foros como esdebian.org y Google

El comando whatis y apropos

Ambos comandos son usados para obtener un primer acercamiento hacia las utilidades de
línea de comandos, pero desde diferentes perspectivas.
whatis es usada para obtener una corta descripción de los comandos; esta descripción es
obtenida desde una base de datos que es actualizada mediante cron.
Para actualizar manualmente esta base, es necesario como root correr el comando:
makewhatis. Como ejemplo, podemos citar:

natas@pc-natas:~$ whatis dbus-monitor
dbus-monitor (1)     - debug probe to print message bus messages

apropos es el comando que necesitamos cuando no conocemos el nombre del programa que
nos proporciona tal o cual cualidad. Esto queda mas entendido con un ejemplo, imaginemos
que queremos cambiarle el "password" a un usuario, sin embargo hemos tenido un ataque de
amnesia temporal y hemos olvidado el comando para hacer esto, pues bien podemos hacer
uso de apropos, para recordarlo:

natas@pc-natas:~$ apropos password
chage (1)            - change user password expiry information
chgpasswd (8)        - update group passwords in batch mode
chpasswd (8)         - update passwords in batch mode
expiry (1)           - check and enforce password expiration policy
grub-md5-crypt (8)   - Encrypt a password in MD5 format
login.defs (5)       - shadow password suite configuration
ophcrack (1)         - a Microsoft Windows password cracker using
rainbow tables.
pam_cracklib (8)     - PAM module to check the password against
dictionary words
pam_unix (8)         - Module for traditional password authentication
<strong>passwd (1)           - change user password</strong>
passwd (1ssl)        - compute password hashes
passwd (5)           - the password file

Como podemos observar, mediante este comando recordamos una vez más cual es el
comando necesario.

La opción --help

La mayoría de los comandos, ofrecen una ayuda intuitiva y básica directamente sobre la
terminal, esta ayuda es llamada con la opción --help. Una salida, común de esta opción es:

natas@pc-natas:~$ sed --help
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-
file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression=script
                 add the script to the commands to be executed
  -f script-file, --file=script-file
                 add the contents of script-file to the commands to be
executed
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if extension
supplied)
  -l N, --line-length=N
                 specify the desired line-wrap length for the `l'
command
  --posix
                 disable all GNU extensions.
  -r, --regexp-extended
                 use extended regular expressions in the script.
  -s, --separate
                 consider files as separate rather than as a single
continuous
                 long stream.
  -u, --unbuffered
                 load minimal amounts of data from the input files and
flush
                 the output buffers more often
      --help     display this help and exit
      --version output version information and exit

If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret. All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.

La línea que comienza con usage es la que nos dice como se usa el comando, la forma de
leer, este tipo de líneas, quedará aclarada con un ejemplo:

    •   Los Argumentos encerrados en [] se consideran opcionales
    •   Los Argumentos encerrados en <> o {}, se consideran variables, es decir pueden existir
        cero o mas veces.
    •   El texto seguido por ..., representa una lista
    •   El operador |, representa una operación de tipo or.

El comando man

Las conocidas páginas del manual de linux, proporcionan información autosuficiente y extensa
sobre los comandos. Casi todas las utilerias, comandos y archivos de configuración mantienen
una página del manual.
Las páginas del manual, están organizadas en capítulos, donde cada capítulo específica la
sección y tipo de información que proporciona, estos capítulos son:

    •   Sección 1 Comandos Generales
    •   Sección 2 Llamadas al sistema
    •   Sección 3 Librerías de funciones (c/Perl/c++/etc)
    •   Sección 4 Archivos especiales (normalmente los hospedados en /dev
    •   Sección 5 Archivos de configuración
    •   Sección 6 Juegos y ScreenSavers
    •   Sección 7 Miscélanea
    •   Sección 8 Comandos de administración del sistema y Demonios

Moviéndonos por las Páginas del man

En realidad los archivos de man, están creados con archivos que después son interpretados
por groff y redireccionados a nuestro $PAGER (que puede ser less o more), por lo tanto la
navegación sobre las páginas man, difiere segun el $PAGER que estemos usando, sin
embargo usualmente y a no ser que modifiquemos las características, es less, que será el
usado en este wiki.
La navegación por las paginas del manual puede hacerse mediante las flechas del teclado, o
con las teclas PageUp y PageDown.
Para buscar una frase o palabra en específico podemos usar /texto a buscar, y para movernos
a través de las coincidencias usamos n o N, segun nos movamos a la siguiente o anterior
coincidencia respectivamente.
Unas de las opciones de man mas usadas es :
man -a passwd Nos entrega todas las paginas del manual de passwd (el comando, el archivo,
etc)
man 5 passwd Nos entrega la pagina del manual de archivo passwd (recordemos que la
sección 5 es de archivos de configuración).

El comando info

El comando info es la siguiente generación de ayuda, y es usado generalmente cuando la
información de man es o muy poca, o tanta que es dificil movernos por ella.
Aunque, estaba planeado que esta utileria sustituyera a las páginas del man, en la actualidad
son complementos uno de otra, puesto que en muchos casos, la información contenida en una,
es la misma que en la otra.

Moviéndonos por las Páginas de info

El programa info tiene una interfaz navegable: muchas de las páginas tienen enlaces a otras
páginas relacionadas, muy similar a como tienen las páginas web. Los enlaces se indican
mediante un asterisco (*) seguido por el título del enlace, seguido por un doble dos puntos (::).
Para seguir los enlaces, hay que situar el cursor sobre ellos y pulsar la tecla . Asímismo existen
diferentes teclas para el movimiento sobre estas páginas:

    •   La tecla de tabulador, nos mueve por entre los diferentes links
    •   La navegación básica puede ser con las flechas o las teclas PageUp o PageDown
    •   n/p/u Nos manda a la siguiente, anterior pagina, o nos sube un nodo, respectivamente
        hablando.
    •   s texto a buscar Busca por el texto especificado, sino especificamos un texto busca la
        siguiente coincidencia del último texto buscado.
    •   q salimos de las paginas info.

Otras Opciones de Ayuda

Finalmente podemos navegar en nuestro sistema de archivos hasta /usr/share/doc y buscar
mas información como, changelogs, readmes especifícos de distribución, archivos de ejemplo,
etc, de la aplicación y/o utilería que estemos estudiando.
Por último, en caso de no encontrar lo que necesitamos podemos hacer uso de los grandes
foros como EsDebian y páginas de búsqueda donde seguramente encontraremos lo que
necesitamos.
Lista de comandos de GNU/Linux (I)
Recopilación de comandos Debian GNU/Linux

Índice:
1. Prólogo




2. Trabajo con ficheros
2.1. Varios
2.2. Imprimiendo
2.3. Nano
2.4. Formatos
2.5. Compresión
2.6. Comodines
2.7. Alias
2.8. Entrada/Salida
2.9. Renombrado
2.10. Mtools
3. Gráficos
4. Multimedia
4.1. Imágenes
4.2. Grabación de CDs
4.3. Grabación de DVDs
4.4. Ripeo de CD-AUDIO
4.5. Conversiones
4.6. Otros
4.7. Reproducción
5. Sistema
5.1. Varios
5.2. Memoria y procesos
5.3. Disco duro
5.4. Entorno
5.5. Instalación de software
6. Recuperación del sistema
6.1. Usando Knoppix live
6.2. Disquete de arranque
6.3. Copiando el MBS
6.4. Copiando el VBS
7. Kernel,logs,hardware...




8. Redes
9. Otros
9.1. Mldonkey
9.2. Mutella
9.3. FTP
9.4. IRC
9.5. Calculadora
9.6. Promps




PRÓLOGO

Los datos están cogidos de los artículos:

http://www.esdebian.org/articulos/24063/lista-comandos-gnulinux-i
http://www.esdebian.org/articulos/24062/lista-comandos-gnulinux-ii
http://www.esdebian.org/articulos/24070/lista-comandos-gnulinux-iii




TRABAJO CON FICHEROS




Varios



mc

Explorador de archivos que incluye su propio editor,mcedit.

mcedit

Editor de texto incluído en mc.

ls

Lista los ficheros de un directorio concreto.
1.       ls -l


         Lista también las propiedades y atributos.

    2.       ls -la


         Lista ficheros incluidos los ocultos de sistema.

    3.       ls -la | more


         Lista los ficheros de un directorio de forma paginada.

    4. ls -lh

         Lista ficheros especificando la unidad de tamaño (Kilobyte, Megabyte, Gigabyte).

    5. ls -l | grep ^d

         Lista sólo los directorios

             1. ls -d */

                 Este último comando también lista solamente directorios: sin concatenar
                 comandos, de una forma más sencilla y respetando el color definido que se
                 tiene en Bash para los directorios.

cat -n fichero

Muestra el contenido de un fichero.(-n lo numera)

pr -t fichero

Muestra el contenido de un fichero de manera formateada.Ver imprimiendo.

cat fichero | less
cat fichero | lmore
more fichero
less fichero

Muestra el contenido de un fichero de forma paginada.

zcat fichero
zmore fichero
zless fichero

Muestra el contenido de un fichero comprimido (.gz)

echo cadena

echo nos muestra en pantalla,el texto que le siga.
grep 'cadena' archivo

Muestra las líneas del archivo que contienen la cadena.

stat fichero

Muestra el estado de un fichero.

    1.     stat -f fichero


         Muestra el estado del sistema de ficheros.

file fichero

Muestra de qué tipo es un fichero.

tail archivo

Muestra las últimas líneas de un archivo, 10 por defecto.

    1.     tail -n 12 archivo


         Muestra las 12 últimas líneas del archivo.

    2.     tail -f archivo


         Muestra las últimas líneas del archivo, actualizándolo a medida que se van añadiendo.
         Útil para controlar logs.

head archivo

Muestra las primeras líneas de un archivo, 10 por defecto. Admite opción -n igual que el
comando tail.

find /usr -name lilo -print

Busca todos los ficheros con nombre lilo en /usr.

find /home/paco -name *.jpg -print
     ---------- ---------- -----
          |           |         |
          V           V           `---->muestra la ruta completa del
fichero encontrado
ruta patrón de búsqueda

Busca todas las imágenes .jpg en /home/paco.

find -maxdepth 1 -regex ".*/[^./]*" -type f

Lista ficheros sin punto en el directoria actual.
whereis ejecutable

Busca ejecutables(ejemplo: whereis find)

type comando

Muestra la ubicación del comando indicado.
Si es un comando interno del shell mostrará algo así como:comando is a shell builtin.

pwd

Visualiza el directorio actual.

history

Muestra el listado de comandos usados por el usuario (~/.bash_history)

fc -l

Muestra el listado de los últimos comandos ejecutados.

eject cdrom0

Abre la bandeja del cdrom.

      1.     eject -t cdrom0


           Cierra la bandeja del cdrom.

cd nom_directorio

Cambia de directorio

      1.     cd ..


           Vuelves al anterior.

      2.     cd .mozilla


           Entras al de mozilla.(por la puerta grande)

      3.     cd ./.mozilla


           Entras al de mozilla (indicando la ruta relativa)

      4.     cd /home/paco/.mozilla


           Entras al de mozilla.(indicando la ruta completa)
cp -dpR fichero1 ruta_fichero2

Realiza una copia del fichero1 a ruta_fichero2,cambiándole el nombre.

cp -dpR fichero1 /directorio

Copia fichero1 a directorio,conservando fichero1 el nombre.

    1.     -R


         Copia un directorio recursivamente,salvo los ficheros especiales.

    2.     -p


         Copia preservando permisos,propietario,grupos y fechas.

    3.     -d


         Conserva los enlaces simbólicos como tales y preserva las relaciones de los duros.

    4.     -a


         Lo mismo que -dpR .

mv ruta_fichero1 ruta_fichero2

Mueve y/o renombra ficheros o directorios.

mkdir nom_directorio

Crea un directorio.

rmdir nom_directorio

Elimina un directorio(tiene que estar vacío).

rm archivo

Elimina archivos .

    1.     rm -r directorio


         Borra los ficheros de un directorio recursivamente.Quietorrrrrrr...

    2.     rm *.jpg


         Borra todos los ficheros .jpg del directorio actual.
ln ruta_fichero ruta_enlace

Crea un enlace duro (con el mismo inodo,es decir mismo fichero con distintos nombres)

ln -s ruta_directorio ruta_enlace

Crea un enlace simbólico (con diferente inodo,es decir se crea un nuevo fichero que apunta al
"apuntado",permitiendo enlazar con directorios y con ficheros de otro sistema de archivos)

diff [opciones] fichero1 fichero2

Compara ficheros.

    1.     diff -w fichero1 fichero2


         Descarta espacio en blanco cuando compara líneas.

    2.     diff -q fichero1 fichero2


         Informa sólo de si los ficheros difieren,no de los detalles de las diferencias.

    3.     diff -y fichero1 fichero2


         Muestra la salida a dos columnas.

join [opciones] fichero1 fichero2

Muestra las líneas coincidentes entre fichero1 y fichero2.

wc fichero

Muestra el nº de palabras,líneas y caracteres de un archivo.

wc -c fichero

Muestra el tamaño en bytes de un fichero.

touch [-am][-t] fichero

Cambia las fechas de acceso (-a) y/o modificación (-m) de un archivo.

    1.     touch -am fichero


         A la fecha actual.Si no existiese el fichero,se crearía.

    2.     touch -am -t 0604031433.30 fich
                        AAMMDDhhmm.ss ------- Si no se especifican los
         segundos,tomaría 0 como valor.
A la fecha especificada.Si no existiese el fichero,se crearía.

    3.     touch fichero


         Usado sin opciones crearía un fichero con la fecha actual.

split -b 1445640 mozart.ogg mozart
    ----------            -------
            |                   V
    |   nombre elegido para las partes,por defecto x
            V
  tamaño en bytes de cada parte

Partir un archivo

cat mozart.* > mozart.ogg

Unir las distintas partes de un fichero cortado con split.

chown [-R] usuario fichero

Cambia el propietario de un fichero o directorio.

chgrp [-R] grupo fichero

Cambia el grupo de un fichero o directorio.

chmod [-R][ugo][+/- rwxs] fichero

Cambia los permisos de acceso de un fichero

+: da permisos -: quita permisos
u: propietario R: recursivo
g: grupo r: lectura ejemplo: chmod +x fichero, es lo mismo que: chmod
a+x fichero
o: otros w: escritura explicación: a es la opción por defecto.
a: todos x: ejecución
s: los atributos suid y sgid,otorgan a un "fichero" los permisos de
su dueño o grupo respectivamente,cada vez que se ejecute,sea quien sea
el que lo ejecute.
Ejemplo: chmod +s /usr/bin/cdrecord

Cómo afectan los permisos a los directorios:

r permite ver su contenido(no el de sus ficheros)
w permite añadir o eliminar ficheros (no modificarlos)
x permite acceder al directorio.

Método absoluto de determinar los permisos: chmod 760 fichero

explicación:                   dueño          grupo          otros
------------                   -----          -----          -----
asci                          r w x         r w -        - - -
binario                       1 1 1         1 1 0        0 0 0
octal                           7             6            0
paso de asci                  r w x         r w -        - - -      activar=1
a binario                     1 1 1         1 1 0        0 0 0     desactivar=0
paso de                       1 1 1         1 1 0        0 0 0     r activado=4
binario                       4+2+1         4+2+0        0+0+0     w activado=2
a octal                         7             6            0       x activado=1




umask nnn

Establece qué permisos serán deshabilitados para los archivos nuevos.

umask

Muestra la configuración actual de umask(normalmente 022)

umask 000

Deshabilita ninguno,es decir los activa todos.

Atención,que la cosa manda huevos:

umask   0 2   2 =   chmod   7 5 5
umask   0 0   0 =   chmod   7 7 7 |
umask   ---   -w-   -w- =   chmod rwx r-x r-x
umask   ---   ---   --- =   chmod rwx r-x r-x

Una manera rápida de averiguar los permisos partiendo de umask es aplicando la siguiente
resta:

777-022=755 para el primer caso y 777-000=777 para el segundo.
Cuando umask es 022,los permisos normales de un directorio son 755 (rwx r-x r-x) producto de
la
resta 777-022.Sin embargo los de un fichero son 644 (rw- r-- r--).Ésto es así porque se
considera que lo normal para un fichero es que no sea ejecutable de manera que la resta para
averiguar los permisos de un fichero sería 666-022=644

Si escribo en una consola umask 000 y a continuación "mkdir nuevodirectorio",éste tendrá
todos los pemisos:

rwx rwx rwx (777) pero ¿y los ficheros que creemos dentro de dicho directorio? pues éstos
tendrán los permisos :

rw- rw- rw- (666) resultado de la resta 666-000=666

¿Os aclarais?... yo tamp

Para que la máscara de permisos permanezca de una sesión a otra tienes que ponerla en el
.bash_profile de tu home.
Imprimiendo



lpr fichero

Añade un documento a la cola de impresión.

lpr -P "nombre_impresora" fichero

Se especifica la impresora a la que queremos mandar el fichero a imprimir

lpr -#3 fichero

Realiza 3 copias del fichero.

lpr -P "hp" -o page-set=odd fichero

Imprime sólo las páginas impares del fichero que hemos mandado a la impresora "hp"

lpr -o page-ranges=7-49 fichero

Imprime el intervalo de páginas 7-49 del documento

lpr fichero

Añade un documento a la cola de impresión.

lpq

Muestra los documentos en cola.

lprm

Cancela la impresión del documento activo.

lprm 3

Cancela la impresión del trabajo nº 3.

pr +2 l70 -w 80 -h "Comandos" fichero

Preprocesador de impresión para formatear un archivo de texto.

-l70

Establece la longitud de la página de 70 lineas (66 por defecto).

-w 80

Establece el ancho de linea en 80 caracteres()72 por defecto).
-h "Comandos"

Establece "Comandos" como cabecera de cada página.

+2

Imprime a partir de la página 2.

-t

No imprimiría cabeceras ni pies de página.

pr l70 -d comandos.txt | lpr

Una vez formateado el documento lo manda a la cola.




Nano



nano fichero

Leer,crear,editar un fichero de texto.

M = Esc/Alt | | Ctrl         + g ----------- Invocar el menú de ayuda.
Ctrl + x -----------         Salir de nano.
Ctrl + o -----------         Escribir el fichero actual a disco.
Ctrl + r -----------         Insertar otro fichero en el actual.
Ctrl + w -----------         Buscar un texto en el editor.
Ctrl + y -----------         Moverse a la página anterior.
Ctrl + v -----------         Moverse a la página siguiente.
Ctrl + k -----------         Cortar la línea actual y guardarla en el
cutbuffer.
Ctrl + u -----------         Pegar el cutbuffer en la línea actual.
Ctrl + l -----------         Redibujar la pantalla actual.
Ctrl + j -----------         Justificar el párrafo actual.
Ctrl + m -----------         Insertar un retorno de carro en la posición del
cursor.
Ctrl + _ -----------         Ir a un número de línea en concreto.
M + g --------------         Ir a un número de línea en concreto.
M + i --------------         Auto indentar habilitar/deshabilitar.
M + x --------------         Modo ayuda habilitar/deshabilitar.
M + p --------------         Modo Pico habilitar/deshabilitar.
M + m --------------         Soporte para ratón habilitar/deshabilitar.
M + r --------------         Reemplazar texto en el editor.
M + e --------------         Expresiones regulares habilitar/deshabilitar.
M + b --------------         Respaldar ficheros habilitar/deshabilitar.
M + s --------------         Desplazamiento suave habilitar/deshabilitar.
M + h --------------         Tecla 'smart home' habilitar/deshabilitar.
M + y -------------- Coloreado de sintaxis habilitar/deshabilitar.
M + p -------------- Mostrar blancos habilitar/deshabilitar.




Formatos



[w3m,lynx,links,links2,elinks] fichero.html

Visualizan ficheros html.

tidy fichero.html

Analiza el código de un documento html.

tidy -m fichero.html

Corrige,modificándolo,el código del fichero html.

tidy -m -asxml fichero.html

Convierte un html a xml.

tidy -m -asxhtml fichero.html

Convierte un html a xhtml.

tidy -m -ashtml fichero.xhtml

Convierte un xhtml a html.

pstotext fichero.ps | less

Visualiza ficheros ps.

pstotext fichero.pdf | less

Visualiza ficheros pdf.

pdftops fichero.pdf fichero.ps

Convierte un fichero pdf a ps.

pdftotext -layout fich.pdf fich.txt

Convierte un fichero pdf a texto.

pdftotext -layout -htmlmeta fich.pdf fich.html
Convierte un fichero pdf a html.

htmldoc fich1.html fich2.html -f unidos.html

Une varios ficheros html en uno solo.

htmldoc --webpage fich1.html fich2.html -f suma.pdf

Convierte o une varios html en un pdf.

htmldoc --webpage fich1.html fich2.html -f suma.ps

Convierte o une varios html en un ps.

links2 fichero.html -> guardar con formato

Convierte un fichero html a texto.

antiword fichero.doc | less

Visualiza un fichero doc.

antiword -p folio fichero.doc > fichero.ps

Convierte un fichero doc a ps con tamaño folio.

antiword -t -w 30 fichero.doc > fichero.txt

Convierte un fichero doc a texto.

-p también puede ser a3,a4,a5,b4,etc
-w anchura de la linea en caracteres

Notas:
pdftotext y pdftops vienen en el paquete xpdf-utils.
tidy se guía por el estándar de la W3C.
la opción -layout hace que el documento de texto conserve lo mejor posible la disposición fisica
del documento pdf:columnas,saltos de linea,etc
links2 convierte un html a texto,conservando totalmente la disposición física del documento
html.




Empaquetado y compresión



7z a fichero.7z fichero

Comprimir.

7z e fichero_comprimido
Descomprimir.

7z x fichero_comprimido -o ruta_de_destino

Extraer donde indicamos.

7z l fichero_comprimido

Ver contenido.

7z t fichero_comprimido

Chequea el contenido.

Notas sobre 7zip

Comprime en formato 7z, zip, gzip, bzip2 y tar.
Si es un directorio lo hace recursivamente sin emplear la opción -r

Con -t{tipo de fichero} tras las opción "a" elegimos el formato de compresión:

7z a -tgzip fichero.gz fichero

Con -p protegemos con una contraseña el fichero:

7z a -tgzip -p fichero.gz fichero

Para comprimir más de un archivo gz o bz2 antes hay que empaquetarlos en formato tar:
1º)

7z a -ttar prueba.tar *.txt

2º)

7z a -tgzip prueba.tgz prueba.tar

El formato 7z no guarda el dueño o grupo de un fichero por lo que | | no es recomendable para
copias de seguridad.
Es capaz de descomprimir zip,rar,gz,bz2,tar,cab,arj,cpio,deb,rpm aunque para rar necesita del
paquete 7zip-rar

zip -r fichero.zip fichero ;ejemplo: zip -r sinatra.zip ./sinatra/

Comprimir zip.

unzip archivo.zip

Descomprimir zip.

unzip -v archivo.zip

Ver contenido zip.

unrar e -r archivo.rar (e extrae en el directorio actual)
Descomprimir rar.

unrar x -r archivo.rar directorio de destino (x extrae donde se
indique)

Descomprimir rar.

unrar v archivo.rar

Ver contenido rar.

gzip -r fichero ; ejemplo: gzip -r ./sinatra

Comprimir gz.

gzip -d fichero.gz

Descomprimir gz.

gzip -c fichero.gz

Ver contenido gz.

bzip2 fichero ; ejemplo: bzip2 ./sinatra/*.ogg

Comprimir bz2.

bzip2 -d fichero.bz2

Descomprimir bz2.

bzip2 -c fichero.bz2

NOTA:
r equivale en todos los casos a recursivo

Mientras que zip comprime y empaqueta,gzip ó bzip2 sólo comprimen ficheros,no
directorios,para eso existe tar.
Ficheros tar

tar -vcf archivo.tar /fichero1 /fichero2 ...(fichero puede ser
directorio)

Empaquetar.

tar -vxf archivo.tar

Desempaquetar.

tar -vtf archivo.tar

Ver contenido.
Para comprimir varios ficheros y empaquetarlos en un solo archivo hay que combinar el tar y el
gzip o el bzip2 de la siguiente manera:

Ficheros tar.gz (tgz)

tar -zvcf archivo.tgz directorio

Empaquetar y comprimir.

tar -zvxf archivo.tgz

Desempaquetar y descomprimir.

tar -zvtf archivo.tgz

Ver contenido.

Ficheros tar.bz2 (tbz2)

tar -jvcf archivo.tbz2 directorio

Empaquetar y comprimir.

tar -jvxf archivo.tbz2

Desempaquetar y descomprimir.

tar -jvtf archivo.tbz2

Ver contenido.

Opciones de tar:

-c : crea un nuevo archivo.
-f : cuando se usa con la opción -c,usa el nombre del fichero
especificado para la creación del fichero tar
cuando se usa con la opción -x,retira del archivo el fichero
especificado.
-t : muestra la lista de los ficheros que se encuentran en el fichero
tar
-v : muestra el proceso de archivo de los ficheros.
-x : extrae los ficheros de un archivo.
-z : comprime el fichero tar con gzip.
-j : comprime el fichero tar con bzip2.




Comodines



(~) Sustituye el directorio home de manera que:
~/comandos.txt equivale a /home/paco/comandos.txt (si estamos en nuestro propio directorio)
~pepe/comandos.txt equivale a /home/pepe/comandos.txt (pepe es otro usuario)

(?) Sustituye un solo caracter.Ejemplos:

ls p?pe

mostraría todos los ficheros cuyos 1º 3º y 4º caracteres fuesen p,p y e

ls ?epe

mostraría todos los ficheros de 4 caracteres y acabados en epe

(*) Sustituye cualquier sucesión de caracteres.Ejemplos:

ls .ba*

muestra todos los directorios o ficheros que comiencen con .ba

ls .*

muestra todos los archivos ocultos.

rm -r *

otra manera de desinstalar el sistema operativo.

rm *.jpg

borra todas las imágenes jpg

oggdec *.ogg

pasa de ogg a wav todos los ogg del directorio en el que estamos.

(;) Puesto entre dos comandos hace que tras el primero se ejecute el segundo.Ejemplos:

nano nuevo.txt ; cat nuevo.txt

nos abrirá el editor nano para que escribamos lo que queramos en un nuevo archivo que se
llamará nuevo.txt y tras guardar y salir del editor,cat nos mostrará el contenido de lo que
acabamos de crear.

sleep 5m ; xmms canción.mp3

tras 5 minutos se iniciará el xmms (ver más abajo)




Alias
Es el mote que se le pone a un comando,de manera que la próxima vez que queramos
ejecutarlo
basta con llamarlo por su mote.Escribiendo alias sin parámetos nos aparecen la lista de alias
que tenemos.

Ejemplos:

      •   Si ejecuto:

          alias rm='mv --target-directory=/home/paco/.papelera_rm'

          le he puesto el mote rm a mv --target-directory=/home/paco/.papelera_rm
          Así la próxima vez que borre algo con rm, irá a parar al directorio .papelera_rm

          Pero si lo escribo así: rm loquesea el alias será ignorado.

      •   Otro:

          alias cdrip='cdda2wav -B -D /dev/hdd -s -x'

          cada vez que escriba en una consola cdrip me ripeará el CD que tenga en /dev/hdd

          Para que los alias permanezcan de una sesión a otra hay que ponerlos en el archivo
          /home/.bashrc

          nota1:el mote y el comando al que sustituye bien pegaditos al signo igual.
          nota2:el comando entre comillas simples.




Conceptos de entrada -salida (I/O)(E/S)



stdin

entrada estandar para datos,el teclado (0)

stdout

salida estandar para los programas,la pantalla (1)

stderr

salida estandar para los mensajes de error,la pantalla (2)

Redirecciones,un redireccionador redirige la salida de un comando a un fichero

(<)

comando < fichero
(>)
Su sintaxix suele ser:

comando > fichero

(>>)

comando >> fichero

Ejemplos:

dpkg --get-selections > programas_instalados.txt

En vez de mostrar la salida por pantalla, nos la vuelca al fichero programas_instalados.txt

Si ese fichero ya existía ha sido sobreescrito su contenido,pero si usamos >> no borrará nada
y añadira su salida al final del fichero.Otro ejemplo con echo:

echo "fin de la lista de programas instalados" >>
programas_instalados.txt

en vez de mostrar en pantalla el texto,lo añade al final del fichero programas_instalados.txt

Para despistar los de Unix se han inventado el mismo caracter pero al revés:

cat < programas_instalados.txt

en donde programas_instalados hace,no de salida sino de entrada para cat el cual lo muestra
en pantalla ,ya que la salida natural de cat es la estandar,stdout o pantalla

Si queremos que la salida de error no aparezca en pantalla sino que vaya a un archivo de
texto:

comando 2> fichero.txt ejemplo: xmms 2> error_xmms.txt

Tuberías,Una tubería hace que la salida de un programa sea la entrada de otro.

(|) Su sintaxis suele ser:

comando | comando

Ejemplos:

cat programas_instalados.txt | grep mozilla

Aquí le hemos cambiado la salida natural a cat y se la hemos mandado a grep para que
busque la
palabra mozilla dentro del fichero programas_instalados.txt

pr l70 -d comandos.txt | lpr Una vez formateado el documento (pr) lo manda a la cola (lpr)
Renombrando



mp3rename opciones *.mp3

Renombra ficheros mp3 basándose en las etiquetas incluidas en los mp3 (id3tags)

Opciones:

-i Sólo muestra los id3 de los ficheros.
-p pone un cero al track cuando es menor que 10.
-s Se usa para configurar las opciones por defecto,las cuales
quedarian definidas en el fichero ~/.mp3rename
    &t título
    &b album
    &a artista Hay que usarlas entrecomilladas para que no sean
interpretadas por el shell
    &y año
    &k pista

Ejemplos:

    1. mp3rename -s '&a_&t'

         establecería artista_título como predeterminadas de manera que

    2. mp3rename *.mp3

         renombrará los mp3 como: "artista_título.mp3"

rename

Script de Perl que sirve para renombrar ficheros usando expresiones de Perl

rename 'y/A-Z/a-z/' *.zip

Cambiamos todas las mayúsculas a minúsculas(en este caso en el nombre de los .zip)

rename 'y/ /_/' *.jpg

Renombramos el espacio en blanco por _ (en este caso en el nombre de los .jpg)

rename 's/expresión //' *.mp3

Eliminamos una expresion en el nombre de todos los .mp3 del directorio actual.

rename 's/M.Oldfield//' *.mp3

quitaría "M.Oldfield" del nombre en todos los mp3 |

mrename 'ruta_fich.' prefijo opción
Añade un prefijo al nombre de los ficheros.

Opciones:

-c    Copia los ficheros con un nuevo nombre.
-m    Los renombra.

Ejemplo:

     1. cd/ruta a los ficheros

         debe ejecutarse en el directorio en donde se encuentren.

     2. mrename '*.jpg' boda -m

         añadiría boda a los nombres de los jpg

mmv ";*.original" "#1#2.nuevo"

Comando para cambiar el sufijo del nombre de los archivos.En su sintaxis #1 sustituye a la
primera expresión regular(;) y #2 a la segunda(*).Aunque con este comando el(;) representa
cualquier subdirectorio y es la forma de darle recursividad a la acción.

Ejemplos:

     1. mmv "*.cbz" "#1.zip"

         Renombraría todos los cbz a zip,conservandose el nombre que precede a .cbz

     2. mmv ";*.cbz" "#1#2.zip"

         Renombraría todos los cbz a zip en el directorio actual y sus subdirectorios




Mtools



Colección de herramientas que permite acceder y manipular ficheros de MS-DOS sin
necesidad de un montaje previo. El uso de comodines refiriéndose a archivos del disquete
requiere que los nombres se entrecomillen para que no sean interpretados por el shell sino por
herramientas de mtools.Más información:"info mtools"

minfo unidad:

Muestra información sobre el sistema de archivos MS-DOS de una unidad (a:)

mformat a:

Formatea un disquete,donde "a:" es "dev/fd0"
mbadblocks a:

Se emplea tras formatear para buscar errores.

mcd [a:]

Informa del directorio MS-DOS en curso o bién cambiamos a uno.

mdir -a a:

Muestra el contenido de un directorio MS-DOS.

mcopy

Copia de ficheros MS-DOS a/o desde Unix.

mcopy "a:directorio/*"

copiaría el contenido de "a:directorio/*" al directorio en curso.

mcopy "a:directorio/*" ~/disquete

copiaría el contenido de "a:directorio/*" al directorio "disquete".

mcopy *.txt a:bill

copiaría al directorio "bill" del disquete todos los .txt.

mmd a:nuevo_directorio

Crea un directorio MS-DOS

mdel "a:bill/*.txt"

Elimina un fichero MS-DOS.

mrd a:bill

Elimina un directorio MS-DOS

mdeltree a:bill

Elimina recursivamente un directorio MS-DOS

mren "a:direct1/*.txt" a:direct2

Mueve o renombra ficheros MS-DOS

mmove a:directorio1 a:directorio2

Mueve o renombra ficheros o subdirectorios MS-DOS

Comandos relacionados:
mkfs.msdos /dev/fd0

Formatea en formato msdos un disquete.

fdformat /dev/fd0

Formatea en formato msdos un disquete y después verifica el formateo.




GRÁFICOS



glxinfo

Información sobre la biblioteca gráfica OpenGL y su extensión GLX para X-Window
direct rendering: YES = Salida de glxinfo que nos indica si tenemos activada la aceleración 3D.

showrgb

lista los colores reconocidos por el sistema y su valor RGB.

bsdgames

Colección de juegos para consola.

sl

Tren pasando.

apt-get moo

La supervaca del apt ----------->

cowsay muuuuu

Una vaca hablando en su idioma

cowthink -p ¿¿muuuuu??

Una vaca pensando. *

cowsay -f tux hola

Tux saludando.Ver /usr/share/cowsay/cows.

         (__)
         (oo)
/------ /
/ | ||
/---/

banner [texto]

Muestra un cartel en pantalla.

figlet [opciones] [texto]

Derivado del anterior pero más versatil.También se puede usar de forma interactiva.

-w valor ------------------------- Indicamos la anchura del texto,el
valor por defecto es 80
-t ------------------------------- La salida se mostrará en su máxima
anchura.
-c ------------------------------- La salida se mostrará centrada.
-f tipo -------------------------- Indicamos la tipografía de la
salida.Ver /usr/share/figlet/fichero.flf
small,shadow,mini,etc. Podemos indicar la ruta donde buscará las
fuentes: figlet -f ~/fuentes/konto

Ejemplo: #figlet -f small texto
  _           _
| |_ _____ _| |_ ___
| _/ -_)  / _/ _ 
  _____/_______/

xwd -root -screen > pantalla.xwd

Capturar la pantalla.

sleep 5 ; xwd -root -screen > pantalla.xwd

Capturar la pantallas tras 5 segundos.

xwd > ventana.xwd

Capturar una ventana.

import -window root pantalla.ps (también jpg,png,gif,etc)

Capturar la pantalla en cualquier formato.

sleep 5s ; import -window root pantalla.png

Capturar la pantalla tras 5 segundos.

import -window - ventana.jpg

Capturar una ventana en cualquier formato.

xwud -in pantalla.xwd

Ver imágenes en formato xwd.
display imagen.xwd

Visualizar imágenes (incluídas las xwd).

animate remero.gif (también admite delay)

Visualizar gif animados.

ascii/color
cacaview imagen.jpg (también png,gif,etc)

ascii
asciiview imagen.jpg (también png,gif,etc)

Visualizar imágenes en consola.

identify imagen.gif

Ver las propiedades de una imagen.

pdfimages fichero.pdf nombre_para_las_imágenes: pdfimages Xmen.pdf
xmen

Extraer las imágenes de un pdf

convert fichero.pdf nombre_y_formato_imágenes:convert fichero.pdf
imagen.png

Extraer las imágenes de un pdf

convert *.jpg catálogo.pdf

Crear un catálogo pdf con imágenes.

display "vid:*.jpg"

Crear un índice gráfico con miniaturas.

convert imágen_color.jpg -monochrome imágen_b/n.jpg

Convertir una imagen a blanco y negro.

convert imagen_original.ppm imagen_nueva.jpg

Cambiar el formato de UNA imagen.

convert -sample 100x50 imagen_original.jpg imagen_nueva.jpg

Cambiar las dimensiones de UNA imagen.

mogrify -format jpg *.ppm (convierte a .jpg todas las imágenes .ppm)

Cambiar el formato de VARIAS imágenes.
mogrify -format png -sample 20%x20% *.jpg

Crear miniaturas de VARIAS imágenes.
Miniaturiza nuestras imágenes jpg cambiándoles el formato.

ATENCIÓN porque de no cambiárselo nos eliminaría las originales

convert -delay 15 imag1.jpg imag2.jpg imag3.jpg remero.gif

Crear un gif animado con varios jpg.

-delay 15

Pausa entre imágenes (centésimas de segundo).

convert remero.gif -adjoin remeros.jpg

Extraer los fotogramas de un gif animado.

Añadir texto a una imagen :
                                                                      columna_         _fil
a
                                                                |   |
convert -font courier -fill yellow -pointsize 25 -draw 'text 100,250
remeros' imagen.jpg imagen_con_txt.jpg
         -----          -----        ------------ ------------------
-------
           |              |               |        posición del
texto    |
   V             V                 V                              v
         fuente    color de fuente tamaño de la
fuente                 |texto

|si éste tuviese más de una palabra

|habría que ponerlo entre dobles comillas

Notas:

xwd viene en el paquete xbase-clients.
pdfimages viene en el paquete xpdf-utils.
las cacas viene en el paquete caca-utils.
asciiview viene en el paquete aview
aafire viene en el paquete libaa-bin
convert,animate,identify,mogrify import y display vienen en el paquete imagemagick
libaa es una libreria que nos permite ver las imágenes,incluso las animadas,mediante
caracteres ascii.
libcaca permite lo mismo que libaa pero en color-




MULTIMEDIA
Adaptado para un kernel 2.4.26 con emulación SCSI con la nomenclatura :

#cdrecord -scanbus:

0,0,0 0) '_NEC ' 'DVD_RW ND-2500A '                     grabadora         /dev/sr0
0,1,0 1) 'HL-DT-ST' 'DVD-ROM GDR8162B'                  lector            /dev/sr1

Nota:

Salvo cdrecord y dvdrecord los demás se pueden usar en un kernel sin emulación SCSI.
Para usar cdrecord y dvdrecord con un kernel 2.6 ,sin emulación SCSI, podemos probar a
realizar un scanbus sobre nuestro dispositivo grabador para ver si lo detecta:

# cdrecord -scanbus dev=/dev/hdc

en cuyo caso lo podremos usar sin más,sustituyendo la nomenclatura propia de cdrecord
dev=0,0,0 por dev=/dev/hdc (ver nota 1 más abajo)




Imágenes



mkisofs -R -J -T -o imagen1.iso fichero1

Crea una imagen de un fichero del disco duro.

dd if=/dev/cdrom of=imagen.iso

Crea una imagen del cdrom y la vuelca en el fichero imagen.iso

cat /dev/cdrom > debian.iso

nrg2iso imagen.nrg imagen.iso

Convierte una imagen nrg a iso

bin2iso imagen.cue

Convierte una imagen bin/cue a iso

ccd2iso imagen.img imagen.iso

Convierte una imagen img/ccd/sub/cue a iso

mdf2iso imagen.mdf imagen.iso

Convierte una imagen mdf/mds a iso
mount -t iso9660 -o loop imagen.iso p.montaje

Monta una imagen.

umount p.montaje

Desmontar una imagen.

md5sum archivo.iso > archivo.iso.txt

Generar la suma control MD5 de un archivo.

md5sum -w -c archivo.iso.txt

Verificar la suma control MD5 de un archivo.
archivo.iso y archivo.iso.txt deben estar en el mismo directorio.




Grabación de CD



cdrecord -v dev=0,0,0 fs=16M speed=30 imagen.iso

Grabar un CD de datos/imagen

cdrecord -v dev=0,0,0 fs=16M speed=30 -eject -isosize /dev/sr1

Copiar un CD de datos/imagen.

wodim -v dev=/dev/cdrw isoimage.iso

Copiar una imagen de disco a CD. La ruta puede variar según el caso. e recomienda migrar
desde cdrecord a su fork, wodim.

cdrecord -v dev=0,0,0 fs=16M speed=30 -pad -audio *.wav

Grabar un CD de audio (cda)

cdrdao copy -v 2 --device 0,0,0 --source-device 0,1,0 --reload 
--eject --on-the-fly --fast-toc --paranoia-mode 0

Copiar un CD audio (cda)

cdrecord -v dev=0,0,0 fs=16M speed=30 -pad -audio *.wav -data
imagen.iso

Grabar CD mixto.
1ª sesión                         cdrecord -multi imagen1.iso (ver nota 1)
dónde acabó la sesión             cdrecord -msinfo nos da un nº que usaremos
en el siguiente paso.
creamos nueva imagen              mkisofs -R -J -T -C nº -M /dev/sr0 -o
imagen2.iso fichero2
2ª sesión                         cdrecord -multi imagen2.iso

Grabar CD multisesión

cdrecord -v blank=fast (ver cdrecord blank=help)

Borrar un CD±RW.

cdrecord -v -eject speed=8 blank=all dev=1,1,0

Borrar un CD±RW por completo, y no sólo la tabla de particiones (tardará más que en el caso
anterior). Le pedimos que nos muestre los detalles con -v (por ejemplo, el progreso del
borrado) y con -eject indicamos que el CD será expulsado al finalizar el proceso

wodim -v dev=/dev/cdrw -blank=all

Borrar un CDRW por completo.




Grabación de DVD



growisofs -Z /dev/sr0 -R -J archivo (growisofs llama a mkisofs)

Grabar un DVD de datos/imagen.

growisofs -M /dev/sr0 -R -J archivo (-M añade más datos al dvd)

Grabar DVD multisesión.

growisofs -dvd-compat -Z /dev/sr0=imagen.iso

Grabar una imagen ya creada.

dvdrecord -v dev=0,0,0 blank=fast (ver dvdrecord blank=help)

Borrar un DVD±RW.

dvdbackup -M -i/dev/sr0 -o/home/paco/copia_dvd/
vobcopy -i /dev/sr0 -m -o /home/paco/copia_dvd/

Ripear un video DVD.
Notas:
1.Se pueden establecer valores predeterminados para dev,el dispositivo de grabación;
fs,el tamaño del bufer(nunca menor que el de la grabadora) y speed,la velocidad de
grabación,indicándolo en el fichero /etc/default/cdrecord y simplificando de esta
manera la sintaxis.
2.growisofs viene en el paquete dvd+rw-tools.
3.dvdrecord viene en el paquete dvdrtools.




Ripeo de un CD



cdda2wav -B -H -D /dev/sr1 -s -x

extrae disco completo en archivos wav separados.

cdda2wav -H -D /dev/sr1 -s -x -t 5

extrae el track nº 5

cdparanoia -B -d /dev/sr1

extrae disco completo en archivos wav separados.

cdparanoia 5 -d /dev/sr1

extrae el track nº 5

cdparanoia -- "1-"

extrae el disco completo desde el track nº 1 en un solo archivo wav

abcde -d /dev/sr1 -N -x -o mp3

extrae disco completo en archivos mp3 separados.

abcde -d /dev/sr1 -N -x -o mpc

extrae disco completo en archivos mpc separados.

abcde -d /dev/sr1 -N -x -o ogg

extrae disco completo en archivos ogg separados.

abcde -d /dev/sr1 -N -x -o ogg tracks 1-3 5

extrae las tres primeras canciones y la quinta.

-d indica el dispositivo
-N actua con las opciones por defecto,sin preguntar
-x expulsa el cd al acabar
-o tipo de archivo resultante

abcde -1 -M -o flac

extrae el CD en un solo archivo flac con su correspondiente cuesheet

Nota:
abcde conserva los id3 de los temas al pasarlos al disco duro,es decir artista,título,etc.Requiere
de oggenc,lame,cdparanoia o cdda2wav,id3v2 y cd-discid y opcionalmente normalize.




Conversiones



lame -h -m j tema.wav

Pasar de wav a mp3 (-b bitrate -h mayor calidad; -m j join stereo)

lame -h -m j --nogap *.wav

Pasar lote de wav a mp3

oggenc -b 128 -q 5 tema.wav              (-b bitrate ;-q calidad (valores entre 0
y 10)
oggenc *.wav                             (convierte todos los wav en un solo
fichero ogg)
oggenc -a -l -t *.wav                    (convierte todos los wav en sus
respectivos ogg)

Pasar de wav a ogg

oggdec tema.ogg

Pasar de ogg a wav (oggdec *.ogg para convertir un lote)

lame -h --decode tema.mp3 tema.wav

Pasar de mp3 a wav

mplayer -ao pcm fichero.asf

Pasar de asf/wma a wav




Otros
soxmix tema1.ogg tema2.ogg mezcla.ogg (también mp3,wav,au,etc)

Unir varios ficheros de audio.

normalize-audio *.wav
normalize-mp3 *.mp3
normalize-ogg *.ogg

Ajustar el volumen de uno o varios ficheros de audio.

Nota:

oggdec y oggenc vienen en el paquete vorbis-tools
Las conversiones entre formatos comprimidos las he descartado pues hay una pérdida notoria
de calidad.




Reproducción



aafire

Fuego animado.

cacafire

Fuego animado a color.

cacademo

Demostración de arte ascii a color.

cacaball
cacamoin
cacaplas

Variados gráficos animados a color.

bb

Impresionante demostración audiovisual de arte ascii.

aatv

Programa para ver la tele mediante código ascii.

xaos -driver aa
Indicamos a xaos que use las librerias aalib para visualizar fractales.

aaxine video.wmv
mplayer -vo aa video.avi                           (en ascii)
mplayer -vo caca video.mpg                         (en ascii con color)
mplayer video.avi                                  (también mpg,wmv,etc)
mplayer -vcd 1                                     (para ver un vcd)
mplayer -dvd-device /dev/hdd dvd://1               (para ver un dvd)

Ver vídeo en consola.

play tema.ogg                 (digital)
mocp                          (digital con
ncurses)
tcd                           (cd con ncurses)
cdplay -d /dev/hdd            (cd)

Escuchar audio.

mplayer -cache 100
mms://...                                              (protocolo mms)
mplayer -cache 100 -playlist
http://ruta_del_archivo.asx                  (protocolo mms)
mlayer http://... ;ejemplo:mplayer
http://147.156.27.128:8004             (shoutcast-icecast)
somaplayer http://... ;ejemplo:somaplayer
http://147.156.27.128:8004      (shoutcast-icecast)

Ecuchar la radio.

mimms -t 20 -o radio3_uned.asf mms://...                                  mms (asf/wma)
-t tiempo de grabación en mnts.
-o nombre que queremos para la grabación.

streamripper http://... -l
3600                       shoutcast(mp3/ogg)
-l tiempo de grabación en sgs.

Grabar emisiones.

Cómo conseguir la dirección mms:
Una vez en la web de la radio que nos gusta,por ejemplo radio3,nos vamos al enlace que nos
indican para el comienzo del streaming y copiamos su ruta o bién nos bajamos dicho
enlace,que es un fichero asx que contiene las direcciones mms,lo abrimos con un editor de
texto y las buscamos.
Pero si el enlace es código javascript al aparecer la ventana emergente, miramos su código
fuente y buscamos (Ctrl+f) por asx o mms y ahí estarán.

Cómo conseguir direcciones shoutcast-icecast:
aquí: http://www.shoutcast.com/ y aquí: http://www.icecast.org

Notas:

Con -vo le indicamos al mplayer el driver de salida de video,en este caso aa o caca para verlo
en ascii.
Con "mplayer -vo help" podemos ver los drivers de salida de video disponibles.
Si tenemos un enlace de nuestro dispositivo a /dev/dvd, podemos simplificar la sintaxises,ya
que es el sitio por defecto en el que mira el mplayer.
aaxine viene en el paquete xine-ui de sid y lee los mismos formatos de video que xine.
play y soxmix vienen en el paquete sox.
cdplay viene en el paquete cdtool.
mocp viene en el paquete moc.
somaplayer y mplayer pueden igualmente reproducir audio digital y audio cd.




SISTEMA




Varios



man comando
man --help
info comando
xman

Muestra información sobre el comando.

help comando

Muestra información sobre un comando interno del shell(bash).

apropos palabra_clave

Busca dentro de las descripciones de man la palabra clave.

apropos -e palabra_clave

Busca la palabra exacta.

finger

Muestra los usuarios conectados en tiempo real al sistema. Necesita instalarse como paquete
aparte (finger).

last

Muestra los últimos usuarios que se conectaron al sistema y las fechas y horas de conexión
(Útil para analizar intrusiones)
cal -my

Muestra el calendario.

uptime

Muestra la hora,tiempo de funcionamiento,nº usuarios conectados y la carga media.

tzconfig/tzselect

Programas interactivos que permiten selecionar la zona horaria.

grep UTC /etc/default/rcS

Comprobamos si el reloj hardware mantiene la hora local o universal (UTC)

date

Muestra la fecha y hora del sistema,en formato local.

date -u

Muestra la fecha y hora en formato UTC(Tiempo Universal Coordinado).

hwclock --show

Muestra el reloj harware (también llamado reloj de la BIOS y reloj CMOS).

hwclock -systohc

Pone el reloj harware a la hora del sistema.

ntpdate servidor NTP

Ajusta directamente la hora del sistema sincronizándola con la de un servidor NTP.

ntpd

Demonio que ajusta el reloj de forma gradual sincronizándolo con servidores NTP.

          ‹ Como obtener Ayuda en GNU/LinuxarribaLista de comandos de GNU/Linux




   Lista de comandos de GNU/Linux (II)
$ watch -n tiempo comando
Ejecuta un comando cada x segundos (2 por defecto).
$ watch -n 1 date
Igual que date pero en este caso veríamos correr los segundos.


$ clear
Limpia la pantalla.


$ reset
Restaura la Consola.Útil para cuando empiezan a aparecer caracteres raros.


$ uname -a
Versión del kernel


$ hostname
Visualiza el nombre de la máquina.


$ tty
Muestra el nombre de fichero de la terminal conectada a la salida estándar.


# /etc/init.d/servicio stop
Para un servicio/demonio


# /etc/init.d/servicio start
Inicia un servicio/demonio.


# /etc/init.d/servicio restart
Reinicia un servicio/demonio.


$ startx
Arranca el entorno gráfico con el gestor especificado en el .initrc de tu home.


$ startx /usr/bin/X11/icewm
Arranca el entorno gráfico con el icewm (si es que no fuera el predeterminado)


$ Ctrl+C
Termina un proceso.


$ Ctrl+Z
Suspende temporalmente la ejecución de un programa.


$ Ctrl+S
Para la transferencia de datos a la terminal.
$ Ctrl+Q
Resume,reinicia la tranferencia de datos


$ Ctrl+R
Entra en modo de busqueda incremental de linea de comandos, ej: Si entras en el modo y
escribis "ls" (sin comillas) te completará la entrada más reciente que empiece por "ls", para ir
rotando por la entradas antereriores seguir presionando Ctrl+R, para terminar presionar alguna
flecha.


$ Ctrl+L
Limpia la pantalla.


$ Ctrl+O
Ejecuta un comando (como si se hubiera presionado ENTER) pero vuelve y deja el comando
escrito en el prompt.


$ Ctrl+K
Borra desde donde está el cursor hasta el final.


$ Ctrl+W
Borra desde donde está el cursor hasta el inicio de la palabra debajo de èl.


$ Ctrl+E
Salta al final de lo que se esté escribiendo.


$ Ctrl+Alt+F2
Salir del entorno gráfico a un terminal.(Fnº según gettys activados en /etc/inittab)


$ Ctrl+Alt+Supr
Estando en una terminal reinicia (si no se indica otra cosa en /etc/inittab)


$ ./script
Ejecuta un script de shell.


$ java -jar fichero.jar
Ejecuta un programa java.


$ consolechars -f fuente.psf.gz
Cambiar la fuente de la consola.Las fuentes se encuentran en /usr/share/consolefonts/


$ base-config
Configura el sistema base.
$ gpm
Programa que da soporte de ratón a la consola y aplicaciones que corren sobre ella.


$ reportbug
Programa en modo texto para enviar bugs a Debian


$ exit
Termina la ejecución del programa en curso.


# init 0
Apaga la máquina.


# init 6
Reinicia la máquina.


# shutdown -t1 -h now
Apaga la máquina .


# shutdown -t1 -r now
Reinicia la máquina.


$ su
Entrar a la sesión como root u otro usuario.


# su nom_usuario
Estando como root entramos como otro usuario.


$ passwd
Cambio de contraseña.


$ who -a -H
Muestra información de los usuarios conectados al sistema.


$ users
Muestra información de los usuarios conectados al sistema.


$ id
Muestra información del usuario actual,(grupos a los que pertenece,uid,gid)


$ groups
Muestra los grupos a los que pertenece un usuario.
# adduser usuario
Crea un nuevo usuario.


# adduser usuario grupo
Añade un usuario existente a un grupo ya existente.


# adduser --no-create-home usuario
Crea un usuario pero sin directorio personal(home).


# addgroup grupo
Crea un nuevo grupo.


# deluser usuario
Elimina un usuario.


# deluser usuario grupo
Elimina un usuario del grupo especificado.


# deluser --remove-home usuario
Elimina un usuario y su directorio home.


# delgroup grupo
Elimina un grupo.


# delgroup grupo --only-if-empty
Elimina un grupo sólo si no tiene ningún usuario.


# usermod -l nuevo_login
Cambia el nombre del usuario. Sería bueno combinarlo con -d


# usermod -d nueva_home -m login
Cambia el home al usuario,creándolo si no existiese y transfiriendo el contenido.


# usermod -e 2006-04-14 login
Fecha en que la cuenta del usuario será desactivada,expresada en formato AAAA-MM-DD


# groupmod -n nuevo_nombre grupo
Cambia el nombre de un grupo.

Usando el gestor de arranque (NTloader) de windows:

Se copian los sectores de arranque de las particiones al archivo debian_sarge.lnx:

# dd if=/dev/hda2 of=/debian_sarge.lnx bs=512 count=1 (tenemos sarge
en hda2 con lilo o grup)
# dd if=/dev/hda5 of=/debian_etch.lnx bs=512 count=1 (tenemos etch en
hda5 con lilo o grup)

los archivos debian*.lnx se copian en la partición raiz de windows y al archivo boot.ini de
windows,oculto y de sólo lectura,le agregamos las siguientes lineas dentro de su sección
[operating systems]:

C:debian_sarge.lnx="Debian Sarge"
C:debian_etch.lnx="Debian Etch"

Atención:
cada vez que modifiquemos los sectores de inicio o gestores de
arranque de las particiones linux habrá que volver a realizar lo
anterior ya que los ficheros .lnx habrán quedado
desactualizados.

5.b. Procesos y memoria

Memtest86+

Realiza una comprobación del estado de la memoria si optamos a ello desde los gestores de
arranque, para lo cual necesitamos editarlos añadiendoles su ruta.

En lilo.conf:


image = /boot/memtest86+.bin
label = memtest86+


En menu.lst:


title memtest86+
root   (hd0,0)
kernel /boot/memtest86+.bin


suponiendo que /boot esté en la partición raiz (/)


# make-memtest86+-boot-floppy
Crea un disquete de arranque desde el que se ejecutará memtest86+


$ free -m -s 3
Muestra el uso de memoria.


$ ps aux
Muestra información de los procesos en curso.


$ top
Muestra información de los procesos en curso.(tecla z colorea los activos)


$ pstree
Muestra los procesos en curso en árbol.
$ pidof comando
Busca el ID de un programa que se está ejecutando.


$ killall proceso
Para un proceso.


$ strace comando
Muestra las llamadas al sistema originadas por un proceso.


$ fuser -v archivo
Muestra los procesos que están usando un fichero o directorio.


$ lsof | less
Lista los ficheros abiertos por los procesos, en realidad descriptores de ficheros


$ lsof -c comando
Lista los ficheros abiertos por un proceso.


$ lsof +D /home/paco
Lista los procesos que están usando mi directorio.


$ lsof -i :60627
Muestra que proceso se encuentra detrás del puerto 60627 (aunque esté a la escucha)


$ nohup comando &
Lanza un proceso de forma que si cerramos el shell,el proceso continúa ejecutandose


$ comando &
Ejecuta un comando en segundo plano(background),permitiendonos seguir usando el promp.


$ jobs
Lista los procesos en segundo plano identificándolos con un nº de tarea.


$ fg nº
Pasa a primer plano (foreground)un proceso


$ bg
Pasa a background un proceso que hemos suspendido temporalmente tecleando Ctrl-z


$ nice -n prioridad comando
Ejecuta un comando con una prioridad determinada(0 por defecto).

Ejemplo:
$ nice -n -10 cdrecord
esos valores,de mayor a menor, son -20...+20, sólo root puede establecer valores negativos.


$ renice prioridad PID_del_proceso
Cambia la prioridad de un proceso en marcha


$ sleep 5 comando
Retarda 5 segundos la ejecución de un comando, m para minutos y h para horas.


$ at [-f script] [tiempo]
Ejecutar un script a una hora y/o fecha.

Ejemplo

$ at -f script 15:23

formas de indicar el tiempo:

$ at -f script 15:23
hoy a las 15:23


$ at -f script 15:23 01.23.06
El 01.23.06 a las 15:23


$ at -f script now + 23 minutes
Dentro de 23 minutos, puede ser minutes, hours, days, weeks


$ at [tiempo]
Ésta forma nos abre un promp interactivo.
Ejemplo:

$ at 15:00
Abre el promp de at

$ at > comando
Ingresamos el comando/os.

$ ctrl+d
Salimos de at


$ atq
Muestra,numeradas,la lista de tareas programadas.


$ atrm nº
Eliminará una tarea identificada por su nº.


$ batch
Se emplea de las mismas formas que at,solo que en este caso, el script o comando se
ejecutará sólo si la media de carga de la CPU es inferior al 80%.
5.c.-Disco duro

Nomenclatura de dispositivos


 -------------------------------------------------------
| Nomenclatura de discos en linux|    IDE    |   SCSI    |
| -------------------------------|-----------|----------|
| Disco maestro del primer bus | /dev/hda | /dev/sda |
| Disco esclavo del primer bus | /dev/hdb | /dev/sdb |
| Disco maestro del segundo bus | /dev/hdc | /dev/sdc |
| Disco esclavo del segundo bus | /dev/hdd | /dev/sdd |
-------------------------------------------------------



Designacion de particiones


    ----------------------------------------
|    disco /dev/hda |primarias | lógicas     |
|    ----------------|----------|-----------|
|    1ª partición    |/dev/hda1 | /dev/hda5 |
|    2ª partición    |/dev/hda2 | /dev/hda6 |
|    3ª partición    |/dev/hda3 | /dev/hda7 |
|    4ª partición    |/dev/hda4 | /dev/hda8 |
    ----------------------------------------




$ du -h fichero
Muestra espacio ocupado en disco,del directorio en curso si no indicamos nada.


$ tree -a -s -L 2
tree es un programa que muestra lo mismo que du en forma de árbol.


$ df
Muestra información sobre particiones montadas, con la opcion -h se muestra en formato
Human Readable (e.g. KB, MB, GB).


# cfdisk
Muestra información sobre particiones.Herramienta para particionar en ncurses.


# fdisk -l
Muestra información sobre particiones.Herramienta para particionar.


# mount
Vemos el listado de dispositivos montados.


# mount punto_montaje
Monta un dispositivo.(ya establecido en el fstab)


# umount punto_montaje
Desmonta un dispositivo.(ya establecido en el fstab)
# mount -t sistema_archivo dispositivo punto_montaje

Monta un dispositivo. Ejemplo:

# mount -t ext3 /dev/hda2 /mnt
Donde se monta la segunda partición primaria del dispositivo /dev/hda, la cual es de tipo ext3,
en el directorio /mnt


# umount /dev/hda2
Desmonta un dispositivo


# fsck /dev/hdax
Chequea y repara el sistema de archivos de una partición NO MONTADA.


# fsck.ext2 -vpf /dev/hdx
Chequea y repara el sistema de archivos de una partición ext2 NO MONTADA.


# fsck.ext3 -vpf /dev/hdx
Chequea y repara el sistema de archivos de una partición ext3 NO MONTADA.


# mkfs.ext2 /dev/hdb1
Crea un sistema de ficheros Linux ext2 en la primera partición del segundo disco duro.


# mkfs.ext3 /dev/hdb1
Crea un sistema de ficheros Linux ext3 en la primera partición del segundo disco duro.


# mkfs.ext3 /dev/fd0
Crea un sistema de ficheros Linux ext3 en el floppy.


# mkswap /dev/hda2
Crea un sistema de ficheros Linux swap (intercambio) en hda2.


# resize2fs -f /dev/hda2
Reajusta el tamaño del sistema de ficheros después de haber ampliado/reducido la
partición/volumen


# tune2fs -O ^has_journal /dev/hda2
Convierte hda2 de ext3 a ext2


# tune2fs -j /dev/hda2
Convierte hda2 de ext2 a ext3


# tune2fs -C 255 /dev/hda1
Fuerza a que se revise /dev/hda1 en el próximo reinicio (con fsck).
Útil para revisar la partición raíz, que no se puede desmontar.
# quota
Programa que gestiona/limita el uso que hacen del disco los usuarios/grupos.

5.d.-Entorno


$ locale
Muestra la zona geográfica configurada.


# dpkg-reconfigure locales
Reconfigura los locales.


# dpkg-reconfigure console-data
Reconfigura el teclado.


$ loadkeys ruta_mapa_teclado.gz
Carga el mapa de teclado que le indicamos,que estará en:/usr/share/keymaps


$ locale charmap
Muestra el código de caracteres en uso.


$ set
Muestra las variables locales definidas


$ env
Muestra las variables de entorno definidas.


$ export
Muestra las variables de entorno declaradas.


$ export VARIABLE=valor
Añadimos una variable.Con export EDITOR=nano establecemos nano como editor
predeterminado.


$ export VARIABLE=
Eliminamos una variable dejando en blanco su valor. Para que las variables permanezcan de
una sesión a otra hay que ponerlas en el archivo .bashrc de tu home.

5.e-Instalación de software

Dpkg

Herramienta de nivel medio para instalar, construir, borrar y gestionar los paquetes de Debian


# dpkg -i paquete
Instalación de paquetes .deb
# dpkg -r paquete
Desinstala un paquete.


# dpkg --purge paquete
Desinstala un paquete y sus archivos de configuración.


# dpkg --force -r paquete
Fuerza la desinstalación de un paquete.Más información: dpkg --force-help


# dpkg --force-all -r paquete
Fuerza aún más la desinstalación de un paquete.Su uso puede dañar el sistema.


# dpkg -c paquete
Muestra el contenido (ficheros) de un paquete.


# dpkg -L paquete
Muestra todos los ficheros que se instalaron con un paquete.


# dpkg -S fichero
Muestra a qué paquete pertenece un fichero.


# dpkg --get-selections
Muestra todos los paquetes instalados en el sistema.


# dpkg-reconfigure paquete
Reconfigura paquetes instalados.Ejemplo: dpkg-reconfigure locales

Apt

Herramienta Avanzada de Empaquetamiento (Advanced Packaging Tool)
que gestiona el sistema de paquetes de Debian instalando,desinstalando, actualizando y
configurando los mismos.

La sintaxis es:

# apt-get [opciones] acción


# apt-get update
Descarga y analiza la lista de nuevos paquetes desde los repositorios del sources.list.


# apt-get upgrade
Actualiza todos los paquetes instalados(no instala ni elimina paquetes).


# apt-get dist-upgrade
Actualiza todos los paquetes resolviendo las dependencias.
# apt-get install paquete/s
Instalación de paquetes por red,con resolución de depencias.


# apt-get -s acción
Simula,sin llevar a cabo la acción. Por ejem: apt-get -s install paquete.


# apt-get -d acción
Sólo descarga los paquetes deb en /var/cache/apt/archives/ sin instalar o desinstalar nada


# apt-get install --reinstall paquete
Reinstala un paquete.


# apt-get remove paquete/s
Desinstala un paquete.


# apt-get remove --purge paquete/s
Desinstala un paquete y sus archivos de configuración.


# apt-get clean
Elimina todos los paquetes (.deb) descargados y almacenados en /var/cache/apt/archives/

Apt-cache

Utilidad que manipula la caché de paquetes de APT en busca de información


$ apt-cache search palabra
Busca en los paquetes y en las descripciones la palabra.


$ apt-cache show paquete
Muestra la descripción completa del paquete


$ apt-cache showpkg paquete
Muestra su relación con otros paquetes.


$ apt-cache depend paquete
Muestra las dependencias del paquete


$ apt-cache rdepend paquete

Muestra las dependencias inversas del paquete(cuales dependen de él)

Apt-build

Herramienta que no se limita a instalar un paquete deb sino que compila el tarball, crea el
paquete deb y lo instala, quedando así integrado con apt. Lo que se consigue compilando es
optimizar la ejecución de los programas en nuestro procesador, de hecho al instalarse pregunta
por el tipo de procesador del sistema. Tiene las mismas opciones que apt como update,
upgrade, install

Ejemplo:

# apt-build install mplayer
Instala mplayer (el paquete del ejemplo no está escogido al azar¿?)

y alguna más como word para recompilar todo. En este último caso hay que crear una lista con
los paquetes a recompilar en /etc/apt/apt-build.list
para lo cual nos puede servir el siguiente comando:

# dpkg --get-selections awk '{if ($2 == "install") print $1}' >
/etc/apt/apt-build.list

Es aconsejable eliminar de dicha lista paquetes delicados como gcc, libc6

Aptitude

Gestor de paquetes con algunas mejoras con respecto a apt como la instalación automática de
los paquetes que sin ser dependencias forman parte de los sugeridos o recomendados y la
autodesinstalación de los paquetes instalados en su momento como dependencias de otros
(automáticamente en contraposición a manualmente),si ningún otro paquete|
los necesitase.Se puede usar de forma interactiva si no se especifica ninguna acción o desde
la linea de comandos,usando las mismas opciones y acciones de apt.La sintaxis es: aptitude
[opciones] acción ejem.: aptitude -s purge firefox


# aptitude update
Descarga y analiza la lista de nuevos paquetes según los repositorios del sources.list.


# aptitude safe-upgrade
Realiza una actualización segura (no instala ni elimina paquetes).


# aptitude full-upgrade
Realiza una actualización,instalando y eliminando paquetes si fuera preciso


# aptitude install paquete/s
Instala/actualiza paquetes


# aptitude reinstall paquete/s
Reinstala un paquete


# aptitude remove paquete/s
Elimina paquetes


# aptitude purge paquete/s
Elimina paquetes y sus ficheros de configuración
# aptitude download paquete/s
Se limita a descargar los paquetes deb al directorio en el que estamos.


# aptitude hold paquete/s
Bloquea paquetes


# aptitude unhold paquete/s
Desbloquea un paquete


# aptitude unmarkauto paquete/s
Desmarca paquetes como instalados manualmente


# aptitude markauto paquete/s
Marca paquetes como instalados manualmente (elegidos por nosotros)


$ aptitude search expresión
Busca un paquete por nombre y/o expresión


$ aptitude show paquete
Muestra información detallada de un paquete


$ aptitude clean
Elimina los ficheros .deb descargados

Opciones:

-s
Simula las acciones, pero en realidad no las realiza.


-d
Sólo descarga paquetes, no instala o desinstala nada.


-p
Siempre pide confirmación de las acciones


-y
Supone que la respuesta a preguntas simples del tipo sí/no es «sí»


-f
Trata de arreglar paquetes rotos de forma agresiva.


-V
Muestra la versión de los paquetes a instalar.
-D
Muestra las dependencias de los paquetes cambiados automáticamente.


-t rama
Establece la rama de Debian desde la que se instalan los paquetes

Deborphan

Muestra los bibliotecas (paquetes lib) huérfanas


-a
Muestra todos los paquetes huérfanos (que no dependen de ningún otro).


-d
Muestra también sus dependencias.


-n
Muestra los paquetes "sugeridos" y "recomendados" como dependencias.


# deborphan -A paquete
Ignora un paquete(buena opcion si tenemos mala memoria y queremos conservar un huérfano)


# deborphan -R paquete
Cancela la orden anterior,si el paquete es huérfano lo mostrará.


# deborphan -L
Lista los paquetes ignorados

Orphaner

Interfaz gráfica de deborphan, sin parámetros sólo mostrará paquetes lib.

-a
Muestra todos los paquetes huérfanos del sistema.

Editkeep

Interfaz gráfica que gestiona o edita la lista de paquetes ocultos de deborphan.

Debfoster

Programa que mantiene una lista de los paquete que fueron instalados como dependencias de
otros.La primera vez que se ejecuta pregunta si quieres conservar los paquetes
instalados(pregunta por todos),Puede ejecutarse de manera interactiva o bién directamente
desde la linea de comandos para instalar o desinstalar paquetes.

Localepurge
Script que elimina e impide la instalacion de los locales y páginas man que
no nos interesa tener en el disco.Al instalarlo nos da a elegir los locales y
si automaticamente impide la instalación de otros.El programa no se encuentra
bién integrado con la gestión de paquetes de debian...

Checkinstall



$   ./configure
$   make
$   su
#   checkinstall


Esta sucesión de comandos crean un paquete .deb, una vez descomprimido el tarball* y
ubicados en el directorio recién creado (si es el caso).
./configure: comprueba si nos faltan dependencias y crea el archivo make.ini necesario para la
compilación.
make: compila el programa.(lo pasa a lenguaje máquina o binario)
checkinstall: crea el paquete .deb
*tarball: fichero comprimido con el código fuente del programa.

Me parece mejor la idea de hacer un paquete deb que la de compilar un programa desde las
fuentes, de ésta manera se puede instalar el programa mediante dpkg -i quedando totalmente
integrado en el sistema y luego si queremos desinstalarlo lo tendremos también mucho más
facil con dpkg -r


fakeroot make-jpkg jre-linux.bin dpkg -i sun-j2re.deb

Ésta sucesión de comandos nos instala el java de sun, quedando totalmente integrado en
nuestro sistema.

fakeroot es un programa normal, sin el bit setuid (ver chmod). No aumenta los privilegios de un
usuario ni disminuye la seguridad del sistema. Se escribió específicamente para permitir que
los usuario pudiesen crear paquetes deb sin tener privilegios de superusuario.
make-jpkg viene en el paquete java-package y sirve para convertir en paquete deb el binario
de sun que contiene la máquina virtual de java (jre).

6.Recuperación del sistema

7.a.-Usando knoppix live


CD_knoppix # su
desde knoppix CD nos convertimos en root.


root@CD # cd /
nos vamos a / del knoppix CD.


root@CD # mount -t ext3 /dev/hdax /mnt/hdax
montamos la partición en cuestión.
root@CD # chroot /mnt/hdax
nos introducimos en ella con chroot*


root@disco_duro # mount -t proc proc /proc
puede ser necesario montar el sistema de ficheros proc.


root@disco_duro # nano /etc/lilo.conf
editamos lilo (o lo que sea necesario).


root@disco_duro # /sbin/lilo
ejecutamos lilo.


root@disco_duro # umount -t proc proc /proc
desmontamos proc


root@disco_duro # exit
nos salimos de chroot y por tanto del disco duro


root@CD # umount -t ext3 /dev/hdax /mnt/hdax
desmontamos la partición en cuestión.


root@CD # exit
salimos del root de knoppix.


CD_knoppix $
volvemos al punto de partida.

* La orden chroot lo que hace es situarte virtualmente en la partición que le indicas y a partir de
ahí las ordenes que le pases a la consola se ejecutan en esa partición, es como si realmente
estuvieras en esa partición.

7.b.-Creando un disquete de arranque/rescate

Con lilo

Tan fácil como copiar lilo.conf en un disquete e indicarle que arranque desde el mismo, para lo
cual hay que cambiar la linea boot por:


boot=/dev/fd0
Si teneis varias particiones,entre ellas alguna lógica debeis añadir al lilo.conf del disquete la
opción: "lba32" para que pueda arrancarla.

Con el programa mkboot

Este programa viene en el paquete debianutils.
mkboot, entre otras cosas, te copia el lilo.conf al disquete,pero la verdad es que yo sólo he
conseguido que me funcionen los disquetes creados con mkboot,cambiando el lilo.conf que te
crea por el original y realizando después las modificaciones que cuento más arriba.El mismo
programa te explica cómo:


# mount /dev/fd0 /mnt
montamos el disquete.


# cd /mnt
nos vamos a él.


# nano lilo.conf
editamos lilo.conf


# lilo -C lilo.conf
con -C le decimos que ejecute el lilo del disquete y no el de /etc/lilo.conf


# cd ..
nos salimos.


# umount /dev/fd0
desmontamos el disquete.

Con grub

Éste no lo he probado pero por lo que he visto se trataría de copiar los ficheros stage1 y stage2
al disquete tal que así:


# mkfs.ext3 /dev/fd0
formateamos el disquete.


# mount -t ext3 /dev/fd0 /floppy
lo montamos en /floppy.


# cp /ruta_de_acceso/stage1 /floppy
copiamos stage1


# cp /ruta_de_acceso/stage2 /floppy
copiamos stage2


# cp /boot/vmlinuz /dev/fd0
si hay sitio se puede incluir el nucleo en el disquete.


# umount /dev/fd0
se desmonts floppy sin sacarlo.
# grub
inicia la interfaz de comandos de GRUB


grub> root (fd0)
instala las herramientas de GRUB...


grub> setup (fd0)
...en el MBR del disquete.


grub> quit
salimos

Cuando se arranque desde el disquete y aparecezca el interprete de comandos de grub hay
que teclear:


grup> root (fd0)
grup> kernel /boot/vmlinuz         root=/dev/hda2           # kernel de inicio y particion
raiz
grup> boot



Con el NTloader de microsoft

En el caso de que lo usemos para el inicio también podemos crear un disquete de arranque
con el mismo.Para ello copiaremos los ficheros ocultos "ntldr" , "ntdetect.com" y "boot.ini"
que se encuentran en el directorio raíz del sistema (normalmente C:).Ésto es lo que haría
cualquier windosero, pero nosotros además,tendremos que copiar el o los ficheros con
extensión .lnx que pusimos en la partición raiz.

7.c.-Copiando el MBS(Master Boot Sector)-sector de arranque maestro

Ésto crea un archivo llamado mbr con los primeros 512 bytes de hda:

# dd if=/dev/hda of=mbr count=1 bs=512

Para restaurar la tabla de particiones:

# dd if=mbr of=/dev/hda

7.d.-Copiando el VBS(Volume Boot Sector)-sector de arranque de una
partición

Ésto crea un archivo llamado sector_arranque_hda2 con los primeros 512 bytes de hda2

# dd if=/dev/hda2 of=/sector_arranque_hda2 count=1 bs=512

Para restaurar el sector de arranque

# dd if=sector_arranque_hda2 of=/dev/hda2

Cada vez que se modifique lilo o grup,habrá que realizar una nueva copia del MBR o el sector
de arranque que incluya los cambios.
Kernel ,logs y hardware


$ uname -a
Versión del kernel.


$ cat /proc/version
Versión del nucleo y compilador empleado.


$ lsmod
Lista los módulos cargados.


$ cat /proc/modules
Lista los módulos cargados.


$ lsmod | grep módulo
Ver si está cargado el módulo.


$ modinfo módulo
Muestra información sobre un módulo.


# modprobe módulo
Inserta un módulo en el kernel cargando antes los módulos de los cuales dependa.


# modprobe -r módulo
Elimina un módulo del kernel y si procede los que dependen del mismo.


# insmod módulo
Inserta un módulo en el kernel.


# rmmod módulo
Elimina un módulo del kernel.


# echo módulo >> /etc/modules
Inserta un módulo en el kernel de forma permanente.


# depmod módulo
Comprueba las dependencias del módulo.


# modconf
Programa gráfico para listar,cargar y descargar módulos del kernel.


# alsaconf
Programa interactivo que detecta las tarjetas de audio y carga los modulos adecuados.
# less /var/log/kern.log
Mensajes del nucleo (solo root o algun usuario que pertenesca al grupo adm tiene acceso a los
logs)


# less /var/log/syslog
Registro de mensajes relativos a la seguridad.


# less /var/log/debug
Registro de información de depuración de los programas.


# less /var/log/messages
Mensajes del sistema de carácter informativo.


# less /var/log/user.log
Información del usuario.


# less /var/log/XFree86.0.log
Información sobre las X


# less /var/log/Xorg.0.log
Información sobre las X


# less /var/log/auth.log
Accesos al sistema(incluye los intentos fallidos).


# last
Lista los usuarios conectados/desconectados (fichero /var/log/wtmp).


# lastb
Muestra los intentos de conexión fallidos (fichero /var/log/btmp).


# hdparm /dev/hda
Verificar DMA


# hdparm -I /dev/hdx
Información sobre hdx


# hdparm -d1 /dev/hdx
Activar DMA en el disco duro o periférico.


$ dmesg
Ver la salida que el kernel produjo en el arranque.
$ dmesg | grep hd
Información sobre dispositivos IDE.


# sensors-detect
Detecta,instala y carga los sensores y los módulos necesarios(en un kernel 2.6)


# sensors
Tras ejecutar el anterior,muestra temperaturas, voltajes y revoluciones de ventilador.


# lsdev
Muestra información sobre los dispositivos(canales IRQ,DMA y puertos E/S que utilizan)


# lspci
Ver dispositivos conectados a la placa madre mediante un bus PCI.


# lsusb
Ver los buses USB y los dispositivos conectados a los mismos.


# cdda2wav -scanbus
Comprobar el interfaz SCSI.


# cdrecord -scanbus
Comprobar el interfaz SCSI.


$ cat /proc/meminfo
Información sobre la memoria.


$ cat /proc/cpuinfo
Información sobre el procesador.


$ cat /proc/devices
Información sobre dispositivos en uso.

Notas

syslogd registra los mensajes que los programas y el sistema ofrecen.
klogd es un demonio del sistema que intercepta y registra los mensajes del núcleo.
lsdev viene en el paquete procinfo.
sensors viene en el paquete lm-sensors.
Dispositivo de bloques:aquellos que almacenan información en bloques de tamaño fijo,
(cada uno con su dirección) y utilizan los buffers del sistema (memoria temporal),
Dispositivo de caracteres: aquellos que envian o reciben un flujo de datos de forma
secuencial y sus procesos de lectura/escritura no poseen buffer.por ej. el ratón
DMA(Acceso Directo Memoria): es la manera en que los dispositivos se comunican directa-
mente con la memoria sin intervención del procesador.Cada controlador dispone de una
linea o canal DMA de acceso directo.
IRQ (solicitud de interrupción): es la manera en que el controlador de un dispositivo
solicita al procesador que le atienda porque va a comunicarle algún suceso,cada contro-
lador tiene una linea IRQ distinta.
IO Ports (puertos de entrada/salida): se trata de una abstracción (que se corresponde
con un dispositivo)a través de la cual un dispositivo intercambia datos con el sistema.
Tienen una dirección(en hexadecimal)que los identifica.

8. Redes


# /etc/init.d/networking start
Inicia los servicios de red.


# /etc/init.d/networking restart
Reinicia los servicios de red.


# /etc/init.d/networking stop
Para los servicios de red.


# ifconfig [interfaz opciones IP]
Información y configuración de interfaces de red.


# ifconfig
Muestra el estado de los interfaces activos.


# ifconfig -a
Muestra el estado de todos los interfaces.


# ifconfig ppp0
Muestra el estado de ppp0


# ifconfig eth0 up
Activa eth0.


# ifconfig eth0 down
Cierra eth0.


# ifconfig eth1 address 156.35...
Asigna una dirección al interfaz especificado.


# iwconfig
Similar a ifconfig pero sólo para interfaces wireless


# ifup interface
Habilita la interface especificada,ejemplos: ifup eth0 ;ifup ppp0
# ifdown interface
Deshabilita la interface especificada,ejemplos: ifdown eth0 ;ifdown ppp0


# dhclient eth0/eth1
Inicia conexión dhcp mediante el cliente dhcp-client.


# pump -i eth0/eth1
Inicia conexión dhcp mediante el cliente pump.


# pppoeconf
Programa para configurar conexiones pppoe.


# pppconfig
Programa en modo texto para configurar una conexión ppp.


# pon
Establece la conexión ppp a internet.


# plog
Monitoriza la conexión ppp.


# poff
Finaliza la conexión ppp a internet.


$ finger usuario
Informa sobre un usuario conectado al sistema.


$ finger @servidor
Informa sobre todos los usuarios conectados a un servidor (nombre o IP)


$ finger usuario@servidor
Informa sobre un usuario conectado a un servidor


$ ping google.com
Verifica la conexión,en este caso con www.google.com (Ctrl+Z pone fin)


$ traceroute microsoft.es
Muestra la ruta que los paquetes de datos han seguida hasta la máquina de destino.


$ mtr rediris.es
Combinación de ping y traceroute.
$ whois esdebian.org
Información sobre éste,nuestro dominio.


$ host -v -a telefonica.com
Determina la ip de un nombre o el nombre de una ip.(host -v -a 194.224.55.221)


$ iptraf
Monitoriza tráfico de redes(ncurses)


# tethereal
Versión para consola de ethereal,un analizador del tráfico de red (sniffer).


# ettercap
Sniffer/interceptor/logger para redes LAN con switchs basado en ncurses.


$ nmap
Escaner de puertos.


# fail2ban
Escanea logs como /var/log/auth.log y banea las IP con demasiados errores de conexión.


# snort
Sniffer de paquetes y un detector de intrusiones en una red (NIDS).


# aide
Detector de intrusiones en un único Servidor, PC o host.(HIDS).


# portsentry
IDS que detecta escaneos de puertos y reacciona a un ataque.


3 chkrootkit
Detector de rootkit.


w3m,lynx,links,links2,elinks
Navegadores web,elinks soporta SSL con lo que podremos acceder a correo web.


Irssi,*censored*x,WeeChat-curses
Clientes IRC( Internet Relay Chat) )


mutt,mush,pine,elm
Clientes de correo(MUA).
cabber
Cliente jabber( protocolo libre para mensajería instantánea.)


Centericq
Cliente de mensajeria multiprotocolo (ICQ,Yahoo,AIM,MSN,IRC,Jabber)


ncftp
Cliente ftp (File Transfer Protocol) basado en ncurses


ftp-ssl
Cliente ftp con soporte de cifrado SSL y TSL.(dependiendo de la otra parte)


telnet-ssl
Cliente telnet(acceso remoto) con soporte de cifrado SSL,(dependiendo de la otra parte)


ssh
Cliente ssh (Secure SHell),acceso remoto cifrado,forma parte del paquete openssh-client


rtorrent, bittornado
Clientes bittorrent.Bitornado es una versión mejorada del cliente homónimo bittorrent.


$ talk usuario
Entabla una conversacion con un usuario del sistema.


$ talk usuario@sistema
Entabla conversacion con un usuario de otro sistema(entre máquinas UNIX)


$ mesg -n
Anula la notificacion de comunicacion de talk o write


$ mesg -y
Habilita la llegada de notificaciones de talk o write


$ write usuario
Manda un mensaje a un usuario del sistema.


$ netstat -napt
Saber qué puertos tiene abiertos nuestro sistema


n
No resuelve las direcciones a sus nombres DNS. Esto hace más rápida la ejecución.<
a
Muestra todos las conexiones,incluídas las que están escuchando.


p
Muestra el número y nombre del proceso,dueño de dicha conexión.


t
sólo muestra conexiones tcp


$ jigdo-lite fichero.jigdo
Programa interactivo que permite la descarga y/o "actualización" de una imagen ISO;
descarga los ficheros de una imagen ISO mediante wget, los une y forma al vuelo una copia de
la imagen ISO original. Pero si ya tenemos una imagen en el disco o un CD, bastaría con
indicarle la ruta a la misma para que se actualizara. Para ambos casos hay
que descargar previamente los ficheros .jigdo y .template asociados a la imagen.


$ jigdo-file
Herramienta para generar los ficheros .jigdo y .template de una imagen


$ wget [opciones] URL
Gestor de descargas.


-p
descarga web completa.


-r
recursivo.


-k
Convierte los enlaces absolutos en relativos.


-c
Reanuda la descarga de un fichero parcialmente descargado.


-l6
profundidad de recursión (5 por defecto)


-A formato
formato para descargar.


-nH
hace que no se cree el subdirectorio localhost.
--cut-dirs=n
elimina n número de directorios dentro de la jerarquia.

Ejemplo 1ºw

$ get -A zip URL
Bajaría todos los archivos zip de una página web.
Ejemplo 2º: nos queremos descargar el manual nano.pdf que está en
http://www.manuales.com/informática/editores/nano.pdf


$ wget -nH --cut-dirs=2
http://www.manuales.com/informática/editores/nano.pdf
nos bajaría sólo el manual sin crearnos ningún nuevo directorio en nuestra home.

Ejemplo 3º: nos queremos bajar el manual de Arocena en formato html cuya primera página
está en: http://usuarios.lycos.es/ortihuela/index.htm ,pues entonces:

$ wget -r -nH http://usuarios.lycos.es/ortihuela/index.htm
nos bajaría todo el contenido del curso (ficheros .html,.css,.jpg,etc) al directorio /ortihuela

       ‹ Lista de comandos de GNU/Linux (I)arribaLista de comandos de GNU/Linux (III) ›




   Lista de comandos de GNU/Linux (III)
9. OTROS

9.a. MLDONKEY

telnet 127.0.0.1 4000
Abrir interfaz telnet

kill
Matar mldonkey

q
Cerrar interfaz telnet

?
Muestra la ayuda

??
Muestra más ayuda

add_user usuario clave
Añade un nuevo usuario

add_user usuario clave
Cambia la contraseña de un usuario
remove_use usuario
Elimina un usuario

voo
Ver todas las opciones

set opción valor
Cambiar valor de la opción

save
Guardar opciones

networks
Ver todas las redes

enable nº
Activar la red nº

disable nº
Desactivar la red nº

alias
Crea un alias.Ejemplo:alias red netwoks

unalias
Elimina un alias.Ejemplo:unalias red

c nº
Conectar a más servidores o alnº

vm
Servidores conectados

vma
Lista todos los servidores conocidos

x nº
Desconectar del servidor

dllink .torrent
Inicia la descarga de un elinks o torrent

dllinks fichero
Descarga los elinks contenidos en un fichero

http url refererencia
Inicia la descarga desde una URL

s
Buscar archivos en todas las redes

    •   network: nombre de red
    •   minsize: tamaño mínimo
    •   maxsize: tamaño máximo
    •   media: video|Audio|...
    •   Video: video
    •   Audio: audio
•   format: formato
    •   title: título
    •   album: album
    •   artist: autor
    •   field: field ,fieldvalue
    •   not: palabra
    •   and: palabra
    •   or: palabra

vr
Ver resultados de la última busqueda

vs
Ver todas las busquedas

d nº
Bajar resultado nº

cancel nº
Cancelar descarga nº

pause nº
Pausar descarga nº

resume nº
Resumir descarga nº

uploaders
Informa sobre la subidas y sus usuarios

upstats
Muestra estadísdicas sobre las subidas

torrents
Muestra todos los torrents en el servidor

compute_torrent fichero
Genera un .torrent

vd
Muestra la cola de descargas

scan_temp
Muestra el contenido del directorio temp

recover_temp
Recupera los archivos perdidos detemp

commit
Mueve las descargas al directorio incoming

9.b. MUTELLA

mutella
Abrimos la interfaz de mutella.
leave
Cerramos la interfaz,pero mutella sigue corriendo.

exit
Salir.

version
Muestra la versión del programa.

help
Muestra la ayuda.

help commando
Muestra la ayuda del comando.

?
Igual que "help"

set
Muestra las opciones de mutella.

set+
Añade un valor a las opciones.

set-
Quita un valor de las opciones.

color
Configurar los colores de la consola.

info opciones
Muestra información sobre la actividad de la red, las opciones son:

    •    network: Información general sobre la red.
    •    connections: Conexiones
    •    transfers: Transferencias
    •    uploads: Subidas
    •    downloads: Descargas

hosts
Muestra la lista de servidores en caché.

open
Conectar a un servidor.

close ID
Cierra una conexión/es

find palabra/s opciones
Buscar archivos, las opciones son:

    •    -palabra: Excluye una palabra de la búsqueda.
    •    size:bytes: tamaño exacto del archivo,en bytes.
    •    around:bytes: tamaño aproximado.
    •    min:bytes: tamaño mínimo del archivo,en bytes.
    •    max:bytes: tamaño máximo del archivo,en bytes.
ejemplo: find mike oldfield .ogg: -tubulars bells min:30000

list
Muestra las búsquedas en curso.

ls
Muestra sólo las búsquedas con resultados.

edit
Modifica los términos de la búsqueda.

delete ID
Elimina una búsqueda.

erase ID
Elimina una búsqueda y borra la descarga parcial.

clear
LImpia los resultados de una o más búsquedas.

results ID
Muestra los resultados de la búsqueda.

get ID
Inicia la descarga de uno o más archivos.

stop ID
Para la transferencia.

kill ID
Igual que stop,pero borra el archivo parcial.

move
Modifica el nombre del archivo en descarga.

scan
Fuerza un reescaneo de los archivos compartidos.

library
Muestra los archivos compartidos.

load
Loads and executes Mutella terminal-mode script

system comando
Ejecuta un comando de shell

!
Sinónimo de "system"

NOTA:

    •   los ID deben ser tomados del último ls, list, info...
    •   Todos los comandos admiten abreviaturas:info downloads por id, etc
    •   El fichero con las opciones es ~/.mutella/mutellarc
    •   El fichero con las opciones de color es ~/.mutella/termclr
9.c. FTP(Protocolo de Transferencia de Archivos)

open servidor
Conectar con el servidor#

?
Imprimir información de ayuda local

append
Anexar a un archivo

bell
Emitir sonido cuando se complete el comando

binary
Establecer transferencia binaria (todas salvo .txt)

bye
Finalizar la sesión ftp y salir

ascii
Establecer tipo de transferencia ascii (sólo para .txt)

cd
Cambiar el directorio de trabajo remoto

close
Finalizar la sesión ftp

ls
Mostrar el contenido del directorio remoto#

dir
Mostrar el contenido del directorio remoto

delete
Eliminar archivo remoto

debug
Alternar modo de depuración

get
Recibir archivo

help
Ayuda sobre un comando 1º-help y luego el comando

lcd
Cambiar el directorio de trabajo local#

mdir
Mostrar el contenido de múltiples directorios remotos

mdelete
Eliminar múltiples archivos
mget
Obtener múltiples archivos#

mkdir
Crear directorio en el equipo remoto#

mls
Mostrar el contenido de múltiples directorios remotos

mput
Enviar múltiples archivos

open
Conectar a tftp remoto

put
Enviar un archivo

pwd
Imprimir el directorio de trabajo del equipo remoto

quit
Finalizar la sesión ftp y salir

quote
Enviar un comando arbitrario ftp

recv
Recibir archivo

rename
Cambiar el nombre del archivo

rmdir
Quitar directorio en el equipo remoto

remotehelp
Obtener ayuda del servidor remoto

send
Enviar un archivo

status
Muestra el estado actual#

trace
Alternar trazado de paquetes#

type
Establecer el tipo de transferencia de archivos

user
Enviar nueva información de usuario

verbose
Alternar modo detallado
9.d. IRC

/server
Lista,añade o elimina servidores.

/server [nombre:puerto:clave]
Conecta con un servidor.

/info [servidor]
Obtener información sobre servidor.

/lusers
Obtener estadísticas del servidor.

/users
Usuarios conectados al servidor.

/links
Lista los servidores de la red actual.

/list
Lista e informa sobre los canales.

/admin
Informa sobre el admin. del servidor.

/help [comando]
Muestra la ayuda sobre un comando.

/ison [nick]
Comprobar si un usuario está conectado.

/join [canal]
Unirse a un canal.

/names
Listar usuarios en canales.

/whois [nick]
Muestra información sobre un usuario.

/whowas [nick]
Informa sobre un usuario que ya no está.

/who [patrón]
Muestra información sobre patrón.

/msg NiCK SET PASSWORD [clave]
Cambiar de contraseña(en irc-hispano)

/msg [nick | canal][texto]
Envia un mensaje a un usuario o canal.

/amsg [texto]
Envia mensaje a todos los canales en los que estás.
/notice [nick | canal]
Envia un mensaje privado a un usuario/os

/query [usuario texto]
Envia un mensaje privado a un usuario.

/ignore
Lista los usuarios ignorados.

/ignore nick
Ignora los mensajes de un usuario.

/unignore [nick | *]
Deja de ignorar el/los mensajes.

/ctcp [nick texto]
Envia un mensaje mediante CTCP

/me [texto]
'-> precedido de nuestro nick

/ame [texto]
'->a todos los canales en los que estás.

/dcc [chat nick ]
Pide y/o inicia charla con un usuario.

/dcc [close nick]
Cierra charla.

/dcc [send nick fichero]
Ofrece y/o envia un fichero.

/dcc [get nick fichero]
Permite recibir un fichero.

/time
Muestra fecha y hora.

/clear
Limpia la ventana de texto actual.

/away [texto]
Pasar a estado ausente.

/away
Volver de la ausencia.

/nick [nuevonick]
Cambiar el nick.

/nick [nuevonick][clave]
Cambiar un nick registrado.

/nick [nick:contraseña]
Identificarse enirc-hispano.
/part [canal]
Abandonar un canal.

/quit
Cerrar todas las conexiones y salir.

Notas:
CTCP (Protocolo de cliente a cliente): permite dar respuestas predeterminadas y automáticas
ante una petición espefífica de otro usuario.
DCC: protocolo que establece una conexión TCP directa entre dos ordenadores.

9.d. Calculadora

bc
Abrimos bc.

> 20 + 5.4
Suma.

> 77 - nº
Resta.

> 99 * 86
Multiplica.

> 47 / 3
Muestra el cociente de la división.

> 47 % 3
Muestra el resto de la división.

>4 ^ 2
Calcula la potencia 4²

> sqrt (16)
Calcula la raiz cuadrada de 16

> (2*3+2) / sqrt (2^3/2.5)
Un poco de cada.

> quit
Salimos de bc.

También podemos hacerlo usando echo y mandando la salida a bc:
echo "(2*3+2)" / sqrt "(2^3/2.5)" | bc
en este caso los paréntesis deben ir entrecomillados

9.e. Ppromps

PS1="[033[1;34m][u@h:w]$[033[0m] "

PS1="[033[30;47m][[033[31m]u[033[30;47m]@  W][033[00m]$ "

PS1='[033[01;30m]u
[033[01;32m]h[033[01;33m]:[033[01;35m]w[033[0m$ '
PS1="[033[;31m][[033[;36m]u@h[033[;31m]:[033[;36m ]w
[033[;31m]]$[033[0m] "

Para que los promp permanezcan de una sesión a otra hay que ponerlos enel archivo .bashrc
de tu home.

 ‹ Lista de comandos de GNU/Linux (II)arribaLocalizar y eliminar líneas que coincidan con una
                              expresión regular específica ›




   Autologin en Debian
Como lograr un Autologin en tu Debian. Para hacer que una terminal ingrese automáticamente,
(estilo Live-CD)

Metodo 1

Edita tu /etc/inittab. Puedes usar tu editor favorito.

#vi /etc/inittab
#nano /etc/inittab

Busca la siguiente línea

1:2345:respawn:/sbin/getty 38400 tty1

Coméntala con un #. Debe quedar así:

#1:2345:respawn:/sbin/getty 38400 tty1

Agrega la siguiente linea debajo:

1:2345:respawn:/bin/login -f YOUR_USER_NAME tty1 </dev/tty1 >/dev/tty1
2>&1

Reemplazando YOUR_USER_NAME por el nombre de usuario que quieres que haga login
automático.

Ahora, si deseas que el servidor X se inicie automáticamente:

Edita el archivo .bash_profile del home del usuario con login automático. En caso de no existir
el archivo crealo.

#vi ~/.bash_profile
#nano ~/.bash_profile

Y agrega:
if [ -z "$DISPLAY" ] && [ $(tty) = /dev/tty1 ]; then
startx
fi

La línea del if [ -z "$DISPLAY" ] ... sirve para verificar si se está ejecutando en la tty número 1;
en caso de ser otra terminal (tty2, tty2, etc...) no se ejecutará el servidor X.

Aunque es cómodo tener un autologin sin necesidad de ingresar contraseñas, esto puede
representar un riesgo de seguridad, así ten cuidado con quién utiliza tu equipo.

          ‹ Archivos configuración de BasharribaComo obtener Ayuda en GNU/Linux ›




   Viviendo en Consola
Índice

1. Introducción
2. Navegadores Web
2.1. Lynx
2.2. Links2
2.3. W3M
3. Gestores de archivos
3.1. Midnight Commander (MC)
3.2. FD Clone (FD)
3.3. Vladi File Manager for Unix (VFU)
4. Clientes de Mensajería instantánea
4.1. Pebrot
4.2. CenterIM
4.3. Finch
4.4. Bitlbee
5. Reproductores de Música
5.1. Music Player Daemon (mpd)
5.2. Mp3Blaster
5.3. MOC
6. Control de procesos
6.1. HTop
7. Consultando el estado del tiempo
7.1 Weather-util
8. Montar unidades externas
9. Redes sociales
9.1. Twidge




1. Introducción

En algunas ocasiones en las cuales se pretende evitar el uso de todo tipo de aplicación gráfica,
como en el caso de servidores o en casos mas particulares cuando realizamos una instalación
desde cero digamos tipo Netinstall, y deseamos navegar, chatear o poder realizar una gestión
de archivos de una forma un poco didáctica siempre se encuentra como limitante la falta de un
ratón, de no tener los tan cómodos iconos y demás.

Pero hoy os digo que es posible vivir en una tty utilizando herramientas como las que
conocerás a continuación.

2. Navegadores Web

Antes de empezar a analizar cada uno de los navegadores es importante saber como trabajan
estos, y bueno en general convierten el código HTML a código ASCCI y permiten la
visualización del "documento" de forma ordenada por medio de un paginados como less,
utilizando en la mayoría de los casos el siguiente comando:


lynx -dump /home/huhn/
lynx.html | less


Por medio del comando dump se le da el formato correspondiente (ASCCI) al documento,
posteriormente se archiva temporalmente en una ruta especifica y se invoca al paginador less
para la correspondiente visualización de este.

2.1 Lynx

Lynx es un navegador web en modo texto para consola. Permite en algunos casos específicos la
visualización de tablas linearizandolas y los marcos los identifica por nombres para luego ser
explorados como paginas independientes, también conexiones SSL y permite desplazamiento
tanto vertical como horizontal. Una de sus grandes ventajas es que no es necesario esperar a
que cargue la pagina completa para permitir la visualización de esta, por que la va
renderizando mientras va cargando la misma.

Navegar con Lynx es casi tan sencillo como jugar PACMAN es solo cuestion de desplazarnos
por los diferentes enlaces con las teclas de dirección, también en algunos casos podemos usar
los números con enlaces numerados y las teclas pg up y pg dn para avanzar o retroceder de
una forma rapida. La versión actual soporta conexiones SSL y HTML. Las tablas se linearizan y
los marcos se idenfitican por nombre para ser explorados como páginas independientes.

Ultima versión estable lynx2-8-6 y la linea de trabajo actualmente se basa en la versión lynx2-8-
7.

instalación:

En una terminal ejecutamos:


#aptitude install lynx


Para ejecutarlo podemos hacerlo de dos formas:

Opción1


lynx


Esta opción nos abrirá el navegador con su pagina principal en la cual muestra algunos
comandos generales para realizar la navegación.
Opción2


lynx www.esdebian.org


Esta opción nos abrirá el navegador con la pagina de esdebian, ahora si revisamos en la parte
de abajo de nuestro navegador, podremos observar que se encuentran los atajos de teclado
mas utilizados, puesto que lynx se maneja únicamente por medio de teclado y en general para
revisar y configurar las diferentes opciones solo basta con presionar la tecla (o)pciones.

Atajos de teclado ó comandos para lynx.




   •   Shift + H: Invoca la ayuda "(h)elp"




   •   Q: Cerrará el programa después de preguntar




   •   Shift + Q: Cerrará el programa sin preguntar




   •   K: Muestra una lista de comandos de teclado disponibles




   •   M: Vuelve a la pagina de inicio, después de preguntar (confirmamos con
       (Y)es)
•   G: Abre un cuadro de dialogo para ingresar una nueva url




•   Shift + G: Abre un cuadro de dialogo para ingresar una nueva url




•   L: Muestra los enlaces disponibles en el “documento” actual desde el
    Setup




•   P: Muestra las correspondientes opciones de impresión es decir, si lo
    guarda en un archivo local,
•   se realiza un envío al correspondiente e-mail o se envía directamente a
    impresión




•   D: Guarda el archivo de la pagina con todas las imágenes




•   A: Añade a los favoritos o bien la pagina que estamos viendo, o bien la
    pagina cuyo enlace tenemos bajo el cursor




•   V: Abre un administrador de favoritos
•   Ctrl + A: Vuelve al comienzo de la pagina




   •   Ctrl + E: Va el final de la pagina




   •   Ctrl + R: Recarga la pagina




   •   /: Comienza una búsqueda




Y para el dado caso de paginas en las cuales se requiere login y pass, podemos ingresar
directamente en ésta de la siguiente forma:


lynx www.esdebian.org -auth=epica:esta-es-mi-contraseña


Ayuda fuera del navegador:


man lynx


Imagen navegador Lynx:
2.2 Links2

Un poco de historia.

La versión original de Links, fue desarrollada en 1999 y era muy similar a Lynx, por lo que
después cambio la orientacion del proyecto, renombrándolo como Links2. Escrito inicialmente
como un simple pasatiempo, es desarrollado por Twibright Labs en el año 2000, siendo el
sucesor de Links.

Permite conexiones multiples, lo que facilita el estar realizando una descarga y poder continuar
con la navegacion en diferentes paginas. Otra de sus características es el soporte parial para
tablas y frames en HTML, permite el scroll horizontal, también el uso de marcadores, soporte
de formatos gráficos antialising del texto y javascrpti4, todo esto acompañado de un menú
desplegable. Soporta consolas con color o monocromo , ademas permite la pre-visualización
de las páginas aún sin estar cargadas.

En cuanto a la versión la ultima en la que se desarrollo fue la versión 0.98, desde entonces no
se agregan nuevas características, sólo se han realizado correcciones de algunos errores.

Instalación:

En una terminal ejecutamos:


aptitude install links2


Para ejecutarlo podemos hacerlo de dos formas:

Opción1
links2


Esta opción nos abrirá el navegador pero con una pantalla vacía, en la cual dependiendo de las
opciones iniciamos la navegación

Opción2


links2 www.esdebian.org


Esta opción abrirá el navegador con la pagina indicada en este caso: www.esdebian.org, para
ver el menú solo basta con presionar la tecla [Esc]. Links2 está disponible en inglés , pero
podemos configurarlo al español o cualquiera de los otros 23 idiomas disponibles, si nos
dirigimos a Setup > Lenguage.

Atajos de teclado para Links2:




   •     Esc: Muestra/Minimiza la barra de menú




   •     Q: Cierra el programa preguntando antes de salir




   •     Shift + Q / Ctrl + C: Cierra el programa sin preguntar




   •     G : Abre una nueva linea para escribir la url a la cual se desea acceder




   •     Shift + G: Abre la misma linea pero mostrando la ultima visitada,
         permitiendo modificar la dirección
•   /: Búsqueda hacia adelante en el documento actual




•   ? : Búsqueda hacia atrás en el documento actual




•   N: Va hasta la siguiente coincidencia




•   Shift + N : Vuelve a la anterior coincidencia




•   = : Abre una ventana con información igual de la url (juego de
    caracteres, servidor Web, etc)




•   A: Añade favoritos




•   S: Abre el administrador de favoritos
•   Ctrl + R : Recarga la pagina




Ayuda fuera del navegador:


man links2


Imagen navegardor Links2:




2.3 W3M

       Leer más w3m - Navegador web en línea de comandos

W3m es un navegador web basado en texto, que utiliza un paginador. En general se parece
mucho a Lynx, tiene soporte para tablas, marcos, conexiones SSL, soporta colores e incluso
imágenes. Tambien en el caso de no encontrarnos en una consola real, brinda soporte al
mouse y ademas se rige por los estandares W3C

Instalación:

En una terminal ejecutamos:


aptitude install w3m
A diferencia de las anteriores para ejecutar w3m debemos asignar una direccion url de esta
forma:


w3m www.esdebian.org


Con esto abrirá el navegador con la pagina indicada en este caso: www.esdebian.org.

Atajos de teclado ó comandos para w3m:




   •   Shith + H: Invoca la ayuda




   •   Q: Cierra el programa preguntando antes de salir




   •   Shift + Q : Cierra el programa sin preguntar




   •   Space : Desplazamiento por paginas




   •   G : Va a la primera o ultima linea del documento dependiendo del caso




   •   Tab: Va al siguiente enlace
•   Alt + Tab : Vuelve al enlace anterior




•   Return: Siguiente enlace




•   Shift + B : Vuelve a la pagina anterior




•   U: Muestra la URL




•   Shift + U: Abre cuadro de dialogo para indicar nueva URL




•   /: Búsqueda hacia adelante con palabra clave




•   ?: Búsqueda hacia atrás con palabra clave
•   V: Alterna entre la vista normal y el codigo fuente




•   A: Añade un documento a la lista de favoritos




•   B: Muestra los Favoritos




•   Shift + R: recarga la pagina




•   S: Abre historial reciente




•   Alt + S: Guarda el archivo en el disco




•   O: Abre un cuadro de dialogo para configuración personal




•   E: Abre la pagina en el editor (podemos escoger nuestro editor favorito
    en configuración)
Ayuda fuera del navegador:


man w3m


Imagen Navegador w3m:




3. Gestores de archivos

Un administrador o gestor de archivos puede verse como una apliación que facilita el acceso a
los archivos y a su vez facilita las diferentes operaciones que se pueden realizar con estos,
llámese copiar, mover, eliminar, etc.

Los gestores de archivos tipo consola, se caracterizan por tener uns interfaz de usuario de
símbolos ascii que representan las unidades, particiones y directorios reales dentro del
sistema.

3.1. Midnight Commander (MC)

Midnight Commander (mc) es un gestor de ficheros, que funciona por medio de una aplicación
en modo texto. La pantalla principal consiste en dos paneles en los cuales se muestra el
sistema de ficheros. Y por medio de las teclas direccionales o el mouse podemos desplazarnos
por estos. Y borrar, renombrar, editar, copiar ficheros, etc.

MC tambien la capacidad de explorar dentro de los formatos de archivo comprimidos como si
fuera un simple directorio, soporta transferencias FTP o cliente del protocolo FISH.
Instalación:

En una terminal ejecutamos:


#aptitude install mc


Para ejecutarlo simplemente lo invocamos desde nuestra consola en calidad de root


#mc


Y listo tendremos una pantalla como la siguiente:




En la cual si observamos en la parte superior se encuentra el menu principal y en la parte de
abajo unos cuantos atajos de teclado con opciones como:




      •   F1: Ayuda
•   F2: Menú de carpeta




•   F3: Ver




•   F4: Editar




•   F5: Copiar




•   F6: Mover




•   F7: Crear directorio




•   F8: Borrar




•   F9: Menu principal
•   F10: Salir




    •   R: Actualizar




    •   J: Ejecutar y ver archivo




    •   B: Buscar archivos




    •   man mc: Ayuda fuera del gestor de ficheros




Temas de colores

Para cambiar el tema por defecto de Midnight Commmander podemos editar el archivo
~/.mc/ini, y agregar la etiqueta [Colors] seguido de la configuración deseada de colores.Guíate
con la siguiente configuración de ejemplo:

[Colors]
base_color=lightgray,green:normal=green,default:selected=white,gray:ma
rked=yellow,default:markselect=yellow,gray:directory=blue,default:exec
utable=brightgreen,default:link=cyan,default:device=brightmagenta,defa
ult:special=lightgray,default:errors=red,default:reverse=green,default
:gauge=green,default:input=white,gray:dnormal=green,gray:dfocus=bright
green,gray:dhotnormal=cyan,gray:dhotfocus=brightcyan,gray:menu=green,d
efault:menuhot=cyan,default:menusel=green,gray:menuhotsel=cyan,default
:helpnormal=cyan,default:editnormal=green,default:editbold=blue,defaul
t:editmarked=gray,blue:stalelink=red,default
3.2. FD Clone (FD)

FD (del inglés "File and Directory", "Archivo y directorio") es un gestor de archivos fácil de usar
para los sistemas Unix. Como su nombre lo indica, es el clon libre de fd, el cual fue escrito por
Atsushi Idei para MS-DOS (tm), siendo muy popular en Japón alrededor de 1989. Su
popularidad en el país nipón fue tal que se le llego a considerar sinónimo de gestor de archivos.
Fue creado en 1995 por T. Shirai.

Los mensajes de estado están disponibles en inglés o en japonés.

Su diseño atípico puede resultar raro al principio, ya que maneja un modo de organización de
árbol para los directorios, los cuales se muestran en columnas. Al presionar → , mostrará las
carpetas y contenidos dentro del mismo.En lugar de desplazarse por orden alfabético de la
parte inferior de la pantalla, la lista de archivos se ajusta a la parte superior de la columna de al
lado, a modo de una gran lista.

Por otra parte, el no reconoce directorios o archivos que hagan uso de acentos o de la letra Ñ,
además no cuenta con soporte para colores. Aún así tiene algunas opciones interesantes, por
ejemplo, es capaz de leer el contenido de distintos tipos de archivos comprimidos. Las teclas
del 1 al 5 pueden agregar de 1 a 5 columnas, facilitando la búsqueda o lectura de nuestros
archivos. Puede desplegar la información del archivo seleccionado. Incluye también la opción
de hacer busquedas recursivas.

Por desgracia no hay suficiente documentación en español que nos de una idea de como
configurarlo, afortunadamete su diseño sencillo lo hace fácil de manejar.

Para instalarlo sólo hace falta tirar de apt:


apt-get install fdclone


Lo invocamos con:


fd
Estos son algunos de sus comandos básicos:




   •   Retroceso Atrás




   •   Bs:Directorio raiz




   •   l: Directorio de entrada




   •   Tab: Seleccionar el archivo




   •   c: Copiar archivos




   •   m: Mover archivos




   •   d: Eliminar
•   k: Crear directorio




•   D: Eliminar directorio




•   r: Renombrar archivos




•   1,2,3,5: Aumentar o disminuir el número de columnas




•   s: Ordenar por tipo de archivos




•   t: Ver el esquema de árbol del directorio




•   h: Ejecutar una orden




•   u: Descomprimir
•   f: Buscar




      •   ?: Invoca a la ayuda (en japonés)




      •   Esc (q): Salir de FD clone


En definitiva, es una gran opción si buscamos algo diferente, sencillo y rápido.

3.3. Vladi File Manager for Unix (VFU)

VFU es un gestor de archivos minimalista versátil y extensible basado en ncurses para los
sistemas Unix. Fue escrito por Vladi Belperchinov-Shabanski.Incluye gran parte de las acciones
de un gestor de archivos, como copiar, cortar, renombrar ficheros, extracción de archivos
comprimidos, navegación por directorios, ftp, edición de texto y automontaje de dispositivos
extraibles.

La primera vez que lo ejecutemos notaremos que sólo dispone de una columna, la cual se
divide en secciones donde nos muestra información relevante de nuestros ficheros, como la
fecha de creación y sus permisos. Vfu se maneja por medio de combinaciones de teclado.
Podemos entrar en un directorio si damos enter, así como para salir del mismo si pulsamos la
tecla retroceso.Si pulsamos retroceso si estamos seleccionando un archivo, esta acción abrirá
un pequeño editor de textos. Con la tecla H invocamos a la ayuda y con U nos da la posibilidad
de introducir un comando externo.

Para instalarlo:


apt-get install vfu


Lo ejecutamos con:


vfu
Colorear archivos según su extensión

En el fichero vfu.conf (localizado en nuestro home), tenemos la opción de activar el coloreado
de archivos, en un editor de textos buscamos la siguiente linea:


 cGREEN=.ext.ext.ext.


La cual dice que mostrará en color verde los archivos citados, por ejemplo :
cGREEN=.txt.odf.rc.TXT.

En el ejemplo, vfu mostrará los documentos de texto en color verde.


 chGREEN=.ext.ext.ext.


La variable "h" provocara que los archivos citados se visualicen en verde claro. Por ejemplo:
chGREEN=.TXT.
Podemos usar otros colores:


 cMAGENTA=.ext.ext.ext.
 cCYAN=.ext.ext.ext.
 cRED=.ext.ext.ext.
 cBLUE=.ext.ext.ext.
 cYELLOW=.ext.ext.ext.


Algunos atajos de teclado:

        C: Copiar.
        D: Cambiar directorio.
        E: Eliminar.
        G: Seleccionar todo, deseleccionar todo
        I: Editar archivo.
        H: Muestra el archivo de ayuda.
N: Buscar
        ←: Renombrar archivo.
        ~: Transporta el directorio seleccionado a la carpeta home.
        Q: Salir

Ayuda fuera de vfu:


 man vfu



4. Clientes de mensajería instantánea

La mensajería instantánea ha facilitado mucho la conexión y comunicación de usuarios a través
de internet, y puede que esta herramienta en muchas ocasiones sea de uso necesario para
cierto tipo de personas, las que a la vez pueden ser amantes de las tan seductoras tty's. Para
este y otro tipo de personas (curiosos) tambien existen los mensajeros instantáneos para la
consola. Estos son sólo algunos :

4.1 Pebrot

Pebrot es la solución para los msn-adictos, que ven como necesidad de estar conectados la
mayoria del tiempo con el mundo de la internet, este esta desarrollado en su gran mayoria en
python y exclusivamente para sistemas de tipo *nix

Este programa posee una interface sencilla pero a su vez lo suficiente funcional, es decir
soporta cosas tales como conversaciones multiples por medio de pestañas y establecer tu
estado de conexión (disponible, ocupado, etc).

Nota: Como requerimiento para su funcionamiento debe estar instalado Python 2.2 o superior

Instalación

Para la instalación debemos descargar de la página del proyecto el Pebrot el correspondiente
.tar.gz y luego desde consola por medio del comando cd ingresamos a la correspondiente ruta
en la cual hemos descargado nuestro .tar.gz de la siguiente forma.

Nota:La siguiente instalación se realizo desde el escritorio de root


#cd /root/Desktop/


Despues de esto procedemos a descomprimir y desempaquetar el archivo que hemos
descargado:


#tar -zxvf     pebrot-0.8.8.tar.gz


Procedemos a instalarlo con:


#python setup.py install


Configuración Pebrot
Abrimos con nuestro editor favorito el archivo pebrotrc, para este caso especifico, lo haremos
de la siguiente forma:


nano /root/Desktop/pebrot-0.8.8/pebrotrc


Y en este configuramos las diferentes opciones disponibles, de acuerdo a nuestras
preferencias, a continuación os muestro unos cuantos detalles

Nota:Agregaremos o las siguientes lineas del archivo de acuerdo a las opciones que
deseemos.

La configuración de nuestra cuenta es indispensable para el funcionamiento de pebrot.

Configuración Cuenta


User= este_es_mi_correo@hotmail.com
Password= esta_es_mi_contraseña


Estado:


state= NLN
#Comentarios de mas estados:
#NLN: En línea
#FLN: Fuera de línea
#HDN: Invisible ó Desconectado
#IDL: Inactivo
#Awy: Ausente
#BSY: Ocupado
#NPH: Al Teléfono
#y demás


Activar conversaciones:


Show_invited= 1


1 Conversaciones múltiples
0 Conversación única

Campanilla ante un nuevo mensaje:


Beep_on_msg= 1


1 sonara la campanilla cuando reciba un mensaje
2 campanilla desactivada

Campanilla para nueva conversación:


Beep_on_new_chat= 1
1 sonara la campanilla cuando alguien empiece a conversar con usted.
0 Campanilla desactivada

Descargas:


Download_dir= /esta/es/mi/ruta/descargas-msn


Para mayor información acerca de mas configuraciones pueden revisar el archivo README, en
este se encuentran detalladas cada una de las opciones de configuración y personalización de
nuestro msn tipo consola.

Imagen Pebrot:




4.2. CenterIM

CenterIM (también conocido como "cim")es un mensajero instantáneo multiprotocolo y
multiplataforma, basado en ncurses para los sistemas *nix publicado bajo la licencia GPL. Es
un fork del mensajero CenterICQ.

Instalación:

En una terminal ejecutamos:


#aptitude install centerim-utf8


Ejecución y configuración:

Para ejecutarlo simplemente lo invocamos desde la consola de la siguiente forma:


centerim-utf8
Una vez llevado acabo, las primeras pantallas mostradas por el programa son en su mayoría
de configuración.

Configuración de cuenta

Jabber


Servidor: Servidor:5223
Secured: sí
Nombre de Usuario: Mi_usuario
Contraseña: Mi_contraseña
Priority: 4


Msn


Servidor: messenger.hotmail.com:1863
Nombre de Usuario: Mi_usuario
Contraseña: Mi_contraseña


Configuración de codificación Utf8

Para que CenterIM muestre correctamente los carácteres en las cuentas Msn hace falta
configurar lo siguiente:


Switch to lenguaje present: None
Remote charset: sp1250
Local charset: utf-8
For protocols: msn


Hecho esto no tendremos problemas con acentos, diéresis o la letra "ñ".

Atajos de teclado ó comandos para Centerim:




   •     F2: Menú de opciones sobre un contacto especifico




   •     F3: Estado, ya sea conectado, no disponible y demas. Para seleccionarlo
         utilizamos la tecla Space
•   F4: Menú general




    •   Ctrl + N / Ctrl + B: Siguiente / Anterior chat




    •   Q: Salir




Imagen CenterIM:




Ayuda fuera de Centerim:


man centerim



4.3. Finch

Finch es completo cliente de mensajería multiplataforma y multiprotocolo, sencillamente es la
versión de Pidgin para la línea de comandos.

Para instalar Finch:
apt-get install finch


Invocamos con:


finch


La primera vez que ejecutamos Finch notamos que viene con una agradable interfaz que se ve
totalmente diferente en comparación con la mayoría de los clientes en modo texto. En otras
palabras, disponemos de la interfaz de Pidgin bajo la línea de comandos. Cuenta con ventanas
pop-up que se abren conforme nos envien mensajes, así como la capacidad de cerrarlas,
minimizarlas o maximizarlas.

Podemos editar los atajos del teclado, la configuración de los colores y el registro de nuestras
conversación con un archivo de texto. Una vez dentro de Finch, este nos solicitara la
información de nuestra(s) cuentas de MI, usamos la tecla TAB para desplazarnos por los
menús. Terminando el llenado de nuestros datos, salimos del programa y volvemos a
ejecutarlo.

Si todo ha salido bien, debemos de tener algo como esto en la pantalla:




Atajos de teclado:

    •   Salir de las ventanas: ALT-c.
    •   Cambiar entre ventanas: ALT-n o ALT-p.
    •   Abrir el menú de cada ventana: F10.
    •   Redimensionar ventanas: ALT-r y luego alguna de las flechas.
    •   Cambiar a la n-ésima ventana: ALT-n.
    •   Mover las ventanas: ALT-m.
    •   Ver todas las acciones posibles (e.g., agregar cuentas): ALT-a.

Por otro lado Finch requiere algunas librerías innecesarias de Pidgin, gtk y gnome para
funcionar. Pero a manera de evitar esto, se puede optar por la compilación de Finch desde el
código fuente de Pidgin.

Descargamos el código fuente desde la página oficial de Pidgin.
Simplemente añade los siguientes parametros en la orden "configure".


./configure --disable-gtkui --disable-vv --disable-meanwhile --disable-avahi -
-disable-nm --disable-tcl


Y prosigue con el proceso de compilación.

4.4. Bitlbee

        Leer más Bitlbee




Con bitlbee podremos hacer uso de la mensajería instantánea a través de nuestro cliente de
IRC preferido. Bitlbee soporta los protocolos XMPP/Jabber (Google Talk incluído), MSN
Messenger, Yahoo! Messenger, AIM y ICQ, y es una buena opción si somos usuarios de IRC y
no queremos utilizar otro cliente adicional para la mensajería instantánea.

Nuestro entorno de trabajo será una Debian Sid/Experimental, aunque este dato carece de
especial relevancia, puesto que bitlbee se encuentra en todas las ramas de Debian. Para
empezar lo instalamos,

#aptitude install bitlbee

Permitiremos el acceso a nuestra máquina en /etc/hosts.allow y reiniciamos.

#nano /etc/hosts.allow

bitlbee: 127.0.0.1

5. Reproductores de Música

En el caso de los reproductores de música existen también varias opciones, aquí enunciaremos
unas cuantas:

5.1. Music Player Daemon (mpd)

        Leer más mpd (Music Player Daemon)

Una de las cosas que se nos plantean a la hora de instalar y utilizar Debian es la elección de
un reproductor para nuestra música. Aquí os presento el mpd (Music Player Daemon). En
realidad es un demonio del sistema, con muchísimas funcionalidades, que funciona con la
arquitectura cliente-servidor. Entre los formatos soportados se encuentran mp3, ogg, flac,
musepack, mp4, aac y wave, y es muy bueno y rápido para colecciones grandes de música.

En esta ocasión nos centraremos en su uso para la reproducción de música en el mismo
equipo en el que está instalado.
Bien, lo primero es instalarlo.

# aptitude install mpd

En /etc aparece el archivo de configuración del mpd, mpd.conf, que pasamos a editar según
nuestras necesidades. En este punto, hay varias maneras, dejaré aquí expuesta la que para mí
es más sencilla.
Creamos los directorios necesarios en nuestro home:


# mkdir /home/arctica/.mpd
# mkdir /home/arctica/.mpd/playlists

5.2. Mp3Blaster

Mp3Blaster es un programa reproductor de ficheros de audio que soporta formatos tales
como:mp3,wav y ogg, posee una interfaz gráfica basada en consola con menús para la facil
navegación entre las diferentes opciones. Entre sus caracteristicas se encuentran el control de
volumen, selector de carpetas, mezclador y por supuesto su bajo consumo de memoria.

Instalación:

En una terminal ejecutamos:


#aptitude install mp3blaster


Ejecución:


mp3blaster


Atajos de teclado ó comandos para mp3blaster:




    •   F1: Añadir ficheros a la lista.




    •   F2: Invertir selección.




    •   F3: Seleccionar todo recursivamente.
•   F4: Ingresar nueva dirección.




•   F5: Añadir directorios como grupos.




•   F6: Convertir MP3 a WAV.




•   F7: Add URL(shoutcast)




•   /: Iniciar búsqueda.




•   Space: Seleccionar archivo.




•   r: Renombrar fichero.
•   U: Deseleccionar todo.




•   D: Eliminar fichero.




•   <: Bajar volumen del mezclador.




•   >: Subir volumen del mezclador.




•   q: Salir del programa.




•   ?: Invocar ayuda.




•   4: Canción anterior.




•   5: Reproducir/Pausar canción.
•   6: Canción siguiente.




   •   1: Retroceder canción.




   •   2: Deneter canción.




   •   3: Avanzar canción.




Os dejo con una imagen:
Ayuda fuera del gestor de reproductor:


man mp3blaster



5.3. MOC

        Leer más MOC - Music on console

Características:

    •   MOC es un reproductor de audio fácil de manejar y ligero, ideal para equipos con
        pocos recursos.
    •   La interfaz es similar a MC (Midnight Commander, el administrador de archivos)
    •   MOC reproduce todos los archivos en el directorio a partir del archivo seleccionado
        para lo que no es necesario crear listas de reproducción.
    •   Es posible reproducir varios archivos o directorios de archivos y después guardar la
        lista de reproducción como un archivo con extensión m3u.
    •   Funciona como demonio, es decir que se ejecuta en segundo plano por lo que no
        necesita entorno gráfico. Esto quiere decir también que si necesitas usar la terminal, el
        emulador de terminal ó cerrar el entorno gráfico no es necesario detener la
        reproducción ya que ésta sigue activa en segundo plano. Esto lo hace una gran opción
        para cuando estas configurando kdm, los drivers de la tarjeta de video o cosas por el
        estilo y por supuesto para manejadores de ventanas y entornos minimalistas
    •   Soporta los siguientes formatos: mp3, Ogg Vorbis, FLAC, Musepack, Speex, WAVE,
        AIFF y AU entre otros.
    •   Soporta Internet stream.
    •   Soporta temas de configuración.

6. Control de Procesos
Normalmente para la visualización y detalle de los procesos en consola utilizamos el siguiente
comando:


#ps aux


Pero en caso dado de neecsitar matar algun demonio, debemos aprendernos el
correspondiente número de su PID, y en el caso de que dicho proceso sea mantenido por
varios demonios, tendremos que aprendernos varios números PID para luego proceder a
matarlos. En este caso os presento una herramienta que facilitara mucho mas la visualización y
control de los procesos.

6.1. HTop

HTop es un visor de procesos con interfaz basada en ncurses que permite gestionar procesos.
Entre las grandes ventajas que nos ofrece está el monitoreo del sistema mostrando el estado
de la memoria RAM, la Swap y el consumo de CPU.

Instalación:


# aptitude install htop


Para la ejecución simplemente lo invocamos por su nombre:


$ htop


Puede ser ejecutado por cualquier usuario y dependiendo de los privilegios este sobre los
procesos que se están ejecutando en el sistema, podrá o no ejecutar tareas como terminar o
matar estos procesos.

La vista de la aplicación:
Atajos de teclado ó comandos para HTop:




   •   F1: Invoca la ayuda




   •   F2: Opciones de configuración




   •   F3: Buscar




   •   F4: Cambiar orden
•   F5: Mostrar árbol de procesos




   •   F6: Ordenar utilizando un parametro especifico




   •   F7: Aumenta el valor de asignación del proceso




   •   F8: Disminuye el valor de asignación del proceso




   •   F9: Enviar una señal a un proceso (Kill)




Para más detalles se recomienda leer el manual:


$ man htop



7 Consultando el estado del tiempo

En algunos entornos de escritorio tenemos aplicaciones que nos dicen el estado actual del
tiempo. En la consola también:

7.1 Weather-util
Weather-util es una aplicación muy simple, para consultar el estado del tiempo en cualquier
ciudad del mundo.

Instalación

Ejecutamos como root en una consola:


#aptitude (o apt-get) install weather-util


Para ejecutarlo, escribimos:


weather -i código_de_la_ciudad


Para obtener el código de la ciudad, tenemos que buscarlo en esta página Ahí, en la parte de
abajo, veremos una opción que dice: "Display all stations in a country" ("Mostrar todas las
estaciones en un país") y ahí buscar el país que nos interese.

Si queremos ampliar la información mostrada en pantalla por weather, tenemos que agregar el
parámetro: -v

También nos da la posibilidad de obtener un pronóstico con el parámetro -f, pero eso
solamente está disponible para ciudades de Estados Unidos

Podemos definir aliases en el archivo $HOME/.weatherrc de la siguiente forma:


[alias]
City = Ciudad
Forecast = True/False (para el pronóstico del tiempo)
ID = código_de_la_ciudad
Verbose = 1/0 (verdadero/falso) (con esto le indicamos si queremos usar o nó
el parámetro -v)


Y luego ejecutamos el programa pasándole el alias como parámetro.

Ejemplos

Este es mi $HOME/.weatherrc:


[Montevideo]
City = Montevideo
Forecast = False
ID = SUMU (este es el código de una de las estaciones meteorológicas de
Montevideo)
verbose = 1


Salida del programa ejecutando weather Montevideo (que, según mis definiciones en
$HOME/.weatherrc, es equivalente a ejecutar weather -i sumu -v):


Carrasco, Uruguay (SUMU) 34-50S 056-00W 32M
Mar 01, 2010 - 05:00 PM EST / 2010.03.01 2200 UTC
Wind: from the SE (130 degrees) at 10 MPH (9 KT):0
Visibility: greater than 7 mile(s):0
Sky conditions: mostly clear
Temperature: 73 F (23 C)
Dew Point: 68 F (20 C)
Relative Humidity: 83%
Pressure (altimeter): 30.00 in. Hg (1016 hPa)
ob: SUMU 012200Z 13009KT 9999 FEW030 23/20 Q1016 NOSIG
cycle: 22



8. Montar unidades externas

Dentro de la consola Debian también es posible montar nuestros dispositivos de
almacenamiento externo haciendo uso del comando mount. Pero a la larga el montaje manual
puede resultar engorroso y repetitivo. Así el usuario puede echar de menos el montaje
automático que hacen algunos entornos de escritorio populares en el modo gráfico, como
GNOME o KDE.

Por fortuna tenemos esa opción disponible en nuestra línea de comandos. Para poder hacer
uso de la misma, debemos de tener instalado con anterioridad los paquetes usbmount y
autofs.


apt-get install usbmount
 apt-get install autofs


A continuación se deberá de editar el archivo usbmount.conf para habilitar el montaje
automático.


emacs /etc/usbmount/usbmount.conf


Haciendo las siguientes modificaciones.


FILESYSTEMS=”vfat ext2 ext3″
MOUNTOPTIONS=”sync,noexec,nodev,noatime,users,umask=000″


Guardamos los cambios y reiniciamos el ordenador, ahora al conectar un dispositivo usb este
se montará automáticamente dentro de la carpeta /media/usb*.

9. Redes sociales

9.1 Twidgwe

Twidge es un cliente de consola para las redes sociales Twitter e identi.ca; con el podremos
realizar una serie de tareas comunes en estos sitios de "microblogging" sin necesidad de abrir
un navegador web.

Actualmente se encuentra en los repositorios de testing/unstable, por lo que instalarlo no
implica más que:


apt-get install twidge
Obviamente, necesitaremos una cuenta en cualquiera de los dos servicios para poder utilizarlo.

Antes de ejecutarlo por primera vez, es necesario configurarlo. Para ello:


twidge setup


Este comando nos guiará de forma muy clara en la configuración de la aplicación; nos solicitará
usuario y contraseña y, en el caso de Twitter, se genera una url a la que debemos acceder
para "decirle" a Twitter que permitimos a twidge acceder a nuestros datos mediante el API.

A continuación, ya podremos utilizar twidge. Si lo ejecutamos, nos dirá esto:


usuario@host ~ $ twidge
Invalid command name help
Usage: twidge [global-options] command [command-options]

Available global-options are:

  -d         --debug            Enable debugging
  -c FILE    --config=FILE      Use specified config file
             --help             Display this help

Run "twidge lscommands" for a list of available commands.
Run "twidge command --help" for help on a particular command.

This is Twidge, version 1.0.5.         Copyright (c) 2008-2010 John Goerzen


Para saber qué es lo que podemos hacer, ejecutamos:


twidge lscommands


Este comando nos muestra todos los comandos disponibles de este modo:


All available commands:
Name                 Description
-------------------- -------------------------------------------------------
dmsend               Send direct message
block                Start blocking someone
follow               Start following someone
lsarchive            List recent status updates you posted yourself
lscommands           Display a list of all available commands
lsdm                 List recent direct messages to you
lsdmarchive          List recent direct messages you sent
lsblocking           List people you are blocking
lsfollowers          List people that follow you
lsfollowing          List people you are following
lsrecent             List recent updates from those you follow
lsreplies            List recent replies to you
lsrt                 List recent retweets from those you follow
lsrtarchive          List recent retweets you made yourself
lsrtreplies          List others' retweets of your statuses
setup                Interactively configure twidge for first-time use
unblock              Stop blocking someone
unfollow             Stop following someone
update               Update your status
‹ Localizar y eliminar líneas que coincidan con una expresión regular
específicaarribaAdministración del Sistema ›




   Archivos configuración de Bash
Archivos Configuración de Bash

Solo hablaré de bash, aunque me refiera a ella como shell o consola, la configuración de
otras shells puede ser similar o igual.

Ficheros inicialización de una sesión de login shell. p.e. ttys

/etc/profile

El primero en leerse automáticamente por bash cuando este es invocado en modo login (P.e.
las ttys).
En este fichero se configuran muchas de las variables de bash (PATH, USER, MAIL,
HOSTNAME ...) y otros valores como umask. Resumiendo,en él se incluyen variables generales
del sistema.
Pero como este fichero es leido por muchas shells, no solo bash, es mejor poner las
configuraciones de esta en otros archivos específicos.

~/.bash_profile
El segundo en orden en ser leído por bash. Normalmente poco se mete en este archivo, lo mas
importante es que indica a bash que lea otros archivos como ~/.bash_login, ~/.profile,
~/.bash_logout

~/.bash_login
Normalmente el tercero en ser leído, si existe indica los comandos que correrán al momento de
logearse, normalmente, son cosas como indicar la fecha, el nº de usuarios conectados ...

~/.profile
Equivalente a /etc/profile pero especifico de cada usuario, este archivo es leído por mas shells,
aparte de bash. Puede ser leído por shells nologin si estas arrancan con la invocación a sh.

~/.bash_logout
Fichero con opciones para el momento del cierre de un login shell, lo mas habitual es que se
incluya el comando clear y nada mas.

Ficheros inicialización para nologin shells

/etc/bash.bashrc
Bash lee y ejecuta las ordenes de este fichero. En el se incluyen variables generales del
sistema, es como un /etc/profile pero que carga cada vez que arrancamos una shell en X o
cualquier instancia de bash nologin, no es necesario reiniciar para que la shell acepte los
cambios. Su uso no es habitual.
también es leído cuando se ejecuta bash a través de un demonio de consola remota (p.e. rshd)

/etc/bashrc
Puede cumplir las mismas funciones que /etc/profile. Si existe, se leerá a continuación de
/etc/bash.bashrc, solo que este es leído únicamente por bash, excluyendo otras shells, por lo
que si en nuestro sistema usamos varios tipos, podríamos dedicar este fichero para configurar
bash.

~/.bashrc
Aquí es donde habitualmente se establece el prompt y los alias. Es un fichero para uso
individual de cada usuario de consolas que no necesitan login, sin embargo es muy común que
este archivo sea invocado desde ~/.profile por lo que también afectará a consolas login. Si
queremos modificaciones individuales, este es el archivo a modificar, con preferencia a todos
los anteriores.

Nota: entiendasé por nologin shell a toda shell a la cual se accede sin necesidad de ingresar
usuario y contraseña como ser xterm, konsole, gnome-terminal o bien la ejecución de una nueva
instancia del shell sobre una shell ya activa (p.e. ejecutar $ bash). Es también un caso de
nologin shell el escalar/degradar privilegios mediante $ su.
En la practica podrá identificar un nologin shell sabiendo que no es posible salir de ellas
mediante logout.

Otros archivos relacionados

Existen otros muchos archivos que se puede utilizar para configurar conductas de la shell
Bash.
Pero son de raro uso. Como ejemplo:

~/.bash_aliases
Fichero al que añadir como su nombre indica, alias. No es en principio necesario, ya que
.bashrc cumple esa función. Solo en casos muy raros puede interesar separar esos alias, de
los que usamos habitualmente y "alimentar" bash con: source .bash_aliases.

~/.bash_history
Historial de comandos.

Referencias:
man bash

                         ‹ Línea de ComandosarribaAutologin en Debian ›
Localizar y eliminar líneas que coincidan con
una expresión regular específica
Script cuyo objetivo no es otro que eliminar de un fichero todas aquellas líneas que contengan
una cadena determinada. Para ello uso la muy potente y siempre buena amiga mía herramienta
sed... La sintaxis, para este objetivo sería:

sed '/expresión regular o cadena/d' fichero

Si, solo eso, Es simplemente decirle a sed que encuentre esa y la sustituya por... Nada! Y
bueno, la "d" al final lo que hace es eliminar esa línea en blanco...

Para eliminar las trazas, digamos, de una IP 192.168.1.1 del fichero access.log, quedaría algo
así:

sed '/192.168.1.1/d' /var/log/squid3/access.log

Y voilá! Listo! Claro que esto lo que hará será devolvernos en la salida estándard el contenido
de dicho fichero ya sin las líneas que alguna vez contuvieron la IP 192.168.1.1... Para guardar
esto debemos enviar dicha salida a un fichero temporal y luego renombrarlo al fichero original...
El proceso completo quedaría así:

sed '/192.168.1.1/d' /var/log/squid3/access.log > foo
mv foo /var/log/squid3/access.log

Y listo

Enjoy it !

              ‹ Lista de comandos de GNU/Linux (III)arribaViviendo en Consola ›
Comprobar configuración
ifconfig

Si no se pasan argumentos, muestra el estado de los interfaces activos.
Si se pasa un sólo argumento de interfaz, muestra sólamente el estado de ese interfaz.
Con el argumento -a, muestra el estado de todos los interfaces, incluso de aquellos que no
están activos.
De otros modos, configura un interfaz.

Parada e inicio de los servicios de red
La red se configura durante el arranque con el script /etc/init.d/networking, que activa
todas las interfaces de red que aparecen en las secciones auto de /etc/network/interfaces.

Mediante la línea de comando podemos iniciar, parar o reiniciar los sevicios de red, con
los siguientes comandos:
sudo /etc/init.d/networking start
sudo /etc/init.d/networking stop
sudo /etc/init.d/networking restart

Siempre que modificamos el fichero de interfaces, debemos de reiniciar los servicios de
red.

(También se disponemos de los comandos ifup e ifdown)

El fichero /etc/network/interfaces
Contiene la configuración de las interfaces de red, cada interfaz de red a configurar
aparece en una sección.

Cómo se configuran las interfaces de red más habituales:

Loopback o interfaz de retorno: dirección IP 127.0.0.1.
El archivo /etc/network/interfaces incluirá la sección:
auto lo
       iface lo inet loopback

Configuración DHCP de la tarjeta de red
Si desea configurar su tarjeta de red para obtener una dirección DHCP.
# The primary network interface
auto eth0
iface eth0 inet dhcp
Después de introducir toda la información y guardar el archivo, se necesita reiniciar los
servicios de red.

Configurar manualmente la dirección IP de la tarjeta de red
Si desea configurar la dirección IP editamos el archivo /etc/network/interfaces y tecleamos
los datos de nuestro direccionamiento.
# The primary network interface
auto eth0
iface eth0 inet static
       address 192.168.208.7
       netmask 255.255.255.0
       network 192.168.208.0
       broadcast 192.168.208.255
       gateway 192.168.208.208

Después de introducir toda la información y guardar el archivo, reiniciar los servicios de
red.

Los parámetros son:

Static (IP estática): Si en la LAN hay un servidor DHCP y tenemos IP dinámica,
          pondremos dhcp.

address (dirección IP de la máquina en la LAN): cada interfaz de red conectada a una red
          IP es identificada por una IP única de cuatro bytes (32 bits). El rango de IPs
          reservadas para LAN es de 192.168.0.0 a 192.168.255.255ç

netmask (máscara de red de la LAN): es un número que establece qué parte de la IP de un
         host corresponde a la red y qué parte corresponde a la máquina. También nos
         indica la cantidad máxima de equipos que podemos tener en nuestra red.

network (dirección IP de la LAN): es la parte de la IP de la máquina común a todas las
         máquinas de la red.

broadcast (dirección de difusión): es la IP a la que se mandan los paquetes que deben
         recibir todas las máquinas de la LAN.

gateway (dirección de pasarela o puerta de enlace): es la IP de la máquina de nuestra LAN
         a través de la cual salimos hacia el exterior.

Un gateway es una máquina que tiene dos intefaces de red (una tarjeta conectada a nuestra
LAN y la otra conectada a una red exterior), cada una de ellas con una IP, la que le
corresponda en esa red. La IP del gateway suele ser la primera IP disponible (192.168.1.1)
o la última (192.168.1.254).
Establecer el nombre de host del sistema
Para ver el nombre del host tecleamos:
hostname

Podemos establecer el nombre del host tecleando:
sudo /bin/hostname NUEVO_NOMBRE

Cuando su sistema arranca automáticamente se lee el nombre de host del archivo
/etc/hostname

Configuración de DNS
Para hacer que el sistema consulte con uno o varios servidores de nombres, sólo tiene que
añadir sus direcciones en /etc/resolv.conf.

Por ejemplo, una máquina que debe realizar búsquedas desde el servidor DNS con la
dirección IP 192.168.1.200 el archivo resolv.conf tendra lo siguiente:
nameserver 192.168.1.200

Podemos añadir varios nameserver.
F a m i l i a r i z á n d on o s c o n L i n u x
         1. Historia ........................................................................................................... 3
             Antecedentes:.....................................................................................................................3
             Nacimiento:.........................................................................................................................3
             Expansión de Unix:.............................................................................................................3
             Evolución: ...........................................................................................................................4
             La G.N.U.............................................................................................................................5
             Distribuciones de Linux. .....................................................................................................6
         2. Generalidades de la gestión del S.O. ........................................................... 6
         3. Características ............................................................................................... 7
         4. Estructura del S.O. UNIX ............................................................................... 8
             Kernel o Núcleo ..................................................................................................................8
             Dispositivos ........................................................................................................................8
             Utilidades ............................................................................................................................8
             SHELL o Caparazón...........................................................................................................8
         5. Primera Aproximación................................................................................... 9
             Antes de entrar al Sistema: ................................................................................................9
             Escribir algunos comandos para tomar contacto. ..............................................................9
         6. Algunas utilidades para experimentar. ...................................................... 10
             Consultar el manual..........................................................................................................10
             Hacer cálculos ..................................................................................................................10
             Mirar el almanaque ...........................................................................................................11
         7. Conceptos Básicos del Sistema de Ficheros ............................................ 12
             Distribución de la información en disco: ...........................................................................12
             Inodos ...............................................................................................................................12
             Los ficheros pueden ser esencialmente de tres tipos: .....................................................13
             Trayectoria o pathname:...................................................................................................16
             Nombres de ficheros y Metacaracteres............................................................................16
         8. Trabajo del Usuario con Ficheros Ordinarios. .......................................... 18
             Formato de las órdenes....................................................................................................18
             Crear ficheros ...................................................................................................................18
             Listar nombres e informacion sobre ficheros....................................................................18
             Copiar, Mover, Enlazar y Borrar Ficheros. .......................................................................19
             Permisos, Propietario y Grupo. ........................................................................................21



El Sistema Operativo Unix - Linux                                                                                                               1
9. Operaciones Con Ficheros Directorios...................................................... 27
         10. Flujo De Información. .................................................................................. 29
             Entrada y salidas estándar (std).......................................................................................29
             Redireccionamiento:.........................................................................................................29
             Tuberías (pipes): ..............................................................................................................30
             Filtros para: Contar, Ordenar y Eliminar Repetidos..........................................................31
             Filtros para ver que hay en los ficheros............................................................................34
             Filtro para cambiar caracteres..........................................................................................35
             Buscar en ficheros. Familia grep. .....................................................................................37
             Comparacion de Ficheros. ...............................................................................................38
             Cortar y Pegar Ficheros. ..................................................................................................39
         11. Búsqueda de ficheros. ................................................................................ 41
         12. Editores: ....................................................................................................... 44
             Editor VIsual. Generalidades. ...........................................................................................44
             Configuración ...................................................................................................................46
             Búsquedas y reemplazos. ................................................................................................48
             Los Búfers del VI ..............................................................................................................49
         13. Comunicación entre Usuarios .................................................................... 51
             finger.................................................................................................................................51
             who ...................................................................................................................................51
             w .......................................................................................................................................51
             write ..................................................................................................................................52
             wall....................................................................................................................................52
             Mensaje del día. ...............................................................................................................53
             Mensaje de preentrada.....................................................................................................53
             mail ...................................................................................................................................53




El Sistema Operativo Unix - Linux                                                                                                                  2
Historia

         Antecedentes:
    El SO Multics se utilizó durante algún tiempo en los laboratorios Bell.
     En Europa se había desarrollado el sistema de acceso multiple de Cambridge (The Cambridge
Multiple Access System).
    También se empleó durante algún tiempo el CTSS (sistema de tiempo compartido compatible).
    Los desarrolladores de Unix aprovecharon este trabajo realizado con estos y otros sistemas
operativos, para combinar las mejores características de cada uno.

         Nacimiento:
    El UNIX surgió en 1964-66 cuando Ken Thompson intentaba utilizar un programa de un
ordenador grande, que funcionaba con el SO Multics, en otro ordenador llamado PDP-7. Para ello
escribió un sistema operativo nuevo llamado UNIX.
    A él se unió Dennis Ritchie y el UNIX se comenzó a utilizar en los laboratorios Bell.
     Pronto se adaptó a otros ordenadores y tuvo gran aceptación en el ambiente universitario, del
cual recibió un gran impulso, en especial de la Universidad de Berkeley en California.
    En un principio fue escrito en Ensamblador, pero el hecho de que se pudiese adaptar a
muchos tipos de ordenadores (portabilidad), se debe a que se reescribió casi en su totalidad en
lenguaje C, lenguaje de nivel medio desarrollado por Dennis Ritchie modificando otro ya existente
llamado lenguaje B.
    El nacimiento de UNIX y el lenguaje C se hizo a la par y su posterior desarrollo continuó
paralelo.

         Expansión de Unix:
     El sistema operativo Unix ha estado ejecutándose en ordenadores más de 40 años. En un
principio se ejecutaba en mainframes y miniordenadores, aunque su principal plataforma de
desarrollo han sido las estaciones de trabajo RISC. En la actualidad el acercamiento de los PC,s a
las estaciones de trabajo ha hecho de las plataformas Intel una buena base para utilizar Unix.
    Debido a la gran portabilidad que ofrece el lenguaje    C, no pasó mucho tiempo antes de que
creasen versiones destinadas a otros procesadores.
     La evolución de Unix comenzó a complicarse cuando Unix se escindió para satisfacer a
diferentes plataformas hardware. Por un lado se obtuvo Xenix, de Microsoft, el primero en
ejecutarse en ordenadores Intel. La versión BSD, desarrollada en la Universidad de California, en
Berkeley, encontró alojamiento en multitud de miniordenadores de alta potencia. Unix 2.0, el
predecesor del presente System V Unix de AT&T, fue el que más atención acaparó y es el estándar
de hoy en día.
    El diagrama muestra un árbol genealógico de Unix desde 1969 hasta nuestros días. Obsérvese
cómo Unix se divide en varias versiones. Además, es importante destacar de qué forma se
combinaron diversas versiones con el fin de obtener nuevos enfoques del sistema operativo. El
nacimiento de híbridos de diferentes versiones parece la tendencia del momento. Algunos de los
elementos más destacables de esta numerosa familia son AIX, el sistema operativo IBM RS/6000,
Solaris de SunSoft y Mach.




    El árbol genealógico de Unix.:

    El Sistema Operativo Unix-Linux                 Comandos Básicos                        3
Evolución:
    Cuando Unix era joven (versión 6), su código fuente se encontraba por todas partes, con
autorización de AT&T, y se estudiaba frecuentemente en muchas universidades, de las cuales
había recibido y recibía un gran impulso.
    Pero AT&T, en la versión 7 (1979), comprendió que Unix era un valioso producto comercial; y
prohibió el estudio y distribución del código fuente, para evitar poner en peligro su condición de
secreto comercial.
    Para remediar la situación y especialmente con fines educativos, en 1983, Andy Tannembaum
desarrolló un SO nuevo en cuanto a código, pero compatible con Unix en cuanto a su funcionalidad,
evadiendo los problemas legales para su estudio. Lo llamó Minix de Mini-Unix. Finalmente su
creador cedió todos los derechos sobre Minix a una empresa que comenzó a cobrar por licencia.
     A principios de la decada de los 90, un estudiante de informática se pone a trabajar en una
variante de Unix llamada Linux, con la idea de que estubiese enmarcado dentro del proyecto GNU.
El padre de la criatura es Linus Benedict Torvalds, nacido en Helsinki en 1969.
    El 5 de octubre de 1991 Linus dio a conocer la primera versión oficial, que podía ejecutar el
bash (shell de GNU) y el compilador de C. Lo puso en un grupo de noticias con el siguiente
mensaje:


    El Sistema Operativo Unix-Linux               Comandos Básicos                      4
”¿Suspiráis por recordar aquellos días del Minix-1.1, cuando los hombres eran
      hombres y escribían sus propios drivers? ¿Os sentís sin ningún proyecto interesante y os
      gustaría tener un verdadero SO, que pudierais modificar a placer?
              ¿Os resulta frustrante el tener sólo a Minix? Entonces, este artículo es para vosotros.
               Como dije hace un mes, estoy trabajando en una versión gratuita de algo parecido a
      Minix para ordenadores AT-386. He alcanzado la etapa en la que puede ser utilizable y voy a
      poner las fuentes para su distribución. Es sólo la versión 0.02 ... pero he conseguido ejecutar
      en el bash, gcc, gnu-make, gnu-sed, compress, etc.”
    Tras esta versión y el apoyo de voluntarios “enganchados” a Internet, no ha dejado de
evolucionar y mejorarse:
        1992 Linus añadió Linux al proyecto GNU.
        Abril de 1992, aparece la primera versión capaz de ejecutar X.
        Abril de 1994, primera versión completa de Linux, la 1.0.
        Diciembre de 1996 aparece la versión 2.0.
        Para comprobar la versión actual http://www.kernel.org
    Linux ha sido registrado bajo los términos de la Licencia Pública General GNU (GNU General
Public License) o GPL. Esta licencia, escrita por la Free Software Foundation (FSF), está diseñada
para evitar que alguna persona restrinja la distribución de software. En pocas palabras, dice que
aunque Ud. cobre a alguien por entregarle una copia, no podrá impedir que ese alguien la regale.
También significa que debe estar disponible el código fuente. Esto es útil para los programadores.
Cualquiera puede modificar Linux y aún distribuir sus modificaciones, siempre que mantenga el
código bajo la misma licencia.

         La G.N.U.
     Linux está regido por lo que se conoce como la Licencia Pública General de GNU, o GPL,
General Public License. La GPL fue desarrollada para el proyecto GNU por la Free Software
Foundation, que podemos traducir como "Fundación por el Software Gratuito". La licencia hace una
serie de previsiones sobre la distribución y modificación del "software gratis". "Gratis" en este
sentido se refiere a libertad, y no sólo al coste. La GPL puede ser interpretada de distintas formas,
y esperamos que este resumen ayude a entenderla y cómo afecta a Linux. Se puede encontrar una
copia completa de la Licencia en Internet o en cualquier libro de Linux.
     Originalmente, Linus Torvalds lanzó Linux bajo una licencia más restrictiva que la GPL, que
permitía que el software fuera libremente distribuido y modificado, pero prohibía su uso para ganar
dinero. Sin embargo, la GPL autoriza que la gente venda su software, aunque no le permite
restringir el derecho que su comprador tiene a copiarlo y venderlo a su vez.
     En primer lugar, hay que aclarar que el "software gratis" de la GPL no es software de dominio
público. El software de dominio público carece de copyright y pertenece literalmente al público. El
software regido por la GPL sí tiene el copyright de su autor o autores. Esto significa que está
protegido por las leyes internacionales del copyright y que el autor del software está declarado
legalmente. No sólo porque un programa sea de libre distribución puede considerársele del dominio
público.
     El software regido por la GPL tampoco es "shareware". Por lo general, el "shareware" es
propiedad del autor, y exige a los usuarios que le paguen cierta cantidad por utilizarlo después de la
distribución. Sin embargo, el software que se rige por la GPL puede ser distribuido y usado sin
pagar a nadie.
    La GPL permite a los usuarios modificar el software y redistribuirlo. Sin embargo,
cualquier trabajo derivado de un programa GPL se regirá también por la GPL. En otras
palabras, una compañía nunca puede tomar Linux, modificarlo y venderlo bajo una licencia


    El Sistema Operativo Unix-Linux                    Comandos Básicos                           5
restringida. Si un software se deriva de Linux, éste deberá regirse por la GPL también.
     La GPL permite distribuir y usar el software sin cargo alguno. Sin embargo, también permite
que una persona u organización gane dinero distribuyendo el software. Sin embargo, cuando se
venden programas GPL, el distribuidor no puede poner ninguna restricción a la redistribución. Esto
es, si compras un programa GPL, puedes a su vez redistribuirlo gratis o cobrando una cantidad.
    Esto puede parecer contradictorio. ¿Por qué vender software cuando la GPL especifica que
puede obtenerse gratis? Por ejemplo, supongamos que una empresa decide reunir una gran
cantidad de programas GPL en un CD-ROM y venderlo. La empresa necesitará cobrar por el hecho
de haber producido el CD, y asimismo querrá ganar dinero. Esto está permitido por la GPL.
     Las organizaciones que vendan el software regido por la GPL deben tener en cuenta algunas
restricciones. En primer lugar, no pueden restringir ningún derecho al comprador del programa.
Esto significa que si compramos un CD-ROM con programas GPL, podremos copiar ese CD y
revenderlo sin ninguna restricción. En segundo lugar, los distribuidores deben hacer saber que el
software se rige por la GPL. En tercer lugar, el vendedor debe proporcionar, sin coste
adicional, el código fuente del software a distribuir. Esto permite a cualquiera adquirir el software
y modificarlo a placer.
     Permitir a una empresa distribuir y vender programas que son gratis es bueno. No todo el
mundo tiene acceso a Internet para llevarse los programas, como Linux, gratis. La GPL permite a
las empresas vender y distribuir programas a esas personas que no pueden acceder al software
con un coste bajo. Por ejemplo, muchas empresas venden Linux CD-ROM por correo, y hacen
negocio de esas ventas. Los desarrolladores de Linux pueden no tener constancia de estos
negocios. Por ejemplo, Linus sabe que ciertas compañías venden Linux, y él no va a cobrar nada
por esas ventas.

         Distribuciones de Linux.
    Es imprescindible seleccionar una distribución que se adapte a las necesidades de cada uno
para poder instalar, configurar y administrar un sistema Linux con éxito.
     Hace años, cuando Linux empezó a distribuirse por Internet, instalar Linux consistía en bajarse
de Internet todos los archivos necesarios a unos disquetes. En esos tiempos la instalación podía
llegar a ser un laborioso proceso, haciendo que muchos usuarios frustrados acabasen por rendirse.
Por ello, programadores de todo el mundo se unieron para crear distribuciones que incorporasen el
sistema operativo y programas que facilitaran la instalación, además de los paquetes conteniendo
programas de todo tipo. De esta forma la instalación se reducía a seguir unos pasos, dando la
posibilidad a los usuarios con pocos conocimientos de poder instalar un sistema operativo de este
tipo con un menor esfuerzo.
    En este momento hay un buen número de distribuciones en las que poder elegir, pero cada
una de ellas tiene sus pros y sus contras.

        Generalidades de la gestión del S.O.
    Está escrito en C, en lugar de enamblador, como la mayoría de los sistemas, lo que le permite
una completa adaptación a los diferenes ordenadores.
    Como otros SSOO consta de dos partes:
    1. El núcleo, que se encarga de la gestión de la memoria, planificación de la CPU y el Sistema
        de ficheros.
    2. Los programas del sistema, que facilitan la compilación, ejecución y manipulación de
        ficheros.
    La CPU está planificada de forma que favorece los procesos interactivos.
   La planificación de los procesos se hace mediante un algoritmo de prioridades, de forma que a
números mayores corresponde una menor prioridad y procesos del sistema poseen prioridad

    El Sistema Operativo Unix-Linux                Comandos Básicos                       6
negativa. Para los procesos que utilizan mucho la CPU, se les concede tiempo según Round-Robin.
    La espera de un proceso indefinidamente, se resuelve mediante el cambio de prioridad por
envejecimiento de los procesos.
    Existen dos tendencias en la planificación de la memoria, dependiendo de las diferentes
versiones de Unix:
        a) En unas se utiliza el intercambio (swapping) entre los diferentes procesos. Los
            procesos víctimas se eligen: por estar ociosos, llevar mucho tiempo en memoria o ser
            grandes. Y se cargan en memoria si llevan mucho tiempo fuera o son pequeños.
        b) En las versiones de Berkeley y Linux, se utiliza el sistema de memoria virtual con
            paginación bajo solicitud.


    El sistema de entrada y salida maneja normalmente dos tipos de dispositivos:
    1. De bloque, como discos y cintas.
    2. Y de caracteres, terminales e impresoras.
    Los ficheros se organizan en directorios estructurados en árbol y se manejan mediante bloques
de datos.
    Linux tiene soporte para diferentes sistemas de archivos, algunos son sistemas de archivos de
redes especializados o son sistemas de archivos desarrollados para otros sistemas operativos. Una
sorprendente cantidad de ellos pueden ser utilizados como sistema de archivos nativo en Linux:
ext2, ext3, ext4, ReiserFS, XFS, y Journaled File System (JFS).
    La cuarta extensión del sistema de archivos (ext4fs) existe porque algunos desarrolladores
querían incorporar nuevas y mejoradas características al ext3. La mejora más llamativa de ext4
está en el soporte de archivos y sistemas de archivos de gran tamaño.

       Características
    Multitarea: Un usuario puede ejecutar varios programas (procesos) a la vez, sin tener que
detener una aplicación para ejecutar otra.
    Multiusuario: Varios usuarios pueden acceder a las aplicaciones y a los recursos en el mismo
PC y al mismo tiempo. Con la impresión para cada uno de ellos de estar trabajando solo.
    Tiempo compartido: Es la forma de conseguir las características anteriores, y se basa en que
en una fracción de tiempo muy pequeña, la CPU atiende a varios usuarios. A cada proceso se le
dedica por turno una unidad de tiempo llamada “cuanto”.
    La memoria: es aprovechada al máximo, para acceder al disco el menor número de veces,
consiguiendo mayor rapidez.
     Recuperación automática del sistema de ficheros después de una caída del sistema, o
interrupción eléctrica.
    Seguridad de acceso a la información de cada usuario, mediante una serie de permisos que el
propietario puede conceder o denegar sobre cada uno de sus ficheros.
    Multiplataforma: Corre en muchos PCs distintos (Intel 386/486/Pentium y compatibles,...).
Facilita la portabilidad del software, entre plataformas, al menos a nivel de código fuente.
    Shell programables, lo que le hace ser un SO muy flexible.




    El Sistema Operativo Unix-Linux               Comandos Básicos                     7
Estructura del S.O. UNIX
     Es un SO jerárquico, ya que se organiza en una serie de estratos, cada uno de los cuales
interactúa con su entorno a través de interfaces bien definidos.

                                     SHELL
                               Utilidades


                               Hardware

                                  Kernel
                               Dispoditivos




         Kernel o Núcleo
       Es el corazón del sistema, la parte más cerrada al usuario y más cercana al hardware.
Reside permanentemente en memoria. Su trabajo consiste en:
        o Planificar, coordinar y gestionar la ejecución de procesos.
        o Dar servicio al sistema, como entrada / salida y gestión de ficheros.
        o Manejar las operaciones dependientes del hardware, realizando las operaciones de
           más bajo nivel de manera que se oculten al usuario.

         Dispositivos
    Los ficheros de dispositivo son los intermediarios entre el SO y el dispositivo físico.

         Utilidades
    Estas órdenes también conocidas como herramientas, que van desde el compilador de C,
hasta el editor de texto, pueden utilizarse por separado o de forma conjunta para llevar a cabo
tareas útiles. Se invocan por su nombre a través del Shell.

         SHELL o Caparazón
    Es la parte que permite al usuario comunicarse con el sistema, también se le conoce como
"caparazón".
    Puede estudiarse desde dos puntos de vista:
        1.- Como intérprete de comandos, es un programa que siempre está en ejecución.
    -   Espera que introduzcamos una orden.
    -   Analiza la línea.
    -   Comprueba su corrección y los permisos.
    -   Y llama a ejecución al programa o programas necesarios.


       2.- Como lenguaje de programación: Combina, mediante estructuras de control grupos
de órdenes, estos ficheros se llaman procedimientos Shell, Shell Script o guiones Shell, además
posee sus propias sentencias. (se estudiarán más adelante)



    El Sistema Operativo Unix-Linux                  Comandos Básicos                         8
Existen varios tipos de SHELL diferentes:
     sh: Bourne Shell (Unix System V, Xenix). Los shell tipo Bourne toman su nombre a partir de su
inventor, Steven Bourne. Este fue el shell original de Unix, denominado sh; a partir de entonces, la
mayoría de los shells tienen un nombre con el sufijo sh para indicar que son extensiones de la idea
original.
      Está diseñado para usuarios experimentados, su prompt por defecto es el signo dólar ($).
Tiene capacidad para redireccionar entradas y salidas, interpretar metacaracteres, usar tuberías y
filtros, manejar variables y además posee su propio lenguaje de programación.
   Tradicionalmente, los shell Bourne se han utilizado para los scripts de shell por razones de
compatibilidad con el sh original
     rsh: Reduced Shell, es un subconjunto del anterior, contiene las órdenes básicas. No permite
el cambio de directorio ni el redireccionamiento.
    csh: C Shell (Berkeley), fue implementado por Bill Joy, los shells C han sido más comunes en
su aplicación interactiva. Es similar al sh, pero añade algunas características específicas para el
programador de C.
     Ksh: Korn Shell, desarrollado por David Korn de Bell Laboratories, incorpora la mayor parte de
las características del csh y conserva la sintaxis y características básicas del sh.
     Bash: Bourne Again Shell. Fue desarrollado en el marco GNU, y es el derivado más extendido
del Bourne Shell.
    Tcsh: Una versión de csh para Linux.
     En principio el Administrador del sistema adjudica un tipo de Shell a cada usuario, aunque este
puede cambiarse tecleando el nombre de otro Shell (si tiene permiso); se sale de un Shell pulsando
Ctrl + d.

        Primera Aproximación

         Antes de entrar al Sistema:
     Debe de tener creada una cuenta de usuario, la cual tendrá un nombre y que además puede
llevar asociada una palabra clave.
     Se podrá acceder al sistema mediante cualquier terminal que esté preparado, en cuyo caso
mostrará por pantalla: login:, esto quiere decir que está esperando a que le introduzcamos un
nombre de usuario. Una vez introducido y pulsado Return puede que nos pida una palabra clave
password: Pasados estos requisitos puede que aparezca algún mensaje y debajo el prompt del
Sistema.
    Para los usuarios habitualmente el prompt es sólo el signo dólar ($), pero en linux suele
aparecer por defecto: el nombre del usuario, el de la computadora y la trayectoria actual en el árbol
de directorios (el directorio de conexión se muestra como ~).

         Escribir algunos comandos para tomar contacto.
     Hay que tener en cuenta que el UNIX distingue entre mayúsculas y minúsculas.
     Se adelantan dos órdenes de gestión de ficheros, para crear un directorio “prueba”, en el que
se realizarán las primeras prácticas:

    mkdir nombre_dir
    Crea un nuevo directorio.

    cd nombre_dir
    Activa o se traslada al directorio indicado.

    El Sistema Operativo Unix-Linux                Comandos Básicos                       9
date
    Muestra la fecha actual.

    who
    Indica que usuarios están en ese momento conectados al Sistema.

    clear
    Borra la pantalla.

    echo mensaje
    Vuelve a escribir el mensaje.

   echo mensaje > fichero
   El signo mayor que (>), significa redirigir la salida o resultado de un comando. Guardaría el
mensaje dentro del fichero que hayamos indicado.

    ls
    Lista los nombre de los ficheros.

    cat fichero
    Visualizaría el contenido del fichero, aunque su principal función es concatenar ficheros.

    rm fichero
    Borra el fichero indicado.


    Cuando se desea terminar un programa antes de su fin normal debemos pulsar la tecla Supr
dos veces en Unix y Ctrl + C en Linux.

    Para salirnos del Sistema (modo comando) pulsamos las teclas Ctrl + d. (Unix) o exit


    1ª Práctica de familiarización con las órdenes anteriores.

         Algunas utilidades para experimentar.

          Consultar el manual
    man orden
    Nos explica la utilidad y el funcionamiento de la orden. Es un auténtico manual adaptado a
nuestro sistema en particular.

          Hacer cálculos
    bc
    Se puede emplear como una calculadora normal.
    Para separar los decimales emplea el punto (.).
    Admite cualquier nivel de paréntesis.
    Las operaciones son: + (suma), - (resta), * (multiplicación), / (división), % (módulo o resto), ^
(exponenciación).
    Tiene capacidad para asignar valores a variables utilizando el signo igual (=).
    Utiliza unas variables internas que rigen su trabajo, a las que les podemos cambiar su valor,

    El Sistema Operativo Unix-Linux                 Comandos Básicos                       10
como son:
             -   obase=nº base del sistema de numeración en el que mostrará los resultados.

             -   ibase=nº ídem para leer las entradas.

             -   scale=nº nº de dígitos decimales que se deben de tener en cuenta en un
                 cálculo, comprendido entre 0 y 99,

    Permite la creación de funciones, lo cual no se explicará por ahora; un ejemplo:
                 define a(x,y){
                             auto z
                             z = x * y
                             return(z)
                 }
        Se usaría: a(4, 7.8)

         Mirar el almanaque
    cal [[mes] año]
    Sin argumento nos muestra fecha, hora y despliega el mes actual, anterior y posterior.
    Con un solo nº del 0 al 9999 muestra todo el calendario del año correspondiente; y si le
especificamos mes y año sólo muestra ese mes.


   2ª Práctica de familiarización con las utilidades anteriores.




    El Sistema Operativo Unix-Linux                 Comandos Básicos                     11
Conceptos Básicos del Sistema de Ficheros

            Distribución de la información en disco:
    - Sector de arranque. Almacena un pequeño programa de inicialización, que a su vez pasa el
control a otro más grande o al mismo KERNEL. En los sistemas de ficheros que no poseen
arranque el primer bloque no se utiliza.
     - Superbloque también conocido como Cabecera del Sistema de Ficheros. Contiene datos
importantes sobre el resto de la distribución del disco, como es:
                       Bloques ocupados por los i-nodos: isize.
                       Bloque ocupados por los ficheros: fsize.
                       Puntero a la tabla de bloques disponibles.
     - Tabla de i-nodos. Se almacenan a partir del bloque 2 con una longitud de isize bloques; están
numerados secuencialmente con un tamaño fijo de 64 bytes en los que se almacena información
relativa a un fichero.
     - Bloques de ficheros. En ellos se almacena la información que contienen los ficheros (y otra
información necesaria como distintas tablas).
    - Area de swap

            Inodos
    Los ficheros son la unidad fundamental del Sistema de Ficheros Linux. Cada fichero al ser
grabado es asociado automáticamente y durante toda su vida a un inodo (nodo-i), este identifica
perfectamente al fichero asociado y contiene los siguientes datos del fichero al que identifica:
        TIPO: ordinario (-), directorio (d), especial (b) o (c), enlace simbólico (l)
        PROPIETARIO: usuario que creó el fichero.
        GRUPO: grupo al que pertenece el usuario.
        PERMISOS: pueden ser de lectura, escritura y ejecución para el propietario, su grupo y
el resto de los usuarios. Estos se pueden alterar según las necesidades de seguridad con el
comando chmod.
        NÚMERO DE ENLACES: un enlace es la unión entre un nombre de fichero y un inodo.
Un mismo fichero puede estar referenciado por otro nombre. Los enlaces se pueden crear con
la orden ln.
       TABLA DE PUNTEROS: es un vector con trece posiciones, cada una de las cuales
almacena un puntero, cuyo significado es:
        -     Los diez primeros punteros señalan a los diez primeros bloques de información del
              fichero.
        -     El décimoprimer puntero señala a otra tabla que contiene punteros, que a su vez
              apuntan a bloques de información.
        -     El décimosegundo puntero señala a otra tabla que contiene punteros, que a su vez
              apuntan a tablas de punteros, que apuntan a bloques de información.
        -     El décimotercer puntero señala a otra tabla de punteros, cada uno de los cuales
              apuntan a tablas de punteros, que a su vez apuntan a tablas de punteros, que
              apuntan a bloques de información.
        FECHA DE CREACION.
        FECHA DE LA ÚLTIMA MODIFICACION.
        FECHA DE LA ÚLTIMA UTILIZACION.

    El Sistema Operativo Unix-Linux                    Comandos Básicos                  12
Para comprobar el nº de inodo, usar la orden ls con la opción -i.

          Los ficheros pueden ser esencialmente de tres tipos:
    ORDINARIOS: lo que normalmente se entiende por ficheros, contienen texto, datos o
programas.
    ESPECIALES: corresponden a dispositivos físicos (hacen de interface entre el Sistema y el
dispositivo físico), sirven para que nos podamos comunicar con discos, impresoras, terminales y la
memoria del Sistema. Son llamados también ficheros especiales de dispositivos, y pueden ser de:
         o Bloques (b), disquete, partición del disco duro, disco duro entero,...
         o Caracteres (c), cinta magnética, puerto paralelo, puerto serie,...
    Esos ficheros se almacenan en el directorio /dev:
         o /dev/fd0 disquete de la primera disquetera (A: en Windows).
         o /dev/sda         primer disco duro (sin considerar particiones) (antes eran /dev/hda para
              discos IDE y /dev/sda para SCSI).
         o /dev/sda1 primera partición del primer disco.
         o /dev/sdb segundo disco duro.
         o /dev/sdc disco USB (se utiliza emulación SCSI).
         o /dev/sdc1 partición de un disco USB.
         o /dev/ttyS1 primera terminal de consola.
         o /dev/ttyS2 segunda terminal de consola.
         o /dev/lp0 primer puerto paralelo.
         o /dev/null cualquier dato enviado a este dispositivo desaparece.
         o /dev/pty pseudoterminales, proporcionan un "terminal" a sesiones remotas.
         o /dev/console consola del sistema, monitor conectado directamente a su sistema.
         o /dev/tty consolas virtuales del sistema.


    DIRECTORIOS:
    Con la orden cat fichero ¿Cómo accede el SO a los bloques de este fichero?.
     Los directorios son ficheros que contienen información sobre ficheros u otros directorios, esta
información es su nombre y número de inodo. Con el comando ls se pueden visualizar los nombres
de los ficheros contenidos en el directorio y otros datos.
    Linux utiliza la estructura de directorios en forma de árbol, para mantener la cohesión entre sus
ramas, cada directorio contiene otro llamado . (punto), que hace referencia a él mismo, y otro .. (dos
puntos), que hace referencia al su directorio padre.
    Para ver la información de los directorios . y .., utilizar la orden ls con la opción -a.
     Utilizar la orden ls -l, que nos muestra la mayor parte de las características de los ficheros y
directorios (tipo, permisos, enlaces, propietario, grupo, ocupación en bytes, fecha última actualización y
nombre del fichero).
    Distingue entre los tipos de ficheros, para ver ficheros de dispositivo en /dev.
    Observa los permisos de los ficheros ordinarios y de los directorios. ¿Son iguales?
    ¿A qué grupo perteneces?
    Estudiar el nº de enlaces de los directorios.
           a) Recién creado.
           b) Con distinto nº de subdirectorios.


    Ejemplo de estructura básica de un sistema Linux:


    El Sistema Operativo Unix-Linux                    Comandos Básicos                         13
/      Directorio raiz del sistema de ficheros. En algunos casos directorio home del
       administrador.


bin    Abreviatura de “binaries”. En este directorio se encuentran los órdenes básicas del SO. En
       /usr/bin también hay órdenes básicas, pero son menos esenciales.


boot Aquí están los ficheros binarios de arranque del sistema (vmlinuz)


dev    Contiene los ficheros especiales o de dispositivo (device drivers). Son usados para
       acceder a los dispositivos del sistema y recursos, como discos duros, módems,
       memoria, etc. Por ejemplo, de la misma forma que podemos leer datos de un fichero,
       podemos leerla desde la entrada del módem usando /dev/modem.


etc    En este directorio se encuentran las órdenes relacionadas directamente con la
       administración del sistema, así como los ficheros de datos asociados. Estos incluyen
       /etc/passwd (la base de datos de usuarios), /etc/rc (guiones de
       inicialización del sistema), etc.


home Por cada usuario cuelga de home un directorio que por defecto tendrá el mismo nombre
       que el del usuario. Ejemplo /home/user01. Estos a su vez dentro de su directorio pueden
       crear la estructura de ficheros y directorios que necesiten.


root   En algunos sistemas es el directorio de conexión (home) del administrador.


El Sistema Operativo Unix-Linux                Comandos Básicos                       14
lib    Directorio que contiene las librerías compartidas. Estas son comunes para todos los
       programas que las usan, en lugar de tener cada programa su copia.


proc No existe físicamente, es un SF virtual. Los ficheros que contiene residen realmente en
       memoria. En él podemos encontrar información sobre el sistema (procesos).


sbin   Contiene los programa utilizados en la inicialización del sistema y en la recuperación del
       mismo.


tmp    Contiene los ficheros temporales que el Sistema necesita crear para realizar
       determinados trabajos.


usr    Para almacenar otros directorios accesibles a los usuarios, tales como: /usr/lib, /usr/bin,
       /usr/share/man, /usr/share/doc. En algunos sistemas, de aquí cuelgan los directorios de
       los usuarios.
       Los directorios descritos arriba son esenciales para que el sistema esté operativo, pero
       la mayoría de las cosas que se encuentran en /usr son opcionales para el sistema. De
       cualquier forma, son estas cosas opcionales las que hacen que el sistema sea útil e
       interesante, contiene la mayoría de los paquetes grandes de programas y sus ficheros
       de configuración.
/usr/X11R6           Contiene el sistema X Window si lo instalamos. El sistema X Window es
       un entorno gráfico grande y potente el cual proporciona un gran número de utilidades y
       programas gráficos.
/usr/bin Es el almacén real de programas del sistema Unix. Contiene la mayoría de los
       programas que no se encuentran en otras partes como /bin.
/usr/etc Como /etc contiene diferentes ficheros de configuración y programas del sistema,
       /usr/etc contiene incluso más que el anterior. En general, los ficheros que se encuentran
       en /usr/etc/ no son esenciales para el sistema, a diferencia de los que se encuentran en
       /etc, que si lo son.
/usr/include          Contiene los ficheros de cabecera para el compilador de C. Estos ficheros
       (la mayoría de los cuales terminan en .h, de header) declaran estructuras de datos,
       subrutinas y constantes usados en la escritura de programas en C. Los ficheros que se
       encuentran en /usr/include/sys son generalmente usados en la programación de Unix a
       nivel de sistema.
/usr/include/g++      Contiene ficheros de cabecera para el compilador de C++ (muy parecido
       a /usr/include).
/usr/lib Contiene las librerías equivalentes stub y static a los ficheros encontrados en /lib.
       Además, varios programas guardan ficheros de configuración en /usr/lib.
/usr/local           En general, los programas que se encuentran en /usr/local son
       específicos de nuestro sistema, esto es, el directorio /usr/local difiere bastante entre
       sistemas Unix. Aquí encontraremos programas grandes como TEX (sistema de
       formateo de documentos) y Emacs (gran y potente editor), si los instalamos.
/usr/man             Este directorio contiene las páginas de manual.
/usr/src Contiene el código fuente (programas por compilar) de varios programas de nuestro

El Sistema Operativo Unix-Linux                 Comandos Básicos                       15
sistema. El más importante es /usr/src/linux, el cual contiene el código fuente del kernel
              de Linux.


    opt       Este es la raíz del subárbol que contiene los paquetes de aplicación específicos.


    var       Este contiene los directorios de todos los ficheros que cambian de tamaño o tienden a
              crecer, como /var/adm (ficheros de registro y contabilidad), /var/mail (ficheros de correo
              del usuario), /var/spool (ficheros que van a ser pasados a otro programa), /var/news
              (mensajes de interés común),...


    mnt o media De este cuelgan directorios para montar sistemas de ficheros sobre el Root File
              System. Por ejemplo /mnt/floppy, /mnt/cdrom,...


    lost+found (perdido+encontrado) Contiene ficheros que por algún problema no están enlazados
           al Sistema de Ficheros.
   Explorar la estructura de directorios.

             Trayectoria o pathname:
    Es el camino que hay que seguir dentro de la estructura arborescente de directorios para
encontrar un fichero o directorio.
    Vamos a distinguir dos tipos de trayectorias:
    1. Trayectoria absoluta es la que parte del directorio raíz (root).
    2. Trayectoria relativa es la que parte del directorio de trabajo.


    Referencias a directorios especiales:
         -   Directorio raíz (root) simbolizado con la barra de dividir.
         -   Directorio domicilio o casa (HOME), es el directorio que le corresponde al usuario
             dentro del directorio home o usr; Nos vamos a casa con cd.
         -   Directorio de trabajo, activo o en curso, es aquel en el que nos encontramos
             trabajando en un momento determinado, se representa por un punto (.). pwd nos
             informa del directorio actual.
         -   Directorio padre del directorio en curso, es el directorio del cual cuelga el directorio
             activo, se representa por dos puntos (..).

             Nombres de ficheros y Metacaracteres
    Linux admite nombres largos de hasta 255 caracteres (Unix originalmente hasta 14 caracteres)
normalmente incluyen caracteres alfanuméricos y el punto (.).
     En un directorio no puede haber dos ficheros con el mismo nombre, pero sí en directorios
diferentes.
    Cuando un nombre empieza por un punto se oculta a algunas órdenes.
     Dentro de los nombres de fichero se interpretan de forma especial los siguientes caracteres,
también llamados metacaracteres. Se usan especialmente para hacer referencia a un grupo de
ficheros:
     -       * Equivale a 0 o más caracteres.

    El Sistema Operativo Unix-Linux                     Comandos Básicos                      16
-   ? Equivale a un solo carácter.
     -   [caracteres] Equivale a cualquier carácter contenido dentro de los corchetes, sólo a
         uno. Se puede especificar un rango de caracteres con solo indicar el primero y el
         último separados por un guión (-). También se puede negar el conjunto de caracteres,
         para indicar cualquier carácter que no esté entre los corchetes, poniéndole delante el
         signo de admiración [!caracteres].
     -    Suprime el significado propio del metacarácter que vaya a continuación.
El proceso de sustitución de los metacaracteres, por los nombres de los ficheros que
correspandan se llama expansión de los metacaracteres, y es efectuado por el intérprete de
comandos, de esta forma los comandos u órdenes nunca ven los metacaracteres.


   Crear todos los ficheros necesarios para practicar con los metacaracteres, al menos con la orden
   ls.




    El Sistema Operativo Unix-Linux               Comandos Básicos                       17
Trabajo del Usuario con Ficheros Ordinarios.

          Formato de las órdenes
    orden [opción(es)] [argumento(s)]
   Siempre es obligatorio el nombre de la orden, teniendo en cuenta que Unix distingue entre
mayúsculas y minúsculas.
    Las opciones matizan la forma de trabajar la orden. Suelen ser un solo carácter, normalmente
precedido por un guión (-), si hay varias se pueden colocar juntas (sin mediar espacio) después de
un solo guión.
     Los argumentos nos indican con que va a trabajar la orden, suelen ser nombres de ficheros, de
directorios, usuarios, terminales, etc. Si hay que indicar varios se pueden utilizar los metacaracteres
o simplemente se separan con un espacio.
    Existen comandos “sucios”, que no responden a este formato.

          Crear ficheros
           Vacío:
    cat /dev/null > fichero
    > fichero
    Las dos órdenes tienen el mismo efecto, en la primera de ellas se emplea el dispositivo nulo.
           Con información tecleada por nosotros:
    cat > fichero
    cat -> fichero
    Esta orden nos permitirá introducir tantas líneas de texto como deseemos, al final de las cuales
pulsaremos ^d o ^c como señal de final de fichero, y se almacenarán en el fichero indicado.
           Con información procedente de cualquier otra orden
    Esta otra orden debe de producir una salida redireccionable.
    orden > fichero

          Listar nombres e informacion sobre ficheros.
    ls [opciones] [ficheros | directorio(s)]
     Sin ninguna opción ni argumento produce un listado de los nombres de los ficheros del
directorio activo en orden alfabético. Entre las opciones más interesantes contamos con:
        -l Imprime información detallada sobre el fichero: tipo, permisos, enlaces, propietario,
           grupo, ocupación en bytes, fecha de la última actualización y nombre del fichero.
        -n Igual que -l, pero del propietario y grupo no muestra su nombre, sino su número,
           llamados UserId y GroupId respectivamente.
        -i Muestra el nº de i-nodo de cada fichero.
        -a Indica a la orden que tenga en cuenta a todos los ficheros incluidos los ocultos.
        -d Para que nos muestre información del directorio y no de los ficheros que contiene el
           directorio.
        -t Los muestra ordenados por fecha de actualización, primero los más recientes.
        -r Invierte el orden de mostrar los ficheros.
        -R Recursividad.

    El Sistema Operativo Unix-Linux                   Comandos Básicos                      18
-F Pone una (/) después de cada directorio y un (*) después de cada ejecutable.
        La orden l es un alias de ls –la.
    Como argumentos se puede especificar: nombre(s) de fichero(s), de directorio(s) y utilizar los
metacaracteres.


    file fichero(s)
     Realiza una suposición sobre qué tipo de información almacena un fichero; así nos puede
indicar sí un fichero es de texto, ejecutable, directorio, un programa fuente, está comprimido ...
      Para ello revisa la primera parte del fichero en busca de palabras clave o números especiales
del linkador, también consulta los permisos de acceso. Sus resultados no siempre son correctos.


           Ojear la salida de órdenes o contenido de ficheros.
    orden | less
    less fichero(s)
    Dosifica la salida por pantalla, cuando el resultado no entra en ella.
    Posee una serie de comandos para poder desplazarnos por la salida.
    h.....................................Ayuda de less.
    q.....................................Para salir de less.
    j, Intro o flecha abajo .....Avanza línea.
    k o flecha arriba.............Retrocede línea.
    Nºj..................................Avanza Nº líneas.
    Nºk.................................Retrocede Nº líneas.
    z.....................................Avanza pantalla.
    w ....................................Retrocede pantalla.
    Barra espaciadora .........Avanza página.
    Ctrl + L...........................Refresca pantalla.

    Ejercicios:
    Ver más opciones de less y ls con man.
    Probar las distintas opciones y sus combinaciones.
    Seguir practicando con los metacaracteres.
    Ver el nº de enlaces de los directorios.
    Comprobar que los directorios enlazados tienen el mismo nº de inodo.

          Copiar, Mover, Enlazar y Borrar Ficheros.
           Copiar:
    cp [opc.] f_origen f_destino
        -i Pide confirmación antes de sobreescribir.
        -r Copia recursiva, incluyendo subdirectorios.
     Realiza duplicados de ficheros, en el mismo directorio con distinto nombre o en distinto
directorio con cualquier nombre. Sí el nombre del fichero destino ya existe se pierde la información
que pudiera tener.
     Sobre el f_origen hay que tener al menos permiso de lectura (r) y sobre el f_destino, si ya
existe, de escritura (w).
    Como destino se puede indicar un directorio, en cuyo caso se copiarían todos los ficheros

    El Sistema Operativo Unix-Linux                  Comandos Básicos                     19
origen en él.
     cp f(s)_origen directorio
      Los ficheros origen se pueden indicar por su nombre completo, separados por blancos o
utilizando metacaracteres; por supuesto se puede emplear una trayectoria.
    Con esta orden al duplicarse la información nunca se pierde el contenido del fichero origen.
           Mover:
    mv [-i] f_origen f_destino
    mv [-i] f(s)_origen directorio
    Renombra un fichero dentro de un directorio o lo traslada a otro directorio.
     La diferencia con la orden cp es que mv no duplica la información, desapareciendo siempre los
ficheros origen.
        -i Si en el destino ya existe el fichero, pregunta antes de sobreescribirlo.
     La mayoría de las veces es más rápida que cp, ya que se limita solo a anotar el cambio en los
ficheros directorio.
           Enlazar:
    ln [-f] f_origen f_destino
        -f No hace preguntas.
     A un mismo fichero se le da otro nombre, los dos nombres se referirán en adelante al mismo
fichero.
    No se hace una copia del fichero origen y el nuevo nombre puede estar en distinto directorio.
    Lo único que realiza esta orden es añadir una nueva entrada en el directorio que corresponda
con el nombre del fichero destino y el nº de i-nodo del fichero origen.
    No es necesario poseer ningún permiso sobre el fichero origen, pero si debemos poseer
permiso de escritura (w) sobre el directorio destino y de lectura sobre el directorio origen.
    Como origen se pueden indicar varios ficheros si el destino es un directorio.
        -s Realiza un enlace simbólico.
    Un enlace o vínculo simbólico es un archivo que sólo contiene el nombre de otro archivo.
Cuando el SO opera sobre el enlace simbólico, se dirige hacia el archivo al que apunta. Se usan
para enlazar ficheros en computadoras diferentes o en distintos sistemas de ficheros, también para
crear varios nombres a un directorio.
    Estas tres órdenes tienen en común, que el contenido del fichero destino, si existe, es
destruido.


           Borrar:
        rm [opc] fichero(s)
     Para borrar un fichero es necesario poseer permiso de escritura sobre el directorio, no sobre el
fichero, pues lo que realmente se hace es borrar un entrada del directorio.
     Si el fichero a borrar tiene varios enlaces, se borrar el enlace que tiene con el nombre de
fichero indicado, los demás permanecen.
        -f (forzar) Sí no tenemos permiso de escritura sobre el fichero, se salta una pregunta
           de confirmación y lo borra.
        -i (interactivo) Pide confirmación en todos los ficheros.
        -r (recursivo) Borra a partir de donde le indiquemos, toda la posible rama de

    El Sistema Operativo Unix-Linux                  Comandos Básicos                     20
subdirectorios, es rápida y peligrosa.
        Ejemplos peligrosos:
                    rm * .c
                    rm -r dir1


        Ejercicios:
    Duplicar un fichero en el mismo directorio.
    Copiar varios ficheros al mismo tiempo a otro directorio.
    Renombrar un fichero. Comprobar si le ha cambiado el nº de inodo.
    Mover ficheros a otro directorio. ¿Tienen otro inodo?
    Crear enlaces de un fichero en el mismo y distinto directorio. Comprobar inodos y el nº de
    enlaces. Borrar algunos de los enlaces creados y volver a comprobar el nº de enlaces.
    Intentar hacer un enlace duro a un directorio.
    Realizar enlaces simbólicos de ficheros. Comprobar el carácter de tipo de fichero. ¿Concuerda el
    nº de inodo?. Trabajar con el enlace simbólico. Borrar el fichero origen del enlace. Volver a
    trabajar con el enlace simbólico.
    Crear un enlace simbólico a un directorio.
    Estudiar los permisos de vuestro directorio home. ¿Qué permisos tienen los de tu grupo?.
    Entra en el directorio home de algún compañero. Intenta crear ficheros. Borra un fichero.



          Permisos, Propietario y Grupo.
    Las operaciones que se pueden realizar sobre un fichero son: leer (r), escribir (w) y ejecutar (x).
Estos permisos se conceden o deniegan a tres niveles: el propietario del fichero, el grupo al que
este pertenece y el resto de los usuarios.
    Que el grupo posea un permiso determinado no implica que lo posea el usuario, y que el resto
posea un permiso no implica que lo posean el usuario y el grupo.
     En un fichero convencional tener permiso de lectura significa poder consultar el contenido del
fichero, el permiso de escritura indica que se puede modificar y el de ejecución que se pueden
ejecutar las órdenes contenidas en el fichero.


    En los ficheros directorio el permiso de lectura posibilita que podamos averiguar el contenido
del directorio, es decir, los nombres de los ficheros que contiene, el no poseer este permiso no
impide acceder al contenido de los ficheros.
     El permiso de escritura nos permite crear y borrar ficheros, la modificación de un fichero en
particular no la controlan los permisos de directorio sino los de ese fichero.
     El permiso de ejecución en el caso de directorios impide que podamos usarlo dentro de una
trayectoria o que lo usemos como directorio de trabajo, denegar el permiso de ejecución si es una
protección real para un directorio y los ficheros que contenga. (Si perdemos el permiso de ejecución
sobre el directorio de trabajo o el padre de este, podemos desplazarnos a cualquier otro usando
una trayectoria absoluta.)


     El propietario de un fichero puede cambiarle los permisos con respecto a él mismo, su grupo o
el resto de los usuarios con la orden:


    El Sistema Operativo Unix-Linux                  Comandos Básicos                       21
chmod [quien(es)][+-=][permiso(s)] fichero(s)| directorio(s)
                 [quien]:         u Usuario propietario.
                                  g Grupo.
                                  o Otros, el resto.
                                  a Todos (por defecto).
                 [+-=]:           + Añade permiso.
                                  - Elimina permiso.
                                  = Asigna o establece permiso. Añade los permisos indicados y
                                   quita los demás, para los usuarios indicados.
                 [permiso]:       r Lectura.
                                  w Escritura.
                                  x Ejecución.
        Ejemplos:
           − Un permiso a un quién: chmod g+w fichero
           − Varios permisos a un quién:          chmod o+rwx fichero
           − Varios permisos a gente variada:     chmod go-rw fichero
           − Permisos distintos para varia gente: chmod o-r,g+w fichero
                                                  (nunca espacio después de la coma)
           − Asignación absoluta:                 chmod ug=rw fichero


        Ejercicios:
    Si a un fichero con varios enlaces se le cambian los permisos ¿Se cambiarán también en sus
    ficheros enlazados?
    Quitar a un fichero permiso de w: mostrarlo, añadirle información, borrarlo. (Podemos por
    ahora escribir en un fichero añadiéndole información con: orden >> f1)
    Quitar a un fichero permiso de r: mostrarlo, añadirle información, borrarlo.
    Grabar en un fichero:               clear
                                        echo hola mundo
                                        echo te encuentras en
                                        pwd
    Poner su nombre después del prompt, para ejecutarlo.
    Darle permiso de ejecución.
    Poner su nombre después del prompt, para ejecutarlo.


    También se permite una notación numérica, en octal, para indicar los permisos que se van a
establecer a unos determinados ficheros.
    chmod número_octal fichero(s)
     Número_octal: Un fichero tiene 9 permisos, se codifican en binario, si se tiene permiso 1 y si no
se tiene 0; resulta un número binario de 9 dígitos binarios, este se pasa a octal y obtenemos el
número octal de tres dígitos.


    Ejemplo: permiso de escritura al propietario, permiso de ejecución al propietario y al grupo y


    El Sistema Operativo Unix-Linux                    Comandos Básicos                    22
permiso de lectura a todos.
    chmod a=r,u+w,ug+x fich
    chmod 754 fich


           Permisos especiales.
    Aún hay otro tipo de permisos que hay que considerar. Se trata de:
       o El bit de permisos SUID (Set User ID).
       o El bit de permisos SGID (Set Group ID).
       o El bit de permisos de persistencia (sticky bit).


    SUID
     Veamos los permisos de un par de comandos que cuando se ejecutan modifican el fichero
/etc/passwd, que es propiedad de root, y sólo él lo puede modificar.

    ls -l /etc/passwd
    -rw-r--r-- 1 root root 2625 2010-11-19 11:39 /etc/passwd

    El comando passwd, sirve para cambiar la contraseña del usuario, y puede ser invocado por
cualquier usuario para cambiar su propia contraseña.
    Y el comando chsh, que se usa para cambiarnos el shell de conexión por defecto.
    Si vemos sus permisos observaremos un nuevo tipo de permiso:

    $ cd /usr/bin
    $ ls -l passwd chsh
    -rwsr-xr-x 1 root root 31700 2010-01-26 18:09 chsh
    -rwsr-xr-x 1 root root 37140 2010-01-26 18:09 passwd

    En lugar de la 'x' para el usuario encontramos ahora una 's' (suid).
      passwd es un comando propiedad de root, que modifica ficheros de configuración de usuarios
sobre los que sólo el administrador posee permiso de escritura, pero sin embargo un usuario sin
privilegios al ejecutar este comando también deberá de modificar los ficheros de configuración de
usuarios. Es aquí donde interviene el bit SUID.
     Este nuevo permiso obliga a la orden a ejecutarse como si la hubiera lanzado el usuario
propietario y no realmente quien la ejecutó. Es decir, es poder invocar un comando propiedad de
otro usuario (generalmente de root) como si uno fuera el propietario.


    SGID
    El bit SGID funciona exactamente igual que el anterior, solo que se aplica al grupo del
programa. Es decir, permite ejecutar el comando con los permisos del grupo.
    Veamos un ejemplo con la orden write, que sirve para realizar una comunicación instantanéa
con los usuarios que hay conectados. Para realizar su cometido necesita escribir en los ficheros de
dispositivo de los terminales, que pertenen al grupo tty.

    $ ls -l /dev/tty8
    crw--w---- 1 root tty 4, 8 2010-11-20 21:32 /dev/tty8

    En nuestro sistema write es un enlace simbólico al siguiente fichero, en el que se muestra una

    El Sistema Operativo Unix-Linux                 Comandos Básicos                     23
's' en vez del bit 'x' en los permisos del grupo.

    $ ls -l /usr/bin/bsd-write
    -rwxr-sr-x 1 root tty 9708 2009-11-10 17:12 /usr/bin/bsd-write

    De esta forma cuando lo estamos ejecutando tenemos permiso de escritura sobre los demás
terminales.


    STICKY BIT (Bit de persistencia)
    Este bit se aplica para directorios, como en el caso de /tmp y se indica con una 't':

    ls -ld /tmp
    drwxrwxrwt 24 root root 4096 sep 25 18:14 /tmp

    Puede apreciarse la 't' en vez de la 'x' en los permisos de otros. Lo que hace el bit de
persistencia en directorios compartidos por varios usuarios, es que el sólo el propietario del archivo
pueda eliminarlo del directorio.


            Modificación de los permisos especiales
    Para cambiar este tipo de bit se utiliza el mismo comando chmod pero agregando un número
octal extra al principio de los permisos, ejemplo:

    ls -l /usr/prog
    -r-x--x--x 24 root root 4096 sep 25 18:14 prog
    chmod 4511 /usr/prog
    ls -l /usr/prog
    -r-s--x--x 24 root root 4096 sep 25 18:14 prog

    Nótese que el valor extra es el '4' y los demás permisos se dejan como se quieran los permisos
para el archivo. Es decir, los permisos originales en este ejemplo eran 511 (r-x--x--x), y al
cambiarlos a 4511, se cambió el bit SUID reemplazando el bit 'x' del usuario por 's'.
    Los posibles valores serían los siguientes:
    - - - - - - - - - = 0 Predeterminado, sin permisos especiales.
    - - - - - - - - t = 1 Bit de persistencia, sticky bit
    - - - - - s - - - = 2 Bit sgid de grupo
    - - s - - - - - - = 4 Bit suid

    IMPORTANTE: Algo sumamente delicado y que se tiene que tomar muy en cuenta es lo que
decidas establecer con permisos de bit SUID y SGID, ya que recuerda que al establecerlos de esta
manera, cualquier usuario podrá ejecutarlos como si fuera el propietario original de ese programa.
Y esto puede tener consecuencias de seguridad severas en tu sistema. Mejores alternativas
pueden ser los comandos sudo y su.


            Máscara de permisos para la creación de ficheros.
    El propietario también puede definir con que permisos por defecto se crearán sus ficheros.




    El Sistema Operativo Unix-Linux                 Comandos Básicos                        24
umask [número_octal]

    Solamente tiene formato numérico, el nº octal al pasarlo a binario, los unos indican los
permisos que quitamos y a quién.
    La orden tiene efecto para el usuario que la aplica, y a partir de su uso los ficheros y directorios
se crearán con la restricción de los permisos indicada.
     (Atención: a los ficheros de texto, en un principio, no se les asigna permiso de ejecución)
     Si utilizamos la orden sin ningún parámetro, muestra la máscara de creación actual, que suele
ser 022.
     Para dejarlo fijo en la sesión, agregarlo a nuestro fichero de inicio de sesión .bashrc de nuestro
directorio de inicio o .profile si iniciamos con una consola de texto (Ctrl + Alt + Fnº).


           Cambio de propietario.
    El propietario de un fichero en System V (en los sistemas Berkeley solo el administrador)
puede cambiar el fichero de propietario y de grupo.

    chown [-R] nuevo_propietario[:grupo] fichero(s)
    -R                Recursividad.

    El nombre del nuevo propietario debe de ser un nombre válido de entrada al sistema (login) o
un número de identificación de usuario; estos y otros datos se encuentran en el fichero /etc/passwd.
    Si el usuario perteneciese a otro grupo se indica este separado del usuario por (:). Y se cambia
al mismo tiempo de usuario y de grupo.


           Cambio de grupo.

    chgrp nuevo_grupo fichero(s)

    Igualmente el nuevo grupo se puede indicar con el nombre o el número de identificación, que
se encuentra en el fichero /etc/group.


    Ejercicios: (en octal)
    Poner a dos ficheros al mismo tiempo los permisos rw- -wx r--.
    Quitarle a un subdirectorio todos los permisos ¿Qué podéis hacer en él?
    Dejarle todos menos el de ejecución ¿Qué podéis hacer en él?
    Mostrar el contenido de un directorio al que le falta el permiso de lectura.
    Poner al directorio permiso de escritura y un fichero dentro de él sin este permiso, probar a
    borrarlo.
    Poner una máscara de creación, de forma que a los directorios sólo les de permiso de ejecución
    para g y o, y para el propietario todos. Comprobarla creando algún directorio.
    La máscara anterior, que permisos da a los nuevos ficheros ordinarios.
    Intenta cambiar un fichero de propietario.


    El Sistema Operativo Unix-Linux                  Comandos Básicos                        25
Concede permiso de ejecución a tu directorio de conexión para los de tu grupo, dentro crea una
carpeta llamada “compartida”, donde los de tu grupo puedan escribir y borrar sólo lo que han
creado.




El Sistema Operativo Unix-Linux                Comandos Básicos                      26
Operaciones Con Ficheros Directorios.
    Ya sabemos visualizar el contenido de un directorio utilizando la orden ls, para lo cual debemos
de poseer permiso de lectura sobre él.


           Creación.
    mkdir trayectoria(s)
    Para crear un directorio necesitamos permiso de escritura sobre el directorio en el que se va a
crear.
     Se pueden crear varios directorios al mismo tiempo, indicando su trayectoria, ya sea absoluta o
relativa.
    Ejemplos.
    mkdir base/direc base2
    mkdir base/dire1 base/dire1/dire2 (dire1 no existía)


           Cambio de directorio activo.
    cd [directorio]
    Nos podemos desplazar libremente por el árbol de directorios siempre que tengamos permiso
de ejecución sobre los directorios por los que nos desplazamos.
    Si no indicamos directorio se asume el directorio $HOME o de conexión.


           Dónde nos encontramos.
    Si necesitamos asegurarnos de cual es nuestro directorio de trabajo utilizaremos la orden
    pwd
     En otras versiones de Unix no era tan fácil que el prompt nos indicase la trayectoria del
directorio de trabajo, por lo que esta orden era más utilizada. Pero todavía puede ser útil en
programas Shell.


           Eliminar directorios
    rmdir directorio(s)
    Se requiere permiso de escritura sobre el directorio padre.
     Antes de borrar un directorio debemos de borrar su contenido y cuidar de que no sea el
directorio de trabajo.
     Otro usuario que tenga permiso para ello nos puede borrar nuestro directorio de trabajo, con lo
que nos dejará "como suspendidos en el aire", pero podemos transladarnos a cualquier otro
directorio.
    El sistema permite borrar el directorio de trabajo.
    Recordar que también se pueden borrar directoros usando la orden rm de forma recursiva.


           Cambio de nombre.
    mv directorio_antiguo directorio_nuevo
    Se requiere permiso de escritura en el directorio padre.


    El Sistema Operativo Unix-Linux                  Comandos Básicos                    27
Copia de directorios.
    cp [-R] DirectorioOrigen DirectorioDestino
    -R                       De forma recursiva.


           Variables PS1 y PS2.
    Se usan para definir el prompt o inductor del shell.
    El prompt primario (PS1) aparece para solicitarnos la introducción de una orden.
    El prompt secundario (PS2) se muestra cuando no se ha terminado de introducir un comando.
    Tanto PS1 como PS2 son variables del shell que pueden ser redefinidas por los usuarios (cada
usuario tiene las suyas).
    Esto se hace simplemente asignándole un nuevo valor, con el formato:
    PS1=”NuevoValor”

    El NuevoValor puede ser cualquier cadena, pero hay una serie de códigos con un significado
especial para modificar el inductor, estos son:
    !       Siguiente nº del histórico de sucesos.
    $       Usa el signo $, salvo para root, que usa el signo # (tradicional).
    d       Fecha actual.
    s       Shell actualmente activo.
    t       Hora actual.
    u       Nombre del usuario.
    w       Directorio de trabajo actual (directorio activo).
    h       Nombre de la máquina. Host.


    Ejercicios:
   Crear varios directorios con la misma orden.
           Trayectorias relativas.
           Trayectorias absolutas.
           Que el directorio activo no sea el padre de los subdirectorios.
   Examinar el árbol de directorios de Unix.
   Desplazarse usando ambos tipos de trayectorias.
   Probar a eliminar un directorio no vacío.
   Probar a eliminar un directorio vacío, pero que sea el directorio activo.
   Eliminar varios directorios con la misma orden.
   Cambiar de nombres a directorios. Con y sin permiso de escritura sobre el padre.
   Copiar una rama del árbol de directorios de forma recursiva.
   Eliminar la rama recién copiada también de forma recursiva.
   Modificar el prompt primario y secundario incluyendo texto y códigos especiales de la orden.




    El Sistema Operativo Unix-Linux                 Comandos Básicos                    28
Flujo De Información.

         Entrada y salidas estándar (std).
    Muchas órdenes Unix reciben información desde el teclado, que es la entrada estándar (stdin)
y muestran los resultados por la pantalla, salida estándar (stdout); la pantalla también es la salida
estándar para los posibles errores (stderr).
    Ejemplo:
    Cat
    sort
     Sin opciones ni argumentos leen texto del teclado (stdin) y muestran los resultados por pantalla
(stdout), visualizando los posibles errores, en el caso de que se produzcan, por pantalla (stderr).


     Tanto la entrada como las salidas estándar son tratadas como ficheros especiales, y el shell
los identifica por su número de descriptor de fichero:
              stdin                    0
              stdout                   1
              stderr                   2
     (Deben de emplearse junto al signo de redireccionamiento).


    El guión (-) realiza una entrada por teclado.



         Redireccionamiento:
     Se pueden redireccionar la entrada y salidas estándar mediante los metacaracteres de
redireccionamiento: > < >>.
      > Redireccionamiento de salida, envía los datos que normalmente saldrían por pantalla hacia
el fichero que indiquemos.
    Ejemplo:
    cat > file
    cat 1> file
    cat - > file
    Usa la entrada estándar y la salida al fichero especificado.


     >> Redireccionamiento de adición, igual que el anterior, pero si el fichero al que se dirige la
salida ya existe no se borra la información que tenga, sino que la nueva se añade al final.
    Ejemplo:
    Cat 1>> file
    Añadiendo información a un fichero desde la entrada estándar.


     < Redireccionamiento de entrada, la orden no tomará la información del teclado, sino del
fichero especificado.
    Ejemplo:
    cat file
    cat < file


    El Sistema Operativo Unix-Linux                 Comandos Básicos                      29
cat 0< file
    Toma como entrada el fichero indicado, siendo la salida por pantalla.


    cat 0< fichero 1>> otro
    La entrada de un fichero y la salida la añade a otro.


    cat 2> errores 0< fichero 1> fichero1
    cat fichero > fichero1 2> errores
    Entrada fichero, salida fichero1 y errores al fichero errores.


    cat fichero1 – fichero2 > total
    Entre dos ficheros permite una entrada por teclado


    Con el formato:
    orden >& fichero
    Tanto la salida estándar, como la salida de error se almacenan en el fichero indicado.
    Ejemplo:
    cat fichero fichero_inexistente >& todo

         Tuberías (pipes):

    Orden | Orden2

    Mediante el uso de tuberías se consigue que la salida de una orden sea la entrada de otra. El
metacarácter tubería es |.
    Ejemplo:
    ls –lR /home | less


           Duplicar la salida
    orden | tee [opciones] fichero(s)
    orden | tee [opciones] | filtro
    La entrada que recibe tee la copia en la salida estándar y en el o los ficheros indicados como
argumentos, si estos no existen son creados.
       -i No responde a interrupciones.
       -a Si los ficheros existen le añade la información al final.


    Ejemplo:
    date | tee –a fecha
    ls –l | tee listado
    cat fichero1 – fichero2 | sort | tee FileOrden
    El primero muestra la fecha y además la añade en un fichero.
    E segundo muestra el contenido del directorio y lo almacena en el fichero listado.
    Y el tercero concatena la entrada, la ordena, la muestra ordenada y la almacena en el fichero


    El Sistema Operativo Unix-Linux                  Comandos Básicos                        30
FileOrden.


        Ejercicios:
    Practicar todos los redireccionamientos, con todas las formas de indicar la entrada y salida.
    Combinar los redireccionamientos y la tubería:
         Almacenar ordenado el listado largo de un directorio en un fichero.
         Darle a sort la entrada con un fichero y que la salida la pase a less.
         Los usuarios que hay conectados, almacenarlos ordenados en un fichero.
         Al fichero anterior añadirle la fecha.
    En los ejercicios anteriores emplear los filtros vistos: less, cat y sort.

          Filtros para: Contar, Ordenar y Eliminar Repetidos.
             Contar:
    wc [opciones] fichero(s)
    Abreviatura de Word Counting. Sin opciones cuenta el número de líneas, palabras y caracteres
contenidos en un fichero o en la entrada indicada. Si se especifica un grupo de ficheros contabiliza
en cada uno de ellos y además muestra un total.
    Si no especificamos la entrada, toma por defecto la entrada estándar.
    Para que no muestre toda la información, podemos utilizar las opciones:
        -l Sólo cuenta las líneas.
        -w Idem las palabras.
        -c Idem los caracteres.
    Ejemplos:
    wc f1 f2 f3
    Cuenta el nº de líneas, palabras y caracteres de cada fichero y hace un total.


    ls | wc -w
    Cuenta el nº de ficheros de un directorio.
    Ejercicios:
    Sin opciones ni argumentos.
    Con una opción, y varias cambiándolas de orden.
    Con varios ficheros.
    Pasándole la información mediante una tubería.
    Almacenando el resultado en un fichero.
    Averiguar cuantos ficheros y directorios hay en una rama del árbol de directorios, por ejemplo
    en tu $HOME. El resultado almacenarlo en un fichero y los posibles errores que no aparezcan
    por ninguna parte.


             Ordenar:
   Este filtro además de clasificar puede fusionar ficheros. En principio lo hace siguiendo el código
ASCII.


    El Sistema Operativo Unix-Linux                     Comandos Básicos                   31
La entrada, al igual que en todos los filtros, pueden ser: ficheros indicados como argumentos,
pasada por una tubería o suministrada por la entrada estándar.
    sort [opciones] [fichero(s)]
    Opciones generales:
        -o file Sirve para indicar el fichero de salida. Ya que si redireccionamos la salida a un
           fichero que se llame igual que el de entrada, se pierde la información.
        -m Mezcla los ficheros que supone que están ordenados.
        -c Comprueba si el fichero está ordenado.
        -u Muestra las líneas repetidas una sola vez, útil para la mezcla de ficheros.
    Opciones de ordenación de datos:
        -d (diccionario), sólo tiene en cuenta los caracteres alfabéticos, numéricos y espacio.
        -f Convierte mayúsculas a minúsculas a efectos de la ordenación.
        -b Ignora los blancos iniciales.
        -n Ordenamiento numérico, toman su valor aritmético el signo menos (-) y el punto
           decimal (.), En Ubuntu como tenemos definido el idioma toma como separador de
           los decimales la coma (,). Los blancos iniciales no se tienen en cuenta.
        -r Ordenación inversa.
        -R Ordenación aleatoria (Random).
    Ordenación de campos:
    Los campos se entienden separados por blancos o tabuladores salvo que se indique la opción:
        -tx Donde x es el carácter delimitador de campos. Es aconsejable poner el carácter
            entre comillas.
    Para ordenar sólo por un grupo de campos:
        -k inicio[,fin]           Rango de campos por los que se ordena.
   Pueden indicarse opciones sólo para un rango, si se colocan inmediatamente después del
número de campo, no irán precedidas de guiones; estas son b, f, n, r.
    La lista de ficheros caso de ser varios los ordena y mezcla, salvo que se utilice la opción -m,
que sólo mezcla.


    Ejemplos:
    sort –t"," -f –k 2,3 lista > lista.ord
     Un fichero con la estructura: nombre, apellido1, apellido2, edad. Es ordenado por apellidos, sin
diferenciar entre mayúsculas y minúsculas.


    who | sort | tee quien.hay
    Muestra y almacena los usuarios que hay conectados de forma ordenada.


    sort -nr –o num num
   Ordena el fichero num, que contiene números, en orden descendente y lo almacena en el
mismo fichero.
     Comprobar que ocurre si en lugar de usar la opción –o empleamos el redireccionamento de
salida.


    El Sistema Operativo Unix-Linux                 Comandos Básicos                       32
Ejercicios:
    Sin argumentos ni opciones.
    Ordenando un fichero.
    Almacenando el resultado en otro fichero.
    Probar las opciones y su combinación.
    Ordenar el fichero lista por edad.
    Quién hay conectado, mostrando los últimos en conectarse primero.
    Mostrar el listado largo de ficheros de un directorio, ordenado por tamaño, de mayor a menor.
    Ordenar el fichero de grupos (/etc/group) por el nº de grupo (campo 3) de menor a mayor y
    almacenar el resultado en un fichero.
    Ordenar el fichero de password (/etc/passwd) por el GID (4º campo) de forma numérica, los
    que pertenecen al mismo grupo los ordenamos por su nombre de usuario LOGNAME (campo
    1º). Los campos están separados por ‘:’. El resultado almacenarlo en un fichero llamado passwd
    en vuestro directorio $HOME.
    Ordenar y mezclar dos ficheros con números (donde algunos estén repetidos), comprobar la
    opción –u.


              Eliminar líneas iguales o con parte igual.
    uniq [opc] [-campos] [+carac.] [f_in] [f_out]
        Controla las líneas consecutivas repetidas mostrando sólo una. Opciones:
        -c Precede cada línea del número de repeticiones.
        -d Sólo muestra las que se han repetido alguna vez.
        -u Visualiza las que no se han repetido.
        -i No distingue entre mayúsculas y minúsculas.
        -f nº_campos: Ignora el número de campos que se indique.
        -s nº_caracteres Ignora el número de caracteres que se indique.
        -w nº_caracteres compara como máximo el nº de caracteres indicado, después de
           haber saltado los campos o caracteres indicados en –f o –s.


    Si no se especifican ficheros de entrada o salida se utilizan la entrada y salida estándar.
    Ejemplos:

    sort alumnos | uniq –f 1 | wc -l
     En un fichero de alumnos compuesto por nombre y apellidos, cuenta todos los que hay con
apellidos distintos.

    sort direcciones | uniq -d –f 1
    Una vez ordenado el fichero muesta los registros repetidos a partir del primer campo.
    Ejercicios:
    En el fichero de nombres, apellidos y edades, procurar que se repitan algunas edades.


    El Sistema Operativo Unix-Linux                 Comandos Básicos                        33
¿Cuántos hay de cada edad?



          Filtros para ver que hay en los ficheros.
    El filtro más habitual para ver el contenido de un fichero es cat, ya visto.
            Ver el final de un fichero.
    tail [opción][nº] [fichero]
    Sin opciones lista las 10 últimas líneas.
     Sí el nº lleva el signo (+) empieza a mostrar a partir de ese nº de unidades, contando desde el
principio del fichero, en el caso contrario cuenta las unidades indicadas desde el final del fichero.
Las unidades se miden según la opción, que puede ser:
        -c nº Caracteres.
        -n nº Lineas.
    Mostrar el listado largo de un directorio, sin que incluya la 1ª linea, que indica el total de
    bloques usados.


            Ver el principio de un fichero.
    head [opción] [fichero]
        Por defecto muestra las 10 primeras líneas.
        -c nº Caracteres.
        -n nº Lineas.
        Con el signo (–) muestra todas menos las n últimas unidades.


    En un fichero tenemos los números del 0 al 9 (cada uno en una línea), escribir la línea de
     comando para que nos muestre uno de ellos aleatoriamente.


            Volcado en octal (octal dump)
    od [opciones] [fichero]
    Es útil para ver que contienen los ficheros objeto o de texto con caracteres no imprimibles.
        -t c Los caracteres imprimibles los muestra con caracteres normales, los no
            imprimibles con un nº en octal de tres dígitos, y algunos de estos los muestra de la
            siguiente forma:
                      0     Nulo.
                      b     Retroceso.
                      f     Salto de página.
                      n     Nueva línea.
                      r     Return.
                      t     Tabulador.
        -t oC Muestra los byte con su valor en octal.
        -j nº   Nº de byte que son saltados sin mostrar.
    Almacenar en un fichero la palabra “hola” más intro. Mostrarlo con las distintas opciones.




    El Sistema Operativo Unix-Linux                   Comandos Básicos                         34
Filtro para cambiar caracteres.
    tr (translate), cambia o traduce caracteres procedentes de una entrada de acuerdo a las reglas
que se le indiquen.
    Supongamos que tenemos un archivo que usa los dos puntos(:) para separar campos, y que
necesitamos cambiar cada dos puntos por otro carácter, por ejemplo el tabulador.
    tr : "t" < fichero                            t     representa un tabulador.
    Formato:

                tr [opc] lista_de_entrada lista_de_salida
    Las listas deben de tener el mismo nº de caracteres, y la sustitución es posicional, el primer
carácter de la lista de entrada es sustituido por el primero de la lista de salida, ...
    Normalmente se trabaja redireccionando la entrada y la salida.
    Opciones:
       -s (squeeze = estrujar, apretar) elimina caracteres repetidos en la salida.
       -c (complement) toma como lista_de_entrada el complemento.
       -d (delete) borra en la salida los caracteres del conjunto de entrada.


           Indicar rangos
   Se pueden usar conjuntos de caracteres. Por ejemplo para cambiar letras minúsculas por
mayúsculas:
    tr “[a-z]” “[A-Z]” < fichero


     Ejemplo para codificar texto, desplazando cada letra trece posiciones en el alfabeto inglés de
26 letras:
    tr “[a-m][n-z][A-M][N-Z]” “[n-z][a-m][N-Z][A-M]” < fich > fich.13


    Para traducir un conjunto de caracteres de entrada por el mismo carácter de salida, se usa el *
después del carácter de salida indicando que se repita las veces que sea necesario.
    tr “[0-9]” “[#*]” < fichero


           Eliminación de repetidos en la salida
    tr -s “[0-9]” “[#*]” < fichero
    Cada nº con todas sus cifras es reemplazado por un solo símbolo “#”.


           Sustitución de los caracteres complementarios
    tr -c “[a-z][A-Z][0-9]” “[#*]” < fichero
    En el ejemplo anterior todo carácter no alfanumérico es sustituido por “#”.


           Eliminación de caracteres
    tr -cd “[a-z][A-Z][0-9]” < fichero


    El Sistema Operativo Unix-Linux                Comandos Básicos                      35
Son eliminados todos los caracteres no alfanuméricos incluidos los signos de puntuación,
espacios,...


    Para representar caracteres especiales:
                           NNN     character with octal value NNN.
                           a       audible BEL
                                  Backslash
                           b       Backspace
                           f       form feed
                           n       new line
                           r       Return
                           t       horizontal tab
                           v       vertical tab


    Para representar conjuntos de caracteres:
           CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order
           [:alnum:]         all letters and digits
           [:alpha:]         all letters
           [:digit:]         all digits
           [:cntrl:]         all control characters
           [:lower:]         all lower case letters
           [:upper:]         all upper case letters
           [:graph:]         all printable characters, not including space
           [:print:]         all printable characters, including space
           [:punct:]         all punctuation characters
           [:blank:]         all horizontal whitespace
           [:space:]         all horizontal or vertical whitespace


    Ejercicio:
   Dado un fichero de texto, producir un listado con las palabras que contiene ordenadas
   alfabéticamente, sin que estén repetidas e indicar el nº de veces que aparece cada palabra en el
   fichero.
    tr -s "[:blank:]" "n" < fichero | sort | uniq -c




    El Sistema Operativo Unix-Linux                Comandos Básicos                       36
Buscar en ficheros. Familia grep.
       Busqueda de un patrón en un fichero: grep, fgrep, egrep.
       Buscar un patrón dentro de un fichero, grupo de ficheros, entrada estándar o la que se
le especifique mediante tubería o redireccionamiento. Cuando se busca en más de un fichero,
encabeza cada línea con el nombre del fichero.
        En la formación del patrón se pueden usar expresiones regulares, también llamados
formatos de sustitución. Precisamente de las expresiones regulares toma su nombre que viene
de las siglas: Global Regular Expression and Print


    grep [opc] patrón [fichero(s)]


    Reglas importantes de los formatos de sustitución, expresiones regulares:
    Si el patrón está formado por más de una palabra deben de incluirse entre comillas o
apóstrofos según los sistemas.
    El punto (.) sustituye cualquier carácter único, igual que ? para el shell.
    Una lista entre corchetes ([]) tiene el mismo significado que para el shell.
    El circunflejo (^) dentro de unos corchetes precediendo una lista empareja todos los caracteres
que no estén en la lista, igual que la ! en el shell.
    El signo dolar ($) al final de una expresión indica que debe de estar al final de una línea.
    El acento circunflejo (^) al principio de una expresión indica el principio de línea.
    El asterisco (*) sirve por cero o más repeticiones del carácter que le precede.
    La barra invertida () quita el significado especial al siguiente carácter.


    Sin opciones produce como salida las líneas que contienen el patrón.


       -n Al principio de línea aparece su nº de línea.
       -i Ignora mayúsculas y minúsculas.
       -c Sólo indica el nº de líneas que contienen el patrón dentro del fichero.
       -h No imprime los nombres de los ficheros.
       -l (ele) Indica en que fichero(s) se encuentra el patrón.
       -v Devuelve las líneas que no contienen el patrón.
    Ejemplos:
    grep byte *.apuntes
    grep ".f" programas
    grep [^m-t]ata fichero
    grep "^Santa Fe$" america europa
    grep ^[0-9][0-9]* datos


           fgrep [opc] patrón(es) [fichero(s)]
    La principal diferencia es que puede buscar muchos patrones de forma simultánea (puede
buscar miles de palabras al mismo tiempo), pero no permite el uso de metacaracteres para formar

    El Sistema Operativo Unix-Linux                   Comandos Básicos                       37
expresiones regulares, sólo cadenas fijas.
    Es más rápida que sus hermanas grep y egrep.
    Le son válidas las opciones anteriores, y además:
        -f fichero                Sirve para indicar el fichero que contiene los patrones de
            búsqueda.
    Si se especifican varios patrones en la línea de comando, irán todos entre comillas y separados
por un retorno de carro.
    Ejemplo:
    fgrep –f palabras lista1 lista2


           egrep [opc] patrón(es) [fichero(s)]
    Como fgrep puede leer patrones desde un fichero. Y como grep puede emplear expresiones
regulares.


    Actualmente las órdenes
    grep -E sustituye a egrep
    grep –F sustituye a fgrep


    Ejercicios:
    Buscar una palabra en un fichero. Comprobar la opción para que no distinga las mayúsculas.
    En varios ficheros buscar una frase e informar del nombre de los ficheros que la contengan.
    Mostrar el nº de veces que aparece la palabra if al principio de línea en un fichero(s).
    Eliminar las líneas en blanco de fichero1 y almacenarlo en fichero2.
    Borrar todas las líneas que contengan Manolo, Manuel, Lolo o Manolín.

         Comparacion de Ficheros.
    diff - busca diferencias entre dos ficheros


    diff [opciones] fichero-origen fichero-destino


     Por defecto muestra los cambios de edición que habría que realizar en f1 para que quedase
igual que f2, de la siguiente forma:
    Línea o rango de f1 operación línea o rango de f2
    Donde operación puede ser:
        a (añadir líneas de f2 a f1)
        d (borrar líneas de f1)
        c (cambiar líneas de f1 por líneas de f2).
    Y a continuación de cada operación muestra las líneas afectadas, si estas se preceden por el
símbolo "<" quiere decir que son de f1, y si se preceden por ">" son de f2.


    Opciones


    El Sistema Operativo Unix-Linux                  Comandos Básicos                          38
-a Trata todos los ficheros como de texto y los compara línea por línea, incluso si no
           parecen ser de texto.
        -b No se tienen en cuenta los blancos al final de línea y trata los distinto conjuntos de
           blancos como si fuesen iguales.
        -B No hace caso de cambios consistentes en sólo insertar o borrar líneas en blanco.
        -c Emplea el formato de salida de contexto.
        -i Considera las letras mayúsculas y minúsculas equivalentes.
        -q Informa sólo de si los ficheros difieren, no de los detalles de las diferencias.
        -r Cuando compara directorios, compara recursivamente cualesquier subdirectorios
           encontrados.
        -u Emplea el formato de salida unificado.


    Un estado de salida de 0 significa que no se encontraron diferencias, 1 significa que se
encontró alguna diferencia y 2 significa problemas.



          Cortar y Pegar Ficheros.
              Cortar de forma horizontal (por líneas).
    split [-nº] [fichero] [prefijo]
    Divide el "fichero" en trozos de n líneas, los trozos son grabados en ficheros cuyo nombre base
es "prefijo" y se le añaden las terminaciones "aa", "ab", hasta "zz", por lo que se puede dividir hasta
en 676 ficheros. (26 letras)
        -nº                        Nº de líneas de cada trozo, por defecto 1000.
    Si no se indica el "fichero" se toma la stdin.
    Si no se indica el nombre base se asume "x".


    Variante de split
    csplit [-f prefijo] fichero arg1 [...argn]
    Divide el fichero en las porciones que indiquen los argumentos, estos pueden ser:
    n            El trozo termina en la línea nº n (no incluida).
    "/exp/"      Hasta la línea que contiene la expresión (no incluida).
    "%exp%" Salta sin grabar en fichero hasta la línea que contiene la expresión, esta línea se
                 graba en el próximo fichero.
    En pantalla se muestra el tamaño de los ficheros en los que se divide. Algunas opciones son:
        -f prefijo Prefijo tiene el mismo significado que en split, si no se pone se asume "xx" y
            se van numerando, desde xx00 hasta xx99.
        -s No muestra el tamaño de las partes en la salida estándar.


              Pegar de forma horizontal.
    Hemos utilizado la orden cat para crear y visualizar ficheros, con redireccionamientos y
tuberías, pero cat es una abreviatura de concatenar.
    cat [opc] [fichero(s)] [-]
    Concatena los ficheros especificados, y los muestra por stdout, la cual podemos redireccionar.

    El Sistema Operativo Unix-Linux                  Comandos Básicos                         39
El guión (-) significa una entrada por teclado.
        -v Muestra los caracteres no imprimibles.
        -t Además los TAB los muestra como ^I. Sólo los TAB –T.
        -e Además en los EOL muestra un $. Sólo los EOL –E.
        -n Numera las líneas de salida.
        -b No numera las líneas en blanco.
        -s No muestra más de una línea en blanco.
        -A Equivale a –vET.
    Ejemplos:
                   cat f1 f2
                   cat f1 - f2 > f3


            Dividir ficheros verticalmente (por columnas).
    cut [opc] [fichero]
    Permite seleccionar columnas (caracteres o campos) de un fichero, el resultado va a stdout.
        -c lista                   Seleccionamos la columna por caracteres.
        -f lista                   Indicamos la columna por campos (fields).
    En ambos casos la lista está formada por un conjunto de números separados por comas o
guiones.
        -dcarácter              Informa de cual es el carácter delimitador de campos cuando
           usamos la opción -f, por defecto se asume tab.
        -s Se usa conjuntamente con la opción “f”, para pasar por alto las líneas que no tengan
           el delimitador, como son cabeceras, títulos o líneas vacías.
    Ejemplos:
        Corta el rango de caracteres del 20 al 35:
            cut -c20-35 datos
        Se obtiene el 2º y 4º campo, actuando como separador los “:”
            cut -d”:” -f2,4 datos


            Unir ficheros verticalmente.
    paste [opc] fichero(s)
    Une los ficheros verticalmente, produciendo una única salida nueva.
    Sin opciones, sustituye los caracteres de fin de línea por tab, excepto los del último fichero.
        -dcarácter                 Carácter que sustituye los finales de línea.


    Ejercicios:
    Obtener un listado ordenado de todos los usuarios que son propietarios de algo dentro del
    directorio /home; no deben de estar repetidos. Orientaciones:
           A la salida de la orden ls -l le podemos eliminar la cabecera.
           Cortar la columna de los propietarios.
           Ordenar
           Eliminar los repetidos.

    El Sistema Operativo Unix-Linux                  Comandos Básicos                        40
En un fichero de alumnos, donde tenemos los datos de un alumno por linea, con los datos
    Nombre; Apellidos; Edad. Obtener otro fichero con los datos apellidos, nombre; ordenado por
    apellidos.



        Búsqueda de ficheros.
    find [ruta(s)] [opcion(es)]
    Es útil para localizar ficheros que cumplan determinadas condiciones o características, en las
ramas del árbol de directorio que se le indique. Finalmente sobre los ficheros o directorios
encontrados se puede ejecutar alguna acción.
    Dentro de las opciones, unas indican criterios de búsqueda (en el caso de que se indique más
de un criterio se seleccionan los ficheros que cumplan todos simultáneamente).
    Otras opciones indican las acciones a realizar con los ficheros encontrados.
    Cuando el criterio se acompaña de un nº n, este puede llevar el signo positivo (+), negativo (-) o
ninguno, significando respectivamente mayor que, menor que o igual que.
    Algunas opciones que indican criterios de busqueda:
        -name patrón    Nombre del fichero a buscar, admite metacaracteres. Se aconseja
                        poner el nombre entre comillas, para que los metacaracteres no sean
                        interpretados por el shell.
        -iname patrón Como -name, pero no hace distinción entre mayúsculas y minúsculas.
        -type t                                                      Donde “t” es un carácter que
                        indica el tipo de fichero, este puede ser:
                        f    Ficheros ordinarios.
                        b    Dispositivos de bloques.
                        c    Dispositivos de caracteres.
                        d    Directorios.
                        l    Vínculos simbólicos.
        -links [±]n                                                  Nº de enlaces.
        -inum n                                                      Empareja con los ficheros
                        que tengan como nº de inodo n.
        -perm n                                                 Localiza los ficheros que
                        tengan exactamente los permisos indicados por el nº n (octal).
        -user usuario   Ficheros que pertenezcan al usuario, se indica el nombre del usuario.
        -uid n                                                          Idem, n debe de ser un
                        identificador de usuario. (ls -n muestra uid y gid)
        -group grupo    Ficheros que pertenezcan al grupo.
        -gid n                                                       Idem, n debe de ser un
                        identificador de grupo.
        -size [±]n                                             Nº de bloques de tamaño
                        del fichero. Si se añade una c detrás del número se interpreta el
                        tamaño en bytes (caracteres), k (Kbytes), w (palabras 2 bytes), b
                        (bloques, por defecto).
        -empty                                                       Si el fichero o el directorio
                        está vacío.
        -atime [±]n                                                  Si ha sido accedido en los
                        últimos n días.


    El Sistema Operativo Unix-Linux                 Comandos Básicos                       41
-mtime [±]n                                                     Idem modificado.
       -newer fichero Ficheros modificados con posterioridad a la fecha y hora de
                      modificación del fichero especificado.
       -maxdepth n      n indica el nivel de profundidad al que se descenderá buscando ficheros
                        en el árbol de directorios a partir de la trayectoria indicada. 0 Ninguno, 1
                        sólo en el directorio indicado.
       -mindepth n      n indica a partir de que nivel se inicia la búsqueda. 1 a partir del
                        directorio indicado, 2 omite los ficheros del directorio indicado.


    Ejemplos:
    find . -size -25c
    find /home/user07 -name hola -type d
    find programas -name "*.c"
    find /home -atime +30
   Probar todos los criterios vistos y algunas combinaciones entre ellos.


    Estos criterios se pueden alterar y combinar con los operadores relacionales.
    Se listan en orden de prioridad:
       ()                         Fuerza a la ejecución prioritaria.
       !                          Colocada delante de un criterio este queda negado.
       -a                         Operador lógico y. Si no ponemos ninguno este va implícito.
       -o                         Entre dos criterios representa el o lógico.


    find . ! -name "*.c" -print
    find ./cartas ./epistolas ( -name pepe -o -name jose ) -ls
    find /home -name "*.txt" -user user07 –fprint txtde07


     Son necesarios los paréntesis, ya que el AND tiene precedencia sobre el OR. Las barras
invertidas son para que estos caracteres sean interpretados por el comando, no por el shell.
Observar los espacios de separación entorno a los paréntesis.


    Opciones que indican acciones a realizar:
       -print           Muestra la trayectoria de los ficheros que se encuentren. Esta será
                        relativa o absoluta, dependiendo del tipo de trayectoria de búsqueda
                        que nosotros indiquemos en la orden. Acción realizada por defecto.
       -fprint file     Almacena el resultado en el fichero indicado.
       -ls              Lista los ficheros encontrados por la salida estándar con el formato de
                        la orden “ls -dils”, es decir, información de directorios, nº de inodo,
                        listado largo y tamaño en bloques.
       -exec orden [{}] ;                                                  Ejecuta la orden con los
                        ficheros encontrados. El juego de llaves representan los ficheros
                        encontrados, el (;) indica el final de la orden y hay que colocarle antes la
                        () para que pierda el significado especial que tiene para el shell.
       -ok orden [{}] ; Igual que la anterior, pero pide confirmación antes de ejecutar la orden


    El Sistema Operativo Unix-Linux                 Comandos Básicos                         42
con cada fichero. Los corchetes indican opcionalidad.


    Ejemplos:
    find . -name “carta*” - type f -exec cat {} ;
    find cuentas -atime +90 -ok rm {} ;
    find programas -newer proyec.c -exec mv {} /home/user07/actual ;
    find . -atime +3 -atime -60 -exec mv {} ../reserva ;
    find /home -atime +30 -size +20 -ok rm {} ;


     En ocaciones, esta orden puede tardar bastante, por lo que se suele ejecutar en background, si
no necesitamos su resultado inmediatamente, para ello se añade al final de la orden el carácter &.
En este caso ejecutará las acciones de forma desatendida y la salida estándar la debemos de
redirigir.
    Observar la diferencia entre “find . -name fichero” y “find /home/user07 -name fichero”.
    Para ejecutar acciones sobre los ficheros encontrados, realizar la práctica en vuestro directorio
    de trabajo y preferiblemente con “-ok orden ...”.




    El Sistema Operativo Unix-Linux                 Comandos Básicos                        43
Editores:

          Editor VIsual. Generalidades.
           Comenzar con VI
      vi [-opciones] [fichero(s)]
           -R Abre el fichero en modo de solo lectura.
           +n Al abrir el fichero se posiciona automáticamente en la línea n.
           + Ídem, pero colocándose al final del fichero.
           Modos de trabajo
      Texto.
      Comando:
            De pantalla (al iniciar).
            De línea de órdenes.
            Entrar a modo texto:

      i    Inserta en la posición del cursor.
      a Inserta después del cursor.
      I    Inserta al principio de la línea.
      A Inserta al final de la línea.
      o Abre una línea debajo de la activa.
      O Abre la línea encima de la activa.
            Pasar a modo comando:

      Pulsando <Esc>.
           Desplazamiento
En algunos terminales con las teclas de dirección.
También h j k l (izquierda, abajo, arriba y derecha respectivamente).
<Ctrl>+f           Avanza pantalla.               <Ctrl>+b    Retrocede pantalla.
<Ctrl>+d           Avanza 1/2 pantalla.           <Ctrl>+u    Retrocede 1/2 pantalla.
w                  Avanza una palabra.            b           Retrocede una palabra.


           Sobreescritura
r           Un solo carácter, y pasa a modo comando.
R           Reemplaza indefinidamente hasta que se pulse <Esc>.


           Grabar y Salir
:q                   Abandona vi si no se ha modificado el documento.
:q!                  Abandono imperativo, perdiendo los posibles cambios.


El Sistema Operativo Unix-Linux                       Comandos Básicos                  44
:wq               Grabar y salir.
    :w fich           Graba en el nombre de fichero que le indiquemos.
    :w! fich          Si el fichero existe lo sobreescribe.
    :w >> fich        Añade al fichero indicado.
    ^g                Muestra el nombre del fichero.


            Borrar
         J Une la línea actual con la siguiente.
         x Borra el carácter sobre el que está el cursor.


    d[n]alcance
               Donde n es el número de veces que se va a repetir la operación.
               El alcance puede ser:
                      d Línea actual.
                      w Palabra siguiente a partir del cursor.
                      b Palabra anterior a partir del cursor.
                      ) Hasta final de frase. (Punto o línea en blanco)
                      ( Hasta principio de frase.
                      } Hasta el final de párrafo. (Pto. y aparte y línea en blanco)
                      { Hasta el principio de párrafo.
                       $ Hasta final de línea.
                      ^ Hasta principio de línea.               Sin nº de veces.
                      G Hasta el final del fichero.
    Al borrar, el texto pasa a un búfer de carácter general. (CORTAR)


            Cambiar
    c[n]alcance
    n y alcance tienen el mismo significado que en la orden anterior, pero para indicar una línea en
alcance, se emplea la letra c.
    El bloque de texto así especificado se sustituye por la siguiente entrada por teclado, hasta que
pasemos a modo comando.


            Copiar al búfer general
    y[n]alcance
    Donde n y alcance tienen el mismo significado que en el comando "d", con la salvedad que
para referirnos a línea en alcance hay que poner y.
    El texto indicado se copia al búfer general sin borrarlo de su ubicación.




    El Sistema Operativo Unix-Linux                       Comandos Básicos               45
Pegar
p           Pega el contenido del búfer general después de la posición del cursor.
P           Ídem., pero antes de la posición del cursor.


       Repetición
. El punto repite la última operación de borrado o el último bloque insertado.


       Deshacer
u           Deshace la última operación realizada.
U           Restaura la línea actual.



      Configuración
:set showmode            Indica cuando esta modo INSERT y REPLACE.
                                        (En Linux también Command y Buffer)
:set noshowmode Desactiva la anterior.


:set list                Muestra los caracteres no imprimibles, TAB como ^I, final de línea como
                       $.
:set nolist                             Desactiva la anterior.


:set number              Muestra números de línea.
:set nonumber            Desactiva la anterior.
Ejemplo de órdenes de la línea de comandos que usan los números de línea:
:rango_origencolínea_destino        Copiar.
:rango_origenmlínea_destino         Mover.
:rangow fichero                                    Grabar.
El Rango se indica con el nº inicial y el final separados por una coma.


:set wrapscan            Por defecto búsquedas circulares.
:set nowrapscan          No realiza búsquedas circulares.


:set ignorecase          No diferencia entre mayúsculas y minúsculas.
                       A efectos de búsquedas y reemplazos.
:set noignorecase Desactiva la anterior.


:set shiftwidth=n       Sangrado izquierdo.
                       ^T deja n espacios más.
                       ^D quita n espacios al sangrado.

El Sistema Operativo Unix-Linux                      Comandos Básicos                 46
No afecta a la tecla del tabulador, que inserta 8 espacios.


    :set autoindent      En la nueva línea emplea el mismo margen izq.
    :set noautoindent Desactiva la anterior.


    :set wrapmargin=n Número de espacios del margen derecho.


    :set showcmd       Muestra el comando de pantalla en la línea inferior mientras se escribe, al
                       ejecutarse se borra.
    :set noshowcmd Desactiva la anterior.


    :set ruler         En la línea de estado, muestra la línea y columna donde se encuentra el
                       cursor.
    :set noruler         Desactiva la anterior.


    Para recomponer la pantalla después de un mensaje u otra incidencia pulsar ^L, en modo
    comando.


    :set    Muestra las opciones activas.
    :set all Muestra todos los posibles set.




     Estos comandos set se pueden utilizar en cualquier momento cuando se esta trabajando con
vi, pero se pueden guardar en un fichero de configuración llamado ".exrc" (“.vimrc” para el editor
vim) y automáticamente se cargaran al comenzar una sesión con vi. Estos ficheros se encuentran
en el directorio home de cada usuario. Por ejemplo .exrc (.vimrc) puede contener:


                                                    set showmode
                                                    set number
                                                    set autoindent
                                                    set shiftwidth=4
                                                    set wrapmargin=5


           Acceder al shell
    :!orden Ejecuta la orden y después de pulsar return regresa al vi.
    :sh                  Sale al sh y regresa al escribir exit o ^d.


           Abreviaturas
    :ab abreviada cadena_a_abreviar Pone una abreviatura a una cadena.
    :una abreviada                                    Deshace la abreviatura.
    :ab                                                                Muestra las abreviaturas creadas.

    El Sistema Operativo Unix-Linux                 Comandos Básicos                          47
Búsquedas y reemplazos.
    /texto    El cursor se desplaza a la línea de comandos.
                            La búsqueda se realiza hacia el final del fichero.
    ?texto Ídem, pero hacia el principio del fichero.
    n                       Repite la última búsqueda.
    N                       Ídem pero cambiando el sentido.


    La búsqueda no se hará circular si empleamos :set nowrapscan.


    Se puede utilizar una expresión en lugar del texto. Caracteres con un significado especial
dentro de las expresiones de búsqueda:


    .         Cualquier carácter.
    ^         Debe de ser el primer carácter. Indica principio de línea.
    $         Indica final de línea.
    <        Comienzo de palabra.
    >        Final de palabra.
    []        Conjunto de caracteres. Ejemplos:[0-9], [^A-Z], [aeiou].
    *         Ninguna o más repeticiones del carácter anterior.


    Para que estos metacaracteres pierdan su significado se usa .
    También se pueden inhabilitar con :set nomagic.


             Reemplazos globales.
    :ámbitos/patrón1/patrón2/g


    ámbito n                La línea número n.
                            n1,n2          Rango de líneas.
                            .              Línea actual.
                            $              Final de fichero.
                            %              Todo el fichero.
    s                       Es la orden.
    /patrón1 Lo que buscamos.
    /patrón2 Por lo que lo vamos a sustituir. Si no se especifica se borra la expresión buscada.
       /g En todas las ocurrencias de una línea. De no indicarse se reemplaza la primera
ocurrencia de cada línea.


    El Sistema Operativo Unix-Linux                     Comandos Básicos                   48
Marcar texto.
    mletra
    Donde m es el comando (mark) marcar, y debe de ir seguido de una letra de la a a la z. Pone
una señal invisible en la posición del cursor.
          Las marcas sirven para:
               Referirnos a la línea: 'letra (comilla simple).
               Referirnos al carácter: `letra (acento grave).
     Con las marcas podemos desplazarnos a determinados puntos, solo con teclearlas precedidas
de ' o `.
    También se pueden utilizar para indicar el alcance en comandos como d, y, c. Así por ejemplo
para borrar de la línea en curso hasta la que esta marcada con la letra a d'a.



           Los Búfers del VI
    Podemos distinguir 3 tipos de búfers:


              El búfer sin nombre o de proposito general. Que se usa automáticamente en las
              operaciones de cortar, copiar, pegar y cambiar.


              Los búfers numerados, que son nueve. Y contienen los nueve grupos de líneas
              borradas más recientemente con el comando d o x. Lo borrado más recientemente se
              almacena en el búfer nº 1.
          Se puede pegar su contenido en cualquier parte con el comando p o P.
          Utilizando la sintaxis “nºp.


              Los 26 búfers alfabéticos (de la a a la z). Se emplean en conjunción con las órdenes
              de cortar, copiar y pegar. Para ello se teclea precediendo la orden, comillas dobles y la
              letra del búfer, que se va a utilizar para depositar la información o tomarla de allí.


             Edición de múltiples ficheros.
    Cuando al invocar a vi se especifican varios ficheros (ya sea utilizando una lista o empleando
metacaracteres). Se empieza editando el primero.


    :n         Después de que ejecutemos :w (grabar) se pasa al siguiente.
    :n!
    :rew       Después de :w pasa a editar el primero de la lista.
    :rew!
    :args      Informa de los ficheros cargados.


    :e fichero Pasa a editar el nuevo fichero si se ha grabado el anterior. Aunque no se haya

    El Sistema Operativo Unix-Linux                     Comandos Básicos                    49
cargado inicialmente, no se verá con la orden “:args”.
    :e! fichero            Ídem aunque no se haya grabado el anterior.
    :e#                    Regresa al fichero anterior.


           Mover texto de un fichero a otro.
    Utilizando los búfers alfabéticos.


    Ejemplo: "ay'z (extrae el texto desde la línea en curso hasta la marcada con z y las almacena
en el búfer a.
    En otro fichero se pegará con la orden “ap.


    No se puede utilizar el búfer sin nombre, ni los numerados (en el vi estándar), pues estos se
borran al pasar de un fichero a otro.


    Otra forma sería grabando el bloque en un fichero temporal:
    :nºLínea1, nºLínea2w fichero Graba el rango de líneas en el fichero indicado.
    :r fichero               Inserta el fichero después de la línea en curso.


    Contamos con otros editores como: emacs, joe, nano, gedit,…




    El Sistema Operativo Unix-Linux                   Comandos Básicos                 50
Comunicación entre Usuarios
    Lo primero será averiguar información sobre los usuarios y los que están conectados

         finger
     Proporciona información sobre los usuarios conectados al sistema, o incluso no conectados si
indicamos su nombre. La sintaxis es:
     finger [opc] [usuario...] [usuario@host...]
    Por defecto muestra la siguiente información sobre cada usuario comectado al host local:
        Nombre de conexión.
        Nombre completo del usuario.
        Nombre del terminal, si va precedido por un * no admite mensajes con write.
        Tiempo que lleva ocioso.
        Hora de conexión.
        Desde dónde se ha establecido la conexión.


    Si sólo queremos información del usuario user07 escribiremos:
    finger user07
    En este caso la muestra aunque no esté conectado.

         who
    who [opciones]
     Con who podemos ver los usuarios conectados a nuestro sistema, además, nos muestra el
terminal en el que están conectados y el tiempo de conexión. who imprime la siguiente información
por cada usuario que actualmente está conectado al sistema:
        Nombre de la cuenta (login name).
        Terminal.
        Momento en el que se conectó.
        Nombre de ordenador remoto o terminal X.
    Si sólo queremos información sobre el usuario que ejecuta la orden escribiremos:
    who -m
    who am i

         w
    w [usuario]
   Nos da información sobre los usuarios que están conectados en el momento que se ejecuta el
comando y sobre que están haciendo.
    También se puede indicar un usuario en concreto.
    Ejemplo:
    $w
    4:59pm up 4:05, 3 users, load average: 0.00, 0.01, 0.01
    USER    TTY      LOGIN@                 IDLE     JCPU     PCPU      WHAT

    El Sistema Operativo Unix-Linux               Comandos Básicos                        51
paco     tty1     12:54pm 4:04m          11.85s    0.03s    startx
    cursolin tty3     4:59pm 7.00s           0.06s     ?        -
    paco     pts/0    4:53pm 0.00s           0.08s     0.03s    w


    En la primera línea nos informa de
                             La hora actual.
                             Cuánto lleva el sistema funcionando.
                             Cuántos usuarios están conectados.
                             Las cargas medias en los anteriores 1, 5 y 15 minutos.
    A continuación para cada usuario se muestra:
                             Nombre de login,
                             Nombre de tty.
                             Tiempo de conexión.
                             Tiempo inactivo.
                             Jcpu, es el tiempo usado por todos los procesos bajo el terminal tty.
                             Pcpu, es el tiempo usado por el proceso en curso.
                             La línea de comando del proceso en curso.



         write
    write usuario [terminal]
    El comando write nos permite mandar un mensaje a otro usuario en tiempo real, es decir, el
mensaje aparecerá inmediatamente en la pantalla del destinatario. Estos mensajes no se
almacenan en ningún buzón.
    Por supuesto sólo nos vale si el destinatario está conectado, y además debe tener mesg en y.
    Supongamos que deseamos enviar un mensaje al usuario user07, y que tiene activa la
recepción de mensajes, en ese caso escribiríamos
    write user07
    Una vez escrito el texto que deseemos enviar como mensaje:
    Hola Pepito, que no se te olvide la cita.
    pulsaremos [Ctrl]+[d] y el mensaje será enviado.


    También podemos mantener comunicaciones bidireccionales tipo walkie-talkie.
    Para ello no se pulsa ^d, y el otro usuario debe de escribir la orden write con nuestro nombre,
cada vez que pulsemos return, esa línea aparecerá en el terminal del otro ususario.

         wall
    wall [archivo]
    Si queremos enviar un mensaje, no a un solo usuario, sino a todos los usuarios conectados
usaremos wall. El mensaje puede estar previamente contenido en un fichero, y para enviarlo
escribiremos:
    wall < fichero.txt
    Es una utilidad para el administrador y sólo él puede escribir en los terminales de los usuarios
que hayan denegado la recepción de mensajes.




    El Sistema Operativo Unix-Linux                Comandos Básicos                        52
Mensaje del día.
    Es otra forma de comunicación, en este caso del administrador con los usuarios.
    Consiste en un pequeño mensaje o aviso que aparecerá en el terminal de cada usuario cuando
este se conecte.
    El administrador colocará este mensaje en el fichero /etc/motd.

         Mensaje de preentrada
     Aparece justo antes de la línea que nos pide el nombre del usuario “login:”, cuando accedemos
al sistema mediante acceso de consola.
    El administrador coloca el mensaje en el fichero /etc/issue.

         mail
    En el caso de que nuestro usuario no esté conectado, el mejor comando para comunicarnos
con él es mail.
           Envio de mensajes
     El mensaje a enviar puede ser tecleado directamente o estar previamente contenido en un
fichero. La sintaxis básica es:
     mail usuario(s)
     mail usuario(s) < fichero
    No admite metacaracteres.
    Si queremos enviar un mensaje a User07 escribiremos:
    mail User07
    Subject: Cita
    Te recuerdo que tenemos una cita
    .
     Se nos pide el asunto y a continuación escribimos el texto, finalmente al principio de una nueva
línea ponemos un punto (.) y pulsamos return.
    Cuando User07 se conecte al sistema, éste le avisará de que tiene un correo:


    Para enviar el contenido de un fichero:
    mail user07 < carta
    Algunas opciones de la línea de comando:
    De esta manera no solicita el asunto, si tenemos interés en indicarlo usaremos la opción -s:
        -s “cadena”               Indicamos el asunto de la correspondencia.
        -c “Usuario(s)”           Usuarios que recibirán una copia.
        -b “usuario(s)”           Usuarios que recibirán una copia ciega (los demás no se
            enteran).
    En cualquiera de los dos formatos en lugar de poner un ususario podemos colocar una lista de
destinatarios.
    Si queremos enviar un mensaje a un usuario de otra máquina escribiremos:
    $ mail usuario@nombre_maquina


    El Sistema Operativo Unix-Linux                Comandos Básicos                       53
Lectura del correo.
    Entramos en el modo de lectura del correo electrónico simplemente escribiendo “mail” sin
opciones ni argumentos.
    Al entrar muestra un resumen tabular de todos los mensajes existentes en nuestro fichero
buzón “/usr/spool/mail/UserName” (en nuestro sistema “/var/mail/UserName”), esta información
consiste en:
        Estado:
         N Mensajes nuevos.
         U No son nuevos, pero no han sido leidos.
         R Leidos en la actual sesión.
         P Preservados. leidos y almacenados en el buzón de entrada.
         D Marcados para ser eliminados.
         O Mensajes antiguos.
         * Guardados en otro archivo buzón.
        Nº de mensaje.
        Remitente.
        Fecha y hora de recepción.
        Nº de líneas / caracteres.
        Asunto.
    Finalmente aparece el prompt o inductor de mail, para que le indiquemos cual es la siguiente
operación que vamos a realizar.
    Órdenes para ver mensajes:
       h                     Vuelve a visualizar las cabeceras de los mensajes.
       z+ z-                 Si la lista de cabecera es muy larga, avanza y retrocede pantalla.
       nº_mensaje            Visualiza el mensaje.
       Intro                 Visualiza mensaje siguiente.
       +                     Visualiza el mensaje siguiente.
       -                     Visualiza el mensaje anterior.


    Eliminación y recuperación de mensajes.
           d nº_mensaje               Marca para eliminar los mensajes indicados.
       q                              Sale de mail, elimina los marcados y guarda los leidos en
    mbox.
           x                          Sale de mail sin borrar los marcados.
         pre nº_mensaje               Preserva los mensajes en el buzón de entrada aunque estén
    leidos.
           s nº_mensaje fichero       Almacena los mensajes en el fichero incluida la cabecera.
           w nº_mensaje fichero       Almacena los mensajes en el fichero sin cabecera.


               Configuración.
    mail posee un fichero de configuración llamado .mailrc, que es utilizado por mail cada vez que

    El Sistema Operativo Unix-Linux                  Comandos Básicos                      54
se ejecuta, en él podemos configurar muchas opciones:
    set asksub          Solicita introducción de asunto.
    set askcc           Solicita, antes de enviarlo, direcciones para copias.
    set prompt=”cad”    Cambia el inductor de mail.
    set sign=”cad”      Establece cadena de firma que se inserta con ~a.
    set folder=dir      Establece directorio donde almacenar archivos buzón.
    set record=fich     Guarda en el fich todo el correo que se cree o envie.
    set outfolder       Pone el archivo “record” en el directorio “folder”.
    set MBOX=fich       Establece el nombre para el fichero mbox.
    set MBOX=+fich      Con el signo + lo coloca en el directorio “folder”.


     Otra utilidad del fichero de configuración es la de crear alias, un alias en mail es un nombre que
se le da a un grupo de usuarios para mandarle el mismo correo a todos, ahorrándonos de esta
forma tener que teclear el nombre de cada usuario individual. El formato es el siguiente:
     alias NombreAlias ListaUsuarios
    ejemplo:
    alias clase user01 user02 user03 user 04 user05 user06 user07




    El Sistema Operativo Unix-Linux                 Comandos Básicos                        55
Particionado

Estructura física del disco
Hay varios conceptos para referirse a zonas del disco:

   •   Plato: cada uno de los discos que hay dentro
       del disco duro.
   •   Cara: cada uno de los dos lados de un plato.
   •   Cabeza: número de cabezales, uno por plato.
   •   Pista: una circunferencia dentro de una cara;
       la pista 0 está en el borde exterior.
   •   Cilindro: conjunto de varias pistas; son todas
       las circunferencias que están alineadas
       verticalmente (una de cada cara).

   •   Sector: cada una de las divisiones de una
       pista. El tamaño del sector no es fijo, siendo
       el estándar actual 512 bytes, aunque
       próximamente serán 4 KB. Antiguamente el
       número de sectores por pista era fijo, lo cual
       desaprovechaba el espacio significativamente, ya que en las pistas exteriores pueden
       almacenarse más sectores que en las interiores. Así, apareció la tecnología ZBR
       (grabación de bits por zonas) que aumenta el número de sectores en las pistas
       exteriores, y utiliza más eficientemente el disco duro.

                                     Pista (A), Sector (B), Sector de una pista (C), Clúster (D)

El primer sistema de direccionamiento que se usó fue el
CHS (siglas de cylinder-head-sector cilindro-cabeza-
sector), ya que con estos tres valores se puede situar un
dato cualquiera del disco. Más adelante se creó otro
sistema más sencillo: LBA (siglas de logical block
addressing, dirección lógica de bloques), que consiste en
dividir el disco entero en bloques y asignar a cada uno un
único número. Éste es el que actualmente se usa.

Partición
Una partición de disco, es el nombre genérico que recibe cada división de una unidad física
de almacenamiento de datos. Toda partición tiene su propio sistema de ficheros (formato);
generalmente, casi cualquier sistema operativo interpreta, utiliza y manipula cada partición
como un disco físico independiente, a pesar de que dichas particiones estén en un solo disco
físico.

Físicamente una partición se corresponde con un conjunto de cilindros contiguos.
MBR: Partes y funciones
El registro de arranque maestro como también se conoce (del inglés Master boot record
cuyo acrónimo es MBR), es un sector de 512 bytes al principio del disco duro que contiene
una secuencia de comandos necesarios para cargar un sistema operativo y una tabla donde
están definidas las particiones del disco duro.

Se localiza en el primer sector físico (Cilindro 0, Cabeza 0, Sector 1) asignado a un disco
duro. Cada disco duro tiene un MBR

Cuando se arranca desde el disco duro, la BIOS copia el contenido del MBR en una dirección
fija de la memoria para luego darle el control. Este código arrancará seguidamente el sistema
operativo, ya sea desde el disco duro o desde un Boot-Loader o cargador, algo más complejo,
como por ejemplo LILO, GRUB o GAG.

El MBR incluye generalmente la tabla de particiones y un código inicial para arrancar el
Sistema operativo.

Estructura del Master Boot Record

                      Offset Naturaleza                          Size
                      +00h    Código ejecutable                  446 byte
                      +1BEh 1ª entrada de tabla de particiones 16 bytes
                      +1CEh 2ª entrada de tabla de particiones 16 bytes
                      +1DEh 3ª entrada de tabla de particiones 16 bytes
                      +1EEh 4ª entrada de tabla de particiones 16 bytes
                      +1FEh Marcador ejecutable (AA55h)          2 bytes

Este diseño permite que la BIOS arranque el código máquina contenido allí y este inicie el
sistema operativo según las especificaciones de su programa. Muchos virus aprovechan este
funcionamiento de arranque estándar para arrancarse antes que el sistema operativo.

Entradas de la tabla de particiones
Registro de la tabla de particiones – 16 bytes
Offset Descripción
0x00     Estado
0x01     Cabezal, Sector y Cilindro del primer sector en la partición
0x04     Tipo de partición
0x05     Cabezal, Sector y Cilindro del último sector de la partición
0x08     (4 bytes) (Logical block) address del primer sector de la partición
0x0C (4 bytes) Longitud de la partición, en sectores

Por convención, hay exactamente cuatro entradas de particiones primarias.
Tipos de particiones y unidades lógicas
El formato o sistema de archivos de las particiones (p. ej. NTFS) no debe ser confundido con
el tipo de partición (p. ej. partición primaria), ya que en realidad no tienen directamente
mucho que ver. Independientemente del sistema de archivos de una partición (FAT32, ext4,
NTFS, etc.), existen 3 tipos diferentes de particiones:

   •   Partición primaria: Son las divisiones crudas o primarias del disco, solo puede haber
       un máximo de 4, o 3 primarias y una extendida. Un disco físico completamente
       formateado consiste, en realidad, de una partición primaria que ocupa todo el espacio
       del disco y posee un sistema de archivos. A este tipo de particiones, prácticamente
       cualquier sistema operativo puede detectarlas y asignarles una unidad, siempre y
       cuando el sistema operativo reconozca su formato (sistema de archivos).
   •   Partición extendida: También conocida como partición secundaria es otro tipo de
       partición que actúa como una partición primaria; sirve para contener infinidad de
       unidades lógicas en su interior. Fue ideada para romper la limitación de 4 particiones
       primarias en un solo disco físico. Solo puede existir una partición de este tipo por
       disco, y solo sirve para contener particiones lógicas. Por lo tanto, es el único tipo de
       partición que no soporta un sistema de archivos directamente.
   •   Partición lógica: Ocupa una porción de la partición extendida o la totalidad de la
       misma, la cual se ha formateado con un tipo específico de sistema de archivos
       (FAT32, NTFS, ext4,...) y se le ha asignado una unidad, así el sistema operativo
       reconoce las particiones lógicas o su sistema de archivos. Puede haber un máximo de
       23 particiones lógicas en una partición extendida. Linux impone un máximo de 15,
       incluyendo las 4 primarias, en discos SCSI y en discos IDE 63.

Las particiones extendidas se inventaron para superar el límite de 4 particiones primarias
máximas por cada disco duro y poder crear un número ilimitado de unidades lógicas, cada una
con un sistema de archivos diferente de la otra.

Todos los sistemas modernos (Linux, cualquier Windows basado en NT e incluso OS/2) son
capaces de arrancar desde una unidad lógica. Sin embargo, el MBR por defecto utilizado por
Windows y DOS sólo es capaz de continuar el proceso de arranque con una partición
primaria. Cuando se utiliza este MBR, es necesario que exista por lo menos una partición
primaria que contenga un cargador de arranque (comúnmente el NTLDR de Windows). Otros
cargadores de arranque que reemplazan el MBR, como por ejemplo GRUB, no sufren de esta
limitación.

Hay que tener en cuenta que solo las particiones primarias y lógicas pueden contener un
sistema de archivos propio.




Representación gráfica de un disco particionado.
Cómo nombra las particiones Linux
Linux hace referencia a las particiones en disco como una combinación de letras y números,
este es un método más flexible y ofrece más información que el enfoque dado por otros
sistemas operativos. De forma resumida:

   •   Dos Letras Iniciales - las primeras dos letras del nombre de la partición indican el
       tipo de dispositivo donde reside la partición. Normalmente serán hd (para discos IDE)
       o sd (para discos SCSI o SATA).
   •   Tercera Letra - esta letra indica que dispositivo contiene la partición. Por ejemplo
       /dev/hda (el primer disco duro IDE) o /dev/sdb (segundo disco SCSI).
   •   Número - indica la partición. Las primeras cuatro (primarias o extendida) particiones
       son numeradas de 1 a 4. Particiones lógicas empiezan en 5. Por ejemplo /dev/hda3 es
       la tercera primaria o extendida en el primer disco IDE; /dev/sdb6 es la segunda
       partición lógica del segundo disco duro SATA.

Así para acceder a las particiones y a otros dispositivos de almacenamiento usaremos:

   •   Disqueteras
          o Primera disquetera: /dev/fd0 (en Windows sería la disquetera A:)
          o Segunda disquetera: /dev/fd1
   •   Discos IDE (en general: /dev/hdx#, donde x es el disco y # es la partición)
          o Primer disco duro: (todo el disco) /dev/hda
                     Particiones primarias
                             Primera partición primaria: /dev/hda1
                             Segunda partición primaria: /dev/hda2
                             Tercera partición primaria: /dev/hda3
                             Cuarta partición primaria: /dev/hda4
                     Particiones lógicas
                             Primera partición lógica: /dev/hda5, las siguientes correlativas
          o Segundo disco duro: (todo el disco) /dev/hdb
   •   Discos SCSI o SATA
          o Primer disco: /dev/sda
          o Segundo disco: /dev/sdb
                     Y la misma numeración para las particiones.
   •   Primer CD-ROM SCSI: /dev/scd0, también conocido como /dev/sr0

Aplicaciones para la edición de particiones
GParted es el editor de particiones de GNOME.
Esta aplicación es usada para crear, destruir,
redimensionar,      inspeccionar      y    copiar
particiones, como también sistemas de archivos.
Esto es útil para crear espacio para nuevos
sistemas operativos, para reorganizar el uso del
disco y para crear imágenes de un disco en una
partición. QtParted, es la contraparte de GParted
pero para entornos de escritorios KDE.
Servidor ssh
Secure SHell, (cuya traducción sería intérprete de comandos seguro) es un protocolo de
comunicación para controlar un ordenador en remoto a través de una CLI (Command Line Interface -
Interfaz de Línea de Comandos- también llamada: "shell"). Sirve para conectarnos con un ordenador
ante el cual no estamos físicamente, bien porque está en una sala de servidores refrigerada, bien
porque no tiene teclado ni pantalla, por ejemplo los que están apilados en un rack (un armario donde
se guardan ordenadores como los servidores web, de correo electrónico, firewalls, etc...).

OpenSSH es una versión libre del protocolo Secure Shell (SSH), es una familia de herramientas para
control remoto o transferencia de archivos entre equipos. Las herramientas utilizadas tradicionalmente
para realizar estas funciones, eran telnet o rcp, que son inseguras y transmiten la contraseña de los
usuarios en texto plano cuando son usadas. OpenSSH proporciona un demonio y unos clientes para
facilitar un control remoto seguro y encriptado.



Instalación
La instalación de cliente y servidor OpenSSH es simple. Para instalar las aplicaciones cliente de
OpenSSH en tu sistema Linux, usa el siguiente comando:

sudo apt-get install openssh-client

Para instalar la aplicación servidor de OpenSSH, y los archivos de soporte relacionados:

sudo apt-get install openssh-server

          Instala la parte cliente y la parte servidora en tu equipo.



Configuración
Puedes configurar el comportamiento predeterminado del servidor OpenSSH, sshd,
editando el archivo /etc/ssh/sshd_config. Para más información: man sshd_config.
Debes hacer una copia del archivo original y protegerlo contra escritura; así tendrás la
configuración original como referencia y podrás volver a usarla si es necesario.
Ejemplos de direct ivas de configuración que se pueden cambiar editando el archivo
/etc/ssh/ssh_config:
    • Para hacer que OpenSSH escuche por el puerto TCP 2222 en lugar del puerto TCP 22
      por defecto, cambia la direct iva Port como sigue:
Port 2222

    • Para hacer que sshd permita credenciales de inicio de sesión basados en clave
      pública, simplemente añade o modifica la línea:


Openssh                                                                                                  1
PubkeyAuthentication yes

    • Para hacer que el servidor OpenSSH muestre el contenido del archivo /etc/issue.net
      como banner antes del login, simplemente añade o modifica la línea:
Banner /etc/issue.net

    • Indicar la versión del protocolo a ut ilizar (SSH v1 o SSH v2).
Protocol 2

    • PermitRootLogin: Permit ir conexiones como el usuario “root” (NO PERMITIR, por
      seguridad).
    • PermitEmptyPasswords: Permit ir contraseñas vacias (NO PERMITIR, por seguridad).
PermitEmptyPasswords no

    • Permit ir el reenvio a traves de SSH de los siguientes servicios
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes

Después de hacer los cambios en el archivo /etc/ssh/sshd_config, guarda este, y reinicia el
servidor sshd para que los cambios tengan efecto usando la siguiente orden en una
terminal:
sudo      /etc/init.d/ssh     restart

          Hacer una copia del fichero sshd.config a sshd.config.copia
          Examinar al fichero /etc/ssh/sshd_config
          Modificar algún valor.
          Reiniciar el servicio.


Conexión a un servidor remoto
Si tenemos instalada la parte cliente de Openssh, hacemos ping al servidor y contamos en el con una
cuenta. Nos conectamos de la siguiente forma:

$ ssh usuario_remoto@host_remoto

Nos pide la contraseña del usuario. La primera vez que nos conectemos a un servidor tarda un poco
más y nos pide confirmación tecleando "yes" con todas sus letras, las subsiguientes ya no. Sabemos
que estamos conectados porque el prompt cambia y aparece en lugar del nombre de nuestro host el
nombre del host remoto.

Los comandos, programas y scripts que lancemos tras conectarnos se ejecutarán en la máquina a las


Openssh                                                                                               2
que nos hayamos conectado, utilizando los recursos del host remoto (CPU, memoria, disco, etc.). Esta
arquitectura puede utilizarse, por ejemplo, para tener un servidor más potente y varios clientes que
ejecutan aplicaciones en dicha máquina.

          Conectaros al Linux de un compañero, usando la cuenta “usuario” clave
          usuario.
          Comprobar que se han conectado, consultando los usuarios que hay
          activos en el sistema.


Uso de aplicaciones gráficas
Para poder ejecutar aplicaciones gráficas en el host remoto de forma segura, necesitamos dos cosas.
La primera, que en la configuración del servidor SSH del host remoto (/etc/ssh/sshd_config) se
encuentre activada la siguiente opción:

X11Forwarding yes

Para aprovechar esta característica, hemos de conectarnos usando el parámetro -X, lo que exportará
la configuración de la variable $DISPLAY con lo que podremos ejecutar aplicaciones gráficas de forma
remota:

$ ssh -X usuario_remoto@host_remoto

Ahora si ejecutas el programa xclock verás que la ventana sale en tu escritorio:

$ xclock

De igual manera puedes ejecutar gedit.

          Comprueba que tu fichero de configuración de sshd, admita conexiones
          gráficas.
          Conéctate al sevidor ssh de un compañero con la opción –X.


Enviar u obtener archivos y carpetas con scp
Permite la copia de ficheros entre ordenadores de una red, empleando la misma autenticación y
seguridad que ssh.

En una consola o terminal tecleamos:

$ scp -r usuario@maquina:/home/user07/carpeta ./local

Nos pide el password y copiará el directorio remoto "/home/user07/carpeta", en el directorio "./local",
siempre que usuario tenga los permisos necesario.

La opción "-r" significa recursivo, es decir, copia el directorio y todo su contenido, incluidos los
subdirectorios y su contenido. Si no lo ponemos la orden para copiar todos los archivos de una
carpeta sería:



Openssh                                                                                                   3
$ scp usuario@maquina:/home/user07/carpeta/* ./local

Si lo que queremos es enviar el contenido de un directorio, al ordenador remoto, utilizaremos la
orden:

$ scp /home/sif07/local/* usuario@maquina:/home/user07/carpeta/

          Transferir archivos y carpetas, desde y hacia vuestra cuenta en el
          ordenador del profesor.

          Realizar copias entre los ordenadores de los compañeros.



Hacer todo esto en modo gráfico
Si lo que que queremos es conectarnos a un ordenador por ssh en modo gráfico también lo podremos
hacer. Es más simple pero también tienes menos posibilidades, o para hacer ciertas cosas tardas más
incluso que haciéndolo por consola, pero para las operaciones fáciles como administrar, editar un
fichero también es posible hacerlo de esta manera.

Entraremos en Lugares -> Conectar con al servidor...

Elegiremos en el desplegable de arriba en lugar de FTP público, SSH y pondremos la IP del servidor.



Restringir el acceso SSH
Para evitar que todos los usarios de la máquina estén accesibles por SSH, editamos el fichero
/etc/ssh/sshd_config, y añadimos la línea AllowUsers y a continuación los usuarios que se van a poder
conectar remotamente via SSH:

$ sudo gedit /etc/ssh/sshd_config

Y añadimos la línea:

AllowUsers usuario1 usuario2 usuario3

Para que los cambios surtan efectos habrá que reiniciar el servidor:

$ sudo /etc/init.d/ssh restart




Openssh                                                                                                 4
Administración de grupos y usuarios

Trabajo con grupos
Los grupos son «colecciones» de usuarios que comparten recursos o ficheros del sistema. Con los grupos se
pueden aplicar permisos concretos para un conjunto de usuarios, sin tener que repetirlos cada vez que se
desee aplicarlos.



Cómo actúan los grupos:
Cada usuario pertenece como mínimo a un grupo. Al crear un fichero se establece como grupo propietario el
grupo activo del usuario en ese momento.

Para determinar si tenemos permisos sobre un fichero, por ejemplo para leerlo o modificarlo, se usan todos
los grupos a los que pertenecemos.

⋆ El grupo activo suele ser el primario, salvo que se haya cambiado con newgrp



El fichero de configuración de grupos
/etc/group

Este archivo contiene todos los grupos existentes en el sistema y los usuarios que pertenecen a los diversos
grupos. En cada línea almacena información relativa a un grupo. La estructura de este fichero es de la
siguiente forma:

Grupo:x:GID:Lista de usuarios

    •   Grupo: nombre del grupo, o groupname.
    •   x indica que el password se guarda en el archivo /etc/gshadow.
    •   GID: identificador del grupo, internamente el sistema identifica al grupo por este número.
    •   Lista de usuarios: los usuarios que pertenecen al grupo, separados por comas «,»
Por ejemplo:

sif:x:519:pilar,alvaro,juan,luis,user01,user02,user03



/etc/gshadow, contiene la información de seguridad de los grupos (grupo, contraseña, y también los
miembros). Su funcionalidad es la misma que /etc/shadow para los usuarios, esto es, añadir una seguridad
extra a las contraseñas. Su estructura es:

Grupo:Clave encriptada:Administradores del grupo:Lista de usuarios




Usuarios y Grupos                     Administración Linux                                     1
Ojear el fichero group de tu sistema y el del profesor.
    Intentarlo igualmente con el fichero gshadow
    Comprobar la diferencia entre los permisos de /etc/group y /etc/gshadow


Tipos de grupos
    •   Primario: el grupo especificado en el fichero /etc/passwd, se asigna al dar de alta al usuario.
    •   Secundarios: los otros grupos a los que pertenece, que aparen en /etc/group


Comandos
    •   Nuevo grupo:
groupadd grupo

También podemos dar de alta un grupo editando directamente el fichero /etc/group.

    •   Modificar un grupo existente:
groupmod [-n nuevo-nombre] nombre-grupo

Con esto le estamos cambiando el nombre al grupo.

    •   Eliminar un grupo:
groupdel grupo

También lo podemos eliminar directamente en el fichero /etc/group, con cuidado de mantener la integridad
con los ficheros de usuarios.



    •   Añadir un usuario a un grupo
gpasswd -a user grupo

    •   Eliminar un usuario de un grupo:
gpasswd -d user grupo

    •   Añadir una lista de usuarios a un grupo
gpasswd -M user1,user2,usern grupo

    •   Añadir una lista de usuarios administradores a un grupo
gpasswd -A user1,user2,usern grupo

    •   Otra forma de añadir y eliminar usuarios de un grupo:
# adduser usuario grupo

# deluser usuario grupo



    •   Cambiar de grupo activo:
newgrp grupo

Usuarios y Grupos                       Administración Linux                                     2
Lanza un shell donde el usuario trabaja con los permisos del grupo indicado, y los ficheros o directorios que
cree pertenecerán a este grupo.



    •   Asignar una contraseña a un grupo:
gpasswd grupo

Si un grupo tiene contraseña, un usuario que la conozca podrá trabajar con ese grupo, a pesar de no
pertenecer él. Al ejecutar la orden newgrp grupo introducirá la contraseña y pasará a ser su grupo activo.

    •   Eliminar contraseña de un grupo:
gpasswd –r grupo



    •   Grupos a los que pertenece un usuario
groups usuario

    •   Lista el identificador del usuario y los grupos a los que pertenece
id usuario



    •   Chequea la consistencia del fichero de grupos
grpck

    •   Volver a sincronizar los ficheros group y gshadow
grconv

Se usa la orden pwconv para los ficheros de usuarios.



    •   Cambiar directorios o ficheros de grupo propietario
chgrp [-R] grupo archivo

Con la opción -R hace el cambio de forma recursiva.



Grupos predeterminados
    o   root, sys
    o   bin, daemon, adm, lp, disk, mail, ftp, nobody, tty, etc.
    o   Kmem: Grupo propietario de los programas para leer la memoria del kernel
    o   users



Práctica de grupos:

    Hacer una copia de los ficheros group y gshadow.

Usuarios y Grupos                     Administración Linux                                     3
Crear los grupos: grupouno, grupodos y g20.
    (*) Comprobar los cambios en los ficheros group y gshadow.
    Cambiar el nombre de g20 por grupo20. (*)
    Chequear la consistencia de los ficheros de grupos.
    Eliminar el grupo20 del fichero group con un editor.
    Volver a comprobar la consistencia de los ficheros de grupos.
    Agregarlo nuevamente y borrarlo con el comando apropiado.
    Asignar una clave al grupodos. (*)
    Cambiar al grupodos, aunque no pertenezcamos a él.
    Crear un fichero y comprobar a que grupo pertenece.
    Volver al grupo primario.
    Quitarle la contraseña al grupodos, e intentar pasarse a él.
    Añadiros al grupouno y al grupodos. (*)
    Poneros grupouno como el activo.
    Crear un fichero y comprobar a que grupo pertenece.
    Mostrar a que grupos pertenecéis, con y sin GID.
    Borrar el grupodos. (*)
    Chequea la consistencia del fichero de grupos.




Los usuarios
Las cuentas de usuario ofrecen:

    o   Un nombre y una contraseña, con los que autenticarnos en el sistema.
    o   Una ruta para almacenar los documentos.
    o   Un perfil generalmente dentro de la carpeta /home/nombre-usuario, comúnmente denominada
        carpeta home del usuario.
    o   Un intérprete de comandos (shell) que le permitirá ejecutar aplicaciones.


Ficheros de configuración de usuarios
Cuando se agregan usuarios al sistema se modifican ciertos archivos que a continuación mostramos, además
de los de grupos:

/etc/passwd

Este archivo contiene todos los usuarios del sistema y la estructura que guarda es de la   siguiente forma

Usuario:x:UID:GID:Comentarios:Directorio Home:Shell

Con el siguiente significado:

    •   Usuario: Nombre del usuario.
    •   x: La clave se encuentra en el fichero /etc/shadow.


Usuarios y Grupos                      Administración Linux                                      4
•   UID: Nº de identificación del usuario.
    •   GID: Nº de identificación del grupo primario.
    •   Comentarios: Información Usuario. Campo comentario.
    •   Directorio Home: o Directorio de Conexión.
    •   Shell: El intérprete de comando por defecto.


/etc/shadow

Almacena información sobre la contraseña de cada usuario. No es obligatorio, por lo que no existe en
algunas versiones. Sus campos, también separados por “:” son los siguientes:

    •   Nombre del usuario.
    •   Contraseña cifrada.
    •   Días transcurridos desde 01-01-1970 y la última modificación de la clave.
    •   Nº de días necesarios para que el usuario pueda cambiarla.
    •   Nº de días máximo en los que la contraseña es válida.
    •   Nº de días de antelación con los que el sistema avisará al usuario de la caducidad.
    •   Nº de días de inactividad que se permite al usuario.
    •   Nº de días a partir del 1/1/1970, pasados los cuales su nombre no podrá ser utilizado.
    •   No usado.
Este fichero es aún más restrictivo en sus permiso que el fichero /etc/passwd.

    Examinar los ficheros /etc/passwd y /etc/shadow, comprobar sus permisos.


Creación de usuarios
Esta labor es exclusiva del administrador. Dependiendo de las versiones, contamos con las órdenes:

    o   adduser         Existe en versiones interactivas y otras en las que la información se introduce
        mediante parámetros.
    o   useradd         [-opciones] login


adduser (comando interactivo para dar de alta)

    •   Pide los datos necesarios y confirmación al final.
    •   Da de alta al usuario en los ficheros /etc/passwd y /etc/group.
    •   Crea su directorio y en el copia los ficheros existentes en /etc/skel, que deberá de contener los
        ficheros de configuración.


useradd recibe la información como parámetros de la línea de comando, su formato es:

useradd [opciones] usuario

        -g IDGroup        Nº ID o nombre del grupo primario.
        -G IDGrupo(s)     Grupo(s) secundario(s), separados por comas sin espacios.


Usuarios y Grupos                     Administración Linux                                       5
-d directorio     Trayectoria absoluta del directorio de conexión ($HOME).
        -m                Crea el directorio $HOME.
        -M                No crea el directorio $HOME para el usuario.
        -s shell          Trayectoria absoluta del shell de conexión.
        -c información    Información del usuario (comentario), no es obligatorio.
        -k directorio     Usa el directorio como alternativo al /etc/skell.
        -e fecha_exp.     A partir de esta el usuario no tendrá acceso al sistema.
        -f nºDías         Tiempo inactivo dado en días, que tiene que transcurrir para que caduque la
        contraseña y se inhabilite la cuenta.
        -u IDUser         Nº de identificación del usuario (por defecto la siguiente libre).
        -U                Crea un grupo con el mismo nombre que el usuario.
        -N                No crea un grupo con el nombre del usuario.
        -p passwd         Contraseña cifrada (crypt).


En el fichero /etc/default/useradd, podemos definir valores por defecto para la creación de nuevos usuarios.

Si no lo hacemos en el momento de la creación del usuario, posteriormente deberemos crear su directorio y
asignarle un passwd.

Ejemplo:

# useradd –d /home/pepe -m –s /bin/bash -g sif pepe



El usuario no se puede conectar hasta que no se le defina una contraseña. El administrador creará una
contraseña para cada usuario con el comando:

# passwd nombre_usuario

Cuando se omite el nombre_usuario, nos cambiamos la contraseña a nosotros mismos.

    Visualizar el fichero de configuración de usuarios por defecto
    /etc/default/useradd, y comprobar las opciones que podemos preconfigurar.
    Crear un usuario sin contraseña, identificarlo en los ficheros de
    configuración de usuarios.
    Intentar conectarse como el usuario anterior en una consola virtual.
    Asignarle una contraseña, comprobarla en el fichero shadow.
    Acceder al sistema con el nuevo usuario.
    Que el propio usuario se cambie la contraseña.


Para cambiar fichero o directorios de dueño, usamos el comando:

chown [-R] usuario[:grupo] fichero

El comando useradd permite crear muchos usuarios automáticamente mediante archivos de comandos
(scripts).

Usuarios y Grupos                     Administración Linux                                     6
Plantillas de ususarios
/etc/skel

Crear una plantilla nos permite, a partir de ella, añadir nuevos usuarios con unas determinadas
configuraciones en cuanto a aspecto del escritorio y entorno por defecto de archivos y carpetas, así como
valores en variables de entorno.

El directorio /etc/skel contiene ficheros y directorios que son automáticamente copiados al directorio home
del usuario, cuando un nuevo usuario es creado utilizando el programa de línea de comando useradd o bien
desde el entorno gráfico (Sistema->Administración->Usuarios y grupos).

Un directorio home, también denominado directorio de login, es un directorio en los sistemas operativos
Linux/Unix, que sirve como repositorio o almacén para los ficheros personales del usuario, directorios y
programas, incluyendo los ficheros de configuración personales. También es el directorio donde el sistema
nos ubica después de loguearnos ante el sistema.

Si queremos estar seguros que todos los usuarios de nuestro sistema tengan la misma configuración inicial,
los cambios los deberemos realizar en /etc/skel

Procedimiento:

    •   Creamos un usuario, que servirá de modelo (lo llamamos plantilla).
    •   Le configuramos el escritorio, paneles de control, contenido de los paneles, accesos directos a
        aplicaciones en el escritorio,…
    •   Hacemos una copia del directorio original (por precaución)
cp –r /etc/skel /etc/skel.original

    •   Los ficheros de configuración, como “.profile”, los modificamos directamente en /etc/skel, para
        modificar variables de entorno como PATH o incluir órdenes como umark.
    •   Sólo nos queda copiar, al directorio /etc/skel, las carpetas del directorio personal del usuario
        “plantilla”, donde se encuentra la configuración del escritorio y del gestor de ventanas gnome.
cd /etc/skel
sudo cp –rf /home/plantilla/Escritorio .
sudo cp –rf /home/plantilla/.gconf .
sudo cp –rf /home/plantilla/.gnome2 .
sudo cp –rf /home/plantilla/.gnome2_private .
Una vez copiadas al directorio /etc/skel, serán copiadas al directorio home de los usuarios cada vez que
creemos uno nuevo, quedando configurado el aspecto del escritorio, su máscara y su PATH, a partir de la
plantilla almacenada en /etc/skel.



NOTA: Los ficheros de inicialización dependen del intérprete de órdenes seleccionado:

Se ejecuta al hacer un login (PATH, variables de entorno, umask, funciones de inicialización, etc.):


Usuarios y Grupos                     Administración Linux                                      7
.bash_profile    en Bourne Again Shell (bash)
         .profile         en Bourne Shell (sh)
         .login           en C Shell (csh)
Cada vez que se ejecuta un shell (alias, var. del propio shell, etc.)

         .bashrc          en Bourne Again Shell (bash)
         .cshrc           en C Shell (csh)
Al salir del sistema el usuario (al finalizar la sesión)

         .bash_logout     en Bourne Again Shell (bash)
         .logout          en C Shell (csh)


Password o contraseñas
El administrador puede cambiar la contraseña de cualquier usuario, y cada usuario se la puede cambiar a si
mismo.

passwd [nombre_usuario]

A la hora de elegir una buena contraseña:

No utilizar:

         Tu nombre o parte de él, o de alguien cercano a ti.
         Números significativos para ti o alguien cercano a ti.
         Algún nombre, número, lugar, gente, etc., asociado a tu trabajo.
         Palabra que este en un diccionario (español, inglés, etc.)
         Nombre de gente famosa, lugares, películas, relacionadas con publicidad, etc.
Consejos:

         Introducir 2 o más caracteres extras, símbolos especiales o de control.
         Escribir mal las palabras.
         Utilizar mayúsculas y minúsculas, pero no de forma evidente.
         Utilizar algunos dígitos.
         Concatenar, embeber o mezclar 2 o más palabras, o partes de palabras.
         Usar caracteres poco comunes, como por ejemplo $, &, # , ˆ
La contraseña se debe cambiar cuando:

         Se sospecha que alguien la ha podido conocer o averiguar.
         Un usuario se marcha del trabajo, cambiar todas las que conozca.
         Un administrador del sistema se va, cambiar TODAS.
         Se sospecha que alguien ha conseguido el fichero con las contraseñas (tanto /etc/passwd como
         /etc/shadow)
         Un intruso ha conseguido entrar en el sistema.
         Periódicamente, se debe forzar a que los usuarios cambien sus contraseñas, incluido el
         administrador.

Usuarios y Grupos                        Administración Linux                               8
Práctica:

    Una empresa acaba de instalar un servidor Linux y desea dotar de cuentas de
    usuario a sus empleados.
    Departamentos (entre paréntesis se muestran los usuarios de cada
    departamento):
       comercial (cojefe, co1, co2, co3, co4)
       almacen (aljefe, al1, al2, al3)
    Confeccionar dos plantilla de usuarios, una para comerciales en “/home/co” y
    otra para almacén en “/home/al”. Incluirán diferentes paneles, lanzadores,
    fondo y temas de escritorio, ficheros de inicio.
    Crear un grupo por departamento, llamados: comerciales y almacenistas.
    Crear un directorio dentro de /home por departamento (/home/comercial y
    /home/almacen)
    Dar de alta a los usuarios:
       Teniendo en cuenta sus plantillas correspondientes
       Contraseña inical de cada usuario será el nombre de su grupo.
       La contraseña deberá expirar en un día.
       La shell a utilizar será /bin/bash.
       Asignarlos a su grupo primario.
       Los directorios personales de cada usuario colgarán del departamento al
    que pertenezca.
    Por defecto, cualquier usuario de un grupo puede leer los directorios
    personales de otros usuarios si y sólo si estos pertenecen a su mismo grupo.
    En ningún caso podrán escribir en otros directorios personales que no sean el
    suyo.
    Dentro de cada directorio departamento coexistirá con los directorios
    personales otro directorio llamado “work” donde todos los usuarios del
    departamento pueden intercambiar información (todos pueden crear y borrar
    archivos).
    En /home existirá también un directorio “comun” donde todos los usuarios de
    cualquier departamento pueden intercambiar información. Dentro de dicha
    ubicación, existirá otro directorio “comunJefes” donde sólo los jefes de
    departamento pueden intercambiar información. comunJefes no será accesible
    para ningún otro empleado.



Bajas de usuarios
Distintos niveles:

- Dar de baja sólo la posibilidad de conectarse. Colocando un * en el 2º campo de /etc/passwd. Útil para
usuarios temporalmente ausentes.

- Dar de baja en el fichero de contraseñas, pero dejando todos sus ficheros y directorios. Editando y
borrando la línea correspondiente o con el comando:

userdel NombreUsuario

- Dar de baja al usuario y eliminar todos sus ficheros.

userdel -r NombreUsuario



Usuarios y Grupos                     Administración Linux                                9
Cambio de atributos de un usuario
usermod [-l nuevoNombre][-c comentario][-d home] [-m] [-e fecha][-
f dias][-g grupo][-G lista de grupos][-s shell][-L | -U] usuario

usermod permite las opciones de useradd y además:

-l NuevoNombre
-m       Traslada el directorio login al indicado con la opción -d.
-L       Bloquea al usuario.
-U       Desbloquea al usuario.
(Con la opción –s es similar a “chsh -s shell)”




     Inhabilitar un usuario colocando un * en su segundo campo del fichero
     /etc/passwd. Comprobar que no se puede conectar.
     Volver a habilitarlo y comprobar que se puede conectar.
     Borra las líneas correspondientes del usuario en los ficheros de
     configuración de usuarios (o userdel)
     Entra como administrador en su directorio y haz un listado largo ¿Qué usuario
     aparece?
     Volver a crear el usuario (con otro nombre), para que pueda acceder a sus
     ficheros.
     Conectarse como el usuario rehecho.
     Cambiarle el nombre para dejarle el original.
     Bloquear un usuario, usando usermod, averigua que cambios a realizado el
     comando en los ficheros de configuración.
     Comprobamos que efectivamente está bloqueado y a continuación lo
     desbloqueamos.
     Borrar el directorio $HOME de un usuario. Conectarse ¿Dónde está? ¿Puede
     crear ficheros?
     Crearle otro directorio de conexión, según la plantilla de creación por
     defecto. Al nuevo directorio asignarle el propietario y grupo adecuados de
     forma recursiva.
     Dar de baja definitiva al usuario.
     Dar de alta un nuevo usuario sin usar los comandos de gestión de usuarios.
     Ponerle password y probarlo.




Usuarios estándar
     o   root: Cuenta del administrador
     o   bin, daemon, lp, sync, shutdown, etc.: usados para poseer ficheros o ejecutar servicios
     o   mail, news, ftp: Asociados con herramientas o facilidades
     o   postgres, mysql, xfs: Creados por herramientas instaladas para administrar y ejecutar sus servicios
     o   nobody o nfsnobody: Usada por NFS y otras utilidades


Usuarios y Grupos                       Administración Linux                                  10
SUDOERS
Introducción:
Por cuestiones de seguridad, ubuntu intenta evitar el uso indiscriminado del usuario root, que es el
usuario administrador o superusuario. Este usuario tiene identificación cero (UID = 0).

root, tiene permiso para hacer cualquier cosa: borrar, modificar, ejecutar o crear cualquier objeto o
fichero.

En Ubuntu el usuario root, viene sin clave de acceso preestablecida. Como lo podemos ver en el
fichero /etc/shadow:
root:!:14301:0:99999:7:::
daemon:*:14301:0:99999:7:::
bin:*:14301:0:99999:7:::
sys:*:14301:0:99999:7:::
En el caso de root aparece un signo de exclamación (!), esto quiere decir que el usuario root no tiene
clave establecida.

De esta forma no nos podemos conectar al sistema directamente como root, con lo que de alguna
forma queda limitado su uso indiscriminado, es decir, que se use tanto para tareas administrativas
como para las que no lo son.

Otra medida para proteger el uso de root, en caso de haber instalado el servidor ssh (secure shell), es
evitar las conexiones remotas a través del usuario root. Para esto editamos su fichero de
configuración en el servidor ssh, /etc/ssh/sshd_config, en una de sus líneas especifica que se
permita hacer login al usuario root o no:
# Authentication:
LoginGraceTime 120
PermitRootLogin no
Esta es la línea que impide que el usuario root pueda acceder vía ssh.


¿Cómo se hace para administrar el sistema?
La respuesta está en el paquete sudo. sudo significa “super user do” o “Super Usuario Hace”, el
comando sudo, es utilizado en modo texto para ejecutar casi cualquier comando como si lo estuviese
ejecutando el usuario root, ahora bien, sólo ciertos usuarios pueden usar el comando sudo.

Por defecto en Ubuntu, durante la instalación, y a diferencia de otras distribuciones de GNU/Linux, no
se pregunta la clave del usuario root, pero si el nombre de un primer usuario y su clave de acceso, ese
primer usuario, será quien pueda ejecutar el comando sudo inicialmente.


    1. Aunque no sea recomendable, pero debido a que ya somos unos usuarios

Sudo                               Administración Linux                                   1
cuasi experimentados, que sabemos que la cuenta de root se debe de usar
       de manera exclusiva para tareas administrativas y que en nuestras
       prácticas estamos realizando trabajo de administración. Vamos a habilitar
       la cuenta de root simplemente poniéndole contraseña.


¿Exactamente qué es y qué hace sudo?
sudo permite implementar un control de acceso altamente granulado, de qué usuarios ejecutan qué
comandos. Si un usuario normal desea ejecutar un comando de root (o de cualquier otro usuario),
sudo verifica en su lista de permisos y si está permitida la ejecución de ese comando para ese usuario,
entonces sudo se encarga de ejecutarlo.

Es decir, sudo es un programa que basado en una lista de control (/etc/sudoers), permite (o no) la
ejecución al usuario que lo invocó sobre un determinado programa propiedad de otro usuario,
generalmente del administrador del sistema 'root'.

Sin embargo, el fichero /etc/sudoers no contiene al usuario que se creó durante la instalación, pero si
miramos bien, tiene una línea que dice:

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
Aquí es donde se establece que los miembros del grupo admin puedan hacer uso del comando sudo.

El equivalente al sudo en modo gráfico es el comando gksu y funciona igual que su equivalente sudo
en el intérprete de comando (terminal) o Shell.


sudo, para fines prácticos se puede dividir en tres partes:
   a. sudo, el comando con permisos de SUID.

   b. visudo, el comando que permite al administrador modificar /etc/sudoers.

   c. /etc/sudoers, el archivo de permisos que le indica a sudo qué usuarios ejecutan qué
       comandos.


   2. Buscar donde se encuentra el ejecutable de sudo, con el comando whereis.
   3. Comprobar sus permisos.
   4. Visualizar su contenido y comprobar que existe la línea en la que a los
      miembros del grupo admin se les da permisos totales.
   5. Mostrar los grupos a los que pertenece el usuario creado en la
      instalación, o en el fichero group, ver los usuarios que incluye.
   6. Meter un usuario sin privilegios en el grupo admin ¿Podrá ejecutar
      comandos de root?
   7. Ejecutar desde la línea de comandos alguna aplicación gráfica (como
      nautilus) con el comando gksu.




Sudo                                Administración Linux                                   2
sudo
sudo (SUperuser DO) lo ejecuta un usuario normal, al que se le concede permiso para ejecutar ciertos
comandos, que en principio no le son propios. sudo requiere que el usuario se autentifique a si
mismos a través de su contraseña para permitirle la ejecución del comando. Veamos un ejemplo:
$ sudo visudo
[sudo] Password for user07:
...
Por defecto, después de hacer lo anterior, durante 5 minutos puedes volver a usar el mismo comando
u otros a los que tengas derecho, sin necesidad de escribir la contraseña de nuevo. Para extender el
tiempo por otros 5 minutos usa:

sudo –v                         (validate).
Por el contrario, si ya terminaste lo que tenías que hacer, para finalizar con el tiempo de gracia de
validación puedes usar:

sudo -k                        (kill).
sudo con la opción –l nos muestra los comandos que podemos usar, gracias al fichero sudoers.

$ sudo -l
User sergio may run the following commands on this host:
    (root) /sbin/ifconfig
    (root) /sbin/lspci
Normalmente sudo interesa para ejecutar comandos de root, pero también es posible ejecutar
comandos de otros usuarios del sistema indicando la opción –u, siempre que en el fichero sudoers se
nos haya concedido permiso:

$ sudo -u ana /home/ana/suprograma
Otra opción interesante es la que permite editar archivos de texto de root (con el permiso otorgado en
'sudoers' como se verá más adelante), y esto se logra con la opción −e (equivale a sudoedit), que
invoca al editor por defecto, que generalmente es 'vi'.

$ sudo -e /etc/shadow
(Permitirá modificar el archivo indicado como si fuera root)
Cuando se configuran las reglas de acceso en el fichero sudoers, existen múltiples opciones (defaults),
que se pueden configurar, estas se muestran con la opción –L de sudo.

$ sudo -L

Nos muestra las opciones y una pequeña descripción, estás opciones se establecen en el archivo de
configuración 'sudoers'.

sudo -V lista las opciones (defaults) establecidas para todos los usuarios, comandos, equipos, etc.

Sudo                                Administración Linux                                   3
Nota: Esta opción requiere privilegios de administrador.

# sudo -V




visudo
Permite la edición del fichero de configuración de sudo, sudoers. Invoca al editor que se tenga por
defecto que generalmente es 'vi' (enlazado con el fichero /usr/bin/editor).

Cuando se ejecuta, bloquea el archivo /etc/sudoers, para que nadie más lo pueda editar, esto por
razones obvias de seguridad que evitarán que dos o más usuarios administradores sobreescriban
accidentalmente los cambios que el otro realizó.

Otra característica importante de visudo es que al cerrar el fichero, verifica que esté bien configurado,
es decir, detectará si hay errores de sintaxis en sus múltiples opciones o reglas de acceso. Por esta
razón no debe editarse /etc/sudoers directamente (perfectamente posible ya que es un archivo de
texto como cualquier otro), sino siempre usando visudo.

Si al cerrar, visudo detecta un error, nos mostrará la línea donde está, y pregunta "What now?":
>>> sudoers file: syntax error, line 15 <<<
What now?
Se tienen tres opciones para esta pregunta:

   o   e       Edita de nuevo el archivo, colocando el cursor en la línea del error.
   o   x       Salir sin guardar los cambios.
   o   Q       Salir y guarda los cambios.


Si tan solo se desea comprobar que /etc/sudoers está bien configurado se usa la opción -c.
# visudo -c
/etc/sudoers file parsed OK

La opción -s activa el modo 'estricto' del uso de visudo, al grabar, no solo se comprobará los errores
sintácticos, sino también el orden correcto de las reglas, por ejemplo, si se define el alias para un
grupo de comandos y este se usa antes de su definición.


   8.  Haz una copia del fichero sudoers a sudoers.original.
   9.  Comprueba que está bien configurado (opción –c)
   10. Entra a editarlo con la opción –s, proboca un error (borra un igual) y
       trata de grabarlo.
   11. Corríge el error y vuelve a grabarlo.




Sudo                                Administración Linux                                    4
Sudoers
En este archivo se establece quién (usuarios) puede ejecutar qué (comandos) y cómo (opciones),
generando efectivamente una lista de control de acceso que puede ser tan detallada como se desee.

Es más fácil entender sudo si dividimos en tres partes su posible configuración:

   o    Alias
   o    Opciones (Defaults)
   o    Reglas de acceso
Ninguna de las secciones es obligatoria, ni tienen que estar en algún orden específico, pero la que al
menos debe de existir es la tercera.


Alias
Un alias se refiere a usuarios, comandos o equipos. El alias engloba bajo un solo nombre (nombre del
alias) una serie de objetos y después, en la parte de definición de reglas, al poner el alias, nos
estamos refiriendo a todos los objetos que contiene.

La forma para crear un alias es la siguiente:
tipo_alias NOMBRE_DEL_ALIAS = objeto1, objeto2,... objetoN
tipo_alias NOMBRE1 = objeto1, objeto2 : NOMBRE2 = objeto3, objeto4
En el segundo caso, separados por ":", se están definiendo dos alias.



El tipo_alias indica los elementos que contendrá. Hay cuatro tipos:

   o    Cmnd_Alias             define alias de comandos.
   o    User_Alias             define alias de usuarios normales.
   o    Runas_Alias            define alias de usuarios administradores o con privilegios.
   o    Host_Alias             define alias de hosts o equipos.
El NOMBRE_DEL_ALIAS puede llevar letras, números o guión bajo ( _ ) y DEBE de comenzar con una
letra mayúscula, se acostumbra a usarlos siempre en mayúsculas.



Cmnd_Alias

Engloba a uno o más comandos y otros alias de comandos. Ejemplos:

Cmnd_Alias WEB = /usr/sbin/apachectl, /usr/sbin/httpd, sudoedit /etc/httpd/*

A quien se le aplique el alias WEB podrá ejecutar los comandos apachectl, httpd y editar todo lo que
este debajo del directorio /etc/httpd/.

Notas: Hay que indicar la ruta de los comandos. Cuando nos referimos a directorios, la trayectoria
deber de terminar con '/'.

Sudo                                   Administración Linux                                  5
Cmnd_Alias APAGAR = /usr/bin/shutdown -h 23:00
Al usuario que se le asigne el alias APAGAR, podrá hacer uso del comando 'shutdown', exactamente
con los parámetros como están indicados, es decir, apagar -h (halt) el equipo a las 23:00 horas.

Nota: Es necesario escapar el signo ':', así como los símbolos ' : , = 


Cmnd_Alias NET_ADMIN = /sbin/ifconfig, /sbin/iptables, WEB
NET_ADMIN es un alias con los comandos de configuración de interfaces de red ifconfig y de firewall
iptables, pero además le agregamos un alias previamente definido que es WEB, así que a quien se le
asigne este alias, podrá también hacer uso de los comandos del alias WEB.


Cmnd_Alias TODO_BIN = /usr/bin/, !/usr/bin/rpm
A quien se le asigne podrá ejecutar todos los comandos que estén dentro del directorio /usr/bin/,
menos el comando 'rpm' ubicado en el mismo directorio.

  OTA: este tipo de alias con un permiso muy amplio menos '!' algo, generalmente no son una
buena idea, ya que comandos nuevos que se añadan después a ese directorio también podrán ser
ejecutados, es mejor siempre definir específicamente lo que se requiera.

    12. Crea un alias de comando llamado ALTAS, que incluya las principales
        órdenes de gestión de usuarios y grupos.
    13. Define otro alias llamado ALTASEDIT, que contenga al anterior, más el
        comando sudoedit.
    14. Declara un alias llamado DIRECTORIOS, que nos permita editar en las
        carpetas:       /home/comunjefes,        /home/comercial/trabajo    y
        /home/almacen/trabajo.



User_Alias

Definen a uno o más usuarios por su nombre o su UID (precedido de #), grupos del sistema
(precedidos con %), grupos de red (netgroups precedidos con +) u otros alias de usuarios. Ejemplos:



User_Alias ADMIN = sergio, ana
'sergio' y 'ana' pertenecen al alias ADMIN.



User_Alias MYSQL_USERS = andy, marce, juan, %mysql
Al alias MYSQL_USERS pertenecen los usuarios indicados individualmente más los usuarios que formen
parte del grupo 'mysql'.




Sudo                                 Administración Linux                                 6
User_Alias TODOS = ALL, !samuel, !david
El alias de usuario TODOS, al incluir la palabra reservada 'ALL' abarcaría a todos los usuarios del
sistema, excluyendo a dos de ellos, los negamos con '!'. Es decir, todos los usuarios menos esos dos.

NOTA: los usuarios nuevos que se añadan al sistema también serán considerados como ALL, es mejor
siempre definir específicamente a los usuarios que se requieran. ALL es válido en todos los tipos de
alias.



User_Alias OPERADORES = ADMIN, alejandra
Los del alias ADMIN más el usuario 'alejandra'.




Runas_Alias

Funciona exactamente igual que User_Alias.

Define los usuarios como quien vamos a ejecutar los comandos.

Runas_Alias OPERADORES = #501, fabian
Al alias OPERADORES pertenecen el usuario con UID 501 y el usuario 'fabian'


    15. Crea un alias para los empleados de cada departamento (sin los jefes),
        con el nombre del departamento.
    16. En otro alias llamado EMPLEADOS une incluye todos los empleados de
        todos los departamentos (sin los jefes)
    17. Define un alias que incluya los jefes de departamento y al usuario
        ‘director’, llamarlo JEFES



Host_Alias

Definen uno o más equipos u otros alias de host. Los equipos pueden indicarse por:

    −    Su nombre, si se encuentran en /etc/hosts.
    −    Nombre de dominio, si existe un controlador de dominios.
    −    Dirección IP.
    −    Dirección de red con máscara de red.


Podemos añadir equipos en /etc/hosts, escribiendo en una línea la IPv4 del equipo y separado por un
espacio o tabulador el nombre del equipo. El nombre del equipo se define en /etc/hostname



Ejemplos:

Sudo                                Administración Linux                                  7
Host_Alias LANS = 192.168.208.0/24, 192.168.209.0/255.255.255.0

El alias LANS define todos los equipos de las redes locales.



Host_Alias WEBSERVERS = 172.16.0.21, web1 : DBSERVERS = 192.168.100.10, dataserver

Se define dos alias en la misma línea: WEBSERVERS y DBSERVERS con sus respectivas listas de
elementos.

Nota: El separador ':' es válido en cualquier definición de tipo de alias.


    18. Definir un alias que incluya todos los host de la clase.


Opciones (Defaults)
         (D
Las opciones o defaults permiten definir ciertas características de comportamiento para los alias
previamente creados, usuarios, equipos o de manera global para todos.

No es necesario definir opciones o defaults, sudo ya tiene establecido el valor de cada uno, y es
posible conocerlas a través de sudo -V.

Sin embargo, la potencia de sudo está en su alta granularidad de configuración, así que es importante
conocer al menos como se emplean.

Se usa la palabra reservada 'Defaults' para establecer las opciones y dependiendo del nivel al que va a
afectar su sintaxis es la siguiente:

                             Nivel                                     Formato

             De manera global, afecta a todos          Defaults opcion1, opcion2 ...

             Por usuario                               Defaults:usuario opcion1, opcion2 ...

             Por usuario privilegiado                  Defaults>usuario opcion1, opcion2 ...

             Por equipo (host)                         Defaults@equipo opcion1, opcion2 ...



La lista de opciones es extensa, pueden consultarse en las páginas del manual (man sudoers).

Los defaults los divide el manual en cuatro tipos: flags o booleanos, enteros, cadenas y listas. Veamos
algunos ejemplos de uso para cada uno de ellos:



flags o booleanos

Generalmente se usan de manera global, simplemente se indica la opción y esta se activa, para
desactivarla se le antepone el símbolo '!' a la opción. Es necesario consultar el manual para saber el

Sudo                                    Administración Linux                                   8
valor por defecto 'on' u 'off'.



Defaults mail_always
Establece a 'on' la opción 'mail_always', que enviará un correo avisando cada vez que un usuario
utiliza sudo, esta opción requiere que 'mailto_user' este establecida.



Defaults log_year
Anota el año en el fichero log o bitácora de sudo.



Defaults !authenticate, log_host
Desactiva el default 'authenticate', que por defecto esta activado 'on' (todos los usuarios que usen
sudo deben identificarse con su contraseña), obviamente esto es un ejemplo y sería una pésima idea
usarlo realmente, ya que ningún usuario necesitaría autenticarse, pues estamos usando Defaults de
manera global.

La segunda opción 'log_host', que por defecto está en desactivada, la activamos y bitacoriza el nombre
del host cuando se usa un archivo como bitácora de sudo.



Defaults:ana !authenticate
Aquí se aprecia algo más lógico, usamos opciones por usuario en vez de global, indicando que el
usuario 'ana' no requerirá auténticarse. Pero todos los demás sí.



Defaults insults
Cuando no escribimos bien la contraseña que requiere sudo, nos trata de intimidar.



Enteros

Manejan valores de números enteros en sus opciones, deben usarse como opción = valor.



Defaults:fernanda, regina passwd_tries = 1, passwd_timeout = 1
Se establecen opciones para los usuarios 'fernanda' y 'regina', sólo tendrán una oportunidad para
escribir la contraseña correcta 'passwd_tries' (el valor por defecto es de 3) y estarán exentas de volver
a escribirla durante 1 minuto, el valor por defecto de 'passwd_timeout' e 5.



Sudo                                Administración Linux                                    9
Defaults loglinelen=0
Para que no limite el tamaño de la línea en el fichero log.

La mayoría de las opciones numéricas, al establecerlas con un valor igual a cero quedan sin límite.



Defaults@webserver umask = 011
Se establecen opciones sólo para los usuarios que se conectan al servidor 'webserver' y el valor
'umask' indica que si mediante la ejecución del comando que se invoque por sudo es necesario crear
archivos o directorios, a estos se les aplicará la máscara de permisos indicada en el valor de la opción.



Cadenas

Son valores de opciones que indican mensajes, rutas de archivos, etc. Si hubiera espacios en el valor
es necesario encerrar el valor entre comillas dobles (" ").



Defaults badpass_message = "Intenta de nuevo: "
Para todos los usuarios, cuando se equivoquen al escribir la contraseña, saldrá este nuevo mensaje.
En este caso la opción por defecto es "Sorry: try again".



Defaults logfile="/var/log/sudo.log"
Define el fichero donde se almacena el histórico de usos del comando sudo.



Listas

Permite establecer/eliminar variables de entorno propias de sudo. Para entender como se aplican es
más fácil si primero ejecutas como 'root' el comando sudo -V, y al final del listado encontrarás en
mayúsculas las posibles variables de entorno que se pueden establecer o quitar y que vienen del shell.

Solo existen tres Defaults de listas:

    −    env_check      Las variables de entorno a eliminar del entorno del usuario si el valor de la
                        variable contiene los caracteres % o / .
    −    env_delete     Las variables de entorno a eliminar del entorno del usuario.
    −    env_keep       Variables de entorno a mantener cuando al opción env_check está en vigor.
Las listas pueden ser remplazadas con '=', añadirle variables con '+=', eliminarle variables con '-=' o
deshabilitarlas con '!'. Con un par de ejemplos quedará más claro.




Sudo                                    Administración Linux                               10
Defaults env_delete -= HOSTNAME
Quita la variable de entorno 'HOSTNAME' de la lista, pero preserva todas las demás de la lista.



Defaults env_reset
Defaults env_check += DISPLAY
La primera opción 'env_reset' reinicializa las variables de entorno que sudo utilizará o tendrá
disponibles, y solo quedan disponibles LOGNAME, SHELL, USER y USERNAME.

La siguiente línea indica que agregue (+=) a lo anterior, también la variable de entorno DISPLAY a su
valor establecido antes del reset.


    19. Definir las Defaults, para crear el fichero log de sudo, de forma que
        también registre el año y el host.



Reglas de acceso
El archivo /etc/sudoers no tendría ninguna razón de ser si no se crean reglas de acceso. De hecho
podríamos solamente centrarnos en crear reglas de acceso, sin opciones ni alias.

Las reglas de acceso definen qué usuarios ejecutan qué comandos bajo qué usuario y en qué equipos.

Sintaxis básica:

usuario host = comando1, comando2, ... comandoN
usuario            Puede ser un usuario, un alias de usuario o un grupo (anteponiéndole un %).

host               Puede ser ALL cualquier equipo, un solo equipo, un alias de equipo, una dirección IP o
                   una dirección de red/máscara.

comandox           Es cualquier alias de comando o uno o más comandos, indicado con su ruta completa.
                   Si se termina en '/', como en /etc/http/, indica todos los comandos dentro de ese
                   directorio.


daniela ALL = /sbin/iptables
Usuario 'daniela', en cualquier host o equipo, puede utilizar iptables.



ADMIN ALL = ALL
Los usuarios definidos en el alias 'ADMIN', desde cualquier host, pueden ejecutar cualquier comando.




Sudo                                   Administración Linux                                 11
%gerentes dbserver = (director) /usr/facturacion, (root) sudoedit /var/log/*

Los usuarios que pertenezcan al grupo del sistema llamado 'gerentes', pueden en el equipo llamado
'dbserver', ejecutar como si fueran el usuario 'director', la aplicación llamada 'facturacion'.

Además como usuarios 'root', pueden acceder al contendido de los archivos del directorio /var/log.



El ejemplo anterior introduce algo nuevo, en la lista de comandos es posible indicar bajo que usuario
se debe ejecutar el permiso. Por defecto es el usuario 'root', pero no siempre tiene por que ser así.
Además la lista 'hereda' la primera definición de usuario que se indica entre paréntesis ( ), por eso si
se tiene más de uno hay que cambiar de usuario en el comando conveniente, el ejemplo anterior
también sería válido de la siguiente forma:

%gerentes dbserver = sudoedit /var/log/*, (director) /usr/facturacion

No es necesario indicar (root), ya que es el usuario bajo el cual se ejecutan los comandos por defecto.
También es válido usar (ALL) para indicar bajo cualquier usuario.



Con lo que el formato completo de las reglas de acceso quedaría:

 usuario host = (comoQuien) tag: comando1, (comoQuien) tag: comando2,…



El ejemplo siguiente da permisos absolutos.

sergio ALL = (ALL) ALL
Se da permiso al usuario 'sergio', en cualquier host, para ejecutar cualquier comando, de cualquier
usuario, por supuesto incluyendo los de root.



SUPERVISORES PRODUCCION = OPERACION
Una regla formada sólo por alias. Los ususarios contenidos en el alias 'SUPERVISORES', tendrán
permiso en los equipos definidos en el alias de host 'PRODUCCION', para ejecutar los comandos
incluidos en el alias de comandos 'OPERACION'.

En este último ejemplo se aprecia lo útil que pueden ser los alias, ya que una vez definida la regla,
solo debemos agregar o eliminar elementos de las listas de alias definidos previamente. Si se agrega
un equipo más a la red, se añade al alias 'PRODUCCION', un usuario renuncia a la empresa, alteramos
el alias 'SUPERVISORES' eliminándolo de la lista, etc.

checo ALL = /usr/bin/passwd *, !/usr/bin/passwd root
Este ejemplo muestra la potencia y flexibilidad de las reglas de acceso. El usuario 'checo', desde
cualquier equipo, tiene permiso de cambiar la contraseña de cualquier usuario (usando el comando
'passwd'), excepto '!' la contraseña del usuario 'root'.

Sudo                                 Administración Linux                                     12
Lo anterior se logra mediante el uso de argumentos en los comandos. En el primer ejemplo
'/usr/bin/passwd *' el asterisco es un un metacarácter o comodín (wildcard), que indica cualquier
argumento, es decir, cualquier usuario. En el segundo caso '!/usr/bin/passwd root', Indica un
argumento específico 'root', y la '!' como ya se sabe expresa negación, negando entonces el permiso a
cambiar la contraseña de root.



Cuando se indica el comando sin argumentos: /sbin/iptables, sudo lo interpreta como 'puede usar
iptables con cualquiera de sus argumentos'.



mariajose ALL = "/sbin/lsmod"
Al estar entre comillas dobles un comando, entonces sudo interpreta que 'puede hacer uso del
comando lsmod pero sin argumentos'. En este caso el usuario 'mariajose' podrá ver la lista de módulos
del kernel, pero sólo eso.


    20. Los usuarios del alias COMERCIAL, podrán ejecutar el programa
         /usr/bin/comercial, propiedad de root y del grupo root, y con los
         permisos: rwxr-x---.
    21. Igualmente los usuarios del alias ALMACEN, podrán ejecutar su programa
         /usr/bin/almacen, que tiene las mismas características que el anterior.
    22. El usuario ‘director’ desea disponer de los derechos para ejecutar los
         comandos contenidos en el alias ALTASEDIT.
    23. A los usuarios del alias JEFES, darle los permisos para ejecutar los
         comandos de los alias DIRECTORIOS y ALTAS.
    24. Dar    permiso   a    los  EMPLEADOS    para   ejecutar   los   programas
         /home/director/bin/entrada y /home/director/bin/sadida, ambos propiedad
         del usuario ‘director’.
       a. Si no existe, creamos el usuario director (contraseña director).
       b. El director creará su carpeta bin y en ella los dos programas con el
           código siguente:
       En el programa de entrada (consultar man date):
echo `date +%Y%t%m%t%d%t%H%t%M%t%S%t``logname` >> /home/director/bin/entradas.log
       En el programa de salida:
echo `date +%Y%t%m%t%d%t%H%t%M%t%S%t``logname` >> /home/director/bin/salidas.log


        c. Le damos permiso de ejecución sólo al propietario.
        d. Para comprobar su funcionamiento, los puede ejecutar el usuario
           director.
        e. Los ficheros de datos (entradas.log y salidas.log) sólo los puede
           editar el director.
        f. Probar a ejecutarlos desde algún empleado. Ver que se añade la
           información en los ficheros log.
        g. Colocar estos programas en los ficheros de inicio y cierre de sesión
           (.profile y bash_logout).
        h. Hacer que no se requiera autenticación para ejecutarlos (apartado
           siguiente).


Sudo                               Administración Linux                                13
Tags (etiquetas de comandos)

Cuando se definen reglas, la lista de comandos pueden tener cero (como en los ejemplos anteriores) o
más tags. Existen 6 de estas etiquetas o tags.



NOPASSWD Y PASSWD
Por defecto sudo requiere que cualquier usuario se autentifique con su contraseña. Aprendimos en la
sección de 'Opciones' o 'Defaults' que es posible indicar que un usuario o alias de usuario no requiera
de autentificación. Pero el control granular propio de sudo, permite ir aún más lejos al indicar a nivel
de comandos, cuáles requieren contraseña para su uso y cuáles no.

lux webserver = NOPASSWD: /bin/kill, /usr/bin/lprm, vi /etc/httpd/conf/*

El usuario 'lux' en el equipo 'webserver' no requerirá contraseña para los comandos listados. El tag se
hereda, para los siguientes comandos, mientras no se indique el tag contrario.

Suponiendo que para el último '/etc/httpd/conf/', que permite modificar cualquier archivo contenido en
el directorio, si deseamos que use contraseña, lo escribiremos como sigue:

lux webserver = NOPASSWD: /bin/kill, /usr/bin/lprm, PASSWD: vi /etc/httpd/conf/*

Aunque ya que solicitar contraseña es el default preestablecido, lo anterior también funcionará de la
siguiente forma:

lux webserver = vi /etc/httpd/conf/*, NOPASSWD: /bin/kill, /usr/bin/lprm



NOEXEC Y EXEC
Este es un tag muy importante a considerar cuando se otorgan permisos sobre programas que
permiten escapes a shell (shell escape), como en el editor 'vi' que mediante el uso de '!' es posible
ejecutar un comando en el shell sin salir de 'vi'. Con el tag NOEXEC se logra que esto no suceda. Al
igual que los tags anteriores, el tag se hereda y se deshabilita con su tag contrario.

valeria ALL = NOEXEC: /usr/bin/vi


SETENV Y NOSETENV
Una de las múltiples opciones que pueden establecerse en la sección 'Defaults' u 'opciones', es la
opción booleana o de flag 'setenv', que por defecto y para todos los usuarios esta establecida en 'off'.
Esta opción si se activa por usuario (Defaults:sergio setenv) permitirá al usuario indicado cambiar el
entorno de variables del usuario del cual tiene permisos para ejecutar comandos, y como
generalmente este es 'root', resulta bastante peligroso.



Sudo                                Administración Linux                                  14
A nivel de lista de comandos, es posible especificar el tag 'SETENV' a un solo comando o a una
pequeña lista de estos y solo cuando se ejecuten estos se podrán alterar las variables de entorno. Es
decir, en vez de establecerlo por usuario, sería más conveniente establecerlo por comando.

ADMIN ALL = SETENV: /bin/date, NOSETENV ALL
A los usuarios definidos en el alias de usuario 'ADMIN', en cualquier host, pueden alterar las variables
de entorno cuando ejecuten el comando 'date' (que puede ser útil por ejemplo para cambiar variables
del tipo LOCALE), cualquier otro comando, no tendrá esta opción, al habilitar el tag contrario
'NOSETENV'. Ya que este es el default, también sería válido de la siguiente manera y harían lo mismo:

ADMIN ALL = ALL, SETENV: /bin/date


   25. Hacer que el usuario creado en la instalación, no                                  tenga     que
       autenticarse al usar sudo, a los demás del grupo admin sí.




Sudo                                Administración Linux                                  15
ARCHIVO /ETC/SUDOERS DE EJEMPLO

Veamos un pequeño ejemplo de un archivo /etc/sudoers:

# *********************************
# sergio.gonzalez.duran@gmail.com *
# *********************************

# *********************************
# DEFINICION DE ALIAS             *
# *********************************

# administradores con todos los privilegios
User_Alias ADMINS = sergio, ana

# administradores de red - network operators
User_Alias NETOPS = marcela, andrea

# webmasters
User_Alias WEBMAS = cristina, juan

# supervisores de producción (todos los del grupo de sistema supervisores)
User_Alias SUPPRO = samuel, %supervisores

# usuarios que pueden conectarse desde Internet
User_Alias INETUS = NETOPS, ADMINS, samuel

# servidores web
Host_Alias WEBSERVERS = 10.0.1.100, 10.0.1.101

# servidores de aplicaciones
Host_Alias APLICACIONES = WEBSERVERS, 10.0.1.102, 10.0.1.103, mailserver

# comandos de red permitidos
Cmnd_Alias REDCMDS = /sbin/ifconfig, /sbin/iptables

# comandos de apache
Cmnd_Alias APACHECMDS = /usr/sbin/apachectl, /sbin/service httpd *

# *********************************
# DEFINCION DE OPCIONES           *
# *********************************

# Los administradores, requieren autentificarse con la contraseña de 'root'
Defaults:ADMINS rootpw

# Para todos los usuarios, tienen hasta 4 intentos para ingresar su contraseña
# y 3 minuto para que esta expire
Defaults passwd_tries = 4, passwd_timeout = 3

# Los usuarios que se conectan desde Internet, solo tienen una oportunidad
# y cero timeout lo que implica que cada comando que usen a través de sudo
# requerirá siempre de autentificación.
Defaults:INETUS passwd_tries = 1, passwd_timeout = 0

# Máscara de directorios y archivos por default,
# para los que ejecuten sudo en los servidores web
Defaults@WEBSERVERS umask = 022

# *********************************
# DEFINCION DE REGLAS             *
# *********************************

# administradores todo se les permite en cualquier equipo
# (¡¡¡¡¡cuidado con esto en la vida real!!!!!
ADMINS ALL = (ALL) ALL


Sudo                            Administración Linux                          16
# administradores de red, en todos los equipos, los comandos de red
NETOPS ALL = REDCMDS

# webmasters, en los servidores web con los comandos indicados en apachecmds
# y además sin necesidad de contraseña acceder a las bítacoras de apache
# y reiniciar los servidores.
WEBMAS WEBSERVERS = APACHECMDS, NOPASSWD: vi /var/log/apache/, /sbin/reboot

# supervisores, pueden ejecutar los comandos indicados
# en los equipos indicados en el alias aplicaciones
# y además son ejecutados bajo el usuario apps.
SUPPRO APLICACIONES = NOEXEC: (apps) /usr/local/facturacion.exe, /usr/local/nomina.exe

# No definidos por alias previos, sino directamente

# regina es de recursos humanos y puede cambiar contraseñas de cualquier usuario
# menos de root
regina ALL = /usr/bin/passwd *, !/usr/bin/passwd root

# david, puede apagar los equipos de aplicaciones
david APLICACIONES = /sbin/shutdown, /sbin/halt

# El equipo firewall de la red puede ser reiniciado (no apagado) por fernanda
# que es asistente de redes
fernanda firewall = /sbin/shutdown -r now




Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx
y según los términos de la G U Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software
Foundation.
autor: sergio.gonzalez.duran@gmail.com
Adaptación: Luis Quesada




Sudo                                            Administración Linux                                                     17
Administración del sistema de ficheros
Introducción
Un sistema de ficheros (filesystem) son los métodos y las estructuras de datos que emplea el
sistema operativo (en nuestro caso, Linux) para organizar los ficheros en disco.

Organizan la información guardada en unidades de almacenamiento (ficheros), esta información
luego será representada ya sea textual o gráficamente utilizando un gestor de archivos.

Los sistemas de ficheros proveen métodos para crear, mover, renombrar, enlazar y eliminar tanto
ficheros como directorios, además de facilitar mecanismos de acceso y protección de los datos.

Linux soporta varios tipos de sistemas de ficheros. Entre los más importantes podemos destacar los
siguientes:

    o   MINIX: El más antiguo, presume de ser el más seguro, pero es bastante limitado en las
        características que proporciona. Un sistema de ficheros de este tipo solo puede tener 64 MB.

    o   EXT2: Es el sistema de ficheros nativo de Linux. Está diseñado para ser compatible con
        versiones anteriores.

    o   EXT3: Es una modificación del ext2, para añadirle funcionalidades de jourmaling.

    o   EXT4: Mejora ext3, permitiendo sistemas de ficheros de gran tamaño, es capaz de trabajar
        con volúmenes de hasta 1 exabyte y ficheros de tamaño de hasta 16 TB.

    o   VFAT: Este tipo permite utilizar sistemas de ficheros de Windows (FAT, FAT32), y
        actualmente está soportado el sistema de ficheros de Windows NT, pero sólo fiable en modo
        lectura.

    o   Iso9660: Es el sistema de ficheros estándar para CD-ROM.

    o   NFS: Sistema de ficheros en red, que permite compartir sistemas de ficheros entre
        diferentes máquinas conectadas en red y tratarlos de forma local.

    o   HPFS: Es el de sistema de ficheros de OS/2.

    o   SYSV: Es el sistema de ficheros de SystemV/386, Coherent y Xenix.

Existe también un sistema de ficheros especial denominado proc, y que es accesible a través del
directorio /proc, el cual no es realmente un sistema de ficheros. El sistema de ficheros /proc permite
acceder fácilmente a ciertas estructuras de datos del kernel, como es la lista de procesos.

Convierte estas estructuras de datos en algo parecido a un sistema de ficheros y por tanto da la
posibilidad de manipularlas con las herramientas habituales de manipulación de ficheros. Hay que
tener en cuenta que aunque se le denomine sistema de ficheros, ninguna parte del sistema de
ficheros /proc toca el disco. Existe únicamente en la imaginación del kernel.



Administración del S.F.                       Linux                                                 1
Si añadimos un nuevo disco al sistema ya instalado, deberemos crear las particiones y los sistemas
de ficheros, esta operación implica los siguientes pasos:

    1. Creación de particiones (comando fdisk)
    2. Creación de los sistemas de ficheros (comando mkfs)
    3. Montado de los sistemas de ficheros (comando mount)


Creación de particiones
El comando, en modo texto, para crear particiones es fdisk. Formato:
    fdisk [opciones] dispositivo
dispositivo      Es el nombre del fichero de dispositivo correspondiente (/dev/hdx en IDE, /dev/sdx
para SCSI o SATA)

Debemos tener permiso de administrador para usarlo.

Opciones:

        -l       Muestra la tabla de particiones del dispositivo

fdisk se usa mediante un menú:


    # fdisk /dev/sda

Orden (m para obtener ayuda): m
Orden Acción
   a   Conmuta el indicador de iniciable (partición activa)
   b   Modifica la etiqueta de disco bsd
   c   Conmuta el indicador de compatibilidad con DOS
   d   Suprime una partición
   l   Lista los tipos de particiones conocidos
   m   Imprime este menú
   n   Añade una nueva partición
   o   Crea una nueva tabla de particiones DOS vacía
   p   Imprime la tabla de particiones
   q   Sale sin guardar los cambios
   s   Crea una nueva etiqueta de disco Sun
   t   Cambia el identificador de sistema de una partición (tipo de partición)
   u   Cambia las unidades de visualización/entrada
   v   Verifica la tabla de particiones
   w   Escribe la tabla en el disco y sale
   x   Funciones adicionales (sólo para usuarios avanzados)

Existen otras herramientas para modificar las particiones:

    −   cfdisk            Interfaz para el fdisk (también escribe la tabla de particiones)

    −   parted            Programa de GNU que permite crear, destruir, cambiar el tamaño, chequear
                          y copiar particiones.

    −   gparted           Clónico del Partition Magic para Linux (basado en libparted)


Administración del S.F.                           Linux                                          2
−   Partition Magic Programa comercial de la compañía Symantec que puede manejar diversos
                          filesystems.
1. Visualizar con la opción -l las particiones existentes.
2. Verificar la tabla de particiones.
3. Calcular el tamaño en GB de una partición (confirmarlo con gparted).
4. Borrar todas las posibles particiones de un pen (lo más normal es que
   exista una).
5. Crear dos particiones primarias y una lógica en el pen, de diferentes
   tamaños, que alguna de ellas sea FAT32.
6. En el disco del equipo, comprobar que queda espacio sin asignar en la
   partición extendida.
7. Crear una segunda partición lógica en el disco del sistema                          .


Creación de un Sistema de Ficheros.
Los sistemas de ficheros se crean con el comando mkfs (Make Filesystem). mkfs nos permite
construir un sistema de ficheros sobre un dispositivo, normalmente una partición de un disco.

En Linux, existe un programa separado por cada tipo de sistema de ficheros. mkfs es solamente un
'front-end', que ejecuta el programa apropiado dependiendo del tipo de sistema de ficheros
deseado. El tipo de sistema de ficheros se define con la opción -t de mkfs.



La sintaxis de este comando es:
       mkfs [-t tipo] dispositivo
Donde:

tipo            Es el argumento mediante el que se indica la clase de sistema de ficheros a crear. Si
                se omite este argumento, mkfs lo deducirá buscando en /etc/fstab. Y si no hay
                entrada en fstab tomará por defecto ext3.

Dispositivo     Puede ser el nombre del dispositivo sobre la cual queremos crear el sistema de
                ficheros (como por ejemplo /dev/hda1 o /dev/sdb2) o el punto de montaje (como /,
                /usr o /home). En el caso de indicar el punto de montaje, la orden mkfs intentará
                encontrar el dispositivo en el que crear el sistema de ficheros, en la entrada del fichero
                /etc/fstab, donde encuentre el punto de montaje.

Ejemplos:
       mkfs -t ext3 /dev/sda1
       mkfs /dev/fd0                             # Primera unidad de disquete.
       mkfs /media/floppy

8. Utilizando diferentes particiones del pen, crea un sistema de ficheros
   ext3 y otro vfat.
9. En la nueva lógica del HD crea un sistema de ficheros ext4.




Administración del S.F.                          Linux                                                  3
Montaje,
Montaje, desmontaje y el fichero /etc/fstab.
Para poder usar un sistema de ficheros tiene que estar montado. El concepto de montaje tiene que
ver con que en Unix/Linux todos los elementos son ficheros. Para ello, cada nuevo sistema de
ficheros se enlaza mediante la operación de montaje con otra estructura de directorios de la que
“cuelga”.

El sistema de ficheros inicial se denomina el sistema de ficheros raíz y posee el símbolo /. Este
sistema de ficheros se monta al arrancar el equipo y ocupa el lugar más alto.

Por ejemplo, supongamos que en tres particiones de nuestro disco (o discos diferentes) hemos
creado tres sistemas de ficheros. Cada uno de ellos visto de forma independiente posee una raíz.
Supongamos que son /dev/sda1, /dev/sda2 y /dev/sda3.

Cuando montamos un sistema de ficheros, indicamos un directorio del sistema de ficheros “padre”,
del cual va a colgar la estructura de directorios del sistema de ficheros “hijo”. Mediante las órdenes
de montaje siguientes:
    # mount /dev/sda2 /home
    # mount /dev/sda3 /usr
Hemos montado el sistema de ficheros que hay en /dev/sda2 bajo el directorio /home del sistema
de ficheros raíz. Y el sistema de ficheros de /dev/sda3 bajo el directorio /usr.

Cuando se inicia linux se realiza un montaje automático, mediante la orden ‘mount –a’ que monta
todos los sistemas de ficheros que así se indique dentro de /etc/fstab. Esta orden se encuentra
dentro de los directorios de inicialización /etc/rc.d/.

De igual forma, al apagar el sistema con la orden shutdown, se ejecuta la orden ‘umount –a’, que
desmonta todos los sistemas de ficheros montados al iniciar.


El fichero /etc/fstab
El fichero /etc/fstab contiene información descriptiva sobre los distintos sistemas de ficheros del
sistema. Este fichero es de sólo lectura y debe ser mantenido por el administrador del sistema.

Cada sistema de ficheros se describe en una línea de este fichero, y los campos de cada línea están
separados por tabuladores o espacios. El orden de los registros es importante ya que fsck, mount y
umount actúan secuencialmente sobre este fichero.



/etc/fstab y UUID

Normalmente se especifica en el archivo fstab nombres de los dispositivos, como /dev/sdb1, tal
como en el siguiente ejemplo:
/dev/sdb1                 /media/storage                  ntfs     defaults           0     1



Administración del S.F.                          Linux                                              4
Si queramos que un dispositivo se monte en una ubicación concreta siempre, tenemos el problema
que el nombre del dispositivo /dev/sdb1, del ejemplo anterior, podría cambiar por ejemplo si se
tratara de un dispositivo USB, o de si las Pleyades están alineadas o si es Luna llena.

En este caso podemos utilizar el UUID (Universally Unique Identifier), el cual identifica a cada
sistema de ficheros y hace que el nombre del dispositivo sea irrelevante al momento de montarse.

Un par de formas de obtener el UUID:
# ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx   1    root   root   10   May   5   02:38   07D4-0918 -> ../../sda1
lrwxrwxrwx   1    root   root   10   May   5   02:38   1501c1df-798c-4359-a100-37c97f426269 -> ../../sdb2
lrwxrwxrwx   1    root   root   10   May   5   02:38   1cd538b0-c4da-4280-a485-c0324066832f -> ../../sda5
lrwxrwxrwx   1    root   root   10   May   5   02:38   25b9f76e-0d99-4c6d-b441-4a4a879ff049 -> ../../sda3
lrwxrwxrwx   1    root   root   10   May   5   02:38   9E88682C886804DD -> ../../sdb1
lrwxrwxrwx   1    root   root   10   May   5   02:38   D8701AD2701AB6EA -> ../../sda2

# blkid
/dev/sda1:       SEC_TYPE="msdos" LABEL="DellUtility" UUID="07D4-0918" TYPE="vfat"
/dev/sda2:       UUID="D8701AD2701AB6EA" LABEL="winxp" TYPE="ntfs"
/dev/sda3:       UUID="25b9f76e-0d99-4c6d-b441-4a4a879ff049" TYPE="ext3"
/dev/sda5:       UUID="1cd538b0-c4da-4280-a485-c0324066832f" TYPE="swap"
/dev/sdb1:       UUID="9E88682C886804DD" LABEL="storage" TYPE="ntfs"
/dev/sdb2:       UUID="1501c1df-798c-4359-a100-37c97f426269" TYPE="ext3
Procedemos a modificar nuestro fstab:
UUID=9E88682C886804DD                      /media/storage           ntfs      defaults       0 1


Datos que van en una línea de /etc/fstab:

      o   device         Es la ruta hacia la partición a montar (/dev/sda2) o el UUID que la representa
                         (UUID=01234567-89ab-cdef-0123-4567890abcde).

      o   directorio Es el segundo campo y especifica el punto de montaje para el sistema de
                         ficheros. Para particiones de swap este campo debería estar a "none". El
                         directorio destino de montaje tiene que existir en nuestro sistema antes de
                         montar el sistema de ficheros.

      o   tipo           Es el tercer campo y especifica el tipo de sistema de ficheros.

      o   opciones       Es el cuarto campo e incluye las opciones de montaje asociadas al sistema de
                         ficheros.
                         Las opciones van separadas por comas. Algunas de las opciones posibles son:

             −    auto       La partición se monta al arrancar.

             −    noauto     No se monta la partición en el arranque.

             −    user       Se permite a los usarios montar la partición.

             −    nouser     Sólo el root puede montar esta partición.

             −    ro         Read-Only, partición de sólo lectura, no se puede escribir.




Administración del S.F.                                Linux                                           5
−   rw         Read-Write, monta la partición para que sea posible leer y escribir en ella.

            −   sw         Cuando una partición actúa de intercambio (Swap).

            −   exec       Se pueden ejecutar los programas de esa partición.

            −   noexec     Impide la ejecución de cualquier archivo contenido en ese sistema de
                           ficheros.

            −   async      El sistema sigue trabajando tras una petición de escritura del dispositivo,
                           aunque todavía no haya recibido la confirmación.

            −   defaults Equivale a: rw, exec, auto, nouser, async.

      o   frecuencia Con él determinamos la frecuencia con que deben de hacerse copias de
                        seguridad del sistema por el comando dump. Si este campo no está presente
                        se devuelve a dump el valor cero, lo que indica que el sistema de ficheros no
                        necesita ser salvado (no suele usarse).

      o   secuencia Es el sexto campo (fsckorder) y es usado por fsck para determinar el orden en
                        que se realizan los chequeos de los sistemas de ficheros en tiempo de
                        arranque. El sistema de ficheros raíz debería ser especificado con un 1, y los
                        demás sistemas de ficheros deberían tener 2. Los sistemas de ficheros en un
                        mismo disco deberían chequearse secuencialmente, pero los sistemas de
                        ficheros en diferentes discos deberían de chequearse al mismo tiempo, para
                        utilizar el paralelismo disponible en el hardware. Si el sexto campo no está
                        presente o es cero, fsck asume que el sistema de ficheros no necesita ser
                        chequeado.

Ejemplo de fichero /etc/fstab:
<device>          <directorio>         <Tipo>    <Opciones>       <dump>    <fsckorder>
/dev/hdc1         /                    ext2      defaults         1         1
/dev/hdc6         swap                 swap      sw               0         0
/dev/fd0          /mnt/floppy          ext2      noauto,user      0         0
/dev/cdrom        /mnt/cdrom           iso9660   noauto,ro,user   0         0
/dev/hda1         /mnt/windows         vfat      noauto
none              /proc                proc      defaults         0         0

El sistema de ficheros proc se usa para almacenar información sobre los procesos del sistema,
memoria disponible y otros datos de la misma índole. No está relacionado con ninguna partición o
disco, sino que permanece en memoria.


10. Añadir la partición lógica del HD que hemos creado al fichero fstab, de
    forma que se monte y desmonte automáticamente, para lectura y escritura,
    y que los usuarios puedan ejecutar los comandos que contenga.




Administración del S.F.                           Linux                                                   6
El comando mount

El comando mount nos permite montar los sistemas de ficheros y anclarlos a puntos de montaje
(directorios). A partir de este momento podremos acceder a ellos. La sintaxis más usual es:
mount [-r][-t tipo] [dispositivo] dir
Si montamos una unidad que está incluida en el fichero /etc/fstab y se omiten los argumentos [-t
tipo] y [dispositivo], la información necesaria la obtiene el comando mount del fichero /etc/fstab.

           -r            Monta el dispositivo de sólo lectura.
           -t tipo       Tipo de sistema de ficheros que se va a montar
           dispositivo   Fichero dispositivo que contiene el sistema de ficheros.
           directorio    Directorio sobre el que se monta el sistema de ficheros.
Por ejemplo, con el /etc/fstab anterior, para montar la unidad de CD escribiríamos:
mount /mnt/cdrom
Sin embargo, si lo que queremos es montar un disquete formateado bajo Windows tendremos que
escribir:
mount -t vfat /dev/fd0 /mnt/floppy
Si ese mismo disco es del tipo ext2, tan sólo tendremos que usar:
mount /mnt/floppy
El sistema mantiene una lista de los sistemas de ficheros montados actualmente, en el fichero
/etc/mtab. Si se utiliza el comando mount sin argumentos:
mount
Nos muestra la lista de sistemas de ficheros montados.


11.   Ver los sistemas de ficheros montados.
12.   Montar el sistema de ficheros (ext3) creado en el pen.
13.   Comprobar que se ha montado.
14.   Crear en él directorios y ficheros.



El comando umount

La sintaxis más usual es:
umount [opciones] dir
El comando umount elimina el anclaje entre el dispositivo especial y el punto de montaje.

Para desmontar la unidad de CD:
umount /mnt/cdrom
Si tenemos una unidad de CD montada no podremos extraer el CD hasta que no lo desmontemos. Si
estamos trabajando con una unidad de disquete o pen es fundamental desmontarla antes de extraer
el disco



Administración del S.F.                           Linux                                               7
Algunas opciones son:

        -a      Desmonta todos los sistemas de ficheros contenidos en /etc/mtab, con montaje
                automático.

        -t      Desmonta sólo los sistemas de ficheros de un tipo en concreto (o varios, separando
                los argumentos por comas).

Para desmontar un sistema de ficheros debemos de estar situados fuera de él, y ningún proceso del
sistema debe estar utilizando el sistema de ficheros que deseemos desmontar, en caso contrario nos
diría que está ocupado.

La solución será “matar” al proceso o procesos que están utilizando el sistema de ficheros que
deseamos desmontar o esperar a que acaben “por las buenas”.

Para saber qué procesos están utilizando un sistema de ficheros podemos utilizar la orden fuser. Por
ejemplo, si en /mnt/win tenemos montada nuestra partición con el sistema de ficheros vfat y no nos
deja desmontarla, podemos ver de qué procesos se trata con:
/sbin/fuser -a /mnt/win

15. Intentar desmontar el SF del pen, mientras se está editando uno de sus
    ficheros.
16. Hacer lo necesario para desmontarlo.
17. Tratar de acceder a él una vez desmontado.
18. Ver los sistemas de ficheros montados.



chroot

chroot cambia el directorio raíz al que le indiquemos. Este directorio será usado como raíz para
todas las trayectorias que comiencen por /.

Solamente el superusuario puede cambiar el directorio raíz.

Este comando no cambia de directorio activo, por lo que el directorio ’.’ puede estar fuera del árbol
enraizado en ’/’.

Este comando es útil cuando queremos trabajar (administrar) un linux instalado en un SF distinto al
de arranque.

Previamente a la utilización de este comando debemos montar el SF donde se encuentre el SO.

Sintaxis:
chroot directorio [comando [argumentos]]


Cuando se indica el comando, lo ejecuta, sobre el SO linux cuya raiz esté en el directorio indicado.

Si omitimos el comando entramos en un nuevo shell, que actuará sobre el SO montado en el



Administración del S.F.                       Linux                                                    8
dirctorio.


19.        Iniciar desde un pen o CD live y montar el SF linux del equipo.
20.        Cambiar la raiz del sistema a la del equipo.
21.        Hacer algún cambio (crear algún fichero o modificarlo), salir con ^d.
22.        Desmontar y arrancar linux desde el disco duro, comprobar si se han hecho
           los cambios.

Situaciones:

Contraseña de root o usuario administrador olvidada.
¿Quién no ha olvidado la contraseña del super usuario? ¿Quién no ha tenido que acceder al
ordenador de un compañero que se fue de la empresa sin dejar las claves y usuarios que utilizaba
en su equipo?

Pasos a seguir:

      a.    Arrancar el equipo con un livecd o pen.

      b.    Montar la partición en la que está instalado Linux en el equipo (comando mount y fdisk para
            tratar de localizar la partición que contiene el sistema operativo)

      c.    Establecer el sistema del equipo como raiz:
            chroot /mnt/disco_linux
            Suponiendo que /mnt/disco_linux es el directorio utilizado en el paso 'b' para montar la
            partición que contiene Linux.

      d.    Ejecutar passwd para cambiar la clave del administrador.

      e.    Ya sólo queda salir y cerrar el equipo:
            exit                                        # salir de chroot.
            umount /mnt/disco_linux                     # Desmontar la partición.
            Retirar el pen o CD-live.
            reboot                                      # Reiniciar el equipo.
Ya se puede acceder como administrador usando la nueva contraseña.



Instalar programas en los equipos de la Escuela TIC 2.0
Una solución poco intrusiva es crear un nuevo usuario y añadirlo a sudoers

Pasos a seguir:

            Procedemos de forma similar al caso anterior hasta el paso 'c'.

            Creación de un usuario 'clon' al que trae por defecto, pero con permisos administrativos:

            a.   Tomamos nota de los grupos a los que pertenece 'usuario', para averiguarlos:



Administración del S.F.                            Linux                                                9
group usuario
        b.   Creamos el usuario 'clon':
             useradd -d /home/clon -m -G grupos -k /home/usuario -s /bin/bash clon

        c.   Démosle una clave con:
             passwd clon
        d.   Sólo nos queda añadir al usuario clon a /etc/sudoers ejecutando:
             visudo
             Añadir la línea
             clon ALL=(ALL) NOPASSWD: ALL
        e.   Salir como en el caso anterior.

Y ya podemos acceder al sistema con el nuevo usuario, con la posibilidad de realizar tareas
administrativas (instalar juegos,…)




Chequeo y Recuperación de un Sistema de Ficheros: fsck.
El comando fsck nos permite chequear y, opcionalmente, reparar un sistema de ficheros. fsck repara
inconsistencias en los sistemas de ficheros después de un apagado incorrecto de la máquina.

El funcionamiento es el siguiente. Cuando un sistema de ficheros se monta, se marca como “sucio”,
porque el sistema en su trabajo normal, tendrá datos mantenidos en memoria en vez de grabarlos
directamente al disco, con el fin de mejorar las prestaciones.

Si el sistema lo apagamos correctamente, una de sus tareas es descargar todo lo que se encuentre
en la memoria y que corresponda a los discos a su lugar correspondiente. Tras hacer esto, se marca
el sistema de ficheros como “limpio”. Si por cualquier razón se apagase sin que se pueda realizar el
proceso correcto, los discos se quedarán como “sucios” y deberán comprobarse en el siguiente
arranque.

Para chequear un sistema de ficheros éste debe estar desmontado.

Su sintaxis básica es:
     fsck [-t fstype] [-fsopcion] dispositivo
dispositivo es el fichero especial correspondiente a la partición que se va a chequear. Por ejemplo,
     /sbin/fsck /dev/hda2                 # verifica el volumen /dev/hda2.
Opciones:

-a      Repara los ficheros sin confirmación por nuestra parte. Los ficheros perdidos que recupere
        los podemos encontrar en el subdirectorio /lost+found del dispositivo.

-A      fsck recorre el fichero /etc/fstab y verifica todas las unidadades en función del parámetro
        fsckorder del fichero /etc/fstab.



Administración del S.F.                        Linux                                                   10
Sistema de cuotas
El almacenamiento en disco se puede restringir mediante la implementación de cuotas de disco. Las
cuotas se pueden configurar para usuarios individuales o para grupos. Este tipo de flexibilidad hace
posible darle a cada usuario una pequeña porción del disco para que maneje sus archivos
personales (tales como correo o informes), mientras que se le permite tener más espacio para
manejar los proyectos en los que estén trabajando sus grupos.

Además, se puede configurar las cuotas no sólo para que controlen el número de bloques de disco,
sino también el número de inodos, esto permite controlar el número de archivos que pueden ser
creados.

El soporte de cuotas de disco ha sido integrado en el kernel Linux desde la versión 1.3.46.

Se necesita utilizar un kernel posterior para poder beneficiarse de las cuotas. El paquete software
necesario que permite gestionar las cuotas es 'quota'. Además necesitamos tener esa opción
compilada en el kernel respondiendo afirmativamente a la opción Quota support. Con esto
conseguiremos limitar el espacio de disco consumido por usuario o por un grupo de usuarios.


Activación de las cuotas
Activación
Existen dos tipos de cuotas: las cuotas asociadas a los usuarios y las cuotas asociadas a los grupos
de usuarios. Las primeras definen el número máximo de archivos y de bloques de disco asociados a
cada usuario, las segundas definen el número máximo de archivos asociados a cada grupo de
usuarios. Los dos tipos de cuotas pueden ser activados separadamente.

Para activar las cuotas para los usuarios es necesario indicar la opción 'usrquota' para los sistemas
de archivos referidos en /etc/fstab. Las cuotas que conciernen a los grupos son reguladas por la
opción 'grpquota'. Los archivos de definición de cuotas se llaman respectivamente 'quota.user' y
'quota.group' estos se encuentran situados en la raíz de cada sistema de archivos involucrado.

Es posible modificar los nombres de los archivos de gestión de cuotas utilizando la sintáxis siguiente:
    usrquota=nombredearchivo
    grpquota=nombredearchivo
He aquí un ejemplo del archivo /etc/fstab:
    /dev/hda2             /          ext3        defaults,rw                                       0   1
    /dev/hdb2             /home      ext3        defaults,rw,usrquota,grpquota                     0   1
    /dev/sda1             /usr       ext3        defaults,rw,usrquota                              0   1
La activación de las cuotas es lanzada por la orden 'quotaon'. Para activarlas automáticamente a la
inicialización del sistema, se debe agregar al archivo de inicialización (/etc/rc.d) las líneas:
    quotaon -avug
Para crear los archivos de cuotas (aquota.user y aquota.group) en el sistema de archivos, se usa la


Administración del S.F.                         Linux                                                  11
opción -c del comando quotacheck.
    quotacheck -acug /home
Puede ser igualmente necesario verificar la coherencia de la información sobre gestión de cuotas
después de bloqueos repentinos. Para esto se utiliza la orden quotacheck:
    quotacheck -avug
Si las utilidades han sido compiladas con-DEXTc2DIRECT, la orden quotacheck debe ejecutarse
relativamente rápido, en caso contrario puede ser muy lento, pues debe explorar todos los
directorios del disco. Es aconsejable de todas maneras ejecutar quotacheck durante la inicialización
del sistema antes de la activación de las cuotas con quotaon.


Cuotas de usuario
La orden 'edquota' es utilizada para asignar una cuota a un usuario o a un grupo de usuarios.

Su sintáxis es:
    edquota -u usuario
    edquota -g grupo.
Esta orden lanza un editor de texto que contiene la definición de cuotas asignadas al usuario o al
grupo y toma en cuenta el nuevo valor cuando el archivo es reescrito.

Para cada usuario o grupo existen dos limitaciones: el número de archivos y el número de bloques
disco (expresados en bloques de 1024 octetos). Para cada uno existen dos límites:

        a.   El límite "suave": cuando este límite es alcanzado o superado un mensaje advierte al
             usuario cada vez que un nuevo bloque o archivo es escrito.

        b.   El límite "duro": cuando este límite es alcanzado el usuario no puede escribir nuevos
             archivos o nuevos bloques.

El límite "suave" se transforma en límite "duro" cuando ha sido alcanzado o superado transcurrido
cierto tiempo (7 días por defecto).

Se puede definir una plantilla de usuario al cual se le asignan las cuotas y utilizarla para adjudicar
cuotas a los demás usuarios del sistema.
    edquota -p usuarioplantilla -u usuario
Todo usuario puede obtener el estado de la cuota que le ha sido asignada (limites como el número
de archivos y de bloques que le han sido atribuidos) gracias a la orden:
    quota
El superusuario puede obtener las mismas informaciones sobre cualquier usuario o grupo con la
misma orden:
    quota -u usuario
    quota -g grupo
Además es posible utilizar la orden repquota para obtener una lista de cuotas asociadas a uno o
varios sistemas de archivos.


Administración del S.F.                       Linux                                                12
Estadísticas del sistema
Estadísticas
Los comandos básicos para averiguar la ocupación del disco y la carga del sistema.

du (disk usage)

     du [-abs] [trayectoria1 trayectoria2 . . . trayectoriaN]
El comando       du contabilizará el espacio de disco ocupado por un subdirectorio y todos sus
subdirectorios. El uso de este comando sin utilizar parámetros devolverá una lista de cuanto disco
consume cada subdirectorio del directorio actual, y al final del informe, cuanto disco      utiliza el
directorio (y todos sus subdirectorios). Si se le pasa uno o más parámetros, devolverá la cantidad de
espacio utilizado por esos ficheros o directorios en lugar de la del directorio actual.

Algunas opciones son:

-a        Mostrará además del espacio de los directorios, el de los ficheros.

-b        Presentará el total en bytes, en lugar de kilobytes.

-s        Informará sólo acerca de los directorios explicítos en la linea de comando y no de sus
          subdirectorios.




df (disk filling, espacio disponible en el disco)

     df
Para cada sistema de ficheros (recuerde que sistemas de ficheros diferentes son o bien unidades
físicas o particiones diferentes) muestra:

     o    El espacio total de disco.
     o    La cantidad utilizada.
     o    La cantidad disponible.
     o    La capacidad total del sistema de ficheros que se utiliza.
Un caso extraño que puede darse, es la posibilidad de tener una capacidad superior al 100%, o que
la cantidad utilizada más la disponible no sea igual a la total. Esto es debido a que Unix reserva
parte del espacio de cada sistema de ficheros para el directorio raíz. De esta forma aunque algún
usuario accidentalmente sature el disco, el sistema todavía tendrá un poco de espacio para seguir
operativo.




uptime

     uptime


Administración del S.F.                          Linux                                             13
El comando uptime informa sobre el tiempo que el sistema ha estado activo, es decir el tiempo
transcurrido desde que arrancó por última vez.

Este comando también devuelve la hora actual y el promedio de carga que soporta el sistema.

El promedio de carga es el número medio de procesos esperando a ser ejecutados en un
determinado periodo de tiempo. uptime muestra el promedio de carga del último minuto y de los
cinco y diez últimos minutos.

Si el promedio de carga se aproxima a cero indica que el sistema ha estado relativamente
desocupado; por el contrario si el promedio es cercano al uno indica que el sistema ha estado casi
completamente utilizado pero en ningún momento sobrecargado. Los promedios de carga altos son
el resultado de la ejecución simultánea de varios programas.




Administración del S.F.                      Linux                                             14
Copias de seguridad
Realizar copias de seguridad es una de las tareas más importantes del administrador del sistema, este
debe:
    −   Planear e implementar un sistema de copias de seguridad.
    −   Periódicamente, hacer copias de seguridad de todos los ficheros.
    −   Guardar las copias de seguridad en un lugar seguro.

Es casi inevitable que se produzcan pérdidas de información, debido a, entre otras causas:
    −   Deterioro o borrado accidental por parte de un usuario autorizado.
    −   Ataque intencionado por parte de personas no autorizadas.
    −   Fallo del software o el hardware.
    −   Incendio, robos, y desastres naturales, etc.




Estrategias para las copias de seguridad
Factores a considerar en una estrategia de copias de seguridad:
    −   ¿Qué ficheros se deben copiar y dónde están esos ficheros?
    −   Conocer qué es lo más importante del sistema.
    −   ¿Quién hará la copia? ¿Administrador o propietario de los ficheros?
    −   ¿Dónde, cuándo y bajo qué condiciones se deben hacer? Mejor hacer las copias cuando no
        haya usuarios trabajando (por la noche, al mediodía).
    −   ¿Con qué frecuencia cambian los ficheros? Frecuencia de las copias.
    −   ¿Cada cuánto tiempo necesitan recuperarse importantes ficheros dañados o perdidos? (Esto es
        muy difícil de saber).
    −   ¿Dónde se restaurarán los datos?
    −   Hacer las rutinas de restauración sencillas.
    −   Proteger las copias de seguridad contra escritura.
    −   Seguridad de las copias: lugar donde se almacenan, condiciones ambientales, propiedades de
        los medios empleados, . . .


Carácterísticas deseables en una buena estrategia para copias
de seguridad:
    −   Ser fácil de usar, preferiblemente que sea totalmente automática.
    −   Eficiencia y rapidez: compromiso entre el tiempo de backup y el tiempo de recuperación.



Copias de Seguridad                            Linux                                              1
−      Facilidad de restauración.
    −      Capacidad de verificar las copias (difícil si el sistema está siendo usado continuamente).
    −      Tolerancia a fallos en los medios de almacenamiento (cintas, etc.): necesidad de mantener al
           menos dos copias de los backups completos del sistema, almacenadas en distinto sitio.
    −      Portabilidad: posibilidad de recuperar la información en diferentes sistemas.


Componentes de las copias de seguridad
Hay básicamente tres componentes que intervienen en una copia de seguridad:
    −      El planificador: decide qué información se copia y cuándo.
    −      Los medios de almacenamiento: cintas, CDs, memorias USB, HD, etc.
    −      El programa de copia: los comandos que mueven los datos de los discos a los medios.



El planificador
Decide qué información se debe salvar en cada copia, y cuándo se hacen estas.

Normalmente es gestionado mediante cron.

Según la información que salvemos podemos hablar de los siguientes tipos de backup:


Completo
Copia de seguridad completa de un sistema de ficheros (TODO). Llamada de NIVEL 0.

Este tipo de copia tarda mucho tiempo en hacerse y presenta inconvenientes para recuperar un único
fichero.

Si los ficheros no cambian muy a menudo: no hay justificación para realizarlas de forma asidua. Si
cambian mucho y son vitales para el trabajo de mucha gente, están justificadas incluso a diario.

Es recomendable hacerla ante grandes cambios: nuevo software, nuevo SO, . . .


Parcial
Sólo se salva la información más importante y difícil de recuperar:
    −      Los ficheros de usuario.
    −      Los ficheros de configuración, p.e. /etc/passwd.
    −      Directorios de correo, web, etc.


Incremental
Sólo se salvan los ficheros modificados desde el último backup completo o incremental. Llamada de
NIVEL 2.



Copias de Seguridad                              Linux                                                  2
La copia de seguridad necesita menos tiempo y espacio, pero para restaurar los datos necesitaremos el
último backup completo y todos los incrementales.

Se deben realizar con mucha más frecuencia, incluso a diario.


Diferencial
Se salvan los ficheros modificados desde el último backup completo. Llamada de NIVEL 1.
    −   Los backups son más grandes que en el caso incremental.
    −   Para restaurar sólo necesitamos el backup completo y el último diferencial.



Ejemplos de estrategias:
    −   Lunes de nivel 0 y el resto de días de nivel 1
    −   Lunes de nivel 0, martes de nivel 1, miércoles de nivel 2, jueves de nivel 1 y viernes de nivel 2

¿Cómo se restaurarán?



Soportes de seguridad
Son los medios de almacenamiento o soportes donde se guarda la información:
    −   Cintas magnéticas, principalmente cintas de 8 mm o de 4mm, con capacidades de hasta 72 GB.
        Las hay con no-rebobinado (/dev/nstX ) y con rebobinado (/dev/stX).
    −   Discos duros internos o externos.
    −   CD-Rom's o DVD’s regrablables. buenos cuando la cantidad de datos no es excesivamente
        elevada. Necesitan software adicional para crear las imágenes ISO (como mkisofs) y para
        realizar la grabación (cdrecord).
    −   Memorias USB.
    −   Disquetes, en desuso, poca capacidad.
    −   Papel, aunque parezca mentira puede ser útil, por ejemplo, imprimir un fichero de
        configuración que vamos a modificar.
    −   etc.




Copias de Seguridad                            Linux                                                  3
Programas de copia
tar
Tar (Tape Archive, archivar en cinta) permite empaquetar o desempaquetar ficheros. El concepto de
empaquetar, es el de meter varios ficheros y/o directorios en un solo fichero (paquete). Posteriormente
podremos recuperar esa estructura de ficheros y directorios en el lugar donde queramos. Su sintaxis
básica es:
tar     [-]opción[modificador]                 [fichero.tar]             [origen]

Ejemplo: crea un fichero tar conteniendo los ficheros del directorio /etc.
tar     -cvf copia.tar /etc

Puede indicarse un fichero o un dispositivo (p.e. /dev/sdb2).

tar conserva las propiedades de los ficheros: permisos, usuario, grupo, fechas, etc.



Opciones:

Se pueden combinar, siempre y cuando no indiquen acciones contrarias. Si especificamos varias se
escriben juntas sin mediar espacios entre ellas. Tradicionalmente no se emplea el guión (-), que
normalmente precede a las opciones en las órdenes Linux.
c      Crear un nuevo archivo tar (empaquetado).
t      Para mostrar el contenido de un paquete.
x      Para extraer archivos empaquetados, se pueden indicar ficheros individuales.
r      Añade el (los) fichero(s) especificado(s) al final del paquete.
u      Añade el (los) fichero(s), sólo si no están o son de fecha más reciente.
d      Obtiene las diferencias entre los ficheros de la copia (paquete) y los del disco.



Siempre se debe usar una de las opciones anteriores inmediatamente después de la orden tar.



Algunos modificadores:
v      Visualiza la información de lo que hace de forma detallada por pantalla.
f      Indica que el primer argumento, después de las opciones, es el nombre de un fichero tar o un
       dispositivo. Si no se indica este modificador o como fichero se pone - , utiliza la entrada o
       salida estándar, de esta manera se puede usar con tuberías.
M      Para crear / extraer de paquetes que ocupan varios discos.
z      Filtrar el archivo a través de gzip (para comprimir como descomprimir). Tendrán la extensión



Copias de Seguridad                             Linux                                             4
.tgz equivalente a .tar.gz.
j        Comprime o descomprime con bzip2. Extensión .bz2.
k        No sobreescribe los ficheros existentes al extraer.
TF       Obtiene la lista de ficheros a guardar del fichero F.
XF       Excluye los ficheros que concuerdan con los patrones listados en el fichero F
N Fecha          Sólo guarda los ficheros más nuevos que Fecha (copias diferenciales e incrementales).


fichero.tar      Nombre del archivo o dispositivo almacén.

origen           Nombre del directorio(s) / fichero(s) a empaquetar separados por espacios.

Supongamos que deseamos empaquetar dos ficheros llamados linux1.txt y linux2.txt, en un fichero tar
de nombre linux.tar, escribiremos:
tar -cvf linux.tar linux1.txt linux2.txt

También podemos escribir:
tar -cvf linux.tar linux?.txt

Para empaquetar todo el contenido del directorio “home”:
tar -cvf home.tar /home

Si lo que deseamos es desempaquetar un fichero tar, en vez de escribir la opción -c escribiremos -x, así
para desempaquetar el contenido de home.tar escribimos:
tar -xvf home.tar

De esta manera se crea la estructura de subdirectorios que hubiese dentro de /home.

Si solamente queremos ver el contenido del fichero empaquetado (tar), ejecutamos.
tar -tvf entrega.tar

Antes de extraer ficheros tar es importante conocer, donde deben desempaquetarse los ficheros, y con
qué tipo de trayectoria fueron empaquetados (absoluta o relativa), la opción -t nos informa de esto. Y
así crear los directorios apropiados y poner activo el directorio correspondiente.

tar permite hacer copias de seguridad en varios discos (multivolumen), en ese caso la sintaxis sería:
tar cvfM /dev/fd0 origen

Hay que hacer notar que en este caso no se puede empaquetar y comprimir a la vez y que no podemos
poner el guión delante de las opciones, no funciona.

Para desempaquetar los discos así obtenidos tan sólo tendremos que introducir el primer disco, y sin
montarlo, ejecutar:
tar xvfM /dev/fd0




Copias de Seguridad                             Linux                                               5
Se nos pedirán los disco uno a uno hasta que termine el proceso.



tar czvf /dev/sda1 /home

¿Qué sucede con la partición /dev/sda1?



Crear una copia de seguridad comprimida de la primera partición.
tar czvf /dev/nst0 /dev/sda1

Hacer la copia de seguridad comprimida en un fichero, del directorio prac_iso.
tar czvf practicas.tgz prac_iso

Mostrar los ficheros que componen la copia.
tar tzvf practicas.tgz

Descomprimir.
tar xzvf practicas.tgz

Recuperar el fichero boletin1.pdf (observa que hay que indicar la ruta con la que tar lo almacenó).
tar xzvf practicas.tgz prac_aso/boletin1.pdf



Prácticas:

    1. Crear un paquete .tar en vuestro directorio de trabajo, de alguno de
       vuestros subdirectorios.


    2. Añadirle al paquete ficheros nuevos o modificados, usando distintos tipos
       de trayectorias.




    3. Comprobar los ficheros que lo componen.


    4. Borrar los originales y recuperarlos del paquete.


    5. Realizar las operaciones anteriores con una memoria usb.




Copias de Seguridad                           Linux                                                   6
cpio
Permite realizar copias de seguridad de conjuntos de ficheros arbitrariamente, es similar en
funcionalidad a tar y maneja tanto ficheros en formato cpio como tar.

Lee de la entrada estándar el nombre de los ficheros a guardar, lo común es usarlo enlazado con otras
órdenes mediante tuberías.

cpio tiene tres modos de operación.
    −   En el modo de copia-afuera, cpio copia ficheros hacia un paquete. Lee una lista de nombres de
        ficheros, uno por línea, de la entrada estándar, y escribe el paquete en la salida estándar. Una
        forma típica de generar la lista de nombres de ficheros es con la orden find; se debería dar a
        find la opción -depth para minimizar problemas con permisos en directorios para los que no se
        tiene permiso de paso.
                           cpio -o < lista-nombres > paquete

    −   En el modo de copia-adentro, cpio copia ficheros desde un paquete (archivo) o lista los
        contenidos del paquete. Lee el paquete desde la entrada estándar. Los argumentos de la línea
        de órdenes son patrones del shell de concordancia de nombres de ficheros; sólo se copian
        desde el paquete aquéllos ficheros cuyos nombres concuerden con los patrones. Si no se dan
        patrones, se extraen todos los ficheros.
                                  cpio -i patrón < paquete

    −   En el modo de copia-de-paso, cpio copia ficheros de un árbol de directorio a otro. Lee desde la
        entrada estándar la lista de ficheros a copiar; el directorio dentro del cual copiará esos ficheros
        se da como un argumento que no es una opción.
                      cpio -p directorio-destino < lista-ficheros

Algunas opciones:
o       Copiar “fuera” (out), crear la copia de seguridad.
i       Copiar “dentro” (in), extraer de la copia.
P       Copia de paso.
m       Conserva fecha y hora de los ficheros.
t       Crea tabla de contenidos, muestra el contenido de la copia
A       Añade ficheros a un contenedor existente.
d       Crear directorios al descomprimir.
v       Modo verbose.


Consultar otras muchas opciones con: cpio --help | less

Ejemplos:

Copia en la unidad de cinta.


Copias de Seguridad                            Linux                                                  7
find /home | cpio -o > /dev/nst0

La copia la realiza en un fichero
find /home | cpio -o -F h.cpio

Restaura la copia de seguridad de ese paquete.
cpio -i < h.cpio

Restaura sólo el fichero indicado
cpio -i fichero < h.cpio



    6. Usa find para obtener una lista de los ficheros a respaldar, almacena sus
        nombres mediante una tubería en el fichero ‘acopiar’.


    7. Realiza la copia de los ficheros en un paquete llamado ‘copia.cpio’.


    8. Visualiza los nombres de los ficheros contenidos en ‘copia.cpio’.


    9. Borra algún fichero de los originales.


    10. Restaura la copia.




dump
Los comandos dump y restore, son los más comunes para copias de seguridad.

dump: Hace copias de un sistema de archivos entero, con las siguientes características:
    −   Pueden ser copias multivolumen.
    −   Puede salvar ficheros de cualquier tipo (incluido ficheros de dispositivos).
    −   Los permisos, propietarios y fechas de modificación son preservados.
    −   Puede realizar copias incrementales.
    −   También puede usarse para salvar ficheros individuales (no es lo usual).



Si no lo tenemos instalado, ejecutamos:
apt-get install dump



El formato y los argumentos de dump dependen de la versión utilizada, pero en general es:
dump [-nivel] [opciones] [ficheros_a_copiar]


Copias de Seguridad                            Linux                                        8
Nivel de dump: entero entre 0-9:
     −   0 implica backup completo.
     −   Mayor que 0 implica copiar sólo los ficheros nuevos o modificados desde el último backup de
         nivel inferior

dump guarda información sobre los backups realizados, en el fichero /etc/dumpdates o
/var/lib/dumpdates (este último es el caso de Ubuntu).

Algunas opciones:
-f       Especifica el dispositivo o fichero donde almacenar la copia.
-u       Actualiza el fichero dumpdates después de una copia correcta, cuando se respaldan SF
         completos.
-a       Determina automáticamente el fin de la cinta (opción por defecto).
-j, -z   Usa compresión con bzlib o zlib (sólo en algunas versiones).


Backup de nivel 0 de la partición /home
# dump -0u -f /dev/sdb2 /home

Backup en una máquina remota usando ssh como transporte
# export RSH=/usr/bin/ssh

# dump -0u -f usuario@sistema_remoto:/dev/sda6 /home


restore: Restaura ficheros salvados por dump
Formato:
restore acción [opciones ] [ficheros_a_recuperar]

Acciones principales:
r        Restaura la copia completa.
t        Muestra los contenidos de la copia.
x        Extrae sólo los ficheros indicados.

Algunas opciones:
-f       Especifica el dispositivo o fichero de la copia
-a       No pregunta de que volumen extraer los ficheros (lee todos los volúmenes empezando en 1)



Restaurar el backup almacenado en /dev/sdb2
# restore -rf /dev/sdb2

Restaurar el backup desde un sistema remoto



Copias de Seguridad                              Linux                                          9
# export RSH=/usr/bin/ssh

# restore -rf usuario@sistema_remoto:/dev/sda6

Restaurar sólo un fichero
# restore -xaf /dev/sdb2 fichero



Archivo restoresymtable: Se crea cuando se restaura un filesystem completo, en el directorio donde se
restaura, contiene información sobre el sistema restaurado y puede eliminarse una vez finalizada la
restauración.



Más ejemplos de estrategias de planificación de los backups.

Ejemplo 1: copia de nivel 0 mensual, de nivel 9 diaria (L, M, X y J) y de nivel 5 semanal (V).



Necesita 6 o 9 cintas: una para el 0, 4 para los niveles 5 y 1 o 4 para los niveles 9.

Para restaurar necesitamos restaurar en orden:
    −   La copia de nivel 0.
    −   La última copia de nivel 5.
    −   La última de nivel 9, después de la de nivel 5.



Ejemplo 2: copia de nivel 0 mensual (completa), de nivel 2 el viernes (diferencial) y de niveles 3 el
lunes, 4 el martes, 5 el miércoles y 6 el jueves (incrementales).

Necesita al menos 9 cintas.

Para restaurar necesitamos restaurar en orden:
    −   La del nivel 0.
    −   La del último viernes (nivel 2).
    −   Las diarias desde el último viernes de forma consecutiva.



Prácticas:

   11. Utilizando dump, haz un backup de nivel 0 de la partición ‘logica’ en
        /dump/logica.0.


   12. Crea o modifica algún fichero en ‘logica’.


   13. Haz una copia de nivel 2 de la partición ‘logica’ en /dump/logica.2.




Copias de Seguridad                            Linux                                             10
14. Observa el contenido del fichero dumpdates.


   15. Comprueba los nombres de los ficheros que contiene cada copia.


   16. Borra algunos o todos los ficheros de la partición y restáuralos a partir
        de las dos copias de seguridad.




   17. Crea un fichero 'temp.dat' en un directorio 'tmp' dentro de tu HOME. Usa
        tar para crear un paquete conteniendo todo tu directorio HOME.


   18. Borra el fichero 'temp.dat' y recupéralo del paquete tar.




   19. Mediante un comando busca todos los ficheros terminados en '.txt', que se
        encuentren a partir de un directorio y almacénalos comprimidos con cpio.




Copias de Seguridad                 Linux                                   11
Otras aplicaciones
Existen otros comandos que permiten hacer backups y sincronizar ficheros: bacula, rdist, rsync, etc.


Bacula
Sofisticado sistema de backup en red con diseño modular, que permite hacer copias de seguridad de
todas las máquinas de una LAN a diferentes medios de backups (cinta, disco, . . . )

Soporta MySQL, PostgreSQL o SQLlite para el catálogo.

Hace backups de sistemas UNIX, Linux y Windows.

Para más información, ver www.bacula.org/dev-manual/What_is_Bacula.html




    Amanda
Amanda: Advanced Maryland Automatic Network Disk Archiver.

Sofisticado sistema de backup en red, que permite hacer copias de seguridad de todas las máquinas de
una LAN a una unidad de cinta del servidor.

Está disponible en la mayoría de los UNIX y soporta muchos tipos de medios de backup.

Puede hacer uso de SAMBA para copias de sistemas Windows NT.

Se basa en dump y tar. Para más información, ver www.amanda.org/docs




    Flexbackup
Herramienta de backup flexible para instalaciones de pequeño y medio tamaño.

Más simple de configurar y utilizar que Amanda para sitios con un número no muy alto de sistemas.

Usa distintos formatos de archivo: dump, afio, GNU tar, cpio, zip, etc.

Permite backups completos e incrementales, como dump, y remotos a través de rsh o ssh.

Para más información, ver flexbackup.sourceforge.net




    rdiff-backup
rdiff-backup copia un directorio en otro, permitiendo copias remotas.

Hace una copia exacta de los directorios (mirror), guardando las propiedades de los ficheros
(propietario, permisos, etc.).

Guarda las diferencias entre copias de los ficheros para poder recuperar un fichero antiguo
(incremental).



Copias de Seguridad                           Linux                                               12
Sólo transmite las diferencias de los ficheros (similar a rsync).

Para más información ver www.nongnu.org/rdiff-backup




    DAR
DAR Disk ARchiver comando para hacer backups de árboles de directorios y ficheros.

Permite copiar un sistema de ficheros entero a un archivo.

Permite hacer backups completos y diferenciales y copias multivolumen:

divide en archivo en varios ficheros (slices) parando antes de crear cada nuevo slice, interesante para
hacer copias en floppy, CD o DVD

Más información en: dar.linux.free.fr




    Comando rdist
Permite distribuir ficheros desde un servidor central a varias máquinas. Sólo copia los ficheros
modificados, preservando el propietario, grupo, modo y fechas de modificación las versiones actuales.
Puede funcionar sobre ssh.




    Comando rsync
Similar a rdist aunque funciona de forma diferente, más eficiente que rdist, sólo transmite las
diferencias entre ficheros no usa fichero de configuración: funciona de forma similar a rcp.

Ver la página de manual de rsync para más detalles.




    Unison
Aplicación para sincronizar ficheros y directorios entre sistemas, puede sincronizar entre sistemas
Windows y UNIX, no requiere permisos de root, permite sincronización en los dos sentidos, las
transferencias se optimizan usando una versión de rsync.

Tiene un interfaz gráfico sencillo, para ver un tutorial de uso, hacer:

$ unison -doc tutorial




Copias de Seguridad                             Linux                                            13
Pr
                               Gestión de Procesos
Una definición simple de proceso podría ser que es una instancia de un programa en ejecución
(corriendo). A los procesos frecuentemente se les llama tareas. El contexto de un programa que está
en ejecución es lo que se llama un proceso. Este contexto incluye procesos hijos que se hayan
generado del principal (proceso padre), los recursos del sistema que este consumiendo, sus atributos
de seguridad (tales como su propietario y permisos de archivos), etc.

Linux, como se sabe, es un sistema operativo multitarea y multiusuario. Esto quiere decir que múltiples
procesos pueden operar simultáneamente sin interferirse unos con los otros. Cada proceso tiene la
"ilusión" de ser el único proceso en el sistema y que tiene acceso exclusivo a todos los servicios del
sistema operativo.

Programas y procesos son entidades distintas. En un sistema operativo multitarea, múltiples instancias
de un programa pueden ejecutarse simultáneamente. Cada instancia es un proceso separado. Por
ejemplo, si cinco usuarios desde equipos diferentes, ejecutan el mismo programa al mismo tiempo,
habría cinco instancias del mismo programa, es decir, cinco procesos distintos.

Cada proceso que se inicia es referenciado con un número de identificación único, conocido como
Process ID PID, que es siempre un entero positivo. Prácticamente todo lo que se está ejecutando en el
sistema en cualquier momento es un proceso, incluyendo el shell, el ambiente gráfico que puede tener
múltiples procesos, etc. La excepción a lo anterior es el kernel en sí, el cual es un conjunto de rutinas
que residen en memoria y a los cuales los procesos a través de llamadas al sistema pueden tener
acceso.

Algunos procesos están ejecutándose continuamente por el sistema a la espera de atender alguna
petición. Son los llamados demonios (o daemons). Por ejemplo, los demonios que atienden peticiones
de FTP o de HTTP, los que montan automáticamente los CD’s, los que realizan tareas programadas,
etc.

No hay que confundirlos con programas que se ejecutan en background (en segundo plano) y que son
programas que realizan una tarea y acaban, pero no esperan entradas interactivas. Si queremos hacer
un cálculo muy complejo o una tarea que va a tardar cierto tiempo, lanzamos el programa que lo
realiza, lo mandamos al segundo plano y mientras podemos realizar otras tareas. Para ello usamos el
operador & al final de la línea.

A todo proceso, cuando se lanza, se le asocia una entrada estándar, una salida estándar y una salida
de errores. De esta forma, cuando solicita un dato, muestra un mensaje en pantalla (salida estándar, la
consola) y espera una respuesta por el teclado (entrada estándar) y, si se produce un error, lo muestra
por la salida de errores (que habitualmente es también la consola).

El S.O. nos da posibilidades para redirigir la entrada y la salida de proceso, de forma que en vez de leer
del teclado, lea los datos de un fichero o dirigir la salida del proceso a un fichero o a otro proceso.




Gestión de Procesos                            Linux                                                      1
Ver los procesos: ps
El comando ps (process status) visualiza la lista de procesos del sistema, por ejemplo:
$ ps
  PID    TTY                TIME      CMD
 4150    tty1           00:00:00      bash
 4178    tty1           00:00:02      vi
 4238    tty1           00:00:00      sh
 4295    tty1           00:00:00      ps

Cada columna tiene el siguiente significado:
PID           Representa el identificador de proceso.
TTY           Terminal asociado, para los procesos en background una ?.
TIME          Tiempo de ejecución acumulado (uso de la CPU), expresado en horas:minutos:segundos.
CMD           Nombre del proceso.



Ahora sólo estamos viendo los procesos que está ejecutando el usuario que ejecuta la orden.

En el ejemplo anterior, desde el bash se ejecutó el vi, en este momento bash se echa a dormir, desde
el vi iniciamos otro shell (sh) y desde este se ejecuta el comando ps.

Como puede observar, sh se ejecuta concurrentemente con el comando ps. Cuando ps termina de
ejecutarse (después de mostrar la tabla de procesos), el proceso sh retoma el control, y muestra el
prompt, indicando que está listo para recibir otro comando.

Y cuando finalice el vi, será el bash quien tome el control.

Un proceso que está corriendo se denomina tarea para el shell. Los términos proceso y tarea, son
intercambiables. Sin embargo, se suele denominar “tarea" a un proceso, cuando es usado en
conjunción con control de tareas, que es una característica del shell, que permite gestionar tareas.



Opciones de ps (ps –help):




Gestión de Procesos                            Linux                                                   2
********* simple selection ********* ********* selection by list *********
-A all processes                       -C by command name
-N negate selection                    -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders          -g by session OR by effective group name
-e all processes                       -p by process ID
T all processes on this terminal       -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE               -u by effective user ID (supports names)
r only running processes               U processes for specified users
x processes w/o controlling ttys       t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full              --Group --User --pid --cols --ppid
-j,j job control    s signal           --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long           u user-oriented    --sort --tty --forest --version
-F   extra full     X registers        --heading --no-heading --context
                     ********* misc options *********
-V,V show version        L list format codes f ASCII art forest
-m,m,-L,-T,H threads     S children in sum     -y change -l format
-M,Z security data       c true command name -c scheduling class
-w,w wide output         n numeric WCHAN,UID -H process hierarchy

El comando ps es el que permite informar sobre el estado de los procesos. ps esta basado en el
sistema de archivos /proc, es decir, lee directamente la información de los archivos que se encuentran
en este directorio. Tiene una gran cantidad de opciones, incluso estas opciones varían dependiendo del
estilo en que se use el comando. Estas variaciones sobre el uso de ps son las siguientes:

     •   Estilo UNIX, donde las opciones van precedidas por un guión -.
     •   Estilo BSD, donde las opciones no llevan guión -
     •   Estilo GNU, donde se utilizan nombres de opciones largas y van precedidas por doble guión
         --.
Sea cual sea el estilo utilizado, dependiendo de las opciones indicadas, se muestran varias columnas,
estas pueden ser entre otras muchas, las siguientes:

p o PID        Process ID, número único o de identificación del proceso.
P o PPID       Parent Process ID, padre del proceso.
U o UID        User ID, usuario propietario del proceso.
t o TT o
               Terminal asociada al proceso, si no hay terminal aparece entonces un '?'.
TTY
T o TIME       Tiempo de uso de cpu acumulado por el proceso.
c o CMD        El nombre del programa o comando que inició el proceso.
SZ o SIZE      Tamaño que ocupa en menoria en KB.
RSS            Resident Sise, tamaño de la parte residente en memoria en KB.
v o VSIZE      Tamaño en memoria virtual en KB.
               Nice, valor nice (prioridad) del proceso, un número positivo significa menos tiempo
NI
               de procesador y negativo más tiempo (-19 a 19).
C o PCPU       Porcentaje de cpu utilizado por el proceso.
STIME          Starting Time, hora de inicio del proceso.
S o STAT       Status del proceso, estos pueden ser los siguientes:


Gestión de Procesos                          Linux                                               3
•   R runnable, en ejecución, corriendo o ejecutándose.
                      •   S sleeping, proceso en ejecución pero sin actividad por el momento, o
                          esperando por algún evento para continuar.
                      •   T sTopped, proceso detenido totalmente, pero puede ser reiniciado.
                      •   Z zombie, difunto, proceso que por alguna razón no terminó de manera
                          correcta, no debe haber procesos zombies.
                      •   D uninterruptible sleep, son procesos generalmente asociados a acciones de IO
                          del sistema.
                      •   X dead, muerto, proceso terminado pero que sigue apareciendo, igual que los
                          Z no deberían verse nunca.


Con ‘man ps’ se pueden ver más detalles.



A continuación algunos cuantos ejemplos de ps con la salida recortada.
# ps -e        (-e muestra todos los procesos)
  PID TTY              TIME CMD
    1 ?            00:00:01 init
    2 ?            00:00:00 kthreadd
    3 ?            00:00:00 migration/0
    4 ?            00:00:00 ksoftirqd/0

# ps -ef    (-f muestra opciones completas)
UID        PID PPID C STIME TTY             TIME                CMD
root         1     0 0 10:12 ?         00:00:01                 init [5]
root         2     0 0 10:12 ?         00:00:00                 [kthreadd]
...
root      6130 5662 0 10:24 pts/0      00:00:00                 su -
root      6134 6130 0 10:24 pts/0      00:00:00                 -bash
sergon    6343 5604 0 10:28 ?          00:00:00                 kio_file [kdeinit] file
/home/sergon/tmp/ksocket-sergon/kl
root      6475 6134 0 10:38 pts/0      00:00:00                 ps -ef

# ps -eF    (-F muestra opciones completas extra)
UID        PID PPID C      SZ   RSS PSR STIME TTY                            TIME   CMD
root         1     0 0    412   556   1 16:59 ?                          00:00:01   init [5]
root         2     0 0      0     0   1 16:59 ?                          00:00:00   [kthreadd]
sergon    8326 8321 0     902 1272    0 17:07 ?                          00:00:00   /bin/sh
/usr/lib/firefox-2.0.0.8/run-mozilla.sh /usr/lib/f
sergon    8331 8326 4 53856 62604     0 17:07 ?                          00:00:50
/usr/lib/firefox-2.0.0.8/mozilla-firefox-bin
sergon    8570 7726 2 15211 37948     0 17:17 ?                          00:00:10 quanta

# ps ax         (formato BSD sin guión, a muestra todos, x sin mostrar tty)
  PID TTY          STAT   TIME COMMAND
    1 ?            Ss     0:01 init [5]
    2 ?            S<     0:00 [kthreadd]
    3 ?            S<     0:00 [migration/0]
    4 ?            S<     0:00 [ksoftirqd/0]

# ps aux       (formato BSD sin guión, u muestra usuarios y demás columnas)
USER           PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root             1 0.0 0.0     1648   556 ?        Ss   16:59   0:01 init [5]

Gestión de Procesos                             Linux                                              4
root             2    0.0   0.0        0       0   ?          S<      16:59   0:00   [kthreadd]
root             3    0.0   0.0        0       0   ?          S<      16:59   0:00   [migration/0]
root             4    0.0   0.0        0       0   ?          S<      16:59   0:00   [ksoftirqd/0]
root             5    0.0   0.0        0       0   ?          S<      16:59   0:00   [migration/1]

# ps -eo user,pid,tty   (-o output personalizado, se indican los campos
separados por coma, ver ps --help o ps L)
USER       PID TT
root         1 ?
root         2 ?
sergon    8570 tty 1
root      8876 pts/1

# ps -eH (muestra árbol de procesos)
# ps axf (lo mismo en formato BSD)
# ps -ec (el comando que se esta ejecutando, sin la ruta, sólo el nombre real)
#> ps -el (muestra formato largo de varias columnas, muy práctico)
#> ps L   (No muestra procesos, lista todos los códigos de formatos)


Algunas opciones:
-u user      Muestra los procesos lanzados por el usuario indicado.
-t terminal Sólo los procesos ligados a un terminal determinado.
-e           Todos los procesos.
-f           Muestra una información más detallada de cada proceso.
-F           formato más largo.
F            Muestra un árbol con la jerarquía de procesos.
k campo      Ordena la salida por algún campo (p.e. ps uxak rss).



    1.    En varias terminales virtuales, conéctate con usuarios diferentes.


    2.    Abre varias sh y ejecuta algún programa (editores, …).


    3.    Visualiza los procesos de un usuario concreto.


    4.    Comprueba las relaciones padre-hijo entre procesos.


    5.    Busca procesos dado su nombre.


    6.    Observa las diferentes columnas que aparecen con las opciones –l, -f, -F,
          u.


    7.    Realiza algún listado personalizando las columnas.




Gestión de Procesos                           Linux                                              5
Control de Tareas.
En muchos casos, los usuarios solo ejecutan un trabajo cada vez, que es el último comando que ellos
teclearon desde el shell. Sin embargo, usando el control de tareas, usted podrá ejecutar diferentes
tareas al mismo tiempo, cambiando entre cada una de ellas conforme lo necesite.


Primer plano y Segundo plano
Un proceso puede estar en Primer plano o en Segundo plano. Solo puede haber un proceso en primer
plano al mismo tiempo por terminal, el proceso que está en primer plano, es con el que se interactúa,
recibe entradas de teclado, y envía las salidas al monitor. (Salvo, por supuesto, que haya redirigido la
entrada o la salida).

El proceso en segundo plano, no recibe ninguna señal desde el teclado, por lo general, se ejecutan en
silencio sin necesidad de interacción.

Algunos programas necesitan mucho tiempo para terminar, y no muestran nada interesante mientras
tanto. Compilar programas es una de estas tareas, o comprimir un fichero grande. No tiene sentido
sentarse y aburrirse mientras estos procesos terminan. En estos casos es mejor lanzarlos en segundo
plano, para dejar el ordenador en condiciones de ejecutar otro programa.



Los procesos pueden ser suspendidos. Un proceso suspendido es aquel que no se está ejecutando
actualmente, sino que está temporalmente parado. Después de suspender una tarea, puede indicar a la
misma que continúe, en primer plano o en segundo, según se requiera.

Retomar una tarea suspendida no cambia en nada el estado de la misma, la tarea continuará
ejecutándose justo donde se dejó.

Ten en cuenta que suspender un trabajo no es lo mismo que interrumpirlo. Cuando se interrumpe un
proceso, generalmente con la pulsación de ctrl-C (depende del terminal), el proceso muere, y deja de
estar en memoria y utilizar recursos del ordenador. Una vez eliminado, el proceso no puede continuar
ejecutándose, y deberá ser lanzado otra vez para volver a realizar sus tareas. También se puede dar el
caso de que algunos programas capturan la interrupción, de modo que pulsando ctrl-C no se para
inmediatamente. Esto se hace para permitir al programa realizar operaciones necesarias de limpieza
antes de terminar.

De hecho, algunos programas simplemente no se dejan matar por ninguna interrupción.


Envío a segundo plano y eliminación de procesos
Empecemos con un ejemplo sencillo. El comando yes es un comando aparentemente inútil, que envía
una serie interminable de y-es a la salida estándar. (Realmente es muy útil. Si se utiliza una tubería o
“pipe") para unir la salida de yes con otro comando que haga preguntas del tipo si/no, la serie de y
confirmará todas las preguntas.


Gestión de Procesos                          Linux                                                 6
yes
      y
      y
      y
      y
      y
La serie de y-es continuará hasta el infinito, a no ser que usted la elimine, pulsando la tecla de
interrupción, generalmente ctrl-C. También puede deshacerse de esta serie de y-es redirigiendo la
salida estándar de yes hacia /dev/null.
      yes > /dev/null
Ahora va mucho mejor, el terminal no se ensucia, pero el prompt de la shell no retorna. Esto es porque
yes sigue ejecutándose y enviando y-es a /dev/null. Para recuperarlo, pulse la tecla de interrupción.

Supongamos ahora que queremos dejar que el comando yes siga ejecutándose, y volver al mismo
tiempo a la shell para trabajar en otras cosas. Para ello enviaremos a yes a segundo plano, lo que nos
permitirá ejecutarlo, pero sin necesidad de interacción.

Una forma de mandar procesos a segundo plano es añadiendo un carácter “&" al final de la línea de
comando.
      yes > /dev/null &
      [1] 164
Como podrá ver, ha regresado a la shell. ¿Pero qué es eso de “[1] 164"? ¿Se está ejecutando
realmente el comando yes?

“[1]" representa el número de tarea del proceso yes. El shell asigna un número a cada tarea que esté
ejecutando. Como yes es el único comando que se está ejecutando en background, se le asigna el
número de tarea 1. El número “164" es el número de identificación del proceso, o PID, que es el
número que el sistema le asigna al proceso. Ambos números pueden usarse para referirse a la tarea
como veremos después.

El proceso yes está corriendo en segundo plano, y enviando constantemente y-es hacia el dispositivo
/dev/null. Para chequear el estado del proceso, utilice el comando interno del shell jobs:
      jobs
      [1]+ Running yes >/dev/null &
También puede usar el comando ps, como mostramos antes, para comprobar el estado de la tarea.



 8.     Lanza varios procesos con el comando yes.
 9.     Muestra con ps, sólo la información de todos los ‘yes’ , en formato largo



 10.    Visualiza la información de uno en concreto y comprueba cual es el proceso
        padre y el tiempo de CPU consumido.




Gestión de Procesos                           Linux                                                 7
Para eliminar una tarea, utilice el comando kill. Este comando toma como argumento un número de
tarea o un número de ID de un proceso. Esta era la tarea 1, así que usando el comando.
    kill %1
matará la tarea. Cuando se identifica la tarea con el número de tarea, se precede el número con el
carácter de porcentaje ("%").

Ahora que ya hemos matado la tarea, podemos usar el comando jobs de nuevo para comprobarlo:
    jobs
    [1]+ Terminated yes >/dev/null
La tarea está, en efecto, muerta, y si usa el comando jobs de nuevo, no mostrará nada.

 11.    Comprueba que no existe, buscándola con ps.


También podrá matar la tarea usando el número de ID de proceso (PID), el cual se muestra
conjuntamente con el ID de tarea cuando arranca la misma. En nuestro ejemplo el ID de proceso es
164, así que el comando
    kill 164
es equivalente a
    kill %1
No usar el "%" cuando nos referimos a una tarea a través de su ID de proceso.


Parada y relanzamiento de tareas
Para seguir practicando vamos a crear un programa menos agobiante que yes, le vamos a llamar
‘punto.sh’, y se trata de un bucle infinito que muestra un punto en pantalla cada dos segundos.
    while true
    do
       echo -n ' · ';
       sleep 2;
    done


Hay otra manera de poner una tarea en segundo plano. Se puede lanzar como un proceso normal (en
primer plano), pararla, y después relanzarla en segundo plano.

Primero, lance el proceso yes en primer plano.
    yes > /dev/null
De nuevo, dado que yes corre en primer plano, no debe retornar el prompt de la shell.

Ahora, en vez de interrumpir la tarea con ^C , suspenderemos la tarea. El suspender una tarea no la
mata, solamente la detiene temporalmente hasta que se relance. Para hacer esto pulsar la tecla de
suspender, que suele ser ctrl-Z .
    yes > /dev/null
    ctrl-Z
    [1]+ Stopped yes >/dev/null


Gestión de Procesos                          Linux                                                8
12.    Comprobarlo con ps.


Mientras el proceso está suspendido, simplemente no se está ejecutando. No gasta tiempo de CPU,
pero sí memoria. Se puede retomar de nuevo como si nada hubiera pasado. Continuará ejecutándose
donde se dejó.

Para relanzar la tarea en primer plano, use el comando fg (del inglés “foreground").
    fg
    yes >/dev/null
La shell muestra el nombre del comando de nuevo, de forma que tenga conocimiento de que tarea es
la que ha puesto en primer plano. Pare la tarea de nuevo, con ctrl-Z. Esta vez utilice el comando bg
para poner la tarea en segundo plano. Esto hará que el comando siga ejecutándose igual que si lo
hubiese hecho desde el principio con “&" como en la sección anterior.
    bg
    [1]+ yes >/dev/null &
Y tenemos de nuevo el prompt. El comando jobs deberá decirnos que yes se está ejecutando, y
podemos matar la tarea con kill tal y como lo hicimos antes.

¿Cómo podemos parar la tarea de nuevo? Si pulsa ctrl-Z no funcionará, ya que el proceso está en
segundo plano. La respuesta es poner el proceso en primer plano de nuevo, con el comando fg, y
entonces pararlo. Como puede observar podrá usar fg tanto con tareas detenidas, como con las que
estén segundo plano.

Hay una gran diferencia entre una tarea que se encuentra en segundo plano, y una que se encuentra
detenida. Una tarea detenida es una tarea que no se está ejecutando, es decir, que no usa tiempo de
CPU, y que no está haciendo ningún trabajo (la tarea aún ocupa un lugar en memoria, aunque puede
ser volcada a disco). Una tarea en segundo plano, se está ejecutando, y usando memoria, a la vez que
completando alguna acción mientras usted hace otro trabajo.

Sin embargo, una terea en segundo plano puede intentar mostrar texto en su terminal, lo que puede
resultar molesto si está haciendo otra cosa. Por ejemplo:
    yes &              o
    punto.sh &
sin redirigir stdout a /dev/null, una cadena de y-es se mostrarán en su monitor, sin modo alguno de
interrumpirlo (no puede hacer uso de ctrl-C para interrumpir tareas en segundo plano). Para poder
parar esas interminables y-es, tendrá que usar el comando fg para pasar la tarea a primer plano, y
entonces usar ctrl-C para matarla.

Otra observación. Normalmente, los comandos “fg" y “bg" actúan sobre el último proceso parado
(indicado por un “+" junto al número de tarea cuando usa el comando jobs). Si usted tiene varios
procesos corriendo a la vez, podrá mandar a primer o segundo plano una tarea específica indicando el
ID de tarea como argumento de fg o bg, como en
    fg %2
    bg %3


No se pueden usar los ID de proceso con fg o bg.

Gestión de Procesos                          Linux                                              9
Además, si usamos el número de tarea por sí solo, como:
    %2
es equivalente a
    fg %2
Recordar que el uso de control de tareas es una utilidad de la shell. Los comandos fg, bg y jobs son
internos de la shell. Si por algún motivo usted utiliza una shell que no soporta control de tareas, no
espere disponer de estos comandos.

Y además, hay algunos aspectos del control de tareas que difieren entre Bash y Tcsh. De hecho,
algunas shells no proporcionan ningún control de tareas; sin embargo, la mayoría de las shells
disponibles para Linux soportan control de tareas.

 13.     Practica con nuestro script punto.sh (puedes jugar con varios al mismo
         tiempo o mezclándolo con yes), lanzándolo en bg, pasándolo a fg,
         suspendiéndolo, relanzándolo, …




Manipulación de procesos (kill)
Ya hemos visto que mediante Ctrl-C y Ctrl-Z podemos terminar y detener un proceso: esas
combinaciones envían señales a los procesos.

El comando básico para enviar señales a un proceso es kill

kill -l lista el conjunto de señales
$ kill -l

            1) SIGHUP              2) SIGINT             3) SIGQUIT      4) SIGILL

            5) SIGTRAP             6) SIGABRT            7) SIGBUS       8) SIGFPE

            9) SIGKILL             10) SIGUSR1           11) SIGSEGV     12) SIGUSR2

            13) SIGPIPE            14) SIGALRM           15) SIGTERM     17) SIGCHLD

            18) SIGCONT            19) SIGSTOP           20) SIGTSTP     21) SIGTTIN

            22) SIGTTOU            23) SIGURG            24) SIGXCPU     25) SIGXFSZ

            26) SIGVTALRM          27) SIGPROF           28) SIGWINCH    29) SIGIO

            30) SIGPWR             31) SIGSYS            .               .

Para ver su significado, man 7 signal

Sintaxis de kill
kill [señal] PID

Señal puede indicarse mediante el número o el código, por lo que los siguientes comandos son
equivalentes:

Gestión de Procesos                              Linux                                          10
kill -9 …                                  kill –KILL …

Las señales más comunes son:
    −   SIGHUP (1)           Cuelgue del terminal o muerte del proceso controlador.
    −   SIGTERM (15)         Mata el proceso permitiéndole terminar correctamente.
    −   SIGKILL (9)          Mata el proceso sin permitirle terminar.
    −   SIGSTOP (19)         Para el proceso.
    −   SIGCONT (18)         Continúa si estaba parado.
    −   SIGINT (2)           Interrupción de teclado (Ctrl-C).
    −   SIGTSTP (20)         Stop de teclado (Ctrl-Z).
    −   SIGQUIT (3)          Salida de teclado (Ctrl-).

Algunas características de las señales:
    −   La señal que se envía por defecto es TERM (15):
                   Los procesos pueden ignorar esta señal y no terminar.
                   Las señales KILL (9) y STOP (19) no pueden ignorarse.
    −   En bash, cuando enviamos una señal SIGHUP a un shell, este se lo reenvía a todos sus hijos.
    −   Cuando cerramos un terminal en un entorno gráfico, o abandonamos una sesión, se envía un
        SIGHUP a todos sus hijos.
    −   La mayoría de los demonios (daemons) responden a la señal SIGHUP volviendo a leer sus
        ficheros de configuración:
                   En vez de matar y reiniciar un demonio podemos hacer un kill -HUP para reiniciarlo
14. Lanza el script punto.sh en background, envíale diferentes señales,
    comprueba su estado con ps.




15. Igualmente en foreground, y envíale las señales desde otra consola.




Programación de tareas.
Es bastante común que necesite ejecutar un script (o un comando) periódicamente, para algún tipo de
tarea rutinaria.

Para ello se utilizan servicios que emplean el reloj del sistema, y lanzar unos procesos determinados
previamente, a la hora indicada, aunque no esté presente el usuario.

Estos servicios se lanzan en el arranque del sistema y permanecen vivos durante toda la sesión para
atender la programación de tareas.

También disponemos de otro tipo de planificación. El método descrito anteriormente nos permite
planificar en el tiempo, lo que sin duda resulta útil, pero otra manera de aprovechar recursos es

Gestión de Procesos                               Linux                                                 11
programar la ejecución de tareas dependiendo de la carga del sistema.

Linux es multitarea, de manera que el uso de la CPU se reparte entre los procesos que estén en
ejecución. Esto se consigue repartiendo el tiempo de procesamiento entre cada uno de ellos. Si el
número de procesos simultáneos es elevado, el tiempo dedicado a cada uno de ellos disminuye. El
efecto que percibe el usuario es una ralentización en la ejecución de las tareas. En estas situaciones
disponemos de mecanismos, que permiten programar la ejecución de procesos cuando la carga del
sistema sea baja. O modificar la prioridad que tendrán durante su ejecución.


at
El comando at permite la ejecución de una serie de órdenes en un momento especificado.

La sintaxis de at es:
at hora fecha + incremento

órdenes

[ctrl+d]

at nos facilita indicar 'cuando’ se va a ejecutar una tarea de una forma muy flexible.

Acepta horas con formato HH:MM, para ejecutar un trabajo a una determinada hora del día (si esa
hora ya ha pasado, se ejecutará el día siguiente). También se puede especificar la hora usando AM o
PM para indicar por la mañana o por la tarde.

Podemos indicar el día de ejecución, proporcionando la fecha con el formato MMDDYY o MM/DD/YY o
DD.MM.YY. Para indicar la fecha de hoy o mañana podemos usar today o tomorrow respectivamente.
La especificación de una fecha debe seguir a la de la hora del día.

Finalmente se puede indicar el momento de ejecución contando a partir del instante que ejecutemes
at, con el siguiente formato:
at now + Nº unidades_de_tiempo

Donde unidades_de_tiempo puede ser minutes, hours, days, o weeks.

Por ejemplo, para ejecutar un trabajo el 14 de febrero a las siete de la tarde:
at 19:00 Feb 14

at> comandos

at> <EOT> # aquí pulsé <ctrl-d>

warning: commands will be executed using /bin/sh

job 2 at 2011-02-14 19:00

Si quiero lanzar un programa dentro de tres horas:
at now + 3 hours

Gestión de Procesos                             Linux                                           12
at> comandos

at> <EOT> # aquí pulsé <ctrl-d>

warning: commands will be executed using /bin/sh

job 3 at 2011-02-14 22:05

Algunas opciones:

-l      Muestra un listado con todos los trabajos lanzados en diferido.

-d Nº Elimina un trabajo de la «cola» usaremos la opción -d seguida del número identificativo del
        trabajo.



16. Programar que dentro de 2 minutos se añada al fichero ‘quien’ los usuarios
    que estén conectados en ese momento.




17. Indicar que nuestro script punto.sh se ejecute en background dentro de 3
    minutos, redirigiendo su salida al fichero ‘punto’.




18. Programar que se apage el sistema en 10 minutos.




19. Consultar las tareas programadas.


20. Eliminar el apagado del sistema de la lista de tareas programadas.




batch
batch permite ejecutar comandos en modo diferido, cuando lo permite el nivel de carga del sistema,
cuando la carga media cae por debajo de 0.8, o del valor especificado en la invocación de atrun.

La sintaxis de batch es:
batch

órdenes

[ctrl+d]

Para at y batch:

Los comandos a los que se aplicarán son leídos de la entrada estándar o de un fichero indicado si
usamos la opción -f.

Gestión de Procesos                           Linux                                                13
El directorio de trabajo, el entorno son tomados del momento de invocación, y no el de ejecución.

Tanto la salida estándar y los posibles errores deben de ser redirigijos.

El usuario root, siempre puede utilizar estos comandos. Para otros usuarios, los permisos para
utilizarlos se pueden limitar mediante el uso de los ficheros:
/etc/at.allow y /etc/at.deny.

Si el fichero /etc/at.allow existe, sólo los usuarios cuyos nombres están mencionados aquí tienen
permiso para utilizar at y batch.

Si /etc/at.allow no existe, se chequea /etc/at.deny y entonces todos los usuarios cuyos nombres no
estén mencionados allí tienen permiso para utilizar at y batch.

Si ninguno de los ficheros existe, sólo podrá utilizar at el administrador del sistema.

Un /etc/at.deny vacío significa que todo el mundo puede utilizar estos comandos, esta es
habitualmente la configuración por defecto.



21. Comprobar la existencia de los ficheros /etc/at.allow y /etc/deny, a quién
    pertenecen y qué permisos tienen.




22. Lanza con batch un listado largo de todos los ficheros del sistema
    (recursivo desde la /), almacénalo en un fichero llamado ‘todo’, en tu
    directorio de trabajo.




23. Comprueba la existencia de la tarea.




nice
El comando nice modifica el nivel de prioridad de ejecución procesos, asignando más o menos tiempo
de CPU a la tarea dada.

Linux realiza una planificación por prioridades dinámicas.

Al lanzar un proceso se le asigna un valor de prioridad estática, número nice, por defecto hereda la
prioridad estática de su proceso padre.

La prioridad dinámica del proceso se calcula en función del número nice, junto con el consumo de
CPU realizado.

La prioridad puede ser ajustada por nice en el rango entre -20 (la prioridad más alta) a 19 (la más
baja). Únicamente el root puede asignar valores negativos.

La sitaxis de nice es:

Gestión de Procesos                            Linux                                                14
nice -n orden

Donde n es el número que indica la prioridad. Si no indicamos n, se asigna por defecto la prioridad 10.

Sin opciones ni argumentos, muestra la prioridad actual.

Asignar una prioridad de 5.
nice -5 nano

Asignar una prioridad de -10 (sólo puede hacerlo el root).
nice −−10 nano

También podemos cambiar la prioridad a un proceso que se está ejecutando, sabiendo su PID.

Asignar prioridad 14 al proceso 4890
renice 14 4890



24. consulta el nivel de prioridad del que dispones actualmente.


25. Entra en el vi usando un nivel de prioridad 17.


26. Desde el vi ejecuta una nueva shell (Esc y teclea :!sh).


27. En el nuevo shell que entramos, consulta los procesos con la opción –l, e
    identifica la columna en la que se muestran los niveles de prioridad.


28. Cambia la prioridad al vi a 15, y comprueba que se ha cambiado.




29. Intenta darle al vi una prioridad de -10.




nohup
El comando nohup inhibe la terminación de un proceso, aunque el usuario salga del sistema.

Esto tiene sentido para procesos largos, que no requieran asistencia del usuario que los lanzó.

Normalmente se ejecutarán en segundo plano, y nohup impedirá que finalicen al salir el usuario del
sistema.

La sitaxis de nohup es:
nohup orden &



Gestión de Procesos                           Linux                                               15
30. En una consola virtual conéctate como usuario (usuario), y desde allí lanza
    por ejemplo nuestro punto.sh redirigiendo la salida y en background.


31. Desconéctate del usuario y comprueba como root los procesos que son de su
    propiedad.




cron y crontab
Posibilita la ejecución periódica de órdenes a intervalos prefijados.

cron es lanzado durante el arranque del sistema, y permanece activo para dar servicio a las entradas
que los usuarios le indiquen mediante la ejecución de crontab.

El comando crontab necesita leer la información de las especificaciones de un archivo externo.

La sitaxis de crontab es:
crontab archivo_especificaciones

El archivo de especificaciones constará de una línea para cada tarea, con seis campos separados por
espacios.

Los campos son, por este orden:
Minutos       Horas         Día_(del mes)         Mes     Día_(de la semana)          Orden

Minutos         Rango de 0 a 59.

Horas           Dede 0 a 23.

Día del mes     Desde 1 a 31.

Mes             Desde 1 a 12.

Día semana      Desde 0 a 6, siendo el domingo el número cero.

Orden           La orden a ejecutar.

En los cinco primeros campos:

    −   Un entero que identifica a un único minuto, hora, día, etc.

    −   Tambien están admitidos rangos, como por ejemplo, para indicar la repetición de una orden de
        lunes a viernes, en el campo del día de la semana ponemos: 1-5.

    −   Una lista de enteros separados por comas, indicando que es valido para cualquiera de los
        enteros indicados.

    −   Un asterisco (*) en cualquiera de los campos anteriores significa cualquier valor del rango, es
        decir el comando se ejecutará independientemente del valor de ese campo.




Gestión de Procesos                            Linux                                             16
Veamos algunos ejemplos de como pueden ser estos archivos:

Ejecutar la orden todos los días a las nueve y media.
30 9 * * * orden

Ejecutar la orden los viernes a las doce en punto.
0 12 * * 5 orden

Ejecutar la orden todos los minutos desde las 8 a las 9 horas cada 12 de septiembre.
* 8 12 9 * orden

Ejecutar la orden el primer lunes de cada mes, a las siete de la tarde.
0 19 1-7 * 1 orden


De manera que si creamos un archivo de esta manera, sencillamente con ejecutar crontab seguido del
nombre del archivo, cron se encargará de la ejecución de las órdenes con la frecuencia indicada.

Cada usuario solo puede tener un fichero de especificación de crontab (se le conoce como archivo
crontab). Cada ejecución de crontab archivo_de_especificaciones establece ese archivo como el válido
para que cron lo interprete y ejecute.

En realidad podrá tener varios archivos definidos, pero sólo será utilizado el último que se ejecutó con
crontab.

De nuevo se puede limitar el uso de crontab mediante la inclusión de usuarios en los ficheros
/etc/cron.allow y /etc/cron.deny.

     −   Si el fichero cron.allow existe, sólo los usuarios cuyos nombres están mencionados aquí tienen
         permiso para utilizarlo.

     −   Si cron.allow no existe, se chequea cron.deny y entonces todos los usuarios cuyos nombres
         estén mencionados se les denegará el uso.

     −   Si ninguno de los ficheros existe, sólo podrá utilizar crontab el administrador del sistema.

     −   Si cron.allow no existe y cron.deny vacío significa que todo el mundo puede utilizar crontab.

Por último decir que una vez editado el fichero de especificaciónes y ejecutado crontab con él, no es
conveniente modificarlo con un editor de texto.

Algunas opciones:

-e       Es la forma de introducir algún cambio en el fichero de especificaciones.

-r       Para eliminar el fichero utilice la opción.

-l       Para mostrar la lista del contenido del fichero.



Crear el fichero de especificaciones para crontab, para que realice las copias
de seguridad, con la siguiente planificación:

Gestión de Procesos                               Linux                                                 17
32. Completa el día primero de cada mes a la hora del recreo, en el fichero
    /dump/logica.0.


33. Diferencial, todos los viernes a la misma hora, en el fichero /dum/logica.1.


34. De lunes a viernes copias incrementales (niveles 2, 3, 4, 5), en sus
    respectivos ficheros, también a la hora del recreo.




top
Proporciona una visión continuada de la actividad del procesador en tiempo real, muestra las tareas
que más uso hacen de la CPU, y tiene una interfaz interactiva para manipular procesos.

Las cinco primeras líneas muestran información general del sistema:
    −   Las estadísticas de la orden uptime.
    −   Estadísticas sobre los procesos del sistema (número de procesos, procesos en ejecución,
        durmiendo, parados o zombies).
    −   El estado actual de la CPU (porcentaje en uso por usuarios, por el sistema, por procesos con
        valor nice positivo, por procesos esperando E/S, desocupada, tratando interrupciones hardware,
        interrupciones software, en espera involuntaria por virtualización).
    −   La memoria (memoria total disponible, usada, libre, usada como buffer de E/S y en caché.
    −   El espacio de swap (swap total disponible, usada, libre y en caché).



Los datos de la parte inferior son similares a los del ps, excepto: SHR (La cantidad de memoria
compartida usada por la tarea).

Los procesos mostrados los ordena decrecientemente por el uso de la CPU

La lista se actualiza de forma automática, normalmente cada 5 segundos

La orden top permite realizar una serie de operaciones interactivamente, mediante la pulsación de
teclas, mientras top está en ejecución, como por ejemplo:
    −   Cambiar la prioridad de alguno utilizando la opción “r”.
    −   Matar o enviar una señal con la opción “k”.
    −   Ordenarlos según diferentes criterios (por PID con “N”, uso de CPU con “P”, tiempo con “A”,
        etc.).
    −   Con “n” se cambia el número de procesos que se muestran.
    −   Mostrar los procesos de un solo usuario “u”.


Gestión de Procesos                            Linux                                               18
−   Con “s” cambia el intervalo de refresco de la indormación.
    −   Mostrar una ventana de ayuda “h”.
    −   Para salir se utiliza la letra “q”.



35. Abrir dos consolas gráficas, en una de ellas ejecutar top y desde la otra
    lanzar procesos en background, para ver el efecto en la actividad que
    muestra top.
36. Indica que visualice 13 procesos.


37. Mostrar sólo los procesos del usuario.


38. Cambia la prioridad a algún proceso.


39. Elimina y suspende alguno.




Línea
Línea de comandos
Agrupamiento de comandos:
(Siendo A y B dos comandos)



A | B

Toda la línea de comandos se ejecuta como si fuese un solo proceso, que genera procesos hijos para
cada una de las órdenes.

La ejecución es concurrente. Y el estado de salida de una tubería es el del último comando.
# Cuenta los subdirectorios que hay en el disco.

$ find / -type d 2> /dev/null | wc –l &

$ ps –f                  # Comprueba la ejecución concurrente.

# Muestra la lista ordenada de los usuarios conectados

# que en su nombre contengan la cadena.

who | grep cadena | sort


A; B

Igual que si estubieran en líneas separadas. La ejecución es secuencial.


Gestión de Procesos                           Linux                                           19
A &

Ejecución en Background. Se realiza de forma asíncrona.


(A; B; ...)

Se crea un SubShell, que los ejecuta de forma secuencial.



{ bA; B; ...;b}

No se crea un SubShell. Se ejecutan como un solo comando con una sola salida.
# Comprueba que no se lanza un nuevo shell.

{ clear; find / > total 2> /dev/null; ps –l; }



# Muestra el contenido de los tres subdirectorios

# como si se tratase de uno solo, y ordenado en sentido inverso:

$     {   ls -l direc1; ls -l direc2; ls -l direc3;                        }    |   sort -r

# Añade fecha, hora y el nº de usuarios conectados al fichero usu.

{     date; who | wc -l;           }   >>     usu



A && B

Ejecución condicional de la orden B. La orden B sólo se ejecutará en el caso de que el estado de salida
de A sea “verdadero” (0).
# Mostrará el mensaje “Encontrado” sólo si existe el directorio:

$ ls      -d directorio > /dev/null && echo Encontrado.



A || B
Ejecución condicional de la orden B. La orden B sólo se ejcutará en el caso de que el estado de salida
de A sea “falso” (!=0).
# Como un usuario normal intentar crear un subdirectorio

# donde no tengáis permiso de escritura (/home).

$ mkdir hola || echo $USERNAME en `pwd` no puedes crear

Gestión de Procesos                          Linux                                               20
Metacaracteres:
Hay que tener en cuenta que muchos caracteres son interpretados de forma especial por el Shell, los
más importantes son:

        < > << >> Redireccionamientos.

        |        Tubería.

        *?[]     Generación de nombres de fichero.

        &        Background.

        (){}     Agrupamiento de comandos.

        ;        Separador de órdenes.

        $        Antepuesto a una variable representa su valor.

                Quita el significado especial al siguiente carácter.

        #        Lo siguiente se entiende como comentario.

        '        Los apóstrofos normales, hacen que pierdan su significado especial todos los
                 caracteres contenidos entre ellos.

        "        Las comillas no desconectan el significado especial de $ ` (apóstrofo inverso)  ni
                 |.

        `        (Apóstrofo inverso) Una orden encerrada entre apóstrofos inversos se sustituye por su
                 salida estándar.




Gestión de Procesos                            Linux                                            21
Máquinas Virtuales

Introducción
En numerosas ocasiones necesitamos probar un programa o realizar pruebas en el Sistema
Operativo que tenemos instalado. Si las pruebas las realizamos en un equipo que estamos utilizando
de manera habitual, corremos el peligro de que un fallo, un mal funcionamiento del programa o una
simple actualización, provoquen una caída del sistema, una pérdida de su estabilidad y en el peor de
los casos tengamos que hacer una reinstalación completa.

Una posible solución sería utilizar otro equipo, donde primero duplicásemos nuestra máquina y luego
instalásemos los programas o actualizaciones que deseamos comprobar. Si todo va bien, lo
aplicamos al equipo en producción y si hay problemas, un simple formateo del equipo de pruebas
nos resuelve el problema, sin que los usuarios se vean afectados. Evidentemente tener uno o más
equipos para realizar pruebas conlleva un coste económico que la mayoría de las empresas no están
dispuestas a asumir.

Una solución más sencilla y adecuada es instalar una herramienta que simule el funcionamiento del
Sistema Operativo que se quiere probar y sobre él se instalen las aplicaciones en evaluación. Esta
herramienta debe independizar el Sistema Operativo real (anfitrión) del Sistema Operativo
Virtualizado (invitado).

En esta situación podemos realizar una abstracción e imaginar que tenemos un ordenador real
(nuestra máquina física, con su correspondiente Sistema Operativo) y sobre él se emula el
funcionamiento de otro u otros ordenadores virtuales, y además se nos permite cambiar entre uno y
otro sin mayor problema.

Se dice entonces que tenemos una máquina real, la máquina física y una o más máquinas virtuales,
las que se ejecutan sobre el emulador, cada una de ellas con su hardware emulado (virtual) y con
su Sistema Operativo.

El programa de que usamos para virtualizar (VMM <-> Virtual Machine Monitor) maneja, gestiona y
arbitra los cuatro recursos principales de una computadora (CPU, Memoria, Red, Almacenamiento) y
así podrá repartir dinámicamente dichos recursos entre todas las máquinas virtuales definidas en el
ordenador anfitrión. De modo que nos permite tener varias máquinas virtuales ejecutándose sobre
el mismo ordenador físico.

Llevando un paso más allá este modelo, podrían coexistir, en un mismo instante, nuestro ordenador
real, con su Sistema Operativo real y todos los ordenadores virtuales que pongamos en
funcionamiento, pudiendo incluso comunicarse entre ellos, a través de una red y por lo tanto
compartir recursos, si es que nos parece oportuno.

Llegados a este punto, podemos definir una máquina virtual como un programa informático, que se
ejecuta sobre un ordenador y un Sistema Operativo, y que simula el funcionamiento de una



Máquinas Virtuales                           Linux                                                1
máquina sobre la que se pueden instalar diferentes sistemas operativos, aplicaciones, compartir
recursos, conectarnos a Internet, utilizar diferentes dispositivos (impresoras, usb, etc.).


Ventajas
        −   Ahorro de costes, al aprovechar al máximo el hardware disponible, ya que en una misma
            máquina física pueden coexistir múltiples servidores (la mayor parte de los servidores
            pasan mucho tiempo parados, y por otro lado su coste es muy elevado). Con un solo
            ordenador y virtualizando los servidores se aprovecha el hardware de la mejor manera
            posible.

        −   Sencillas copias de seguridad. Las máquinas virtuales se pueden salvar muy fácilmente,
            porque a fin de cuentas, no son más que uno o varios ficheros; en caso de desastre se
            puede recuperar la información con rapidez.

        −   Una de las mayores ventanas es su “aislamiento”. Lo que le ocurra a nuestra máquina
            virtual no le afectara al sistema principal ya que no se verá involucrada. Esto implica:

            o   Seguridad en las pruebas de aplicaciones. Permite probar una aplicación y si va mal
                recuperar el estado inicial, la máquina anfitrión no se afecta en nada.

            o   Seguridad en la consolidación de sistemas. Permite instalar y configurar un sistema
                informático sin que los fallos u errores de configuración supongan un gran retraso ya
                que se puede "retroceder" a puntos seguros con facilidad y rápidamente, en caliente
                (instantáneas).

        −   Centralización geográfica de servicios. En un mismo anfitrión podemos tener
            ejecutándose simultáneamente tantos servidores como requiera el entorno, por ejemplo,
            un Windows Server para dar soporte a una aplicación y un Linux Server para dar soporte
            de web y correo. Esto facilita la administración al estar centralizada.

        −   Portabilidad y disponibilidad. Con los dispositivos de almacenamiento usb de gran
            tamaño, podemos tener equipos completos virtualizados privados, que nos permiten
            utilizarlos en entornos públicos. Hay que tener en cuenta que, normalmente, los
            volúmenes de almacenamiento virtuales ocupan menos espacio ya que sólo se
            almacenan físicamente en HD los bloques con datos.

        −   Rápida implantación. En Internet existen máquinas virtuales ya configuradas, lo que nos
            permite ahorrar tiempo en instalaciones y configuraciones.




Desventajas
        −   Rendimiento. Es obvio que al compartir cada huésped y el anfitrión los principales
            recursos (RAM y procesador) el rendimiento individual de cada máquina es menor que si
            estuviesen en máquinas individuales.



Máquinas Virtuales                             Linux                                                   2
Por ello, la virtualización requiere de máquinas anfitrionas más potentes, con más RAM y varios
núcleos y/o procesadores para una mejor respuesta.


   1. Buscar en internet información sobre diferentes programas de
      virtualización, recoger sus principales características, sobre qué
      plataformas funcionan, qué sistemas operativos virtualizan, libres o de
      pago, facilidad de uso,…




Instalación
Oracle VM VirtualBox es un programa de virtualización con el que es posible instalar sistemas
operativos adicionales, conocidos como sistemas invitados, dentro de otro sistema operativo
anfitrión, cada uno con su propio ambiente virtual. En nuestro caso, el sistema operativo anfitrión
será Ubuntu y los invitados los sistemas que vayamos instalando o añadiendo a VirtualBox.

Para instalarlo en Ubuntu tenemos dos opciones: usando el paquete .deb o desde los repositorios.
Lo más recomendable es la segunda opción ya que así se actualizará automáticamente con las
nuevas versiones que vayan apareciendo.


Desde los repositorios:
Para instalar VirtualBox desde los repositorios, ejecutamos los siguientes comandos en un terminal:

   1) Añadimos el repositorio de VirtualBox al fichero /etc/apt/sources.list:
deb http://download.virtualbox.org/virtualbox/debian lucid contrib


   2) Descargamos la clave pública para apt-secure:
wget http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc


   3) Añadimos la clave del repositorio:
apt-key add oracle_vbox.asc


   4) Actualizamos la información de los repositorios:
apt-get update


   5) Instalamos VirtualBox:
apt-get install virtualbox-4.0


   6) Agregamos a nuestro usuario al grupo vboxusers, que se crea automáticamente al instalar
       VirtualBox:


Máquinas Virtuales                           Linux                                                    3
sudo gpasswd -a nomUsuario vboxusers



Usando el paquete .deb:
Descargamos el paquete .deb correspondiente, a nuestra versión de Ubuntu y nuestra arquitectura
(32 ó 64 bits) de la página de VirtualBox.

http://download.virtualbox.org/virtualbox/debian/pool/contrib/v/virtualbox-4.0

Una vez descargado, hacemos doble clic sobre el paquete para instalarlo.


   2. Realiza la instalación de VirtualBox en Ubuntu, a ser posible usando
      los repositorios.




Creación de máquinas
Una vez instalado podemos ejecutar VirtualBox desde el menú Aplicaciones > Herramientas del
sistema > Oracle VM VirtualBox, es conveniente crearle un lanzador en el escritorio o en alguna
barra.

La primera vez que lo ejecutemos nos leemos y aceptamos la licencia.

En el menú Ayuda > Acerca de… comprobamos la versión de VirtualBox que tenemos instalada.

Aunque      en       inglés,   puedes        consultar   el   manual       de    VirtualBox   en
http://www.virtualbox.org/manual/UserManual.html



1º.- Indicamos que vamos a definir una nueva máquina virtual, bien con el botón como indica la
imagen o en el menú "máquina ->Nueva".




Máquinas Virtuales                             Linux                                           4
En la bienvenida del asistente pulsamos siguiente.



2º.- Solicita el nombre que vamos a poner a la máquina y el sistema operativo que tenemos
pensado instalarle. Pero esto es a título identificativo, no implica ninguna configuración en la
máquina.




Máquinas Virtuales                           Linux                                            5
3º.- En este paso debemos decidir que memoria RAM física asignamos a la máquina virtual,
sabiendo que el sistema anfitrión no dispondrá de ella. Además debemos de pensar si vamos a
correr varias máquinas virtuales al mismo tiempo, ya que cada una requerirá su parte de RAM.




4º.- Elección del tipo de disco duro virtual (HDV).

Si optamos por usar uno existente y está previamente incluido en el repositorio de HDV, podemos
seleccionarlos mediante la lista desplegable; si no, deberemos pinchar en el icono de la carpeta para
acceder al Administrador de medios virtuales y añadirlo.




Máquinas Virtuales                             Linux                                               6
5º.-Si optamos por crear el HDV, se abrirá el asistente de creación de discos virtuales. Tras la
pantalla de bienvenida, solicita que indiquemos el tipo de almacenamiento.




6º.-Debemos suministrar un nombre al disco (al fin y al cabo el HDV se almacena en un fichero),
por defecto toma el nombre que dimos a la máquina, podemos también seleccionar el lugar donde
se almacenará el fichero.

En la parte inferior definimos el tamaño que va a tener, debemos consultar cuales son los requisitos
mínimos aceptables para el SO que tenemos previsto instalar, así como del uso que le vamos a dar.




Máquinas Virtuales                            Linux                                                 7
7º.-Después de mostrarnos una serie de resúmenes, crea la máquina virtual con una configuración
básica, que podemos afinar posteriormente.




    3. Crea una máquina virtual para Windows XP, valorando los recursos que le
       asignas (consultar previamente los requisitos mínimos).

    4. Ver todas las posibilidades que nos ofrece la opción de Máquina ->
       Configuración.




Menú Archivo de VirtualBox
Preferencias...
 Establecer la ubicación de los ficheros que almacenan las máquinas virtuales.

 Establecer la tecla host (por defecto la tecla Ctrl de la derecha del teclado).

 Configurar las actualizaciones automáticas.

 El idioma.

 Gestionar las tarjetas de red (inicialmente, sólo tendremos la tarjeta de red virtual que ha creado
vboxnet0.



Máquinas Virtuales                              Linux                                              8
 Administrador de medios virtuales...
Desde esta opción podemos gestionar los distintos medios de almacenamiento virtuales.

En la pestaña "Discos duros" nos muestra la información sobre los distintos discos virtuales (HDV),
generados por VirtualBox (extensión .vdi) o importados desde otras plataformas (normalmente,
extensión .vdmk).

Los HDV se crean normalmente en el momento de la creación de la máquina pero desde aquí
podemos crear (botón Nuevo) nuevos discos o agregar HDVs guardados como copia de seguridad.

Los HDV pueden ser de almacenamiento:

   −   Dinámico, crecerá según uso hasta el máximo indicado.

   −   Tamaño fijo: ocupan inicialmente el tamaño asignado, tienen mejor rendimiento.

Los HDV pueden ser de distintos tipos:

 − Normal (opción por defecto): No hay restricciones sobre la forma en que el sistema huésped lee
    y escribe en él. Cuando se hace una instantánea de la máquina virtual se guarda toda la
    información del HDV y cuando se restaura la instantánea su estado será totalmente
    "reseteado". Sólo se pueden acceder desde una máquina simultáneamente.

 − WriteThrough: Es una variante del tipo anterior. Son accesibles por una sola máquina. No les
    afecta en absoluto las instantáneas. Su estado no se salva cuando se saca una instantánea y
    por lo tanto no se machaca su información al restaurar la instantánea (aconsejable para datos).

 − Compartibles (shareables): se comportan como WriteThrough, pero son de tamaño fijo y
    accesible por múltiples máquinas virtuales a la vez.

 − Inmutables (congelados): cada vez que apagas la máquina se restaura como al principio. Son
    accesibles por varias máquinas. Restaura al estado original o a la última instantánea.

Lo usual es que el S.O. esté en un HDV normal o inmutable, que un disco de datos sea
WriteThrough y otro Shareable.


Tipo                       Múltiples accesos          Restaurable por          Tamaño dinámico
                              simultáneos                  instantánea

Normal                              No                         Sí                       Sí

WriteThrough                        No                         No                       Sí

Shareable                           Sí                         No                      No

Inmutable                           Sí                         Sí                       Sí



Se puede cambiar de un tipo a otro a través de línea de comandos:



Máquinas Virtuales                           Linux                                                9
vboxmanage modifyhd
http://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi
    5. ¿Dónde ha colocado VirtualBox el comando vboxmanage dentro de Ubuntu?

    6. Consulta el formato en la página de ayuda de VirtualBox.




CDs, DVDs (y disquetes)

VirtualBox emula la unidad.

Podemos indicar respecto a su contenido:

    o   Está vacía.

    o   Que tome el contenido de la unidad física de la máquina anfitriona.

    o   Que tome el contenido de una imagen como si fuese un soporte real.

En este último caso, el primer paso es añadir al repositorio "Imágenes de CD/DVD" dicha imagen.
Pulsando sobre Agregar nos aparecerá la ventana para seleccionar la ubicación e imagen
correspondiente. Admite imágenes .ISO, .IMG, etc., pero no .NRG (por defecto .ISO, al marcar que
muestre "todos las archivos (*)", no nos mostrará las nuevas imágenes hasta que no refresquemos
la carpeta.


Exportar e importar
 Exportar servicio virtualizado: exporta el HDV y los datos de la máquina. Genera tres ficheros:
.ovf, que es un estándar abierto para empaquetar y distribuir servicios virtualizados entre distintas
plataformas; .vmdk, que es el estándar de compactación dinámica de HDVs de VMWare y .mf que
es el archivo de manifiesto, también tenemos la posibilidad de que todo lo empaquete en un solo
fichero .ova.

 Importar servicio virtualizado: permite importar a VirtualBox máquinas previamente exportadas.

(Lo desarrollamos y practicamos más adelante).




Máquinas Virtuales                           Linux                                                 10
Instalación del SO invitado
1º.- Como medio de instalación se puede usar el CD o una imagen del mismo.

Para usar una iso, nos vamos a "Configuración -> Almacenamiento", seleccionamos el CD, que en
principio está vacío y en la parte derecha pulsamos sobre el icono del CD, y nos aparecen las dos
posibilidades.




2º.- Ahora seleccionamos la imagen iso, será como si un CD de dicha imagen estuviese introducido
en la unidad.




3º.- De vuelta en la pantalla principal de VB, comprobamos que se ha modificado el
almacenamiento. Ya podemos iniciar la máquina, y como en el orden de arranque tiene primero el
CD/DVD-ROM, debe comenzar la instalación del SO.




Máquinas Virtuales                          Linux                                              11
Máquinas Virtuales   Linux   12
Configuración de una máquina
Abrimos la ventana de configuración (Menú Máquina -> Configuración…)


General
En la ficha "Básico" podemos cambiar la denominación de la máquina. Y en la ficha “Avanzado":
dónde vamos a ubicar las instantáneas, si deseamos que el traspaso de portapapeles funcione
bidireccionalmente, si deseamos que los cambios en los medios de almacenamiento se guarden para
la próxima ejecución o no, y como queremos ver la máquina en pantalla.


Sistema
En la pestaña "Placa base" podemos modificar la cantidad de memoria que asignamos al crear la
máquina.

En "Orden de arranque," al igual que si fuese la BIOS de una máquina física, indicaremos el orden
en que deberá buscar el sistema operativo de arranque. Como no vamos a tener imágenes de
disquete, lo desmarcamos y bajamos.

En "Características extendidas" nos encontramos las siguientes opciones:

   o   Habilitar IO APIC: (Advanced Programmable Interrupt Controller) es un controlador de
       interrupciones diseñado para el multiproceso, concretamente para poder incorporar
       múltiples microprocesadores a la placa madre. Habrá que indicar esta opción si asignamos
       más de una CPU a la máquina.

   o   Habilitar EFI: (Extensible Firmware Interface) es una especificación desarrollada por Intel
       para reemplazar la interfaz del estándar IBM PC BIOS, interactuando como puente entre el
       sistema operativo y el firmware base. Es necesaria para instalar máquinas MacOS.

   o   Reloj hardware en tiempo UTC: normalmente el guest usará el reloj del host. Pero podemos
       indicarle que use el tiempo universal coordinado dado por los relojes atómicos, este es el
       sistema de tiempo utilizado por muchos estándares de Internet y la World Wide Web, de
       forma que el guest tendrá su propio tiempo, independiente del anfitrión.

   o   Habilitar dispositivo apuntador absoluto: permitirá incorporar dispositivos de entrada como
       las tabletas gráficas. En caso contrario, sólo emulará un ratón PS/2.

En la pestaña Procesador, si tenemos un host con más de una CPU, podemos indicarle cuantas CPUs
se destinarán a la máquina virtual. En caso de marcar más de una CPU, deberemos habilitar
también la opción "Habilitar IO APIC".


Pantalla
Aquí indicarnos la cantidad de memoria dedicada a la gestión de vídeo, el número de monitores y si
deseamos usar aceleración gráfica (siempre que la soporte la máquina host).


Máquinas Virtuales                           Linux                                             13
También podemos especificar los parámetros para poder hacer acceso remoto a la máquina cuando
esté en funcionamiento.


Audio
Aquí se indica el controlador de audio del host y que controlador emulará el guest, pudiendo
escoger entre AC97 o Soundblaster.

Ya que no tenemos altavoces, lo desactivamos.


Puertos Serie
Nos permite activar el acceso a los puertos serie de la máquina host, asignando los recursos de IRQ
y memoria necesarios. Sólo debemos activarlos si vamos a usar algún dispositivo con conexión por
puerto serie.


USB
En esta pestaña gestionaremos los recursos USB para permitir que la máquina virtual acceda a los
dispositivos USB seleccionados mediante el "Filtro de Dispositivos".

Habilitaremos el controlador USB y USB 2.0.

Pinchando en el icono de la derecha con el + verde, nos mostrará la lista de dispositivos USB que en
ese momento están conectados al anfitrión, permitiéndonos seleccionar aquellos que queremos que
sean accesibles desde el guest.

Si queremos que reconozca cualquier penDrive es mejor agregar un filtro vacío, como se muestra en
la image.




La próxima vez que arranquemos esa máquina virtual, tendremos acceso a la memoria USB
seleccionada.

En el menú Dispositivos -> Dispositivos USB, podemos activarlos o desactivarlos, también en el
icono que representa un conector USB podemos gestionarlos.


Máquinas Virtuales                            Linux                                              14
NOTA: La máquina virtual se hace dueña absoluta del USB por lo que mientras se esté ejecutando
no podremos acceder desde el host a dicho dispositivo.


Red
Desde esta opción podemos configurar hasta cuatro adaptadores de red. Las redes en las que se
encuentran las máquinas virtuales son privadas e independientes de las del anfitrión. Por defecto,
viene en modo NAT.

 Conectado a: configura el modo en que el adaptador de la máquina huésped se conecta a una
red.

 Nombre: selecciona el adaptador de red si se ha seleccionado el tipo Adaptador puente o
Adaptador Solo‐anfitrión.

   Tipo de adaptador: selecciona el tipo de adaptador virtual que usará la máquina guest.

 Dirección Mac: indica la MAC virtual del adaptador anterior.

Modos de funcionamiento de red que se pueden establecer

         No conectado: en este modo, la tarjeta virtual existe en el huésped, pero está configurada
         como si no tuviera ningún cable conectado.

         NAT: (Network Address Translation) es el modo por defecto de la tarjeta de red virtual. Este
         modo permite al huésped navegar por Internet, descargar ficheros y leer el correo
         electrónico sin necesidad de configurar el sistema operativo huésped. En este modo, la
         máquina virtual puede conectarse a otras redes mediante un router virtual proporcionado
         por VirtualBox. Dicho router sirve direcciones DHCP del tipo 10.0.x.0/24 donde x=2 para la
         primera tarjeta de red, x=3 para la segunda tarjeta de red, etc. En el caso de una única
         tarjeta de red, el router tiene como puerta de enlace la dirección 10.0.2.2, como servidor
         DNS la dirección 10.0.2.3 y la primera dirección DHCP asignada es la 10.0.2.15. Como
         desventaja, en este modo, los comandos que envían paquetes ICMP como ping o traceroute
         pueden no funcionar correctamente y, en principio, la máquina virtual no es accesible desde
         Internet. En resumen:

   Se tiene conexión a Internet.

   Puedes conectarte a otros equipos de tu red Interna.

   Los equipos de la red no tienen acceso a ti, incluido el equipo host de la VM.

   Ping no trabaja sobre NAT.

   Ciertas limitaciones cuando se está usando compartición de archivos sobre Windows.

   La máquina guest está protegida de accesos indeseados.

   No se puede correr un servidor, a menos que se haga un port forwarding (re‐envío a puerto)




Máquinas Virtuales                             Linux                                              15
Adaptador puente (Bridge): en este modo, se crea una tarjeta de red virtual en el anfitrión
        que intercepta el tráfico de red y puede inyectar paquetes en la red, de manera que el
        huésped se configura como si estuviera conectado por un cable a la tarjeta de red virtual del
        anfitrión.

   Nuestra VM es un equipo más de la red local.

   Perfecto para correr servidores en máquinas guest.

   Se tiene conexión "directa" con todos los equipos.

   Todos los equipos tienen conexión directa contigo.



        Red Interna: en este modo, se crea una red virtual visible entre las máquinas virtuales, pero
        invisible al anfitrión o a máquinas externas a la red.

   Cuando se quiere que tengan conexión entre sí las máquinas virtuales de un mismo anfitrión.

   Ni el equipo host, ni la red interna de la empresa ni el mundo exterior tienen conexión con la VM.

   Ya que el tráfico no pasa por la máquina host como ocurre en el modo bridge, en el cual se
podría poner un sniffer y ver todo el tráfico, es más seguro.

   Es más eficiente que el modo bridge, ya que Virtualbox puede transmitir los datos sin tener que
pasar estos por la pila de red del sistema host.

        Adaptador Sólo‐Anfitrión: en este modo se crea una tarjeta de red virtual en el anfitrión que
        puede conectarse con las máquinas virtuales sin necesitar que el anfitrión tenga una tarjeta
        de red.

   No se necesita físicamente una interfaz de red.

   Usa una interfaz de red virtual similar a una interfaz loopback, la cual es creada en el host.

   Las máquinas virtuales pueden hablar entre ellas y con el host.

   No pueden hablar con el resto del mundo, al igual que en Red Interna, ya que no existe una
interfaz de red física presente.

   Se crea en el equipo Host una nueva interfaz de red llamada por defecto “vboxnet0” con una ip
asignada (por defecto 192.168.56.1), que será la IP con la que desde los guest podamos acceder al
equipo host.

   Las IPs en los equipos guest pueden ser asignadas:

        – Por el DHCP de Virtualbox.

        – Estáticamente siempre que estén dentro de la subred.




Máquinas Virtuales                              Linux                                                16
Instalar Guest Additions
VirtualBox Guest Additions es un paquete especial de software que forma parte de VirtualBox y
que debe instalarse en cada una de las máquinas virtuales, para mejorar el rendimiento y añadir
nuevas funciones. Consisten en una serie de controladores (drivers) y aplicaciones para el sistema
virtualizado que lo optimizan para un mejor rendimiento y usabilidad.

Las Guest Additions nos ofrecen las siguientes características:

Integración del cursor del ratón. Esto implica que podemos mover el ratón libremente entre la
máquina virtual y la real sin necesidad de pulsar ninguna tecla para capturarlo/liberarlo. Hace que
sea mucho más cómodo usar la máquina virtual.

Mejor soporte de vídeo. En principio el controlador de vídeo virtual que utiliza VirtualBox para
cualquier sistema operativo virtualizado proporciona solamente funciones básicas. Sin embargo, el
driver de vídeo que se instala con las Guest Additions nos ofrece no sólo una buena aceleración de
vídeo, sino también resoluciones más altas.

Sincronización horaria. Gracias a las Guest Additions, VirtualBox se asegura de que la hora del
sistema virtualizado esté mejor sincronizada.

Carpetas compartidas. Una de las características más importantes es la de "las carpetas
compartidas", porque es una forma fácil de poder intercambiar archivos entre el sistema real y el
virtualizado.

Ventanas sin costuras. Esta característica consiste en mostrar una ventana del sistema
virtualizado como si formara parte de nuestro sistema real.

Portapapeles compartido. Al igual que las carpetas compartidas, poder compartir el portapapeles
es de gran utilidad. Gracias a esta característica podemos copiar y pegar independientemente de
que estemos en la máquina virtual o real.




Es necesario instalar las Guest Additions en cada una de las máquinas virtuales, para poder
aprovecharlas mejor y para que sean mucho más cómodas de usar.




Máquinas Virtuales                              Linux                                           17
Con         la        máquina
arrancada,        dentro   del
menú             "Dispositivos"
tenemos          la     opción
correspondiente.




La    iso   encuentra      en:
/usr/share/virtualbox/VBoxGuestAdditions.iso

Y en la página de Oracle:

http://download.virtualbox.org/virtualbox/4.0.4/Oracle_VM_VirtualBox_Extension_Pack-4.0.4-
70112.vbox-extpack




                                                                              Pasamos de todas
                                                                              las   advertencias
                                                                              de       seguridad
                                                                              (Windows se fía
                                                                              sólo de Microsoft
                                                                              Corporation).




Máquinas Virtuales                             Linux                                          18
Ya disponemos de integración del ratón




Exportar/Importar
Exportar/Importar
Vamos a realizar el proceso de exportación de la MV con el SO recién instalado




Usamos el formato "ova", que nos empaqueta todo en un solo fichero.




Máquinas Virtuales                           Linux                               19
En la pantalla anterior no hay mucho que cambiar, podemos rellenar los campos vacíos.




La creación, en un equipo de medianas prestaciones, es bastante rápida, unos pocos minutos.



La importación la podemos realizar en cualquier Linux que disponga de VirtualBox, y nos creará una
máquina igual, tanto en hardware como en software, así que os las podéis llevar y traer.

Para probarlo, la vamos a exportar en el mismo anfitrión, realizando de esta forma un duplicado.




Seleccionamos la máquina exportada, que por ahora hay solo una.




Máquinas Virtuales                           Linux                                                 20
Nos informa de su configuración, por si queremos cambiarle algo, sólo le he cambiado el nombre,
indicando que es importada.




Y ahora veremos que tenemos dos máquinas virtuales.




Máquinas Virtuales                         Linux                                            21

Todo linux

  • 1.
  • 2.
    1. Historia ...........................................................................................................3 Antecedentes:............................................................................................................. 3 Nacimiento:................................................................................................................. 3 Expansión de Unix:..................................................................................................... 3 Evolución: ................................................................................................................... 4 La G.N.U..................................................................................................................... 5 Distribuciones de Linux. ............................................................................................. 6 2. Generalidades de la gestión del S.O. ........................................................... 6 3. Características ............................................................................................... 7 4. Estructura del S.O. UNIX ............................................................................... 8 Kernel o Núcleo .......................................................................................................... 8 Dispositivos ................................................................................................................ 8 Utilidades .................................................................................................................... 8 SHELL o Caparazón................................................................................................... 8 5. Primera Aproximación................................................................................... 9 Antes de entrar al Sistema: ........................................................................................ 9 Escribir algunos comandos para tomar contacto. ...................................................... 9 6. Algunas utilidades para experimentar. ...................................................... 10 Consultar el manual.................................................................................................. 10 Hacer cálculos .......................................................................................................... 10 Mirar el almanaque ................................................................................................... 11 7. Conceptos Básicos del Sistema de Ficheros ............................................ 12 Distribución de la información en disco: ................................................................... 12 Inodos ....................................................................................................................... 12 Los ficheros pueden ser esencialmente de tres tipos: ............................................. 13 Trayectoria o pathname:........................................................................................... 16 Nombres de ficheros y Metacaracteres.................................................................... 16 8. Trabajo del Usuario con Ficheros Ordinarios. .......................................... 18 Formato de las órdenes............................................................................................ 18 Crear ficheros ........................................................................................................... 18 Listar nombres e informacion sobre ficheros............................................................ 18 Copiar, Mover, Enlazar y Borrar Ficheros. ............................................................... 19 Permisos, Propietario y Grupo. ................................................................................ 21 9. Operaciones Con Ficheros Directorios...................................................... 26 10. Flujo De Información. .................................................................................. 28 Entrada y salidas estándar (std)............................................................................... 28 El Sistema Operativo Unix - Linux 1
  • 3.
    Redireccionamiento:................................................................................................. 28 Tuberías (pipes): ...................................................................................................... 29 Filtros para: Contar, Ordenar y Eliminar Repetidos.................................................. 30 Filtros para ver que hay en los ficheros.................................................................... 32 Filtro para cambiar caracteres.................................................................................. 33 Buscar en ficheros. Familia grep. ............................................................................. 35 Comparacion de Ficheros. ....................................................................................... 36 Cortar y Pegar Ficheros. .......................................................................................... 37 11. Búsqueda de ficheros. ................................................................................ 39 12. Editores: ....................................................................................................... 42 Editor VIsual. Generalidades. ................................................................................... 42 Configuración ........................................................................................................... 44 Búsquedas y reemplazos. ........................................................................................ 46 Los Búfers del VI ...................................................................................................... 47 13. Comunicación entre Usuarios .................................................................... 49 finger......................................................................................................................... 49 who ........................................................................................................................... 49 w ............................................................................................................................... 49 write .......................................................................................................................... 50 wall............................................................................................................................ 50 Mensaje del día. ....................................................................................................... 51 Mensaje de preentrada............................................................................................. 51 mail ........................................................................................................................... 51 14. Empaquetar y Comprimir Ficheros. ........................................................... 54 tar ............................................................................................................................. 54 gzip ........................................................................................................................... 55 Los dos a la vez: tar y gzip ....................................................................................... 56 zcat ........................................................................................................................... 56 compress, uncompress ............................................................................................ 56 bzip2, bunzip2........................................................................................................... 56 15. Sistema de Impresión.................................................................................. 57 Mandar trabajos a la impresora ................................................................................ 57 Control de la cola...................................................................................................... 58 El Sistema Operativo Unix - Linux 2
  • 4.
    Historia Antecedentes: El SO Multics se utilizó durante algún tiempo en los laboratorios Bell. En Europa se había desarrollado el sistema de acceso multiple de Cambridge (The Cambridge Multiple Access System). También se empleó durante algún tiempo el CTSS (sistema de tiempo compartido compatible). Los desarrolladores de Unix aprovecharon este trabajo realizado con estos y otros sistemas operativos, para combinar las mejores características de cada uno. Nacimiento: El UNIX surgió en 1964-66 cuando Ken Thompson intentaba utilizar un programa de un ordenador grande, que funcionaba con el SO Multics, en otro ordenador llamado PDP-7. Para ello escribió un sistema operativo nuevo llamado UNIX. A él se unió Dennis Ritchie y el UNIX se comenzó a utilizar en los laboratorios Bell. Pronto se adaptó a otros ordenadores y tuvo gran aceptación en el ambiente universitario, del cual recibió un gran impulso, en especial de la Universidad de Berkeley en California. En un principio fue escrito en Ensamblador, pero el hecho de que se pudiese adaptar a muchos tipos de ordenadores (portabilidad), se debe a que se reescribió casi en su totalidad en lenguaje C, lenguaje de nivel medio desarrollado por Dennis Ritchie modificando otro ya existente llamado lenguaje B. El nacimiento de UNIX y el lenguaje C se hizo a la par y su posterior desarrollo continuó paralelo. Expansión de Unix: El sistema operativo Unix ha estado ejecutándose en ordenadores más de 40 años. En un principio se ejecutaba en mainframes y miniordenadores, aunque su principal plataforma de desarrollo han sido las estaciones de trabajo RISC. En la actualidad el acercamiento de los PC,s a las estaciones de trabajo ha hecho de las plataformas Intel una buena base para utilizar Unix. Debido a la gran portabilidad que ofrece el lenguaje C, no pasó mucho tiempo antes de que creasen versiones destinadas a otros procesadores. La evolución de Unix comenzó a complicarse cuando Unix se escindió para satisfacer a diferentes plataformas hardware. Por un lado se obtuvo Xenix, de Microsoft, el primero en ejecutarse en ordenadores Intel. La versión BSD, desarrollada en la Universidad de California, en Berkeley, encontró alojamiento en multitud de miniordenadores de alta potencia. Unix 2.0, el predecesor del presente System V Unix de AT&T, fue el que más atención acaparó y es el estándar de hoy en día. El diagrama muestra un árbol genealógico de Unix desde 1969 hasta nuestros días. Obsérvese cómo Unix se divide en varias versiones. Además, es importante destacar de qué forma se combinaron diversas versiones con el fin de obtener nuevos enfoques del sistema operativo. El nacimiento de híbridos de diferentes versiones parece la tendencia del momento. Algunos de los elementos más destacables de esta numerosa familia son AIX, el sistema operativo IBM RS/6000, Solaris de SunSoft y Mach. El árbol genealógico de Unix.: V1 El Sistema Operativo Unix - Linux 3
  • 5.
    V6 Xenix 2.0 V7 BSD SIII 32V 2BSD System V V8 3BSD SVR2 V10 4BSD SCO SVR3 Plan 9 4.2 4.3 SVRS3.2 AIX V1 Mach SVR4 Evolución: Cuando Unix era joven (versión 6), su código fuente se encontraba por todas partes, con autorización de AT&T, y se estudiaba frecuentemente en muchas universidades, de las cuales había recibido y recibía un gran impulso. Pero AT&T, en la versión 7 (1979), comprendió que Unix era un valioso producto comercial; y prohibió el estudio y distribución del código fuente, para evitar poner en peligro su condición de secreto comercial. Para remediar la situación y especialmente con fines educativos, en 1983, Andy Tannembaum desarrolló un SO nuevo en cuanto a código, pero compatible con Unix en cuanto a su funcionalidad, evadiendo los problemas legales para su estudio. Lo llamó Minix de Mini-Unix. Finalmente su creador cedió todos los derechos sobre Minix a una empresa que comenzó a cobrar por licencia. A principios de la decada de los 90, un estudiante de informática se pone a trabajar en una variante de Unix llamada Linux, con la idea de que estubiese enmarcado dentro del proyecto GNU. El padre de la criatura es Linus Benedict Torvalds, nacido en Helsinki en 1969. El 5 de octubre de 1991 Linus dio a conocer la primera versión oficial, que podía ejecutar el bash (shell de GNU) y el compilador de C. Lo puso en un grupo de noticias con el siguiente mensaje: ”¿Suspiráis por recordar aquellos días del Minix-1.1, cuando los hombres eran hombres y escribían sus propios drivers? ¿Os sentís sin ningún proyecto interesante y os gustaría tener un verdadero SO, que pudierais modificar a placer? ¿Os resulta frustrante el tener sólo a Minix? Entonces, este artículo es para vosotros. Como dije hace un mes, estoy trabajando en una versión gratuita de algo parecido a Minix para ordenadores AT-386. He alcanzado la etapa en la que puede ser utilizable y voy a El Sistema Operativo Unix - Linux 4
  • 6.
    poner las fuentespara su distribución. Es sólo la versión 0.02 ... pero he conseguido ejecutar en el bash, gcc, gnu-make, gnu-sed, compress, etc.” Tras esta versión y el apoyo de voluntarios “enganchados” a Internet, no ha dejado de evolucionar y mejorarse: 1992 Linus añadió Linux al proyecto GNU. Abril de 1992, aparece la primera versión capaz de ejecutar X. Abril de 1994, primera versión completa de Linux, la 1.0. Diciembre de 1996 aparece la versión 2.0. Para comprobar la versión actual http://www.kernel.org Linux ha sido registrado bajo los términos de la Licencia Pública General GNU (GNU General Public License) o GPL. Esta licencia, escrita por la Free Software Foundation (FSF), está diseñada para evitar que alguna persona restrinja la distribución de software. En pocas palabras, dice que aunque Ud. cobre a alguien por entregarle una copia, no podrá impedir que ese alguien la regale. También significa que debe estar disponible el código fuente. Esto es útil para los programadores. Cualquiera puede modificar Linux y aún distribuir sus modificaciones, siempre que mantenga el código bajo la misma licencia. La G.N.U. Linux está regido por lo que se conoce como la Licencia Pública General de GNU, o GPL, General Public License. La GPL fue desarrollada para el proyecto GNU por la Free Software Foundation, que podemos traducir como "Fundación por el Software Gratuito". La licencia hace una serie de previsiones sobre la distribución y modificación del "software gratis". "Gratis" en este sentido se refiere a libertad, y no sólo al coste. La GPL puede ser interpretada de distintas formas, y esperamos que este resumen ayude a entenderla y cómo afecta a Linux. Se puede encontrar una copia completa de la Licencia en Internet o en cualquier libro de Linux. Originalmente, Linus Torvalds lanzó Linux bajo una licencia más restrictiva que la GPL, que permitía que el software fuera libremente distribuido y modificado, pero prohibía su uso para ganar dinero. Sin embargo, la GPL autoriza que la gente venda su software, aunque no le permite restringir el derecho que su comprador tiene a copiarlo y venderlo a su vez. En primer lugar, hay que aclarar que el "software gratis" de la GPL no es software de dominio público. El software de dominio público carece de copyright y pertenece literalmente al público. El software regido por la GPL sí tiene el copyright de su autor o autores. Esto significa que está protegido por las leyes internacionales del copyright y que el autor del software está declarado legalmente. No sólo porque un programa sea de libre distribución puede considerársele del dominio público. El software regido por la GPL tampoco es "shareware". Por lo general, el "shareware" es propiedad del autor, y exige a los usuarios que le paguen cierta cantidad por utilizarlo después de la distribución. Sin embargo, el software que se rige por la GPL puede ser distribuido y usado sin pagar a nadie. La GPL permite a los usuarios modificar el software y redistribuirlo. Sin embargo, cualquier trabajo derivado de un programa GPL se regirá también por la GPL. En otras palabras, una compañía nunca puede tomar Linux, modificarlo y venderlo bajo una licencia restringida. Si un software se deriva de Linux, éste deberá regirse por la GPL también. La GPL permite distribuir y usar el software sin cargo alguno. Sin embargo, también permite que una persona u organización gane dinero distribuyendo el software. Sin embargo, cuando se venden programas GPL, el distribuidor no puede poner ninguna restricción a la redistribución. Esto es, si compras un programa GPL, puedes a su vez redistribuirlo gratis o cobrando una cantidad. El Sistema Operativo Unix - Linux 5
  • 7.
    Esto puede parecercontradictorio. ¿Por qué vender software cuando la GPL especifica que puede obtenerse gratis? Por ejemplo, supongamos que una empresa decide reunir una gran cantidad de programas GPL en un CD-ROM y venderlo. La empresa necesitará cobrar por el hecho de haber producido el CD, y asimismo querrá ganar dinero. Esto está permitido por la GPL. Las organizaciones que vendan el software regido por la GPL deben tener en cuenta algunas restricciones. En primer lugar, no pueden restringir ningún derecho al comprador del programa. Esto significa que si compramos un CD-ROM con programas GPL, podremos copiar ese CD y revenderlo sin ninguna restricción. En segundo lugar, los distribuidores deben hacer saber que el software se rige por la GPL. En tercer lugar, el vendedor debe proporcionar, sin coste adicional, el código fuente del software a distribuir. Esto permite a cualquiera adquirir el software y modificarlo a placer. Permitir a una empresa distribuir y vender programas que son gratis es bueno. No todo el mundo tiene acceso a Internet para llevarse los programas, como Linux, gratis. La GPL permite a las empresas vender y distribuir programas a esas personas que no pueden acceder al software con un coste bajo. Por ejemplo, muchas empresas venden Linux CD-ROM por correo, y hacen negocio de esas ventas. Los desarrolladores de Linux pueden no tener constancia de estos negocios. Por ejemplo, Linus sabe que ciertas compañías venden Linux, y él no va a cobrar nada por esas ventas. Distribuciones de Linux. Es imprescindible seleccionar una distribución que se adapte a las necesidades de cada uno para poder instalar, configurar y administrar un sistema Linux con éxito. Hace años, cuando Linux empezó a distribuirse por Internet, instalar Linux consistía en bajarse de Internet todos los archivos necesarios a unos disquetes. En esos tiempos la instalación podía llegar a ser un laborioso proceso, haciendo que muchos usuarios frustrados acabasen por rendirse. Por ello, programadores de todo el mundo se unieron para crear distribuciones que incorporasen el sistema operativo y programas que facilitaran la instalación, además de los paquetes conteniendo programas de todo tipo. De esta forma la instalación se reducía a seguir unos pasos, dando la posibilidad a los usuarios con pocos conocimientos de poder instalar un sistema operativo de este tipo con un menor esfuerzo. En este momento hay un buen número de distribuciones en las que poder elegir, pero cada una de ellas tiene sus pros y sus contras. Generalidades de la gestión del S.O. Está escrito en C, en lugar de enamblador, como la mayoría de los sistemas, lo que le permite una completa adaptación a los diferenes ordenadores. Como otros SSOO consta de dos partes: 1. El núcleo, que se encarga de la gestión de la memoria, planificación de la CPU y el Sistema de ficheros. 2. Los programas del sistema, que facilitan la compilación, ejecución y manipulación de ficheros. La CPU está planificada de forma que favorece los procesos interactivos. La planificación de los procesos se hace mediante un algoritmo de prioridades, de forma que a números mayores corresponde una menor prioridad y procesos del sistema poseen prioridad negativa. Para los procesos que utilizan mucho la CPU, se les concede tiempo según Round-Robin. La espera de un proceso indefinidamente, se resuelve mediante el cambio de prioridad por envejecimiento de los procesos. Existen dos tendencias en la planificación de la memoria, dependiendo de las diferentes versiones de Unix: El Sistema Operativo Unix - Linux 6
  • 8.
    a) En unasse utiliza el intercambio (swapping) entre los diferentes procesos. Los procesos víctimas se eligen: por estar ociosos, llevar mucho tiempo en memoria o ser grandes. Y se cargan en memoria si llevan mucho tiempo fuera o son pequeños. b) En las versiones de Berkeley y Linux, se utiliza el sistema de memoria virtual con paginación bajo solicitud. El sistema de entrada y salida maneja normalmente dos tipos de dispositivos: 1. De bloque, como discos y cintas. 2. Y de caracteres, terminales e impresoras. Los ficheros se organizan en directorios estructurados en árbol y se manejan mediante bloques de datos. Linux tiene soporte para diferentes sistemas de archivos, algunos son sistemas de archivos de redes especializados o son sistemas de archivos desarrollados para otros sistemas operativos. Una sorprendente cantidad de ellos pueden ser utilizados como sistema de archivos nativo en Linux: ext2, ext3, ext4, ReiserFS, XFS, y Journaled File System (JFS). La cuarta extensión del sistema de archivos (ext4fs) existe porque algunos desarrolladores querían incorporar nuevas y mejoradas características al ext3. La mejora más llamativa de ext4 está en el soporte de archivos y sistemas de archivos de gran tamaño. Características Multitarea: Un usuario puede ejecutar varios programas (procesos) a la vez, sin tener que detener una aplicación para ejecutar otra. Multiusuario: Varios usuarios pueden acceder a las aplicaciones y a los recursos en el mismo PC y al mismo tiempo. Con la impresión para cada uno de ellos de estar trabajando solo. Tiempo compartido: Es la forma de conseguir las características anteriores, y se basa en que en una fracción de tiempo muy pequeña, la CPU atiende a varios usuarios. A cada proceso se le dedica por turno una unidad de tiempo llamada “cuanto”. La memoria: es aprovechada al máximo, para acceder al disco el menor número de veces, consiguiendo mayor rapidez. Recuperación automática del sistema de ficheros después de una caída del sistema, o interrupción eléctrica. Seguridad de acceso a la información de cada usuario, mediante una serie de permisos que el propietario puede conceder o denegar sobre cada uno de sus ficheros. Multiplataforma: Corre en muchos PCs distintos (Intel 386/486/Pentium y compatibles,...). Facilita la portabilidad del software, entre plataformas, al menos a nivel de código fuente. Shell programables, lo que le hace ser un SO muy flexible. El Sistema Operativo Unix - Linux 7
  • 9.
    Estructura del S.O.UNIX Es un SO jerárquico, ya que se organiza en una serie de estratos, cada uno de los cuales interactúa con su entorno a través de interfaces bien definidos. SHELL Utilidades Dispositivos Kernel Hardware Kernel o Núcleo Es el corazón del sistema, la parte más cerrada al usuario y más cercana al hardware. Reside permanentemente en memoria. Su trabajo consiste en: • Planificar, coordinar y gestionar la ejecución de procesos. • Dar servicio al sistema, como entrada / salida y gestión de ficheros. • Manejar las operaciones dependientes del hardware, realizando las operaciones de más bajo nivel de manera que se oculten al usuario. Dispositivos Los ficheros de dispositivo son los intermediarios entre el SO y el dispositivo físico. Utilidades Estas órdenes también conocidas como herramientas, que van desde el compilador de C, hasta el editor de texto, pueden utilizarse por separado o de forma conjunta para llevar a cabo tareas útiles. Se invocan por su nombre a través del Shell. SHELL o Caparazón Es la parte que permite al usuario comunicarse con el sistema, también se le conoce como "caparazón". Puede estudiarse desde dos puntos de vista: 1.- Como intérprete de comandos, es un programa que siempre está en ejecución. - Espera que introduzcamos una orden. - Analiza la línea. - Comprueba su corrección y los permisos. - Y llama a ejecución al programa o programas necesarios. 2.- Como lenguaje de programación: Combina, mediante estructuras de control grupos de órdenes, estos ficheros se llaman procedimientos Shell, Shell Script o guiones Shell, además posee sus propias sentencias. (se estudiarán más adelante) El Sistema Operativo Unix - Linux 8
  • 10.
    Existen varios tiposde SHELL diferentes: sh: Bourne Shell (Unix System V, Xenix). Los shell tipo Bourne toman su nombre a partir de su inventor, Steven Bourne. Este fue el shell original de Unix, denominado sh; a partir de entonces, la mayoría de los shells tienen un nombre con el sufijo sh para indicar que son extensiones de la idea original. Está diseñado para usuarios experimentados, su prompt por defecto es el signo dólar ($). Tiene capacidad para redireccionar entradas y salidas, interpretar metacaracteres, usar tuberías y filtros, manejar variables y además posee su propio lenguaje de programación. Tradicionalmente, los shell Bourne se han utilizado para los scripts de shell por razones de compatibilidad con el sh original rsh: Reduced Shell, es un subconjunto del anterior, contiene las órdenes básicas. No permite el cambio de directorio ni el redireccionamiento. csh: C Shell (Berkeley), fue implementado por Bill Joy, los shells C han sido más comunes en su aplicación interactiva. Es similar al sh, pero añade algunas características específicas para el programador de C. Ksh: Korn Shell, desarrollado por David Korn de Bell Laboratories, incorpora la mayor parte de las características del csh y conserva la sintaxis y características básicas del sh. Bash: Bourne Again Shell. Fue desarrollado en el marco GNU, y es el derivado más extendido del Bourne Shell. Tcsh: Una versión de csh para Linux. En principio el Administrador del sistema adjudica un tipo de Shell a cada usuario, aunque este puede cambiarse tecleando el nombre de otro Shell (si tiene permiso); se sale de un Shell pulsando Ctrl + d. Primera Aproximación Antes de entrar al Sistema: Debe de tener creada una cuenta de usuario, la cual tendrá un nombre y que además puede llevar asociada una palabra clave. Se podrá acceder al sistema mediante cualquier terminal que esté preparado, en cuyo caso mostrará por pantalla: login:, esto quiere decir que está esperando a que le introduzcamos un nombre de usuario. Una vez introducido y pulsado Return puede que nos pida una palabra clave password: Pasados estos requisitos puede que aparezca algún mensaje y debajo el prompt del Sistema. Para los usuarios habitualmente el prompt es sólo el signo dólar ($), pero en linux suele aparecer por defecto: el nombre del usuario, el de la computadora y la trayectoria actual en el árbol de directorios (el directorio de conexión se muestra como ~). Escribir algunos comandos para tomar contacto. Hay que tener en cuenta que el UNIX distingue entre mayúsculas y minúsculas. Se adelantan dos órdenes de gestión de ficheros, para crear un directorio “prueba”, en el que se realizarán las primeras prácticas: mkdir nombre_dir Crea un nuevo directorio. El Sistema Operativo Unix - Linux 9
  • 11.
    cd nombre_dir Activa o se traslada al directorio indicado. date Muestra la fecha actual. who Indica que usuarios están en ese momento conectados al Sistema. clear Borra la pantalla. echo mensaje Vuelve a escribir el mensaje. echo mensaje > fichero El signo mayor que (>), significa redirigir la salida o resultado de un comando. Guardaría el mensaje dentro del fichero que hayamos indicado. ls Lista los nombre de los ficheros. cat fichero Visualizaría el contenido del fichero, aunque su principal función es concatenar ficheros. rm fichero Borra el fichero indicado. Cuando se desea terminar un programa antes de su fin normal debemos pulsar la tecla Supr dos veces en Unix y Ctrl + C en Linux. Para salirnos del Sistema pulsamos las teclas Ctrl + d. 1ª Práctica de familiarización con las órdenes anteriores. Algunas utilidades para experimentar. Consultar el manual man orden Nos explica la utilidad y el funcionamiento de la orden. Es un auténtico manual adaptado a nuestro sistema en particular. Hacer cálculos bc Se puede emplear como una calculadora normal. Para separar los decimales emplea el punto (.). Admite cualquier nivel de paréntesis. Las operaciones son: + (suma), - (resta), * (multiplicación), / (división), % (módulo o resto), ^ (exponenciación). El Sistema Operativo Unix - Linux 10
  • 12.
    Tiene capacidad paraasignar valores a variables utilizando el signo igual (=). Utiliza unas variables internas que rigen su trabajo, a las que les podemos cambiar su valor, como son: - obase=nº base del sistema de numeración en el que mostrará los resultados. - ibase=nº ídem para leer las entradas. - scale=nº nº de dígitos decimales que se deben de tener en cuenta en un cálculo, comprendido entre 0 y 99, Permite la creación de funciones, lo cual no se explicará por ahora; un ejemplo: define a(x,y){ auto z z = x * y return(z) } Se usaría: a(4, 7.8) Mirar el almanaque cal [[mes] año] Sin argumento nos muestra fecha, hora y despliega el mes actual, anterior y posterior. Con un solo nº del 0 al 9999 muestra todo el calendario del año correspondiente; y si le especificamos mes y año sólo muestra ese mes. 2ª Práctica de familiarización con las utilidades anteriores. El Sistema Operativo Unix - Linux 11
  • 13.
    Conceptos Básicos delSistema de Ficheros Distribución de la información en disco: - Sector de arranque. Almacena un pequeño programa de inicialización, que a su vez pasa el control a otro más grande o al mismo KERNEL. En los sistemas de ficheros que no poseen arranque el primer bloque no se utiliza. - Superbloque también conocido como Cabecera del Sistema de Ficheros. Contiene datos importantes sobre el resto de la distribución del disco, como es: Bloques ocupados por los i-nodos: isize. Bloque ocupados por los ficheros: fsize. Puntero a la tabla de bloques disponibles. - Tabla de i-nodos. Se almacenan a partir del bloque 2 con una longitud de isize bloques; están numerados secuencialmente con un tamaño fijo de 64 bytes en los que se almacena información relativa a un fichero. - Bloques de ficheros. En ellos se almacena la información que contienen los ficheros (y otra información necesaria como distintas tablas). - Area de swap Inodos Los ficheros son la unidad fundamental del Sistema de Ficheros Linux. Cada fichero al ser grabado es asociado automáticamente y durante toda su vida a un inodo (nodo-i), este identifica perfectamente al fichero asociado y contiene los siguientes datos del fichero al que identifica: TIPO: ordinario (-), directorio (d), especial (b) o (c), enlace simbólico (l) PROPIETARIO: usuario que creó el fichero. GRUPO: grupo al que pertenece el usuario. PERMISOS: pueden ser de lectura, escritura y ejecución para el propietario, su grupo y el resto de los usuarios. Estos se pueden alterar según las necesidades de seguridad con el comando chmod. NÚMERO DE ENLACES: un enlace es la unión entre un nombre de fichero y un inodo. Un mismo fichero puede estar referenciado por otro nombre. Los enlaces se pueden crear con la orden ln. TABLA DE PUNTEROS: es un vector con trece posiciones, cada una de las cuales almacena un puntero, cuyo significado es: - Los diez primeros punteros señalan a los diez primeros bloques de información del fichero. - El décimoprimer puntero señala a otra tabla que contiene punteros, que a su vez apuntan a bloques de información. - El décimosegundo puntero señala a otra tabla que contiene punteros, que a su vez apuntan a tablas de punteros, que apuntan a bloques de información. - El décimotercer puntero señala a otra tabla de punteros, cada uno de los cuales apuntan a tablas de punteros, que a su vez apuntan a tablas de punteros, que apuntan a bloques de información. FECHA DE CREACION. FECHA DE LA ÚLTIMA MODIFICACION. FECHA DE LA ÚLTIMA UTILIZACION. El Sistema Operativo Unix - Linux 12
  • 14.
    Para comprobar elnº de inodo, usar la orden ls con la opción -i. Los ficheros pueden ser esencialmente de tres tipos: ORDINARIOS: lo que normalmente se entiende por ficheros, contienen texto, datos o programas. ESPECIALES: corresponden a dispositivos físicos (hacen de interface entre el Sistema y el dispositivo físico), sirven para que nos podamos comunicar con discos, impresoras, terminales y la memoria del Sistema. Son llamados también ficheros especiales de dispositivos, y pueden ser de: o Bloques (b), disquete, partición del disco duro, disco duro entero,... o Caracteres (c), cinta magnética, puerto paralelo, puerto serie,... Esos ficheros se almacenan en el directorio /dev: o /dev/fd0 disquete de la primera disquetera (A: en Windows). o /dev/sda primer disco duro (sin considerar particiones) (antes eran /dev/hda para discos IDE y /dev/sda para SCSI). o /dev/sda1 primera partición del primer disco. o /dev/sdb segundo disco duro. o /dev/sdc disco USB (se utiliza emulación SCSI). o /dev/sdc1 partición de un disco USB. o /dev/ttyS1 primera terminal de consola. o /dev/ttyS2 segunda terminal de consola. o /dev/lp0 primer puerto paralelo. o /dev/null cualquier dato enviado a este dispositivo desaparece. o /dev/pty pseudoterminales, proporcionan un "terminal" a sesiones remotas. o /dev/console consola del sistema, monitor conectado directamente a su sistema. o /dev/tty consolas virtuales del sistema. DIRECTORIOS: Con la orden cat fichero ¿Cómo accede el SO a los bloques de este fichero?. Los directorios son ficheros que contienen información sobre ficheros u otros directorios, esta información es su nombre y número de inodo. Con el comando ls se pueden visualizar los nombres de los ficheros contenidos en el directorio y otros datos. Linux utiliza la estructura de directorios en forma de árbol, para mantener la cohesión entre sus ramas, cada directorio contiene otro llamado . (punto), que hace referencia a él mismo, y otro .. (dos puntos), que hace referencia al su directorio padre. Para ver la información de los directorios . y .., utilizar la orden ls con la opción -a. Utilizar la orden ls -l, que nos muestra la mayor parte de las características de los ficheros y directorios (tipo, permisos, enlaces, propietario, grupo, ocupación en bytes, fecha última actualización y nombre del fichero). Distingue entre los tipos de ficheros, para ver ficheros de dispositivo en /dev. Observa los permisos de los ficheros ordinarios y de los directorios. ¿Son iguales? ¿A qué grupo perteneces? Estudiar el nº de enlaces de los directorios. a) Recién creado. b) Con distinto nº de subdirectorios. El Sistema Operativo Unix - Linux 13
  • 15.
    Organización de directoriosen Unix Ejemplo de estructura básica de un sistema Linux: /. bin boot dev etc home lib proc sbin usr tmp var Ftp Linux user## X11R6 bin doc etc lib local sbin bin lib man faq howto bin lib man / Directorio raiz del sistema de ficheros. En algunos casos directorio home del administrador. bin Abreviatura de “binaries”. En este directorio se encuentran los órdenes básicas del SO. En /usr/bin también hay órdenes básicas, pero son menos esenciales. boot Aquí están los ficheros binarios de arranque del sistema (vmlinuz) dev Contiene los ficheros especiales o de dispositivo (device drivers). Son usados para acceder a los dispositivos del sistema y recursos, como discos duros, módems, memoria, etc. Por ejemplo, de la misma forma que podemos leer datos de un fichero, podemos leerla desde la entrada del módem usando /dev/modem. etc En este directorio se encuentran las órdenes relacionadas directamente con la administración del sistema, así como los ficheros de datos asociados. Estos incluyen /etc/passwd (la base de datos de usuarios), /etc/rc (guiones de inicialización del sistema), etc. home Por cada usuario cuelga de home un directorio que por defecto tendrá el mismo nombre que el del usuario. Ejemplo /home/user01. Estos a su vez dentro de su directorio pueden crear la estructura de ficheros y directorios que necesiten. root En algunos sistemas es el directorio de conexión (home) del administrador. lib Directorio que contiene las librerías compartidas. Estas son comunes para todos los programas que las usan, en lugar de tener cada programa su copia. El Sistema Operativo Unix - Linux 14
  • 16.
    proc No existefísicamente, es un SF virtual. Los ficheros que contiene residen realmente en memoria. En él podemos encontrar información sobre el sistema (procesos). sbin Contiene los programa utilizados en la inicialización del sistema y en la recuperación del mismo. tmp Contiene los ficheros temporales que el Sistema necesita crear para realizar determinados trabajos. usr Para almacenar otros directorios accesibles a los usuarios, tales como: /usr/lib, /usr/bin, /usr/share/man, /usr/share/doc. En algunos sistemas, de aquí cuelgan los directorios de los usuarios. Los directorios descritos arriba son esenciales para que el sistema esté operativo, pero la mayoría de las cosas que se encuentran en /usr son opcionales para el sistema. De cualquier forma, son estas cosas opcionales las que hacen que el sistema sea útil e interesante, contiene la mayoría de los paquetes grandes de programas y sus ficheros de configuración. /usr/X11R6 Contiene el sistema X Window si lo instalamos. El sistema X Window es un entorno gráfico grande y potente el cual proporciona un gran número de utilidades y programas gráficos. /usr/bin Es el almacén real de programas del sistema Unix. Contiene la mayoría de los programas que no se encuentran en otras partes como /bin. /usr/etc Como /etc contiene diferentes ficheros de configuración y programas del sistema, /usr/etc contiene incluso más que el anterior. En general, los ficheros que se encuentran en /usr/etc/ no son esenciales para el sistema, a diferencia de los que se encuentran en /etc, que si lo son. /usr/include Contiene los ficheros de cabecera para el compilador de C. Estos ficheros (la mayoría de los cuales terminan en .h, de header) declaran estructuras de datos, subrutinas y constantes usados en la escritura de programas en C. Los ficheros que se encuentran en /usr/include/sys son generalmente usados en la programación de Unix a nivel de sistema. /usr/include/g++ Contiene ficheros de cabecera para el compilador de C++ (muy parecido a /usr/include). /usr/lib Contiene las librerías equivalentes stub y static a los ficheros encontrados en /lib. Además, varios programas guardan ficheros de configuración en /usr/lib. /usr/local En general, los programas que se encuentran en /usr/local son específicos de nuestro sistema, esto es, el directorio /usr/local difiere bastante entre sistemas Unix. Aquí encontraremos programas grandes como TEX (sistema de formateo de documentos) y Emacs (gran y potente editor), si los instalamos. /usr/man Este directorio contiene las páginas de manual. /usr/src Contiene el código fuente (programas por compilar) de varios programas de nuestro sistema. El más importante es /usr/src/linux, el cual contiene el código fuente del kernel de Linux. opt Este es la raíz del subárbol que contiene los paquetes de aplicación específicos. El Sistema Operativo Unix - Linux 15
  • 17.
    var Este contiene los directorios de todos los ficheros que cambian de tamaño o tienden a crecer, como /var/adm (ficheros de registro y contabilidad), /var/mail (ficheros de correo del usuario), /var/spool (ficheros que van a ser pasados a otro programa), /var/news (mensajes de interés común),... mnt o media De este cuelgan directorios para montar sistemas de ficheros sobre el Root File System. Por ejemplo /mnt/floppy, /mnt/cdrom,... lost+found (perdido+encontrado) Contiene ficheros que por algún problema no están enlazados al Sistema de Ficheros. Explorar la estructura de directorios. Trayectoria o pathname: Es el camino que hay que seguir dentro de la estructura arborescente de directorios para encontrar un fichero o directorio. Vamos a distinguir dos tipos de trayectorias: 1. Trayectoria absoluta es la que parte del directorio raíz (root). 2. Trayectoria relativa es la que parte del directorio de trabajo. Referencias a directorios especiales: - Directorio raíz (root) simbolizado con la barra de dividir. - Directorio domicilio o casa (HOME), es el directorio que le corresponde al usuario dentro del directorio home o usr; Nos vamos a casa con cd. - Directorio de trabajo, activo o en curso, es aquel en el que nos encontramos trabajando en un momento determinado, se representa por un punto (.). pwd nos informa del directorio actual. - Directorio padre del directorio en curso, es el directorio del cual cuelga el directorio activo, se representa por dos puntos (..). Nombres de ficheros y Metacaracteres Linux admite nombres largos de hasta 255 caracteres (Unix originalmente hasta 14 caracteres) normalmente incluyen caracteres alfanuméricos y el punto (.). En un directorio no puede haber dos ficheros con el mismo nombre, pero sí en directorios diferentes. Cuando un nombre empieza por un punto se oculta a algunas órdenes. Dentro de los nombres de fichero se interpretan de forma especial los siguientes caracteres, también llamados metacaracteres. Se usan especialmente para hacer referencia a un grupo de ficheros: - * Equivale a 0 o más caracteres. - ? Equivale a un solo carácter. - [caracteres] Equivale a cualquier carácter contenido dentro de los corchetes, sólo a uno. Se puede especificar un rango de caracteres con solo indicar el primero y el último separados por un guión (-). También se puede negar el El Sistema Operativo Unix - Linux 16
  • 18.
    conjunto de caracteres,para indicar cualquier carácter que no esté entre los corchetes, poniéndole delante el signo de admiración [!caracteres]. - Suprime el significado propio del metacarácter que vaya a continuación. El proceso de sustitución de los metacaracteres, por los nombres de los ficheros que correspandan se llama expansión de los metacaracteres, y es efectuado por el intérprete de comandos, de esta forma los comandos u órdenes nunca ven los metacaracteres. Crear todos los ficheros necesarios para practicar con los metacaracteres, al menos con la orden ls. El Sistema Operativo Unix - Linux 17
  • 19.
    Trabajo del Usuariocon Ficheros Ordinarios. Formato de las órdenes orden [opción(es)] [argumento(s)] Siempre es obligatorio el nombre de la orden, teniendo en cuenta que Unix distingue entre mayúsculas y minúsculas. Las opciones matizan la forma de trabajar la orden. Suelen ser un solo carácter, normalmente precedido por un guión (-), si hay varias se pueden colocar juntas (sin mediar espacio) después de un solo guión. Los argumentos nos indican con que va a trabajar la orden, suelen ser nombres de ficheros, de directorios, usuarios, terminales, etc. Si hay que indicar varios se pueden utilizar los metacaracteres o simplemente se separan con un espacio. Existen comandos “sucios”, que no responden a este formato. Crear ficheros Vacío: cat /dev/null > fichero > fichero Las dos órdenes tienen el mismo efecto, en la primera de ellas se emplea el dispositivo nulo. Con información tecleada por nosotros: cat > fichero cat -> fichero Esta orden nos permitirá introducir tantas líneas de texto como deseemos, al final de las cuales pulsaremos ^d como señal de final de fichero, y se almacenarán en el fichero indicado. Con información procedente de cualquier otra orden Esta otra orden debe de producir una salida redireccionable. orden > fichero Listar nombres e informacion sobre ficheros. ls [opciones] [ficheros | directorio(s)] Sin ninguna opción ni argumento produce un listado de los nombres de los ficheros del directorio activo en orden alfabético. Entre las opciones más interesantes contamos con: -l Imprime información detallada sobre el fichero: tipo, permisos, enlaces, propietario, grupo, ocupación en bytes, fecha de la última actualización y nombre del fichero. "ls - l" se puede abreviar en solo "l". -n Igual que -l, pero del propietario y grupo no muestra su nombre, sino su número, llamados UserId y GroupId respectivamente. -i Muestra el nº de i-nodo de cada fichero. -a Indica a la orden que tenga en cuenta a todos los ficheros incluidos los ocultos. -d Para que nos muestre información del directorio y no de los ficheros que contiene el directorio. -t Los muestra ordenados por fecha de actualización, primero los más recientes. -r Invierte el orden de mostrar los ficheros. El Sistema Operativo Unix - Linux 18
  • 20.
    -R Recursividad. -F Pone una (/) después de cada directorio y un (*) después de cada ejecutable. La orden l es un alias de ls –la. Como argumentos se puede especificar: nombre(s) de fichero(s), de directorio(s) y utilizar los metacaracteres. file fichero(s) Realiza una suposición sobre qué tipo de información almacena un fichero; así nos puede indicar sí un fichero es de texto, ejecutable, directorio, un programa fuente, está comprimido ... Para ello revisa la primera parte del fichero en busca de palabras clave o números especiales del linkador, también consulta los permisos de acceso. Sus resultados no siempre son correctos. Ojear la salida de órdenes o contenido de ficheros. orden | less less fichero(s) Dosifica la salida por pantalla, cuando el resultado no entra en ella. Posee una serie de comandos para poder desplazarnos por la salida. h.....................................Ayuda de less. q.....................................Para salir de less. j, Intro o flecha abajo .....Avanza línea. k o flecha arriba.............Retrocede línea. Nºj..................................Avanza Nº líneas. Nºk.................................Retrocede Nº líneas. z.....................................Avanza pantalla. w ....................................Retrocede pantalla. Barra espaciadora .........Avanza página. Ctrl + L...........................Refresca pantalla. Si estamos usando “telnet”, deberíamos usar la siguiente configuración, que podemos establecer en “Terminal Preferencias”: Emulación VT100/ANSI. Búfer 24 líneas. Flechas VT100 Sí. Cursor Intermitente Sí. (A mí me gusta más) Ejercicios: Ver más opciones de less y ls con man. Probar las distintas opciones y sus combinaciones. Seguir practicando con los metacaracteres. Ver el nº de enlaces de los directorios. Comprobar que los directorios enlazados tienen el mismo nº de inodo. Copiar, Mover, Enlazar y Borrar Ficheros. Copiar: cp [opc.] f_origen f_destino El Sistema Operativo Unix - Linux 19
  • 21.
    -i Pide confirmaciónantes de sobreescribir. -r Copia recursiva, incluyendo subdirectorios. Realiza duplicados de ficheros, en el mismo directorio con distinto nombre o en distinto directorio con cualquier nombre. Sí el nombre del fichero destino ya existe se pierde la información que pudiera tener. Sobre el f_origen hay que tener al menos permiso de lectura (r) y sobre el f_destino, si ya existe, de escritura (w). Como destino se puede indicar un directorio, en cuyo caso se copiarían todos los ficheros origen en él. cp f(s)_origen directorio Los ficheros origen se pueden indicar por su nombre completo, separados por blancos o utilizando metacaracteres; por supuesto se puede emplear una trayectoria. Con esta orden al duplicarse la información nunca se pierde el contenido del fichero origen. Mover: mv [-i] f_origen f_destino mv [-i] f(s)_origen directorio Renombra un fichero dentro de un directorio o lo traslada a otro directorio. La diferencia con la orden cp es que mv no duplica la información, desapareciendo siempre los ficheros origen. -i Si en el destino ya existe el fichero, pregunta antes de sobreescribirlo. La mayoría de las veces es más rápida que cp, ya que se limita solo a anotar el cambio en los ficheros directorio. Enlazar: ln [-f] f_origen f_destino -f No hace preguntas. A un mismo fichero se le da otro nombre, los dos nombres se referirán en adelante al mismo fichero. No se hace una copia del fichero origen y el nuevo nombre puede estar en distinto directorio. Lo único que realiza esta orden es añadir una nueva entrada en el directorio que corresponda con el nombre del fichero destino y el nº de i-nodo del fichero origen. No es necesario poseer ningún permiso sobre el fichero origen, pero si debemos poseer permiso de escritura (w) sobre el directorio destino y de lectura sobre el directorio origen. Como origen se pueden indicar varios ficheros si el destino es un directorio. -s Realiza un enlace simbólico. Un enlace o vínculo simbólico es un archivo que sólo contiene el nombre de otro archivo. Cuando el SO opera sobre el enlace simbólico, se dirige hacia el archivo al que apunta. Se usan para enlazar ficheros en computadoras diferentes o en distintos sistemas de ficheros, también para crear varios nombres a un directorio. Estas tres órdenes tienen en común, que el contenido del fichero destino, si existe, es destruido. Borrar: rm [opc] fichero(s) El Sistema Operativo Unix - Linux 20
  • 22.
    Para borrar unfichero es necesario poseer permiso de escritura sobre el directorio, no sobre el fichero, pues lo que realmente se hace es borrar un entrada del directorio. Si el fichero a borrar tiene varios enlaces, se borrar el enlace que tiene con el nombre de fichero indicado, los demás permanecen. -f (forzar) Sí no tenemos permiso de escritura sobre el fichero, se salta una pregunta de confirmación y lo borra. -i (interactivo) Pide confirmación en todos los ficheros. -r (recursivo) Borra a partir de donde le indiquemos, toda la posible rama de subdirectorios, es rápida y peligrosa. Ejemplos peligrosos: rm * .c rm -r dir1 Ejercicios: Duplicar un fichero en el mismo directorio. Copiar varios ficheros al mismo tiempo a otro directorio. Renombrar un fichero. Comprobar si le ha cambiado el nº de inodo. Mover ficheros a otro directorio. ¿Tienen otro inodo? Crear enlaces de un fichero en el mismo y distinto directorio. Comprobar inodos y el nº de enlaces. Borrar algunos de los enlaces creados y volver a comprobar el nº de enlaces. Intentar hacer un enlace duro a un directorio. Realizar enlaces simbólicos de ficheros. Comprobar el carácter de tipo de fichero. ¿Concuerda el nº de inodo?. Trabajar con el enlace simbólico. Borrar el fichero origen del enlace. Volver a trabajar con el enlace simbólico. Crear un enlace simbólico a un directorio. Estudiar los permisos de vuestro directorio home. ¿Qué permisos tienen los de tu grupo?. Entra en el directorio home de algún compañero. Intenta crear ficheros. Borra un fichero. Permisos, Propietario y Grupo. Las operaciones que se pueden realizar sobre un fichero son: leer (r), escribir (w) y ejecutar (x). Estos permisos se conceden o deniegan a tres niveles: el propietario del fichero, el grupo al que este pertenece y el resto de los usuarios. Que el grupo posea un permiso determinado no implica que lo posea el usuario, y que el resto posea un permiso no implica que lo posean el usuario y el grupo. En un fichero convencional tener permiso de lectura significa poder consultar el contenido del fichero, el permiso de escritura indica que se puede modificar y el de ejecución que se pueden ejecutar las órdenes contenidas en el fichero. En los ficheros directorio el permiso de lectura posibilita que podamos averiguar el contenido del directorio, es decir, los nombres de los ficheros que contiene, el no poseer este permiso no impide acceder al contenido de los ficheros. El permiso de escritura nos permite crear y borrar ficheros, la modificación de un fichero en particular no la controlan los permisos de directorio sino los de ese fichero. El Sistema Operativo Unix - Linux 21
  • 23.
    El permiso deejecución en el caso de directorios impide que podamos usarlo dentro de una trayectoria o que lo usemos como directorio de trabajo, denegar el permiso de ejecución si es una protección real para un directorio y los ficheros que contenga. (Si perdemos el permiso de ejecución sobre el directorio de trabajo o el padre de este, podemos desplazarnos a cualquier otro usando una trayectoria absoluta.) El propietario de un fichero puede cambiarle los permisos con respecto a él mismo, su grupo o el resto de los usuarios con la orden: chmod [quien(es)][+-=][permiso(s)] fichero(s)| directorio(s) [quien]: u Usuario propietario. g Grupo. o Otros, el resto. a Todos (por defecto). [+-=]: + Añade permiso. - Elimina permiso. = Asigna o establece permiso. Añade los permisos indicados y quita los demás, para los usuarios indicados. [permiso]: r Lectura. w Escritura. x Ejecución. Ejemplos: − Un permiso a un quién: chmod g+w fichero − Varios permisos a un quién: chmod o+rwx fichero − Varios permisos a gente variada: chmod go-rw fichero − Permisos distintos para varia gente: chmod o-r,g+w fichero (nunca espacio después de la coma) − Asignación absoluta: chmod ug=rw fichero Ejercicios: Si a un fichero con varios enlaces se le cambian los permisos ¿Se cambiarán también en sus ficheros enlazados? Quitar a un fichero permiso de w: mostrarlo, añadirle información, borrarlo. (Podemos por ahora escribir en un fichero añadiéndole información con: orden >> f1) Quitar a un fichero permiso de r: mostrarlo, añadirle información, borrarlo. Grabar en un fichero: clear echo hola mundo echo te encuentras en pwd Poner su nombre después del prompt, para ejecutarlo. Darle permiso de ejecución. Poner su nombre después del prompt, para ejecutarlo. El Sistema Operativo Unix - Linux 22
  • 24.
    También se permiteuna notación numérica, en octal, para indicar los permisos que se van a establecer a unos determinados ficheros. chmod número_octal fichero(s) Número_octal: Un fichero tiene 9 permisos, se codifican en binario, si se tiene permiso 1 y si no se tiene 0; resulta un número binario de 9 dígitos binarios, este se pasa a octal y obtenemos el número octal de tres dígitos. Ejemplo: permiso de escritura al propietario, permiso de ejecución al propietario y al grupo y permiso de lectura a todos. chmod a=r,u+w,ug+x fich chmod 754 fich Permisos especiales. Aún hay otro tipo de permisos que hay que considerar. Se trata de: o El bit de permisos SUID (Set User ID). o El bit de permisos SGID (Set Group ID). o El bit de permisos de persistencia (sticky bit). Para entender los dos primeros el SUID y el SGID veamos los permisos para un comando de uso común a todos los usuarios, que es el comando passwd, que como se sabe sirve para cambiar la contraseña del usuario, y puede ser invocado por cualquier usuario para cambiar su propia contraseña, si vemos sus permisos observaremos un nuevo tipo de permiso: #> ls -l /usr/bin/passwd -r-s--x--x 1 root root 21944 feb 12 2006 /usr/bin/passwd SUID En vez de la 'x' para el usuario encontramos ahora una 's' (suid). passwd es un comando propiedad de root, pero sin embargo debe de poder ser ejecutado por otros usuarios, no solo por root. Es aquí donde interviene el bit SUID, al activarlo obliga al archivo ejecutable binario a ejecutarse como si lo hubiera lanzado el usuario propietario y no realmente quien lo ejecutó. Es decir, es poder invocar un comando propiedad de otro usuario (generalmente de root) como si uno fuera el propietario. SGID El bit SGID funciona exactamente igual que el anterior solo que aplica al grupo del archivo. Es decir si, permite ejecutar el comando con los permisos del grupo. Se muestra como una 's' en vez del bit 'x' en los permisos del grupo. #> ls -l /usr/bin/write -rwxr-sr-x 1 root tty 10320 Jun 6 2008 write STICKY BIT (Bit de persistencia) Este bit se aplica para directorios, como en el caso de /tmp y se indica con una 't': #> ls -ld /tmp drwxrwxrwt 24 root root 4096 sep 25 18:14 /tmp El Sistema Operativo Unix - Linux 23
  • 25.
    Puede apreciarse la't' en vez de la 'x' en los permisos de otros. Lo que hace el bit de persistencia en directorios compartidos por varios usuarios, es que el sólo el propietario del archivo pueda eliminarlo del directorio. Para cambiar este tipo de bit se utiliza el mismo comando chmod pero agregando un número octal extra al principio de los permisos, ejemplo: #> ls -l /usr/prog -r-x--x--x 24 root root 4096 sep 25 18:14 prog #>chmod 4511 /usr/prog #> ls -l /usr/prog -r-s--x--x 24 root root 4096 sep 25 18:14 prog Nótese que el valor extra es el '4' y los demás permisos se dejan como se quieran los permisos para el archivo. Es decir, los permisos originales en este ejemplo eran 511 (r-x--x--x), y al cambiarlos a 4511, se cambió el bit SUID reemplazando el bit 'x' del usuario por 's'. Los posibles valores serían los siguientes: - - - - - - - - - = 0 Predeterminado, sin permisos especiales. - - - - - - - - t = 1 Bit de persistencia, sticky bit - - - - - s - - - = 2 Bit sgid de grupo - - s - - - - - - = 4 Bit suid MUY IMPORTANTE: Algo sumamente delicado y que se tiene que tomar muy en cuenta es lo que decidas establecer con permisos de bit SUID y SGID, ya que recuerda que al establecerlos de esta manera, cualquier usuario podrá ejecutarlos como si fuera el propietario original de ese programa. Y esto puede tener consecuencias de seguridad severas en tu sistema. Siempre considera y reconsidera si conviene que un usuario normal ejecute aplicaciones propias de root a través del cambio de bits SUID o SGID. Mejores alternativas pueden ser los comandos sudo y su. Máscara de permisos para la creación de ficheros. El propietario también puede definir con que permisos por defecto se crearán sus ficheros. umask [número_octal] Solamente tiene formato numérico, el nº octal al pasarlo a binario, los unos indican los permisos que quitamos y a quién. La orden tiene efecto para el usuario que la aplica, y a partir de su uso los ficheros y directorios se crearán con la restricción de los permisos indicada. (Atención: a los ficheros de texto, en un principio, no se les asigna permiso de ejecución) Si utilizamos la orden sin ningún parámetro, muestra la máscara de creación actual, que suele ser 022. Para dejarlo fijo en la sesión, agregarlo a .bashrc de nuestro directorio de inicio. Cambio de propietario. El propietario de un fichero en System V (en los sistemas Berkeley solo el administrador) puede cambiar el fichero de propietario y de grupo. chown [-R] nuevo_propietario[:grupo] fichero(s) -R Recursividad. El nombre del nuevo propietario debe de ser un nombre válido de entrada al sistema (login) o un número de identificación de usuario; estos y otros datos se encuentran en el fichero /etc/passwd. El Sistema Operativo Unix - Linux 24
  • 26.
    Si el usuarioperteneciese a otro grupo se indica este separado del usuario por (:). Y se cambia al mismo tiempo de usuario y de grupo. Cambio de grupo. chgrp nuevo_grupo fichero(s) Igualmente el nuevo grupo se puede indicar con el nombre o el número de identificación, que se encuentra en el fichero /etc/group. Ejercicios: (en octal) Poner a dos ficheros al mismo tiempo los permisos rw- -wx r--. Quitarle a un subdirectorio todos los permisos ¿Qué podéis hacer en él? Dejarle todos menos el de ejecución ¿Qué podéis hacer en él? Mostrar el contenido de un directorio al que le falta el permiso de lectura. Poner al directorio permiso de escritura y un fichero dentro de él sin este permiso, probar a borrarlo. Poner una máscara de creación, de forma que a los directorios sólo les de permiso de ejecución para g y o, y para el propietario todos. Comprobarla creando algún directorio. La máscara anterior, que permisos da a los nuevos ficheros ordinarios. Intenta cambiar un fichero de propietario. El Sistema Operativo Unix - Linux 25
  • 27.
    Operaciones Con FicherosDirectorios. Ya sabemos visualizar el contenido de un directorio utilizando las orden ls, para lo cual debemos de poseer permiso de lectura sobre él. Creación. mkdir trayectoria(s) Para crear un directorio necesitamos permiso de escritura sobre el directorio en el que se va a crear. Se pueden crear varios directorios al mismo tiempo, indicando su trayectoria, ya sea absoluta o relativa. Ejemplos. ~> mkdir base/direc base2 ~> mkdir base/dire1 base/dire1/dire2 (dire1 no existía) Cambio de directorio activo. cd [directorio] Nos podemos desplazar libremente por el árbol de directorios siempre que tengamos permiso de ejecución sobre los directorios por los que nos desplazamos. Si no indicamos directorio se asume el directorio HOME o de conexión. Dónde nos encontramos. Si necesitamos asegurarnos de cual es nuestro directorio de trabajo utilizaremos la orden pwd En otras versiones de Unix no era tan fácil que el prompt nos indicase la trayectoria del directorio de trabajo, por lo que esta orden era más utilizada. Pero todavía puede ser útil en programas Shell. Eliminar directorios rmdir directorio(s) Se requiere permiso de escritura sobre el directorio padre. Antes de borrar un directorio debemos de borrar su contenido y cuidar de que no sea el directorio de trabajo. Otro usuario que tenga permiso para ello nos puede borrar nuestro directorio de trabajo, con lo que nos dejará "como suspendidos en el aire", pero podemos transladarnos a cualquier otro directorio. El sistema permite borrar el directorio de trabajo. Recordar que también se pueden borrar directoros usando la orden rm de forma recursiva. Cambio de nombre. mv directorio_antiguo directorio_nuevo Se requiere permiso de escritura en el directorio padre. El Sistema Operativo Unix - Linux 26
  • 28.
    Copia de directorios. cp (-R) DirectorioOrigen DirectorioDestino -R De forma recursiva. Variables PS1 y PS2. Se usan para definir el prompt o inductor del shell. El prompt primario (PS1) aparece para solicitarnos la introducción de una orden. El prompt secundario (PS2) se muestra cuando no se ha terminado de introducir un comando. Tanto PS1 como PS2 son variables del shell que pueden ser redefinidas por los usuarios (cada usuario tiene las suyas). Esto se hace simplemente asignándole un nuevo valor, con el formato: PS1=”NuevoValor” El NuevoValor puede ser cualquier cadena, pero hay una serie de códigos con un significado especial para modificar el inductor, estos son: ! Siguiente nº del histórico de sucesos. $ Usa el signo $, salvo para root, que usa el signo # (tradicional). d Fecha actual. s Shell actualmente activo. t Hora actual. u Nombre del usuario. w Directorio de trabajo actual (directorio activo). h Nombre de la máquina. Host. Ejercicios: Crear varios directorios con la misma orden. Trayectorias relativas. Trayectorias absolutas. Que el directorio activo no sea el padre de los subdirectorios. Examinar el árbol de directorios de Unix. Desplazarse usando ambos tipos de trayectorias. Probar a eliminar un directorio no vacío. Probar a eliminar un directorio vacío, pero que sea el directorio activo. Eliminar varios directorios con la misma orden. Cambiar nombres a directorios. Con y sin permiso de escritura sobre el padre. Copiar una rama del árbol de directorios de forma recursiva. Eliminar la rama recién copiada también de forma recursiva. Modificar el prompt primario y secundario incluyendo texto y códigos especiales de la orden. El Sistema Operativo Unix - Linux 27
  • 29.
    Flujo De Información. Entrada y salidas estándar (std). Muchas órdenes Unix reciben información desde el teclado, que es la entrada estándar (stdin) y muestran los resultados por la pantalla, salida estándar (stdout); la pantalla también es la salida estándar para los posibles errores (stderr). Ejemplo: Cat sort Sin opciones ni argumentos leen texto del teclado (stdin) y muestran los resultados por pantalla (stdout), visualizando los posibles errores, en el caso de que se produzcan, por pantalla (stderr). Tanto la entrada como las salidas estándar son tratadas como ficheros especiales, y el shell los identifica por su número de descriptor de fichero: stdin 0 stdout 1 stderr 2 (Deben de emplearse junto al signo de redireccionamiento). El guión (-) realiza una entrada por teclado. Redireccionamiento: Se pueden redireccionar la entrada y salidas estándar mediante metacaracteres de redireccionamiento: > < >>. > Redireccionamiento de salida, envía los datos que normalmente saldrían por pantalla hacia el fichero que indiquemos. Ejemplo: cat > file cat 1> file cat - > file Usa la entrada estándar y la salida al fichero especificado. >> redireccionamiento de adición, igual que el anterior, pero si el fichero al que se dirige la salida ya existe no se borra la información que tenga, sino que la nueva se añade al final. Ejemplo: Cat 1>> file Añadiendo información a un fichero desde la entrada estándar. < Redireccionamiento de entrada, la orden no tomará la información del teclado, sino del fichero especificado. Ejemplo: cat file cat < file El Sistema Operativo Unix - Linux 28
  • 30.
    cat 0< file Toma como entrada el fichero indicado, siendo la salida por pantalla. cat 0< fichero 1>> otro La entrada de un fichero y la salida la añade a otro. cat 2> errores 0< fichero 1> fichero1 cat fichero > fichero1 2> errores Entrada fichero, salida fichero1 y errores al fichero errores. Cat fichero1 – fichero2 > total Entre dos ficheros permite una entrada por teclado Con el formato: orden >& fichero Tanto la salida estándar, como la salida de error se almacenan en el fichero indicado. Ejemplo: Cat fichero fichero_inexistente >& todo Tuberías (pipes): Orden | Orden2 Mediante el uso de tuberías se consigue que la salida de una orden sea la entrada de otra. El metacarácter tubería es |. Ejemplo: ls –lR /home | less Duplicar la salida orden | tee [opciones] fichero(s) orden | tee [opciones] | filtro La entrada que recibe tee la copia en la salida estándar y en el o los ficheros indicados como argumentos. -i No responde a interrupciones. -a Si los ficheros existen le añade la información al final. Ejemplo: date | tee –a fecha ls –l | tee listado cat fichero1 – fichero2 | sort | tee FileOrden El primero muestra la fecha y además la añade en un fichero. E segundo muestra el contenido del directorio y lo almacena en el fichero listado. Y el tercero concatena la entrada, la ordena, la muestra ordenada y la almacena en el fichero FileOrden. El Sistema Operativo Unix - Linux 29
  • 31.
    Ejercicios: Practicar todos los redireccionamientos, con todas las formas de indicar la entrada y salida. Combinar los redireccionamientos y la tubería. En los ejercicios anteriores emplear los filtros vistos: less, cat y sort. Filtros para: Contar, Ordenar y Eliminar Repetidos. Contar: wc [opciones] fichero(s) Abreviatura de Word Counting. Sin opciones cuenta el número de líneas, palabras y caracteres contenidos en un fichero o en la entrada indicada. Si se especifica un grupo de ficheros contabiliza en cada uno de ellos y además muestra un total. Si no especificamos la entrada, toma por defecto la entrada estándar. Para que no muestre toda la información o la muestre en otro orden, podemos utilizar las opciones: -l Sólo cuenta las líneas. -w Idem las palabras. -c Idem los caracteres. Ejemplos: wc f1 f2 f3 Cuenta el nº de líneas, palabras y caracteres de cada fichero y hace un total. ls | wc -w Cuenta el nº de ficheros de un directorio. Ordenar: Este filtro además de clasificar puede fusionar ficheros. En principio lo hace siguiendo el código ASCII. La entrada, al igual que en todos los filtros, pueden ser: ficheros indicados como argumentos, pasada por una tubería o suministrada por la entrada estándar. sort [opciones] [campos] [fichero(s)] Opciones generales: -o file Sirve para indicar el fichero de salida. Ya que si redireccionamos la salida a un fichero que se llame igual que el de entrada, se pierde la información. -m Mezcla los ficheros que supone que están ordenados. -c Comprueba si el fichero está ordenado. -u Muestra las líneas repetidas una sola vez, útil para la mezcla de ficheros. Opciones de ordenación de datos: -d (diccionario), sólo tiene en cuenta los caracteres alfabéticos, numéricos y espacio. -f Convierte mayúsculas a minúsculas a efectos de la ordenación. -b Ignora los blancos iniciales. -n Ordenamiento numérico, toman su valor aritmético el signo menos (-) y el punto decimal (.). Los blancos iniciales no se tienen en cuenta. El Sistema Operativo Unix - Linux 30
  • 32.
    -r Ordenación inversa. -R Ordenación aleatoria (Random). Ordenación de campos: Los campos se entienden separados por blancos o tabuladores salvo que se indique la opción: -tx Donde x es el carácter delimitador de campos. Es aconsejable poner el carácter entre comillas. Para indicar a partir de que campo se va a realizar la ordenación, pondremos: +n.c, donde n es el número de campos que se van a saltar sin ordenar y c el número de caracteres que se saltan contando a partir del último campo saltado. +n Nº de campos que se saltan sin ordenar. Pueden indicarse opciones sólo para un campo, si se colocan inmediatamente después del especificador de campo, no irán precedidas de guiones; estas son b, f, n, r. La lista de ficheros caso de ser varios los ordena y mezcla, salvo que se utilice la opción -m, que sólo mezcla. Ejemplos: sort -f +1 lista > lista.ord Un fichero de nombres y apellidos ordenarlo por apellidos. who | sort | tee quien.hay Muestra y almacena los usuarios que hay conectados de forma ordenada. Eliminar líneas iguales o con parte igual. uniq [opc] [-campos] [+carac.] [f_in] [f_out] Controla las líneas consecutivas repetidas mostrando sólo una. Opciones: -c Precede cada línea del número de repeticiones. -d Sólo muestra las que se han repetido alguna vez. -u Visualiza las que no se han repetido. -campos: Ignora el número de campos que se indique. +caracteres: Ignora el número de caracteres que se indique. Si no se especifican ficheros de entrada o salida se utilizan la entrada y salida estándar. Ejemplos: Sort alumnos | uniq -1 | wc -l En un fichero de alumnos compuesto por nombre y apellidos, cuenta todos los que hay con apellidos distintos. Sort direcciones | uniq -d –1 Una vez ordenado el fichero muesta los registros repetidos a partir del primer campo. Ejercicios: Practicar el filtro wc: Sin opciones ni argumentos. Con una opción, y varias cambiándolas de orden. El Sistema Operativo Unix - Linux 31
  • 33.
    Con varios ficheros. Pasándole la información mediante una tubería. Almacenando el resultado en un fichero. Practicar sort: Sin argumentos ni opciones. Ordenando un fichero. Almacenando el resultado en otro fichero. Probar las opciones y su combinación. Mostrar el listado largo de ficheros de un directorio, ordenado por tamaño, de mayor a menor. Ordenar el fichero de grupos (/etc/group) por el nº de grupo (campo 3) de menor a mayor. Crear un fichero con los campos: Nombre, Apellidos y Edad, separados por (;). Procurar que se repitan algunas edades y algunos apellidos. Ordenar por edad de mayor a menor. Ordenar por apellido. ¿Cuántos hay de cada edad? Filtros para ver que hay en los ficheros. El filtro más habitual para ver el contenido de un fichero es cat, ya visto. Ver el final de un fichero. tail [±nº][lbc] [fichero] Sin opciones lista las 10 últimas líneas. Sí el nº es positivo (+) empieza a mostrar a partir de ese nº de unidades, contando desde el principio del fichero, en el caso de ser negativo (-) cuenta las unidades indicadas desde el final del fichero. Las unidades se medirán según la letra que siga inmediatamente al nº, que puede ser: b bloques. c caracteres. l (ele) líneas. Por defecto. Ver el principio de un fichero. head [-n] [fichero] -n indica el nº de líneas que se van a mostrar, por defecto 10. En un fichero tenemos los números del 0 al 9 (cada uno en una línea), escribir la línea de comando para que nos muestre uno de ellos aleatoriamente. Volcado en octal (octal dump) od [opciones] [+desplazamiento] [fichero] Es útil para ver que contienen los ficheros objeto o de texto con caracteres no imprimibles. -c Los caracteres imprimibles los muestra con caracteres normales, los no imprimibles con un nº en octal de tres dígitos, y algunos de estos los muestra de la siguiente forma: 0 Nulo. b Retroceso. f Salto de página. n Nueva línea. El Sistema Operativo Unix - Linux 32
  • 34.
    r Return. t Tabulador. -d Decimal. -x Hexadecimal. Filtro para cambiar caracteres. tr (translate), cambia o traduce caracteres procedentes de una entrada de acuerdo a las reglas que se le indiquen. Supongamos que tenemos un archivo que usa los dos puntos(:) para separar campos, y que necesitamos cambiar cada dos puntos por otro carácter, por ejemplo el tabulador. tr : “t” < fichero t representa un tabulador. Formato: tr [opc] lista_de_entrada lista_de_salida Las listas deben de tener el mismo nº de caracteres, y la sustitución es posicional, el primer carácter de la lista de entrada es sustituido por el primero de la lista de salida, ... Normalmente se trabaja redireccionando la entrada y la salida. Opciones: -s (squeeze = estrujar, apretar) elimina caracteres repetidos en la salida. -c (complement) toma como lista_de_entrada el complemento. -d (delete) borra en la salida los caracteres del conjunto de entrada. Indicar rangos Se pueden usar conjuntos de caracteres. Por ejemplo para cambiar letras minúsculas por mayúsculas: tr “[a-z]” “[A-Z]” < fichero Ejemplo para codificar texto, desplazando cada letra trece posiciones en el alfabeto inglés de 26 letras: tr “[a-m][n-z][A-M][N-Z]” “[n-z][a-m][N-Z][A-M]” < fich > fich.13 Para traducir un conjunto de caracteres de entrada por el mismo carácter de salida, se usa el * después del carácter de salida indicando que se repita las veces que sea necesario. tr “[0-9]” “[#*]” < fichero Eliminación de repetidos en la salida tr -s “[0-9]” “[#*]” < fichero Cada nº con todas sus cifras es reemplazado por un solo símbolo “#”. Sustitución de los caracteres complementarios tr -c “[a-z][A-Z][0-9]” “[#*]” < fichero En el ejemplo anterior todo carácter no alfanumérico es sustituido por “#”. Eliminación de caracteres tr -cd “[a-z][A-Z][0-9]” < fichero El Sistema Operativo Unix - Linux 33
  • 35.
    Son eliminados todoslos caracteres no alfanuméricos incluidos los signos de puntuación, espacios,... Para representar caracteres especiales: NNN character with octal value NNN. a audible BEL backslash b backspace f form feed n new line r return t horizontal tab v vertical tab Para representar conjuntos de caracteres: CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order [:alnum:] all letters and digits [:alpha:] all letters [:digit:] all digits [:cntrl:] all control characters [:lower:] all lower case letters [:upper:] all upper case letters [:graph:] all printable characters, not including space [:print:] all printable characters, including space [:punct:] all punctuation characters [:blank:] all horizontal whitespace [:space:] all horizontal or vertical whitespace Ejercicio: Dado un fichero de texto, producir un listado con las palabras que contiene ordenadas alfabéticamente, sin que estén repetidas e indicar el nº de veces que aparece cada palabra en el fichero. tr -s "[:blank:]" "n" < fichero | sort | uniq -c El Sistema Operativo Unix - Linux 34
  • 36.
    Buscar en ficheros.Familia grep. Busqueda de un patrón en un fichero: grep, fgrep, egrep. Buscar un patrón dentro de un fichero, grupo de ficheros, entrada estándar o la que se le especifique mediante tubería o redireccionamiento. Cuando se busca en más de un fichero, encabeza cada línea con el nombre del fichero. En la formación del patrón se pueden usar expresiones regulares, también llamados formatos de sustitución. Precisamente de las expresiones regulares toma su nombre que viene de las siglas: Global Regular Expression and Print grep [opc] patrón [fichero(s)] Reglas importantes de los formatos de sustitución, expresiones regulares: Si el patrón está formado por más de una palabra deben de incluirse entre comillas o apóstrofos según los sistemas. El punto (.) sustituye cualquier carácter único, igual que ? para el shell. Una lista entre corchetes ([]) tiene el mismo significado que para el shell. El circunflejo (^) dentro de unos corchetes precediendo una lista empareja todos los caracteres que no estén en la lista, igual que la ! en el shell. El signo dolar ($) al final de una expresión indica que debe de estar al final de una línea. El acento circunflejo (^) al principio de una expresión indica el principio de línea. El asterisco (*) sirve por cero o más repeticiones del carácter que le precede. La barra invertida () quita el significado especial al siguiente carácter. Sin opciones produce como salida las líneas que contienen el patrón. -n Al principio de línea aparece su nº de línea. -i Ignora mayúsculas y minúsculas. -c Sólo indica el nº de líneas que contienen el patrón dentro del fichero. -h No imprime los nombres de los ficheros. -l (ele) Indica en que fichero(s) se encuentra el patrón. -v Devuelve las líneas que no contienen el patrón. Ejemplos: grep byte *.apuntes grep ".f" programas grep [^m-t]ata fichero grep "^Santa Fe$" america europa grep ^[0-9][0-9]* datos El Sistema Operativo Unix - Linux 35
  • 37.
    fgrep [opc] patrón(es)[fichero(s)] La principal diferencia es que puede buscar muchos patrones de forma simultánea (puede buscar miles de palabras al mismo tiempo), pero no permite el uso de metacaracteres para formar expresiones regulares, sólo cadenas fijas. Es más rápida que sus hermanas grep y egrep. Le son válidas las opciones anteriores, y además: -f fichero Sirve para indicar el fichero que contiene los patrones de búsqueda. Si se especifican varios patrones en la línea de comando, irán todos entre comillas y separados por un retorno de carro. Ejemplo: fgrep –f palabras lista1 lista2 egrep [opc] patrón(es) [fichero(s)] Como fgrep puede leer patrones desde un fichero. Y como grep puede emplear expresiones regulares. Actualmente las órdenes grep -E sustituye a egrep grep –F sustituye a fgrep Ejercicios: Buscar una palabra en un fichero. Comprobar la opción para que no distinga las mayúsculas. En varios ficheros buscar una frase e informar del nombre de los ficheros que la contengan. Mostrar el nº de veces que aparece la palabra if al principio de línea en un fichero(s). Eliminar las líneas en blanco de fichero1 y almacenarlo en fichero2. Borrar todas las líneas que contengan Manolo, Manuel, Lolo o Manolín. Comparacion de Ficheros. diff - busca diferencias entre dos ficheros diff [opciones] fichero-origen fichero-destino Por defecto muestra los cambios de edición que habría que realizar en f1 para que quedase igual que f2, de la siguiente forma: Línea o rango de f1 operación línea o rango de f2 Donde operación puede ser: a (añadir líneas de f2 a f1) d (borrar líneas de f1) c (cambiar líneas de f1 por líneas de f2). Y a continuación de cada operación muestra las líneas afectadas, si estas se preceden por el símbolo "<" quiere decir que son de f1, y si se preceden por ">" son de f2. El Sistema Operativo Unix - Linux 36
  • 38.
    Opciones -a Trata todos los ficheros como de texto y los compara línea por línea, incluso si no parecen ser de texto. -b No se tienen en cuenta los blancos al final de línea y trata los distinto conjuntos de blancos como si fuesen iguales. -B No hace caso de cambios consistentes en sólo insertar o borrar líneas en blanco. -c Emplea el formato de salida de contexto. -i Considera las letras mayúsculas y minúsculas equivalentes. -q Informa sólo de si los ficheros difieren, no de los detalles de las diferencias. -r Cuando compara directorios, compara recursivamente cualesquier subdirectorios encontrados. -u Emplea el formato de salida unificado. Un estado de salida de 0 significa que no se encontraron diferencias, 1 significa que se encontró alguna diferencia y 2 significa problemas. Cortar y Pegar Ficheros. Cortar de forma horizontal (por líneas). split [-nº] [fichero] [prefijo] Divide el "fichero" en trozos de n líneas, los trozos son grabados en ficheros cuyo nombre base es "prefijo" y se le añaden las terminaciones "aa", "ab", hasta "zz", por lo que se puede dividir hasta en 676 ficheros. (26 letras) -nº Nº de líneas de cada trozo, por defecto 1000. Si no se indica el "fichero" se toma la stdin. Si no se indica el nombre base se asume "x". Variante de split csplit [-f prefijo] fichero arg1 [...argn] Divide el fichero en las porciones que indiquen los argumentos, estos pueden ser: n El trozo termina en la línea nº n (no incluida). "/exp/" Hasta la línea que contiene la expresión (no incluida). "%exp%" Salta sin grabar en fichero hasta la línea que contiene la expresión, esta línea se graba en el próximo fichero. En pantalla se muestra el tamaño de los ficheros en los que se divide. Algunas opciones son: -f prefijo Prefijo tiene el mismo significado que en split, si no se pone se asume "xx" y se van numerando, desde xx00 hasta xx99. -s No muestra el tamaño de las partes en la salida estándar. El Sistema Operativo Unix - Linux 37
  • 39.
    Pegar de formahorizontal. Hemos utilizado la orden cat para crear y visualizar ficheros, con redireccionamientos y tuberías, pero cat es una abreviatura de concatenar. cat [opc] [fichero(s)] [-] Concatena los ficheros especificados, y los muestra por stdout, la cual podemos redireccionar. El guión (-) significa una entrada por teclado. -v Muestra los caracteres no imprimibles. -t Además los TAB los muestra como ^I. Sólo los TAB –T. -e Además en los EOL muestra un $. Sólo los EOL –E. -n Numera las líneas de salida. -b No numera las líneas en blanco. -s No muestra más de una línea en blanco. -A Equivale a –vET. Ejemplos: cat f1 f2 cat f1 - f2 > f3 Dividir ficheros verticalmente (por columnas). cut [opc] [fichero] Permite seleccionar columnas (caracteres o campos) de un fichero, el resultado va a stdout. -c lista Seleccionamos la columna por caracteres. -f lista Indicamos la columna por campos (fields). En ambos casos la lista está formada por un conjunto de números separados por comas o guiones. -dcarácter Informa de cual es el carácter delimitador de campos cuando usamos la opción -f, por defecto se asume tab. -s Se usa conjuntamente con la opción “f”, para pasar por alto las líneas que no tengan el delimitador, como son cabeceras, títulos o líneas vacías. Ejemplos: Corta el rango de caracteres del 20 al 35: cut -c20-35 datos Se obtiene el 2º y 4º campo, actuando como separador los “:” cut -d”:” -f2,4 datos Unir ficheros verticalmente. paste [opc] fichero(s) Une los ficheros verticalmente, produciendo una única salida nueva. Sin opciones, sustituye los caracteres de fin de línea por tab, excepto los del último fichero. -dcarácter Carácter que sustituye los finales de línea. Ejercicios: El Sistema Operativo Unix - Linux 38
  • 40.
    Obtener un listadoordenado de todos los usuarios que son propietarios de algo dentro del directorio /home; no deben de estar repetidos. Orientaciones: A la salida de la orden ls -l le podemos eliminar la cabecera. Cortar la columna de los propietarios. Ordenar Eliminar los repetidos. En un fichero de alumnos, donde tenemos los datos de un alumno por linea, con los datos Nombre; Apellidos; Edad. Obtener otro fichero con los datos apellidos, nombre; ordenado por apellidos. Búsqueda de ficheros. find [ruta(s)] [opcion(es)] Es útil para localizar ficheros que cumplan determinadas condiciones o características, en las ramas del árbol de directorio que se le indique. Finalmente sobre los ficheros o directorios encontrados se puede ejecutar alguna acción. Dentro de las opciones, unas indican criterios de búsqueda (en el caso de que se indique más de un criterio se seleccionan los ficheros que cumplan todos simultáneamente). Otras opciones indican las acciones a realizar con los ficheros encontrados. Cuando el criterio se acompaña de un nº n, este puede llevar el signo positivo (+), negativo (-) o ninguno, significando respectivamente mayor que, menor que o igual que. Algunas opciones que indican criterios de busqueda: -name patrón Nombre del fichero a buscar, admite metacaracteres. Se aconseja poner el nombre entre comillas, para que los metacaracteres no sean interpretados por el shell. -iname patrón Como -name, pero no hace distinción entre mayúsculas y minúsculas. -type t Donde “t” es un carácter que indica el tipo de fichero, este puede ser: f Ficheros ordinarios. b Dispositivos de bloques. c Dispositivos de caracteres. d Directorios. l Vínculos simbólicos. -links [±]n Nº de enlaces. -inum n Empareja con los ficheros que tengan como nº de inodo n. -perm n Localiza los ficheros que tengan exactamente los permisos indicados por el nº n (octal). -user usuario Ficheros que pertenezcan al usuario, se indica el nombre del usuario. -uid n Idem, n debe de ser un identificador de usuario. (ls -n muestra uid y gid) -group grupo Ficheros que pertenezcan al grupo. -gid n Idem, n debe de ser un identificador de grupo. -size [±]n Nº de bloques de tamaño del fichero. Si se añade una c detrás del número se interpreta el tamaño en bytes (caracteres), k (Kbytes), w (palabras 2 bytes), b (bloques, por defecto). -empty Si el fichero o el directorio está vacío. -atime [±]n Si ha sido accedido en los últimos n días. El Sistema Operativo Unix - Linux 39
  • 41.
    -mtime [±]n Idem modificado. -newer fichero Ficheros modificados con posterioridad a la fecha y hora de modificación del fichero especificado. -maxdepth n n indica el nivel de profundidad al que se descenderá buscando ficheros en el árbol de directorios a partir de la trayectoria indicada. 0 Ninguno, 1 sólo en el directorio indicado. -mindepth n n indica a partir de que nivel se inicia la búsqueda. 1 a partir del directorio indicado, 2 omite los ficheros del directorio indicado. Ejemplos: find . -size -25c find /home/user07 -name hola -type d find programas -name "*.c" find /home -atime +30 Probar todos los criterios vistos y algunas combinaciones entre ellos. Estos criterios se pueden alterar y combinar con los operadores relacionales. Se listan en orden de prioridad: () Fuerza a la ejecución prioritaria. ! Colocada delante de un criterio este queda negado. -a Operador lógico y. Si no ponemos ninguno este va implícito. -o Entre dos criterios representa el o lógico. find . ! -name "*.c" -print find ./cartas ./epistolas ( -name pepe -o -name jose ) -ls find /home -name "*.txt" -user user07 –fprint txtde07 Son necesarios los paréntesis, ya que el AND tiene precedencia sobre el OR. Las barras invertidas son para que estos caracteres sean interpretados por el comando, no por el shell. Observar los espacios de separación entorno a los paréntesis. Opciones que indican acciones a realizar: -print Muestra la trayectoria de los ficheros que se encuentren. Esta será relativa o absoluta, dependiendo del tipo de trayectoria de búsqueda que nosotros indiquemos en la orden. Acción realizada por defecto. -fprint file Almacena el resultado en el fichero indicado. -ls Lista los ficheros encontrados por la salida estándar con el formato de la orden “ls -dils”, es decir, información de directorios, nº de inodo, listado largo y tamaño en bloques. -exec orden [{}] ; Ejecuta la orden con los ficheros encontrados. El juego de llaves representan los ficheros encontrados, el (;) indica el final de la orden y hay que colocarle antes la () para que pierda el significado especial que tiene para el shell. El Sistema Operativo Unix - Linux 40
  • 42.
    -ok orden [{}]; Igual que la anterior, pero pide confirmación antes de ejecutar la orden con cada fichero. Los corchetes indican opcionalidad. Ejemplos: find . -name “carta*” - type f -exec cat {} ; find cuentas -atime +90 -ok rm {} ; find programas -newer proyec.c -exec mv {} /home/user07/actual ; find . -atime +3 -atime -60 -exec mv {} ../reserva ; find /home -atime +30 -size +20 -ok rm {} ; En ocaciones, esta orden puede tardar bastante, por lo que se suele ejecutar en background, si no necesitamos su resultado inmediatamente, para ello se añade al final de la orden el carácter &. En este caso ejecutará las acciones de forma desatendida y la salida estándar la debemos de redirigir. Observar la diferencia entre “find . -name fichero” y “find /home/user07 -name fichero”. Para ejecutar acciones sobre los ficheros encontrados, realizar la práctica en vuestro directorio de trabajo y preferiblemente con “-ok orden ...”. El Sistema Operativo Unix - Linux 41
  • 43.
    Editores: Editor VIsual. Generalidades. Comenzar con VI vi [-opciones] [fichero(s)] -R Abre el fichero en modo de solo lectura. +n Al abrir el fichero se posiciona automáticamente en la línea n. + Ídem, pero colocándose al final del fichero. Modos de trabajo Texto. Comando: De pantalla (al iniciar). De línea de órdenes. Entrar a modo texto: i Inserta en la posición del cursor. a Inserta después del cursor. I Inserta al principio de la línea. A Inserta al final de la línea. o Abre una línea debajo de la activa. O Abre la línea encima de la activa. Pasar a modo comando: Pulsando <Esc>. Desplazamiento En algunos terminales con las teclas de dirección. También h j k l (izquierda, abajo, arriba y derecha respectivamente). <Ctrl>+f Avanza pantalla. <Ctrl>+b Retrocede pantalla. <Ctrl>+d Avanza 1/2 pantalla. <Ctrl>+u Retrocede 1/2 pantalla. w Avanza una palabra. b Retrocede una palabra. Sobreescritura r Un solo carácter, y pasa a modo comando. R Reemplaza indefinidamente hasta que se pulse <Esc>. Grabar y Salir :q Abandona vi si no se ha modificado el documento. :q! Abandono imperativo, perdiendo los posibles cambios. El Sistema Operativo Unix - Linux 42
  • 44.
    :wq Grabar y salir. :w fich Graba en el nombre de fichero que le indiquemos. :w! fich Si el fichero existe lo sobreescribe. :w >> fich Añade al fichero indicado. ^g Muestra el nombre del fichero. Borrar J Une la línea actual con la siguiente. x Borra el carácter sobre el que está el cursor. d[n]alcance Donde n es el número de veces que se va a repetir la operación. El alcance puede ser: d Línea actual. w Palabra siguiente a partir del cursor. b Palabra anterior a partir del cursor. ) Hasta final de frase. (Punto o línea en blanco) ( Hasta principio de frase. } Hasta el final de párrafo. (Pto. y aparte y línea en blanco) { Hasta el principio de párrafo. $ Hasta final de línea. ^ Hasta principio de línea. Sin nº de veces. G Hasta el final del fichero. Al borrar, el texto pasa a un búfer de carácter general. (CORTAR) Cambiar c[n]alcance n y alcance tienen el mismo significado que en la orden anterior, pero para indicar una línea en alcance, se emplea la letra c. El bloque de texto así especificado se sustituye por la siguiente entrada por teclado, hasta que pasemos a modo comando. Copiar al búfer general y[n]alcance Donde n y alcance tienen el mismo significado que en el comando "d", con la salvedad que para referirnos a línea en alcance hay que poner y. El texto indicado se copia al búfer general sin borrarlo de su ubicación. El Sistema Operativo Unix - Linux 43
  • 45.
    Pegar p Pega el contenido del búfer general después de la posición del cursor. P Ídem., pero antes de la posición del cursor. Repetición . El punto repite la última operación de borrado o el último bloque insertado. Deshacer u Deshace la última operación realizada. U Restaura la línea actual. Configuración :set showmode Indica cuando esta modo INSERT y REPLACE. (En Linux también Command y Buffer) :set noshowmode Desactiva la anterior. :set list Muestra los caracteres no imprimibles, TAB como ^I, final de línea como $. :set nolist Desactiva la anterior. :set number Muestra números de línea. :set nonumber Desactiva la anterior. Ejemplo de órdenes de la línea de comandos que usan los números de línea: :rango_origencolínea_destino Copiar. :rango_origenmlínea_destino Mover. :rangow fichero Grabar. El Rango se indica con el nº inicial y el final separados por una coma. :set wrapscan Por defecto búsquedas circulares. :set nowrapscan No realiza búsquedas circulares. :set ignorecase No diferencia entre mayúsculas y minúsculas. A efectos de búsquedas y reemplazos. :set noignorecase Desactiva la anterior. :set shiftwidth=n Sangrado izquierdo. ^T deja n espacios más. ^D quita n espacios al sangrado. No afecta a la tecla del tabulador, que inserta 8 espacios. El Sistema Operativo Unix - Linux 44
  • 46.
    :set autoindent En la nueva línea emplea el mismo margen izq. :set noautoindent Desactiva la anterior. :set wrapmargin=n Número de espacios del margen derecho. :set showcmd Muestra el comando de pantalla en la línea inferior mientras se escribe, al ejecutarse se borra. :set noshowcmd Desactiva la anterior. :set ruler En la línea de estado, muestra la línea y columna donde se encuentra el cursor. :set noruler Desactiva la anterior. Para recomponer la pantalla después de un mensaje u otra incidencia pulsar ^L, en modo comando. :set Muestra las opciones activas. :set all Muestra todos los posibles set. Estos comandos set se pueden utilizar en cualquier momento cuando se esta trabajando con vi, pero se pueden guardar en un fichero de configuración llamado ".exrc" (“.vimrc” para el editor vim) y automáticamente se cargaran al comenzar una sesión con vi. Estos ficheros se encuentran en el directorio home de cada usuario. Por ejemplo .exrc (.vimrc) puede contener: set showmode set number set autoindent set shiftwidth=4 set wrapmargin=5 Acceder al shell :!orden Ejecuta la orden y después de pulsar return regresa al vi. :sh Sale al sh y regresa al escribir exit o ^d. Abreviaturas :ab abreviada cadena_a_abreviar Pone una abreviatura a una cadena. :una abreviada Deshace la abreviatura. :ab Muestra las abreviaturas creadas. El Sistema Operativo Unix - Linux 45
  • 47.
    Búsquedas y reemplazos. /texto El cursor se desplaza a la línea de comandos. La búsqueda se realiza hacia el final del fichero. ?texto Ídem, pero hacia el principio del fichero. n Repite la última búsqueda. N Ídem pero cambiando el sentido. La búsqueda no se hará circular si empleamos :set nowrapscan. Se puede utilizar una expresión en lugar del texto. Caracteres con un significado especial dentro de las expresiones de búsqueda: . Cualquier carácter. ^ Debe de ser el primer carácter. Indica principio de línea. $ Indica final de línea. < Comienzo de palabra. > Final de palabra. [ ] Conjunto de caracteres. Ejemplos:[0-9], [^A-Z], [aeiou]. * Ninguna o más repeticiones del carácter anterior. Para que estos metacaracteres pierdan su significado se usa . También se pueden inhabilitar con :set nomagic. Reemplazos globales. :ámbitos/patrón1/patrón2/g ámbito n La línea número n. n1,n2 Rango de líneas. . Línea actual. $ Final de fichero. % Todo el fichero. s Es la orden. /patrón1 Lo que buscamos. /patrón2 Por lo que lo vamos a sustituir. Si no se especifica se borra la expresión buscada. /g En todas las ocurrencias de una línea. De no indicarse se reemplaza la primera ocurrencia de cada línea. El Sistema Operativo Unix - Linux 46
  • 48.
    Marcar texto. mletra Donde m es el comando (mark) marcar, y debe de ir seguido de una letra de la a a la z. Pone una señal invisible en la posición del cursor. Las marcas sirven para: Referirnos a la línea: 'letra (comilla simple). Referirnos al carácter: `letra (acento grave). Con las marcas podemos desplazarnos a determinados puntos, solo con teclearlas precedidas de ' o `. También se pueden utilizar para indicar el alcance en comandos como d, y, c. Así por ejemplo para borrar de la línea en curso hasta la que esta marcada con la letra a d'a. Los Búfers del VI Podemos distinguir 3 tipos de búfers: El búfer sin nombre o de proposito general. Que se usa automáticamente en las operaciones de cortar, copiar, pegar y cambiar. Los búfers numerados, que son nueve. Y contienen los nueve grupos de líneas borradas más recientemente con el comando d o x. Lo borrado más recientemente se almacena en el búfer nº 1. Se puede pegar su contenido en cualquier parte con el comando p o P. Utilizando la sintaxis “nºp. Los 26 búfers alfabéticos (de la a a la z). Se emplean en conjunción con las órdenes de cortar, copiar y pegar. Para ello se teclea precediendo la orden, comillas dobles y la letra del búfer, que se va a utilizar para depositar la información o tomarla de allí. Edición de múltiples ficheros. Cuando al invocar a vi se especifican varios ficheros (ya sea utilizando una lista o empleando metacaracteres). Se empieza editando el primero. :n Después de que ejecutemos :w (grabar) se pasa al siguiente. :n! :rew Después de :w pasa a editar el primero de la lista. :rew! :args Informa de los ficheros cargados. El Sistema Operativo Unix - Linux 47
  • 49.
    :e fichero Pasaa editar el nuevo fichero si se ha grabado el anterior. Aunque no se haya cargado inicialmente, no se verá con la orden “:args”. :e! fichero Ídem aunque no se haya grabado el anterior. :e# Regresa al fichero anterior. Mover texto de un fichero a otro. Utilizando los búfers alfabéticos. Ejemplo: "ay'z (extrae el texto desde la línea en curso hasta la marcada con z y las almacena en el búfer a. En otro fichero se pegará con la orden “ap. No se puede utilizar el búfer sin nombre, ni los numerados (en el vi estándar), pues estos se borran al pasar de un fichero a otro. Otra forma sería grabando el bloque en un fichero temporal: :nºLínea1, nºLínea2w fichero Graba el rango de líneas en el fichero indicado. :r fichero Inserta el fichero después de la línea en curso. Contamos con otros editores como: emacs, joe, nano, gedit,… El Sistema Operativo Unix - Linux 48
  • 50.
    Comunicación entre Usuarios Lo primero será averiguar información sobre los usuarios y los que están conectados finger Proporciona información sobre los usuarios conectados al sistema, o incluso no conectados si indicamos su nombre. La sintaxis es: finger [opc] [usuario...] [usuario@host...] Por defecto muestra la siguiente información sobre cada usuario comectado al host local: Nombre de conexión. Nombre completo del usuario. Nombre del terminal, si va precedido por un * no admite mensajes con write. Tiempo que lleva ocioso. Hora de conexión. Desde dónde se ha establecido la conexión. Si sólo queremos información del usuario user07 escribiremos: finger user07 En este caso la muestra aunque no esté conectado. who who [opciones] Con who podemos ver los usuarios conectados a nuestro sistema, además, nos muestra el terminal en el que están conectados y el tiempo de conexión. who imprime la siguiente información por cada usuario que actualmente está conectado al sistema: Nombre de la cuenta (login name). Terminal. Momento en el que se conectó. Nombre de ordenador remoto o terminal X. Si sólo queremos información sobre el usuario que ejecuta la orden escribiremos: who -m who am i w w [usuario] Nos da información sobre los usuarios que están conectados en el momento que se ejecuta el comando y sobre que están haciendo. También se puede indicar un usuario en concreto. Ejemplo: $w 4:59pm up 4:05, 3 users, load average: 0.00, 0.01, 0.01 USER TTY LOGIN@ IDLE JCPU PCPU WHAT El Sistema Operativo Unix - Linux 49
  • 51.
    paco tty1 12:54pm 4:04m 11.85s 0.03s startx cursolin tty3 4:59pm 7.00s 0.06s ? - paco pts/0 4:53pm 0.00s 0.08s 0.03s w En la primera línea nos informa de La hora actual. Cuánto lleva el sistema funcionando. Cuántos usuarios están conectados. Las cargas medias en los anteriores 1, 5 y 15 minutos. A continuación para cada usuario se muestra: Nombre de login, Nombre de tty. Tiempo de conexión. Tiempo inactivo. Jcpu, es el tiempo usado por todos los procesos bajo el terminal tty. Pcpu, es el tiempo usado por el proceso en curso. La línea de comando del proceso en curso. write write usuario [terminal] El comando write nos permite mandar un mensaje a otro usuario en tiempo real, es decir, el mensaje aparecerá inmediatamente en la pantalla del destinatario. Estos mensajes no se almacenan en ningún buzón. Por supuesto sólo nos vale si el destinatario está conectado, y además debe tener mesg en y. Supongamos que deseamos enviar un mensaje al usuario user07, y que tiene activa la recepción de mensajes, en ese caso escribiríamos write user07 Una vez escrito el texto que deseemos enviar como mensaje: Hola Pepito, que no se te olvide la cita. pulsaremos [Ctrl]+[d] y el mensaje será enviado. También podemos mantener comunicaciones bidireccionales tipo walkie-talkie. Para ello no se pulsa ^d, y el otro usuario debe de escribir la orden write con nuestro nombre, cada vez que pulsemos return, esa línea aparecerá en el terminal del otro ususario. wall wall [archivo] Si queremos enviar un mensaje, no a un solo usuario, sino a todos los usuarios conectados usaremos wall. El mensaje puede estar previamente contenido en un fichero, y para enviarlo escribiremos: wall < fichero.txt Es una utilidad para el administrador y sólo él puede escribir en los terminales de los usuarios que hayan denegado la recepción de mensajes. El Sistema Operativo Unix - Linux 50
  • 52.
    Mensaje del día. Es otra forma de comunicación, en este caso del administrador con los usuarios. Consiste en un pequeño mensaje o aviso que aparecerá en el terminal de cada usuario cuando este se conecte. El administrador colocará este mensaje en el fichero /etc/motd. Mensaje de preentrada Aparece justo antes de la línea que nos pide el nombre del usuario “login:”, cuando accedemos al sistema mediante acceso de consola. El administrador coloca el mensaje en el fichero /etc/issue. mail En el caso de que nuestro usuario no esté conectado, el mejor comando para comunicarnos con él es mail. Envio de mensajes El mensaje a enviar puede ser tecleado directamente o estar previamente contenido en un fichero. La sintaxis básica es: mail usuario(s) mail usuario(s) < fichero No admite metacaracteres. Si queremos enviar un mensaje a User07 escribiremos: mail User07 Subject: Cita Te recuerdo que tenemos una cita . Se nos pide el asunto y a continuación escribimos el texto, finalmente al principio de una nueva línea ponemos un punto (.) y pulsamos return. Cuando User07 se conecte al sistema, éste le avisará de que tiene un correo: Para enviar el contenido de un fichero: mail user07 < carta Algunas opciones de la línea de comando: De esta manera no solicita el asunto, si tenemos interés en indicarlo usaremos la opción -s: -s “cadena” Indicamos el asunto de la correspondencia. -c “Usuario(s)” Usuarios que recibirán una copia. -b “usuario(s)” Usuarios que recibirán una copia ciega (los demás no se enteran). En cualquiera de los dos formatos en lugar de poner un ususario podemos colocar una lista de destinatarios. Si queremos enviar un mensaje a un usuario de otra máquina escribiremos: $ mail usuario@nombre_maquina El Sistema Operativo Unix - Linux 51
  • 53.
    Lectura del correo. Entramos en el modo de lectura del correo electrónico simplemente escribiendo “mail” sin opciones ni argumentos. Al entrar muestra un resumen tabular de todos los mensajes existentes en nuestro fichero buzón “/usr/spool/mail/UserName” (en nuestro sistema “/var/mail/UserName”), esta información consiste en: Estado: N Mensajes nuevos. U No son nuevos, pero no han sido leidos. R Leidos en la actual sesión. P Preservados. leidos y almacenados en el buzón de entrada. D Marcados para ser eliminados. O Mensajes antiguos. * Guardados en otro archivo buzón. Nº de mensaje. Remitente. Fecha y hora de recepción. Nº de líneas / caracteres. Asunto. Finalmente aparece el prompt o inductor de mail, para que le indiquemos cual es la siguiente operación que vamos a realizar. Órdenes para ver mensajes: h Vuelve a visualizar las cabeceras de los mensajes. z+ z- Si la lista de cabecera es muy larga, avanza y retrocede pantalla. nº_mensaje Visualiza el mensaje. Intro Visualiza mensaje siguiente. + Visualiza el mensaje siguiente. - Visualiza el mensaje anterior. Eliminación y recuperación de mensajes. d nº_mensaje Marca para eliminar los mensajes indicados. q Sale de mail, elimina los marcados y guarda los leidos en mbox. x Sale de mail sin borrar los marcados. pre nº_mensaje Preserva los mensajes en el buzón de entrada aunque estén leidos. s nº_mensaje fichero Almacena los mensajes en el fichero incluida la cabecera. w nº_mensaje fichero Almacena los mensajes en el fichero sin cabecera. Configuración. mail posee un fichero de configuración llamado .mailrc, que es utilizado por mail cada vez que se ejecuta, en él podemos configurar muchas opciones: set asksub Solicita introducción de asunto. set askcc Solicita, antes de enviarlo, direcciones para copias. El Sistema Operativo Unix - Linux 52
  • 54.
    set prompt=”cad” Cambia el inductor de mail. set sign=”cad” Establece cadena de firma que se inserta con ~a. set folder=dir Establece directorio donde almacenar archivos buzón. set record=fich Guarda en el fich todo el correo que se cree o envie. set outfolder Pone el archivo “record” en el directorio “folder”. set MBOX=fich Establece el nombre para el fichero mbox. set MBOX=+fich Con el signo + lo coloca en el directorio “folder”. Otra utilidad del fichero de configuración es la de crear alias, un alias en mail es un nombre que se le da a un grupo de usuarios para mandarle el mismo correo a todos, ahorrándonos de esta forma tener que teclear el nombre de cada usuario individual. El formato es el siguiente: alias NombreAlias ListaUsuarios ejemplo: alias clase user01 user02 user03 user 04 user05 user06 user07 El Sistema Operativo Unix - Linux 53
  • 55.
    Empaquetar y ComprimirFicheros. Linux dispone de múltiples utilidades y programas para empaquetar y comprimir ficheros, desde el clásico compress hasta el más moderno bzip2. Sin embargo los más utilizados (hoy por hoy) son: tar para empaquetar gzip para comprimir tar Tar (Tape Archive, archivar en cinta) permite empaquetar o desempaquetar ficheros. El concepto de empaquetar aquí es el de meter varios ficheros y/o directorios en un solo fichero (paquete). Posteriormente podremos recuperar esa estructura de ficheros y directorios en el lugar donde queramos. Su sintaxis básica es: tar opciones [archivo.tar] [origen] Opciones: Se pueden combinar, siempre y cuando no indiquen acciones contrarias. Si especificamos varias se escriben juntas sin mediar espacios entre ellas. Tradicionalmente no se emplea el guión (-), que normalmente precede a las opciones en las órdenes Unix. c Crear un nuevo archivo tar (empaquetado). t Para mostrar el contenido de un paquete. x Para extraer archivos empaquetados, se pueden indicar ficheros individuales. r Añade el (los) fichero(s) especificado(s) al final del paquete. u Añade el (los) fichero(s), sólo si no están o son de fecha más reciente. Siempre se debe usar una de las opciones anteriores inmediatamente después de la orden tar. v Visualizamos la información en forma detallada. f Indica que el primer argumento, después de las opciones, es el nombre de un fichero tar o un dispositivo. Si se pone - , utiliza la entrada o salida estándar, de esta manera se puede usar con tuberías. M Para crear / desempaquetar paquetes que ocupen varios discos. z Filtrar el archivo a través de gzip (tanto para comprimir como descomprimir). Tendrán la extensión .tgz. j Linux. Comprime o descomprime con bzip2. Extensión .bz2. archivo.tar Nombre del archivo almacén. origen Nombre del directorio(s) / fichero(s) a empaquetar separados por espacios Supongamos que deseamos empaquetar dos ficheros llamados linux1.txt y linux2.txt, en un fichero tar de nombre linux.tar, escribiremos: tar -cvf linux.tar linux1.txt linux2.txt también podíamos escribir: tar -cvf linux.tar linux?.txt Para empaquetar todo el contenido del directorio “entrega”: tar -cvf entrega.tar entrega El Sistema Operativo Unix - Linux 54
  • 56.
    Si lo quedeseamos es desempaquetar un fichero tar, en vez de escribir la opción -c escribiremos -x, así para desempaquetar el contenido de la entrega anterior escribiremos: tar -xvf entrega.tar De esta manera se creará la estructura de subdirectorios que hubiese dentro de entrega. Si solamente queremos ver el contenido del fichero empaquetado (tar), ejecutaremos. tar -tvf entrega.tar Antes de extraer ficheros tar es importante conocer donde deben desempaquetarse los ficheros, y con qué tipo de trayectoria fueron empaquetados (absoluta o relativa), la opción -t nos informa de esto. Y así podremos crear los directorios apropiados y poner activo el directorio correspondiente. Uso de dispositivos En lugar de un fichero como contenedor para empaquetar los ficheros o directorios, podemos usar el nombre de un fichero dispositivo, /dev/fd0 para el primer disquete y /dev/rmt0 para la unidad de cinta. Para usar un disquete con tar, no requiere formato MSDOS ni SF Unix, sólo es necesario que el disco este formateado a bajo nivel, lo cual se consigue con: fdformat dispositivo Para el caso del disquete (A:) de 1,440 MB fdformat /dev/fd0H1440 Podemos usar tar para hacer copias de seguridad en varios discos (multivolumen), en ese caso la sintaxis sería: tar cvfM /dev/fd0 origen Hay que hacer notar que en este caso no se puede empaquetar y comprimir a la vez y que no podemos poner el guión delante de las opciones, no funciona. Para desempaquetar los discos así obtenidos tan sólo tendremos que introducir el primer disco, y sin montarlo, ejecutar: tar xvfM /dev/fd0 Se nos pedirán los disco uno a uno hasta que termine el proceso. gzip Gzip permite comprimir ficheros, la sintaxis básica es: gzip [opciones] fichero Reemplaza el fichero existente por su versión comprimida, añadiéndole al nombre la extensión “.gz”. Opciones: -v Comprime y muestra el nombre y porcentaje de reducción de cada fichero. -d Para descomprimir archivos. -t Para comprobar la integridad del fichero comprimido, si está bien no muestra nada, a no ser que la combinemos con la opción “-v”. -1 a -9 Nivel de compresión, el -1 indica menor ratio y mayor rapidez, el -9 daría como resultado un archivo más pequeño pero un mayor tiempo de compresión. El nivel por defecto es –6. -c Para que trabaje con la entrada / salida estándar. El Sistema Operativo Unix - Linux 55
  • 57.
    archivo Nombre del archivo a comprimir o descomprimir. Ya tenemos empaquetado nuestro archivo entrega y deseamos comprimirlo al máximo y verificar que todo está bien, usaremos: gzip -9 entrega.tar El resultado es el fichero entrega.tar.gz, si queremos comprobar la integridad del fichero escribiremos: gzip -tv entrega.tar.gz entrega.tar.gz: OK Si ahora queremos descomprimir este fichero tenemos dos posibilidades, bien usamos: gzip -d entrega.tar.gz Bien escribimos directamente gunzip entrega.tar.gz Y posteriormente habrá que desempaquetarlo. Los dos a la vez: tar y gzip Encadenando los dos comando mediante tuberías. tar cvf - /home/user07 | gzip -9c > backup.tar.gz gunzip -c backup.tar.gz | tar xv Se puede empaquetar y comprimir un directorio directamente sin tener que usar un comando tras otro, las dos posibilidades son: tar -czvf nombre_fichero.tar.gz origen tar -czvf nombre_fichero.tgz origen En ambos casos, la opción -z es la que señala que tenemos que comprimir. Las extensiones tar.gz y .tgz son equivalentes. También podemos descomprimir y desempaquetar un fichero tar.gz o un tgz usando sólo la orden tar, la sintaxis sería: tar -xzvf fichero.tar.gz zcat Visualiza ficheros comprimidos. compress, uncompress Los ficheros comprimidos con compress tienen extensión .Z, para comprimirlos se usa el programa compress y para descomprimirlos uncompress, es un formato no muy utilizado en este momento y, además la utilidad gunzip permite descomprimirlos. Así, para descomprimir un fichero comprimido con compress podemos usar: uncompress archivo.Z o bien gunzip archivo.Z bzip2, bunzip2 Para comprimir y descomprimir ficheros existen más herramientas que las ya comentadas pero la única que merece mención especial es bzip2. Prácticas: Crear un archivo .tar en vuestro directorio de trabajo. El Sistema Operativo Unix - Linux 56
  • 58.
    Añadirle ficheros, nuevosy modificados, usando distintos tipos de trayectorias.. Comprobar los ficheros que lo componen. Borrar los originales y recuperarlos del paquete. Realizar las operaciones anteriores con un disquete y una cinta. Sistema de Impresión. Órdenes relacionadas con la Impresión: lp, lpr, lpq, lprm lpstat, cancel, pr, lpc. La instalación y configuración de una impresora se tratará al hablar de las tareas del administrador. Un sistema Unix puede disponer de varias impresoras (caso de tener muchas se suelen organizar en grupos), siempre habrá una a la que se dirigirán los trabajos por defecto. Los trabajos que se mandan a la impresora se gestionan mediante un spooler o cola de impresión, al colocarse un trabajo en el spooler se le asigna un nº (request ID), mediante el cual será identificado hasta que termine de imprimirse o se retire de la cola. La impresión se realiza en 2º plano, de forma desatendida, de esta manera no compite con los procesos interactivos, pudiendo el usuario realizar cualquier otro trabajo inmediatamente después de mandar un documento a la impresora. Los ficheros que están en la cola se colocan normalmente en un directorio llamado /usr/spool/lpd, donde existe un directorio para cada impresora. La gestión de la cola de impresión la lleva a cabo el proceso lpd, que es un demonio, es decir, un proceso que no está asociado a ningún terminal. Mandar trabajos a la impresora Orden lpr Envía un trabajo a la cola de impresión. lpr [opc] fichero(s) Si el sistema tiene conectadas varias impresoras, es útil la siguiente opción para usar una distinta a la impresora por defecto. -P NombreImpresora (Line Printer) Impresora de líneas. lp [opc] [fichero(s)] Sin opciones envia los trabajos a la impresora por defecto, e imprime una página identificativa para cada trabajo. -d destino Impresora o grupo en la que debe de ejecutarse el trabajo. -nnº Nº de copias. -c Realiza una copia temporal del trabajo, para que en la impresión no influyan cambios posteriores. -t “título” Imprime un título, precediendo el trabajo en una hoja banner. -m Envía un correo al usuario al terminar de imprimir su trabajo. -s Suprime los mensajes por pantalla, “request id ...” El Sistema Operativo Unix - Linux 57
  • 59.
    -q nivel_prioridad El rango es desde 0 (máxima prioridad), hasta 25 (mínima prioridad). En Suse 1 mínima, 100 máxima, 50 por defecto. Puede recibir la información a imprimir mediante una tuberia, procedente de otro comando o con un redireccionamiento. Si no se le indica entrada o se especifica con un guión (-) se usa la entrada estándar. Directamente usando el fichero de dispositivo. Los ficheros de dispositivo de las impresoras, como los demás, se encuentran en el directorio /dev y su nombre comienza por lp seguido de un nº, así tenemos lp0, lp1 y lp2. lp0 se usa para el primer puerto paralelo, el normalmente usado por la impresora. En el directorio /dev/usb también contamos con 8 ficheros de dispositivo para la impresora. Se puede mandar información directamente a la impresora redirigiéndola a su fichero dispositivo, aunque esto no sea aconsejable. En nuestro sistema por defecto no se tienen permisos, salvo los usuarios que pertenezcan al grupo “lp”. cat fichero > /dev/lp0 ls –l > /dev/lp0 Control de la cola. Ver los trabajos de la cola. lpq [opc] Muestra el estado de la cola de impresión, los trabajos existentes y cuando se han eliminado de la cola de impresión. De las tareas en la cola nos dice: Owner/ID Class NºJob Files Size Time. -P NombreImpresora -l Listado largo, informa cuando ha sido impreso cada trabajo. Información sobre impresoras y la cola de impresión. lpstat [opc] [request ID] Sin argumentos nos informa sobre el estado de todos nuestros trabajos. -c Grupos de impresoras e impresoras de cada grupo. -d Impresora por defecto. -t Toda la información asociada al estado del sistema de impresión y al estado de la cola. -u “usuario(s)” Informa sobre las peticiones de esos usuarios. Eliminar trabajos de la cola. lprm [opc] IDTarea o UserID Elimina trabajos de la cola, bien sea indicando el ID del trabajo o el ID del usuario, en cuyo caso se eliminarán todos los trabajos que tenga en la cola. -P NombreImpresora Elimina todos los trabajos de la cola. El Sistema Operativo Unix - Linux 58
  • 60.
    - Un solo guión elimina todos los trabajos de impresión del usuario que ejecuta la orden. Si lo ejecuta el administrador, elimina todos los trabajos de todos los usuarios. Cancelar trabajos de impresión. cancel [impresora][request ID] request ID Elimina el trabajo de la cola. impresora Corta o cancela el trabajo que esté actualmente imprimiéndose. Administrar la impresión. lpc Permite comprobar el estado de las impresoras, activar y desactivar las impresoras, iniciar o detener la impresión de trabajos, así como reorganizar el orden de los trabajos en la cola de impresión. Esta orden muestra su propio prompt (lpc>) en el que admite sus propias órdenes, algunas de las más útiles son: status [all | printer] Visualiza el estado de los programas demonio y de las colas de impresión. start [all | printer] Activa la impresión iniciando un programa demonio para la cola. Es usado cuando por alguna condición anormal el servidor termina inesperadamente dejando trabajos en la cola. stop [all | printer] Detiene un programa demonio de “spooling”, una vez que haya terminado el trabajo en curso. enable [all | printer] Activa el “spooling” de las impresoras que se listan. Permite nuevos trabajos en la cola de impresión. disable [all | printer] Desactiva las colas de impresión y no se aceptan nuevos trabajos. topq printer JobId ... Pone los trabajos relacionados al principio de la cola. quit o exit Sale de lpc. ? o help Muestra una breve descripción de cada orden. El Sistema Operativo Unix - Linux 59
  • 61.
    Añadir el espacioSwap Para añadir una partición swap (asumiendo que /dev/hdb2 es la partición que quieres agregar): 1. Lo primero es saber cuanto de espacio de intercambio tienes, para ello ejecuta el comando (con la opción –m, muestra la información en MB): free –m 2. Inicia con un Live-CD. Desactiva el espacio swap del disco duro (si es que existe) con el comando swapoff. Crea la partición swap usando Gparted. Reinicia tu linux instalado. 3. Ahora que tienes la partición swap, usa el comando mkswap para configurar la partición swap. mkswap /dev/hdb2 Genera el UUID (Universally Unique Identifier), anótalo, se aconseja poner en “fstab” en lugar del dispositivo. 4. Para activar la partición swap inmediatamente, escribe el comando siguiente: swapon /dev/hdb2 5. Para activarlo cuando se arranca, edita /etc/fstab para incluir una de estas líneas: /dev/hdb2 none swap sw 0 0 UUID=… none swap sw 0 0 6. La próxima vez que se arranque el sistema, activará la nueva partición swap. El siguiente comando carga “sftab” sin necesidad de reiniciar mount -a 7. Asegúrate de que está activa usando alguno de los siguientes comandos. cat /proc/swaps free swapon –s
  • 62.
    Como obtener Ayudaen GNU/Linux 1. Introducción 2. Corriendo comandos 3. Obteniendo ayuda 4. El comando whatis y apropos 5. La opción --help 6. El comando man 6.1 Moviéndonos por las Páginas del man 7. El comando info 7.1 Moviéndonos por las Páginas de info 8. Otras opciones de ayuda Introducción El objetivo de este wiki, es conocer las diferentes maneras de obtener ayuda sobre sistemas basado en GNU/Linux. No importa la distribución que manejes, la forma de obtener la sintaxis, los parámetros y demás acciones de los diferentes comandos y/o forma de invocación. Daremos una revisión a la forma estándar de correr programas, así como también a las múltiples opciones de obtener ayuda e interpretarla. Corriendo Programas Los sistemas *nix, se han caracterizado por tener una línea de comandos altamente eficiente, y poderosa, para realizar cualquier tipo de procedimiento sobre ella. Antes de proceder, acerca de como obtener ayuda, es conveniente dar un acercamiento a la línea de comandos. La mayoría de los comandos, tienen una sintaxis parecida a la siguiente: comando opciones argumento Aunque actualmente muchos comandos permiten cambiar el orden entre los argumentos y las opciones, esta es la forma general y universal para cualquier sistemas *NIX. Las opciones modifican el comportamiento de los comandos y normalmente tienen la siguiente característica: • Opciones de una sola letra, están precedidas por un -, y es posible unirlas en una sola, por ejemplo: ls -l -h ls -lh • Opciones en forma de palabras, normalmente están precedidas por --, por ejemplo: ls --color=tty Los argumentos se refieren a los nombres de archivos y/o otros datos necesitados por el comando. Es posible poner múltiples comandos separando uno de otro a través del ; Obteniendo ayuda La línea de comandos es muy extensa, y dependiendo de la cantidad de paquetes instalados, podemos encontrarnos con miles de comandos y cada uno de estos con diferentes opciones que varían una y otra vez su comportamiento. La idea es como siempre no tratar de memorizar todo, sino comprender como funciona, y para entender esto, uno no esta solo. Existen diferentes niveles para la obtención de ayuda sobre las distintas utilidades del sistema, estos niveles incluyen: • El comando whatis y apropos
  • 63.
    La opción --help • Las paginas del manual • Las páginas info • La documentación incluida con el paquete • Los grandes foros como esdebian.org y Google El comando whatis y apropos Ambos comandos son usados para obtener un primer acercamiento hacia las utilidades de línea de comandos, pero desde diferentes perspectivas. whatis es usada para obtener una corta descripción de los comandos; esta descripción es obtenida desde una base de datos que es actualizada mediante cron. Para actualizar manualmente esta base, es necesario como root correr el comando: makewhatis. Como ejemplo, podemos citar: natas@pc-natas:~$ whatis dbus-monitor dbus-monitor (1) - debug probe to print message bus messages apropos es el comando que necesitamos cuando no conocemos el nombre del programa que nos proporciona tal o cual cualidad. Esto queda mas entendido con un ejemplo, imaginemos que queremos cambiarle el "password" a un usuario, sin embargo hemos tenido un ataque de amnesia temporal y hemos olvidado el comando para hacer esto, pues bien podemos hacer uso de apropos, para recordarlo: natas@pc-natas:~$ apropos password chage (1) - change user password expiry information chgpasswd (8) - update group passwords in batch mode chpasswd (8) - update passwords in batch mode expiry (1) - check and enforce password expiration policy grub-md5-crypt (8) - Encrypt a password in MD5 format login.defs (5) - shadow password suite configuration ophcrack (1) - a Microsoft Windows password cracker using rainbow tables. pam_cracklib (8) - PAM module to check the password against dictionary words pam_unix (8) - Module for traditional password authentication <strong>passwd (1) - change user password</strong> passwd (1ssl) - compute password hashes passwd (5) - the password file Como podemos observar, mediante este comando recordamos una vez más cual es el comando necesario. La opción --help La mayoría de los comandos, ofrecen una ayuda intuitiva y básica directamente sobre la terminal, esta ayuda es llamada con la opción --help. Una salida, común de esta opción es: natas@pc-natas:~$ sed --help Usage: sed [OPTION]... {script-only-if-no-other-script} [input- file]... -n, --quiet, --silent suppress automatic printing of pattern space -e script, --expression=script add the script to the commands to be executed -f script-file, --file=script-file add the contents of script-file to the commands to be
  • 64.
    executed -i[SUFFIX],--in-place[=SUFFIX] edit files in place (makes backup if extension supplied) -l N, --line-length=N specify the desired line-wrap length for the `l' command --posix disable all GNU extensions. -r, --regexp-extended use extended regular expressions in the script. -s, --separate consider files as separate rather than as a single continuous long stream. -u, --unbuffered load minimal amounts of data from the input files and flush the output buffers more often --help display this help and exit --version output version information and exit If no -e, --expression, -f, or --file option is given, then the first non-option argument is taken as the sed script to interpret. All remaining arguments are names of input files; if no input files are specified, then the standard input is read. La línea que comienza con usage es la que nos dice como se usa el comando, la forma de leer, este tipo de líneas, quedará aclarada con un ejemplo: • Los Argumentos encerrados en [] se consideran opcionales • Los Argumentos encerrados en <> o {}, se consideran variables, es decir pueden existir cero o mas veces. • El texto seguido por ..., representa una lista • El operador |, representa una operación de tipo or. El comando man Las conocidas páginas del manual de linux, proporcionan información autosuficiente y extensa sobre los comandos. Casi todas las utilerias, comandos y archivos de configuración mantienen una página del manual. Las páginas del manual, están organizadas en capítulos, donde cada capítulo específica la sección y tipo de información que proporciona, estos capítulos son: • Sección 1 Comandos Generales • Sección 2 Llamadas al sistema • Sección 3 Librerías de funciones (c/Perl/c++/etc) • Sección 4 Archivos especiales (normalmente los hospedados en /dev • Sección 5 Archivos de configuración • Sección 6 Juegos y ScreenSavers • Sección 7 Miscélanea • Sección 8 Comandos de administración del sistema y Demonios Moviéndonos por las Páginas del man En realidad los archivos de man, están creados con archivos que después son interpretados por groff y redireccionados a nuestro $PAGER (que puede ser less o more), por lo tanto la navegación sobre las páginas man, difiere segun el $PAGER que estemos usando, sin
  • 65.
    embargo usualmente ya no ser que modifiquemos las características, es less, que será el usado en este wiki. La navegación por las paginas del manual puede hacerse mediante las flechas del teclado, o con las teclas PageUp y PageDown. Para buscar una frase o palabra en específico podemos usar /texto a buscar, y para movernos a través de las coincidencias usamos n o N, segun nos movamos a la siguiente o anterior coincidencia respectivamente. Unas de las opciones de man mas usadas es : man -a passwd Nos entrega todas las paginas del manual de passwd (el comando, el archivo, etc) man 5 passwd Nos entrega la pagina del manual de archivo passwd (recordemos que la sección 5 es de archivos de configuración). El comando info El comando info es la siguiente generación de ayuda, y es usado generalmente cuando la información de man es o muy poca, o tanta que es dificil movernos por ella. Aunque, estaba planeado que esta utileria sustituyera a las páginas del man, en la actualidad son complementos uno de otra, puesto que en muchos casos, la información contenida en una, es la misma que en la otra. Moviéndonos por las Páginas de info El programa info tiene una interfaz navegable: muchas de las páginas tienen enlaces a otras páginas relacionadas, muy similar a como tienen las páginas web. Los enlaces se indican mediante un asterisco (*) seguido por el título del enlace, seguido por un doble dos puntos (::). Para seguir los enlaces, hay que situar el cursor sobre ellos y pulsar la tecla . Asímismo existen diferentes teclas para el movimiento sobre estas páginas: • La tecla de tabulador, nos mueve por entre los diferentes links • La navegación básica puede ser con las flechas o las teclas PageUp o PageDown • n/p/u Nos manda a la siguiente, anterior pagina, o nos sube un nodo, respectivamente hablando. • s texto a buscar Busca por el texto especificado, sino especificamos un texto busca la siguiente coincidencia del último texto buscado. • q salimos de las paginas info. Otras Opciones de Ayuda Finalmente podemos navegar en nuestro sistema de archivos hasta /usr/share/doc y buscar mas información como, changelogs, readmes especifícos de distribución, archivos de ejemplo, etc, de la aplicación y/o utilería que estemos estudiando. Por último, en caso de no encontrar lo que necesitamos podemos hacer uso de los grandes foros como EsDebian y páginas de búsqueda donde seguramente encontraremos lo que necesitamos.
  • 66.
    Lista de comandosde GNU/Linux (I) Recopilación de comandos Debian GNU/Linux Índice: 1. Prólogo 2. Trabajo con ficheros 2.1. Varios 2.2. Imprimiendo 2.3. Nano 2.4. Formatos 2.5. Compresión 2.6. Comodines 2.7. Alias 2.8. Entrada/Salida 2.9. Renombrado 2.10. Mtools 3. Gráficos 4. Multimedia 4.1. Imágenes 4.2. Grabación de CDs 4.3. Grabación de DVDs 4.4. Ripeo de CD-AUDIO 4.5. Conversiones 4.6. Otros 4.7. Reproducción 5. Sistema 5.1. Varios 5.2. Memoria y procesos 5.3. Disco duro 5.4. Entorno 5.5. Instalación de software 6. Recuperación del sistema 6.1. Usando Knoppix live 6.2. Disquete de arranque
  • 67.
    6.3. Copiando elMBS 6.4. Copiando el VBS 7. Kernel,logs,hardware... 8. Redes 9. Otros 9.1. Mldonkey 9.2. Mutella 9.3. FTP 9.4. IRC 9.5. Calculadora 9.6. Promps PRÓLOGO Los datos están cogidos de los artículos: http://www.esdebian.org/articulos/24063/lista-comandos-gnulinux-i http://www.esdebian.org/articulos/24062/lista-comandos-gnulinux-ii http://www.esdebian.org/articulos/24070/lista-comandos-gnulinux-iii TRABAJO CON FICHEROS Varios mc Explorador de archivos que incluye su propio editor,mcedit. mcedit Editor de texto incluído en mc. ls Lista los ficheros de un directorio concreto.
  • 68.
    1. ls -l Lista también las propiedades y atributos. 2. ls -la Lista ficheros incluidos los ocultos de sistema. 3. ls -la | more Lista los ficheros de un directorio de forma paginada. 4. ls -lh Lista ficheros especificando la unidad de tamaño (Kilobyte, Megabyte, Gigabyte). 5. ls -l | grep ^d Lista sólo los directorios 1. ls -d */ Este último comando también lista solamente directorios: sin concatenar comandos, de una forma más sencilla y respetando el color definido que se tiene en Bash para los directorios. cat -n fichero Muestra el contenido de un fichero.(-n lo numera) pr -t fichero Muestra el contenido de un fichero de manera formateada.Ver imprimiendo. cat fichero | less cat fichero | lmore more fichero less fichero Muestra el contenido de un fichero de forma paginada. zcat fichero zmore fichero zless fichero Muestra el contenido de un fichero comprimido (.gz) echo cadena echo nos muestra en pantalla,el texto que le siga.
  • 69.
    grep 'cadena' archivo Muestralas líneas del archivo que contienen la cadena. stat fichero Muestra el estado de un fichero. 1. stat -f fichero Muestra el estado del sistema de ficheros. file fichero Muestra de qué tipo es un fichero. tail archivo Muestra las últimas líneas de un archivo, 10 por defecto. 1. tail -n 12 archivo Muestra las 12 últimas líneas del archivo. 2. tail -f archivo Muestra las últimas líneas del archivo, actualizándolo a medida que se van añadiendo. Útil para controlar logs. head archivo Muestra las primeras líneas de un archivo, 10 por defecto. Admite opción -n igual que el comando tail. find /usr -name lilo -print Busca todos los ficheros con nombre lilo en /usr. find /home/paco -name *.jpg -print ---------- ---------- ----- | | | V V `---->muestra la ruta completa del fichero encontrado ruta patrón de búsqueda Busca todas las imágenes .jpg en /home/paco. find -maxdepth 1 -regex ".*/[^./]*" -type f Lista ficheros sin punto en el directoria actual.
  • 70.
    whereis ejecutable Busca ejecutables(ejemplo:whereis find) type comando Muestra la ubicación del comando indicado. Si es un comando interno del shell mostrará algo así como:comando is a shell builtin. pwd Visualiza el directorio actual. history Muestra el listado de comandos usados por el usuario (~/.bash_history) fc -l Muestra el listado de los últimos comandos ejecutados. eject cdrom0 Abre la bandeja del cdrom. 1. eject -t cdrom0 Cierra la bandeja del cdrom. cd nom_directorio Cambia de directorio 1. cd .. Vuelves al anterior. 2. cd .mozilla Entras al de mozilla.(por la puerta grande) 3. cd ./.mozilla Entras al de mozilla (indicando la ruta relativa) 4. cd /home/paco/.mozilla Entras al de mozilla.(indicando la ruta completa)
  • 71.
    cp -dpR fichero1ruta_fichero2 Realiza una copia del fichero1 a ruta_fichero2,cambiándole el nombre. cp -dpR fichero1 /directorio Copia fichero1 a directorio,conservando fichero1 el nombre. 1. -R Copia un directorio recursivamente,salvo los ficheros especiales. 2. -p Copia preservando permisos,propietario,grupos y fechas. 3. -d Conserva los enlaces simbólicos como tales y preserva las relaciones de los duros. 4. -a Lo mismo que -dpR . mv ruta_fichero1 ruta_fichero2 Mueve y/o renombra ficheros o directorios. mkdir nom_directorio Crea un directorio. rmdir nom_directorio Elimina un directorio(tiene que estar vacío). rm archivo Elimina archivos . 1. rm -r directorio Borra los ficheros de un directorio recursivamente.Quietorrrrrrr... 2. rm *.jpg Borra todos los ficheros .jpg del directorio actual.
  • 72.
    ln ruta_fichero ruta_enlace Creaun enlace duro (con el mismo inodo,es decir mismo fichero con distintos nombres) ln -s ruta_directorio ruta_enlace Crea un enlace simbólico (con diferente inodo,es decir se crea un nuevo fichero que apunta al "apuntado",permitiendo enlazar con directorios y con ficheros de otro sistema de archivos) diff [opciones] fichero1 fichero2 Compara ficheros. 1. diff -w fichero1 fichero2 Descarta espacio en blanco cuando compara líneas. 2. diff -q fichero1 fichero2 Informa sólo de si los ficheros difieren,no de los detalles de las diferencias. 3. diff -y fichero1 fichero2 Muestra la salida a dos columnas. join [opciones] fichero1 fichero2 Muestra las líneas coincidentes entre fichero1 y fichero2. wc fichero Muestra el nº de palabras,líneas y caracteres de un archivo. wc -c fichero Muestra el tamaño en bytes de un fichero. touch [-am][-t] fichero Cambia las fechas de acceso (-a) y/o modificación (-m) de un archivo. 1. touch -am fichero A la fecha actual.Si no existiese el fichero,se crearía. 2. touch -am -t 0604031433.30 fich AAMMDDhhmm.ss ------- Si no se especifican los segundos,tomaría 0 como valor.
  • 73.
    A la fechaespecificada.Si no existiese el fichero,se crearía. 3. touch fichero Usado sin opciones crearía un fichero con la fecha actual. split -b 1445640 mozart.ogg mozart ---------- ------- | V | nombre elegido para las partes,por defecto x V tamaño en bytes de cada parte Partir un archivo cat mozart.* > mozart.ogg Unir las distintas partes de un fichero cortado con split. chown [-R] usuario fichero Cambia el propietario de un fichero o directorio. chgrp [-R] grupo fichero Cambia el grupo de un fichero o directorio. chmod [-R][ugo][+/- rwxs] fichero Cambia los permisos de acceso de un fichero +: da permisos -: quita permisos u: propietario R: recursivo g: grupo r: lectura ejemplo: chmod +x fichero, es lo mismo que: chmod a+x fichero o: otros w: escritura explicación: a es la opción por defecto. a: todos x: ejecución s: los atributos suid y sgid,otorgan a un "fichero" los permisos de su dueño o grupo respectivamente,cada vez que se ejecute,sea quien sea el que lo ejecute. Ejemplo: chmod +s /usr/bin/cdrecord Cómo afectan los permisos a los directorios: r permite ver su contenido(no el de sus ficheros) w permite añadir o eliminar ficheros (no modificarlos) x permite acceder al directorio. Método absoluto de determinar los permisos: chmod 760 fichero explicación: dueño grupo otros ------------ ----- ----- -----
  • 74.
    asci r w x r w - - - - binario 1 1 1 1 1 0 0 0 0 octal 7 6 0 paso de asci r w x r w - - - - activar=1 a binario 1 1 1 1 1 0 0 0 0 desactivar=0 paso de 1 1 1 1 1 0 0 0 0 r activado=4 binario 4+2+1 4+2+0 0+0+0 w activado=2 a octal 7 6 0 x activado=1 umask nnn Establece qué permisos serán deshabilitados para los archivos nuevos. umask Muestra la configuración actual de umask(normalmente 022) umask 000 Deshabilita ninguno,es decir los activa todos. Atención,que la cosa manda huevos: umask 0 2 2 = chmod 7 5 5 umask 0 0 0 = chmod 7 7 7 | umask --- -w- -w- = chmod rwx r-x r-x umask --- --- --- = chmod rwx r-x r-x Una manera rápida de averiguar los permisos partiendo de umask es aplicando la siguiente resta: 777-022=755 para el primer caso y 777-000=777 para el segundo. Cuando umask es 022,los permisos normales de un directorio son 755 (rwx r-x r-x) producto de la resta 777-022.Sin embargo los de un fichero son 644 (rw- r-- r--).Ésto es así porque se considera que lo normal para un fichero es que no sea ejecutable de manera que la resta para averiguar los permisos de un fichero sería 666-022=644 Si escribo en una consola umask 000 y a continuación "mkdir nuevodirectorio",éste tendrá todos los pemisos: rwx rwx rwx (777) pero ¿y los ficheros que creemos dentro de dicho directorio? pues éstos tendrán los permisos : rw- rw- rw- (666) resultado de la resta 666-000=666 ¿Os aclarais?... yo tamp Para que la máscara de permisos permanezca de una sesión a otra tienes que ponerla en el .bash_profile de tu home.
  • 75.
    Imprimiendo lpr fichero Añade undocumento a la cola de impresión. lpr -P "nombre_impresora" fichero Se especifica la impresora a la que queremos mandar el fichero a imprimir lpr -#3 fichero Realiza 3 copias del fichero. lpr -P "hp" -o page-set=odd fichero Imprime sólo las páginas impares del fichero que hemos mandado a la impresora "hp" lpr -o page-ranges=7-49 fichero Imprime el intervalo de páginas 7-49 del documento lpr fichero Añade un documento a la cola de impresión. lpq Muestra los documentos en cola. lprm Cancela la impresión del documento activo. lprm 3 Cancela la impresión del trabajo nº 3. pr +2 l70 -w 80 -h "Comandos" fichero Preprocesador de impresión para formatear un archivo de texto. -l70 Establece la longitud de la página de 70 lineas (66 por defecto). -w 80 Establece el ancho de linea en 80 caracteres()72 por defecto).
  • 76.
    -h "Comandos" Establece "Comandos"como cabecera de cada página. +2 Imprime a partir de la página 2. -t No imprimiría cabeceras ni pies de página. pr l70 -d comandos.txt | lpr Una vez formateado el documento lo manda a la cola. Nano nano fichero Leer,crear,editar un fichero de texto. M = Esc/Alt | | Ctrl + g ----------- Invocar el menú de ayuda. Ctrl + x ----------- Salir de nano. Ctrl + o ----------- Escribir el fichero actual a disco. Ctrl + r ----------- Insertar otro fichero en el actual. Ctrl + w ----------- Buscar un texto en el editor. Ctrl + y ----------- Moverse a la página anterior. Ctrl + v ----------- Moverse a la página siguiente. Ctrl + k ----------- Cortar la línea actual y guardarla en el cutbuffer. Ctrl + u ----------- Pegar el cutbuffer en la línea actual. Ctrl + l ----------- Redibujar la pantalla actual. Ctrl + j ----------- Justificar el párrafo actual. Ctrl + m ----------- Insertar un retorno de carro en la posición del cursor. Ctrl + _ ----------- Ir a un número de línea en concreto. M + g -------------- Ir a un número de línea en concreto. M + i -------------- Auto indentar habilitar/deshabilitar. M + x -------------- Modo ayuda habilitar/deshabilitar. M + p -------------- Modo Pico habilitar/deshabilitar. M + m -------------- Soporte para ratón habilitar/deshabilitar. M + r -------------- Reemplazar texto en el editor. M + e -------------- Expresiones regulares habilitar/deshabilitar. M + b -------------- Respaldar ficheros habilitar/deshabilitar. M + s -------------- Desplazamiento suave habilitar/deshabilitar. M + h -------------- Tecla 'smart home' habilitar/deshabilitar.
  • 77.
    M + y-------------- Coloreado de sintaxis habilitar/deshabilitar. M + p -------------- Mostrar blancos habilitar/deshabilitar. Formatos [w3m,lynx,links,links2,elinks] fichero.html Visualizan ficheros html. tidy fichero.html Analiza el código de un documento html. tidy -m fichero.html Corrige,modificándolo,el código del fichero html. tidy -m -asxml fichero.html Convierte un html a xml. tidy -m -asxhtml fichero.html Convierte un html a xhtml. tidy -m -ashtml fichero.xhtml Convierte un xhtml a html. pstotext fichero.ps | less Visualiza ficheros ps. pstotext fichero.pdf | less Visualiza ficheros pdf. pdftops fichero.pdf fichero.ps Convierte un fichero pdf a ps. pdftotext -layout fich.pdf fich.txt Convierte un fichero pdf a texto. pdftotext -layout -htmlmeta fich.pdf fich.html
  • 78.
    Convierte un ficheropdf a html. htmldoc fich1.html fich2.html -f unidos.html Une varios ficheros html en uno solo. htmldoc --webpage fich1.html fich2.html -f suma.pdf Convierte o une varios html en un pdf. htmldoc --webpage fich1.html fich2.html -f suma.ps Convierte o une varios html en un ps. links2 fichero.html -> guardar con formato Convierte un fichero html a texto. antiword fichero.doc | less Visualiza un fichero doc. antiword -p folio fichero.doc > fichero.ps Convierte un fichero doc a ps con tamaño folio. antiword -t -w 30 fichero.doc > fichero.txt Convierte un fichero doc a texto. -p también puede ser a3,a4,a5,b4,etc -w anchura de la linea en caracteres Notas: pdftotext y pdftops vienen en el paquete xpdf-utils. tidy se guía por el estándar de la W3C. la opción -layout hace que el documento de texto conserve lo mejor posible la disposición fisica del documento pdf:columnas,saltos de linea,etc links2 convierte un html a texto,conservando totalmente la disposición física del documento html. Empaquetado y compresión 7z a fichero.7z fichero Comprimir. 7z e fichero_comprimido
  • 79.
    Descomprimir. 7z x fichero_comprimido-o ruta_de_destino Extraer donde indicamos. 7z l fichero_comprimido Ver contenido. 7z t fichero_comprimido Chequea el contenido. Notas sobre 7zip Comprime en formato 7z, zip, gzip, bzip2 y tar. Si es un directorio lo hace recursivamente sin emplear la opción -r Con -t{tipo de fichero} tras las opción "a" elegimos el formato de compresión: 7z a -tgzip fichero.gz fichero Con -p protegemos con una contraseña el fichero: 7z a -tgzip -p fichero.gz fichero Para comprimir más de un archivo gz o bz2 antes hay que empaquetarlos en formato tar: 1º) 7z a -ttar prueba.tar *.txt 2º) 7z a -tgzip prueba.tgz prueba.tar El formato 7z no guarda el dueño o grupo de un fichero por lo que | | no es recomendable para copias de seguridad. Es capaz de descomprimir zip,rar,gz,bz2,tar,cab,arj,cpio,deb,rpm aunque para rar necesita del paquete 7zip-rar zip -r fichero.zip fichero ;ejemplo: zip -r sinatra.zip ./sinatra/ Comprimir zip. unzip archivo.zip Descomprimir zip. unzip -v archivo.zip Ver contenido zip. unrar e -r archivo.rar (e extrae en el directorio actual)
  • 80.
    Descomprimir rar. unrar x-r archivo.rar directorio de destino (x extrae donde se indique) Descomprimir rar. unrar v archivo.rar Ver contenido rar. gzip -r fichero ; ejemplo: gzip -r ./sinatra Comprimir gz. gzip -d fichero.gz Descomprimir gz. gzip -c fichero.gz Ver contenido gz. bzip2 fichero ; ejemplo: bzip2 ./sinatra/*.ogg Comprimir bz2. bzip2 -d fichero.bz2 Descomprimir bz2. bzip2 -c fichero.bz2 NOTA: r equivale en todos los casos a recursivo Mientras que zip comprime y empaqueta,gzip ó bzip2 sólo comprimen ficheros,no directorios,para eso existe tar. Ficheros tar tar -vcf archivo.tar /fichero1 /fichero2 ...(fichero puede ser directorio) Empaquetar. tar -vxf archivo.tar Desempaquetar. tar -vtf archivo.tar Ver contenido.
  • 81.
    Para comprimir variosficheros y empaquetarlos en un solo archivo hay que combinar el tar y el gzip o el bzip2 de la siguiente manera: Ficheros tar.gz (tgz) tar -zvcf archivo.tgz directorio Empaquetar y comprimir. tar -zvxf archivo.tgz Desempaquetar y descomprimir. tar -zvtf archivo.tgz Ver contenido. Ficheros tar.bz2 (tbz2) tar -jvcf archivo.tbz2 directorio Empaquetar y comprimir. tar -jvxf archivo.tbz2 Desempaquetar y descomprimir. tar -jvtf archivo.tbz2 Ver contenido. Opciones de tar: -c : crea un nuevo archivo. -f : cuando se usa con la opción -c,usa el nombre del fichero especificado para la creación del fichero tar cuando se usa con la opción -x,retira del archivo el fichero especificado. -t : muestra la lista de los ficheros que se encuentran en el fichero tar -v : muestra el proceso de archivo de los ficheros. -x : extrae los ficheros de un archivo. -z : comprime el fichero tar con gzip. -j : comprime el fichero tar con bzip2. Comodines (~) Sustituye el directorio home de manera que:
  • 82.
    ~/comandos.txt equivale a/home/paco/comandos.txt (si estamos en nuestro propio directorio) ~pepe/comandos.txt equivale a /home/pepe/comandos.txt (pepe es otro usuario) (?) Sustituye un solo caracter.Ejemplos: ls p?pe mostraría todos los ficheros cuyos 1º 3º y 4º caracteres fuesen p,p y e ls ?epe mostraría todos los ficheros de 4 caracteres y acabados en epe (*) Sustituye cualquier sucesión de caracteres.Ejemplos: ls .ba* muestra todos los directorios o ficheros que comiencen con .ba ls .* muestra todos los archivos ocultos. rm -r * otra manera de desinstalar el sistema operativo. rm *.jpg borra todas las imágenes jpg oggdec *.ogg pasa de ogg a wav todos los ogg del directorio en el que estamos. (;) Puesto entre dos comandos hace que tras el primero se ejecute el segundo.Ejemplos: nano nuevo.txt ; cat nuevo.txt nos abrirá el editor nano para que escribamos lo que queramos en un nuevo archivo que se llamará nuevo.txt y tras guardar y salir del editor,cat nos mostrará el contenido de lo que acabamos de crear. sleep 5m ; xmms canción.mp3 tras 5 minutos se iniciará el xmms (ver más abajo) Alias
  • 83.
    Es el moteque se le pone a un comando,de manera que la próxima vez que queramos ejecutarlo basta con llamarlo por su mote.Escribiendo alias sin parámetos nos aparecen la lista de alias que tenemos. Ejemplos: • Si ejecuto: alias rm='mv --target-directory=/home/paco/.papelera_rm' le he puesto el mote rm a mv --target-directory=/home/paco/.papelera_rm Así la próxima vez que borre algo con rm, irá a parar al directorio .papelera_rm Pero si lo escribo así: rm loquesea el alias será ignorado. • Otro: alias cdrip='cdda2wav -B -D /dev/hdd -s -x' cada vez que escriba en una consola cdrip me ripeará el CD que tenga en /dev/hdd Para que los alias permanezcan de una sesión a otra hay que ponerlos en el archivo /home/.bashrc nota1:el mote y el comando al que sustituye bien pegaditos al signo igual. nota2:el comando entre comillas simples. Conceptos de entrada -salida (I/O)(E/S) stdin entrada estandar para datos,el teclado (0) stdout salida estandar para los programas,la pantalla (1) stderr salida estandar para los mensajes de error,la pantalla (2) Redirecciones,un redireccionador redirige la salida de un comando a un fichero (<) comando < fichero
  • 84.
    (>) Su sintaxix sueleser: comando > fichero (>>) comando >> fichero Ejemplos: dpkg --get-selections > programas_instalados.txt En vez de mostrar la salida por pantalla, nos la vuelca al fichero programas_instalados.txt Si ese fichero ya existía ha sido sobreescrito su contenido,pero si usamos >> no borrará nada y añadira su salida al final del fichero.Otro ejemplo con echo: echo "fin de la lista de programas instalados" >> programas_instalados.txt en vez de mostrar en pantalla el texto,lo añade al final del fichero programas_instalados.txt Para despistar los de Unix se han inventado el mismo caracter pero al revés: cat < programas_instalados.txt en donde programas_instalados hace,no de salida sino de entrada para cat el cual lo muestra en pantalla ,ya que la salida natural de cat es la estandar,stdout o pantalla Si queremos que la salida de error no aparezca en pantalla sino que vaya a un archivo de texto: comando 2> fichero.txt ejemplo: xmms 2> error_xmms.txt Tuberías,Una tubería hace que la salida de un programa sea la entrada de otro. (|) Su sintaxis suele ser: comando | comando Ejemplos: cat programas_instalados.txt | grep mozilla Aquí le hemos cambiado la salida natural a cat y se la hemos mandado a grep para que busque la palabra mozilla dentro del fichero programas_instalados.txt pr l70 -d comandos.txt | lpr Una vez formateado el documento (pr) lo manda a la cola (lpr)
  • 85.
    Renombrando mp3rename opciones *.mp3 Renombraficheros mp3 basándose en las etiquetas incluidas en los mp3 (id3tags) Opciones: -i Sólo muestra los id3 de los ficheros. -p pone un cero al track cuando es menor que 10. -s Se usa para configurar las opciones por defecto,las cuales quedarian definidas en el fichero ~/.mp3rename &t título &b album &a artista Hay que usarlas entrecomilladas para que no sean interpretadas por el shell &y año &k pista Ejemplos: 1. mp3rename -s '&a_&t' establecería artista_título como predeterminadas de manera que 2. mp3rename *.mp3 renombrará los mp3 como: "artista_título.mp3" rename Script de Perl que sirve para renombrar ficheros usando expresiones de Perl rename 'y/A-Z/a-z/' *.zip Cambiamos todas las mayúsculas a minúsculas(en este caso en el nombre de los .zip) rename 'y/ /_/' *.jpg Renombramos el espacio en blanco por _ (en este caso en el nombre de los .jpg) rename 's/expresión //' *.mp3 Eliminamos una expresion en el nombre de todos los .mp3 del directorio actual. rename 's/M.Oldfield//' *.mp3 quitaría "M.Oldfield" del nombre en todos los mp3 | mrename 'ruta_fich.' prefijo opción
  • 86.
    Añade un prefijoal nombre de los ficheros. Opciones: -c Copia los ficheros con un nuevo nombre. -m Los renombra. Ejemplo: 1. cd/ruta a los ficheros debe ejecutarse en el directorio en donde se encuentren. 2. mrename '*.jpg' boda -m añadiría boda a los nombres de los jpg mmv ";*.original" "#1#2.nuevo" Comando para cambiar el sufijo del nombre de los archivos.En su sintaxis #1 sustituye a la primera expresión regular(;) y #2 a la segunda(*).Aunque con este comando el(;) representa cualquier subdirectorio y es la forma de darle recursividad a la acción. Ejemplos: 1. mmv "*.cbz" "#1.zip" Renombraría todos los cbz a zip,conservandose el nombre que precede a .cbz 2. mmv ";*.cbz" "#1#2.zip" Renombraría todos los cbz a zip en el directorio actual y sus subdirectorios Mtools Colección de herramientas que permite acceder y manipular ficheros de MS-DOS sin necesidad de un montaje previo. El uso de comodines refiriéndose a archivos del disquete requiere que los nombres se entrecomillen para que no sean interpretados por el shell sino por herramientas de mtools.Más información:"info mtools" minfo unidad: Muestra información sobre el sistema de archivos MS-DOS de una unidad (a:) mformat a: Formatea un disquete,donde "a:" es "dev/fd0"
  • 87.
    mbadblocks a: Se empleatras formatear para buscar errores. mcd [a:] Informa del directorio MS-DOS en curso o bién cambiamos a uno. mdir -a a: Muestra el contenido de un directorio MS-DOS. mcopy Copia de ficheros MS-DOS a/o desde Unix. mcopy "a:directorio/*" copiaría el contenido de "a:directorio/*" al directorio en curso. mcopy "a:directorio/*" ~/disquete copiaría el contenido de "a:directorio/*" al directorio "disquete". mcopy *.txt a:bill copiaría al directorio "bill" del disquete todos los .txt. mmd a:nuevo_directorio Crea un directorio MS-DOS mdel "a:bill/*.txt" Elimina un fichero MS-DOS. mrd a:bill Elimina un directorio MS-DOS mdeltree a:bill Elimina recursivamente un directorio MS-DOS mren "a:direct1/*.txt" a:direct2 Mueve o renombra ficheros MS-DOS mmove a:directorio1 a:directorio2 Mueve o renombra ficheros o subdirectorios MS-DOS Comandos relacionados:
  • 88.
    mkfs.msdos /dev/fd0 Formatea enformato msdos un disquete. fdformat /dev/fd0 Formatea en formato msdos un disquete y después verifica el formateo. GRÁFICOS glxinfo Información sobre la biblioteca gráfica OpenGL y su extensión GLX para X-Window direct rendering: YES = Salida de glxinfo que nos indica si tenemos activada la aceleración 3D. showrgb lista los colores reconocidos por el sistema y su valor RGB. bsdgames Colección de juegos para consola. sl Tren pasando. apt-get moo La supervaca del apt -----------> cowsay muuuuu Una vaca hablando en su idioma cowthink -p ¿¿muuuuu?? Una vaca pensando. * cowsay -f tux hola Tux saludando.Ver /usr/share/cowsay/cows. (__) (oo) /------ /
  • 89.
    / | || /---/ banner[texto] Muestra un cartel en pantalla. figlet [opciones] [texto] Derivado del anterior pero más versatil.También se puede usar de forma interactiva. -w valor ------------------------- Indicamos la anchura del texto,el valor por defecto es 80 -t ------------------------------- La salida se mostrará en su máxima anchura. -c ------------------------------- La salida se mostrará centrada. -f tipo -------------------------- Indicamos la tipografía de la salida.Ver /usr/share/figlet/fichero.flf small,shadow,mini,etc. Podemos indicar la ruta donde buscará las fuentes: figlet -f ~/fuentes/konto Ejemplo: #figlet -f small texto _ _ | |_ _____ _| |_ ___ | _/ -_) / _/ _ _____/_______/ xwd -root -screen > pantalla.xwd Capturar la pantalla. sleep 5 ; xwd -root -screen > pantalla.xwd Capturar la pantallas tras 5 segundos. xwd > ventana.xwd Capturar una ventana. import -window root pantalla.ps (también jpg,png,gif,etc) Capturar la pantalla en cualquier formato. sleep 5s ; import -window root pantalla.png Capturar la pantalla tras 5 segundos. import -window - ventana.jpg Capturar una ventana en cualquier formato. xwud -in pantalla.xwd Ver imágenes en formato xwd.
  • 90.
    display imagen.xwd Visualizar imágenes(incluídas las xwd). animate remero.gif (también admite delay) Visualizar gif animados. ascii/color cacaview imagen.jpg (también png,gif,etc) ascii asciiview imagen.jpg (también png,gif,etc) Visualizar imágenes en consola. identify imagen.gif Ver las propiedades de una imagen. pdfimages fichero.pdf nombre_para_las_imágenes: pdfimages Xmen.pdf xmen Extraer las imágenes de un pdf convert fichero.pdf nombre_y_formato_imágenes:convert fichero.pdf imagen.png Extraer las imágenes de un pdf convert *.jpg catálogo.pdf Crear un catálogo pdf con imágenes. display "vid:*.jpg" Crear un índice gráfico con miniaturas. convert imágen_color.jpg -monochrome imágen_b/n.jpg Convertir una imagen a blanco y negro. convert imagen_original.ppm imagen_nueva.jpg Cambiar el formato de UNA imagen. convert -sample 100x50 imagen_original.jpg imagen_nueva.jpg Cambiar las dimensiones de UNA imagen. mogrify -format jpg *.ppm (convierte a .jpg todas las imágenes .ppm) Cambiar el formato de VARIAS imágenes.
  • 91.
    mogrify -format png-sample 20%x20% *.jpg Crear miniaturas de VARIAS imágenes. Miniaturiza nuestras imágenes jpg cambiándoles el formato. ATENCIÓN porque de no cambiárselo nos eliminaría las originales convert -delay 15 imag1.jpg imag2.jpg imag3.jpg remero.gif Crear un gif animado con varios jpg. -delay 15 Pausa entre imágenes (centésimas de segundo). convert remero.gif -adjoin remeros.jpg Extraer los fotogramas de un gif animado. Añadir texto a una imagen : columna_ _fil a | | convert -font courier -fill yellow -pointsize 25 -draw 'text 100,250 remeros' imagen.jpg imagen_con_txt.jpg ----- ----- ------------ ------------------ ------- | | | posición del texto | V V V v fuente color de fuente tamaño de la fuente |texto |si éste tuviese más de una palabra |habría que ponerlo entre dobles comillas Notas: xwd viene en el paquete xbase-clients. pdfimages viene en el paquete xpdf-utils. las cacas viene en el paquete caca-utils. asciiview viene en el paquete aview aafire viene en el paquete libaa-bin convert,animate,identify,mogrify import y display vienen en el paquete imagemagick libaa es una libreria que nos permite ver las imágenes,incluso las animadas,mediante caracteres ascii. libcaca permite lo mismo que libaa pero en color- MULTIMEDIA
  • 92.
    Adaptado para unkernel 2.4.26 con emulación SCSI con la nomenclatura : #cdrecord -scanbus: 0,0,0 0) '_NEC ' 'DVD_RW ND-2500A ' grabadora /dev/sr0 0,1,0 1) 'HL-DT-ST' 'DVD-ROM GDR8162B' lector /dev/sr1 Nota: Salvo cdrecord y dvdrecord los demás se pueden usar en un kernel sin emulación SCSI. Para usar cdrecord y dvdrecord con un kernel 2.6 ,sin emulación SCSI, podemos probar a realizar un scanbus sobre nuestro dispositivo grabador para ver si lo detecta: # cdrecord -scanbus dev=/dev/hdc en cuyo caso lo podremos usar sin más,sustituyendo la nomenclatura propia de cdrecord dev=0,0,0 por dev=/dev/hdc (ver nota 1 más abajo) Imágenes mkisofs -R -J -T -o imagen1.iso fichero1 Crea una imagen de un fichero del disco duro. dd if=/dev/cdrom of=imagen.iso Crea una imagen del cdrom y la vuelca en el fichero imagen.iso cat /dev/cdrom > debian.iso nrg2iso imagen.nrg imagen.iso Convierte una imagen nrg a iso bin2iso imagen.cue Convierte una imagen bin/cue a iso ccd2iso imagen.img imagen.iso Convierte una imagen img/ccd/sub/cue a iso mdf2iso imagen.mdf imagen.iso Convierte una imagen mdf/mds a iso
  • 93.
    mount -t iso9660-o loop imagen.iso p.montaje Monta una imagen. umount p.montaje Desmontar una imagen. md5sum archivo.iso > archivo.iso.txt Generar la suma control MD5 de un archivo. md5sum -w -c archivo.iso.txt Verificar la suma control MD5 de un archivo. archivo.iso y archivo.iso.txt deben estar en el mismo directorio. Grabación de CD cdrecord -v dev=0,0,0 fs=16M speed=30 imagen.iso Grabar un CD de datos/imagen cdrecord -v dev=0,0,0 fs=16M speed=30 -eject -isosize /dev/sr1 Copiar un CD de datos/imagen. wodim -v dev=/dev/cdrw isoimage.iso Copiar una imagen de disco a CD. La ruta puede variar según el caso. e recomienda migrar desde cdrecord a su fork, wodim. cdrecord -v dev=0,0,0 fs=16M speed=30 -pad -audio *.wav Grabar un CD de audio (cda) cdrdao copy -v 2 --device 0,0,0 --source-device 0,1,0 --reload --eject --on-the-fly --fast-toc --paranoia-mode 0 Copiar un CD audio (cda) cdrecord -v dev=0,0,0 fs=16M speed=30 -pad -audio *.wav -data imagen.iso Grabar CD mixto.
  • 94.
    1ª sesión cdrecord -multi imagen1.iso (ver nota 1) dónde acabó la sesión cdrecord -msinfo nos da un nº que usaremos en el siguiente paso. creamos nueva imagen mkisofs -R -J -T -C nº -M /dev/sr0 -o imagen2.iso fichero2 2ª sesión cdrecord -multi imagen2.iso Grabar CD multisesión cdrecord -v blank=fast (ver cdrecord blank=help) Borrar un CD±RW. cdrecord -v -eject speed=8 blank=all dev=1,1,0 Borrar un CD±RW por completo, y no sólo la tabla de particiones (tardará más que en el caso anterior). Le pedimos que nos muestre los detalles con -v (por ejemplo, el progreso del borrado) y con -eject indicamos que el CD será expulsado al finalizar el proceso wodim -v dev=/dev/cdrw -blank=all Borrar un CDRW por completo. Grabación de DVD growisofs -Z /dev/sr0 -R -J archivo (growisofs llama a mkisofs) Grabar un DVD de datos/imagen. growisofs -M /dev/sr0 -R -J archivo (-M añade más datos al dvd) Grabar DVD multisesión. growisofs -dvd-compat -Z /dev/sr0=imagen.iso Grabar una imagen ya creada. dvdrecord -v dev=0,0,0 blank=fast (ver dvdrecord blank=help) Borrar un DVD±RW. dvdbackup -M -i/dev/sr0 -o/home/paco/copia_dvd/ vobcopy -i /dev/sr0 -m -o /home/paco/copia_dvd/ Ripear un video DVD.
  • 95.
    Notas: 1.Se pueden establecervalores predeterminados para dev,el dispositivo de grabación; fs,el tamaño del bufer(nunca menor que el de la grabadora) y speed,la velocidad de grabación,indicándolo en el fichero /etc/default/cdrecord y simplificando de esta manera la sintaxis. 2.growisofs viene en el paquete dvd+rw-tools. 3.dvdrecord viene en el paquete dvdrtools. Ripeo de un CD cdda2wav -B -H -D /dev/sr1 -s -x extrae disco completo en archivos wav separados. cdda2wav -H -D /dev/sr1 -s -x -t 5 extrae el track nº 5 cdparanoia -B -d /dev/sr1 extrae disco completo en archivos wav separados. cdparanoia 5 -d /dev/sr1 extrae el track nº 5 cdparanoia -- "1-" extrae el disco completo desde el track nº 1 en un solo archivo wav abcde -d /dev/sr1 -N -x -o mp3 extrae disco completo en archivos mp3 separados. abcde -d /dev/sr1 -N -x -o mpc extrae disco completo en archivos mpc separados. abcde -d /dev/sr1 -N -x -o ogg extrae disco completo en archivos ogg separados. abcde -d /dev/sr1 -N -x -o ogg tracks 1-3 5 extrae las tres primeras canciones y la quinta. -d indica el dispositivo -N actua con las opciones por defecto,sin preguntar
  • 96.
    -x expulsa elcd al acabar -o tipo de archivo resultante abcde -1 -M -o flac extrae el CD en un solo archivo flac con su correspondiente cuesheet Nota: abcde conserva los id3 de los temas al pasarlos al disco duro,es decir artista,título,etc.Requiere de oggenc,lame,cdparanoia o cdda2wav,id3v2 y cd-discid y opcionalmente normalize. Conversiones lame -h -m j tema.wav Pasar de wav a mp3 (-b bitrate -h mayor calidad; -m j join stereo) lame -h -m j --nogap *.wav Pasar lote de wav a mp3 oggenc -b 128 -q 5 tema.wav (-b bitrate ;-q calidad (valores entre 0 y 10) oggenc *.wav (convierte todos los wav en un solo fichero ogg) oggenc -a -l -t *.wav (convierte todos los wav en sus respectivos ogg) Pasar de wav a ogg oggdec tema.ogg Pasar de ogg a wav (oggdec *.ogg para convertir un lote) lame -h --decode tema.mp3 tema.wav Pasar de mp3 a wav mplayer -ao pcm fichero.asf Pasar de asf/wma a wav Otros
  • 97.
    soxmix tema1.ogg tema2.oggmezcla.ogg (también mp3,wav,au,etc) Unir varios ficheros de audio. normalize-audio *.wav normalize-mp3 *.mp3 normalize-ogg *.ogg Ajustar el volumen de uno o varios ficheros de audio. Nota: oggdec y oggenc vienen en el paquete vorbis-tools Las conversiones entre formatos comprimidos las he descartado pues hay una pérdida notoria de calidad. Reproducción aafire Fuego animado. cacafire Fuego animado a color. cacademo Demostración de arte ascii a color. cacaball cacamoin cacaplas Variados gráficos animados a color. bb Impresionante demostración audiovisual de arte ascii. aatv Programa para ver la tele mediante código ascii. xaos -driver aa
  • 98.
    Indicamos a xaosque use las librerias aalib para visualizar fractales. aaxine video.wmv mplayer -vo aa video.avi (en ascii) mplayer -vo caca video.mpg (en ascii con color) mplayer video.avi (también mpg,wmv,etc) mplayer -vcd 1 (para ver un vcd) mplayer -dvd-device /dev/hdd dvd://1 (para ver un dvd) Ver vídeo en consola. play tema.ogg (digital) mocp (digital con ncurses) tcd (cd con ncurses) cdplay -d /dev/hdd (cd) Escuchar audio. mplayer -cache 100 mms://... (protocolo mms) mplayer -cache 100 -playlist http://ruta_del_archivo.asx (protocolo mms) mlayer http://... ;ejemplo:mplayer http://147.156.27.128:8004 (shoutcast-icecast) somaplayer http://... ;ejemplo:somaplayer http://147.156.27.128:8004 (shoutcast-icecast) Ecuchar la radio. mimms -t 20 -o radio3_uned.asf mms://... mms (asf/wma) -t tiempo de grabación en mnts. -o nombre que queremos para la grabación. streamripper http://... -l 3600 shoutcast(mp3/ogg) -l tiempo de grabación en sgs. Grabar emisiones. Cómo conseguir la dirección mms: Una vez en la web de la radio que nos gusta,por ejemplo radio3,nos vamos al enlace que nos indican para el comienzo del streaming y copiamos su ruta o bién nos bajamos dicho enlace,que es un fichero asx que contiene las direcciones mms,lo abrimos con un editor de texto y las buscamos. Pero si el enlace es código javascript al aparecer la ventana emergente, miramos su código fuente y buscamos (Ctrl+f) por asx o mms y ahí estarán. Cómo conseguir direcciones shoutcast-icecast: aquí: http://www.shoutcast.com/ y aquí: http://www.icecast.org Notas: Con -vo le indicamos al mplayer el driver de salida de video,en este caso aa o caca para verlo en ascii.
  • 99.
    Con "mplayer -vohelp" podemos ver los drivers de salida de video disponibles. Si tenemos un enlace de nuestro dispositivo a /dev/dvd, podemos simplificar la sintaxises,ya que es el sitio por defecto en el que mira el mplayer. aaxine viene en el paquete xine-ui de sid y lee los mismos formatos de video que xine. play y soxmix vienen en el paquete sox. cdplay viene en el paquete cdtool. mocp viene en el paquete moc. somaplayer y mplayer pueden igualmente reproducir audio digital y audio cd. SISTEMA Varios man comando man --help info comando xman Muestra información sobre el comando. help comando Muestra información sobre un comando interno del shell(bash). apropos palabra_clave Busca dentro de las descripciones de man la palabra clave. apropos -e palabra_clave Busca la palabra exacta. finger Muestra los usuarios conectados en tiempo real al sistema. Necesita instalarse como paquete aparte (finger). last Muestra los últimos usuarios que se conectaron al sistema y las fechas y horas de conexión (Útil para analizar intrusiones)
  • 100.
    cal -my Muestra elcalendario. uptime Muestra la hora,tiempo de funcionamiento,nº usuarios conectados y la carga media. tzconfig/tzselect Programas interactivos que permiten selecionar la zona horaria. grep UTC /etc/default/rcS Comprobamos si el reloj hardware mantiene la hora local o universal (UTC) date Muestra la fecha y hora del sistema,en formato local. date -u Muestra la fecha y hora en formato UTC(Tiempo Universal Coordinado). hwclock --show Muestra el reloj harware (también llamado reloj de la BIOS y reloj CMOS). hwclock -systohc Pone el reloj harware a la hora del sistema. ntpdate servidor NTP Ajusta directamente la hora del sistema sincronizándola con la de un servidor NTP. ntpd Demonio que ajusta el reloj de forma gradual sincronizándolo con servidores NTP. ‹ Como obtener Ayuda en GNU/LinuxarribaLista de comandos de GNU/Linux Lista de comandos de GNU/Linux (II) $ watch -n tiempo comando Ejecuta un comando cada x segundos (2 por defecto).
  • 101.
    $ watch -n1 date Igual que date pero en este caso veríamos correr los segundos. $ clear Limpia la pantalla. $ reset Restaura la Consola.Útil para cuando empiezan a aparecer caracteres raros. $ uname -a Versión del kernel $ hostname Visualiza el nombre de la máquina. $ tty Muestra el nombre de fichero de la terminal conectada a la salida estándar. # /etc/init.d/servicio stop Para un servicio/demonio # /etc/init.d/servicio start Inicia un servicio/demonio. # /etc/init.d/servicio restart Reinicia un servicio/demonio. $ startx Arranca el entorno gráfico con el gestor especificado en el .initrc de tu home. $ startx /usr/bin/X11/icewm Arranca el entorno gráfico con el icewm (si es que no fuera el predeterminado) $ Ctrl+C Termina un proceso. $ Ctrl+Z Suspende temporalmente la ejecución de un programa. $ Ctrl+S Para la transferencia de datos a la terminal.
  • 102.
    $ Ctrl+Q Resume,reinicia latranferencia de datos $ Ctrl+R Entra en modo de busqueda incremental de linea de comandos, ej: Si entras en el modo y escribis "ls" (sin comillas) te completará la entrada más reciente que empiece por "ls", para ir rotando por la entradas antereriores seguir presionando Ctrl+R, para terminar presionar alguna flecha. $ Ctrl+L Limpia la pantalla. $ Ctrl+O Ejecuta un comando (como si se hubiera presionado ENTER) pero vuelve y deja el comando escrito en el prompt. $ Ctrl+K Borra desde donde está el cursor hasta el final. $ Ctrl+W Borra desde donde está el cursor hasta el inicio de la palabra debajo de èl. $ Ctrl+E Salta al final de lo que se esté escribiendo. $ Ctrl+Alt+F2 Salir del entorno gráfico a un terminal.(Fnº según gettys activados en /etc/inittab) $ Ctrl+Alt+Supr Estando en una terminal reinicia (si no se indica otra cosa en /etc/inittab) $ ./script Ejecuta un script de shell. $ java -jar fichero.jar Ejecuta un programa java. $ consolechars -f fuente.psf.gz Cambiar la fuente de la consola.Las fuentes se encuentran en /usr/share/consolefonts/ $ base-config Configura el sistema base.
  • 103.
    $ gpm Programa queda soporte de ratón a la consola y aplicaciones que corren sobre ella. $ reportbug Programa en modo texto para enviar bugs a Debian $ exit Termina la ejecución del programa en curso. # init 0 Apaga la máquina. # init 6 Reinicia la máquina. # shutdown -t1 -h now Apaga la máquina . # shutdown -t1 -r now Reinicia la máquina. $ su Entrar a la sesión como root u otro usuario. # su nom_usuario Estando como root entramos como otro usuario. $ passwd Cambio de contraseña. $ who -a -H Muestra información de los usuarios conectados al sistema. $ users Muestra información de los usuarios conectados al sistema. $ id Muestra información del usuario actual,(grupos a los que pertenece,uid,gid) $ groups Muestra los grupos a los que pertenece un usuario.
  • 104.
    # adduser usuario Creaun nuevo usuario. # adduser usuario grupo Añade un usuario existente a un grupo ya existente. # adduser --no-create-home usuario Crea un usuario pero sin directorio personal(home). # addgroup grupo Crea un nuevo grupo. # deluser usuario Elimina un usuario. # deluser usuario grupo Elimina un usuario del grupo especificado. # deluser --remove-home usuario Elimina un usuario y su directorio home. # delgroup grupo Elimina un grupo. # delgroup grupo --only-if-empty Elimina un grupo sólo si no tiene ningún usuario. # usermod -l nuevo_login Cambia el nombre del usuario. Sería bueno combinarlo con -d # usermod -d nueva_home -m login Cambia el home al usuario,creándolo si no existiese y transfiriendo el contenido. # usermod -e 2006-04-14 login Fecha en que la cuenta del usuario será desactivada,expresada en formato AAAA-MM-DD # groupmod -n nuevo_nombre grupo Cambia el nombre de un grupo. Usando el gestor de arranque (NTloader) de windows: Se copian los sectores de arranque de las particiones al archivo debian_sarge.lnx: # dd if=/dev/hda2 of=/debian_sarge.lnx bs=512 count=1 (tenemos sarge en hda2 con lilo o grup)
  • 105.
    # dd if=/dev/hda5of=/debian_etch.lnx bs=512 count=1 (tenemos etch en hda5 con lilo o grup) los archivos debian*.lnx se copian en la partición raiz de windows y al archivo boot.ini de windows,oculto y de sólo lectura,le agregamos las siguientes lineas dentro de su sección [operating systems]: C:debian_sarge.lnx="Debian Sarge" C:debian_etch.lnx="Debian Etch" Atención: cada vez que modifiquemos los sectores de inicio o gestores de arranque de las particiones linux habrá que volver a realizar lo anterior ya que los ficheros .lnx habrán quedado desactualizados. 5.b. Procesos y memoria Memtest86+ Realiza una comprobación del estado de la memoria si optamos a ello desde los gestores de arranque, para lo cual necesitamos editarlos añadiendoles su ruta. En lilo.conf: image = /boot/memtest86+.bin label = memtest86+ En menu.lst: title memtest86+ root (hd0,0) kernel /boot/memtest86+.bin suponiendo que /boot esté en la partición raiz (/) # make-memtest86+-boot-floppy Crea un disquete de arranque desde el que se ejecutará memtest86+ $ free -m -s 3 Muestra el uso de memoria. $ ps aux Muestra información de los procesos en curso. $ top Muestra información de los procesos en curso.(tecla z colorea los activos) $ pstree Muestra los procesos en curso en árbol.
  • 106.
    $ pidof comando Buscael ID de un programa que se está ejecutando. $ killall proceso Para un proceso. $ strace comando Muestra las llamadas al sistema originadas por un proceso. $ fuser -v archivo Muestra los procesos que están usando un fichero o directorio. $ lsof | less Lista los ficheros abiertos por los procesos, en realidad descriptores de ficheros $ lsof -c comando Lista los ficheros abiertos por un proceso. $ lsof +D /home/paco Lista los procesos que están usando mi directorio. $ lsof -i :60627 Muestra que proceso se encuentra detrás del puerto 60627 (aunque esté a la escucha) $ nohup comando & Lanza un proceso de forma que si cerramos el shell,el proceso continúa ejecutandose $ comando & Ejecuta un comando en segundo plano(background),permitiendonos seguir usando el promp. $ jobs Lista los procesos en segundo plano identificándolos con un nº de tarea. $ fg nº Pasa a primer plano (foreground)un proceso $ bg Pasa a background un proceso que hemos suspendido temporalmente tecleando Ctrl-z $ nice -n prioridad comando Ejecuta un comando con una prioridad determinada(0 por defecto). Ejemplo:
  • 107.
    $ nice -n-10 cdrecord esos valores,de mayor a menor, son -20...+20, sólo root puede establecer valores negativos. $ renice prioridad PID_del_proceso Cambia la prioridad de un proceso en marcha $ sleep 5 comando Retarda 5 segundos la ejecución de un comando, m para minutos y h para horas. $ at [-f script] [tiempo] Ejecutar un script a una hora y/o fecha. Ejemplo $ at -f script 15:23 formas de indicar el tiempo: $ at -f script 15:23 hoy a las 15:23 $ at -f script 15:23 01.23.06 El 01.23.06 a las 15:23 $ at -f script now + 23 minutes Dentro de 23 minutos, puede ser minutes, hours, days, weeks $ at [tiempo] Ésta forma nos abre un promp interactivo. Ejemplo: $ at 15:00 Abre el promp de at $ at > comando Ingresamos el comando/os. $ ctrl+d Salimos de at $ atq Muestra,numeradas,la lista de tareas programadas. $ atrm nº Eliminará una tarea identificada por su nº. $ batch Se emplea de las mismas formas que at,solo que en este caso, el script o comando se ejecutará sólo si la media de carga de la CPU es inferior al 80%.
  • 108.
    5.c.-Disco duro Nomenclatura dedispositivos ------------------------------------------------------- | Nomenclatura de discos en linux| IDE | SCSI | | -------------------------------|-----------|----------| | Disco maestro del primer bus | /dev/hda | /dev/sda | | Disco esclavo del primer bus | /dev/hdb | /dev/sdb | | Disco maestro del segundo bus | /dev/hdc | /dev/sdc | | Disco esclavo del segundo bus | /dev/hdd | /dev/sdd | ------------------------------------------------------- Designacion de particiones ---------------------------------------- | disco /dev/hda |primarias | lógicas | | ----------------|----------|-----------| | 1ª partición |/dev/hda1 | /dev/hda5 | | 2ª partición |/dev/hda2 | /dev/hda6 | | 3ª partición |/dev/hda3 | /dev/hda7 | | 4ª partición |/dev/hda4 | /dev/hda8 | ---------------------------------------- $ du -h fichero Muestra espacio ocupado en disco,del directorio en curso si no indicamos nada. $ tree -a -s -L 2 tree es un programa que muestra lo mismo que du en forma de árbol. $ df Muestra información sobre particiones montadas, con la opcion -h se muestra en formato Human Readable (e.g. KB, MB, GB). # cfdisk Muestra información sobre particiones.Herramienta para particionar en ncurses. # fdisk -l Muestra información sobre particiones.Herramienta para particionar. # mount Vemos el listado de dispositivos montados. # mount punto_montaje Monta un dispositivo.(ya establecido en el fstab) # umount punto_montaje Desmonta un dispositivo.(ya establecido en el fstab)
  • 109.
    # mount -tsistema_archivo dispositivo punto_montaje Monta un dispositivo. Ejemplo: # mount -t ext3 /dev/hda2 /mnt Donde se monta la segunda partición primaria del dispositivo /dev/hda, la cual es de tipo ext3, en el directorio /mnt # umount /dev/hda2 Desmonta un dispositivo # fsck /dev/hdax Chequea y repara el sistema de archivos de una partición NO MONTADA. # fsck.ext2 -vpf /dev/hdx Chequea y repara el sistema de archivos de una partición ext2 NO MONTADA. # fsck.ext3 -vpf /dev/hdx Chequea y repara el sistema de archivos de una partición ext3 NO MONTADA. # mkfs.ext2 /dev/hdb1 Crea un sistema de ficheros Linux ext2 en la primera partición del segundo disco duro. # mkfs.ext3 /dev/hdb1 Crea un sistema de ficheros Linux ext3 en la primera partición del segundo disco duro. # mkfs.ext3 /dev/fd0 Crea un sistema de ficheros Linux ext3 en el floppy. # mkswap /dev/hda2 Crea un sistema de ficheros Linux swap (intercambio) en hda2. # resize2fs -f /dev/hda2 Reajusta el tamaño del sistema de ficheros después de haber ampliado/reducido la partición/volumen # tune2fs -O ^has_journal /dev/hda2 Convierte hda2 de ext3 a ext2 # tune2fs -j /dev/hda2 Convierte hda2 de ext2 a ext3 # tune2fs -C 255 /dev/hda1 Fuerza a que se revise /dev/hda1 en el próximo reinicio (con fsck). Útil para revisar la partición raíz, que no se puede desmontar.
  • 110.
    # quota Programa quegestiona/limita el uso que hacen del disco los usuarios/grupos. 5.d.-Entorno $ locale Muestra la zona geográfica configurada. # dpkg-reconfigure locales Reconfigura los locales. # dpkg-reconfigure console-data Reconfigura el teclado. $ loadkeys ruta_mapa_teclado.gz Carga el mapa de teclado que le indicamos,que estará en:/usr/share/keymaps $ locale charmap Muestra el código de caracteres en uso. $ set Muestra las variables locales definidas $ env Muestra las variables de entorno definidas. $ export Muestra las variables de entorno declaradas. $ export VARIABLE=valor Añadimos una variable.Con export EDITOR=nano establecemos nano como editor predeterminado. $ export VARIABLE= Eliminamos una variable dejando en blanco su valor. Para que las variables permanezcan de una sesión a otra hay que ponerlas en el archivo .bashrc de tu home. 5.e-Instalación de software Dpkg Herramienta de nivel medio para instalar, construir, borrar y gestionar los paquetes de Debian # dpkg -i paquete Instalación de paquetes .deb
  • 111.
    # dpkg -rpaquete Desinstala un paquete. # dpkg --purge paquete Desinstala un paquete y sus archivos de configuración. # dpkg --force -r paquete Fuerza la desinstalación de un paquete.Más información: dpkg --force-help # dpkg --force-all -r paquete Fuerza aún más la desinstalación de un paquete.Su uso puede dañar el sistema. # dpkg -c paquete Muestra el contenido (ficheros) de un paquete. # dpkg -L paquete Muestra todos los ficheros que se instalaron con un paquete. # dpkg -S fichero Muestra a qué paquete pertenece un fichero. # dpkg --get-selections Muestra todos los paquetes instalados en el sistema. # dpkg-reconfigure paquete Reconfigura paquetes instalados.Ejemplo: dpkg-reconfigure locales Apt Herramienta Avanzada de Empaquetamiento (Advanced Packaging Tool) que gestiona el sistema de paquetes de Debian instalando,desinstalando, actualizando y configurando los mismos. La sintaxis es: # apt-get [opciones] acción # apt-get update Descarga y analiza la lista de nuevos paquetes desde los repositorios del sources.list. # apt-get upgrade Actualiza todos los paquetes instalados(no instala ni elimina paquetes). # apt-get dist-upgrade Actualiza todos los paquetes resolviendo las dependencias.
  • 112.
    # apt-get installpaquete/s Instalación de paquetes por red,con resolución de depencias. # apt-get -s acción Simula,sin llevar a cabo la acción. Por ejem: apt-get -s install paquete. # apt-get -d acción Sólo descarga los paquetes deb en /var/cache/apt/archives/ sin instalar o desinstalar nada # apt-get install --reinstall paquete Reinstala un paquete. # apt-get remove paquete/s Desinstala un paquete. # apt-get remove --purge paquete/s Desinstala un paquete y sus archivos de configuración. # apt-get clean Elimina todos los paquetes (.deb) descargados y almacenados en /var/cache/apt/archives/ Apt-cache Utilidad que manipula la caché de paquetes de APT en busca de información $ apt-cache search palabra Busca en los paquetes y en las descripciones la palabra. $ apt-cache show paquete Muestra la descripción completa del paquete $ apt-cache showpkg paquete Muestra su relación con otros paquetes. $ apt-cache depend paquete Muestra las dependencias del paquete $ apt-cache rdepend paquete Muestra las dependencias inversas del paquete(cuales dependen de él) Apt-build Herramienta que no se limita a instalar un paquete deb sino que compila el tarball, crea el paquete deb y lo instala, quedando así integrado con apt. Lo que se consigue compilando es
  • 113.
    optimizar la ejecuciónde los programas en nuestro procesador, de hecho al instalarse pregunta por el tipo de procesador del sistema. Tiene las mismas opciones que apt como update, upgrade, install Ejemplo: # apt-build install mplayer Instala mplayer (el paquete del ejemplo no está escogido al azar¿?) y alguna más como word para recompilar todo. En este último caso hay que crear una lista con los paquetes a recompilar en /etc/apt/apt-build.list para lo cual nos puede servir el siguiente comando: # dpkg --get-selections awk '{if ($2 == "install") print $1}' > /etc/apt/apt-build.list Es aconsejable eliminar de dicha lista paquetes delicados como gcc, libc6 Aptitude Gestor de paquetes con algunas mejoras con respecto a apt como la instalación automática de los paquetes que sin ser dependencias forman parte de los sugeridos o recomendados y la autodesinstalación de los paquetes instalados en su momento como dependencias de otros (automáticamente en contraposición a manualmente),si ningún otro paquete| los necesitase.Se puede usar de forma interactiva si no se especifica ninguna acción o desde la linea de comandos,usando las mismas opciones y acciones de apt.La sintaxis es: aptitude [opciones] acción ejem.: aptitude -s purge firefox # aptitude update Descarga y analiza la lista de nuevos paquetes según los repositorios del sources.list. # aptitude safe-upgrade Realiza una actualización segura (no instala ni elimina paquetes). # aptitude full-upgrade Realiza una actualización,instalando y eliminando paquetes si fuera preciso # aptitude install paquete/s Instala/actualiza paquetes # aptitude reinstall paquete/s Reinstala un paquete # aptitude remove paquete/s Elimina paquetes # aptitude purge paquete/s Elimina paquetes y sus ficheros de configuración
  • 114.
    # aptitude downloadpaquete/s Se limita a descargar los paquetes deb al directorio en el que estamos. # aptitude hold paquete/s Bloquea paquetes # aptitude unhold paquete/s Desbloquea un paquete # aptitude unmarkauto paquete/s Desmarca paquetes como instalados manualmente # aptitude markauto paquete/s Marca paquetes como instalados manualmente (elegidos por nosotros) $ aptitude search expresión Busca un paquete por nombre y/o expresión $ aptitude show paquete Muestra información detallada de un paquete $ aptitude clean Elimina los ficheros .deb descargados Opciones: -s Simula las acciones, pero en realidad no las realiza. -d Sólo descarga paquetes, no instala o desinstala nada. -p Siempre pide confirmación de las acciones -y Supone que la respuesta a preguntas simples del tipo sí/no es «sí» -f Trata de arreglar paquetes rotos de forma agresiva. -V Muestra la versión de los paquetes a instalar.
  • 115.
    -D Muestra las dependenciasde los paquetes cambiados automáticamente. -t rama Establece la rama de Debian desde la que se instalan los paquetes Deborphan Muestra los bibliotecas (paquetes lib) huérfanas -a Muestra todos los paquetes huérfanos (que no dependen de ningún otro). -d Muestra también sus dependencias. -n Muestra los paquetes "sugeridos" y "recomendados" como dependencias. # deborphan -A paquete Ignora un paquete(buena opcion si tenemos mala memoria y queremos conservar un huérfano) # deborphan -R paquete Cancela la orden anterior,si el paquete es huérfano lo mostrará. # deborphan -L Lista los paquetes ignorados Orphaner Interfaz gráfica de deborphan, sin parámetros sólo mostrará paquetes lib. -a Muestra todos los paquetes huérfanos del sistema. Editkeep Interfaz gráfica que gestiona o edita la lista de paquetes ocultos de deborphan. Debfoster Programa que mantiene una lista de los paquete que fueron instalados como dependencias de otros.La primera vez que se ejecuta pregunta si quieres conservar los paquetes instalados(pregunta por todos),Puede ejecutarse de manera interactiva o bién directamente desde la linea de comandos para instalar o desinstalar paquetes. Localepurge
  • 116.
    Script que eliminae impide la instalacion de los locales y páginas man que no nos interesa tener en el disco.Al instalarlo nos da a elegir los locales y si automaticamente impide la instalación de otros.El programa no se encuentra bién integrado con la gestión de paquetes de debian... Checkinstall $ ./configure $ make $ su # checkinstall Esta sucesión de comandos crean un paquete .deb, una vez descomprimido el tarball* y ubicados en el directorio recién creado (si es el caso). ./configure: comprueba si nos faltan dependencias y crea el archivo make.ini necesario para la compilación. make: compila el programa.(lo pasa a lenguaje máquina o binario) checkinstall: crea el paquete .deb *tarball: fichero comprimido con el código fuente del programa. Me parece mejor la idea de hacer un paquete deb que la de compilar un programa desde las fuentes, de ésta manera se puede instalar el programa mediante dpkg -i quedando totalmente integrado en el sistema y luego si queremos desinstalarlo lo tendremos también mucho más facil con dpkg -r fakeroot make-jpkg jre-linux.bin dpkg -i sun-j2re.deb Ésta sucesión de comandos nos instala el java de sun, quedando totalmente integrado en nuestro sistema. fakeroot es un programa normal, sin el bit setuid (ver chmod). No aumenta los privilegios de un usuario ni disminuye la seguridad del sistema. Se escribió específicamente para permitir que los usuario pudiesen crear paquetes deb sin tener privilegios de superusuario. make-jpkg viene en el paquete java-package y sirve para convertir en paquete deb el binario de sun que contiene la máquina virtual de java (jre). 6.Recuperación del sistema 7.a.-Usando knoppix live CD_knoppix # su desde knoppix CD nos convertimos en root. root@CD # cd / nos vamos a / del knoppix CD. root@CD # mount -t ext3 /dev/hdax /mnt/hdax montamos la partición en cuestión.
  • 117.
    root@CD # chroot/mnt/hdax nos introducimos en ella con chroot* root@disco_duro # mount -t proc proc /proc puede ser necesario montar el sistema de ficheros proc. root@disco_duro # nano /etc/lilo.conf editamos lilo (o lo que sea necesario). root@disco_duro # /sbin/lilo ejecutamos lilo. root@disco_duro # umount -t proc proc /proc desmontamos proc root@disco_duro # exit nos salimos de chroot y por tanto del disco duro root@CD # umount -t ext3 /dev/hdax /mnt/hdax desmontamos la partición en cuestión. root@CD # exit salimos del root de knoppix. CD_knoppix $ volvemos al punto de partida. * La orden chroot lo que hace es situarte virtualmente en la partición que le indicas y a partir de ahí las ordenes que le pases a la consola se ejecutan en esa partición, es como si realmente estuvieras en esa partición. 7.b.-Creando un disquete de arranque/rescate Con lilo Tan fácil como copiar lilo.conf en un disquete e indicarle que arranque desde el mismo, para lo cual hay que cambiar la linea boot por: boot=/dev/fd0 Si teneis varias particiones,entre ellas alguna lógica debeis añadir al lilo.conf del disquete la opción: "lba32" para que pueda arrancarla. Con el programa mkboot Este programa viene en el paquete debianutils.
  • 118.
    mkboot, entre otrascosas, te copia el lilo.conf al disquete,pero la verdad es que yo sólo he conseguido que me funcionen los disquetes creados con mkboot,cambiando el lilo.conf que te crea por el original y realizando después las modificaciones que cuento más arriba.El mismo programa te explica cómo: # mount /dev/fd0 /mnt montamos el disquete. # cd /mnt nos vamos a él. # nano lilo.conf editamos lilo.conf # lilo -C lilo.conf con -C le decimos que ejecute el lilo del disquete y no el de /etc/lilo.conf # cd .. nos salimos. # umount /dev/fd0 desmontamos el disquete. Con grub Éste no lo he probado pero por lo que he visto se trataría de copiar los ficheros stage1 y stage2 al disquete tal que así: # mkfs.ext3 /dev/fd0 formateamos el disquete. # mount -t ext3 /dev/fd0 /floppy lo montamos en /floppy. # cp /ruta_de_acceso/stage1 /floppy copiamos stage1 # cp /ruta_de_acceso/stage2 /floppy copiamos stage2 # cp /boot/vmlinuz /dev/fd0 si hay sitio se puede incluir el nucleo en el disquete. # umount /dev/fd0 se desmonts floppy sin sacarlo.
  • 119.
    # grub inicia lainterfaz de comandos de GRUB grub> root (fd0) instala las herramientas de GRUB... grub> setup (fd0) ...en el MBR del disquete. grub> quit salimos Cuando se arranque desde el disquete y aparecezca el interprete de comandos de grub hay que teclear: grup> root (fd0) grup> kernel /boot/vmlinuz root=/dev/hda2 # kernel de inicio y particion raiz grup> boot Con el NTloader de microsoft En el caso de que lo usemos para el inicio también podemos crear un disquete de arranque con el mismo.Para ello copiaremos los ficheros ocultos "ntldr" , "ntdetect.com" y "boot.ini" que se encuentran en el directorio raíz del sistema (normalmente C:).Ésto es lo que haría cualquier windosero, pero nosotros además,tendremos que copiar el o los ficheros con extensión .lnx que pusimos en la partición raiz. 7.c.-Copiando el MBS(Master Boot Sector)-sector de arranque maestro Ésto crea un archivo llamado mbr con los primeros 512 bytes de hda: # dd if=/dev/hda of=mbr count=1 bs=512 Para restaurar la tabla de particiones: # dd if=mbr of=/dev/hda 7.d.-Copiando el VBS(Volume Boot Sector)-sector de arranque de una partición Ésto crea un archivo llamado sector_arranque_hda2 con los primeros 512 bytes de hda2 # dd if=/dev/hda2 of=/sector_arranque_hda2 count=1 bs=512 Para restaurar el sector de arranque # dd if=sector_arranque_hda2 of=/dev/hda2 Cada vez que se modifique lilo o grup,habrá que realizar una nueva copia del MBR o el sector de arranque que incluya los cambios.
  • 120.
    Kernel ,logs yhardware $ uname -a Versión del kernel. $ cat /proc/version Versión del nucleo y compilador empleado. $ lsmod Lista los módulos cargados. $ cat /proc/modules Lista los módulos cargados. $ lsmod | grep módulo Ver si está cargado el módulo. $ modinfo módulo Muestra información sobre un módulo. # modprobe módulo Inserta un módulo en el kernel cargando antes los módulos de los cuales dependa. # modprobe -r módulo Elimina un módulo del kernel y si procede los que dependen del mismo. # insmod módulo Inserta un módulo en el kernel. # rmmod módulo Elimina un módulo del kernel. # echo módulo >> /etc/modules Inserta un módulo en el kernel de forma permanente. # depmod módulo Comprueba las dependencias del módulo. # modconf Programa gráfico para listar,cargar y descargar módulos del kernel. # alsaconf Programa interactivo que detecta las tarjetas de audio y carga los modulos adecuados.
  • 121.
    # less /var/log/kern.log Mensajesdel nucleo (solo root o algun usuario que pertenesca al grupo adm tiene acceso a los logs) # less /var/log/syslog Registro de mensajes relativos a la seguridad. # less /var/log/debug Registro de información de depuración de los programas. # less /var/log/messages Mensajes del sistema de carácter informativo. # less /var/log/user.log Información del usuario. # less /var/log/XFree86.0.log Información sobre las X # less /var/log/Xorg.0.log Información sobre las X # less /var/log/auth.log Accesos al sistema(incluye los intentos fallidos). # last Lista los usuarios conectados/desconectados (fichero /var/log/wtmp). # lastb Muestra los intentos de conexión fallidos (fichero /var/log/btmp). # hdparm /dev/hda Verificar DMA # hdparm -I /dev/hdx Información sobre hdx # hdparm -d1 /dev/hdx Activar DMA en el disco duro o periférico. $ dmesg Ver la salida que el kernel produjo en el arranque.
  • 122.
    $ dmesg |grep hd Información sobre dispositivos IDE. # sensors-detect Detecta,instala y carga los sensores y los módulos necesarios(en un kernel 2.6) # sensors Tras ejecutar el anterior,muestra temperaturas, voltajes y revoluciones de ventilador. # lsdev Muestra información sobre los dispositivos(canales IRQ,DMA y puertos E/S que utilizan) # lspci Ver dispositivos conectados a la placa madre mediante un bus PCI. # lsusb Ver los buses USB y los dispositivos conectados a los mismos. # cdda2wav -scanbus Comprobar el interfaz SCSI. # cdrecord -scanbus Comprobar el interfaz SCSI. $ cat /proc/meminfo Información sobre la memoria. $ cat /proc/cpuinfo Información sobre el procesador. $ cat /proc/devices Información sobre dispositivos en uso. Notas syslogd registra los mensajes que los programas y el sistema ofrecen. klogd es un demonio del sistema que intercepta y registra los mensajes del núcleo. lsdev viene en el paquete procinfo. sensors viene en el paquete lm-sensors. Dispositivo de bloques:aquellos que almacenan información en bloques de tamaño fijo, (cada uno con su dirección) y utilizan los buffers del sistema (memoria temporal), Dispositivo de caracteres: aquellos que envian o reciben un flujo de datos de forma secuencial y sus procesos de lectura/escritura no poseen buffer.por ej. el ratón DMA(Acceso Directo Memoria): es la manera en que los dispositivos se comunican directa- mente con la memoria sin intervención del procesador.Cada controlador dispone de una linea o canal DMA de acceso directo. IRQ (solicitud de interrupción): es la manera en que el controlador de un dispositivo
  • 123.
    solicita al procesadorque le atienda porque va a comunicarle algún suceso,cada contro- lador tiene una linea IRQ distinta. IO Ports (puertos de entrada/salida): se trata de una abstracción (que se corresponde con un dispositivo)a través de la cual un dispositivo intercambia datos con el sistema. Tienen una dirección(en hexadecimal)que los identifica. 8. Redes # /etc/init.d/networking start Inicia los servicios de red. # /etc/init.d/networking restart Reinicia los servicios de red. # /etc/init.d/networking stop Para los servicios de red. # ifconfig [interfaz opciones IP] Información y configuración de interfaces de red. # ifconfig Muestra el estado de los interfaces activos. # ifconfig -a Muestra el estado de todos los interfaces. # ifconfig ppp0 Muestra el estado de ppp0 # ifconfig eth0 up Activa eth0. # ifconfig eth0 down Cierra eth0. # ifconfig eth1 address 156.35... Asigna una dirección al interfaz especificado. # iwconfig Similar a ifconfig pero sólo para interfaces wireless # ifup interface Habilita la interface especificada,ejemplos: ifup eth0 ;ifup ppp0
  • 124.
    # ifdown interface Deshabilitala interface especificada,ejemplos: ifdown eth0 ;ifdown ppp0 # dhclient eth0/eth1 Inicia conexión dhcp mediante el cliente dhcp-client. # pump -i eth0/eth1 Inicia conexión dhcp mediante el cliente pump. # pppoeconf Programa para configurar conexiones pppoe. # pppconfig Programa en modo texto para configurar una conexión ppp. # pon Establece la conexión ppp a internet. # plog Monitoriza la conexión ppp. # poff Finaliza la conexión ppp a internet. $ finger usuario Informa sobre un usuario conectado al sistema. $ finger @servidor Informa sobre todos los usuarios conectados a un servidor (nombre o IP) $ finger usuario@servidor Informa sobre un usuario conectado a un servidor $ ping google.com Verifica la conexión,en este caso con www.google.com (Ctrl+Z pone fin) $ traceroute microsoft.es Muestra la ruta que los paquetes de datos han seguida hasta la máquina de destino. $ mtr rediris.es Combinación de ping y traceroute.
  • 125.
    $ whois esdebian.org Informaciónsobre éste,nuestro dominio. $ host -v -a telefonica.com Determina la ip de un nombre o el nombre de una ip.(host -v -a 194.224.55.221) $ iptraf Monitoriza tráfico de redes(ncurses) # tethereal Versión para consola de ethereal,un analizador del tráfico de red (sniffer). # ettercap Sniffer/interceptor/logger para redes LAN con switchs basado en ncurses. $ nmap Escaner de puertos. # fail2ban Escanea logs como /var/log/auth.log y banea las IP con demasiados errores de conexión. # snort Sniffer de paquetes y un detector de intrusiones en una red (NIDS). # aide Detector de intrusiones en un único Servidor, PC o host.(HIDS). # portsentry IDS que detecta escaneos de puertos y reacciona a un ataque. 3 chkrootkit Detector de rootkit. w3m,lynx,links,links2,elinks Navegadores web,elinks soporta SSL con lo que podremos acceder a correo web. Irssi,*censored*x,WeeChat-curses Clientes IRC( Internet Relay Chat) ) mutt,mush,pine,elm Clientes de correo(MUA).
  • 126.
    cabber Cliente jabber( protocololibre para mensajería instantánea.) Centericq Cliente de mensajeria multiprotocolo (ICQ,Yahoo,AIM,MSN,IRC,Jabber) ncftp Cliente ftp (File Transfer Protocol) basado en ncurses ftp-ssl Cliente ftp con soporte de cifrado SSL y TSL.(dependiendo de la otra parte) telnet-ssl Cliente telnet(acceso remoto) con soporte de cifrado SSL,(dependiendo de la otra parte) ssh Cliente ssh (Secure SHell),acceso remoto cifrado,forma parte del paquete openssh-client rtorrent, bittornado Clientes bittorrent.Bitornado es una versión mejorada del cliente homónimo bittorrent. $ talk usuario Entabla una conversacion con un usuario del sistema. $ talk usuario@sistema Entabla conversacion con un usuario de otro sistema(entre máquinas UNIX) $ mesg -n Anula la notificacion de comunicacion de talk o write $ mesg -y Habilita la llegada de notificaciones de talk o write $ write usuario Manda un mensaje a un usuario del sistema. $ netstat -napt Saber qué puertos tiene abiertos nuestro sistema n No resuelve las direcciones a sus nombres DNS. Esto hace más rápida la ejecución.<
  • 127.
    a Muestra todos lasconexiones,incluídas las que están escuchando. p Muestra el número y nombre del proceso,dueño de dicha conexión. t sólo muestra conexiones tcp $ jigdo-lite fichero.jigdo Programa interactivo que permite la descarga y/o "actualización" de una imagen ISO; descarga los ficheros de una imagen ISO mediante wget, los une y forma al vuelo una copia de la imagen ISO original. Pero si ya tenemos una imagen en el disco o un CD, bastaría con indicarle la ruta a la misma para que se actualizara. Para ambos casos hay que descargar previamente los ficheros .jigdo y .template asociados a la imagen. $ jigdo-file Herramienta para generar los ficheros .jigdo y .template de una imagen $ wget [opciones] URL Gestor de descargas. -p descarga web completa. -r recursivo. -k Convierte los enlaces absolutos en relativos. -c Reanuda la descarga de un fichero parcialmente descargado. -l6 profundidad de recursión (5 por defecto) -A formato formato para descargar. -nH hace que no se cree el subdirectorio localhost.
  • 128.
    --cut-dirs=n elimina n númerode directorios dentro de la jerarquia. Ejemplo 1ºw $ get -A zip URL Bajaría todos los archivos zip de una página web. Ejemplo 2º: nos queremos descargar el manual nano.pdf que está en http://www.manuales.com/informática/editores/nano.pdf $ wget -nH --cut-dirs=2 http://www.manuales.com/informática/editores/nano.pdf nos bajaría sólo el manual sin crearnos ningún nuevo directorio en nuestra home. Ejemplo 3º: nos queremos bajar el manual de Arocena en formato html cuya primera página está en: http://usuarios.lycos.es/ortihuela/index.htm ,pues entonces: $ wget -r -nH http://usuarios.lycos.es/ortihuela/index.htm nos bajaría todo el contenido del curso (ficheros .html,.css,.jpg,etc) al directorio /ortihuela ‹ Lista de comandos de GNU/Linux (I)arribaLista de comandos de GNU/Linux (III) › Lista de comandos de GNU/Linux (III) 9. OTROS 9.a. MLDONKEY telnet 127.0.0.1 4000 Abrir interfaz telnet kill Matar mldonkey q Cerrar interfaz telnet ? Muestra la ayuda ?? Muestra más ayuda add_user usuario clave Añade un nuevo usuario add_user usuario clave Cambia la contraseña de un usuario
  • 129.
    remove_use usuario Elimina unusuario voo Ver todas las opciones set opción valor Cambiar valor de la opción save Guardar opciones networks Ver todas las redes enable nº Activar la red nº disable nº Desactivar la red nº alias Crea un alias.Ejemplo:alias red netwoks unalias Elimina un alias.Ejemplo:unalias red c nº Conectar a más servidores o alnº vm Servidores conectados vma Lista todos los servidores conocidos x nº Desconectar del servidor dllink .torrent Inicia la descarga de un elinks o torrent dllinks fichero Descarga los elinks contenidos en un fichero http url refererencia Inicia la descarga desde una URL s Buscar archivos en todas las redes • network: nombre de red • minsize: tamaño mínimo • maxsize: tamaño máximo • media: video|Audio|... • Video: video • Audio: audio
  • 130.
    format: formato • title: título • album: album • artist: autor • field: field ,fieldvalue • not: palabra • and: palabra • or: palabra vr Ver resultados de la última busqueda vs Ver todas las busquedas d nº Bajar resultado nº cancel nº Cancelar descarga nº pause nº Pausar descarga nº resume nº Resumir descarga nº uploaders Informa sobre la subidas y sus usuarios upstats Muestra estadísdicas sobre las subidas torrents Muestra todos los torrents en el servidor compute_torrent fichero Genera un .torrent vd Muestra la cola de descargas scan_temp Muestra el contenido del directorio temp recover_temp Recupera los archivos perdidos detemp commit Mueve las descargas al directorio incoming 9.b. MUTELLA mutella Abrimos la interfaz de mutella.
  • 131.
    leave Cerramos la interfaz,peromutella sigue corriendo. exit Salir. version Muestra la versión del programa. help Muestra la ayuda. help commando Muestra la ayuda del comando. ? Igual que "help" set Muestra las opciones de mutella. set+ Añade un valor a las opciones. set- Quita un valor de las opciones. color Configurar los colores de la consola. info opciones Muestra información sobre la actividad de la red, las opciones son: • network: Información general sobre la red. • connections: Conexiones • transfers: Transferencias • uploads: Subidas • downloads: Descargas hosts Muestra la lista de servidores en caché. open Conectar a un servidor. close ID Cierra una conexión/es find palabra/s opciones Buscar archivos, las opciones son: • -palabra: Excluye una palabra de la búsqueda. • size:bytes: tamaño exacto del archivo,en bytes. • around:bytes: tamaño aproximado. • min:bytes: tamaño mínimo del archivo,en bytes. • max:bytes: tamaño máximo del archivo,en bytes.
  • 132.
    ejemplo: find mikeoldfield .ogg: -tubulars bells min:30000 list Muestra las búsquedas en curso. ls Muestra sólo las búsquedas con resultados. edit Modifica los términos de la búsqueda. delete ID Elimina una búsqueda. erase ID Elimina una búsqueda y borra la descarga parcial. clear LImpia los resultados de una o más búsquedas. results ID Muestra los resultados de la búsqueda. get ID Inicia la descarga de uno o más archivos. stop ID Para la transferencia. kill ID Igual que stop,pero borra el archivo parcial. move Modifica el nombre del archivo en descarga. scan Fuerza un reescaneo de los archivos compartidos. library Muestra los archivos compartidos. load Loads and executes Mutella terminal-mode script system comando Ejecuta un comando de shell ! Sinónimo de "system" NOTA: • los ID deben ser tomados del último ls, list, info... • Todos los comandos admiten abreviaturas:info downloads por id, etc • El fichero con las opciones es ~/.mutella/mutellarc • El fichero con las opciones de color es ~/.mutella/termclr
  • 133.
    9.c. FTP(Protocolo deTransferencia de Archivos) open servidor Conectar con el servidor# ? Imprimir información de ayuda local append Anexar a un archivo bell Emitir sonido cuando se complete el comando binary Establecer transferencia binaria (todas salvo .txt) bye Finalizar la sesión ftp y salir ascii Establecer tipo de transferencia ascii (sólo para .txt) cd Cambiar el directorio de trabajo remoto close Finalizar la sesión ftp ls Mostrar el contenido del directorio remoto# dir Mostrar el contenido del directorio remoto delete Eliminar archivo remoto debug Alternar modo de depuración get Recibir archivo help Ayuda sobre un comando 1º-help y luego el comando lcd Cambiar el directorio de trabajo local# mdir Mostrar el contenido de múltiples directorios remotos mdelete Eliminar múltiples archivos
  • 134.
    mget Obtener múltiples archivos# mkdir Creardirectorio en el equipo remoto# mls Mostrar el contenido de múltiples directorios remotos mput Enviar múltiples archivos open Conectar a tftp remoto put Enviar un archivo pwd Imprimir el directorio de trabajo del equipo remoto quit Finalizar la sesión ftp y salir quote Enviar un comando arbitrario ftp recv Recibir archivo rename Cambiar el nombre del archivo rmdir Quitar directorio en el equipo remoto remotehelp Obtener ayuda del servidor remoto send Enviar un archivo status Muestra el estado actual# trace Alternar trazado de paquetes# type Establecer el tipo de transferencia de archivos user Enviar nueva información de usuario verbose Alternar modo detallado
  • 135.
    9.d. IRC /server Lista,añade oelimina servidores. /server [nombre:puerto:clave] Conecta con un servidor. /info [servidor] Obtener información sobre servidor. /lusers Obtener estadísticas del servidor. /users Usuarios conectados al servidor. /links Lista los servidores de la red actual. /list Lista e informa sobre los canales. /admin Informa sobre el admin. del servidor. /help [comando] Muestra la ayuda sobre un comando. /ison [nick] Comprobar si un usuario está conectado. /join [canal] Unirse a un canal. /names Listar usuarios en canales. /whois [nick] Muestra información sobre un usuario. /whowas [nick] Informa sobre un usuario que ya no está. /who [patrón] Muestra información sobre patrón. /msg NiCK SET PASSWORD [clave] Cambiar de contraseña(en irc-hispano) /msg [nick | canal][texto] Envia un mensaje a un usuario o canal. /amsg [texto] Envia mensaje a todos los canales en los que estás.
  • 136.
    /notice [nick |canal] Envia un mensaje privado a un usuario/os /query [usuario texto] Envia un mensaje privado a un usuario. /ignore Lista los usuarios ignorados. /ignore nick Ignora los mensajes de un usuario. /unignore [nick | *] Deja de ignorar el/los mensajes. /ctcp [nick texto] Envia un mensaje mediante CTCP /me [texto] '-> precedido de nuestro nick /ame [texto] '->a todos los canales en los que estás. /dcc [chat nick ] Pide y/o inicia charla con un usuario. /dcc [close nick] Cierra charla. /dcc [send nick fichero] Ofrece y/o envia un fichero. /dcc [get nick fichero] Permite recibir un fichero. /time Muestra fecha y hora. /clear Limpia la ventana de texto actual. /away [texto] Pasar a estado ausente. /away Volver de la ausencia. /nick [nuevonick] Cambiar el nick. /nick [nuevonick][clave] Cambiar un nick registrado. /nick [nick:contraseña] Identificarse enirc-hispano.
  • 137.
    /part [canal] Abandonar uncanal. /quit Cerrar todas las conexiones y salir. Notas: CTCP (Protocolo de cliente a cliente): permite dar respuestas predeterminadas y automáticas ante una petición espefífica de otro usuario. DCC: protocolo que establece una conexión TCP directa entre dos ordenadores. 9.d. Calculadora bc Abrimos bc. > 20 + 5.4 Suma. > 77 - nº Resta. > 99 * 86 Multiplica. > 47 / 3 Muestra el cociente de la división. > 47 % 3 Muestra el resto de la división. >4 ^ 2 Calcula la potencia 4² > sqrt (16) Calcula la raiz cuadrada de 16 > (2*3+2) / sqrt (2^3/2.5) Un poco de cada. > quit Salimos de bc. También podemos hacerlo usando echo y mandando la salida a bc: echo "(2*3+2)" / sqrt "(2^3/2.5)" | bc en este caso los paréntesis deben ir entrecomillados 9.e. Ppromps PS1="[033[1;34m][u@h:w]$[033[0m] " PS1="[033[30;47m][[033[31m]u[033[30;47m]@ W][033[00m]$ " PS1='[033[01;30m]u [033[01;32m]h[033[01;33m]:[033[01;35m]w[033[0m$ '
  • 138.
    PS1="[033[;31m][[033[;36m]u@h[033[;31m]:[033[;36m ]w [033[;31m]]$[033[0m] " Paraque los promp permanezcan de una sesión a otra hay que ponerlos enel archivo .bashrc de tu home. ‹ Lista de comandos de GNU/Linux (II)arribaLocalizar y eliminar líneas que coincidan con una expresión regular específica › Autologin en Debian Como lograr un Autologin en tu Debian. Para hacer que una terminal ingrese automáticamente, (estilo Live-CD) Metodo 1 Edita tu /etc/inittab. Puedes usar tu editor favorito. #vi /etc/inittab #nano /etc/inittab Busca la siguiente línea 1:2345:respawn:/sbin/getty 38400 tty1 Coméntala con un #. Debe quedar así: #1:2345:respawn:/sbin/getty 38400 tty1 Agrega la siguiente linea debajo: 1:2345:respawn:/bin/login -f YOUR_USER_NAME tty1 </dev/tty1 >/dev/tty1 2>&1 Reemplazando YOUR_USER_NAME por el nombre de usuario que quieres que haga login automático. Ahora, si deseas que el servidor X se inicie automáticamente: Edita el archivo .bash_profile del home del usuario con login automático. En caso de no existir el archivo crealo. #vi ~/.bash_profile #nano ~/.bash_profile Y agrega:
  • 139.
    if [ -z"$DISPLAY" ] && [ $(tty) = /dev/tty1 ]; then startx fi La línea del if [ -z "$DISPLAY" ] ... sirve para verificar si se está ejecutando en la tty número 1; en caso de ser otra terminal (tty2, tty2, etc...) no se ejecutará el servidor X. Aunque es cómodo tener un autologin sin necesidad de ingresar contraseñas, esto puede representar un riesgo de seguridad, así ten cuidado con quién utiliza tu equipo. ‹ Archivos configuración de BasharribaComo obtener Ayuda en GNU/Linux › Viviendo en Consola Índice 1. Introducción 2. Navegadores Web 2.1. Lynx 2.2. Links2 2.3. W3M 3. Gestores de archivos 3.1. Midnight Commander (MC) 3.2. FD Clone (FD) 3.3. Vladi File Manager for Unix (VFU) 4. Clientes de Mensajería instantánea 4.1. Pebrot 4.2. CenterIM 4.3. Finch 4.4. Bitlbee 5. Reproductores de Música 5.1. Music Player Daemon (mpd) 5.2. Mp3Blaster 5.3. MOC 6. Control de procesos 6.1. HTop 7. Consultando el estado del tiempo 7.1 Weather-util 8. Montar unidades externas 9. Redes sociales 9.1. Twidge 1. Introducción En algunas ocasiones en las cuales se pretende evitar el uso de todo tipo de aplicación gráfica, como en el caso de servidores o en casos mas particulares cuando realizamos una instalación desde cero digamos tipo Netinstall, y deseamos navegar, chatear o poder realizar una gestión
  • 140.
    de archivos deuna forma un poco didáctica siempre se encuentra como limitante la falta de un ratón, de no tener los tan cómodos iconos y demás. Pero hoy os digo que es posible vivir en una tty utilizando herramientas como las que conocerás a continuación. 2. Navegadores Web Antes de empezar a analizar cada uno de los navegadores es importante saber como trabajan estos, y bueno en general convierten el código HTML a código ASCCI y permiten la visualización del "documento" de forma ordenada por medio de un paginados como less, utilizando en la mayoría de los casos el siguiente comando: lynx -dump /home/huhn/ lynx.html | less Por medio del comando dump se le da el formato correspondiente (ASCCI) al documento, posteriormente se archiva temporalmente en una ruta especifica y se invoca al paginador less para la correspondiente visualización de este. 2.1 Lynx Lynx es un navegador web en modo texto para consola. Permite en algunos casos específicos la visualización de tablas linearizandolas y los marcos los identifica por nombres para luego ser explorados como paginas independientes, también conexiones SSL y permite desplazamiento tanto vertical como horizontal. Una de sus grandes ventajas es que no es necesario esperar a que cargue la pagina completa para permitir la visualización de esta, por que la va renderizando mientras va cargando la misma. Navegar con Lynx es casi tan sencillo como jugar PACMAN es solo cuestion de desplazarnos por los diferentes enlaces con las teclas de dirección, también en algunos casos podemos usar los números con enlaces numerados y las teclas pg up y pg dn para avanzar o retroceder de una forma rapida. La versión actual soporta conexiones SSL y HTML. Las tablas se linearizan y los marcos se idenfitican por nombre para ser explorados como páginas independientes. Ultima versión estable lynx2-8-6 y la linea de trabajo actualmente se basa en la versión lynx2-8- 7. instalación: En una terminal ejecutamos: #aptitude install lynx Para ejecutarlo podemos hacerlo de dos formas: Opción1 lynx Esta opción nos abrirá el navegador con su pagina principal en la cual muestra algunos comandos generales para realizar la navegación.
  • 141.
    Opción2 lynx www.esdebian.org Esta opciónnos abrirá el navegador con la pagina de esdebian, ahora si revisamos en la parte de abajo de nuestro navegador, podremos observar que se encuentran los atajos de teclado mas utilizados, puesto que lynx se maneja únicamente por medio de teclado y en general para revisar y configurar las diferentes opciones solo basta con presionar la tecla (o)pciones. Atajos de teclado ó comandos para lynx. • Shift + H: Invoca la ayuda "(h)elp" • Q: Cerrará el programa después de preguntar • Shift + Q: Cerrará el programa sin preguntar • K: Muestra una lista de comandos de teclado disponibles • M: Vuelve a la pagina de inicio, después de preguntar (confirmamos con (Y)es)
  • 142.
    G: Abre un cuadro de dialogo para ingresar una nueva url • Shift + G: Abre un cuadro de dialogo para ingresar una nueva url • L: Muestra los enlaces disponibles en el “documento” actual desde el Setup • P: Muestra las correspondientes opciones de impresión es decir, si lo guarda en un archivo local, • se realiza un envío al correspondiente e-mail o se envía directamente a impresión • D: Guarda el archivo de la pagina con todas las imágenes • A: Añade a los favoritos o bien la pagina que estamos viendo, o bien la pagina cuyo enlace tenemos bajo el cursor • V: Abre un administrador de favoritos
  • 143.
    Ctrl + A: Vuelve al comienzo de la pagina • Ctrl + E: Va el final de la pagina • Ctrl + R: Recarga la pagina • /: Comienza una búsqueda Y para el dado caso de paginas en las cuales se requiere login y pass, podemos ingresar directamente en ésta de la siguiente forma: lynx www.esdebian.org -auth=epica:esta-es-mi-contraseña Ayuda fuera del navegador: man lynx Imagen navegador Lynx:
  • 144.
    2.2 Links2 Un pocode historia. La versión original de Links, fue desarrollada en 1999 y era muy similar a Lynx, por lo que después cambio la orientacion del proyecto, renombrándolo como Links2. Escrito inicialmente como un simple pasatiempo, es desarrollado por Twibright Labs en el año 2000, siendo el sucesor de Links. Permite conexiones multiples, lo que facilita el estar realizando una descarga y poder continuar con la navegacion en diferentes paginas. Otra de sus características es el soporte parial para tablas y frames en HTML, permite el scroll horizontal, también el uso de marcadores, soporte de formatos gráficos antialising del texto y javascrpti4, todo esto acompañado de un menú desplegable. Soporta consolas con color o monocromo , ademas permite la pre-visualización de las páginas aún sin estar cargadas. En cuanto a la versión la ultima en la que se desarrollo fue la versión 0.98, desde entonces no se agregan nuevas características, sólo se han realizado correcciones de algunos errores. Instalación: En una terminal ejecutamos: aptitude install links2 Para ejecutarlo podemos hacerlo de dos formas: Opción1
  • 145.
    links2 Esta opción nosabrirá el navegador pero con una pantalla vacía, en la cual dependiendo de las opciones iniciamos la navegación Opción2 links2 www.esdebian.org Esta opción abrirá el navegador con la pagina indicada en este caso: www.esdebian.org, para ver el menú solo basta con presionar la tecla [Esc]. Links2 está disponible en inglés , pero podemos configurarlo al español o cualquiera de los otros 23 idiomas disponibles, si nos dirigimos a Setup > Lenguage. Atajos de teclado para Links2: • Esc: Muestra/Minimiza la barra de menú • Q: Cierra el programa preguntando antes de salir • Shift + Q / Ctrl + C: Cierra el programa sin preguntar • G : Abre una nueva linea para escribir la url a la cual se desea acceder • Shift + G: Abre la misma linea pero mostrando la ultima visitada, permitiendo modificar la dirección
  • 146.
    /: Búsqueda hacia adelante en el documento actual • ? : Búsqueda hacia atrás en el documento actual • N: Va hasta la siguiente coincidencia • Shift + N : Vuelve a la anterior coincidencia • = : Abre una ventana con información igual de la url (juego de caracteres, servidor Web, etc) • A: Añade favoritos • S: Abre el administrador de favoritos
  • 147.
    Ctrl + R : Recarga la pagina Ayuda fuera del navegador: man links2 Imagen navegardor Links2: 2.3 W3M Leer más w3m - Navegador web en línea de comandos W3m es un navegador web basado en texto, que utiliza un paginador. En general se parece mucho a Lynx, tiene soporte para tablas, marcos, conexiones SSL, soporta colores e incluso imágenes. Tambien en el caso de no encontrarnos en una consola real, brinda soporte al mouse y ademas se rige por los estandares W3C Instalación: En una terminal ejecutamos: aptitude install w3m
  • 148.
    A diferencia delas anteriores para ejecutar w3m debemos asignar una direccion url de esta forma: w3m www.esdebian.org Con esto abrirá el navegador con la pagina indicada en este caso: www.esdebian.org. Atajos de teclado ó comandos para w3m: • Shith + H: Invoca la ayuda • Q: Cierra el programa preguntando antes de salir • Shift + Q : Cierra el programa sin preguntar • Space : Desplazamiento por paginas • G : Va a la primera o ultima linea del documento dependiendo del caso • Tab: Va al siguiente enlace
  • 149.
    Alt + Tab : Vuelve al enlace anterior • Return: Siguiente enlace • Shift + B : Vuelve a la pagina anterior • U: Muestra la URL • Shift + U: Abre cuadro de dialogo para indicar nueva URL • /: Búsqueda hacia adelante con palabra clave • ?: Búsqueda hacia atrás con palabra clave
  • 150.
    V: Alterna entre la vista normal y el codigo fuente • A: Añade un documento a la lista de favoritos • B: Muestra los Favoritos • Shift + R: recarga la pagina • S: Abre historial reciente • Alt + S: Guarda el archivo en el disco • O: Abre un cuadro de dialogo para configuración personal • E: Abre la pagina en el editor (podemos escoger nuestro editor favorito en configuración)
  • 151.
    Ayuda fuera delnavegador: man w3m Imagen Navegador w3m: 3. Gestores de archivos Un administrador o gestor de archivos puede verse como una apliación que facilita el acceso a los archivos y a su vez facilita las diferentes operaciones que se pueden realizar con estos, llámese copiar, mover, eliminar, etc. Los gestores de archivos tipo consola, se caracterizan por tener uns interfaz de usuario de símbolos ascii que representan las unidades, particiones y directorios reales dentro del sistema. 3.1. Midnight Commander (MC) Midnight Commander (mc) es un gestor de ficheros, que funciona por medio de una aplicación en modo texto. La pantalla principal consiste en dos paneles en los cuales se muestra el sistema de ficheros. Y por medio de las teclas direccionales o el mouse podemos desplazarnos por estos. Y borrar, renombrar, editar, copiar ficheros, etc. MC tambien la capacidad de explorar dentro de los formatos de archivo comprimidos como si fuera un simple directorio, soporta transferencias FTP o cliente del protocolo FISH.
  • 152.
    Instalación: En una terminalejecutamos: #aptitude install mc Para ejecutarlo simplemente lo invocamos desde nuestra consola en calidad de root #mc Y listo tendremos una pantalla como la siguiente: En la cual si observamos en la parte superior se encuentra el menu principal y en la parte de abajo unos cuantos atajos de teclado con opciones como: • F1: Ayuda
  • 153.
    F2: Menú de carpeta • F3: Ver • F4: Editar • F5: Copiar • F6: Mover • F7: Crear directorio • F8: Borrar • F9: Menu principal
  • 154.
    F10: Salir • R: Actualizar • J: Ejecutar y ver archivo • B: Buscar archivos • man mc: Ayuda fuera del gestor de ficheros Temas de colores Para cambiar el tema por defecto de Midnight Commmander podemos editar el archivo ~/.mc/ini, y agregar la etiqueta [Colors] seguido de la configuración deseada de colores.Guíate con la siguiente configuración de ejemplo: [Colors] base_color=lightgray,green:normal=green,default:selected=white,gray:ma rked=yellow,default:markselect=yellow,gray:directory=blue,default:exec utable=brightgreen,default:link=cyan,default:device=brightmagenta,defa ult:special=lightgray,default:errors=red,default:reverse=green,default :gauge=green,default:input=white,gray:dnormal=green,gray:dfocus=bright green,gray:dhotnormal=cyan,gray:dhotfocus=brightcyan,gray:menu=green,d efault:menuhot=cyan,default:menusel=green,gray:menuhotsel=cyan,default :helpnormal=cyan,default:editnormal=green,default:editbold=blue,defaul t:editmarked=gray,blue:stalelink=red,default
  • 155.
    3.2. FD Clone(FD) FD (del inglés "File and Directory", "Archivo y directorio") es un gestor de archivos fácil de usar para los sistemas Unix. Como su nombre lo indica, es el clon libre de fd, el cual fue escrito por Atsushi Idei para MS-DOS (tm), siendo muy popular en Japón alrededor de 1989. Su popularidad en el país nipón fue tal que se le llego a considerar sinónimo de gestor de archivos. Fue creado en 1995 por T. Shirai. Los mensajes de estado están disponibles en inglés o en japonés. Su diseño atípico puede resultar raro al principio, ya que maneja un modo de organización de árbol para los directorios, los cuales se muestran en columnas. Al presionar → , mostrará las carpetas y contenidos dentro del mismo.En lugar de desplazarse por orden alfabético de la parte inferior de la pantalla, la lista de archivos se ajusta a la parte superior de la columna de al lado, a modo de una gran lista. Por otra parte, el no reconoce directorios o archivos que hagan uso de acentos o de la letra Ñ, además no cuenta con soporte para colores. Aún así tiene algunas opciones interesantes, por ejemplo, es capaz de leer el contenido de distintos tipos de archivos comprimidos. Las teclas del 1 al 5 pueden agregar de 1 a 5 columnas, facilitando la búsqueda o lectura de nuestros archivos. Puede desplegar la información del archivo seleccionado. Incluye también la opción de hacer busquedas recursivas. Por desgracia no hay suficiente documentación en español que nos de una idea de como configurarlo, afortunadamete su diseño sencillo lo hace fácil de manejar. Para instalarlo sólo hace falta tirar de apt: apt-get install fdclone Lo invocamos con: fd
  • 156.
    Estos son algunosde sus comandos básicos: • Retroceso Atrás • Bs:Directorio raiz • l: Directorio de entrada • Tab: Seleccionar el archivo • c: Copiar archivos • m: Mover archivos • d: Eliminar
  • 157.
    k: Crear directorio • D: Eliminar directorio • r: Renombrar archivos • 1,2,3,5: Aumentar o disminuir el número de columnas • s: Ordenar por tipo de archivos • t: Ver el esquema de árbol del directorio • h: Ejecutar una orden • u: Descomprimir
  • 158.
    f: Buscar • ?: Invoca a la ayuda (en japonés) • Esc (q): Salir de FD clone En definitiva, es una gran opción si buscamos algo diferente, sencillo y rápido. 3.3. Vladi File Manager for Unix (VFU) VFU es un gestor de archivos minimalista versátil y extensible basado en ncurses para los sistemas Unix. Fue escrito por Vladi Belperchinov-Shabanski.Incluye gran parte de las acciones de un gestor de archivos, como copiar, cortar, renombrar ficheros, extracción de archivos comprimidos, navegación por directorios, ftp, edición de texto y automontaje de dispositivos extraibles. La primera vez que lo ejecutemos notaremos que sólo dispone de una columna, la cual se divide en secciones donde nos muestra información relevante de nuestros ficheros, como la fecha de creación y sus permisos. Vfu se maneja por medio de combinaciones de teclado. Podemos entrar en un directorio si damos enter, así como para salir del mismo si pulsamos la tecla retroceso.Si pulsamos retroceso si estamos seleccionando un archivo, esta acción abrirá un pequeño editor de textos. Con la tecla H invocamos a la ayuda y con U nos da la posibilidad de introducir un comando externo. Para instalarlo: apt-get install vfu Lo ejecutamos con: vfu
  • 159.
    Colorear archivos segúnsu extensión En el fichero vfu.conf (localizado en nuestro home), tenemos la opción de activar el coloreado de archivos, en un editor de textos buscamos la siguiente linea: cGREEN=.ext.ext.ext. La cual dice que mostrará en color verde los archivos citados, por ejemplo : cGREEN=.txt.odf.rc.TXT. En el ejemplo, vfu mostrará los documentos de texto en color verde. chGREEN=.ext.ext.ext. La variable "h" provocara que los archivos citados se visualicen en verde claro. Por ejemplo: chGREEN=.TXT. Podemos usar otros colores: cMAGENTA=.ext.ext.ext. cCYAN=.ext.ext.ext. cRED=.ext.ext.ext. cBLUE=.ext.ext.ext. cYELLOW=.ext.ext.ext. Algunos atajos de teclado: C: Copiar. D: Cambiar directorio. E: Eliminar. G: Seleccionar todo, deseleccionar todo I: Editar archivo. H: Muestra el archivo de ayuda.
  • 160.
    N: Buscar ←: Renombrar archivo. ~: Transporta el directorio seleccionado a la carpeta home. Q: Salir Ayuda fuera de vfu: man vfu 4. Clientes de mensajería instantánea La mensajería instantánea ha facilitado mucho la conexión y comunicación de usuarios a través de internet, y puede que esta herramienta en muchas ocasiones sea de uso necesario para cierto tipo de personas, las que a la vez pueden ser amantes de las tan seductoras tty's. Para este y otro tipo de personas (curiosos) tambien existen los mensajeros instantáneos para la consola. Estos son sólo algunos : 4.1 Pebrot Pebrot es la solución para los msn-adictos, que ven como necesidad de estar conectados la mayoria del tiempo con el mundo de la internet, este esta desarrollado en su gran mayoria en python y exclusivamente para sistemas de tipo *nix Este programa posee una interface sencilla pero a su vez lo suficiente funcional, es decir soporta cosas tales como conversaciones multiples por medio de pestañas y establecer tu estado de conexión (disponible, ocupado, etc). Nota: Como requerimiento para su funcionamiento debe estar instalado Python 2.2 o superior Instalación Para la instalación debemos descargar de la página del proyecto el Pebrot el correspondiente .tar.gz y luego desde consola por medio del comando cd ingresamos a la correspondiente ruta en la cual hemos descargado nuestro .tar.gz de la siguiente forma. Nota:La siguiente instalación se realizo desde el escritorio de root #cd /root/Desktop/ Despues de esto procedemos a descomprimir y desempaquetar el archivo que hemos descargado: #tar -zxvf pebrot-0.8.8.tar.gz Procedemos a instalarlo con: #python setup.py install Configuración Pebrot
  • 161.
    Abrimos con nuestroeditor favorito el archivo pebrotrc, para este caso especifico, lo haremos de la siguiente forma: nano /root/Desktop/pebrot-0.8.8/pebrotrc Y en este configuramos las diferentes opciones disponibles, de acuerdo a nuestras preferencias, a continuación os muestro unos cuantos detalles Nota:Agregaremos o las siguientes lineas del archivo de acuerdo a las opciones que deseemos. La configuración de nuestra cuenta es indispensable para el funcionamiento de pebrot. Configuración Cuenta User= este_es_mi_correo@hotmail.com Password= esta_es_mi_contraseña Estado: state= NLN #Comentarios de mas estados: #NLN: En línea #FLN: Fuera de línea #HDN: Invisible ó Desconectado #IDL: Inactivo #Awy: Ausente #BSY: Ocupado #NPH: Al Teléfono #y demás Activar conversaciones: Show_invited= 1 1 Conversaciones múltiples 0 Conversación única Campanilla ante un nuevo mensaje: Beep_on_msg= 1 1 sonara la campanilla cuando reciba un mensaje 2 campanilla desactivada Campanilla para nueva conversación: Beep_on_new_chat= 1
  • 162.
    1 sonara lacampanilla cuando alguien empiece a conversar con usted. 0 Campanilla desactivada Descargas: Download_dir= /esta/es/mi/ruta/descargas-msn Para mayor información acerca de mas configuraciones pueden revisar el archivo README, en este se encuentran detalladas cada una de las opciones de configuración y personalización de nuestro msn tipo consola. Imagen Pebrot: 4.2. CenterIM CenterIM (también conocido como "cim")es un mensajero instantáneo multiprotocolo y multiplataforma, basado en ncurses para los sistemas *nix publicado bajo la licencia GPL. Es un fork del mensajero CenterICQ. Instalación: En una terminal ejecutamos: #aptitude install centerim-utf8 Ejecución y configuración: Para ejecutarlo simplemente lo invocamos desde la consola de la siguiente forma: centerim-utf8
  • 163.
    Una vez llevadoacabo, las primeras pantallas mostradas por el programa son en su mayoría de configuración. Configuración de cuenta Jabber Servidor: Servidor:5223 Secured: sí Nombre de Usuario: Mi_usuario Contraseña: Mi_contraseña Priority: 4 Msn Servidor: messenger.hotmail.com:1863 Nombre de Usuario: Mi_usuario Contraseña: Mi_contraseña Configuración de codificación Utf8 Para que CenterIM muestre correctamente los carácteres en las cuentas Msn hace falta configurar lo siguiente: Switch to lenguaje present: None Remote charset: sp1250 Local charset: utf-8 For protocols: msn Hecho esto no tendremos problemas con acentos, diéresis o la letra "ñ". Atajos de teclado ó comandos para Centerim: • F2: Menú de opciones sobre un contacto especifico • F3: Estado, ya sea conectado, no disponible y demas. Para seleccionarlo utilizamos la tecla Space
  • 164.
    F4: Menú general • Ctrl + N / Ctrl + B: Siguiente / Anterior chat • Q: Salir Imagen CenterIM: Ayuda fuera de Centerim: man centerim 4.3. Finch Finch es completo cliente de mensajería multiplataforma y multiprotocolo, sencillamente es la versión de Pidgin para la línea de comandos. Para instalar Finch:
  • 165.
    apt-get install finch Invocamoscon: finch La primera vez que ejecutamos Finch notamos que viene con una agradable interfaz que se ve totalmente diferente en comparación con la mayoría de los clientes en modo texto. En otras palabras, disponemos de la interfaz de Pidgin bajo la línea de comandos. Cuenta con ventanas pop-up que se abren conforme nos envien mensajes, así como la capacidad de cerrarlas, minimizarlas o maximizarlas. Podemos editar los atajos del teclado, la configuración de los colores y el registro de nuestras conversación con un archivo de texto. Una vez dentro de Finch, este nos solicitara la información de nuestra(s) cuentas de MI, usamos la tecla TAB para desplazarnos por los menús. Terminando el llenado de nuestros datos, salimos del programa y volvemos a ejecutarlo. Si todo ha salido bien, debemos de tener algo como esto en la pantalla: Atajos de teclado: • Salir de las ventanas: ALT-c. • Cambiar entre ventanas: ALT-n o ALT-p. • Abrir el menú de cada ventana: F10. • Redimensionar ventanas: ALT-r y luego alguna de las flechas. • Cambiar a la n-ésima ventana: ALT-n. • Mover las ventanas: ALT-m. • Ver todas las acciones posibles (e.g., agregar cuentas): ALT-a. Por otro lado Finch requiere algunas librerías innecesarias de Pidgin, gtk y gnome para funcionar. Pero a manera de evitar esto, se puede optar por la compilación de Finch desde el código fuente de Pidgin. Descargamos el código fuente desde la página oficial de Pidgin.
  • 166.
    Simplemente añade lossiguientes parametros en la orden "configure". ./configure --disable-gtkui --disable-vv --disable-meanwhile --disable-avahi - -disable-nm --disable-tcl Y prosigue con el proceso de compilación. 4.4. Bitlbee Leer más Bitlbee Con bitlbee podremos hacer uso de la mensajería instantánea a través de nuestro cliente de IRC preferido. Bitlbee soporta los protocolos XMPP/Jabber (Google Talk incluído), MSN Messenger, Yahoo! Messenger, AIM y ICQ, y es una buena opción si somos usuarios de IRC y no queremos utilizar otro cliente adicional para la mensajería instantánea. Nuestro entorno de trabajo será una Debian Sid/Experimental, aunque este dato carece de especial relevancia, puesto que bitlbee se encuentra en todas las ramas de Debian. Para empezar lo instalamos, #aptitude install bitlbee Permitiremos el acceso a nuestra máquina en /etc/hosts.allow y reiniciamos. #nano /etc/hosts.allow bitlbee: 127.0.0.1 5. Reproductores de Música En el caso de los reproductores de música existen también varias opciones, aquí enunciaremos unas cuantas: 5.1. Music Player Daemon (mpd) Leer más mpd (Music Player Daemon) Una de las cosas que se nos plantean a la hora de instalar y utilizar Debian es la elección de un reproductor para nuestra música. Aquí os presento el mpd (Music Player Daemon). En realidad es un demonio del sistema, con muchísimas funcionalidades, que funciona con la arquitectura cliente-servidor. Entre los formatos soportados se encuentran mp3, ogg, flac, musepack, mp4, aac y wave, y es muy bueno y rápido para colecciones grandes de música. En esta ocasión nos centraremos en su uso para la reproducción de música en el mismo equipo en el que está instalado.
  • 167.
    Bien, lo primeroes instalarlo. # aptitude install mpd En /etc aparece el archivo de configuración del mpd, mpd.conf, que pasamos a editar según nuestras necesidades. En este punto, hay varias maneras, dejaré aquí expuesta la que para mí es más sencilla. Creamos los directorios necesarios en nuestro home: # mkdir /home/arctica/.mpd # mkdir /home/arctica/.mpd/playlists 5.2. Mp3Blaster Mp3Blaster es un programa reproductor de ficheros de audio que soporta formatos tales como:mp3,wav y ogg, posee una interfaz gráfica basada en consola con menús para la facil navegación entre las diferentes opciones. Entre sus caracteristicas se encuentran el control de volumen, selector de carpetas, mezclador y por supuesto su bajo consumo de memoria. Instalación: En una terminal ejecutamos: #aptitude install mp3blaster Ejecución: mp3blaster Atajos de teclado ó comandos para mp3blaster: • F1: Añadir ficheros a la lista. • F2: Invertir selección. • F3: Seleccionar todo recursivamente.
  • 168.
    F4: Ingresar nueva dirección. • F5: Añadir directorios como grupos. • F6: Convertir MP3 a WAV. • F7: Add URL(shoutcast) • /: Iniciar búsqueda. • Space: Seleccionar archivo. • r: Renombrar fichero.
  • 169.
    U: Deseleccionar todo. • D: Eliminar fichero. • <: Bajar volumen del mezclador. • >: Subir volumen del mezclador. • q: Salir del programa. • ?: Invocar ayuda. • 4: Canción anterior. • 5: Reproducir/Pausar canción.
  • 170.
    6: Canción siguiente. • 1: Retroceder canción. • 2: Deneter canción. • 3: Avanzar canción. Os dejo con una imagen:
  • 171.
    Ayuda fuera delgestor de reproductor: man mp3blaster 5.3. MOC Leer más MOC - Music on console Características: • MOC es un reproductor de audio fácil de manejar y ligero, ideal para equipos con pocos recursos. • La interfaz es similar a MC (Midnight Commander, el administrador de archivos) • MOC reproduce todos los archivos en el directorio a partir del archivo seleccionado para lo que no es necesario crear listas de reproducción. • Es posible reproducir varios archivos o directorios de archivos y después guardar la lista de reproducción como un archivo con extensión m3u. • Funciona como demonio, es decir que se ejecuta en segundo plano por lo que no necesita entorno gráfico. Esto quiere decir también que si necesitas usar la terminal, el emulador de terminal ó cerrar el entorno gráfico no es necesario detener la reproducción ya que ésta sigue activa en segundo plano. Esto lo hace una gran opción para cuando estas configurando kdm, los drivers de la tarjeta de video o cosas por el estilo y por supuesto para manejadores de ventanas y entornos minimalistas • Soporta los siguientes formatos: mp3, Ogg Vorbis, FLAC, Musepack, Speex, WAVE, AIFF y AU entre otros. • Soporta Internet stream. • Soporta temas de configuración. 6. Control de Procesos
  • 172.
    Normalmente para lavisualización y detalle de los procesos en consola utilizamos el siguiente comando: #ps aux Pero en caso dado de neecsitar matar algun demonio, debemos aprendernos el correspondiente número de su PID, y en el caso de que dicho proceso sea mantenido por varios demonios, tendremos que aprendernos varios números PID para luego proceder a matarlos. En este caso os presento una herramienta que facilitara mucho mas la visualización y control de los procesos. 6.1. HTop HTop es un visor de procesos con interfaz basada en ncurses que permite gestionar procesos. Entre las grandes ventajas que nos ofrece está el monitoreo del sistema mostrando el estado de la memoria RAM, la Swap y el consumo de CPU. Instalación: # aptitude install htop Para la ejecución simplemente lo invocamos por su nombre: $ htop Puede ser ejecutado por cualquier usuario y dependiendo de los privilegios este sobre los procesos que se están ejecutando en el sistema, podrá o no ejecutar tareas como terminar o matar estos procesos. La vista de la aplicación:
  • 173.
    Atajos de tecladoó comandos para HTop: • F1: Invoca la ayuda • F2: Opciones de configuración • F3: Buscar • F4: Cambiar orden
  • 174.
    F5: Mostrar árbol de procesos • F6: Ordenar utilizando un parametro especifico • F7: Aumenta el valor de asignación del proceso • F8: Disminuye el valor de asignación del proceso • F9: Enviar una señal a un proceso (Kill) Para más detalles se recomienda leer el manual: $ man htop 7 Consultando el estado del tiempo En algunos entornos de escritorio tenemos aplicaciones que nos dicen el estado actual del tiempo. En la consola también: 7.1 Weather-util
  • 175.
    Weather-util es unaaplicación muy simple, para consultar el estado del tiempo en cualquier ciudad del mundo. Instalación Ejecutamos como root en una consola: #aptitude (o apt-get) install weather-util Para ejecutarlo, escribimos: weather -i código_de_la_ciudad Para obtener el código de la ciudad, tenemos que buscarlo en esta página Ahí, en la parte de abajo, veremos una opción que dice: "Display all stations in a country" ("Mostrar todas las estaciones en un país") y ahí buscar el país que nos interese. Si queremos ampliar la información mostrada en pantalla por weather, tenemos que agregar el parámetro: -v También nos da la posibilidad de obtener un pronóstico con el parámetro -f, pero eso solamente está disponible para ciudades de Estados Unidos Podemos definir aliases en el archivo $HOME/.weatherrc de la siguiente forma: [alias] City = Ciudad Forecast = True/False (para el pronóstico del tiempo) ID = código_de_la_ciudad Verbose = 1/0 (verdadero/falso) (con esto le indicamos si queremos usar o nó el parámetro -v) Y luego ejecutamos el programa pasándole el alias como parámetro. Ejemplos Este es mi $HOME/.weatherrc: [Montevideo] City = Montevideo Forecast = False ID = SUMU (este es el código de una de las estaciones meteorológicas de Montevideo) verbose = 1 Salida del programa ejecutando weather Montevideo (que, según mis definiciones en $HOME/.weatherrc, es equivalente a ejecutar weather -i sumu -v): Carrasco, Uruguay (SUMU) 34-50S 056-00W 32M Mar 01, 2010 - 05:00 PM EST / 2010.03.01 2200 UTC Wind: from the SE (130 degrees) at 10 MPH (9 KT):0
  • 176.
    Visibility: greater than7 mile(s):0 Sky conditions: mostly clear Temperature: 73 F (23 C) Dew Point: 68 F (20 C) Relative Humidity: 83% Pressure (altimeter): 30.00 in. Hg (1016 hPa) ob: SUMU 012200Z 13009KT 9999 FEW030 23/20 Q1016 NOSIG cycle: 22 8. Montar unidades externas Dentro de la consola Debian también es posible montar nuestros dispositivos de almacenamiento externo haciendo uso del comando mount. Pero a la larga el montaje manual puede resultar engorroso y repetitivo. Así el usuario puede echar de menos el montaje automático que hacen algunos entornos de escritorio populares en el modo gráfico, como GNOME o KDE. Por fortuna tenemos esa opción disponible en nuestra línea de comandos. Para poder hacer uso de la misma, debemos de tener instalado con anterioridad los paquetes usbmount y autofs. apt-get install usbmount apt-get install autofs A continuación se deberá de editar el archivo usbmount.conf para habilitar el montaje automático. emacs /etc/usbmount/usbmount.conf Haciendo las siguientes modificaciones. FILESYSTEMS=”vfat ext2 ext3″ MOUNTOPTIONS=”sync,noexec,nodev,noatime,users,umask=000″ Guardamos los cambios y reiniciamos el ordenador, ahora al conectar un dispositivo usb este se montará automáticamente dentro de la carpeta /media/usb*. 9. Redes sociales 9.1 Twidgwe Twidge es un cliente de consola para las redes sociales Twitter e identi.ca; con el podremos realizar una serie de tareas comunes en estos sitios de "microblogging" sin necesidad de abrir un navegador web. Actualmente se encuentra en los repositorios de testing/unstable, por lo que instalarlo no implica más que: apt-get install twidge
  • 177.
    Obviamente, necesitaremos unacuenta en cualquiera de los dos servicios para poder utilizarlo. Antes de ejecutarlo por primera vez, es necesario configurarlo. Para ello: twidge setup Este comando nos guiará de forma muy clara en la configuración de la aplicación; nos solicitará usuario y contraseña y, en el caso de Twitter, se genera una url a la que debemos acceder para "decirle" a Twitter que permitimos a twidge acceder a nuestros datos mediante el API. A continuación, ya podremos utilizar twidge. Si lo ejecutamos, nos dirá esto: usuario@host ~ $ twidge Invalid command name help Usage: twidge [global-options] command [command-options] Available global-options are: -d --debug Enable debugging -c FILE --config=FILE Use specified config file --help Display this help Run "twidge lscommands" for a list of available commands. Run "twidge command --help" for help on a particular command. This is Twidge, version 1.0.5. Copyright (c) 2008-2010 John Goerzen Para saber qué es lo que podemos hacer, ejecutamos: twidge lscommands Este comando nos muestra todos los comandos disponibles de este modo: All available commands: Name Description -------------------- ------------------------------------------------------- dmsend Send direct message block Start blocking someone follow Start following someone lsarchive List recent status updates you posted yourself lscommands Display a list of all available commands lsdm List recent direct messages to you lsdmarchive List recent direct messages you sent lsblocking List people you are blocking lsfollowers List people that follow you lsfollowing List people you are following lsrecent List recent updates from those you follow lsreplies List recent replies to you lsrt List recent retweets from those you follow lsrtarchive List recent retweets you made yourself lsrtreplies List others' retweets of your statuses setup Interactively configure twidge for first-time use unblock Stop blocking someone unfollow Stop following someone update Update your status
  • 178.
    ‹ Localizar yeliminar líneas que coincidan con una expresión regular específicaarribaAdministración del Sistema › Archivos configuración de Bash Archivos Configuración de Bash Solo hablaré de bash, aunque me refiera a ella como shell o consola, la configuración de otras shells puede ser similar o igual. Ficheros inicialización de una sesión de login shell. p.e. ttys /etc/profile El primero en leerse automáticamente por bash cuando este es invocado en modo login (P.e. las ttys). En este fichero se configuran muchas de las variables de bash (PATH, USER, MAIL, HOSTNAME ...) y otros valores como umask. Resumiendo,en él se incluyen variables generales del sistema. Pero como este fichero es leido por muchas shells, no solo bash, es mejor poner las configuraciones de esta en otros archivos específicos. ~/.bash_profile El segundo en orden en ser leído por bash. Normalmente poco se mete en este archivo, lo mas importante es que indica a bash que lea otros archivos como ~/.bash_login, ~/.profile, ~/.bash_logout ~/.bash_login Normalmente el tercero en ser leído, si existe indica los comandos que correrán al momento de logearse, normalmente, son cosas como indicar la fecha, el nº de usuarios conectados ... ~/.profile Equivalente a /etc/profile pero especifico de cada usuario, este archivo es leído por mas shells, aparte de bash. Puede ser leído por shells nologin si estas arrancan con la invocación a sh. ~/.bash_logout Fichero con opciones para el momento del cierre de un login shell, lo mas habitual es que se incluya el comando clear y nada mas. Ficheros inicialización para nologin shells /etc/bash.bashrc Bash lee y ejecuta las ordenes de este fichero. En el se incluyen variables generales del sistema, es como un /etc/profile pero que carga cada vez que arrancamos una shell en X o cualquier instancia de bash nologin, no es necesario reiniciar para que la shell acepte los cambios. Su uso no es habitual. también es leído cuando se ejecuta bash a través de un demonio de consola remota (p.e. rshd) /etc/bashrc
  • 179.
    Puede cumplir lasmismas funciones que /etc/profile. Si existe, se leerá a continuación de /etc/bash.bashrc, solo que este es leído únicamente por bash, excluyendo otras shells, por lo que si en nuestro sistema usamos varios tipos, podríamos dedicar este fichero para configurar bash. ~/.bashrc Aquí es donde habitualmente se establece el prompt y los alias. Es un fichero para uso individual de cada usuario de consolas que no necesitan login, sin embargo es muy común que este archivo sea invocado desde ~/.profile por lo que también afectará a consolas login. Si queremos modificaciones individuales, este es el archivo a modificar, con preferencia a todos los anteriores. Nota: entiendasé por nologin shell a toda shell a la cual se accede sin necesidad de ingresar usuario y contraseña como ser xterm, konsole, gnome-terminal o bien la ejecución de una nueva instancia del shell sobre una shell ya activa (p.e. ejecutar $ bash). Es también un caso de nologin shell el escalar/degradar privilegios mediante $ su. En la practica podrá identificar un nologin shell sabiendo que no es posible salir de ellas mediante logout. Otros archivos relacionados Existen otros muchos archivos que se puede utilizar para configurar conductas de la shell Bash. Pero son de raro uso. Como ejemplo: ~/.bash_aliases Fichero al que añadir como su nombre indica, alias. No es en principio necesario, ya que .bashrc cumple esa función. Solo en casos muy raros puede interesar separar esos alias, de los que usamos habitualmente y "alimentar" bash con: source .bash_aliases. ~/.bash_history Historial de comandos. Referencias: man bash ‹ Línea de ComandosarribaAutologin en Debian ›
  • 180.
    Localizar y eliminarlíneas que coincidan con una expresión regular específica Script cuyo objetivo no es otro que eliminar de un fichero todas aquellas líneas que contengan una cadena determinada. Para ello uso la muy potente y siempre buena amiga mía herramienta sed... La sintaxis, para este objetivo sería: sed '/expresión regular o cadena/d' fichero Si, solo eso, Es simplemente decirle a sed que encuentre esa y la sustituya por... Nada! Y bueno, la "d" al final lo que hace es eliminar esa línea en blanco... Para eliminar las trazas, digamos, de una IP 192.168.1.1 del fichero access.log, quedaría algo así: sed '/192.168.1.1/d' /var/log/squid3/access.log Y voilá! Listo! Claro que esto lo que hará será devolvernos en la salida estándard el contenido de dicho fichero ya sin las líneas que alguna vez contuvieron la IP 192.168.1.1... Para guardar esto debemos enviar dicha salida a un fichero temporal y luego renombrarlo al fichero original... El proceso completo quedaría así: sed '/192.168.1.1/d' /var/log/squid3/access.log > foo mv foo /var/log/squid3/access.log Y listo Enjoy it ! ‹ Lista de comandos de GNU/Linux (III)arribaViviendo en Consola ›
  • 181.
    Comprobar configuración ifconfig Si nose pasan argumentos, muestra el estado de los interfaces activos. Si se pasa un sólo argumento de interfaz, muestra sólamente el estado de ese interfaz. Con el argumento -a, muestra el estado de todos los interfaces, incluso de aquellos que no están activos. De otros modos, configura un interfaz. Parada e inicio de los servicios de red La red se configura durante el arranque con el script /etc/init.d/networking, que activa todas las interfaces de red que aparecen en las secciones auto de /etc/network/interfaces. Mediante la línea de comando podemos iniciar, parar o reiniciar los sevicios de red, con los siguientes comandos: sudo /etc/init.d/networking start sudo /etc/init.d/networking stop sudo /etc/init.d/networking restart Siempre que modificamos el fichero de interfaces, debemos de reiniciar los servicios de red. (También se disponemos de los comandos ifup e ifdown) El fichero /etc/network/interfaces Contiene la configuración de las interfaces de red, cada interfaz de red a configurar aparece en una sección. Cómo se configuran las interfaces de red más habituales: Loopback o interfaz de retorno: dirección IP 127.0.0.1. El archivo /etc/network/interfaces incluirá la sección: auto lo iface lo inet loopback Configuración DHCP de la tarjeta de red Si desea configurar su tarjeta de red para obtener una dirección DHCP. # The primary network interface auto eth0 iface eth0 inet dhcp
  • 182.
    Después de introducirtoda la información y guardar el archivo, se necesita reiniciar los servicios de red. Configurar manualmente la dirección IP de la tarjeta de red Si desea configurar la dirección IP editamos el archivo /etc/network/interfaces y tecleamos los datos de nuestro direccionamiento. # The primary network interface auto eth0 iface eth0 inet static address 192.168.208.7 netmask 255.255.255.0 network 192.168.208.0 broadcast 192.168.208.255 gateway 192.168.208.208 Después de introducir toda la información y guardar el archivo, reiniciar los servicios de red. Los parámetros son: Static (IP estática): Si en la LAN hay un servidor DHCP y tenemos IP dinámica, pondremos dhcp. address (dirección IP de la máquina en la LAN): cada interfaz de red conectada a una red IP es identificada por una IP única de cuatro bytes (32 bits). El rango de IPs reservadas para LAN es de 192.168.0.0 a 192.168.255.255ç netmask (máscara de red de la LAN): es un número que establece qué parte de la IP de un host corresponde a la red y qué parte corresponde a la máquina. También nos indica la cantidad máxima de equipos que podemos tener en nuestra red. network (dirección IP de la LAN): es la parte de la IP de la máquina común a todas las máquinas de la red. broadcast (dirección de difusión): es la IP a la que se mandan los paquetes que deben recibir todas las máquinas de la LAN. gateway (dirección de pasarela o puerta de enlace): es la IP de la máquina de nuestra LAN a través de la cual salimos hacia el exterior. Un gateway es una máquina que tiene dos intefaces de red (una tarjeta conectada a nuestra LAN y la otra conectada a una red exterior), cada una de ellas con una IP, la que le corresponda en esa red. La IP del gateway suele ser la primera IP disponible (192.168.1.1) o la última (192.168.1.254).
  • 183.
    Establecer el nombrede host del sistema Para ver el nombre del host tecleamos: hostname Podemos establecer el nombre del host tecleando: sudo /bin/hostname NUEVO_NOMBRE Cuando su sistema arranca automáticamente se lee el nombre de host del archivo /etc/hostname Configuración de DNS Para hacer que el sistema consulte con uno o varios servidores de nombres, sólo tiene que añadir sus direcciones en /etc/resolv.conf. Por ejemplo, una máquina que debe realizar búsquedas desde el servidor DNS con la dirección IP 192.168.1.200 el archivo resolv.conf tendra lo siguiente: nameserver 192.168.1.200 Podemos añadir varios nameserver.
  • 184.
    F a mi l i a r i z á n d on o s c o n L i n u x 1. Historia ........................................................................................................... 3 Antecedentes:.....................................................................................................................3 Nacimiento:.........................................................................................................................3 Expansión de Unix:.............................................................................................................3 Evolución: ...........................................................................................................................4 La G.N.U.............................................................................................................................5 Distribuciones de Linux. .....................................................................................................6 2. Generalidades de la gestión del S.O. ........................................................... 6 3. Características ............................................................................................... 7 4. Estructura del S.O. UNIX ............................................................................... 8 Kernel o Núcleo ..................................................................................................................8 Dispositivos ........................................................................................................................8 Utilidades ............................................................................................................................8 SHELL o Caparazón...........................................................................................................8 5. Primera Aproximación................................................................................... 9 Antes de entrar al Sistema: ................................................................................................9 Escribir algunos comandos para tomar contacto. ..............................................................9 6. Algunas utilidades para experimentar. ...................................................... 10 Consultar el manual..........................................................................................................10 Hacer cálculos ..................................................................................................................10 Mirar el almanaque ...........................................................................................................11 7. Conceptos Básicos del Sistema de Ficheros ............................................ 12 Distribución de la información en disco: ...........................................................................12 Inodos ...............................................................................................................................12 Los ficheros pueden ser esencialmente de tres tipos: .....................................................13 Trayectoria o pathname:...................................................................................................16 Nombres de ficheros y Metacaracteres............................................................................16 8. Trabajo del Usuario con Ficheros Ordinarios. .......................................... 18 Formato de las órdenes....................................................................................................18 Crear ficheros ...................................................................................................................18 Listar nombres e informacion sobre ficheros....................................................................18 Copiar, Mover, Enlazar y Borrar Ficheros. .......................................................................19 Permisos, Propietario y Grupo. ........................................................................................21 El Sistema Operativo Unix - Linux 1
  • 185.
    9. Operaciones ConFicheros Directorios...................................................... 27 10. Flujo De Información. .................................................................................. 29 Entrada y salidas estándar (std).......................................................................................29 Redireccionamiento:.........................................................................................................29 Tuberías (pipes): ..............................................................................................................30 Filtros para: Contar, Ordenar y Eliminar Repetidos..........................................................31 Filtros para ver que hay en los ficheros............................................................................34 Filtro para cambiar caracteres..........................................................................................35 Buscar en ficheros. Familia grep. .....................................................................................37 Comparacion de Ficheros. ...............................................................................................38 Cortar y Pegar Ficheros. ..................................................................................................39 11. Búsqueda de ficheros. ................................................................................ 41 12. Editores: ....................................................................................................... 44 Editor VIsual. Generalidades. ...........................................................................................44 Configuración ...................................................................................................................46 Búsquedas y reemplazos. ................................................................................................48 Los Búfers del VI ..............................................................................................................49 13. Comunicación entre Usuarios .................................................................... 51 finger.................................................................................................................................51 who ...................................................................................................................................51 w .......................................................................................................................................51 write ..................................................................................................................................52 wall....................................................................................................................................52 Mensaje del día. ...............................................................................................................53 Mensaje de preentrada.....................................................................................................53 mail ...................................................................................................................................53 El Sistema Operativo Unix - Linux 2
  • 186.
    Historia Antecedentes: El SO Multics se utilizó durante algún tiempo en los laboratorios Bell. En Europa se había desarrollado el sistema de acceso multiple de Cambridge (The Cambridge Multiple Access System). También se empleó durante algún tiempo el CTSS (sistema de tiempo compartido compatible). Los desarrolladores de Unix aprovecharon este trabajo realizado con estos y otros sistemas operativos, para combinar las mejores características de cada uno. Nacimiento: El UNIX surgió en 1964-66 cuando Ken Thompson intentaba utilizar un programa de un ordenador grande, que funcionaba con el SO Multics, en otro ordenador llamado PDP-7. Para ello escribió un sistema operativo nuevo llamado UNIX. A él se unió Dennis Ritchie y el UNIX se comenzó a utilizar en los laboratorios Bell. Pronto se adaptó a otros ordenadores y tuvo gran aceptación en el ambiente universitario, del cual recibió un gran impulso, en especial de la Universidad de Berkeley en California. En un principio fue escrito en Ensamblador, pero el hecho de que se pudiese adaptar a muchos tipos de ordenadores (portabilidad), se debe a que se reescribió casi en su totalidad en lenguaje C, lenguaje de nivel medio desarrollado por Dennis Ritchie modificando otro ya existente llamado lenguaje B. El nacimiento de UNIX y el lenguaje C se hizo a la par y su posterior desarrollo continuó paralelo. Expansión de Unix: El sistema operativo Unix ha estado ejecutándose en ordenadores más de 40 años. En un principio se ejecutaba en mainframes y miniordenadores, aunque su principal plataforma de desarrollo han sido las estaciones de trabajo RISC. En la actualidad el acercamiento de los PC,s a las estaciones de trabajo ha hecho de las plataformas Intel una buena base para utilizar Unix. Debido a la gran portabilidad que ofrece el lenguaje C, no pasó mucho tiempo antes de que creasen versiones destinadas a otros procesadores. La evolución de Unix comenzó a complicarse cuando Unix se escindió para satisfacer a diferentes plataformas hardware. Por un lado se obtuvo Xenix, de Microsoft, el primero en ejecutarse en ordenadores Intel. La versión BSD, desarrollada en la Universidad de California, en Berkeley, encontró alojamiento en multitud de miniordenadores de alta potencia. Unix 2.0, el predecesor del presente System V Unix de AT&T, fue el que más atención acaparó y es el estándar de hoy en día. El diagrama muestra un árbol genealógico de Unix desde 1969 hasta nuestros días. Obsérvese cómo Unix se divide en varias versiones. Además, es importante destacar de qué forma se combinaron diversas versiones con el fin de obtener nuevos enfoques del sistema operativo. El nacimiento de híbridos de diferentes versiones parece la tendencia del momento. Algunos de los elementos más destacables de esta numerosa familia son AIX, el sistema operativo IBM RS/6000, Solaris de SunSoft y Mach. El árbol genealógico de Unix.: El Sistema Operativo Unix-Linux Comandos Básicos 3
  • 187.
    Evolución: Cuando Unix era joven (versión 6), su código fuente se encontraba por todas partes, con autorización de AT&T, y se estudiaba frecuentemente en muchas universidades, de las cuales había recibido y recibía un gran impulso. Pero AT&T, en la versión 7 (1979), comprendió que Unix era un valioso producto comercial; y prohibió el estudio y distribución del código fuente, para evitar poner en peligro su condición de secreto comercial. Para remediar la situación y especialmente con fines educativos, en 1983, Andy Tannembaum desarrolló un SO nuevo en cuanto a código, pero compatible con Unix en cuanto a su funcionalidad, evadiendo los problemas legales para su estudio. Lo llamó Minix de Mini-Unix. Finalmente su creador cedió todos los derechos sobre Minix a una empresa que comenzó a cobrar por licencia. A principios de la decada de los 90, un estudiante de informática se pone a trabajar en una variante de Unix llamada Linux, con la idea de que estubiese enmarcado dentro del proyecto GNU. El padre de la criatura es Linus Benedict Torvalds, nacido en Helsinki en 1969. El 5 de octubre de 1991 Linus dio a conocer la primera versión oficial, que podía ejecutar el bash (shell de GNU) y el compilador de C. Lo puso en un grupo de noticias con el siguiente mensaje: El Sistema Operativo Unix-Linux Comandos Básicos 4
  • 188.
    ”¿Suspiráis por recordaraquellos días del Minix-1.1, cuando los hombres eran hombres y escribían sus propios drivers? ¿Os sentís sin ningún proyecto interesante y os gustaría tener un verdadero SO, que pudierais modificar a placer? ¿Os resulta frustrante el tener sólo a Minix? Entonces, este artículo es para vosotros. Como dije hace un mes, estoy trabajando en una versión gratuita de algo parecido a Minix para ordenadores AT-386. He alcanzado la etapa en la que puede ser utilizable y voy a poner las fuentes para su distribución. Es sólo la versión 0.02 ... pero he conseguido ejecutar en el bash, gcc, gnu-make, gnu-sed, compress, etc.” Tras esta versión y el apoyo de voluntarios “enganchados” a Internet, no ha dejado de evolucionar y mejorarse: 1992 Linus añadió Linux al proyecto GNU. Abril de 1992, aparece la primera versión capaz de ejecutar X. Abril de 1994, primera versión completa de Linux, la 1.0. Diciembre de 1996 aparece la versión 2.0. Para comprobar la versión actual http://www.kernel.org Linux ha sido registrado bajo los términos de la Licencia Pública General GNU (GNU General Public License) o GPL. Esta licencia, escrita por la Free Software Foundation (FSF), está diseñada para evitar que alguna persona restrinja la distribución de software. En pocas palabras, dice que aunque Ud. cobre a alguien por entregarle una copia, no podrá impedir que ese alguien la regale. También significa que debe estar disponible el código fuente. Esto es útil para los programadores. Cualquiera puede modificar Linux y aún distribuir sus modificaciones, siempre que mantenga el código bajo la misma licencia. La G.N.U. Linux está regido por lo que se conoce como la Licencia Pública General de GNU, o GPL, General Public License. La GPL fue desarrollada para el proyecto GNU por la Free Software Foundation, que podemos traducir como "Fundación por el Software Gratuito". La licencia hace una serie de previsiones sobre la distribución y modificación del "software gratis". "Gratis" en este sentido se refiere a libertad, y no sólo al coste. La GPL puede ser interpretada de distintas formas, y esperamos que este resumen ayude a entenderla y cómo afecta a Linux. Se puede encontrar una copia completa de la Licencia en Internet o en cualquier libro de Linux. Originalmente, Linus Torvalds lanzó Linux bajo una licencia más restrictiva que la GPL, que permitía que el software fuera libremente distribuido y modificado, pero prohibía su uso para ganar dinero. Sin embargo, la GPL autoriza que la gente venda su software, aunque no le permite restringir el derecho que su comprador tiene a copiarlo y venderlo a su vez. En primer lugar, hay que aclarar que el "software gratis" de la GPL no es software de dominio público. El software de dominio público carece de copyright y pertenece literalmente al público. El software regido por la GPL sí tiene el copyright de su autor o autores. Esto significa que está protegido por las leyes internacionales del copyright y que el autor del software está declarado legalmente. No sólo porque un programa sea de libre distribución puede considerársele del dominio público. El software regido por la GPL tampoco es "shareware". Por lo general, el "shareware" es propiedad del autor, y exige a los usuarios que le paguen cierta cantidad por utilizarlo después de la distribución. Sin embargo, el software que se rige por la GPL puede ser distribuido y usado sin pagar a nadie. La GPL permite a los usuarios modificar el software y redistribuirlo. Sin embargo, cualquier trabajo derivado de un programa GPL se regirá también por la GPL. En otras palabras, una compañía nunca puede tomar Linux, modificarlo y venderlo bajo una licencia El Sistema Operativo Unix-Linux Comandos Básicos 5
  • 189.
    restringida. Si unsoftware se deriva de Linux, éste deberá regirse por la GPL también. La GPL permite distribuir y usar el software sin cargo alguno. Sin embargo, también permite que una persona u organización gane dinero distribuyendo el software. Sin embargo, cuando se venden programas GPL, el distribuidor no puede poner ninguna restricción a la redistribución. Esto es, si compras un programa GPL, puedes a su vez redistribuirlo gratis o cobrando una cantidad. Esto puede parecer contradictorio. ¿Por qué vender software cuando la GPL especifica que puede obtenerse gratis? Por ejemplo, supongamos que una empresa decide reunir una gran cantidad de programas GPL en un CD-ROM y venderlo. La empresa necesitará cobrar por el hecho de haber producido el CD, y asimismo querrá ganar dinero. Esto está permitido por la GPL. Las organizaciones que vendan el software regido por la GPL deben tener en cuenta algunas restricciones. En primer lugar, no pueden restringir ningún derecho al comprador del programa. Esto significa que si compramos un CD-ROM con programas GPL, podremos copiar ese CD y revenderlo sin ninguna restricción. En segundo lugar, los distribuidores deben hacer saber que el software se rige por la GPL. En tercer lugar, el vendedor debe proporcionar, sin coste adicional, el código fuente del software a distribuir. Esto permite a cualquiera adquirir el software y modificarlo a placer. Permitir a una empresa distribuir y vender programas que son gratis es bueno. No todo el mundo tiene acceso a Internet para llevarse los programas, como Linux, gratis. La GPL permite a las empresas vender y distribuir programas a esas personas que no pueden acceder al software con un coste bajo. Por ejemplo, muchas empresas venden Linux CD-ROM por correo, y hacen negocio de esas ventas. Los desarrolladores de Linux pueden no tener constancia de estos negocios. Por ejemplo, Linus sabe que ciertas compañías venden Linux, y él no va a cobrar nada por esas ventas. Distribuciones de Linux. Es imprescindible seleccionar una distribución que se adapte a las necesidades de cada uno para poder instalar, configurar y administrar un sistema Linux con éxito. Hace años, cuando Linux empezó a distribuirse por Internet, instalar Linux consistía en bajarse de Internet todos los archivos necesarios a unos disquetes. En esos tiempos la instalación podía llegar a ser un laborioso proceso, haciendo que muchos usuarios frustrados acabasen por rendirse. Por ello, programadores de todo el mundo se unieron para crear distribuciones que incorporasen el sistema operativo y programas que facilitaran la instalación, además de los paquetes conteniendo programas de todo tipo. De esta forma la instalación se reducía a seguir unos pasos, dando la posibilidad a los usuarios con pocos conocimientos de poder instalar un sistema operativo de este tipo con un menor esfuerzo. En este momento hay un buen número de distribuciones en las que poder elegir, pero cada una de ellas tiene sus pros y sus contras. Generalidades de la gestión del S.O. Está escrito en C, en lugar de enamblador, como la mayoría de los sistemas, lo que le permite una completa adaptación a los diferenes ordenadores. Como otros SSOO consta de dos partes: 1. El núcleo, que se encarga de la gestión de la memoria, planificación de la CPU y el Sistema de ficheros. 2. Los programas del sistema, que facilitan la compilación, ejecución y manipulación de ficheros. La CPU está planificada de forma que favorece los procesos interactivos. La planificación de los procesos se hace mediante un algoritmo de prioridades, de forma que a números mayores corresponde una menor prioridad y procesos del sistema poseen prioridad El Sistema Operativo Unix-Linux Comandos Básicos 6
  • 190.
    negativa. Para losprocesos que utilizan mucho la CPU, se les concede tiempo según Round-Robin. La espera de un proceso indefinidamente, se resuelve mediante el cambio de prioridad por envejecimiento de los procesos. Existen dos tendencias en la planificación de la memoria, dependiendo de las diferentes versiones de Unix: a) En unas se utiliza el intercambio (swapping) entre los diferentes procesos. Los procesos víctimas se eligen: por estar ociosos, llevar mucho tiempo en memoria o ser grandes. Y se cargan en memoria si llevan mucho tiempo fuera o son pequeños. b) En las versiones de Berkeley y Linux, se utiliza el sistema de memoria virtual con paginación bajo solicitud. El sistema de entrada y salida maneja normalmente dos tipos de dispositivos: 1. De bloque, como discos y cintas. 2. Y de caracteres, terminales e impresoras. Los ficheros se organizan en directorios estructurados en árbol y se manejan mediante bloques de datos. Linux tiene soporte para diferentes sistemas de archivos, algunos son sistemas de archivos de redes especializados o son sistemas de archivos desarrollados para otros sistemas operativos. Una sorprendente cantidad de ellos pueden ser utilizados como sistema de archivos nativo en Linux: ext2, ext3, ext4, ReiserFS, XFS, y Journaled File System (JFS). La cuarta extensión del sistema de archivos (ext4fs) existe porque algunos desarrolladores querían incorporar nuevas y mejoradas características al ext3. La mejora más llamativa de ext4 está en el soporte de archivos y sistemas de archivos de gran tamaño. Características Multitarea: Un usuario puede ejecutar varios programas (procesos) a la vez, sin tener que detener una aplicación para ejecutar otra. Multiusuario: Varios usuarios pueden acceder a las aplicaciones y a los recursos en el mismo PC y al mismo tiempo. Con la impresión para cada uno de ellos de estar trabajando solo. Tiempo compartido: Es la forma de conseguir las características anteriores, y se basa en que en una fracción de tiempo muy pequeña, la CPU atiende a varios usuarios. A cada proceso se le dedica por turno una unidad de tiempo llamada “cuanto”. La memoria: es aprovechada al máximo, para acceder al disco el menor número de veces, consiguiendo mayor rapidez. Recuperación automática del sistema de ficheros después de una caída del sistema, o interrupción eléctrica. Seguridad de acceso a la información de cada usuario, mediante una serie de permisos que el propietario puede conceder o denegar sobre cada uno de sus ficheros. Multiplataforma: Corre en muchos PCs distintos (Intel 386/486/Pentium y compatibles,...). Facilita la portabilidad del software, entre plataformas, al menos a nivel de código fuente. Shell programables, lo que le hace ser un SO muy flexible. El Sistema Operativo Unix-Linux Comandos Básicos 7
  • 191.
    Estructura del S.O.UNIX Es un SO jerárquico, ya que se organiza en una serie de estratos, cada uno de los cuales interactúa con su entorno a través de interfaces bien definidos. SHELL Utilidades Hardware Kernel Dispoditivos Kernel o Núcleo Es el corazón del sistema, la parte más cerrada al usuario y más cercana al hardware. Reside permanentemente en memoria. Su trabajo consiste en: o Planificar, coordinar y gestionar la ejecución de procesos. o Dar servicio al sistema, como entrada / salida y gestión de ficheros. o Manejar las operaciones dependientes del hardware, realizando las operaciones de más bajo nivel de manera que se oculten al usuario. Dispositivos Los ficheros de dispositivo son los intermediarios entre el SO y el dispositivo físico. Utilidades Estas órdenes también conocidas como herramientas, que van desde el compilador de C, hasta el editor de texto, pueden utilizarse por separado o de forma conjunta para llevar a cabo tareas útiles. Se invocan por su nombre a través del Shell. SHELL o Caparazón Es la parte que permite al usuario comunicarse con el sistema, también se le conoce como "caparazón". Puede estudiarse desde dos puntos de vista: 1.- Como intérprete de comandos, es un programa que siempre está en ejecución. - Espera que introduzcamos una orden. - Analiza la línea. - Comprueba su corrección y los permisos. - Y llama a ejecución al programa o programas necesarios. 2.- Como lenguaje de programación: Combina, mediante estructuras de control grupos de órdenes, estos ficheros se llaman procedimientos Shell, Shell Script o guiones Shell, además posee sus propias sentencias. (se estudiarán más adelante) El Sistema Operativo Unix-Linux Comandos Básicos 8
  • 192.
    Existen varios tiposde SHELL diferentes: sh: Bourne Shell (Unix System V, Xenix). Los shell tipo Bourne toman su nombre a partir de su inventor, Steven Bourne. Este fue el shell original de Unix, denominado sh; a partir de entonces, la mayoría de los shells tienen un nombre con el sufijo sh para indicar que son extensiones de la idea original. Está diseñado para usuarios experimentados, su prompt por defecto es el signo dólar ($). Tiene capacidad para redireccionar entradas y salidas, interpretar metacaracteres, usar tuberías y filtros, manejar variables y además posee su propio lenguaje de programación. Tradicionalmente, los shell Bourne se han utilizado para los scripts de shell por razones de compatibilidad con el sh original rsh: Reduced Shell, es un subconjunto del anterior, contiene las órdenes básicas. No permite el cambio de directorio ni el redireccionamiento. csh: C Shell (Berkeley), fue implementado por Bill Joy, los shells C han sido más comunes en su aplicación interactiva. Es similar al sh, pero añade algunas características específicas para el programador de C. Ksh: Korn Shell, desarrollado por David Korn de Bell Laboratories, incorpora la mayor parte de las características del csh y conserva la sintaxis y características básicas del sh. Bash: Bourne Again Shell. Fue desarrollado en el marco GNU, y es el derivado más extendido del Bourne Shell. Tcsh: Una versión de csh para Linux. En principio el Administrador del sistema adjudica un tipo de Shell a cada usuario, aunque este puede cambiarse tecleando el nombre de otro Shell (si tiene permiso); se sale de un Shell pulsando Ctrl + d. Primera Aproximación Antes de entrar al Sistema: Debe de tener creada una cuenta de usuario, la cual tendrá un nombre y que además puede llevar asociada una palabra clave. Se podrá acceder al sistema mediante cualquier terminal que esté preparado, en cuyo caso mostrará por pantalla: login:, esto quiere decir que está esperando a que le introduzcamos un nombre de usuario. Una vez introducido y pulsado Return puede que nos pida una palabra clave password: Pasados estos requisitos puede que aparezca algún mensaje y debajo el prompt del Sistema. Para los usuarios habitualmente el prompt es sólo el signo dólar ($), pero en linux suele aparecer por defecto: el nombre del usuario, el de la computadora y la trayectoria actual en el árbol de directorios (el directorio de conexión se muestra como ~). Escribir algunos comandos para tomar contacto. Hay que tener en cuenta que el UNIX distingue entre mayúsculas y minúsculas. Se adelantan dos órdenes de gestión de ficheros, para crear un directorio “prueba”, en el que se realizarán las primeras prácticas: mkdir nombre_dir Crea un nuevo directorio. cd nombre_dir Activa o se traslada al directorio indicado. El Sistema Operativo Unix-Linux Comandos Básicos 9
  • 193.
    date Muestra la fecha actual. who Indica que usuarios están en ese momento conectados al Sistema. clear Borra la pantalla. echo mensaje Vuelve a escribir el mensaje. echo mensaje > fichero El signo mayor que (>), significa redirigir la salida o resultado de un comando. Guardaría el mensaje dentro del fichero que hayamos indicado. ls Lista los nombre de los ficheros. cat fichero Visualizaría el contenido del fichero, aunque su principal función es concatenar ficheros. rm fichero Borra el fichero indicado. Cuando se desea terminar un programa antes de su fin normal debemos pulsar la tecla Supr dos veces en Unix y Ctrl + C en Linux. Para salirnos del Sistema (modo comando) pulsamos las teclas Ctrl + d. (Unix) o exit 1ª Práctica de familiarización con las órdenes anteriores. Algunas utilidades para experimentar. Consultar el manual man orden Nos explica la utilidad y el funcionamiento de la orden. Es un auténtico manual adaptado a nuestro sistema en particular. Hacer cálculos bc Se puede emplear como una calculadora normal. Para separar los decimales emplea el punto (.). Admite cualquier nivel de paréntesis. Las operaciones son: + (suma), - (resta), * (multiplicación), / (división), % (módulo o resto), ^ (exponenciación). Tiene capacidad para asignar valores a variables utilizando el signo igual (=). Utiliza unas variables internas que rigen su trabajo, a las que les podemos cambiar su valor, El Sistema Operativo Unix-Linux Comandos Básicos 10
  • 194.
    como son: - obase=nº base del sistema de numeración en el que mostrará los resultados. - ibase=nº ídem para leer las entradas. - scale=nº nº de dígitos decimales que se deben de tener en cuenta en un cálculo, comprendido entre 0 y 99, Permite la creación de funciones, lo cual no se explicará por ahora; un ejemplo: define a(x,y){ auto z z = x * y return(z) } Se usaría: a(4, 7.8) Mirar el almanaque cal [[mes] año] Sin argumento nos muestra fecha, hora y despliega el mes actual, anterior y posterior. Con un solo nº del 0 al 9999 muestra todo el calendario del año correspondiente; y si le especificamos mes y año sólo muestra ese mes. 2ª Práctica de familiarización con las utilidades anteriores. El Sistema Operativo Unix-Linux Comandos Básicos 11
  • 195.
    Conceptos Básicos delSistema de Ficheros Distribución de la información en disco: - Sector de arranque. Almacena un pequeño programa de inicialización, que a su vez pasa el control a otro más grande o al mismo KERNEL. En los sistemas de ficheros que no poseen arranque el primer bloque no se utiliza. - Superbloque también conocido como Cabecera del Sistema de Ficheros. Contiene datos importantes sobre el resto de la distribución del disco, como es: Bloques ocupados por los i-nodos: isize. Bloque ocupados por los ficheros: fsize. Puntero a la tabla de bloques disponibles. - Tabla de i-nodos. Se almacenan a partir del bloque 2 con una longitud de isize bloques; están numerados secuencialmente con un tamaño fijo de 64 bytes en los que se almacena información relativa a un fichero. - Bloques de ficheros. En ellos se almacena la información que contienen los ficheros (y otra información necesaria como distintas tablas). - Area de swap Inodos Los ficheros son la unidad fundamental del Sistema de Ficheros Linux. Cada fichero al ser grabado es asociado automáticamente y durante toda su vida a un inodo (nodo-i), este identifica perfectamente al fichero asociado y contiene los siguientes datos del fichero al que identifica: TIPO: ordinario (-), directorio (d), especial (b) o (c), enlace simbólico (l) PROPIETARIO: usuario que creó el fichero. GRUPO: grupo al que pertenece el usuario. PERMISOS: pueden ser de lectura, escritura y ejecución para el propietario, su grupo y el resto de los usuarios. Estos se pueden alterar según las necesidades de seguridad con el comando chmod. NÚMERO DE ENLACES: un enlace es la unión entre un nombre de fichero y un inodo. Un mismo fichero puede estar referenciado por otro nombre. Los enlaces se pueden crear con la orden ln. TABLA DE PUNTEROS: es un vector con trece posiciones, cada una de las cuales almacena un puntero, cuyo significado es: - Los diez primeros punteros señalan a los diez primeros bloques de información del fichero. - El décimoprimer puntero señala a otra tabla que contiene punteros, que a su vez apuntan a bloques de información. - El décimosegundo puntero señala a otra tabla que contiene punteros, que a su vez apuntan a tablas de punteros, que apuntan a bloques de información. - El décimotercer puntero señala a otra tabla de punteros, cada uno de los cuales apuntan a tablas de punteros, que a su vez apuntan a tablas de punteros, que apuntan a bloques de información. FECHA DE CREACION. FECHA DE LA ÚLTIMA MODIFICACION. FECHA DE LA ÚLTIMA UTILIZACION. El Sistema Operativo Unix-Linux Comandos Básicos 12
  • 196.
    Para comprobar elnº de inodo, usar la orden ls con la opción -i. Los ficheros pueden ser esencialmente de tres tipos: ORDINARIOS: lo que normalmente se entiende por ficheros, contienen texto, datos o programas. ESPECIALES: corresponden a dispositivos físicos (hacen de interface entre el Sistema y el dispositivo físico), sirven para que nos podamos comunicar con discos, impresoras, terminales y la memoria del Sistema. Son llamados también ficheros especiales de dispositivos, y pueden ser de: o Bloques (b), disquete, partición del disco duro, disco duro entero,... o Caracteres (c), cinta magnética, puerto paralelo, puerto serie,... Esos ficheros se almacenan en el directorio /dev: o /dev/fd0 disquete de la primera disquetera (A: en Windows). o /dev/sda primer disco duro (sin considerar particiones) (antes eran /dev/hda para discos IDE y /dev/sda para SCSI). o /dev/sda1 primera partición del primer disco. o /dev/sdb segundo disco duro. o /dev/sdc disco USB (se utiliza emulación SCSI). o /dev/sdc1 partición de un disco USB. o /dev/ttyS1 primera terminal de consola. o /dev/ttyS2 segunda terminal de consola. o /dev/lp0 primer puerto paralelo. o /dev/null cualquier dato enviado a este dispositivo desaparece. o /dev/pty pseudoterminales, proporcionan un "terminal" a sesiones remotas. o /dev/console consola del sistema, monitor conectado directamente a su sistema. o /dev/tty consolas virtuales del sistema. DIRECTORIOS: Con la orden cat fichero ¿Cómo accede el SO a los bloques de este fichero?. Los directorios son ficheros que contienen información sobre ficheros u otros directorios, esta información es su nombre y número de inodo. Con el comando ls se pueden visualizar los nombres de los ficheros contenidos en el directorio y otros datos. Linux utiliza la estructura de directorios en forma de árbol, para mantener la cohesión entre sus ramas, cada directorio contiene otro llamado . (punto), que hace referencia a él mismo, y otro .. (dos puntos), que hace referencia al su directorio padre. Para ver la información de los directorios . y .., utilizar la orden ls con la opción -a. Utilizar la orden ls -l, que nos muestra la mayor parte de las características de los ficheros y directorios (tipo, permisos, enlaces, propietario, grupo, ocupación en bytes, fecha última actualización y nombre del fichero). Distingue entre los tipos de ficheros, para ver ficheros de dispositivo en /dev. Observa los permisos de los ficheros ordinarios y de los directorios. ¿Son iguales? ¿A qué grupo perteneces? Estudiar el nº de enlaces de los directorios. a) Recién creado. b) Con distinto nº de subdirectorios. Ejemplo de estructura básica de un sistema Linux: El Sistema Operativo Unix-Linux Comandos Básicos 13
  • 197.
    / Directorio raiz del sistema de ficheros. En algunos casos directorio home del administrador. bin Abreviatura de “binaries”. En este directorio se encuentran los órdenes básicas del SO. En /usr/bin también hay órdenes básicas, pero son menos esenciales. boot Aquí están los ficheros binarios de arranque del sistema (vmlinuz) dev Contiene los ficheros especiales o de dispositivo (device drivers). Son usados para acceder a los dispositivos del sistema y recursos, como discos duros, módems, memoria, etc. Por ejemplo, de la misma forma que podemos leer datos de un fichero, podemos leerla desde la entrada del módem usando /dev/modem. etc En este directorio se encuentran las órdenes relacionadas directamente con la administración del sistema, así como los ficheros de datos asociados. Estos incluyen /etc/passwd (la base de datos de usuarios), /etc/rc (guiones de inicialización del sistema), etc. home Por cada usuario cuelga de home un directorio que por defecto tendrá el mismo nombre que el del usuario. Ejemplo /home/user01. Estos a su vez dentro de su directorio pueden crear la estructura de ficheros y directorios que necesiten. root En algunos sistemas es el directorio de conexión (home) del administrador. El Sistema Operativo Unix-Linux Comandos Básicos 14
  • 198.
    lib Directorio que contiene las librerías compartidas. Estas son comunes para todos los programas que las usan, en lugar de tener cada programa su copia. proc No existe físicamente, es un SF virtual. Los ficheros que contiene residen realmente en memoria. En él podemos encontrar información sobre el sistema (procesos). sbin Contiene los programa utilizados en la inicialización del sistema y en la recuperación del mismo. tmp Contiene los ficheros temporales que el Sistema necesita crear para realizar determinados trabajos. usr Para almacenar otros directorios accesibles a los usuarios, tales como: /usr/lib, /usr/bin, /usr/share/man, /usr/share/doc. En algunos sistemas, de aquí cuelgan los directorios de los usuarios. Los directorios descritos arriba son esenciales para que el sistema esté operativo, pero la mayoría de las cosas que se encuentran en /usr son opcionales para el sistema. De cualquier forma, son estas cosas opcionales las que hacen que el sistema sea útil e interesante, contiene la mayoría de los paquetes grandes de programas y sus ficheros de configuración. /usr/X11R6 Contiene el sistema X Window si lo instalamos. El sistema X Window es un entorno gráfico grande y potente el cual proporciona un gran número de utilidades y programas gráficos. /usr/bin Es el almacén real de programas del sistema Unix. Contiene la mayoría de los programas que no se encuentran en otras partes como /bin. /usr/etc Como /etc contiene diferentes ficheros de configuración y programas del sistema, /usr/etc contiene incluso más que el anterior. En general, los ficheros que se encuentran en /usr/etc/ no son esenciales para el sistema, a diferencia de los que se encuentran en /etc, que si lo son. /usr/include Contiene los ficheros de cabecera para el compilador de C. Estos ficheros (la mayoría de los cuales terminan en .h, de header) declaran estructuras de datos, subrutinas y constantes usados en la escritura de programas en C. Los ficheros que se encuentran en /usr/include/sys son generalmente usados en la programación de Unix a nivel de sistema. /usr/include/g++ Contiene ficheros de cabecera para el compilador de C++ (muy parecido a /usr/include). /usr/lib Contiene las librerías equivalentes stub y static a los ficheros encontrados en /lib. Además, varios programas guardan ficheros de configuración en /usr/lib. /usr/local En general, los programas que se encuentran en /usr/local son específicos de nuestro sistema, esto es, el directorio /usr/local difiere bastante entre sistemas Unix. Aquí encontraremos programas grandes como TEX (sistema de formateo de documentos) y Emacs (gran y potente editor), si los instalamos. /usr/man Este directorio contiene las páginas de manual. /usr/src Contiene el código fuente (programas por compilar) de varios programas de nuestro El Sistema Operativo Unix-Linux Comandos Básicos 15
  • 199.
    sistema. El másimportante es /usr/src/linux, el cual contiene el código fuente del kernel de Linux. opt Este es la raíz del subárbol que contiene los paquetes de aplicación específicos. var Este contiene los directorios de todos los ficheros que cambian de tamaño o tienden a crecer, como /var/adm (ficheros de registro y contabilidad), /var/mail (ficheros de correo del usuario), /var/spool (ficheros que van a ser pasados a otro programa), /var/news (mensajes de interés común),... mnt o media De este cuelgan directorios para montar sistemas de ficheros sobre el Root File System. Por ejemplo /mnt/floppy, /mnt/cdrom,... lost+found (perdido+encontrado) Contiene ficheros que por algún problema no están enlazados al Sistema de Ficheros. Explorar la estructura de directorios. Trayectoria o pathname: Es el camino que hay que seguir dentro de la estructura arborescente de directorios para encontrar un fichero o directorio. Vamos a distinguir dos tipos de trayectorias: 1. Trayectoria absoluta es la que parte del directorio raíz (root). 2. Trayectoria relativa es la que parte del directorio de trabajo. Referencias a directorios especiales: - Directorio raíz (root) simbolizado con la barra de dividir. - Directorio domicilio o casa (HOME), es el directorio que le corresponde al usuario dentro del directorio home o usr; Nos vamos a casa con cd. - Directorio de trabajo, activo o en curso, es aquel en el que nos encontramos trabajando en un momento determinado, se representa por un punto (.). pwd nos informa del directorio actual. - Directorio padre del directorio en curso, es el directorio del cual cuelga el directorio activo, se representa por dos puntos (..). Nombres de ficheros y Metacaracteres Linux admite nombres largos de hasta 255 caracteres (Unix originalmente hasta 14 caracteres) normalmente incluyen caracteres alfanuméricos y el punto (.). En un directorio no puede haber dos ficheros con el mismo nombre, pero sí en directorios diferentes. Cuando un nombre empieza por un punto se oculta a algunas órdenes. Dentro de los nombres de fichero se interpretan de forma especial los siguientes caracteres, también llamados metacaracteres. Se usan especialmente para hacer referencia a un grupo de ficheros: - * Equivale a 0 o más caracteres. El Sistema Operativo Unix-Linux Comandos Básicos 16
  • 200.
    - ? Equivale a un solo carácter. - [caracteres] Equivale a cualquier carácter contenido dentro de los corchetes, sólo a uno. Se puede especificar un rango de caracteres con solo indicar el primero y el último separados por un guión (-). También se puede negar el conjunto de caracteres, para indicar cualquier carácter que no esté entre los corchetes, poniéndole delante el signo de admiración [!caracteres]. - Suprime el significado propio del metacarácter que vaya a continuación. El proceso de sustitución de los metacaracteres, por los nombres de los ficheros que correspandan se llama expansión de los metacaracteres, y es efectuado por el intérprete de comandos, de esta forma los comandos u órdenes nunca ven los metacaracteres. Crear todos los ficheros necesarios para practicar con los metacaracteres, al menos con la orden ls. El Sistema Operativo Unix-Linux Comandos Básicos 17
  • 201.
    Trabajo del Usuariocon Ficheros Ordinarios. Formato de las órdenes orden [opción(es)] [argumento(s)] Siempre es obligatorio el nombre de la orden, teniendo en cuenta que Unix distingue entre mayúsculas y minúsculas. Las opciones matizan la forma de trabajar la orden. Suelen ser un solo carácter, normalmente precedido por un guión (-), si hay varias se pueden colocar juntas (sin mediar espacio) después de un solo guión. Los argumentos nos indican con que va a trabajar la orden, suelen ser nombres de ficheros, de directorios, usuarios, terminales, etc. Si hay que indicar varios se pueden utilizar los metacaracteres o simplemente se separan con un espacio. Existen comandos “sucios”, que no responden a este formato. Crear ficheros Vacío: cat /dev/null > fichero > fichero Las dos órdenes tienen el mismo efecto, en la primera de ellas se emplea el dispositivo nulo. Con información tecleada por nosotros: cat > fichero cat -> fichero Esta orden nos permitirá introducir tantas líneas de texto como deseemos, al final de las cuales pulsaremos ^d o ^c como señal de final de fichero, y se almacenarán en el fichero indicado. Con información procedente de cualquier otra orden Esta otra orden debe de producir una salida redireccionable. orden > fichero Listar nombres e informacion sobre ficheros. ls [opciones] [ficheros | directorio(s)] Sin ninguna opción ni argumento produce un listado de los nombres de los ficheros del directorio activo en orden alfabético. Entre las opciones más interesantes contamos con: -l Imprime información detallada sobre el fichero: tipo, permisos, enlaces, propietario, grupo, ocupación en bytes, fecha de la última actualización y nombre del fichero. -n Igual que -l, pero del propietario y grupo no muestra su nombre, sino su número, llamados UserId y GroupId respectivamente. -i Muestra el nº de i-nodo de cada fichero. -a Indica a la orden que tenga en cuenta a todos los ficheros incluidos los ocultos. -d Para que nos muestre información del directorio y no de los ficheros que contiene el directorio. -t Los muestra ordenados por fecha de actualización, primero los más recientes. -r Invierte el orden de mostrar los ficheros. -R Recursividad. El Sistema Operativo Unix-Linux Comandos Básicos 18
  • 202.
    -F Pone una(/) después de cada directorio y un (*) después de cada ejecutable. La orden l es un alias de ls –la. Como argumentos se puede especificar: nombre(s) de fichero(s), de directorio(s) y utilizar los metacaracteres. file fichero(s) Realiza una suposición sobre qué tipo de información almacena un fichero; así nos puede indicar sí un fichero es de texto, ejecutable, directorio, un programa fuente, está comprimido ... Para ello revisa la primera parte del fichero en busca de palabras clave o números especiales del linkador, también consulta los permisos de acceso. Sus resultados no siempre son correctos. Ojear la salida de órdenes o contenido de ficheros. orden | less less fichero(s) Dosifica la salida por pantalla, cuando el resultado no entra en ella. Posee una serie de comandos para poder desplazarnos por la salida. h.....................................Ayuda de less. q.....................................Para salir de less. j, Intro o flecha abajo .....Avanza línea. k o flecha arriba.............Retrocede línea. Nºj..................................Avanza Nº líneas. Nºk.................................Retrocede Nº líneas. z.....................................Avanza pantalla. w ....................................Retrocede pantalla. Barra espaciadora .........Avanza página. Ctrl + L...........................Refresca pantalla. Ejercicios: Ver más opciones de less y ls con man. Probar las distintas opciones y sus combinaciones. Seguir practicando con los metacaracteres. Ver el nº de enlaces de los directorios. Comprobar que los directorios enlazados tienen el mismo nº de inodo. Copiar, Mover, Enlazar y Borrar Ficheros. Copiar: cp [opc.] f_origen f_destino -i Pide confirmación antes de sobreescribir. -r Copia recursiva, incluyendo subdirectorios. Realiza duplicados de ficheros, en el mismo directorio con distinto nombre o en distinto directorio con cualquier nombre. Sí el nombre del fichero destino ya existe se pierde la información que pudiera tener. Sobre el f_origen hay que tener al menos permiso de lectura (r) y sobre el f_destino, si ya existe, de escritura (w). Como destino se puede indicar un directorio, en cuyo caso se copiarían todos los ficheros El Sistema Operativo Unix-Linux Comandos Básicos 19
  • 203.
    origen en él. cp f(s)_origen directorio Los ficheros origen se pueden indicar por su nombre completo, separados por blancos o utilizando metacaracteres; por supuesto se puede emplear una trayectoria. Con esta orden al duplicarse la información nunca se pierde el contenido del fichero origen. Mover: mv [-i] f_origen f_destino mv [-i] f(s)_origen directorio Renombra un fichero dentro de un directorio o lo traslada a otro directorio. La diferencia con la orden cp es que mv no duplica la información, desapareciendo siempre los ficheros origen. -i Si en el destino ya existe el fichero, pregunta antes de sobreescribirlo. La mayoría de las veces es más rápida que cp, ya que se limita solo a anotar el cambio en los ficheros directorio. Enlazar: ln [-f] f_origen f_destino -f No hace preguntas. A un mismo fichero se le da otro nombre, los dos nombres se referirán en adelante al mismo fichero. No se hace una copia del fichero origen y el nuevo nombre puede estar en distinto directorio. Lo único que realiza esta orden es añadir una nueva entrada en el directorio que corresponda con el nombre del fichero destino y el nº de i-nodo del fichero origen. No es necesario poseer ningún permiso sobre el fichero origen, pero si debemos poseer permiso de escritura (w) sobre el directorio destino y de lectura sobre el directorio origen. Como origen se pueden indicar varios ficheros si el destino es un directorio. -s Realiza un enlace simbólico. Un enlace o vínculo simbólico es un archivo que sólo contiene el nombre de otro archivo. Cuando el SO opera sobre el enlace simbólico, se dirige hacia el archivo al que apunta. Se usan para enlazar ficheros en computadoras diferentes o en distintos sistemas de ficheros, también para crear varios nombres a un directorio. Estas tres órdenes tienen en común, que el contenido del fichero destino, si existe, es destruido. Borrar: rm [opc] fichero(s) Para borrar un fichero es necesario poseer permiso de escritura sobre el directorio, no sobre el fichero, pues lo que realmente se hace es borrar un entrada del directorio. Si el fichero a borrar tiene varios enlaces, se borrar el enlace que tiene con el nombre de fichero indicado, los demás permanecen. -f (forzar) Sí no tenemos permiso de escritura sobre el fichero, se salta una pregunta de confirmación y lo borra. -i (interactivo) Pide confirmación en todos los ficheros. -r (recursivo) Borra a partir de donde le indiquemos, toda la posible rama de El Sistema Operativo Unix-Linux Comandos Básicos 20
  • 204.
    subdirectorios, es rápiday peligrosa. Ejemplos peligrosos: rm * .c rm -r dir1 Ejercicios: Duplicar un fichero en el mismo directorio. Copiar varios ficheros al mismo tiempo a otro directorio. Renombrar un fichero. Comprobar si le ha cambiado el nº de inodo. Mover ficheros a otro directorio. ¿Tienen otro inodo? Crear enlaces de un fichero en el mismo y distinto directorio. Comprobar inodos y el nº de enlaces. Borrar algunos de los enlaces creados y volver a comprobar el nº de enlaces. Intentar hacer un enlace duro a un directorio. Realizar enlaces simbólicos de ficheros. Comprobar el carácter de tipo de fichero. ¿Concuerda el nº de inodo?. Trabajar con el enlace simbólico. Borrar el fichero origen del enlace. Volver a trabajar con el enlace simbólico. Crear un enlace simbólico a un directorio. Estudiar los permisos de vuestro directorio home. ¿Qué permisos tienen los de tu grupo?. Entra en el directorio home de algún compañero. Intenta crear ficheros. Borra un fichero. Permisos, Propietario y Grupo. Las operaciones que se pueden realizar sobre un fichero son: leer (r), escribir (w) y ejecutar (x). Estos permisos se conceden o deniegan a tres niveles: el propietario del fichero, el grupo al que este pertenece y el resto de los usuarios. Que el grupo posea un permiso determinado no implica que lo posea el usuario, y que el resto posea un permiso no implica que lo posean el usuario y el grupo. En un fichero convencional tener permiso de lectura significa poder consultar el contenido del fichero, el permiso de escritura indica que se puede modificar y el de ejecución que se pueden ejecutar las órdenes contenidas en el fichero. En los ficheros directorio el permiso de lectura posibilita que podamos averiguar el contenido del directorio, es decir, los nombres de los ficheros que contiene, el no poseer este permiso no impide acceder al contenido de los ficheros. El permiso de escritura nos permite crear y borrar ficheros, la modificación de un fichero en particular no la controlan los permisos de directorio sino los de ese fichero. El permiso de ejecución en el caso de directorios impide que podamos usarlo dentro de una trayectoria o que lo usemos como directorio de trabajo, denegar el permiso de ejecución si es una protección real para un directorio y los ficheros que contenga. (Si perdemos el permiso de ejecución sobre el directorio de trabajo o el padre de este, podemos desplazarnos a cualquier otro usando una trayectoria absoluta.) El propietario de un fichero puede cambiarle los permisos con respecto a él mismo, su grupo o el resto de los usuarios con la orden: El Sistema Operativo Unix-Linux Comandos Básicos 21
  • 205.
    chmod [quien(es)][+-=][permiso(s)] fichero(s)|directorio(s) [quien]: u Usuario propietario. g Grupo. o Otros, el resto. a Todos (por defecto). [+-=]: + Añade permiso. - Elimina permiso. = Asigna o establece permiso. Añade los permisos indicados y quita los demás, para los usuarios indicados. [permiso]: r Lectura. w Escritura. x Ejecución. Ejemplos: − Un permiso a un quién: chmod g+w fichero − Varios permisos a un quién: chmod o+rwx fichero − Varios permisos a gente variada: chmod go-rw fichero − Permisos distintos para varia gente: chmod o-r,g+w fichero (nunca espacio después de la coma) − Asignación absoluta: chmod ug=rw fichero Ejercicios: Si a un fichero con varios enlaces se le cambian los permisos ¿Se cambiarán también en sus ficheros enlazados? Quitar a un fichero permiso de w: mostrarlo, añadirle información, borrarlo. (Podemos por ahora escribir en un fichero añadiéndole información con: orden >> f1) Quitar a un fichero permiso de r: mostrarlo, añadirle información, borrarlo. Grabar en un fichero: clear echo hola mundo echo te encuentras en pwd Poner su nombre después del prompt, para ejecutarlo. Darle permiso de ejecución. Poner su nombre después del prompt, para ejecutarlo. También se permite una notación numérica, en octal, para indicar los permisos que se van a establecer a unos determinados ficheros. chmod número_octal fichero(s) Número_octal: Un fichero tiene 9 permisos, se codifican en binario, si se tiene permiso 1 y si no se tiene 0; resulta un número binario de 9 dígitos binarios, este se pasa a octal y obtenemos el número octal de tres dígitos. Ejemplo: permiso de escritura al propietario, permiso de ejecución al propietario y al grupo y El Sistema Operativo Unix-Linux Comandos Básicos 22
  • 206.
    permiso de lecturaa todos. chmod a=r,u+w,ug+x fich chmod 754 fich Permisos especiales. Aún hay otro tipo de permisos que hay que considerar. Se trata de: o El bit de permisos SUID (Set User ID). o El bit de permisos SGID (Set Group ID). o El bit de permisos de persistencia (sticky bit). SUID Veamos los permisos de un par de comandos que cuando se ejecutan modifican el fichero /etc/passwd, que es propiedad de root, y sólo él lo puede modificar. ls -l /etc/passwd -rw-r--r-- 1 root root 2625 2010-11-19 11:39 /etc/passwd El comando passwd, sirve para cambiar la contraseña del usuario, y puede ser invocado por cualquier usuario para cambiar su propia contraseña. Y el comando chsh, que se usa para cambiarnos el shell de conexión por defecto. Si vemos sus permisos observaremos un nuevo tipo de permiso: $ cd /usr/bin $ ls -l passwd chsh -rwsr-xr-x 1 root root 31700 2010-01-26 18:09 chsh -rwsr-xr-x 1 root root 37140 2010-01-26 18:09 passwd En lugar de la 'x' para el usuario encontramos ahora una 's' (suid). passwd es un comando propiedad de root, que modifica ficheros de configuración de usuarios sobre los que sólo el administrador posee permiso de escritura, pero sin embargo un usuario sin privilegios al ejecutar este comando también deberá de modificar los ficheros de configuración de usuarios. Es aquí donde interviene el bit SUID. Este nuevo permiso obliga a la orden a ejecutarse como si la hubiera lanzado el usuario propietario y no realmente quien la ejecutó. Es decir, es poder invocar un comando propiedad de otro usuario (generalmente de root) como si uno fuera el propietario. SGID El bit SGID funciona exactamente igual que el anterior, solo que se aplica al grupo del programa. Es decir, permite ejecutar el comando con los permisos del grupo. Veamos un ejemplo con la orden write, que sirve para realizar una comunicación instantanéa con los usuarios que hay conectados. Para realizar su cometido necesita escribir en los ficheros de dispositivo de los terminales, que pertenen al grupo tty. $ ls -l /dev/tty8 crw--w---- 1 root tty 4, 8 2010-11-20 21:32 /dev/tty8 En nuestro sistema write es un enlace simbólico al siguiente fichero, en el que se muestra una El Sistema Operativo Unix-Linux Comandos Básicos 23
  • 207.
    's' en vezdel bit 'x' en los permisos del grupo. $ ls -l /usr/bin/bsd-write -rwxr-sr-x 1 root tty 9708 2009-11-10 17:12 /usr/bin/bsd-write De esta forma cuando lo estamos ejecutando tenemos permiso de escritura sobre los demás terminales. STICKY BIT (Bit de persistencia) Este bit se aplica para directorios, como en el caso de /tmp y se indica con una 't': ls -ld /tmp drwxrwxrwt 24 root root 4096 sep 25 18:14 /tmp Puede apreciarse la 't' en vez de la 'x' en los permisos de otros. Lo que hace el bit de persistencia en directorios compartidos por varios usuarios, es que el sólo el propietario del archivo pueda eliminarlo del directorio. Modificación de los permisos especiales Para cambiar este tipo de bit se utiliza el mismo comando chmod pero agregando un número octal extra al principio de los permisos, ejemplo: ls -l /usr/prog -r-x--x--x 24 root root 4096 sep 25 18:14 prog chmod 4511 /usr/prog ls -l /usr/prog -r-s--x--x 24 root root 4096 sep 25 18:14 prog Nótese que el valor extra es el '4' y los demás permisos se dejan como se quieran los permisos para el archivo. Es decir, los permisos originales en este ejemplo eran 511 (r-x--x--x), y al cambiarlos a 4511, se cambió el bit SUID reemplazando el bit 'x' del usuario por 's'. Los posibles valores serían los siguientes: - - - - - - - - - = 0 Predeterminado, sin permisos especiales. - - - - - - - - t = 1 Bit de persistencia, sticky bit - - - - - s - - - = 2 Bit sgid de grupo - - s - - - - - - = 4 Bit suid IMPORTANTE: Algo sumamente delicado y que se tiene que tomar muy en cuenta es lo que decidas establecer con permisos de bit SUID y SGID, ya que recuerda que al establecerlos de esta manera, cualquier usuario podrá ejecutarlos como si fuera el propietario original de ese programa. Y esto puede tener consecuencias de seguridad severas en tu sistema. Mejores alternativas pueden ser los comandos sudo y su. Máscara de permisos para la creación de ficheros. El propietario también puede definir con que permisos por defecto se crearán sus ficheros. El Sistema Operativo Unix-Linux Comandos Básicos 24
  • 208.
    umask [número_octal] Solamente tiene formato numérico, el nº octal al pasarlo a binario, los unos indican los permisos que quitamos y a quién. La orden tiene efecto para el usuario que la aplica, y a partir de su uso los ficheros y directorios se crearán con la restricción de los permisos indicada. (Atención: a los ficheros de texto, en un principio, no se les asigna permiso de ejecución) Si utilizamos la orden sin ningún parámetro, muestra la máscara de creación actual, que suele ser 022. Para dejarlo fijo en la sesión, agregarlo a nuestro fichero de inicio de sesión .bashrc de nuestro directorio de inicio o .profile si iniciamos con una consola de texto (Ctrl + Alt + Fnº). Cambio de propietario. El propietario de un fichero en System V (en los sistemas Berkeley solo el administrador) puede cambiar el fichero de propietario y de grupo. chown [-R] nuevo_propietario[:grupo] fichero(s) -R Recursividad. El nombre del nuevo propietario debe de ser un nombre válido de entrada al sistema (login) o un número de identificación de usuario; estos y otros datos se encuentran en el fichero /etc/passwd. Si el usuario perteneciese a otro grupo se indica este separado del usuario por (:). Y se cambia al mismo tiempo de usuario y de grupo. Cambio de grupo. chgrp nuevo_grupo fichero(s) Igualmente el nuevo grupo se puede indicar con el nombre o el número de identificación, que se encuentra en el fichero /etc/group. Ejercicios: (en octal) Poner a dos ficheros al mismo tiempo los permisos rw- -wx r--. Quitarle a un subdirectorio todos los permisos ¿Qué podéis hacer en él? Dejarle todos menos el de ejecución ¿Qué podéis hacer en él? Mostrar el contenido de un directorio al que le falta el permiso de lectura. Poner al directorio permiso de escritura y un fichero dentro de él sin este permiso, probar a borrarlo. Poner una máscara de creación, de forma que a los directorios sólo les de permiso de ejecución para g y o, y para el propietario todos. Comprobarla creando algún directorio. La máscara anterior, que permisos da a los nuevos ficheros ordinarios. Intenta cambiar un fichero de propietario. El Sistema Operativo Unix-Linux Comandos Básicos 25
  • 209.
    Concede permiso deejecución a tu directorio de conexión para los de tu grupo, dentro crea una carpeta llamada “compartida”, donde los de tu grupo puedan escribir y borrar sólo lo que han creado. El Sistema Operativo Unix-Linux Comandos Básicos 26
  • 210.
    Operaciones Con FicherosDirectorios. Ya sabemos visualizar el contenido de un directorio utilizando la orden ls, para lo cual debemos de poseer permiso de lectura sobre él. Creación. mkdir trayectoria(s) Para crear un directorio necesitamos permiso de escritura sobre el directorio en el que se va a crear. Se pueden crear varios directorios al mismo tiempo, indicando su trayectoria, ya sea absoluta o relativa. Ejemplos. mkdir base/direc base2 mkdir base/dire1 base/dire1/dire2 (dire1 no existía) Cambio de directorio activo. cd [directorio] Nos podemos desplazar libremente por el árbol de directorios siempre que tengamos permiso de ejecución sobre los directorios por los que nos desplazamos. Si no indicamos directorio se asume el directorio $HOME o de conexión. Dónde nos encontramos. Si necesitamos asegurarnos de cual es nuestro directorio de trabajo utilizaremos la orden pwd En otras versiones de Unix no era tan fácil que el prompt nos indicase la trayectoria del directorio de trabajo, por lo que esta orden era más utilizada. Pero todavía puede ser útil en programas Shell. Eliminar directorios rmdir directorio(s) Se requiere permiso de escritura sobre el directorio padre. Antes de borrar un directorio debemos de borrar su contenido y cuidar de que no sea el directorio de trabajo. Otro usuario que tenga permiso para ello nos puede borrar nuestro directorio de trabajo, con lo que nos dejará "como suspendidos en el aire", pero podemos transladarnos a cualquier otro directorio. El sistema permite borrar el directorio de trabajo. Recordar que también se pueden borrar directoros usando la orden rm de forma recursiva. Cambio de nombre. mv directorio_antiguo directorio_nuevo Se requiere permiso de escritura en el directorio padre. El Sistema Operativo Unix-Linux Comandos Básicos 27
  • 211.
    Copia de directorios. cp [-R] DirectorioOrigen DirectorioDestino -R De forma recursiva. Variables PS1 y PS2. Se usan para definir el prompt o inductor del shell. El prompt primario (PS1) aparece para solicitarnos la introducción de una orden. El prompt secundario (PS2) se muestra cuando no se ha terminado de introducir un comando. Tanto PS1 como PS2 son variables del shell que pueden ser redefinidas por los usuarios (cada usuario tiene las suyas). Esto se hace simplemente asignándole un nuevo valor, con el formato: PS1=”NuevoValor” El NuevoValor puede ser cualquier cadena, pero hay una serie de códigos con un significado especial para modificar el inductor, estos son: ! Siguiente nº del histórico de sucesos. $ Usa el signo $, salvo para root, que usa el signo # (tradicional). d Fecha actual. s Shell actualmente activo. t Hora actual. u Nombre del usuario. w Directorio de trabajo actual (directorio activo). h Nombre de la máquina. Host. Ejercicios: Crear varios directorios con la misma orden. Trayectorias relativas. Trayectorias absolutas. Que el directorio activo no sea el padre de los subdirectorios. Examinar el árbol de directorios de Unix. Desplazarse usando ambos tipos de trayectorias. Probar a eliminar un directorio no vacío. Probar a eliminar un directorio vacío, pero que sea el directorio activo. Eliminar varios directorios con la misma orden. Cambiar de nombres a directorios. Con y sin permiso de escritura sobre el padre. Copiar una rama del árbol de directorios de forma recursiva. Eliminar la rama recién copiada también de forma recursiva. Modificar el prompt primario y secundario incluyendo texto y códigos especiales de la orden. El Sistema Operativo Unix-Linux Comandos Básicos 28
  • 212.
    Flujo De Información. Entrada y salidas estándar (std). Muchas órdenes Unix reciben información desde el teclado, que es la entrada estándar (stdin) y muestran los resultados por la pantalla, salida estándar (stdout); la pantalla también es la salida estándar para los posibles errores (stderr). Ejemplo: Cat sort Sin opciones ni argumentos leen texto del teclado (stdin) y muestran los resultados por pantalla (stdout), visualizando los posibles errores, en el caso de que se produzcan, por pantalla (stderr). Tanto la entrada como las salidas estándar son tratadas como ficheros especiales, y el shell los identifica por su número de descriptor de fichero: stdin 0 stdout 1 stderr 2 (Deben de emplearse junto al signo de redireccionamiento). El guión (-) realiza una entrada por teclado. Redireccionamiento: Se pueden redireccionar la entrada y salidas estándar mediante los metacaracteres de redireccionamiento: > < >>. > Redireccionamiento de salida, envía los datos que normalmente saldrían por pantalla hacia el fichero que indiquemos. Ejemplo: cat > file cat 1> file cat - > file Usa la entrada estándar y la salida al fichero especificado. >> Redireccionamiento de adición, igual que el anterior, pero si el fichero al que se dirige la salida ya existe no se borra la información que tenga, sino que la nueva se añade al final. Ejemplo: Cat 1>> file Añadiendo información a un fichero desde la entrada estándar. < Redireccionamiento de entrada, la orden no tomará la información del teclado, sino del fichero especificado. Ejemplo: cat file cat < file El Sistema Operativo Unix-Linux Comandos Básicos 29
  • 213.
    cat 0< file Toma como entrada el fichero indicado, siendo la salida por pantalla. cat 0< fichero 1>> otro La entrada de un fichero y la salida la añade a otro. cat 2> errores 0< fichero 1> fichero1 cat fichero > fichero1 2> errores Entrada fichero, salida fichero1 y errores al fichero errores. cat fichero1 – fichero2 > total Entre dos ficheros permite una entrada por teclado Con el formato: orden >& fichero Tanto la salida estándar, como la salida de error se almacenan en el fichero indicado. Ejemplo: cat fichero fichero_inexistente >& todo Tuberías (pipes): Orden | Orden2 Mediante el uso de tuberías se consigue que la salida de una orden sea la entrada de otra. El metacarácter tubería es |. Ejemplo: ls –lR /home | less Duplicar la salida orden | tee [opciones] fichero(s) orden | tee [opciones] | filtro La entrada que recibe tee la copia en la salida estándar y en el o los ficheros indicados como argumentos, si estos no existen son creados. -i No responde a interrupciones. -a Si los ficheros existen le añade la información al final. Ejemplo: date | tee –a fecha ls –l | tee listado cat fichero1 – fichero2 | sort | tee FileOrden El primero muestra la fecha y además la añade en un fichero. E segundo muestra el contenido del directorio y lo almacena en el fichero listado. Y el tercero concatena la entrada, la ordena, la muestra ordenada y la almacena en el fichero El Sistema Operativo Unix-Linux Comandos Básicos 30
  • 214.
    FileOrden. Ejercicios: Practicar todos los redireccionamientos, con todas las formas de indicar la entrada y salida. Combinar los redireccionamientos y la tubería: Almacenar ordenado el listado largo de un directorio en un fichero. Darle a sort la entrada con un fichero y que la salida la pase a less. Los usuarios que hay conectados, almacenarlos ordenados en un fichero. Al fichero anterior añadirle la fecha. En los ejercicios anteriores emplear los filtros vistos: less, cat y sort. Filtros para: Contar, Ordenar y Eliminar Repetidos. Contar: wc [opciones] fichero(s) Abreviatura de Word Counting. Sin opciones cuenta el número de líneas, palabras y caracteres contenidos en un fichero o en la entrada indicada. Si se especifica un grupo de ficheros contabiliza en cada uno de ellos y además muestra un total. Si no especificamos la entrada, toma por defecto la entrada estándar. Para que no muestre toda la información, podemos utilizar las opciones: -l Sólo cuenta las líneas. -w Idem las palabras. -c Idem los caracteres. Ejemplos: wc f1 f2 f3 Cuenta el nº de líneas, palabras y caracteres de cada fichero y hace un total. ls | wc -w Cuenta el nº de ficheros de un directorio. Ejercicios: Sin opciones ni argumentos. Con una opción, y varias cambiándolas de orden. Con varios ficheros. Pasándole la información mediante una tubería. Almacenando el resultado en un fichero. Averiguar cuantos ficheros y directorios hay en una rama del árbol de directorios, por ejemplo en tu $HOME. El resultado almacenarlo en un fichero y los posibles errores que no aparezcan por ninguna parte. Ordenar: Este filtro además de clasificar puede fusionar ficheros. En principio lo hace siguiendo el código ASCII. El Sistema Operativo Unix-Linux Comandos Básicos 31
  • 215.
    La entrada, aligual que en todos los filtros, pueden ser: ficheros indicados como argumentos, pasada por una tubería o suministrada por la entrada estándar. sort [opciones] [fichero(s)] Opciones generales: -o file Sirve para indicar el fichero de salida. Ya que si redireccionamos la salida a un fichero que se llame igual que el de entrada, se pierde la información. -m Mezcla los ficheros que supone que están ordenados. -c Comprueba si el fichero está ordenado. -u Muestra las líneas repetidas una sola vez, útil para la mezcla de ficheros. Opciones de ordenación de datos: -d (diccionario), sólo tiene en cuenta los caracteres alfabéticos, numéricos y espacio. -f Convierte mayúsculas a minúsculas a efectos de la ordenación. -b Ignora los blancos iniciales. -n Ordenamiento numérico, toman su valor aritmético el signo menos (-) y el punto decimal (.), En Ubuntu como tenemos definido el idioma toma como separador de los decimales la coma (,). Los blancos iniciales no se tienen en cuenta. -r Ordenación inversa. -R Ordenación aleatoria (Random). Ordenación de campos: Los campos se entienden separados por blancos o tabuladores salvo que se indique la opción: -tx Donde x es el carácter delimitador de campos. Es aconsejable poner el carácter entre comillas. Para ordenar sólo por un grupo de campos: -k inicio[,fin] Rango de campos por los que se ordena. Pueden indicarse opciones sólo para un rango, si se colocan inmediatamente después del número de campo, no irán precedidas de guiones; estas son b, f, n, r. La lista de ficheros caso de ser varios los ordena y mezcla, salvo que se utilice la opción -m, que sólo mezcla. Ejemplos: sort –t"," -f –k 2,3 lista > lista.ord Un fichero con la estructura: nombre, apellido1, apellido2, edad. Es ordenado por apellidos, sin diferenciar entre mayúsculas y minúsculas. who | sort | tee quien.hay Muestra y almacena los usuarios que hay conectados de forma ordenada. sort -nr –o num num Ordena el fichero num, que contiene números, en orden descendente y lo almacena en el mismo fichero. Comprobar que ocurre si en lugar de usar la opción –o empleamos el redireccionamento de salida. El Sistema Operativo Unix-Linux Comandos Básicos 32
  • 216.
    Ejercicios: Sin argumentos ni opciones. Ordenando un fichero. Almacenando el resultado en otro fichero. Probar las opciones y su combinación. Ordenar el fichero lista por edad. Quién hay conectado, mostrando los últimos en conectarse primero. Mostrar el listado largo de ficheros de un directorio, ordenado por tamaño, de mayor a menor. Ordenar el fichero de grupos (/etc/group) por el nº de grupo (campo 3) de menor a mayor y almacenar el resultado en un fichero. Ordenar el fichero de password (/etc/passwd) por el GID (4º campo) de forma numérica, los que pertenecen al mismo grupo los ordenamos por su nombre de usuario LOGNAME (campo 1º). Los campos están separados por ‘:’. El resultado almacenarlo en un fichero llamado passwd en vuestro directorio $HOME. Ordenar y mezclar dos ficheros con números (donde algunos estén repetidos), comprobar la opción –u. Eliminar líneas iguales o con parte igual. uniq [opc] [-campos] [+carac.] [f_in] [f_out] Controla las líneas consecutivas repetidas mostrando sólo una. Opciones: -c Precede cada línea del número de repeticiones. -d Sólo muestra las que se han repetido alguna vez. -u Visualiza las que no se han repetido. -i No distingue entre mayúsculas y minúsculas. -f nº_campos: Ignora el número de campos que se indique. -s nº_caracteres Ignora el número de caracteres que se indique. -w nº_caracteres compara como máximo el nº de caracteres indicado, después de haber saltado los campos o caracteres indicados en –f o –s. Si no se especifican ficheros de entrada o salida se utilizan la entrada y salida estándar. Ejemplos: sort alumnos | uniq –f 1 | wc -l En un fichero de alumnos compuesto por nombre y apellidos, cuenta todos los que hay con apellidos distintos. sort direcciones | uniq -d –f 1 Una vez ordenado el fichero muesta los registros repetidos a partir del primer campo. Ejercicios: En el fichero de nombres, apellidos y edades, procurar que se repitan algunas edades. El Sistema Operativo Unix-Linux Comandos Básicos 33
  • 217.
    ¿Cuántos hay decada edad? Filtros para ver que hay en los ficheros. El filtro más habitual para ver el contenido de un fichero es cat, ya visto. Ver el final de un fichero. tail [opción][nº] [fichero] Sin opciones lista las 10 últimas líneas. Sí el nº lleva el signo (+) empieza a mostrar a partir de ese nº de unidades, contando desde el principio del fichero, en el caso contrario cuenta las unidades indicadas desde el final del fichero. Las unidades se miden según la opción, que puede ser: -c nº Caracteres. -n nº Lineas. Mostrar el listado largo de un directorio, sin que incluya la 1ª linea, que indica el total de bloques usados. Ver el principio de un fichero. head [opción] [fichero] Por defecto muestra las 10 primeras líneas. -c nº Caracteres. -n nº Lineas. Con el signo (–) muestra todas menos las n últimas unidades. En un fichero tenemos los números del 0 al 9 (cada uno en una línea), escribir la línea de comando para que nos muestre uno de ellos aleatoriamente. Volcado en octal (octal dump) od [opciones] [fichero] Es útil para ver que contienen los ficheros objeto o de texto con caracteres no imprimibles. -t c Los caracteres imprimibles los muestra con caracteres normales, los no imprimibles con un nº en octal de tres dígitos, y algunos de estos los muestra de la siguiente forma: 0 Nulo. b Retroceso. f Salto de página. n Nueva línea. r Return. t Tabulador. -t oC Muestra los byte con su valor en octal. -j nº Nº de byte que son saltados sin mostrar. Almacenar en un fichero la palabra “hola” más intro. Mostrarlo con las distintas opciones. El Sistema Operativo Unix-Linux Comandos Básicos 34
  • 218.
    Filtro para cambiarcaracteres. tr (translate), cambia o traduce caracteres procedentes de una entrada de acuerdo a las reglas que se le indiquen. Supongamos que tenemos un archivo que usa los dos puntos(:) para separar campos, y que necesitamos cambiar cada dos puntos por otro carácter, por ejemplo el tabulador. tr : "t" < fichero t representa un tabulador. Formato: tr [opc] lista_de_entrada lista_de_salida Las listas deben de tener el mismo nº de caracteres, y la sustitución es posicional, el primer carácter de la lista de entrada es sustituido por el primero de la lista de salida, ... Normalmente se trabaja redireccionando la entrada y la salida. Opciones: -s (squeeze = estrujar, apretar) elimina caracteres repetidos en la salida. -c (complement) toma como lista_de_entrada el complemento. -d (delete) borra en la salida los caracteres del conjunto de entrada. Indicar rangos Se pueden usar conjuntos de caracteres. Por ejemplo para cambiar letras minúsculas por mayúsculas: tr “[a-z]” “[A-Z]” < fichero Ejemplo para codificar texto, desplazando cada letra trece posiciones en el alfabeto inglés de 26 letras: tr “[a-m][n-z][A-M][N-Z]” “[n-z][a-m][N-Z][A-M]” < fich > fich.13 Para traducir un conjunto de caracteres de entrada por el mismo carácter de salida, se usa el * después del carácter de salida indicando que se repita las veces que sea necesario. tr “[0-9]” “[#*]” < fichero Eliminación de repetidos en la salida tr -s “[0-9]” “[#*]” < fichero Cada nº con todas sus cifras es reemplazado por un solo símbolo “#”. Sustitución de los caracteres complementarios tr -c “[a-z][A-Z][0-9]” “[#*]” < fichero En el ejemplo anterior todo carácter no alfanumérico es sustituido por “#”. Eliminación de caracteres tr -cd “[a-z][A-Z][0-9]” < fichero El Sistema Operativo Unix-Linux Comandos Básicos 35
  • 219.
    Son eliminados todoslos caracteres no alfanuméricos incluidos los signos de puntuación, espacios,... Para representar caracteres especiales: NNN character with octal value NNN. a audible BEL Backslash b Backspace f form feed n new line r Return t horizontal tab v vertical tab Para representar conjuntos de caracteres: CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order [:alnum:] all letters and digits [:alpha:] all letters [:digit:] all digits [:cntrl:] all control characters [:lower:] all lower case letters [:upper:] all upper case letters [:graph:] all printable characters, not including space [:print:] all printable characters, including space [:punct:] all punctuation characters [:blank:] all horizontal whitespace [:space:] all horizontal or vertical whitespace Ejercicio: Dado un fichero de texto, producir un listado con las palabras que contiene ordenadas alfabéticamente, sin que estén repetidas e indicar el nº de veces que aparece cada palabra en el fichero. tr -s "[:blank:]" "n" < fichero | sort | uniq -c El Sistema Operativo Unix-Linux Comandos Básicos 36
  • 220.
    Buscar en ficheros.Familia grep. Busqueda de un patrón en un fichero: grep, fgrep, egrep. Buscar un patrón dentro de un fichero, grupo de ficheros, entrada estándar o la que se le especifique mediante tubería o redireccionamiento. Cuando se busca en más de un fichero, encabeza cada línea con el nombre del fichero. En la formación del patrón se pueden usar expresiones regulares, también llamados formatos de sustitución. Precisamente de las expresiones regulares toma su nombre que viene de las siglas: Global Regular Expression and Print grep [opc] patrón [fichero(s)] Reglas importantes de los formatos de sustitución, expresiones regulares: Si el patrón está formado por más de una palabra deben de incluirse entre comillas o apóstrofos según los sistemas. El punto (.) sustituye cualquier carácter único, igual que ? para el shell. Una lista entre corchetes ([]) tiene el mismo significado que para el shell. El circunflejo (^) dentro de unos corchetes precediendo una lista empareja todos los caracteres que no estén en la lista, igual que la ! en el shell. El signo dolar ($) al final de una expresión indica que debe de estar al final de una línea. El acento circunflejo (^) al principio de una expresión indica el principio de línea. El asterisco (*) sirve por cero o más repeticiones del carácter que le precede. La barra invertida () quita el significado especial al siguiente carácter. Sin opciones produce como salida las líneas que contienen el patrón. -n Al principio de línea aparece su nº de línea. -i Ignora mayúsculas y minúsculas. -c Sólo indica el nº de líneas que contienen el patrón dentro del fichero. -h No imprime los nombres de los ficheros. -l (ele) Indica en que fichero(s) se encuentra el patrón. -v Devuelve las líneas que no contienen el patrón. Ejemplos: grep byte *.apuntes grep ".f" programas grep [^m-t]ata fichero grep "^Santa Fe$" america europa grep ^[0-9][0-9]* datos fgrep [opc] patrón(es) [fichero(s)] La principal diferencia es que puede buscar muchos patrones de forma simultánea (puede buscar miles de palabras al mismo tiempo), pero no permite el uso de metacaracteres para formar El Sistema Operativo Unix-Linux Comandos Básicos 37
  • 221.
    expresiones regulares, sólocadenas fijas. Es más rápida que sus hermanas grep y egrep. Le son válidas las opciones anteriores, y además: -f fichero Sirve para indicar el fichero que contiene los patrones de búsqueda. Si se especifican varios patrones en la línea de comando, irán todos entre comillas y separados por un retorno de carro. Ejemplo: fgrep –f palabras lista1 lista2 egrep [opc] patrón(es) [fichero(s)] Como fgrep puede leer patrones desde un fichero. Y como grep puede emplear expresiones regulares. Actualmente las órdenes grep -E sustituye a egrep grep –F sustituye a fgrep Ejercicios: Buscar una palabra en un fichero. Comprobar la opción para que no distinga las mayúsculas. En varios ficheros buscar una frase e informar del nombre de los ficheros que la contengan. Mostrar el nº de veces que aparece la palabra if al principio de línea en un fichero(s). Eliminar las líneas en blanco de fichero1 y almacenarlo en fichero2. Borrar todas las líneas que contengan Manolo, Manuel, Lolo o Manolín. Comparacion de Ficheros. diff - busca diferencias entre dos ficheros diff [opciones] fichero-origen fichero-destino Por defecto muestra los cambios de edición que habría que realizar en f1 para que quedase igual que f2, de la siguiente forma: Línea o rango de f1 operación línea o rango de f2 Donde operación puede ser: a (añadir líneas de f2 a f1) d (borrar líneas de f1) c (cambiar líneas de f1 por líneas de f2). Y a continuación de cada operación muestra las líneas afectadas, si estas se preceden por el símbolo "<" quiere decir que son de f1, y si se preceden por ">" son de f2. Opciones El Sistema Operativo Unix-Linux Comandos Básicos 38
  • 222.
    -a Trata todoslos ficheros como de texto y los compara línea por línea, incluso si no parecen ser de texto. -b No se tienen en cuenta los blancos al final de línea y trata los distinto conjuntos de blancos como si fuesen iguales. -B No hace caso de cambios consistentes en sólo insertar o borrar líneas en blanco. -c Emplea el formato de salida de contexto. -i Considera las letras mayúsculas y minúsculas equivalentes. -q Informa sólo de si los ficheros difieren, no de los detalles de las diferencias. -r Cuando compara directorios, compara recursivamente cualesquier subdirectorios encontrados. -u Emplea el formato de salida unificado. Un estado de salida de 0 significa que no se encontraron diferencias, 1 significa que se encontró alguna diferencia y 2 significa problemas. Cortar y Pegar Ficheros. Cortar de forma horizontal (por líneas). split [-nº] [fichero] [prefijo] Divide el "fichero" en trozos de n líneas, los trozos son grabados en ficheros cuyo nombre base es "prefijo" y se le añaden las terminaciones "aa", "ab", hasta "zz", por lo que se puede dividir hasta en 676 ficheros. (26 letras) -nº Nº de líneas de cada trozo, por defecto 1000. Si no se indica el "fichero" se toma la stdin. Si no se indica el nombre base se asume "x". Variante de split csplit [-f prefijo] fichero arg1 [...argn] Divide el fichero en las porciones que indiquen los argumentos, estos pueden ser: n El trozo termina en la línea nº n (no incluida). "/exp/" Hasta la línea que contiene la expresión (no incluida). "%exp%" Salta sin grabar en fichero hasta la línea que contiene la expresión, esta línea se graba en el próximo fichero. En pantalla se muestra el tamaño de los ficheros en los que se divide. Algunas opciones son: -f prefijo Prefijo tiene el mismo significado que en split, si no se pone se asume "xx" y se van numerando, desde xx00 hasta xx99. -s No muestra el tamaño de las partes en la salida estándar. Pegar de forma horizontal. Hemos utilizado la orden cat para crear y visualizar ficheros, con redireccionamientos y tuberías, pero cat es una abreviatura de concatenar. cat [opc] [fichero(s)] [-] Concatena los ficheros especificados, y los muestra por stdout, la cual podemos redireccionar. El Sistema Operativo Unix-Linux Comandos Básicos 39
  • 223.
    El guión (-)significa una entrada por teclado. -v Muestra los caracteres no imprimibles. -t Además los TAB los muestra como ^I. Sólo los TAB –T. -e Además en los EOL muestra un $. Sólo los EOL –E. -n Numera las líneas de salida. -b No numera las líneas en blanco. -s No muestra más de una línea en blanco. -A Equivale a –vET. Ejemplos: cat f1 f2 cat f1 - f2 > f3 Dividir ficheros verticalmente (por columnas). cut [opc] [fichero] Permite seleccionar columnas (caracteres o campos) de un fichero, el resultado va a stdout. -c lista Seleccionamos la columna por caracteres. -f lista Indicamos la columna por campos (fields). En ambos casos la lista está formada por un conjunto de números separados por comas o guiones. -dcarácter Informa de cual es el carácter delimitador de campos cuando usamos la opción -f, por defecto se asume tab. -s Se usa conjuntamente con la opción “f”, para pasar por alto las líneas que no tengan el delimitador, como son cabeceras, títulos o líneas vacías. Ejemplos: Corta el rango de caracteres del 20 al 35: cut -c20-35 datos Se obtiene el 2º y 4º campo, actuando como separador los “:” cut -d”:” -f2,4 datos Unir ficheros verticalmente. paste [opc] fichero(s) Une los ficheros verticalmente, produciendo una única salida nueva. Sin opciones, sustituye los caracteres de fin de línea por tab, excepto los del último fichero. -dcarácter Carácter que sustituye los finales de línea. Ejercicios: Obtener un listado ordenado de todos los usuarios que son propietarios de algo dentro del directorio /home; no deben de estar repetidos. Orientaciones: A la salida de la orden ls -l le podemos eliminar la cabecera. Cortar la columna de los propietarios. Ordenar Eliminar los repetidos. El Sistema Operativo Unix-Linux Comandos Básicos 40
  • 224.
    En un ficherode alumnos, donde tenemos los datos de un alumno por linea, con los datos Nombre; Apellidos; Edad. Obtener otro fichero con los datos apellidos, nombre; ordenado por apellidos. Búsqueda de ficheros. find [ruta(s)] [opcion(es)] Es útil para localizar ficheros que cumplan determinadas condiciones o características, en las ramas del árbol de directorio que se le indique. Finalmente sobre los ficheros o directorios encontrados se puede ejecutar alguna acción. Dentro de las opciones, unas indican criterios de búsqueda (en el caso de que se indique más de un criterio se seleccionan los ficheros que cumplan todos simultáneamente). Otras opciones indican las acciones a realizar con los ficheros encontrados. Cuando el criterio se acompaña de un nº n, este puede llevar el signo positivo (+), negativo (-) o ninguno, significando respectivamente mayor que, menor que o igual que. Algunas opciones que indican criterios de busqueda: -name patrón Nombre del fichero a buscar, admite metacaracteres. Se aconseja poner el nombre entre comillas, para que los metacaracteres no sean interpretados por el shell. -iname patrón Como -name, pero no hace distinción entre mayúsculas y minúsculas. -type t Donde “t” es un carácter que indica el tipo de fichero, este puede ser: f Ficheros ordinarios. b Dispositivos de bloques. c Dispositivos de caracteres. d Directorios. l Vínculos simbólicos. -links [±]n Nº de enlaces. -inum n Empareja con los ficheros que tengan como nº de inodo n. -perm n Localiza los ficheros que tengan exactamente los permisos indicados por el nº n (octal). -user usuario Ficheros que pertenezcan al usuario, se indica el nombre del usuario. -uid n Idem, n debe de ser un identificador de usuario. (ls -n muestra uid y gid) -group grupo Ficheros que pertenezcan al grupo. -gid n Idem, n debe de ser un identificador de grupo. -size [±]n Nº de bloques de tamaño del fichero. Si se añade una c detrás del número se interpreta el tamaño en bytes (caracteres), k (Kbytes), w (palabras 2 bytes), b (bloques, por defecto). -empty Si el fichero o el directorio está vacío. -atime [±]n Si ha sido accedido en los últimos n días. El Sistema Operativo Unix-Linux Comandos Básicos 41
  • 225.
    -mtime [±]n Idem modificado. -newer fichero Ficheros modificados con posterioridad a la fecha y hora de modificación del fichero especificado. -maxdepth n n indica el nivel de profundidad al que se descenderá buscando ficheros en el árbol de directorios a partir de la trayectoria indicada. 0 Ninguno, 1 sólo en el directorio indicado. -mindepth n n indica a partir de que nivel se inicia la búsqueda. 1 a partir del directorio indicado, 2 omite los ficheros del directorio indicado. Ejemplos: find . -size -25c find /home/user07 -name hola -type d find programas -name "*.c" find /home -atime +30 Probar todos los criterios vistos y algunas combinaciones entre ellos. Estos criterios se pueden alterar y combinar con los operadores relacionales. Se listan en orden de prioridad: () Fuerza a la ejecución prioritaria. ! Colocada delante de un criterio este queda negado. -a Operador lógico y. Si no ponemos ninguno este va implícito. -o Entre dos criterios representa el o lógico. find . ! -name "*.c" -print find ./cartas ./epistolas ( -name pepe -o -name jose ) -ls find /home -name "*.txt" -user user07 –fprint txtde07 Son necesarios los paréntesis, ya que el AND tiene precedencia sobre el OR. Las barras invertidas son para que estos caracteres sean interpretados por el comando, no por el shell. Observar los espacios de separación entorno a los paréntesis. Opciones que indican acciones a realizar: -print Muestra la trayectoria de los ficheros que se encuentren. Esta será relativa o absoluta, dependiendo del tipo de trayectoria de búsqueda que nosotros indiquemos en la orden. Acción realizada por defecto. -fprint file Almacena el resultado en el fichero indicado. -ls Lista los ficheros encontrados por la salida estándar con el formato de la orden “ls -dils”, es decir, información de directorios, nº de inodo, listado largo y tamaño en bloques. -exec orden [{}] ; Ejecuta la orden con los ficheros encontrados. El juego de llaves representan los ficheros encontrados, el (;) indica el final de la orden y hay que colocarle antes la () para que pierda el significado especial que tiene para el shell. -ok orden [{}] ; Igual que la anterior, pero pide confirmación antes de ejecutar la orden El Sistema Operativo Unix-Linux Comandos Básicos 42
  • 226.
    con cada fichero.Los corchetes indican opcionalidad. Ejemplos: find . -name “carta*” - type f -exec cat {} ; find cuentas -atime +90 -ok rm {} ; find programas -newer proyec.c -exec mv {} /home/user07/actual ; find . -atime +3 -atime -60 -exec mv {} ../reserva ; find /home -atime +30 -size +20 -ok rm {} ; En ocaciones, esta orden puede tardar bastante, por lo que se suele ejecutar en background, si no necesitamos su resultado inmediatamente, para ello se añade al final de la orden el carácter &. En este caso ejecutará las acciones de forma desatendida y la salida estándar la debemos de redirigir. Observar la diferencia entre “find . -name fichero” y “find /home/user07 -name fichero”. Para ejecutar acciones sobre los ficheros encontrados, realizar la práctica en vuestro directorio de trabajo y preferiblemente con “-ok orden ...”. El Sistema Operativo Unix-Linux Comandos Básicos 43
  • 227.
    Editores: Editor VIsual. Generalidades. Comenzar con VI vi [-opciones] [fichero(s)] -R Abre el fichero en modo de solo lectura. +n Al abrir el fichero se posiciona automáticamente en la línea n. + Ídem, pero colocándose al final del fichero. Modos de trabajo Texto. Comando: De pantalla (al iniciar). De línea de órdenes. Entrar a modo texto: i Inserta en la posición del cursor. a Inserta después del cursor. I Inserta al principio de la línea. A Inserta al final de la línea. o Abre una línea debajo de la activa. O Abre la línea encima de la activa. Pasar a modo comando: Pulsando <Esc>. Desplazamiento En algunos terminales con las teclas de dirección. También h j k l (izquierda, abajo, arriba y derecha respectivamente). <Ctrl>+f Avanza pantalla. <Ctrl>+b Retrocede pantalla. <Ctrl>+d Avanza 1/2 pantalla. <Ctrl>+u Retrocede 1/2 pantalla. w Avanza una palabra. b Retrocede una palabra. Sobreescritura r Un solo carácter, y pasa a modo comando. R Reemplaza indefinidamente hasta que se pulse <Esc>. Grabar y Salir :q Abandona vi si no se ha modificado el documento. :q! Abandono imperativo, perdiendo los posibles cambios. El Sistema Operativo Unix-Linux Comandos Básicos 44
  • 228.
    :wq Grabar y salir. :w fich Graba en el nombre de fichero que le indiquemos. :w! fich Si el fichero existe lo sobreescribe. :w >> fich Añade al fichero indicado. ^g Muestra el nombre del fichero. Borrar J Une la línea actual con la siguiente. x Borra el carácter sobre el que está el cursor. d[n]alcance Donde n es el número de veces que se va a repetir la operación. El alcance puede ser: d Línea actual. w Palabra siguiente a partir del cursor. b Palabra anterior a partir del cursor. ) Hasta final de frase. (Punto o línea en blanco) ( Hasta principio de frase. } Hasta el final de párrafo. (Pto. y aparte y línea en blanco) { Hasta el principio de párrafo. $ Hasta final de línea. ^ Hasta principio de línea. Sin nº de veces. G Hasta el final del fichero. Al borrar, el texto pasa a un búfer de carácter general. (CORTAR) Cambiar c[n]alcance n y alcance tienen el mismo significado que en la orden anterior, pero para indicar una línea en alcance, se emplea la letra c. El bloque de texto así especificado se sustituye por la siguiente entrada por teclado, hasta que pasemos a modo comando. Copiar al búfer general y[n]alcance Donde n y alcance tienen el mismo significado que en el comando "d", con la salvedad que para referirnos a línea en alcance hay que poner y. El texto indicado se copia al búfer general sin borrarlo de su ubicación. El Sistema Operativo Unix-Linux Comandos Básicos 45
  • 229.
    Pegar p Pega el contenido del búfer general después de la posición del cursor. P Ídem., pero antes de la posición del cursor. Repetición . El punto repite la última operación de borrado o el último bloque insertado. Deshacer u Deshace la última operación realizada. U Restaura la línea actual. Configuración :set showmode Indica cuando esta modo INSERT y REPLACE. (En Linux también Command y Buffer) :set noshowmode Desactiva la anterior. :set list Muestra los caracteres no imprimibles, TAB como ^I, final de línea como $. :set nolist Desactiva la anterior. :set number Muestra números de línea. :set nonumber Desactiva la anterior. Ejemplo de órdenes de la línea de comandos que usan los números de línea: :rango_origencolínea_destino Copiar. :rango_origenmlínea_destino Mover. :rangow fichero Grabar. El Rango se indica con el nº inicial y el final separados por una coma. :set wrapscan Por defecto búsquedas circulares. :set nowrapscan No realiza búsquedas circulares. :set ignorecase No diferencia entre mayúsculas y minúsculas. A efectos de búsquedas y reemplazos. :set noignorecase Desactiva la anterior. :set shiftwidth=n Sangrado izquierdo. ^T deja n espacios más. ^D quita n espacios al sangrado. El Sistema Operativo Unix-Linux Comandos Básicos 46
  • 230.
    No afecta ala tecla del tabulador, que inserta 8 espacios. :set autoindent En la nueva línea emplea el mismo margen izq. :set noautoindent Desactiva la anterior. :set wrapmargin=n Número de espacios del margen derecho. :set showcmd Muestra el comando de pantalla en la línea inferior mientras se escribe, al ejecutarse se borra. :set noshowcmd Desactiva la anterior. :set ruler En la línea de estado, muestra la línea y columna donde se encuentra el cursor. :set noruler Desactiva la anterior. Para recomponer la pantalla después de un mensaje u otra incidencia pulsar ^L, en modo comando. :set Muestra las opciones activas. :set all Muestra todos los posibles set. Estos comandos set se pueden utilizar en cualquier momento cuando se esta trabajando con vi, pero se pueden guardar en un fichero de configuración llamado ".exrc" (“.vimrc” para el editor vim) y automáticamente se cargaran al comenzar una sesión con vi. Estos ficheros se encuentran en el directorio home de cada usuario. Por ejemplo .exrc (.vimrc) puede contener: set showmode set number set autoindent set shiftwidth=4 set wrapmargin=5 Acceder al shell :!orden Ejecuta la orden y después de pulsar return regresa al vi. :sh Sale al sh y regresa al escribir exit o ^d. Abreviaturas :ab abreviada cadena_a_abreviar Pone una abreviatura a una cadena. :una abreviada Deshace la abreviatura. :ab Muestra las abreviaturas creadas. El Sistema Operativo Unix-Linux Comandos Básicos 47
  • 231.
    Búsquedas y reemplazos. /texto El cursor se desplaza a la línea de comandos. La búsqueda se realiza hacia el final del fichero. ?texto Ídem, pero hacia el principio del fichero. n Repite la última búsqueda. N Ídem pero cambiando el sentido. La búsqueda no se hará circular si empleamos :set nowrapscan. Se puede utilizar una expresión en lugar del texto. Caracteres con un significado especial dentro de las expresiones de búsqueda: . Cualquier carácter. ^ Debe de ser el primer carácter. Indica principio de línea. $ Indica final de línea. < Comienzo de palabra. > Final de palabra. [] Conjunto de caracteres. Ejemplos:[0-9], [^A-Z], [aeiou]. * Ninguna o más repeticiones del carácter anterior. Para que estos metacaracteres pierdan su significado se usa . También se pueden inhabilitar con :set nomagic. Reemplazos globales. :ámbitos/patrón1/patrón2/g ámbito n La línea número n. n1,n2 Rango de líneas. . Línea actual. $ Final de fichero. % Todo el fichero. s Es la orden. /patrón1 Lo que buscamos. /patrón2 Por lo que lo vamos a sustituir. Si no se especifica se borra la expresión buscada. /g En todas las ocurrencias de una línea. De no indicarse se reemplaza la primera ocurrencia de cada línea. El Sistema Operativo Unix-Linux Comandos Básicos 48
  • 232.
    Marcar texto. mletra Donde m es el comando (mark) marcar, y debe de ir seguido de una letra de la a a la z. Pone una señal invisible en la posición del cursor. Las marcas sirven para: Referirnos a la línea: 'letra (comilla simple). Referirnos al carácter: `letra (acento grave). Con las marcas podemos desplazarnos a determinados puntos, solo con teclearlas precedidas de ' o `. También se pueden utilizar para indicar el alcance en comandos como d, y, c. Así por ejemplo para borrar de la línea en curso hasta la que esta marcada con la letra a d'a. Los Búfers del VI Podemos distinguir 3 tipos de búfers: El búfer sin nombre o de proposito general. Que se usa automáticamente en las operaciones de cortar, copiar, pegar y cambiar. Los búfers numerados, que son nueve. Y contienen los nueve grupos de líneas borradas más recientemente con el comando d o x. Lo borrado más recientemente se almacena en el búfer nº 1. Se puede pegar su contenido en cualquier parte con el comando p o P. Utilizando la sintaxis “nºp. Los 26 búfers alfabéticos (de la a a la z). Se emplean en conjunción con las órdenes de cortar, copiar y pegar. Para ello se teclea precediendo la orden, comillas dobles y la letra del búfer, que se va a utilizar para depositar la información o tomarla de allí. Edición de múltiples ficheros. Cuando al invocar a vi se especifican varios ficheros (ya sea utilizando una lista o empleando metacaracteres). Se empieza editando el primero. :n Después de que ejecutemos :w (grabar) se pasa al siguiente. :n! :rew Después de :w pasa a editar el primero de la lista. :rew! :args Informa de los ficheros cargados. :e fichero Pasa a editar el nuevo fichero si se ha grabado el anterior. Aunque no se haya El Sistema Operativo Unix-Linux Comandos Básicos 49
  • 233.
    cargado inicialmente, nose verá con la orden “:args”. :e! fichero Ídem aunque no se haya grabado el anterior. :e# Regresa al fichero anterior. Mover texto de un fichero a otro. Utilizando los búfers alfabéticos. Ejemplo: "ay'z (extrae el texto desde la línea en curso hasta la marcada con z y las almacena en el búfer a. En otro fichero se pegará con la orden “ap. No se puede utilizar el búfer sin nombre, ni los numerados (en el vi estándar), pues estos se borran al pasar de un fichero a otro. Otra forma sería grabando el bloque en un fichero temporal: :nºLínea1, nºLínea2w fichero Graba el rango de líneas en el fichero indicado. :r fichero Inserta el fichero después de la línea en curso. Contamos con otros editores como: emacs, joe, nano, gedit,… El Sistema Operativo Unix-Linux Comandos Básicos 50
  • 234.
    Comunicación entre Usuarios Lo primero será averiguar información sobre los usuarios y los que están conectados finger Proporciona información sobre los usuarios conectados al sistema, o incluso no conectados si indicamos su nombre. La sintaxis es: finger [opc] [usuario...] [usuario@host...] Por defecto muestra la siguiente información sobre cada usuario comectado al host local: Nombre de conexión. Nombre completo del usuario. Nombre del terminal, si va precedido por un * no admite mensajes con write. Tiempo que lleva ocioso. Hora de conexión. Desde dónde se ha establecido la conexión. Si sólo queremos información del usuario user07 escribiremos: finger user07 En este caso la muestra aunque no esté conectado. who who [opciones] Con who podemos ver los usuarios conectados a nuestro sistema, además, nos muestra el terminal en el que están conectados y el tiempo de conexión. who imprime la siguiente información por cada usuario que actualmente está conectado al sistema: Nombre de la cuenta (login name). Terminal. Momento en el que se conectó. Nombre de ordenador remoto o terminal X. Si sólo queremos información sobre el usuario que ejecuta la orden escribiremos: who -m who am i w w [usuario] Nos da información sobre los usuarios que están conectados en el momento que se ejecuta el comando y sobre que están haciendo. También se puede indicar un usuario en concreto. Ejemplo: $w 4:59pm up 4:05, 3 users, load average: 0.00, 0.01, 0.01 USER TTY LOGIN@ IDLE JCPU PCPU WHAT El Sistema Operativo Unix-Linux Comandos Básicos 51
  • 235.
    paco tty1 12:54pm 4:04m 11.85s 0.03s startx cursolin tty3 4:59pm 7.00s 0.06s ? - paco pts/0 4:53pm 0.00s 0.08s 0.03s w En la primera línea nos informa de La hora actual. Cuánto lleva el sistema funcionando. Cuántos usuarios están conectados. Las cargas medias en los anteriores 1, 5 y 15 minutos. A continuación para cada usuario se muestra: Nombre de login, Nombre de tty. Tiempo de conexión. Tiempo inactivo. Jcpu, es el tiempo usado por todos los procesos bajo el terminal tty. Pcpu, es el tiempo usado por el proceso en curso. La línea de comando del proceso en curso. write write usuario [terminal] El comando write nos permite mandar un mensaje a otro usuario en tiempo real, es decir, el mensaje aparecerá inmediatamente en la pantalla del destinatario. Estos mensajes no se almacenan en ningún buzón. Por supuesto sólo nos vale si el destinatario está conectado, y además debe tener mesg en y. Supongamos que deseamos enviar un mensaje al usuario user07, y que tiene activa la recepción de mensajes, en ese caso escribiríamos write user07 Una vez escrito el texto que deseemos enviar como mensaje: Hola Pepito, que no se te olvide la cita. pulsaremos [Ctrl]+[d] y el mensaje será enviado. También podemos mantener comunicaciones bidireccionales tipo walkie-talkie. Para ello no se pulsa ^d, y el otro usuario debe de escribir la orden write con nuestro nombre, cada vez que pulsemos return, esa línea aparecerá en el terminal del otro ususario. wall wall [archivo] Si queremos enviar un mensaje, no a un solo usuario, sino a todos los usuarios conectados usaremos wall. El mensaje puede estar previamente contenido en un fichero, y para enviarlo escribiremos: wall < fichero.txt Es una utilidad para el administrador y sólo él puede escribir en los terminales de los usuarios que hayan denegado la recepción de mensajes. El Sistema Operativo Unix-Linux Comandos Básicos 52
  • 236.
    Mensaje del día. Es otra forma de comunicación, en este caso del administrador con los usuarios. Consiste en un pequeño mensaje o aviso que aparecerá en el terminal de cada usuario cuando este se conecte. El administrador colocará este mensaje en el fichero /etc/motd. Mensaje de preentrada Aparece justo antes de la línea que nos pide el nombre del usuario “login:”, cuando accedemos al sistema mediante acceso de consola. El administrador coloca el mensaje en el fichero /etc/issue. mail En el caso de que nuestro usuario no esté conectado, el mejor comando para comunicarnos con él es mail. Envio de mensajes El mensaje a enviar puede ser tecleado directamente o estar previamente contenido en un fichero. La sintaxis básica es: mail usuario(s) mail usuario(s) < fichero No admite metacaracteres. Si queremos enviar un mensaje a User07 escribiremos: mail User07 Subject: Cita Te recuerdo que tenemos una cita . Se nos pide el asunto y a continuación escribimos el texto, finalmente al principio de una nueva línea ponemos un punto (.) y pulsamos return. Cuando User07 se conecte al sistema, éste le avisará de que tiene un correo: Para enviar el contenido de un fichero: mail user07 < carta Algunas opciones de la línea de comando: De esta manera no solicita el asunto, si tenemos interés en indicarlo usaremos la opción -s: -s “cadena” Indicamos el asunto de la correspondencia. -c “Usuario(s)” Usuarios que recibirán una copia. -b “usuario(s)” Usuarios que recibirán una copia ciega (los demás no se enteran). En cualquiera de los dos formatos en lugar de poner un ususario podemos colocar una lista de destinatarios. Si queremos enviar un mensaje a un usuario de otra máquina escribiremos: $ mail usuario@nombre_maquina El Sistema Operativo Unix-Linux Comandos Básicos 53
  • 237.
    Lectura del correo. Entramos en el modo de lectura del correo electrónico simplemente escribiendo “mail” sin opciones ni argumentos. Al entrar muestra un resumen tabular de todos los mensajes existentes en nuestro fichero buzón “/usr/spool/mail/UserName” (en nuestro sistema “/var/mail/UserName”), esta información consiste en: Estado: N Mensajes nuevos. U No son nuevos, pero no han sido leidos. R Leidos en la actual sesión. P Preservados. leidos y almacenados en el buzón de entrada. D Marcados para ser eliminados. O Mensajes antiguos. * Guardados en otro archivo buzón. Nº de mensaje. Remitente. Fecha y hora de recepción. Nº de líneas / caracteres. Asunto. Finalmente aparece el prompt o inductor de mail, para que le indiquemos cual es la siguiente operación que vamos a realizar. Órdenes para ver mensajes: h Vuelve a visualizar las cabeceras de los mensajes. z+ z- Si la lista de cabecera es muy larga, avanza y retrocede pantalla. nº_mensaje Visualiza el mensaje. Intro Visualiza mensaje siguiente. + Visualiza el mensaje siguiente. - Visualiza el mensaje anterior. Eliminación y recuperación de mensajes. d nº_mensaje Marca para eliminar los mensajes indicados. q Sale de mail, elimina los marcados y guarda los leidos en mbox. x Sale de mail sin borrar los marcados. pre nº_mensaje Preserva los mensajes en el buzón de entrada aunque estén leidos. s nº_mensaje fichero Almacena los mensajes en el fichero incluida la cabecera. w nº_mensaje fichero Almacena los mensajes en el fichero sin cabecera. Configuración. mail posee un fichero de configuración llamado .mailrc, que es utilizado por mail cada vez que El Sistema Operativo Unix-Linux Comandos Básicos 54
  • 238.
    se ejecuta, enél podemos configurar muchas opciones: set asksub Solicita introducción de asunto. set askcc Solicita, antes de enviarlo, direcciones para copias. set prompt=”cad” Cambia el inductor de mail. set sign=”cad” Establece cadena de firma que se inserta con ~a. set folder=dir Establece directorio donde almacenar archivos buzón. set record=fich Guarda en el fich todo el correo que se cree o envie. set outfolder Pone el archivo “record” en el directorio “folder”. set MBOX=fich Establece el nombre para el fichero mbox. set MBOX=+fich Con el signo + lo coloca en el directorio “folder”. Otra utilidad del fichero de configuración es la de crear alias, un alias en mail es un nombre que se le da a un grupo de usuarios para mandarle el mismo correo a todos, ahorrándonos de esta forma tener que teclear el nombre de cada usuario individual. El formato es el siguiente: alias NombreAlias ListaUsuarios ejemplo: alias clase user01 user02 user03 user 04 user05 user06 user07 El Sistema Operativo Unix-Linux Comandos Básicos 55
  • 239.
    Particionado Estructura física deldisco Hay varios conceptos para referirse a zonas del disco: • Plato: cada uno de los discos que hay dentro del disco duro. • Cara: cada uno de los dos lados de un plato. • Cabeza: número de cabezales, uno por plato. • Pista: una circunferencia dentro de una cara; la pista 0 está en el borde exterior. • Cilindro: conjunto de varias pistas; son todas las circunferencias que están alineadas verticalmente (una de cada cara). • Sector: cada una de las divisiones de una pista. El tamaño del sector no es fijo, siendo el estándar actual 512 bytes, aunque próximamente serán 4 KB. Antiguamente el número de sectores por pista era fijo, lo cual desaprovechaba el espacio significativamente, ya que en las pistas exteriores pueden almacenarse más sectores que en las interiores. Así, apareció la tecnología ZBR (grabación de bits por zonas) que aumenta el número de sectores en las pistas exteriores, y utiliza más eficientemente el disco duro. Pista (A), Sector (B), Sector de una pista (C), Clúster (D) El primer sistema de direccionamiento que se usó fue el CHS (siglas de cylinder-head-sector cilindro-cabeza- sector), ya que con estos tres valores se puede situar un dato cualquiera del disco. Más adelante se creó otro sistema más sencillo: LBA (siglas de logical block addressing, dirección lógica de bloques), que consiste en dividir el disco entero en bloques y asignar a cada uno un único número. Éste es el que actualmente se usa. Partición Una partición de disco, es el nombre genérico que recibe cada división de una unidad física de almacenamiento de datos. Toda partición tiene su propio sistema de ficheros (formato); generalmente, casi cualquier sistema operativo interpreta, utiliza y manipula cada partición como un disco físico independiente, a pesar de que dichas particiones estén en un solo disco físico. Físicamente una partición se corresponde con un conjunto de cilindros contiguos.
  • 240.
    MBR: Partes yfunciones El registro de arranque maestro como también se conoce (del inglés Master boot record cuyo acrónimo es MBR), es un sector de 512 bytes al principio del disco duro que contiene una secuencia de comandos necesarios para cargar un sistema operativo y una tabla donde están definidas las particiones del disco duro. Se localiza en el primer sector físico (Cilindro 0, Cabeza 0, Sector 1) asignado a un disco duro. Cada disco duro tiene un MBR Cuando se arranca desde el disco duro, la BIOS copia el contenido del MBR en una dirección fija de la memoria para luego darle el control. Este código arrancará seguidamente el sistema operativo, ya sea desde el disco duro o desde un Boot-Loader o cargador, algo más complejo, como por ejemplo LILO, GRUB o GAG. El MBR incluye generalmente la tabla de particiones y un código inicial para arrancar el Sistema operativo. Estructura del Master Boot Record Offset Naturaleza Size +00h Código ejecutable 446 byte +1BEh 1ª entrada de tabla de particiones 16 bytes +1CEh 2ª entrada de tabla de particiones 16 bytes +1DEh 3ª entrada de tabla de particiones 16 bytes +1EEh 4ª entrada de tabla de particiones 16 bytes +1FEh Marcador ejecutable (AA55h) 2 bytes Este diseño permite que la BIOS arranque el código máquina contenido allí y este inicie el sistema operativo según las especificaciones de su programa. Muchos virus aprovechan este funcionamiento de arranque estándar para arrancarse antes que el sistema operativo. Entradas de la tabla de particiones Registro de la tabla de particiones – 16 bytes Offset Descripción 0x00 Estado 0x01 Cabezal, Sector y Cilindro del primer sector en la partición 0x04 Tipo de partición 0x05 Cabezal, Sector y Cilindro del último sector de la partición 0x08 (4 bytes) (Logical block) address del primer sector de la partición 0x0C (4 bytes) Longitud de la partición, en sectores Por convención, hay exactamente cuatro entradas de particiones primarias.
  • 241.
    Tipos de particionesy unidades lógicas El formato o sistema de archivos de las particiones (p. ej. NTFS) no debe ser confundido con el tipo de partición (p. ej. partición primaria), ya que en realidad no tienen directamente mucho que ver. Independientemente del sistema de archivos de una partición (FAT32, ext4, NTFS, etc.), existen 3 tipos diferentes de particiones: • Partición primaria: Son las divisiones crudas o primarias del disco, solo puede haber un máximo de 4, o 3 primarias y una extendida. Un disco físico completamente formateado consiste, en realidad, de una partición primaria que ocupa todo el espacio del disco y posee un sistema de archivos. A este tipo de particiones, prácticamente cualquier sistema operativo puede detectarlas y asignarles una unidad, siempre y cuando el sistema operativo reconozca su formato (sistema de archivos). • Partición extendida: También conocida como partición secundaria es otro tipo de partición que actúa como una partición primaria; sirve para contener infinidad de unidades lógicas en su interior. Fue ideada para romper la limitación de 4 particiones primarias en un solo disco físico. Solo puede existir una partición de este tipo por disco, y solo sirve para contener particiones lógicas. Por lo tanto, es el único tipo de partición que no soporta un sistema de archivos directamente. • Partición lógica: Ocupa una porción de la partición extendida o la totalidad de la misma, la cual se ha formateado con un tipo específico de sistema de archivos (FAT32, NTFS, ext4,...) y se le ha asignado una unidad, así el sistema operativo reconoce las particiones lógicas o su sistema de archivos. Puede haber un máximo de 23 particiones lógicas en una partición extendida. Linux impone un máximo de 15, incluyendo las 4 primarias, en discos SCSI y en discos IDE 63. Las particiones extendidas se inventaron para superar el límite de 4 particiones primarias máximas por cada disco duro y poder crear un número ilimitado de unidades lógicas, cada una con un sistema de archivos diferente de la otra. Todos los sistemas modernos (Linux, cualquier Windows basado en NT e incluso OS/2) son capaces de arrancar desde una unidad lógica. Sin embargo, el MBR por defecto utilizado por Windows y DOS sólo es capaz de continuar el proceso de arranque con una partición primaria. Cuando se utiliza este MBR, es necesario que exista por lo menos una partición primaria que contenga un cargador de arranque (comúnmente el NTLDR de Windows). Otros cargadores de arranque que reemplazan el MBR, como por ejemplo GRUB, no sufren de esta limitación. Hay que tener en cuenta que solo las particiones primarias y lógicas pueden contener un sistema de archivos propio. Representación gráfica de un disco particionado.
  • 242.
    Cómo nombra lasparticiones Linux Linux hace referencia a las particiones en disco como una combinación de letras y números, este es un método más flexible y ofrece más información que el enfoque dado por otros sistemas operativos. De forma resumida: • Dos Letras Iniciales - las primeras dos letras del nombre de la partición indican el tipo de dispositivo donde reside la partición. Normalmente serán hd (para discos IDE) o sd (para discos SCSI o SATA). • Tercera Letra - esta letra indica que dispositivo contiene la partición. Por ejemplo /dev/hda (el primer disco duro IDE) o /dev/sdb (segundo disco SCSI). • Número - indica la partición. Las primeras cuatro (primarias o extendida) particiones son numeradas de 1 a 4. Particiones lógicas empiezan en 5. Por ejemplo /dev/hda3 es la tercera primaria o extendida en el primer disco IDE; /dev/sdb6 es la segunda partición lógica del segundo disco duro SATA. Así para acceder a las particiones y a otros dispositivos de almacenamiento usaremos: • Disqueteras o Primera disquetera: /dev/fd0 (en Windows sería la disquetera A:) o Segunda disquetera: /dev/fd1 • Discos IDE (en general: /dev/hdx#, donde x es el disco y # es la partición) o Primer disco duro: (todo el disco) /dev/hda Particiones primarias Primera partición primaria: /dev/hda1 Segunda partición primaria: /dev/hda2 Tercera partición primaria: /dev/hda3 Cuarta partición primaria: /dev/hda4 Particiones lógicas Primera partición lógica: /dev/hda5, las siguientes correlativas o Segundo disco duro: (todo el disco) /dev/hdb • Discos SCSI o SATA o Primer disco: /dev/sda o Segundo disco: /dev/sdb Y la misma numeración para las particiones. • Primer CD-ROM SCSI: /dev/scd0, también conocido como /dev/sr0 Aplicaciones para la edición de particiones GParted es el editor de particiones de GNOME. Esta aplicación es usada para crear, destruir, redimensionar, inspeccionar y copiar particiones, como también sistemas de archivos. Esto es útil para crear espacio para nuevos sistemas operativos, para reorganizar el uso del disco y para crear imágenes de un disco en una partición. QtParted, es la contraparte de GParted pero para entornos de escritorios KDE.
  • 243.
    Servidor ssh Secure SHell,(cuya traducción sería intérprete de comandos seguro) es un protocolo de comunicación para controlar un ordenador en remoto a través de una CLI (Command Line Interface - Interfaz de Línea de Comandos- también llamada: "shell"). Sirve para conectarnos con un ordenador ante el cual no estamos físicamente, bien porque está en una sala de servidores refrigerada, bien porque no tiene teclado ni pantalla, por ejemplo los que están apilados en un rack (un armario donde se guardan ordenadores como los servidores web, de correo electrónico, firewalls, etc...). OpenSSH es una versión libre del protocolo Secure Shell (SSH), es una familia de herramientas para control remoto o transferencia de archivos entre equipos. Las herramientas utilizadas tradicionalmente para realizar estas funciones, eran telnet o rcp, que son inseguras y transmiten la contraseña de los usuarios en texto plano cuando son usadas. OpenSSH proporciona un demonio y unos clientes para facilitar un control remoto seguro y encriptado. Instalación La instalación de cliente y servidor OpenSSH es simple. Para instalar las aplicaciones cliente de OpenSSH en tu sistema Linux, usa el siguiente comando: sudo apt-get install openssh-client Para instalar la aplicación servidor de OpenSSH, y los archivos de soporte relacionados: sudo apt-get install openssh-server Instala la parte cliente y la parte servidora en tu equipo. Configuración Puedes configurar el comportamiento predeterminado del servidor OpenSSH, sshd, editando el archivo /etc/ssh/sshd_config. Para más información: man sshd_config. Debes hacer una copia del archivo original y protegerlo contra escritura; así tendrás la configuración original como referencia y podrás volver a usarla si es necesario. Ejemplos de direct ivas de configuración que se pueden cambiar editando el archivo /etc/ssh/ssh_config: • Para hacer que OpenSSH escuche por el puerto TCP 2222 en lugar del puerto TCP 22 por defecto, cambia la direct iva Port como sigue: Port 2222 • Para hacer que sshd permita credenciales de inicio de sesión basados en clave pública, simplemente añade o modifica la línea: Openssh 1
  • 244.
    PubkeyAuthentication yes • Para hacer que el servidor OpenSSH muestre el contenido del archivo /etc/issue.net como banner antes del login, simplemente añade o modifica la línea: Banner /etc/issue.net • Indicar la versión del protocolo a ut ilizar (SSH v1 o SSH v2). Protocol 2 • PermitRootLogin: Permit ir conexiones como el usuario “root” (NO PERMITIR, por seguridad). • PermitEmptyPasswords: Permit ir contraseñas vacias (NO PERMITIR, por seguridad). PermitEmptyPasswords no • Permit ir el reenvio a traves de SSH de los siguientes servicios X11Forwarding yes X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server UsePAM yes Después de hacer los cambios en el archivo /etc/ssh/sshd_config, guarda este, y reinicia el servidor sshd para que los cambios tengan efecto usando la siguiente orden en una terminal: sudo /etc/init.d/ssh restart Hacer una copia del fichero sshd.config a sshd.config.copia Examinar al fichero /etc/ssh/sshd_config Modificar algún valor. Reiniciar el servicio. Conexión a un servidor remoto Si tenemos instalada la parte cliente de Openssh, hacemos ping al servidor y contamos en el con una cuenta. Nos conectamos de la siguiente forma: $ ssh usuario_remoto@host_remoto Nos pide la contraseña del usuario. La primera vez que nos conectemos a un servidor tarda un poco más y nos pide confirmación tecleando "yes" con todas sus letras, las subsiguientes ya no. Sabemos que estamos conectados porque el prompt cambia y aparece en lugar del nombre de nuestro host el nombre del host remoto. Los comandos, programas y scripts que lancemos tras conectarnos se ejecutarán en la máquina a las Openssh 2
  • 245.
    que nos hayamosconectado, utilizando los recursos del host remoto (CPU, memoria, disco, etc.). Esta arquitectura puede utilizarse, por ejemplo, para tener un servidor más potente y varios clientes que ejecutan aplicaciones en dicha máquina. Conectaros al Linux de un compañero, usando la cuenta “usuario” clave usuario. Comprobar que se han conectado, consultando los usuarios que hay activos en el sistema. Uso de aplicaciones gráficas Para poder ejecutar aplicaciones gráficas en el host remoto de forma segura, necesitamos dos cosas. La primera, que en la configuración del servidor SSH del host remoto (/etc/ssh/sshd_config) se encuentre activada la siguiente opción: X11Forwarding yes Para aprovechar esta característica, hemos de conectarnos usando el parámetro -X, lo que exportará la configuración de la variable $DISPLAY con lo que podremos ejecutar aplicaciones gráficas de forma remota: $ ssh -X usuario_remoto@host_remoto Ahora si ejecutas el programa xclock verás que la ventana sale en tu escritorio: $ xclock De igual manera puedes ejecutar gedit. Comprueba que tu fichero de configuración de sshd, admita conexiones gráficas. Conéctate al sevidor ssh de un compañero con la opción –X. Enviar u obtener archivos y carpetas con scp Permite la copia de ficheros entre ordenadores de una red, empleando la misma autenticación y seguridad que ssh. En una consola o terminal tecleamos: $ scp -r usuario@maquina:/home/user07/carpeta ./local Nos pide el password y copiará el directorio remoto "/home/user07/carpeta", en el directorio "./local", siempre que usuario tenga los permisos necesario. La opción "-r" significa recursivo, es decir, copia el directorio y todo su contenido, incluidos los subdirectorios y su contenido. Si no lo ponemos la orden para copiar todos los archivos de una carpeta sería: Openssh 3
  • 246.
    $ scp usuario@maquina:/home/user07/carpeta/*./local Si lo que queremos es enviar el contenido de un directorio, al ordenador remoto, utilizaremos la orden: $ scp /home/sif07/local/* usuario@maquina:/home/user07/carpeta/ Transferir archivos y carpetas, desde y hacia vuestra cuenta en el ordenador del profesor. Realizar copias entre los ordenadores de los compañeros. Hacer todo esto en modo gráfico Si lo que que queremos es conectarnos a un ordenador por ssh en modo gráfico también lo podremos hacer. Es más simple pero también tienes menos posibilidades, o para hacer ciertas cosas tardas más incluso que haciéndolo por consola, pero para las operaciones fáciles como administrar, editar un fichero también es posible hacerlo de esta manera. Entraremos en Lugares -> Conectar con al servidor... Elegiremos en el desplegable de arriba en lugar de FTP público, SSH y pondremos la IP del servidor. Restringir el acceso SSH Para evitar que todos los usarios de la máquina estén accesibles por SSH, editamos el fichero /etc/ssh/sshd_config, y añadimos la línea AllowUsers y a continuación los usuarios que se van a poder conectar remotamente via SSH: $ sudo gedit /etc/ssh/sshd_config Y añadimos la línea: AllowUsers usuario1 usuario2 usuario3 Para que los cambios surtan efectos habrá que reiniciar el servidor: $ sudo /etc/init.d/ssh restart Openssh 4
  • 247.
    Administración de gruposy usuarios Trabajo con grupos Los grupos son «colecciones» de usuarios que comparten recursos o ficheros del sistema. Con los grupos se pueden aplicar permisos concretos para un conjunto de usuarios, sin tener que repetirlos cada vez que se desee aplicarlos. Cómo actúan los grupos: Cada usuario pertenece como mínimo a un grupo. Al crear un fichero se establece como grupo propietario el grupo activo del usuario en ese momento. Para determinar si tenemos permisos sobre un fichero, por ejemplo para leerlo o modificarlo, se usan todos los grupos a los que pertenecemos. ⋆ El grupo activo suele ser el primario, salvo que se haya cambiado con newgrp El fichero de configuración de grupos /etc/group Este archivo contiene todos los grupos existentes en el sistema y los usuarios que pertenecen a los diversos grupos. En cada línea almacena información relativa a un grupo. La estructura de este fichero es de la siguiente forma: Grupo:x:GID:Lista de usuarios • Grupo: nombre del grupo, o groupname. • x indica que el password se guarda en el archivo /etc/gshadow. • GID: identificador del grupo, internamente el sistema identifica al grupo por este número. • Lista de usuarios: los usuarios que pertenecen al grupo, separados por comas «,» Por ejemplo: sif:x:519:pilar,alvaro,juan,luis,user01,user02,user03 /etc/gshadow, contiene la información de seguridad de los grupos (grupo, contraseña, y también los miembros). Su funcionalidad es la misma que /etc/shadow para los usuarios, esto es, añadir una seguridad extra a las contraseñas. Su estructura es: Grupo:Clave encriptada:Administradores del grupo:Lista de usuarios Usuarios y Grupos Administración Linux 1
  • 248.
    Ojear el ficherogroup de tu sistema y el del profesor. Intentarlo igualmente con el fichero gshadow Comprobar la diferencia entre los permisos de /etc/group y /etc/gshadow Tipos de grupos • Primario: el grupo especificado en el fichero /etc/passwd, se asigna al dar de alta al usuario. • Secundarios: los otros grupos a los que pertenece, que aparen en /etc/group Comandos • Nuevo grupo: groupadd grupo También podemos dar de alta un grupo editando directamente el fichero /etc/group. • Modificar un grupo existente: groupmod [-n nuevo-nombre] nombre-grupo Con esto le estamos cambiando el nombre al grupo. • Eliminar un grupo: groupdel grupo También lo podemos eliminar directamente en el fichero /etc/group, con cuidado de mantener la integridad con los ficheros de usuarios. • Añadir un usuario a un grupo gpasswd -a user grupo • Eliminar un usuario de un grupo: gpasswd -d user grupo • Añadir una lista de usuarios a un grupo gpasswd -M user1,user2,usern grupo • Añadir una lista de usuarios administradores a un grupo gpasswd -A user1,user2,usern grupo • Otra forma de añadir y eliminar usuarios de un grupo: # adduser usuario grupo # deluser usuario grupo • Cambiar de grupo activo: newgrp grupo Usuarios y Grupos Administración Linux 2
  • 249.
    Lanza un shelldonde el usuario trabaja con los permisos del grupo indicado, y los ficheros o directorios que cree pertenecerán a este grupo. • Asignar una contraseña a un grupo: gpasswd grupo Si un grupo tiene contraseña, un usuario que la conozca podrá trabajar con ese grupo, a pesar de no pertenecer él. Al ejecutar la orden newgrp grupo introducirá la contraseña y pasará a ser su grupo activo. • Eliminar contraseña de un grupo: gpasswd –r grupo • Grupos a los que pertenece un usuario groups usuario • Lista el identificador del usuario y los grupos a los que pertenece id usuario • Chequea la consistencia del fichero de grupos grpck • Volver a sincronizar los ficheros group y gshadow grconv Se usa la orden pwconv para los ficheros de usuarios. • Cambiar directorios o ficheros de grupo propietario chgrp [-R] grupo archivo Con la opción -R hace el cambio de forma recursiva. Grupos predeterminados o root, sys o bin, daemon, adm, lp, disk, mail, ftp, nobody, tty, etc. o Kmem: Grupo propietario de los programas para leer la memoria del kernel o users Práctica de grupos: Hacer una copia de los ficheros group y gshadow. Usuarios y Grupos Administración Linux 3
  • 250.
    Crear los grupos:grupouno, grupodos y g20. (*) Comprobar los cambios en los ficheros group y gshadow. Cambiar el nombre de g20 por grupo20. (*) Chequear la consistencia de los ficheros de grupos. Eliminar el grupo20 del fichero group con un editor. Volver a comprobar la consistencia de los ficheros de grupos. Agregarlo nuevamente y borrarlo con el comando apropiado. Asignar una clave al grupodos. (*) Cambiar al grupodos, aunque no pertenezcamos a él. Crear un fichero y comprobar a que grupo pertenece. Volver al grupo primario. Quitarle la contraseña al grupodos, e intentar pasarse a él. Añadiros al grupouno y al grupodos. (*) Poneros grupouno como el activo. Crear un fichero y comprobar a que grupo pertenece. Mostrar a que grupos pertenecéis, con y sin GID. Borrar el grupodos. (*) Chequea la consistencia del fichero de grupos. Los usuarios Las cuentas de usuario ofrecen: o Un nombre y una contraseña, con los que autenticarnos en el sistema. o Una ruta para almacenar los documentos. o Un perfil generalmente dentro de la carpeta /home/nombre-usuario, comúnmente denominada carpeta home del usuario. o Un intérprete de comandos (shell) que le permitirá ejecutar aplicaciones. Ficheros de configuración de usuarios Cuando se agregan usuarios al sistema se modifican ciertos archivos que a continuación mostramos, además de los de grupos: /etc/passwd Este archivo contiene todos los usuarios del sistema y la estructura que guarda es de la siguiente forma Usuario:x:UID:GID:Comentarios:Directorio Home:Shell Con el siguiente significado: • Usuario: Nombre del usuario. • x: La clave se encuentra en el fichero /etc/shadow. Usuarios y Grupos Administración Linux 4
  • 251.
    UID: Nº de identificación del usuario. • GID: Nº de identificación del grupo primario. • Comentarios: Información Usuario. Campo comentario. • Directorio Home: o Directorio de Conexión. • Shell: El intérprete de comando por defecto. /etc/shadow Almacena información sobre la contraseña de cada usuario. No es obligatorio, por lo que no existe en algunas versiones. Sus campos, también separados por “:” son los siguientes: • Nombre del usuario. • Contraseña cifrada. • Días transcurridos desde 01-01-1970 y la última modificación de la clave. • Nº de días necesarios para que el usuario pueda cambiarla. • Nº de días máximo en los que la contraseña es válida. • Nº de días de antelación con los que el sistema avisará al usuario de la caducidad. • Nº de días de inactividad que se permite al usuario. • Nº de días a partir del 1/1/1970, pasados los cuales su nombre no podrá ser utilizado. • No usado. Este fichero es aún más restrictivo en sus permiso que el fichero /etc/passwd. Examinar los ficheros /etc/passwd y /etc/shadow, comprobar sus permisos. Creación de usuarios Esta labor es exclusiva del administrador. Dependiendo de las versiones, contamos con las órdenes: o adduser Existe en versiones interactivas y otras en las que la información se introduce mediante parámetros. o useradd [-opciones] login adduser (comando interactivo para dar de alta) • Pide los datos necesarios y confirmación al final. • Da de alta al usuario en los ficheros /etc/passwd y /etc/group. • Crea su directorio y en el copia los ficheros existentes en /etc/skel, que deberá de contener los ficheros de configuración. useradd recibe la información como parámetros de la línea de comando, su formato es: useradd [opciones] usuario -g IDGroup Nº ID o nombre del grupo primario. -G IDGrupo(s) Grupo(s) secundario(s), separados por comas sin espacios. Usuarios y Grupos Administración Linux 5
  • 252.
    -d directorio Trayectoria absoluta del directorio de conexión ($HOME). -m Crea el directorio $HOME. -M No crea el directorio $HOME para el usuario. -s shell Trayectoria absoluta del shell de conexión. -c información Información del usuario (comentario), no es obligatorio. -k directorio Usa el directorio como alternativo al /etc/skell. -e fecha_exp. A partir de esta el usuario no tendrá acceso al sistema. -f nºDías Tiempo inactivo dado en días, que tiene que transcurrir para que caduque la contraseña y se inhabilite la cuenta. -u IDUser Nº de identificación del usuario (por defecto la siguiente libre). -U Crea un grupo con el mismo nombre que el usuario. -N No crea un grupo con el nombre del usuario. -p passwd Contraseña cifrada (crypt). En el fichero /etc/default/useradd, podemos definir valores por defecto para la creación de nuevos usuarios. Si no lo hacemos en el momento de la creación del usuario, posteriormente deberemos crear su directorio y asignarle un passwd. Ejemplo: # useradd –d /home/pepe -m –s /bin/bash -g sif pepe El usuario no se puede conectar hasta que no se le defina una contraseña. El administrador creará una contraseña para cada usuario con el comando: # passwd nombre_usuario Cuando se omite el nombre_usuario, nos cambiamos la contraseña a nosotros mismos. Visualizar el fichero de configuración de usuarios por defecto /etc/default/useradd, y comprobar las opciones que podemos preconfigurar. Crear un usuario sin contraseña, identificarlo en los ficheros de configuración de usuarios. Intentar conectarse como el usuario anterior en una consola virtual. Asignarle una contraseña, comprobarla en el fichero shadow. Acceder al sistema con el nuevo usuario. Que el propio usuario se cambie la contraseña. Para cambiar fichero o directorios de dueño, usamos el comando: chown [-R] usuario[:grupo] fichero El comando useradd permite crear muchos usuarios automáticamente mediante archivos de comandos (scripts). Usuarios y Grupos Administración Linux 6
  • 253.
    Plantillas de ususarios /etc/skel Crearuna plantilla nos permite, a partir de ella, añadir nuevos usuarios con unas determinadas configuraciones en cuanto a aspecto del escritorio y entorno por defecto de archivos y carpetas, así como valores en variables de entorno. El directorio /etc/skel contiene ficheros y directorios que son automáticamente copiados al directorio home del usuario, cuando un nuevo usuario es creado utilizando el programa de línea de comando useradd o bien desde el entorno gráfico (Sistema->Administración->Usuarios y grupos). Un directorio home, también denominado directorio de login, es un directorio en los sistemas operativos Linux/Unix, que sirve como repositorio o almacén para los ficheros personales del usuario, directorios y programas, incluyendo los ficheros de configuración personales. También es el directorio donde el sistema nos ubica después de loguearnos ante el sistema. Si queremos estar seguros que todos los usuarios de nuestro sistema tengan la misma configuración inicial, los cambios los deberemos realizar en /etc/skel Procedimiento: • Creamos un usuario, que servirá de modelo (lo llamamos plantilla). • Le configuramos el escritorio, paneles de control, contenido de los paneles, accesos directos a aplicaciones en el escritorio,… • Hacemos una copia del directorio original (por precaución) cp –r /etc/skel /etc/skel.original • Los ficheros de configuración, como “.profile”, los modificamos directamente en /etc/skel, para modificar variables de entorno como PATH o incluir órdenes como umark. • Sólo nos queda copiar, al directorio /etc/skel, las carpetas del directorio personal del usuario “plantilla”, donde se encuentra la configuración del escritorio y del gestor de ventanas gnome. cd /etc/skel sudo cp –rf /home/plantilla/Escritorio . sudo cp –rf /home/plantilla/.gconf . sudo cp –rf /home/plantilla/.gnome2 . sudo cp –rf /home/plantilla/.gnome2_private . Una vez copiadas al directorio /etc/skel, serán copiadas al directorio home de los usuarios cada vez que creemos uno nuevo, quedando configurado el aspecto del escritorio, su máscara y su PATH, a partir de la plantilla almacenada en /etc/skel. NOTA: Los ficheros de inicialización dependen del intérprete de órdenes seleccionado: Se ejecuta al hacer un login (PATH, variables de entorno, umask, funciones de inicialización, etc.): Usuarios y Grupos Administración Linux 7
  • 254.
    .bash_profile en Bourne Again Shell (bash) .profile en Bourne Shell (sh) .login en C Shell (csh) Cada vez que se ejecuta un shell (alias, var. del propio shell, etc.) .bashrc en Bourne Again Shell (bash) .cshrc en C Shell (csh) Al salir del sistema el usuario (al finalizar la sesión) .bash_logout en Bourne Again Shell (bash) .logout en C Shell (csh) Password o contraseñas El administrador puede cambiar la contraseña de cualquier usuario, y cada usuario se la puede cambiar a si mismo. passwd [nombre_usuario] A la hora de elegir una buena contraseña: No utilizar: Tu nombre o parte de él, o de alguien cercano a ti. Números significativos para ti o alguien cercano a ti. Algún nombre, número, lugar, gente, etc., asociado a tu trabajo. Palabra que este en un diccionario (español, inglés, etc.) Nombre de gente famosa, lugares, películas, relacionadas con publicidad, etc. Consejos: Introducir 2 o más caracteres extras, símbolos especiales o de control. Escribir mal las palabras. Utilizar mayúsculas y minúsculas, pero no de forma evidente. Utilizar algunos dígitos. Concatenar, embeber o mezclar 2 o más palabras, o partes de palabras. Usar caracteres poco comunes, como por ejemplo $, &, # , ˆ La contraseña se debe cambiar cuando: Se sospecha que alguien la ha podido conocer o averiguar. Un usuario se marcha del trabajo, cambiar todas las que conozca. Un administrador del sistema se va, cambiar TODAS. Se sospecha que alguien ha conseguido el fichero con las contraseñas (tanto /etc/passwd como /etc/shadow) Un intruso ha conseguido entrar en el sistema. Periódicamente, se debe forzar a que los usuarios cambien sus contraseñas, incluido el administrador. Usuarios y Grupos Administración Linux 8
  • 255.
    Práctica: Una empresa acaba de instalar un servidor Linux y desea dotar de cuentas de usuario a sus empleados. Departamentos (entre paréntesis se muestran los usuarios de cada departamento): comercial (cojefe, co1, co2, co3, co4) almacen (aljefe, al1, al2, al3) Confeccionar dos plantilla de usuarios, una para comerciales en “/home/co” y otra para almacén en “/home/al”. Incluirán diferentes paneles, lanzadores, fondo y temas de escritorio, ficheros de inicio. Crear un grupo por departamento, llamados: comerciales y almacenistas. Crear un directorio dentro de /home por departamento (/home/comercial y /home/almacen) Dar de alta a los usuarios: Teniendo en cuenta sus plantillas correspondientes Contraseña inical de cada usuario será el nombre de su grupo. La contraseña deberá expirar en un día. La shell a utilizar será /bin/bash. Asignarlos a su grupo primario. Los directorios personales de cada usuario colgarán del departamento al que pertenezca. Por defecto, cualquier usuario de un grupo puede leer los directorios personales de otros usuarios si y sólo si estos pertenecen a su mismo grupo. En ningún caso podrán escribir en otros directorios personales que no sean el suyo. Dentro de cada directorio departamento coexistirá con los directorios personales otro directorio llamado “work” donde todos los usuarios del departamento pueden intercambiar información (todos pueden crear y borrar archivos). En /home existirá también un directorio “comun” donde todos los usuarios de cualquier departamento pueden intercambiar información. Dentro de dicha ubicación, existirá otro directorio “comunJefes” donde sólo los jefes de departamento pueden intercambiar información. comunJefes no será accesible para ningún otro empleado. Bajas de usuarios Distintos niveles: - Dar de baja sólo la posibilidad de conectarse. Colocando un * en el 2º campo de /etc/passwd. Útil para usuarios temporalmente ausentes. - Dar de baja en el fichero de contraseñas, pero dejando todos sus ficheros y directorios. Editando y borrando la línea correspondiente o con el comando: userdel NombreUsuario - Dar de baja al usuario y eliminar todos sus ficheros. userdel -r NombreUsuario Usuarios y Grupos Administración Linux 9
  • 256.
    Cambio de atributosde un usuario usermod [-l nuevoNombre][-c comentario][-d home] [-m] [-e fecha][- f dias][-g grupo][-G lista de grupos][-s shell][-L | -U] usuario usermod permite las opciones de useradd y además: -l NuevoNombre -m Traslada el directorio login al indicado con la opción -d. -L Bloquea al usuario. -U Desbloquea al usuario. (Con la opción –s es similar a “chsh -s shell)” Inhabilitar un usuario colocando un * en su segundo campo del fichero /etc/passwd. Comprobar que no se puede conectar. Volver a habilitarlo y comprobar que se puede conectar. Borra las líneas correspondientes del usuario en los ficheros de configuración de usuarios (o userdel) Entra como administrador en su directorio y haz un listado largo ¿Qué usuario aparece? Volver a crear el usuario (con otro nombre), para que pueda acceder a sus ficheros. Conectarse como el usuario rehecho. Cambiarle el nombre para dejarle el original. Bloquear un usuario, usando usermod, averigua que cambios a realizado el comando en los ficheros de configuración. Comprobamos que efectivamente está bloqueado y a continuación lo desbloqueamos. Borrar el directorio $HOME de un usuario. Conectarse ¿Dónde está? ¿Puede crear ficheros? Crearle otro directorio de conexión, según la plantilla de creación por defecto. Al nuevo directorio asignarle el propietario y grupo adecuados de forma recursiva. Dar de baja definitiva al usuario. Dar de alta un nuevo usuario sin usar los comandos de gestión de usuarios. Ponerle password y probarlo. Usuarios estándar o root: Cuenta del administrador o bin, daemon, lp, sync, shutdown, etc.: usados para poseer ficheros o ejecutar servicios o mail, news, ftp: Asociados con herramientas o facilidades o postgres, mysql, xfs: Creados por herramientas instaladas para administrar y ejecutar sus servicios o nobody o nfsnobody: Usada por NFS y otras utilidades Usuarios y Grupos Administración Linux 10
  • 257.
    SUDOERS Introducción: Por cuestiones deseguridad, ubuntu intenta evitar el uso indiscriminado del usuario root, que es el usuario administrador o superusuario. Este usuario tiene identificación cero (UID = 0). root, tiene permiso para hacer cualquier cosa: borrar, modificar, ejecutar o crear cualquier objeto o fichero. En Ubuntu el usuario root, viene sin clave de acceso preestablecida. Como lo podemos ver en el fichero /etc/shadow: root:!:14301:0:99999:7::: daemon:*:14301:0:99999:7::: bin:*:14301:0:99999:7::: sys:*:14301:0:99999:7::: En el caso de root aparece un signo de exclamación (!), esto quiere decir que el usuario root no tiene clave establecida. De esta forma no nos podemos conectar al sistema directamente como root, con lo que de alguna forma queda limitado su uso indiscriminado, es decir, que se use tanto para tareas administrativas como para las que no lo son. Otra medida para proteger el uso de root, en caso de haber instalado el servidor ssh (secure shell), es evitar las conexiones remotas a través del usuario root. Para esto editamos su fichero de configuración en el servidor ssh, /etc/ssh/sshd_config, en una de sus líneas especifica que se permita hacer login al usuario root o no: # Authentication: LoginGraceTime 120 PermitRootLogin no Esta es la línea que impide que el usuario root pueda acceder vía ssh. ¿Cómo se hace para administrar el sistema? La respuesta está en el paquete sudo. sudo significa “super user do” o “Super Usuario Hace”, el comando sudo, es utilizado en modo texto para ejecutar casi cualquier comando como si lo estuviese ejecutando el usuario root, ahora bien, sólo ciertos usuarios pueden usar el comando sudo. Por defecto en Ubuntu, durante la instalación, y a diferencia de otras distribuciones de GNU/Linux, no se pregunta la clave del usuario root, pero si el nombre de un primer usuario y su clave de acceso, ese primer usuario, será quien pueda ejecutar el comando sudo inicialmente. 1. Aunque no sea recomendable, pero debido a que ya somos unos usuarios Sudo Administración Linux 1
  • 258.
    cuasi experimentados, quesabemos que la cuenta de root se debe de usar de manera exclusiva para tareas administrativas y que en nuestras prácticas estamos realizando trabajo de administración. Vamos a habilitar la cuenta de root simplemente poniéndole contraseña. ¿Exactamente qué es y qué hace sudo? sudo permite implementar un control de acceso altamente granulado, de qué usuarios ejecutan qué comandos. Si un usuario normal desea ejecutar un comando de root (o de cualquier otro usuario), sudo verifica en su lista de permisos y si está permitida la ejecución de ese comando para ese usuario, entonces sudo se encarga de ejecutarlo. Es decir, sudo es un programa que basado en una lista de control (/etc/sudoers), permite (o no) la ejecución al usuario que lo invocó sobre un determinado programa propiedad de otro usuario, generalmente del administrador del sistema 'root'. Sin embargo, el fichero /etc/sudoers no contiene al usuario que se creó durante la instalación, pero si miramos bien, tiene una línea que dice: # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL Aquí es donde se establece que los miembros del grupo admin puedan hacer uso del comando sudo. El equivalente al sudo en modo gráfico es el comando gksu y funciona igual que su equivalente sudo en el intérprete de comando (terminal) o Shell. sudo, para fines prácticos se puede dividir en tres partes: a. sudo, el comando con permisos de SUID. b. visudo, el comando que permite al administrador modificar /etc/sudoers. c. /etc/sudoers, el archivo de permisos que le indica a sudo qué usuarios ejecutan qué comandos. 2. Buscar donde se encuentra el ejecutable de sudo, con el comando whereis. 3. Comprobar sus permisos. 4. Visualizar su contenido y comprobar que existe la línea en la que a los miembros del grupo admin se les da permisos totales. 5. Mostrar los grupos a los que pertenece el usuario creado en la instalación, o en el fichero group, ver los usuarios que incluye. 6. Meter un usuario sin privilegios en el grupo admin ¿Podrá ejecutar comandos de root? 7. Ejecutar desde la línea de comandos alguna aplicación gráfica (como nautilus) con el comando gksu. Sudo Administración Linux 2
  • 259.
    sudo sudo (SUperuser DO)lo ejecuta un usuario normal, al que se le concede permiso para ejecutar ciertos comandos, que en principio no le son propios. sudo requiere que el usuario se autentifique a si mismos a través de su contraseña para permitirle la ejecución del comando. Veamos un ejemplo: $ sudo visudo [sudo] Password for user07: ... Por defecto, después de hacer lo anterior, durante 5 minutos puedes volver a usar el mismo comando u otros a los que tengas derecho, sin necesidad de escribir la contraseña de nuevo. Para extender el tiempo por otros 5 minutos usa: sudo –v (validate). Por el contrario, si ya terminaste lo que tenías que hacer, para finalizar con el tiempo de gracia de validación puedes usar: sudo -k (kill). sudo con la opción –l nos muestra los comandos que podemos usar, gracias al fichero sudoers. $ sudo -l User sergio may run the following commands on this host: (root) /sbin/ifconfig (root) /sbin/lspci Normalmente sudo interesa para ejecutar comandos de root, pero también es posible ejecutar comandos de otros usuarios del sistema indicando la opción –u, siempre que en el fichero sudoers se nos haya concedido permiso: $ sudo -u ana /home/ana/suprograma Otra opción interesante es la que permite editar archivos de texto de root (con el permiso otorgado en 'sudoers' como se verá más adelante), y esto se logra con la opción −e (equivale a sudoedit), que invoca al editor por defecto, que generalmente es 'vi'. $ sudo -e /etc/shadow (Permitirá modificar el archivo indicado como si fuera root) Cuando se configuran las reglas de acceso en el fichero sudoers, existen múltiples opciones (defaults), que se pueden configurar, estas se muestran con la opción –L de sudo. $ sudo -L Nos muestra las opciones y una pequeña descripción, estás opciones se establecen en el archivo de configuración 'sudoers'. sudo -V lista las opciones (defaults) establecidas para todos los usuarios, comandos, equipos, etc. Sudo Administración Linux 3
  • 260.
    Nota: Esta opciónrequiere privilegios de administrador. # sudo -V visudo Permite la edición del fichero de configuración de sudo, sudoers. Invoca al editor que se tenga por defecto que generalmente es 'vi' (enlazado con el fichero /usr/bin/editor). Cuando se ejecuta, bloquea el archivo /etc/sudoers, para que nadie más lo pueda editar, esto por razones obvias de seguridad que evitarán que dos o más usuarios administradores sobreescriban accidentalmente los cambios que el otro realizó. Otra característica importante de visudo es que al cerrar el fichero, verifica que esté bien configurado, es decir, detectará si hay errores de sintaxis en sus múltiples opciones o reglas de acceso. Por esta razón no debe editarse /etc/sudoers directamente (perfectamente posible ya que es un archivo de texto como cualquier otro), sino siempre usando visudo. Si al cerrar, visudo detecta un error, nos mostrará la línea donde está, y pregunta "What now?": >>> sudoers file: syntax error, line 15 <<< What now? Se tienen tres opciones para esta pregunta: o e Edita de nuevo el archivo, colocando el cursor en la línea del error. o x Salir sin guardar los cambios. o Q Salir y guarda los cambios. Si tan solo se desea comprobar que /etc/sudoers está bien configurado se usa la opción -c. # visudo -c /etc/sudoers file parsed OK La opción -s activa el modo 'estricto' del uso de visudo, al grabar, no solo se comprobará los errores sintácticos, sino también el orden correcto de las reglas, por ejemplo, si se define el alias para un grupo de comandos y este se usa antes de su definición. 8. Haz una copia del fichero sudoers a sudoers.original. 9. Comprueba que está bien configurado (opción –c) 10. Entra a editarlo con la opción –s, proboca un error (borra un igual) y trata de grabarlo. 11. Corríge el error y vuelve a grabarlo. Sudo Administración Linux 4
  • 261.
    Sudoers En este archivose establece quién (usuarios) puede ejecutar qué (comandos) y cómo (opciones), generando efectivamente una lista de control de acceso que puede ser tan detallada como se desee. Es más fácil entender sudo si dividimos en tres partes su posible configuración: o Alias o Opciones (Defaults) o Reglas de acceso Ninguna de las secciones es obligatoria, ni tienen que estar en algún orden específico, pero la que al menos debe de existir es la tercera. Alias Un alias se refiere a usuarios, comandos o equipos. El alias engloba bajo un solo nombre (nombre del alias) una serie de objetos y después, en la parte de definición de reglas, al poner el alias, nos estamos refiriendo a todos los objetos que contiene. La forma para crear un alias es la siguiente: tipo_alias NOMBRE_DEL_ALIAS = objeto1, objeto2,... objetoN tipo_alias NOMBRE1 = objeto1, objeto2 : NOMBRE2 = objeto3, objeto4 En el segundo caso, separados por ":", se están definiendo dos alias. El tipo_alias indica los elementos que contendrá. Hay cuatro tipos: o Cmnd_Alias define alias de comandos. o User_Alias define alias de usuarios normales. o Runas_Alias define alias de usuarios administradores o con privilegios. o Host_Alias define alias de hosts o equipos. El NOMBRE_DEL_ALIAS puede llevar letras, números o guión bajo ( _ ) y DEBE de comenzar con una letra mayúscula, se acostumbra a usarlos siempre en mayúsculas. Cmnd_Alias Engloba a uno o más comandos y otros alias de comandos. Ejemplos: Cmnd_Alias WEB = /usr/sbin/apachectl, /usr/sbin/httpd, sudoedit /etc/httpd/* A quien se le aplique el alias WEB podrá ejecutar los comandos apachectl, httpd y editar todo lo que este debajo del directorio /etc/httpd/. Notas: Hay que indicar la ruta de los comandos. Cuando nos referimos a directorios, la trayectoria deber de terminar con '/'. Sudo Administración Linux 5
  • 262.
    Cmnd_Alias APAGAR =/usr/bin/shutdown -h 23:00 Al usuario que se le asigne el alias APAGAR, podrá hacer uso del comando 'shutdown', exactamente con los parámetros como están indicados, es decir, apagar -h (halt) el equipo a las 23:00 horas. Nota: Es necesario escapar el signo ':', así como los símbolos ' : , = Cmnd_Alias NET_ADMIN = /sbin/ifconfig, /sbin/iptables, WEB NET_ADMIN es un alias con los comandos de configuración de interfaces de red ifconfig y de firewall iptables, pero además le agregamos un alias previamente definido que es WEB, así que a quien se le asigne este alias, podrá también hacer uso de los comandos del alias WEB. Cmnd_Alias TODO_BIN = /usr/bin/, !/usr/bin/rpm A quien se le asigne podrá ejecutar todos los comandos que estén dentro del directorio /usr/bin/, menos el comando 'rpm' ubicado en el mismo directorio. OTA: este tipo de alias con un permiso muy amplio menos '!' algo, generalmente no son una buena idea, ya que comandos nuevos que se añadan después a ese directorio también podrán ser ejecutados, es mejor siempre definir específicamente lo que se requiera. 12. Crea un alias de comando llamado ALTAS, que incluya las principales órdenes de gestión de usuarios y grupos. 13. Define otro alias llamado ALTASEDIT, que contenga al anterior, más el comando sudoedit. 14. Declara un alias llamado DIRECTORIOS, que nos permita editar en las carpetas: /home/comunjefes, /home/comercial/trabajo y /home/almacen/trabajo. User_Alias Definen a uno o más usuarios por su nombre o su UID (precedido de #), grupos del sistema (precedidos con %), grupos de red (netgroups precedidos con +) u otros alias de usuarios. Ejemplos: User_Alias ADMIN = sergio, ana 'sergio' y 'ana' pertenecen al alias ADMIN. User_Alias MYSQL_USERS = andy, marce, juan, %mysql Al alias MYSQL_USERS pertenecen los usuarios indicados individualmente más los usuarios que formen parte del grupo 'mysql'. Sudo Administración Linux 6
  • 263.
    User_Alias TODOS =ALL, !samuel, !david El alias de usuario TODOS, al incluir la palabra reservada 'ALL' abarcaría a todos los usuarios del sistema, excluyendo a dos de ellos, los negamos con '!'. Es decir, todos los usuarios menos esos dos. NOTA: los usuarios nuevos que se añadan al sistema también serán considerados como ALL, es mejor siempre definir específicamente a los usuarios que se requieran. ALL es válido en todos los tipos de alias. User_Alias OPERADORES = ADMIN, alejandra Los del alias ADMIN más el usuario 'alejandra'. Runas_Alias Funciona exactamente igual que User_Alias. Define los usuarios como quien vamos a ejecutar los comandos. Runas_Alias OPERADORES = #501, fabian Al alias OPERADORES pertenecen el usuario con UID 501 y el usuario 'fabian' 15. Crea un alias para los empleados de cada departamento (sin los jefes), con el nombre del departamento. 16. En otro alias llamado EMPLEADOS une incluye todos los empleados de todos los departamentos (sin los jefes) 17. Define un alias que incluya los jefes de departamento y al usuario ‘director’, llamarlo JEFES Host_Alias Definen uno o más equipos u otros alias de host. Los equipos pueden indicarse por: − Su nombre, si se encuentran en /etc/hosts. − Nombre de dominio, si existe un controlador de dominios. − Dirección IP. − Dirección de red con máscara de red. Podemos añadir equipos en /etc/hosts, escribiendo en una línea la IPv4 del equipo y separado por un espacio o tabulador el nombre del equipo. El nombre del equipo se define en /etc/hostname Ejemplos: Sudo Administración Linux 7
  • 264.
    Host_Alias LANS =192.168.208.0/24, 192.168.209.0/255.255.255.0 El alias LANS define todos los equipos de las redes locales. Host_Alias WEBSERVERS = 172.16.0.21, web1 : DBSERVERS = 192.168.100.10, dataserver Se define dos alias en la misma línea: WEBSERVERS y DBSERVERS con sus respectivas listas de elementos. Nota: El separador ':' es válido en cualquier definición de tipo de alias. 18. Definir un alias que incluya todos los host de la clase. Opciones (Defaults) (D Las opciones o defaults permiten definir ciertas características de comportamiento para los alias previamente creados, usuarios, equipos o de manera global para todos. No es necesario definir opciones o defaults, sudo ya tiene establecido el valor de cada uno, y es posible conocerlas a través de sudo -V. Sin embargo, la potencia de sudo está en su alta granularidad de configuración, así que es importante conocer al menos como se emplean. Se usa la palabra reservada 'Defaults' para establecer las opciones y dependiendo del nivel al que va a afectar su sintaxis es la siguiente: Nivel Formato De manera global, afecta a todos Defaults opcion1, opcion2 ... Por usuario Defaults:usuario opcion1, opcion2 ... Por usuario privilegiado Defaults>usuario opcion1, opcion2 ... Por equipo (host) Defaults@equipo opcion1, opcion2 ... La lista de opciones es extensa, pueden consultarse en las páginas del manual (man sudoers). Los defaults los divide el manual en cuatro tipos: flags o booleanos, enteros, cadenas y listas. Veamos algunos ejemplos de uso para cada uno de ellos: flags o booleanos Generalmente se usan de manera global, simplemente se indica la opción y esta se activa, para desactivarla se le antepone el símbolo '!' a la opción. Es necesario consultar el manual para saber el Sudo Administración Linux 8
  • 265.
    valor por defecto'on' u 'off'. Defaults mail_always Establece a 'on' la opción 'mail_always', que enviará un correo avisando cada vez que un usuario utiliza sudo, esta opción requiere que 'mailto_user' este establecida. Defaults log_year Anota el año en el fichero log o bitácora de sudo. Defaults !authenticate, log_host Desactiva el default 'authenticate', que por defecto esta activado 'on' (todos los usuarios que usen sudo deben identificarse con su contraseña), obviamente esto es un ejemplo y sería una pésima idea usarlo realmente, ya que ningún usuario necesitaría autenticarse, pues estamos usando Defaults de manera global. La segunda opción 'log_host', que por defecto está en desactivada, la activamos y bitacoriza el nombre del host cuando se usa un archivo como bitácora de sudo. Defaults:ana !authenticate Aquí se aprecia algo más lógico, usamos opciones por usuario en vez de global, indicando que el usuario 'ana' no requerirá auténticarse. Pero todos los demás sí. Defaults insults Cuando no escribimos bien la contraseña que requiere sudo, nos trata de intimidar. Enteros Manejan valores de números enteros en sus opciones, deben usarse como opción = valor. Defaults:fernanda, regina passwd_tries = 1, passwd_timeout = 1 Se establecen opciones para los usuarios 'fernanda' y 'regina', sólo tendrán una oportunidad para escribir la contraseña correcta 'passwd_tries' (el valor por defecto es de 3) y estarán exentas de volver a escribirla durante 1 minuto, el valor por defecto de 'passwd_timeout' e 5. Sudo Administración Linux 9
  • 266.
    Defaults loglinelen=0 Para queno limite el tamaño de la línea en el fichero log. La mayoría de las opciones numéricas, al establecerlas con un valor igual a cero quedan sin límite. Defaults@webserver umask = 011 Se establecen opciones sólo para los usuarios que se conectan al servidor 'webserver' y el valor 'umask' indica que si mediante la ejecución del comando que se invoque por sudo es necesario crear archivos o directorios, a estos se les aplicará la máscara de permisos indicada en el valor de la opción. Cadenas Son valores de opciones que indican mensajes, rutas de archivos, etc. Si hubiera espacios en el valor es necesario encerrar el valor entre comillas dobles (" "). Defaults badpass_message = "Intenta de nuevo: " Para todos los usuarios, cuando se equivoquen al escribir la contraseña, saldrá este nuevo mensaje. En este caso la opción por defecto es "Sorry: try again". Defaults logfile="/var/log/sudo.log" Define el fichero donde se almacena el histórico de usos del comando sudo. Listas Permite establecer/eliminar variables de entorno propias de sudo. Para entender como se aplican es más fácil si primero ejecutas como 'root' el comando sudo -V, y al final del listado encontrarás en mayúsculas las posibles variables de entorno que se pueden establecer o quitar y que vienen del shell. Solo existen tres Defaults de listas: − env_check Las variables de entorno a eliminar del entorno del usuario si el valor de la variable contiene los caracteres % o / . − env_delete Las variables de entorno a eliminar del entorno del usuario. − env_keep Variables de entorno a mantener cuando al opción env_check está en vigor. Las listas pueden ser remplazadas con '=', añadirle variables con '+=', eliminarle variables con '-=' o deshabilitarlas con '!'. Con un par de ejemplos quedará más claro. Sudo Administración Linux 10
  • 267.
    Defaults env_delete -=HOSTNAME Quita la variable de entorno 'HOSTNAME' de la lista, pero preserva todas las demás de la lista. Defaults env_reset Defaults env_check += DISPLAY La primera opción 'env_reset' reinicializa las variables de entorno que sudo utilizará o tendrá disponibles, y solo quedan disponibles LOGNAME, SHELL, USER y USERNAME. La siguiente línea indica que agregue (+=) a lo anterior, también la variable de entorno DISPLAY a su valor establecido antes del reset. 19. Definir las Defaults, para crear el fichero log de sudo, de forma que también registre el año y el host. Reglas de acceso El archivo /etc/sudoers no tendría ninguna razón de ser si no se crean reglas de acceso. De hecho podríamos solamente centrarnos en crear reglas de acceso, sin opciones ni alias. Las reglas de acceso definen qué usuarios ejecutan qué comandos bajo qué usuario y en qué equipos. Sintaxis básica: usuario host = comando1, comando2, ... comandoN usuario Puede ser un usuario, un alias de usuario o un grupo (anteponiéndole un %). host Puede ser ALL cualquier equipo, un solo equipo, un alias de equipo, una dirección IP o una dirección de red/máscara. comandox Es cualquier alias de comando o uno o más comandos, indicado con su ruta completa. Si se termina en '/', como en /etc/http/, indica todos los comandos dentro de ese directorio. daniela ALL = /sbin/iptables Usuario 'daniela', en cualquier host o equipo, puede utilizar iptables. ADMIN ALL = ALL Los usuarios definidos en el alias 'ADMIN', desde cualquier host, pueden ejecutar cualquier comando. Sudo Administración Linux 11
  • 268.
    %gerentes dbserver =(director) /usr/facturacion, (root) sudoedit /var/log/* Los usuarios que pertenezcan al grupo del sistema llamado 'gerentes', pueden en el equipo llamado 'dbserver', ejecutar como si fueran el usuario 'director', la aplicación llamada 'facturacion'. Además como usuarios 'root', pueden acceder al contendido de los archivos del directorio /var/log. El ejemplo anterior introduce algo nuevo, en la lista de comandos es posible indicar bajo que usuario se debe ejecutar el permiso. Por defecto es el usuario 'root', pero no siempre tiene por que ser así. Además la lista 'hereda' la primera definición de usuario que se indica entre paréntesis ( ), por eso si se tiene más de uno hay que cambiar de usuario en el comando conveniente, el ejemplo anterior también sería válido de la siguiente forma: %gerentes dbserver = sudoedit /var/log/*, (director) /usr/facturacion No es necesario indicar (root), ya que es el usuario bajo el cual se ejecutan los comandos por defecto. También es válido usar (ALL) para indicar bajo cualquier usuario. Con lo que el formato completo de las reglas de acceso quedaría: usuario host = (comoQuien) tag: comando1, (comoQuien) tag: comando2,… El ejemplo siguiente da permisos absolutos. sergio ALL = (ALL) ALL Se da permiso al usuario 'sergio', en cualquier host, para ejecutar cualquier comando, de cualquier usuario, por supuesto incluyendo los de root. SUPERVISORES PRODUCCION = OPERACION Una regla formada sólo por alias. Los ususarios contenidos en el alias 'SUPERVISORES', tendrán permiso en los equipos definidos en el alias de host 'PRODUCCION', para ejecutar los comandos incluidos en el alias de comandos 'OPERACION'. En este último ejemplo se aprecia lo útil que pueden ser los alias, ya que una vez definida la regla, solo debemos agregar o eliminar elementos de las listas de alias definidos previamente. Si se agrega un equipo más a la red, se añade al alias 'PRODUCCION', un usuario renuncia a la empresa, alteramos el alias 'SUPERVISORES' eliminándolo de la lista, etc. checo ALL = /usr/bin/passwd *, !/usr/bin/passwd root Este ejemplo muestra la potencia y flexibilidad de las reglas de acceso. El usuario 'checo', desde cualquier equipo, tiene permiso de cambiar la contraseña de cualquier usuario (usando el comando 'passwd'), excepto '!' la contraseña del usuario 'root'. Sudo Administración Linux 12
  • 269.
    Lo anterior selogra mediante el uso de argumentos en los comandos. En el primer ejemplo '/usr/bin/passwd *' el asterisco es un un metacarácter o comodín (wildcard), que indica cualquier argumento, es decir, cualquier usuario. En el segundo caso '!/usr/bin/passwd root', Indica un argumento específico 'root', y la '!' como ya se sabe expresa negación, negando entonces el permiso a cambiar la contraseña de root. Cuando se indica el comando sin argumentos: /sbin/iptables, sudo lo interpreta como 'puede usar iptables con cualquiera de sus argumentos'. mariajose ALL = "/sbin/lsmod" Al estar entre comillas dobles un comando, entonces sudo interpreta que 'puede hacer uso del comando lsmod pero sin argumentos'. En este caso el usuario 'mariajose' podrá ver la lista de módulos del kernel, pero sólo eso. 20. Los usuarios del alias COMERCIAL, podrán ejecutar el programa /usr/bin/comercial, propiedad de root y del grupo root, y con los permisos: rwxr-x---. 21. Igualmente los usuarios del alias ALMACEN, podrán ejecutar su programa /usr/bin/almacen, que tiene las mismas características que el anterior. 22. El usuario ‘director’ desea disponer de los derechos para ejecutar los comandos contenidos en el alias ALTASEDIT. 23. A los usuarios del alias JEFES, darle los permisos para ejecutar los comandos de los alias DIRECTORIOS y ALTAS. 24. Dar permiso a los EMPLEADOS para ejecutar los programas /home/director/bin/entrada y /home/director/bin/sadida, ambos propiedad del usuario ‘director’. a. Si no existe, creamos el usuario director (contraseña director). b. El director creará su carpeta bin y en ella los dos programas con el código siguente: En el programa de entrada (consultar man date): echo `date +%Y%t%m%t%d%t%H%t%M%t%S%t``logname` >> /home/director/bin/entradas.log En el programa de salida: echo `date +%Y%t%m%t%d%t%H%t%M%t%S%t``logname` >> /home/director/bin/salidas.log c. Le damos permiso de ejecución sólo al propietario. d. Para comprobar su funcionamiento, los puede ejecutar el usuario director. e. Los ficheros de datos (entradas.log y salidas.log) sólo los puede editar el director. f. Probar a ejecutarlos desde algún empleado. Ver que se añade la información en los ficheros log. g. Colocar estos programas en los ficheros de inicio y cierre de sesión (.profile y bash_logout). h. Hacer que no se requiera autenticación para ejecutarlos (apartado siguiente). Sudo Administración Linux 13
  • 270.
    Tags (etiquetas decomandos) Cuando se definen reglas, la lista de comandos pueden tener cero (como en los ejemplos anteriores) o más tags. Existen 6 de estas etiquetas o tags. NOPASSWD Y PASSWD Por defecto sudo requiere que cualquier usuario se autentifique con su contraseña. Aprendimos en la sección de 'Opciones' o 'Defaults' que es posible indicar que un usuario o alias de usuario no requiera de autentificación. Pero el control granular propio de sudo, permite ir aún más lejos al indicar a nivel de comandos, cuáles requieren contraseña para su uso y cuáles no. lux webserver = NOPASSWD: /bin/kill, /usr/bin/lprm, vi /etc/httpd/conf/* El usuario 'lux' en el equipo 'webserver' no requerirá contraseña para los comandos listados. El tag se hereda, para los siguientes comandos, mientras no se indique el tag contrario. Suponiendo que para el último '/etc/httpd/conf/', que permite modificar cualquier archivo contenido en el directorio, si deseamos que use contraseña, lo escribiremos como sigue: lux webserver = NOPASSWD: /bin/kill, /usr/bin/lprm, PASSWD: vi /etc/httpd/conf/* Aunque ya que solicitar contraseña es el default preestablecido, lo anterior también funcionará de la siguiente forma: lux webserver = vi /etc/httpd/conf/*, NOPASSWD: /bin/kill, /usr/bin/lprm NOEXEC Y EXEC Este es un tag muy importante a considerar cuando se otorgan permisos sobre programas que permiten escapes a shell (shell escape), como en el editor 'vi' que mediante el uso de '!' es posible ejecutar un comando en el shell sin salir de 'vi'. Con el tag NOEXEC se logra que esto no suceda. Al igual que los tags anteriores, el tag se hereda y se deshabilita con su tag contrario. valeria ALL = NOEXEC: /usr/bin/vi SETENV Y NOSETENV Una de las múltiples opciones que pueden establecerse en la sección 'Defaults' u 'opciones', es la opción booleana o de flag 'setenv', que por defecto y para todos los usuarios esta establecida en 'off'. Esta opción si se activa por usuario (Defaults:sergio setenv) permitirá al usuario indicado cambiar el entorno de variables del usuario del cual tiene permisos para ejecutar comandos, y como generalmente este es 'root', resulta bastante peligroso. Sudo Administración Linux 14
  • 271.
    A nivel delista de comandos, es posible especificar el tag 'SETENV' a un solo comando o a una pequeña lista de estos y solo cuando se ejecuten estos se podrán alterar las variables de entorno. Es decir, en vez de establecerlo por usuario, sería más conveniente establecerlo por comando. ADMIN ALL = SETENV: /bin/date, NOSETENV ALL A los usuarios definidos en el alias de usuario 'ADMIN', en cualquier host, pueden alterar las variables de entorno cuando ejecuten el comando 'date' (que puede ser útil por ejemplo para cambiar variables del tipo LOCALE), cualquier otro comando, no tendrá esta opción, al habilitar el tag contrario 'NOSETENV'. Ya que este es el default, también sería válido de la siguiente manera y harían lo mismo: ADMIN ALL = ALL, SETENV: /bin/date 25. Hacer que el usuario creado en la instalación, no tenga que autenticarse al usar sudo, a los demás del grupo admin sí. Sudo Administración Linux 15
  • 272.
    ARCHIVO /ETC/SUDOERS DEEJEMPLO Veamos un pequeño ejemplo de un archivo /etc/sudoers: # ********************************* # sergio.gonzalez.duran@gmail.com * # ********************************* # ********************************* # DEFINICION DE ALIAS * # ********************************* # administradores con todos los privilegios User_Alias ADMINS = sergio, ana # administradores de red - network operators User_Alias NETOPS = marcela, andrea # webmasters User_Alias WEBMAS = cristina, juan # supervisores de producción (todos los del grupo de sistema supervisores) User_Alias SUPPRO = samuel, %supervisores # usuarios que pueden conectarse desde Internet User_Alias INETUS = NETOPS, ADMINS, samuel # servidores web Host_Alias WEBSERVERS = 10.0.1.100, 10.0.1.101 # servidores de aplicaciones Host_Alias APLICACIONES = WEBSERVERS, 10.0.1.102, 10.0.1.103, mailserver # comandos de red permitidos Cmnd_Alias REDCMDS = /sbin/ifconfig, /sbin/iptables # comandos de apache Cmnd_Alias APACHECMDS = /usr/sbin/apachectl, /sbin/service httpd * # ********************************* # DEFINCION DE OPCIONES * # ********************************* # Los administradores, requieren autentificarse con la contraseña de 'root' Defaults:ADMINS rootpw # Para todos los usuarios, tienen hasta 4 intentos para ingresar su contraseña # y 3 minuto para que esta expire Defaults passwd_tries = 4, passwd_timeout = 3 # Los usuarios que se conectan desde Internet, solo tienen una oportunidad # y cero timeout lo que implica que cada comando que usen a través de sudo # requerirá siempre de autentificación. Defaults:INETUS passwd_tries = 1, passwd_timeout = 0 # Máscara de directorios y archivos por default, # para los que ejecuten sudo en los servidores web Defaults@WEBSERVERS umask = 022 # ********************************* # DEFINCION DE REGLAS * # ********************************* # administradores todo se les permite en cualquier equipo # (¡¡¡¡¡cuidado con esto en la vida real!!!!! ADMINS ALL = (ALL) ALL Sudo Administración Linux 16
  • 273.
    # administradores dered, en todos los equipos, los comandos de red NETOPS ALL = REDCMDS # webmasters, en los servidores web con los comandos indicados en apachecmds # y además sin necesidad de contraseña acceder a las bítacoras de apache # y reiniciar los servidores. WEBMAS WEBSERVERS = APACHECMDS, NOPASSWD: vi /var/log/apache/, /sbin/reboot # supervisores, pueden ejecutar los comandos indicados # en los equipos indicados en el alias aplicaciones # y además son ejecutados bajo el usuario apps. SUPPRO APLICACIONES = NOEXEC: (apps) /usr/local/facturacion.exe, /usr/local/nomina.exe # No definidos por alias previos, sino directamente # regina es de recursos humanos y puede cambiar contraseñas de cualquier usuario # menos de root regina ALL = /usr/bin/passwd *, !/usr/bin/passwd root # david, puede apagar los equipos de aplicaciones david APLICACIONES = /sbin/shutdown, /sbin/halt # El equipo firewall de la red puede ser reiniciado (no apagado) por fernanda # que es asistente de redes fernanda firewall = /sbin/shutdown -r now Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la G U Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation. autor: sergio.gonzalez.duran@gmail.com Adaptación: Luis Quesada Sudo Administración Linux 17
  • 274.
    Administración del sistemade ficheros Introducción Un sistema de ficheros (filesystem) son los métodos y las estructuras de datos que emplea el sistema operativo (en nuestro caso, Linux) para organizar los ficheros en disco. Organizan la información guardada en unidades de almacenamiento (ficheros), esta información luego será representada ya sea textual o gráficamente utilizando un gestor de archivos. Los sistemas de ficheros proveen métodos para crear, mover, renombrar, enlazar y eliminar tanto ficheros como directorios, además de facilitar mecanismos de acceso y protección de los datos. Linux soporta varios tipos de sistemas de ficheros. Entre los más importantes podemos destacar los siguientes: o MINIX: El más antiguo, presume de ser el más seguro, pero es bastante limitado en las características que proporciona. Un sistema de ficheros de este tipo solo puede tener 64 MB. o EXT2: Es el sistema de ficheros nativo de Linux. Está diseñado para ser compatible con versiones anteriores. o EXT3: Es una modificación del ext2, para añadirle funcionalidades de jourmaling. o EXT4: Mejora ext3, permitiendo sistemas de ficheros de gran tamaño, es capaz de trabajar con volúmenes de hasta 1 exabyte y ficheros de tamaño de hasta 16 TB. o VFAT: Este tipo permite utilizar sistemas de ficheros de Windows (FAT, FAT32), y actualmente está soportado el sistema de ficheros de Windows NT, pero sólo fiable en modo lectura. o Iso9660: Es el sistema de ficheros estándar para CD-ROM. o NFS: Sistema de ficheros en red, que permite compartir sistemas de ficheros entre diferentes máquinas conectadas en red y tratarlos de forma local. o HPFS: Es el de sistema de ficheros de OS/2. o SYSV: Es el sistema de ficheros de SystemV/386, Coherent y Xenix. Existe también un sistema de ficheros especial denominado proc, y que es accesible a través del directorio /proc, el cual no es realmente un sistema de ficheros. El sistema de ficheros /proc permite acceder fácilmente a ciertas estructuras de datos del kernel, como es la lista de procesos. Convierte estas estructuras de datos en algo parecido a un sistema de ficheros y por tanto da la posibilidad de manipularlas con las herramientas habituales de manipulación de ficheros. Hay que tener en cuenta que aunque se le denomine sistema de ficheros, ninguna parte del sistema de ficheros /proc toca el disco. Existe únicamente en la imaginación del kernel. Administración del S.F. Linux 1
  • 275.
    Si añadimos unnuevo disco al sistema ya instalado, deberemos crear las particiones y los sistemas de ficheros, esta operación implica los siguientes pasos: 1. Creación de particiones (comando fdisk) 2. Creación de los sistemas de ficheros (comando mkfs) 3. Montado de los sistemas de ficheros (comando mount) Creación de particiones El comando, en modo texto, para crear particiones es fdisk. Formato: fdisk [opciones] dispositivo dispositivo Es el nombre del fichero de dispositivo correspondiente (/dev/hdx en IDE, /dev/sdx para SCSI o SATA) Debemos tener permiso de administrador para usarlo. Opciones: -l Muestra la tabla de particiones del dispositivo fdisk se usa mediante un menú: # fdisk /dev/sda Orden (m para obtener ayuda): m Orden Acción a Conmuta el indicador de iniciable (partición activa) b Modifica la etiqueta de disco bsd c Conmuta el indicador de compatibilidad con DOS d Suprime una partición l Lista los tipos de particiones conocidos m Imprime este menú n Añade una nueva partición o Crea una nueva tabla de particiones DOS vacía p Imprime la tabla de particiones q Sale sin guardar los cambios s Crea una nueva etiqueta de disco Sun t Cambia el identificador de sistema de una partición (tipo de partición) u Cambia las unidades de visualización/entrada v Verifica la tabla de particiones w Escribe la tabla en el disco y sale x Funciones adicionales (sólo para usuarios avanzados) Existen otras herramientas para modificar las particiones: − cfdisk Interfaz para el fdisk (también escribe la tabla de particiones) − parted Programa de GNU que permite crear, destruir, cambiar el tamaño, chequear y copiar particiones. − gparted Clónico del Partition Magic para Linux (basado en libparted) Administración del S.F. Linux 2
  • 276.
    Partition Magic Programa comercial de la compañía Symantec que puede manejar diversos filesystems. 1. Visualizar con la opción -l las particiones existentes. 2. Verificar la tabla de particiones. 3. Calcular el tamaño en GB de una partición (confirmarlo con gparted). 4. Borrar todas las posibles particiones de un pen (lo más normal es que exista una). 5. Crear dos particiones primarias y una lógica en el pen, de diferentes tamaños, que alguna de ellas sea FAT32. 6. En el disco del equipo, comprobar que queda espacio sin asignar en la partición extendida. 7. Crear una segunda partición lógica en el disco del sistema . Creación de un Sistema de Ficheros. Los sistemas de ficheros se crean con el comando mkfs (Make Filesystem). mkfs nos permite construir un sistema de ficheros sobre un dispositivo, normalmente una partición de un disco. En Linux, existe un programa separado por cada tipo de sistema de ficheros. mkfs es solamente un 'front-end', que ejecuta el programa apropiado dependiendo del tipo de sistema de ficheros deseado. El tipo de sistema de ficheros se define con la opción -t de mkfs. La sintaxis de este comando es: mkfs [-t tipo] dispositivo Donde: tipo Es el argumento mediante el que se indica la clase de sistema de ficheros a crear. Si se omite este argumento, mkfs lo deducirá buscando en /etc/fstab. Y si no hay entrada en fstab tomará por defecto ext3. Dispositivo Puede ser el nombre del dispositivo sobre la cual queremos crear el sistema de ficheros (como por ejemplo /dev/hda1 o /dev/sdb2) o el punto de montaje (como /, /usr o /home). En el caso de indicar el punto de montaje, la orden mkfs intentará encontrar el dispositivo en el que crear el sistema de ficheros, en la entrada del fichero /etc/fstab, donde encuentre el punto de montaje. Ejemplos: mkfs -t ext3 /dev/sda1 mkfs /dev/fd0 # Primera unidad de disquete. mkfs /media/floppy 8. Utilizando diferentes particiones del pen, crea un sistema de ficheros ext3 y otro vfat. 9. En la nueva lógica del HD crea un sistema de ficheros ext4. Administración del S.F. Linux 3
  • 277.
    Montaje, Montaje, desmontaje yel fichero /etc/fstab. Para poder usar un sistema de ficheros tiene que estar montado. El concepto de montaje tiene que ver con que en Unix/Linux todos los elementos son ficheros. Para ello, cada nuevo sistema de ficheros se enlaza mediante la operación de montaje con otra estructura de directorios de la que “cuelga”. El sistema de ficheros inicial se denomina el sistema de ficheros raíz y posee el símbolo /. Este sistema de ficheros se monta al arrancar el equipo y ocupa el lugar más alto. Por ejemplo, supongamos que en tres particiones de nuestro disco (o discos diferentes) hemos creado tres sistemas de ficheros. Cada uno de ellos visto de forma independiente posee una raíz. Supongamos que son /dev/sda1, /dev/sda2 y /dev/sda3. Cuando montamos un sistema de ficheros, indicamos un directorio del sistema de ficheros “padre”, del cual va a colgar la estructura de directorios del sistema de ficheros “hijo”. Mediante las órdenes de montaje siguientes: # mount /dev/sda2 /home # mount /dev/sda3 /usr Hemos montado el sistema de ficheros que hay en /dev/sda2 bajo el directorio /home del sistema de ficheros raíz. Y el sistema de ficheros de /dev/sda3 bajo el directorio /usr. Cuando se inicia linux se realiza un montaje automático, mediante la orden ‘mount –a’ que monta todos los sistemas de ficheros que así se indique dentro de /etc/fstab. Esta orden se encuentra dentro de los directorios de inicialización /etc/rc.d/. De igual forma, al apagar el sistema con la orden shutdown, se ejecuta la orden ‘umount –a’, que desmonta todos los sistemas de ficheros montados al iniciar. El fichero /etc/fstab El fichero /etc/fstab contiene información descriptiva sobre los distintos sistemas de ficheros del sistema. Este fichero es de sólo lectura y debe ser mantenido por el administrador del sistema. Cada sistema de ficheros se describe en una línea de este fichero, y los campos de cada línea están separados por tabuladores o espacios. El orden de los registros es importante ya que fsck, mount y umount actúan secuencialmente sobre este fichero. /etc/fstab y UUID Normalmente se especifica en el archivo fstab nombres de los dispositivos, como /dev/sdb1, tal como en el siguiente ejemplo: /dev/sdb1 /media/storage ntfs defaults 0 1 Administración del S.F. Linux 4
  • 278.
    Si queramos queun dispositivo se monte en una ubicación concreta siempre, tenemos el problema que el nombre del dispositivo /dev/sdb1, del ejemplo anterior, podría cambiar por ejemplo si se tratara de un dispositivo USB, o de si las Pleyades están alineadas o si es Luna llena. En este caso podemos utilizar el UUID (Universally Unique Identifier), el cual identifica a cada sistema de ficheros y hace que el nombre del dispositivo sea irrelevante al momento de montarse. Un par de formas de obtener el UUID: # ls -l /dev/disk/by-uuid/ total 0 lrwxrwxrwx 1 root root 10 May 5 02:38 07D4-0918 -> ../../sda1 lrwxrwxrwx 1 root root 10 May 5 02:38 1501c1df-798c-4359-a100-37c97f426269 -> ../../sdb2 lrwxrwxrwx 1 root root 10 May 5 02:38 1cd538b0-c4da-4280-a485-c0324066832f -> ../../sda5 lrwxrwxrwx 1 root root 10 May 5 02:38 25b9f76e-0d99-4c6d-b441-4a4a879ff049 -> ../../sda3 lrwxrwxrwx 1 root root 10 May 5 02:38 9E88682C886804DD -> ../../sdb1 lrwxrwxrwx 1 root root 10 May 5 02:38 D8701AD2701AB6EA -> ../../sda2 # blkid /dev/sda1: SEC_TYPE="msdos" LABEL="DellUtility" UUID="07D4-0918" TYPE="vfat" /dev/sda2: UUID="D8701AD2701AB6EA" LABEL="winxp" TYPE="ntfs" /dev/sda3: UUID="25b9f76e-0d99-4c6d-b441-4a4a879ff049" TYPE="ext3" /dev/sda5: UUID="1cd538b0-c4da-4280-a485-c0324066832f" TYPE="swap" /dev/sdb1: UUID="9E88682C886804DD" LABEL="storage" TYPE="ntfs" /dev/sdb2: UUID="1501c1df-798c-4359-a100-37c97f426269" TYPE="ext3 Procedemos a modificar nuestro fstab: UUID=9E88682C886804DD /media/storage ntfs defaults 0 1 Datos que van en una línea de /etc/fstab: o device Es la ruta hacia la partición a montar (/dev/sda2) o el UUID que la representa (UUID=01234567-89ab-cdef-0123-4567890abcde). o directorio Es el segundo campo y especifica el punto de montaje para el sistema de ficheros. Para particiones de swap este campo debería estar a "none". El directorio destino de montaje tiene que existir en nuestro sistema antes de montar el sistema de ficheros. o tipo Es el tercer campo y especifica el tipo de sistema de ficheros. o opciones Es el cuarto campo e incluye las opciones de montaje asociadas al sistema de ficheros. Las opciones van separadas por comas. Algunas de las opciones posibles son: − auto La partición se monta al arrancar. − noauto No se monta la partición en el arranque. − user Se permite a los usarios montar la partición. − nouser Sólo el root puede montar esta partición. − ro Read-Only, partición de sólo lectura, no se puede escribir. Administración del S.F. Linux 5
  • 279.
    rw Read-Write, monta la partición para que sea posible leer y escribir en ella. − sw Cuando una partición actúa de intercambio (Swap). − exec Se pueden ejecutar los programas de esa partición. − noexec Impide la ejecución de cualquier archivo contenido en ese sistema de ficheros. − async El sistema sigue trabajando tras una petición de escritura del dispositivo, aunque todavía no haya recibido la confirmación. − defaults Equivale a: rw, exec, auto, nouser, async. o frecuencia Con él determinamos la frecuencia con que deben de hacerse copias de seguridad del sistema por el comando dump. Si este campo no está presente se devuelve a dump el valor cero, lo que indica que el sistema de ficheros no necesita ser salvado (no suele usarse). o secuencia Es el sexto campo (fsckorder) y es usado por fsck para determinar el orden en que se realizan los chequeos de los sistemas de ficheros en tiempo de arranque. El sistema de ficheros raíz debería ser especificado con un 1, y los demás sistemas de ficheros deberían tener 2. Los sistemas de ficheros en un mismo disco deberían chequearse secuencialmente, pero los sistemas de ficheros en diferentes discos deberían de chequearse al mismo tiempo, para utilizar el paralelismo disponible en el hardware. Si el sexto campo no está presente o es cero, fsck asume que el sistema de ficheros no necesita ser chequeado. Ejemplo de fichero /etc/fstab: <device> <directorio> <Tipo> <Opciones> <dump> <fsckorder> /dev/hdc1 / ext2 defaults 1 1 /dev/hdc6 swap swap sw 0 0 /dev/fd0 /mnt/floppy ext2 noauto,user 0 0 /dev/cdrom /mnt/cdrom iso9660 noauto,ro,user 0 0 /dev/hda1 /mnt/windows vfat noauto none /proc proc defaults 0 0 El sistema de ficheros proc se usa para almacenar información sobre los procesos del sistema, memoria disponible y otros datos de la misma índole. No está relacionado con ninguna partición o disco, sino que permanece en memoria. 10. Añadir la partición lógica del HD que hemos creado al fichero fstab, de forma que se monte y desmonte automáticamente, para lectura y escritura, y que los usuarios puedan ejecutar los comandos que contenga. Administración del S.F. Linux 6
  • 280.
    El comando mount Elcomando mount nos permite montar los sistemas de ficheros y anclarlos a puntos de montaje (directorios). A partir de este momento podremos acceder a ellos. La sintaxis más usual es: mount [-r][-t tipo] [dispositivo] dir Si montamos una unidad que está incluida en el fichero /etc/fstab y se omiten los argumentos [-t tipo] y [dispositivo], la información necesaria la obtiene el comando mount del fichero /etc/fstab. -r Monta el dispositivo de sólo lectura. -t tipo Tipo de sistema de ficheros que se va a montar dispositivo Fichero dispositivo que contiene el sistema de ficheros. directorio Directorio sobre el que se monta el sistema de ficheros. Por ejemplo, con el /etc/fstab anterior, para montar la unidad de CD escribiríamos: mount /mnt/cdrom Sin embargo, si lo que queremos es montar un disquete formateado bajo Windows tendremos que escribir: mount -t vfat /dev/fd0 /mnt/floppy Si ese mismo disco es del tipo ext2, tan sólo tendremos que usar: mount /mnt/floppy El sistema mantiene una lista de los sistemas de ficheros montados actualmente, en el fichero /etc/mtab. Si se utiliza el comando mount sin argumentos: mount Nos muestra la lista de sistemas de ficheros montados. 11. Ver los sistemas de ficheros montados. 12. Montar el sistema de ficheros (ext3) creado en el pen. 13. Comprobar que se ha montado. 14. Crear en él directorios y ficheros. El comando umount La sintaxis más usual es: umount [opciones] dir El comando umount elimina el anclaje entre el dispositivo especial y el punto de montaje. Para desmontar la unidad de CD: umount /mnt/cdrom Si tenemos una unidad de CD montada no podremos extraer el CD hasta que no lo desmontemos. Si estamos trabajando con una unidad de disquete o pen es fundamental desmontarla antes de extraer el disco Administración del S.F. Linux 7
  • 281.
    Algunas opciones son: -a Desmonta todos los sistemas de ficheros contenidos en /etc/mtab, con montaje automático. -t Desmonta sólo los sistemas de ficheros de un tipo en concreto (o varios, separando los argumentos por comas). Para desmontar un sistema de ficheros debemos de estar situados fuera de él, y ningún proceso del sistema debe estar utilizando el sistema de ficheros que deseemos desmontar, en caso contrario nos diría que está ocupado. La solución será “matar” al proceso o procesos que están utilizando el sistema de ficheros que deseamos desmontar o esperar a que acaben “por las buenas”. Para saber qué procesos están utilizando un sistema de ficheros podemos utilizar la orden fuser. Por ejemplo, si en /mnt/win tenemos montada nuestra partición con el sistema de ficheros vfat y no nos deja desmontarla, podemos ver de qué procesos se trata con: /sbin/fuser -a /mnt/win 15. Intentar desmontar el SF del pen, mientras se está editando uno de sus ficheros. 16. Hacer lo necesario para desmontarlo. 17. Tratar de acceder a él una vez desmontado. 18. Ver los sistemas de ficheros montados. chroot chroot cambia el directorio raíz al que le indiquemos. Este directorio será usado como raíz para todas las trayectorias que comiencen por /. Solamente el superusuario puede cambiar el directorio raíz. Este comando no cambia de directorio activo, por lo que el directorio ’.’ puede estar fuera del árbol enraizado en ’/’. Este comando es útil cuando queremos trabajar (administrar) un linux instalado en un SF distinto al de arranque. Previamente a la utilización de este comando debemos montar el SF donde se encuentre el SO. Sintaxis: chroot directorio [comando [argumentos]] Cuando se indica el comando, lo ejecuta, sobre el SO linux cuya raiz esté en el directorio indicado. Si omitimos el comando entramos en un nuevo shell, que actuará sobre el SO montado en el Administración del S.F. Linux 8
  • 282.
    dirctorio. 19. Iniciar desde un pen o CD live y montar el SF linux del equipo. 20. Cambiar la raiz del sistema a la del equipo. 21. Hacer algún cambio (crear algún fichero o modificarlo), salir con ^d. 22. Desmontar y arrancar linux desde el disco duro, comprobar si se han hecho los cambios. Situaciones: Contraseña de root o usuario administrador olvidada. ¿Quién no ha olvidado la contraseña del super usuario? ¿Quién no ha tenido que acceder al ordenador de un compañero que se fue de la empresa sin dejar las claves y usuarios que utilizaba en su equipo? Pasos a seguir: a. Arrancar el equipo con un livecd o pen. b. Montar la partición en la que está instalado Linux en el equipo (comando mount y fdisk para tratar de localizar la partición que contiene el sistema operativo) c. Establecer el sistema del equipo como raiz: chroot /mnt/disco_linux Suponiendo que /mnt/disco_linux es el directorio utilizado en el paso 'b' para montar la partición que contiene Linux. d. Ejecutar passwd para cambiar la clave del administrador. e. Ya sólo queda salir y cerrar el equipo: exit # salir de chroot. umount /mnt/disco_linux # Desmontar la partición. Retirar el pen o CD-live. reboot # Reiniciar el equipo. Ya se puede acceder como administrador usando la nueva contraseña. Instalar programas en los equipos de la Escuela TIC 2.0 Una solución poco intrusiva es crear un nuevo usuario y añadirlo a sudoers Pasos a seguir: Procedemos de forma similar al caso anterior hasta el paso 'c'. Creación de un usuario 'clon' al que trae por defecto, pero con permisos administrativos: a. Tomamos nota de los grupos a los que pertenece 'usuario', para averiguarlos: Administración del S.F. Linux 9
  • 283.
    group usuario b. Creamos el usuario 'clon': useradd -d /home/clon -m -G grupos -k /home/usuario -s /bin/bash clon c. Démosle una clave con: passwd clon d. Sólo nos queda añadir al usuario clon a /etc/sudoers ejecutando: visudo Añadir la línea clon ALL=(ALL) NOPASSWD: ALL e. Salir como en el caso anterior. Y ya podemos acceder al sistema con el nuevo usuario, con la posibilidad de realizar tareas administrativas (instalar juegos,…) Chequeo y Recuperación de un Sistema de Ficheros: fsck. El comando fsck nos permite chequear y, opcionalmente, reparar un sistema de ficheros. fsck repara inconsistencias en los sistemas de ficheros después de un apagado incorrecto de la máquina. El funcionamiento es el siguiente. Cuando un sistema de ficheros se monta, se marca como “sucio”, porque el sistema en su trabajo normal, tendrá datos mantenidos en memoria en vez de grabarlos directamente al disco, con el fin de mejorar las prestaciones. Si el sistema lo apagamos correctamente, una de sus tareas es descargar todo lo que se encuentre en la memoria y que corresponda a los discos a su lugar correspondiente. Tras hacer esto, se marca el sistema de ficheros como “limpio”. Si por cualquier razón se apagase sin que se pueda realizar el proceso correcto, los discos se quedarán como “sucios” y deberán comprobarse en el siguiente arranque. Para chequear un sistema de ficheros éste debe estar desmontado. Su sintaxis básica es: fsck [-t fstype] [-fsopcion] dispositivo dispositivo es el fichero especial correspondiente a la partición que se va a chequear. Por ejemplo, /sbin/fsck /dev/hda2 # verifica el volumen /dev/hda2. Opciones: -a Repara los ficheros sin confirmación por nuestra parte. Los ficheros perdidos que recupere los podemos encontrar en el subdirectorio /lost+found del dispositivo. -A fsck recorre el fichero /etc/fstab y verifica todas las unidadades en función del parámetro fsckorder del fichero /etc/fstab. Administración del S.F. Linux 10
  • 284.
    Sistema de cuotas Elalmacenamiento en disco se puede restringir mediante la implementación de cuotas de disco. Las cuotas se pueden configurar para usuarios individuales o para grupos. Este tipo de flexibilidad hace posible darle a cada usuario una pequeña porción del disco para que maneje sus archivos personales (tales como correo o informes), mientras que se le permite tener más espacio para manejar los proyectos en los que estén trabajando sus grupos. Además, se puede configurar las cuotas no sólo para que controlen el número de bloques de disco, sino también el número de inodos, esto permite controlar el número de archivos que pueden ser creados. El soporte de cuotas de disco ha sido integrado en el kernel Linux desde la versión 1.3.46. Se necesita utilizar un kernel posterior para poder beneficiarse de las cuotas. El paquete software necesario que permite gestionar las cuotas es 'quota'. Además necesitamos tener esa opción compilada en el kernel respondiendo afirmativamente a la opción Quota support. Con esto conseguiremos limitar el espacio de disco consumido por usuario o por un grupo de usuarios. Activación de las cuotas Activación Existen dos tipos de cuotas: las cuotas asociadas a los usuarios y las cuotas asociadas a los grupos de usuarios. Las primeras definen el número máximo de archivos y de bloques de disco asociados a cada usuario, las segundas definen el número máximo de archivos asociados a cada grupo de usuarios. Los dos tipos de cuotas pueden ser activados separadamente. Para activar las cuotas para los usuarios es necesario indicar la opción 'usrquota' para los sistemas de archivos referidos en /etc/fstab. Las cuotas que conciernen a los grupos son reguladas por la opción 'grpquota'. Los archivos de definición de cuotas se llaman respectivamente 'quota.user' y 'quota.group' estos se encuentran situados en la raíz de cada sistema de archivos involucrado. Es posible modificar los nombres de los archivos de gestión de cuotas utilizando la sintáxis siguiente: usrquota=nombredearchivo grpquota=nombredearchivo He aquí un ejemplo del archivo /etc/fstab: /dev/hda2 / ext3 defaults,rw 0 1 /dev/hdb2 /home ext3 defaults,rw,usrquota,grpquota 0 1 /dev/sda1 /usr ext3 defaults,rw,usrquota 0 1 La activación de las cuotas es lanzada por la orden 'quotaon'. Para activarlas automáticamente a la inicialización del sistema, se debe agregar al archivo de inicialización (/etc/rc.d) las líneas: quotaon -avug Para crear los archivos de cuotas (aquota.user y aquota.group) en el sistema de archivos, se usa la Administración del S.F. Linux 11
  • 285.
    opción -c delcomando quotacheck. quotacheck -acug /home Puede ser igualmente necesario verificar la coherencia de la información sobre gestión de cuotas después de bloqueos repentinos. Para esto se utiliza la orden quotacheck: quotacheck -avug Si las utilidades han sido compiladas con-DEXTc2DIRECT, la orden quotacheck debe ejecutarse relativamente rápido, en caso contrario puede ser muy lento, pues debe explorar todos los directorios del disco. Es aconsejable de todas maneras ejecutar quotacheck durante la inicialización del sistema antes de la activación de las cuotas con quotaon. Cuotas de usuario La orden 'edquota' es utilizada para asignar una cuota a un usuario o a un grupo de usuarios. Su sintáxis es: edquota -u usuario edquota -g grupo. Esta orden lanza un editor de texto que contiene la definición de cuotas asignadas al usuario o al grupo y toma en cuenta el nuevo valor cuando el archivo es reescrito. Para cada usuario o grupo existen dos limitaciones: el número de archivos y el número de bloques disco (expresados en bloques de 1024 octetos). Para cada uno existen dos límites: a. El límite "suave": cuando este límite es alcanzado o superado un mensaje advierte al usuario cada vez que un nuevo bloque o archivo es escrito. b. El límite "duro": cuando este límite es alcanzado el usuario no puede escribir nuevos archivos o nuevos bloques. El límite "suave" se transforma en límite "duro" cuando ha sido alcanzado o superado transcurrido cierto tiempo (7 días por defecto). Se puede definir una plantilla de usuario al cual se le asignan las cuotas y utilizarla para adjudicar cuotas a los demás usuarios del sistema. edquota -p usuarioplantilla -u usuario Todo usuario puede obtener el estado de la cuota que le ha sido asignada (limites como el número de archivos y de bloques que le han sido atribuidos) gracias a la orden: quota El superusuario puede obtener las mismas informaciones sobre cualquier usuario o grupo con la misma orden: quota -u usuario quota -g grupo Además es posible utilizar la orden repquota para obtener una lista de cuotas asociadas a uno o varios sistemas de archivos. Administración del S.F. Linux 12
  • 286.
    Estadísticas del sistema Estadísticas Loscomandos básicos para averiguar la ocupación del disco y la carga del sistema. du (disk usage) du [-abs] [trayectoria1 trayectoria2 . . . trayectoriaN] El comando du contabilizará el espacio de disco ocupado por un subdirectorio y todos sus subdirectorios. El uso de este comando sin utilizar parámetros devolverá una lista de cuanto disco consume cada subdirectorio del directorio actual, y al final del informe, cuanto disco utiliza el directorio (y todos sus subdirectorios). Si se le pasa uno o más parámetros, devolverá la cantidad de espacio utilizado por esos ficheros o directorios en lugar de la del directorio actual. Algunas opciones son: -a Mostrará además del espacio de los directorios, el de los ficheros. -b Presentará el total en bytes, en lugar de kilobytes. -s Informará sólo acerca de los directorios explicítos en la linea de comando y no de sus subdirectorios. df (disk filling, espacio disponible en el disco) df Para cada sistema de ficheros (recuerde que sistemas de ficheros diferentes son o bien unidades físicas o particiones diferentes) muestra: o El espacio total de disco. o La cantidad utilizada. o La cantidad disponible. o La capacidad total del sistema de ficheros que se utiliza. Un caso extraño que puede darse, es la posibilidad de tener una capacidad superior al 100%, o que la cantidad utilizada más la disponible no sea igual a la total. Esto es debido a que Unix reserva parte del espacio de cada sistema de ficheros para el directorio raíz. De esta forma aunque algún usuario accidentalmente sature el disco, el sistema todavía tendrá un poco de espacio para seguir operativo. uptime uptime Administración del S.F. Linux 13
  • 287.
    El comando uptimeinforma sobre el tiempo que el sistema ha estado activo, es decir el tiempo transcurrido desde que arrancó por última vez. Este comando también devuelve la hora actual y el promedio de carga que soporta el sistema. El promedio de carga es el número medio de procesos esperando a ser ejecutados en un determinado periodo de tiempo. uptime muestra el promedio de carga del último minuto y de los cinco y diez últimos minutos. Si el promedio de carga se aproxima a cero indica que el sistema ha estado relativamente desocupado; por el contrario si el promedio es cercano al uno indica que el sistema ha estado casi completamente utilizado pero en ningún momento sobrecargado. Los promedios de carga altos son el resultado de la ejecución simultánea de varios programas. Administración del S.F. Linux 14
  • 288.
    Copias de seguridad Realizarcopias de seguridad es una de las tareas más importantes del administrador del sistema, este debe: − Planear e implementar un sistema de copias de seguridad. − Periódicamente, hacer copias de seguridad de todos los ficheros. − Guardar las copias de seguridad en un lugar seguro. Es casi inevitable que se produzcan pérdidas de información, debido a, entre otras causas: − Deterioro o borrado accidental por parte de un usuario autorizado. − Ataque intencionado por parte de personas no autorizadas. − Fallo del software o el hardware. − Incendio, robos, y desastres naturales, etc. Estrategias para las copias de seguridad Factores a considerar en una estrategia de copias de seguridad: − ¿Qué ficheros se deben copiar y dónde están esos ficheros? − Conocer qué es lo más importante del sistema. − ¿Quién hará la copia? ¿Administrador o propietario de los ficheros? − ¿Dónde, cuándo y bajo qué condiciones se deben hacer? Mejor hacer las copias cuando no haya usuarios trabajando (por la noche, al mediodía). − ¿Con qué frecuencia cambian los ficheros? Frecuencia de las copias. − ¿Cada cuánto tiempo necesitan recuperarse importantes ficheros dañados o perdidos? (Esto es muy difícil de saber). − ¿Dónde se restaurarán los datos? − Hacer las rutinas de restauración sencillas. − Proteger las copias de seguridad contra escritura. − Seguridad de las copias: lugar donde se almacenan, condiciones ambientales, propiedades de los medios empleados, . . . Carácterísticas deseables en una buena estrategia para copias de seguridad: − Ser fácil de usar, preferiblemente que sea totalmente automática. − Eficiencia y rapidez: compromiso entre el tiempo de backup y el tiempo de recuperación. Copias de Seguridad Linux 1
  • 289.
    Facilidad de restauración. − Capacidad de verificar las copias (difícil si el sistema está siendo usado continuamente). − Tolerancia a fallos en los medios de almacenamiento (cintas, etc.): necesidad de mantener al menos dos copias de los backups completos del sistema, almacenadas en distinto sitio. − Portabilidad: posibilidad de recuperar la información en diferentes sistemas. Componentes de las copias de seguridad Hay básicamente tres componentes que intervienen en una copia de seguridad: − El planificador: decide qué información se copia y cuándo. − Los medios de almacenamiento: cintas, CDs, memorias USB, HD, etc. − El programa de copia: los comandos que mueven los datos de los discos a los medios. El planificador Decide qué información se debe salvar en cada copia, y cuándo se hacen estas. Normalmente es gestionado mediante cron. Según la información que salvemos podemos hablar de los siguientes tipos de backup: Completo Copia de seguridad completa de un sistema de ficheros (TODO). Llamada de NIVEL 0. Este tipo de copia tarda mucho tiempo en hacerse y presenta inconvenientes para recuperar un único fichero. Si los ficheros no cambian muy a menudo: no hay justificación para realizarlas de forma asidua. Si cambian mucho y son vitales para el trabajo de mucha gente, están justificadas incluso a diario. Es recomendable hacerla ante grandes cambios: nuevo software, nuevo SO, . . . Parcial Sólo se salva la información más importante y difícil de recuperar: − Los ficheros de usuario. − Los ficheros de configuración, p.e. /etc/passwd. − Directorios de correo, web, etc. Incremental Sólo se salvan los ficheros modificados desde el último backup completo o incremental. Llamada de NIVEL 2. Copias de Seguridad Linux 2
  • 290.
    La copia deseguridad necesita menos tiempo y espacio, pero para restaurar los datos necesitaremos el último backup completo y todos los incrementales. Se deben realizar con mucha más frecuencia, incluso a diario. Diferencial Se salvan los ficheros modificados desde el último backup completo. Llamada de NIVEL 1. − Los backups son más grandes que en el caso incremental. − Para restaurar sólo necesitamos el backup completo y el último diferencial. Ejemplos de estrategias: − Lunes de nivel 0 y el resto de días de nivel 1 − Lunes de nivel 0, martes de nivel 1, miércoles de nivel 2, jueves de nivel 1 y viernes de nivel 2 ¿Cómo se restaurarán? Soportes de seguridad Son los medios de almacenamiento o soportes donde se guarda la información: − Cintas magnéticas, principalmente cintas de 8 mm o de 4mm, con capacidades de hasta 72 GB. Las hay con no-rebobinado (/dev/nstX ) y con rebobinado (/dev/stX). − Discos duros internos o externos. − CD-Rom's o DVD’s regrablables. buenos cuando la cantidad de datos no es excesivamente elevada. Necesitan software adicional para crear las imágenes ISO (como mkisofs) y para realizar la grabación (cdrecord). − Memorias USB. − Disquetes, en desuso, poca capacidad. − Papel, aunque parezca mentira puede ser útil, por ejemplo, imprimir un fichero de configuración que vamos a modificar. − etc. Copias de Seguridad Linux 3
  • 291.
    Programas de copia tar Tar(Tape Archive, archivar en cinta) permite empaquetar o desempaquetar ficheros. El concepto de empaquetar, es el de meter varios ficheros y/o directorios en un solo fichero (paquete). Posteriormente podremos recuperar esa estructura de ficheros y directorios en el lugar donde queramos. Su sintaxis básica es: tar [-]opción[modificador] [fichero.tar] [origen] Ejemplo: crea un fichero tar conteniendo los ficheros del directorio /etc. tar -cvf copia.tar /etc Puede indicarse un fichero o un dispositivo (p.e. /dev/sdb2). tar conserva las propiedades de los ficheros: permisos, usuario, grupo, fechas, etc. Opciones: Se pueden combinar, siempre y cuando no indiquen acciones contrarias. Si especificamos varias se escriben juntas sin mediar espacios entre ellas. Tradicionalmente no se emplea el guión (-), que normalmente precede a las opciones en las órdenes Linux. c Crear un nuevo archivo tar (empaquetado). t Para mostrar el contenido de un paquete. x Para extraer archivos empaquetados, se pueden indicar ficheros individuales. r Añade el (los) fichero(s) especificado(s) al final del paquete. u Añade el (los) fichero(s), sólo si no están o son de fecha más reciente. d Obtiene las diferencias entre los ficheros de la copia (paquete) y los del disco. Siempre se debe usar una de las opciones anteriores inmediatamente después de la orden tar. Algunos modificadores: v Visualiza la información de lo que hace de forma detallada por pantalla. f Indica que el primer argumento, después de las opciones, es el nombre de un fichero tar o un dispositivo. Si no se indica este modificador o como fichero se pone - , utiliza la entrada o salida estándar, de esta manera se puede usar con tuberías. M Para crear / extraer de paquetes que ocupan varios discos. z Filtrar el archivo a través de gzip (para comprimir como descomprimir). Tendrán la extensión Copias de Seguridad Linux 4
  • 292.
    .tgz equivalente a.tar.gz. j Comprime o descomprime con bzip2. Extensión .bz2. k No sobreescribe los ficheros existentes al extraer. TF Obtiene la lista de ficheros a guardar del fichero F. XF Excluye los ficheros que concuerdan con los patrones listados en el fichero F N Fecha Sólo guarda los ficheros más nuevos que Fecha (copias diferenciales e incrementales). fichero.tar Nombre del archivo o dispositivo almacén. origen Nombre del directorio(s) / fichero(s) a empaquetar separados por espacios. Supongamos que deseamos empaquetar dos ficheros llamados linux1.txt y linux2.txt, en un fichero tar de nombre linux.tar, escribiremos: tar -cvf linux.tar linux1.txt linux2.txt También podemos escribir: tar -cvf linux.tar linux?.txt Para empaquetar todo el contenido del directorio “home”: tar -cvf home.tar /home Si lo que deseamos es desempaquetar un fichero tar, en vez de escribir la opción -c escribiremos -x, así para desempaquetar el contenido de home.tar escribimos: tar -xvf home.tar De esta manera se crea la estructura de subdirectorios que hubiese dentro de /home. Si solamente queremos ver el contenido del fichero empaquetado (tar), ejecutamos. tar -tvf entrega.tar Antes de extraer ficheros tar es importante conocer, donde deben desempaquetarse los ficheros, y con qué tipo de trayectoria fueron empaquetados (absoluta o relativa), la opción -t nos informa de esto. Y así crear los directorios apropiados y poner activo el directorio correspondiente. tar permite hacer copias de seguridad en varios discos (multivolumen), en ese caso la sintaxis sería: tar cvfM /dev/fd0 origen Hay que hacer notar que en este caso no se puede empaquetar y comprimir a la vez y que no podemos poner el guión delante de las opciones, no funciona. Para desempaquetar los discos así obtenidos tan sólo tendremos que introducir el primer disco, y sin montarlo, ejecutar: tar xvfM /dev/fd0 Copias de Seguridad Linux 5
  • 293.
    Se nos pediránlos disco uno a uno hasta que termine el proceso. tar czvf /dev/sda1 /home ¿Qué sucede con la partición /dev/sda1? Crear una copia de seguridad comprimida de la primera partición. tar czvf /dev/nst0 /dev/sda1 Hacer la copia de seguridad comprimida en un fichero, del directorio prac_iso. tar czvf practicas.tgz prac_iso Mostrar los ficheros que componen la copia. tar tzvf practicas.tgz Descomprimir. tar xzvf practicas.tgz Recuperar el fichero boletin1.pdf (observa que hay que indicar la ruta con la que tar lo almacenó). tar xzvf practicas.tgz prac_aso/boletin1.pdf Prácticas: 1. Crear un paquete .tar en vuestro directorio de trabajo, de alguno de vuestros subdirectorios. 2. Añadirle al paquete ficheros nuevos o modificados, usando distintos tipos de trayectorias. 3. Comprobar los ficheros que lo componen. 4. Borrar los originales y recuperarlos del paquete. 5. Realizar las operaciones anteriores con una memoria usb. Copias de Seguridad Linux 6
  • 294.
    cpio Permite realizar copiasde seguridad de conjuntos de ficheros arbitrariamente, es similar en funcionalidad a tar y maneja tanto ficheros en formato cpio como tar. Lee de la entrada estándar el nombre de los ficheros a guardar, lo común es usarlo enlazado con otras órdenes mediante tuberías. cpio tiene tres modos de operación. − En el modo de copia-afuera, cpio copia ficheros hacia un paquete. Lee una lista de nombres de ficheros, uno por línea, de la entrada estándar, y escribe el paquete en la salida estándar. Una forma típica de generar la lista de nombres de ficheros es con la orden find; se debería dar a find la opción -depth para minimizar problemas con permisos en directorios para los que no se tiene permiso de paso. cpio -o < lista-nombres > paquete − En el modo de copia-adentro, cpio copia ficheros desde un paquete (archivo) o lista los contenidos del paquete. Lee el paquete desde la entrada estándar. Los argumentos de la línea de órdenes son patrones del shell de concordancia de nombres de ficheros; sólo se copian desde el paquete aquéllos ficheros cuyos nombres concuerden con los patrones. Si no se dan patrones, se extraen todos los ficheros. cpio -i patrón < paquete − En el modo de copia-de-paso, cpio copia ficheros de un árbol de directorio a otro. Lee desde la entrada estándar la lista de ficheros a copiar; el directorio dentro del cual copiará esos ficheros se da como un argumento que no es una opción. cpio -p directorio-destino < lista-ficheros Algunas opciones: o Copiar “fuera” (out), crear la copia de seguridad. i Copiar “dentro” (in), extraer de la copia. P Copia de paso. m Conserva fecha y hora de los ficheros. t Crea tabla de contenidos, muestra el contenido de la copia A Añade ficheros a un contenedor existente. d Crear directorios al descomprimir. v Modo verbose. Consultar otras muchas opciones con: cpio --help | less Ejemplos: Copia en la unidad de cinta. Copias de Seguridad Linux 7
  • 295.
    find /home |cpio -o > /dev/nst0 La copia la realiza en un fichero find /home | cpio -o -F h.cpio Restaura la copia de seguridad de ese paquete. cpio -i < h.cpio Restaura sólo el fichero indicado cpio -i fichero < h.cpio 6. Usa find para obtener una lista de los ficheros a respaldar, almacena sus nombres mediante una tubería en el fichero ‘acopiar’. 7. Realiza la copia de los ficheros en un paquete llamado ‘copia.cpio’. 8. Visualiza los nombres de los ficheros contenidos en ‘copia.cpio’. 9. Borra algún fichero de los originales. 10. Restaura la copia. dump Los comandos dump y restore, son los más comunes para copias de seguridad. dump: Hace copias de un sistema de archivos entero, con las siguientes características: − Pueden ser copias multivolumen. − Puede salvar ficheros de cualquier tipo (incluido ficheros de dispositivos). − Los permisos, propietarios y fechas de modificación son preservados. − Puede realizar copias incrementales. − También puede usarse para salvar ficheros individuales (no es lo usual). Si no lo tenemos instalado, ejecutamos: apt-get install dump El formato y los argumentos de dump dependen de la versión utilizada, pero en general es: dump [-nivel] [opciones] [ficheros_a_copiar] Copias de Seguridad Linux 8
  • 296.
    Nivel de dump:entero entre 0-9: − 0 implica backup completo. − Mayor que 0 implica copiar sólo los ficheros nuevos o modificados desde el último backup de nivel inferior dump guarda información sobre los backups realizados, en el fichero /etc/dumpdates o /var/lib/dumpdates (este último es el caso de Ubuntu). Algunas opciones: -f Especifica el dispositivo o fichero donde almacenar la copia. -u Actualiza el fichero dumpdates después de una copia correcta, cuando se respaldan SF completos. -a Determina automáticamente el fin de la cinta (opción por defecto). -j, -z Usa compresión con bzlib o zlib (sólo en algunas versiones). Backup de nivel 0 de la partición /home # dump -0u -f /dev/sdb2 /home Backup en una máquina remota usando ssh como transporte # export RSH=/usr/bin/ssh # dump -0u -f usuario@sistema_remoto:/dev/sda6 /home restore: Restaura ficheros salvados por dump Formato: restore acción [opciones ] [ficheros_a_recuperar] Acciones principales: r Restaura la copia completa. t Muestra los contenidos de la copia. x Extrae sólo los ficheros indicados. Algunas opciones: -f Especifica el dispositivo o fichero de la copia -a No pregunta de que volumen extraer los ficheros (lee todos los volúmenes empezando en 1) Restaurar el backup almacenado en /dev/sdb2 # restore -rf /dev/sdb2 Restaurar el backup desde un sistema remoto Copias de Seguridad Linux 9
  • 297.
    # export RSH=/usr/bin/ssh #restore -rf usuario@sistema_remoto:/dev/sda6 Restaurar sólo un fichero # restore -xaf /dev/sdb2 fichero Archivo restoresymtable: Se crea cuando se restaura un filesystem completo, en el directorio donde se restaura, contiene información sobre el sistema restaurado y puede eliminarse una vez finalizada la restauración. Más ejemplos de estrategias de planificación de los backups. Ejemplo 1: copia de nivel 0 mensual, de nivel 9 diaria (L, M, X y J) y de nivel 5 semanal (V). Necesita 6 o 9 cintas: una para el 0, 4 para los niveles 5 y 1 o 4 para los niveles 9. Para restaurar necesitamos restaurar en orden: − La copia de nivel 0. − La última copia de nivel 5. − La última de nivel 9, después de la de nivel 5. Ejemplo 2: copia de nivel 0 mensual (completa), de nivel 2 el viernes (diferencial) y de niveles 3 el lunes, 4 el martes, 5 el miércoles y 6 el jueves (incrementales). Necesita al menos 9 cintas. Para restaurar necesitamos restaurar en orden: − La del nivel 0. − La del último viernes (nivel 2). − Las diarias desde el último viernes de forma consecutiva. Prácticas: 11. Utilizando dump, haz un backup de nivel 0 de la partición ‘logica’ en /dump/logica.0. 12. Crea o modifica algún fichero en ‘logica’. 13. Haz una copia de nivel 2 de la partición ‘logica’ en /dump/logica.2. Copias de Seguridad Linux 10
  • 298.
    14. Observa elcontenido del fichero dumpdates. 15. Comprueba los nombres de los ficheros que contiene cada copia. 16. Borra algunos o todos los ficheros de la partición y restáuralos a partir de las dos copias de seguridad. 17. Crea un fichero 'temp.dat' en un directorio 'tmp' dentro de tu HOME. Usa tar para crear un paquete conteniendo todo tu directorio HOME. 18. Borra el fichero 'temp.dat' y recupéralo del paquete tar. 19. Mediante un comando busca todos los ficheros terminados en '.txt', que se encuentren a partir de un directorio y almacénalos comprimidos con cpio. Copias de Seguridad Linux 11
  • 299.
    Otras aplicaciones Existen otroscomandos que permiten hacer backups y sincronizar ficheros: bacula, rdist, rsync, etc. Bacula Sofisticado sistema de backup en red con diseño modular, que permite hacer copias de seguridad de todas las máquinas de una LAN a diferentes medios de backups (cinta, disco, . . . ) Soporta MySQL, PostgreSQL o SQLlite para el catálogo. Hace backups de sistemas UNIX, Linux y Windows. Para más información, ver www.bacula.org/dev-manual/What_is_Bacula.html Amanda Amanda: Advanced Maryland Automatic Network Disk Archiver. Sofisticado sistema de backup en red, que permite hacer copias de seguridad de todas las máquinas de una LAN a una unidad de cinta del servidor. Está disponible en la mayoría de los UNIX y soporta muchos tipos de medios de backup. Puede hacer uso de SAMBA para copias de sistemas Windows NT. Se basa en dump y tar. Para más información, ver www.amanda.org/docs Flexbackup Herramienta de backup flexible para instalaciones de pequeño y medio tamaño. Más simple de configurar y utilizar que Amanda para sitios con un número no muy alto de sistemas. Usa distintos formatos de archivo: dump, afio, GNU tar, cpio, zip, etc. Permite backups completos e incrementales, como dump, y remotos a través de rsh o ssh. Para más información, ver flexbackup.sourceforge.net rdiff-backup rdiff-backup copia un directorio en otro, permitiendo copias remotas. Hace una copia exacta de los directorios (mirror), guardando las propiedades de los ficheros (propietario, permisos, etc.). Guarda las diferencias entre copias de los ficheros para poder recuperar un fichero antiguo (incremental). Copias de Seguridad Linux 12
  • 300.
    Sólo transmite lasdiferencias de los ficheros (similar a rsync). Para más información ver www.nongnu.org/rdiff-backup DAR DAR Disk ARchiver comando para hacer backups de árboles de directorios y ficheros. Permite copiar un sistema de ficheros entero a un archivo. Permite hacer backups completos y diferenciales y copias multivolumen: divide en archivo en varios ficheros (slices) parando antes de crear cada nuevo slice, interesante para hacer copias en floppy, CD o DVD Más información en: dar.linux.free.fr Comando rdist Permite distribuir ficheros desde un servidor central a varias máquinas. Sólo copia los ficheros modificados, preservando el propietario, grupo, modo y fechas de modificación las versiones actuales. Puede funcionar sobre ssh. Comando rsync Similar a rdist aunque funciona de forma diferente, más eficiente que rdist, sólo transmite las diferencias entre ficheros no usa fichero de configuración: funciona de forma similar a rcp. Ver la página de manual de rsync para más detalles. Unison Aplicación para sincronizar ficheros y directorios entre sistemas, puede sincronizar entre sistemas Windows y UNIX, no requiere permisos de root, permite sincronización en los dos sentidos, las transferencias se optimizan usando una versión de rsync. Tiene un interfaz gráfico sencillo, para ver un tutorial de uso, hacer: $ unison -doc tutorial Copias de Seguridad Linux 13
  • 301.
    Pr Gestión de Procesos Una definición simple de proceso podría ser que es una instancia de un programa en ejecución (corriendo). A los procesos frecuentemente se les llama tareas. El contexto de un programa que está en ejecución es lo que se llama un proceso. Este contexto incluye procesos hijos que se hayan generado del principal (proceso padre), los recursos del sistema que este consumiendo, sus atributos de seguridad (tales como su propietario y permisos de archivos), etc. Linux, como se sabe, es un sistema operativo multitarea y multiusuario. Esto quiere decir que múltiples procesos pueden operar simultáneamente sin interferirse unos con los otros. Cada proceso tiene la "ilusión" de ser el único proceso en el sistema y que tiene acceso exclusivo a todos los servicios del sistema operativo. Programas y procesos son entidades distintas. En un sistema operativo multitarea, múltiples instancias de un programa pueden ejecutarse simultáneamente. Cada instancia es un proceso separado. Por ejemplo, si cinco usuarios desde equipos diferentes, ejecutan el mismo programa al mismo tiempo, habría cinco instancias del mismo programa, es decir, cinco procesos distintos. Cada proceso que se inicia es referenciado con un número de identificación único, conocido como Process ID PID, que es siempre un entero positivo. Prácticamente todo lo que se está ejecutando en el sistema en cualquier momento es un proceso, incluyendo el shell, el ambiente gráfico que puede tener múltiples procesos, etc. La excepción a lo anterior es el kernel en sí, el cual es un conjunto de rutinas que residen en memoria y a los cuales los procesos a través de llamadas al sistema pueden tener acceso. Algunos procesos están ejecutándose continuamente por el sistema a la espera de atender alguna petición. Son los llamados demonios (o daemons). Por ejemplo, los demonios que atienden peticiones de FTP o de HTTP, los que montan automáticamente los CD’s, los que realizan tareas programadas, etc. No hay que confundirlos con programas que se ejecutan en background (en segundo plano) y que son programas que realizan una tarea y acaban, pero no esperan entradas interactivas. Si queremos hacer un cálculo muy complejo o una tarea que va a tardar cierto tiempo, lanzamos el programa que lo realiza, lo mandamos al segundo plano y mientras podemos realizar otras tareas. Para ello usamos el operador & al final de la línea. A todo proceso, cuando se lanza, se le asocia una entrada estándar, una salida estándar y una salida de errores. De esta forma, cuando solicita un dato, muestra un mensaje en pantalla (salida estándar, la consola) y espera una respuesta por el teclado (entrada estándar) y, si se produce un error, lo muestra por la salida de errores (que habitualmente es también la consola). El S.O. nos da posibilidades para redirigir la entrada y la salida de proceso, de forma que en vez de leer del teclado, lea los datos de un fichero o dirigir la salida del proceso a un fichero o a otro proceso. Gestión de Procesos Linux 1
  • 302.
    Ver los procesos:ps El comando ps (process status) visualiza la lista de procesos del sistema, por ejemplo: $ ps PID TTY TIME CMD 4150 tty1 00:00:00 bash 4178 tty1 00:00:02 vi 4238 tty1 00:00:00 sh 4295 tty1 00:00:00 ps Cada columna tiene el siguiente significado: PID Representa el identificador de proceso. TTY Terminal asociado, para los procesos en background una ?. TIME Tiempo de ejecución acumulado (uso de la CPU), expresado en horas:minutos:segundos. CMD Nombre del proceso. Ahora sólo estamos viendo los procesos que está ejecutando el usuario que ejecuta la orden. En el ejemplo anterior, desde el bash se ejecutó el vi, en este momento bash se echa a dormir, desde el vi iniciamos otro shell (sh) y desde este se ejecuta el comando ps. Como puede observar, sh se ejecuta concurrentemente con el comando ps. Cuando ps termina de ejecutarse (después de mostrar la tabla de procesos), el proceso sh retoma el control, y muestra el prompt, indicando que está listo para recibir otro comando. Y cuando finalice el vi, será el bash quien tome el control. Un proceso que está corriendo se denomina tarea para el shell. Los términos proceso y tarea, son intercambiables. Sin embargo, se suele denominar “tarea" a un proceso, cuando es usado en conjunción con control de tareas, que es una característica del shell, que permite gestionar tareas. Opciones de ps (ps –help): Gestión de Procesos Linux 2
  • 303.
    ********* simple selection********* ********* selection by list ********* -A all processes -C by command name -N negate selection -G by real group ID (supports names) -a all w/ tty except session leaders -U by real user ID (supports names) -d all except session leaders -g by session OR by effective group name -e all processes -p by process ID T all processes on this terminal -s processes in the sessions given a all w/ tty, including other users -t by tty g OBSOLETE -- DO NOT USE -u by effective user ID (supports names) r only running processes U processes for specified users x processes w/o controlling ttys t by tty *********** output format ********** *********** long options *********** -o,o user-defined -f full --Group --User --pid --cols --ppid -j,j job control s signal --group --user --sid --rows --info -O,O preloaded -o v virtual memory --cumulative --format --deselect -l,l long u user-oriented --sort --tty --forest --version -F extra full X registers --heading --no-heading --context ********* misc options ********* -V,V show version L list format codes f ASCII art forest -m,m,-L,-T,H threads S children in sum -y change -l format -M,Z security data c true command name -c scheduling class -w,w wide output n numeric WCHAN,UID -H process hierarchy El comando ps es el que permite informar sobre el estado de los procesos. ps esta basado en el sistema de archivos /proc, es decir, lee directamente la información de los archivos que se encuentran en este directorio. Tiene una gran cantidad de opciones, incluso estas opciones varían dependiendo del estilo en que se use el comando. Estas variaciones sobre el uso de ps son las siguientes: • Estilo UNIX, donde las opciones van precedidas por un guión -. • Estilo BSD, donde las opciones no llevan guión - • Estilo GNU, donde se utilizan nombres de opciones largas y van precedidas por doble guión --. Sea cual sea el estilo utilizado, dependiendo de las opciones indicadas, se muestran varias columnas, estas pueden ser entre otras muchas, las siguientes: p o PID Process ID, número único o de identificación del proceso. P o PPID Parent Process ID, padre del proceso. U o UID User ID, usuario propietario del proceso. t o TT o Terminal asociada al proceso, si no hay terminal aparece entonces un '?'. TTY T o TIME Tiempo de uso de cpu acumulado por el proceso. c o CMD El nombre del programa o comando que inició el proceso. SZ o SIZE Tamaño que ocupa en menoria en KB. RSS Resident Sise, tamaño de la parte residente en memoria en KB. v o VSIZE Tamaño en memoria virtual en KB. Nice, valor nice (prioridad) del proceso, un número positivo significa menos tiempo NI de procesador y negativo más tiempo (-19 a 19). C o PCPU Porcentaje de cpu utilizado por el proceso. STIME Starting Time, hora de inicio del proceso. S o STAT Status del proceso, estos pueden ser los siguientes: Gestión de Procesos Linux 3
  • 304.
    R runnable, en ejecución, corriendo o ejecutándose. • S sleeping, proceso en ejecución pero sin actividad por el momento, o esperando por algún evento para continuar. • T sTopped, proceso detenido totalmente, pero puede ser reiniciado. • Z zombie, difunto, proceso que por alguna razón no terminó de manera correcta, no debe haber procesos zombies. • D uninterruptible sleep, son procesos generalmente asociados a acciones de IO del sistema. • X dead, muerto, proceso terminado pero que sigue apareciendo, igual que los Z no deberían verse nunca. Con ‘man ps’ se pueden ver más detalles. A continuación algunos cuantos ejemplos de ps con la salida recortada. # ps -e (-e muestra todos los procesos) PID TTY TIME CMD 1 ? 00:00:01 init 2 ? 00:00:00 kthreadd 3 ? 00:00:00 migration/0 4 ? 00:00:00 ksoftirqd/0 # ps -ef (-f muestra opciones completas) UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:12 ? 00:00:01 init [5] root 2 0 0 10:12 ? 00:00:00 [kthreadd] ... root 6130 5662 0 10:24 pts/0 00:00:00 su - root 6134 6130 0 10:24 pts/0 00:00:00 -bash sergon 6343 5604 0 10:28 ? 00:00:00 kio_file [kdeinit] file /home/sergon/tmp/ksocket-sergon/kl root 6475 6134 0 10:38 pts/0 00:00:00 ps -ef # ps -eF (-F muestra opciones completas extra) UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 1 0 0 412 556 1 16:59 ? 00:00:01 init [5] root 2 0 0 0 0 1 16:59 ? 00:00:00 [kthreadd] sergon 8326 8321 0 902 1272 0 17:07 ? 00:00:00 /bin/sh /usr/lib/firefox-2.0.0.8/run-mozilla.sh /usr/lib/f sergon 8331 8326 4 53856 62604 0 17:07 ? 00:00:50 /usr/lib/firefox-2.0.0.8/mozilla-firefox-bin sergon 8570 7726 2 15211 37948 0 17:17 ? 00:00:10 quanta # ps ax (formato BSD sin guión, a muestra todos, x sin mostrar tty) PID TTY STAT TIME COMMAND 1 ? Ss 0:01 init [5] 2 ? S< 0:00 [kthreadd] 3 ? S< 0:00 [migration/0] 4 ? S< 0:00 [ksoftirqd/0] # ps aux (formato BSD sin guión, u muestra usuarios y demás columnas) USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1648 556 ? Ss 16:59 0:01 init [5] Gestión de Procesos Linux 4
  • 305.
    root 2 0.0 0.0 0 0 ? S< 16:59 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S< 16:59 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S< 16:59 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 16:59 0:00 [migration/1] # ps -eo user,pid,tty (-o output personalizado, se indican los campos separados por coma, ver ps --help o ps L) USER PID TT root 1 ? root 2 ? sergon 8570 tty 1 root 8876 pts/1 # ps -eH (muestra árbol de procesos) # ps axf (lo mismo en formato BSD) # ps -ec (el comando que se esta ejecutando, sin la ruta, sólo el nombre real) #> ps -el (muestra formato largo de varias columnas, muy práctico) #> ps L (No muestra procesos, lista todos los códigos de formatos) Algunas opciones: -u user Muestra los procesos lanzados por el usuario indicado. -t terminal Sólo los procesos ligados a un terminal determinado. -e Todos los procesos. -f Muestra una información más detallada de cada proceso. -F formato más largo. F Muestra un árbol con la jerarquía de procesos. k campo Ordena la salida por algún campo (p.e. ps uxak rss). 1. En varias terminales virtuales, conéctate con usuarios diferentes. 2. Abre varias sh y ejecuta algún programa (editores, …). 3. Visualiza los procesos de un usuario concreto. 4. Comprueba las relaciones padre-hijo entre procesos. 5. Busca procesos dado su nombre. 6. Observa las diferentes columnas que aparecen con las opciones –l, -f, -F, u. 7. Realiza algún listado personalizando las columnas. Gestión de Procesos Linux 5
  • 306.
    Control de Tareas. Enmuchos casos, los usuarios solo ejecutan un trabajo cada vez, que es el último comando que ellos teclearon desde el shell. Sin embargo, usando el control de tareas, usted podrá ejecutar diferentes tareas al mismo tiempo, cambiando entre cada una de ellas conforme lo necesite. Primer plano y Segundo plano Un proceso puede estar en Primer plano o en Segundo plano. Solo puede haber un proceso en primer plano al mismo tiempo por terminal, el proceso que está en primer plano, es con el que se interactúa, recibe entradas de teclado, y envía las salidas al monitor. (Salvo, por supuesto, que haya redirigido la entrada o la salida). El proceso en segundo plano, no recibe ninguna señal desde el teclado, por lo general, se ejecutan en silencio sin necesidad de interacción. Algunos programas necesitan mucho tiempo para terminar, y no muestran nada interesante mientras tanto. Compilar programas es una de estas tareas, o comprimir un fichero grande. No tiene sentido sentarse y aburrirse mientras estos procesos terminan. En estos casos es mejor lanzarlos en segundo plano, para dejar el ordenador en condiciones de ejecutar otro programa. Los procesos pueden ser suspendidos. Un proceso suspendido es aquel que no se está ejecutando actualmente, sino que está temporalmente parado. Después de suspender una tarea, puede indicar a la misma que continúe, en primer plano o en segundo, según se requiera. Retomar una tarea suspendida no cambia en nada el estado de la misma, la tarea continuará ejecutándose justo donde se dejó. Ten en cuenta que suspender un trabajo no es lo mismo que interrumpirlo. Cuando se interrumpe un proceso, generalmente con la pulsación de ctrl-C (depende del terminal), el proceso muere, y deja de estar en memoria y utilizar recursos del ordenador. Una vez eliminado, el proceso no puede continuar ejecutándose, y deberá ser lanzado otra vez para volver a realizar sus tareas. También se puede dar el caso de que algunos programas capturan la interrupción, de modo que pulsando ctrl-C no se para inmediatamente. Esto se hace para permitir al programa realizar operaciones necesarias de limpieza antes de terminar. De hecho, algunos programas simplemente no se dejan matar por ninguna interrupción. Envío a segundo plano y eliminación de procesos Empecemos con un ejemplo sencillo. El comando yes es un comando aparentemente inútil, que envía una serie interminable de y-es a la salida estándar. (Realmente es muy útil. Si se utiliza una tubería o “pipe") para unir la salida de yes con otro comando que haga preguntas del tipo si/no, la serie de y confirmará todas las preguntas. Gestión de Procesos Linux 6
  • 307.
    yes y y y y y La serie de y-es continuará hasta el infinito, a no ser que usted la elimine, pulsando la tecla de interrupción, generalmente ctrl-C. También puede deshacerse de esta serie de y-es redirigiendo la salida estándar de yes hacia /dev/null. yes > /dev/null Ahora va mucho mejor, el terminal no se ensucia, pero el prompt de la shell no retorna. Esto es porque yes sigue ejecutándose y enviando y-es a /dev/null. Para recuperarlo, pulse la tecla de interrupción. Supongamos ahora que queremos dejar que el comando yes siga ejecutándose, y volver al mismo tiempo a la shell para trabajar en otras cosas. Para ello enviaremos a yes a segundo plano, lo que nos permitirá ejecutarlo, pero sin necesidad de interacción. Una forma de mandar procesos a segundo plano es añadiendo un carácter “&" al final de la línea de comando. yes > /dev/null & [1] 164 Como podrá ver, ha regresado a la shell. ¿Pero qué es eso de “[1] 164"? ¿Se está ejecutando realmente el comando yes? “[1]" representa el número de tarea del proceso yes. El shell asigna un número a cada tarea que esté ejecutando. Como yes es el único comando que se está ejecutando en background, se le asigna el número de tarea 1. El número “164" es el número de identificación del proceso, o PID, que es el número que el sistema le asigna al proceso. Ambos números pueden usarse para referirse a la tarea como veremos después. El proceso yes está corriendo en segundo plano, y enviando constantemente y-es hacia el dispositivo /dev/null. Para chequear el estado del proceso, utilice el comando interno del shell jobs: jobs [1]+ Running yes >/dev/null & También puede usar el comando ps, como mostramos antes, para comprobar el estado de la tarea. 8. Lanza varios procesos con el comando yes. 9. Muestra con ps, sólo la información de todos los ‘yes’ , en formato largo 10. Visualiza la información de uno en concreto y comprueba cual es el proceso padre y el tiempo de CPU consumido. Gestión de Procesos Linux 7
  • 308.
    Para eliminar unatarea, utilice el comando kill. Este comando toma como argumento un número de tarea o un número de ID de un proceso. Esta era la tarea 1, así que usando el comando. kill %1 matará la tarea. Cuando se identifica la tarea con el número de tarea, se precede el número con el carácter de porcentaje ("%"). Ahora que ya hemos matado la tarea, podemos usar el comando jobs de nuevo para comprobarlo: jobs [1]+ Terminated yes >/dev/null La tarea está, en efecto, muerta, y si usa el comando jobs de nuevo, no mostrará nada. 11. Comprueba que no existe, buscándola con ps. También podrá matar la tarea usando el número de ID de proceso (PID), el cual se muestra conjuntamente con el ID de tarea cuando arranca la misma. En nuestro ejemplo el ID de proceso es 164, así que el comando kill 164 es equivalente a kill %1 No usar el "%" cuando nos referimos a una tarea a través de su ID de proceso. Parada y relanzamiento de tareas Para seguir practicando vamos a crear un programa menos agobiante que yes, le vamos a llamar ‘punto.sh’, y se trata de un bucle infinito que muestra un punto en pantalla cada dos segundos. while true do echo -n ' · '; sleep 2; done Hay otra manera de poner una tarea en segundo plano. Se puede lanzar como un proceso normal (en primer plano), pararla, y después relanzarla en segundo plano. Primero, lance el proceso yes en primer plano. yes > /dev/null De nuevo, dado que yes corre en primer plano, no debe retornar el prompt de la shell. Ahora, en vez de interrumpir la tarea con ^C , suspenderemos la tarea. El suspender una tarea no la mata, solamente la detiene temporalmente hasta que se relance. Para hacer esto pulsar la tecla de suspender, que suele ser ctrl-Z . yes > /dev/null ctrl-Z [1]+ Stopped yes >/dev/null Gestión de Procesos Linux 8
  • 309.
    12. Comprobarlo con ps. Mientras el proceso está suspendido, simplemente no se está ejecutando. No gasta tiempo de CPU, pero sí memoria. Se puede retomar de nuevo como si nada hubiera pasado. Continuará ejecutándose donde se dejó. Para relanzar la tarea en primer plano, use el comando fg (del inglés “foreground"). fg yes >/dev/null La shell muestra el nombre del comando de nuevo, de forma que tenga conocimiento de que tarea es la que ha puesto en primer plano. Pare la tarea de nuevo, con ctrl-Z. Esta vez utilice el comando bg para poner la tarea en segundo plano. Esto hará que el comando siga ejecutándose igual que si lo hubiese hecho desde el principio con “&" como en la sección anterior. bg [1]+ yes >/dev/null & Y tenemos de nuevo el prompt. El comando jobs deberá decirnos que yes se está ejecutando, y podemos matar la tarea con kill tal y como lo hicimos antes. ¿Cómo podemos parar la tarea de nuevo? Si pulsa ctrl-Z no funcionará, ya que el proceso está en segundo plano. La respuesta es poner el proceso en primer plano de nuevo, con el comando fg, y entonces pararlo. Como puede observar podrá usar fg tanto con tareas detenidas, como con las que estén segundo plano. Hay una gran diferencia entre una tarea que se encuentra en segundo plano, y una que se encuentra detenida. Una tarea detenida es una tarea que no se está ejecutando, es decir, que no usa tiempo de CPU, y que no está haciendo ningún trabajo (la tarea aún ocupa un lugar en memoria, aunque puede ser volcada a disco). Una tarea en segundo plano, se está ejecutando, y usando memoria, a la vez que completando alguna acción mientras usted hace otro trabajo. Sin embargo, una terea en segundo plano puede intentar mostrar texto en su terminal, lo que puede resultar molesto si está haciendo otra cosa. Por ejemplo: yes & o punto.sh & sin redirigir stdout a /dev/null, una cadena de y-es se mostrarán en su monitor, sin modo alguno de interrumpirlo (no puede hacer uso de ctrl-C para interrumpir tareas en segundo plano). Para poder parar esas interminables y-es, tendrá que usar el comando fg para pasar la tarea a primer plano, y entonces usar ctrl-C para matarla. Otra observación. Normalmente, los comandos “fg" y “bg" actúan sobre el último proceso parado (indicado por un “+" junto al número de tarea cuando usa el comando jobs). Si usted tiene varios procesos corriendo a la vez, podrá mandar a primer o segundo plano una tarea específica indicando el ID de tarea como argumento de fg o bg, como en fg %2 bg %3 No se pueden usar los ID de proceso con fg o bg. Gestión de Procesos Linux 9
  • 310.
    Además, si usamosel número de tarea por sí solo, como: %2 es equivalente a fg %2 Recordar que el uso de control de tareas es una utilidad de la shell. Los comandos fg, bg y jobs son internos de la shell. Si por algún motivo usted utiliza una shell que no soporta control de tareas, no espere disponer de estos comandos. Y además, hay algunos aspectos del control de tareas que difieren entre Bash y Tcsh. De hecho, algunas shells no proporcionan ningún control de tareas; sin embargo, la mayoría de las shells disponibles para Linux soportan control de tareas. 13. Practica con nuestro script punto.sh (puedes jugar con varios al mismo tiempo o mezclándolo con yes), lanzándolo en bg, pasándolo a fg, suspendiéndolo, relanzándolo, … Manipulación de procesos (kill) Ya hemos visto que mediante Ctrl-C y Ctrl-Z podemos terminar y detener un proceso: esas combinaciones envían señales a los procesos. El comando básico para enviar señales a un proceso es kill kill -l lista el conjunto de señales $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS . . Para ver su significado, man 7 signal Sintaxis de kill kill [señal] PID Señal puede indicarse mediante el número o el código, por lo que los siguientes comandos son equivalentes: Gestión de Procesos Linux 10
  • 311.
    kill -9 … kill –KILL … Las señales más comunes son: − SIGHUP (1) Cuelgue del terminal o muerte del proceso controlador. − SIGTERM (15) Mata el proceso permitiéndole terminar correctamente. − SIGKILL (9) Mata el proceso sin permitirle terminar. − SIGSTOP (19) Para el proceso. − SIGCONT (18) Continúa si estaba parado. − SIGINT (2) Interrupción de teclado (Ctrl-C). − SIGTSTP (20) Stop de teclado (Ctrl-Z). − SIGQUIT (3) Salida de teclado (Ctrl-). Algunas características de las señales: − La señal que se envía por defecto es TERM (15): Los procesos pueden ignorar esta señal y no terminar. Las señales KILL (9) y STOP (19) no pueden ignorarse. − En bash, cuando enviamos una señal SIGHUP a un shell, este se lo reenvía a todos sus hijos. − Cuando cerramos un terminal en un entorno gráfico, o abandonamos una sesión, se envía un SIGHUP a todos sus hijos. − La mayoría de los demonios (daemons) responden a la señal SIGHUP volviendo a leer sus ficheros de configuración: En vez de matar y reiniciar un demonio podemos hacer un kill -HUP para reiniciarlo 14. Lanza el script punto.sh en background, envíale diferentes señales, comprueba su estado con ps. 15. Igualmente en foreground, y envíale las señales desde otra consola. Programación de tareas. Es bastante común que necesite ejecutar un script (o un comando) periódicamente, para algún tipo de tarea rutinaria. Para ello se utilizan servicios que emplean el reloj del sistema, y lanzar unos procesos determinados previamente, a la hora indicada, aunque no esté presente el usuario. Estos servicios se lanzan en el arranque del sistema y permanecen vivos durante toda la sesión para atender la programación de tareas. También disponemos de otro tipo de planificación. El método descrito anteriormente nos permite planificar en el tiempo, lo que sin duda resulta útil, pero otra manera de aprovechar recursos es Gestión de Procesos Linux 11
  • 312.
    programar la ejecuciónde tareas dependiendo de la carga del sistema. Linux es multitarea, de manera que el uso de la CPU se reparte entre los procesos que estén en ejecución. Esto se consigue repartiendo el tiempo de procesamiento entre cada uno de ellos. Si el número de procesos simultáneos es elevado, el tiempo dedicado a cada uno de ellos disminuye. El efecto que percibe el usuario es una ralentización en la ejecución de las tareas. En estas situaciones disponemos de mecanismos, que permiten programar la ejecución de procesos cuando la carga del sistema sea baja. O modificar la prioridad que tendrán durante su ejecución. at El comando at permite la ejecución de una serie de órdenes en un momento especificado. La sintaxis de at es: at hora fecha + incremento órdenes [ctrl+d] at nos facilita indicar 'cuando’ se va a ejecutar una tarea de una forma muy flexible. Acepta horas con formato HH:MM, para ejecutar un trabajo a una determinada hora del día (si esa hora ya ha pasado, se ejecutará el día siguiente). También se puede especificar la hora usando AM o PM para indicar por la mañana o por la tarde. Podemos indicar el día de ejecución, proporcionando la fecha con el formato MMDDYY o MM/DD/YY o DD.MM.YY. Para indicar la fecha de hoy o mañana podemos usar today o tomorrow respectivamente. La especificación de una fecha debe seguir a la de la hora del día. Finalmente se puede indicar el momento de ejecución contando a partir del instante que ejecutemes at, con el siguiente formato: at now + Nº unidades_de_tiempo Donde unidades_de_tiempo puede ser minutes, hours, days, o weeks. Por ejemplo, para ejecutar un trabajo el 14 de febrero a las siete de la tarde: at 19:00 Feb 14 at> comandos at> <EOT> # aquí pulsé <ctrl-d> warning: commands will be executed using /bin/sh job 2 at 2011-02-14 19:00 Si quiero lanzar un programa dentro de tres horas: at now + 3 hours Gestión de Procesos Linux 12
  • 313.
    at> comandos at> <EOT># aquí pulsé <ctrl-d> warning: commands will be executed using /bin/sh job 3 at 2011-02-14 22:05 Algunas opciones: -l Muestra un listado con todos los trabajos lanzados en diferido. -d Nº Elimina un trabajo de la «cola» usaremos la opción -d seguida del número identificativo del trabajo. 16. Programar que dentro de 2 minutos se añada al fichero ‘quien’ los usuarios que estén conectados en ese momento. 17. Indicar que nuestro script punto.sh se ejecute en background dentro de 3 minutos, redirigiendo su salida al fichero ‘punto’. 18. Programar que se apage el sistema en 10 minutos. 19. Consultar las tareas programadas. 20. Eliminar el apagado del sistema de la lista de tareas programadas. batch batch permite ejecutar comandos en modo diferido, cuando lo permite el nivel de carga del sistema, cuando la carga media cae por debajo de 0.8, o del valor especificado en la invocación de atrun. La sintaxis de batch es: batch órdenes [ctrl+d] Para at y batch: Los comandos a los que se aplicarán son leídos de la entrada estándar o de un fichero indicado si usamos la opción -f. Gestión de Procesos Linux 13
  • 314.
    El directorio detrabajo, el entorno son tomados del momento de invocación, y no el de ejecución. Tanto la salida estándar y los posibles errores deben de ser redirigijos. El usuario root, siempre puede utilizar estos comandos. Para otros usuarios, los permisos para utilizarlos se pueden limitar mediante el uso de los ficheros: /etc/at.allow y /etc/at.deny. Si el fichero /etc/at.allow existe, sólo los usuarios cuyos nombres están mencionados aquí tienen permiso para utilizar at y batch. Si /etc/at.allow no existe, se chequea /etc/at.deny y entonces todos los usuarios cuyos nombres no estén mencionados allí tienen permiso para utilizar at y batch. Si ninguno de los ficheros existe, sólo podrá utilizar at el administrador del sistema. Un /etc/at.deny vacío significa que todo el mundo puede utilizar estos comandos, esta es habitualmente la configuración por defecto. 21. Comprobar la existencia de los ficheros /etc/at.allow y /etc/deny, a quién pertenecen y qué permisos tienen. 22. Lanza con batch un listado largo de todos los ficheros del sistema (recursivo desde la /), almacénalo en un fichero llamado ‘todo’, en tu directorio de trabajo. 23. Comprueba la existencia de la tarea. nice El comando nice modifica el nivel de prioridad de ejecución procesos, asignando más o menos tiempo de CPU a la tarea dada. Linux realiza una planificación por prioridades dinámicas. Al lanzar un proceso se le asigna un valor de prioridad estática, número nice, por defecto hereda la prioridad estática de su proceso padre. La prioridad dinámica del proceso se calcula en función del número nice, junto con el consumo de CPU realizado. La prioridad puede ser ajustada por nice en el rango entre -20 (la prioridad más alta) a 19 (la más baja). Únicamente el root puede asignar valores negativos. La sitaxis de nice es: Gestión de Procesos Linux 14
  • 315.
    nice -n orden Donden es el número que indica la prioridad. Si no indicamos n, se asigna por defecto la prioridad 10. Sin opciones ni argumentos, muestra la prioridad actual. Asignar una prioridad de 5. nice -5 nano Asignar una prioridad de -10 (sólo puede hacerlo el root). nice −−10 nano También podemos cambiar la prioridad a un proceso que se está ejecutando, sabiendo su PID. Asignar prioridad 14 al proceso 4890 renice 14 4890 24. consulta el nivel de prioridad del que dispones actualmente. 25. Entra en el vi usando un nivel de prioridad 17. 26. Desde el vi ejecuta una nueva shell (Esc y teclea :!sh). 27. En el nuevo shell que entramos, consulta los procesos con la opción –l, e identifica la columna en la que se muestran los niveles de prioridad. 28. Cambia la prioridad al vi a 15, y comprueba que se ha cambiado. 29. Intenta darle al vi una prioridad de -10. nohup El comando nohup inhibe la terminación de un proceso, aunque el usuario salga del sistema. Esto tiene sentido para procesos largos, que no requieran asistencia del usuario que los lanzó. Normalmente se ejecutarán en segundo plano, y nohup impedirá que finalicen al salir el usuario del sistema. La sitaxis de nohup es: nohup orden & Gestión de Procesos Linux 15
  • 316.
    30. En unaconsola virtual conéctate como usuario (usuario), y desde allí lanza por ejemplo nuestro punto.sh redirigiendo la salida y en background. 31. Desconéctate del usuario y comprueba como root los procesos que son de su propiedad. cron y crontab Posibilita la ejecución periódica de órdenes a intervalos prefijados. cron es lanzado durante el arranque del sistema, y permanece activo para dar servicio a las entradas que los usuarios le indiquen mediante la ejecución de crontab. El comando crontab necesita leer la información de las especificaciones de un archivo externo. La sitaxis de crontab es: crontab archivo_especificaciones El archivo de especificaciones constará de una línea para cada tarea, con seis campos separados por espacios. Los campos son, por este orden: Minutos Horas Día_(del mes) Mes Día_(de la semana) Orden Minutos Rango de 0 a 59. Horas Dede 0 a 23. Día del mes Desde 1 a 31. Mes Desde 1 a 12. Día semana Desde 0 a 6, siendo el domingo el número cero. Orden La orden a ejecutar. En los cinco primeros campos: − Un entero que identifica a un único minuto, hora, día, etc. − Tambien están admitidos rangos, como por ejemplo, para indicar la repetición de una orden de lunes a viernes, en el campo del día de la semana ponemos: 1-5. − Una lista de enteros separados por comas, indicando que es valido para cualquiera de los enteros indicados. − Un asterisco (*) en cualquiera de los campos anteriores significa cualquier valor del rango, es decir el comando se ejecutará independientemente del valor de ese campo. Gestión de Procesos Linux 16
  • 317.
    Veamos algunos ejemplosde como pueden ser estos archivos: Ejecutar la orden todos los días a las nueve y media. 30 9 * * * orden Ejecutar la orden los viernes a las doce en punto. 0 12 * * 5 orden Ejecutar la orden todos los minutos desde las 8 a las 9 horas cada 12 de septiembre. * 8 12 9 * orden Ejecutar la orden el primer lunes de cada mes, a las siete de la tarde. 0 19 1-7 * 1 orden De manera que si creamos un archivo de esta manera, sencillamente con ejecutar crontab seguido del nombre del archivo, cron se encargará de la ejecución de las órdenes con la frecuencia indicada. Cada usuario solo puede tener un fichero de especificación de crontab (se le conoce como archivo crontab). Cada ejecución de crontab archivo_de_especificaciones establece ese archivo como el válido para que cron lo interprete y ejecute. En realidad podrá tener varios archivos definidos, pero sólo será utilizado el último que se ejecutó con crontab. De nuevo se puede limitar el uso de crontab mediante la inclusión de usuarios en los ficheros /etc/cron.allow y /etc/cron.deny. − Si el fichero cron.allow existe, sólo los usuarios cuyos nombres están mencionados aquí tienen permiso para utilizarlo. − Si cron.allow no existe, se chequea cron.deny y entonces todos los usuarios cuyos nombres estén mencionados se les denegará el uso. − Si ninguno de los ficheros existe, sólo podrá utilizar crontab el administrador del sistema. − Si cron.allow no existe y cron.deny vacío significa que todo el mundo puede utilizar crontab. Por último decir que una vez editado el fichero de especificaciónes y ejecutado crontab con él, no es conveniente modificarlo con un editor de texto. Algunas opciones: -e Es la forma de introducir algún cambio en el fichero de especificaciones. -r Para eliminar el fichero utilice la opción. -l Para mostrar la lista del contenido del fichero. Crear el fichero de especificaciones para crontab, para que realice las copias de seguridad, con la siguiente planificación: Gestión de Procesos Linux 17
  • 318.
    32. Completa eldía primero de cada mes a la hora del recreo, en el fichero /dump/logica.0. 33. Diferencial, todos los viernes a la misma hora, en el fichero /dum/logica.1. 34. De lunes a viernes copias incrementales (niveles 2, 3, 4, 5), en sus respectivos ficheros, también a la hora del recreo. top Proporciona una visión continuada de la actividad del procesador en tiempo real, muestra las tareas que más uso hacen de la CPU, y tiene una interfaz interactiva para manipular procesos. Las cinco primeras líneas muestran información general del sistema: − Las estadísticas de la orden uptime. − Estadísticas sobre los procesos del sistema (número de procesos, procesos en ejecución, durmiendo, parados o zombies). − El estado actual de la CPU (porcentaje en uso por usuarios, por el sistema, por procesos con valor nice positivo, por procesos esperando E/S, desocupada, tratando interrupciones hardware, interrupciones software, en espera involuntaria por virtualización). − La memoria (memoria total disponible, usada, libre, usada como buffer de E/S y en caché. − El espacio de swap (swap total disponible, usada, libre y en caché). Los datos de la parte inferior son similares a los del ps, excepto: SHR (La cantidad de memoria compartida usada por la tarea). Los procesos mostrados los ordena decrecientemente por el uso de la CPU La lista se actualiza de forma automática, normalmente cada 5 segundos La orden top permite realizar una serie de operaciones interactivamente, mediante la pulsación de teclas, mientras top está en ejecución, como por ejemplo: − Cambiar la prioridad de alguno utilizando la opción “r”. − Matar o enviar una señal con la opción “k”. − Ordenarlos según diferentes criterios (por PID con “N”, uso de CPU con “P”, tiempo con “A”, etc.). − Con “n” se cambia el número de procesos que se muestran. − Mostrar los procesos de un solo usuario “u”. Gestión de Procesos Linux 18
  • 319.
    Con “s” cambia el intervalo de refresco de la indormación. − Mostrar una ventana de ayuda “h”. − Para salir se utiliza la letra “q”. 35. Abrir dos consolas gráficas, en una de ellas ejecutar top y desde la otra lanzar procesos en background, para ver el efecto en la actividad que muestra top. 36. Indica que visualice 13 procesos. 37. Mostrar sólo los procesos del usuario. 38. Cambia la prioridad a algún proceso. 39. Elimina y suspende alguno. Línea Línea de comandos Agrupamiento de comandos: (Siendo A y B dos comandos) A | B Toda la línea de comandos se ejecuta como si fuese un solo proceso, que genera procesos hijos para cada una de las órdenes. La ejecución es concurrente. Y el estado de salida de una tubería es el del último comando. # Cuenta los subdirectorios que hay en el disco. $ find / -type d 2> /dev/null | wc –l & $ ps –f # Comprueba la ejecución concurrente. # Muestra la lista ordenada de los usuarios conectados # que en su nombre contengan la cadena. who | grep cadena | sort A; B Igual que si estubieran en líneas separadas. La ejecución es secuencial. Gestión de Procesos Linux 19
  • 320.
    A & Ejecución enBackground. Se realiza de forma asíncrona. (A; B; ...) Se crea un SubShell, que los ejecuta de forma secuencial. { bA; B; ...;b} No se crea un SubShell. Se ejecutan como un solo comando con una sola salida. # Comprueba que no se lanza un nuevo shell. { clear; find / > total 2> /dev/null; ps –l; } # Muestra el contenido de los tres subdirectorios # como si se tratase de uno solo, y ordenado en sentido inverso: $ { ls -l direc1; ls -l direc2; ls -l direc3; } | sort -r # Añade fecha, hora y el nº de usuarios conectados al fichero usu. { date; who | wc -l; } >> usu A && B Ejecución condicional de la orden B. La orden B sólo se ejecutará en el caso de que el estado de salida de A sea “verdadero” (0). # Mostrará el mensaje “Encontrado” sólo si existe el directorio: $ ls -d directorio > /dev/null && echo Encontrado. A || B Ejecución condicional de la orden B. La orden B sólo se ejcutará en el caso de que el estado de salida de A sea “falso” (!=0). # Como un usuario normal intentar crear un subdirectorio # donde no tengáis permiso de escritura (/home). $ mkdir hola || echo $USERNAME en `pwd` no puedes crear Gestión de Procesos Linux 20
  • 321.
    Metacaracteres: Hay que teneren cuenta que muchos caracteres son interpretados de forma especial por el Shell, los más importantes son: < > << >> Redireccionamientos. | Tubería. *?[] Generación de nombres de fichero. & Background. (){} Agrupamiento de comandos. ; Separador de órdenes. $ Antepuesto a una variable representa su valor. Quita el significado especial al siguiente carácter. # Lo siguiente se entiende como comentario. ' Los apóstrofos normales, hacen que pierdan su significado especial todos los caracteres contenidos entre ellos. " Las comillas no desconectan el significado especial de $ ` (apóstrofo inverso) ni |. ` (Apóstrofo inverso) Una orden encerrada entre apóstrofos inversos se sustituye por su salida estándar. Gestión de Procesos Linux 21
  • 322.
    Máquinas Virtuales Introducción En numerosasocasiones necesitamos probar un programa o realizar pruebas en el Sistema Operativo que tenemos instalado. Si las pruebas las realizamos en un equipo que estamos utilizando de manera habitual, corremos el peligro de que un fallo, un mal funcionamiento del programa o una simple actualización, provoquen una caída del sistema, una pérdida de su estabilidad y en el peor de los casos tengamos que hacer una reinstalación completa. Una posible solución sería utilizar otro equipo, donde primero duplicásemos nuestra máquina y luego instalásemos los programas o actualizaciones que deseamos comprobar. Si todo va bien, lo aplicamos al equipo en producción y si hay problemas, un simple formateo del equipo de pruebas nos resuelve el problema, sin que los usuarios se vean afectados. Evidentemente tener uno o más equipos para realizar pruebas conlleva un coste económico que la mayoría de las empresas no están dispuestas a asumir. Una solución más sencilla y adecuada es instalar una herramienta que simule el funcionamiento del Sistema Operativo que se quiere probar y sobre él se instalen las aplicaciones en evaluación. Esta herramienta debe independizar el Sistema Operativo real (anfitrión) del Sistema Operativo Virtualizado (invitado). En esta situación podemos realizar una abstracción e imaginar que tenemos un ordenador real (nuestra máquina física, con su correspondiente Sistema Operativo) y sobre él se emula el funcionamiento de otro u otros ordenadores virtuales, y además se nos permite cambiar entre uno y otro sin mayor problema. Se dice entonces que tenemos una máquina real, la máquina física y una o más máquinas virtuales, las que se ejecutan sobre el emulador, cada una de ellas con su hardware emulado (virtual) y con su Sistema Operativo. El programa de que usamos para virtualizar (VMM <-> Virtual Machine Monitor) maneja, gestiona y arbitra los cuatro recursos principales de una computadora (CPU, Memoria, Red, Almacenamiento) y así podrá repartir dinámicamente dichos recursos entre todas las máquinas virtuales definidas en el ordenador anfitrión. De modo que nos permite tener varias máquinas virtuales ejecutándose sobre el mismo ordenador físico. Llevando un paso más allá este modelo, podrían coexistir, en un mismo instante, nuestro ordenador real, con su Sistema Operativo real y todos los ordenadores virtuales que pongamos en funcionamiento, pudiendo incluso comunicarse entre ellos, a través de una red y por lo tanto compartir recursos, si es que nos parece oportuno. Llegados a este punto, podemos definir una máquina virtual como un programa informático, que se ejecuta sobre un ordenador y un Sistema Operativo, y que simula el funcionamiento de una Máquinas Virtuales Linux 1
  • 323.
    máquina sobre laque se pueden instalar diferentes sistemas operativos, aplicaciones, compartir recursos, conectarnos a Internet, utilizar diferentes dispositivos (impresoras, usb, etc.). Ventajas − Ahorro de costes, al aprovechar al máximo el hardware disponible, ya que en una misma máquina física pueden coexistir múltiples servidores (la mayor parte de los servidores pasan mucho tiempo parados, y por otro lado su coste es muy elevado). Con un solo ordenador y virtualizando los servidores se aprovecha el hardware de la mejor manera posible. − Sencillas copias de seguridad. Las máquinas virtuales se pueden salvar muy fácilmente, porque a fin de cuentas, no son más que uno o varios ficheros; en caso de desastre se puede recuperar la información con rapidez. − Una de las mayores ventanas es su “aislamiento”. Lo que le ocurra a nuestra máquina virtual no le afectara al sistema principal ya que no se verá involucrada. Esto implica: o Seguridad en las pruebas de aplicaciones. Permite probar una aplicación y si va mal recuperar el estado inicial, la máquina anfitrión no se afecta en nada. o Seguridad en la consolidación de sistemas. Permite instalar y configurar un sistema informático sin que los fallos u errores de configuración supongan un gran retraso ya que se puede "retroceder" a puntos seguros con facilidad y rápidamente, en caliente (instantáneas). − Centralización geográfica de servicios. En un mismo anfitrión podemos tener ejecutándose simultáneamente tantos servidores como requiera el entorno, por ejemplo, un Windows Server para dar soporte a una aplicación y un Linux Server para dar soporte de web y correo. Esto facilita la administración al estar centralizada. − Portabilidad y disponibilidad. Con los dispositivos de almacenamiento usb de gran tamaño, podemos tener equipos completos virtualizados privados, que nos permiten utilizarlos en entornos públicos. Hay que tener en cuenta que, normalmente, los volúmenes de almacenamiento virtuales ocupan menos espacio ya que sólo se almacenan físicamente en HD los bloques con datos. − Rápida implantación. En Internet existen máquinas virtuales ya configuradas, lo que nos permite ahorrar tiempo en instalaciones y configuraciones. Desventajas − Rendimiento. Es obvio que al compartir cada huésped y el anfitrión los principales recursos (RAM y procesador) el rendimiento individual de cada máquina es menor que si estuviesen en máquinas individuales. Máquinas Virtuales Linux 2
  • 324.
    Por ello, lavirtualización requiere de máquinas anfitrionas más potentes, con más RAM y varios núcleos y/o procesadores para una mejor respuesta. 1. Buscar en internet información sobre diferentes programas de virtualización, recoger sus principales características, sobre qué plataformas funcionan, qué sistemas operativos virtualizan, libres o de pago, facilidad de uso,… Instalación Oracle VM VirtualBox es un programa de virtualización con el que es posible instalar sistemas operativos adicionales, conocidos como sistemas invitados, dentro de otro sistema operativo anfitrión, cada uno con su propio ambiente virtual. En nuestro caso, el sistema operativo anfitrión será Ubuntu y los invitados los sistemas que vayamos instalando o añadiendo a VirtualBox. Para instalarlo en Ubuntu tenemos dos opciones: usando el paquete .deb o desde los repositorios. Lo más recomendable es la segunda opción ya que así se actualizará automáticamente con las nuevas versiones que vayan apareciendo. Desde los repositorios: Para instalar VirtualBox desde los repositorios, ejecutamos los siguientes comandos en un terminal: 1) Añadimos el repositorio de VirtualBox al fichero /etc/apt/sources.list: deb http://download.virtualbox.org/virtualbox/debian lucid contrib 2) Descargamos la clave pública para apt-secure: wget http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc 3) Añadimos la clave del repositorio: apt-key add oracle_vbox.asc 4) Actualizamos la información de los repositorios: apt-get update 5) Instalamos VirtualBox: apt-get install virtualbox-4.0 6) Agregamos a nuestro usuario al grupo vboxusers, que se crea automáticamente al instalar VirtualBox: Máquinas Virtuales Linux 3
  • 325.
    sudo gpasswd -anomUsuario vboxusers Usando el paquete .deb: Descargamos el paquete .deb correspondiente, a nuestra versión de Ubuntu y nuestra arquitectura (32 ó 64 bits) de la página de VirtualBox. http://download.virtualbox.org/virtualbox/debian/pool/contrib/v/virtualbox-4.0 Una vez descargado, hacemos doble clic sobre el paquete para instalarlo. 2. Realiza la instalación de VirtualBox en Ubuntu, a ser posible usando los repositorios. Creación de máquinas Una vez instalado podemos ejecutar VirtualBox desde el menú Aplicaciones > Herramientas del sistema > Oracle VM VirtualBox, es conveniente crearle un lanzador en el escritorio o en alguna barra. La primera vez que lo ejecutemos nos leemos y aceptamos la licencia. En el menú Ayuda > Acerca de… comprobamos la versión de VirtualBox que tenemos instalada. Aunque en inglés, puedes consultar el manual de VirtualBox en http://www.virtualbox.org/manual/UserManual.html 1º.- Indicamos que vamos a definir una nueva máquina virtual, bien con el botón como indica la imagen o en el menú "máquina ->Nueva". Máquinas Virtuales Linux 4
  • 326.
    En la bienvenidadel asistente pulsamos siguiente. 2º.- Solicita el nombre que vamos a poner a la máquina y el sistema operativo que tenemos pensado instalarle. Pero esto es a título identificativo, no implica ninguna configuración en la máquina. Máquinas Virtuales Linux 5
  • 327.
    3º.- En estepaso debemos decidir que memoria RAM física asignamos a la máquina virtual, sabiendo que el sistema anfitrión no dispondrá de ella. Además debemos de pensar si vamos a correr varias máquinas virtuales al mismo tiempo, ya que cada una requerirá su parte de RAM. 4º.- Elección del tipo de disco duro virtual (HDV). Si optamos por usar uno existente y está previamente incluido en el repositorio de HDV, podemos seleccionarlos mediante la lista desplegable; si no, deberemos pinchar en el icono de la carpeta para acceder al Administrador de medios virtuales y añadirlo. Máquinas Virtuales Linux 6
  • 328.
    5º.-Si optamos porcrear el HDV, se abrirá el asistente de creación de discos virtuales. Tras la pantalla de bienvenida, solicita que indiquemos el tipo de almacenamiento. 6º.-Debemos suministrar un nombre al disco (al fin y al cabo el HDV se almacena en un fichero), por defecto toma el nombre que dimos a la máquina, podemos también seleccionar el lugar donde se almacenará el fichero. En la parte inferior definimos el tamaño que va a tener, debemos consultar cuales son los requisitos mínimos aceptables para el SO que tenemos previsto instalar, así como del uso que le vamos a dar. Máquinas Virtuales Linux 7
  • 329.
    7º.-Después de mostrarnosuna serie de resúmenes, crea la máquina virtual con una configuración básica, que podemos afinar posteriormente. 3. Crea una máquina virtual para Windows XP, valorando los recursos que le asignas (consultar previamente los requisitos mínimos). 4. Ver todas las posibilidades que nos ofrece la opción de Máquina -> Configuración. Menú Archivo de VirtualBox Preferencias...  Establecer la ubicación de los ficheros que almacenan las máquinas virtuales.  Establecer la tecla host (por defecto la tecla Ctrl de la derecha del teclado).  Configurar las actualizaciones automáticas.  El idioma.  Gestionar las tarjetas de red (inicialmente, sólo tendremos la tarjeta de red virtual que ha creado vboxnet0. Máquinas Virtuales Linux 8
  • 330.
     Administrador demedios virtuales... Desde esta opción podemos gestionar los distintos medios de almacenamiento virtuales. En la pestaña "Discos duros" nos muestra la información sobre los distintos discos virtuales (HDV), generados por VirtualBox (extensión .vdi) o importados desde otras plataformas (normalmente, extensión .vdmk). Los HDV se crean normalmente en el momento de la creación de la máquina pero desde aquí podemos crear (botón Nuevo) nuevos discos o agregar HDVs guardados como copia de seguridad. Los HDV pueden ser de almacenamiento: − Dinámico, crecerá según uso hasta el máximo indicado. − Tamaño fijo: ocupan inicialmente el tamaño asignado, tienen mejor rendimiento. Los HDV pueden ser de distintos tipos: − Normal (opción por defecto): No hay restricciones sobre la forma en que el sistema huésped lee y escribe en él. Cuando se hace una instantánea de la máquina virtual se guarda toda la información del HDV y cuando se restaura la instantánea su estado será totalmente "reseteado". Sólo se pueden acceder desde una máquina simultáneamente. − WriteThrough: Es una variante del tipo anterior. Son accesibles por una sola máquina. No les afecta en absoluto las instantáneas. Su estado no se salva cuando se saca una instantánea y por lo tanto no se machaca su información al restaurar la instantánea (aconsejable para datos). − Compartibles (shareables): se comportan como WriteThrough, pero son de tamaño fijo y accesible por múltiples máquinas virtuales a la vez. − Inmutables (congelados): cada vez que apagas la máquina se restaura como al principio. Son accesibles por varias máquinas. Restaura al estado original o a la última instantánea. Lo usual es que el S.O. esté en un HDV normal o inmutable, que un disco de datos sea WriteThrough y otro Shareable. Tipo Múltiples accesos Restaurable por Tamaño dinámico simultáneos instantánea Normal No Sí Sí WriteThrough No No Sí Shareable Sí No No Inmutable Sí Sí Sí Se puede cambiar de un tipo a otro a través de línea de comandos: Máquinas Virtuales Linux 9
  • 331.
    vboxmanage modifyhd http://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi 5. ¿Dónde ha colocado VirtualBox el comando vboxmanage dentro de Ubuntu? 6. Consulta el formato en la página de ayuda de VirtualBox. CDs, DVDs (y disquetes) VirtualBox emula la unidad. Podemos indicar respecto a su contenido: o Está vacía. o Que tome el contenido de la unidad física de la máquina anfitriona. o Que tome el contenido de una imagen como si fuese un soporte real. En este último caso, el primer paso es añadir al repositorio "Imágenes de CD/DVD" dicha imagen. Pulsando sobre Agregar nos aparecerá la ventana para seleccionar la ubicación e imagen correspondiente. Admite imágenes .ISO, .IMG, etc., pero no .NRG (por defecto .ISO, al marcar que muestre "todos las archivos (*)", no nos mostrará las nuevas imágenes hasta que no refresquemos la carpeta. Exportar e importar  Exportar servicio virtualizado: exporta el HDV y los datos de la máquina. Genera tres ficheros: .ovf, que es un estándar abierto para empaquetar y distribuir servicios virtualizados entre distintas plataformas; .vmdk, que es el estándar de compactación dinámica de HDVs de VMWare y .mf que es el archivo de manifiesto, también tenemos la posibilidad de que todo lo empaquete en un solo fichero .ova.  Importar servicio virtualizado: permite importar a VirtualBox máquinas previamente exportadas. (Lo desarrollamos y practicamos más adelante). Máquinas Virtuales Linux 10
  • 332.
    Instalación del SOinvitado 1º.- Como medio de instalación se puede usar el CD o una imagen del mismo. Para usar una iso, nos vamos a "Configuración -> Almacenamiento", seleccionamos el CD, que en principio está vacío y en la parte derecha pulsamos sobre el icono del CD, y nos aparecen las dos posibilidades. 2º.- Ahora seleccionamos la imagen iso, será como si un CD de dicha imagen estuviese introducido en la unidad. 3º.- De vuelta en la pantalla principal de VB, comprobamos que se ha modificado el almacenamiento. Ya podemos iniciar la máquina, y como en el orden de arranque tiene primero el CD/DVD-ROM, debe comenzar la instalación del SO. Máquinas Virtuales Linux 11
  • 333.
  • 334.
    Configuración de unamáquina Abrimos la ventana de configuración (Menú Máquina -> Configuración…) General En la ficha "Básico" podemos cambiar la denominación de la máquina. Y en la ficha “Avanzado": dónde vamos a ubicar las instantáneas, si deseamos que el traspaso de portapapeles funcione bidireccionalmente, si deseamos que los cambios en los medios de almacenamiento se guarden para la próxima ejecución o no, y como queremos ver la máquina en pantalla. Sistema En la pestaña "Placa base" podemos modificar la cantidad de memoria que asignamos al crear la máquina. En "Orden de arranque," al igual que si fuese la BIOS de una máquina física, indicaremos el orden en que deberá buscar el sistema operativo de arranque. Como no vamos a tener imágenes de disquete, lo desmarcamos y bajamos. En "Características extendidas" nos encontramos las siguientes opciones: o Habilitar IO APIC: (Advanced Programmable Interrupt Controller) es un controlador de interrupciones diseñado para el multiproceso, concretamente para poder incorporar múltiples microprocesadores a la placa madre. Habrá que indicar esta opción si asignamos más de una CPU a la máquina. o Habilitar EFI: (Extensible Firmware Interface) es una especificación desarrollada por Intel para reemplazar la interfaz del estándar IBM PC BIOS, interactuando como puente entre el sistema operativo y el firmware base. Es necesaria para instalar máquinas MacOS. o Reloj hardware en tiempo UTC: normalmente el guest usará el reloj del host. Pero podemos indicarle que use el tiempo universal coordinado dado por los relojes atómicos, este es el sistema de tiempo utilizado por muchos estándares de Internet y la World Wide Web, de forma que el guest tendrá su propio tiempo, independiente del anfitrión. o Habilitar dispositivo apuntador absoluto: permitirá incorporar dispositivos de entrada como las tabletas gráficas. En caso contrario, sólo emulará un ratón PS/2. En la pestaña Procesador, si tenemos un host con más de una CPU, podemos indicarle cuantas CPUs se destinarán a la máquina virtual. En caso de marcar más de una CPU, deberemos habilitar también la opción "Habilitar IO APIC". Pantalla Aquí indicarnos la cantidad de memoria dedicada a la gestión de vídeo, el número de monitores y si deseamos usar aceleración gráfica (siempre que la soporte la máquina host). Máquinas Virtuales Linux 13
  • 335.
    También podemos especificarlos parámetros para poder hacer acceso remoto a la máquina cuando esté en funcionamiento. Audio Aquí se indica el controlador de audio del host y que controlador emulará el guest, pudiendo escoger entre AC97 o Soundblaster. Ya que no tenemos altavoces, lo desactivamos. Puertos Serie Nos permite activar el acceso a los puertos serie de la máquina host, asignando los recursos de IRQ y memoria necesarios. Sólo debemos activarlos si vamos a usar algún dispositivo con conexión por puerto serie. USB En esta pestaña gestionaremos los recursos USB para permitir que la máquina virtual acceda a los dispositivos USB seleccionados mediante el "Filtro de Dispositivos". Habilitaremos el controlador USB y USB 2.0. Pinchando en el icono de la derecha con el + verde, nos mostrará la lista de dispositivos USB que en ese momento están conectados al anfitrión, permitiéndonos seleccionar aquellos que queremos que sean accesibles desde el guest. Si queremos que reconozca cualquier penDrive es mejor agregar un filtro vacío, como se muestra en la image. La próxima vez que arranquemos esa máquina virtual, tendremos acceso a la memoria USB seleccionada. En el menú Dispositivos -> Dispositivos USB, podemos activarlos o desactivarlos, también en el icono que representa un conector USB podemos gestionarlos. Máquinas Virtuales Linux 14
  • 336.
    NOTA: La máquinavirtual se hace dueña absoluta del USB por lo que mientras se esté ejecutando no podremos acceder desde el host a dicho dispositivo. Red Desde esta opción podemos configurar hasta cuatro adaptadores de red. Las redes en las que se encuentran las máquinas virtuales son privadas e independientes de las del anfitrión. Por defecto, viene en modo NAT.  Conectado a: configura el modo en que el adaptador de la máquina huésped se conecta a una red.  Nombre: selecciona el adaptador de red si se ha seleccionado el tipo Adaptador puente o Adaptador Solo‐anfitrión.  Tipo de adaptador: selecciona el tipo de adaptador virtual que usará la máquina guest.  Dirección Mac: indica la MAC virtual del adaptador anterior. Modos de funcionamiento de red que se pueden establecer No conectado: en este modo, la tarjeta virtual existe en el huésped, pero está configurada como si no tuviera ningún cable conectado. NAT: (Network Address Translation) es el modo por defecto de la tarjeta de red virtual. Este modo permite al huésped navegar por Internet, descargar ficheros y leer el correo electrónico sin necesidad de configurar el sistema operativo huésped. En este modo, la máquina virtual puede conectarse a otras redes mediante un router virtual proporcionado por VirtualBox. Dicho router sirve direcciones DHCP del tipo 10.0.x.0/24 donde x=2 para la primera tarjeta de red, x=3 para la segunda tarjeta de red, etc. En el caso de una única tarjeta de red, el router tiene como puerta de enlace la dirección 10.0.2.2, como servidor DNS la dirección 10.0.2.3 y la primera dirección DHCP asignada es la 10.0.2.15. Como desventaja, en este modo, los comandos que envían paquetes ICMP como ping o traceroute pueden no funcionar correctamente y, en principio, la máquina virtual no es accesible desde Internet. En resumen:  Se tiene conexión a Internet.  Puedes conectarte a otros equipos de tu red Interna.  Los equipos de la red no tienen acceso a ti, incluido el equipo host de la VM.  Ping no trabaja sobre NAT.  Ciertas limitaciones cuando se está usando compartición de archivos sobre Windows.  La máquina guest está protegida de accesos indeseados.  No se puede correr un servidor, a menos que se haga un port forwarding (re‐envío a puerto) Máquinas Virtuales Linux 15
  • 337.
    Adaptador puente (Bridge):en este modo, se crea una tarjeta de red virtual en el anfitrión que intercepta el tráfico de red y puede inyectar paquetes en la red, de manera que el huésped se configura como si estuviera conectado por un cable a la tarjeta de red virtual del anfitrión.  Nuestra VM es un equipo más de la red local.  Perfecto para correr servidores en máquinas guest.  Se tiene conexión "directa" con todos los equipos.  Todos los equipos tienen conexión directa contigo. Red Interna: en este modo, se crea una red virtual visible entre las máquinas virtuales, pero invisible al anfitrión o a máquinas externas a la red.  Cuando se quiere que tengan conexión entre sí las máquinas virtuales de un mismo anfitrión.  Ni el equipo host, ni la red interna de la empresa ni el mundo exterior tienen conexión con la VM.  Ya que el tráfico no pasa por la máquina host como ocurre en el modo bridge, en el cual se podría poner un sniffer y ver todo el tráfico, es más seguro.  Es más eficiente que el modo bridge, ya que Virtualbox puede transmitir los datos sin tener que pasar estos por la pila de red del sistema host. Adaptador Sólo‐Anfitrión: en este modo se crea una tarjeta de red virtual en el anfitrión que puede conectarse con las máquinas virtuales sin necesitar que el anfitrión tenga una tarjeta de red.  No se necesita físicamente una interfaz de red.  Usa una interfaz de red virtual similar a una interfaz loopback, la cual es creada en el host.  Las máquinas virtuales pueden hablar entre ellas y con el host.  No pueden hablar con el resto del mundo, al igual que en Red Interna, ya que no existe una interfaz de red física presente.  Se crea en el equipo Host una nueva interfaz de red llamada por defecto “vboxnet0” con una ip asignada (por defecto 192.168.56.1), que será la IP con la que desde los guest podamos acceder al equipo host.  Las IPs en los equipos guest pueden ser asignadas: – Por el DHCP de Virtualbox. – Estáticamente siempre que estén dentro de la subred. Máquinas Virtuales Linux 16
  • 338.
    Instalar Guest Additions VirtualBoxGuest Additions es un paquete especial de software que forma parte de VirtualBox y que debe instalarse en cada una de las máquinas virtuales, para mejorar el rendimiento y añadir nuevas funciones. Consisten en una serie de controladores (drivers) y aplicaciones para el sistema virtualizado que lo optimizan para un mejor rendimiento y usabilidad. Las Guest Additions nos ofrecen las siguientes características: Integración del cursor del ratón. Esto implica que podemos mover el ratón libremente entre la máquina virtual y la real sin necesidad de pulsar ninguna tecla para capturarlo/liberarlo. Hace que sea mucho más cómodo usar la máquina virtual. Mejor soporte de vídeo. En principio el controlador de vídeo virtual que utiliza VirtualBox para cualquier sistema operativo virtualizado proporciona solamente funciones básicas. Sin embargo, el driver de vídeo que se instala con las Guest Additions nos ofrece no sólo una buena aceleración de vídeo, sino también resoluciones más altas. Sincronización horaria. Gracias a las Guest Additions, VirtualBox se asegura de que la hora del sistema virtualizado esté mejor sincronizada. Carpetas compartidas. Una de las características más importantes es la de "las carpetas compartidas", porque es una forma fácil de poder intercambiar archivos entre el sistema real y el virtualizado. Ventanas sin costuras. Esta característica consiste en mostrar una ventana del sistema virtualizado como si formara parte de nuestro sistema real. Portapapeles compartido. Al igual que las carpetas compartidas, poder compartir el portapapeles es de gran utilidad. Gracias a esta característica podemos copiar y pegar independientemente de que estemos en la máquina virtual o real. Es necesario instalar las Guest Additions en cada una de las máquinas virtuales, para poder aprovecharlas mejor y para que sean mucho más cómodas de usar. Máquinas Virtuales Linux 17
  • 339.
    Con la máquina arrancada, dentro del menú "Dispositivos" tenemos la opción correspondiente. La iso encuentra en: /usr/share/virtualbox/VBoxGuestAdditions.iso Y en la página de Oracle: http://download.virtualbox.org/virtualbox/4.0.4/Oracle_VM_VirtualBox_Extension_Pack-4.0.4- 70112.vbox-extpack Pasamos de todas las advertencias de seguridad (Windows se fía sólo de Microsoft Corporation). Máquinas Virtuales Linux 18
  • 340.
    Ya disponemos deintegración del ratón Exportar/Importar Exportar/Importar Vamos a realizar el proceso de exportación de la MV con el SO recién instalado Usamos el formato "ova", que nos empaqueta todo en un solo fichero. Máquinas Virtuales Linux 19
  • 341.
    En la pantallaanterior no hay mucho que cambiar, podemos rellenar los campos vacíos. La creación, en un equipo de medianas prestaciones, es bastante rápida, unos pocos minutos. La importación la podemos realizar en cualquier Linux que disponga de VirtualBox, y nos creará una máquina igual, tanto en hardware como en software, así que os las podéis llevar y traer. Para probarlo, la vamos a exportar en el mismo anfitrión, realizando de esta forma un duplicado. Seleccionamos la máquina exportada, que por ahora hay solo una. Máquinas Virtuales Linux 20
  • 342.
    Nos informa desu configuración, por si queremos cambiarle algo, sólo le he cambiado el nombre, indicando que es importada. Y ahora veremos que tenemos dos máquinas virtuales. Máquinas Virtuales Linux 21