Introducción al Linux

Vicente González Ruiz

September 12, 2016

Contents

1 Un poco de historia
2 Portabilidad
3 Distribuciones
4 El kernel
5 Las aplicaciones
6 Multitarea
7 Multiusuario
8 X Window
9 El Shell
10 Accediendo al sistema
11 El sistema de ficheros
12 El comando man
13 Algunos comandos básicos para movernos por el sistema de ficheros
14 Lanzando el sistema X-Window
15 ¿Background o foreground?
16 Abortando un proceso
17 Editando ficheros ASCII
18 Transferencia de ficheros con el exterior

1 Un poco de historia

Linux es un sistema operativo originalmente diseñado para PC a principio de los 90 por Linus Torvadls. Bueno, Linus en realidad diseñó el primer kernel (núcleo) del sistema. Desde entonces multitud de programadores motivados simplemente por escribir un software de mayor calidad, portable (no sólo a PC) y de libre uso, han añadido al sistema operativo una gran cantidad de aplicaciones. El kernel junto con dichas aplicaciones es lo que conocemos por Linux.

Hay que decir que Linus creó el Linux pensando en emular el Unix, un sistema operativo que fue originalmente creado por Brian Kernighan, Ken Thompson, Dennis Ritchie, Rudd Canaday, y Doug McIlroy, entre otros, a finales de los 60 en el Bell Laboratories para una máquina de Digital conocida como DEC PDP-7. Originalmente el Unix estaba escrito en ensamblador. En 1971 fue reescrito para una DEC PDP-11, ¡una máquina multiusuario que contaba con un total de 24K bytes de RAM y 512K bytes de disco duro! En 1973 la mayor parte de Unix fue reescrito en C, un lenguaje de programación desarrollado por Dennis Ritchie.

Bueno, ya que hablamos de la historia del Unix deberíamos saber que éste también tuvo un antecesor o al menos, una fuente de inspiración. Unix es el resultado del descontento de la gente de Bell Labs con el MIT y General Electric que en 1965 intentaron implementar un sistema operativo llamado Multics (de multi-user, multi-processor, and multi-level (hierarchical) file system).

2 Portabilidad

Unix es, con diferencia, el software más portado de la historia y Linux, una versión de libre distribución de Unix es una de sus versiones más extendidas (junto probablemente con FreeBSD). Esto se debe fundamentalmente a que casi todo su kernel está escrito en C. Actualmente Linux se ejecuta en las siguientes arquitecturas:

DEC Alpha:
Originalmente creada por DEC y en la actualidad propiedad de Compaq. Durante mucho tiempo ha sido una referencia de arquitectura RISC de alto rendimiento.
Sun [Ultra
Sparc:] Creada por Sun Microsystems para las estaciones de trabajo Sun.
Motorola 68000:
Es el procesador original de los legendarios Comodore Amiga y Atari ST.
IBM PowerPC:
Los procesadores de IBM para estaciones de trabajo de alto rendimiento.
Hitachi SuperH:
Son procesadores de bajo consumo diseñados para ser usados en móbiles, cámaras fotográficas, etc.
IBM S/390:
IBM es de las pocas compañías que sigue vendiendo mainframes como los de la serie S/390.
SGI MIPS:
Silicon Graphics monta esta aquitectura en sus estaciones especialzadas en gráficos.
HP PA-RISC:
Este es el procesador de Hewlett-Packard para sus estaciones de trabajo.
Intel x86:
i386, i486, Pentium, Pentium II, Pentium III Zeon-32 y Xeon-64.
Intel IA-64:
Linux corre sobre la nueva familia Intel Itanium.
DEC VAX:
La serie VAX sustituyó a la serie PDP. Son máquinas multiusuario.
AMD x86:
Advances Micro Devices K6 y K7 (Athlon).
AMD x86-64:
Esta es la serie Opteron de 64 bits.
AXIS:
son procesadores que se utilizan en sistemas de comunicaciones como tarjetas de red.
Renesas M32R:
procesadores para sistemas empotrados (coches, reproductores de DVDs, etc.)
ARM:
procesadores de bajo consumo para móbiles, camaras, video-consolas portátiles, etc.

3 Distribuciones

Linux es una colección de programas. Cuando una persona quiere usarlo normalmente descarga de Internet una distribución concreta, dependiendo de las tareas que va a tratar de resolver. Existen cientos de distribuciones orientadas a sistemas en tiempo real, sistemas multiusuario, servidores de ficheros, estaciones de trabajo gráficas, estaciones de trabajo de sonido, hacking, etc. En http://www.linux.org podemos encontrar enlaces a cada una de ellas.

4 El kernel

