Practica 4 FITI Linux 2020
Practica 4 FITI Linux 2020
Practica 4 FITI Linux 2020
SESIÓN 4:
I
OBJETIVOS
II
MARCO TEORICO
Archivos
Bajo la mayoría de los sistemas operativos existe el concepto de archivo (fichero), el cual
es un conjunto de información al que se le ha asignado un nombre. Cualquier cosa salvada
en el disco es guardada en un archivo individual.
Ejemplos:
Directorios
Un directorio es simplemente una colección de ficheros. Puede ser considerado como una
"carpeta" que contiene muchos ficheros diferentes. Los directorios también tienen nombre
con el que los podemos identificar. Además, los directorios mantienen una estructura de
árbol; es decir, directorios pueden contener otros directorios.
Un fichero puede ser referenciado por su nombre con camino, el cual esta constituido por
su nombre, antecedido por el nombre del directorio que lo contiene.
Ejemplo:
Supongamos que Larry tiene un directorio de nombre papers que contiene tres ficheros:
history-final, english-lit y masters-thesis. (Cada uno de los tres ficheros contiene
información sobre tres de los proyectos en los que Larry esta trabajando). Para referirse al
fichero english-lit, Larry puede especificar su camino:
papers/english-lit
Como puede ver, el directorio y el nombre del fichero van separados por un carácter /. Por
esta razón, los nombres de fichero no pueden contener este carácter. Los usuarios de
papers/notes/cheat-sheet
Por lo tanto, el camino realmente es la "ruta" que se debe tomar para localizar a un fichero.
El directorio sobre un subdirectorio dado es conocido como el directorio padre. Aquí, el
directorio papers es el padre del directorio notes.
El árbol de directorios
La mayoría de los sistemas UNIX tienen una distribución de ficheros estándar, de forma
que recursos y ficheros puedan ser fácilmente localizados. Esta distribución forma el árbol
de directorios, el cual comienza en el directorio "/", también conocido como "directorio
raíz". Directamente por debajo de / hay algunos subdirectorios importantes: /bin, /etc, /dev
y /usr, entre otros. Estos a su vez contienen otros directorios con ficheros de configuración
del sistema, programas, etc.
En la figura 3.1 se muestra un árbol de directorio de ejemplo. Este debería darle una idea
de como esta organizado en su sistema el árbol de directorios. Esto podría variar algo.
/ bin
dev
etc
home larry
sam
lib
proc
tmp
usr X386
bin
emacs
etc
g++-
include
include
lib
local bin
emacs
etc
Lib
man
spool
src linux tmp
En cualquier momento, las órdenes que teclee al intérprete de comandos son dadas en
términos de su directorio de trabajo actual. Puede pensar en su directorio actual de trabajo
como en el directorio en el que actualmente esta "situado". Cuando entra en el sistema, su
directorio de trabajo se inicializa a su directorio home, para el ejemplo sería /home/larry.
En cualquier momento que referencie a un fichero, puede hacerlo en relación a su directorio
de trabajo actual, en lugar de especificar el camino completo del fichero.
Ejemplo:
Larry tiene el directorio papers, y papers contiene el fichero history-final. Si Larry quiere
echar un vistazo a ese fichero, puede usar la orden
Por otra parte, si comienza el nombre del fichero con "/", el sistema interpreta esto como
un camino completo, es decir, el camino al fichero completo desde el directorio raíz, /. Esto
es conocido como camino absoluto.
Ejemplo, la orden
es equivalente a
El carácter "~" es simplemente sustituido por el intérprete de comandos, con el nombre del
directorio home. Además, también puede especificar otros directorios home de usuarios
con la tilde. El camino "~karl/letters" es traducido por el intérprete de órdenes a
Comprimir y descomprimir
El efecto de la operación de comprensión hace que el tamaño del archivo disminuya. Del
mismo modo, para que un archivo comprimido pueda tener el tamaño original implica
realizar la operación de descompresión. Para comprimir un archivo se tiene un conjunto
utilitarios tales como gzip, bzip2, zip, etc., y los correspondientes utilitarios que
descomprimen los anteriores formatos son: gunzip, bunzip2 y unzip.
tar
El comando tar permite empaquetar ficheros. Permite incluir todos los archivos juntos en
un mismo archivo, preservando las estructuras de directorios y permisos de los mismos.
donde:
Las operaciones que se pueden realizar con tar son empaquetado y desempaquetado.
IV
ACTIVIDADES
04. Ingrese cada uno de los siguientes ejemplos y observe lo que sucede
Ejemplo:
/home/larry$ pwd ↵
Opciones:
-F usada para mostrar información sobre el tipo de fichero. Añade el carácter /
a cada nombre si son subdirectorios, un “*” si es un fichero ejecutable.
No añade nada, si es un fichero normal, es decir no es ni un directorio ni
un ejecutable.
-l da un listado "largo" incluyendo tamaño, propietario, permisos, etc. -r
muestra el contenido ordenado de forma inversa.
-a muestra los archivos ocultos (empiezan con . - .term/)
Ejemplo:
/home/larry$ ls ↵
/home/larry$ ls –l
/home/larry$ ls –r ↵
/home/larry$ ls –a ↵
/home/larry$ ls –F ↵
/home/larry$ ls ↵
/home/larry$ ls /etc ↵
/home/larry$ ls -lF ↵
Sintaxis: cd <directorio>
/home/larry$ cd papers
↵ /home/larry/papers$
Como se puede ver, la línea de comandos de Larry cambia para mostrar su directorio
actual de trabajo. Ahora que ya esta en el directorio papers puede echarle un vistazo a
su fichero history-final con el comando:
Ahora Larry esta en el subdirectorio papers, para volver al directorio padre de este,
usara la orden
/home/larry/papers$ cd
.. /home/larry$
(Dese cuenta del espacio entre "cd" y ".."). Cada directorio tiene una entrada de nombre
".." la cual se refiere al directorio padre. De igual forma, existe en cada directorio la
entrada "." la cual se refiere a si mismo. Así que el comando
/home/larry/papers$ cd
. /home/larry$
nos deja donde estamos.
También pueden usarse nombres con el camino absoluto en la orden cd. Para ir al
directorio de Karl con cd, introduciremos la siguiente orden.
/home/larry/papers$ cd
/home/karl /home/karl$
/home/karl$ cd
/home/larry$
rmdir Esta orden borra directorios vacíos. Al usar rmdir, el directorio de trabajo
actual no debe de estar dentro del directorio a borrar.
Ejemplo:
/home/larry$mkdir eliminar ↵
/home/larry$cd eliminar ↵
/home/larry/eliminar$mkdir borra borra1 ↵
/home/larry$cd ↵
/home/larry$rmdir eliminar ↵ (no elimina porque no esta vacio)
/home/larry$mkdir eliminar/borra eliminar/borra1 eliminar ↵ (1)
Creación de archivos
Sintaxis: ed <fichero1>
/home/larry$cd textos ↵
/home/larry/textos$pwd ↵
/home/larry$de ejemplos ↵
para introducir el texto presione a ↵
introduzca el siguiente texto al archivo:
Esta orden facilita el paso al modo inserción de texto, añadiendo nuevo texto al
que ya tuviese.
Escriba el texto que contendrá en archivo ejemplos.
Una vez que la posición del cursor está en la línea siguiente, teclee . ↵
ed entiende el punto sólo en una línea en blanco, como una instrucción que
ordena el retorno al modo orden.
Para grabar el archivo sólo tendrá que teclear w ↵ .
ed devolverá en su pantalla el número de caracteres escritos en disco.
q ↵ devuelve el prompt de su shell.
a ↵ para retornar a modo inserción y seguir escribiendo
Ejemplo:
mv Mueve fichero(s) a otro fichero o directorio. Es equivalente a una copia seguida del
borrado del original. Puede ser usado para renombrar ficheros, como el comando MS-
DOS RENAME.
Ejemplo:
/home/larry/personal$ mv joe
sells /home/larry/ personal$ ls –F
/home/larry/ personal$ cd ..
/home/larry$mv graficos figuras ↵
/home/larry$ls -l ↵
Nótese como joe ya no existe, en su lugar esta el fichero sells. Esta orden puede usarse
para renombrar ficheros, como acabamos de hacer, pero también para mover ficheros a
directorios diferentes.
Nota: mv y cp sobreescribiran los ficheros destino (si ya existen) sin consultar. Sea cuidadoso
cuando mueva un fichero a otro directorio: puede haber ya un fichero con el mismo nombre
que será sobrescrito.
rm Borra ficheros. Nótese que cuando los ficheros son borrados en UNIX, son
irrecuperables (a diferencia de MS-DOS, donde usualmente se puede recuperar un
fichero borrado).
Opciones:
-i pedirá confirmación antes de borrar un fichero. -
r elimina recursivamente
Ejemplo:
/home/larry/personal$ ls –F
Las órdenes more y cat son usadas para ver el contenido de ficheros.
more Muestra el contenido de los ficheros indicados, una pantalla cada vez.
Ejemplo:
cat Oficialmente usado para concatenar ficheros, cat también es usado para mostrar el
contenido completo de un fichero de una vez.
Ejemplo:
Ejemplo:
$ head –5 termcap .
Ejemplo:
$ tail –9 termcap .
Sintaxis:
chmod <permisos> nombre_archivo
donde:
<permisos> tienen la forma siguiente: rwx rwx rwx
r permiso de lectura 4
w permiso de escritura 2
x permiso de ejecución 1
7
Podrá observar que existen 3 grupos de rwx, estos corresponden a lo siguiente:
Ejemplo:
Para poder modificar se puede sumar el valor de los permisos para cada uno de los
grupos. Por lo tanto, si quisiéramos cambiar los permisos a rwxr-xr-- de un archivo
denominado ejemplo, se sumaría:
Otra forma de cambiar los permisos es utilizar las abreviaturas para los usuarios,
grupos y otros, además de:
Ejemplo:
umask los permisos asignados a un archivo cuando son creados dependen de una
variable denominada user mask. El permiso implícito por defecto suele tener el valor
rw-rw-rw- (modo 666).
Por ejemplo, si quisiéramos que nuestro modo por defecto para los archivos sea rw-r--
--- (modo 640), entonces:
666-640=26
Empaquetar
Por ejemplo, el comando siguiente empaqueta todos los archivos del directorio actual.
Desempaquetar
El comando extraerá el fichero tar backup.tar en el directorio actual. Con ello hay
que tener cuidado debido a que esto puede ser peligroso a veces cuando se extraen
ficheros de un fichero tar, los ficheros antiguos se sobrescriben.
Por otra parte, antes de extraer ficheros tar es importante conocer donde se deben
desempaquetar los ficheros. Por ejemplo, digamos que se archivaron los siguientes
ficheros: /etc/hosts, /etc/group, y /etc/passwd. Si se uso el comando
# cd /
# tar xvf backupetc.tar
# cd /etc
# tar cvf backupetc hosts group passwd
gzip
$ gzip -9 backup1.tar
# gunzip backup1.tar.gz
gunzip
bzip2
Con el mismo sistema de funcionamiento que gzip. Obtiene una mejor compresión
que el gzip, aunque tarda más en comprimir. La extensión que le coloca es bz2.
bunzip2
zip
$ zip mizip.zip *
Para comprimir este directorio y todos los que cuelguen del mismo:
$ zip -r mizip1.zip *
unzip
Permite la descompresión.
$ unzip mizip1.zip
Cuando estamos dentro del sistema usando la terminal bash, generalmente tecleamos
comandos para que sean ejecutados. El hecho de que estemos simplemente presionando el
teclado implica que estamos entrando datos al sistema mediante el teclado. Cuando en
ejemplos anteriores hemos usado el comando ls, ha aparecido en pantalla un listado de
archivos y directorios, claramente el sistema ha producido salida de datos mediante el
monitor.
Hemos puesto dos ejemplos, el teclado de la terminal como vía para entrar datos al sistema,
y el monitor de la terminal como vía de salida de los datos. Pero no son, ni mucho menos,
las únicas posibilidades. Los distintos puertos físicos del ordenador pueden ser vía de
entrada o de salida de datos, igualmente con la tarjeta de sonido, módem, tarjeta de red,
etc.
Los sistemas UNIX (y por ello también los Linux), son especialmente conocidos por su
facilidad y eficiencia para pasar datos entre programas o entre programas y dispositivos,
siendo esta una de sus múltiples ventajas.
Otros conceptos importantes dentro de estos son los de entrada estándar y salida estándar
(stdin y stdout respectivamente). Por defecto, stdin apunta al teclado (los datos, se toman
generalmente por defecto del teclado), y stdout apunta a la pantalla (por defecto los
programas suelen enviar la salida por pantalla).
echo
Ejemplo:
$echo “Hola, usuario de Linux”
Hola, usuario de Linux
Como vemos, por defecto el comando echo recibe las cadenas de texto entre comillas
(simples o dobles), y saca por defecto a la pantalla lo que le pasamos como argumento;
aunque puede enviar la salida a otros sitio, como veremos más adelante.
cat
El comando cat tiene asociada la entrada al teclado por defecto, y la salida a la pantalla.
Así que si lo llamamos sin argumentos, simplemente tecleando cat, escribiendo algo y
pulsando ENTER, volverá a imprimir en pantalla cada línea que nosotros tecleemos:
$cat Escribo
esto Escribo
esto
Y escribo esto otro
Y escribo esto otro
El funcionamiento de cat puede parecernos poco útil, pero veamos ahora su funcionamiento
más común que es mostrar el contenido de un fichero:
$cat archivo
Este es el uso más frecuente para el comando cat, tomar como entrada un fichero y sacar
su contenido por la salida estándar, pero descubriremos después que se puede enviar el
contenido de un fichero por otras vías.
Los ficheros pueden ser objeto de entrada (leer su contenido) o de salida (escribir la salida
de un determinado comando a un fichero).
touch
Nos permite crear un fichero vacío con el nombre que nosotros le especifiquemos.
$touch miarchivo
4. Hace lo mismo pero respeta lo que tiene el archivo y al final le adiciona lo que
estamos redireccionando.
Ejemplo:
Al ejecutar esto, la lista del contenido del directorio actual que el comando ls sacaría
normalmente por pantalla, se ha escrito en el fichero listado. Si el fichero no existía, se ha
creado, y si existía y tenía contenido, ha sido sobreescrito.
Lo que ocurre es que como listado es un fichero que ya existía y tenia contenido, la línea
se ha escrito al final del fichero. En caso de que listado no hubiera existido, el fichero se
creaba.
En este caso la salida del comando date se agrega como la última línea del fichero listado.
Ejemplo:
$cat > archivo1
Este es el archivo 1
CTRL + D
$cat archivo3
c: Permite enviar lo que hay en un archivo, para que el comando trabaje con él.
Ejemplo:
$echo prueba > mensaje
$mail user2 < mensaje
En el ejemplo creamos el archivo mensaje y luego lo utilizamos y nos sirve como entrada
para enviar un mensaje al usuario user2.
REDIRECCIÓN DE ERRORES
Con cualquier orden que genere mensajes de error mostrado en la pantalla, podemos
redireccionar su salida a otro archivo utilizando el operador 2> o 2>>, dependiendo de si
lo que se quiere es crear o añadir datos al archivo respectivamente.
Ejemplo:
$ls –L /home/etc 2>log_error
Pipes (Tuberías)
PIPES es la conexión de uno o más comandos de tal manera que la salida del primer
comando sea la entrada del segundo y así sucesivamente.
Ejemplo:
$echo hola | mail user2
$echo hola>file2
$mail user2<file2
$more file2 | mail user2
Comandos múltiples
Ejemplo:
$ cat mensaje ; ls $ cat mensaje
$ ls
Comandos relacionados
&& Ejecuta la primera orden y si finaliza con éxito, se ejecutará la segunda orden.
Ejemplo:
$ ls /nuevo && more file2
$ ls /nuevo || more file1
Caracteres de generalización
[ ] 1 caracter a excepción del punto al inicio del nombre. Define una clase de caracteres.
Dentro de esta clase se puede utilizar un guión “–“ entre los caracteres para poner
de relieve todos los caracteres en ese rango y se puede usar un signo de exclamación
“!” como primer caracter para negar la clase definida.
Ejemplo:
$ ls file [23]
$ ls file[1-3]
$ ls file[!1] $
ls file[!1-3] $
ls fi*
$ ls file?
diff
Compara dos archivos línea por línea y muestra todas las diferencias que hay. Si son
iguales no sale nada.
Ejemplo:
$ echo prueba1 >file3 $
echo prueba2>file4 $
diff file3 file4
BUSCAR ARCHIVOS
find
Recorre los directorios especificados generando una lista de archivos que satisfacen los
requerimientos.
Ejemplo:
Busca por nombre, cuando lo encuentra muestra por pantalla la ruta completa donde los
encontró.
Opciones:
-user selecciona los archivos que pertenecen al usuario que se indique a
continuación de -user.
-mtime n selecciona los archivos modificados hace n días.
-mtime –n selecciona los archivos modificados en los últimos n días.
FILTROS
Un filtro es un comando que procesa la entrada de un flujo de datos para producir la salida
de un flujo de datos. Por ejemplo tenemos el comando cat, sort , uniq, find,grep, etc.
sort
El comando sort toma como entrada líneas de texto (de nuevo leerá desde stdin si no se le
proporcionan nombres de ficheros en la línea de comandos), y devuelve la salida ordenada
a stdout.
Ejemplo:
$ sort
durazno
aceituna
queso
leche
naranja
ctrl+D
Con este filtro también puede ordenar las líneas de uno o varios archivos. Esta ordenación
no produce ninguna modificación en los archivos tratados.
Ejemplo:
$ sort arch3
$ sort arch3 –r
uniq
La orden uniq lee su entrada estándar o una lista de nombres de archivos y escribe en su
salida estándar.
Remueve las líneas duplicadas de un archivo ordenado.
Por omisión uniq escribirá una instancia de cada línea de entrada que sea diferente a las
otras líneas (contiguas).
Ejemplo:
$echo Aqp>>arch3
$echo Aqp>>arch3
$uniq arch3 $echo
Num1>>arch3 $echo
Num1>>arch3 $echo
Num1>>arch3 $uniq
arch3
$ uniq arch3 –c
$ uniq arch3 –u
$ uniq arch3 –d
grep
Permite buscar cadenas de caracteres en los archivos que le indiquemos. Devuelve toda la
línea donde encuentra la cadena.
Sintaxis:
grep <patrón> <fichero1> <fichero2> ...<ficheroN>
Donde:
<patrón> es una expresión regular
<fichero1> a <ficheroN> son los ficheros donde se va a buscar.
Ejemplo:
$ grep Aqp arch3
En el caso de que el elemento que desee buscar se componga de más de una palabra, ese
elemento debe colocarlo entre comillas dobles.
wc
Ejemplo:
$wc -l arch3
du
Ejemplo:
$ du arch3
sed
Significa Stream Editor, es decir, un editor de flujos. El comando sed nos va a permitir
editar flujos de datos pasados a través de una tubería (pipe) por ejemplo. Es muy útil para
hacer modificaciones en flujos de datos o ficheros de texto. Estas modificaciones pueden
ser añadir o borrar una línea, o un conjunto de ellas, buscar y reemplazar patrones.
Ejemplo:
$cat > file1
ucsm
P.P. de Ingeniería de Sistemas – ucsm
P.P. de Ingeniería Industrial - ucsm
P.P. de Ingeniería Electrónica – ucsm
CTRL+D
EXPRESIONES REGULARES
Una expresión regular define el conjunto de una o más cadenas de caracteres. Varios
comandos de Linux utilizan expresiones regulares para buscar y reemplazar cadenas de
texto, incluidos ed, vi, grep, sed y ls.
Las expresiones regulares son una herramienta para definir patrones de búsqueda y
reemplazo. En ellas se definen lo que llamaremos átomos que serán las partes que
buscaremos. En los patrones podemos hacer referencias a “un carácter cualquiera”, “el
comienzo de línea”, “el final de línea” y demás. Para ello utilizamos caracteres reservados
conocidos como wildcards.
Vamos a ver un pequeño ejemplo sobre como usar dos wildcars muy comunes, el de
“principio de línea” (^) y el de “final de línea” ($).
Por ejemplo, para añadir un texto al comienzo de todas las líneas podemos hacer:
Veamos el mismo ejemplo pero al contrario. Queremos añadir algún texto al final de todas
las líneas de un flujo de datos:
Cualquier carácter que queremos que sed trate como un literal en lugar de un wildcard, le
añadiremos un \ delante y diremos que lo hemos escapado. Entonces, ¿Cómo decirle a sed
que un \ es un literal y no es el carácter de escape?, pues tenemos que escapar el \ quedando:
Ejemplos:
ls –l | grep ^d
Nos muestra solo los directorios de la ubicación actual.
ls | grep [0-9]$
Nos muestra todos los archivos del directorio actual cuyo nombre termine en un número
del cero al 9.
V
EJERCICIOS
• Cree dentro de la Carpeta Donwload (descargas) una carpeta llamada UNSA,
UCSM y USP, adicionalmente cree dentro de cada carpeta un archivo con el
nombre de Juan Perez (UNSA), Fulanito Ramirez (UCSM), Pedro Picapiedra
(USP).
• Copie la lista de archivos y/o directorios que se han creado anteriormente en su
directorio home.
• Blanco, V., “Linux Instalación, Administración y uso del Sistema”, Ed. Ra-Ma,
México, 2010.