Monthly Archives: August 2010

Utilizando Funciones en shell

*.Vamos a ver un par de ejemplos sencillos de las funciones.*

Sintaxis:

function nombrefuncion()
{
comando
.
.
}

function es una palabra opcional
nombrefuncion es el nombre que le vamos a dar
comando es el o los comandos que va a ejecutar

Vamos a hacer una funcion que me muestre todos los archivos txt que tenga.

$ function lsext()
{
find . -type f -iname ‘*.’${1}’ ‘ -exec ls -l {} \; ;
}

Aca vemos que le tenemos que pasar por parametro un argumento.
En este caso el argumento es la extension que queremos buscar.

Aca lo ejecutamos y vemos la salida

[rino@restauracion ~]$ lsext sh
find: ./.gconf/apps/gnome-screensaver: Permission denied
-rwxrw-r-- 1 rino rino 1394 May  3 17:42 ./scripts/vpn.sh
-rwxrw-r-- 1 rino rino 2283 Jul 12 13:46 ./scripts/irssi_notify.sh
-rwxrw-r-- 1 rino rino 121 May 22 21:38 ./scripts/rino.sh
-rwxrw-r-- 1 rino rino 637 Jul 22 19:34 ./scripts/tunel.sh

Funcion que me crea password aleatorios:

[rino@restauracion educacionit]$ function rpass(){
> cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12}
> }
[rino@restauracion educacionit]$ rpass 6
SOm4?B[
rino@restauracion educacionit]$
Si no se le pasa ningun parametro va a tomar 12 por defecto ${1:-12}.

Funcion que me devuelve mi ip.

rino@restauracion educacionit]$ function getip()
> {
> /sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}';
> }
[rino@restauracion educacionit]$ getip
192.168.0.136
[rino@restauracion educacionit]$
[rino@restauracion educacionit]$ getip tun0
9.48.68.211
[rino@restauracion educacionit]$
Aca lomismo si no le defino que valor toma, agarra eth0.

Funcion que me devuelve info de mi maquina:

[rino@restauracion educacionit]$ function mach()
> {
> echo -e "\nMachine information:" ; uname -a
>     echo -e "\nUsers logged on:" ; w -h
>     echo -e "\nCurrent date :" ; date
>     echo -e "\nMachine status :" ; uptime
>     echo -e "\nMemory status :" ; free
>     echo -e "\nFilesystem status :"; df -h
> }
[rino@restauracion educacionit]$ mach

Machine information:
Linux restauracion 2.6.18-194.11.3.el5 #1 SMP Mon Aug 23 15:49:21 EDT 2010 i686 i686 i386 GNU/Linux

Users logged on:
rino     :0       -                09:38   ?xdm?   1:07m  0.15s gnome-session
rino     pts/1    :0.0             09:39    4:05m  3:42m  0.01s tail -f /home/
rino     pts/2    :0.0             09:39   32:50   0.72s  0.66s irssi
rino     pts/3    :0.0             09:41    0.00s  0.09s  0.01s w -h
rino     pts/4    :0.0             09:48    3:53m  0.11s  6.81s gnome-terminal

Current date :
Mon Sep  6 13:45:56 ART 2010

Machine status :
 13:45:56 up  4:09,  5 users,  load average: 2.86, 2.81, 2.81

Memory status :
             total       used       free     shared    buffers     cached
Mem:       3106504    2945748     160756          0      93292    1469596
-/+ buffers/cache:    1382860    1723644
Swap:      2661080          0    2661080

Filesystem status :
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              33G   30G  1.3G  96% /
/dev/sda4              34G   31G  697M  98% /media/bkp
tmpfs                 1.5G     0  1.5G   0% /dev/shm
/dev/sda1              24G   23G  1.4G  95% /media/winchot
[rino@restauracion educacionit]$ 

Funcion que me redefine el ls.

[rino@restauracion educacionit]$ function ll ()
> {
> clear;
>     tput cup 0 0;
>     ls --color=auto -F --color=always -lhFrt;
>     tput cup 40 0;
> }
[rino@restauracion educacionit]$ ll
total 28
-rw-rw-r-- 1 rino rino 2152 Jun 10 18:47 dhcp
-rw-rw-r-- 1 rino rino 2152 Jun  4 21:08 dhcp~
-rwxrw-r-- 1 rino rino  473 Aug 22 21:23 hostname
-rw-rw-r-- 1 rino rino  407 Jun 10 21:26 hostname~
-rw-rw-r-- 1 rino rino 3099 Jun 10 20:46 t1
-rw-rw-r-- 1 rino rino 2488 Aug 22 21:26 testing
-rw-rw-r-- 1 rino rino  979 Aug 22 21:12 testing~
[rino@restauracion educacionit]$ 

Para ver las funciones que defini.

