Comments

April 27, 2025

Dominando grep con expresiones regulares: Guía para una búsqueda de texto eficiente

Introducción

Este grepcomando es uno de los más útiles en un entorno de terminal Linux. Su nombre grepsignifica “impresión de expresión regular global”. Esto significa que se puede usar greppara comprobar si la entrada que recibe coincide con un patrón específico. Este programa, aparentemente trivial, es extremadamente potente; su capacidad para ordenar la entrada según reglas complejas lo convierte en un enlace popular en muchas cadenas de comandos.

En este tutorial, explorará las grepopciones del comando y luego profundizará en el uso de expresiones regulares para realizar búsquedas más avanzadas.

Prerrequisitos

Para seguir esta guía, necesitará acceder a un ordenador con sistema operativo Linux. Puede ser un servidor privado virtual al que se haya conectado por SSH o su equipo local. Tenga en cuenta que este tutorial se validó con un servidor Linux con Ubuntu 20.04, pero los ejemplos proporcionados deberían funcionar en cualquier ordenador con cualquier versión de Linux.

Si planea usar un servidor remoto para seguir esta guía, le recomendamos que primero complete nuestra guía de configuración inicial del servidor . Esto le permitirá configurar un entorno de servidor seguro, que incluye un usuario no root con sudoprivilegios y un firewall configurado con UFW, que puede usar para mejorar sus habilidades con Linux.

Uso básico

En este tutorial, utilizarás grepla Licencia Pública General GNU versión 3 para buscar varias palabras y frases.

Si usas Ubuntu, puedes encontrar el archivo en la /usr/share/common-licensescarpeta. Cópialo a tu directorio personal:

cp /usr/share/common-licenses/GPL-3 .

Si estás en otro sistema, usa el curlcomando para descargar una copia:

curl -o GPL-3 https://www.gnu.org/licenses/gpl-3.0.txt

También usarás el archivo de licencia BSD en este tutorial. En Linux, puedes copiarlo a tu directorio personal con el siguiente comando:

cp /usr/share/common-licenses/BSD .

Si está en otro sistema, cree el archivo con el siguiente comando:

cat << 'EOF' > BSD
Copyright (c) The Regents of the University of California.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
3. Neither the name of the University nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
EOF

Ahora que tienes los archivos, puedes empezar a trabajar con grep.

En su forma más básica, se usa greppara buscar patrones literales dentro de un archivo de texto. Esto significa que, si se pasa grepuna palabra a buscar, se imprimirán todas las líneas del archivo que la contengan.

Ejecute el siguiente comando para grepbuscar cada línea que contenga la palabra GNU:

grep "GNU" GPL-3

El primer argumento, GNU, es el patrón que estás buscando, mientras que el segundo argumento, GPL-3, es el archivo de entrada que deseas buscar.

La salida resultante será cada línea que contenga el texto del patrón:

Output                    GNU GENERAL PUBLIC LICENSE
  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
  Developers that use the GNU GPL protect your rights with two steps:
  "This License" refers to version 3 of the GNU General Public License.
  13. Use with the GNU Affero General Public License.
under version 3 of the GNU Affero General Public License into a single
...
...

En algunos sistemas, el patrón que buscó aparecerá resaltado en la salida.

Opciones comunes

De forma predeterminada, grepbuscará el patrón exacto especificado en el archivo de entrada y devolverá las líneas que encuentre. Sin embargo, puede hacer que este comportamiento sea más útil añadiendo indicadores opcionales a grep.

Si desea grepignorar las mayúsculas y minúsculas de su parámetro de búsqueda y buscar variaciones en mayúsculas y minúsculas, puede especificar la opción -io .--ignore-case

Busque cada instancia de la palabra license(con mayúsculas, minúsculas o mixtas) en el mismo archivo que antes con el siguiente comando:

grep -i "license" GPL-3

Los resultados contienen: LICENSE, license, y License:

Output                    GNU GENERAL PUBLIC LICENSE
 of this license document, but changing it is not allowed.
  The GNU General Public License is a free, copyleft license for
  The licenses for most software and other practical works are designed
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price.  Our General Public Licenses are designed to make sure that you
(1) assert copyright on the software, and (2) offer you this License
  "This License" refers to version 3 of the GNU General Public License.
  "The Program" refers to any copyrightable work licensed under this
...
...

Si hubiera habido una instancia con LiCeNsE, ésta también se habría devuelto.

Si desea encontrar todas las líneas que no contienen un patrón especificado, puede utilizar la opción -vo --invert-match.

Busque cada línea que no contenga la palabra theen la licencia BSD con el siguiente comando:

grep -v "the" BSD

Recibirás este resultado:

OutputAll rights reserved.

Redistribution and use in source and binary forms, with or without
are met:
    may be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...

Como no especificó la opción “ignorar mayúsculas y minúsculas”, los dos últimos elementos se devolvieron como si no tuvieran la palabra the.

Suele ser útil conocer el número de línea donde se producen las coincidencias. Puede hacerlo usando la opción -n“o” --line-number. Repita el ejemplo anterior con esta opción añadida:

grep -vn "the" BSD

Esto devolverá el siguiente texto:

Output2:All rights reserved.
3:
4:Redistribution and use in source and binary forms, with or without
6:are met:
13:   may be used to endorse or promote products derived from this software
14:   without specific prior written permission.
15:
16:THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17:ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...

Ahora puedes referenciar el número de línea si quieres modificar todas las líneas que no contengan “<sub>” the. Esto resulta especialmente útil al trabajar con código fuente.

Expresiones regulares

En la introducción, aprendiste que grepsignifica “impresión de expresión regular global”. Una “expresión regular” es una cadena de texto que describe un patrón de búsqueda específico.

Distintas aplicaciones y lenguajes de programación implementan expresiones regulares de forma ligeramente distinta. En este tutorial, solo explorarás una pequeña parte de cómo grepse describen sus patrones.

Coincidencias literales

En los ejemplos anteriores de este tutorial, al buscar las palabras GNUy the, en realidad, buscaba expresiones regulares básicas que coincidieran con la cadena exacta de caracteres GNUy the. Los patrones que especifican con precisión los caracteres que se deben buscar se denominan “literales” porque coinciden con el patrón literalmente, carácter por carácter.

Es útil pensar en ellos como si coincidieran con una cadena de caracteres en lugar de una palabra. Esta distinción será más importante a medida que aprendas patrones más complejos.

Todos los caracteres alfabéticos y numéricos (así como algunos otros caracteres) coinciden literalmente a menos que sean modificados por otros mecanismos de expresión.

Partidos de ancla

Los anclajes son caracteres especiales que especifican en qué parte de la línea debe producirse una coincidencia para que sea válida.

Por ejemplo, al usar anclas, puede especificar que solo desea conocer las líneas que coinciden GNUal principio de la línea. Para ello, puede usar el ^ancla antes de la cadena literal.

Ejecute el siguiente comando para buscar en el GPL-3archivo y encontrar líneas donde GNUaparece al principio de una línea:

grep "^GNU" GPL-3

Este comando devolverá las siguientes dos líneas:

OutputGNU General Public License for most of our software; it applies also to
GNU General Public License, you may choose any version ever published

De manera similar, se utiliza el $ancla al final de un patrón para indicar que la coincidencia solo será válida si ocurre al final de una línea.

Este comando coincidirá con cada línea que termine con la palabra anden el GPL-3archivo:

grep "and$" GPL-3

Recibirás este resultado:

Outputthat there is no warranty for this free software.  For both users' and
  The precise terms and conditions for copying, distribution and
  License.  Each licensee is addressed as "you".  "Licensees" and
receive it, in any medium, provided that you conspicuously and
    alternative is allowed only occasionally and noncommercially, and
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
provisionally, unless and until the copyright holder explicitly and
receives a license from the original licensors, to run, modify and
make, use, sell, offer for sale, import and otherwise run, modify and

Coincidencia de cualquier personaje

El carácter de punto (.) se utiliza en expresiones regulares para indicar que cualquier carácter individual puede existir en la ubicación especificada.

Por ejemplo, para hacer coincidir cualquier cosa en el GPL-3archivo que tenga dos caracteres y luego la cadena cept, utilizaría el siguiente patrón:

grep "..cept" GPL-3

Este comando devuelve el siguiente resultado:

