jueves, 8 de noviembre de 2007

Capitulo 4: VIM básico

Conceptos básicos
¿ Como funciona VIM?
Modo edición
Modo comandos
Modo especial: Visual
~/.vimrc
Obtener ayuda


Conceptos básicos

A lo largo de la administración de un sistema Linux podemos toparnos con la necesidad de editar un fichero de configuración o algo parecido. Bien, en Linux hay muchos editores que pueden satisfacer nuestras necesidades (nano, pico, jedit...). En este capítulo NO vamos a cubrir una guerra típica "VIM vs. Emacs". Simplemente mostraremos un editor muy potente y queremos que con estas nociones cualquier usuario pueda beneficiarse de la potencia de VIM sin tener que entrar en muchos detalles ni en cosas complicadas.

Antes de nada vamos a introducir un poco sobre qué es VIM, de dónde viene y qué vamos a aprender en este capítulo.

VIM es un editor de textos para Linux. Es un derivado de VI, VIM significa VI iMproved, es decir, el mismo editor VI pero mejorado. Y en este capítulo aprenderemos a hacer un uso básico de este fabuloso editor.


¿Como funciona VIM?

VIM tiene dos grandes modos para funcionar, el modo de edición y el modo comandos. Para pasar del modo comandos (que es en el que se inicia VIM) al modo edición, pulsamos la tecla I o Insert. Para pasar del modo edición al modo comandos pulsaremos la tecla Esc.

Para iniciar VIM, haremos lo siguiente:

$ vim 

VIM iniciará en el 'Modo Edición' que explicaré en la siguiente sección.


Modo Edición

Este es el modo en el que podremos editar un texto, o crear uno nuevo... Si pulsamos la tecla I o InsertRe.Pág y Av.Pág. otra vez cambiaremos el modo Insert por el modo Replace. No creo que haya que explicar mucho las diferencias entre insertar texto o reemplazar el texto. Para movernos por el fichero podemos utilzar las flechas, Re.Pág y Av.Pág.


Notas: Para volver al modo comandos, sirve con pulsar la tecla Esc.

Modo comandos

Este es el modo más interesante de VIM, con él podemos hacer cosas muy curiosas, como por ejemplo, activar el resaltado de sintaxis, deshacer, abrir un nuevo fichero, guardar, etc..

En la siguiente tabla explicaré los comandos que pueden resultar más interesantes.

Tabla 4.1. Comandos más usuales en VIM

ComandoDescripciónEjemplo de uso (si aplica)
:wGuarda el buffer en el fichero--
:w [fichero]Guarda el buffer en fichero (como un Save as...):w ~/ficherito
:qSalir de VIM--
:q!Salir de VIM sin guardar los cambios--
:wqSalvar y guardar--
:uDeshacer--
Ctrl-R (^R)Rehacer--
:d ó :dNBorrar la línea corriente o borrar N líneas a partir de la actual.--
:syntax [ on | off ]Activa/Desactiva el resaltado de sintaxis:syntax on
:s/[patrón]/[reemplazo]/gSustituye [patrón] por [reemplazo] en la línea actual.s/hoal/hola/g
:![comando] [argumentos]Ejecuta [comando] pasándole los argumentos [argumentos] en el shell:!gcc -g -O0 -o prueba prueba.c
:+[número]Baja [número] líneas:+256
:-[número]Sube [número] líneas:-12
:[número]Va a la línea [número]:1207
:+/[patrón]Busca [patrón] en el documento:+/donde te metes


El modo especial: VISUAL

Para entrar a este modo tenemos que pulsar v en el modo comandos. Para salir de el pulsaremos Esc.

El modo VISUAL nos permitirá eliminar grandes bloques de texto sin tener que ir borrando línea a línea. Para ello entraremos en el modo VISUAL (pulsando v) y nos moveremos con los cursores para seleccionar el bloque que queremos eliminar. Una vez tenemos seleccionado el bloque, pulsamos Supr y ya está, VIM nos informará de que hemos eliminado un bloque de "n" líneas.


~/.vimrc

Vim cuenta con un fichero de configuración en ~/.vimrc que nos puede ser muy util para personalizar nuestro VIM. Cualquier comando de VIM se puede introducir en él. Además de esto, hay muchas opciones que pueden cambiarse y hasta sentencias condicionales (algo que queda fuera del alcance de este capítulo). Cualquier línea que comience con " (comillas) será ignorada por VIM. A esto lo llamamos comentarios.

Como ejemplo mostraremos como habilitar el resaltado de sintaxis para todos los ficheros que abra el lector:

" " "
" ~/.vimrc
" " "
"
" Activamos el resaltado de sintaxis
syntax on

" Activamos la barra de informacion
set ruler

" Desactivamos la compatibilidad con VI
set nocompatible

" El identado lo hace VIM
set autoindent

" Características especiales de VIM
if has("autocmd")
" Habilitamos características propias de cada tipo de fichero
filetype plugin indent on
" Volvemos a la última línea que habíamos editado.
" ( Juntar las 2 siguientes líneas en una )
autocmd BufReadPost * if line("'\"") > 0 &&
line ("'\"") <= line("$") | exe "normal g'\"" | endif endif "has("autocmd")

Obtener ayuda

Obviamente esta ha sido una introducción muy liviana a Vim. Pero ¡VIM es mucho más!. Y el mejor punto de partida es ejecutar vimtutor. Este comando lo que hace es ir guiándonos paso a paso y con ejemplos. Editando buffers (ficheros) preparados para el correcto aprendizaje de vim. Vim es muy grande, se pueden hacer muchas cosas con él. Es muy recomendable utilizar vimtutor para iniciarse en este gran editor.

miércoles, 7 de noviembre de 2007

Capitulo 3: Terminal o Shell

III Terminal o Shell
Conceptos básicos de la terminal Bash
Variables de entorno (Path)
Comandos básicos de la terminal Bash
Referencias relativas
Comando cd
Archivos y directorios

Terminal o Shell


Una TERMINAL puede ser un SHELL, o un INTÉRPRETE DE COMANDOS. Probablemente muchos esten acostumbrados a usar ENTORNOS GRÁFICOS (de ventanas) como los interfaces de Windows o de MacOS, y si habéis empezado a investigar el escritorio de Linux después de instalar vuestra distribución, habran visto que hay varios escritorios para usar en Linux. Los entornos gráficos nos permiten ver colores, e interactuar con los botones de los programas para elegir opciones.

No obstante, la manera más habitual de administrar una máquina Linux (instalar paquetes, ver los registros de actividad, crear o modificar usuarios...) suele hacerse desde un terminal o intérprete de comandos, que es en modo texto, y generalmente nos muestra un PROMPT como ahora veremos. Un prompt es lo que el intérprete de comandos escribe automáticamente en cada lína antes de que nosotros podamos darle instrucciones mediante COMANDOS. Cada comando, generalmente , termina presionando la tecla INTRO para que éste sea recibido por la máquina y ejecutado.

Aparte de dar instrucciones a nuestra máquina, desde una terminal podremos editar textos, archivos de configuración, apagar y reiniciar el sistema, instalar nuevos programas, leer el correo, conectar al IRC, usar un navegador... y muchas cosas más. Aprenderemos que los sistemas gráficos no son imprescindibles, y lo que es mejor, al final te terminará gustando todo esto de los comandos (por mucho que ahora pienses que no). Para que te vayas haciendo una idea de cómo funciona todo esto y lo comprendas, vamos a pasar a explicar cómo funciona la terminal que usan por dfecto actualmente casi todos los sistemas Linux. En un capítulo posterior veremos detenidamente los sistemas gráficos en Linux.


Conceptos básicos de la terminal Bash

Cuando arranquemos nuestra máquina con Linux y termine de cargar todos los procesos iniciales, o bien veremos una pantalla gráfica de login o una de texto. Vamos a aprovechar este hecho para saber cómo podemos cambiar de terminal (podemos usar varias a la vez e ir cambiando entre ellas). Pulsando las teclas Ctrl+Alt+F1 accedemos a la primera terminal, pulsando Ctrl+Alt+F2 accedemos a la segunda, y así sucesivamente hasta Ctrl+Alt+F6 (Podremos volver al escritorio gráfico con Ctrl+Alt+F7 o a veces Ctrl+Alt+F5). Es posible que no podamos acceder a la primera terminal porque quizás esté siendo utilizada por los procesos de login gráfico si es que ya hemos ingresado desde allí. Las terminales se suelen nombrar tty0 para la primera, tty1 para la segunda, y así sucesivamente. También es posible, como descrubriremos luego, abrir una terminal en otra máquina desde la nuestra, esto es, manejarla remotamente.

Siempre que estemos ante una nueva terminal, veremos que aparece ante nosotros algo como NOMBREDEMIMÁQUINA login:. En cada terminal se ejecuta el programa que produce esta salida para que nos AUTENTIFIQUEMOS en el sistema (esto es, para que demostremos que somos usuarios registrados en el sistema y que podemos usarlo). El programa se llama login, y es de momento sólo importante que recuerdes que hay un programa que se ejecuta en cada terminal y que se encarga de autentificarnos en el sistema. Como vamos a practicar, NO entraremos al sistema como root . Bien, entremos al sistema en una de las terminales para practicar:

NOMBREDEMIMÁQUINA login: minombredeusuario
Password: mipassword