[rino@restauracion educacionit]$ type ll
ll is aliased to `ls -l --color=tty'
[rino@restauracion educacionit]$ type mach
mach is a function
mach () 
{ 
    echo -e "\nMachine information:";
    uname -a;
    echo -e "\nUsers logged on:";
    w -h;
    echo -e "\nCurrent date :";
    date;
    echo -e "\nMachine status :";
    uptime;
    echo -e "\nMemory status :";
    free;
    echo -e "\nFilesystem status :";
    df -h
}
[rino@restauracion educacionit]$ type getip
getip is a function
getip () 
{ 
    /sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}'
}
[rino@restauracion educacionit]$

Otro ejemplo sencillo de usar funciones:

[rino@restauracion educacionit]$ cat test
#!/bin/bash 
                function quit {
                   exit
                }  
                function e {
                    echo $1 
                }  
                e Hello
                e World
                quit
                echo foo 

[rino@restauracion educacionit]$ 

[rino@restauracion educacionit]$ ./test
Hello
World
[rino@restauracion educacionit]$

Fuente: http://www.tldp.org/LDP/abs/html/functions.html
http://www.tldp.org/LDP/abs/html/functions.html
http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-8.html#ss8.2
http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

Preparando LPIC-1 101.3 Cambiar los niveles de ejecución, apagar o reiniciar el sistema

*.Vamos a ver un poco de que trata este Objetivo.*

Vamos a empezar a explicar que son los Runlevels.

El modo de arranque de los sitemas Linux proviene de los sistemas Unix en donde organiza de una manera la forma en que cada servicio va a ser iniciado en sus diferentes niveles.
Esto es asi porque determinados servicios tienen un orden de arranque para que siga una logica y ademas de esto tenemos los niveles de arranque que van a marcar la diferencia de los servicios que se van a iniciar.
Podriamos diferencias los niveles de arranque con grafica o con terminal de texto pero esto seria muy escaso y es por eso que tenemos que abarcar bien todos los niveles en detalles.

*.Runlevels.*

Los niveles de arranque (Runlevels) van del numero 0 al  6.
Nivel 0 es de apagado.
Nivel 1 es para modo mantenimiento (Single User).
Niveles 2 a 5 varia segun algunas distribuciones.
Pero podriamos definirlo asi:
Nivel 2 en distribuciones Debian es modo multiusuario (default), en Red hat
es multiusuario pero sin grafica ni nfs.
Nivel 3 En Red Hat este modo es el default pero no tiene grafica. En debian este nivel el 4 y el 5 no son usados.
Nivel 4 Sin uso definido.
Nivel 5 Con Red Hat es modo multiusuario con grafica.
Nivel 6 es de reinicio.

Cuando linux arranca el primer proceso que arranca es init el c ual es encargado de iniciar todos los demas procesos arrancando los definidos en su nivel adecuado.

*.Single User Mode.*

En este modo de arranque es en donde vamos a realizar tareas de mantenimiento
por diversos motivos, fallas del sistema, iconsistencia de datos,etc.
Podemos acceder a este modo ya sea porque el sistema lo pida o porque lo especifiquemos por la linea de comandos del grub.
Ej:
Esto seria algo normal:
kernel /vmlinuz-2.6.27.21-170.2.56.fc10.i686 ro root=/dev/hda1 rhgb quiet
Si quisiera ir a modo mantenimiento:
kernel /vmlinuz-2.6.27.21-170.2.56.fc10.i686 ro root=/dev/hda5 rhgb quiet 1
o tambien asi
kernel /vmlinuz-2.6.27.21-170.2.56.fc10.i686 ro root=/dev/hda5 rhgb \
                                                    quiet single

O tambien podria usar telinit 1 o init 1 pero no es lo mejor porque no 
genera un aviso a nadie por eso despues vamos a ver como lo hacemos
con el comando shutdown.
En este modo mantenimiento no vamos a tener servicios de red ni uso alguno de otras actividades.

*.Estructura de los runlevels.*

[rino@restauracion scripts]$ ls -la /etc/rc*
lrwxrwxrwx  1 root root    7 Apr 29 16:38 /etc/rc -> rc.d/rc
lrwxrwxrwx  1 root root   10 Apr 29 18:33 /etc/rc0.d -> rc.d/rc0.d
lrwxrwxrwx  1 root root   10 Apr 29 18:33 /etc/rc1.d -> rc.d/rc1.d
lrwxrwxrwx  1 root root   10 Apr 29 18:33 /etc/rc2.d -> rc.d/rc2.d
lrwxrwxrwx  1 root root   10 Apr 29 18:33 /etc/rc3.d -> rc.d/rc3.d
lrwxrwxrwx  1 root root   10 Apr 29 18:33 /etc/rc4.d -> rc.d/rc4.d
lrwxrwxrwx  1 root root   10 Apr 29 18:33 /etc/rc5.d -> rc.d/rc5.d
lrwxrwxrwx  1 root root   10 Apr 29 18:33 /etc/rc6.d -> rc.d/rc6.d
lrwxrwxrwx  1 root root   13 Apr 29 16:38 /etc/rc.local -> rc.d/rc.local
lrwxrwxrwx  1 root root   15 Apr 29 16:38 /etc/rc.sysinit -> rc.d/rc.sysinit

/etc/rc.d:
total 136
drwxr-xr-x  10 root root  4096 Apr 29 16:38 .
drwxr-xr-x 133 root root 12288 Aug 29 21:47 ..
drwxr-xr-x   2 root root  4096 Aug 28 20:18 init.d
-rwxr-xr-x   1 root root  2255 Jul  4  2009 rc
drwxr-xr-x   2 root root  4096 Aug 28 08:53 rc0.d
drwxr-xr-x   2 root root  4096 Aug 28 08:53 rc1.d
drwxr-xr-x   2 root root  4096 Aug 28 20:18 rc2.d
drwxr-xr-x   2 root root  4096 Aug 28 20:18 rc3.d
drwxr-xr-x   2 root root  4096 Aug 28 08:53 rc4.d
drwxr-xr-x   2 root root  4096 Aug 28 20:18 rc5.d
drwxr-xr-x   2 root root  4096 Aug 28 08:53 rc6.d
-rwxr-xr-x   1 root root   220 Jul  4  2009 rc.local
-rwxr-xr-x   1 root root 27239 Jul  4  2009 rc.sysinit
[rino@restauracion scripts]$

Por si solos estos directorios no son nada es por eso que cumplen con una logica que fue definida desde que se creo Unix Sistem V en donde se especifica como tienen que estar situados cada demonio de arranque.
Cuando un sistema Linux arranca este inicia una serie de scripts que se encuentran en /etc y luego da lugar a llamar al nivel que corresponda para inicializar o detener los demonios requeridos.
La tecnica de inicializacion difiere entre algunas distribuciones de linux pero todas ellas tienen que cumplir con la Linux Standard Base para poder tener un orden generico.
Vamos a detallar un poco como inicia un sistema.

/etc/rc.sysinit or /etc/init.d/rcS

En sistemas basados en Red Hat hace uso del script rc.sysinit para la inicializacion.
La secuencia de comandos rcS de Debian hacen el mismo trabajo mediante la ejecución de varios pequeños scripts colocados en dos directorios diferentes. En cada caso, el script se pone en marcha por init en el arranque. Este se ocupa de algunas tareas esenciales para preparar el sistema para su uso, tales como montar sistemas de ficheros. Este script está diseñado para ejecutarse antes de que los demonios del sistema se inicien

/etc/rc.local

No se usa en sistemas basados en Debian. En los sistemas basados en Red Hat, este archivo es un script que se llama después de todos los demas scripts de init (después de que todos los demonios del sistema
han iniciado). Contiene las personalizaciones locales que afectan el inicio del sistema y proporciona una alternativa a modificar los scripts de inicio de otros. Muchos administradores prefieren evitar cambiar rc.sysint porque esos cambios se perderán durante un sistema de actualización. El contenido de rc.local no se pierde en una actualización.

/etc/rc

Este archivo es un script que se usa para cambiar entre los niveles de ejecución. No se usa en debian.

[root@restauracion ~]# ls -la /etc/rc
lrwxrwxrwx 1 root root 7 Apr 29 16:38 /etc/rc -> rc.d/rc
[root@restauracion ~]# 

La tarea de iniciar y detener servicios del sistema (también conocido como demonios, que la intención es que se ejecuten siempre en segundo plano, un ejemplo son los servidores web) está a cargo de archivos y enlaces simbólicos en /etc/init.d y por una serie de directorios de nivel de ejecución específicos llamados desde /etc/rc0.d a / etc/rc6.d.
Estos se utilizan como sigue:

/etc/init.d

En este directorio vamos a tener una serie de script que me van a proveer de diversas funcionalidades para cada servicios.
Son script que llevan argumentos el cual le va a dar un compartamiento a este ya sean los mas basicos parar o arrancar un servicio.
Ejemplo si quisiera saber que puedo hacer con el servicio web:

[root@restauracion init.d]# ./httpd 
Usage: httpd {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}
[root@restauracion init.d]#

La salida me indica que puedo ejecutar esos parametros.

[root@restauracion init.d]# ./httpd stop
Stopping httpd:                                            [  OK  ]
[root@restauracion init.d]#

Aca le pase por parametro stop y asi me detuvo el servicio.
Si agregaramos un nuevo servicio por medio de un paquete rpm o dpkg este creara los script correspondientes sin tener yo que hacer nada. En otros casos tendria que agregarlos en el archivo rc.local.
Es importante tener en cuenta que estos archivos son simplemente shell script que contienen los parametros que se usan normalmente para administrar los demonios. No todos los demonios de linux reconozen los argumentos parar ,iniciar ,etc por la linea de comandos. Pero los script en /etc/init.d estan estandarizados para que podamos correrlo con los parametros usados normalmente.

Los directorios /etc/rc0.d a /etc/rc6.d

Los scripts de inicio en /etc/init.d no son ejecutados directamente por el proceso init. En su lugar, cada uno de los directorios /etc/rc0.d a /etc/rc6.d contienen un enlace simbólico a los scripts del directorio / etc/init.d. (Estos enlaces simbolicos también pueden ser archivos, pero el uso de archivosde script en cada uno de los directorios, suele ser un dolor de cabeza administrativo, ya que los cambios a cualquiera de los scripts de inicio significaría idénticas modificaciones en varios archivos.) Cuando el proceso de inicio entra en ejecución en un nivel N, se examinan todos los enlaces en el directorio rcN.d asociados. Estos enlaces se les da nombres especiales en las formas de KNNname y SNNname:
Vamos a resumir un poco cada uno de estos:

Prefijos K y S

Estas letras corresponden a matar e iniciar ,respectivamente. Cada nivel de ejecucion define un estado en el que determinados servicios se estan ejecutando y en otros no lo estan.
El prefijo S se utiliza para marcar los archivos de todos los servicios que se van a ejecutar (iniciado).
El prefijo K se utiliza para todos los demas servicios que no deben estar en ejecucion.

Secuencia NN

Número de orden. Esta parte del nombre del enlace es un entero de dos dígitos (con un cero a la izquierda, si es necesario). En él se especifica el orden relativo de los servicios a iniciar o detener. El número más bajo representa la primera secuencia de comandos ejecutados por init, y el mayor número es el último. No hay reglas estandarizadas
para la elección de estos números, pero es importante que cuando se añada un nuevo servicio asegurarse de que se inicie después o antes de los servicios que este necesite o dependa.
Si dos servicios poseen el mismo numero posiblemente se ejecuten por orden alfabetico.

name

El nombre que se usa se relaciona con el tipo de servicio que provee.
La forma en que funciona es cuando init tiene que iniciar un runlevel este usa el directorio correspondiente a su nivel y empieza a ejecutarlos por su nombre pero antes de eso los va a ejecutar en orden alfabetico y como la K esta primero que la S lo que sucede es que los para asi luego prosigue con la inicializacion de los procesos en el orden correspondiente que le otorga el numero de este (ej S10network luego S11auditd, S12restorecond, S12syslog) aca ven que tienen el mismo nombre pero syslog se ejecuta ultimo.

*.Setear nivel por defecto de arranque.*
Para poder seleccion al nivel por defecto de arranque hay que ir al archivo /etc/inittab, en las ultimas versions de Fedora y de Ubuntu ya utiliza otro modo de arranque (UpStart.
En inittab vamos a poder colocar el nivel de arranque que necesitemos.

[rino@restauracion rc0.d]$ grep  default /etc/inittab | grep -v halt |grep -v reboot
id:5:initdefault:
[rino@restauracion rc0.d]$ 

*.Determinar el runlevel del sistema.*

[root@restauracion pluginconf.d]# runlevel
N 5
[root@restauracion pluginconf.d]#

Vamos a tener dos estados uno el anterior y el otro el actual.
Como vemos en el anterior tenemos N y en el actual 5.

Si quisieramos cambiar de un runlevel a otro tendriamos que usar el comando init, telinit o shutdown. Pero ya vamos a ver como se usa.
Recuerden -> 0 apaga, 1 single user, 6 reinicia.

Para apagar inmediatamente tendriamos que hacer.
init 0
Para reiniciar inmediatamente
init 6 
Para ir a modo mantenimiento
init 1 o init s

Tambien podriamos usar telinit que es lo mismo.

*.Utilizando comando Shutdown.*
Sintaxis
shutdown [opciones] tiempo [mensaje de alerta]
Con este comando vamos a poder planear nuestra tarea de apagado o reinicio de sistema.
Las opciones las podriamos usar para especificar en que nivel vamos a llevar el equipo.
shutdow -i6 -g0 -y
Con el tiempo podriamos decirle a que hora va a suceder el evento.
Tambien podemos emitir un mensaje de alerta para todos.

Opciones mas usados frecuentemente:
-f -> inicio rapido omite el chequeo de disco al reiniciar.
-h -> apaga el equipo despues de stopear todo.
-k -> mensaje de alerta sin realizar el evento de apagado o reiniciado.
-r -> reinicia despues de stopear todo.
-F -> fuerza al chequeo de discos despues de el reinicio.

Ejemplos

shutdown -r now
Reinicia instanteamente.. No recomendable si hay usuarios usando el equipo.

shutdown -r +5 Se requiere mantenimiento del equipo
Aca  vamos a reiniciar a los 5 minutos enviando un mensaje.

shutdown -h 23:59
Apagar el sistema justo antes de la medianoche.

shutdown -h now y shutdown -r now causan un efecto inmediato por lo cual ejecutarlo si se sabe que nadie esta usando el equipo.

Con esto vimos ya todo lo referente a 101.3 y finalizamos el topico 101

Creando una maquina virtual con VMware

*.Vamos a realizar una serie de pasos para crear una maquina virtual con VMwAre Workstation 7.1.1.*

*.Vamos a  File, New, Virtual Machine.*

*.Ahora elegimos Custom.*

*.Vemos cual elegir, la que tenga mas soporte esa elegimos.*

*.En esta ventana vamos a elegir el medio de instalacion, en nuestro caso una iso de un cd.*

*.Ahora elegimos el tipo de Sistema operativo a instalar.*

*.Ahora vamos a seleccionar donde la queremos crear y que nombre le ponemos a la maquina.*

*.Seleccionamos la memoria que le queremos instalar.*

*.Vamos a elegir como van a funcionar las placas de red, les recomiendo bridge pero si tienen problemas pasenlas a nat.*

*.Seleccionamos el tipo de controladora.*

*.Ahora vamos a elegir el medio en el cual vamos a instalar nuestro sistema, para
eso elegimos un disco rigido virtual nuevo.*

*.Tipo de disco virtual nuevo, prueben con scsi.*

*.Setear opciones de disco, tamaño y demas..*

*.Le ponemos un nombre al disco y le damos una ubicacion.*

*.Le damos finalizar y listo tenemos nuestra maquina virtual.*

*.Aca vemos como queda nuestro panel de configuracion, despues tan solo play y sale andando.*

*.Saludos 🙂 .*

Instalando Debian Lenny

*.Instalando Debian Lenny.*

Seguramente cuando lean este post la version estable va a ser otra.
Leer Versiones

La instalacion que se va a realizar es usando VMware workstation con el primer cd de Debian Lenny (i386).Cd’s—>Bajar Cd 1
*.Aca les dejo un enlace para que vean como crear una maquina virtual.*
Crear Maquina Virtual

*.Una vez que crean la maquina virtual , le indican que arranque por cd y la encienden van a tener esta opcion.*

*.Elijan la primera dado que vamos a realizar una instalacion con la grafica basica de la consola de texto*
*.Luego vamos a tener esta otra pantalla donde seleccionamos el idioma.*

*.Aca vamos a elegir el pais , esto es importante porque nos va a definir el huso horario.*

*.Aca vamos a elegir el mapa de teclado que corresponda.*

*.Despues de eso nos  va a empezar a detectar hardware y va a intenter configurarnos la red, si tenemos mas de una placa de red le ponemos cual queremos configurar para que pueda asignarle una ip.*

*.Aca vemos como me asigna una ip, en nuestro caso no hace falta porque vamos a realizar la instalacion desde el cd y no vamos a consultar a ningun repositorio extra.*

*.Luego nos va a pedir un  nombre para el equipo.*

*.A continuacion nos pide un nombre para el dominio, pueden ponerle el que quieran despues lo van a poder modificar.*

*.Aca tenemos la parte complicada de la particion.
Pero vamos a usar la particion clasica y como estamos en una maquina virtual, podemos jugar tranquilo sin el miedo de perder datos.*

*. Aca nos muestra el disco que vamos a utilizar para nuestra instalacion.*

*.Como elegimos guiada automatica nos va a convenir elegir tambien que lo siga haciendo todo solo y eligiendo que lo haga todo en una sola particion.*
*.Despues va a ver tiempo para probar otras formas...*

*.Tenemos un gestor de disco donde podemos armar nuestro tipo de particionado, pero como elegimos automatico lo hizo solo y nos va a mostrar como quedaria, asi que le ponemos que si.*

*.Aca es cuando empieza a realizar todos los cambios en el disco, despues de esto no hay marcha atras :S .*

*.Como ven ya estamos en la etapa de instalacion.*

*. Y si se toma un tiempo..*

*. Luego de la espera se viene la parte donde nos pide que configuremos
nuestros usuarios, empezando por el de root.
Hay que configurar la clave de root.*

*.Luego nos pide que escribamos la clave devuelta.*

*.Ahora viene la parte donde hay que configurar un usuario para nuestro
equipo, para eso hay que definirle un nombre completo que lo identifique.*

*. Luego se tiene que definir propiamente el nombre de usuario que es quien se va a autenticar con el equipo.*

*. Ahora si definimos una clave para el usuario.*

*. Luego tenemos que repetir la clave anteriormente escrita.*

*. Luego nos pregunta si queremos buscar por otros cd/dvd de instalacion
en este caso solo vamos a usar uno asi que le ponemos que no.*

*. Tambien nos va a preguntar si queremos agregar un repositorio externo para que baje paquetes por internet, para no hacerlo mas lento
le decimos que no.*

*. Entonces ahora nos encontramos devuelta con la etapa de instalacion.*

*. Nos va a preguntar si queremos formar parte de un proyecto
para  poder aportar de informacion a los desarrolladores, tambien que no ponemos dado que esto es una maquina virtual, si fuera nativa ahi si podriamos ayudar.*

*.Ahora si llegamos a la parte donde tenemos que elegir que tipo de sistemas
vamos a instalar, podriamos elegir solo base asi tenemos lo basico y despues
poder ir instalando mas cosas, pero elijamos la grafica tambien.*

*.Ahora devuelta la espera :) .*

*. Ya arrimandonos a la tranquera... Nos pide instalar el gestor de arranque,
elegimos  grub .*

*.Ahora si vemos como se va instalando.*

*.Instalacion Completada :), le damos en continue/continuar .*

*.Vemos como se va reiniciando .*

*.La maquina ahora esta arrancando y tenemos el gestor de arranque
donde nos muestra que sistema elegir, dejamos que arranque solito .*

*.Ahora si ya iniciar nuestra sesion con el usuario creado, se acuerdan la clave me imagino no? .*

*. Bueno esto fue todo espero que les sirva.*
Fuente:Debian Install

Preparando LPIC-1 103.2 Procesar flujos de texto usando filtros

*.Aca vamos a ver el topico 103.2.*

*.103.2 Procesar flujos de texto usando filtros.*

Muchos de los comandos que vamos a usar van a ser utilizados como filtros en donde nos van a ir quedando comandos cada vez mas complejos porque los vamos a ir uniendo a medida que veamos todos. Esto se debe a que vamos a ir pasandole la salida de cada comando a otro comando.

*. Comando CAT .*

Con este comando vamos a imprimir el contenido del archivo a la salida estandar.
[root@restauracion ~]# cat -s rino
a

s

g
w
q
e
k

[root@restauracion ~]#
Aca me va a mostrar el contenido del archivo pero si este posee renglones en blanco solo me mostrara uno por linea.

Aca con esta opcion me va a mostrar los caracteres no imprimibles como el fin de linea o el tab.
[root@restauracion ~]# cat -A rino
a$
$
$
s$
$
$
g$
w$
q$
e$
k$
$
[root@restauracion ~]#

Depues podemos usar el cat sin parametros

[root@restauracion ~]# cat rino
a

s

g
w
q
e
k

[root@restauracion ~]# cat rino > rino1
[root@restauracion ~]#
Ahi como ven primero lo mostre en la pantalla, despues lo mande a otro archivo.

*. Comando CUT .*
Con este comando vamos a poder cortar ciertas partes de nuestra busqueda, veamos como seria.

[root@restauracion ~]# cut -c1-10 rino.pwd 
****************** corte la salida
dspam:x:10
educacioni
apache:x:4

[root@restauracion ~]#
En este caso con la opcion -c1-10 le dije corte por caracteres mostrandolo en columnas, (el archivo es mi passwd).
[root@restauracion ~]# cut -c1-10,22-30 rino.pwd
************ Corte la salida
dspam:x:10o own dsp
educacioni::/home/e
apache:x:4:/var/www
[root@restauracion ~]#
Aca como ven le dije que ademas de ir 1-10 valla tambien de 22-30.

Ahora vamos a usar una de las opciones mas usadas:

[root@restauracion ~]# cut -d: -f1 rino.pwd 
dspam
educacionit
apache
[root@restauracion ~]#
Esta opcion -d: me dice que es el delimitador y -f1 que va a agarrar el primer campo.
[root@restauracion ~]# cut -d: -f1,5 rino.pwd
dspam:User to own dspam directories and default processes
educacionit:
apache:Apache
[root@restauracion ~]#
Aca como ven elegi dos campos -f1,5 el 1 y el 5 si quisiera un rango seria -f1-5 o varios -f1-4,5,8

*.Comando EXPAND.*
Su uso mas importante es de convertir tabs a espacios.

[root@restauracion ~]# cat tab
        hola    como    estas
yo      bien    si      ahh
[root@restauracion ~]#
[root@restauracion ~]# expand -t1 tab
 hola como estas
yo bien si ahh
[root@restauracion ~]#
Aca con -t1 le especifique donde termina el tab asi que con uno me queda un tab de 1 caracter.
[root@restauracion ~]# expand -it23 tab
                       hola     como    estas
yo      bien    si      ahh
[root@restauracion ~]#
Aca con la opcion -it23 , le digo que con i solo cambie los del inicio, despues la otra ya se vio.

*.Comando FMT.*[1]
Este es un comando que actualmente no es muy usado pero nos va a servir para unir dos archivos de diferentes maneras.

[root@restauracion ~]# fmt  -s  tab   rino
        hola    como    estas
yo      bien    si      ahh
a

s

g
w
q
e
k

[root@restauracion ~]#
Aca como ven hicimos un slipt basico, unimos los dos archivos.
[root@restauracion ~]# fmt -u rino
a

s

g w q e k

[root@restauracion ~]#
Aca como vemos me unio los renglones. Este comando  nos permite darle formato al texto.
Para mas info ver la fuente [1]

*.Comando HEAD.*
Con este comando voy a poder ver la parte superior de un archivo.

[root@restauracion ~]# head -c 2 rino
a
[root@restauracion ~]#
Imprime los primeros n bytes pero si le pondria head -c 2k los primeros 2k y con m megas.
[root@restauracion ~]# head -n 1 rino
a
[root@restauracion ~]#
Aca me muestra las  primeras n lineas en este caso 1, si le pongo 10 me mostraria 10.
El valor por defecto de head si no se le pone nada es 10 lineas.

*. Comando JOIN.*[2][3]
Otro comando que tuvo su epoca de oro.. al menos que seas muy rebuscado !!
Para mas info ver como funiona un join a nivel base de datos. 🙂

[root@restauracion ~]# cat file1
1 Jack Wallen
2 Jessica Wallen
J3 ohnny Wallen
4 Jeri Wallen
[root@restauracion ~]# cat file2
1 123-45-6789
2 234-56-7890
3 345-67-8901
4 456-78-9012
[root@restauracion ~]#
[root@restauracion ~]# join -j1  file1 file2
1 Jack Wallen 123-45-6789
2 Jessica Wallen 234-56-7890
3 Johnny Wallen 345-67-8901
4 Jeri Wallen 456-78-9012
[root@restauracion ~]#
Aca vemos que hizo un join por medio del campo del archivo 1
Tambien se puede usar con join file1 file2
[root@restauracion ~]# join -1 4 -2 3 -o 1.1 -o 2.1 -o 1.6 -t":" /etc/passwd /etc/group
**********salida cortada
rino:rino:/home/rino
tomcat:tomcat:/usr/share/tomcat5
named:named:/var/named
educacionit:educacionit:/home/educacionit
apache:apache:/var/www
[root@restauracion ~]#

*.Comando NL.*
Con estecomando vamos a poder enumerar las lineas dependiendo del estilo que le demos.

El archivo que vamos a usar:
[root@restauracion ~]# cat nl
\:\:\:
header
\:\:
line1
line2
line3
\:
footer
\:\:\:
header
\:\:
line1
line2
line3
\:
footer
[root@restauracion ~]#
[root@restauracion ~]# nl  -h a nl

     1  header

     2  line1
     3  line2
     4  line3

       footer

     1  header

     2  line1
     3  line2
     4  line3

       footer
[root@restauracion ~]#
Aca vemos que le dimos con -h un estilo (seteo de estilo header) con -a numero todo lo que corresponda a eso.

[root@restauracion ~]# nl  -b a nl

       header

     1  line1
     2  line2
     3  line3

       footer

       header

     1  line1
     2  line2
     3  line3

       footer
[root@restauracion ~]#
Aca vemos que le dimos con -b un estilo (seteo de estilo body) con -a numero todo lo que corresponda a eso.
[root@restauracion ~]# nl  -f a nl

       header

     1  line1
     2  line2
     3  line3

     4  footer

       header

     1  line1
     2  line2
     3  line3

     4  footer
[root@restauracion ~]#
Aca vemos que le dimos con -b un estilo (seteo de estilo footer) con -a numero todo lo que corresponda a eso.
Tambien tiene otros parametros como t (solo numera lineas no vacias), pregexp numera lineas que cumplan con la expresion regular.

*.Comando OD.*[4]
Con este comando voy a poder volcar los datos a octal ,hexadecimal, o decimal.

[root@restauracion ~]# cat file5
a1\n
A1\n
[root@restauracion ~]#
[root@restauracion ~]# od -h file5
0000000 3161 6e5c 410a 5c31 0a6e
0000012
[root@restauracion ~]#
Lo vuelca en hexadecimal (od -t x2 file5)
[root@restauracion ~]# od -b file5
0000000 141 061 134 156 012 101 061 134 156 012
0000012
[root@restauracion ~]#
Lo vuelca en octal ( od -t oC file5 es lo mismo)
[root@restauracion ~]# od -t a file5
0000000   a   1   \   n  nl   A   1   \   n  nl
0000012
lo mismo que con od -a file5 , la salida como nombre de caracteres.
[root@restauracion ~]# od -t c file5
0000000   a   1   \   n  \n   A   1   \   n  \n
0000012
lomismo que con od -c file5 , aca la salida es por codigo ASCII
[root@restauracion ~]#

*.Comando PASTE.*[3]
Muy similar al join.

[rino@restauracion ~]$ cat file1
Casa
Et
Telefono
[rino@restauracion ~]$ cat file2
Telefono
Casa
Telefono
[rino@restauracion ~]$
[rino@restauracion ~]$ paste file1 file2
Casa    Telefono
Et      Casa
Telefono        Telefono
[rino@restauracion ~]$
Aca vemos como unio los dos archivos.
[rino@restauracion ~]$ paste -d'@' file1 file2
Casa@Telefono
Et@Casa
Telefono@Telefono
[rino@restauracion ~]$
Aca como ven con la opcion -d'@'  pego los archivos con ese delimitador.
[rino@restauracion ~]$ paste -s file1 file2
Casa    Et      Telefono
Telefono        Casa    Telefono
[rino@restauracion ~]$
Aca como ven los pone en una linea por columna.

*. Comando PR.*
Con este comando vamos a poder paginar para poder mandar a imprimir texto por ejemplo.

Prueben esto:
ls -a | pr -n -h "Files in $(pwd)"
*** corto salida
2010-08-25 22:32               Files in /home/rino                Page 4

  169   .mcop
  170   .mcoprc
  171   .metacity

Para mas info miren este enlace [5]

*.Comando Sort.*[2]
Este comando nos va a permitir ordenar. Veamos como funciona.

[rino@restauracion ~]$ sort -r file1
Telefono
Et
Casa
[rino@restauracion ~]$
Con -r acomoda al reves
[rino@restauracion ~]$ sort file2
Casa
Telefono
Telefono
[rino@restauracion ~]$
Sin parametro ordena alfabeticamente
Con la opcion -n ordena por numero
Con la opcion  -d ordena solo por espacios en blanco y caracteres alfanumericos.
Con la opcion -f diferencia entre mayusculas y minusculas
[rino@restauracion ~]$ ls -la |sort  -n -k 5
*** corto
-rw-rw-r--  1 rino rino  2408172 Jun 22 22:49 wikimedia 2.pdf
-rw-r--r--  1 rino rino  2710249 May 26 13:48 ibmsamqt-3.2.3.1-2.i386.rpm
-rw-rw-r--  1 rino rino  3360412 Jun 10 00:38 vlc-0.7.0-1.i386.rpm
****corto
[rino@restauracion ~]$
Como ven aca ordeno numericamente por el campo que le especifique usando -k Numero de Campo.

*.Comando SLIPT.*
Me va rearmando varios archivos desde un archivo original, con ejemplos lo vamos a ver mejor.

[rino@restauracion ~]$ cat file
1 rino
2 juan
3 pedro
4 Maria
5 Micaela
6 Juan Manuel
[rino@restauracion ~]$
Me va a dividir el archivo en n partes teniendo en cuenta las lineas que tengo
split -2 file salida_
salida_aa
1 rino
2 juan
salida_ab
3 pedro
4 Maria
salida_ac
5 Micaela
6 Juan Manuel

Por defecto es 1.

*.Comando TAC.*
Este comando hace todo lo contrario al cat.

[root@restauracion ~]# cat tac
uno
dos
tres
[root@restauracion ~]# tac tac
tres
dos
uno
[root@restauracion ~]#

*.Comando TAIL.*
Con este comando vamos a poder ver la cola de los archivos y otras coas mas.

[root@restauracion ~]# tail -n 1 tac
tres
[root@restauracion ~]#
con -n 1 le digo que veo solo una linea.
[root@restauracion ~]# tail -c 1k tac
uno
dos
tres
[root@restauracion ~]#
con -c 1k veo los primero 1k del archivo.
Y una opcion muy buena es usarlo con -f
tail -f /var/log/messages
me toma el control de la shell y se queda esperando que se escriba el archivo para mostrarme en tiempo real lo que se va escribiendo.

*.Comando TR.*
Con este comando vamos a poder traducir caracteres, de un string pasar a otro string.

Parametros
a-z   todos los caracteres de la a la z
\\ un caracter \
\nnn un caracter ascii con el valor octal nnn
\x  Caracteres de control -->

\a bell
\b backspace
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab

De uso mas frecuente:
-d borra los caracteres  en el string1 de la salida.
-s borra los caracteres repetidos
-c se usa para complentar al string1 o todos los caracteres que no estan.

Ejemplos:
[root@restauracion ~]# cat file1 | tr a-z A-Z
1 JACK WALLEN
2 JESSICA WALLEN
3 JOHNNY WALLEN
4 JERI WALLEN
[root@restauracion ~]#
[root@restauracion ~]#  cat file1 | tr '[:lower:]' '[:upper:]'
1 JACK WALLEN
2 JESSICA WALLEN
3 JOHNNY WALLEN
4 JERI WALLEN
[root@restauracion ~]#
Traduce todo a mayusculas.

Ahora modifico el file para ver otro ejemplo:
[root@restauracion ~]# cat file1
1 Jack Wallen
2 Jessica    Wallen
3 Johnny Wallen  aa
4 Jeri Wallen
[root@restauracion ~]#
[root@restauracion ~]# cat file1 | tr -s '[:blank:]'
1 Jack Wallen
2 Jessica Wallen
3 Johnny Wallen aa
4 Jeri Wallen
[root@restauracion ~]#
Como ven saco los espacios en blanco repetidos.
Ultimo ejemplo le agrego tabuladores:
[root@restauracion ~]# cat file1
1        Jack Wallen
2 Jessica    Wallen
3 Johnny        Wallen  aa
4 Jeri Wall     en
[root@restauracion ~]#
[root@restauracion ~]# cat file1 | tr -dc '[:print:]\n'
1 Jack Wallen
2 Jessica    Wallen
3 Johnny Wallen  aa
4 Jeri Wallen
[root@restauracion ~]#
Asi pueden ver como elimina los caracteres no imprimibles, salvo el caracter de nueva linea.

*.Comando UNEXPAND.*
Convierte espacios a tabulaciones.

[root@restauracion ~]# unexpand rino
rino     hol    si  a
habitacion si   hola
[root@restauracion ~]# unexpand -t1 rino
rino                                    hol                             si              a
habitacion si                   hola
[root@restauracion ~]#
Convirtio los espacios en tabulaciones.

*.Comando UNIQ.*
Con este comando vamos a poder filtar por los repetidos o los unicos.

[root@restauracion ~]# cat rino
Juan
Pedro
Maria
Rino
Rino
Marina
Pedrito
Hola
Hola
[root@restauracion ~]# uniq rino
Juan
Pedro
Maria
Rino
Marina
Pedrito
Hola
[root@restauracion ~]#
Como ven aca no muestra los repetidos.
[root@restauracion ~]# uniq -c rino
      1 Juan
      1 Pedro
      1 Maria
      2 Rino
      1 Marina
      1 Pedrito
      2 Hola
[root@restauracion ~]#
Cuenta las repeticiones.
[root@restauracion ~]# uniq -d rino
Rino
Hola
[root@restauracion ~]#
Muestra los que se repiten unicamente.
[root@restauracion ~]# uniq -u rino
Juan
Pedro
Maria
Marina
Pedrito
[root@restauracion ~]#
Muestra los que nunca se repiten.

*.COmando WC.*
Sirve para contar lineas, caracteres entre otras cosas.

[root@restauracion ~]# wc rino
 9  9 52 rino

Aca cuenta todo .. palabras, lineas, carateres.
[root@restauracion ~]# wc -c rino
52 rino
Cuenta carateres
[root@restauracion ~]# wc -l rino
9 rino
Cuenta lineas
[root@restauracion ~]# wc -w rino
9 rino
Cuenta palabras.
[root@restauracion ~]#

*. Esto fue todo el topico 103.2, espero agregar algo mas en otro momento. Saludos:*

Fuente: FMT
JOIN SORT
JOIN HEAD TAIL CUT GREP PASTE
OD
PR

Preparando LPIC-1 101.2 Arrancar el sistema

*.101.2 Arrancar el sistema.*

En este topico vamos a ver como es el sistema de arranque de nuestro Linux , los diferentes gestores de arranques disponibles y los archivos de configuracion referidos a estos.

*. Gestores de arranque.*

Tenemos dos gestores de arranque mas conocidos en linux Lilo y Grub.
Al iniciarse el equipo realiza todo los pasos correspondientes al post del bios en donde controla todo el hardware para luego pasarle el control a un sistema operativo en donde lee el sector de mbr y detecta a donde tiene que ir a buscar el sistema operativo en donde ahi empieza a jugar el rol del gestor de arranque (grub, lilo)

Los archivos de configuracion:

/etc/lilo.conf

# cat /etc/lilo.conf
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear
image=/boot/vmlinuz-2.4.18-14
label=linux
initrd=/boot/initrd-2.4.18-14.img
read-only
append="root=LABEL=/"
other=/dev/hda1
optional
label=Windows
[18]pagina 65 a 69




/boot/grub/menu.lst

#boot=/dev/sda
default=4
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-194.11.1.el5xen)
        root (hd0,1)
        kernel /boot/xen.gz-2.6.18-194.11.1.el5
        module /boot/vmlinuz-2.6.18-194.11.1.el5xen ro root=LABEL=/ rhgb quiet
        module /boot/initrd-2.6.18-194.11.1.el5xen.img
title Red Hat Enterprise Linux Server (2.6.18-194.8.1.el5xen)
        root (hd0,1)
        kernel /boot/xen.gz-2.6.18-194.8.1.el5
        module /boot/vmlinuz-2.6.18-194.8.1.el5xen ro root=LABEL=/ rhgb quiet
        module /boot/initrd-2.6.18-194.8.1.el5xen.img
title Red Hat Enterprise Linux Server (2.6.33.3)
        root (hd0,1)
        kernel /boot/vmlinuz-2.6.33.3 ro root=LABEL=/ rhgb quiet
        initrd /boot/initrd-2.6.33.3.img
title Red Hat Enterprise Linux Server (2.6.30.10)
        root (hd0,1)
        kernel /boot/vmlinuz-2.6.30.10 ro root=LABEL=/ rhgb quiet
        initrd /boot/initrd-2.6.30.10.img
title Red Hat Enterprise Linux Server (2.6.18-194.el5)
        root (hd0,1)
        kernel /boot/vmlinuz-2.6.18-194.el5 ro root=LABEL=/ rhgb quiet
        initrd /boot/initrd-2.6.18-194.el5.img
title Other
        rootnoverify (hd0,0)
        chainloader +1
[root@restauracion 0000:00:02.0]#

Tenemos que ser capaces de poder entender como funciona el grub para asi lograr cambiar el sistema que arranca por defecto.[14]
Tenemos dos valores arriba default y timeout en donde podemos cambiar el tiempo de espera y el que arranca por defecto.
Tambien hay que saber le orden del disco (hd0,0) es el equivalente al disco primero en la particion primera.
Podriamos tambien ponerle clave a nuestro grub para que no nos lo puedan editar (ver link [14]).
Tendriamos que leer bien la documentacion para interactuar con los parametros de estos dos archivos de configuracion del grub asi podemos entender bien como funciona.[15][16][17][18]

*.Modularizacion de Kernel.*
Los kernel modernos de hoy en dia estan modularizados estandos estos compilados en el y solamente son cargados en el momento que los necesitemos. Estos modulos estan separados del kernel y son cargados o borrados por el superusuario dependiendo de la situacion que este expuesta. Sin embargo hay ciertos parametros en el archivo del gestor de arranque y de la linea comandos del kernel que afectan a este , dado que estos no controlan modulos del kernel.
Para enviarle parametros a un modulo del kernel tienen que ser insertados in un archivo de configuraicon especifico /etc/modprobe.conf , /etc/modprobe.d/modprobe.conf o /etc/modprobe.d/aliases.
Aqui vamos a encontrar los distintos parametros que puede necesitar un modulo (direccion I/O,interrupcion,canal DMA, etc). Si quisieramos cambiar algo porque es requerido por el hardware tendriamos que especificarlo ahi.

*.Mensajes del Kernel al inicio del equipo.*

Tenemos que saber que es cada mensaje que se muestra al inicializarse nuestro equipo y es por eso que estos mensajes que va largando por la salida estandar van a ser guardados en un log por medio del demonio syslogd :

* Identificacion del Kernel
* Informacion de la cpu y la memoria
* Informacion sobre el hardware detectado (mouse,teclado,puertos, discos, etc)
* Informacion de las particiones y de su estado.
* Inicializacion de la red.
* Informacion de los modulos de kernel cargados

Todo esto va a ser mostrado tan rapidamente que no vamos a poder observarlo y por eso vamos a utilizar un comando que nos va a permitir entender que fue lo que paso.

*.Comando dmesg.*

Salida del comando dmesg

Linux version 2.6.18-194.el5 (mockbuild@x86-007.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Tue Mar 16 21:52:43 EDT 2010
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000010000 - 000000000009f000 (usable)
 BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000d2000 - 00000000000d4000 (reserved)
*
*Se acorta la salida porque es muy extensa.
*
 BIOS-e820: 00000000ff800000 - 0000000100000000 (reserved)
2166MB HIGHMEM available.
896MB LOWMEM available.
found SMP MP-table at 000f6810
Memory for crash kernel (0x0 to 0x0) notwithin permissible range
disabling kdump
Using x86 segment limits to approximate NX protection
On node 0 totalpages: 784080
  DMA zone: 4096 pages, LIFO batch:0
  Normal zone: 225280 pages, LIFO batch:31
  HighMem zone: 554704 pages, LIFO batch:31
DMI present.
Using APIC driver default
ACPI: RSDP (v002 LENOVO                                ) @ 0x000f67d0
ACPI: XSDT (v001 LENOVO TP-79    0x00002110  LTP 0x00000000) @ 0xbf6d1486
*
*
*
ACPI: PM-Timer IO Port: 0x1008
ACPI: Local APIC address 0xfee00000
ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
Processor #0 6:14 APIC version 20
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled)
Processor #1 6:14 APIC version 20
*
*
*
Built 1 zonelists.  Total pages: 784080
Kernel command line: ro root=LABEL=/ rhgb quiet
mapped APIC to ffffd000 (fee00000)
mapped IOAPIC to ffffc000 (fec00000)
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
CPU 0 irqstacks, hard=c0768000 soft=c0748000
PID hash table entries: 4096 (order: 12, 16384 bytes)
Console: colour VGA+ 80x25
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 3102776k/3136320k available (2178k kernel code, 32144k 
*
*
*
Linux Plug and Play Support v0.97 (c) Adam Belay
pnp: PnP ACPI init
pnp: PnP ACPI: found 12 devices
usbcore: registered new driver usbfs
usbcore: registered new driver hub
PCI: Using ACPI for IRQ routing
PCI: If a device doesn't work, try "pci=routeirq".  If it helps, post a report
NetLabel: Initializing
NetLabel:  domain hash size = 128
NetLabel:  protocols = UNLABELED CIPSOv4
NetLabel:  unlabeled traffic allowed by default
PCI: Bridge: 0000:00:1c.0
*
*
*
agpgart: Detected an Intel 945GM Chipset.
agpgart: Detected 7932K stolen memory.
agpgart: AGP aperture is 256M @ 0xd0000000
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled
brd: module loaded
*
*
*
[root@restauracion ~]# dmesg > /tmp/salida.out
[root@restauracion ~]# wc -l /tmp/salida.out 
1280 /tmp/salida.out
[root@restauracion ~]#
Tengo mas de 1200 lineas.

Otro archivo que podria ver es el /var/log/messages o /var/log/syslog y /var/log/dmesg ( el comando muestra el contenido de este).

*. Aca finalizamos el topico 101.2.*


*. 101.3 Cambiar los niveles de ejecución, apagar o reiniciar el sistema.*

Fuentes:
[1]http://wiki.lpi.org/wiki/LPIC-1_Objectives(ES)
[2]http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/ref-guide/ch-proc.html
[3]http://docsrv.sco.com/HDK_concepts/ddT_majmin.html
[4]Documento bajado de Internet
[5]http://book.opensourceproject.org.cn/embedded/embeddedprime/opensource/0136130550/ch08lev1sec2.html
[6]http://es.wikipedia.org/wiki/Sysfs
[7]http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/es-ES/Installation_Guide/s1-s390info-sysfs.html
[8]http://www.redhat.com/magazine/002dec04/features/udev/
[9]http://www.redhat.com/magazine/003jan05/features/dbus/
[10]http://www.redhat.com/magazine/003jan05/features/hal/
[11]http://julio-linux.esdebian.org/32607/herramienta-dmidecode
[12]http://www.taringa.net/posts/linux/1179139/–LSHW—Como-Obtener-las-especificaciones-de-hardware-en-Li.html
[13]http://blog.pucp.edu.pe/item/88256/detectando-memorias-usb-en-linux-los-servicios-hal-y-d-bus
[14]http://www.guia-ubuntu.org/index.php?title=GRUB
[15]http://es.wikipedia.org/wiki/Proceso_de_arranque_en_Linux
[16]http://tldp.org/HOWTO/LILO.html
[16]http://control-escape.com/linux/lilo-cfg.html
[17]http://www.mcmcse.com/linux/lpi101gplstudyguide.shtml
[18]http://www.ledge.co.za/software/lpinotes/101-letter.pdf

Preparando LPIC-1 101.1 Determinar y configurar parámetros del hardware

*.101.1 Determinar y configurar parámetros del hardware.[1]*

En este apartado vamos a ver diferentes temas referidos al hardware y su correlacion con el sistema operativo.

Tendriamos que empezar a mencionar distintos componentes dentro de un equipo tales como perifericos de entrada y salida, chipsets integrados a nuestro equipo y todo el hardware que involucra una pc. Para poder ver esta informacion tenemos un programa llamado BIOS (Basi Input /Ouput System) en donde vamos a poder ver un listado y configuracion referente a cada componente de mi equipo con una serie de parametros especificos para cada uno. Toda esta informacion puede ser manipulada desde ahi con diferentes tipos de opciones. Una de las opciones que mas no va importar ahora es el tema de los IRQ , I/O, fecha , puertos paralelos y serie entre otros. Lo que nos van a estar evaluando en LPIC-1 es que tengamos una idea de como es que funciona el BIOS ya que diferentes fabricantes tienen distintas configuraciones por eso hay que saber que podemos arrancar el equipo desde un cd, red,disco interno , puerto serial o un USB, realizar distintas configuracions de los recursos mediante la BIOS.
Otra cosa a tener en cuenta es saber diferencias entre IDE y SCSI tener una nocion de que son estas tecnlogias tanto para un disco rigido como un cd/dvd.
Para ir cerrando un poco toda esta idea vamos a ver como es que nuestro sistema operativo Linux interactua con nuestro hardware desde un nivel logico observando determinados archivos.

*. Empezemos con este directory /proc .*

El kernel de Linux tiene dos funciones principales: controlar el acceso a los dispositivos físicos del ordenador y establecer cuándo y cómo los procesos interactúan con estos dispositivos. El directorio / proc / contiene una jerarquía de archivos especiales que representan el estado actual del kernel – permitiendo a las aplicaciones y usuarios mirar detenidamente en la vista del kernel del sistema.
Dentro del directorio / proc /, se puede encontrar una gran cantidad de información que detalla el hardware del sistema y cualquier proceso en ejecución. Además, algunos de los archivos dentro del árbol de directorios / proc / pueden ser manipulados por los usuarios y las aplicaciones se comuniquen los cambios de configuración al kernel.[2]

*.Contenido de algunos de los contenidos /proc.*

/proc/dma
/proc/interrupts
/proc/ioports
/proc/cpuinfo
/proc/swaps
/proc/bus/pci

*.Con esto nos basta para saber que los recursos que usa el sistema los puedo encontrar aca, despues tan solo queda hacer un cat a cada archivo y ver que informacion me devuelve.*
Toda la informacion que contiene en /proc es usada por el sistema cuando utilizamos determinados comandos , ya vamos a ver mas adelante como cierta informacion que me devuelve un comando la puedo ver tambien mirando /proc.

*. Ahora vamos a explicar la nomenclatura que usa para los devices mas vistos.*

Dispositivos de caracteres:

/dev/tty
/dev/console
input
raw
pts
lp

Dispositivos de Bloques

ramdisk
ide0
sd
device-mapper

Para mas informacion hacer un cat /proc/devices

*. Sigamos viendo ahora como maneja la nomenclatura de los dispositivos de bloques tales como los discos rigidos.*

[root@restauracion dev]# ls -l /dev/sd*
brw-r----- 1 root disk 8,  0 Aug 19 22:56 /dev/sda
brw-r----- 1 root disk 8,  1 Aug 20 15:59 /dev/sda1
brw-r----- 1 root disk 8,  2 Aug 19 22:56 /dev/sda2
brw-r----- 1 root disk 8,  3 Aug 19 22:56 /dev/sda3
brw-r----- 1 root disk 8,  4 Aug 19 22:56 /dev/sda4
brw-r----- 1 root disk 8,  5 Aug 19 22:56 /dev/sda5
brw-r----- 1 root disk 8, 16 Aug 22 13:47 /dev/sdb
brw-r----- 1 root disk 8, 18 Aug 22 13:47 /dev/sdb2
brw-r----- 1 root disk 8, 19 Aug 22 13:47 /dev/sdb3
[root@restauracion dev]#

*.Para entender un poco sobre el major number y minor number (root disk 8, 19) leer esta documentacion [3].*
Como vemos estos son dispositivos de bloque porque estan diferenciados con la letra b al principio “brw-r—–” asi tambien podriamos ver que hay del tipo caracter tambien crw-rw—- /dev/tty0.
Ahora volviendo al tema de los dispositivos en bloques vemos que estos comienzan con /dev/sda y luego tenemos otro llamado /dev/sda1 , esto es debido a que el primero hace referencia al disco rigido entero y por cada sda1 a sdax son las particiones de ese disco. Despues vemos que tambien tenemos sdb y sus correlativas particiones, aca la diferencia que marca el el ser sda,sdb,sdc es el orden de los discos siendo siempre sda el disco primero y sdb el segundo y asi sucesivamente, si fueran discos ide ya nomenclatura seria otra pero eso es cosa del pasado..

*. USB.*
*.Vamos a ver algunos comandos de manejo de USB (Universal Serial Bus) en donde por medio de el vamos a poder conectar diversos tipos de pereficos (teclados, discos rigidos, pen drive, camaras,impresoras,etc.*

Cuando se configura el núcleo, se ve una sección llamada “USB support” que contiene

opciones USB, conocido como Bus serie universal. USB es relativamente una nueva forma de

conectar periféricos al PC. Hoy en día, hay ratones, teclados, controladores de juegos, impresoras,

modems, etc como dispositivos USB. Como el soporte para USB de GNU/Linux es realmente

temprano, muchos usuarios Linux jamas han utilizado dispositivos USB en sus sistemas o no están

muy al día de como los soporta Linux. [4]
Los dispositivos USB son agregados al equipo en forma de arbol identificados univocamente por el sistema.

[root@restauracion dev]# lsusb  -t
Bus#  5
`-Dev#   1 Vendor 0x0000 Product 0x0000
  `-Dev#   2 Vendor 0x0a5c Product 0x2110
Bus#  4
`-Dev#   1 Vendor 0x0000 Product 0x0000
Bus#  3
`-Dev#   1 Vendor 0x0000 Product 0x0000
Bus#  2
`-Dev#   1 Vendor 0x0000 Product 0x0000
Bus#  1
`-Dev#   1 Vendor 0x0000 Product 0x0000
  `-Dev#   5 Vendor 0x1058 Product 0x070a
