Publi

  • Obtener información básica sobre procesos del sistema Linux en C y C++ (parte 3)

    procesos del sistema

    Cuando te independizas y te vas a vivir a un piso o a una casa te preguntas, ¿cómo serán mis vecinos? Por un lado tendremos al típico que deja la basura en la puerta de su casa durante todo el día y esparce olores al resto de los vecinos; o el que desea compartir la música que escucha con los demás y el que cuando entra al edificio y ve que vas a entrar va corriendo al ascensor para no esperarte… Aunque como procesos en ejecución en un entorno Linux muchas veces queremos saber cómo son nuestros vecinos y, al contrario de lo que puede parecer en una comunidad de vecinos, éstos suelen ser mucho más receptivos y dispuestos a darnos información.… Leer artículo completo

  • Cómo extraer ruta, nombre de fichero y extensión en Bash de forma nativa para nuestros scripts

    7959831794_e5699df68b_k
    Bash tiene infinidad de opciones, y en los últimos años se ha extendido muchísimo y nos permite hacer cosas muy chulas. Aunque un sistema con tantas opciones como este, es también un poco lioso y difícil de aprender. Por eso en ocasiones viene bien una chuleta para realizar operaciones sencillas que pueden llegar a ser un poco rebuscadas como obtener el nombre de un fichero y su extensión.

    Bash, al ser un intérprete de comandos de consola, una de sus principales funciones es trabajar con archivos y cuando queremos utilizar archivos, tenemos que jugar con sus posibles nombres, para ello, deberíamos poder extraer fácilmente la ruta de un archivo, su nombre y separarlo de la extensión.… Leer artículo completo

  • Procesar argumentos de entrada en nuestros shell scripts con getopt

    mixer_4

    Hace unos días analizamos cómo tratar los argumentos de entrada desde un shell script en Bash de una manera sencilla. Aunque, cuando la cosa se complica, debemos utilizar herramientas algo más avanzadas. Tal y como hicimos con getopt para C [parte 1, parte 2], vamos a hacer lo mismo en un shell script.

    Aunque aquí tenemos dos posibilidades, que hacen prácticamente lo mismo getopt y getopts.… Leer artículo completo

  • Cómo extraer la parte alta y la parte baja de un número con varios ejemplos en C

    photo-1414509902153-26bed16bc962_red

    En ocasiones, en C, sobre todo, una misma variable numérica (un entero, un short, o incluso un char) encierra en sus bits más valores que nos pueden resultar interesantes por separado. Sobre todo, por optimizar la memoria, en lugar de reservar dos variables de tipo entero de 32bits para almacenar valores pequeños, queramos empaquetar en el mismo valor entero los dos valores y luego extraerlos cuando los necesitemos. Esto lo podemos ver en sistemas empotrados en los que estamos muy limitados en memoria.… Leer artículo completo

  • Magia en Bash 50 ejemplos en una sola linea (o dos)

    Bash es una de las herramientas más potentes que tenemos a nuestro alcance, aunque no sólo de bash trata el artículo, sino de trucos para consola, one-liner como dirían muchos (aunque habrá algunos two-liners) que podemos utilizar y pueden hacernos la vida un poco más fácil:

    Cadenas de texto

    Trim

    Es una herramienta que utilizaremos para recortar nuestra cadena basándonos en los a la ìzquierda y a la derecha, en este caso nos basaremos en los espacios, que es uno de sus usos más comunes (así podemos obtener la cadena limpia tanto por delante como por detrás.… Leer artículo completo

  • Introducir el resultado de una consulta SELECT de mysql en un Array [BASH]

    data

    ¡Bash es una pasada! Es capaz de dejarnos hacer maravillas en poco tiempo y de automatizar lo inautomatizable, en este caso, traigo un ejemplo más, de cómo un código muy corto es capaz de presentarnos los resultados de una consulta SELECT de mysql:

    Los datos de prueba provienen de uno de mis proyectos: Málaga Bloguea donde muestro las últimas novedades de blogs de Málaga.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #!/bin/bash

    OLDIFS=IFS
    MYSQL_USER=#Usuario Mysql
    MYSQL_PASSWORD=#Password Mysql
    MYSQL_HOST="localhost"
    # IFS personalizado, para poder delimitar los campos correctamente
    IFS="`echo -e "\t\n\r\f"`"

    # Declaramos la variable como array, no es estrictamente necesario, pero sí un poco más correcto
    declare -a IPS

    # Generamos la consulta (Si vamos a utilizar un juego de caracteres determinado, como
    # UTF8, debemos especificar primero para evitar sorpresas.
    Leer artículo completo
  • Separar palabras de una cadena de caracteres en un array [ C ]

    Si conocéis PHP, habréis visto la función explode(). Tiene una utilidad curiosa, separa cadenas de caracteres en elementos de un array. Es como hacer un corte a la cadena cada vez que encontremos un carácter delimitador. Por ejemplo:

    «Bienvenido al blog Poesía Binaria», si usamos como delimitador » » (un espacio), los elementos del array quedarían así:

    [0] = «Bienvenido»
    [1] = «al»
    [2] =»blog»
    [3] =»Poesía»
    [4] = «Binaria»

    Pero en C, no encontramos ninguna función que haga esto, tenemos que currar un poco; aunque tenemos una función de string.h que hace algo que se parece en cierto modo: strtok(), esta función, va a separar una cadena en fragmentos modificando la propia cadena, es decir, introduciremos caracteres terminadores al final de cada palabra.… Leer artículo completo

  • Bailando con bits: Ver y modificar los bits de un número

    Hay muchas formas para hacer esto, pero quizás la más visual (tal vez también útil algunas veces) es la siguiente (se explica más abajo):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #include <stdio.h>

    typedef struct {
        unsigned int b1:1;
        unsigned int b2:1;
        unsigned int b3:1;
        unsigned int b4:1;
        unsigned int b5:1;
        unsigned int b6:1;
        unsigned int b7:1;
        unsigned int b8:1;
        unsigned int b9:1;
        unsigned int b10:1;
        unsigned int b11:1;
        unsigned int b12:1;
        unsigned int b13:1;
        unsigned int b14:1;
        unsigned int b15:1;
        unsigned int b16:1;
        unsigned int b17:1;
        unsigned int b18:1;
        unsigned int b19:1;
        unsigned int b20:1;
        unsigned int b21:1;
        unsigned int b22:1;
        unsigned int b23:1;
        unsigned int b24:1;
        unsigned int b25:1;
        unsigned int b26:1;
        unsigned int b27:1;
        unsigned int b28:1;
        unsigned int b29:1;
        unsigned int b30:1;
        unsigned int b31:1;
        unsigned int b32:1;

    } Tint_bits;

    int main()
    {
      int numero;
      Tint_bits *bitpack;

      bitpack=(Tint_bits*)&numero;
      numero=63;
      printf ("Dir cos: %X\nDir paq: %X\n", &numero, bitpack);  // Vemos que las direcciones de memoria son idénticas.
    Leer artículo completo
  • Extraer una copia de seguridad de Plesk

    discoduroMuchos proveedores utilizan Plesk como panel de control, y en ocasiones, es necesario extraer dichas copias de seguridad, no sólo restaurarlas automáticamente vía Plesk.

    Necesitamos el paquete munpack (la mayoría de las distribuciones lo traen en sus repositorios, si no, siempre podemos compilarlo desde el código fuente ( ftp://ftp.andrew.cmu.edu/pub/mpack/ ).

    Si el fichero de copia de seguridad es copia_plesk, hacemos lo siguiente:

    $ zcat copia_plesk copia_plesk_descomprimida
    $ cat copia_plesk_descomprimida | munpack

    En este punto tendremos muchos ficheros tar (tal vez el correo, las páginas web que tengamos, los logs y demás servicios que tengamos contratados), sólo tendremos que extraer los archivos:

    $ tar xvf [archivo_tar_a_extraer]

    Debemos procurar que los archivos generados por plesk no sean de más de 2Gb (el panel de control tiene la opción de fragmentar los archivos), ya que munpack se quejará en este caso, tendríamos que recortar el fichero descomprimido.… Leer artículo completo