Upload
goito-henriquez
View
227
Download
0
Embed Size (px)
Citation preview
2008 Escuela de Informática y Telecomunicaciones, DuocUC
Escuela deInformática y Telecomunicaciones
Clase 5: Comandos de manipulación de Directorios y Redireccionamientos
Nombre unidad de aprendizaje: Introducción al LINUX
Programación Aplicada
2© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Objetivos
Objetivos de la clase
Identifica sistemas de archivos y comandos del sistema operativo para inclusión en programas realizados en el ambiente de programación del intérprete de comandos Bash.
3© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
LS - Para desplegar información acerca del contenido de un directorio se utiliza el comando ls (que viene de LiSt). Descubrirá que es uno de los comandos de LINUX que se usan con mayor frecuencia, por lo tanto, existen muchas opciones para controlar su salida.
La función básica de ls es desplegar una lista alfabética de los nombres de archivos en un directorio.
4© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
Por ejemplo, para listar los archivos del directorio /home, usar: ls /home.
Cualquier archivo cuyo nombre comience con un “.” se denomina ARCHIVO OCULTO. Los nombres de los archivos ocultos, por ejemplo, .bash_profile, no se enlistan cuando se usa el comando ls, a menos que se emplee la opción -a (all o todos).
5© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
Para desplegar la mayor información posible acerca de un directorio o archivo, se usa el comando ls con la opción -l (larga). La salida consiste en un resumen del almacenamiento en disco seguido de una línea por archivo.
Por ejemplo, consideremos:
[alumno@localhost ~]$ ls –l datos-rw-r--r-- 1 alumno alumno 2255 Aug 3 20:30 datos
6© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
En el extremo izquierdo de cada línea, el primer caracter indica el tipo de archivo (existen varias posibilidades, pero las que por el momento interesan son “d”, que significa directorio, y “-”, que quiere decir archivo ordinario).
A continuación se especifican los PERMISOS que los distintos tipos de usuarios tiene sobre dicho archivo.
7© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
A continuación , se muestra un número que indica cuántos enlaces existen para ese archivo, seguido del identificador de usuario del dueño del archivo y su grupo, el tamaño del archivo en bytes, la fecha y hora en que se modificó el archivo por última vez, y por último, el nombre del archivo.
8© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
Si lo que se quiere es ver detalles de un directorio, y no de su contenido, se debe usar ls con la opción -d, por ejemplo, ls -ld /home.
Con ls es posible obtener un listado “recursivo” de los archivos del directorio y subdirectorios incluidos por medio de la opción -R, por ejemplo, ls -R /home.
9© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
Otras opciones de ls son: -s para listar junto con los nombre de archivos su tamaño (size) en bloques, -i para listar junto con los nombre de archivos su número de i-node, -F para llevar a cabo una categorización de los archivos, etc.
La opción -F agrega a los nombres de archivos en el listado marcas como un “*” para los archivos ejecutables y “/” para los directorios.
10© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
CD - Para cambiar su directorio de trabajo, utilice el comando cd (change directory o cambiar directorio).
Por ejemplo, para pasar al directorio /bin utilice: cd /bin.
Si emplea el comando cd sin un nombre de directorio, por defecto, lo lleva a su directorio propio (cd es equivalente a cd $HOME).
11© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
Un directorio que contiene otro directorio se denomina DIRECTORIO PRINCIPAL. Cuando se pasa de un directorio a un directorio principal, el último se designa con ".." en la mayoría de los sistemas.
Se debe escribir cd .. en LINUX para acceder a un directorio principal.
El directorio actual suele denotarse por “.”.
12© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
PWD - Para desplegar el nombre de su directorio de trabajo, utilice el comando pwd (print working directory o imprimir el directorio de trabajo).
[alumno@localhost ~]$ pwd/home/alumno[alumno@localhost ~]$ cd tarea[alumno@localhost ~]$ pwd/home/alumno/tarea
13© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
MKDIR - Para crear un directorio utilice el comando mkdir (make directory o hacer directorio).
Por ejemplo, para crear un directorio llamado extra dentro de su directorio de trabajo use: mkdir extra.
La opción -m permite establecer los permisos de los directorios creados.
14© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
La opción -p permite crear los directorios padre que falten para cada argumento del directorio.
RMDIR - Para borrar o remover un directorio emplee el comando rmdir (remove directory o remover directorio).
Por ejemplo, para borrar el directorio extra de su directorio de trabajo use: rmdir extra.
15© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
Cuando borre un directorio, LINUX lo obliga a seguir dos reglas importantes. Primera: no puede borrarlo a menos que se encuentre vacío. Esta es una medida de seguridad.
La segunda regla para borrar directorios especifica que no puede borrar ningún directorio que se encuentre dentro de su directorio de trabajo y de su directorio raíz.
16© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Comandos LINUX de manipulación de directorios
Quizás haya ocasiones en que en realidad quiera borrar un directorio que no está vacío. Durante esa operación, puede emplear el comando rm con la opción –r.
17© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
ALIAS de comandos en LINUX
Los ALIAS permiten dar nombres alternativos (mas fáciles de recordar, más cortos,…) a los comandos LINUX.
En LINUX los ALIAS se definen por medio del comando alias, de acuerdo con la siguiente sintaxis:
alias nombre_de_alias=“comando_LINUX”
18© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
ALIAS de comandos en LINUX
Por ejemplo, para definir un alias que permita listar solo los subdirectorios del directorio actual, usaremos: alias sd=“ls -l ¦ grep ^d”.
Ahora ejecutar sd será equivalente a ejecutar ls -l ¦ grep ^d.
Si queremos que el alias esté siempre disponible debemos agregarlo a un archivo que se ejecute al inicio de sesión, por ejemplo, al archivo .bash_profile.
19© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
ALIAS de comandos en LINUX
Para eliminar un alias previamente definido, se utiliza el comando unalias, así, por ejemplo, la orden unalias sd elimina el alias sd creado previamente.
20© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
E/S estándar y descriptores de archivos en LINUX
La ENTRADA Y SALIDA ESTÁNDAR es la capacidad del INTÉRPRETE DE COMANDOS o SHELL para controlar y dirigir la entrada de datos de los programas, la salida de información útil y la información de errores.
Cuando se ejecuta un programa en LINUX se abre automáticamente tres archivos de E/S para ellos. Estos son: la entrada estándar, la salida estándar y el error estándar.
21© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
E/S estándar y descriptores de archivos en LINUX
22© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
E/S estándar y descriptores de archivos en LINUX
ENTRADA ESTÁNDAR (STDIN) o DESCRIPTOR DE ARCHIVO 0 - El descriptor de archivo STDIN está asociado al dispositivo estándar de entrada de texto, que por defecto es el teclado.
La ENTRADA ESTÁNDAR se refiere al medio desde el cual el comando, archivo o proceso recibe la información.
23© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
E/S estándar y descriptores de archivos en LINUX
SALIDA ESTÁNDAR (STDOUT) o DESCRIPTOR DE ARCHIVO 1 - El descriptor de archivo STDOUT está asociado al dispositivo estándar de salida de texto normal de los programas, que por defecto es la pantalla.
La SALIDA ESTÁNDAR se refiere al lugar que el comando, archivo o proceso envía la salida.
24© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
E/S estándar y descriptores de archivos en LINUX
ERROR ESTÁNDAR (STDERR) o DESCRIPTOR DE ARCHIVO 2 - El descriptor de archivo STDERR también es una salida de texto, pero se usa exclusivamente para mostrar los errores generados por los programas. Pordefecto también está asociado al terminal de pantalla.
25© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
Como ya se había mencionado anteriormente, por defecto la SALIDA ESTÁNDAR está conectada a la pantalla, la ENTRADA ESTÁNDAR al teclado, y el ERROR ESTÁNDAR a la pantalla.
Es posible reasignar estos destinos (y otros archivos abiertos) antes de ejecutar el programa, en lo que se conoce como REDIRECCIÓN DE E/S.
26© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
El REDIRECCIONAMIENTO simplemente indica capturar salida desde un archivo, comando, programa, SCRIPT, o un bloque de código dentro de un SCRIPT y enviarlo como entrada a otro archivo, comando, programa o SCRIPT.
El símbolo para REDIRECCIONAR LA ENTRADA es “<“ y se utiliza como:
comando < nombre_archivo
27© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
Por ejemplo, la orden sort<listado ordena alfabéticamente el contenido del archivo listado y lo despliega en pantalla.
Por ejemplo, el comando cat, si no recibe argumentos, lee desde el teclado por la ENTRADA ESTÁNDAR y lo pasa a la SALIDA ESTÁNDAR:
[alumno@localhost ~]$ catHola mundo!!Hola mundo!!^D
28© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
Otra facilidad para REDIRECCIONAR ENTRADA ESTÁNDAR es “<<“, que después de un comando, permite ingresar, por teclado, un texto que se constituirá en la ENTRADA ESTÁNDAR. A continuación de “<<“ debe ponerse una palabra, que indicará el fin de la entrada. La ENTRADA ESTÁNDAR constará de las líneas que se digiten a continuación hasta la primera que contenga sólo la palabra que indicaba el fin de la entrada.
29© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
Por ejemplo:
[alumno@localhost ~]$ sort<<END>Chile>Perú>Brasil>ENDBrasil Chile Perú
30© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
Los tabuladores se eliminan de la entrada en el caso de usar la redirección “<<-” y se mantienen con “<<“.
El operador de REDIRECCIÓN DE SALIDA “>” permite cambiar la SALIDA ESTÁNDAR de un comando o programa.
Por ejemplo:
[alumno@localhost ~]$ date +%D > fecha
31© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
Envía la fecha actual al archivo fecha en vez de a pantalla.
También podemos cambiar a la vez entrada y salida estándar de un comando o programa usando ambos operadores de redirección.
Por ejemplo, sort<listado>listado_ordenado, permitirá que sort ordene el archivo listado y envíe dicho contenido ordenado al archivo listado_ordenado.
32© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
Cuando se utiliza “>” hay que tener mucho cuidado de no borrar un archivo sobreescribiéndolo. Cuando se utilizan redirecciones, debido a su utilidad en los scripts, "no se realizan confirmaciones". Así, si el archivo a escribir ya existe desde antes, el redireccionador “>” lo sobreescribe con flujo de texto nuevo.
33© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
En cambio el operador “>>” realiza un agregado de texto en el flujo existente.
También se podrá REDIRECCIONAR EL ERROR ESTÁNDAR para que no salga en pantalla. Si quisiéramos realizar un listado de un directorio y, en caso de producirse un error, este fuese redirigido a un archivo, usaremos la siguiente orden: ls /bin 2>/tmp/error.ls.
34© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
Esta simple redirección solo tendría efecto sobre el ERROR ESTÁNDAR (STDERR). Con esta redirección los posibles errores serían redirigidos al archivo /tmp/error.ls.
Si quisiéramos dividir tanto la salida por pantalla como el error en dos archivos separados podemos hacerlo de esta manera: ls /bin 1>/tmp/salida 2>/tmp/error.ls.
35© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Redireccionamientos en LINUX
Muchas veces no se quiere que un programa muestre mensajes en la consola del usuario, en este caso es muy común redirigir su SALIDA ESTÁNDAR y SALIDA DE ERRORES ESTÁNDAR al archivo /dev/null, por ejemplo: gcc *.cpp > /dev/null 2> /dev/null.
Otro operador útil es el OPERADOR DE REDIRECCIÓN 2>> el que se usa para almacenar los conocidos logs de errores.
36© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Entubamientos (piping) en LINUX
El sistema LINUX permite transferir datos entre diferentes procesos. Este proceso se llama "piping", pues "pipe" es el nombre que se le da al símbolo utilizado para transferir datos.
El símbolo para "piping" es “¦” y se utiliza de la siguiente manera:
procesoA ¦ procesoB ¦ procesoC ¦ …
37© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Entubamientos (piping) en LINUX
Desde el punto de vista de un programa no hay diferencia entre leer texto guardado en un archivo o introducido mediante el teclado, escribir un texto en un archivo o en la pantalla del terminal, etc.
Extendiendo esta idea es también posible enlazar la salida de un programa con laentrada de otro. Esta operación se puede realizar mediante una tubería (pipe) queune dos (o más) comandos en uno solo.
38© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Entubamientos (piping) en LINUX
Un ejemplo clásico de piping es cuando se requiere listar un directorio que ocupa más de una pantalla. Se podrá entonces utilizar el comando para listar ls y enviar su salida a otro programa que lo muestre de a una página de pantalla por vez, por ejemplo el more.
39© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Entubamientos (piping) en LINUX
Así, podemos usar: ls -l ¦ more.
Si deseamos obtener el listado de archivos regulares desde mi directorio, podemos usar: ls -l ¦ grep “^-”.
El siguiente ejemplo muestra una orden compuesta que ordena todos los archivos con extensión ".txt", elimina las líneas duplicadas y guarda los datos en el archivo resultado.sal: cat *.txt ¦ sort ¦ uniq > resultado.sal.
40© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Desarrollo
Entubamientos (piping) en LINUX
Para mostrar los nombres de todos los usuarios definidos en mi máquina ordenados alfabéticamente, podemos utilizar: cut –d \: -f 1 < /etc/passwd ¦ sort.
41© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Resumen Resumen de la clase
Los comandos de manipulación de directorios de LINUX son: ls, mkdir, rmdir, cd y pwd.
Los ALIAS permiten dar nombres alternativos (mas fáciles de recordar, más cortos, más significativos…) a los comandos LINUX.
Cuando se ejecuta un programa en LINUX se abren automáticamente tres archivos de E/S para ellos. Estos son: la entrada estándar (STDIN), la salida estándar (STDOUT) y el error estándar (STDERR).
La ejecución normal (sin redireccionamiento) y correcta de un comando LINUX implicaría:
42© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public
Escuela de Informática y Telecomunicaciones
Resumen Resumen de la clase
STDIN se asocia con el teclado, STDOUT y STDERR se asocian con la pantalla.
Algunos caracteres especiales permiten redireccionar la entrada estándar (<), la salida estándar (>) y el error estándar (2>).
Los sistemas UNIX/LINUX permiten transferir datos entre diferentes procesos. Este proceso se llama "piping", pues "pipe" (o tubo) es el nombre que se le da al símbolo utilizado para transferir datos.
La salida de un proceso es tomada como entrada para otro proceso, por medio del carácter “pipe” (¦).