viernes, 27 de mayo de 2011

Hola mundo en C con Ubuntu

Veremos cómo hacer nuestro primer programa en C, configurando su Makefile y utilizando Ubuntu.
Con un fichero Makeefile tendremos una sencilla forma de organizar la compilación de nuestros ficheros. Lo haremos con un ejemplo sencillo.

Lo primero que haré será crear un directorio que lo llamaremos Hola_Mundo dentro del directorio home, luego crearemos los siguientes tres ficheros en el directorio Hola_Mundo.
hellomake.c, hellofunc.c y hellomake.h
$ mkdir Hola_Mundo
$ cd Hola_Mundo/
$ touch holamake.c
$ touch holafunc.c
$ touch holamake.h
Abriremos cada uno de los ficheros y escribiremos el siguiente código.

holamake.c
#include 

int main() {
  // Llama a una función en otro fichero
  PrintHola();

  return(0);
}

holafunc.c
#include 

void PrintHola(void) {

  printf("Hola Mundo!!\n");

  return;
}

holamake.h
/*
incluimos un fichero
*/

void myPrintHello(void);

Para compilar este código, sólo tendremos que ejecutar la siguiente orden:
gcc -o holamake holamake.c holafunc.c -I.
Con este coman compilaremos los ficheros .c y crearemos un ejecutable que se llamará holamake. Con la opción -I decimos el directorio donde debe buscar gcc y con . decimos que en el directorio actual.

Si nos fijamos, con este sistema de compilación, nos podemos encontrar problemas cuando el proyecto crezca, esta herramienta se nos quedará pequeña.

Un primer paso para crear nuestro Makefile y hacer que sea más sencilla la compilación de nuestro proyecto.
CC=gcc
CFLAGS=-I.

holamake: holamake.o holafunc.o 
  $(CC) -o holamake holamake.o holafunc.o  $(CFLAGS)
Ahora cuando invoquemos la orden
make holamake
nos creará el ejecutable holamake según las reglas definidas en el fichero Makefile

sólo nos quedará ejecutar
./holamake

Por consola Nos mostrará

Hola Mundo!!

jueves, 5 de mayo de 2011

Script Bash para modificar algunas opciones de .bashrc

Presentamos un script en bash para modificar algunas propiedades del fichero .bashrc

#!/bin/bash 


function menu(){
echo "1. Cambia HISTCONTROL"
echo "2. Cambia HISTSIZE"
echo "3. Cambia UMASK"
echo "4. Cambia alias"
echo "5. Salir"
}

function cambia_historycontrol(){
 echo "Introduce el nuevo valor de HISTCONTROL"

 read hist
 rep=`cat $1'/.bashrc'  | grep HISTCONTROL | wc -l`
 if [ rep -eq 0 ]
 then
  echo 'HISTCONTROL='$hist >> $1'/.bashrc'  #añadimos al final
 else
  sed 's/HISTCONTROL=.*/HISTCONTROL='$hist'/' $1'/.bashrc' > $1'/.bashrc' #modificamos su valor
 fi
}

function cambia_historysize(){
 echo "Introduce el nuevo valor de HISTSIZE"
 read hist
 rep=`cat $1'/.bashrc'  | grep HISTSIZE | wc -l`
 if [ rep -eq 0 ]
 then
  echo 'HISTSIZE='$hist >> $1'/.bashrc' #añadimos al final
 else
  sed 's/HISTSIZE=.*/HISTSIZE='$hist'/' $1'/.bashrc' > $1'/.bashrc' #modificamos su valor
 fi
}

function cambia_umask(){
 echo "Introduce el nuevo valor de UMASK"
 read mask
 rep=`cat $1'/.bashrc'  | grep $mask | wc -l`
 if [ $rep -eq 0 ]
 then
  echo 'umask='$mask >> $1'/.bashrc' #añadimos al final
 else
  sed 's/umask=.*/umask='$mask'/' $1'/.bashrc' > $1'/.bashrc' #modificamos su valor
 fi
}

function cambia_alias(){
 echo "Introduce un alias"
 read alia
 num=`cat $1'/.bashrc'  | grep '^'$alia | wc -l`
 if [ $num -le 9]
 then
  rep=`cat cpbash | grep '^'$alia | wc -l`
  if [ rep -eq 0 ]
  then
   echo 'alias='$alia >> $1'/.bashrc' #añadimos al final
  else
   sed 's/alias=.*/umask='$mask'/' $1'/.bashrc' > $1'/.bashrc' #modificamos su valor
  fi
 else
  echo "ya tenemos mas de 10 alias"
 fi
}