[root@restauracion dev]#

*. Existen tres tipos de controladores USB.*

*OHCI
*UHCI
*EHCI

Las controladoras OHCI y UHCI son USB 1.1 por lo cual son capaces de transmitir como maximo 12Mbps.
EHCI es USB 2.0 y puede transmitir teoricamente 480Mbps. Un dispositivo Usb 2.0 enchufado en uno Usb 1.1 unicamente va a ser capaz de transmitir a un maximo de 12Mbps.

Dispositivos USB

Existen actualmente una cantidad enormo de dispositivos Usb:
* Dispositivos de interface Humana (HID)
       -> Dispositivos de Entrada (mouse, teclado,etc)
*Dispositivos de Comunicacion
       ->Modems
       ->Wifi
*Dispositivo de almacenamiento masivo
       ->Dispositivos de disco, Lectores de tarjetas
*Audio
       ->Placas de sonido
*IrDA
       ->Dispositivos Infrarojos
*Impresoras
      ->Impresoras y cables Usb a puerto paralelo.

*.Drivers USB.*

El soporte USB fue agregado en el Kernel de desarrollo en la version 2.3.x en donde luego se agrego en la version 2.2.x pero no fue asi para le soporte de USB de almacenamiento masivo ( se uso en 2.3.x ) y luego con el tiempose agrego en el kernel 2.2.18.
No hay soporte de USB en el kernel 2.0.x y anteriores.

