Curso de Linux - Anejos

16 - Anejos

[editar]
Curso gratis creado por Anónimo.
22 de Febrero de 2006
Compilado de programas en Linux

Linux como cualquier sistema Unix que se precie incluye un compilador de C y C++. Esto no implica que se esté limitado a estos dos lenguajes de programación. Por el contrario existen una gran cantidad de compiladores gratuitos para los lenguajes más importantes.

El compilador de C/C++ de Linux es un compilador de línea de comandos, esto es, no dispone de ninguna interfaz gráfica que facilite la programación y compilación del código. Existen eso sí editores de texto capaces de mostrar la sintaxis del código resaltada como kwrite, aunque la compilación hay que realizarla manualmente a través de una consola o terminal.

Compilación y linkado

El primer paso para crear un programa, por ejemplo en C++, es crear el fichero de código fuente, y guardarlo en un fichero de texto por ejemplo e1.cpp. Tras esto hay que compilar el programa. Para esto se empleará el comando g++, de la siguiente forma:

g++ e1.cpp

Con lo que conseguiremos que se compile el programa. Con este comando hemos conseguido que se cree un programa llamado a.out en el directorio de trabajo. Para ejecutarlo emplearemos

./a.out

Normalmente no desearemos que el programa se llame a.out sino que tenga un nombre más significativo, como ejemplo_1, para conseguirlo emplearemos:

g++ -o ejemplo_1 e1.cpp

Si queremos ejecutar el programa emplearemos ./ejemplo_1. Si el programa escrito realiza emplea alguna función que no se encuentre en la librería estándar hay que incluirla en la orden de compilación, por ejemplo:

g++ -o ejemplo_2 e2.cpp -lname

Donde name es el nombre de la librería. Por defecto estas se guardan en un fichero cuyo nombre es libname.so, cuya localización suele ser /usr/lib.

Si el programa no está escrito en C++ sino en C las opciones de compilación son las mismas salvo que en lugar del programa g++ se empleará el comando gcc.

gcc –o ejemplo_3 e3.c

Comando make

Este comando sirve para organizar la compilación y el enlazado de programas complicados que dependen de muchos módulos y librerías diferentes. Cuando se ejecuta este comando, se construye un nuevo ejecutable volviendo a compilar sólo aquellos ficheros fuente que son más recientes que el los ficheros compilados correspondientes, teniendo en cuenta para ello las fechas de última modificación de cada fichero.

Este comando se basa en un fichero ASCII (llamado por defecto makefile) que contiene una relación de dependencias entre los distintos módulos, así como las acciones que hay que realizar para poner a punto cada módulo, es decir para pasar de un fuente a un objeto, por ejemplo. Este comando tiene la siguiente forma general:

make [–f makefilename] [–arg_opt] [exe_name]

El fichero makefile (con éste o con otro nombre invocado por medio de la opción –f) contiene cuatro tipos de líneas diferentes:

·   Líneas de comentario, que comienzan por el carácter (#). Si en una línea cualquiera aparece el carácter (#), se ignora todo lo que aparece a continuación de dicho carácter en dicha línea.

·   Líneas de definición de macros. Tienen la forma general,

IDENTIFICADOR = cadena_de_caracteres

Si en alguna otra línea aparece (IDENTIFICADOR), dicha ocurrencia se sustituye por cadena_de_caracteres. No es necesario que el nombre del identificador esté escrito con mayúsculas, pero es una costumbre bastante extendida el hacerlo así. Mediante el uso de macros se pueden representar brevemente pathnames o listas de nombres de ficheros largos. Si el identificador tiene una sola letra, no hace falta poner los paréntesis. El comando make tiene una serie de macros definidas por defecto que se pueden listar con el comando make –p.

Líneas describiendo las relaciones de dependencia. Tienen la forma,

file.o fila.o ... : file1.cpp file2.cpp ...

La lista de ficheros que están a la izquierda del carácter (:) dependen de los ficheros que están a la derecha. En estas líneas se realiza la sustitución habitual de los caracteres (?*[])

Líneas de comandos shell, comenzando siempre por un tabulador. Estas líneas representan las acciones que hay que realizar para actualizar los ficheros dependientes, según las relaciones de dependencia descritas en la línea anterior. En una misma línea de comandos puede haber varios comandos separados por un carácter (;), y de este modo se ejecutan en un mismo proceso; si hay varias líneas de comandos, cada línea se ejecuta en un proceso diferente. Estos comandos shell (compilaciones, etc.) se ejecutan o no según las fechas de los ficheros correspondientes. Hay también una lista de dependencias implícitas y de macrodefiniciones standard que se pueden obtener con el comando make -p (la salida de este comando puede tener varios cientos de líneas). A continuación se presentan algunos ejemplos de ficheros makefile.

A continuación se muestran una serie de ejemplos

# Esto es un ejemplo de fichero makefile # Definiciones de macros ma = ma27ad.o ma27bd.o ma27cd.o

TEST: test.o (ma) xlf –o TEST –O (ma)

test.o: test.f

xlf –c –O test.f ma27ad.o: ma27ad.f

xlf –c –O ma27ad.f ma27bd.o: ma27bd.f

xlf –c –O ma27bd.f ma27cd.o: ma27cd.f

xlf –c –O ma27cd.f

Hay informaciones que no es necesario dar por que se suponen por defecto. Por ejemplo, si el fichero objeto (.o) y el fichero C (.c) o C++ (.cpp) tienen el mismo sufijo, no hace falta definir esas relaciones de dependencia, que por otra parte son triviales.

Búsqueda avanzada en ficheros. Expresiones regulares

A veces se desea encontrar las líneas de un fichero que contienen una palabras o palabras determinadas. Cuando el texto que se desea encontrar es único, lo que hay que hacer es ponerlo tal cual en la sección del comando que define la búsqueda, por ejemplo

grep "PATATAS" Lista_de_la_compra.txt

Sin embargo, en otras ocasiones el texto que se desea buscar no es único, es decir, no está unívocamente determinado como en el ejemplo anterior, sino que debe cumplir unas ciertas condiciones, como la de estar escrito con mayúsculas, comenzar por determinado carácter, estar a principio o final de línea, etc. Este problema se puede resolver en muchos comandos de Linux por medio de las expresiones regulares que se van a presentar a continuación.

Las expresiones_regulares son una forma de describir patrones para la búsqueda de unas determinadas líneas dentro de uno o más ficheros ASCII. Se trata pues de encontrar las líneas cuyo contenido cumple ciertas condiciones, que se definen en la expresión_regular.

Caracteres especiales

En una expresión_regular se pueden utilizar algunos caracteres que tienen un significado especial. Son los siguientes:

[ comienzo de la definición de un conjunto de caracteres

. un carácter cualquiera, excepto el

* un conjunto de caracteres cualesquiera, excepto el primer carácter de una expresión o inmediatamente después de la secuencia \(

] terminación de la definición de un conjunto de caracteres

-sirve para definir el conjunto de caracteres que van del que le precede al que le sigue. Si va detrás del [ o delante del ], no es especial

ˆ comienzo de línea, si está al comienzo de la expresión

ˆ conjunto complementario (el que no cumple la condición), si está justo después del [ que abre la definición de un conjunto

fin de línea, cuando está al final de una expresión \ quita el significado especial a un carácter, excepto en la definición de un conjunto de caracteres

Expresiones regulares de un solo carácter

Se trata de buscar palabras o conjuntos de un solo carácter, que cumple ciertas condiciones. A continuación se presentan algunos ejemplos: \* representa el carácter * . cualquier carácter, excepto el <eol> [a-f] un carácter cualquiera entre la a y la f [A-Z] cualquier letra mayúscula

[ˆa-d] cualquier carácter que no sea una letra entre la a y la d [:clase:] donde clase puede ser: digit (cifra del 0 al 9), xdigit (cifra hexadecimal), alpha (letra cualquiera), upper (letra mayúscula), lower (letra minúscula), alnum (letra o dígito cualquiera), space (un espacio en blanco), cntrl (carácter de control), punct (un carácter de puntuación) y print (carácter imprimible).

Expresiones regulares generales

Se pueden formar de acuerdo con las siguientes reglas:

- una expresión regular de un sólo carácter [a-z] cualquier letra minúscula

- una expresión regular de un sólo carácter, seguida del carácter *, representando entonces todas las palabras de longitud positiva o nula que se pueden construir con los caracteres aceptados por la una expresiones regulares de un sólo carácter

[a-z]* cualquier palabra escrita con minúsculas

- concatenando (poniendo una a continuación de la otra) dos expresiones regulares construidas previamente

[a-z][A-Z] cualquier palabra de dos letras, de las cuales la primera es minúscula y la segunda mayúscula

- Una expresión_regular definida en la forma \(expresiones regulares\) representa la propia expresiones regulares (es decir, definida ella sola), pero define una forma de referirse luego a esa expresiones regulares. En efecto las expresiones regulares definidas de esta forma quedan afectadas por un número del 1 al 9, y es posible luego hacer referencia a una expresiones regulares por medio del número que le corresponde, en la forma \número. Si \número va seguido de un *, esa subexpresión puede repetirse un número cualquiera de veces.

ˆ\(.*\)\1\1 Al comienzo de la línea, un campo formado por un carácter cualquiera que se repite las veces que sea, volviendo a aparecer dos veces mas antes de que se acabe la línea. Esta expresión detectaría las líneas que contienen palabras (o conjuntos de palabras) triples.

- Una expresiones regulares de un sólo carácter seguida de \(entero\) representa entero apariciones consecutivas de alguno de los caracteres aceptados por la expresiones regulares de un sólo carácter. Si va seguida de \(entero,\) representa un número mínimo de entero apariciones consecutivas. Si va seguida de \(entero1, entero2\) representa un mínimo de entero1 y un máximo de entero2 apariciones consecutivas. Los números enteros deben estar comprendidos entre 0 y 255.

- toda expresión que comienza con ˆ indica que los caracteres buscados deben estar a comienzo de la línea

ˆ[a-z]* selecciona las líneas que sólo contienen letras minúsculas

 

- toda expresión que termina con indica que los caracteres buscados deben estar a final de la línea

ˆ[a-z]\{3\}[ˆa-z]\{3\} selecciona las líneas que comienzan con tres minúsculas, terminan con tres caracteres cualesquiera pero que no son minúsculas, y no tiene ningún otro carácter entre medio.

COMANDOS UTILES PARA TRABAJAR EN RED 

 Protocolos Internet (IP)

Cualquier comunicación entre dos sistemas distantes debe resolver los dos problemas siguientes: a) Designación de cada sistema (addressing), y b) Selección del camino a seguir por la comunicación (routing).

El protocolo IP define una dirección lógica para cada red local. La dirección de una máquina concreta se forma añadiendo a la dirección de la red el número que identifica a la máquina en esa red. La dirección completa tiene 32 bits, y se suele dar en la forma de 4 octetos separados por puntos (por ejemplo: 132.227.70.83). El número de octetos que designa a la red (izquierda) y a la máquina (derecha) es variable, dependiendo del tamaño de la red.

El camino de los mensajes (routing) se establece a través de ciertos ordenadores, llamados "pasarelas", que tienen la propiedad de pertenecer al menos a dos redes. Existen tablas que indican cual es la pasarela de la red local a través de la cual se puede acceder a otras redes.

Los mensajes enviados tienen un encabezamiento con las direcciones de los ordenadores "desde" y "hacia". Como los mensajes se suelen enviar fragmentados por problemas de tamaño, el encabezamiento lleva también la información necesaria para reconstruir el mensaje al llegar a su destino.

Las características principales de este nivel de comunicación entre ordenadores son: a) La conexión no es interactiva (se envía el mensaje y no se hace nada más), y b) No se garantiza ni la llegada, ni el orden de llegada, ni la no duplicación de los mensajes).

 