Outputuse, which is precisely where it is most unacceptable.  Therefore, we
infringement under applicable copyright law, except executing it on a
tells the user that there is no warranty for the work (except to the
License by making exceptions from one or more of its conditions.
form of a separately written license, or stated as exceptions;
  You may not propagate or modify a covered work except as expressly
  9. Acceptance Not Required for Having Copies.
...
...

Esta salida contiene instancias de ” accepty except” y variaciones de ambas palabras. El patrón también habría coincidido z2ceptsi se hubiera encontrado.

Expresiones entre paréntesis

Al colocar un grupo de caracteres entre corchetes ( \[y \]), puede especificar que el carácter en esa posición puede ser cualquier carácter que se encuentre dentro del grupo de corchetes.

Por ejemplo, para encontrar las líneas que contienen tooo two, deberá especificar esas variaciones sucintamente utilizando el siguiente patrón:

grep "t[wo]o" GPL-3

La salida muestra que ambas variaciones existen en el archivo:

Outputyour programs, too.
freedoms that you received.  You must make sure that they, too, receive
  Developers that use the GNU GPL protect your rights with two steps:
a computer network, with no transfer of a copy, is not conveying.
System Libraries, or general-purpose tools or generally available free
    Corresponding Source from a network server at no charge.
...
...

La notación entre corchetes ofrece opciones interesantes. Puedes hacer que el patrón coincida con cualquier carácter excepto los dentro de un corchete, comenzando la lista de caracteres dentro de los corchetes con un ^carácter.

Este ejemplo es como el patrón .ode, pero no coincidirá con el patrón code:

grep "[^c]ode" GPL-3

Aquí está el resultado que recibirás:

Output  1. Source Code.
    model, to give anyone who possesses the object code either (1) a
the only significant mode of use of the product.
notice like this when it starts in an interactive mode:

Observe que en la segunda línea devuelta, se encuentra la palabra code. Esto no se debe a un error de la expresión regular ni de grep. Más bien, esta línea se devolvió porque anteriormente se encontró el patrón mode, presente en la palabra model. La línea se devolvió porque existía una instancia que coincidía con el patrón.

Otra característica útil de los corchetes es que puedes especificar un rango de caracteres en lugar de escribir individualmente cada carácter disponible.

Esto significa que si desea encontrar cada línea que comience con una letra mayúscula, puede utilizar el siguiente patrón:

grep "^[A-Z]" GPL-3

Aquí está el resultado que devuelve esta expresión:

OutputGNU General Public License for most of our software; it applies also to
States should not allow patents to restrict development and use of
License.  Each licensee is addressed as "you".  "Licensees" and
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
System Libraries, or general-purpose tools or generally available free
Source.
User Product is transferred to the recipient in perpetuity or for a
...
...

Debido a algunos problemas de clasificación heredados, a menudo es más preciso utilizar clases de caracteres POSIX en lugar de rangos de caracteres como los que acaba de utilizar.

Analizar cada clase de carácter POSIX quedaría fuera del alcance de esta guía, pero un ejemplo que lograría el mismo procedimiento que el ejemplo anterior utiliza la \[:upper:\]clase de carácter dentro de un selector de corchetes:

grep "^[[:upper:]]" GPL-3

La salida será la misma que antes.

Repetir el patrón cero o más veces

Por último, uno de los metacaracteres más utilizados es el asterisco, o *, que significa “repetir el carácter o expresión anterior cero o más veces”.

Para encontrar cada línea en el GPL-3archivo que contiene un paréntesis de apertura y cierre, con solo letras y espacios simples en el medio, use la siguiente expresión:

grep "([A-Za-z ]*)" GPL-3

Obtendrá el siguiente resultado:

Output Copyright (C) 2007 Free Software Foundation, Inc.
distribution (with or without modification), making available to the
than the work as a whole, that (a) is included in the normal form of
Component, and (b) serves only to enable use of the work with that
(if any) on which the executable work runs, or a compiler used to
    (including a physical distribution medium), accompanied by the
    (including a physical distribution medium), accompanied by a
    place (gratis or for a charge), and offer equivalent access to the
...
...

Hasta ahora has utilizado puntos, asteriscos y otros caracteres en tus expresiones, pero a veces necesitas buscar esos caracteres específicamente.

Escapar de metacaracteres

En ocasiones, necesitará buscar un punto literal o un corchete de apertura literal, especialmente al trabajar con código fuente o archivos de configuración. Dado que estos caracteres tienen un significado especial en las expresiones regulares, deberá “escaparlos” para indicar grepque no desea usar su significado especial en este caso.

Para escapar caracteres, utilice el carácter de barra invertida ( \) delante del carácter que normalmente tendría un significado especial.

Por ejemplo, para encontrar cualquier línea que comience con una letra mayúscula y termine con un punto, utilice la siguiente expresión que escapa del punto final para que represente un punto literal en lugar del significado habitual de “cualquier carácter”:

grep "^[A-Z].*\.$" GPL-3

Este es el resultado que verás:

OutputSource.
License by making exceptions from one or more of its conditions.
License would be to refrain entirely from conveying the Program.
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
SUCH DAMAGES.
Also add information on how to contact you by electronic and paper mail.

Ahora veamos otras opciones de expresiones regulares.

Expresiones regulares extendidas

El grepcomando admite un lenguaje de expresiones regulares más extenso al usar la -Ebandera o al llamar al egrepcomando en lugar de grep.

Estas opciones amplían las posibilidades de las expresiones regulares extendidas. Estas expresiones regulares incluyen todos los metacaracteres básicos, además de metacaracteres adicionales para expresar coincidencias más complejas.

Agrupamiento

Una de las capacidades más útiles que ofrecen las expresiones regulares extendidas es la capacidad de agrupar expresiones para manipularlas o referenciarlas como una unidad.

Para agrupar expresiones, enciérrelas entre paréntesis. Si desea usar paréntesis sin usar expresiones regulares extendidas, puede escaparlas con la barra invertida para habilitar esta función. Esto significa que las siguientes tres expresiones son funcionalmente equivalentes:

grep "\(grouping\)" file.txt
grep -E "(grouping)" file.txt
egrep "(grouping)" file.txt

Alternancia

De manera similar a cómo las expresiones entre corchetes pueden especificar diferentes opciones posibles para coincidencias de un solo carácter, la alternancia le permite especificar coincidencias alternativas para cadenas o conjuntos de expresiones.

Para indicar alternancia, utilice el carácter de barra vertical |. Estos se utilizan a menudo en la agrupación entre paréntesis para especificar que una de dos o más posibilidades debe considerarse una coincidencia.

GPLLo siguiente lo encontrará General Public Licenseen el texto:

grep -E "(GPL|General Public License)" GPL-3

El resultado se ve así:

Output  The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
price.  Our General Public Licenses are designed to make sure that you
  Developers that use the GNU GPL protect your rights with two steps:
  For the developers' and authors' protection, the GPL clearly explains
authors' sake, the GPL requires that modified versions be marked as
have designed this version of the GPL to prohibit the practice for those
...
...

La alternancia puede seleccionar entre más de dos opciones agregando opciones adicionales dentro del grupo de selección separadas por |caracteres de barra vertical ( ).

Cuantificadores

Al igual que el *metacarácter que coincidió con el carácter o conjunto de caracteres anterior cero o más veces, hay otros metacaracteres disponibles en expresiones regulares extendidas que especifican la cantidad de ocurrencias.

Para que un carácter coincida cero o una vez, puedes usar el ?carácter. Esto hace que los caracteres o conjuntos de caracteres anteriores sean, en esencia, opcionales.

Los siguientes partidos copyrighty rightponiendo copyen un grupo opcional:

grep -E "(copy)?right" GPL-3

Recibirás este resultado:

Output Copyright (C) 2007 Free Software Foundation, Inc.
  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
know their rights.
  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
  "Copyright" also means copyright-like laws that apply to other kinds of
...

El +carácter coincide con una expresión una o más veces. Es similar al *metacarácter, pero con el +carácter, la expresión debe coincidir al menos una vez.

La siguiente expresión coincide con la cadena freemás uno o más caracteres que no sean espacios en blanco:

grep -E "free[^[:space:]]+" GPL-3

Verás este resultado:

Output  The GNU General Public License is a free, copyleft license for
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
  When we speak of free software, we are referring to freedom, not
have the freedom to distribute copies of free software (and charge for
you modify it: responsibilities to respect the freedom of others.
freedomss that you received.  You must make sure that they, too, receive
protecting users' freedom to change the software.  The systematic
of the GPL, as needed to protect the freedom of users.
patents cannot be used to render the program non-free.

Especificación de la repetición de coincidencias

Para especificar el número de veces que se repite una coincidencia, utilice las llaves ( {y }). Estas llaves permiten especificar un número exacto, un rango o un límite superior o inferior para la cantidad de veces que una expresión puede coincidir.

Utilice la siguiente expresión para encontrar todas las líneas del GPL-3archivo que contienen vocales triples:

grep -E "[AEIOUaeiou]{3}" GPL-3

Cada línea devuelta tiene una palabra con tres vocales:

Outputchanged, so that their problems will not be attributed erroneously to
authors of previous versions.
receive it, in any medium, provided that you conspicuously and
give under the previous paragraph, plus a right to possession of the
covered work so as to satisfy simultaneously your obligations under this

Para encontrar cualquier palabra que tenga entre 16 y 20 caracteres, utilice la siguiente expresión:

grep -E "[[:alpha:]]{16,20}" GPL-3

Aquí está el resultado de este comando:

Output    certain responsibilities if you distribute copies of the software, or if
    you modify it: responsibilities to respect the freedom of others.
        c) Prohibiting misrepresentation of the origin of that material, or

Sólo se muestran las líneas que contienen palabras dentro de esa longitud.

Casos de uso práctico

1. Validación de campos CSV

Para validar campos CSV, puede usar grepexpresiones regulares para buscar patrones o formatos específicos. Por ejemplo, para comprobar si todas las líneas de un archivo CSV tienen exactamente 5 campos separados por comas, puede usar el siguiente comando:

grep -E "^[^,]+,[^,]+,[^,]+,[^,]+,[^,]+$" yourfile.csv

Este comando imprimirá solo las líneas que coincidan con el patrón especificado, indicando campos CSV válidos.

2. Filtrar registros por nivel de error (por ejemplo, grep “ERROR” logs.txt)

Filtrar registros por nivel de error es un uso común de grep. Para filtrar registros por líneas que contengan la palabra “ERROR”, puede usar el siguiente comando:

grep "ERROR" logs.txt

Este comando imprimirá todas las líneas logs.txtque contengan la palabra “ERROR”, lo que le permitirá centrarse en los mensajes de error.

3. Búsqueda de funciones específicas en el código fuente

Al buscar en el código fuente, grepse puede usar para encontrar funciones o patrones específicos. Por ejemplo, para encontrar todas las ocurrencias de una función nombrada calculateTotalen un directorio de archivos de código fuente, se puede usar el siguiente comando:

grep -r "calculateTotal" /path/to/source/code/directory

Este comando buscará recursivamente todos los archivos en el directorio especificado e imprimirá las líneas que contienen el nombre de la función.

4. Coincidencia de URL o direcciones de correo electrónico en el texto

Se pueden usar expresiones regulares para buscar coincidencias entre URL o direcciones de correo electrónico en texto. Por ejemplo, para encontrar todas las líneas de un archivo que contienen una URL, puede usar el siguiente comando:

grep -E "https?://[^ ]+" yourfile.txt

Este comando imprimirá todas las líneas que contengan una URL que comience con “http://” o “https://”.

5. Preprocesamiento de PNL: filtrado de líneas con palabras vacías

Las palabras vacías son palabras comunes como “el”, “y”, etc., que no tienen mucho significado en una oración. Para filtrar líneas que contienen palabras vacías, puede usar grepuna lista de palabras vacías. Por ejemplo, para filtrar líneas que contienen las palabras vacías “el”, “y” o “un”, puede usar el siguiente comando:

grep -vE "the|and|a" yourfile.txt

Este comando imprimirá todas las líneas que no contengan ninguna de las palabras vacías especificadas.

6. Detección de entradas casi duplicadas o errores ortográficos

Las expresiones regulares permiten detectar entradas casi duplicadas o errores ortográficos mediante la búsqueda de patrones similares. Por ejemplo, para encontrar líneas que contengan palabras con una sola diferencia de carácter, se puede usar el siguiente comando:

grep -E "(\w)\1" yourfile.txt

Este comando imprimirá todas las líneas que contengan palabras con un solo carácter repetido, lo que indica posibles duplicados o errores ortográficos.

7. Patrones de expresiones regulares para entidades con nombre o frases comunes

Las expresiones regulares permiten encontrar coincidencias entre entidades con nombre o frases comunes en el texto. Por ejemplo, para encontrar todas las líneas que contienen una frase específica como “reconocimiento de entidad con nombre”, se puede usar el siguiente comando:

grep -E "named entity recognition" yourfile.txt

Este comando imprimirá todas las líneas que contengan la frase especificada, lo que le permitirá centrarse en la información relevante.

Errores comunes y depuración

1. Usar operadores de expresiones regulares como *, + o ? sin escaparlos

Al usar operadores de expresiones regulares como *, +, o ?, es fundamental escaparlos correctamente para evitar coincidencias inesperadas. Por ejemplo, si desea que coincida con el carácter literal *, debe escaparlo con una barra invertida ( \*). De igual forma, para que coincida con los caracteres literales +o ?, escápelos con una barra invertida ( \+o \?).

Ejemplo de comando para hacer coincidir un *carácter literal:

grep -E "a\*" yourfile.txt

2. Coincidencia de líneas vacías o líneas con solo espacios en blanco

Para hacer coincidir líneas vacías o líneas con solo espacios en blanco, puede utilizar el siguiente patrón de expresión regular:

grep -E "^\s*$" yourfile.txt

Este patrón coincide con líneas que comienzan ( ^) y terminan ( $) con cualquier carácter de espacio en blanco ( \s*).

3. Tabulaciones (\t) y retornos de carro (\r)

Para hacer coincidir tabulaciones ( \t) o retornos de carro ( \r) en su texto, puede utilizar los siguientes comandos:

# Match lines containing tabs
grep -E "\t" yourfile.txt

# Match lines containing carriage returns
grep -E "\r" yourfile.txt

Tenga en cuenta que en algunos casos, es posible que necesite usar la -Eopción para habilitar patrones de expresiones regulares extendidos, que le permiten usar funciones de expresiones regulares más avanzadas.

Diferencias entre grep, egrep y fgrep

DominioDescripciónCaracterísticasCasos de usoComando de muestra
grepCoincidencia de patrones básicosAdmite expresiones regulares básicasCoincidencia de patrones generalesgrep "pattern" file.txt
egrepCoincidencia de patrones extendidaAdmite expresiones regulares extendidasCoincidencia de patrones complejosegrep "pattern" file.txt
fgrepCoincidencia de patrones fijosSin soporte para expresiones regularesCoincidencia de cadenas fijasfgrep "pattern" file.txt

<$>[noe] Nota: La principal diferencia entre estos comandos es el tipo de coincidencia de patrones que admiten. grepAdmite expresiones regulares básicas, egrepadmite expresiones regulares extendidas y fgrepno admite expresiones regulares en absoluto. <$>

Manejo de patrones multilínea

grepNo es adecuado para gestionar patrones multilínea debido a su naturaleza lineal. Sin embargo, existen herramientas alternativas que pueden gestionar eficazmente estos patrones. awkSon perldos opciones populares para buscar patrones que abarcan varias líneas.

awkEs una potente herramienta de procesamiento de texto que permite encontrar patrones en varias líneas. Permite definir un patrón y realizar acciones en las líneas coincidentes. Por ejemplo, para encontrar líneas que contengan un patrón en varias líneas, se puede usar el siguiente comando:

awk '/pattern/ {print $0}' yourfile.txt

Este comando imprimirá todas las líneas que coincidan con el patrón especificado. Tenga en cuenta que awktambién puede usarse para realizar operaciones más complejas en las líneas coincidentes, como imprimir todo el bloque de texto que coincide con el patrón.

perlEs otra herramienta potente que permite gestionar patrones multilínea. Ofrece una forma más flexible y expresiva de encontrar coincidencias de patrones mediante su motor de expresiones regulares integrado. Por ejemplo, puede usar el siguiente comando para buscar líneas que contengan un patrón en varias líneas:

perl -0777 -ne 'print if /pattern/s' yourfile.txt

Este comando indica perlque se lea el archivo en modo “slurp” ( -0777), lo que permite leerlo completo en memoria de una sola vez. La -neopción especifica que el script debe ejecutarse para cada línea del archivo. La print if /pattern/sinstrucción busca la coincidencia del patrón en varias líneas (gracias al smodificador) e imprime el bloque de texto completo que coincide.

Ambos ofrecen funciones más avanzadas y flexibilidad cuando awkse trata de manejar patrones multilínea, lo que los convierte en alternativas ideales para tales tareas.perlgrep

Preguntas frecuentes

1. ¿Cuál es la diferencia entre grep y egrep?

grepy egrepambos se utilizan para la coincidencia de patrones, pero difieren en el tipo de patrones que admiten. grepadmite expresiones regulares básicas, mientras que egrepadmite expresiones regulares extendidas, que permiten una coincidencia de patrones más avanzada.

2. ¿Puedo usar grep para buscar en varios archivos?

Sí, puedes grepbuscar en varios archivos especificando varios nombres de archivo o usando comodines. Por ejemplo:

grep "pattern" file1.txt file2.txt

o

grep "pattern" *.txt

3. ¿Cómo puedo buscar líneas que no coinciden con un patrón?

Para buscar líneas que no coincidan con un patrón, use la -vopción. Por ejemplo:

grep -v "pattern" yourfile.txt

Esto imprimirá todas las líneas que no contengan el patrón especificado.

4. ¿Cómo incluyo números de línea en la salida de grep?

Para incluir números de línea en grepla salida, utilice la -nopción. Por ejemplo:

grep -n "pattern" yourfile.txt

Esto imprimirá los números de línea junto con las líneas que coincidan con el patrón especificado.

5. ¿Por qué mi expresión regular grep no funciona como se esperaba?

Puede haber varias razones por las que tu grepexpresión regular no funciona como se espera. Aquí tienes algunos problemas comunes que debes revisar:

  • Asegúrese de estar utilizando la sintaxis correcta para su patrón de expresión regular.
  • Asegúrese de estar utilizando las opciones correctas para su grepcomando (por ejemplo, -Epara expresiones regulares extendidas).
  • Comprueba si tu patrón contiene caracteres especiales que es necesario escapar.
  • Verifique que su patrón esté citado correctamente para evitar la interpretación del shell.

6. ¿Cómo puedo buscar un patrón que incluya espacios en blanco o caracteres especiales?

Para buscar un patrón que incluya espacios o caracteres especiales, debe escaparlos correctamente en su patrón de expresión regular. Por ejemplo, para buscar un patrón que incluya espacios, utilice el siguiente comando:

grep "pattern\ with\ whitespace" yourfile.txt

De forma similar, para buscar un patrón que incluya caracteres especiales, escápelos con una barra invertida ( \). Por ejemplo:

grep "pattern\ with\ special\ characters" yourfile.txt

Conclusión

grepEs una herramienta poderosa para encontrar patrones dentro de archivos o en la jerarquía del sistema de archivos. Dominar sus opciones y sintaxis mejorará enormemente su capacidad para trabajar con datos de texto.

Las expresiones regulares son un concepto fundamental en informática, y comprenderlas abre un amplio abanico de posibilidades. Desde la búsqueda y el reemplazo avanzados de texto en editores de texto hasta la validación de datos en lenguajes de programación, las expresiones regulares son una habilidad esencial.

Para mejorar aún más tus habilidades, te recomendamos consultar los siguientes tutoriales:

  • El comando Grep en Linux/Unix
  • Introducción a las expresiones regulares
  • Comandos de Linux
  • Las mejores herramientas de recuperación de datos de Linux

Al explorar estos tutoriales, obtendrá una comprensión más profunda de grep, expresiones regulares y otras herramientas esenciales de Linux, lo que le permitirá abordar una amplia gama de tareas con confianza.

Stephen Dove
Comments

April 27, 2025

Cómo usar SFTP para transferir archivos con un servidor remoto de manera segura

Introducción

FTP, o “File Transfer Protocol” (Protocolo de transferencia de archivos), era un método popular sin cifrar para transferir archivos entre dos sistemas remotos.

SFTP, que significa Protocolo de transferencia de archivos SSH o Protocolo de transferencia segura de archivos, es un protocolo independiente empaquetado con SSH que funciona de forma similar pero a través de una conexión segura. La ventaja es la capacidad de aprovechar una conexión segura para transferir archivos y recorrer el sistema de archivos en los sistemas local y remoto.

En casi todos los casos, es preferible usar SFTP, en vez de FTP, debido a sus características de seguridad subyacentes y a su capacidad para aprovechar una conexión SSH. FTP es un protocolo no seguro que solo debería utilizarse en casos limitados o en redes de confianza.

Aunque SFTP está integrado en muchas herramientas gráficas, esta guía mostrará cómo utilizarlo en su interfaz de línea de comandos interactiva.

Cómo conectarse con SFTP

De forma predeterminada, SFTP utiliza el protocolo SSH para autenticarse y establecer una conexión segura. Por eso, están disponibles los mismos métodos de autenticación que en SSH.

Aunque las contraseñas son fáciles de usar y se configuran de forma predeterminada, le recomendamos crear claves SSH y transferir su clave pública a cualquier sistema al que necesite acceder. Eso es mucho más seguro y puede ahorrarle tiempo a largo plazo.

Consulte esta guía para configurar claves SSH para acceder a su servidor si aún no lo hizo.

Si puede conectarse al equipo usando SSH, habrá completado todos los requisitos necesarios para usar SFTP para administrar archivos. Pruebe el acceso SSH con el siguiente comando:

ssh sammy@your_server_ip_or_remote_hostname

Si esto funciona, salga de nuevo escribiendo:

exit

Ahora, podemos establecer una sesión SFTP ejecutando el siguiente comando:

sftp sammy@your_server_ip_or_remote_hostname

Conectará el sistema remoto, y la entrada de su línea de comandos cambiará a una instrucción SFTP.

Si está trabajando en un puerto SSH personalizado (no el puerto 22 predeterminado), puede iniciar una sesión SFTP de la siguiente manera:

sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

Eso lo conectará al sistema remoto mediante el puerto especificado.

Cómo obtener ayuda en SFTP

El comando más útil que debe conocer primero es el comando help. Este comando le da acceso a un resumen de la ayuda en SFTP. Puede invocarlo escribiendo cualquiera de estos en la instrucción:

help

o

?

Eso mostrará una lista de los comandos disponibles:

OutputAvailable commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp grp path                     Change group of file 'path' to 'grp'
chmod mode path                    Change permissions of file 'path' to 'mode'
chown own path                     Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-Ppr] remote [local]          Download file
help                               Display this help text
lcd path                           Change local directory to 'path'
. . .