Supongamos que minombredeusuario es nuestro nombre de usuario (recuerda que Linux distingue mayúsculas y minúsculas para los usuarios y las contraseñas). Después de introducirlo presionaremos INTRO, y después introduciremos nuestra contraseña. Observa que no aparecen asteriscos mientras introduces tu contraseña (esto es por seguridad, para que nadie vea cuántos caracteres tiene tu password), pero puedes borrar y escribir normalmente. Cuando hayas terminado, presiona INTRO de nuevo.

Se comprobará si nuestro usuario y contraseña son correctos. De no ser así aparecerá algo como Login incorrect. Please try again. Esto significa que nuestro nombre de usuario o/y contraseña son incorrectos, así que lo intentaremos de nuevo. Cuando hagamos un login satisfactorio en el sistema, se nos mostrará algo como:

User [miusuario] logged in. Last login was in [FECHA] from [hostremoto_o_terminallocal]

Donde [miusuario] es mi nombre de usuario en la máquina, [FECHA] es la fecha del último ingreso al sistema y [nombre_de_host_remoto_o_terminal_local] es el nombre de la máquina desde donde ingresamos la última vez en la nuestra, o el nombre de la terminal local si el último login; por ejemplo tty0. En algunos casos se nos indicará las veces que se ha fallado antes de conseguir entrar con nuestro nombre de usuario. Como veremos después, podremos saber si alguien intenta hacerse pasar por nosotros con esta información.

Además (como después veremos en detalle), la máquina nos informará de si tenemos correo o correo nuevo en nuestro buzón local. Puede ser algo como New mail for [misusuario] o Mail for [miusuario], dependiendo de si hay correo no leído o leído respectivamente. Si no lo hay o bien no se muestra nada o se muestra algo como No mail for [miusuario].

Una vez dentro de nuestro sistema Linux, usando BASH (justo después de hacer login, pues es BASH la terminal por defecto), se nos mostrará lo siguiente en cada línea antes de que podamos introducir ningún comando:

[miusuario@nombredemimáquina directorioactual]$

miusuario@nombredemimáquina /directorio/actual$

A esto que se muestra antes de que podamos introducir un comando le llamamos PROMPT. Aparecerá cada vez que pulsemos INTRO. También puedes apreciar que hemos puesto dos líneas de prompt. La primera de ellas es la que verás si usas una distribución RedHat o basada en RedHat (Mandrake, SuSE...). La segunda es la línea que verás si usas una distribución Debian o basada en Debian. Analicemos las distintas partes del prompt más detenidamente:

  • miusuario es el nombre de usuario con el que hemos entrado a la máquina.

  • nombredemimáquina es el nombre de nuestra máquina sin el dominio (por ejemplo, una máquina llamada maquina23.midominio.com, aparecería aquí como maquina23).

  • directorioactual es el nombre del directorio actual en el que estamos sin la ruta completa, sólo el directorio. Como nada más entrar al sistema, estaremos en /home/miusuario, lo más probable es que muestre solamente miusuario.

    /directorio/actual la RUTA COMPLETA al directorio actual (explicación más abajo), que es lo que mostrarán las distribuciones basadas en Debian. Nada más entrar deberían mostrar /home/miusuario, pero ahora veremos por qué esto no es así.

  • $ indica que estamos en el sistema como un usuario normal, y no como root. Si entrásemos como root, en vez de un $ tendríamos un # en cada línea, lo cual debería recordarnos que "tecleemos con cautela" ;-)

Observaremos un ejemplo de lo que pasaría si entrásemos como root. Sería algo así:

[root@mimáquina root]#

root@mimáquina /root#

De nuevo, la segunda línea sería en distribuciones basadas en Debian. Recordamos que el DIRECTORIO PERSONAL (directorio donde cada usuario puede escribir y tiene sus archivos de configuración y su trabajo) de root es /root, mientras que para los usuarios normales es /home/nombredeusuario. Apreciamos que ahora la señal de "teclea con cautela" ;-) al final de la línea, #, somos root, tenemos la fuerza, pero debemos usarla para bien puesto que es nuestra máquina.

En cualquier momento, cerraremos nuestra sesión de terminal escribiendo logout o exit y presionaremos INTRO. El programa de login se lanzará automáticamente y podremos entrar de nuevo a la máquina como un usuario distinto o como root.


Variables de entorno (Path)

Lo primero que tienes que hacer es tranquilizarte, puesto que es realmente más sencillo de lo que su nombre aparenta. Estas variables se pueden llamar también VARIABLES DE SHELL. Y... ¿qué es un variable? Una VARIABLE es un nombre al que le asignamos un valor. Un ejemplo sería asignar al nombre "dias" el valor "7". Esto, en bash una vez iniciada la sesión podemos acerlo así:

[usuario@maquina usuario]$ dias=7

$ dias=7

A partir de ahora, para entrar comandos, lo representaremos de la segunda forma; presentaremos $ si los comandos han de ser ejecutados por un usuario normal o # si han de ser ejecutados por root, en lugar de mostrar en todos nuestros ejemplos todo el prompt completo. Debes recordar que el comando es lo que va detrás de $ o # según corresponda.

Sigamos. Lo que hemos hecho arriba ha sido ASIGNAR al nombre "dias" el valor de "7". Acabamos de crear una VARIABLE DE ENTORNO con nombre "dias" y valor "7". Sencillo, ¿no?. Podemos introducir texto como valor de una variable poniéndolo entre comillas. Para "referirnos" a las variables de entorno podemos usar el símbolo $. Para mostrar el contenido de una variable usaremos el COMANDO echo. Así, por ejemplo, para mostrar el valor de la variable dias que acabamos de crear, escribiríamos:

$ echo $dias

Lo cual nos daría como salida una nueva línea con el valor de dias, en este caso, 7. Nada más (por ahora) de todo esto, simplemente que nos vaya sonando.

Ahora debemos saber que BASH almacena algunas variables de entorno. Estas variables son necesarias, y contienen, por ejemplo, el tipo de sistema operativo que se está usando, la versión, el usuario activo, el directorio actual...

De todas ellas sólo nos interesa por ahora una llamada PATH (en mayúsculas, en Linux los nombres las distinguen, también en las variables). La variable PATH es muy importante. Puedes comprobar lo que contiene escribiendo:

$ echo $PATH
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/home/usuario/bin

Como podemos observar, lo que contiene esta variable son rutas de directorios separadas por dos puntos. /bin, /usr/bin, y /usr/local/bin son ejemplos de rutas de directorios. ¿Para qué sirven? Es sencillo. Cuando introducimos un comando en BASH (como los que ahora vamos a ver, y como ya hemos visto con echo), se busca por el archivo del mismo nombre que ejecuta ese comando, en todos los directorios que la variable $PATH tiene asignados. Si encuentra el archivo (que se llama igual que el comando que tecleemos y contiene unas instrucciones) lo ejecutará. Si no lo encuentra, nos mostrará un mensaje de error. Todo esto puede parecer complicado, pero verás que no lo es en absoluto.

Notemos que si hacemos login como root y mostramos el contenido de PATH, ésta contiene algunas cosas más, como /usr/sbin y /sbin por ejemplo. Estos directorios sólo los tendremos si entramos desde la pantalla de login como root.

Pero podemos añadir más directorios a nuestra variable PATH. Bien porque trabajemos mucho con ellos o porque es necesario para la ejecución de algún programa. La forma de hacerlo es la siguiente:

$ PATH="$PATH:/home/usuario/programas"

¿Recordamos que la primera $ sólo indica que estamos trabajando como un usuario normal? Entonces perfecto. Lo que hace esta línea es simple. Al contenido de PATH añade unos dos puntos y a continuación añade el directorio que nosotros queramos a nuestra PATH. El resultado es que si mostramos haora el valor de PATH con echo obtendremos todo lo que teníamos anteriormente más el directorio que hemos añadido.


Referencias Comandos básicos de la terminal Bash

Ciertamente, todos estos conocimientos que estamos citando pueden casi siempre aplicarse a otras terminales como sh, pero nos referimos a BASH por ser la que viene por defecto con Linux. Ahora vamos a explicar el concepto de DIRECTORIO DE TRABAJO o directorio actual. En esta línea:

[usuario@maquina usuario]$

estamos trabajando en el directorio /home/usuario. ¿Qué quiere decir esto? Pues es fácil, que podemos "hacer referencia" a un archivo desde un comando simplemente con el nombre de archivo y no su ruta completa si éste está en /home/usuario porque es el directorio de trabajo actual. Un ejemplo rápido, vamos a editar un archivo para comprender esto, no te preocupes por el comando vim, puesto que lo veremos más adelante. Si estamos en /home/usuario y tenemos un archivo que se llama /home/usuario/mitexto, para editarlo, bastaría con hacer:

[usuario@maquina usuario]$ vim mitexto

Como estamos trabajando en el directorio /home/usuario y el archivo que queríamos editar también está en el directorio de trabajo, el editorlo encontraría sin problemas. Esto sería equivalente a hacer:

$ vim /home/usuario/mitexto

pero como acabas de ver, teclear la ruta completa no es en absoluto necesario si el objetivo de nuestro comando está en el directorio de trabajo.

Sugerencia: Puedes salir del editor pulsando: Esc :wq INTRO

Para mas información sobre VIM mira el capítulo 4 (VIM básico)


Referencias relativas