Denominación Simbólica de Sistemas Internet

En lugar de los números lógicos vistos previamente (del tipo 132.227.70.83), es posible utilizar nombres simbólicos tanto para las redes como para las máquinas. Estos nombres se estructuran de modo jerárquico, de modo similar al sistema de ficheros UNIX, tal y como puede verse en la Figura 36.

internet

com edu gov uk fr es

Figura 36

en la que por ejemplo, com indica empresas comerciales (como MDI o ATT), edu indica instituciones educativas americanas, gov instituciones gubernamentales, etc. A la derecha aparecen los indicativos de otros países, como el reino Unido, Francia y España. En la línea inferior aparecen las instituciones concretas de que se trate. Dentro de cada institución se pueden identificar las máquinas y los usuarios. El comando nslookup permite hallar la dirección numérica Internet de un ordenador a partir de su nombre simbólico.

Comando telnet

Permite abrir una terminal virtual en un sistema distante. Este comando no requiere que los sistemas sean UNIX, y tiene la siguiente forma general:

telnet [direccion_host [puerta]]

donde la direccion_host puede ser el numero de Internet, el nombre en el fichero /etc/hosts o el nombre simbólico completo de la máquina. Si el sistema tiene varias puertas, hay que especificar por cual se desea hacer la conexión. Para salir de telnet se emplead el comando quit (o simplemente q).