*. El driver USB en el Kernel de linux posee tres categorias:.*

Equipo controlador de drivers:
Aca incluye el usb-ohci.o (OHCI driver), usb-uhci.0 (UHCI driver)

Clases de Driver:
Aca incluye hid.0, usb-storage-o (driver de almacenamiento masivo), acmo.o (modelo de control automatizado [ACM] , en donde tambien es utilizado para la emulacion de los modem seriales, moden 3G), printer.o y audio.o.

Otros Driver de dispositivo
Hay una gran variedad de driver de dispositivos que no encajan en el estandar de clases de USB o no funncionan con alguno de los driver estandar de clases.

El soporte Usb es implementado por los driver en forma de capas. Arriba de todo se ecuentra usbcore.o, que provee soporte a todos los usb genericos de niveles superiores
Podriamos ver con lsmod o en /proc/modules varios dispositivos USB:

[root@restauracion dev]# cat /proc/modules  |grep usb
hci_usb 20317 2 - Live 0xf89d6000
bluetooth 53925 8 hidp,rfcomm,l2cap,hci_usb, Live 0xf8a18000
usb_storage 80673 1 - Live 0xf89e0000
scsi_mod 141973 13 sr_mod,be2iscsi,ib_iser,iscsi_tcp,bnx2i,cxgb3i,libiscsi2,scsi_transport_iscsi2,scsi_dh,sg,usb_storage,libata,sd_mod, Live 0xf8981000

[root@restauracion dev]# lsmod |grep -i usb
hci_usb                20317  2 
bluetooth              53925  8 hidp,rfcomm,l2cap,hci_usb
usb_storage            80673  1 
scsi_mod              141973  13 sr_mod,be2iscsi,ib_iser,iscsi_tcp,bnx2i,cxgb3i,libiscsi2,scsi_transport_iscsi2,scsi_dh,sg,usb_storage,libata,sd_mod
[root@restauracion dev]# 

*.Hotplug USB.*
El paquete hotplug ayuda en la administración de dispositivos conectados “en caliente”. Por
ejemplo añadiendo un nuevo elemento al sistema (camara digital) o bien quitando hardware ya
existente, hotplug se encargará de hacer que ese dispositivo esté disponible para el sistema.[4]

*. Ahora si veamos algunos ejemplos de los comandos referidos al hardware que tenemos instalado.*

lsmod
lsdev
lspci
insmod
rmod
modinfo
modprobe
lsub

*. Comando lsusb.*

Podemos utilizarlo de las siguentes maneras:
lsusb
[root@restauracion dev]# lsusb
Bus 004 Device 001: ID 0000:0000  
Bus 003 Device 001: ID 0000:0000  
Bus 005 Device 001: ID 0000:0000  
Bus 005 Device 002: ID 0a5c:2110 Broadcom Corp. Bluetooth Controller
Bus 002 Device 001: ID 0000:0000  
Bus 001 Device 005: ID 1058:070a Western Digital Technologies, Inc. 
Bus 001 Device 001: ID 0000:0000  
[root@restauracion dev]# 

