Sie sind auf Seite 1von 54

Linux

Linux
R e v i s i n a b r i l / 2 0 1 4
Agradezco a todos quienes entienden
la colaboracin y el trabajo colectivo
como actos profundamente humanos
Diciembre/201
Contenido
!" !ntroduccin""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""2
!!" Distribuciones"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
!!!" $ntornos gr%ficos y modo consola"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#
!&" 'rganizacin de particiones y el sistema de archivos"""""""""""""""""""""""""""""""""(
&" )omandos b%sicos"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""10
&!" *ermisos""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""1(
&!!" $ditor +vi+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""1,
&!!!" $mpaquetar y comprimir""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""1-
!." /ed y acceso remoto"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""1-
." Analizando registros y procesos""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""2#
.!" 0hell scripts con bash""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""2-
.!!" Demonios y servicios1 crontab"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.!!!" Autoevaluacin"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""2
1
I. Introduccin
Hace ya unas tres dcadas que existe el software libre. Para entender cmo ha llegado a estar en
la cresta de la ola en la industria de la computacin conviene repasar sus inicios histricos.
A finales de la dcada del ! y principios de los "! no exist#a una industria de software
reconocida$ los fabricantes de computadores vend#an sus enormes m%quinas incorpor%ndoles alg&n
tipo de sistema operativo y aplicaciones. 'sos programas pod#an ser tomados y estudiados en las
universidades$ los usuarios pod#an pedir el cdigo fuente de controladores de dispositivos y de los
programas para adaptarlos a sus necesidades. 'l software no ten#a valor en s# mismo si no estaba
acompa(ado por el hardware que lo soportaba.
'n estas condiciones en los famosos laboratorios )ell de A*+*$ dise(aron un sistema operativo
llamado ,nix$ que se caracteri-aba por una buena gestin de los recursos del sistema en un entorno
multiusuario$ estable y compatible con el hardware de diferentes fabricantes. siendo esto &ltimo
algo que a la postre le proporcion mucha popularidad.
/in embargo$ ya desde 10"1 la empresa 2)3 de4 de dar el cdigo fuente de su sistema
operativo$ a finales de los setenta 5igital comen- a comerciali-ar su software. 6as compa(#as
hab#an tomado conciencia de que el software pod#a rendirles incalculables beneficios si su cdigo
fuente era escondido ba4o siete llaves.
'n esos a(os un inform%tico del 32*$ llamado 7ichard /tallman se indign al comprobar que
cada ve- era m%s dif#cil conseguir el cdigo fuente de los programas que utili-aba para adaptarlos a
sus necesidades. 6a ancdota es que se eno4 cuando la compa(#a que les hab#a vendido una nueva
impresora para el laboratorio no le quiso facilitar el cdigo fuente de los drivers. resulta que l slo
quer#a modificarlos para que le avisara autom%ticamente cuando se atascaba el papel.
A partir de ah# /tallman decidi iniciar un proyecto para abrir el cdigo fuente de los programas.
5icho proyecto tom el nombre 89,$ que significa algo as# como 9ot ,nix. : desde sus inicios
qued claro que no deb#a confundirse el concepto de software libre con el de software gratuito.
9ace entonces la ;/; <;ree /oftware ;oundation=$ donde se habla m%s de filosof#a que de
ingenier#a. 's esta fundacin la que estableci las siguientes cuatro libertades para definir el
software libre>
1> 6ibertad de poder utili-ar el programa para cualquier propsito.
?> 6ibertad para estudiar cmo funciona un programa y adaptarlo a las necesidades propias.
'sta libertad se asegura accediendo al cdigo fuente.
@> /e permite distribuir libremente copias del software$ ayudando a quien lo necesite.
A> Por &ltimo$ se permite me4orar el programa y hacer p&blicas dichas me4oras$ en beneficio de
toda la comunidad. Btra ve-$ el acceso al cdigo fuente es requisito para asegurar esta
libertad.
'stas libertades se aseguran utili-ando una licencia creada especialmente$ la 8P6 <8eneral
Public 6icense=. 'sta licencia ha tenido una evolucin constante y se ha ramificado para atender
todo tipo de situaciones no contempladas inicialmente.
5esde 10CA$ la comunidad creada entorno a las ideas de /tallman comen- a producir software y
a licenciarlo con la 8P6. )uscaban crear un sistema operativo parecido a ,nix y que siguiera las
normas PB/2D <Portable Bperating /ystem 2nterface=. fueron de4ando para el final la tarea de
dise(ar y escribir el n&cleo del sistema operativo.
'n 10C"$ el profesor holands Andrew *anenbaum decidi escribir un sistema operativo para que
sus estudiantes pudieran estudiarlo. :a no pod#a utili-ar el cdigo fuente del ,nix de A*+* y creo
?
el sistema llamado 3292D$ con una arquitectura microEFernel$ altamente modulari-ado. Por &ltimo$
en 1001 6inus *orvalds toma la posta$ bas%ndose en una cr#tica al funcionamiento de 3292D y
proponiendo un n&cleo monol#tico con la ayuda de muchos inform%ticos de todo el mundo.
'n definitiva$ lo que conocemos hoy se denomina 89,G6inux$ donde 6inux es el Fernel del
sistema operativo y el proyecto 89, ha aportado mucho de la estructura que permite su
funcionamiento> la mayor#a de los mdulos para dispositivos.
Ahora existen distribuciones de 89,G6inux para toda clase de dispositivos$ no solo
computadores. 5e las distribuciones para PHIs y servidores vale la pena nombrar a las m%s
conocidas y utili-adas empresarialmente> 5ebian 89,G6inux$ /u/' 6inux$ 7edHat 6inux$ 6inux
3int <basado en 5ebian=$ ,buntu$ etc.
Notas:
1. 'n este curso y para usar 6inux a futuro$ no hay que tenerle alergia a los manuales. Juienes
tengan la paciencia y curiosidad suficientes para investigar por su cuenta$ sumando el modesto
aporte de este cursillo$ es f%cil que lleguen a enamorarse de 6inux.
?. ,n aporte muy interesante para complementar esta introduccin puede apreciarse viendo la
pel#cula I7evolution B/I$ en http>GGwww.youtube.comGwatchKvL/-MEdENdr3,
@
II. Distribuciones
<de OiFipedia= ,na distribucin 6inux <coloquialmente llamada distro= es una distribucin de
software basada en el n&cleo 6inux que incluye determinados paquetes de software para satisfacer
las necesidades de un grupo espec#fico de usuarios$ dando as# origen a ediciones domsticas$
empresariales y para servidores. Por lo general est%n compuestas$ total o mayoritariamente$ de
software libre$ aunque a menudo incorporan aplicaciones o controladores propietarios.
Adem%s del n&cleo 6inux$ las distribuciones incluyen habitualmente las bibliotecas y
herramientas del proyecto 89, y el sistema de ventanas D Oindow /ystem. 5ependiendo del tipo
de usuarios a los que la distribucin est dirigida se incluye tambin otro tipo de software como
procesadores de texto$ ho4a de c%lculo$ reproductores multimedia$ herramientas administrativas$ etc.
'n el caso de incluir herramientas del proyecto 89,$ se utili-a el trmino distribucin 89,G6inux.
'xisten distribuciones que est%n soportadas comercialmente y distribuciones mantenidas por la
comunidad$ como 5ebian. 'n la actualidad$ gracias a la modularidad inherente a este sistema
operativo$ se puede afirmar que existe una distribucin especiali-ada para cada necesidad
identificable de uso de un /B. 6a computacin en la nube ha incentivado la creacin de
distribuciones especiali-adas conocidas como IappliancesI. 'sto originalmente se refer#a a un
dispositivo de hardware conteniendo una serie de funciones o aplicaciones de software que
originalmente hayan sido creadas para ser instaladas en sistemas operativos de propsito general$
sin embargo hoy identifica$ por e4emplo$ algo muy similar al archivo de m%quina virtual con 6inux
3int instalado y preparado para este curso.
3%s informacin> http>GGdistrowatch.comGdwres.phpKresourceLma4or+languageL'/
III. Entornos grficos y modo consola
<de OiFipedia= 89,G6inux puede funcionar tanto en entorno gr%fico como en modo consola. 6a
consola es com&n en distribuciones para servidores$ mientras que la interfa- gr%fica est% orientada
al usuario final tanto de hogar como empresarial. Asimismo$ tambin existen los entornos de
escritorio$ que son un con4unto de programas conformado por ventanas$ iconos y muchas
aplicaciones que facilitan la utili-acin del computador. 6os escritorios m%s populares en
89,G6inux son> 89B3'$ M5'$ 6D5' y Dfce. 'n dispositivos mviles se encuentra Android$ que
funciona sobre el n&cleo 6inux$ pero no usa las herramientas 89,.
PPor qu usar la consolaK
6a consola permite un mayor grado de funciones y configuracin de lo que queremos hacer con
una aplicacin o accin en general respecto del entorno gr%fico. A Qgrosso modoR$ se tiene un
mayor control sobre el equipo.
'n 89,G6inux la consola es algo necesario. Acciones para dar o quitar permisos$ configurar e
instalar controladores que no estn empaquetados y puedan ser e4ecutados por un instalador$ matar
procesos de una manera m%s efectiva$ e4ercer como superusuario cuando se est% en una cuenta
cualquiera del equipo y muchas acciones m%s$ algunas de las cuales se ver%n a lo largo de este curso
y otras que se podr%n descubrir consultando los manuales que correspondan.
6a consola de texto nos puede salvar de muchas situaciones dif#ciles>
9os va a permitir hacer cosas que no es posible reali-ar en modo gr%fico.
A
Sa a haber determinadas situaciones en las que puede ser m%s sencillo escribir una l#nea de
comandos en una consola que mane4ar una comple4a herramienta gr%fica.
Huando el sistema gr%fico falle la consola de texto va a seguir funcionando.
,na conexin remota siempre ser% m%s sencilla y eficiente si la reali-amos directamente a la
consola de comandos$ sin utili-ar un entorno gr%fico.
'n la consola de texto$ el llamado intrprete de comandos es la interfa- entre el usuario y el
sistema operativo. 'n realidad$ la shell es un archivo e4ecutable que debe interpretar los comandos$
trasmitirlos al sistema y devolver su resultado. 'xisten varias shells$ las m%s comunes son sh
<)ourne shell=$ bash <)ourne again shell=$ csh <H shell=$ entre otras. 6a shell predeterminada en casi
todas las distribuciones 6inux es IbashI.
A cada usuario se le asigna una shell al momento de su creacin en el sistema. 6a shell se inicia
luego de leer su configuracin completa que se distribuye en por lo menos dos archivos$ uno
general que estar% en el directorio Getc y otro oculto en el directorio particular del usuario
<GetcGbash.bashrc y GTHB3'G.bashrc$ para el caso del shell bash=.
'n cuanto al modo gr%fico$ D Oindow es el entorno gr%fico habitual de los sistemas ,nix <es el
shell gr%fico por excelencia=. 'l sistema D Oindow se compone de dos partes principales> el
servidor D y el programa para la gestin de las ventanas. 'l servidor D es el programa que se
encarga realmente de dibu4ar en la pantalla. Por el contrario el gestor de ventanas$ como su nombre
indica$ es el encargado de crear las ventanas y gestionar su apariencia. 5ebido a este modelo$ la
apariencia de las aplicaciones var#a seg&n se use uno u otro gestor de ventanas u escritorio.
3%s informacin> http>GGwebubuntu.wordpress.comG?!1!G1?G@1GentornosEgraficosEmasEusadosEenEgnulinuxG
IV.Organizacin de particiones y el sistema de arci!os
6os dispositivos de almacenamiento son organi-ados en el sistema dentro de un directorio
especial del mismo$ llamado Gdev <de la palabra IdeviceI=. /e crean aqu# las entradas para todos los
dispositivos registrados del equipo.
A continuacin$ una lista del esquema b%sico de nomenclatura>
6a primera unidad de disco /H/2$ </A*A$ /A/= se llama GdevGsda.
6a segunda unidad de disco /H/2 </A*A$ /A/= se llama GdevGsdb$ y as# sucesivamente.
6a primera unidad de un H5E7B3 /H/2 se llama GdevGscd!$ tambin conocida como GdevGsr!.
'l disco maestro en el controlador 25' primario se llama GdevGhda.
'l disco esclavo en el controlador 25' primario es llamado GdevGhdb.
6as particiones en cada disco son representadas a(adiendo un n&mero decimal al nombre del
disco> sda1 y sda? representan a la primera y segunda particin en la primera unidad de disco /H/2
en el sistema.
Aqu# un e4emplo de un caso real> supongamos que tiene un sistema con ? discos /A*A$ uno en el
conector identificado como ?do. y el otro en el marcado como Ato. 'l primer disco <en el conector
?= se llama entonces sda$ y el segundo sdb. /i el dispositivo sda tiene @ particiones$ stas se
llamar%n sda1$ sda?$ y sda@ respectivamente. 6o mismo se aplica a el disco sdb y sus particiones.
Actualmente esta nomenclatura est% siendo sustituida por un ,,25 <,niversally ,nique
2dentifier=$ porque as# se tiene un identificador &nico y no centrali-ado de cada particin y de cada
1
disco f#sico. considerando diferentes m%quinas$ se tiene un identificador que nunca cambia$ a no ser
que la particin sea reformateada. 6a asignacin de nombres puede cambiar de acuerdo a la
posicin del disco en el bus de conexin de la controladora y puede cambiar tambin cuando se lo
conecta a otro equipo.
Opciones de particionado
Hay muchas opciones para las particiones que se pueden definir en el almacenamiento que
contendr% un sistema 6inux. 6a eleccin va a depender del uso que se le dar% al mismo. 9os
referiremos a lo m%s com&n en los sistemas de archivo de tipo ext@ o extA$
Para una instalacin de servidor$ en general se recomienda un m#nimo de tres particiones$ a
saber>
Gboot 7equiere de ?!! a 11? 3).
swap Para sistema con hasta ? 8) de memoria 7A3$ se debe asignar el doble del tama(o de la
7A3 f#sica. /i se tiene m%s de ? 8)$ se debe asignar una cantidad igual al tama(o de la
7A3 f#sica m%s ? 8). Para cantidades de 7A3 mayores a C 8)$ aproximadamente$
podr#a ser conveniente no superar esa cantidad de gigabytes en el tama(o de swap. aqu#
podr#a comen-ar a 4ugar en contra la velocidad de acceso a disco del equipo.
'sta deber#a ser siempre la primera o la &ltima particin del espacio disponible para
almacenamiento y 4am%s se le asigna un punto de monta4e.
G 'sta ser% la particin conocida como Ira#-I$ en la que estar% instalado el sistema operativo
organi-ado en un sistema de archivos que conoceremos m%s adelante. 'n la actualidad$ un
sistema m#nimo de servidor$ con entorno gr%fico instalado$ va a necesitar entre 1! y 1? 8)
's posible y conveniente definir otras particiones con el fin de aislar la instalacin del software
que va a correr en el servidor. Por e4emplo$ es com&n destinar el directorio Gopt como punto de
monta4e de una particin que contenga aplicaciones como *omcat$ Apache$ 3y/J6$ etctera.
*ambin es com&n asignar un directorio exclusivo para el monta4e de las particiones que van a
contener IdatafilesI de una base de datos.
Asimismo$ en una instalacin de escritorio es recomendable aislar en una particin los datos de
los usuarios$ montando la misma en el directorio Ghome$ que es el lugar donde se crean los
directorios particulares de los usuarios.
Jerarqua del sistema de archivos
*odo surge a partir del directorio ra#- <G=. 'l contenido de este directorio debe ser el adecuado
para reiniciar$ restaurar$ recuperar yGo reparar el sistema$ es decir$ debe proporcionar mtodos$
herramientas y utilidades necesarias para cumplir estas especificaciones.
Adem%s$ es deseable que se mantenga los m%s ra-onablemente peque(o como sea posible por
cuestin de funcionamiento y de seguridad.
Por &ltimo$ este debe que ser el &nico directorio en el nivel superior del %rbol 4er%rquico de
archivos y$ tiene que ser imposible moverse m%s all% del mismo.
Contenido del directorio raz:
Gbin 'n este directorio se ubica el cdigo binario o compilado de los programas y
comandos que pueden utili-ar todos los usuarios del sistema.

6a denominacin es clara$ bin de IbinaryI. Aqu# no deben haber subdirectorios.


Gboot 'ste directorio contiene todo lo necesario para que funcione el proceso de arranque
del sistema. Gboot almacena los datos que se utili-an antes de que el Fernel comience
a e4ecutar programas en modo usuario.
'l n&cleo del sistema operativo <normalmente se guarda en el disco duro como un
fichero imagen llamado vmlinuz-versin _ ncleo= se debe situar en este directorio o$
en el directorio ra#-.
9ota> 'l n&cleo tiene la capacidad de crear dos entornos o modos de e4ecucin
totalmente separados. ,no de ellos est% reservado para el propio Fernel <modo
n&cleo= y el otro est% reservado para el resto de los programas$ llamado el modo
usuario.
Gdev 'ste directorio almacena las definiciones de todos los dispositivos. Homo se ha
mencionado$ cada dispositivo tiene asociado un archivo especial. Por e4emplo$ el
contenido de la sexta particin del disco duro ser% GdevGsda1.
's importante saber que los dispositivos pueden ser de bloque o de car%cter.
9ormalmente los dispositivos de bloque son los que almacenan datos y$ los de
car%cter los que transfieren datos.
'n definitiva$ la estructura de este directorio es algo comple4o$ podemos decir que
6inux lo utili-a para asociar dispositivos <devices= con archivos de bloque.
9ota> 'l subdirectorio GdevGnull es como un Iagu4ero negroI. Hualquier dato que se
almacena aqu# desaparece. 's &til para direccionar salidas de error$ ya veremos cmo.
Getc 'l directorio Getc contiene archivos necesarios para configuracin del sistema.
Archivos que son propios del computador y que se utili-an para controlar el
funcionamiento de diversos programas. 5eben ser ficheros est%ticos y nunca pueden
ser archivos binarios yGo e4ecutables.
'n definitiva$ Getc mantiene los archivos de configuracin del sistema para una
m%quina espec#fica.
Ghome 5irectorio que contiene los subdirectorios que son directorios origen para cada uno de
los usuarios del sistema. Hada subdirectorio GhomeGuser de cada usuario proporciona
el lugar para almacenar sus ficheros$ as# como los archivos de configuracin propios
de cada uno.
's importante saber que tambin algunos servicios$ y no solo usuarios$ crean aqu# su
directorio origen$ por e4emplo> el servicio de transferencia de ficheros <;*P=.
'l administrador tiene su propio directorio home$ que es Groot.
Glib$ GlibA 'l directorio Glib contiene las librer#as compartidas necesarias para arrancar el sistema
y para los ficheros e4ecutables contenidos en$ por e4emplo$ Gbin. 'n los sistemas de A
bits se agrega el directorio GlibA$ con las librer#as exclusivas de este ambiente$
de4ando en Glib las que son comunes y las espec#ficas de @? bits.
*ambin contiene mdulos del Fernel esenciales que permiten el funcionamiento de
muchos elementos de hardware. stos se ubicar%n normalmente en
GlibGmodulesGversin-del-kernelG.
Gmedia 'ste directorio contiene los subdirectorios que se utili-an como puntos del monta4e
para los medios de almacenamiento extra#bles$ tales como disquetes$ H5E7B3 y
memorias ,/).
Gmnt 'ste directorio contiene sistemas de archivos externos que hayan sido montados de
forma permanente. 6as entidades que aparecen dentro de Gmnt representan recursos
externos a los que se puede acceder a travs de este directorio.
"
Gopt 'n este directorio <Gopt de IoptionsI= se suelen instalar complementos o addEons de los
programas. 'n los hecho se utili-a para las instalaciones de aplicaciones
autocontenidas y estas aplicaciones crean un subdirectorio dentro de Gopt denominado
con el mismo nombre del programa.
Groot 'ste directorio es el directorio Ghome del administrador del sistema <root=.
Gsbin 6os programas y comandos que se utili-an para la administracin del sistema se
almacenan en Gsbin$ GusrGsbin y GusrGlocalGsbin.
Gsbin &nicamente contiene los e4ecutables esenciales para el arranque$ recuperacin y
reparacin del sistema. *odos estos directorios <Gsbin$ GusrGsbin y GusrGlocalGsbin= se
utili-an con fines administrativos$ por tanto$ slo puede e4ecutar su contenido el
administrador.
Gsrv Hontiene los archivos de datos espec#ficos para cada servicio instalado en el sistema.
/in embargo$ algunos servicios utili-an el directorio Gvar para estos fines.
Gtmp 'n este directorio se guardan los archivos temporales.
Gusr 's la segunda seccin m%s grande o estructura 4er%rquica <despus del directorio ra#-=
del sistema de ficheros. 'ste directorio est% pensado para almacenar datos que se
puedan compartir con otros hosts.
'stos datos adem%s deben ser inalterables$ es decir$ slo de lectura. Hom&nmente$ se
almacena aqu# el software instalado en el sistema.
Seremos su contenido con cierto detalle>
GusrGbin Uste es el directorio primario de comandos e4ecutables del sistema.
GusrGbin alberga los archivos e4ecutables vinculados al software
instalado en el sistema.
GusrGinclude Aqu# se guardan los archivos cabecera <.h de header= que contienen las
declaraciones externas de las funciones de una librer#a.
*odos estos ficheros cabecera <que necesite el software instalado en el
sistema= se almacenan en este subdirectorio.
GusrGlib 'ste directorio incluye librer#as compartidas y ficheros binarios
pensados para no ser e4ecutados directamente por los usuarios del
sistema.
GusrGlocalG GusrGlocalG es para uso del administrador del sistema cuando instala
software localmente. Puede usarse para programas y datos que son
compartibles entre un grupo de m%quinas. 'ste subdirectorio tiene una
estructura similar a la del directorio Gusr.
GusrGsbin 'ste directorio contiene comandos y programas no esenciales usados
exclusivamente por el administrador de sistema. Homo se ha
comentado$ los comandos necesarios para la reparacin$ recuperacin y
otras funciones esenciales del sistema$ se almacenan en Gsbin.
Gvar 'ste directorio va ha contener ficheros de datos variables y temporales$ as# como
archivos que deben ser QencoladosR <IspoolI. por e4emplo$ colas de impresin=. *odos
los log del sistema y los generados por los servicios instalados$ se ubican dentro de la
estructura 4er%rquica de Gvar. 'sto quiere decir que el tama(o global de este directorio
va ha crecer constantemente.
6a utilidad de Gvar radica en poder detectar problemas para prevenirlos y
solucionarlos.
C
's aconse4able montar en una nueva particin este directorio. /i no se pudiera$ es
preferible ubicar Gvar fuera de la particin ra#- y de la particin Gusr.
Seamos un detalle de su contenido>
GvarGcache /ubdirectorio pensado para albergar datos de aplicaciones en cache
<usados en un espacio breve de tiempo=. 'l sistema de paquetes de
5ebian <aptEget=$ mantiene y almacena todos los paquetes que nos
hemos instalado con el gestor de paquetes aptEget.
GvarGlib 'ncontramos aqu# informacin sobre el estado variable de las
aplicaciones.
GvarGlocF Aqu# se almacenan los ficheros que est%n bloqueados por el sistema.
GvarGlog 'n GvarGlog se guardan los mensa4es de registro generados por el
sistema operativo y por diversos servicios.
Por e4emplo$ en el archivo GvarGlogGmessages se encuentran los logs
generados por el Fernel$ en GvarGlogGhttpdGaccessNlog encontramos
quien <desde que ip= est% accediendo a nuestro servidor Oeb y$ en
GvarGlogGwtmp encontraremos todos los accesos y salidas en el sistema.
GvarGmail 6inux enviar% aqu# los archivos de correos <gestionados por el sistema=
de cada usuario del computador.
GvarGrun GvarGrun contiene archivos con informacin del sistema que lo
describen desde que se arranc. 8eneralmente$ se borrar%n todos los
archivos que cuelgan de este subdirectorio al comen-ar el proceso de
arranque.
'stos archivos con informacin del sistema son los llamados Iarchivos
de identificacin de procesosI <P25= que guardan el identificador de los
procesos en e4ecucin dentro del sistema.
GvarGspool GvarGspool contiene ficheros almacenados en forma de cola$ para un
procesamiento posterior. ,n e4emplo claro puede ser los traba4os que
guarda la impresora para$ posteriormente$ e4ecutarlos por un orden de
llegada yGo prioridad
Aqu# tambin existe un directorio de nombre IcronI$ que contiene todas
las programaciones previstas para e4ecutarse peridicamente en el
sistema.
GvarGtmp Algunos datos temporales se almacenan aqu# y que$ posiblemente$
pueden aparecer en una distribucin 89,G6inux para no saturar el
directorio Gtmp.
GlostVfound 6as herramientas y utilidades para restaurar yGo reparar el sistema de archivos
almacenan los datos en este directorio. 's un espacio temporal donde se guardan los
datos que se recuperan despus de una ca#da del sistema.
Gproc 's un sistema de archivos virtual. /e genera y actuali-a din%micamente$ es decir$ no
se mantiene en el disco duro$ se mantiene en la memoria 7A3. 's el sistema quien lo
crea y lo destruye.
'ste directorio contiene informacin sobre los procesos$ el n&cleo del /B e
informacin relativa al sistema.
0
V. Comandos bsicos
6a extensa lista de comandos que se muestra a continuacin$ agrupados seg&n categor#as m%s o
menos arbitrarias$ cubre apenas una parte de los A millares de comandos existentes en un sistema
89,G6inux com&n.
Comandos de ayuda
/iempre que no se sabe como funciona o para que sirve un comando$ hay que documentarse antes
de usarlo y para ello tenemos estos comandos.
man$ info muestra manual del comando que le indiquemos
help da una ayuda de los comandos
whatis muestra una descripcin del comando
whereis muestra donde est% el comando y la ubicacin de su archivo de ayuda
which muestra dnde est% el comando
apropos busca todos los comandos que contienen una palabra clave en la descripcin de su
manual
Comandos de archivos y directorios
'stos comandos son los que se usan para moverse y reali-ar acciones respecto a archivos y
directorios.
ls listar los archivos <Ea$ El $h$ E/$ Ert=
mFdir nombre> crear un directorio
rmdir nombre> borrar directorios
cd nombre> cambiar de directorio
pwd muestra la ruta actual
cp rutaNorigen rutaNdestino> copiar archivo <Ef$ Er$ Ei=
rm nombre> borrar archivos <Ef$ Er$ Ei=
mv rutaNorigen rutaNdestino> mover o renombrar archivos y directorios <Ef$ Ei=
locate busca un comando
find buscar archivos
file dice que tipo de archivo es
stat mostrar informacin completa del archivo
ln WEsX crea enlaces simblicos a archivos o carpetas
Operaciones con archivos
more ver$ paginando$ el contenido de un archivo por pantalla
less ver el contenido de archivo en forma de documento <G$ q=
cat ver el contenido de un archivos$ tambin unir varios archivos en uno
head muestra las 1! primeras l#neas de un archivo
tail muestra las 1! &ltimas l#neas de un archivo
split dividir archivos
wc cuenta lineas palabras o caracteres en un archivo <El=
grep buscar un texto en archivos <Ei$ En$ Ew$ EA$ E)=
4oin cru-ar la informacin de dos archivos y muestra las partes que se repiten
cut muestra los campos de un archivo <Ed$ Ef=
sort ordena una lista por los campos que se indiquen
diff mostrar las diferencias entre dos archivos
fuser mostrar que usuario tiene en uso o bloqueado un archivo o recurso
1!
Operaciones de disco
df muestra el estado de las particiones <Eh=
du muestra los bytes que ocupa un archivoGdirectorio <Es$ Eh$ Ec=
mFfs crea un nuevo sistema de archivos$ da formato a una particin
fscF chequea el sistema de archivo y repara los posibles errores$ act&a solo sobre dispositivos
sin montar
fdisF herramienta cl%sica de gestin de particiones <El=
parted utilitario muy vers%til para la gestin de particiones
mount monta un dispositivo o particin en un directorio del sistema <Et=
umount desmonta una particin o dispositivo previamente montado
Comandos relacionados con el usuario
whoami mostrar nombre de usuario
w muestra informacin extensa sobre los usuarios conectados al sistemas
groups muestra los grupos a los cuales pertenece el usuario
adduser agregar un nuevo usuario al sistema
userdel borrar un usuario
usermod modifica las opciones del usuario
passwd para cambiar la contrase(a
addgroup crea un nuevo grupo
groupdel elimina un grupo del sistema
su cambiar a cualquier usuario <El=
id mostrar datos de identificacin del usuario
finger mostrar informacin de usuario de un dispositivo o archivo
last informacin de los &ltimos usuarios que han usado el sistema <decodifica GvarGlogGwtmp=
env$ set dar informacin sobre el entorno del usuario
Gestin de procesos
top mostrar los procesos que se est%n e4ecutando en tiempo real
ps mostrar la lista de procesos que se est%n e4ecutando <Eaux$ EEforest=
pstree mostrar los procesos en forma de %rbol
pidof da el n&mero de 25 del proceso <nombre= que se est% e4ecutando
Fill matar proceso por 25 <E0=
Fillall matar proceso por nombre
time mide el tiempo que tarda un proceso en e4ecutarse
fg trae a primer plano un proceso parado o en segundo plano
bg pone un proceso en segundo plano
4obs lista los traba4os existentes en segundo plano
nice a4usta la prioridad de un proceso de ?! a 10
lsof muestra los archivos que est% utili-ando cada proceso del sistema <Ei$ usados por
protocolos de red=
screen es un gestor de ventanas que permite multiplexar una terminal entre varios procesos$
t#picamente un shell interactivo para correr procesos simult%neos <Er$ Elist$ Ex=
Comandos del sistema
reboot reinicia la m%quina
init reinicia la m%quina
11
halt apaga el sistema
shutdown apaga el sistema
init ! apaga la m%quina
uptime muestra el tiempo transcurrido desde que se encendi la m%quina
exit> cierra la sesin actual
dmesg muestra los mensa4es del arranque del computador
history muestra todos los comandos almacenados$ digitados por el usuario
uname Ea da informacin del sistema operativo$ Fernel$ nombre$ etc...
hostname muestra el nombre del servidor
free estado de la memoria
date muestra fecha y hora actual
clear borra la pantalla
export permite el uso de variables por programas en todos los caminos del usuario
modprobe administra los mdulos del Fernel <carga$ descarga$ informacin=
lsmod muestra los mdulos cargados en el sistema
echo escribe un mensa4e en la salida est%ndar
alias crea un alias. ,n comando largo abreviado en pocas letras
unalias borra un alias
insmod inserta mdulos en el Fernel
rmmod elimina mdulos del Fernel
ldconfig actuali-a las librer#as utili-adas por el sistema
updatedb actuali-a la base de datos interna de archivos <optimi-a las b&squedas de IlocateI=
Comandos de red
host devuelve la direccin 2P del host que se especifique <Ea$ informacin del 59/=
netstat muestra estado de la red <Ea$ all. Eat$ puertos *HP. El$ puertos en escucha. Est$
estad#sticas de los puertos *HP. Ep$ agrega el P25Gnombre de programa al output. En$
m%s r%pido omitiendo host$ puerto y usuario en la salida.
ifconfig muestra la configuracin del dispositivo de red
iwconfig muestra la configuracin de dispositivos inal%mbricos
ping hace ping <2H3P=
nslooFup devuelve la 2P dado el nombre de un sitio web
dig consulta al detalle los 59/ servers que se le indiquen
telnet conecta a un equipo <prueba de existencia de un puerto en escucha=
route administra la tabla de rutas <En$ muestra la tabla de ruteo del Fernel sin resolver
nombres. add$ del$ flush entre otros comandos de administracin=
ifup interfa-> habilita la interfa- de red especificada
ifdown interfa-> deshabilita la interfa- de red especificada
whois muestra informacin sobre el propietario del dominio especificado
tcpdump permite debuggear una interfase de red
nmap explora las redes y permite sondear la seguridad establecida
traceroute muestra el camino que se recorre para llegar hasta otra m%quina en la red
iptraf muestra en una aplicacin en la consola todo el tr%fico de red *HP$ ,5P$ 2H3P
iptables herramienta de administracin del filtrado de paquetes y 9A* <E6$ lista. En$ solo
muestra los n&meros de 2P$ sin resolver los nombres de host=
Otros comandos tiles
alias conveniente para transformar largos comandos en una sola palabra <ls Ela$ rm Ei=
ldd muestra las librer#as compartidas requeridas por un programa o biblioteca din%mica
1?
dmidecode muestra los componentes de hardware del sistema
clocF Ew graba el cambio de fecha en la )2B/
touch crea un archivo sin contenido
rpm </u/'$ Bpen/use$ 7edHat$ ;edora$ Hentos=$ muestra informacin sobre los
paquetes instalados$ despliega la informacin de los paquetes disponibles y tambin
instala los paquetes que se le indique.
dpFgEquery <5ebian$ 3int$ ,buntu=$ muestra informacin sobre los paquetes instalados
dpFg GaptEget <5ebian$ 3int$ ,buntu=$ reali-an la instalacin de paquetes y muestras la
disponibilidad de los mismos en los repositorios
-ypper </u/'$ Bpen/use=$ muestra informacin sobre los paquetes instalados$ la
disponibilidad de ellos en los repositorios y reali-a instalacin de los que se le
indiquen
yum <7edHat$ Hentos= utilidad para la administracin de paquetes del sistema.
yast </u/'$ Bpen/use= utilidad para la administracin de paquetes del sistema.
lsattr listra atributos especiales de archivo
tr W>lower>X W>upper>X transforma el texto que reciba de min&scula a may&scula
dos?unix convertir un formato de archivo de texto desde 5B/ a ,92D
unix?dos convertir un formato de archivo de texto desde ,92D a 5B/
dd copia un archivo$ particin o disco$ formatea de acuerdo a los par%metros que reciba
rsync poderosa herramienta de sincroni-acin de informacin entre directorios de un
mismo host o entre distintos servidores. v#a ssh$ por e4emplo
hostname muestra el nombre del host del sistema
lsmod muestra todos los mdulos cargados por el Fernel
wget se le pasa una ,76 y copia su contenido al disco local
ip muestra$ manipula rutas$ dispositivos$ pol#ticas de ruteo y t&neles de las interfases
de red del sistema
tac hace lo mismo que cat <mostrar el contenido de un archivo=$ pero muestra las l#neas
en orden inverso
Smbolos
Y path desde la ra#- al home
. directorio actual
.. directorio superior al actual
Z pipe> redirecciona la salida de un comando hacia la entrada de otro
[ redirecciona un comando
\ redirecciona un comando
+ pasa la e4ecucin del comando que lo antecede a segundo plano
T en el prompt del intrprete de comandos$ indica un usuario normal
] en el prompt del intrprete de comandos$ indica al usuario root
!presiones re"ulares comunes
/on conocidas como IpatternsI$ una poderosa herramienta de 6inux. 6as expresiones regulares
nos permitir%n aplicar las operaciones que queramos$ especificando en una sola instruccin varios
archivos <o elementos de una lista= que cumplan con una serie de caracter#stica concretas.
'l ^ ser% expandido por cualquier cadena de caracteres posibles. 'l K nos sirve como comod#n en
lugar de un car%cter.
'ntre WX podemos incluir otros caracteres$ indicando que el patrn tiene xito si se encuentra
alguno de ellos en el nombre tratado. Hon el _ negamos la afirmacin precedente$ o sea que tendr%
1@
xito cuando no encuentre ninguno de los caracteres entre WX en el nombre considerado. Por
e4emplo$ la cadena QW_baX^R$ pasada al comando IlsI$ nos devolver% todos los archivos cuyo nombre
no comience por IaI o por IbI.
Hay b&squedas preestablecidas por un nombre$ que puede ser pasadas dentro de los parntesis
rectos utili-ando un delimitador m%s los dos puntos antes y despus> W>clase>X$ dnde IclaseI puede
ser cualquiera de las nombradas en la tabla siguiente>
clase significado clase significado
alnum WAE`aE-!E0X alpha WAE`aE-X
blanF W aX cntrl caracteres de control
digit W!E0AE;aEfX graph car. imprimibles <sin espacios=
lower WaE-X print car. imprimibles <con espacios=
punct W.$b_PK>.X . . . space W X
upper WAE`X xdigit W!E0AE;aEfX
9ota> AE` indica caracteres de la A a la `$ at es el tabulador y an es un salto de l#nea.
#uberas y redireccionamiento
6os pipes o tuber#as est%n representadas por el car%cter Z y explicando de una forma muy simple
permiten concatenar el resultado de un proceso hacia el siguiente comando. ,no de los e4emplos
m%s simples es leer un archivo paginando. 'sto se consigue con el siguiente comando>
$ cat nombre_del_archivo.txt | more
/implemente estamos leyendo el archivo que le indicamos y con el resultado hacemos un ImoreI
que paginar%.
'n este e4emplo hemos concatenado una sola instruccin$ pero podemos concatenar una detr%s
de otra. /upongamos que tenemos un archivo llamado codigos.txt$ con una serie de cdigos.
Jueremos buscar aquellos que contengan A1$ para mayor comodidad queremos ordenarlos$ y como
tenemos repeticiones de l#neas$ queremos eliminar estas repeticiones. Para ello podemos e4ecutar lo
siguiente>
$ grep -i '45' codigos.txt | sort | uniq
'l comando grep reali-a la b&squeda$ le pasa el resultado al comando sort que ordena las l#neas$
a su ve- este resultado se le pasa a uniq que descartar% las l#neas repetidas.
As# como las tuber#as nos permiten encadenar resultados de unos comandos hacia otros$ las
redirecciones nos permiten enviar estos resultados hacia un archivo o enviar datos de un archivo a
un comando para utili-arlos como par%metros.
'l paso del resultado de un comando a un archivo se e4ecuta con el s#mbolo mayor que I[I.
Hontinuando con el e4emplo anterior$ podemos hacer que el resultado se env#e a un archivo llamado
codigos.procesados.txt de la siguiente forma>
$ grep -i '45' codigos.txt | sort | uniq > codigos_procesados.txt
'sta redireccin va a crear desde cero el archivo codigosNprocesados.txt cada ve- que se e4ecute$
escribiendo el resultado del comando. /i lo que quer#amos era a(adir l#neas a un archivo ya
existente$ debemos utili-ar un doble s#mbolo de mayor que <[[=$ as#>
$ grep -i '45' codigos.txt | sort | uniq > codigos_procesados.txt
1A
Por &ltimo$ podemos utili-ar la redireccin en la direccin opuesta$ del archivo hacia nuestros
comandos. 'sto se reali-a con el s#mbolo menor que \. Para ver este caso$ vamos a escribir un
peque(o programa en bash que recorra el archivo de cdigos procesados y env#e a pantalla cada
l#nea del mismo con un echo. Para empe-ar crearemos el archivo e4emplo.sh$ con el siguiente
contenido>
#!/bin/bash
while read t;
do
echo $t;
done < codigos_procesados.txt
'n este caso estamos utili-ando un bucle while que va a leer cada una de las l#neas del archivo
que le pasamos a travs del operador menor que <\=. : con cada una de las l#neas que almacena en
Tt hace un echo.
VI. "ermisos
6inux mantiene un sistema de permisos de acceso a los archivos muy estricto$ a fin de controlar
qu es lo que se puede hacer con ellos$ y quien lo puede hacer. 'stos permisos se identifican con
letras y son>
r> permiso de lectura el fichero
w> permiso de escritura en el fichero
x> permiso de e4ecucin del fichero
s> permiso para cambiar el propietario del fichero
Al contrario que en otro sistema operativo$ los programas e4ecutables de 6inux no est%n
marcados por una determinada extensin$ sino por un atributo$ el permiso de e4ecucin x. /i se
elimina este atributo a un programa$ 6inux no ser% capa- de e4ecutarlo.
A su ve- cada uno de estos permisos se aplica> al due(o del fichero <user=$ al grupo de usuarios
al que pertenece el due(o <"roup=$ al resto de usuarios <other=. As# un fichero determinado puede
tener permiso para ser le#do$ escrito y e4ecutado por su due(o$ le#do y e4ecutado por el grupo al que
pertenece y no tener ning&n tipo de acceso para los dem%s usuarios. Homo se puede entender este
tipo de mecanismo es especialmente &til cuando se traba4a en grupo en un determinado proyecto.
Seamos un e4emplo sencillo. ,tili-aremos el comando ls$ con el modificador El$ para obtener
informacin detallada de los archivos de un directorio>
#> ls -l
-rwxr-x--- 1 pepito users 56844 oct 18 23:04 Header
'n la primera columna se pueden ver una serie de letras y guiones ErwxrExEEE$ estas letras nos
dicen quien en el sistema$ y que clases de permisos tiene el archivo Header.
'stas letras est%n agrupadas en tres grupos con tres posiciones cada uno$ m%s una primera
posicin que nos dice de que clase de archivo se trata <los mas normales <d= directorios$ o <E=
archivos de datos=. 'n nuestro e4emplo la primera posicin es <E= con lo cual el archivo Header$ es
un archivo de datos <binarioGe4ecutable en este e4emplo=.
'l primer grupo de tres <rwx en nuestro caso= nos dice que clase de permisos tiene el due(o del
archivo <u=<user=. 'l segundo grupo de tres <rEx en nuestro caso= nos dice que clase de permisos
tiene el grupo del archivo <g=<group=. : el &ltimo grupo de tres <EEE en nuestro caso= nos dice que
11
clase de permisos tienen todos los dem%s usuarios del sistema sobre este archivo <o=<others=.
'l resto de la informacin es lo siguiente> 6a segunda columna pepito$ nos dice quien es el due(o
del fichero$<pepito en este caso=. 6a tercera columna users$ nos dice cual es el grupo del fichero
<users en este caso=. 6a cuarta columna 1CAA$ nos dice el tama(o del fichero. 6a quinta columna
oct 1C ?@>!A$ nos dice cual es la fecha y hora de la &ltima modificacin. Por &ltimo la sexta
columna es el nombre del archivo o directorio.
'xiste otra manera de observar los permisos utili-ando n&meros$ en ve- de letras para asignar
permisos$ la siguiente tabla nos puede ayudar un poco a comprender esta manera <estos n&meros
son la representacin decimal de un valor binario=>
r w x VALOR DECIMAL
0 0 0 0 (000 binario es 0 en decimal)
0 0 1 1 .........
0 1 0 2 .........
0 1 1 3 .........
1 0 0 4 (100 binario es 4 en decimal)
1 0 1 5 .........
1 1 0 6 .........
1 1 1 7 (111 binario es 7 en decimal)
1 significa activado y ! desactivado$ o sea 1!1$ activa r y x$ y desactiva w. /abiendo esto solo
tenemos que usar el valor decimal para dar solo permisos de lectura y e4ecucin$ un e4emplo
aclarara esto.
Antes en este documento$ expresamente omitimos la categor#a de los comandos que se
relacionan con la manipulacin de los permisos de archivo. 6os vemos$ entonces$ aqu#>
chmod cambiar permisos a archivos y directorios <E7$ cambio recursivo=
chown cambiar de propietario <E7=
chgrp establecer el grupo al que pertenecen archivos yGo directorios <E7=
umasF iniciali-a los permisos para todos los archivos que se creen despus de e4ecutarlo
: algunos e4emplos de uso>
chmod +x archivo # permiso de ejecucin para el archivo(s)
chmod -w archivo # retira el permiso de escritura sobre el archivo(s)
chmod g+w # permiso de escritura al grupo
chown admin:[users] archivo # cambia el usuario dueo y el grupo dueo del archivo
chgrp grupo archivo # cambia el grupo propietario del archivos
'n cuanto al comando IumasFI$ el mismo sirve para establecer los permisos que se dar%n por
defecto cuando se crea un archivo o directorio. 6os archivos o directorios tienen definidos por
defecto unos permisos base> para los archivos y """ para los directorios cuando IumasFI vale
!!!!. 'l valor de IumasFI es un octal que representa los bits a eliminar de los permisos base.
Por defecto$ en la mayor#a de las instalaciones$ IumasFI vale !!??. 'sto significa que cuando
creamos un archivo$ el permiso inicial de ste es AA <ErwErErE=. Al igual$ cuando creamos un
directorio$ el permiso inicial sera "11 <drwxrExrEx=$ resultado de """ E !!??. <'s una diferencia a
nivel de bits=
1
VII. El editor #!i#
/e debe mane4ar un editor de textos para poder editar y modificar los archivos del sistema. 'l IviI
ha sido el editor por defecto de todos los sistemas tipo ,92D. 'n los sistemas 89,G6inux en
realidad se utili-a el IvimI <Si 2mproved=$ que es totalmente compatible con el vie4o IviI y a(ade unas
cuantas funcionalidades. A los efectos pr%cticos seguimos llamando al IviI$ dado que IvimI se instala
con un alias o en la estructura creada por IupdateEalternativesI en 5ebian y IalternativesI en Hentos.
'l IviI tiene tres modos o estados para su utili-acin> modo comando$ modo insercin o texto y
modo l#nea o ex. 'n el modo comando es como se inicia el editor$ todo lo que escribamos ser%
interpretado por el editor para reali-ar acciones concretas$ o sea como un comando. 'n el modo
insercin se utili-a para modificar el contenido del archivo que se est% editando. 'l &ltimo modo
permite escribir comando del shell en la &ltima l#nea al final de la pantalla.
Para usar IviI hacemos>
# vi (abre la ventana de edicin sin abrir ningn archivo)
# vi [nom. arch.] (edita el archivo si ya existe, de lo contrario, lo crea.
Huando entramos en el IviI$ por defecto estamos en modo comando. Para cambiar a modo
insercin podemos utili-ar cualquiera de las teclas de la siguiente tabla>
a inserta despus del carcter donde estamos parados
i inserta antes del carcter donde estamos parados
A aade al final de la lnea actual
I aade al principio de la lnea actual
R entra en modo insercin reemplazando caracteres
o aade una lnea en blanco debajo de donde est el cursor y pasa a modo insercin
O aade una lnea en blanco encima de donde est el curso y pasa a modo insercin
Para volver al modo comando podemos utili-ar la tecla I'/HI.
'n la siguiente tabla vemos algunas de las acciones que se pueden hacer en el modo comando>
:wq guarda el archivo que estamos editando y sale del vi
:w [nom. arch.] guarda los cambios en el archivo de nombre indicado
:q! sale del editor sin guardar los cambios
:set number muestra el nmero de lnea
:r archivo aade el archivo indicado despus de la lnea actual
/pepe busca la cadena 'pepe' a partir de la posicin actual
n contina la bsqueda definida antes, parndose en la siguiente ocurrencia
h,l,k,j mover el cursor hacia izquierda, derecha, arriba y abajo, respectivamente
1G, G mover cursor al inicio del archivo y al final del mismo.
x borra el carcter bajo el cursor
dd borra la lnea actual
ndd borra las prximas n lneas
p vuelve a escribir el ltimo texto borrado (
yy copia a un buffer de memoria la lnea donde se encuentra el cursor
u deshacer el ltimo comando ejecutado
:set ic realiza bsquedas ignorando maysculas/minsculas ('noic' desactiva)
:g/find/s//new reemplaza todas las ocurrencias de 'find' por 'new', desde la lnea
actual
/i un sistema no tiene el editor IviI o la instalacin que encontramos no es la que estamos
habituados$ podemos recurrir a otra herramienta poderosa de edicin$ llamada InanoI. 'sta &ltima
tiene la facilidad de mostrar una ayuda contextual en la parte inferior de la pantalla.
1"
VIII. Empa$uetar y comprimir
;recuentemente tendremos que agrupar varios archivos en uno solo$ con o sin compresin. B ver
qu contiene un archivo comprimido. 'xisten m&ltiples programas diferentes que nos permiten
llevar a cabo esta clase de operaciones$ pero es seguro que siempre tendremos a disposicin la
herramienta ItarI.
'xplicaremos algunas de sus opciones m%s b%sicas$ dado que en total son inacabables y tienen
much#sima flexibilidad.
6a sintaxis que utili-a el comando ItarI es la siguiente>
tar opciones archDestino archOrigen
Para crear un nuevo archivo debemos pasarle el par%metro IcI y la IfI para proveer el nombre de
ese archivo. Por lo tanto$ el comando>
tar cf final.tar o*
empaquetar% todos los archivos del directorio actual que empiecen por la letra IoI. /i adem%s
quisiramos comprimirlos$ deber#amos utili-ar Ic-fI$ con lo cual ItarI utili-ar% el programa Ig-ipI
despus de empaquetar los archivos.
Para desempaquetar un archivo la opcin es la letra IxI <eDtract= y con IfI proveemos el nombre
del archivo. /i estuviera empaquetado deber#amos pasar las opciones Ix-fI.
'l comando ItarI solo empaqueta archivos$ para comprimir utili-a programas externos como g-ip$
b-ip? o el conocido -ip.
'l siguiente e4emplo muestra cmo respaldar una base de datos 3y/J6 remota$ utili-ando
comprensin en el protocolo de red y comprimiendo el resultado en nuestra m%quina local>
mysqldump -h192.168.1.139 -uroot -ppass -A -C | gzip -c -9 > basesremotas.sql.gz
la contra de este comando es que el dump se hace local$ por lo tanto$ es m%s eficiente la siguiente
opcin>
ssh -t user@192.168.1.239 'mysqldump -uroot -ppass -A -C | gzip -c -9' >
basesremotas.sql.gz
I%. &ed y acceso remoto
A continuacin veremos algunos comandos interesantes para saber qu est% pasando con las
conexiones de red de un equipo y luego estudiaremos la forma m%s relevante de conexin remota
con 6inux> /ecure /Hell$ intrprete de rdenes seguro.
a) Analizando la red
Seremos el uso b%sico de tres comandos> nmap$ netstat$ tcpdump
nmap <de 9etworF 3apper= es una utilidad para explorar$ administrar y auditar la seguridad de
redes de ordenadores. 5etecta hosts online$ sus puertos abiertos$ servicios y aplicaciones corriendo
en ellos$ su sistema operativo$ que firwallsGfiltros corren en una red y de que tipo son. 's excelente
para hacer traba4os de auditoria de redes y fue dise(ado para llevar acabo escaneos r%pidos en una
gran cantidad de redes$ pero es igualmente usable en hosts individuales. 's reconocido como el
scanner de puertos mas poderoso. : se lo usa b%sicamente para @ cosas>
Para InmapI un puerto puede estar de tres maneras>
open> el puerto es accesible y hay un demonio escuchando.
1C
closed> el puerto es accesible pero no hay un demonio escuchando.
filtered> el puerto no es accesible$ un firewall filtra el puerto.
'l comando tiene cientos de combinaciones de sus opciones$ con una potencia que le permite
anali-ar servidores con poco riesgo de ser detectado. /us usos m%s frecuentes tienen que ver con la
confirmacin de que nuestras aplicaciones est%n activas porque los puertos *HP que utili-an est%n
abiertos$ por lo tanto lo usaremos en general como en los siguientes e4emplos>
nmap localhost muestra todos los puertos abiertos en el servidor, escaneando
solo los primeros 1000
nmap 127.0.0.1 -p1-15000 muestra todos los puertos abiertos en el servidor, escaneado los
primeros 15000
nmap -n 192.168.1.0/24 escanea los primeros 1000 puertos de todas las IP activas de la
subred indicada. La opcin -n evita la demora en la resolucin
de nombres
'l siguiente es un e4emplo de la informacin retornada por la e4ecucin de este &ltimo comando>
Starting Nmap 6.00 ( http://nmap.org ) at 2013-11-28 23:40 UYST
Nmap scan report for 192.168.20.1
Host is up (0.0017s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
80/tcp open http
113/tcp closed ident
443/tcp closed https
2869/tcp open icslap
49152/tcp open unknown
MAC Address: 00:25:9C:36:CA:CA (Cisco-Linksys)
Nmap scan report for 192.168.20.103
Host is up (0.0079s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
631/tcp open ipp
MAC Address: E0:2A:82:40:29:6F (Universal Global Scientific Industrial Co.)
netstat <9etworF /tatus=$ imprime informacin sobre el subsistema de red 6inux. 'l tipo de
informacin brindada es controlado por el primer argumento y cada uno de esos argumentos tiene$
adem%s$ varias opciones. Hon este comando obtenemos informacin sobre la configuracin y la
actividad de la red.
Honfiguracin de las interfaces de red>
6a opcin Ei nos mostrar% la configuracin de las interfaces de red activas y con la opcin Ee
obtendremos informacin extendida <obtendremos la misma salida que con el comando IifconfigI=>
netstat -ie
/i a(adimos la opcin Ea mostrar% tambin las interfaces que no estn encendidas.
'nrutamiento
6a opcin Er nos mostrar% la tabla de rutas creada en nuestro servidor <obtendremos la misma
salida que con el comando Iroute EnI=>
netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
localnet * 255.255.255.0 U 0 0 0 eth0
default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
Semos que InetstatI usa el mecanismo de resolucin de nombres> en ve- de la 2P de red
10?.1C.1.! usa localnet$ el nombre que figura en GetcGnetworFs. 'l contenido de GetcGnetworFs es>
10
localnet 192.168.0.0 <a veces tambin puede ser> link-local 169.254.0.0=
Para evitar el mecanismo de resolucin de nombres y ver el enrutamiento con las direcciones 2P
a(adiremos la opcin En>
Honexiones activas
Para ver las conexiones activas *HP <Et= y ,5P <-u= haremos>
netstat -tu
Active Internet Connections (servers)
Proto R S Local Address Foreign Address State
tcp 0 0 pc450.fransbern:50053 212.23.37.8:www ESTABLISHED
tcp 0 0 pc450.fransbern:46854 uned.es:https ESTABLISHED
tcp 0 0 pc450.fransberns.com:1024 192.168.0.3:telnet ESTABLISHED
Por e4emplo$ vemos que tenemos una conexin *elnet activa con origen en nuestra m%quina y
destino la m%quina 10C.1C.!.@. Semos tambin que InetstatI usa los nombres de puertos que figuran
en GetcGservices. Para evitarlo y ver el n&mero de 2P y puerto usaremos la opcin En>
netstat -tun
Active Internet Connections (w/o servers)
Proto R S Local Address Foreign Address State
tcp 0 0 192.168.0.2:50053 212.23.37.8:80 ESTABLISHED
tcp 0 0 192.168.0.2:46854 62.204.192.164:443 ESTABLISHED
tcp 0 0 192.168.0.2:1024 192.168.0.3:23 ESTABLISHED
Puertos que est%n escuchando
Para ver los puertos *HP y ,5P que est%n esperando una conexin <escuchando=$ usaremos la
opcin El>
netstat -tul
Active Internet connections (only servers)
Proto R S Local Address Foreign Address State
tcp 0 0 *:npmp-gui *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:auth *:* LISTEN
tcp 0 0 localhost.localdom:smtp *:* LISTEN
tcp6 0 0 *:ssh *:* LISTEN
tcp6 0 0 *:ipp *:* LISTEN
udp 0 0 *:netbios-ns *:*
udp 0 0 *:netbios-dgm *:*
udp 0 0 *:ipp *:*
udp 0 0 *:xdmcp *:*
tcpdump <volcado de paquetes tcp=. 6a funcin principal de este comando es anali-ar el tr%fico que
circula por las interfases de red del equipo. Permite al usuario capturar y mostrar en tiempo real los
paquetes trasmitidos y recibidos en la red a la cual el servidor est% conectado
A su ve-$ los m&ltiples filtros$ par%metro y opciones que tcpdump nos ofrece$ nos permiten
infinidades de combinaciones$ al punto de poder monitorear todo el tr%fico que ingrese de una 2P$ un
host o una p%gina espec#fica. podemos solicitar el trafico de un puerto especifico o pedirle a la
herramienta que nos muestre todos los paquetes cuyo destino sea una direccin 3AH espec#fica. 'n
muchas ocasiones es preferible usar este comando para capturar las sentencias /J6 que se env#an a
un servidor de base de datos antes que las herramientas del propio servidor de datos$ pues la captura
con tcpdump es m%s ligera y esto libera de sobrecarga al servidor de base de datos que queremos
anali-ar. Seremos aqu# varios e4emplos &tiles>
tcpdump src host 192.168.1.139 Capturar trfico cuya direccin IP de origen sea
192.168.3.1
tcpdump ether dst 50:43:A5:AE:69:55 Capturar trfico con destino a la direccin MAC
50:43:A5:AE:69:55
tcpdump dst net 192.168.1.0 Capturar trfico con red destino 192.168.1.0
?!
tcpdump src net 192.168.1.0/28
tcpdump src net 192.168.1.0 mask
255.255.255.240
Capturar trfico con red origen 192.168.1.0/28
tcpdump dst port 23 Capturar trfico con destino el puerto 23
tcpdump port 110 Capturar trfico con origen o destino el puerto
110
tcpdump ip proto icmp Capturar los paquetes de tipo ICMP
tcpdump ip proto udp Capturar los paquetes de tipo UDP
tcpdump tcp and port 80 Capturar el trfico Web
tcpdump udp and dst port 53 Capturar las peticiones de DNS
tcpdump tcp and \(port 22 or port
23\)
Capturar el trfico al puerto telnet o SSH
tcpdump tcp and not port 80 Capturar todo el trfico excepto el web
tcpdump tcp and ! port 80
tcpdump -vvv -n -s 65535 -A -p
-w /tmp/salida.dmp
host 10.168.1.100 and port 80
Capturar todo el trafico a host 10.168.1.100
puerto 80, con el mximo de detalle, sin ponerla en
modo promiscuo, sin convertir las direcciones de
salida, imprimir en ASCII y volcar todo en el
archivo /tmp/salida.dmp
'n general hacemos un volcado a un archivo de la captura reali-ada con ItcpdumpI$ redireccionando
la salida.
b) Acceso remoto
Al conectarse a un servidor ssh$ las comunicaciones entre el cliente y servidor via4an cifradas
desde el primer momento de forma que si un usuario malintencionado intercepta los paquetes de
datos entre el cliente y el servidor$ ser% muy dif#cil que pueda extraer la informacin ya que se
utili-an sofisticados algoritmos de encriptacin.
Para que un usuario se conecte a un sistema mediante ssh$ deber% disponer de un cliente ssh.
5urante el proceso de autenticacin$ cuando el usuario proporciona el nombre y la contrase(a$ se
utili-a cifrado asimtrico pero en el resto de la sesin se utili-a cifrado simtrico por su menor
necesidad de procesamiento.
6a primera ve- que se conecta alguien desde un PH cliente$ se instalar% el certificado de
autenticacin del servidor$ previa autori-acin de parte del usuario. 'l paquete ssh proporciona$
adem%s de la conexin remota$ otros servicios como e4ecucin remota$ servidor ftp seguro$ copia
remota de archivos y conexin SP9 <Sirtual Private 9etworF=.
Seremos ahora algunas formas de uso de la conexin ssh entre m%quinas 6inux.
'4ecucin remota de aplicaciones gr%ficas>
'n el servidor debe estar habilitado el redireccionamiento del protocolo D$ para ello se debe
tener la siguiente l#nea en el archivo de configuracin del demonio sshd>
// Habilitar la redireccin X en /etc/ssh/sshd_config
X11Forwarding yes
'l cliente deber% e4ecutar la siguiente l#nea de comandos para conectarse>
juan@pccliente# ssh -X user@192.168.1.239 (-X para redirigir el Xwindow)
user@pcserver# dolphin (ejecutamos un navegador de archivos grfico)
/ervidor de ftp seguro y copia remota>
?1
Ambas funcionalidades est%n disponibles cuando se instala el cliente ssh. Para cliente ftp seguro
se utili-a con el comando IsftpI. Para reali-ar una copia segura de un servidor a otro se utili-a el
comando IscpI.
*&nel ssh>
Para iniciar un t&nel desde un puerto de un host remoto a un puerto local se puede aplicar el
comando>
ssh -N -L[puerto local]:localhost:[puerto remoto] [host remoto]
(en la siguiente lnea habilitamos el puerto 4406 en el pc cliente por un tnel para
conectar a un servidor MySQL remoto que escucha en el puerto 3306)
ssh -N -L4406:localhost:3306 192.168.1.138
Homparar un archivo remoto con uno local>
Podemos hacer una comparacin a travs de una conexin ssh instant%nea>
ssh user@host cat /ruta/archivo_remoto | dif /ruta/archivo_local
Honexin ssh por medio de un Ihost en el medioI>
/i tenemos dos servidores$ uno de los cuales es visible en la red local y el otro es inalcan-able
desde nuestra red$ pero s# visible desde la red en la cual est% el servidor que podemos ver. estamos
en condiciones de acceder al servidor Iinalcan-ableI por medio de una conexin ssh oculta desde el
host visible.
ssh -t [ip host visible] ssh [ip host inalcanzable]
,na ve- dentro del servidor Iinalcan-ableI$ estamos en condiciones de hacer un t&nel utili-ando
lo visto unos p%rrafos m%s arriba$ lo cual de4amos como e4ercicio para el lector.
Hopiar una )5 3y/J6 a un nuevo servidor$ v#a ssh>
'n base a la posibilidad vista anteriormente$ estamos en condiciones de entender un comando
que$ en una sola l#nea$ reali-a la copia de una base de datos de un servidor a otro.
mysqldump -add-drop-table -force -log-error=/tmp/error.log -uUsuario -pPassword olddbname
| ssh -C user@[ip host destino] mysql -uUsu -pPass newdbname
<lo anterior es todo en una sola l#nea=. Hemos usado un volcado por un t&nel ssh comprimido$
utili-%ndolo como entrada al cliente mysql. 'sta es una forma r%pida de migrar una base de datos a
un nuevo servidor$ sin embargo$ las herramientas de mysql tambin pueden hacer ese traba4o casi
con la misma filosof#a.
Hrear un t&nel a la m%quina local para acceder a una )5 3y/J6
Para conectarnos a un servidor 3y/J6 remoto con el cliente existente en nuestra PH$ podemos
hacer>
ssh -fNg -L 5506:127.0.0.1:3306 user@[ip host remoto]
mysql -h127.0.0.1 -P5506 -uusudb -pdbpass
/i desde nuestra m%quina queremos utili-ar un cliente para reali-ar una conexin a un servidor
3y/J6 que no vemos directamente$ sino solo despus de conectarnos a un servidor intermedio$
entonces$ podemos utili-ar otro t&nel para redireccionar la conexin.
#ssh -t -fNg -L 3308:localhost:5506 user@[ip host visible] ssh -fNg \
-L 5506:[ip host visible]:3306 user@[ip host inalcanzable]
#mysql -h127.0.0.1 -P3308 -uusudb -pdbpass
??
'n el primer e4emplo$ el comando ssh se loguea al servidor remoto como IuserI$ corre en
bacFground <Ef=$ no e4ecuta ning&n comando en el servidor remoto <E9= y setea el reenv#o de
paquetes <E6= desde el puerto local 11! al puerto @@! en el host remoto. 'l segundo comando de
ese e4emplo le dice al cliente 3y/J6 que se conecte a localhost en el puerto 11! <que ser%
reenviado v#a ssh al host remoto en el puerto @@!=.
'n el segundo e4emplo utili-amos una conexin ssh con un host en el medio$ como vimos en un
e4emplo anterior. Aqu# el comando ssh nos est% permitiendo crear un t&nel desde nuestra m%quina a
un host que no vemos directamente$ sino recin cuando conectamos al servidor visible. Para esto$
tanto el servidor inalcan-able desde nuestra PH$ como el servidor visible <que permite el acceso=
deben tener habilitado el reenv#o de paquetes v#a ssh. Para eso se debe tener habilitada la opcin
I;orwardAgent yesI en el archivo de configuracin del cliente ssh y$ en el caso de las m%quinas que
tambin act&an como servidores ssh$ la opcin IAllowAgent;orwarding yesI debe setearse en el
archivo de configuracin del servidor ssh.
Hopiar un archivo grande con IretomaI>
*eniendo instalada la utilidad IrsyncI en ambos hosts$ es posible reali-ar una copia segura con
IscpI$ asegurando la posibilidad de reanudarla en caso de falla en la comunicacin.
rsync -partial -progress -e ssh arch_origen user@host:arch_destino
:
rsync -partial -progress -e ssh user@host:arch_remote arch_destino
'l segundo e4emplo copia desde el host remoto al local. Para retomar despus de una ca#da$
e4ecutamos exactamente el mismo comando y la copia continuar% desde el lugar que corresponda.
'stablecer una SP9 a travs de ssh
Hon ssh podemos crear t&neles encriptados temporales y un servidor SP9 para una conexin
punto a punto. Seremos que el t&nel que se crea utili-a una interface *,9G*AP$ como cualquier
SP9 real.
'l servidorGcliente //H est% siempre disponible en cualquier computador y posiblemente es lo
que utili-amos siempre para conectarnos con redes remotas. Pues bien$ si ya somos capaces de
acceder a cualquier servidor de la red remota por medio de //H Ey tenemos permiso de root en ese
servidorE$ entonces ya no necesitamos m%s para que nuestra m%quina local pase a formar parte de la
red remota <es decir$ establecer un t&nel SP9=.
Al final$ en el Anexo A$ copiamos un script como e4emplo de la instrumentacin de una SP9 por
este mtodo. Hon ssh creamos el t&nel$ pero hay una serie de pasos que nunca vamos a recordar
despus de haberlos estudiado una ve-. 'l script es sencillo de entender una ve- que se tienen claros
los siguientes conceptos>
'l comando Iip tuntapI puede utili-arse en 6inux para crear interfaces QvirtualesR <es decir$
interfaces que pueden utili-arse como el resto Ecomo por e4emplo eth!E pero que no tienen una
tar4eta de datos f#sicamente asociada a ella=.
Hon Issh EwI se pueden crear t&neles entre dos interfaces virtuales situadas en la m%quina local y
remota respectivamente.
Hon Iip routeI e IiptablesI se puede especificar qu paquetes deben enviarse a travs del t&nel. Por
cierto$ de4amos en manos de los lectores interesarse por todo lo que puede hacerse con la tabla 9A*
<9etworF Adress *ranslation=.
?@
%. 'nalizando registros y procesos
a) Registros de eventos y errores
Para averiguar qu ha podido pasar en un servidor 6inux que presenta problemas$ hay una serie
de registros <logs= que nos facilitar%n el obtener este tipo de informacin.
6a siguiente lista presenta los m%s interesantes desde el punto de vista de un desarrollador que
debe investigar qu est% pasando en el sistema. *odos estos archivos de registros se encuentran en el
directorio GvarGlog o en subdirectorios de esta ubicacin$ a excepcin del archivo .bashNhistory$ que
existe en el directorio personal de cada usuario <GhomeG...=.
boot.log> 'n este registro podremos encontrar informacin que se almacena durante el arranque del
sistema.
dmesg> 8uarda los mensa4es que lan-a el Fernel. 'ntre otros datos$ almacena los mensa4es sobre
dispositivos hardware que el Fernel detecta durante el arranque del sistema.
cron> 'n este registro se guardar%n las acciones reali-adas por el demonio IcronI <automati-ador de
tareas=. /i un sistema tiene este log individual desactivado$ las operaciones de IcronI estar% en el
archivo IsyslogI y podr#amos consultarlas e4ecutando> zgrep -i cron /var/log/syslog.
lastlog y wmtp> 'l primero muestra cuando fue el &ltimo acceso de cada usuario al sistema$ y el
segundo un registro de los accesos del usuario al sistema. Para poder visuali-arlos es necesario
hacerlo a travs de los comandos IlastlogI <para el primero= y IlastI <para el segundo=$ ya que no son
archivos de texto A/H22.
btmp> 'n este archivo podemos encontrar la lista de accesos fallidos al sistema. Homo en el caso
anterior$ el archivo no se encuentra en A/H22$ por lo que para visuali-arlos utili-aremos el comando
IlastbI.
messages> 'ste registro almacena los principales mensa4es del sistema.
mysqlGmysqld.log> 3ensa4es de informacin sobre el inicio$ apagado y funcionamiento de 3y/J6.
apache?GerrorNlog> errores del servidor web$ registrados por el demonio IhttpdI. *ambin$ 4unto a
este archivo est% el que registra todos los accesos al servidor> accessNlog.
tomcatGcatalina.out> 7egistro de la actividad del servidor de aplicaciones *omcat. *ambin se
encuentra en este directorio el archivo diario de registro de errores> localhostN<fecha.hora=.
.bashNhistory> 6o podemos encontrar en el directorio home de cada usuario. 'n l encontraremos el
historial de comandos reali-ados por el usuario en cuestin. Adem%s de accediendo al propio
fichero$ tambin puede accederse a su contenido a travs de la instruccin history.
'n el caso del historial de comandos$ es conveniente siempre setear algunas variables de ambiente$
para que se guarde durante m%s tiempo la informacin y con me4or detalle. Para lograrlo$ afectando
a todos los usuarios$ se debe modificar el archivo GetcGprofile$ con las siguientes l#neas>
# cantidad de lneas a registrar
HISTSIZE=1000
# tamao mximo del archivo en bytes
HISTFILESIZE=2000
# formato de la fecha al desplegar
HISTTIMEFORMAT='- %F %T - '
# eliminar las lneas duplicadas consecutivas
HISTCONTROL=ignoredups
'stas l#neas podr#an agregarse en el archivo GetcGbash.bashrc. 5e esta manera afectar#amos solo a
quienes utilicen el entorno bash.
Hemos mencionado algunos comandos para desplegar el contenido de archivos de registro que
?A
no son texto A/H22. Seremos ahora algunas tcnicas para anali-ar r%pida y eficientemente el
contenido de los logs de texto$ que a veces pueden contener varias gigabytes.
6istar las l#neas de ImessageI que contengan la palabra IpanicI$ desplegando las dos l#neas
anteriores y las 1 l#neas posteriores>
cat messages | grep panic -A5 -B2
6istar ordenadamente los @ &ltimos n&meros de las direcciones 2P que provocaron error en
Apache>
# cut -d ' ' -f 8 error_log | grep 192.168.245 | sed 's/\./ /g' | awk '{print $4}' | sort
-rn | uniq -c
veamos esto en detalle>
'cut -d ' ' -f 8> corta la octava columna$ tomando un espacio como separacin entre columnas.
grep 192.168.245> filtra para obtener solo las l#neas de esta subred.
sed 's/\./ /g'> reempla-a los puntos entre los n&meros de la 2P por un espacio <necesario para
awF=
awk '{print $4}'> imprime solo la cuarta columna <los &ltimos tres n&meros de la 2P=
sort -rn> ordena la salida considerando n&meros en orden inverso.
uniq -c> elimina las l#neas repetidas e imprime la suma de las ocurrencias.
)uscar todos los archivos existentes en Ghome$ exluyendo los que pertenecen a los directorios de
administrador y de pepe>
find /home | egrep -v "/home/administrador|/home/pepe"
6istar todos los items de un archivo <usando un espacio o nueva l#nea como separador=$ tomando
dos items por l#nea$ recibiedo solo las 1! primeras l#neas del archivo tratado>
head .profile xargs -n 2
Btras opciones comunes>
...awk -F'\t' '{ print $3 }' # extaer el tercer campo separado por tabulaciones
...col -bx # eliminar retrocesos y convertir tabulaciones en espacios
expand - # convierte las tabulaciones en espacios (-, lee entrada estandar)
sort -u # ordenar y eliminar duplicados
tr '\n' ' ' # concatenar lneas en una sola lnea
tr '\r' '' # eliminar CR (retornos de carro)
tr 'A-Z' 'a-z' # convertir maysculas en minsculas
sed 's/^/# /' # transformar cada lnea en un comentario
sed 's/\.ext//g' # eliminar .ext
head -n 2 # mostrar las primeras 2 lneas
tail -n 2 # mostrar las ltimas 2 lneas
b) Procesos del sistema
Para saber qu est% ocurriendo en el sistema$ anali-ar su salud y capacidades$ tenemos dos
herramientas fundamentales> IpsI y ItopI.
'stos comandos se complementan con otros como IfreeI$ IlsoftI$ IiostatI$ IvmstatI$ etctera.
IpsI. <process status=. ,n proceso es un programa o aplicacin que se encuentra cargado en la
memoria y en proceso de e4ecucin$ el que es identificado inequ#vocamente por un n&mero llamado
P25 <Process 25entification=. Hon este comando podemos consultar en forma exhaustiva el estado
?1
de los procesos en un momento dado.
Seremos algunos modificadores$ los de uso m%s com&n>
a muestra los procesos corriendo, que estn asociados a una terminal
-A, -e muestra todos los procesos existentes en el sistema
r restringe la seleccin solo a los procesos que estn corriendo en este momento
-l muestra informacin extendida para cada proceso, tiempo de CPU, nmero de
terminal en la cual est corriendo y estado del proceso en el sistema. Este
estado puede ser uno de los siguientes: D: ininterrumpible, R: en cola de
ejecucin (running), S: proceso en espera o dormido (sleeping), T: proceso
detenido por el sistema o por el usuario, Z: proceso zombie, hubo algn fallo y
el proceso no est funcionando correctamente
*enga en cuenta que Ips EauxI es distinto de Ips auxI. 6os est%ndares PB/2D y ,92D requieren
que el primer comando liste todos los procesos que pertenecen a un usuario llamado IxI$ pruebe esto
escribiendo Ips EaurootI y obtendr% todos los procesos del usuario root. /i el usuario llamado IxI no
existe$ esto provoca que IpsI interprete el comando como Ips auxI$ listando todos los procesos del
sistema.
Seamos algunas salidas del comando IpsI para anali-ar las columnas relevantes que puede
mostrar.
$ ps
PID TTY TIME CMD
18230 pts/3 00:00:00 bash
32131 pts/3 00:00:00 ps
P25 <2dentificacin del proceso=> 'l n&mero &nico de identificacin del proceso.
**:> 2dentificacin de la terminal asociada con el proceso$ tambin puede ser otro dispositivo.
*23'> 'l tiempo que el proceso ha estado en e4ecucin..
H35> 's el nombre del comando que esta siendo e4ecutado$ bash es el proceso del shell.
$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 17782 0.0 0.0 0 0 ? S 21:27 0:00 [kworker/u:0]
1000 18182 0.0 0.2 368760 26356 ? Sl 21:12 0:01
/usr/lib/kde4/libexec/kdesu -u root -c /usr/bin/gnome-terminal
1000 18184 0.0 0.0 97604 1720 ? S 21:12 0:00
/usr/lib/kde4/libexec/kdesud
root 18205 0.0 0.0 60924 1712 pts/2 Ss+ 21:12 0:00 /bin/su root -c
/usr/lib/kde4/libexec/kdesu_stub -
,/'7> 9ombre del usuario o su n&mero identificador$ si no entra en la columna el nombre.
cHP,> Porcenta4e de utili-acin de la HP,. 's el tiempo de HP, divido por el tiempo de todos los
procesos que est%n corriendo.
c3'3> 7elacin de la memoria utili-ada por el proceso con respecto al total de memoria f#sica en
la m%quina.
S/`> 3emoria virtual ocupada por el proceso <expresada en M)=
7//> *ama(o de memoria residente$ o sea la memoria f#sica no swappeada en uso <expresada en
M)=
/*A*> 'stado del proceso <se explic m%s arriba=
/*A7*> Hora de inicio del proceso.
HB33A95> 6#nea de comandos utili-ada para lan-ar el proceso.
ItopI. 'ste comando nos muestra en forma interactiva detalles de los procesos existentes en el
sistema. 9os permite identificar r%pidamente qu proceso puede estar afectando negativamente el
rendimiento del sistema. Podemos seleccionar solo los procesos de un usuario o cambiar el orden en
que nos despliega la informacin$ teniendo en cuenta el uso de un determinado recurso.
?
Al correr el comando ItopI ingresamos a una interfa- dividida en dos> una cabecera y la lista de
procesos corriendo en ese momento. 6a cabecera se divide en cinco l#neas>
top - 22:20:52 up 1:28, 3 users, load average: 0,23, 0,25, 0,20
Tasks: 195 total, 1 running, 194 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1,1 us, 0,6 sy, 0,0 ni, 98,3 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: 12221788 total, 2259188 used, 9962600 free, 72940 buffers
KiB Swap: 12207100 total, 0 used, 12207100 free, 1367476 cached
Primera l#nea> muestra una serie de datos referidos al sistema.
Hora actual
*iempo que lleva corriendo el sistemas
Hantidad de usuarios conectados en este momento
Promedio de utili-acin de la HP,$ medido cada 1$ 1! y 11 minutos$ respectivamente
/egunda l#nea> muestra el total de sistemas corriendo y los separa por estado
Procesos activos
Procesos en espera
Procesos detenidos
Procesos -ombie
*ercera l#nea> 3uestra el uso de HP, en el momento <porcenta4e calculado en base al intervalo de
actuali-acin de la pantalla=
cus> tiempo de uso de HP, del usuario por parte de procesos normales
csy> tiempo de uso de la HP, por parte del propio sistema
cni> tiempo de uso de la HP, por parte de los procesos cuya prioridad ha sido cambiada
cid> tiempo disponible de la capacidad de la HP, plausible de ser utili-ado
cwa> muestra en porcenta4e el tiempo en espera de la HP, para operaciones de entradaGsalida
chi> tiempo dedicado a servir las interrupciones de hardware
csi> tiempo dedicado a servir interrupciones de sortware
cst> tiempo de esta m%quina virtual tomado por el hipervisor <relevante en m%quinas virtuales=
Huarta l#nea> 3uestra valores referentes a la memoria f#sica del equipo expresados en Mi)
<7ecuerde que es la muestra de un instante$ por lo tanto los valores pueden no ser lo suficientemente
exactos=
Mib 3em> total de memoria f#sica del computador
used> cantidad de memoria utili-adas
free> cantidad de memoria libre
buffered> cantidad de memoria f#sica que est% dedicada a almacenamiento intermedio de bloques
de disco
Juinta l#nea> 3uestra valores referentes a la memoria virtual definida en el equipo <swap=. 6os
datos son similares a los de la l#nea anterior$ difiriendo solo el &ltimo de ellos.
cached> cantidad de la memoria virtual almacenada dedicada al almacenar temporalmente el
contenido de archivos accedidos en el sistema
Seamos cmo calcular algunos datos de la memoria y su uso en el sistema$ con los datos
obtenidos del comando top>
Memoria RAM disponible = cached (1367476 k) + b!!ered ( 7"#4$ k)
Memoria RAM utilizada por programas = sed (""%#1&& k) ' (cached + b!!ered)
?"
Ahora$ la segunda parte de la interface$ la lista de procesos corriendo en el sistema$ se muestra en
orden descendente con respecto a la intensidad del uso que est% haciendo cada proceso de los
recursos del sistema.
'l encabe-ado de la l#nea indica los siguientes datos para cada proceso>
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4843 root 20 0 179m 39m 25m S 1,3 0,3 3:01.00 Xorg
7015 administ 20 0 1245m 157m 40m S 1,3 1,3 3:31.06 firefox
18217 root 20 0 498m 16m 11m S 1,0 0,1 0:11.74 gnome-terminal
19246 administ 20 0 382m 28m 16m S 1,0 0,2 0:28.13 plugin-containe
45 root 20 0 0 0 0 S 0,3 0,0 0:00.78 kworker/7:1
5435 root 20 0 0 0 0 R 0,3 0,0 0:00.13 kworker/0:0
13038 administ 20 0 2717m 66m 36m S 0,3 0,6 1:24.28 kwin
13049 administ 20 0 2927m 133m 51m S 0,3 1,1 0:31.93 plasma-desktop
14606 root 20 0 23304 1716 1176 R 0,3 0,0 0:00.18 top
14682 administ 20 0 436m 41m 29m S 0,3 0,3 0:04.86 dolphin
6a mayor#a de estas columnas son las que fueron explicadas en ocasin de describir la salida del
comando IpsI$ visto anteriormente. 6as que difieren se explican a continuacin>
P7> prioridad del proceso
92> prioridad establecida al proceso
S27*> total de la memoria virtual usada
7'/> Hantidad de memoria que se ha utili-ado por parte del proceso <no swap=
/H7> Hantidad de memoria compartida disponible para el proceso <potencial$ no es toda para el
proceso=
Por &ltimo$ dentro del programa ItopI podemos interactuar con varias opciones. Seamos algunas
de ellas>
k sirve para matar un proceso, debemos ingresar el numero de su PID
1 muestra informacin del uso de todos los ncleos que tiene la mquina
c muestra el camino absoluto del binario que est ejecutando un proceso
u muestra los procesos de un usuario, se debe ingresar el nombre del mismo
q sale del programa 'top'
%I. (ell scripts con bas
Antes de ver con qu sencille- se pueden escribir peque(os programas para automati-ar la
administracin de un computador con 6inux$ es conveniente conocer algunas caracter#sticas del
shell m%s usado en estos sistemas operativos. Seremos pues primero una parte de las
funcionalidades que hacen potente al intrprete de comandos bash.
a) Expansin de comodines
,n cometido fundamental del shell es reali-ar la expansin de s#mbolos espec#ficos al listar el
contenido de un directorio. 's t#pico que usemos los comodines de la tabla siguiente para referirnos
a un con4unto de archivos.
Comodn Descripcin
? Uno y slo un carcter
* Cero o ms caracteres
[conjunto] Uno los caracteres de conjunto
[!conjunto] Un carcter que no este en conjunto
?C
'n las dos &ltimas l#neas de la tabla anterior$ Icon4untoI refiere a todos los caracteres que pueden
encontrarse en una posicin &nica$ indicada por ambos parntesis rectos.
Huando un comando recibe una expresin que escribimos con comodines$ no ve esos comodines
sino el resultado de su expansin <cp g^ Gtmp$ copia a Gtmp todos los archivos que empiecen con la
letra g. si no existiese archivo alguno con esta caracter#stica$ el comando cp s# recibir% como
par%metro la expresin g^=.
Btro comod#n$ no tan usado es el tilde IYI$ que expande el camino al directorio personal de los
usuarios$ si lo usamos precediendo al nombre de un usuario. /in embargo$ utili-ado con la barra$
IYaI$ este par ser% sustitu#do por el camino al directorio personal del usuario logueado.
Hon las llaves Id eI$ logramos expandir cada una de las cadenas de caracteres que contenga$ en
una palabra. Por e4emplo$ el comando ls ^.dh$c$cpp$oe$ listar% todos los archivos con alguna de esas
cuatro extensiones.
Por &ltimo$ bash puede expandir otros tipos de patrones$ m%s comple4os$ que recomendamos
conocer.
b) Redirecciones
'n 6inux cada programa tiene siempre asociadas una entrada est%ndar$ una salida est%ndar y una
salida de errores est%ndar <por defecto> el teclado para la entrada y la consola para las dos salidas=
6os operadores de redireccin \ y [ cambian la entrada o salida est%ndar por un archivo. 'n el
caso de la salida$ utili-ando I[[I logramos agregar la salida al contenido de un archivo existente que
queremos preservar. Seamos algunos e4emplos>
$ cat < archA > archB
$ date > ahora.txt
$ cat < archA > ArchB 2>errores (enva el posible mensaje de error al archivo 'errores')
$ gcc *.cpp > /dev/null 2> /dev/null (se redirige la salida estndar y de errores
al archivo /dev/null, que es un 'agujero negro').
*ambin es posible redirigir la salida est%ndar de un programa a la entrada est%ndar de otro$
usando el operador IZI <pipeline=. ,n e4emplo t#pico es el comando more>
$ ls -la | more
con esto se ir% desplegando p%gina a p%gina la lista de archivos en el directorio. ,n e4emplo algo
m%s comple4o puede ser el siguiente>
$ cut -d: -f1 < /etc/passwd | sort
que nos muestra los nombres de todos los usuarios del computador ordenados alfabticamente.
c) Eecucin secuencial y concurrente
/i un comando tarda mucho en e4ecutarse$ podemos de4arlo traba4ando en bacFground agregando
al final de la l#nea el s#mbolo I+I.
$ tar -czf muchosarchs.tar.gz * &
este comando nos informa el P25 que le ad4udic el sistema al proceso y a continuacin nos
devuelve a prompt$ donde podemos continuar traba4ando.
'n otros casos nos interesa que al terminar la e4ecucin de un comando se contin&e e4ecutando
otro$ para eso alcan-a con escribir cada comando separado por un punto y coma <.=.
d) !aracteres especiales" entrecomillado
Algunos caracteres especiales ya fueron vistos antes. Presentamos aqu# una tabla completa>
?0
Carcter Descripcin
~ Directorio home
` Sustitucin de comando
# Comentario
$ Variable
& Proceso en background
; Separador de comandos
* Comodn 0 a n caracteres
? Comodn de un slo carcter
/ Separador de directorios
( Empezar un subshell
) Terminar un subshell
\ Carcter de escape
< Redirigir la entrada
> Redirigir la salida
| Pipe
[ Empieza conjunto de caracteres comodn
] Acaba conjunto de caracteres comodn
{ Empieza un bloque de comando
} Acaba un bloque de comando
' Entrecomillado fuerte
" Entrecomillado dbil
! No lgico de cdigo de terminacin
Huando queremos utili-ar uno de los caracteres especiales como un literal$ necesitamos
entrecomillarlo. Por e4emplo$ para hacer un echo por consola del mensa4e> Q?^A[1 es ciertoR$
debemos escribir>
$ echo '2*4>5 es cierto'
Btra forma de hacer valer literalmente un car%cter especial es antecederlo por el car%cter de
escape <a=. 'n el e4emplo anterior se tendr#a>
$ echo 2\*4\>5 es cierto'
'l uso m%s com&n de la barra invertida$ es permitirnos la referencia a nombres de archivos con
espacios$ dado que pra el intrprete bash$ el espacio es un separador de argumentos de la l#nea de
comandos.
d) #cripts y $unciones
Al hablar de script nos estamos refiriendo a un archivo que contiene comandos bash e4ecutables.
Para crear un script se puede usar un editor de texto como el IviI y luego darle al archivo resultante
permisos de e4ecucin <chmod Vx arch=. *ambin podemos e4ecutarlo usando el comando Isource
archI$ que carga el archivo en la memoria de bash y lo e4ecta.
,na funcin es almacenada como una variable de entorno y se e4ecuta dentro de la memoria del
propio proceso bash$ por eso es m%s r%pido hacer una llamada a una funcin que e4ecutar scripts
aparte. /e puede definir un archivo que sea un script solo de funciones y cargarlas a travs del
comando IsourceI$ utili-ando una sintaxis como la siguiente>
function nombrefn
{

comandos bash

}
'l comando unset -f nombrefn$ borra la funcin de la memoria y con declare -f podemos
acceder a un listado de ls funciones definidas en una sesin. 6as funciones tambin pueden definirse
al inicio de un script$ para luego ser invocadas en el cdigo.
@!
)ash utili-a variables del tipo cadena de caracteres$ como tipo por defecto. Por convencin se
utili-an en may&scula las variables de entorno exportadas y las que no exportamos$ en min&scula.
'n general$ un script recibe argumentos$ que son tratados como par%metros posicionales. /us
nombres son 1$ ?$ ...n$ por lo cual nos referimos a ellos como T1$ T?$ ...$ Tn. 'l par%metro posicional
! almacena el nombre del script que se e4ecuta.
6as variables T^ y Tf nos devuelven los argumentos recibidos por el script o funcin$ difiriendo
en el tratamiento que se obtiene cuando se pasan entrecomillados a una funcin. Por otra parte$ la
variable T] nos informa la cantidad de argumentos pasados al script. Seamos un e4emplo>
$ vi recibir.sh
#!/bin/bash
#Ejemplo de script que recibe parametros y los imprime
echo "El script $0 recibe $# argumentos: $*"
#Usamos el Internal Field Separator para cambiar el espacio por una coma
IFS=','
echo "El script $0 recibe $# argumentos: $@"
$ chmod +x recibir.sh
$ ./recibir Param01 Param02 Ultimo03
el resultado ser% algo similar a las dos l#neas siguientes>
$ El script recibir.sh recibe 3 argumentos: Param01 Param02 Ultimo03
$ El script recibir.sh recibe 3 argumentos: Param01,Param02,Ultimo03
,saremos de cuando se deban resolver ambiggedades con respecto al nombre de una variable.
,n nombre se transforma en ambiguo si va seguido por una letra$ d#gito o guin ba4o. 'l caso m%s
com&n es cuando tenemos que referirnos al dcimo par%metro del script$ T1! nos devolver% el
contenido de la primera variable con un ! concatenado$ para obtener el valor correcto debemos
escribir Td1!e.
Por &ltimo$ vemos la sustitucin de comandos. 'sta caracter#stica nos permite usar la salida de
un comando como si fuera el valor de una variable> T<comando=. *ambin se utili-an los tildes hacia
atr%s para lograr este efecto> varLhcomandoh.
e) !ontrol de $luo
Homo todo lengua4e de programacin$ bash tiene estructuras de control <if$ else$ for$ while$ until$
case y select=. 7evisaremos su sintaxis.
e.1= if$ elif y else
6a sentencia condicional tiene cualquiera de los dos formatos siguientes>
if condicion
then
sentencias
elif condicion
then
sentencias
else
sentencias
fi
if condicion ; then
sentencias
elif condicion ; then
sentencias
else
sentencias
fi
e.?= Hdigos de terminacin. 6os comandos dise(ados con proli4idad siempre deben terminar
devolviendo un cdigo de finali-acin <exit status= que indica si el comando tuvo xito o no.
Aunque no es obligatorio$ normalmente un cdigo de terminacin ! significa terminacin correcta y
@1
un cdigo entre 1 y ?11 corresponde a posibles salidas por error.
6a sentencia IreturnI permite retornar un valor al final de la e4ecucin de un script$ si no se
proporciona$ devolver% el cdigo de terminacin del &ltimo comando e4ecutado. 'sta sentencia
puede ser e4ecutada solo dentro de funciones y en scripts que se e4ecuten con el comando IsourceI.
6a sentencia IexitI$ sin embargo$ puede ser e4ecutada en cualquier l#nea y lo que provoca es el
abandono del script$ devolviendo o no un cdigo de retorno si se lo proporciona.
/i se lee la variable especial K$ 4usto despus de la e4ecucin de un comando$ se obtendr% en ella el
cdigo de finali-acin del mismo$ que podr#a guardarse haciendo$ por e4emplo> ctLTK.
Semos una tabla con los operadores de comparacin de cadenas m%s utili-ados>
Operador Verdadero si ...
str1 = str2 Las cadenas son iguales
str1 != str2 Las cadenas son distintas
str1 < str2 str1 es menor lexicogrficamente a str2
str1 > str2 str1 es mayor lexicogrficamente a str2
-n str1 str1 es no nula y tiene longitud mayor a cero
-z str1 str1 es nula (tiene longitud cero)
6os n&meros enteros tambin se pueden comparar como tales$ seg&n la tabla siguiente>
Operador Verdadero si ...
-lt Less Than
-le Less than or Equal
-eq EQual
-ge Greater than or Equal
-gt Greater Than
-ne Not Equal
Para comprobar m%s de una condicin$ se pueden utili-ar los operadores lgicos ++$ ZZ y _$
encerrando cada condicin entre parntesis rectos$ WX. Seamos algunos e4emplos>
if [ $var = 'pepe' ] && [ $par -le 5 ]; then ...
# Dentro de una condicin los operadores lgicos cambian,
# se debe utilizar -a (para and) y -o (para or)
if [ $reintegro -le $saldo -a $reintegro -le $max_caja ]
# Para usar parntesis debemos incorporar caracteres de escape:
if [ \( $reintegro -le $saldo \) -a \( $reintegro -le $max_cajero \) ]
A continuacin veremos un listado con los operadores de comparacin de atributos de archivo>
Operador Verdad si:
-d archivo archivo existe y es un directorio
-e archivo archivo existe
-f archivo archivo existe y es un archivo regular
-h archivo archivo existe y es un enlace simblicos
-N archivo archivo existe y fue modificado desde la ltima lectura
-r archivo archivo existe y tenemos permiso de lectura
-s archivo archivo existe y no esta vaco
-w archivo archivo existe y tenemos permiso de escritura
-x archivo archivo existe y con permiso de ejecucin (o bsqueda si es directorio)
archivo1 -nt archivo2 archivo1 es ms reciente que archivo2 (newer than)
archivo1 -ot archivo2 archivo1 es ms antiguo que archivo2 (older than)
archivo1 -ef archivo2 archivo1 y archivo2 son el mismo archivo (equal file)
e.@= 'l bucle for
'ste bucle es como un Ifor eachI$ dado que no procesa un contador sino que se tratan las palabras
de una frase una a una. /u sintaxis es la siguiente>
@?
for var [in lista]
do
...
sentencias usando var
...
done
e.A= )ucles while y until
/u sintaxis es>
while comando
do
...
done
until comando
di
...
done
'n este caso el comando tambin puede ser una condicin encerrada entre WX.
e.1= 6a sentencia case
'n bash se puede hacer una comparacin de padrones con la cadena a examinar en un case$ la
sintaxis es la siguiente>
case cadena in
patron1)
sentencias ;;
patron2)
sentencias ;;
...
esac
Hada patrn puede estar formado por varios patrones separados por el car%cter Z. Huando cadena
cumple alguno de los patrones$ se e4ecutan sus correspondientes sentencias.
$) !omandos internos
5e los comandos internos del bash$ nos interesa mencionar por lo menos la existencia de los
siguientes>
echo$ printf$ read$ command$ enable$ test$ pwd$ exec$ fg$ export$ Fill$ 4obs
%II. Demonios y ser!icios) crontab
a) %aemons" servicios
,n daemon <5isF And 'xecution 3B9itor= es un proceso que$ generalmente$ tenemos cargado
en memoria$ esperando alguna se(al <proveniente de una interrupcin de dispositivo o del mismo
n&cleo= para despertarse y e4ecutar las funciones necesarias para tratarla. Aunque esta definicin
tambin puede incluir a otros procesos del sistema <lan-ados por los usuarios o por el mismo
sistema=$ un daemon tambin suele a4ustarse a esta forma de e4ecucin <aunque en algunos casos
especiales$ no=. 5e esta forma$ los daemons que tengamos cargados no ocupan la HP, mientras no
es estrictamente necesario y por muchos que tengamos en memoria siempre podremos traba4ar con
el ordenador sin problemas.
,n demonio <mala traduccin de la palabra original=$ en resumen$ es un programa que se e4ecuta
de forma autom%tica$ por regla general$ al iniciarse el sistema y que reali-a una tarea determinada$
sin intervencin del usuario. /e e4ecuta en segundo plano y por lo general solo se puede detener por
@@
intervencin directa del administrador o del usuario que lo inici.
6os demonios se inician o se paran mediante un shell script. 'stos se deben colocar en la carpeta
IGetcGinit.dI y respetan cierta estructura para poder ser mane4ados por utilidades especiali-adas del
sistema.
Por h%bito los scripts que mane4an los demonios del sistema responden$ como m#nimo$ a las
siguientes rdenes>
Iniciar el demonio: /etc/init.d/<nombre_demonio> start
Parar el demonio: /etc/init.d/<nombre_demonio> stop
Consultar el estado: /etc/init.d/<nombre_demonio> status
,n e4emplo conocido es cuando disponemos de un servidor de base de datos 3y/J6 en el
sistema. 6as rdenes necesarias para arrancarlos$ pararlo$ reiniciarlo y consultar su estado$ ser#an las
siguientes>
# /etc/init.d/mysql start
# /etc/init.d/mysql stop
# /etc/init.d/mysql restart
# /etc/init.d/mysql status
'n la mayor#a de los sistemas$ actualmente$ existe el comando IserviceI$ con el cual se puede
escribir lo anterior como sigue>
# service mysql start
# ..
6os demonios pueden iniciarse manualmente$ como acabamos de ver$ pero tambin pueden
hacerlo de forma autom%tica. Hay que tener en cuenta en qu niveles de e4ecucin van a actuar. 6os
demonios se podr%n e4ecutarGparar en los IrunlevelsI que nosotros queramos.
Para consultar el nivel en que nos encontramos existe la orden IrunlevelI. 'n general los niveles
del sistema son los siguientes>
0 - Halt. Detener el sistema
1 - Single-User Mode. Para tareas administrativas.
2 - Multi-User Mode. Sin servicios de red.
3 - Multi-User Mode with Networking. Inicio normal del sistema.
4 - Not used/User-definable. Para propsitos especiales.
5 - X11 o GUI. Entorno grfico.
6 - Reboot. Reiniciar el sistema.
Seremos ahora cmo crear un demonio sencillo. 6o primero que necesitamos es el script que se
encargar% de iniciar o detener el proceso>
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=[el ejecutable]
DAEMON_OPTS='opciones'
NAME=miscript
PIDFILE="/var/run/${NAME}.pid"
QUIET="--quiet"
START_OPTS="--start ${QUIET} --background --make-pidfile --pidfile ${PIDFILE} --exec $
{DAEMON} ${DAEMON_OPTS}"
STOP_OPTS="--stop --pidfile ${PIDFILE}"
OWNER=admin
LOGDIR=/var/log/${NAME}
test -x $DAEMON || exit 0
# SI NO EXISTE EL DIRECTORIO LOG, LOS CREAMOS
if [ ! -d "$LOGDIR" ]; then
mkdir -m 750 $LOGDIR
chown $OWNER:$OWNER $LOGDIR
fi
@A
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
su -c $DAEMON $START_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
su -c $DAEMON $STOP_OPTS
echo "$NAME."
rm $PIDFILE
;;
restart|force-reload)
echo -n "Restarting $DESC: "
su -c $DAEMON $STOP_OPTS
sleep 1
su -c $DAEMON $START_OPTS
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
6a variable 9A3' se deber% igualar al nombre del script y la variable 5A'3B9 al nombre del
e4ecutable o script a mane4ar como servicio. 'n la variable 6B8527 pondremos el directorio donde
quedar%n los archivos de log que use el script. 's un buena idea utili-ar GvarGlogG.
P25;26' ser% el archivo donde quedar% el identificador de proceso del demonio. Al igual que
6B8527$ es una buena idea el situarlo en GvarGrunG. BO9'7$ es el usuario due(o del proceso. /i
queda en IrootI solo el administrador podr% iniciar o parar el demonio.
6uego de construirlo$ se debe guardar en la carpeta GetcGinit.dG$ con permisos de e4ecucin>
chmod u+x /etc/init.d/miscript
Hon esto ya se puede iniciar el demonio con la orden> /etc/init.d/miscript start
,nos p%rrafos m%s atr%s nos refer#amos a los niveles de e4ecucin o IrunlevelsI. Para que un
demonio se inicie de forma autom%tica en uno u otro nivel est%n las carpetas GetcGrc<nivel=.d$ donde
<nivel= es el n&mero que identifica un nivel de e4ecucin. 6os demonios que deban iniciarse al
iniciar el entorno gr%fico D11$ que corresponde al nivel 1$ se deber#an situar en la carpeta
GetcGrc1.dG. Para esto se deber% crear un enlace al script de inicioGparada situado en GetcGinit.dG. :
tambin deber% existir un enlace que posibilite la accin de IstopI sobre el demonio cuando el
sistema entra en los niveles de e4ecucin ! y <apagar y reiniciar=.
/i nos referimos al script de e4emplo$ ImiscriptI$ deber#amos crear los siguientes enlaces>
# ln -s /etc/init.d/miscript /etc/rc5.d/S99miscript
# ln -s /etc/init.d/miscript /etc/rc6.d/K01miscript
# ln -s /etc/init.d/miscript /etc/rc0.d/K01miscript
6a I/I o la IMI indican si el demonio se inicia o se para <start$ Fill=. 6a numeracin es la indicacin
de en qu momento se reali-ar% la accin en relacin al resto de los scripts cuyos enlaces est%n
tambin en esos directorios <!! es la m%xima prioridad y 00 la &ltima=.
,n comando muy cmodo para utili-ar en estos casos es IchFconfigI$ con el cual se puede
instalar un script como daemon y$ adem%s$ activarlo o desactivarlo.
@1
a) !ron" !rontab
IcronI es el nombre del programa que permite a usuarios 6inuxG,nix e4ecutar autom%ticamente
comandos o scripts <grupos de comandos= a una hora o fecha espec#fica. 's usado normalmente
para comandos de tareas administrativas$ como respaldos$ pero puede ser usado para e4ecutar
cualquier orden$ incluso haciendo persistente su e4ecucin peridica. 'n definitiva$ IcronI es un
demonio que e4ecuta programas agendados.
'n pr%cticamente todas las distribuciones de 6inux se encuentra preinstalada una versin de
IcronI. 2gualmente es interesante se(alar que existe otro comando$ IatI$ que se puede utili-ar para
e4ecutar una orden a una hora espec#fica$ su diferencia con el demonio IcronI es que no es
persistente.
IcronI es un demonio <servicio=$ esto significa que solo requiere ser iniciado una ve-$
generalmente con el mismo arranque del sistema. 'l servicio de IcronI se llama IcrondI. Podemos
comprobar la disponibilidad de IcronI en el sistema de varias maneras>
# /etc/rc.d/init.d/crond status
# /etc/init.d/crond status
crond (pid 507) is running...
# service crond status
crond (pid 507) is running...
# ps -ef | grep crond
(si por alguna razn, cron no esta funcionando, hacemos:)
# /etc/rc.d/init.d/crond start
Starting crond: [ OK ]
(si el servicio no estuviera configurado para arrancar desde un principio, bastara con
gregarlo con el siguiente comando:)
# chkconfig --level 35 crond on
$ormas de usar %cron%
Hay tres maneras distintas de usarlo. 6a primera es utili-ando los directorios previstos para
e4ecuciones peridicas$ que se encuentran en Getc>
cron.hourly
cron.daily
cron.weekly
cron.monthly
/i se coloca un archivo tipo script en cualquiera de estos directorios$ entonces el script se
e4ecutar% cada hora$ cada d#a$ cada semana o cada mes$ dependiendo del directorio.
Para que el archivo pueda ser e4ecutado por el e4ecutable IcrondI$ tiene que ser algo similar a lo
siguiente>
#!/bin/sh
#script que genera un respaldo
cd /usr/documentos
tar czf * respaldo
cp respaldo /otra_directorio/.
'ste script debe ser e4ecutable$ por lo tanto$ si lo llamamos Irespaldo.shI$ tendr#amos que darle
permisos de e4ecucin>
# chmod 700 respaldo.sh
'ste permiso es de e4ecucin para el propietario del archivo$ en este caso solo IrootI podr%
e4ecutarlo porque es el usuario que est% e4ecutando el demonio IcrondI.
@
/i el script lo de4amos en el directorio GetcGcron.hourly$ etonces se e4ecutar% cada hora con un
minutos$ de todos los d#as.
'l segundo modo de e4ecutar o usar cron$ afectando a todos los usuarios del sistema$ es a travs
de manipular directamente un archivo que es consultado por IcrondI. 'n la mayor#a absoluta de las
distribuciones 6inux$ ese archivo se llama IcrontabI y se encuentra en Getc. 'n general su contenido
es como las siguientes l#neas>
#> cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
6as primeras cuatro l#neas son variables que indican lo siguiente>
/H'66 es el IshellI ba4o el cual se e4ecuta el IcronI. /i no se especifica$ se tomar% por defecto el
indicado en la l#nea correspondiente al usuario que este e4ecutando IcronI.
PA*H contiene o indica la ruta a los directorios en los cuales IcronI buscar% el comando a e4ecutar.
'ste path es distinto al path global del sistema o del usuario.
3A26 *B es a quien se le env#a la salida del comando <si es que este tiene alguna salida=. IcronI
enviar% un correo a quien se especifique en este variable$ es decir$ debe ser un usuario v%lido del
sistema o de alg&n otro sistema. /i no se especifica$ entonces IcronI enviar% el correo al usuario
propietario del comando que se e4ecuta.
HB3' es el directorio ra#- o principal del comando IcronI$ si no se indica entonces$ la ra#- ser% la
que se indique en el archivo correspondiente al usuario que e4ecuta IcronI.
5espus de lo anterior vienen las l#neas que e4ecutan las tareas programadas. 9o hay l#mites de
cuantas tareas pueda haber$ una por rengln. 6os campos <son "= que forman estas l#neas est%n
formados de la siguiente manera>
Minuto Hora DiaDelMes Mes DiaDeLaSeana !suario Coando
Minuto
Controla el minuto de la hora en que el comando ser ejecutado, este valor
debe de estar entre 0 y 59.
Hora
Controla la hora en que el comando ser ejecutado, se especifica en un
formato de 24 horas, los valores deben estar entre 0 y 23, 0 es
medianoche.
Da del Mes
Da del mes en que se quiere ejecutar el comando. Por ejemplo se indicara
20, para ejecutar el comando el da 20 del mes.
Mes
Mes en que el comando se ejecutar, puede ser indicado numricamente (1-
12), o por el nombre del mes en ingls, solo las tres primeras letras.
Da de la
semana
Da en la semana en que se ejecutar el comando, puede ser numrico (0-7)
o por el nombre del da en ingls, solo las tres primeras letras. (0 y 7 =
domingo)
Usuario Usuario que ejecuta el comando.
Comando
Comando, script o programa que se desea ejecutar. Este campo puede
contener mltiples palabras y espacios.
,n asterisco ^ como valor en los primeros cinco campos$ indicar% inicioEfin del campo$ sin
definicin alguna. ,n ^G@ en el campo de minuto indicar% cada @ minutos$ por e4emplo.
Para entender bien esto de los primeros 1 campos y el asterisco veamos algunos casos>
01 * * * * Se ejecuta al minuto 1 de cada hora de todos los das
@"
15 8 * * * A las 8:15 a.m. de cada da
15 20 * * * A las 8:15 p.m. de cada da
00 5 * * 0 A las 5 a.m. todos los domingos
* 5 * * Sun Cada minuto de 5:00a.m. a 5:59a.m. todos los domingos
45 19 1 * * A las 7:45 p.m. del primero de cada mes
01 * 20 7 * Al minuto 1 de cada hora del 20 de julio
10 1 * 12 1 A la 1:10 a.m. todos los lunes de diciembre
00 12 16 * Wen Al medioda de los das 16 de cada mes y que sea Mircoles
30 9 20 7 4 A las 9:30 a.m. del dia 20 de julio y que sea jueves
30 9 20 7 *
A las 9:30 a.m. del dia 20 de julio sin importar el da de la
semana
20 * * * 6 Al minuto 20 de cada hora de los sbados
20 * * 1 6 Al minuto 20 de cada hora de los sbados de enero
*ambin es posible especificar listas en los campos. 6as listas pueden estar en la forma de
1$?$@$A o en la forma de 1EA que ser#a lo mismo. IcronI$ de igual manera soporta incrementos en las
listas$ que se indican de la siguiente manera>
Valor o lista/incremento
5e nuevo$ es m%s f%cil entender las listas e incrementos con e4emplos>
59 11 * 1-3 1,2,3,4,5 A las 11:59 a.m. de lunes a viernes, de enero a marzo
45 * 10-25 * 6-7
Al minuto 45 de todas las horas de los das 10 al 25 de todos
los meses y que el da sea sbado o domingo
10,30,50 * * * 1,3,5
En el minuto 10, 30 y 50 de todas las horas de los das lunes,
mircoles y viernes
*/15 10-14 * * * Cada quince minutos de las 10:00a.m. a las 2:00p.m.
* 12 1-10/2 2,8 *
Todos los minutos de las 12 del da, en los das 1,3,5,7 y 9 de
febrero y agosto. (El incremento en el tercer campo es de 2 y
comienza a partir del 1)
0 */5 1-10,15,20-23 * 3
Cada 5 horas de los das 1 al 10, el da 15 y del da 20 al 23
de cada mes y que el da sea mircoles
3/3 2/4 2 2 2
Cada 3 minutos empezando por el minuto 3 (3,6,9, etc.) de las
horas 2,6,10, etc (cada 4 horas empezando en la hora 2) del da
2 de febrero y que sea martes
Homo se puede apreciar en el &ltimo e4emplo$ la tarea IcronI que estuviera asignada a ese rengln
con esos datos$ solo se e4ecutar#a si se cumple con los 1 campos <A95=. 's decir$ para que la tarea
se e4ecute tiene que ser un martes ? de febrero a las !?>!@. /iempre es un A95 booleano que solo
resulta verdadero si los 1 campos son ciertos en el minuto espec#fico.
'l caso anterior de4a claro entonces que el programa IcronI se invoca cada minuto y e4ecuta las
tareas que sus campos se cumplan en ese preciso minuto.
/iendo el usuario root$ es posible entonces$ modificar directamente crontab>
#> vi /etc/crontab
Por &ltimo$ la tercera forma de utili-ar IcronI est% pensada para el uso directo de cada usuario del
sistema. 6inux es un sistema multiusuario y IcronI es de las aplicaciones que soporta el traba4o con
varios usuarios a la ve-. Hada usuario puede tener su propio archivo crontab$ de hecho l se asume
que es el archivo crontab del usuario root$ aunque no hay problema que se incluyan otros usuarios$
y de ah# el sexto campo que indica precisamente quin es el usuario que e4ecuta la tarea y es
obligatorio.
Pero cuando los usuarios normales <e incluso root= desean generar su propio archivo de crontab$
entonces utili-aremos el comando .
@C
$> crontab -e
'n el directorio GvarGspoolGcronGWnom usuarioX$ que puede variar seg&n la distribucin$ se genera
un archivo IcronI para cada usuario$ este archivo aunque es de texto$ no debe editarse directamente.
Hon el comando Icrontab EeI se abrir% el editor por default <generalemente vi= con el archivo
llamado crontab vac#o$ donde el usuario ingresar% su tabla de tareas y lo guardar% con los comandos
propios del editor. Para listar el archivo con las tareas de IcronI$ se e4ecuta el comando>
$> crontab -l
%III. 'utoe!aluacin
'l cuestionario que sigue intenta confirmar la lectura atenta del material anterior. 9o todas las
respuestas est%n escritas en el texto previo$ por lo tanto al intentar responderlo for-osamente deber%
recurrir a otros materiales. 'ntendemos que es un buen e4ercicio tratar de hacer esta parte del
traba4o a conciencia y verificar$ posteriormente$ el acierto o error en las respuestas$ utili-ando esta
pr%ctica como complemento del aprendi-a4e. Pero lo fundamental es que no de4e de disfrutar y
compartir todo lo que descubra y aprenda.
9B*A> 6as pocas p%ginas anteriores$ como ya se se(al$ no cubren gran parte de los comandos
existentes en el entorno 6inux$ tanto internos como externos. *ampoco cubren las infinitas
combinaciones entre ellos$ por lo tanto sugerimos tener presente tres cosas> a= 'l &nico comando
que hay que saber> ImanI seguido del nombre de la utilidad cuyas opciones necesitamos conocer$ b=
,tili-ar la tecla \tab[ para que el sistema complete los comandos cuyo nombre no recordamos
<habr% que conocer las primeras letras$ por lo menos= y c= *ener a mano una conexin a 2nternet
para utili-ar cualquier buscador de la Oeb.
1" De los seis nombres siguientes marque cu%les 3' han contribuido a la construccin del
4ernel 5inu6"
!ngo 7olnar
5inus 8orvalds
/ichard 0tallman
David 0" 7iller
*aul Allen
2" 5a m%s adecuada definicin para la e6presin +distribucin de 5inu6+ es9
:na familia de compiladores de soft;are libre
:n conjunto de programas que se entregan junto al n<cleo 5inu6"
5a identificacin de un entorno gr%fico determinado
)ualquier sistema operativo que se distribuya con el n<cleo 5inu6
" 7arque los nombres que identifiquen entornos gr%ficos comunes de sistemas =3:/5inu6
>edora
?D$
5.D$
7andriva
=nome
@0
#" @&/>A Actualmente 5inu6 es el 4ernel predominante en el mundo de los smartphones
&erdadero
>also
(" @&/>A $n =3:/5inu6 e6iste un intBrprete de comandos con una sinta6is similar al lenguaje
)
&erdadero
>also
C" 5os paquetes de aplicaciones que tienen la e6tensin +rpm+ son caracterDsticos de las
distribuciones @marque por lo menos dosA
:buntu
>edora
)entos
Debian
0u0$
," $l directorio de trabajo del administrador del equipo es
/var
/dev
/root
/proc
/home/administrador
no tiene directorio
-" 5a particin de intercambio @s;apA se monta en
/mnt
/home/s;ap
/s;ap
/root
3o se monta
2" 5as configuraciones generales de todos los programas en 5inu6 deberDan usar el directorio9
/proc
/etc
/root
/opt
/dev
/var
10" *ara cambiar el nombre del directorio +contabilidad+ por el nombre +trabajo+1 en el directorio
actual1 haremos
mv contabilidad trabajo
rm contabilidad trabajo
cp contabilidad trabajo
mv trabajo contabilidad
A!
11" *ara obtener m%s informacin sobre el uso del comando +usermod+1 hay que ejecutar la
orden
man usermod
usermod E
usermod help
help usermod
12" FDe la siguiente lista1 marcar los nombres de sistemas de archivo que no son utilizados
por ninguna distribucin de 5inu6 como almacenamiento normalE
e6t2
38>0
reiserf
e6t#
>A82
e6t
1" F)on quB comando se crea un sistema de archivosE @dar formato a un dispositivo de
almacenamientoA
fdis4
crfs
parted
m4fs
format /:
fs
1#" F)u%l de los comandos siguientes puede ser utilizado para formatear una particinE
@Asuma que la particin requerida e6iste en el particionado lgico correspondienteA
m4fs Gt msdos /dev/sda1
m4fs e6t2 /dev/null
m4fs Gt e6t /dev/sda#
m4f6 GGtypeHe6t# /dev/sd2
1(" FIuB atributos marcar%n un archivo conteniendo un script bash como ejecutable1 al aplicar
el comando +chmod+E
CCC
,((
,CC
,,,
###
1C" 0uponga que ha creado la aplicacin +miaplica+ y la copi al directorio /usr/local/bin para
que se encuentre en el path" 0i quiere que todos los usuarios del sistema puedan correr
esa aplicacin1 Fcu%l de los siguientes comandos permitir% el acceso apropiadoE
chgrp bin /usr/local/bin/miaplica
chmod oJ6 /usr/local/bin/miaplica
umas4 0022 /usr/local/bin/miaplica
cho;n ,(( /user/local/bin/miaplica
A1
1," :n usuario est% conectado a un servidor 5inu61 trabajando en una shell" F)u%l es la mejor
manera de ingresar como +root+ al sistema1 desde esa shellE
chuser root
login root
su G
root
1-" )ompilando el fuente +micodigo"c+1 el programa +gcc+ le informa un error en la lDnea 1(-C1
Fcon quB comando de los siguientes puede acceder directamente a ver la lDnea y editarla
si fuera precisoE
vi micodigo"c J1(-C
grep micodigo"c Gli 1(-C
vi micodigo"c @y luego presionar +91(-C+1 KenterL1 para acceder a la lDneaA
cat micodigo"c M grep Gline 1(-C
less micodigo"c Gl 1(-C
12" F)u%l de las siguientes secuencias de teclas puede guardar los cambios realizados
durante una sesin con el editor +vi+ y terminar la aplicacinE
KescL9q;
KescL9s6
KescL9;q
KescL96s
20" :sted ha bajado de !nternet el empaquetado +unaappG1""-"src"tar"bz2+ y ha quedado en el
directorio /home/usuario" F)u%l de los siguientes comandos es el que ejecutar%1
razonablemente1 en primera instancia para instalar la aplicacin +unaapp+E
rpm :vh unaappG1""-"src"tar"bz2
tar 6vfj unaappGN
bunzip2 unaappG1""-"src"tar"bz2 M tar tvf G
cat unaappG1""-N M tar 6vfz G
dp4g G5 unaappG1""-"src"tar"bz2
21" De los siguientes archivos1 Fcu%l es utilizado para definir alias para direcciones !*1
especialmente en una red localE
/etc/hosts
/etc/services
/etc/aliases
/etc/net;or4s
/home/OusuarioP/"aliases
22" F)u%l de las siguientes utilidades de red 8)*/!* es la mejor herramienta a utilizar para
establecer si una determinada direccin !* es accesible en virtud de la configuracin de
red actualE
finger
ping
route
host
A?
2" F)u%l de las siguientes utilidades de red 8)*/!* es el mejor comando para determinar la
7A) de una tarjeta de red instalada en el sistemaE
netstat
ethers
ifconfig
arp;atch
ifup
2#" F)u%l de las siguientes utilidades de red 8)* / !* es la mejor herramienta para utilizar en
la identificacin de los cuellos de botella entre m%quinas remotas en la redE
$specDficamente1 asumir que un objetivo en esta depuracin es determinar los caminos
recorridos en el reenvDo de paquetes de red1 e identificar los routers intermedios que
pueden descartar paquetes"
route
netstat
ping
traceroute
dig
2(" $scriba lDnea a lDnea los mensajes que se ver%n en el shell del sistema cuando el usuario
que ejecut el comando siguiente1 desde una estacin de trabajo en la 5A3 de =eocom9
curso01 home # ssh -t 192.168.250.65 ssh -t -p 11000 -L 3308:190.0.148.132:1107 \
geocom@190.0.148.132 ssh -L 1107:tacuarembo.db.k:3306 geocom@tacuarembo.db.k
haya terminado su trabajo y digite +e6it+ en el prompt remoto" @ayuda9 son # lDneasA
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2C" 5a empresa AAA publica un punto de acceso a su infraestructura de red por la !p
200"#0"1--"1(1 puerto 22" $ste servidor permite llegar a la red interna de AAA1 en particular
al servidor en el que tenemos que trabajar1 con !p 10"1"2"( y cone6in ssh en el puerto
1100" FIuB comando de los siguientes nos permite ingresar al shell del servidor de la 5A3
interna para comenzar nuestro trabajoE
ssh 10"1"2"( G* 1100
ssh G* 1100 200"#0"1--"1( M ssh 10"1"2"(
telnet 200"#0"1--"1( M ssh G* 1100 10"1"2"(
ssh Gt 200"#0"1--"1( ssh G* 1100 10"1"2"(
ssh G* 22 200"#0"1--"1( @y despuBs habr% que ingresar al servidor internoA
2," F)u%les de los siguientes protocolos o herramientas es lo mejor para copiar varios
archivos entre m%quinas de una red1 de manera que su contenido estB protegido frente a
cualquier intruso que utilice un analizador de paquetesE
ssh / scp
httpd / 005
gpg / snmp
A@
nfs / md(sum
rsync
2-" )uando se realiza una auditorDa de seguridad en un sistema 5inu61 un problema conocido
a identificar son las aplicaciones que est%n configuradas para ejecutarse como root @o
como otras cuentas de permisos altosA1 esas aplicaciones pueden ser invocadas para
provocar vulnerabilidades tales como desbordamientos de b<fer" F)u%l de las siguientes
lDneas de comandos se puede utilizar para hacer un listado inicial de esas aplicaciones1
para su an%lisisE
suid GGlist /N
chmod G/ uGs "/N
find / Gperm J #000 Guser root
chgrp Qfind / GsuidQ
22" FIuB comando de los siguientes nos permite ver r%pidamente la lista de puertos que est%n
abiertos y escuchando en nuestro equipo1 tanto en el protocolo !*v# como en !*vCE
tcpdump GGlist M grep 5!08$3
openports
netstat Gnat M grep 5!08$3
nmap localhost Gp 1GC(000
0" F)u%l de los siguientes comandos o secuencia1 le permite e6aminar cu%ntas veces el
usuario remoto +4oni4a+ ha abierto un shell seguro en el sistemaE
cat auth"log M grep sshd K tmpver"t6t
vi tmpver"t6t
cd /var/log
less /proc/4msg
ssh GGlog M more
vi /var/log/messages
grep Gc +sshd"N4oni4a+ auth"log
@dividir el n<mero entre 2A
1" 0uponga que en el directorio actual tiene varios archivos cuyo nombre cumple con la
siguiente e6presin regular9 +archO0G2P+" F)on cual de los comandos siguientes puede crear
un reporte que le permita ver su contenido lado a lado para compararlosE
ls fileO0G2P M 6args paste M less
paste Qls fileO0G2PQ L report R less report R rm report
cat fileO0G2P M paste G M more M less
ls fileO0G2P M tee report M paste Qcat reportQ
ls fileO0G2P M tee report M 6args paste M more
2" Analizando un archivo de log de 8omcat1 el +catalina"out+1 usted llega a la conclusin que
deberDa poder no solo listar la lDnea que contiene la palabra +0$&$/$+1 sino tambiBn dos
lDneas antes y dos lDneas despuBs1 viendo en un color diferente la palabra por la cual va a
filtrar" F)u%l de los siguientes comandos eligirDaE
cat catalina"out M grep S0$&$/$T
less Gl 2 catalina"out M grep 0$&$/$
grep GA2 GU2 GGcolorHal;ays 0$&$/$ catalina"out
AA
cat catalina"out M grep 0$&$/$ GA2 GU2
cat catalina"out L color VW-002(0V M grep 0$&$/$
" :sted est% en un directorio que contiene cientos de archivos y una decena de directorios"
Debe revisar los directorios e6istentes1 viBndolos ordenados por fecha" FIuB comando de
los siguientes le permite hacer eso r%pidamenteE
ls Glrt M grep Xd
sort Gt + + G4 C1Cn G4 ,
ls Gd Gl Grt
find N Gma6depth 0 Gtype d M grep sort Gt + + G4 C
#" 0e tiene un archivo llamado +lista+ que contiene una serie de palabras1 una por lDnea" :sted
debe hacer un reporte que contiene una lista numerada de las primeras cinco palabras1 de
acuerdo con el orden alfabBtico" F)u%l de las siguientes lDneas de comandos se puede
utilizar para mostrar el resultado de este reporte por la consolaE
sort lista M nl M head G(
split G1 lista R cat 6args M head G(
nl lista M sort M sed +/X OX12#(P/d+
nl lista M sort M head G(
(" FIuB hace el comando psE
!mprime el directorio en formato postscript
7uestra el status del puerto 5*81
7uestra los procesos que est%n corriendo en el sistema
*roduce estadDsticas del sistema
3inguna de las respuestas anteriores es correcta
C" 0uponga que el archivo +lista+ contiene una lista de nombres en la forma +3ombre Apellido+1
uno por lDnea" $stos nombres est%n desordenados y usted debe mostrarlos ordenados por
apellido1 sin embargo1 el formato de los nombres de cada lDnea debe seguir siendo el
mismo" F)u%l de los siguientes comandos no seria una lista debidamente ordenada de
nombres sobre la consolaE
cut Gf 2 Gd S"T lista M paste lista G M sort G4 M cut Gf 1
sort G42 lista
set +s/Y@ Y;NYA Y@Y;NYA/Y2 Y1 Y2/+ lista M sort M cut Gf 2G Gd S"T
cut Gf 2 Gd S"T lista M sort
cut Gf2 Gd S"T lista M paste G lista M sort M cut Gf 2
," $l comando +ps GA+ muestra una lista ordenada de todos los procesos en ejecucin1 con el
!D de proceso en el primer campo y los campos est%n separados por espacios"
0upongamos que desea mostrar en la pantalla una lista de los cinco procesos m%s
recientemente lanzados @son los que tienen los identificadores de proceso m%s altosA"
F)on cu%l de los siguientes comandos se mostrar%n los elementos que deseeE
ps GA M tail G( M cut Gf 1 Gd S"T
ps GA M tail G( M set +s/O"PNO0G2PN//+
ps GA M head G( M nl
ps GA M tac M head G( M cut Gb 1G(
A1
-" $stamos trabajando en =3:/5inu6 y se produce un error en uno de nuestros programas
que est% corriendo" FIuB comando se debe utilizar para terminar el proceso de dicho
programaE
stop
4ill
end
KctrlLKaltL D$5
;ait
2" :sted ejecuta el comando +jobs+1 obteniendo el siguiente resultado9
# jobs -l
[1] 5110 Running kedit &
[2]- 5382 Stopped (signal) pine
[3]+ 5457 Stopped (tty output) vi
F)u%l de los siguientes comandos se debe utilizar para pasar el foco de su shell a la
aplicacin +vi+E
bg Z
fg Z
top Gp (#(,
s;itch Z(#(,
#0" F$n cu%l de los siguientes archivos o directorios se deben hacer modificaciones para
configurar los directorios locales que estar%n disponibles para una cone6in remota a
travBs del servicio 3>0 @3et;or4 >ile 0ystemAE
/etc/fstab
/mnt/nfs
/etc/e6ports
/etc/smb"conf
#1" *reste atencin a la siguiente instant%nea de la informacin brindada por el comando +top+9
# top
top - 16:47:19 up 1:38, 4 users, load average: 0,30, 0,17, 0,20
Tasks: 208 total, 2 running, 206 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2,9 us, 8,8 sy, 0,0 ni, 87,1 id, 38,0 wa, 0,0 hi, 0,2 si, 0,0 st
KiB Mem: 12221788 total, 3876192 used, 8345596 free, 147876 buffers
KiB Swap: 12207100 total, 0 used, 12207100 free, 1636856 cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2594 administ 20 0 1703m 1,1g 1,1g S 74,7 9,4 4:18.02 VirtualBox
4350 mysql 20 0 949m 134m 10m S 15,6 12,1 0:05.03 mysqld
10194 administ 20 0 2721m 72m 35m S 2,7 0,6 0:42.39 kwin
4881 root 20 0 190m 41m 27m S 2,0 0,3 1:35.05 Xorg
21983 root 20 0 507m 17m 11m S 1,0 0,1 0:04.78 gnome-terminal
4188 administ 20 0 382m 27m 15m S 0,7 0,2 0:31.27 plugin-containe
2489 root 20 0 0 0 0 S 0,3 0,0 0:00.46 kworker/0:2
2558 administ 20 0 230m 10m 7136 S 0,3 0,1 0:07.03 VBoxSVC
3014 root 20 0 4376 944 528 S 0,3 0,0 0:03.14 acpid
10171 administ 20 0 676m 29m 18m S 0,3 0,2 0:02.67 kded4
Describa brevemente a continuacin quB parte de esta informacin llama la atencin y a
cu%l de los procesos que se visualizan en la lista deberDa ser atribuida"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
A
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#2" 0uponga que tiene una aplicacin cuyo comportamiento depende del valor de la variable
de ambiente &A/1" F)u%l de los siguientes comandos debe utilizarse en un shell script
bash para cargar y persistir el valor de dicha variableE
e6port [&A/1HvalorR echo [&A/1
set &A/1Hvalor
&A/1Hvalor R e6port &A/1
echo [&A/1Hvalor
declare G6 &A/1Hvalor
#" F)u%l de las lDneas siguientes puede ser utilizada en un shell script bash para ejecutar
todos los archivos ejecutables e6istentes en un directorioE
for i in N R do \ case O G6 [i P R \ "/[iR ] esac ] done
;hile i in N R do \ if O G6 [i P R then \ "/[iR ] fi ] done
foreach i in N R do \ if O G6 [i P R then \ "/[iR ] done ]
for i in N R do \ if O G6 [i P R then \ "/[iR ] fi ] done
##" 0i acaba de instalar una aplicacin poco conocida1 que corre como un demonio y sabe que
el proceso de instalacin crea un script para lanzar la misma1 Fcon quB lDnea de las
siguientes podrDa identificar r%pidamente el nombre del servicio para dicha aplicacinE
find / Gname Onombre appP
grep Onombre appP N G/
ls Glrt /etc/init"d/
ls Gt /etc/init"d
#(" 5a mayorDa de las distribuciones =3:/5inu6 para servidores utilizan scripts para lanzar los
demonios que corren en el sistema" $sos scripts generalmente comienzan con las
siguientes lDneas9
#!/bin/sh
### BEGIN INIT INFO
# Provides: ntp
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 1
# Short-Description: Start NTP daemon
### END INIT INFO
las que facilitan la administracin del los servicios del sistema" F)u%l de los siguientes
comandos con seguridad utiliza estas lDneas cuando lo invocamos para establecer el
comportamiento de un servicio en el sistemaE
service
lsmod
ch4config
file
A"
#C" $l siguiente es el contenido del archivo /etc/crontab de un servidor 5inu69
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
23 4 * 1,6 1 root run-parts /etc/cron.special
&iendo esas lDneas1 marquB cu%l de las siguientes afirmaciones es verdadera9
$l archivo de comandos +/etc/cron"special+ se ejecuta una vez por semana1 los lunes"
$l contenido del directorio +/etc/cron"special+ se ejecutan en enero y junio"
Durante algunas partes del a^o +/etc/cron"special+ es ejecutado un minuto despuBs de
+/etc/cron";ee4ly+"
Durante el mes de marzo1 +/ etc/cron"special+ se ejecuta los lunes"
#," :sted ha escrito un script bash que se debe ejecutar escribiendo una lDnea como la
siguiente9
# > ./mibash param1 param2 param3
$l script no tiene control de los par%metros al inicio1 por lo tanto se pide que escriba a
continuacin las lDneas @no m%s de -A que le permitan validar que la cantidad de
par%metros es correcta y1 en caso contrario1 emitir un mensaje mostrando cmo se debe
utilizar1 en el cual se deber% incluir el nombre del script"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#-" F$n cu%l archivo de configuracin del sistema1 de los siguientes1 debo modificar una lDnea
sustituyendo un ( por un 1 para cambiar el nivel de ejecucin del servidor desde el modo
gr%fico al modo te6toE
/etc/fstab
/var/spool/init
/etc/inittab
/etc/sysconfig/init"conf
#2" $scriba las lDneas de comandos que necesitara introducir en el interfaz de usuario de la
lDnea de comandos1 para realizar las tareas que se indican" )ada respuesta deber% ser en
una <nica lDnea de cdigo y estar constituida por un solo comando"
Averiguar todos los usuarios que tiene el sistema
1" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
AC
=uardar en una variable la posicin actual del usuario en el %rbol de directorios"
2" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Dirigirse al directorio raDz del sistema
" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Abrir directamente1 sin cambio de directorio ni en este y ni en los siguientes pasos1 el
archivo +/etc/apache2/httpd"conf+ @asuma una vez que lo ha abierto lo cierra directamente
sin hacer cambiosA
#" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
)rear el directorio +old+ en su directorio raDz @el directorio raDz del usuarioA
(" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
)opiar el archivo anteriormente mencionado en #"1 al reciBn creado directorio cambi%ndole
el nombre por +httpd"conf"old+
C" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
7ueva el archivo anteriormente creado al directorio padre de donde dicho archivo se
encuentra
," """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
!ndique en quB directorio se encuentra finalmente el archivo +httpd"conf"old+
-" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
!mprima en pantalla el contenido de httpd"conf"old
2" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
/egrese al directorio del que originalmente parti utilizando la variable guardada al inicio
10" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
A0
'nexo '
Estableciendo una V"* a tra!+s de un t,nel ((-
#!/bin/bash
# "start_vpn.sh", version 0.2 (04/2013)
################################################################################
########################## INPUT ARGUMENTS #####################################
################################################################################
#
# Change these to match your network setup
#
## REMOTE_IP : That's the remote IP you can SSH into.
## REMOTE_SSH_PORT : That's the port you use to SSH into ${REMOTE_IP}
## LOCAL_VPN_NET : The local LAN addressable space (ex: "in my local LAN all
## computers are '10.10.1.x'" --> "10.10.1.0/24")
## REMOTE_VPN_NET : The remote LAN addressable space (ex: "in the school
## network all computers are '10.10.1.x'" --> "10.10.2.0/24")
REMOTE_IP=x.x.x.x
REMOTE_SSH_PORT=22
LOCAL_VPN_NET=192.168.1.0/24
REMOTE_VPN_NET=192.168.2.0/24
# NOTE: LOCAL_VPN_NET and REMOTE_VPN_NET must be different.
# If both networks have the same ehem... network... this won't work
################################################################################
########################## END OF INPUT ARGUMENTS ##############################
################################################################################
#
# Tunnel device arguments
#
## LOCAL_TUNNEL_IP : The IP the local tunnel interface will be created with.
## REMOTE_TUNNEL_IP : The IP the remote tunnel interface will be created with.
## LOCAL_TUNNEL_DEVICE_NUMBER : The number to use when creating the local tunX interface.
## REMOTE_TUNNEL_DEVICE_NUMBER: Same as before, but with the remote tunY interface.
LOCAL_TUNNEL_IP=10.10.254.253
REMOTE_TUNNEL_IP=10.10.254.254
LOCAL_TUNNEL_DEVICE_NUMBER=9
REMOTE_TUNNEL_DEVICE_NUMBER=8
# Make sure we are root
#
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root. Try with 'sudo'" 1>&2
echo "Exiting..."
exit -1
fi
# Exit if any command fails
#
set -e
# Try to log in using public key. If it does not work, use "ssh-copy-id" to make
# it work from now on. This way, we will avoid having to ask for the password each time.
#
echo "> Cheking public key authentication with the remote server..."
if ssh -o PreferredAuthentications=publickey -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} true
then
echo "> OK"
echo ""
else
echo "> KO!"
echo "> The remote server does NOT allow public key authentication."
echo "> Let's try to fix that."
echo "> Enter the root password on the remote server when prompted..."
echo ""
1!
if ssh-copy-id "-p ${REMOTE_SSH_PORT} root@${REMOTE_IP}"
then
echo ""
echo "> Done! Public key authentication should work from now on."
echo ""
else
echo "> KO!"
echo "> There were problems trying to ssh as 'root' into ${REMOTE_IP}."
echo "> Make sure you can manually execute this command and try again:"
echo ">"
echo "> # ssh root@${REMOTE_IP}"
echo ">"
echo "> In case the root account is not enabled (ex: Ubuntu) in the"
echo "> remote computer, remember to first log in into any other"
echo "> account (in the sudo'ers group) and execute this:"
echo ">"
echo "> # sudo passwd root"
echo ">"
echo "Exiting..."
exit -1
fi
fi
echo "> Cheking needed binaries are installed in local and remote computer..."
if which ip >/dev/null && \
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} which ip iptables >/dev/null
then
echo "> OK"
echo ""
else
echo "> You need the 'ip' (from the 'iproute' package) and 'iptables' (from the"
echo "> 'iptables' package) network configuration utilities before proceeding."
echo "> Install them in both the local and remote computers and then re-run this"
echo "> script."
echo "Exiting..."
exit -1
fi
echo "> Obtaining local interface associated to ${LOCAL_VPN_NET}..."
if [ -z ${LOCAL_VPN_IFACE} ]
then
LOCAL_VPN_IFACE=`ip route show | grep ${LOCAL_VPN_NET} | awk '{print $3}'`
fi
if [ -z ${LOCAL_VPN_IFACE} ] || ! ip address show dev ${LOCAL_VPN_IFACE} &>/dev/null
then
echo "> KO! (iface=${LOCAL_VPN_IFACE})"
echo "> Cannot automatically find out which interface (wlan0, eth1, etc...)"
echo "> (in the local computer) is associated to local network ${LOCAL_VPN_NET}."
echo "> In order to fix this, manually export from the shell a variable"
echo "> called 'LOCAL_VPN_NET' and try again."
echo "> Example:"
echo ">"
echo "> # export LOCAL_VPN_NET=eth0; ./start_vpn.sh"
echo ">"
echo "Exiting..."
exit -1
else
echo "> OK (iface=${LOCAL_VPN_IFACE})"
echo ""
fi
echo "> Obtaining remote interface associated to ${REMOTE_VPN_NET}..."
REMOTE_VPN_IFACE=`ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} ip route show | grep ${REMOTE_VPN_NET}
| awk '{print $3}'`
if [ -z ${REMOTE_VPN_IFACE} ] || ! ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} ip address show dev $
{REMOTE_VPN_IFACE} &>/dev/null
then
echo "> KO! (iface=${LOCAL_VPN_IFACE})"
echo "> Cannot automatically find out which interface (wlan0, eth1, etc...)"
echo "> (in the remote computer) is associated to remote network ${LOCAL_VPN_NET}."
echo "> In order to fix this, manually export from the shell a variable"
echo "> called 'REMOTE_VPN_NET' and try again."
echo "> Example:"
echo ">"
echo "> # export REMOTE_VPN_NET=eth0; ./start_vpn.sh"
11
echo ">"
echo "Exiting..."
exit -1
else
echo "> OK (iface=${REMOTE_VPN_IFACE})"
echo ""
fi
echo "> REMOTE: Creating tunnel interface..."
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} ip tuntap del dev tun${REMOTE_TUNNEL_DEVICE_NUMBER} mode
tun || true
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} ip tuntap add dev tun${REMOTE_TUNNEL_DEVICE_NUMBER} mode
tun
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} ip link set tun${REMOTE_TUNNEL_DEVICE_NUMBER} up
echo "> OK"
echo ""
echo "> REMOTE: Configuring tunnel interface..."
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} ip address add ${REMOTE_TUNNEL_IP} peer $
{LOCAL_TUNNEL_IP} dev tun${REMOTE_TUNNEL_DEVICE_NUMBER}
echo "> OK"
echo ""
echo "> REMOTE: Enabling IP forwarding and NAT..."
sysctl -w net.ipv4.ip_forward=1 >/dev/null
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} iptables -I FORWARD 1 -i tun$
{REMOTE_TUNNEL_DEVICE_NUMBER} -o ${REMOTE_VPN_IFACE} -j ACCEPT
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} iptables -I FORWARD 1 -i ${REMOTE_VPN_IFACE} -o tun$
{REMOTE_TUNNEL_DEVICE_NUMBER} -j ACCEPT
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} iptables -t nat -A POSTROUTING -s ${LOCAL_TUNNEL_IP} -o
${REMOTE_VPN_IFACE} -j MASQUERADE
echo "> OK"
echo ""
# Add a route/gw to the local network in the remote computer
echo "> REMOTE: Adding route (gw) to the local network..."
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} ip route add ${LOCAL_VPN_NET} dev tun$
{REMOTE_TUNNEL_DEVICE_NUMBER} || true
echo "> OK"
echo ""
echo "> LOCAL: Creating tunnel interface..."
ip tuntap del dev tun${LOCAL_TUNNEL_DEVICE_NUMBER} mode tun || true
ip tuntap add dev tun${LOCAL_TUNNEL_DEVICE_NUMBER} mode tun
ip link set tun${LOCAL_TUNNEL_DEVICE_NUMBER} up
echo "> OK"
echo ""
echo "> LOCAL: Configuring tunnel interface..."
ip address add ${LOCAL_TUNNEL_IP} peer ${REMOTE_TUNNEL_IP} dev tun${LOCAL_TUNNEL_DEVICE_NUMBER}
echo "> OK"
echo ""
echo "> LOCAL: Enabling IP forwarding and NAT..."
sysctl -w net.ipv4.ip_forward=1 >/dev/null
iptables -I FORWARD 1 -i tun${LOCAL_TUNNEL_DEVICE_NUMBER} -o ${LOCAL_VPN_IFACE} -j ACCEPT
iptables -I FORWARD 1 -i ${LOCAL_VPN_IFACE} -o tun${LOCAL_TUNNEL_DEVICE_NUMBER} -j ACCEPT
iptables -t nat -A POSTROUTING -s ${REMOTE_TUNNEL_IP} -o ${LOCAL_VPN_IFACE} -j MASQUERADE
echo "> OK"
echo ""
echo "> LOCAL: Adding route (gw) to the remote network..."
ip route add ${REMOTE_VPN_NET} dev tun${LOCAL_TUNNEL_DEVICE_NUMBER} || true
echo "> OK"
echo ""
# Finally, connect the tunnel ends with ssh. But first, define a "cleanup"
# function that will be used when exiting from the ssh session with CTRL+D + CTRL+C
# Clean up function
function cleanup {
echo "> VPN connection closed. Cleaning up..."
# Remote computer cleanup
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} iptables -t nat -D POSTROUTING -s ${LOCAL_TUNNEL_IP}
-o ${REMOTE_VPN_IFACE} -j MASQUERADE
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} iptables -D FORWARD -i ${REMOTE_VPN_IFACE} -o tun$
{REMOTE_TUNNEL_DEVICE_NUMBER} -j ACCEPT
1?
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} iptables -D FORWARD -i tun$
{REMOTE_TUNNEL_DEVICE_NUMBER} -o ${REMOTE_VPN_IFACE} -j ACCEPT
ssh -p ${REMOTE_SSH_PORT} root@${REMOTE_IP} ip tuntap del dev tun${REMOTE_TUNNEL_DEVICE_NUMBER}
mode tun
# Local computer cleanup
iptables -t nat -D POSTROUTING -s ${REMOTE_TUNNEL_IP} -o ${LOCAL_VPN_IFACE} -j MASQUERADE
iptables -D FORWARD -i ${LOCAL_VPN_IFACE} -o tun${LOCAL_TUNNEL_DEVICE_NUMBER} -j ACCEPT
iptables -D FORWARD -i tun${LOCAL_TUNNEL_DEVICE_NUMBER} -o ${LOCAL_VPN_IFACE} -j ACCEPT
ip tuntap del dev tun${LOCAL_TUNNEL_DEVICE_NUMBER} mode tun
echo "> OK"
echo ""
echo "> Have a nice day :)"
}
# Execute it when CTRL+C (SIGINT) is detected
trap cleanup SIGINT
echo "> Connecting bridge ends..."
echo "> This will open an SSH session to the remote server. It might take a"
echo "> few seconds, so wait until you see the remote computer prompt."
echo "> Once this happens, you will be able to access any computer on the"
echo "> remote network (that's ${REMOTE_VPN_NET}). Try it!"
echo ">"
echo "> NOTE: To finish the VPN connection, just close (CTRL+D plus CTRL+C)"
echo "> the remote shell and wait for the clean up functions to finish"
echo "> (it will take a few seconds, so don't press CTRL+C for a second"
echo "> time!)"
echo ""
ssh -w ${LOCAL_TUNNEL_DEVICE_NUMBER}:${REMOTE_TUNNEL_DEVICE_NUMBER} -o Tunnel=point-to-point -p $
{REMOTE_SSH_PORT} root@${REMOTE_IP}
echo ""
# NOTE: In order to exit the ssh session, CTRL+D is not enough (the ssh server
# won't return control to the local process. That's why CTRL+C also needs to be
# pressed, and that's why we have to capture SIGINT and execute the cleanup
# afterwards.
1@

Das könnte Ihnen auch gefallen