En las siguientes secciones, exploraremos algunos de los comandos que verá.

Cómo navegar con SFTP

Podemos navegar a través de la jerarquía de archivos del sistema remoto usando varios comandos que funcionan de forma similar a sus contrapartes de shell.

Primero, orientémonos averiguando en qué directorio estamos actualmente en el sistema remoto. Al igual que en una sesión típica de shell, podemos escribir lo siguiente para obtener el directorio actual:

pwd

OutputRemote working directory: /home/demouser

Podemos ver el contenido del directorio actual del sistema remoto con otro comando familiar:

ls

OutputSummary.txt     info.html       temp.txt        testDirectory

Tenga en cuenta que los comandos en la interfaz SFTP no son los comandos de shell normales y no cuentan con la misma cantidad de funciones, pero implementan algunos de los indicadores opcionales más importantes:

ls -la

Outputdrwxr-xr-x    5 demouser   demouser       4096 Aug 13 15:11 .
drwxr-xr-x    3 root     root         4096 Aug 13 15:02 ..
-rw-------    1 demouser   demouser          5 Aug 13 15:04 .bash_history
-rw-r--r--    1 demouser   demouser        220 Aug 13 15:02 .bash_logout
-rw-r--r--    1 demouser   demouser       3486 Aug 13 15:02 .bashrc
drwx------    2 demouser   demouser       4096 Aug 13 15:04 .cache
-rw-r--r--    1 demouser   demouser        675 Aug 13 15:02 .profile
. . .

Para llegar a otro directorio, podemos ejecutar este comando:

cd testDirectory

Ahora, podemos recorrer el sistema de archivos remotos, pero ¿qué pasa si necesitamos acceder a nuestro sistema de archivos local? Podemos dirigir los comandos al sistema de archivos locales precediéndolos con una l que hace referencia a “local”.

Todos los comandos examinados hasta ahora tienen equivalentes locales. Podemos imprimir el directorio local de trabajo:

lpwd

OutputLocal working directory: /Users/demouser

Podemos enumerar el contenido del directorio actual en el equipo local:

lls

OutputDesktop			local.txt		test.html
Documents		analysis.rtf		zebra.html

También podemos cambiar el directorio con el que deseamos interactuar en el sistema local:

lcd Desktop

Cómo transferir archivos con SFTP

Navegar por los sistemas de archivos locales y remotos es muy poco útil si no se puede transferir archivos entre ambos.

Transferencia de archivos remotos al sistema local

Si queremos descargar archivos de nuestro host remoto, podemos hacerlo ejecutando el siguiente comando:

get remoteFile

OutputFetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile                       100%   37KB  36.8KB/s   00:01

Como puede ver, de forma predeterminada, el comando get descarga un archivo remoto a un archivo con el mismo nombre en el sistema de archivos locales.

Podemos copiar el archivo remoto a un nombre diferente especificando el nombre después:

get remoteFile localFile

El comando get también toma algunos indicadores de opción. Por ejemplo, podemos copiar un directorio y todo su contenido especificando la opción recursiva:

get -r someDirectory

Podemos indicarle a SFTP que mantenga los permisos y los tiempos de acceso adecuados utilizando el indicador -P o -p:

get -Pr someDirectory

Transferencia de archivos locales al sistema remoto

Transferir archivos al sistema remoto es tan fácil como utilizar el comando correctamente llamado “put”:

put localFile

OutputUploading localFile to /home/demouser/localFile
localFile                                     100% 7607     7.4KB/s   00:00

Los mismos indicadores que funcionan con get se aplican a put. Para copiar un directorio local completo, puede ejecutar:

put -r localDirectory

