Post on 06-Feb-2018
2
1.-‐Organización de la información en Linux ...................................................................... 3
2.-‐Soporte de los ficheros ......................................................................................................... 4 3.-‐Tipos de archivos en Linux .................................................................................................. 5
4.-‐Estructura de directorios en Linux ................................................................................. 6 5.-‐Comandos para la manipulación y gestión de directorios ....................................... 8
6.-‐Comandos para la manipulación y gestión de ficheros ............................................. 9
7.-‐Redireccionamientos en Linux ....................................................................................... 14 8.-‐Carácter de interconexión (o pipe) y filtros ............................................................... 16
9.-‐Metacaracteres ..................................................................................................................... 17 ANEXO I. Diferencias entre un enlace físico (hard) y un enlace simbólico. .......... 19
3
1.-‐Organización de la información en Linux En UNIX (y en Linux) la información se estructura en una serie de ficheros organizados según una
estructura jerárquica de directorios en forma de árbol invertido.
A diferencia de lo que ocurría en MS-DOS, que se disponía de una unidad lógica para cada
dispositivo (disquetera, CD-ROM, particiones del disco duro) y tenía sentido hablar de unidad
activa, en el caso de UNIX (y Linux) la información de los dispositivos de almacenamiento acaba
integrándose en una única estructura jerárquica de directorios. El árbol padre de esta estructura se
encuentra en el llamado dispositivo raíz, y forma el sistema de ficheros raíz, en él se encuentra un
directorio del cual cuelgan, directa o indirectamente todos los demás: el directorio raíz,
representado por el carácter /. Sin embargo, el concepto de directorio de trabajo sigue existiendo.
A la hora de especificar las rutas de los ficheros y directorios haremos uso del carácter / a
diferencia de cómo se hace en MS-DOS (el carácter usado es \).
Todos los ficheros y directorios son referenciables de dos formas:
• Ruta absoluta. Consiste en especificar el camino entero que se debe seguir desde el
directorio raíz / hasta el fichero o directorio.
• Ruta relativa. Es el camino que se ha de seguir desde el directorio activo hasta llegar al
fichero o directorio.
Todo directorio contiene dos entradas que se crean al crear el directorio. Estas son . y ... La
entrada . hace referencia (es un enlace físico) al propio directorio. La entrada .. hace referencia (es
un enlace físico) al padre del directorio.
El núcleo trata a todos los ficheros como secuencias de bytes sin estructura alguna, cada
programa es responsable de interpretar su propia estructura.
4
2.-‐Soporte de los ficheros La información relativa a los ficheros se encuentra en las tablas de nodos de índices ( o tablas de
inodes).
Las tablas de inodes soportan la información administrativa de los ficheros, son gestionadas
directamente por el sistema y son creadas al crear cada sistema de ficheros, bien sea en la
instalación del sistema o a posteriori.
Un inode es un registro de una tabla de inodes que contiene la mayor parte de la información
acerca de un fichero:
• Identificador de grupo.
• Identificador de usuario.
• Fecha y hora de la última modificación.
• Fecha y hora del último acceso al fichero.
• Número de enlaces.
• Tipo de fichero (ordinario, directorio,....).
• Punteros a los bloques que contienen los datos del fichero.
5
3.-‐Tipos de archivos en Linux En UNIX (y en Linux) podemos encontrar los siguientes tipos de ficheros:
• Ficheros ordinarios. Contienen datos y/o programas. Según su contenido pueden ser de dos
tipos: ficheros ASCII o de texto y ficheros binarios. Los últimos suelen ser ficheros
ejecutables.
• Directorios. Son los ficheros que permiten una organización jerárquica en forma de árbol
invertido. Pueden contener directorios y ficheros.
• Ficheros especiales. UNIX (y Linux) trata los dispositivos físicos como si fueran ficheros. Los
ficheros especiales de dispositivo son pues ficheros que representan dispositivos y se
encuentran en el directorio /dev. Así, por ejemplo, el fichero especial de dispositivo /dev/fd0
representa a la primera unidad de disquete. Los ficheros especiales pueden ser modo
bloque o modo carácter.
• Enlaces simbólicos. Se utilizan para hacer referencia a algún nombre de fichero. Se puede
decir que son el equivalente a los accesos directos de Windows.
• Tuberías (o pipes). Son ficheros especiales utilizados para la comunicación entre procesos.
En la línea de comandos del shell se suele utilizar frecuentemente para filtros.
• Sockets. Ficheros especiales para comunicación entre procesos ubicados en máquinas
distintas.
El tipo de un archivo lo podemos conocer observando el carácter más a la izquierda en la primera
columna del resultado obtenido al usar el comando ls con la opción –l.
6
4.-‐Estructura de directorios en Linux Una característica ventajosa de un sistema UNIX (y Linux) es que su estructura de directorios
básica es una estructura significativa no organizada al azar. Esto quiere decir que cada directorio
está relacionado con archivos específicos, lo cual permite mantener un sistema ordenado y la
posibilidad de una mejor administración del mismo. Parte de esta organización es preceptiva para
el funcionamiento del sistema, pues éste espera encontrar ciertos archivos (muchos de ellos de
configuración) en lugares específicos, y el cambiar su ubicación implicaría hacer modificaciones
internas en el propio sistema operativo.
Dentro del directorio raíz podemos encontrar los siguientes directorios con fines específicos:
/bin: Contiene programas esenciales para el funcionamiento del sistema y que serán usados por
todos los usuarios.
/boot: Contiene los archivos requeridos por el gestor de arranque (comúnmente grub).
Generalmente contiene una imagen del kernel (o núcleo, que es el corazón del sistema operativo).
/dev: Archivos que representan a los dispositivos físicos (modem, ratón, impresora, discos),
recordemos que Linux maneja cada componente de hardware como archivo para lograr una mayor
abstracción. Por ejemplo /dev/ttyS0 representa al primer puerto serie (el equivalente a COM1 en
sistemas Windows).
/etc: Este directorio contiene los archivos de configuración del sistema.
/home: En este directorio se guardan los directorios personales de los usuarios. Por ejemplo Juan
podría tener todos sus documentos y personalizaciones en /home/juan.
/lib: Todas las bibliotecas (comúnmente llamadas librerías) para los programas esenciales del
sistema y los módulos del kernel (componentes del kernel que se cargan según la demanda) se
alojan en este directorio.
/mnt: En este directorio se ubican los puntos de montaje para los dispositivos de bloque (Archivos
de bloque son archivos que representan unidades de disco).
/opt: Contiene los paquetes que no son esenciales para que el sistema funcione. Puede contener
por ejemplo a KDE.
/proc: Es un sistema de archivos virtual, se usa para obtener información de los procesos y del
hardware. La información contenida en este sistema de archivos es utilizada para que funcionen
utilidades como ps.
7
/root: Este es el directorio del administrador del sistema o root. El usuario root es más bien una
función, es decir conviene que aun el usuario que tiene la función de root, se registre como un
usuario normal para las tareas no administrativas.
/sbin: Contiene programas esenciales para el sistema, aunque son ejecutados más bien por el
usuario root.
/tmp: Directorio que contiene los archivos temporales.
/usr: Este archivo contiene principalmente los programas no esenciales para el sistema. Tiene una
subjerarquía propia. También contiene la documentación de las aplicaciones.
/var: Contiene datos que son modificados en tiempo real por los programas. Es decir lleva un
registro de errores, informaciones y advertencias del sistema y de las aplicaciones.
8
5.-‐Comandos para la manipulación y gestión de directorios Comando pwd
Sintaxis:
pwd
Muestra el nombre del directorio activo.
Comando cd
Cambia el directorio activo.
Sintaxis:
cd [directorio]
directorio es opcional, si no se especifica, el directorio activo pasará a ser el directorio home
(directorio personal) del usuario que ejecuta el comando.
Comando mkdir
Sintaxis:
mkdir directorio1 [directorio2 ...]
Crea el directorio o directorios que se especifiquen. Es posible crear un árbol completo de
directorios con un único comando.
Comando rmdir
Elimina los directorios especificados siempre que estén vacíos. No se puede eliminar el directorio
activo.
Sintaxis:
rmdir directorio1 [directorio2 ...]
9
6.-‐Comandos para la manipulación y gestión de ficheros Comando cat
Concatena el contenido de los ficheros que se le pasen, si no se le pasa nombres de fichero, lee
datos de la entrada estándar (teclado) hasta que encuentre un final de fichero Ctrl+D y entonces
produce un eco en la salida estándar (pantalla).
Sintaxis:
cat [-n] [fichero1 [fichero2 ...]]
-n : El comando produce una numeración de todas las líneas del resultado.
Comando cp
Copia ficheros.
Sintaxis:
cp [opciones] origen destino
cp [opciones] origen1 [origen2 …] directorio_destino
La segunda sintaxis de cp, copia varios archivos en un directorio dado.
Los permisos de los archivos también se copian.
origen, origen1, origen2 : son nombres de ficheros (especificados con su ruta relativa o absoluta).
destino: puede ser el nombre de un archivo (con su ruta absoluta o relativa) o un directorio. Si es
un directorio, entonces origen es copiado sin cambiar el nombre. Si se quiere copiar en el propio
directorio es necesario especificar otro nombre. En cualquier caso si se da un nombre de fichero ya
existente su contenido será reemplazado.
Opciones: -r : Copia directorios recursivamente.
Comando mv
Cambia el nombre a un fichero o directorio.
Sintaxis:
10
mv fichero1 fichero2
mv fichero1 [fichero2] directorio
En la primera sintaxis fichero1 es el nombre original de un archivo o directorio y fichero2 es el
nuevo nombre.
Comando rm
Elimina archivos o directorios.
Sintaxis:
rm [-opciones] fichero1 [fichero2 ...]
Opciones:
-r : Permite aceptar nombres de directorios como argumentos, y realiza un borrado recursivo del
mismo. Atención a esta opción que puede ser peligrosa.
Si el nombre del fichero (o ficheros) es un directorio obligatoriamente debe utilizarse la opción ‘-r’.
Comando find
Busca ficheros recursivamente a partir del directorio que se especifique.
Sintaxis:
find nodo_ruta criterio_nombre_expresión
nodo_ruta : especifica a partir de dónde buscar los archivos (camino).
criterio : indica cómo seleccionar los archivos, si es por el nombre solamente o es por otro criterio
cualquiera.
acción : se refiere a, qué hacer con los ficheros seleccionados.
Criterios:
-name fichero : busca ficheros con nombre fichero.
-type f : busca ficheros ordinarios.
-type d : busca directorios.
-user nombre_usuario : busca ficheros cuyo propietario sea el usuario nombre_usuario.
11
-group nombre_grupo : busca ficheros cuyo grupo propietario sea nombre_grupo.
-atime -n : busca ficheros a los que se ha accedido hace menos de n días.
Ejemplos:
find /usr -name fic
busca a partir del directorio /usr ficheros llamados fic
find / -name fic -type f -user juan
busca a partir del directorio raíz los ficheros ordinarios que se llamen fic y tengan como propietario
a juan.
Comando ln
Establece un enlace o vínculo entre dos ficheros, de manera que al actualizar uno de ellos los
cambios se producirán en los dos.
Sintaxis:
ln [-opciones] fichero_exitente fichero_nuevo
Opciones: -s : crea un enlace simbólico. Si no se especifica el enlace será físico.
Comando grep
Busca cadenas en un fichero o ficheros
Sintaxis:
grep [-opciones] cadena fichero1 [fichero2 ...]
cadena : cadena de texto a buscar, si contiene espacios en blanco debe ir entre comillas (simples o
dobles). Opciones:
-i : no hace distinción entre mayúsculas y minúsculas.
-n : numera las líneas de salida. El número de cada línea será el orden que tiene en el fichero en el
cual se encuentra.
-v : Para que el resultado sean las líneas que no contienen la cadena. Si no se especifica esta
opción, mostrará las líneas que contienen la cadena.
12
-c : En lugar de mostrar líneas, muestra el número total de líneas que contienen la cadena en cada
fichero.
Comando more
Permite visualizar línea a línea o pantalla a pantalla el contenido del fichero o ficheros que se le
pasen si el contenido de estos no cabe en una pantalla.
Sintaxis:
more fichero1 [fichero2 ...]
Una vez que tengamos llena una pantalla, y siempre que queden más líneas por visualizar, el
programa espera la pulsación de alguna tecla. Si pulsamos <ENTER>, la salida avanzará una
línea; si pulsamos la barra espaciadora, la salida avanzará una pantalla; por último, si deseamos
acabar, podemos hacerlo con <Ctrl>+C.
Comando sort
Da como resultado el contenido de uno o varios ficheros, ordenando las líneas según determinados
criterios.
Sintaxis:
sort [-opciones] fichero1 [fichero2 ...]
Opciones: -r: invierte el orden.
-t separador : especifica el carácter a utilizar como separador de campos. Si no se especifica, se
asume que es el carácter espacio en blanco.
-k pos1[,pos2] : Indica los campos por los que ordenar (pos1 y pos2 son valores enteros mayores
que cero, 1 para el primer campo, 2 para el segundo campo,....) Si sólo se especifica pos1 se
ordenará por el campo que indique, si se especifica pos2, se ordenará en primer lugar por el
campo pos1, a continuación (en caso de coincidencia de varios valores en el campo1) por el
campo pos1+1 y así hasta pos2. Si no se especifica esta opción, ordenará por el primer campo.
Si no se especifica separador ni campos, la salida se ordenará por líneas. -o fichero_salida : el
resultado se guardará en fichero_salida.
Comando tr
Visualiza por la salida estándar el contenido de un fichero sustituyendo unos caracteres por otros.
13
Sintaxis:
tr [-s] caracter_inicial caracter_final fichero
Devuelve el contenido de fichero, sustituyendo las apariciones del carácter caracter_inicial por
caracter_final.
Con la opción –s sustituye repeticiones del carácter caracter_inicial por un único carácter
caracter_final.
14
7.-‐Redireccionamientos en Linux Todo proceso en Linux tiene una entrada estándar, una salida estándar y una salida estándar de
error.
La entrada estándar es el fichero desde el cual el proceso espera recibir datos.
La salida estándar es el fichero en el que el proceso volcará su salida normal.
La salida estándar de error es el fichero en el que el proceso escribirá los mensajes de error que
emita.
De forma predeterminada la entrada estándar es el teclado, y la salida estándar y la salida
estándar de error es la pantalla. Sin embargo esto es posible cambiarlo desde la línea de órdenes
del shell.
Ejemplo:
Si usamos el comando cat sin ningún argumento, su comportamiento será leer caracteres de la
entrada estándar (el teclado, ya que no se ha redireccionado) hasta que encuentre un final de
fichero (e.d. hasta que se pulse en una nueva línea <Ctrl>+d). Finalmente volcará el texto leído por
la salida estándar (la pantalla, pues tampoco se ha redireccionado).
7.1.-Redireccionamiento de entrada Se lleva a cabo haciendo uso del símbolo < seguido del
nombre del nuevo fichero de entrada.
Ejemplos:
El comando
sort < empleados.txt
muestra por la salida estándar (la pantalla) las líneas ordenadas del fichero empleados.txt.
El comando
cat < empleados.txt
muestra por la salida estándar (la pantalla) el contenido del fichero empleados.txt. Una variante
muy útil es la doble redirección de la entrada, cuya forma de uso es << “cadena”
cuando se utiliza, el shell lee caracteres de la entrada estándar hasta que en una línea nueva se
escriba la cadena de texto cadena seguida de la pulsación de <ENTER>. Cadena puede ser una o
15
varias palabras, si contiene espacios en blanco las comillas son obligatorias.
7.2.-Redireccionamiento de salida estándar Se lleva a cabo haciendo uso del símbolo > seguido
del nombre del nuevo fichero de salida estándar.
Ejemplos:
El comando
date > salida.txt
escribe la fecha y la hora en el archivo salida.txt. Si el fichero no existe lo crea, en caso contrario,
reemplazará su contenido por los nuevos datos.
Como vemos, la redirección de la salida estándar es útil para la creación rápida de ficheros. Si no
disponemos de un editor de texto, podemos improvisar uno (muy rudimentario, pero más vale eso
que nada) de la siguiente manera:
cat > datos.txt
como resultado de la ejecución de este comando, se leerán caracteres del teclado hasta que en
una nueva línea (e. d. después de pulsar <ENTER>) tecleemos un final de fichero <CTRL>+ D. Los
datos tecleados irán a parar al fichero datos.txt.
Si el comando anterior lo combinamos con la doble redirección de la entrada
cat << fin > salida.txt
el comportamiento será similar, la única diferencia es que la entrada de datos se detendrá cuando
en una nueva línea se escriba la palabra fin seguida de <ENTER>.
Por último veamos un ejemplo de combinar el redireccionamiento de entrada con el de la salida
estándar
cat < fichero1.txt > fichero2.txt
el efecto es hacer una copia del contenido de fichero1.txt en fichero2.txt.
Existe también una variante del redireccionamiento de la salida estándar, que consiste en utilizar
los símbolos >> en lugar de >. El efecto de ambos operadores es similar: si el fichero de salida
especificado no existe se crea, pero si el fichero ya existe, con >> los datos que contiene ya no son
destruidos, pues los nuevos datos se añaden al final del mismo.
16
8.-‐Carácter de interconexión (o pipe) y filtros Los filtros son programas que operan sobre estructuras de datos (generalmente ficheros) y
proporcionan como salida modificaciones sobre la entrada.
En esta categoría entran los comandos grep, more, sort, y tr que ya hemos visto. Ahora bien, al
describir su sintaxis hemos visto que todos ellos permiten especificar nombres de fichero para su
entrada, y que su salida predeterminada es la pantalla (el comando sort permitía, con la opción –o,
especificar un nombre de fichero para su salida). En cualquier caso, podemos hacer uso de la
redirección para especificar ficheros de entrada o de salida.
Si lo que pretendemos es hacer que la entrada de un programa sea tomada de la salida de otro, se
debe hacer una interconexión de los mismos. Esto se lleva a cabo utilizando el carácter |. Este
carácter, usado en este contexto se denomina pipe ( o tubería).
Deben quedar claras las situaciones en que se debe usar este carácter y cuándo se deben usar los
caracteres de redirección: si lo que pretendemos es que la entrada o salida de un programa sea un
fichero, utilizaremos redirección; en cambio, si pretendemos que la salida de un programa pase a
ser la entrada de otro, hemos de usar el pipe.
Ejemplo:
grep disquetera perifericos.txt | sort > disqueteras.txt
en esta orden, el comando grep selecciona aquellas líneas del fichero.txt que contengan la palabra
disquetera. La salida predeterminada de grep es la pantalla, pero en este caso, como hemos
puesto un pipe será pasada a la entrada de sort, que ordenará las líneas y las volcará al fichero
disqueteras.txt.
Por último, cabe señalar que el carácter pipe no es aplicable exclusivamente a aquellos programas
que sean filtros (según la definición de arriba). Con el uso del mismo, cualquier programa que
espere datos por su entrada estándar podrá obtenerlos de la salida de otro programa que envíe
datos a su salida estándar (ver la prácticas de redireccionamiento y filtros).
17
9.-‐Metacaracteres Los metacaracteres pueden definirse como caracteres o combinaciones de ellos con significados
especiales para el shell.
En el tema que nos ocupa, son de interés aquellos que se pueden utilizar manipular nombres de
ficheros y directorios. Vamos a ver los siguientes:
* : Sustituye a una cadena de cero o más caracteres.
? : sustituye a un único carácter.
[] : sustituye a cualquier carácter de los incluidos entre los corchetes. Dentro de éstos puede haber
una secuencias de caracteres, intervalos (dos caracteres separados por un guión) o ambos.
Ejemplo 1:
ls fich*.txt
Muestra un listado de los ficheros del directorio actual cuyo nombre comience por fich y acabe
en .txt.
Ejemplo 2:
ls fich??.txt
Muestra un listado de los ficheros del directorio actual cuyo nombre comience por fich y acabe
en .txt, y tenga intercalados, entre fich y .txt dos caracteres cualquiera.
Ejemplo 3:
ls fich[1-7].txt
Muestra un listado de los ficheros del directorio activo cuyo nombre comienze por fich, acabe
en .txt y en medio tenga un dígito comprendido entre 1 y 7 (ambos incluidos).
Ejemplo 4:
ls fich[1234567].txt
Realiza la misma función que el comando anterior.
Ejemplo 5:
18
ls fich[a-ce-g].txt
Muestra un listado de los ficheros del directorio activo cuyo nombre sea cualquiera de los
siguientes: ficha.txt, fichb.txt, fichc.txt, fiche.txt, fichf.txt, fichg.txt
19
ANEXO I. Diferencias entre un enlace físico (hard) y un enlace simbólico. Enlace físico:
✔ Se crea con el comando ln sin hacer uso de la opción -s.
✔ Con la orden ls -l aparece como un fichero más, no hay forma de saber que se trata de
un enlace.
✔ No puede crearse un enlace físico para un directorio.
✔ Debe apuntar obligatoriamente a un fichero que esté en la misma partición.
✔ Al borrar el último enlace físico el fichero se borra. Enlace simbólico:
✔ Se crea con el comando ln haciendo uso de la opción -s.
✔ Con la orden ls -l aparece como un fichero de tipo enlace simbólico (el primer carácter
de la primera columna es l).
✔ Es posible crear un enlace simbólico para un directorio.
✔ Puede apuntar a un fichero o directorio que esté en otra partición e incluso, puede no
apuntar a nada.
✔ Al borrar el último enlace simbólico el fichero no se borra.