lsusb -t
Se vio anteriormente la salida

lsusb -v
van a tener una informacion extensa y detallada que tambien la pueden ver desde aca.
[root@restauracion usb]# ls -la
total 0
drwxr-xr-x 7 root root 0 Aug 19 22:55 .
dr-xr-xr-x 6 root root 0 Aug 19 22:56 ..
dr-xr-xr-x 2 root root 0 Aug 19 22:55 001
dr-xr-xr-x 2 root root 0 Aug 19 22:55 002
dr-xr-xr-x 2 root root 0 Aug 19 22:55 003
dr-xr-xr-x 2 root root 0 Aug 19 22:55 004
dr-xr-xr-x 2 root root 0 Aug 19 22:55 005
-r--r--r-- 1 root root 0 Aug 22 13:47 devices
[root@restauracion usb]#

*. Comando lsmod.*
Con este comando vamos a poder ver informacion referida a los modulos cargados (/proc/modules)
lsmod –help
lsmod –verssion

[root@restauracion usb]# lsmod
Module                  Size  Used by
udf                    79077  0 
sr_mod                 19941  0 
i915                   24257  3 
drm                    65365  4 i915
ipt_MASQUERADE          7617  6 
bridge                 53469  0 
tun                    21441  0 
*
*Acorto la salida
*
libata                157317  2 ata_piix,ahci
sd_mod                 25281  7 
scsi_mod              141973  13 sr_mod,be2iscsi,ib_iser,iscsi_tcp,bnx2i,cxgb3i,libiscsi2,scsi_transport_iscsi2,scsi_dh,sg,usb_storage,libata,sd_mod
ext3                  125513  3 
jbd                    57321  1 ext3
uhci_hcd               25421  0 
ohci_hcd               25065  0 
ehci_hcd               33869  0 
[root@restauracion usb]#

*. Comando lsdev.*
Esta utilidad nos devolvera informacion acerca de nuestro hardware de systema (puertos , I/O). Es muy util para determinar que irq estoy usando para que nose produzcan incompatibilidades de hardware (ISA devices).

*.Comando lspci.*
Esta utilidad nos dara informacion de nuestros buses pci y de las placas instaladas.

lspci -t
[root@restauracion usb]# lspci -t
-[0000:00]-+-00.0
           +-02.0
           +-02.1
           +-1b.0
           +-1c.0-[0000:02]----00.0
           +-1c.1-[0000:03]----00.0
           +-1c.2-[0000:04-0b]--
           +-1c.3-[0000:0c-13]--
           +-1d.0
           +-1d.1
           +-1d.2
           +-1d.3
           +-1d.7
           +-1e.0-[0000:15-18]----00.0
           +-1f.0
           +-1f.1
           +-1f.2
           \-1f.3
[root@restauracion usb]#
lspci  -vv
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)
        Subsystem: Lenovo ThinkPad T60/R60 series
        Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- SERR- 

*. Comandos para manipular modulos.*[5]
Un modulo esta dinamicamente linkeado al kernel cuando este es cargado. Muchas veces pasa esto de que se carga automaticamente pero si no fuera el caso tendriamos que instalar codigo fuente de driver y hacer que estos se carguen como modules en el kernel y para eso tenemos una serie de comandos.
Con el comando lsmod ya vimo como se muestran los modulos cargados en el sistema.
Asi que ahora vamos a ver como cargar un modulo.

*.insmod y modprobe.*

[root@restauracion fat]# ls -la
total 72
drwxr-xr-x  2 root root  4096 Apr 29 18:39 .
drwxr-xr-x 31 root root  4096 Apr 29 18:39 ..
-rwxr--r--  1 root root 59472 Mar 16 23:24 fat.ko
[root@restauracion fat]# pwd
/lib/modules/2.6.18-194.el5/kernel/fs/fat
[root@restauracion fat]#
[root@restauracion fat]# insmod fat.ko 
[root@restauracion fat]# echo $?
0
[root@restauracion fat]#
Con insmod instalamos el modulo correspondiente pero no resuelve dependencia.
Con modprobe si podemos resolver las dependencias.
Aca estamos viendo como nos muestra que dependencias requiere un modulo en particular
[root@restauracion fat]# modprobe --show-depends fat
insmod /lib/modules/2.6.18-194.el5/kernel/fs/fat/fat.ko 
[root@restauracion fat]# modprobe --show-depends nfs
insmod /lib/modules/2.6.18-194.el5/kernel/net/sunrpc/sunrpc.ko
insmod /lib/modules/2.6.18-194.el5/kernel/fs/nfs_common/nfs_acl.ko 
insmod /lib/modules/2.6.18-194.el5/kernel/fs/fscache/fscache.ko 
insmod /lib/modules/2.6.18-194.el5/kernel/fs/lockd/lockd.ko 
insmod /lib/modules/2.6.18-194.el5/kernel/fs/nfs/nfs.ko 
[root@restauracion fat]#
Aca vamos a ver donde esta el modulo que buscamos.
[root@restauracion fat]# modprobe -l nfs
/lib/modules/2.6.18-194.el5/kernel/fs/nfs/nfs.ko
[root@restauracion fat]# modprobe -l ath5k
/lib/modules/2.6.18-194.el5/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko

*. Lo que podria hacer es sacar los modulos todos juntos o de a uno.*

Si utilizo el modprobe --show-depends  nfs, me va a mostrar todos los pasos que va a realizar para instalarlo y si utilizo modprobe -rav nfs me muestra todos los que uso para eliminarlo.
[root@restauracion fat]# modprobe -rav nfs
rmmod /lib/modules/2.6.18-194.el5/kernel/fs/nfs/nfs.ko
rmmod /lib/modules/2.6.18-194.el5/kernel/fs/lockd/lockd.ko
rmmod /lib/modules/2.6.18-194.el5/kernel/fs/fscache/fscache.ko
rmmod /lib/modules/2.6.18-194.el5/kernel/fs/nfs_common/nfs_acl.ko
remove { /bin/umount /var/lib/nfs/rpc_pipefs > /dev/null 2>&1 || :; } ; /sbin/modprobe -r --ignore-remove sunrpc
rmmod /lib/modules/2.6.18-194.el5/kernel/net/sunrpc/sunrpc.ko
[root@restauracion fat]#
Fijense que hay un insmod implicito, asi que como herramienta el modprobe es mas util.
[root@restauracion fat]# modprobe -av nfs
install /sbin/modprobe --first-time --ignore-install sunrpc && { /bin/mount -t rpc_pipefs sunrpc /var/lib/nfs/rpc_pipefs > /dev/null 2>&1 || :; }
insmod /lib/modules/2.6.18-194.el5/kernel/net/sunrpc/sunrpc.ko 
insmod /lib/modules/2.6.18-194.el5/kernel/fs/nfs_common/nfs_acl.ko 
insmod /lib/modules/2.6.18-194.el5/kernel/fs/fscache/fscache.ko 
insmod /lib/modules/2.6.18-194.el5/kernel/fs/lockd/lockd.ko 
insmod /lib/modules/2.6.18-194.el5/kernel/fs/nfs/nfs.ko 
[root@restauracion fat]#

*. rmod .*
Despues tenemos este comando rmod para borrar modulos, pero vamos a tener el mismo problema que insmod solo borra de a uno.

[root@restauracion fat]# rmmod sunrpc
ERROR: Module sunrpc is in use by nfs,lockd,nfs_acl
[root@restauracion fat]# 
Asi que tendriamos que liberar todos los modulos que lo estan usando.
Pero como vimos anteriormente hay que usar modprobe con sus variantes, es mas util.

*.Comando modinfo.*
Con este comando vamos a obtener informacion acerca de los modulos que consultemos.
Tener en cuenta que si tenemos varios kernel instalados en nuestro sistema cada modulo puede variar para cada kernel distinto.

[root@restauracion ext3]# modinfo -d ext3.ko 
Second Extended Filesystem with journaling extensions
[root@restauracion ext3]# modinfo -a ext3.ko 
Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
[root@restauracion cpufreq]# modinfo acpi-cpufreq.ko 
filename:       acpi-cpufreq.ko
alias:          acpi
license:        GPL
description:    ACPI Processor P-States Driver
author:         Paul Diefenbaugh, Dominik Brodowski
srcversion:     4D9DEC699250E79892A8403
depends:        
vermagic:       2.6.18-194.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
parm:           acpi_pstate_strict:value 0 or non-zero. non-zero -> strict ACPI checks are performed during frequency changes. (uint)
module_sig:     883f3504ba037471e1fa4939f6a62931122b1f09f496291fddfa6b65f23dfe37819241c3cb8465af09f5e66a0efcb46f861edcfbb6d558a87a78eb2093
[root@restauracion cpufreq]#
Tambien hay otras mas opciones tan solo hacer man  modinfo.

Algunos archivos a tener en cuenta referidos a los modulos.

[root@restauracion etc]# cat modprobe.conf
alias eth0 e1000e
alias scsi_hostadapter ata_piix
alias scsi_hostadapter1 ahci
alias scsi_hostadapter2 usb-storage
alias snd-card-0 snd-hda-intel
options snd-card-0 index=0
options snd-hda-intel index=0
remove snd-hda-intel { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-hda-intel
alias ath0 ath_pci
[root@restauracion etc]#

Otro mas:

[root@restauracion modprobe.d]# pwd
/etc/modprobe.d
[root@restauracion modprobe.d]# 
[root@restauracion modprobe.d]# ls -la
total 48
drwxr-xr-x   2 root root  4096 Aug 17 22:58 .
drwxr-xr-x 134 root root 12288 Aug 22 17:39 ..
-rw-r--r--   1 root root   810 Mar 10 10:10 blacklist
-rw-r--r--   1 root root   833 Dec 15  2009 blacklist-compat
-rw-r--r--   1 root root    83 Jul 27 07:54 blacklist-firewire
-rw-r--r--   1 root root  6111 Dec 15  2009 modprobe.conf.dist
-rw-r--r--   1 root root    49 May  3 20:18 vmware-fuse.conf
[root@restauracion modprobe.d]#
El comando modprobe -c , lee todos los archivos de configuracion y muestra lo que cargo.

*.Introuduccion a Sysfs.*[6]
Usar dispositivos en caliente (Hotplugging) es lo opuesto Coldpluggin, la habilidad de los sistemas de computadoras para agregar o remover hardware sin necesidad de apagar el sistema. Algunos dispositivos son coldplugging (ciertos chipset de pci soportan hotplug pero son demasiados caros y de uso exclusivo para ciertas arquitecturas) como ISA, PATA.
En casi todos los computadores las CPU y memorias son coldplugging pero en equipos de altos rendimientos poseen hotplugging de dichos componentes.
El kernel 2.6 de Linux introduce el sistema de archivos sysfs. El sistema de archivos sysfs se describe como una unión de los sistemas de archivos proc, devfs y devpty. El sistema de archivos sysfs enumera los dispositivos y los buses conectados al sistema en una jerarquía de archivos a la que se puede acceder desde el espacio del usuario. Está diseñado para manejar las opciones específicas al dispositivo y al controlador que previamente residían en /proc/, y cubren las adición dinámica de dispositivos ofrecida anteriormente por devfs.
El sistema de archivos sysfs está montado en /sys/ y contiene directorios que organizan los dispositivos conectados al sistema en varias formas diferentes.[7]
Si quisiera montar sysfs:
mount -t sysfs sysfs /sys
El proceso de udev utiliza sysfs para obtener la información que necesita acerca del hardware y crea archivos dinámicos de dispositivos mientras los módulos del kernel se cargan. El directorio / etc / udev.d posee todas las normas que deben aplicarse al agregar o quitar un dispositivo. Tales norman van a remover o cargar modulos.
D-Bus es una aplicación que utiliza sysfs para ejecutar un demonio de bus de mensajes. Es utilizadas para la radiodifusión eventos del sistema como "nuevo dispositivo de hardware añadido" o "Cola de impresión ha cambiado" y normalmente se lanzó por un guión de inicio llamada messagebus.[9]
El proceso de Hald es el demonio que mantiene una base de datos de los dispositivos conectados al sistema en tiempo real. El demonio se conecta al bus de mensajes D-Bus del sistema para proporcionar una API que las aplicaciones pueden utilizar para descubrir, monitorear e invocar operaciones en los dispositivos.[10]

*. Nos quedaron en el tintero un par de herramientas de analisis de hardware , lshw, lshal,dmidecode.*

*.dmidecode[11].*
Este comando nos devuelve informacion muy especifica de nuestro equipo, para eso hay una tabla de valores(ver link)
*.Obteniendo informacion de la memoria.*

[root@restauracion ~]# dmidecode -t 5
# dmidecode 2.10
SMBIOS 2.4 present.

Handle 0x0007, DMI type 5, 20 bytes
Memory Controller Information
        Error Detecting Method: None
        Error Correcting Capabilities:
                None
        Supported Interleave: One-way Interleave
        Current Interleave: One-way Interleave
        Maximum Memory Module Size: 2048 MB
        Maximum Total Memory Size: 4096 MB
        Supported Speeds:
                Other
        Supported Memory Types:
                DIMM
                SDRAM
        Memory Module Voltage: 2.9 V
        Associated Memory Slots: 2
                0x0008
                0x0009
        Enabled Error Correcting Capabilities:
                Unknown

[root@restauracion ~]#

*.lshw[12].*
LSHW es una herramienta que proporciona información detallada sobre la configuración de hardware de la máquina.
Como por ejemplo la configuración de memoria exacta, la versión de firmware , Mainboard configuración,la versión de CPU y la velocidad,la configuracion de cache, la velocidad del BUS, etc...
La información puede ser de salida en formato de texto, HTML o XML.
En la actualidad apoya DMI (x86 y sólo EFI), árbol de dispositivos OpenFirmware (PowerPC), PCI / AGP, ISA PnP (x86), CPUID (x86), IDE / ATA / ATAPI, PCMCIA (sólo probados en x86), y USB SCSI.

[root@restauracion ~]# lshw -html > /home/rino/Desktop/rino.html
Mirar archivo --> Salida
Otro ejemplo
Se puede usar
lshw -C disk
lshw -C memory
lshw -C processor
y asi para cada clase .

*.lshal.*
HAL se usa en diversas distribuciones Linux y justamente es el servicio que usan los entornos de escritorio (como Gnome, Xfce y KDE) para la detección de memorias USB, CD, cámaras fotográficas entre otros dispositivos y poder montarlos y mostrarlos en el escritorio automáticamente. Hay otras tecnologías detrás de HAL y D-BUS, como UDEV el cual es el que realmente interactúa inicialmente con el kernel (a través de la carpeta /sys) y luego actualiza HAL con los equipos detectados.[13]

[root@restauracion 0000:00:02.0]# lshal --monitor
Ahi va empezar a detectar dispositivos:
Aca le enchufe un pendrive
usb_device_951_162a_001D0F1F90CAF99167580B1B added
usb_device_951_162a_001D0F1F90CAF99167580B1B_if0 added
usb_device_951_162a_001D0F1F90CAF99167580B1B_if0_scsi_host added
usb_device_951_162a_001D0F1F90CAF99167580B1B_usbraw added
usb_device_951_162a_001D0F1F90CAF99167580B1B_if0_scsi_host_scsi_device_lun0 added
usb_device_951_162a_001D0F1F90CAF99167580B1B_if0_scsi_host_scsi_device_lun0_scsi_generic added
storage_serial_Kingston_DataTraveler_112_001D0F1F90CAF99167580B1B added
volume_part2_size_15474884608 added
volume_uuid_014f635f_14fc_4435_bae4_0579489b9f7d added
Otro ejemplo:
[root@restauracion 0000:00:02.0]# lshal |grep percen |awk '{print $3"%"}'
97%
Ahi me dice cuanto espacio tengo ocupado en el root filesystem. (sip estoy al horno :) )