Comando ftp

Permite la transferencia de ficheros entre sistemas distantes. Supone una conexión entre el sistema local y el sistema distante. Tiene la siguiente forma general:

ftp [-g] [-i] [-n] [-v] [direccion_host ]

Si se define la máquina distante direccion_host se conecta con ella la máquina local. Si no, se entra en modo comando con el prompt ftp>. En ftp no se arranca un shell especial en la máquina distante. Las opciones tienen el siguiente significado:

-v

opción verbose

-i

opción no interactiva: no se pide confirmación para transferir cada fichero -g se inhibe el mecanismo de expansión de los nombres de ficheros (*?)

Los comandos de ftp que afectan a la transmisión son los siguientes: ascii (binary) transmisión en formato ASCII (por defecto) o binario. quit fin de la conexión y de ftp close fin de la conexión, sin salir de ftp glob activación del mecanismo de expansión de ficheros open [dir_host] abrir conexión con el sistema dir_host prompt cambia de interactivo a no interactivo, y viceversa user username identificación en máquina distante status información sobre el proceso ftp verbose activación de la opción verbose

Para ejecutar comandos sobre la máquina local se procede del siguiente modo: !comando se ejecuta el comando en la máquina local lcd [dir] cambio de directorio o vuelta al directorio base

Sobre la máquina distante, se dispone de los siguientes comandos: cd [dir] cambio de directorio en la máquina distante delete filename borrar un fichero dir [dir] muestra el contenido del directorio actual. ls [dir] al igual que el anterior, listado del contenido de un directorio mdelete [ref] borrado de uno o más ficheros rmdir dir borrado de un directorio

Finalmente, existen los siguientes comandos de transferencia de ficheros:

append [ref_local [ref_distante]] el fichero ref_local se añade al fichero ref_distante. Si ref_distante no existe, se crea al hacer la transferencia

put [ref_local [ref_distante]] el fichero ref_local se transmite con el nombre ref_distante. Si se omite ref_distante, se transmite con el mismo nombre send [ref_local

[ref_distante]]igual que el anterior

mput ref_local ... similar a los anteriores, pero para varios ficheros

get [ref_distante [ref_local ]] el fichero ref_distante se transmite con el nombre ref_local.

recv [ref_distante [ref_local ]] igual que el anterior

mget ref_distante ... similar a los anteriores, pero para varios ficheros

[editar]

39 opiniones

Redireccion y tuberias.

Esta muy bueno el articulo porque es bien conciso y es facil de entender, un ejemplo de ello es que pude encontrar una respuesta acertada a una duda sobre el significado del redireccionameinto, en con solo echarle una ojeada. Felicidades al autor y a este medio por publicarlo.
Excelente.

Muchisimas gracias me sirvio de mucho en realidad encontre todo lo que necesitaba esta muy claro todo lo relacionada con la estructura del sistema de ficheros en gnu/linux.
Incompleto.

La verdad yo buscaba otra cosa pero igual y si le añades lo demas pues estaria mejor o bueno al menos es lo que yo digo bueno espero y haya sido correcta mi opinion, saludos a los que trabajan en esto y pasensela chido.
Aprendiendo.

Solamente he usado arch, y me ha parecido bastante bueno. Es rapido, seguro y aunque le faltan algunos detallitos a la versión de 64 bits me agrada mucho, por es quiero aprender mas sobre linux y asi llegar a ser un linuxero profesional.
Unix.

Necesito para aprender sobre sistema operativo.
1 2 3 4 5 6 7 ... 8 | siguiente >

Cursos gratis relacionados con 'Curso de Linux'

Completo curso de Linux, un sistema operativo gratuito y de libre distribución inspirado en el... Más »
Completo curso básico de Linux. Todo lo que necesitas para iniciarte en el fascinante mundo... Más »
El objetivo de este curso es aprender a programar en el lenguaje Ada, desde sus... Más »
Este es un curso tremendamente completo, guiado y con ejemplos y prácticas pensadas para convertirlo... Más »
Práctico y completo curso de hacking.

Autor y licencia de 'Curso de Linux'


Curso gratis de Anónimo. Extraido de: CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.