El núcleo de Linux es el programa responsable de tratar directamente con el hardware de la computadora. Entiende de CPU, registros, interrupciones, DMA’s, etc. En la actualidad hay dos ramas estables: la rama 2.4 y la rama 2.6. La serie 2.4 es más antigua y funciona mejor en máquinas “desfasadas”. En http://www.kernel.org podemos encontrar todas las versiones del kernel desarrolladas hasta la actualidad.

5 Las aplicaciones

Las aplicaciones utilizan el hardware de la computadora a través del kernel. De esta menera no es necesario escribir código específico para las diferentes arquitecturas.

Actualmente, Linux ejecuta miles de aplicaciones, la mayoría de libre distribución y algunas comerciales. El rendimiento y la funcionalidad de ellas es semejante (y en ocasiones superior) a las existentes para otros sistemas operativos como Microsoft Windows o Apple MacOS/X.

6 Multitarea

Linux emuló perfectamente en este aspecto al Unix desde sus primeros días. En Linux es posible ejecutar cientos de aplicaciones (procesos) en una misma computadora independientemente del número de procesadores existentes. El SO se engarga de distrubuir los recursos (CPU, memoria, periféricos, etc.) entre los diferentes procesos que se están ejecutando.

7 Multiusuario

Con la idea a amortizar el gran desembolso económico que debía realizarse para construir una computadora a principios de los 70, el Unix fue diseñado para que pudieran trabajar simultaneamente decenas de usuarios, y esta cualidad también la ha heradado Linux. Así, nuestra computadora puede ser usada por muchas personas que se conectan con terminales a través de la red de comunicación existente.

8 X Window

Linux posee un sistema gráfico muy potente conocido como X11. Otros SOs como Windows y MacOS fueron creados a imagen y semejanza de dicho interfaz gráfico de libre distribución creado en los años 80 por el MIT.

El X11 está escrito siguiendo el paradigma cliente/servidor. En dicho paradigma, el servidor manipula el hardware gráfico y los clientes (las aplicaciones gráficas) utilizan los servicios que proporciona el servidor. Así las aplicaciones se hacen independiente de la plataforma. Por cierto, los clientes son procesos que pueden ejecutarse en la misma estación que el servidor (que es lo más frecuente), o en otra (cuando lanzamos la aplicación en un host remoto).

9 El Shell

Los shells (o intérpretes de comandos) son programas que se utilizan para ejecutar y controlar interactivamente comandos especificados a través del teclado de la computadora.

En Linux existen muchos tipos de shell, aunque el más usado es, el shell bash. Cuando accedemos a una computadora con Linux es muy probable que lo usemos para lanzar tareas, como iniciar el X11.

10 Accediendo al sistema

Linux es un sistema multiusuario y por lo tanto, debemos identificarnos antes de usarlo. La computadora nos va a solicitar un nombre de usuario (el login) y una contraseña (el password).

Existen dos formas básica de entrar a un sistema Linux. A través del programa getty o mediante el programa xdm (o variantes, como gdm de Gnome o kdm de KDE). El primero nos lleva a una consola de tipo texto mientras que el segundo corre ya dentro del X11.

11 El sistema de ficheros

En Linux (como en Unix) casi todo es un fichero, o mejor dicho, el kernel permite que manipulemos casi todo el hardware a través de ficheros especiales.

La forma más corriente de fichero permite que almacenemos datos en nuestro disco duro. Sin embargo, el fichero puede estár realmente en RAM, en una memoria flash, o en un disco duro de una estación remota. También son ficheros la tarjeta de sonido, el ratón, la impresora, etc.

En Linux todos los ficheros se organizan jerárquicamente, en lo que se conoce como el árbol de ficheros. En este árbol, la raíz se denota por /.

12 El comando man

En Linux hay un manual de usuario online para casi cualquier comando que podemos ejecutar. Este manual se invoca escribiendo en un shell: man comando, donde comando es el comando del que queremos obtener información.

13 Algunos comandos básicos para movernos por el sistema de ficheros

pwd:
conocer en punto del árbol de ficheros en el que nos encontramos. Ejemplo:
pwd           # Imprimir el directorio actual

cd:
para cambiar de directorio. Ejemplos:
cd /          # Ir a directorio ra\’{\i}z  
cd ~          # Ir al "home directory"  
cd ..         # Ir al directorio padre  
cd .          # Quedarnos donde estamos  
cd dir        # Ir al directorio ./dir  
cd /tmp       # Ir al directorio /tmp