*. Con esto terminamos el Objetivo 101.1 Determinar y configurar parámetros del hardware.*

Fuentes:
[1]http://wiki.lpi.org/wiki/LPIC-1_Objectives(ES)
[2]http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/ref-guide/ch-proc.html
[3]http://docsrv.sco.com/HDK_concepts/ddT_majmin.html
[4]Documento bajado de Internet
[5]http://book.opensourceproject.org.cn/embedded/embeddedprime/opensource/0136130550/ch08lev1sec2.html
[6]http://es.wikipedia.org/wiki/Sysfs
[7]http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/es-ES/Installation_Guide/s1-s390info-sysfs.html
[8]http://www.redhat.com/magazine/002dec04/features/udev/
[9]http://www.redhat.com/magazine/003jan05/features/dbus/
[10]http://www.redhat.com/magazine/003jan05/features/hal/
[11]http://julio-linux.esdebian.org/32607/herramienta-dmidecode
[12]http://www.taringa.net/posts/linux/1179139/--LSHW---Como-Obtener-las-especificaciones-de-hardware-en-Li.html
[13]http://blog.pucp.edu.pe/item/88256/detectando-memorias-usb-en-linux-los-servicios-hal-y-d-bus
[14]http://www.guia-ubuntu.org/index.php?title=GRUB
[15]http://es.wikipedia.org/wiki/Proceso_de_arranque_en_Linux
[16]http://tldp.org/HOWTO/LILO.html
[16]http://control-escape.com/linux/lilo-cfg.html
[17]http://www.mcmcse.com/linux/lpi101gplstudyguide.shtml
[18]http://www.ledge.co.za/software/lpinotes/101-letter.pdf

Preparando LPIC-1 103.1 Trabajar en la linea de comandos

*. 101.1 Trabajar en la linea de comandos.*
Este objetivo 101.1 fue desarrollado por Fabian Ampalio
Enlace Original

Una vez que nos hemos logeado dentro del sistema Linux, nos enfrentamos con el shell. Éste aparece simplemente como una interface de línea de comando. A partir del prompt del shell escribimos comandos que son interpretados por el shell y enviados al sistema. El shell que estamos corriendo en ese momento configura su prompt correspondiente. La mayoría de los sistemas Linux tienen como predeterminado el shell bash, y generalmente está configurado para mostrar el nombre de usuario, nombre del servidor y directorio actual de trabajo en el prompt. Un ejemplo de este prompt sería:

[angie@redhat /etc]$

En este ejemplo angie es el nombre de usuario, redhat es el nombre del servidor y /etc es el directorio actual de trabajo (llamado pwd – present working directory). El prompt para la shell de bash es el símbolo $ para un usuario comun y # para el usuario root. Al prompt lo configuramos a través del archivo /etc/bashrc. Por medio de este archivo podemos cambiar la configuración de lo que se muestra en el prompt. Cada usuario puede personalizar el prompt a su gusto, creando para ello el archivo de configuración personalizado en ~/.bashrc

Los comandos que escribimos en la línea de comandos no son enviados al sistema hasta que no se haya pulsado la tecla Enter. Esto permite editar los comandos antes de que se pasen al sistema. Los comandos escritos en la línea de comandos deben seguir una sintaxis específica. La primera palabra es el comando que se debe ejecutar; esta puede incluir una ruta absoluta, que es la ruta completa al comando, que debe terminar con el nombre del comando. A continuación deben figurar las opciones que son usadas por el comando llamadas parámetros. Los argumentos del comando van a continuación de las opciones. Cada uno de estos elementos los separararemos en la línea de comandos por medio de un espacio en blanco. El formato de un comando es el siguiente:

$ comando opciones argumentos
===============================================================

Recordatorio de examen: Es importante recordar esta sintaxis. Algunas preguntas del examen cuestionan sobre el correcto uso de comandos, opciones y argumentos.

===============================================================

Por ejemplo, tomando el comando ls. Este comando lista los archivos y directorios que hay en el pwd. Para ejecutar este comando, simplemente hay que teclear:

$ ls

Las opciones son códigos de una letra precedidos por un guión (-), y modifican la acción del comando. Podemos combinar y usar varias opciones con un mismo comando. Las opciones son sensibles a mayúsculas y, en muchas ocasiones, una letra minúscula significará una opción diferente que su correspondiente mayúscula. Una opción muy importante disponible con muchos comandos es la -R, que especifica que el comando se debe ejecutar de forma recursiva a través del árbol de directorios (recursivo significa listar el contenido de los subdirectorios contenidos en el directorio del cual queremos ver el contenido).

================================================================

Recordatorio de examen: La opción para la función recursiva de un comando es muy importante y aparecerá en el examen.

=================================================================

Si lo que queremos es listar los archivos y los directorios, y que los directorios aparezcan seguidos de una barra inclinada (/), se puede usar la opción -F (probemos el resultado).

$ ls -F

Vamos a suponer que deseamos mostrar el contenido del directorio /etc desde otra localización. Además queremos que se muestre una barra inclinada tras todos los nombres de directorios que estén dentro de /etc. El directorio /etc se puede utilizar como argumento para el comando ls. Un argumento es otra opción que se puede utilizar con un comando. En el siguiente ejemplo, el argumento es un directorio que será examinado por el comando. Podriamos probar ejecutar el comando de la siguiente manera:

$ ls -F /etc

Otro carácter especial que podemos utilizar cuando introducimos comandos es la barra invertida (\). Cuando se introduce a la derecha, antes de pulsar la tecla Enter, la barra invertida permite extender el comando a lo largo de varias líneas. La barra invertida provoca que el sistema ignore la pulsación de la tecla Enter, y trata todos los comandos como si estuvieran en una única línea. Esta función es muy útil si tecleamos comandos muy largos, para poder partirlos en varias líneas. Un ejemplo sería el siguiente:

$ ls -F /etc \
ls -F /usr

En el mundo real: Para ejecutar comandos muy largos utilizamos scripts, en lugar de teclearlos directamente sobre la línea de comandos. Sin embargo, es importante recordar el uso de la barra invertida para el examen.

Otras opciones que se pueden usar con el comando ls pueden ser:

$ ls -l

Devuelve la lista de archivos y directorios en formato extenso, incluyendo nombre, privilegios de acceso, propietario, tamaño, fecha de última modificación, etc.

$ ls -a

Muestra todos los archivos y directorios del pwd, incluyendo los archivos ocultos.

$ ls *.gif

Muestra todos los archivos del pwd que terminen por “.gif”.

$ ls ga*

Muestra todos los archivos y directorios del pwd que comiencen por “ga”.

Completando Comandos

El shell bash incluye una características denominada “completado de comandos”. Esto nos permite teclear las primeras letras de un comando, pulsar la tecla tabulador, y dejar que el sistema complete el comando por nosotros. Si queremos ejecutar el comando dmesg para mostrar el buffer del kernel, podríamos teclear:

$ dm

y pulsar la tecla Tabulador, de forma que el sistema completará el comando:

$ dmesg

Si existe más de una coincidencia con la cadena tecleada antes de pulsar la tecla Tabulador, el sistema hará sonar un beep. Pulsando de nuevo la tecla Tabulador se mostrarán todas las posibilidades que coincidan con lo tecleado. Pulsar la tecla Esc dos veces produce el mismo efecto que pulsar la tecla Tabulador.

Conectando varios Comandos

En todos los ejemplos utilizados hasta ahora utilizamos la tecla Enter para informar al sistema de que el comando debía ser procesado. Sin embargo, no estamos limitados a ejecutar un único comando de cada vez.

Podemos ejecutar varios comandos, sin que estén conectados entre sí de ningún modo, tecleándolos en la misma línea y separándolos por punto y coma (;). Por ejemplo, es posible listar todos los archivos del directorio actual y la fecha de hoy tecleando:

$ ls ; date

El punto y coma es un carácter especial que siempre significa que hay varios comandos en la misma línea. Debido a que esto último tiene un sentido global, podemos prescindir de los espacios en blanco a ambos lados del punto y coma para obtener el mismo resultado (ls;date).

Si lo que hacen los comandos tiene algo en común – la salida de uno de ellos se convertirá en la entrada del siguiente – entonces podemos conectarlos usando una tubería (|). Por ejemplo, si la lista de de archivos de un directorio es muy larga como para poder verla en una sola pantalla, podemos ver una pantalla de cada vez usando:

$ ls -l | more

De este modo, la salida del comando ls -l será la entrada del comando more. Si falla la primera parte de la línea de comando, no se podrá ejecutar la segunda.

Comodines

Los comodines son caracteres que vamos a utilizar en lugar de otros caracteres que el sistema rellena. Los dos comodines más frecuentes son el asterisco (*) y la interrogación (?). Aunque en ocasiones se confundan, su significado es diferente y producirán resultados totalmente distintos.

El asterisco significa ninguno, alguno o todos los caracteres:

$ ls s*

Este comando mostrará todas las entradas (archivos o directorios) dentro del directorio actual que comiencen con la letra s, y que tengan cualquier número de caracteres a continuación (incluyendo ninguno). Un posible resultado del comando puede ser:

s sa sam samp sampl sample samples samples.gif

Hay que prestar atención a que el comando encuentra la “s” sola y la “s” seguida de cualquier número de caracteres a continuación. En contraste, la interrogación (?) es un contenedor para un y sólo un carácter. Utilizando las mismas posibilidades que antes, el comando:

$ ls s?

Encontraremos entradas (archivos y directorios) dentro del directorio actual que comiencen por la letra “s” y que únicamente tengan una letra más. El resultado sería:

sa

Si quisiésemos encontrar las entradas que comiencen por s y cuyo nombre tenga 5 caracteres en total, utilizaríamos:

$ ls s????

En resumen, el asterisco significa todos o ninguno, y el interrogante siempre significa uno. Estos dos comodines no son excluyentes, de modo que se pueden combinar según las necesidades. Por ejemplo, para encontrar sólo los archivos que tengan una extensión de tres letras dentro del directorio actual, utilizaremos:

$ ls *.???

Para complicar un poco más las cosas también podemos utilizar los corchetes ([]) para especificar posibles valores. Todos los valores posibles deben estar dentro de los corchetes, y el shell los tratará individualmente:

$ ls [de]*

Este ejemplo encontraremos todas las entradas que comiencen por “d” o por “e” y que contengan un número ilimitado de caracteres. Para encontrar las entradas de longitud de 3 caracteres que comiencen por “d” o por “e”, utilizaremos:

$ ls [de]??

El número de caracteres que podemos incluir dentro de los corchetes es teóricamente ilimitado. Sin embargo, si lo que queremos es encontrar todas las entradas que comiencen por una letra minúscula pero no por un número u otro carácter, podemos utilizar [abcdefghijklmnopqrstuvwxyz]. Debido a que esto es un rango, una forma mucho más simple de obtener el mismo resultado es poniendo:

$ ls [a-z]*

Los rangos no tienen que ser series completas de números o caracteres, podemos expresar subconjuntos de ellos. Por ejemplo, si queremos buscar entradas que comiencen por alguna letra entre la “d” y la “t”, podemos utilizar indistintamente [defghijklmnopqrst] o [d-t]. Si la entrada puede comenzar por esas letras tanto en mayúsculas como en minúsculas, podemos usar [DEFGHIJKLMNOPQRSTdefghijklmnopqrst] o [D-Td-t]

Otros ejemplos son:

Todas las letras (mayúsculas y minúsculas): [A-z]
[A-z] es lo mismo que [A-Z] y [a-z]
Todos los números: [0-9]
Cualquier carácter que no sea un número: [!0-9]
Cualquier carácter que no sea una letra: [!A-z]

Alias de comandos

Aunque el sistema operativo y la shell nos ofrecen multitud de comandos y utilidades, podemos crear alias con nombres que tengan más sentido para nosotros o que sean más pequeños y así teclear menos caracteres. Por ejemplo, si estamos familiarizado con la línea de comandos de Windows o del DOS estamos acostumbrado a escribir dir para obtener una lista de archivos de un directorio, para obtener lo mismo en Linux se escribiría ls -l. Podrías crear un alias de tal forma que cada vez que escribieses dir se ejecutase ls -l, utilizando la siguiente expresión:

alias dir=”ls -l”

La sintaxis será siempre el alias seguido del comando que queremos que se ejecute cuando se teclee el alias separados por el signo igual (=). En raras ocasiones podemos hacerlo sin encerrar el comando entre comillas, pero como norma general siempre debemos incluirlas.

=================================================================
NOTA:

Para que los alias no se pierdan al finalizar la sesión deben añadirse al archivo .bashrc que se encuentra en el directorio home del usuario.

=================================================================

PATH y otras variables

Cuando tecleamos un comando en el prompt la shell primero busca entre sus comandos internos y de no encontrar el comando se buscará una utilidad(comando) externa con ese mismo nombre. Esto se realiza buscando en los directorios incluidos en la variable PATH y en el mismo orden en el que han sido definidos en dicha variable hasta que se encuentra el primer archivo ejecutable cuyo nombre coincide con el tecleado, en caso de no encontrarse ninguno después de buscar en todos los directorios indicados aparecerá el mensaje (“command not found”).
A continuación se remarcan algunas cosas importantes que deben conocerse respecto al path:

– Podemos consultar el valor actual de PATH con el siguiente comando:

echo $PATH

En el path no se incluye por defecto el directorio actual, por tanto, podemos tener un archivo ejecutable otro directorio, ver que está ahí (tecleando ls) pero al escribir su nombre obtener un error de “command not found”.

Para solucionar esto podemos escribir el pathname completo del archivo a ejecutar, añadir este directorio a la variable PATH, mover el fichero a un directorio incluido en dicha variable, o añadir el símbolo del directorio actual (.) a la variable PATH.

Las distintas entradas en el path irán separadas por dos puntos (:).

El orden de búsqueda en la variable PATH debería comenzar por los directorios donde se encuentran los comandos más comunes (los directorios bin) y terminar por los directorios donde se encuentren los comandos del usuario, si existiesen.
Para añadir un directorio al path podemos redefinir la declaración completa o, simplemente, añadir el nuevo directorio con el comando:

PATH=$PATH:{nuevo directorio}

Por tanto, para añadir el directorio /home/fulanito al path, el comando sería:

PATH=$PATH:/home/fulanito

Si queremos añadir una entrada tal que el directorio donde estás trabajando en ese momento esté siempre incluido en el path de búsqueda, escribe:

PATH=$PATH:./

Por motivos de seguridad te recomendamos que no hagas ésto último, pero si no tienes más remedio que hacerlo, colócalo siempre al final de la declaración de PATH como se comentó anteriormente y no al principio.

Variables Comunes