Nota: Actualmente, hay un error en las versiones de OpenSSH incluidas en las versiones actuales de Ubuntu (al menos de la versión 14.04 a la 15.10) que impide que el comando anterior funcione correctamente. Cuando se ejecuta el comando anterior para transferir contenido a un servidor utilizando la versión con errores de OpenSSH, se producirá el siguiente error: Couldn't canonicalise: No such file or directory (No se pudo canonizar: no existe tal archivo o directorio).

Para resolver este problema, primero cree el directorio de destino en el extremo remoto escribiendo mkdir localDirectory. Luego, el comando anterior debería completarse sin errores.

Una herramienta familiar que es útil para descargar y cargar archivos es el comando df, que funciona de forma similar a la versión de la línea de comandos. Al utilizarla, puede verificar que tiene suficiente espacio para completar las transferencias que le interesan:

df -h

Output    Size     Used    Avail   (root)    %Capacity
  19.9GB   1016MB   17.9GB   18.9GB           4%

Tenga en cuenta que no hay ninguna variación local de este comando, pero podemos solucionarlo ejecutando ! como comando.

El comando ! nos lleva a un shell local, donde podemos ejecutar cualquier comando disponible en nuestro sistema local. Podemos verificar el uso del disco escribiendo lo siguiente:

!

y luego

df -h

OutputFilesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   595Gi   52Gi  544Gi     9%    /
devfs          181Ki  181Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home

Cualquier otro comando local funcionará de la manera esperada. Para volver a su sesión SFTP, escriba lo siguiente:

exit

Ahora, debería ver el retorno de la instrucción de SFTP.

Manipulaciones de archivos simples con SFTP

SFTP le permite realizar el tipo de mantenimiento básico de archivos que es útil cuando se trabaja con jerarquías de archivos.

Por ejemplo, puede cambiar el propietario de un archivo en el sistema remoto con:

chown userID file

Observe cómo, a diferencia del comando chmod del sistema, el comando SFTP no acepta nombres de usuario, sino que utiliza UID. Lamentablemente, no hay una manera sencilla de saber el UID adecuado desde la interfaz SFTP.

Se puede realizar una solución alternativa más compleja con:

get /etc/passwd
!less passwd

Outputroot:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
. . .

Observe cómo en vez de utilizar el comando ! en sí, lo utilizamos como prefijo para un comando de shell local. Eso funciona para ejecutar cualquier comando disponible en nuestro equipo local y podría haberse utilizado anteriormente con el comando local df.

El UID se encuentra en la tercera columna del archivo, delimitado por caracteres de dos puntos.

De manera similar, podemos cambiar el propietario del grupo de un archivo con:

chgrp groupID file

De nuevo, no existe una forma sencilla de obtener una lista de los grupos del sistema remoto. Podemos solucionarlo con el siguiente comando:

get /etc/group
!less group

Outputroot:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .

La tercera columna contiene el ID del grupo asociado con el nombre en la primera columna. Eso es lo que buscamos.

Por suerte, el comando chmod funciona correctamente en el sistema de archivos remotos:

chmod 777 publicFile

OutputChanging mode on /home/demouser/publicFile

No existe ningún comando para manipular permisos de archivo locales, pero puede quitar la máscara local para que todos los archivos que se copien al sistema local tengan los permisos adecuados.

Eso se puede lograr con el comando lumask:

lumask 022

OutputLocal umask: 022

Ahora, todos los archivos regulares descargados (siempre que no se utilice el indicador -p) tendrán 644 permisos.

SFTP permite crear directorios en sistemas locales y en sistemas remotos con lmkdir y mkdir, respectivamente. Estos funcionan de la manera prevista.

El resto de los comandos del archivo solo apuntan al sistema de archivos remotos:

ln
rm
rmdir

Estos comandos replican el comportamiento básico de las versiones del shell. Si necesita realizar estas acciones en el sistema de archivos local, recuerde que puede ingresar a un shell ejecutando este comando:

!

O ejecutar un comando único en el sistema local anteponiendo ! al comando de esta manera:

!chmod 644 somefile

Cuando termine con la sesión SFTP, utilice exit o bye para cerrar la conexión.

bye

Conclusión

Aunque SFTP es una herramienta simple, es muy útil para administrar servidores y transferir archivos entre ellos.

Por ejemplo, puede usar SFTP para permitir que determinados usuarios transfieran archivos sin acceso SSH. Para obtener más información sobre este proceso, consulte nuestro tutorial Cómo habilitar SFTP sin acceso de shell.

Si está acostumbrado a utilizar FTP o SCP para realizar sus transferencias, SFTP es una buena forma de aprovechar las ventajas de ambos. Si bien no es adecuado para todas las situaciones, es útil tenerlo en su repertorio por ser una herramienta flexible.

Stephen Dove
Comments

April 18, 2025

Cómo instalar Docker en Ubuntu: guía paso a paso

Introducción

Docker es una aplicación que simplifica la gestión de procesos de aplicaciones en contenedores . Los contenedores permiten ejecutar aplicaciones en procesos con recursos aislados. Son similares a las máquinas virtuales, pero son más portátiles, consumen menos recursos y dependen más del sistema operativo host.

Para obtener una introducción detallada a los diferentes componentes de un contenedor Docker, consulte El ecosistema de Docker: una introducción a los componentes comunes .

En este tutorial, instalarás y usarás Docker Community Edition (CE) en Ubuntu. Instalarás Docker, trabajarás con contenedores e imágenes, y subirás una imagen a un repositorio de Docker. Además, aprenderás a iniciar, detener y eliminar contenedores, así como a confirmar los cambios de un contenedor en una nueva imagen de Docker. Este tutorial también explica cómo instalar Docker con compatibilidad con GPU, errores comunes y cómo solucionarlos, y las mejores prácticas de seguridad.

Implemente directamente desde GitHub en minutos.

Prerrequisitos

Para seguir este tutorial, necesitarás lo siguiente:

  • Un servidor Ubuntu configurado siguiendo la guía de configuración inicial del servidor Ubuntu , incluido un usuario sudono root y un firewall.
  • Una cuenta en Docker Hub si desea crear sus propias imágenes y enviarlas a Docker Hub, como se muestra en los pasos 7 y 8.

Paso 1: Instalación de Docker

El paquete de instalación de Docker disponible en el repositorio oficial de Ubuntu podría no ser la última versión. Para asegurarnos de obtener la última versión, instalaremos Docker desde el repositorio oficial. Para ello, añadiremos una nueva fuente de paquete, añadiremos la clave GPG de Docker para garantizar que las descargas sean válidas y, a continuación, instalaremos el paquete.

Primero, actualice su lista existente de paquetes:

sudo apt update

A continuación, instale algunos paquetes de requisitos previos que permitan aptutilizar paquetes a través de HTTPS:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

Luego, agregue la clave GPG del repositorio oficial de Docker a su sistema:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Agregue el repositorio de Docker a las fuentes de APT:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Actualice nuevamente su lista existente de paquetes para que se reconozca la adición:

sudo apt update

Asegúrate de que estás a punto de instalar desde el repositorio de Docker en lugar del repositorio predeterminado de Ubuntu:

apt-cache policy docker-ce

Verá un resultado como este, aunque el número de versión de Docker puede ser diferente: Salida de la política apt-cache docker-ce

docker-ce:
  Installed: (none)
  Candidate: 5:20.10.14~3-0~ubuntu-jammy
  Version table:
     5:20.10.14~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     5:20.10.13~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

Tenga en cuenta que docker-ceno está instalado, pero el candidato para la instalación es del repositorio Docker para Ubuntu.

Por último, instala Docker:

sudo apt install docker-ce

Docker ya debería estar instalado, el demonio iniciado y el proceso habilitado para iniciarse al arrancar. Compruebe que se esté ejecutando:

sudo systemctl status docker

La salida debería ser similar a la siguiente, mostrando que el servicio está activo y en ejecución:

Output● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-04-01 21:30:25 UTC; 22s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 7854 (dockerd)
      Tasks: 7
     Memory: 38.3M
        CPU: 340ms
     CGroup: /system.slice/docker.service
             └─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Al instalar Docker ahora, no solo obtendrá el servicio Docker (daemon), sino también la utilidad de línea de comandos o el cliente Docker. Más adelante en este tutorial, dockerveremos cómo usar el comando.docker

Paso 2: Ejecutar el comando Docker sin sudo (opcional)

De forma predeterminada, el dockercomando solo puede ser ejecutado por el usuario root o por un usuario del grupo Docker , que se crea automáticamente durante la instalación de Docker. Si intenta ejecutar el dockercomando sin prefijarlo con sudoo sin pertenecer al grupo Docker , obtendrá un resultado como este:

Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Si desea evitar escribir sudocada vez que ejecuta el dockercomando, agregue su nombre de usuario al dockergrupo:

sudo usermod -aG docker ${USER}

Para aplicar la nueva membresía del grupo, cierre la sesión del servidor y vuelva a iniciarla, o escriba lo siguiente:

su - ${USER}

Se le pedirá que ingrese su contraseña de usuario para continuar.

Confirme que su usuario ahora está agregado al grupo Docker escribiendo:

groups
Outputsammy sudo docker

Si necesita agregar un usuario al dockergrupo con el que no ha iniciado sesión, declare ese nombre de usuario explícitamente usando:

sudo usermod -aG docker username

El resto de este artículo asume que está ejecutando el dockercomando como usuario del grupo Docker . Si no lo hace, anteponga “<nombre del usuario>” a los comandos sudo.

Exploremos el dockercomando a continuación.

Paso 3: Uso del comando Docker

Usar dockerconsiste en pasarle una cadena de opciones y comandos seguidos de argumentos. La sintaxis es la siguiente:

docker [option] [command] [arguments]

Para ver todos los subcomandos disponibles, escriba:

docker

A partir de la versión de Docker20.10.14La lista completa de subcomandos disponibles incluye:

Output  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Para ver las opciones disponibles para un comando específico, escriba:

docker docker-subcommand --help

Para ver información de todo el sistema sobre Docker, utilice:

docker info

Exploremos algunos de estos comandos. Empezaremos trabajando con imágenes.

Paso 4: Trabajar con imágenes de Docker

Los contenedores Docker se crean a partir de imágenes de Docker. Por defecto, Docker obtiene estas imágenes de Docker Hub , un registro de Docker gestionado por Docker, la empresa responsable del proyecto Docker. Cualquiera puede alojar sus imágenes de Docker en Docker Hub, por lo que la mayoría de las aplicaciones y distribuciones de Linux que necesite tendrán imágenes alojadas allí.

Para comprobar si puede acceder y descargar imágenes desde Docker Hub, escriba:

docker run hello-world

La salida indicará que Docker funciona correctamente:

OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

...

Inicialmente, Docker no pudo encontrar la hello-worldimagen localmente, por lo que la descargó de Docker Hub, el repositorio predeterminado. Una vez descargada, Docker creó un contenedor a partir de ella y la aplicación dentro del contenedor se ejecutó, mostrando el mensaje.

Puedes buscar imágenes disponibles en Docker Hub usando el dockercomando con el searchsubcomando. Por ejemplo, para buscar la imagen de Ubuntu, escribe:

docker search ubuntu

El script rastreará Docker Hub y devolverá una lista de todas las imágenes cuyo nombre coincida con la cadena de búsqueda. En este caso, el resultado será similar a este:

OutputNAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   14048     [OK]
websphere-liberty                WebSphere Liberty multi-architecture images …   283       [OK]
ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   112       [OK]
neurodebian                      NeuroDebian provides neuroscience research s…   88        [OK]
open-liberty                     Open Liberty multi-architecture images based…   51        [OK]
...

En la columna OFICIAL , OK indica una imagen creada y respaldada por la empresa responsable del proyecto. Una vez identificada la imagen que desea usar, puede descargarla a su computadora con el pullsubcomando.