ls:
muestra el contenido de un directorio. Ejemplos:
ls            # Listado simple de ficheros y directorios en .  
ls -a         # Idem, pero aparecen los ficheros "ocultos" en .  
ls -l         # Listado m\’as completo de ficheros y directorios en .  
ls -la        # Idem, pero aparecen los ficheros "ocultos" en .  
ls -R         # Listado simple de todo lo que cuelga de .  
ls /tmp       # Listado simple de /tmp

cat:
muestra el contenido de un fichero. Ejemplos:
cat fichero   # Muestra el contenido de fichero  
cat < fichero # Idem, pero a trav\’es de la entrada est\’andar  
cat > fichero # Env\’{\i}a la entrada est\’andar (el teclado) a fichero

cp:
copia ficheros y directorios. Ejemplos:
cp f1 f2      # Copia fichero f1 en f2 (f2 es borrado)  
cp f1 /tmp    # Copia f1 en /tmp/f1  
cp -r d1 d2   # Copia el directorio d1 (y todo su contenido) en d2

mv:
mueve ficheros y directorios. Ejemplos:
mv f1 f2      # Mueve el fichero f1 a f2 (f1 es borrado)  
mv d1 d2      # Nueve el directorio d1 a d2  
mv d1 /tmp    # Mueve d1 a /tmp/d1  
mv d1 /tmp/d2 # Mueve d1 a /tmp/d2

mkdir:
crea un directorio. Ejemplos:
mkdir d1      # Crea el directorio d1

rmdir:
borra un directorio vacío. Ejemplos:
rmdir d1      # Borra el directorio d1

rm:
borra ficheros y directorios. Ejemplos:
rm f1         # Borra el fichero f1  
rm -r d1      # Borra el directorio d1 (y todo su contenido)

14 Lanzando el sistema X-Window

En la inmensa mayoría de las distribuciones de Linux actuales el sistema gráfico se lanza de forma automática. Sin embargo, si esto no ocurriera así, simplemente escribir en el terminal:

startx

15 ¿Background o foreground?

El shell permite utilizar la multitarea de Linux usando el background. Cualquier comando (no interctivo) puede lanzarse en background escribiendo tras él el símbolo &. Ejemplos:

startx &      # El shell queda libre para ejeutar m\’as comandos  
fg            # Rescata "startx" del background  
<ctrl>+<z>    # Detiene "startx", pero no lo aborta  
bg            # Env\’{\i}a "startx" de nuevo al background

16 Abortando un proceso

La forma estándar de parar un proceso tanto interactivo como no es, estando este en el foreground, teclear <ctrl>+<c>.

17 Editando ficheros ASCII

Un fichero ASCII es aquel que está constituido bytes que representan caracteres de la tabla ASCII. Esto que lees es un fichero ASCII. Para editarlos existen multitud de programas:

vi fichero    # Vi es un programa poco amigable pero muy potente  
vim fichero   # Vi Improved  
joe fichero   # Un editor que emila el famoso editor WordStar.  
nano fichero  # Un editor muy usado  
emacs fichero # Emacs es muy completo y tiene soporte para X  
xemacs ficher # La versi\’on espec\’{\i}fica para X de emacs  
nedit fichero # Otro editor gr\’afico

18 Transferencia de ficheros con el exterior

Para sacar un fichero (por ejemplo, un programa en C que hemos escrito nosotros) de nuestro host (la máquina en la que estamos trabajando y están los ficheros almacenados) existen diferentes posibilidades.

  1. Si existe una unidad de disco flexible:
    mcopy f a:    # Copia f a la primera unidad de disco  
    mdir a:       # Comprobamos que el fichero se ha escrito  
    mcopy a:f .   # Copiamos el fichero f del disco al dir actual

  2. Si en nuestro host hay un servidor de correo electrónico configurado y el TCP/IP funciona correctamente (por ejemplo, podemos navegar sin problemas):
    mail pepe@ual.es < f  # Env\’{\i}a el fichero a la cuenta "pepe@ual.es"  
    mutt pepe@ual.es < f  # Env\’{\i}a el fichero a la cuenta "pepe@ual.es"

  3. Si conocemos un host remoto con Linux o Unix, tenemos cuenta en él y el servicio de acceso remoto ssh está corriendo:
    scp f servidor:~      # Copia f al home del servidor  
    scp servidor:~/f .    # Copia servidor:~/f al dir actual  
    scp -r d servidor:~   # Copia el dir d (y todo su contenido)

  4. Montanto una memoria flash como root, previamente formateada con FAT32, con el comando:
    mount -t vfat /dev/sda1 /mnt/flash

    podemos mover ficheros con el comando cp:

    cp f /mnt/flash       # Copia f en la flash  
    cp /mnt/flash/f .     # Copia f de la flash a nuestro dir actual