Prologo
El presente articulo solo pretende ser una forma de acercarse de una forma rápida y cómoda en castellano a Linux, conforme he ido yo personalmente adquiriendo conocimientos sobre este fantástico sistema operativo.
También pretende ser una guía de mano de consulta para las posibles lagunas mentales que podamos tener a la hora de usar los distintos comandos.
Básicamente voy a tratar el uso de la terminal (shell) y los comandos que mas nos interesan a la hora de tratar con ficheros y configuraciones de dispositivos.
GNU/Linux, que es?
Un sistema operativo, bien, eso ya lo sabemos ¿pero que supone ?
Empecemos por su nombre o denominación. GNU/Linux proviene de la unión de GNU ( GNU is not Unix) y Linux, un sistema operativo pensado en primera instancia para uso recreativo por su desarrollador Linus Torvalds. El cual gracias a la colaboración de muchos desarrolladores y la posibilidad de portabilidad de aplicaciones gracias al proyecto GNU de la Free Software Fundation de Cambridge, es hoy el sistema potente y complejo pero cada vez mas accesible que conocemos.
Bueno si queremos saber sobre los principios de Linux y las diferencias que existen en comparación con Unix, hay multitud de artículos y papers que tratan sobre ello en internet. Vamos a lo que nos importa.
Capitulo primero.
Principios y Comandos Básicos.
La Shell o interprete de comandos de GNU/Linux.
La Shell es el medio que tenemos para interactuar con la maquina con la que estamos trabajando y con su sistema operativo, literalmente interpreta ordenes.
Esto es una shell:
Hay muchos tipos de shell, la mas popular es ‘bash’ (bourne again shell) fue creada por J.Bourne, en principio creó ‘bsh’ después la mejoró, y la renombró añadiendo la ‘a’
La Shell se encarga de:
1º De interpretar las variables de entorno *
2º Interpreta los metacarácteres,(caracteres comodines) ‘*’ ‘?’.
3º Maneja la entrada y salida standart de los comandos.
4º Busca alias, y los interpreta.
5º Interpreta las ordenes comparando si son comandos internos de la shell, o binarios ejecutables, mirando en $PATH.
* Las variables de entorno son porciones de memoria a las que se asigna un valor, por ejemplo una variable de entorno seria el propio ‘bash’ ($BASH=/bin/bash), lo cual nos indica que cuando se llama a la variable $BASH, la shell busca en las variables, e interpreta que tiene que ejecutar: /bin/bash. Esto es útil cuando veamos en otros capítulos, la iniciación a el shell-script.
Principales diferencias con la línea de comandos de wuindos.
En la terminal de Linux (de ahora en adelante shell), el interprete de comandos distingue entre mayúsculas y minúsculas a la hora de interpretar los comandos, cosa que en la línea de comandos (de ahora en adelante cmd.exe) de Guindos no ocurre:
Shell:
ls no es igual a LS
cmd.exe:
dir es igual a DIR
En la shell los modificadores de los comandos se representan con un guión ‘-‘, y en cmd.exe el modificador es ‘/’.
Shell:
ls -l
cmd.exe:
dir /all
En la shell no son estrictamente necesarias las extensiones de fichero, solo se usan para reconocer visualmente los archivos.
El Promt:
Hay muchos tipos de promt, los mas usuales son ‘$’ para la terminal de usuario y ‘#’ para la terminal de root.
Cuando abrimos una terminal, la única información en principio con la que contamos es el promt, este nos indica el usuario con el que estamos accediendo a la shell, la maquina sobre la que esta corriendo la shell y el directorio donde nos encontramos, el cual lo normal sea nuestro directorio home.
ejemplos de promt:
rh3nt0n@rh3nt0n-laptop:~$
root@rh3nt0n-laptop:/home/rh3nt0n#
El primer promt nos indica que el usuario es rh3nt0n que esta en la maquina rh3nt0n-laptop en el directorio home de rh3nt0n (/home/rh3nt0n) y que la terminal es de usuario ‘$’.
El segundo promt nos indica que el usuario es root el cual esta en la maquina rh3nt0n-laptop, dentro del directorio /home/rh3nt0n y que la terminal es de root ‘#’.
Principales diferencias entre usuario y root..
El usuario root, es el administrador del sistema es el amo y señor, es el que asigna permisos a otros usuarios, crea grupos, usuarios etc.. en fin tiene todos los derechos de hacer lo que quiera, es por esto que no es recomendable usar de continuo este usuario para el día a día de uso del sistema, ya que por un descuido o un comando mal efectuado, podemos causar graves daños al sistema o perder información de la cual no nos queramos desprender.
El usuario, depende de root para tareas de administración del sistema y configuración de dispositivos. Pero para el trabajo con ficheros propios o navegación por internet y el sistema de archivos, el usuario por defecto no tendría ningún problema para usar el sistema.
En Linux no existen unidades, existen particiones del disco duro.
En Linux todo es un fichero, el monitor estar representado como fichero así como el teclado el mouse etc. Por ejemplo:
hda —- representaría a todo el disco duro
hda1 —- representaría a la partición 1
hda2….. representaría a la partición 2
El sistema de ficheros de Linux representa un árbol invertido del cual la raíz, es ‘/’, y de la cual cuelgan el resto de directorios del sistema.
Cualquier fichero que comience por un punto ‘.’ (eje:.fichero) es un fichero oculto.
Para cualquier usuario el símbolo de la ñ ‘~’ en el promt, representa su directorio home.
a la hora de buscar ficheros existen los meta caracteres:
‘*’ el asterisco representa a cualquier fichero o carácter
‘?’ la interrogación representa un carácter.
Sistema de ficheros.
/<—–directorio raíz
|
|_______/bin <————-almacena binarios (ejecutables)
|_______/etc <————contiene ficheros de configuración de programas.
|_______/media <————– dispositivos tipo CDROM, floppy
|_______/root <————-directorio home de el administrador del sistema
|_______/dev <————-contiene los ficheros de dispositivos tipo monitor, teclado etc
|_______/home <————– contiene los directorios home de los usuarios normales
|_______/sbin <————-contiene ficheros imprescindibles, accesible a root
|_______/tmp <————-ficheros temporales
|_______/var <————ficheros variables eje: fichero.log
|_______/usr <————tiene una estructura parecida a el directorio raíz.(explicado mas abajo)
|_______/lib <————contiene librerías dinámicas.
|_______/boot <————–contiene ficheros de arranque de sistema
|_______/mnt <————–aquí se montan los dispositivos extraíbles.
/usr
|_____/bin <———-binarios ejecutables de usuario
|_____/local <——–aquí van todas las compilaciones
|_____/src <——–aquí deberían de compilarse los programas de los usuarios.
|_____/share <———ficheros de entorno gráfico.
|_____/include <——-archivos de cabecera que usan las aplicaciones.
|_____/lib <———–enlaces dinámicos a librerías.
Permisos de los ficheros..
Los ficheros se protegen con permisos, los cuales pueden ser de lectura ‘r’, escritura ‘w’, y ejecución ‘x’.Los cuales se asignan a los tres tipos de usuarios que puede tener un fichero, dueño, grupo. otros, y se representa de esta manera en la terminal:
Columnas:
La primera es del tipo de fichero: ‘d’ si es directorio, ‘-‘ si es fichero regular, ‘c’ fichero de caracteres. ‘b’ fichero por bloques.
1.Permisos de los usuarios, se agrupan de tres en tres: [rwx] [r-x] [r-x], el primer grupo de permisos, corresponde a el dueño, el segundo a el grupo, y el tercero a ‘otros’.
2.El numero de nombres que tiene el fichero.
3.Dueño
4.Grupo
5.Tamaño en bytes
6.Fecha y hora de la ultima modificación.
7.Nombre del fichero.
Cada permiso esta representado por una cifra en octal:
Por lo que si un fichero tiene los siguientes permisos: rwx rw- r–, su valor en octal sera 764.Esto nos servirá para cambiar a nuestro criterio los permisos de cada fichero del que seamos dueños.
Comandos básicos para moverse en la Shell.
Para empezar aclaro algo importante, cada vez que se crea un directorio, este dentro de si mismo crea dos ficheros:
‘.’ que representa el directorio actual.
‘..’ que representa el directorio padre, o anterior.
rh3nt0n@rh3nt0n-laptop:~/guia$ ls -la nuevo/
total 8
drwxr-xr-x 2 rh3nt0n rh3nt0n 4096 2006-10-21 16:03.
drwxr-xr-x 3 rh3nt0n rh3nt0n 4096 2006-10-21 16:03..
Y los crea con unos permisos predeterminados por el sistema. en realidad, son enlaces a otros directorios como dije anteriormente y así consta en la primera columna ‘d’.
Dicho esto pasamos a los comandos:
Comandos para movernos por el Árbol de directorios..
Comando ls. abreviatura de list (listar)
sintaxis: ls [opciones] [fichero ]
opciones: -l vemos todos los datos de los ficheros del directorio actual.
-ld vemos los permisos del directorio actual.
-ldi vemos el numero de Inodo del fichero en cuestión *
-R muestra de forma recursiva, los ficheros que halla dentro de los directorios que se encuentren dentro de el directorio que estamos listando.
-lS lista los ficheros de mayor a menor en tamaño de bytes.
-lSr lo contrario que el anterior.
-t ordena los ficheros por fecha de modificación.
-tr forma inversa a la anterior opción.
Comando pwd: print working directory, imprime en la pantalla el directorio actual.
ejemplo:
rh3nt0n@rh3nt0n-laptop:~/guia$ pwd
/home/rh3nt0n/guia
Esto es muy útil, cuando estamos dentro de muchos directorios y no sabemos donde nos encontramos.
Comando cd: change directory. Cambia de directorio
Sintaxis: cd [directorio]
Formas útiles de usarlo:
cd sin mas, te lleva a tu directorio home.
cd.. te lleva al directorio padre (directorio anterior)
cd ~ igual que el primero, te lleva a tu directorio home.
Comando mkdir: make diretory. Hacer directorio.
Sintaxis: mkdir [directorio]
mkdir -p [directorio]/[directorio]/[directorio]/etc..
puedes crear tantos directorios como quieras, desde el directorio actual, o desde tu home poniendo la ruta absoluta **
notas:
* inodo es el numero de sector donde se encuentran los datos en el disco duro.
** ruta absoluta, es la ruta desde el directorio home del usuario.
Comando rmdir: remove directory. Borrar directorio.
Sintaxis: rmdir [directorio]
rmdir -p [ruta de directorios ]
Comando cat: Muestra el contenido del archivo en cuestión, en pantalla.
Sintaxis: cat [fichero]
Comando more: igual que cat, pero muestra si el contenido de el fichero es grande, pantalla a pantalla.
Sintaxis: more [fichero]
Comando head: muestra la cabecera del archivo, por defecto las 10 primeras líneas.
opción: -n [numero] muestra el numero de líneas que especifiques
Sintaxis: head [opción] [fichero]
Comando tail: al contrario que head, este comando muestra el final de el archivo. Por defecto al igual que head muestra 10 líneas.
sintaxis: tail [opciones] [fichero]
opciones: -n numero de líneas especificado
-f esta opción, es muy interesante, ya que te muestra el incremento de líneas a tiempo real.
Comando cp: copy. Copiar.
sintaxis: cp [opciones] [fichero origen] [directorio destino]
opciones: -b hace back up del archivo si en el directorio donde copiamos existe un fichero con el
mismo nombre y la renombra añadiendo al final ~.
— no-dereference copia forzosamente si es un enlace simbólico.
-F fuerza la copia en caso de que exista el fichero. por lo tanto sobre escribe.
-i interactivo, te pregunta en caso de que pueda sobre escribir.
-l hace enlace duro. link.
-L te copia el contenido del fichero en caso de que intentes copia un
enlace simbólico.
-r copia el contenido total de un fichero y ficheros hijos
recursivamente.
-s crea un enlace simbólico, soft.
-u en caso de que halla un archivo con el mismo nombre, lo
actualiza.update.
Comando mv: move. mueve o renombra el archivo o directorio.
sintaxis: mv [opciones] [origen] [destino]
opciones: -b si es un fichero, hace back-up. si es directorio, mueve el
directorio y su contenido.
-f fuerza
-i interactivo
-u actualiza si el fichero movido existe en destino
Comando ln: link, enlace duro por defecto (sin opciones).
Sintaxis: ln [opciones] [fichero]
opciones: -b hace back-up
-f fuerza
-i interactivo
-s enlace simbolico o soft
Comando file:muestra el tipo de archivo de que se trata.
sintaxis: file [opciones] [archivo]
opciones: -z muestra el tipo de archivo si es un comprimido con gz.
-L en caso de que sea enlace simbolico, te muestra los datos del
fichero al que apunta.
Comando rm: remove. borra el fichero
sintaxis: rm [opciones] [fichero/s]
opciones: -i pregunta antes de borrar
-r borra de forma recursiva todo el contenido de un directorio
si es el caso.Muy peligroso efectuarlo, usadlo con cautela.
-f fuerza el borrado sin preguntar, mas peligroso aun que el
anterior si se efectúan en
conjunto: rm -fr directorio ( el caos) sed prudentes al borrar archivos.
Comando chmod: change mode, cambiar permisos.
sintaxis: chmod [permisos] [ficheros]
Forma octal de cambiar permisos:
Como ya he explicado anteriormente el valor de cada permiso
( lectura, escritura y ejecución) se representa con números octales,
y se agrupan en conjuntos de tres, un conjunto para el dueño, otro grupo
para el grupo, y otro grupo para otros usuarios:
4 para ‘r’ —> lectura
2 para ‘w’ –> escritura
1 para ‘x’ –> ejecución
Por lo cual si tenemos un fichero con estos permisos:
rwx rw- r–
Tendremos que el primer grupo tiene un valor de 7, resultante de la suma
de 4+2+1, el segundo grupo tendrá un valor de 6 resultado de la suma de 4+2
y el tercer grupo tendrá un valor de 4 resultante del valor de ‘r’.
Por lo tanto el valor en octal de los permisos de ese fichero en cuestión
será de 764.
Para cambiar los permisos de ese archivo a:
rw- r– –x
La orden seria la siguiente:
chmod 641 fichero
Forma abreviada de cambiar permisos:
La sintaxis seria la misma, pero variarían las opciones, para mi, es mas cómodo
y menos laborioso que la anterior manera, pero de la forma anterior podemos sacar
partido a el comando umask que veremos posteriormente.
Opciones:
Por lo tanto una orden para dejar los permisos como la orden del otro modo seria:
chmod u+rw,g+r,o+x fichero
Comando umask: te dice la mascara de permisos del fichero en cuestión.
Sin especificar la nueva mascara te dice la mascara del directorio.
sintaxis: umask [mascara]
Si queremos que los archivos que creemos tengan un valor distinto a el valor por
defecto habría que restar a 666 (por defecto rw-rw-rw-) el valor en octal que
queramos para nuestros
archivos:
Si por ejemplo queremos que nuestros archivos se creen con permisos
r– para dueño, r– para grupo y r– para otros, deberíamos restar 444
a 666 y nos daría 222, entonces el comando seria el que sigue:
umask 222
Comando touch: crea un fichero
sintaxis: touch [fichero]
Comando which: busca el fichero/s binario especificado/s.
Te devuelve la ruta absoluta donde se encuentra/n
sintaxis: witch [fichero] [fichero]
Comando id: muestra nombre de usuario y grupo
Comando su: te permite cambiar al usuario que desees.
sintaxis: su usuario
password
Comandos de ayuda.
La terminal de Linux se caracteriza por su ayuda, sabiendo usarla,
no se debería tener ningún problema a la hora de interactuar con ella.
Los mas útiles:
Comando man: manual, especificando el comando a usar te muestra la ayuda
y opciones que tiene el comando
sintaxis: man [comando]
Comando apropos: apropósito, te muestra los comandos relacionados con la palabra objeto.
sintaxis: apropos [palabra]
Esto no es un comando, en realidad es una opción que tienen todos los comandos en Linux,
la opción – – help.
sintaxis: [comando] – – help
Comando Whatis: que es
rh3nt0n@rh3nt0n-laptop:~$ whatis ls
ls (1) – list directory contents
Comando uname: este comando te devuelve información sobre el sistema
que estas usando.
sintaxis: uname [opción]
rh3nt0n@rh3nt0n-laptop:~$ uname -a
Linux rh3nt0n-laptop 2.6.15-27-386 #1 PREEMPT Sat Sep 16 01:51:59 UTC 2006 i686 GNU/Linux
opciones: -a da toda la información.
-r versión del kernel
Comando date: te devuelve la fecha actual, esto es usado
en shell-script con opciones.
sintaxis: date + %[opcion]
sintaxis: date -s [formato de fecha] <——- cambia la hora y fecha del sistema
recomiendo usar la opción – – help para este comando ya que tiene multitud de
opciones.
Comando who: quien, aporta información sobre quien esta usando el
sistema.
sintaxis: who [opción]
opciones: -b system boot, hora y fecha de cuando arranco el sistema.
-H para ver en columnas quien esta y mas información.
-q cuantos usuarios
-r nivel de ejecución
Comando cal: devuelve el calendario mensual actual.
Especificando mes y año en numero te devuelve el calendario pedido.
sintaxis: cal [mes] [año]
opciones: -m cambia el formato del calendario a Europeo,
empezando la semana por lunes.
-y devuelve el calendario de todo el año.
Hasta aquí llega la descripción de los comandos mas usados en la terminal,
espero que os sea de ayuda.