Ejecute el siguiente comando para descargar la ubuntuimagen oficial a su computadora:

docker pull ubuntu

Verá el siguiente resultado:

OutputUsing default tag: latest
latest: Pulling from library/ubuntu
e0b25ef51634: Pull complete
Digest: sha256:9101220a875cee98b016668342c489ff0674f247f6ca20dfc91b91c0f28581ae
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Tras descargar una imagen, puede ejecutar un contenedor con ella mediante el runsubcomando. Como vio en el hello-worldejemplo, si no se ha descargado una imagen al dockerejecutar el runsubcomando, el cliente Docker primero la descargará y luego ejecutará un contenedor con ella.

Para ver las imágenes que se han descargado en tu ordenador, escribe:

docker images

El resultado será similar al siguiente:

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              1d622ef86b13        3 weeks ago         73.9MB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

Como verá más adelante en este tutorial, las imágenes que utiliza para ejecutar contenedores se pueden modificar y usar para generar nuevas imágenes, que luego pueden cargarse ( el término técnico es “push “) en Docker Hub u otros registros de Docker.

Veamos cómo ejecutar contenedores con más detalle.

Paso 5: Ejecución de un contenedor Docker

El hello-worldcontenedor que ejecutaste en el paso anterior es un ejemplo de un contenedor que se ejecuta y finaliza tras emitir un mensaje de prueba. Los contenedores pueden ser mucho más útiles y pueden ser interactivos. Al fin y al cabo, son similares a las máquinas virtuales, solo que consumen menos recursos.

A modo de ejemplo, ejecutemos un contenedor con la imagen más reciente de Ubuntu. La combinación de las opciones -i y -t proporciona acceso interactivo al contenedor a través del shell:

docker run -it ubuntu

El símbolo del sistema debería cambiar para reflejar el hecho de que ahora está trabajando dentro del contenedor y debería adoptar este formato:

Outputroot@d9b100f2f636:/#

Anote el ID del contenedor en el símbolo del sistema. En este ejemplo, es d9b100f2f636. Necesitará ese ID más adelante para identificar el contenedor cuando desee eliminarlo.

Ahora puedes ejecutar cualquier comando dentro del contenedor. Por ejemplo, actualicemos la base de datos de paquetes dentro del contenedor. No necesitas prefijar ningún comando con sudo, ya que estás operando dentro del contenedor como usuario root :

apt update

Luego, instala cualquier aplicación. Instalemos Node.js:

apt install nodejs

Esto instala Node.js en el contenedor desde el repositorio oficial de Ubuntu. Al finalizar la instalación, verifique que Node.js esté instalado:

node -v

Verás el número de versión mostrado en tu terminal:

Outputv12.22.9

Cualquier cambio que realice dentro del contenedor sólo se aplicará a ese contenedor.

Para salir del contenedor, escriba exiten el aviso.

A continuación veamos cómo administrar los contenedores en nuestro sistema.

Paso 6: Administrar contenedores Docker

Después de usar Docker durante un tiempo, tendrás muchos contenedores activos (en ejecución) e inactivos en tu equipo. Para ver los activos , usa:

docker ps

Verá un resultado similar al siguiente:

OutputCONTAINER ID        IMAGE               COMMAND             CREATED

En este tutorial, iniciaste dos contenedores: uno desde la hello-worldimagen y otro desde la ubuntuimagen. Ambos contenedores ya no se ejecutan, pero aún existen en tu sistema.

Para ver todos los contenedores (activos e inactivos), ejecute docker psel -ainterruptor:

docker ps -a

Verá un resultado similar a este:

OutputCONTAINER ID   IMAGE         COMMAND   CREATED         STATUS                     PORTS     NAMES
1c08a7a0d0e4   ubuntu        "bash"     About a minute ago   Exited (0) 7 seconds ago             dazzling_taussig
587000e49d53   hello-world   "/hello"   5 minutes ago        Exited (0) 5 minutes ago             adoring_kowalevski

Para ver el último contenedor que ha creado, pásele el -linterruptor:

docker ps -l
OutputCONTAINER ID   IMAGE     COMMAND   CREATED         STATUS                     PORTS     NAMES
1c08a7a0d0e4   ubuntu    "bash"    3 minutes ago   Exited (0) 2 minutes ago             dazzling_taussig

Para iniciar un contenedor detenido, utilice docker start, seguido del ID o el nombre del contenedor. Iniciemos el contenedor basado en Ubuntu con el ID de 1c08a7a0d0e4:

docker start 1c08a7a0d0e4

El contenedor se iniciará y podrás usar docker pspara ver su estado:

OutputCONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
1c08a7a0d0e4   ubuntu    "bash"    6 minutes ago   Up 8 seconds             dazzling_taussig

Para detener un contenedor en ejecución, use docker stop, seguido del ID o nombre del contenedor. En esta ocasión, usaremos el nombre que Docker le asignó al contenedor, que es dazzling_taussig:

docker stop dazzling_taussig

Una vez que haya decidido que ya no necesita un contenedor, elimínelo con el docker rmcomando, usando nuevamente el ID o el nombre del contenedor. Use el docker ps -acomando para encontrar el ID o el nombre del contenedor asociado a la hello-worldimagen y elimínelo.

docker rm adoring_kowalevski

Puedes crear un nuevo contenedor y asignarle un nombre con el --namemodificador. También puedes usarlo --rmpara crear un contenedor que se elimine automáticamente al detenerse. Consulta el docker run helpcomando para obtener más información sobre estas y otras opciones.

Los contenedores se pueden convertir en imágenes que puedes usar para crear nuevos contenedores. Veamos cómo funciona.

Paso 7: Confirmar cambios en un contenedor a una imagen de Docker

Al iniciar una imagen de Docker, puedes crear, modificar y eliminar archivos igual que con una máquina virtual. Los cambios que realices solo se aplicarán a ese contenedor. Puedes iniciarlo y detenerlo, pero una vez que lo destruyas con el docker rmcomando, los cambios se perderán definitivamente.

Esta sección le muestra cómo guardar el estado de un contenedor como una nueva imagen de Docker.

Tras instalar Node.js en el contenedor de Ubuntu, tendrás un contenedor que se ejecuta a partir de una imagen, pero este contenedor es diferente de la imagen que usaste para crearlo. Sin embargo, podrías reutilizar este contenedor de Node.js como base para nuevas imágenes más adelante.

Luego, confirme los cambios en una nueva instancia de imagen de Docker usando el siguiente comando.

docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

El parámetro -m se utiliza para el mensaje de confirmación que te ayuda a ti y a otros a saber qué cambios realizaste, mientras que -a se usa para especificar el autor. container_idEs el que anotaste anteriormente en el tutorial al iniciar la sesión interactiva de Docker. A menos que hayas creado repositorios adicionales en Docker Hub, repositorysuele ser tu nombre de usuario de Docker Hub.

Por ejemplo, para el usuario sammy , con el ID de contenedor de d9b100f2f636, el comando sería:

docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

Al confirmar una imagen, esta se guarda localmente en tu ordenador. Más adelante en este tutorial, aprenderás a subir una imagen a un registro de Docker como Docker Hub para que otros usuarios puedan acceder a ella.

Al enumerar nuevamente las imágenes de Docker, se mostrará la nueva imagen, así como la antigua de la que se derivó:

docker images

Verás un resultado como este:

OutputREPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
sammy/ubuntu-nodejs   latest              7c1f35226ca6        7 seconds ago       179MB
...

En este ejemplo, ubuntu-nodejsse muestra la nueva imagen, derivada de la ubuntuimagen existente de Docker Hub. La diferencia de tamaño refleja los cambios realizados. En este ejemplo, el cambio fue la instalación de NodeJS. Así, la próxima vez que necesite ejecutar un contenedor en Ubuntu con NodeJS preinstalado, podrá usar la nueva imagen.

También puedes crear imágenes desde un archivo Dockerfile, lo que te permite automatizar la instalación de software en una nueva imagen. Sin embargo, esto queda fuera del alcance de este tutorial.

Ahora compartamos la nueva imagen con otros para que puedan crear contenedores a partir de ella.

Paso 8: Enviar imágenes de Docker a un repositorio de Docker

El siguiente paso lógico tras crear una imagen a partir de una existente es compartirla con algunos amigos, con todo el mundo en Docker Hub o en otro registro de Docker al que tengas acceso. Para subir una imagen a Docker Hub o a cualquier otro registro de Docker, debes tener una cuenta allí.

Para enviar su imagen, primero inicie sesión en Docker Hub.

docker login -u docker-registry-username

Se te pedirá que te autentiques con tu contraseña de Docker Hub. Si la especificaste correctamente, la autenticación debería ser correcta.

Nota: Si el nombre de usuario del registro de Docker es diferente del nombre de usuario local que usó para crear la imagen, deberá etiquetarla con el nombre de usuario del registro. Para el ejemplo del paso anterior, escriba:

docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

Luego puedes enviar tu propia imagen usando:

docker push docker-registry-username/docker-image-name

Para enviar la ubuntu-nodejsimagen al repositorio sammy , el comando sería:

docker push sammy/ubuntu-nodejs

El proceso puede tardar algún tiempo en completarse mientras se cargan las imágenes, pero una vez completado, el resultado se verá así:

OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed

...


Después de enviar una imagen a un registro, debería aparecer en el panel de su cuenta, como se muestra en la imagen a continuación.

Nueva lista de imágenes de Docker en Docker Hub

Si un intento de inserción da como resultado un error de este tipo, es probable que no haya iniciado sesión:

OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

Inicia sesión con docker loginy repite el intento de envío. Luego, verifica que exista en la página del repositorio de Docker Hub.

Ahora puedes usarla para extraer la imagen a una nueva máquina y usarla para ejecutar un nuevo contenedor.docker pull sammy/ubuntu-nodejs

Instalación de Docker con soporte para GPU

Para instalar Docker con compatibilidad con GPU, deberá seguir un proceso ligeramente diferente al de la instalación estándar. Esto se debe a que la compatibilidad con GPU requiere controladores y configuraciones adicionales para que Docker pueda utilizar los recursos de la GPU. Estos son los pasos para instalar Docker con compatibilidad con GPU:

  • Asegúrese de que su sistema tenga una GPU NVIDIA compatible.
  • Instala el controlador NVIDIA para tu GPU. Puedes encontrar las instrucciones de instalación en el sitio web de NVIDIA .
  • Instale el nvidia-docker2paquete, que proporciona las herramientas necesarias para que Docker interactúe con la GPU NVIDIA.

Pasos de instalación

  • Agregue el repositorio Docker de NVIDIA:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
  • Actualice su lista de paquetes e instale el nvidia-docker2paquete:
sudo apt update && sudo apt install nvidia-docker2
  • Reinicie el servicio Docker para aplicar los cambios:
sudo service docker restart
  • Verifique que el entorno de ejecución de NVIDIA esté disponible:
sudo docker info | grep Runtime

Esto debería mostrar el tiempo de ejecución de NVIDIA como un tiempo de ejecución disponible.

Uso de la compatibilidad con GPU

Para usar la compatibilidad con GPU con tus contenedores Docker, deberás especificar el --gpusindicador al ejecutar el contenedor. Por ejemplo:

sudo docker run --gpus all nvidia/cuda:10.2-base nvidia-smi

Este comando ejecuta un contenedor con la imagen NVIDIA CUDA y ejecuta el nvidia-smicomando para verificar la compatibilidad con la GPU.

Para obtener más información sobre la instalación y el uso de Docker con soporte de GPU, consulte los siguientes recursos:

Si sigue estos pasos y utiliza los recursos proporcionados, podrá instalar y utilizar con éxito Docker con soporte de GPU en su sistema.