Este concepto es también sencillo. Partimos de que estamos otra vez en /home/usuario (de nuevo no te preocupes por vim, el comando del editor, lo usamos como un ejemplo para que veas las referencias, no es necesario que pruebes esto porque vamos a explicarlo más adelante), y queremos editar un archivo que está en /home/usuario/documentos/mitexto. Al estar en /home/usuario, bastaría con hacer:

$ vim documentos/mitexto

Lo cual sería equivalente a hacer:

$ vim /home/usuario/documentos/mitexto

Pero como ya hemos visto, con la referencia relativa al directorio en el que nos encontramos es suficiente. Por esto ya has podido observar que podemos referirnos a los archivos de dos formas distintas: mediante una referencia relativa al directorio actual en el que nos encontramos o mediante una REFERENCIA ABSOLUTA. Las referencias absolutas comienzan siempre desde la raíz del sistema de archivos, /, y por eso siempre empiezan con / e indican la RUTA COMPLETA al archivo al que nos estamos refiriendo.

El comando cd

Este sencillo comando, lo que nos va a permitir es cambiar nuestro directorio de trabajo (o directorio actual). Es una abreviatura (como muchos otros comandos) de lo que hace, en este caso de Change Directory. Podemos necesitar cambiar nuestro directorio de trabajo si vamos a trabajar con muchos archivos que estén en el direcotrio al que nos cambiamos, y no queremos teclear siempres su ruta completa por resultar esto demasiado incómodo y largo. Partimos de /home/usuario, y nos queremos cambiar a /usr/local, que es donde residen muchas cosas personalizadas de nuestro sistema. Se podría hacer de la siguiente forma:

[usuario@maquina usuario]$ cd /usr/local/

Y entonces ya estaríamos en /usr/local:

[usuario@maquina local]$

Si simplemente escribimos cd, sin ningún argumento (dato que necesita un comando para operar de una manera u otra, con un archivo u otro... como después veremos), lo que hará será llevarnos a nuestro directorio personal:

[usuario@maquina local]$ cd
[usuario@maquina usuario]$

Como puedes ver, ahora nuestro directorio de trabajo es /home/usuario, que es nuestro directorio personal.

Pero hay algunas cosas que no hemos contado de las referencias relativas. Es que dos puntos seguidos ... se refiere al directorio en el que nos encontramos (directorio actual). Si estando en /home/usuario escribes cd ., te darás cuenta de que no cambia de directorio, se queda en el actual, de la misma manera que si hubieras hecho cd .. te habría llevado a /home , el directorio inmediatamente superior. Estos dos comandos equivaldrían a cd ./ y cd ../; es lo mismo, pero es realente con la barra como deben utilizarse estos comandos (puesto que nos estamos refiriendo a directorios). Utilizarlos sin ella, puede dar lugar a confusión y equivocaciones (recuerda que los archivos y directorios ocultos comienzan su nombre por .). Ahora ya sabes que para poder ir a /home/usuario/documentos podríamos haber hecho: se refieren al directorio inmediatamente anterior (superior) al que nos encontramos, y un punto

$  cd ./documentos

Lo cual no es muy eficiente en este caso, pero como veremos más adelante, es de obligada utilización para ejecutar un comando en el directorio actual si este directorio actual no está en la PATH. Por ejemplo para ejecutar un programa (como veremos más adelante) que estuviese en /home/usuario, al no estar esta ruta en $PATH, necesitaríamos hacerlo así (estando en /home/usuario):

$ ./miprograma

Te habrás dado cuenta de que con una referencia relativa es más cómodo, más sencillo y más rápido. Si simplemente dijésemos desde /home/usuario miprograma a BASH, no lo encontraría, y nos devolvería que no ha encontrado el comando. ¿Por qué? Pues es fácil, /home/usuario, que es donde reside miprograma, no está en $PATH. Bueno, la ejecución para después, ahora sigamos:

Desde /home/usuario podríamos haber ido a /usr/local con una referencia relativa también:

[usuario@maquina usuario]$ cd ../../usr/local