Podemos ver el valor de cualquier variable existente con el siguiente comando:

echo ${nombre_de_variable}

Por tanto, el comando:

echo $MAIL

Veremos el directorio de correo, $HOME, el directorio home, y así sucesivamente. Para obtener una lista completa de todas las variables definidas en el entorno podemos utilizar cualquiera de estos dos comandos: env o printenv y set.
Aunque las salidas de los mismos puedan variar ligeramente (variables del entorno contra variables locales), en su mayor parte la salida de env es un subconjunto de la salida de set.

Algunas de las variables que podemos visualizar son:

HOME: El directorio donde inicias la sesión y a donde llegas si tecleas cd sin ningún parámetro adicional.

LINES: El número de líneas de pantalla que se visualizarán entre cada pausa (comando more).

LOGNAME: El nombre de usuario con el que has conectado.

PWD: El directorio de trabajo actual, el directorio donde te encuentras en este momento.

SHELL: El intérprete de comandos que estás utilizando.

TERM: El tipo de terminal o emulación seleccionado.

USER: Suele ser igual que LOGNAME

Como regla general, las variables del sistema siempre aparecen en mayúsculas.

Podemos cambiar el valor de las variables según lo necesitemos o añadir nuestras propias variables para que sean utilizadas por otros programas o desde la línea de comando. Por ejemplo para crear una nueva variable llamada HOY, solo tendríamos que escribir:

HOY=Viernes

Ahora podemos ver el valor de esa variable escribiendo:

echo $HOY

El resultado es Viernes. Si ahora empleamos el comando:

set

la variable aparecerá ahí, sin embargo si usamos el comando:

env

no aparecerá. La variable ha sido creada localmente y solo podrá ser referenciada localmente. Para que sea accesible por subrutinas o procesos hijos debes utilizar el comando export que hará que pase de ser local a ser una variable del entorno:

export HOY

Esto pondrá la variable en el entorno donde podrá ser encontrada tanto localmente como por las subrutinas y procesos hijos, la variable y su valor serán accesibles durante toda la sesión y se perderán una vez nos desconectemos usuando logout o exit.

Para que el valor sea permanente debemos añadir la definición a un perfil, por ejemplo podemos cambiar el valor de PATH para todos los usuarios del sistema, conectándonos como root y editando el archivo /etc/profile modificamos la línea donde se define la variable PATH. Ésto podremos hacerlo utilizando el editor vi con el siguiente comando:

vi /etc/profile

Si queremos hacer una modificación solo para un usuario en particular tenemos que editar el archivo /home/nombre_del_usuario/.bashrc (el punto al inicio del nombre del archivo indica que este es un archivo oculto, tendremos que teclear ls -a para poder verlo).

Las modificaciones en los perfiles solo se harán efectivas tras la desconexión y nueva conexión del usuario.

Para cambiar el valor de una variable, simplemente, vuelve a definirla con el nuevo valor:

HOY=Lunes

Como ya la habíamos exportado anteriormente ya no tenemos por que hacerlo otra vez y el nuevo valor quedará accesible tanto localmente como en el entorno.

Si fuese necesario eliminar una variable puedes utilizar el comando unset.

Configurando el prompt

Entre las variables presentes y definibles, están aquellas que definen el prompt. El prompt es el mensaje que visualiza la shell cuando está lista para recibir un comando.

Los prompts por defecto incluyen:

$ El último carácter para sh, bash, y ksh

% El último carácter para csh y zsh

> El último carácter para tcsh

El prompt primario puede ser tanto la variable PS1 o la variable prompt, dependiendo de que shell estés utilizando. En bash, un valor típico para PS1 sería:

[\u@\h \W]\$

Componente por componente, PS1 sería igual a lo siguiente:

El corchete izquierdo ([)

El nombre del usuario actual (\u)

La arroba (@)

El nombre del host actual (\h)

Un espacio

El directorio de trabajo actual (\W)

El corchete derecho (])

El signo del dolar ($)

Un ejemplo de este prompt sería:

[leko@pentimVIII home]$

La barra invertida (\) indica la utilización de un valor especial. Algunos de estos valores se muestran en la tabla 1.1.

TABLA 1.1

Valor
Resultado
\d
Fecha actual
\h
Nombre del host hasta el primer punto
\n
Interlínea
\s
Shell
\t
Hora actual
\u
Nombre usuario
\W
Directorio actual
\w
Ruta completa de directorios
\!
Número del historial (se comentará mas adelante)
\#
Número del comando
\$
Prompt por defecto—$ para los usuarios normales y # para root
\\
Barra invertida literal
ABC
Texto libre
\[
Secuencia de caracteres no imprimibles
\]
Fin de secuencia de caracteres no imprimibles
$date
Salida del comando date (o cualquier otro)

Para modificar el prompt de forma permanente para todos los usuarios tenemos que editar el archivo /etc/bashrc (como root) y modificar su contenido. Teniendo en cuenta que si un usuario tiene en su directorio personal el fichero ~/.bashrc se sobreescribirá el contenido en /etc/bashrc.

Si observamos las variables del sistema veremos que, además de PS1, puedes encontrar PS2.
Anteriormente comentamos que podíamos terminar una línea de comandos con una barra invertida para indicarle a la shell que aun no se habíamos terminado de introducir todo el comando, si observamos un ejemplo podemos ver lo siguiente:

[usuario@angie home]$ ls -l *.gif \
> *.fig \
> *.bmp

Observamos como el prompt cambió de lo indicado en PS1 a un signo de mayor (>). Si hubiesemos seguido siendo el mismo PS1 no podríamos saber si se trata del mismo comando o de uno nuevo, por eso se cambia del prompt primario a otro secundario definido, precisamente por la variable PS2. Su valor podemos cambiarlo de la misma forma que el de PS1, incluyendo los valores especiales de la Tabla 1.1. La mayoría de las shells admiten tres o cuatro niveles de prompts.

Otras Variables

A estas alturas ya nos hemos dado dado cuenta de que el signo del dolar ($) se utiliza para obtener el valor de una variable; si tienes una variable llamada EJEMPLO, puedes ver su contenido examinando $EJEMPLO.
Hay otras tres variables que pueden resultar prácticas para determinar tu entorno.

La primera—$$—muestra el ID del proceso correspondiente a la shell que se ejecuta actualmente:

echo $$

La segunda—$?—muestra el resultado del último comando ejecutado. Este resultado puede ser correcto (0) o incorrecto (1). Por ejemplo, el comando ls admite la opción -F que diferenciará entre ficheros y directorios insertando una barra invertida detrás del nombre de los directorios, sin embargo este comando no incluye la opción -z.

Dada esta información, en el ejemplo siguiente podremos comprobar la utilización de la variable $?

[leko@pentimVIII home]$ ls -F
Desktop\ sample snapshot01.gif snapshot02.gif
[usuario@angie home]$ echo $?
0
[usuario@angie home]$ ls -z
ls: invalid option — z
[leko@pentimVIII home]$echo $?
1

La tercera variable—$!—mostrará el ID del último proceso hijo que se inició en el background . Si no se hubiese iniciado ningún proceso de background, entonces la variable no tendría valor.

Los procesos se describen con mayor detalle en otro capítulo pero para esta explicación es suficiente con saber que poniendo un ampersand (&) al final de un comando le indicamos a la shell que ejecute dicho comando en el background:

[usuario@angie home]$ echo $!
[usuario@angie home]$ ls -F &
[leko@pentimVIII home]$ echo $!
19321
[usuario@angie home]$

Usando el historial de comandos

El archivo del historial contiene una lista de los comandos introducidos en la línea de comando. La variable HISTSIZE define el número de comandos que se almacenarán en dicho archivo durante la sesión actual, esta variable puede estar definida tanto en /etc/profile como en ~/.profile (~ equivale al directorio home del usuario) y su valor por defecto es de 1000 entradas. El comando history muestra todas las entradas del archivo del historial que se guarda en ~/.bash_history.

Podemos navegar por las entradas del histórico con las flechas del teclado. La flecha hacia arriba muestra las entradas anteriores, mientras que la flecha hacia abajo avanzará hacia adelante en el historial. De esta forma podemos ahorrarnos volver a escribir comandos que ya habíamos escrito con anterioridad. Mientras navegamos por los comandos podemos editarlos antes de ejecutarlos de nuevo.

La variable HISTCMD proporciona el índice dentro del historial comando que se está ejecutando. La variable HISTFILE especifica el nombre del fichero que contendrá el historial (~/.bash_history por defecto). La variable HISTFILESIZE especifica el máximo número de líneas que contendrá el archivo especificado en HISTFILE y, aunque suele tener el mismo valor que HISTSIZE, podría ser diferente ya que ésta última se refiere solo al histórico de la sesión actual y no al tamaño total del archivo histórico.

Comandom fc

La utilidad fc proporciona otra opción para editar los comandos del fichero histórico antes de ejecutarlos. El comando fc abre el editor de textos por defecto con el comando especificado y ahí podemos editarlo y salvarlo antes de ejecutarlo disponiendo de toda la potencia de un editor de textos. Podemos llamar a fc utilizando como parámetro el número del comando que queremos editar o, también, con un rango de comandos para, de esta forma, editarlos y ejecutarlos en conjunto. También podemos especificar el editor de textos a utilizar. Una vez que llamamos a fc el archivo de comandos puede ser editado como cualquier otro archivo de texto y los comandos editados se ejecutarán al salir del editor. La opción -l la utilizamos para mostrar una lista de los valores especificados a continuación, podemos escribir, por ejemplo, fc -l 50 60 y obtenemos la lista de los comandos del 50 al 60 en el historial.

Tabla 1-2. Operadores de expansión del historial de comandos
Operador: Descripción
!!: También conocido como bang-bang,[1] este operador hace referencia al comando más reciente del historial.
!n: Hace referencia al comando número n del historial. Puedes utilizar el comando history para conocer estos números.
!-n: Hace referencia al comando actual menos n en el historial.
! cadena: Hace referencia al comando más reciente que comience por cadena.
!? cade: Hace referencia al comando más reciente que contenga cadena.
^ cadena1^cadena2:Sustitución rápida. Repite el último comando reemplazando la primera aparición de cadena1 por cadena2.

[1] Es común llamar bang al signo de admiración en los sistemas Linux y Unix.
A l trabajar con Linux habrá ocasiones en las que necesitamos una información más amplia sobre la utilización de algún comando, utilidad o configuración del sistema. Aunque este y otros libros pueden ser muy útiles, ningún libro puede tener la información totalmente actualizada. Afortunadamente existen magníficos recursos para cuando necesitemos más información. Algunas de estas fuentes de información las podremos encontrar en nuestro sistema local, mientras que otras estarán disponibles en Internet. Este capítulo nos informaremos sobre algunos de los lugares más útiles para buscar información. Este conocimiento nos ahorra mucho tiempo cuando trabajamos con sistemas Linux y es esencial para la preparación del examen.

Obteniendo Ayuda con las Páginas Man

• Uso y administración de la documentación del Sistema Local. El uso y administración de los recursos de man y del material de /usr/doc/. Incluye el encontrar las páginas man más relevantes, buscar por las secciones de man, encontrar comandos y las páginas man relativas a éstos, configurar el acceso a las fuentes de man y al sistema man, utilizar la documentación del sistema almacenada en /usr/doc/ y otros lugares relacionados y determinar que documentación mantener en /usr/doc/.

Las páginas del manual o páginas man de Linux son el mejor lugar para resolver cuestiones relativas a la sintaxis y opciones de los comandos y utilidades del sistema. Los documentos de las páginas man están almacenados en un formato comprimido. El comando man descomprime y formatea estas páginas para su correcta visualización. Se accede a estas páginas utilizando el comando man seguido del nombre del comando que se quiere consultar. Un ejemplo de la sintaxis te este comando es el siguiente:

# man ls

Este comando buscará todas las páginas del manual relativas al comando ls. Cuando abras las páginas del manual lo primero que se visualizará es un banner con el comando y la página man que está siendo consultada. También se muestra aquí el logo FSF de Free Software Foundation.
Todo esto aparecería de esta forma:

LS(1) FSF LS(1)

Esto irá seguido del nombre del comando y de su función.

NAME
ls – list directory contents
Objective

A continuación se muestra la sintaxis del comando:

SYNOPSIS
ls [OPTION]… [FILE]…

A esto le sigue una descripción del comando. Tras la descripción se muestran y explican las opciones del mismo.

DESCRIPTION
List information about the FILEs (the current directory by
default). Sort entries alphabetically if none of -cftuSUX nor
–sort.
-a, –all
do not hide entries starting with .
-A, –almost-all
do not list implied . and ..
-b, –escape
print octal escapes for nongraphic characters
–block-size=SIZE
use SIZE-byte blocks
-B, –ignore-backups
do not list implied entries ending with ~

La página man termina con información reltiva al autor de la página, bugs conocidos e información sobre como reportar nuevos bugs, copyright, e instrucciones para obtener más información sobre el comando.

AUTHOR
Written by Richard Stallman and David MacKenzie.
REPORTING BUGS
Report bugs to .
COPYRIGHT
Copyright (c) 1999 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE.
SEE ALSO
The full documentation for ls is maintained as a Texinfo manual.
If the info and ls programs are properly installed at your site,
the command
info ls
should give you access to the complete manual.

GNU fileutils 4.0p March 2000 1

Para desplazarse hacia abajo por las páginas man se utiliza la barra espaciadora, que avanzará una página por cada pulsación. La tecla Q provoca la salida del proceso de visualización de la página. Si quieres buscar algún texto dentro de la página man puedes utilizar las expresiones regulares, a continuación se muestra un ejemplo de como buscar la palabra option.

/option

Encontrando las páginas man

Las páginas man se almacenan en el sistema. La variable MANPATH indica la ubicación de estos archivos. Por defecto las páginas man se guardan en los siguientes lugares.

/usr/man/man1
/usr/man/man2
/usr/man/man3
/usr/man/man4
/usr/man/man5
/usr/man/man6
/usr/man/man7
/usr/man/man8
/usr/man/man9

El significado de los números se comentará en la siguiente sección del capítulo, “Buscando secciones de las páginas man”
=========================================================

Pregunta de Examen: Asegurate que sabes la ubicación por defecto de los ficheros fuentes de las páginas man. Esta pregunta es muy probable que salga en el examen.

=========================================================

El usuario puede especificar un MANPATH diferente. Esto permitiría utilizar un conjunto diferente de páginas man. Esto es práctico porque algunos comandos podrían almacenar sus páginas man en lugares distintos a los estándar. El comando man admite distintas opciones, una de ellas permite usar un path distinto al indicado en MANPATH. Las opciones del comando man se muestran en la tabla 1-3.