Configuración de las mejores prácticas de seguridad de Docker

La seguridad de Docker Engine es crucial para garantizar que sus contenedores y el sistema host estén protegidos contra posibles vulnerabilidades. A continuación, se indican algunas prácticas recomendadas:

  • Utilice el principio de mínimo privilegio : asegúrese de que sus contenedores se ejecuten con los mínimos privilegios necesarios para realizar sus tareas.
  • Utilice un usuario que no sea root : ejecute sus contenedores como un usuario que no sea root para limitar la superficie de ataque en caso de una violación.
  • Mantenga su versión de Docker actualizada : actualice periódicamente su versión de Docker para asegurarse de tener los últimos parches de seguridad.
  • Usar Docker Content Trust : habilite Docker Content Trust para garantizar la integridad de las imágenes que extrae de Docker Hub.
  • Limitar la exposición de la red : exponga únicamente los puertos necesarios a la red para minimizar la superficie de ataque.

Uso de Docker Compose

Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker multicontenedor. Permite definir los servicios que componen la aplicación y cómo interactúan entre sí. Estas son algunas ventajas de usar Docker Compose:

  • Implementación simplificada de aplicaciones : Docker Compose simplifica el proceso de implementación de aplicaciones multicontenedor.
  • Gestión sencilla de servicios : Docker Compose le permite iniciar, detener y escalar sus servicios fácilmente.
  • Control de versiones : los archivos de Docker Compose pueden controlarse por versiones, lo que facilita el seguimiento de los cambios en la configuración de su aplicación.

Eliminación de paquetes de Docker

Eliminar paquetes de Docker es esencial para mantener el sistema y garantizar que tenga instaladas las últimas versiones de Docker. A continuación, se indican algunos pasos a seguir:

  • Enumerar todos los paquetes Docker instalados : utilice el comando dpkg -l | grep dockerpara enumerar todos los paquetes Docker instalados.
  • Eliminar el paquete Docker : utilice el comando sudo apt remove docker-cepara eliminar el paquete Docker.
  • Eliminar dependencias de Docker : use el comando sudo apt autoremovepara eliminar cualquier dependencia que ya no sea necesaria.
  • Actualice su lista de paquetes : use el comando sudo apt updatepara actualizar su lista de paquetes después de eliminar los paquetes de Docker.

Las imágenes, contenedores, volúmenes o archivos de configuración personalizados de su host no se eliminan automáticamente. Para eliminar todas las imágenes, contenedores y volúmenes:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Eliminar lista de fuentes y llaveros:

sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc

Errores comunes y depuración

El demonio Docker no se inicia

Si el demonio de Docker no se inicia, puede deberse a varias razones, como problemas de configuración, conflictos con otros servicios o limitaciones de recursos del sistema. Para solucionar este problema, puede que vea mensajes de error como:

OutputFailed to start Docker Application Container Engine.

o

Outputdocker.service: Main process exited, code=exited, status=1/FAILURE

Para resolver este problema:

  1. Compruebe el estado del servicio Docker:sudo systemctl status docker
  2. Revise los registros de Docker para detectar errores:sudo journalctl -u docker
  3. Asegúrese de que el servicio Docker esté habilitado para iniciarse en el arranque:sudo systemctl enable docker
  4. Reinicie el servicio Docker:sudo systemctl restart docker

Errores de permisos al ejecutar comandos de Docker

Los errores de permisos ocurren cuando el usuario que ejecuta comandos de Docker no tiene suficientes privilegios. Para solucionar este problema, puede observar mensajes de error como:

Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Para resolver este problema:

  1. Asegúrese de que el usuario sea parte del dockergrupo:sudo usermod -aG docker ${USER}
  2. Cierre sesión y vuelva a iniciarla para aplicar los cambios de membresía del grupo
  3. Alternativamente, utilice sudoantes de ejecutar los comandos de Docker:sudo docker <command>

Si sigue estos pasos, debería poder resolver errores comunes relacionados con el demonio Docker que no se inicia y errores de permisos al ejecutar comandos Docker.

Preguntas frecuentes

¿Cómo instalo Docker en Ubuntu 22.04?

Para instalar Docker en Ubuntu , siga estos pasos:

  1. Actualice su lista de paquetes:sudo apt update
  2. Instalar los paquetes necesarios:sudo apt install apt-transport-https ca-certificates curl software-properties-common
  3. Agregue la clave GPG de Docker:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  4. Agregue el repositorio de Docker:echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. Actualice su lista de paquetes nuevamente:sudo apt update
  6. Instalar Docker:sudo apt install docker-ce

¿Cómo verifico que Docker esté instalado en Ubuntu?

Para verificar que Docker esté instalado en Ubuntu, ejecute el siguiente comando:sudo systemctl status docker

Este comando le mostrará el estado del servicio Docker. Si Docker está instalado y en ejecución, debería ver un resultado que indique que el servicio está activo y en ejecución. A continuación, se muestra un ejemplo de lo que podría ver:

Output● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2025-04-08 21:30:25 UTC; 22s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 7854 (dockerd)
      Tasks: 7
     Memory: 38.3M
        CPU: 340ms
     CGroup: /system.slice/docker.service
             └─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

¿Cómo ejecuto Docker sin sudo?

Para ejecutar Docker sin usar sudo, debes agregar tu usuario al dockergrupo. Así es como se hace:

  1. Añade tu usuario al dockergrupo:sudo usermod -aG docker ${USER}
  2. Cierre sesión y vuelva a iniciarla para aplicar los cambios.

Después de agregar su usuario al dockergrupo, debería poder ejecutar comandos de Docker sin usar sudo.

¿Cómo desinstalo Docker de Ubuntu?

Para desinstalar Docker de Ubuntu , siga estos pasos:

  1. Detener el servicio Docker:sudo systemctl stop docker
  2. Eliminar paquetes de Docker:sudo apt purge docker-ce
  3. Eliminar dependencias de Docker:sudo apt autoremove
  4. Eliminar el repositorio de Docker:sudo rm /etc/apt/sources.list.d/docker.list

Conclusión

En este tutorial, instalaste Docker, trabajaste con imágenes y contenedores, y subiste una imagen modificada a Docker Hub. Ahora que conoces los conceptos básicos, explora. Para configuraciones de Docker más avanzadas, considera los siguientes tutoriales:

Stephen Dove
Comments

March 25, 2025

Cómo agregar espacio de intercambio en Ubuntu 22.04

Introducción

Una forma de evitar errores de memoria insuficiente en las aplicaciones es añadir espacio de intercambio al servidor. En esta guía, explicaremos cómo añadir un archivo de intercambio a un servidor Ubuntu 22.04.

¿Qué es Swap?

El espacio de intercambio (swap) es una porción del almacenamiento del disco duro que el sistema operativo reserva para almacenar temporalmente los datos que ya no puede almacenar en la RAM. Esto permite aumentar la cantidad de información que el servidor puede almacenar en su memoria de trabajo, con algunas salvedades. El espacio de intercambio del disco duro se utiliza principalmente cuando ya no hay suficiente espacio en la RAM para almacenar los datos de las aplicaciones en uso.

La información escrita en el disco será significativamente más lenta que la almacenada en la RAM, pero el sistema operativo preferirá mantener los datos de las aplicaciones en ejecución en memoria y usar la memoria de intercambio (swap) para los datos más antiguos. En general, tener espacio de intercambio como respaldo cuando la RAM del sistema se agote puede ser una buena protección contra excepciones de falta de memoria en sistemas con almacenamiento no SSD disponible.

Paso 1: Verificación del sistema para obtener información de intercambio

Antes de comenzar, podemos comprobar si el sistema ya tiene espacio de intercambio disponible. Es posible tener varios archivos o particiones de intercambio, pero generalmente uno debería ser suficiente.

Podemos ver si el sistema tiene algún swap configurado escribiendo:

sudo swapon --show

Si no obtiene ningún resultado, significa que su sistema no tiene espacio de intercambio disponible actualmente.

Puedes verificar que no haya ningún intercambio activo usando la freeutilidad:

free -h

Output              total        used        free      shared  buff/cache   available
Mem:          981Mi       122Mi       647Mi       0.0Ki       211Mi       714Mi
Swap:            0B          0B          0B

Como puede ver en la fila Swap de la salida, no hay ningún swap activo en el sistema.

Paso 2: Verificar el espacio disponible en la partición del disco duro

Antes de crear nuestro archivo de intercambio, comprobaremos el uso actual del disco para asegurarnos de que tengamos suficiente espacio. Para ello, introduzca:

df -h

OutputFilesystem      Size  Used Avail Use% Mounted on
udev            474M     0  474M   0% /dev
tmpfs            99M  932K   98M   1% /run
/dev/vda1        25G  1.4G   23G   7% /
tmpfs           491M     0  491M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           491M     0  491M   0% /sys/fs/cgroup
/dev/vda15      105M  3.9M  101M   4% /boot/efi
/dev/loop0       55M   55M     0 100% /snap/core18/1705
/dev/loop1       69M   69M     0 100% /snap/lxd/14804
/dev/loop2       28M   28M     0 100% /snap/snapd/7264
tmpfs            99M     0   99M   0% /run/user/1000

En este caso, el dispositivo /en la Mounted oncolumna es nuestro disco. Tenemos mucho espacio disponible (solo se utilizan 1,4 GB). Tu uso probablemente será diferente.

Aunque existen diversas opiniones sobre el tamaño adecuado del espacio de intercambio, en realidad depende de tus preferencias personales y de los requisitos de tu aplicación. Generalmente, un buen punto de partida es una cantidad igual o el doble de la RAM de tu sistema. Otra regla general es que cualquier cantidad superior a 4 GB de espacio de intercambio probablemente sea innecesaria si solo la usas como RAM de reserva.

Paso 3: Creación de un archivo de intercambio

Ahora que conocemos el espacio disponible en el disco duro, podemos crear un archivo de intercambio en nuestro sistema de archivos. Asignaremos un archivo del tamaño que queramos llamar en nuestro directorio swapfileraíz ( )./

La mejor manera de crear un archivo de intercambio es con el fallocateprograma. Este comando crea instantáneamente un archivo del tamaño especificado.

Dado que el servidor de nuestro ejemplo tiene 1 GB de RAM, crearemos un archivo de 1 GB en esta guía. Ajústelo según las necesidades de su servidor:

sudo fallocate -l 1G /swapfile

Podemos verificar que se reservó la cantidad correcta de espacio escribiendo:

ls -lh /swapfile

-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

Nuestro archivo ha sido creado con la cantidad correcta de espacio reservado.

Paso 4 – Habilitación del archivo de intercambio

Ahora que tenemos disponible un archivo del tamaño correcto, necesitamos convertirlo en espacio de intercambio.

Primero, necesitamos restringir los permisos del archivo para que solo los usuarios con privilegios de root puedan leer su contenido. Esto impide que los usuarios normales accedan al archivo, lo que tendría importantes consecuencias para la seguridad.

Haga que el archivo sólo sea accesible para root escribiendo:

sudo chmod 600 /swapfile

Verifique el cambio de permisos escribiendo:

ls -lh /swapfile

Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

Como puede ver, solo el usuario root tiene habilitadas las funciones de lectura y escritura.

Ahora podemos marcar el archivo como espacio de intercambio escribiendo:

sudo mkswap /swapfile

OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

Luego de marcar el archivo, podemos habilitar el archivo de intercambio, permitiendo que nuestro sistema comience a usarlo:

sudo swapon /swapfile

Verifique que el intercambio esté disponible escribiendo:

sudo swapon --show

OutputNAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -2

Podemos verificar freenuevamente la salida de la utilidad para corroborar nuestros hallazgos:

free -h