#Introduce el path donde deseas modificar el fichero .bashrc
var='ko'
while [ $var = 'ko' ]
do

 echo "Introduce el path"
 read path

 if [ -d $path ]
 then
  echo "Correcto"
  while true
  do
   menu
   echo "elegir opcion"
   read opcion
   case $opcion in
    "1")cambia_historycontrol $path;;
    "2")cambia_historysize $path;;
    "3")cambia_umask $path;;
    "4")cambia_alias $path;;
    "5")exit;;
    *)echo "Opcion de 1 a 5";;
   esac
  done
  var='ok'
 else
  echo "La ruta indicada no existe"
  var='ko'
 fi

done

Monitorizar el uso del disco por particiones, el comando df

Con el comando df podemos monitorizar el uso por particiones. O lo que es lo mismo, consultar la información sobre la utilización del espacio en disco para las distintas particiones del sistema.
$ df [OPCIÓN]... [SISTEMA ARCHIVOS]...
Si utilizamos el comando df sin opciones
$ df
S.archivos         Bloques de 1K   Usado    Dispon Uso% Montado en
/dev/sda1            144252592   6399452 130525448   5% /
none                   1525900       288   1525612   1% /dev
none                   1531504       200   1531304   1% /dev/shm
none                   1531504       244   1531260   1% /var/run
none                   1531504         0   1531504   0% /var/lock
/dev/sda6            159564484 148233924   3225140  98% /home
Algunas opciones interesantes para usar con el comando df.

-h --human-readable

Imprimir los tamaños de forma más legible para humanos.
df -h
S.archivos            Tam.  Usado Disp. % Uso Montado en
/dev/sda1             138G  6,2G  125G   5% /
none                  1,5G  288K  1,5G   1% /dev
none                  1,5G  200K  1,5G   1% /dev/shm
none                  1,5G  244K  1,5G   1% /var/run
none                  1,5G     0  1,5G   0% /var/lock
/dev/sda6             153G  142G  3,1G  98% /home

-a, --all Incluye los pseudo sistemas de archivos

df -ha
S.archivos            Tam.  Usado Disp. % Uso Montado en
/dev/sda1             138G  6,2G  125G   5% /
proc                     0     0     0   -  /proc
none                     0     0     0   -  /sys
fusectl                  0     0     0   -  /sys/fs/fuse/connections
none                     0     0     0   -  /sys/kernel/debug
none                     0     0     0   -  /sys/kernel/security
none                  1,5G  288K  1,5G   1% /dev
none                     0     0     0   -  /dev/pts
none                  1,5G  200K  1,5G   1% /dev/shm
none                  1,5G  244K  1,5G   1% /var/run
none                  1,5G     0  1,5G   0% /var/lock
/dev/sda6             153G  142G  3,1G  98% /home
binfmt_misc              0     0     0   -  /proc/sys/fs/binfmt_misc

-i

Informar sobre la utilización de los i-nodos

df -hi
S.archivos            Inodes   IUsed   IFree IUse% Montado en
/dev/sda1               8,8M    288K    8,5M    4% /
none                    208K     813    207K    1% /dev
none                    210K       6    210K    1% /dev/shm
none                    210K      69    210K    1% /var/run
none                    210K       2    210K    1% /var/lock
/dev/sda6               9,7M    232K    9,5M    3% /home

martes, 3 de mayo de 2011

Cómo copiar directorios de forma recursiva con el comando SCP

Si queremos copiar carpetas entre distintos servidores el comando scp nos será de gran utilidad.

Tan solo debemos tipear lo siguiente:
$ scp user@servidor.com:/home/user/www /home/user/www
Con esto, estamos copiando la carpeta www del servidor remoto, a nuestro pc o otro servidor.
Si queremos copiar todos los ficheros que se contengan en la carpeta www, deberemos añadir la opción -r. Así todo se copiará de manera recursiva.
$ scp -r user@servidor.com:/home/user/www /home/user/www
Un detalle que quizá os encontréis es que el servidor escucha en un puerto diferente del 22. En ese caso podemos indicarle el puerto con que se comunica con la opción -P, quedando de la siguiente manera.
$ scp -P 2022 -r user@servidor.com:/home/user/www /home/user/www

domingo, 1 de mayo de 2011

Instalación y configuración de Postgres en Debian

Instalación

La instalación es muy sencilla:
$ apt-get install postgresql
Configuración

La instalación nos ha creado un usuario y grupo 'postgres'. El usuario postgres se crea sin contraseña. Por lo que deberemos logearnos como root
$ su
y nos logamos como postgres
$ su postgresql
tipeamos:
$ psql
y crearemos un nuevo usuario:
postgres=# CREATE USER usuario WITH PASSWORD 'password';

Con esto tendremos instalado postgres y creado un nuevo usuario.