Tabla 1-3
Opciones utilizadas con man
Opción
Uso
-C fichero-de-configuración
Indica un fichero de configuración distinto a /etc/man.conf.
-M path
Indica en que directorios se buscarán las páginas man.
-P paginador
Indica el paginador o el programa utilizado para formatear y visualizar las páginas man.
El paginador por defecto es el indicado en la variable de entorno PAGER
Los paginadores more y less son los más frecuentemente utilizados.
-S Lista-de-secciones
Indica una lista de las secciones a buscar separadas por dos puntos (:)
-a
Indica que han de mostrarse todas las entradas coincidentes y no solo la primera.
-c
Indica que la página fuente ha de ser reformateada.
-d
Indica que debe mostrarse información de debug en lugar de las páginas man.
-f
Indica que el programa man debe comportarse como el programa whatis.(se explicará mas adelante).
-h
Muestra información sobre el comando man.
-k
Indica que el programa man debe comportarse como el programa apropos.(se explicará mas adelante).
-K
Busca una cadena especificada en las páginas man. Por cada entrada encontrada se le pregunta al usuario si desea verla.
-m
Indica un conjunto alternativo de páginas man basado en el sistema especificado.
-w
Indica que ha de visualizarse el path de las páginas man en lugar de las páginas.

A continuación se muestra un ejemplo del uso de la opción -a. Ésta hace que las páginas coincidentes sean mostradas en el orden en el que han sido encontradas. En primer lugar se le muestra al usuario la entrada correspondiente a crontab en la sección uno. Cuando el usuario pulsa la tecla Q para salir de ésta página , se mostrará la entrada encontrada en la sección cinco.

# man –a crontab

La opción -w es práctica para encontrar la ubicación de las entradas de las páginas man. Si utilizásemos esta opción con la utilidad crontab obtendríamos lo siguiente:

# man -w crontab
/usr/man/man1/crontab.1.gz

Pregunta de Examen: Asegurate que conoces las opciones de búsqueda y sus funciones, entre ellas -a, -K, y -k.

Buscando secciones de las páginas man

La información de las página man de Linux están contenidas en un conjunto de archivos. Estos archivos están agrupados en secciones y cada sección contiene un tipo específico de información. La Tabla 1-4 lista éstas secciones y su uso:

Tabla 1-4
Secciones de las Páginas man
Sección
Uso
1
Comandos y aplicaciones del usuario.
2
Llamadas del sistema y errores del Kernel.
3
Llamadas a librerías.
4
Drivers de dispositivos y protocolos de red.
5
Formatos estándar de archivos.
6
Juegos y demos.
7
Ficheros y documentos misceláneos.
8
Comandos de administración del sistema.
9
Especificaciones e interfaces oscuros del kernel.

Cuando se le pasa un argumento al comando man, éste busca dentro de las secciones siguiendo un orden específico y se retorna la primera coincidencia. El orden de búsqueda por defecto es el siguiente:
1, 8, 2, 3, 4, 5, 6, 7, 9.
También es posible indicar la sección en la que quieres buscar. Si quisieses buscar información sobre la utilidad crontab en la sección cinco utilizarías el siguiente comando:

# man 5 crontab

Si usas la opción -a tal como se muestra en la Tabla 7-1 podrás examinar todas las entradas coincidentes. Siguiendo el ejemplo de la utilidad crontab tendrías que utilizar el siguiente comando:

# man -a crontab

Buscando con whatis

La utilidad whatis no se menciona específicamente en los objetivos del examen, pero conocer su uso puede venir bien en el examen. La utilidad whatis se usa para buscar entradas coincidentes en la base de datos whatis. Esta base de datos se crea utilizando el comando /usr/bin/makewhatis. Esta base de datos contiene las descripciones cortas que se encuentran en las páginas man de los comandos del sistema. Un ejemplo de su uso es el siguiente:

# whatis passwd
passwd (1) – update a user’s authentication tokens(s)
passwd (1ssl) – compute password hashes
passwd (5) – password file
passwd.nntp [passwd] (5) – passwords for connecting to remote NNTP servers

Como podemos ver en este ejemplo el comando passwd tiene entradas en las secciones uno y cinco de las páginas man. También ha sido encontrado en la sección uno de las páginas man del comando ssl.

El comando man -f busca en esta base de datos entradas coincidentes con la palabra clave indicada. A continuación tenemos un ejemplo de la salida producida por este comando.

# man -f passwd
passwd (1) – update a user’s authentication tokens(s)
passwd (1ssl) – compute password hashes
passwd (5) – password file
passwd.nntp [passwd] (5) – passwords for connecting to remote NNTP servers

Estos comandos realizan la misma búsqueda. Se muestran los comandos y las páginas man donde han sido encontrados. Esto puede ser práctico para localizar secciones de páginas man y variantes de los comandos.

Buscando con apropos

Al igual que whatis, el comando apropos no se menciona específicamente en los objetivos del examen, pero conocer su uso puede venir bien en el examen. Y también como la utilidad whatis, el comando apropos utiliza la base de datos whatis. Este comando se emplea para buscar tanto los nombres de comando como las descripciones para la palabra clave indicada. A continuación vemos un ejemplo del comando apropos:

# apropos password
chpasswd (8) – update password file in batch
gpasswd (1) – administer the /etc/group file
htpasswd (1) – Create and update user authentication files
nwpasswd (1) – Change a user’s password
passwd (1) – update a user’s authentication tokens(s)
passwd (1ssl) – compute password hashes
passwd (5) – password file
passwd.nntp [passwd] (5) – passwords for connecting to remote NNTP servers
pg_passwd (1) – Manipulate the flat password file
pwupdate (8) – updates passwd and shadow NIS map
rpc.yppasswdd [rpc] (8) – NIS password update daemon
smbpasswd (5) – The Samba encrypted password file
smbpasswd (8) – change a users SMB password
ypchfn [yppasswd] (1) – change your password in the NIS database
ypchsh [yppasswd] (1) – change your password in the NIS database
yppasswd (1) – change your password in the NIS database

A continuación tenemos un ejemplo del comando man -k :

# man -k password
chpasswd (8) – update password file in batch
gpasswd (1) – administer the /etc/group file
htpasswd (1) – Create and update user authentication files
nwpasswd (1) – Change a user’s password
passwd (1) – update a user’s authentication tokens(s)
passwd (1ssl) – compute password hashes
passwd (5) – password file
passwd.nntp [passwd] (5) – passwords for connecting to remote NNTP servers
pg_passwd (1) – Manipulate the flat password file
pwupdate (8) – updates passwd and shadow NIS map
rpc.yppasswdd [rpc] (8) – NIS password update daemon
smbpasswd (5) – The Samba encrypted password file
smbpasswd (8) – change a users SMB password
ypchfn [yppasswd] (1) – change your password in the NIS database
ypchsh [yppasswd] (1) – change your password in the NIS database
yppasswd (1) – change your password in the NIS database

Como podemos ver estos comandos hacen lo mismo. Esto puede ser práctico cuando buscamos comandos a partir de determinadas palabras clave.

Configurando el acceso a las páginas man

Como ya mencionamos con anterioridad en este capítulo, en el directorio /usr/man se guardan por defecto los archivos fuente de las páginas man. La variable de entorno MANPATH puede ser utilizada para cambiar el path de búsqueda por defecto de los ficheros fuente de las páginas man. La variable MANPATH sobreescribirá el path de búsqueda por defecto de las páginas man, así que es importante incluir el path de las páginas man existentes. Abajo tenemos un ejemplo de una definición de la variable MANPATH añadida a un fichero /home/user/.profile.

Export MANPATH=/usr/local/man:/usr/man/preformat:/usr/man:/usr/X11R6/man

La mayoría de los documentos almacenados en /usr/man están comprimidos y sin formatear. El comando man utiliza el archivo /etc/man.config para obtener información acerca de la correcta visualización de esos archivos.
Este archivo contiene la definición de MANPATH, así como, información relativa a las opciones de compresión, formateo y paginación. Mediante la opción -C mostrada en la Tabla 7-1, podemos especificar un fichero de configuración diferente.
El comando man se encuentra en /usr/bin. Este directorio debe estar incluido en la variable de entorno PATH, de lo contrario deberemos ejecutar el comando utilizando el path absoluto
/usr/bin/man.

Preguntas TEST

1.Que shell es usada por defecto en los sistemas GNU/Linux?
A. csh
B. rsh
C. bash
D. tcsh

2. Que fichero contiene los shells disponibles para el sistema?
A. /etc/passwd
B. /etc/command
C. /etc/bash
D. /etc/shells

3.Cual es el comando usado para cambiar el shell por defecto para el BASH2?
A. chng -s /bin/bash2
B. chsh -s /bin/bash2
C. shell -c /bin/bash2
D. default -shell /bin/bash2

4.Cual es el formato correcto para introducir un comando en la linea de comandos?
A. command
B. command options
C. command arguments options
D. command options arguments

5.Se pueden poner varios comandos en la misma linea separados porque carácter?
A. .
B. ;
C. ,
D. \

6.Que combinación de teclas es usada para introducir un comando en varias lineas?
A. “”
B. \ Enter
C. / Enter
D. Tab-Enter

7.Que tecla, presionada una vez, es usada para completar los comandos?
A. Tab
B. Esc
C. Enter
D. Ctrl

8.Que tecla, cuando es presionada dos veces, es usada para completar los comandos?
A. Tab
B. Esc
C. Enter
D. Ctrl

9.Que fichero contiene las variables del sistema que tiene el shell bash?
A. /bash
B. /bin/bash
C. /etc/bash
D. /etc/profile

10.. _______________hará que se ejecute el script llamado update_mozilla guardado en tu directorio home, desde ese directorio.

11.Cuando se hacen cambios a las variables del entorno, que comando debe de usarse para asegurarse de que los cambios están disponibles para la shell?
A. save
B. remember
C. export
D. echo

12.Que variable de entorno se usa para personalizar el prompt?
A. PS1
B. prompt
C. shell
D. display

13.Que fichero contiene la asignación a la carpeta del usuario home?
A. /etc/home
B. /etc/profile
C. /etc/passwd
D. /etc/users

14.Que comando lista los comandos ejecutados anteriormente?
A. commands
B. review
C. history
D. export

15.Que tecla permite ver el último comando ejecutado?
A. down arrow
B. up arrow
C. right arrow
D. left arrow

16.Que comando te permite usar el editor por defecto para editar varios comandos del archivo historico?
A. history
B. edit
C. fc
D. view

17.Es posible ejecutar comandos que no están en el PATH, si conoces la ruta completa y el nombre del comando
A. Verdadero
B. Falso

Respuestas Pre-Test

1.El fichero /etc/passwd contiene el shell por defecto para cada usuario.

2.Añadiendo a la variable PATH editando el fichero /etc/profile, añadira el PATH a todos los usuarios del sistema.

3.La variable HISTSIZE indica el numero de entradas a almacenar en el fichero .bash_history

4.La tecla TAB presionada una vez, y la tecla ESC presionada dos veces completa los comandos, si solo hay un posible comando lo iguala.

5.El comando fc permite editar las entradas desde el fichero ~/.bash_history usando el editor por defecto del sistema.

6.El fichero .bash_history, localizado en el directorio home de cada usuario, contiene el historial de comandos.

7.Se pueden ver las variables usando el comando echo, como echo $HOME.

8.Para ejecutar un comando desde pwd, escribe el comando precedido de ./, como en
./commandname

9.La sustitución de comandos permite la salida de un comando en lugar del nombre del comando.

10.La opción -R permite funciones recursivas de un comando.

Respuestas TEST

1.C. El shell por defecto usado en los sistemas Linux es bash. Ver la sección “Entendiendo Shells” para mas información.

2.D. El fichero /etc/shells contiene una lista de los shells disponibles. Ver la sección de “Entendiendo Shells”.

3.B. El comando chsh se usa para ver y cambiar la configuración del shell. Ver la sección “Entendiendo Shells” para mas información.

4.D. Las opciones del comando preceden a los argumentos cuando se entran en la linea de comandos. Ver la sección “Usando la linea de comandos” para mas información.

5.B. El punto y coma (;) se usa para separar multiples comandos en una sola linea. Ver la sección “Usando la linea de comandos” para mas información.

6.B. La tecla \ causa que cualquier tecla que le siga sea ignorada. Esto permite a la tecla Enter ser ignorada y que continue el comando de la linea siguiente. Ver la sección “Usando la linea de comandos” para mas información.

7.A. La tecla TAB completa comandos cuando se pulsa una vez. Ver la sección “completar comandos” para mas información.

8.B. La tecla escape completa comandos cuando se pulsa dos veces. Ver la sección “completar comandos” para mas información.

9.D. El fichero /etc/profile almacena la declaración de las variables de todo el sistema usando el shell bash. Ver la sección “Entendiendo Shells” para mas información.

10. ./update_mozilla. Cuando ejecutamos un comando desde pwd, el nombre del comando se precede por un punto y una barra ( ./ ), que especifica que el comando esta en el directorio actual. Ver la sección “Editando la variable path” para mas información.

11.C. El comando export causa cambios en una variable de entorno para que sea accesible por el shell del usuario. Ver la sección “Variables de entorno y configuraciones” para mas información.

12.A. La variable PS1 se usa para hacer cambios al prompt. Ver la sección “Prompt” para mas información.

13.C. El fichero /etc/passwd contiene la asignación de directorios del home del usuario. Ver la sección “variables de entorno y configuraciones” para mas información.

14.C. El comando history muestra los comandos introducidos previamente que se encuentran almacenados en el fichero del usuario .bash_history. Ver la sección “”Usando el fichero history” para mas información.

15.B. La flecha hacia arriba se usa para pasearse por los comandos introducidos previamente. Ver la sección “Usando el fichero history” para mas información.

16.C. El comando fc permite editar los comandos introducidos previamente usando el editor por defecto. Ver la sección “fc” para mas información.

17.A. Los comandos se pueden ejecutar usando el path completo si el usuario tiene los permisos necesarios. Ver la sección “Editando la variable PATH” para mas información.

Bibliografia y enlaces recomendados

LPIC 1 Certification Bible (Bible) by Angie Nash, Jason Nash
John Wiley & Sons; Bk&CD-Rom edition (July 1, 2001) ISBN: 0764547720

LPI Linux Certification in a Nutshell by Jeffrey Dean
O’Reilly & Associates; 1st ed edition (May 15, 2001) ISBN: 1565927486

CramSession’s LPI General Linux Part 1 : Certification Study Guide
CramSession.com; ISBN: B000079Y0V; (August 17, 2000)

Referencias Unix Reviews

http://www.unixreview.com/documents/s=7459/uni1038932969999/

Página LPI: www.lpi.org

Apuntes IBM: http://www-106.ibm.com/developerworks/edu/l-dw-linux-lpir21-i.html

Manuales GPL: http://www.nongnu.org/lpi-manuals/

Preparando LPIC-1 Tema 103 Comandos GNU

*.Aqui vamos a desarrollar el topico 103 por cada objetivo.*
Por razones de tamaño y lectura voy a dividr cada objetivo en un enlace diferente.

103.1 Trabajar en la linea de comandos
103.2 Procesar flujos de texto usando filtros 
103.3 Realizar administración de archivos basica 
103.4 Usar flujos, tuberias y redirecciones
103.5 Crear, monitorizar y matar procesos (EN CONSTRUCCION)
103.6 Modificar las prioridades de ejecución de los procesos 
103.7 Buscar en archivos de texto usando expresiones regulares 
103.8 Realizar operaciones básicas de edición de archivos usando vi (EN CONSTRUCCION) 

Fuentes:
http://www.anayamultimedia.es/cgigeneral/ficha.pl?id_sello_editorial_web=23&codigo_comercial=2315643#
http://www.lpi.org/eng/training__1/study_materials