Output              total        used        free      shared  buff/cache   available
Mem:          981Mi       123Mi       644Mi       0.0Ki       213Mi       714Mi
Swap:         1.0Gi          0B       1.0Gi

Nuestro intercambio se ha configurado correctamente y nuestro sistema operativo comenzará a usarlo según sea necesario.

Paso 5 – Hacer que el archivo de intercambio sea permanente

Nuestros cambios recientes han habilitado el archivo de intercambio para la sesión actual. Sin embargo, si reiniciamos, el servidor no conservará la configuración de intercambio automáticamente. Podemos cambiar esto añadiendo el archivo de intercambio a nuestro /etc/fstabarchivo.

Haga una copia de seguridad del /etc/fstabarchivo en caso de que algo salga mal:

sudo cp /etc/fstab /etc/fstab.bak

Agregue la información del archivo de intercambio al final de su /etc/fstabarchivo escribiendo:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

A continuación revisaremos algunas configuraciones que podemos actualizar para ajustar nuestro espacio de intercambio.

Paso 6 – Ajuste de la configuración de intercambio

Hay algunas opciones que puedes configurar y que tendrán un impacto en el rendimiento de tu sistema al trabajar con intercambio.

Ajuste de la propiedad de swappiness

Este swappinessparámetro configura la frecuencia con la que el sistema intercambia datos de la RAM al espacio de intercambio. Este valor, entre 0 y 100, representa un porcentaje.

Con valores cercanos a cero, el kernel no intercambiará datos con el disco a menos que sea absolutamente necesario. Recuerde que las interacciones con el archivo de intercambio son costosas, ya que tardan mucho más que las interacciones con la RAM y pueden causar una reducción significativa del rendimiento. Indicarle al sistema que no dependa demasiado del archivo de intercambio generalmente lo hará más rápido.

Los valores cercanos a 100 intentarán almacenar más datos en la memoria de intercambio para liberar más espacio de RAM. Dependiendo del perfil de memoria de sus aplicaciones o del uso que le dé al servidor, esto podría ser mejor en algunos casos.

Podemos ver el valor de swappiness actual escribiendo:

cat /proc/sys/vm/swappiness

Output60

Para una computadora de escritorio, un valor de swappiness de 60 no es un mal valor. Para un servidor, conviene acercarlo a 0.

Podemos establecer el swappiness a un valor diferente usando el sysctlcomando.

Por ejemplo, para establecer el swappiness a 10, podríamos escribir:

sudo sysctl vm.swappiness=10

Outputvm.swappiness = 10

Esta configuración se mantendrá hasta el próximo reinicio. Podemos configurar este valor automáticamente al reiniciar añadiendo la siguiente línea a nuestro /etc/sysctl.confarchivo:

sudo nano /etc/sysctl.conf

En la parte inferior puedes agregar: /etc/sysctl.conf

vm.swappiness=10

Guarde y cierre el archivo cuando haya terminado.

Ajuste de la configuración de presión de caché

Otro valor relacionado que podrías querer modificar es el vfs_cache_pressure. Esta configuración configura con qué frecuencia el sistema almacenará en caché la información de inodos y entradas de entrada sobre otros datos.

Básicamente, se trata de datos de acceso al sistema de archivos. Su consulta suele ser muy costosa y se solicita con mucha frecuencia, por lo que es excelente almacenarlos en caché. Puede ver el valor actual consultando procde nuevo el sistema de archivos:

cat /proc/sys/vm/vfs_cache_pressure

Output100

Con la configuración actual, nuestro sistema elimina la información de inodos de la caché demasiado rápido. Podemos configurarlo con un valor más conservador, como 50, escribiendo:

sudo sysctl vm.vfs_cache_pressure=50

Outputvm.vfs_cache_pressure = 50

Nuevamente, esto solo es válido para nuestra sesión actual. Podemos cambiarlo añadiéndolo a nuestro archivo de configuración, como hicimos con la configuración de intercambio:

sudo nano /etc/sysctl.conf

En la parte inferior, agregue la línea que especifica su nuevo valor: /etc/sysctl.conf

vm.vfs_cache_pressure=50

Guarde y cierre el archivo cuando haya terminado.

Conclusión

Seguir los pasos de esta guía le dará un respiro en casos que, de otro modo, provocarían excepciones de memoria insuficiente. El espacio de intercambio puede ser increíblemente útil para evitar algunos de estos problemas comunes.

Si se encuentra con errores OOM (sin memoria) o descubre que su sistema no puede utilizar las aplicaciones que necesita, la mejor solución es optimizar las configuraciones de sus aplicaciones o actualizar su servidor.

Stephen Dove
Comments

March 22, 2025

Cómo instalar una interfaz gráfica de usuario en un servidor Ubuntu: guía paso a paso

Introduccion

Ubuntu Server está diseñado principalmente para funcionar sin interfaz gráfica, lo que lo hace ligero y optimizado para su uso en servidores. Sin embargo, en ciertas situaciones, una GUI puede simplificar la administración del sistema, especialmente para usuarios que no están familiarizados con la línea de comandos. En este tutorial, te guiaré en el proceso de instalación de una GUI en Ubuntu Server .

Prerrequisitos

Antes de continuar con la instalación, asegúrese de tener lo siguiente:

  1. El último servidor Ubuntu instalado .
  2. Una cuenta de usuario con sudo privilegios .
  3. Una conexión a Internet activa.

Instalación de una interfaz gráfica de usuario (GUI) en el servidor Ubuntu

Paso 1: Actualice su sistema

Antes de instalar cualquier software, es fundamental asegurarse de que su sistema esté actualizado. Ejecute los siguientes comandos para actualizar las listas de paquetes y actualizar los paquetes obsoletos:

sudo apt update
sudo apt upgrade -y

Esto garantiza que tenga instalados los últimos parches de seguridad y actualizaciones del sistema.

Paso 2: Elige un entorno de escritorio

Ubuntu ofrece diversos entornos de escritorio que se adaptan a diferentes necesidades y preferencias de rendimiento. Estos son algunos de los más populares:

  • GNOME: el entorno de escritorio predeterminado para Ubuntu Desktop.
  • Xfce (Xubuntu): ligero y eficiente en el uso de recursos.
  • LXDE (Lubuntu): Extremadamente liviano, ideal para hardware de bajas especificaciones.
  • KDE (Kubuntu): un entorno rico en características que podría utilizar más recursos.

En este tutorial, nos centraremos en la instalación de GNOME y Xfce, pero puedes elegir cualquiera de los otros reemplazando el nombre del paquete en los siguientes pasos.

Paso 3: Instalar el entorno de escritorio

Instalación de GNOME

Si prefiere la experiencia completa del escritorio Ubuntu, puede instalar el entorno de escritorio GNOME. Ejecute el siguiente comando:

sudo apt install ubuntu-desktop -y

Esto instalará el escritorio GNOME completo, junto con todas sus aplicaciones asociadas, que pueden consumir muchos recursos.

Instalación de Xfce

Si necesitas una opción más ligera, Xfce es una excelente opción. Para instalarlo, ejecuta:

sudo apt install xubuntu-core -y

Esto instala el entorno de escritorio Xfce sin aplicaciones innecesarias, lo que lo convierte en una opción más minimalista y eficiente para los servidores.

Instalación de otros escritorios

Puede instalar otros entornos de escritorio como LXDE o KDE ejecutando:

# For LXDE
sudo apt install lubuntu-core -y


# For KDE Plasma
sudo apt install kubuntu-desktop -y

Paso 4: Instalar un administrador de pantalla

Un administrador de pantalla se encarga de iniciar el entorno de escritorio. Ubuntu usa GDM (Administrador de Pantalla de GNOME) por defecto, pero puedes instalar otros como LightDM para una opción más ligera, especialmente si usas Xfce o LXDE.

Para instalar LightDM, ejecute:

sudo apt install lightdm -y

Durante la instalación, se le pedirá que seleccione un administrador de pantalla predeterminado. Si no está seguro, LightDM es una buena opción, especialmente para entornos ligeros como Xfce.

Paso 5: Habilite la GUI para que se inicie automáticamente

Una vez completada la instalación, deberá configurar su sistema para que inicie la GUI automáticamente.

Primero, verifique el objetivo predeterminado del sistema, que determina qué servicios se inician cuando se inicia el sistema:

systemctl get-default

Por defecto, debería devolver multi-user.target, que corresponde al modo no gráfico. Para cambiar al modo gráfico, ejecute:

sudo systemctl set-default graphical.target

Ahora, su servidor se iniciará en la interfaz gráfica automáticamente en el próximo inicio.

Paso 6: Reiniciar el sistema

Una vez que haya instalado el entorno de escritorio y lo haya configurado para que se inicie automáticamente, reinicie su sistema para aplicar los cambios:

sudo reboot

Después de reiniciar, debería aparecer la pantalla de inicio de sesión del entorno de escritorio que instaló (GNOME, Xfce, etc.).

Paso 7: Conectarse a la GUI (opcional)

Si administra su servidor de forma remota, puede usar una conexión de escritorio remoto para acceder a la interfaz gráfica de usuario. Estas son algunas opciones populares:

Consola en la nube : Tu proveedor de nube probablemente ya cuente con una función de consola que te permite conectarte a tu servidor. Si usas servidores Cherry , selecciona tu máquina virtual en el portal del cliente y haz clic en Consolepara acceder a la consola de tu servidor.

Luego puede iniciar sesión a través de la GUI y acceder a su escritorio:

VNC : Una opción popular para conexiones de escritorio remoto. Para instalar un servidor VNC, ejecute:

sudo apt install tightvncserver -y

RDP (Protocolo de Escritorio Remoto) : RDP es un protocolo de Microsoft para conexiones remotas, compatible con Ubuntu. Para instalar un servidor RDP, ejecute:

sudo apt install xrdp -y

Después de instalar su servidor de escritorio remoto preferido, configúrelo según sus necesidades y conéctese usando su máquina local.

Es posible que necesite configurar su firewall para permitir el acceso a su servidor VNC o RDP.

Paso 8: Administrar la GUI

Si alguna vez desea volver a un entorno no gráfico, puede cambiar el objetivo predeterminado a multi-user.target:

sudo systemctl set-default multi-user.target

Esto garantizará que su servidor arranque en la interfaz

de línea de comandos (CLI) de manera predeterminada.

#Conclusión

En este tutorial, explicamos cómo instalar una interfaz gráfica de usuario (GUI) en Ubuntu Server. Esto simplifica las tareas para quienes prefieren una interfaz gráfica. Ya sea que elija GNOME, con sus numerosas funciones, o Xfce, un sistema ligero, ahora sabe cómo instalar, configurar y administrar una GUI en su servidor. Tenga en cuenta que usar una GUI consume más recursos del sistema y puede afectar el rendimiento, especialmente en servidores de producción.

Stephen Dove
Comments

March 21, 2025

Cómo instalar Drupal en un servidor Ubuntu 14.04 con Apache

Introducción

Drupal es un popular sistema de gestión de contenido (CMS) utilizado para gestionar algunos de los blogs y sitios web más grandes de internet. Gracias a la estabilidad de su base, la adaptabilidad de la plataforma y su activa comunidad, Drupal sigue siendo una opción popular tras más de una década en el mercado.

En esta guía, explicaremos cómo instalar Drupal en un servidor Ubuntu 14.04. Usaremos Apache para nuestro sitio, ya que es la configuración recomendada por el equipo de Drupal.

Prerrequisitos

Antes de comenzar con esta guía, necesitará un servidor Ubuntu 14.04 con una configuración básica completa. Siga nuestra guía de configuración inicial del servidor Ubuntu 14.04 para configurar un usuario no root con privilegios de sudo.