Este comando sube dos niveles (al directorio inmediatamente superior a /home/usuario, que es /home, y luego al directorio inmediatamente superior a /home que es /; una ez allí busca mediate referencia relativa a / el directorio usr, y una vez dentro, mediante una referencia relativa al directorio usr, busca el directorio local. En este caso es más rápido introducir cd /usr/local que usar una referencia relativa al directorio actual. Generalmente, usaremos referencias absolutas (al sistema de archivos, /) cuando lo que queremos buscar (en este caso un directorio) se encuentre varios niveles por encima del directorio actual, o en una ruta distinta como en este ejemplo.

Archivos y directorios

Ahora vamos a trabajar con archivos y directorios, vamos a crear directorios, los borraremos, listaremos archivos... Todo esto no es difícil de hacer. Si recordamos, es preferible que trabajemos como un usuario normal y no como root, para no dañar nuestro sistema por accidente intentando borrar un directorio importante. Empezaremos con obtener un listado de los contenidos del directorio /. Este se hace con el comando ls. Las opciones (indican al comando la forma en la que debe trabajar) que tiene el comando ls-a y -l. -a indica que se muestren todos los archivos, incluso los ocultos, y -l muestra un listado largo, con detalles como el usuario al que pertenece el archivo, los permisos de ese archivo y algunas cosas más. Los parámetros que toma ls principalmente es un directorio. Si no se especifica ninguno, saca un listado del directorio actual. Veamos algunos ejemplos: son principalmente

[usuario@maquina usuario]$ ls
Desktop Mail documentos kernelconfig programas proyectos
[usuario@maquina usuario]$

Esto es un listado de los archivos y directorios que contiene el directorio actual, en este caso /home/usuario. En algunas distribuciones, los directorios aparecen en color azul, los ejecutables en color verde, etc. pero muchas veces no hay distinción.

[usuario@maquina usuario]$ ls -l

total 44
drwx--S--- 3 usuario usuario 4096 Mar 28 10:51 Desktop
drwx--S--- 2 usuario usuario 4096 Mar 28 01:40 Mail
drwxr-sr-x 3 usuario usuario 4096 Mar 28 10:24 documentos
-rw-r--r-- 1 usuario usuario 18417 Mar 27 21:31 kernelconfig
drwxr-sr-x 4 usuario usuario 4096 Mar 28 10:28 programas
drwxr-sr-x 7 usuario usuario 4096 Mar 28 00:18 proyectos

Como puedes ver, la opción -l nos devuelve un listado largo, en el que apreciamos permisos (que explicaremos más adelante), dueño y grupo de archivo, fecha, nombre, tamaño, y algunos otros detalles.

[usuario@maquina usuario]$ ls -a

. .bash_logout .mcoprc Mail
.. .bash_profile .mozilla ccmsn
.DCOPserver_usuario .bashrc .ssh documentos
.DCOPserver_usuario_:0 .viminfo kernelconfig
.ICEauthority .gtkrc-kde .wmrc programas
.MCOP-random-seed .kde .xchat proyectos
.Xauthority .kderc .xsession-errors
.bash_history .mcop Desktop

Aquí puedes ver un listado de todos los archivos y directorios, incluidos los ocultos. Podríamos emplear las dos opciones juntas, como ls -la o ls -al, lo que nos devolvería un listado largo con todos los archivos, ocultos incluidos. Si tienes cualquier duda o quieres saber qué parámetros acepta un comando, simplemente escribee comando --help y verás una lista de opciones y argumentos que puedes usar con ese comando. En el caso de ls:

$ ls --help

Modo de empleo: ls [OPCIÓN]... [FICHERO]...
Muestra información acerca de los FICHEROs (del directorio actual por defecto).
Ordena las entradas alfabéticamente si no se especifica ninguna de las
opciones -cftuSUX ni --sort.

Los argumentos obligatorios para las opciones largas son también obligatorios
para las opciones cortas.
-a, --all no oculta las entradas que comienzan con .
-A, --almost-all no muestra las entradas . y .. implícitas
--author imprime el autor de cada fichero
-b, --escape imprime escapes octales para los caracteres no
gráficos
--block-size=TAMAÑO utiliza bloques de TAMAÑO bytes
-B, --ignore-backups no muestra la entradas que terminan con ~
-c con -lt: ordena por ctime y muestra ctime (fecha
de última modificación del fichero)
con -l: muestra ctime y ordena por nombre
en cualquier otro caso: ordena por ctime
-C muestra las entradas por columnas
--color[=CUÁNDO] especifica si se usará color para distinguir los
tipos de ficheros. CUÁNDO puede ser `never',
`always' o `auto'
-d, --directory muestra las entradas de los directorios en lugar
de sus contenidos
-D, --dired genera el resultado para el modo `dired' de Emacs
-f no ordena, utiliza -aU, no utiliza -lst
-F, --classify añade un indicador (uno de */=@|) a las entradas
--format=PALABRA across -x, commas -m, horizontal -x, long -l,
single-column -1, verbose -l, vertical -C
--full-time como -l --time-style=full-iso
-g como -l, pero no muestra el propietario
-G, --no-group no muestra la información del grupo
-h, --human-readable muestra los tamaños de forma legible
(p.e. 1K 234M 2G)
--si análogo, pero utilizando potencias de 1000,
no de 1024
-H, --dereference-command-line sigue los enlaces simbólicos en la línea de
órdenes
--indicator-style=PALABRA añade un indicador con estilo PALABRA a los
nombres de las entradas: none (predeterminado),
classify (-F), file-type (-p)
-i, --inode muestra el número de nodo-i de cada fichero
-I, --ignore=PATRÓN no lista las entradas que coincidan (encajen)
con PATRÓN de shell
-k como --block-size=1K
-l utiliza un formato de listado largo
-L, --dereference al mostrar la información de un fichero para un
enlace simbólico, muestra la información del
fichero al que apunta el enlace en lugar de la
del propio enlace
-m rellena el ancho con una lista de entradas
separadas por comas
-n, --numeric-uid-gid como -l, pero muestra los UIDs y GIDs numéricos
-N, --literal muestra los nombres literalmente (no trata p.ej.
los caracteres de control de forma especial)
-o como -l, pero no muestra el grupo
-p --file-type añade un indicador (uno de /=@|) a las entradas
-q, --hide-control-chars imprime ? en lugar de los caracteres no gráficos
--show-control-chars muestra los caracteres no gráficos tal y como
son (predeterminado a menos que el programa sea
`ls' y la salida sea un terminal)
-Q, --quote-name encierra los nombres de las entradas entre
comillas
--quoting-style=PALABRA utiliza el estilo de cita PALABRA para los
nombres de las entradas:
literal, locale, shell, shell-always, c, escape
-r, --reverse invierte el orden, en su caso
-R, --recursive muestra los subdirectorios recursivamente
-s, --size muestra el tamaño de cada fichero, en bloques
-S ordena los ficheros por tamaño
--sort=PALABRA extension -X, none -U, size -S, time -t, version -v
status -c, time -t, atime -u, access -u, use -u
--time=PALABRA muestra la fecha según PALABRA, en lugar de la
fecha de modificación:
atime, access, use, ctime ó status; utiliza
la fecha especificada como clave de ordenación
si --sort=time
--time-style=ESTILO muestra la fecha utilizando el estilo ESTILO:
full-iso, long-iso, iso, locale, +FORMATO
FORMATO se interpreta como en `date'; si FORMATO
es FORMATO1FORMATO2, FORMATO1 se
aplica a los ficheros no recientes y FORMATO2
a los ficheros recientes; si ESTILO está precedido
por `posix-', ESTILO surte efecto solamente fuera
del local POSIX
-t ordena por la fecha de modificación
-T, --tabsize=COLS establece los topes de tabulación a cada COLS
en lugar de 8
-u con -lt: ordena por atime y muestra atime (fecha
de último acceso al fichero)
con -l: muestra atime y ordena por nombre
en cualquier otro caso: ordena por atime
-U no ordena; muestra las entradas en el orden del
directorio
-v ordena por versión
-w, --width=COLS establece el ancho de la pantalla en lugar del
valor actual
-x muestra las entradas por líneas en vez de por
columnas
-X ordena alfabéticamente por la extensión de la
entrada
-1 muestra un fichero por cada línea
--help muestra esta ayuda y finaliza
--version informa de la versión y finaliza

TAMAÑO puede ser (o puede ser un entero seguido opcionalmente por) uno
de los siguientes: kB 1.000, K 1.024, MB 1.000.000, M 1.048.576, y así
en adelante para G, T, P, E, Z, Y.

Por defecto, no se emplea color para distinguir los tipos de ficheros. Esto
equivale a usar --color=none. Usar la opción --color sin el argumento opcional
CUÁNDO equivale a usar --color=always. Con --color=auto, sólo se muestran
los códigos de color si la salida estándar está conectada a un terminal (tty).

Comunicar bugs a .

(La ayuda puede no estar en castellano). Como puedes ver, la cantidad de opciones es impresionante. Te hemos citado las que de momento te pueden ser necesarias. Es obvio que no es necesario que recuerdes ninguna excepto las dos vistas, cuando el resto puedes obtenerlas mediante --help. Recuerda que puedes hacer esto con casi cualquier comando.

Podríamos listar los contenidos de otro directorio sin cambiarnos a él:

$ ls /usr/local/
bin include lib man sbin share src

Pasemos a ver ahora cómo podemos crear un directorio. Como pienso que habrás intuido, no puedes crear un directorio en un lugar en el que no tienes permiso para ello. Generalmente, un usuario normal sólo tendrá permiso para ello en su directorio de usuario, /home/usuario, así que cámbiate ahí si no es donde estás. Para crear directorios podemos utilizar tanto referencias relativas al directorio actual como referencias absolutas al sistema de archivos. Para crear directorios, basta con usar el comando mkdir. Crearemos un directorio en /home/usuario llamado pruebas, y otro dentro de este llamado pruebas1 como ejemplo:

$ cd /home/usuario

Primera forma de hacerlo:

$ mkdir pruebas
$ cd pruebas
$ mkdir pruebas1

Segunda forma de hacerlo:

$ mkdir pruebas
$ mkdir pruebas/pruebas1

Tercera forma de hacerlo:

$ mkdir /home/usuario/pruebas
$ mkdir /home/usuario/pruebas/pruebas1

Creo que ya lo has entendido, ¿verdad? Puedes moverte entre esos directorios con el comando cd como ya explicamos antes, así practicas un poco. Ahora vamos a mover y copiar archivos a esos directorios. Para mover archivos y directorios usaremos el comando mv. Date cuenta que este comando también nos permite renombrar un archivo. Supongamos que tenemos un archivo llamado miarchivo en /home/usuario. Vamos a renombrarlo a minuevoarchivo (es recomendable no usar espacios en los nombres de archivo, puedes usar guiones bajos (_) en sustitución de los espacios; asimismo es recomendable como ya tratabamos, no usar acentos en los nombres de archivo):

$ cd /home/usuario

Primera forma de hacerlo:

$ mv miarchivo minuevoarchivo

Segunda forma de hacerlo:

$ mv miarchivo /home/usuario/minuevoarchivo

Tercera forma de hacerlo:

$ mv /home/usuario/miarchivo minuevoarchivo

... y así algunas formas más, pero creo que ya lo has entendido, aquí también podemos emplear referencias relativas al directorio actual y referencias absolutas al sistema de archivos. Podemos renombrar directorios también, y moverlos unos dentro de otros. Para mover un directorio llamado programas y llevarlo dentro de otro llamado pruebas, haríamos algo como esto:

$ mv programas pruebas/

De esta forma el directorio programas se queda dentro de pruebas. Como ves, el comando mv toma como primer argumento el fichero o directorio origen, y como segundo argumento el destino; recuérdalo. Podríamos reestablecer el directorio programas al nivel anterior donde estaba:

$ cd pruebas/
$ mv programas ../

Como habrás podido apreciar y ya hemos dicho, el comando mvtoma primero lo que se quiere mover y después a dónde se quiere mover. Para dominarlo totalmente, lo mejor es que practiques, es la única forma de comprender cómo se comporta bajo determinadas situaciones este comando, y de que tú lo domines.

Para borrar un directorio, si este esta vacío, usaremos el comando rmdir. Por ejemplo vamos a borrar los directorios pruebas1 y pruebas que creamos anteriormente. Si recuerdas, pruebas1 estaba dentro de pruebas:

$ ls
pruebas
$ rmdir pruebas
rmdir: `pruebas': El directorio no está vacío / Directory not empty
# Como ves, no podemos borrarlo porque no está vacío

$ cd pruebas/
$ ls
pruebas1
$ rmdir pruebas1
# pruebas1 está vacío y por lo tanto se borra

$ cd ../
$ rmdir pruebas
# Ahora pruebas está vacío y también se borra

(Las líneas que comienzan por # son explicaciones del manual para que comprendas lo que pasa). Está claro que hacer todo esto para borrar un directorio y todo lo que éste contenga no es del todo cómodo. Unas líneas más adelante veremos cómo es posible borrar todo un directorio con todo lo que contenga por debajo de él (siempre que tengamos los permisos adecuados sobre todo lo que contiene y sobre el directorio mismo).

El comando rm nos permite borrar uno o varios archivos. Por ejemplo, borraremos el archivo minuevoarchivo:

$ rm minuevoarchivo

Si tenemos los permisos adecuados sobre él, minuevoarchivo será borrado, en la mayoría de los casos sin preguntarnos, por lo cual debemos tener bastante cuidado con lo que hacemos con los archivos de nuestro sistema, porque una vez borrados es imposible volver a recuperarlos (¿para que los borraríamos entonces si siguiesen estando ahí?). Al igual que todos los comandos anteriores, rm es muy potente y sobre todo muy flexible. Veremos cómo es capaz de borrar un directorio con todo lo que tenga por debajo.

Para esto se usa, principalmente, la opción -r. Esta opción le dice a rm (y a algunos otros comandos) que opere con recursividad, esto es, que se vaya adentrando nivel por nivel debajo del directorio que le hemos indicado y que vaya borrando todo lo que encuentre a su paso. De este modo, el directorio pruebas/ que teníamos antes, podríamos haberlo borrado así:

$ rm -rf pruebas/

La opción -r como hemos dicho irá borrando todo, terminando por borrar el directorio, y la opción -f es para que no nos pregunte si queremos que borre o no cada subdirectorio del que nosotros le indicamos. Recuerdo que el caracter * hace referencia a todos los archivos de un directorio por lo que si quisieramos haber borrado todo lo que tuviese dentro el directorio pruebas/ pero sin borrar éste, podríamos haber hecho:

$ rm -rf pruebas/*

La opción -r nos permite de igual forma copiar un directorio entero. Pogamos que queríamos copiar el directorio pruebas (con todo su contenido) a un nuevo directorio llamado pruebas2 que crearemos al mismo nivel que pruebas:

$ cp -rf pruebas/ pruebas2/

Más o menos ya tienes una idea de cómo se maneja el sistema de archivos desde la consola. Para entender y dominar todo esto no hay más que practicarlo. Si quieres saber cómo crear archivos, la sección del editor vim puede servirte, ahora vamos a comentar algunos detalles más para referirnos a archivos en BASH.

Piensa que tenemos un directorio que se llama mis libros. Como puedes observar, este nombre de directorio tiene un espacio, lo cual no es nada recomendable. La manera de "nombrarlo" desde la terminal es la siguiente: mis\ libros. El espacio se sustituye por \ (barra invertida y un espacio).

Piensa ahora que tenemos que referirnos a un archivo que tiene cinco letras pero que desconocemos cuál es la última (o cualquiera) de estas letras. Por ejemplo, un archivo que se llame maybe, nosotros desconocemos la letra "b". Podríamos referirnos a él usando may?e, y la terminal lo encontraría inmediatamente.

El asterisco * puede referirse a todos los archivos de un directorio si lo usamos solo. Por ejemplo, borramos todos los archivos de un directorio:

$ rm *

O bien puede referirse a archivos que contengan una cadena de caracteres o que empiecen o terminen por una determinada cadena de caracteres. Por ejemplo todos los archivos ocultos (que empiezan por "."):

$ rm .*

Otro ejemplo, borramos todos los archivos que contengan la cadena "so" en su nombre:

$ rm *so*

Todo esto es muy sencillo. Vamos a terminar con una función muy importante de BASH, que es completar el nombre de archivo o directorio por nosotros. Supongamos que queremos entrar en un directorio dentro del actual que se llama html_docs y que no hay ningún otro directorio que empiece de modo igual o parecido. Escribiremos:

$ cd html (presionamos el tabulador aquí)
# (entonces la línea se nos queda:)
$ cd html_docs/

Si pulsamos INTRO, nos habremos cambiado al directorio html_docs/. Mira lo que acabamos de descubrir. Si estamos escribiendo un nombre de archivo o de directorio y presionamos el tabulador, si ese nombre existe, BASH lo rellenará por nosotros. Cómodo, ¿no? De esta forma no tendremos que escribirlo entero. Ahora supongamos que además de html_docs hay otro directorio al mismo nivel que se llama html_includes. Si escribimos ahora cd html y presionamos el tabulador, no habrá salida porque no sabrá cuál de ellos elegir. La solución es pulsar el tabulador dos veces y nos mostrará las opciones que coinciden con lo que llevamos escrito, con lo cual podresmo seguir escribiendo hasta que hayamos eliminado una de las opcioens y pulsemos el tabulador de nuevo solo una vez, entonces sí que nos rellenará el nombre de archivo o directorio. Ten en cuenta que esto sirve con casi cualquier comando y es indiferente para referencias relativas al directorio actual o absolutas del sistema de archivos , es muy útil y permite ahorrar mucho tiempo y equivocaciones escribiendo nombres de ficheros o directorios en la línea de comandos. Sin duda, una importantísima característica para los que no nos sobra el tiempo :-)

Ya hemos dado un repasito a algunas cosas básicas de la terminal BASH. Por lo menos ya no estás perdido, practica todo esto un poco, y también léelo de vez en cuando, porque conforme vayas practicando, mejor comprenderás algunas cosas que ahora no eres capaz de comprender o asimilar sin haber visto otras primero. El dominio de la terminal BASH en un sistema Linux es imprescindible, porque (afortunadamente) no hay GUIs (interfaces de usuario gráficas) para todo lo que podemos hacer en nuestro sistema. Verás como aunque estás trabajando en modo gráfico dentro de unas horas o unos días, tendrás abierta casi siempre una ventan de la terminal en modo gráfico para hacer todas esas cosas que sólo es posible (y más eficiente) hacerlas desde una terminal o que son más flexibles desde la línea de comandos.


martes, 6 de noviembre de 2007

Capitulo 2: Guía inicial para la instalación de una distribución

II Guia inicial para la instalación de una distribución
Antes de instalar
Hardware
Quedarse con lo que tenemos en la PC
Escoger la Distribución
Guias generales para la instalación
Redimencionamiento de particiones
Otros consejos

Antes de Instalar

Veamos qué necesitamos para instalar una distribución de Linux en la PC.


Hardware

Como veremos más adelante en este manual, y se descubrirá cuando se tenga experiencia en el uso y administración de los sistemas Linux, es posible instalar Linux desde en un equipo "antiguo" hasta en los grandes servidores con varios microprocesadores y varios discos duros. Para instalar en un ordenador poco potente, necesitaríamos algunos conocimientos para personalizar a fondo la instalación que suponemos que no se tienen ahora. Así que vamos a buscar un equipo en el que una instalación normal funcione a una velocidad aceptable. Esto, lógicamente, va a depender de qué fecha sea la distribución que vayamos a instalar. Cuanto más reciente sea, necesitaremos un equipo más potente.

Las distribuciones actuales pueden correr aceptablemente en un procesador a 450 MHz y 128 MB de memoria RAM. La memoria RAM va a ser un factor que incremente el rendimiento del sistema Linux en un gran porcentaje, mucho más de lo que pudiera parecernos en un principio.

En cuanto al espacio en disco, estamos en las mismas, dependerá de lo que vayamos a instalar, pero como empezarmos por una instalación estándar (no tocaremos mucho en un principio), pondremos un mínimo de 3GB de disco libres. Si tienes más espacio, puedes dejar 5 ó 6 GB los cuales te serán suficientes si tomas la inteligente decisión de seguir adelante con Linux :-)


Quedase con lo que tenemos en la PC

Si somos usuarios de Windows, es posible que tengamos un poco de miedo a lo desconocido y a pensar "¿podré seguir haciendo esto con Linux?" "¿Tardaré mucho en adaptarme?" y cosas por el estilo. Tanto es así, que querríamos conservar nuestra instalación de Windows al tiempo que instalamos Linux. Como se hablo en el Capítulo 1, eso es totalmente posible. Lo más fácil es dejar espacio libre en nuestra partición Windows, y con el programa 'Partition Magic', redimensionar nuestra partición de Windows de tal modo que dejemos espacio libre en disco suficiente como para que en la instalación llenemos ese espacio con las particiones Linux. Claro, 'Partition Magic' es un programa comercial, y un poco caro, así que si no se puede contar con él, todavía tenemos una esperanza más. Esta es realmente tediosa y consiste en usar un programa llamado fips que viene con algunas distribuciones de Linux, cuyo uso detallamos en las secciones siguientes de guía inicial a la instalación. No obstante, la instalación de Mandrake también nos permite redimensionar nuestra partición Windows, incluye en la instalación un interfaz para gestionar las particiones de disco similar al de Partition Magic para Windows, así que si vamos a instalar Mandrake puede que estemos salvados.

No es muy común, pero raras veces se podrían perder los datos de nuestro disco duro. Evitemos males mayores, que no nos cuesta nada, y saquemos una copia de los documentos importantes o del trabajo que tenemos en nuestro sistema actual. El resto de software podríamos reponerlo desde los discos de instalación. Repetimos que esto no es nada frecuente pero podría ocurrir.


Escoger la distribución

Si, como suponemos puesto que estás leyendo esto, va a ser tu primera instalación de Linux, tendrás que elegir una distribución que no sea demasiado avanzada y te permita instalar sin grandes dificultades. Hoy esto no es dificíl, puesto que la mayoría de distros se instalan de manera muy sencilla. Podríamos elegir entre una de las siguientes:

  • Mandrake Linux: Esta distribución de Linux es de las más amigables si nos estamos acercando a Linux la primera vez, calificada por muchos (y creemos que acertadamente) como la más sencilla para iniciarnos. La única "pega" (que no lo es realmente) de esta distribución es que instalará un montón de cosas que puede que no necesitemos, pero es el precio de una instalación sencilla. Es por esto por lo que deberíamos tener una máquina potente para instalar esta distribución sin que se nos vaya arrastrando. Ofrece un escritorio muy agradable y completo, además de varios asistentes sencillos para cambiar la configuración del hardware.

En la pagina de Mandrake: (http://www.mandrake.com/ ) podemos descargar su distro. Deberemos buscar las imágenes ISO (archivos .iso) y descargarlas. En párrafos siguientes comentamos más acerca de las descargas. En la web oficial de Mandrake también puedes informarte de las características de esta distro.

  • RedHat/Fedora Linux: Fedora es la distribución libre (gratuita) de la compañía RedHat, y RedHat Linux es su distribución comercial. Ambas son similares, sobre todo de cara al usuario medio. Podrían ser la segunda distribución más sencilla con la que tratar y por lo tanto igual de indicada para la instalación. Es algo más complicada que Mandrake para empezar, aunque la diferencia no es excesivamente notable. La página oficial de RedHat ( http://www.redhat.com/ ) nos ofrece información sobre la distribución comercial y la web de Fedora (http://fedoraproject.org/) nos informa y nos permite descargar la distribución gratuíta.

Si hemos decidido descargar la distribución, nos aseguraremos de que tenemos una buena conexión, porque con un ancho de banda de bajada de 27 KBytes/s vamos a tardar unas 6 horas por CD. Si tenemos en cuenta que tanto Mandrake como RedHat son 3 CDs.... ¡¡18 horas!! ¡¡y eso con una buena conexión!!

Si tenemos la buena conexión, veamos qué es lo que tenemos que descargar. Buscaremos, los archivos ISO (.iso), cada uno de ellos es un CD de los que luego grabremos. Así que sí, necesitamos tener una grabadora de CDs, unos cuantos CDs vírgenes y un programa de grabación funcionando en nuestro sistema operativo actual para grabar las imágenes de CDs ISO a los CDs vírgenes. En fin, como fuimos cocineros antes que frailes, en Nero para Windows es Archivo -> Grabar Imagen, esto es, no basta con grabarlo como si fuera un fichero normal, cada programa tiene su manera de grabar estas imágenes, así que buscaremos la del nuestro y las grabaremos

Si estas en España, algo rápido y actualizado es ftp.rediris.es. Nos identificaremos como anonymous dando cualquier password, y nos moveremos por sus directorios hasta encontrar los archivos .iso de los discos de la distribución que queremos. Entonces los descargaremos con algún programa que nos permita continuar la descarga en caso de problemas. Cuando las tengamos descargadas las grabaremos.

Si no puedes descargar la distro desde Internet, puedes comprarla en caja. Las ventajas de comprarla son realmente muchas, y es que estarás seguro de que los discos no tendrán problemas de haberse descargado, tendrás más software que con las download versions, soporte por mail si tienes dudas en la instalación por parte de la compañía que crea la distro, y quizás lo mejor de todo, un montón de manuales impresos con los que guiarte y aprender a usar Linux paso a paso y tener una referencia impresa si la necesitas posteriormente. Si juntamos todo, el precio no es excesivo, ni mucho menos (compara con: Windows + Office + Photoshop + Soft de desarrollo + ..., sería muchísimo dinero). Precios aproximados; para Mandrake de 60 a 70 Euros (PowerPack) y para RedHat de 40 a 50 Euros (Personal Edition). Si vas a comprar la distro, otra que podrías evaluar sería SuSE Linux, que no ofrece la posibilidad de descargar los CDs de Internet, con un precio de 40 a 50 Euros (Personal). La decisión es tuya, estás ante tres buenas distribuciones que te servirán para empezar con Linux y para tu trabajo diario con multitud de herramientas de configuración y un escritorio agradable. Cualquiera de ellas sería una buena elección.

En el manual también vamos a tratar la distribución Debian GNU/Linux, es una distribución de gran calidad y que ofrece un gran rendimiento, con un sistema de paquetes para instalar software muy avanzado. No obstante, esta distribución puede ser demasiado difícil para iniciarnos en Linux, así que puedes empezar con una de las anteriores y posteriormente experimentar con alguna distribución avanzada como comentaremos después: Debian, Slackware o Gentoo.


Guias generales para la instalación

Instalar una distribución de Linux es realmente fácil en nuestros días. Los instaladores han avanzado mucho y hoy GNU/Linux se asemeja más bien a un Mac o un Windows que a un super-UNIX de alto nivel en lo que a la instalación se refiere (no ha perdido potencial por tener una instalación sencilla). Sería una pérdida de tiempo describir sección por sección la instalación de cada una de las distribuciones que recomendamos, así que lo que vamos a hacer es dar unos consejos generales que te resolverán las minimas dudas que puedan surgirte instalando. Puedes buscar los manuales de instalación en los discos o bien en las webs de las empresas distribuidoras si crees necesitar ayuda extra.


Redimensionado de particiones Windows con fips

Como ya comentamos, si queremos conservar nuestra partición Windows al instalar Linux, hay más bien poco que podamos hacer si no usamos 'Partition Magic' para hacer más pequeña nuestra partición Windows. Si vamos a instalar Mandrake Linux no tendremos problemas porque como hemos comentado antes, incluye un soft que nos permitirá hacer más pequeña nuestra partición Windows sin perder sus datos, para despues en el espacio libre crear las particiones Linux.

fips es una alternativa que pasamos a describir, aunque puede ser algo tediosa. Esta herramienta, aunque puede que la incluyan algunas distros más, es original de RedHat Linux.


Sugerencia: Recuerda hacer una copia de seguridad de tu trabajo antes de proceder con este método.

Este método está lejos de ser eminentemente práctico, además vamos a tener que depender de lo que Windows quiera hacer con nuestras particiones.

Procederemos siguiendo estos pasos:

Sugerencia: Es posible que esto no funcione en algunas versiones de Windows


  • En DOS (o una ventana de DOS) teclearemos: chkdsk

  • Ejecutamos el scandisk en Windows (el corto será suficiente)

  • Creamos un disquete de arranque con el programa FIPS incluido generalmente en el primer CD de RedHat Linux, escribiendo en DOS:

    C:\ format a:/s

    A continuación le copiamos los archivos Restorbb.exe, Fips.exe y Errors.txt, localizados generalmente en el directorio dosutils/fips20 del CD 1 de RedHat Linux.

  • Desactivamos la memoria virtual de Windows.

  • Cerramos todos los programas posibles y defragmentamos el disco duro para mover todos sus datos al principio.

  • Reiniciamos el sistema y ponemos el disco de arranque. Si no aparece C:\ escribimos algo como dir C:\ y luego nos vamos a A:\ donde escribiremos:

    A:\ fips

    Con esto arranquermos fips por fin. Si no nos deja, probaremos a escribirlo desde C:\

  • Con fips ejecutándose, primero elegimos el disco duro que queremos usar.

  • Elegimos el número de partición que queremos dividir y le decimos que sí queremos comprobar la partición

  • Le decimos que sí queremos hacer copia de seguridad del sector de inicio de nuestro disco duro, sin sacar el disquete le decimos que sí con la tecla Y. Se nos ofrecerá el espacio disponible para crear una nueva partición. Si es insuficiente o menor del que está en realidad significa que hay archivos ocultos que no han sido movidos al principio del disco duro con la defragmentación, o sea que tendremos que buscarlos y eliminarlos (y después defragmentar de nuevo, ya dijimos que esto no es cosa de coser y cantar...).

  • Decidimos el tamaño nuevo de las particiones con las flechas izquierda y derecha, y cuando tengamos el que buscamos, presionaremos intro. A continuación podemos confirmar o cancelar la creación de particiones, continuaremos con la tecla C. Y a continuación con la tecla Y. Es todo; cuando finalice la tarea, el programa se cerrará y reiniciaremos sin quitar el disco. Luego escribiremos

    fips -t

    para comprobar que todo está correcto. Si no fuera así, FIPS te ayudará a dejarlo todo como estaba. Bueno, ahora quitamos el disco y reiniciamos, observando como Windows arranca normalmente.


Otros consejos

Es posible que durante algún momento de la instalación te sientas perdido, así que aquí van una serie de consejos que te pueden ayudar.

Veamos algo sobre los sistemas de ficheros, las particiones y el cargador de inicio. Mandrake, por ejemplo, nos porporcionará la opción de redimensionar nuestras particiones Windows para crear espacio libre y añadir posteriormente las particiones para Linux. Para esto debemos coger la instalación personalizada (a veces llamada avanzada). Podemos ver más detalles en la documentación online de la distro en http://www.mandrake.com/. En el caso de RedHat deberíamos elegir la herramienta DiskDruid para crear las particiones; pero con ella ya deberemos tener espacio libre para crear las particiones Linux, puesto que esta herramienta no nos permite redimiensionar las particiones. En cuanto a los sistemas de ficheros (la manera de escribir los datos en el disco), elegiremos, si están disponibles, EXT3 o ReiserFS. Estos sistemas de ficheros no necesitan una comprobación si el PC se apaga inadecuadamente (también llamados de journalising). Crearemos tres particiones, una de mayor tamaño (al menos 3 GB) donde instalaremos el sistema, otra de tamaño medio dependiendo del disco que dispongamos (muy mínimamente 1 GB) donde se guardarán los documentos y configuraciones de los usuarios, y otra de unos 200 MB para SWAP (intercambio). Si fuera posible, la partición SWAP se creará en otro disco distinto a la partición principal. Cuando las tengamos creadas, las herramientas de particionado de los instaladores suelen tener un botón llamado Modificar o algo así. Ahí podremos escoger un tipo de sistema de ficheros, y elegir el punto de montaje . Para la partición principal escogeremos / como punto de montaje, para la de tamaño medio (la de los usuarios), elegiremos el punto de montaje /home, y la de SWAP le diremos que es del tipo SWAP y no se le asigna ningún punto de montaje. En lo que respecta al cargador de inicio, elegiremos GRUB si está disponible, y le diremos que queremos instalarlo en el primero disco duro de nuestro sistema (al principio de él), esto es, por ejemplo /dev/hda. Crearemos también un disco de inicio, lo etiquetaremos y lo guardaremos para arrancar Linux en caso de problemas después.

Otras preguntas en las que podrías dudar serían, por ejemplo, si quieres ejecutar las X al inicio. Para empezar con Linux, responde sí . El servidor X, es el servidor gráfico de Linux. KDE y GNOME son entornos de escritorio; instala, al menos, uno de ellos. Mozilla y Galeon son navegadores y Evolution y KMail son clientes de e-mail. Los instaladores nos dejarán probar resoluciones y profundidad de colores distintas para las X.

Deberías elegir una instalación personalizada, porque no es nada complicado aunque así suene. No instales servidores que no necesites (e igualmente con los servicios al inicio), puesto que harán que el sistema vaya más lento.

Ahora las distribuciones son fáciles de instalar, así que con estos consejos no deberías tener ningún problema para instalar tu sistema Linux.

Las primeras veces que arranques Linux, antes de seguir leyendo, ¡investiga!, es una forma de aprender a ver cómo funciona el escritorio que vayas a usar.

lunes, 5 de noviembre de 2007

Capitulo 1: Introducción a GNU/Linux

1.- Introducción

Introduccion a GNU/Linux
Conceptos básicos GNU/Linux
Arranque de Linux
Sistema de archivos
Nombre de archivos en Linux
Software adicional para GNU/Linux
Usuarios y permisos de Archivos
Arranque de Linux II
Nombramiento de dispositivos y particiones


Introducción a GNU/Linux

Para empezar, GNU/Linux es un sistema operativo. Esto significa que es un conjunto de instrucciones que nos va a permitir "hacer cosas", cualquier tipo de tarea, con nuestro ordenador. Sus características más notables son:

  • Proviene de UNIX, otro sistema operativo, y es casi un derivado de él.

  • Es parte del proyecto GNU, lo que significa, entre otras muchas cosas, que es libre y que muchas veces no estás obligado a pagar por él. Puedes usarlo de modo gratuíto y además puedes modificar su código fuente, para adaptarlo a tus propias necesidades o para contribuir en su continuo desarrollo, en el que toman parte programadores de todo el mundo (tú puedes ser uno de ellos). Antes de seguir leyendo y aprendiendo sobre él, conviene que visites http://www.gnu.org/ en la que se dan algunos detalles sobre qué es el proyecto, qué puedes hacer y qué no puedes hacer con el código fuente además de algunos otros detalles importantes.

  • Es potente, seguro y estable. Debido a ello resulta un sistema operativo ideal para servidores ya que cumple muy bien esta función aunque como sistema operativo de oficina, de escritorio o de publicación también es excelente.

  • Existen infinidad de programas para cualquier tipo de tarea que se quiera desarrollar y aunque muchos de ellos son gratuitos (no por ello de menos calidad que los comerciales, pues muchas veces los superan), también existen aplicaciones comerciales.

  • Es un sistema multiusuario real y multitarea y funciona de manera muy productiva en redes. Desde sus raíces UNIX siempre lo ha sido. En definitiva Linux pone todo lo bueno de los grandes UNIX y algunas cosas más al alcance de todo el mundo. ¿Lo vas a dejar ahí? ¿Lo vas a desaprovechar? Un consejo, yo no lo haría.

Hablemos un poco de la historia de GNU/Linux. Comencemos presentando a quien podemos considerar como el creador de Linux. Su nombre es Linus Trovalds. Puede decirse que Linus Trovalds creó este sistema operativo en 1991. Escribió un KERNEL (parte principal de un sistema operativo) y lo dejó a disposición de sus amigos y luego de toda la Internet para que cualquiera pudiese mejorarlo. Siempre se ha seguido la regla POSIX para que el sistema operativo sea compatible con otros UNIX y de esta manera tener mayor software a su disposición, y que el que se cree para Linux valga también en otros UNIX. Algún tiempo más tarde, para adaptar el sistema operativo y facilitar la instalación, nacieron las compañías distribuidoras de Linux. Entre ellas destacan RedHat, Debian, Caldera, SuSE, Mandrake... Estas distribuidoras pueden cobrar por ofrecer sus productos en CD o en algún otro soporte, pero deben poner su código a disposición del público, si han utilizado software GNU (bajo licencia GPL, que dice entre otras cosas que si usas código GPL en tu programa, tu programa se convierte automáticamente en GPL). Actualmente Linus Torvalds sigue coordinando el trabajo de los programadores de todo el mundo en el núcleo del sistema operativo para mejorarlo y adaptarlo al nuevo hardware.

¿Cabe la posibilidad de preguntarse cuál es la mejor distribución de Linux? GNU/Linux tiene muchas distribuciones, y por lo general, no existe una distribución mejor que las demás, cada una de ellas tiene sus puntos a favor en determinados aspectos. Así, Debian es una distribución que no es realmente comercial en sí como lo son la mayoría de las otras. El desarrollo de Debian es muy parecido al voluntariado que existe en el desarrollo del kernel de Linux. Para los que se aproximan por primera vez a Linux, es cierto que Mandrake, si se tiene una máquina con recursos suficientes, ofrece una instalación y configuración sencillas y un entorno gráfico personalizado ideal para no perderse al principio. Claro que siempre depende de tí y si tienes la oportunidad de tratar con varias distribuciones, trabaja con la que te sientas más cómodo.

¿Puede haber problemas? Dependiendo del hardware que tengas en tu ordenador, porque Linux no soporta algunos dispositivos como Winmódems (módems diseñados para funcionar sólo con M$ Windows, en su mayoría internos), algunas tarjetas de sonido, etc.

¿Puedo tener Windows y Linux en la misma máquina? ¡Claro! Como veremos más adelante la clave está en particionar el disco duro, para que Windows use una parte y Linux use otra, de manera que no interfieran. También como veremos después, el cargador de arranque de Linux te permitirá elegir qué sistema operativo iniciar.


Conceptos básicos de GNU/Linux

En esta sección Vamos a tratar algunas cosas que tenemos que tener claras antes de instalar y comenzar a utilizar Linux. No tienes que aprenderlas de memoria (para eso está este manual), simplemente lee esto con atención y estarás en disposición de continuar aprendiendo sobre Linux.


Arranque de Linux

Veamos qué es lo que pasa cuando nuestra máquina arranca y tenemos que elegir un sistema operativo. Cuando la BIOS termina su chequeo, empieza a buscar dónde hay software para ser ejecutado. Si los CDROMs no son de arranque, pasa al primer disco duro por defecto. En el principio del disco duro o MBR (acuérdate, lo vas a ir más de dos veces con Linux) o en una partición queda instalado con Linux un cargador de arranque. Los dos más usados son LILO (LInux LOader) y GRUB. Nada más arrancar se ejecuta este cargador cuya misión permitir al usuario elegir sistema operativo de los que tenemos en nuestro ordenador quiere utilizar. Al instalarse, LILO (o GRUB) habrán sido configurados para poder arrancar cualquier sistema operativo que tengamos instalado, reconoce la mayoría de los existentes. Seleccionamos nuestra versión de Linux y el cargador da paso al Kernel de Linux que empieza a hacer sus chequeos y a montar (hacer utilizable) el sistema de archivos.


Sistema de archivos

El sistema de archivos es más o menos "la forma de escribir los datos en el disco duro". El sistema de archivos nativo de Linux es el EXT2. Ahora proliferan otros sistemas de archivos con journalising (si se arranca sin haber cerrado el sistema, no necesitan hacer un chequeo sino que recuperan automáticamente su último estado), los más conocidos son EXT3, ReiserFS y XFS.

La estructura de directorios que sigue Linux es parecida a la de cualquier UNIX. No tenemos una "unidad" para cada unidad física de disco o partición como en Windows, sino que todos los discos duros o de red se montan bajo un sistema de directorios en árbol, y algunos de esos directorios enlazan con estas unidades físicas de disco. MUY IMPORTANTE: Las barras en Linux al igual que en cualquier UNIX son inclinadas hacia la derecha, como se puede ver más abajo (ese es el motivo de que en internet sean inclinadas hacia la derecha ya que nació bajo UNIX y en Linux podremos aprovechar todas sus ventajas). Expliquemos esto más a fondo, incluyendo los directorios principales:


Tabla 1.1. Estructura de directorios en Linux

DirectorioDescripción
/Es la raíz del sistema de directorios. Aquí se monta la partición principal Linux EXT.
/etcContiene los archivos de configuración de la mayoría de los programas.
/homeContiene los archivos personales de los usuarios.
/binContiene comandos básicos y muchos programas.
/devContiene archivos simbólicos que representan partes del hardware, tales como discos duros, memoria...
/mntContiene subdirectorios donde se montan (se enlaza con) otras particiones de disco duro, CDROMs, etc.
/tmpFicheros temporales o de recursos de programas.
/usrProgramas y librerías instalados con la distribución
/usr/localProgramas y librerías instalados por el administrador
/sbinComandos administrativos
/libLibrerías varias y módulos ("trozos") del kernel
/varDatos varios como archivos de log (registro de actividad) de programas, bases de datos, contenidos del servidor web, copias de seguridad...
/procInformación temporal sobre los procesos del sistema (explicaremos esto más en profundidad posteriormente).


Nombres de archivos en Linux

Los nombres de archivos en Linux (como en todos los UNIX) distinguen mayúsculas de minúsculas, esto es, son "case sensitive". Los archivos README, readme, REadme y rEadme por ejemplo son archivos distintos y por lo tanto al ser nombres distintos pueden estar en el mismo directorio.

En Linux los archivos no tienen por qué tener una extensión. La suelen tener a modo orientativo, pero no es en absoluto necesario. Linux sabe qué contiene cada archivo independientemente de cuál sea su extensión. Por comodidad, podremos llamar a todos nuestros archivos de texto con la extensión .texto, o a todos nuestros documentos con la extensión .documento, de esta manera, podremos luego agruparlos más fácilmente.

Los ficheros y directorios ocultos en Linux comienzan su nombre por un punto (.)

Los nombres de archivos o directorios pueden ser muy largos, de más de 200 caracteres, lo cual nos da bastante flexibilidad para asociar el nombre de un archivo a lo que contiene. No obstante, hay ciertos caracteres que nunca se deberían utilizar a la hora de nombrar un archivo. Uno de ellos es el espacio, nunca llamaremos a un fichero con un nombre que contenga un espacio. Tampoco son recomendados otros caracteres raros como signos de puntuación (a excepción del punto), acentos o la ñ. En algunos casos Linux ni siquiera nos permitirá usarlos. Los recomendables son las letras A-Z, a-z, los números (0-9), el punto, el guión (-) y el guión bajo (_) para nombrar un archivo. Los acentos y la ñ tampoco se recomiendan.


Software adicional para GNU/Linux

Primero, hacer notar que LINUX NO ES WINDOWS. El software de Windows no funcionará en Linux, hay proyectos de emulación al respecto, que no recomendamos.

El software para Linux lo podemos encontrar de dos formas: en un paquete binario o en un paquete con su código fuente.

Paquetes binarios

Existen varios tipos de paquetes binarios. Todos tienen una característica en común, y es que contienen código de máquina, no código fuente, por eso cada tipo de procesador necesita su propia versión de cada paquete. Al haber varias distribuciones de Linux existen varios tipos de paquetes binarios, habiendo varias distribuciones que comparten sistema de paquetes. Los más comunes son:

  • Los paquetes RPM: Los usan las distribuciones RedHat, Caldera, Madrake, SuSE y TurboLinux entre otras. Su uso está muy extendido y es posible instalar este tipo de paquetes mediante la aplicación rpm. El nombre de los paquetes rpm es del tipo nombredelpaquete_version_plataforma.rpm

  • Los paquetes Debian (deb): Los usa la distribución Debian y sus derivadas. Es un sistema de paquetes muy potente y que facilita en gran medida la actualización del sistema, además de resolver las dependencias (qué paquetes necesitan a qué otros) y satisfacerlas instalando todos los paquetes necesarios automáticamente. La aplicaciones que gestionan este sistema de paquetes se llaman apt y dpkg. Los paquetes Debian se suelen nombrar de la forma nombredelpaquete_version_plataforma.deb

  • Los paquetes tgz de Slackware los usa la distribución del mismo nombre, y siguen los principios de los dos anteriores, son paquetes binarios aunque tienen una estructura distinta.

Paquetes de código fuente

Estos paquetes contienen los archivos que salen del ordenador del programador o programadores, lo que quiere decir que ya hay que aportar algo de nuestra parte para utilizar los programas que contienen. El proceso de instalación de este tipo de paquetes implica también una COMPILACIÓN, concepto que vas a escuchar más de tres veces. Una compilación nos permite que el programa que vamos a instalar se optimice totalmente para el tipo de componentes que tenemos en nuestro ordenador y el tipo de versión de GNU/Linux. Este programa que hemos compilado correrá más rápido que si nos hubiéramos limitado a instalar un paquete binario normal. La compilación de un programa requiere de unos COMPILADORES, que son unos programas que junto con unas LIBRERíAS de lenguajes de programación, consiguen transformar el código fuente en lenguaje de máquina. Trataremos más adelante cómo instalar software.

Son también de amplio uso los Source RPM, que son paquetes RPM pero que en vez de ser binarios, llevan código fuente. Mediante la instalación de este tipo de paquetes, lo que hacemos es crear un nuevo paquete optimizado (compilar un nuevo paquete) para nuestra máquina. Después instalamos este último.

Meta-Paquetes

Conocemos por meta-paquete a aquellos paquetes en los cuales no hay código fuente, o binarios, sino reglas sobre CÓMO construir e instalar dicho paquete. Estos paquetes los usan distribuciones como Gentoo Linux (http://www.gentoo.org), Linux From Scratch (http://www.linuxfromscratch.com) y algunos otros sistemas operativos como FreeBSD (http://www.freebsd.org). La ventaja que tienen estos paquetes es que son muy sencillos de generar, los binarios quedan optimizados para la máquina que los va a ejecutar, pero como todo, esto tiene una contrapartida.... las distribuciones que los usan pueden ser más complicadas de manejar y se necesitan conexiones muy rápidas y procesadores potentes si no se quiere estar mucho tiempo compilando los paquetes.


Usuarios y los permisos de archivos

Linux es un sistema operativo multiusuario. Cada usuario generalmente tiene su carpeta de usuario en /home/usuario. Por defecto sólo puede escribir, modificar y borrar archivos dentro de esta carpeta. Ningún otro usuario (excepto root) puede acceder a los archivos que hay en este directorio, ni si quiera puede ver cuáles son. Este usuario -por defecto- puede leer en el resto de las carpetas que hay en el sistema de archivos excepto en la de root y las de otros usuarios. Todos los programas recuerdan las preferencias de cada usuario, e incluso un usuario puede instalar un programa sin que los otros usuarios tengan acceso a él (vale sí, root si tendrá, lo sé, lo sabemos :-); aunque instalando los usuarios tienen muchas limitaciones como veremos después. Un usuario no puede causar por este motivo daño al sistema ni cambiar su configuración de ninguna forma. ¿Y quién es ese tal root? En cualquier sistema UNIX, root es "el que todo lo puede". Es la excepción que confirma la regla, es el superusuario todopoderoso de estos sistemas. Cuando hagas login como root en una máquina GNU/Linux, siente el poder bajo tus teclas. Puedes hacer todo lo que se te pase por la cabeza. Pero ojo, tienes poder para lo bueno y para lo malo. Tienes acceso a todo el sistema, pero una equivocación... sería fatal. Puedes cargarte el sistema Linux y los preciados datos y configuraciones que tengas en él. Por esto, para tareas normales SIEMPRE entraremos al sistema como un usuario normal por los riesgos que se corren trabajando como root. Además NUNCA usaremos Internet como root. Incluso algunos programas no permiten ser ejecutados por root por motivos de seguridad. Como ya habrás adivinado, la contraseña de root se la guarda uno en la cabeza y se asegura de que no se le olvida, y por supuesto se preocupa uno de que nadie pueda acceder a ella en ningún fichero o de que no la ven cuando la escribimos. Si se cree que la han podido adivinar o están cerca, se cambia. Cuanto más larga, tediosa y sin sentido sea esta contraseña, más seguro estará nuestro sistema. Recuerda que tu máquina Linux es tan segura como segura sea tu contraseña de root.

¿Qué son los permisos? Todos y cada uno de los archivos y directorios del árbol jerárquico que monta nuestro sistema Linux tienen permisos. Estos permisos dicen, para cada usuario del sistema, si puede ejecutarlo, si puede ver su contenido o si puede borrarlo o modificarlo. Del mismo modo, cada elemento del sistema de archivos tiene un dueño. Por defecto, este dueño del elemento (tanto directorio como archivo) tiene acceso total a él y puede realizar todas las acciones posibles permitidas. El resto de usuarios pueden leer y ejecutar este elemento por defecto aunque todo esto se puede cambiar para cada uno de los elementos. Todos los archivos de las carpetas de sistema y configuración suelen tener a root como propietario. Los de la carpeta personal de cada usuario tienen a ese usuario como propietario, pero el resto de usuarios normales no tienen ningún permiso sobre estos elementos, y lo mismo ocurre con la carpeta de root (que se encuentra en la raíz, en /root).


Aarranque de Linux II

Cuando el kernel ya ha montado el sistema de archivos, comienzan a inicializarse algunos procesos llamados "daemons" (demonios). Cada uno de estos demonios se inicia cuando el sistema arranca y durante su vida va acontrolar un proceso determinado, y va a permanecer en segundo plano (transparente para el usuario), no vamos a notar que se está ejecutando a menos que pidamos información a este proceso, lo detengamos o lo reiniciemos. Algunos de estos demonios son, por ejemplo, el servidor web, el servidor de correo, el cortafuegos, el servidor de nombres DNS... y muchos otros que gestionan varias tareas, en su mayoría servicios de servidor de red para servir de host a otras máquinas. Cuando todos esos demonios se hayan cargado, aparecerá ante nosotros una línea de texto de login (autentificación en un sistema) o bien una ventana de login gráfico. Vamos a empezar entrando como usuario normal primero.


Nombramiento de dispositivos y particiones

Debemos saber de qué manera nombra Linux a los discos duros que tenemos conectados a nuestra máquina y sobre todo a sus particiones. Todos los discos duros (IDE) comienzan su nombre como hd. Un ejemplo de nombre completo de disco duro sería hda y de la primera partición de ese disco duro sería hda1.

La 'a' significa que ese disco duro está conecatdo al IDE1 como maestro. Si fuera esclavo tendría la 'b', y si estuviera conectado al IDE2 como maestro, la 'c', y si estuviera al IDE2 como esclavo, la 'd'.

El número 1 indica que es la primera partición (primaria y no lógica) del disco duro en cuestión. La segunda geométricamente hablando (primaria) sería la 2 y así sucesivamente. La primera partición lógica de un disco duro se nombra con el número 5, independientemente de si pertenece a la primaria 1, 2, 3 ó 4. La segunda se nombraría con un 6 y así sucesivamente.

Con saber lo que significa hda1 o hdd2 o hdc5 es suficiente de momento.