También necesitará tener Apache, PHP y MySQL configurados en su servidor. Puede aprender a configurarlos siguiendo nuestra guía sobre cómo instalar LAMP en Ubuntu 14.04 .

Una vez que haya cumplido con los requisitos anteriores, continúe con esta guía.

Antes de obtener los archivos de Drupal e instalarlos en nuestro directorio web, debemos preparar nuestro sistema. Si bien Apache, PHP y MySQL ya están instalados, necesitamos realizar algunos cambios adicionales y ajustes en cada uno para nuestra instalación.

Configurar un usuario y una base de datos MySQL para Drupal

Lo primero que haremos es configurar un usuario y una base de datos MySQL para nuestra instalación de Drupal. Es importante configurar un usuario y una base de datos dedicados por razones de seguridad.

Para comenzar, inicie sesión en MySQL:

mysql -u root -p

Se le solicitará la contraseña del usuario root de MySQL que configuró durante la instalación de ese software.

Una vez autenticado, accederá a un mensaje de MySQL. Primero, cree una base de datos para su instalación de Drupal. drupalPara simplificar, la llamaremos:

CREATE DATABASE drupal;

A continuación, debe crear un usuario que Drupal pueda usar para conectarse a la base de datos. En esta guía, lo llamaremos usuario drupaluser. Seleccione una contraseña segura para reemplazar la del bloque a continuación:

CREATE USER drupaluser@localhost IDENTIFIED BY 'password';

Ahora tenemos una base de datos y un usuario, pero este aún no tiene permiso para realizar ninguna acción en la base de datos. Podemos solucionarlo otorgándole permisos. Drupal necesita diversos permisos para funcionar correctamente. A continuación, se muestra una buena selección que permitirá que el software funcione sin exponer nuestra base de datos innecesariamente:

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER,CREATE TEMPORARY TABLES,LOCK TABLES ON drupal.* TO drupaluser@localhost;

Su usuario ya tiene permiso para administrar la base de datos que creamos. Para implementar estos cambios ahora mismo, necesitamos vaciar la información de privilegios al disco:

FLUSH PRIVILEGES;

Ahora, podemos salir de nuestra sesión interactiva MySQL:

exit

Serás redirigido nuevamente a tu bashsesión.

Instalar módulos PHP y ajustar la configuración

A continuación, instalaremos algunos módulos PHP necesarios para la aplicación Drupal. Por suerte, se encuentran en los repositorios predeterminados de Ubuntu.

Actualice su caché de paquetes local e instálelos escribiendo:

sudo apt-get update
sudo apt-get install php5-gd php5-curl libssh2-php

También realizaremos algunos pequeños ajustes en nuestro archivo de configuración de PHP. Estos son recomendados por los desarrolladores de Drupal. Abra el archivo de configuración de Apache PHP con privilegios de sudo en su editor de texto:

sudo nano /etc/php5/apache2/php.ini

Busque la expose_phpdirectiva y la allow_url_fopendirectiva y configúrelas ambas en “Desactivado”:

. . .
expose_php = Off
. . .
allow_url_fopen = Off
. . .

Guarde y cierre el archivo cuando haya terminado.

Habilitar la funcionalidad de reescritura y archivos .htaccess en Apache

A continuación, debemos analizar Apache. Primero, queremos habilitar la función de reescritura. Esto permitirá que nuestro sitio Drupal modifique las URL a cadenas de texto legibles.

Los mod_rewritemódulos de Apache ya están instalados por defecto. Sin embargo, no están habilitados. Podemos activarlos escribiendo:

sudo a2enmod rewrite

Esto habilitará el módulo la próxima vez que se reinicie Apache. Antes de reiniciar Apache, debemos ajustar la configuración de nuestro host virtual para permitir el uso de un .htaccessarchivo. Este archivo contendrá las reglas de reescritura y se incluye por defecto en la instalación de Drupal.

Abra ahora el archivo virtualhost predeterminado:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Dentro del bloque “VirtualHost”, agregue un bloque de directorio que apunte a la raíz de nuestra web. Dentro de este bloque, establezca la AllowOverridedirectiva en “All”. También puede agregar una ServerNamedirectiva que apunte a su nombre de dominio y modificarla ServerAdminpara que refleje una dirección de correo electrónico válida:

<VirtualHost *:80>
    . . .
    ServerName  example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        AllowOverride All
    </Directory>
    . . .
</VirtualHost>

Guarde y cierre el archivo cuando haya terminado.

Ahora solo necesitamos reiniciar el servidor web para implementar nuestros cambios en Apache y PHP:

sudo service apache2 restart

Instalar los archivos de Drupal

Ahora que nuestro sistema está listo, podemos instalar Drupal en nuestra raíz web.

De hecho, primero descomprimiremos los archivos en nuestro directorio personal y luego los copiaremos a la ubicación correspondiente. Esto nos dará acceso inmediato a los archivos originales en caso de que algo salga mal o se eliminen accidentalmente posteriormente.

Vaya a la página de descarga de Drupal y consulte la última versión en la sección “Versiones recomendadas”. Haga clic derecho en el tar.gzenlace de la versión que le interese y seleccione “Copiar dirección del enlace” o cualquier opción similar que ofrezca su navegador.

De vuelta en su servidor, cambie a su directorio de inicio y use wgetel enlace que copió para descargar el archivo del proyecto:

cd ~
wget http://ftp.drupal.org/files/projects/drupal-7.32.tar.gz

Es probable que el enlace tenga un número de versión diferente al final. Una vez descargado el archivo, extraiga el directorio de la aplicación escribiendo:

tar xzvf drupal*

Ahora, acceda a la estructura de directorios recién extraída y use la rsyncutilidad para copiar de forma segura todos los archivos al directorio raíz web de su servidor. En este comando, usamos el punto para especificar el directorio actual. Esto es necesario para copiar algunos archivos ocultos que necesitamos:

cd drupal*
sudo rsync -avz . /var/www/html

Ahora tienes la versión original de los archivos en un directorio dentro de tu carpeta de inicio por si necesitas consultarlos. Nos trasladaremos al directorio raíz web para personalizar nuestra instalación:

cd /var/www/html

Ajuste de los archivos de Drupal para mayor seguridad y facilidad de instalación

El script de instalación web requiere que realicemos algunos cambios en nuestro directorio de Drupal para completar el proceso correctamente. Debemos solucionar esto con antelación para no tener que alternar entre el navegador web y la línea de comandos.

Primero, necesitamos crear un nuevo directorio bajo el subárbol sites/defaultllamado files:

mkdir /var/www/html/sites/default/files

A continuación, debemos copiar el archivo de configuración predeterminada al nombre de archivo que Drupal utiliza para la configuración activa:

cp /var/www/html/sites/default/default.settings.php /var/www/html/sites/default/settings.php

Este archivo de configuración activo requiere temporalmente permisos adicionales durante la instalación. Necesitamos otorgar permisos de escritura al propietario del grupo por el momento (próximamente asignaremos el propietario del grupo al usuario web). Lo eliminaremos una vez que la instalación se complete correctamente:

chmod 664 /var/www/html/sites/default/settings.php

A continuación, necesitamos asignar la propiedad de grupo de nuestros archivos al usuario web, que en Ubuntu es www-data. Queremos otorgarle a toda la instalación de Drupal estas propiedades de propiedad:

sudo chown -R :www-data /var/www/html/*

Su servidor ahora está configurado adecuadamente para ejecutar el script de instalación basado en web.

Complete el procedimiento de instalación basado en la web

El resto de la instalación se realizará en su navegador web. Abra el navegador y navegue hasta el nombre de dominio o la dirección IP de su servidor:

http://server_domain_or_IP

Verá la página inicial del procedimiento de instalación de Drupal:

Drupal elige perfil

A menos que tenga alguna razón para no hacerlo, seleccione la instalación “Estándar” y haga clic en “Guardar y continuar”. Haga clic en los siguientes botones de continuar hasta llegar a la página de configuración de la base de datos. Complete los datos que utilizó al configurar la base de datos y el usuario.

Para esta guía, utilizamos una base de datos llamada drupal, un usuario de base de datos llamado drupalusery una contraseña de password. Debería haber seleccionado una contraseña diferente durante la creación del usuario. Haga clic en “Guardar y continuar” de nuevo cuando haya completado los datos de su base de datos:

Configuración de la base de datos de Drupal

Nota : Al hacer clic en “Guardar y continuar”, es posible que se le redirija a la misma página de configuración de la base de datos. Si esto ocurre, simplemente actualice la página. La base de datos se configurará y el perfil se instalará.

Verá un cuadro de información en la parte superior de la página que le indica que ahora puede cambiar los permisos del archivo de configuración. Lo haremos en breve. Por ahora, necesita configurar información básica sobre su sitio. Complete los campos con los valores adecuados para su sitio:

Sitio de configuración de Drupal

Haga clic en el botón “Guardar y continuar” por última vez para completar la instalación. Ahora puede visitar su sitio web accediendo a su nombre de dominio:

Instalación completa de Drupal

Ha completado exitosamente la instalación de Drupal.

Sin embargo, aún necesitamos revertir los permisos de nuestro archivo de configuración para que usuarios no autorizados no puedan realizar cambios. En su servidor, restrinja el acceso de escritura al archivo escribiendo:

chmod 644 /var/www/html/sites/default/settings.php

Esto debería bloquear futuros cambios en el archivo de configuración.

Solución de problemas

Si la etapa final de la instalación de Drupal no se completa, revise sus registros de errores:

sudo tail /var/log/apache2/error.log

Si ves un error como este:

[Wed Nov 12 13:40:10.566144 2014] [:error] [pid 7178] [client 108.29.37.206:55238] PHP Fatal error:  Call to undefined function field_attach_load() in /var/www/html/includes/entity.inc on line 316, referer: http://12.34.56.78/install.php?profile=standard&locale=en
sh: 1: /usr/sbin/sendmail: not found

Esto indica que la instalación no se completó correctamente. Existen varias causas y soluciones para este error, documentadas por Drupal:

https://www.drupal.org/node/481758

Algunas de las soluciones más probables incluyen editar el /etc/php5/apache2/php.iniarchivo para generar el max_execution_time:

sudo nano /etc/php5/apache2/php.ini

Archivo:

max_execution_time = 300

También puedes probar la instalación en un navegador distinto a Chrome, como Safari. La configuración de cookies del navegador puede interferir con la instalación.

De todas formas, una vez que implementes la solución, tendrás que eliminar la base de datos y /var/www/html/sites/default/settings.phpel archivo de Drupal existentes, reemplazarlos con copias predeterminadas y reiniciar la instalación. Si tienes datos o configuraciones que deban conservarse, haz copias de seguridad.

Para hacer esto, puede iniciar sesión en MySQL y DROP DATABASE drupal;luego seguir nuevamente la sección de base de datos anterior para crear la base de datos y otorgarle los privilegios.

También puedes ejecutarlo cp /var/www/html/sites/default/default.settings.php /var/www/html/sites/default/settings.phpde nuevo para reemplazar el archivo de configuración. Asegúrate de ejecutar el chmod 664 /var/www/html/sites/default/settings.phpcomando para restablecer los permisos correctos.

Luego visite su dirección IP nuevamente, posiblemente en un navegador diferente, e intente la instalación final nuevamente.

Conclusión

Ahora tienes una base sólida para crear tu sitio Drupal. Drupal es increíblemente flexible, lo que te permite personalizar la apariencia y la funcionalidad del sitio según tus necesidades y las de tus usuarios.

Para obtener ideas sobre cómo seguir, visita nuestra página de etiquetas de Drupal , donde encontrarás tutoriales que te ayudarán en tu proceso. También encontrarás una sección de preguntas y respuestas para obtener ayuda o contribuir a la comunidad.

Stephen Dove