Introducción A Linux (En Proceso)
Introducción A Linux (En Proceso)
a
Linux
INTRODUCCIÓN A LINUX
Introducción a Linux
¿Qué es Unix? Es una familia de sistemas operativos, algunos de los sistemas operativos más populares
basados en Unix incluyen: Oracle Solaris (y Open Solaris), FreeBSD, HP-UX, IBM AIX y Apple macOS, que
es uno de los sistemas operativos de escritorio más populares en la actualidad. En la década de 1960, se
creó el sistema operativo Unix original en AT&T Bell Labs, sin embargo, como muchos sistemas operativos
de la época, se creó para un sistema de hardware específico, en este caso, la computadora PDP-7. En la
década de 1970, el sistema operativo Unix se reescribió en C, distinguiéndose de otros sistemas y
haciéndolo portátil a muchas arquitecturas de hardware, luego, a finales de la década de 1970, la
Universidad de California en Berkley desarrolló Berkley Software Distribution (o BSD), un complemento de
Unix que proporcionaba software y capacidades adicionales. El famoso macOS se derivó más tarde de
BSD.
¿Qué es Linux? Linux es una familia de sistemas operativos tipo Unix, sin embargo, cuando se hace
referencia a Linux, la gente suele hablar de una distribución o versión específica, y Linux se desarrolló como
un esfuerzo por crear una versión gratuita y de código abierto del sistema operativo Unix. Las principales
características de Linux incluyen las siguientes:
● Linux es gratuito y de código abierto, lo que significa que cualquiera puede ver el código fuente.
● Con tantos ojos puestos en el código fuente, Linux se ha convertido en el sistema operativo más
seguro a lo largo de los años.
● Es multiusuario, Linux está diseñado para permitir que varios usuarios accedan al sistema
simultáneamente.
● Admite multitarea, ejecuta múltiples trabajos y aplicaciones al mismo tiempo.
● Linux es portátil.
Linux ha sido adaptado para ejecutarse en muchos tipos diferentes de dispositivos y plataformas de
hardware, desde computadoras de escritorio hasta servidores y dispositivos.
¿Cómo comenzó Linux? En la década de 1980, GNU se desarrolló en el MIT. GNU significa «GNU no es
Unix» y se creó como un conjunto gratuito y de código abierto de las herramientas existentes del sistema
Unix, y en 1991, Linus Torvalds desarrolló una versión gratuita y de código abierto del núcleo de Unix
llamada Linux (El núcleo es el componente central de un sistema operativo que permite que los
componentes se comuniquen con el hardware de la máquina).
Este es el famoso correo electrónico de Linus Torvalds, en el que compartía sus avances en la creación de
su propio núcleo de código abierto tipo Unix.
Hace referencia a minix, que en ese momento era otro núcleo similar a Unix, poco después, en 1992, se hizo
realidad el potencial de unificar GNU y el núcleo de Linux, con la aparición de los populares sistemas
operativos Linux, y en 1996, un informático llamado Larry Ewing creó el pingüino «Tux», que más tarde fue
adoptado por Linus Torvalds como mascota oficial de Linux, en la actualidad, el macOS basado en BSD
funciona en millones de dispositivos en todo el mundo.
Miles de millones de instancias de Linux se ejecutan en servidores, lo que nos sirve para la web
moderna, y especialmente entre los desarrolladores, los sistemas operativos Linux modernos, como Ubuntu,
están empezando a ganar popularidad en el ámbito de los PC.
¿Cuáles son los casos de uso más comunes de Linux en la actualidad? En primer lugar, se utiliza en
miles de millones de teléfonos inteligentes de todo el mundo a través del sistema operativo Android, que
utiliza un núcleo basado en Linux, y Linux también se usa ampliamente en supercomputadoras, donde
muchos servidores que funcionan con Linux se agrupan en clusters para aplicaciones informáticas de alto
rendimiento. Los centros de datos empresariales y en la nube también utilizan Linux en millones de
servidores que ejecutan todo tipo de aplicaciones, servidores web, bases de datos, etc, y por último,
las versiones de Linux se pueden utilizar fácilmente como sistema operativo de su PC, muchas
personas instalan Linux hoy en día como una experiencia de aprendizaje o como su motor diario.
#Distribuciones Linux
¿Qué es una distribución de Linux? Una distribución de Linux es una versión específica del sistema
operativo Linux, también se la puede denominar distribución. Todas las distribuciones de Linux deben
usar el núcleo de Linux, este es el componente principal del sistema operativo Linux que permite al sistema
utilizar correctamente el hardware del ordenador, y hoy en día, hay cientos de distribuciones de Linux,
cada una diseñada para una audiencia o tarea específica.
¿Qué diferencia a las distribuciones de Linux entre sí? Cada distribución de Linux incluye un
conjunto único de utilidades predeterminadas que forman parte del sistema operativo, como los
comandos y las aplicaciones que vienen pre empaquetados con la distribución, cada distribución tiene su
propia interfaz gráfica de usuario, o GUI, que se utiliza para interactuar con el sistema operativo, cada
distribución admite un conjunto específico de comandos que puede utilizar en un shell, una ventana
para introducir y recibir los resultados de los comandos, por último, cada distribución ofrece diferentes
niveles de soporte, podría desarrollarse y gestionarse como un proyecto respaldado por la comunidad o
mantenerse por una empresa comercial, y podría ser una versión con soporte a largo plazo, o LTS, o una
versión progresiva en la que las actualizaciones estables de los paquetes se publiquen de forma continua.
Debian es una de las primeras distribuciones rooteadas, la primera versión fue publicada en 1993
(denominada versión 0.01) y la primera versión estable oficial en 1996 (versión 1.1), es conocida por ser
estable, fiable y de código totalmente abierto, es compatible con muchas arquitecturas informáticas
(o tipos de hardware), estas características hacen que Debian sea muy apreciado en el ámbito de los
servidores, además, Debian es la mayor distribución gestionada por la comunidad disponible actualmente.
Otra distribución popular es Ubuntu, también es una distribución muy arraigada, con su primer
lanzamiento oficial en 2004, Ubuntu está basado en Debian, lo que significa que está construido sobre este y
utiliza muchas de las mismas herramientas que el sistema operativo Debian. Ubuntu está desarrollado y
gestionado por Canonical, y tiene tres ediciones oficiales:
Red Hat Linux, al igual que Debian, es una distribución de Linux «básica», lo que significa que no se
deriva de otra distribución de Linux. Red Hat es conocida por ser estable, fiable y de código totalmente
abierto, está gestionada por Red Hat, una filial de IBM, en la actualidad, se distribuye bajo el nombre de
Red Hat Enterprise Linux (o RHEL), una edición que se centra exclusivamente en los clientes
empresariales.
El siguiente es Fedora, conocido como un sistema operativo estable que admite muchas arquitecturas,
también es muy confiable y seguro, y ofrece características únicas de firewall y seguridad. Se desarrolla
activamente, con una comunidad grande y en crecimiento, y está patrocinado por Red Hat, en consecuencia,
Red Hat utiliza gran parte del código base de Fedora (después de probarlo, por supuesto).
Otra distribución de Linux es SUSE Linux Enterprise, también conocida como SLE, SUSE Linux
Enterprise está disponible en dos ediciones: Server (SLES), y Desktop (SLED), es compatible con
muchas arquitecturas, como ARM para Raspberry Pi, y utiliza el SUSE Package Hub, que permite a los
usuarios instalar paquetes que no forman parte oficialmente de SLE, y lo mantiene la pequeña empresa
alemana de software de código abierto, SUSE.
Por último, tenemos Arch Linux, el enfoque único de Arch Linux, basado en «hágalo usted mismo»,
permite a los usuarios personalizar cada parte de su sistema, esto lo hace altamente configurable, una
libertad que hace que Arch sea muy popular, pero también significa que es necesario tener un buen
conocimiento de Linux y de las herramientas del sistema para poder utilizar Arch de forma eficaz, y como
Arch no se centra en la estabilidad de la misma manera que otras distribuciones, tiene fácil acceso al
software más reciente, lo que tiene pocas garantías de que sea completamente estable.
● La capa más externa de la arquitectura Linux es la interfaz de usuario, que permite a los usuarios
realizar tareas controlando las aplicaciones con el teclado. Las versiones de escritorio de Linux incluyen
una interfaz gráfica de usuario, o capa GUI, similar a la de Microsoft Windows. Esto amplía la
funcionalidad de la interfaz de usuario a otros dispositivos de control, como un ratón.
● La capa de aplicación incluye los demonios del sistema, las consolas, las aplicaciones de usuario y las
herramientas que se utilizan para realizar tareas en un sistema Linux, las aplicaciones se comunican con
el sistema operativo para realizar tareas.
● El sistema operativo es responsable de las tareas que son vitales para la estabilidad del sistema, como
la programación de las tareas y el registro del tiempo, sus funciones también incluyen:
○ Asignar el software a los usuarios.
○ Detectar errores.
○ Implementar medidas para evitar fallas totales del sistema.
○ Realizar la administración de archivos.
Todos los sistemas operativos Linux se basan en el núcleo de Linux, que realiza las tareas más
importantes de nivel inferior.
● El núcleo es el componente principal del sistema operativo y es responsable de administrar la
memoria, el procesamiento y la seguridad, es el software de nivel más bajo de un sistema Linux y
tiene el control total del sistema, se inicia tan pronto como se inicia el equipo y permanece en la
memoria del equipo mientras el sistema está en funcionamiento. También actúa como puente entre
las aplicaciones y el hardware, incluye todos los dispositivos físicos o electrónicos del ordenador,
como los procesadores, los módulos de memoria, los dispositivos de entrada y el almacenamiento, de la
máquina lo que permite que ambas se comuniquen de forma eficaz mediante «llamadas al
sistema». El núcleo cumple cuatro funciones principales:
○ Gestionar la memoria.
○ Gestionar los procesos.
○ Gestionar los controladores de los dispositivos para garantizar el correcto soporte del hardware.
○ Garantizar la seguridad del sistema.
● La última capa del sistema Linux es el hardware, formado por los dispositivos físicos o electrónicos
que componen el ordenador. Esta capa puede incluir lo siguiente:
○ La unidad central de procesamiento, o CPU, es responsable de ejecutar la mayoría de los cálculos.
○ La memoria de acceso aleatorio, o RAM, que es una unidad de almacenamiento rápido que se
utiliza para almacenar la información temporal que las aplicaciones necesitan para ejecutarse.
○ Almacenamiento para los datos que deben conservarse cuando el ordenador está apagado.
○ La pantalla de tu ordenador.
○ Cualquier dispositivo USB, como un teclado, un ratón o una unidad USB.
Uno de los directorios clave es /bin, que contiene los archivos binarios de los usuarios, los archivos
binarios contienen el código que lee su máquina para ejecutar programas y comandos. Se llama
«barra diagonal» para indicar que se encuentra justo debajo del directorio raíz.
Otros directorios clave son /usr, que contiene los programas de usuario:
● /home, que es su directorio de trabajo personal donde debe almacenar todos sus archivos personales.
● /boot, que contiene los archivos de arranque del sistema, las instrucciones esenciales para el inicio del
sistema.
● /media, que contiene archivos relacionados con soportes temporales, como unidades de CD o USB que
están conectadas al sistema.
Hay varios otros directorios en el directorio raíz, pero no necesitará acceder a ellos durante este
curso.
Todos los archivos y directorios de un sistema Linux se organizan en una de estas carpetas designadas,
según el propósito del archivo o directorio.
El shell de Linux es una aplicación a nivel de sistema operativo que interpreta comandos, en las
primeras versiones de Unix y Linux, el shell era la única forma de interactuar con el sistema operativo, en la
actualidad, también se pueden utilizar interfaces gráficas de usuario, pero la consola sigue siendo una opción
popular y flexible, y una forma sencilla de ejecutar archivos de script.
Puede utilizar los comandos del shell para realizar tareas como mover y copiar archivos, escribir y
leer archivos, extraer y filtrar datos y buscar datos.
Existen muchas versiones de shell, pero la funcionalidad básica de la mayoría es la misma, algunos
ejemplos populares incluyen: Bash And Zsh.
Se interactúa con el shell de Linux a través de una terminal de Linux, un terminal es una aplicación, o
interfaz de usuario, en la que se introducen los comandos que se desean ejecutar y se recibe
cualquier resultado de esos comandos, por ejemplo, para iniciar la aplicación Python y ejecutar un
programa llamado «myprogram.py», escriba python space myprogram.py, al pulsar Entrar, el shell ejecuta el
comando.
En primer lugar, tenemos un usuario que quiere ejecutar un comando. Introducen el comando en una
terminal, que luego se transmite al shell, los componentes principales del sistema operativo y del núcleo
traducen el comando para que lo ejecute el hardware, cuando el hardware completa el comando, el
núcleo lee los cambios o los resultados y los envía de vuelta a la terminal a través del shell para su
información al usuario. El terminal es una forma eficaz de ejecutar aplicaciones e interactuar con su
máquina.
La mayoría de los terminales tienen una interfaz de usuario similar para introducir comandos, el área en la
que se introducen los comandos se denomina línea de comandos, y la línea vertical, o cursor, es la línea
de comandos, esto indica dónde se mostrará el texto que escriba.
En este ejemplo, el directorio de trabajo actual es el directorio de documents, que está dentro del
directorio me, que está dentro del directorio principal. El directorio de trabajo actual es la ubicación en la que
el shell buscará los comandos que especifique para ejecutar, por ejemplo, el programa Python del ejemplo
anterior.
No todos los terminales muestran la ubicación completa, o la ruta, del directorio actual, por lo que
algunos solo muestran los documentos aquí. La ruta es la ubicación legible por humanos de un
directorio o archivo en el sistema de archivos de Linux. La estructura «a / b» indica que el archivo o
directorio denominado «b» se encuentra dentro del directorio denominado «a».
Entonces, veamos cómo puedes usar el terminal para cambiar el directorio de trabajo actual:
1. Empezando por el directorio /home Introduzca «cd..» para cambiar el directorio de trabajo actual por el
principal del directorio de trabajo actual existente, por lo tanto, en este ejemplo, el directorio principal de
/home es/, o sea, el directorio raíz.
2. Para, a continuación, ir a una unidad USB llamada my-usb-drive en el directorio multimedia, introduzca
cd /media/my-usb-drive.
3. También puede navegar hacia arriba y hacia abajo en el árbol con un solo comando. Para navegar
hasta el directorio multimedia y luego hasta la raíz, escriba “cd../..”.
4. A continuación para navegar hasta el directorio de documentos en el directorio “me” del directorio
principal, escriba /home/me/documents, pulse Entrar para enviar el comando y pasar a la carpeta
Documents.
5. Vamos al directorio /home/me, iniciemos la aplicación Python y ejecutemos un programa en el directorio
/home/me llamado myprogram.py, este programa devuelve un mensaje a la ventana del terminal.
La terminal de Linux: Puede interactuar con el shell de Linux ingresando comandos en la terminal de
Linux, que también se conoce comúnmente como línea de comando o símbolo del sistema.
En este caso, el directorio de trabajo actual es /home/project, como lo indica el texto azul.
Recuerde que una ventana de terminal es una interfaz de usuario simple que le permite ejecutar
cualquier comando que desee, simplemente escribiendo el comando en su teclado y presionando Enter.
Muchos comandos responderán devolviendo algún tipo de resultado, que de forma predeterminada aparece
como texto en la ventana de su terminal.
Veamos cómo funciona esto usando algunos de los comandos más comunes de Linux, los comandos
pwd y ls:
Aquí ingresamos el comando pwd, que imprime el nombre de la ruta de nuestro directorio de trabajo actual
en la siguiente línea, puedes ver que el comando imprime lo que esperábamos, que es la ruta al directorio
de trabajo actual, /home/project, observe también que el símbolo del sistema aparece nuevamente en la
siguiente línea, esperando su próximo comando.
Ahora, ¿cómo ves lo que hay dentro de tu directorio de trabajo actual?, puede usar el comando ls para
enumerar el contenido del directorio en el que está trabajando actualmente, por el momento, el
directorio /home/project es nuevo y no contiene nada todavía, por lo que ingresar el comando no devolverá
nada:
Al ser un programa conservador, ls no se molestará en imprimir una línea en blanco para expresar que
no hay nada que enumerar.
Puede ver que el directorio /home contiene dos objetos, a saber, proyecto y theia.
Como un árbol, su sistema de archivos Linux tiene un directorio raíz (/, llamado "barra diagonal") desde
el cual se ramifica todo su sistema de archivos Linux.
Un subdirectorio importante de su directorio raíz es home, puede comprobarlo usted mismo ingresando /
para enumerar el contenido de /:
Completar pestaña: Muchos shells admiten una función llamada finalización de tabulación.
La finalización con tabulación le permite autocompletar un comando que está escribiendo en la línea de
comando.
Si escribes:
porque el directorio Pictures es el único directorio dentro de su carpeta actual que comienza con una "P".
Completar tabulación para rutas largas: También puede utilizar la función de finalización con tabuladores
para autocompletar rutas más largas.
Si escribes:
y presione Tab, no sucederá nada porque su directorio actual contiene más de un directorio que comienza
con "Do". El shell no sabrá si autocompletar con Documents o Downloads.
Por otro lado, si escribes:
porque en este caso, sólo hay un directorio que comienza con "Doc", Documents.
porque la carpeta python-examples es el único archivo existente dentro del directorio ~/Documentos,
con solo unos pocos clics, puedes autocompletar rápidamente rutas más largas en tu línea de comando.
Historial de comandos: El historial de comandos le permite navegar por los comandos anteriores que
ingresó usando las teclas de flecha hacia arriba y flecha hacia abajo.
Digamos que ha creado un script de Python llamado hello_world.py en su directorio python-examples que
simplemente imprime ¡Hola, mundo! cuando lo ejecutas.
Considere que acaba de ingresar la siguiente secuencia de comandos y que el shell está esperando su
próxima entrada:
En los siguientes ejercicios, aprenderá cómo volver a ejecutar un comando anterior sin tener que volver a
escribirlo presionando la tecla de flecha hacia arriba.
Ejecutando el último comando: Si presiona la tecla de flecha hacia arriba una vez, el shell insertará
automáticamente el último comando que ingresó:
Observe que el último comando que ingresó fue cd /, que se insertó automáticamente en la línea de
comando.
Ejecutando el comando anterior de la sesión: Si presiona la tecla de flecha hacia arriba dos veces
más (es decir, tres veces en total), el shell insertará automáticamente el comando que ejecutó hace
tres comandos:
En este caso, el comando que ejecutó hace tres comandos fue cd ~/Documents/python-examples, tenga en
cuenta que la línea de salida está impresa, ¡Hola, mundo!, no cuenta como un comando. El historial de
comandos sólo lo llevará a través de los comandos que ingresó, no a todas las líneas visibles en la
terminal.
Utiliza editores de texto para escribir código en su entorno Linux, hay muchos editores para elegir y
se pueden agrupar en dos categorías principales:
Para abrir un archivo de texto en nano, escriba nano seguido del nombre del archivo para
abrirlo, se abrirá una nueva ventana del editor de texto en la que podrá editar el archivo. Así
es como se ve la aplicación nano.
El área principal muestra el texto del archivo abierto, que en este caso es el texto fuente de la
nanopágina de Wikipedia. El cursor se encuentra actualmente al principio del archivo, pero puedes
navegar dentro del texto con las teclas de flecha, las teclas de arriba y abajo de página o las teclas
de inicio y fin. Cualquier texto que escriba se introduce en el cursor. También puede eliminar texto
con las teclas Eliminar y Retroceso. Al pulsar Entrar se inicia una nueva línea. En la parte inferior
de la nanoventana hay una lista de comandos que puede utilizar en el editor, para acceder a los
comandos, pulse simultáneamente «control» y la letra correspondiente al comando, por ejemplo,
para obtener ayuda, presiona las teclas «control» y «G».
El editor de texto utiliza códigos de colores sintácticos para ayudarle a interpretar y centrarse en
diferentes aspectos del código.
1. Puedes presionar la tecla «Control W» para usar la opción «Dónde está».
2. Esto abre un nuevo panel en la parte inferior de la ventana de la aplicación, esta es una vista más
detallada de este nuevo panel.
3. Dentro de los corchetes, puede ver la cadena buscada más recientemente, que aquí es 1999.
4. Escriba la cadena que desee buscar, por ejemplo, «https», y pulse Entrar.
5. El cursor se mueve a la primera instancia de la cadena de búsqueda que encuentre después de la
posición actual del cursor, aquí.
Nano admite muchas otras funciones de edición que explorará en uno de los laboratorios de este
curso.
Vim es un editor de línea de comandos tradicional y muy potente, acostumbrarse a su funcionamiento lleva
algún tiempo, pero con un poco de práctica los dedos desarrollarán la memoria muscular necesaria para
realizar todas las tareas de edición de texto a gran velocidad. Al escribir vim en la línea de comandos, se
abre la aplicación vim, también puede especificar un nombre de archivo para editar un archivo nuevo o
existente. Vim tiene dos modos básicos:
● El modo Insertar, en el que se introduce texto.
● El modo Comando, en el que se hace todo lo demás.
Esta fue una introducción muy breve a vim. Hay muchos comandos que puede utilizar para navegar por el
búfer de texto y realizar operaciones como buscar, copiar, pegar y mover texto.
#Instalación de software y actualizaciones
Tanto las actualizaciones de software como los archivos de instalación de software para los sistemas
operativos Linux se distribuyen en archivos conocidos como paquetes, estos paquetes son archivos de
almacenamiento que contienen los componentes necesarios para instalar software nuevo o actualizar el
software existente.
Los administradores de paquetes se utilizan para gestionar la descarga e instalación de los paquetes, las
distintas distribuciones de Linux proporcionan distintos gestores de paquetes: algunos están basados en
una interfaz gráfica y otros son herramientas de línea de comandos. Los administradores de
paquetes de los sistemas operativos Linux utilizan los paquetes Deb y RPM, son tipos de archivos
distintos que contienen software o actualizaciones para diferentes sistemas operativos Linux.
Los archivos.deb se utilizan en distribuciones basadas en Debian, como Debian, Ubuntu y Mint. Deb
son las siglas de Debian.
Los archivos.rpm se utilizan en distribuciones basadas en Red Hat, como CentOS/RHEL, Fedora y
openSUSE. RPM son las siglas de Red Hat Package Manager.
Los formatos Deb y RPM son equivalentes, por lo que el contenido del archivo se puede utilizar en otros
tipos de sistemas operativos Linux.
Si descubre que un paquete que desea usar solo está disponible en el otro formato, puede convertirlo
con la herramienta alienígena:
● Convertir paquetes del formato RPM a deb, simplemente use el comando alien y especifique el
nombre del paquete que desea convertir.
● Para convertirlos al formato RPM, utilice el conmutador —r con el comando alien.
Los gestores de paquetes de distribuciones Linux basados en una interfaz gráfica de usuario
incluyen PackageKit y Update Manager.
Update Manager es una herramienta de interfaz gráfica de usuario para actualizar sistemas Linux
basados en deb, de forma predeterminada, Update Manager comprueba diariamente si hay actualizaciones
de software y descarga e instala automáticamente todas las actualizaciones de seguridad a diario, todas las
demás actualizaciones se muestran semanalmente. También puedes comprobar manualmente si hay
actualizaciones en cualquier momento. Update Manager le avisará cuando haya actualizaciones de
software disponibles:
1. Seleccione las actualizaciones que desee instalar.
2. Haga clic en «Instalar actualizaciones».
3. Si se le solicita, introduzca su contraseña de usuario y haga clic en Aceptar.
Además, Update Manager instala las actualizaciones en segundo plano mientras sigues trabajando.
Apt es una herramienta de línea de comandos para actualizar sistemas Linux basados en deb, utiliza
el comando «sudo apt update» para buscar los paquetes disponibles para su distribución. El resultado de
este comando muestra todos los paquetes disponibles, crea un árbol de dependencias y permite saber
cuántos paquetes se pueden actualizar, para instalar los paquetes, utilice el comando «sudo apt
upgrade». Si solo desea instalar un paquete específico, puede usar «sudo apt
upgrade<package-name>».
PackageKit es una herramienta gráfica para actualizar sistemas Linux basados en RPM, cuando hay
actualizaciones disponibles, PackageKit muestra un icono con forma de estrella en forma de estrella en el
área de notificaciones. Comprueba automáticamente si hay actualizaciones en un intervalo
configurable, y también puedes comprobarlas manualmente en cualquier momento. Al hacer clic en el
icono en forma de estrella:
1. Se abre la ventana de actualizaciones de software, en la que se muestran todas las actualizaciones de
software disponibles.
2. Seleccione las actualizaciones que desee instalar.
3. Haga clic en Instalar actualizaciones.
4. Si se le solicita, introduzca su contraseña de usuario y haga clic en Aceptar.
Yum es una herramienta de línea de comandos para actualizar sistemas basados en RPM. yum son las
siglas de Yellowdog Updater, Modified. Para actualizar todos los paquetes de su sistema:
● Escriba «sudo yum update»
● Después de introducir su contraseña.
● Yum obtendrá todas las actualizaciones de paquetes disponibles.
● Luego muestra un resumen de las actualizaciones y te pide que confirmes la descarga.
● Si se confirma, yum descarga todas las actualizaciones de los paquetes y actualiza los paquetes del
sistema.
● Cuando termine, mostrará el mensaje de éxito «¡Completado!»
También puede usar herramientas de línea de comandos para instalar software nuevo. Utilice el
comando apt con el conmutador install para instalar un paquete en un sistema basado en deb,
además, utilice el comando yum con el conmutador de instalación para instalar el software en un
sistema basado en RPM.
Muchas aplicaciones de software utilizan gestores de paquetes, como los populares paquetes pip o
conda, para gestionar los entornos de Python. Por ejemplo, suponiendo que ya dispongas de un entorno
Python y del paquete pip correspondiente, puedes instalar fácilmente la popular biblioteca «pandas» que se
utiliza para el procesamiento de datos en Python.
● Escribe «pip install pandas» para indicar al administrador de paquetes pip que: busque el paquete
pandas más reciente, descargue el paquete pandas, compruebe las dependencias y actualiza según sea
necesario e instale el paquete pandas.
● Cuando se complete la instalación, el administrador de paquetes mostrará el nuevo número de versión
del software.
Consiguiendo información
Instalar Vim:
Un shell:
● Es una potente interfaz de usuario para sistemas operativos tipo Unix, puede interpretar comandos y
ejecutar otros programas.
● Permite el acceso a archivos, utilidades y aplicaciones.
● Es un lenguaje interactivo.
● Es un lenguaje de secuencias de comandos.
● Se puede usar para automatizar tareas.
El shell predeterminado en los sistemas Linux suele ser Bash, otras conchas son «la concha Bourne, S
H», «la concha Korn», la K S H, la concha «T C», la «concha Z» y la «pecera». Para este curso, solo
usaremos la concha Bash, que son las siglas de «bourne again shell».
Para saber cuál es el valor predeterminado, escribe «printenv SHELL» en la línea de comandos, esto
devuelve la ruta al programa shell predeterminado, que en este caso es bash. Si tu shell predeterminado
no es Bash, siempre puedes cambiarte a él, simplemente introduciendo «bash» en la línea de
comandos.
Usaremos el signo del dólar para representar la línea de comandos a lo largo de este curso, fuera de
este curso, es posible que se utilice el símbolo «mayor que» con el mismo propósito.
Los comandos de shell más comunes para navegar y trabajar con directorios incluyen:
● ls -> lista los archivos y directorios del directorio actual.
● find -> se usa para buscar archivos que coincidan con un patrón en el árbol de directorios actual.
● pwd -> imprime el directorio actual o «en funcionamiento».
● mkdir -> crea un nuevo directorio.
● cd -> cambia el directorio actual a otro directorio.
● rmdir -> elimina un directorio completo.
Para imprimir el contenido o las cadenas de un archivo, los comandos más comunes incluyen:
● cat -> que imprime todo el contenido de un archivo.
● more -> que se utiliza para imprimir el contenido del archivo una página a la vez.
● head -> para imprimir solo las primeras «N» líneas de un archivo.
● tail -> para imprimir las últimas «N» líneas de un archivo.
● echo -> que «hace eco» de una cadena de entrada al imprimirla, también puede «hacer eco» del valor
de una variable.
Los comandos de shell relacionados con las aplicaciones de compresión y archivado de archivos
incluyen:
● tar -> que se utiliza para archivar un conjunto de archivos.
● zip -> que comprime un conjunto de archivos.
● unzip -> que extrae los archivos de un archivo comprimido o comprimido.
Debemos mencionar que si está ejecutando una máquina con Windows y desea ejecutar Linux en
ella, puede hacerlo de varias maneras.
● Linux se puede instalar en una partición de disco separada, el cambio entre los dos sistemas
operativos requiere un reinicio.
● Puede instalar Linux en una máquina virtual o puede instalar un emulador de Linux como CygWin o
usar el subsistema de Windows para Linux, una capa de compatibilidad para ejecutar ejecutables
binarios de Linux de forma nativa en Windows.
#Comandos Informativos
Puede utilizar comandos informativos del terminal para mostrar información del usuario sobre el
sistema.
Los comandos de información de usuario son útiles cuando se necesita verificar la identidad del usuario
actual o determinar en qué cuenta de usuario se está ejecutando un comando o proceso concreto.
El comando «whoami» muestra el nombre de usuario del usuario actual, el comando «whoami» no
acepta argumentos ni tiene opciones.
Aquí puede ver un ejemplo de uso para alguien que ha iniciado sesión como usuario «John Doe», del mismo
modo, el comando «id» devuelve el ID de usuario o grupo, que es un número asignado a cada usuario o
grupo del sistema Linux.
En este ejemplo, si se utiliza «id» con la opción «menos u», se obtiene el ID numérico del usuario. Si desea
que el nombre corresponda al ID de usuario numérico, añada la opción «menos n».
El comando «uname», que significa «nombre de Unix», devuelve información del sistema operativo,
como el nombre del núcleo y el número de versión.
Esto se puede utilizar para identificar el tipo de sistema en el que se está trabajando o para diagnosticar
problemas relacionados con el sistema. Al introducir el comando uname, se devuelve el nombre del
sistema operativo, que en este caso es Darwin. Si se incluyen las opciones «menos s» y «menos r» se
obtiene tanto el nombre del sistema operativo como su versión, también puede ver información de versión
más detallada con la opción «menos v».
Puede usar el comando «df» o «disk free» para mostrar el uso de disco del sistema, puede resultar útil
en situaciones en las que necesite supervisar el uso del disco o comprobar el espacio disponible en un
sistema de archivos concreto.
Por ejemplo, si escribe «df menos h tilde», se muestra la siguiente tabla, que es específica de su directorio
principal, representada por el símbolo de la tilde.
En esta tabla, puede ver todos los discos montados en su directorio principal. En Linux, se puede «montar»
un disco en un directorio, lo que significa que se puede acceder al sistema de archivos de ese disco a
través de ese directorio. La tabla también muestra el porcentaje de almacenamiento utilizado en cada
disco. La opción «h menos» hace que el resultado sea «legible para humanos» y expresa el espacio en
disco en unidades como gigabytes y terabytes en lugar de bytes.
Para ver el uso del disco en todos los sistemas de archivos, simplemente escriba «df menos h» sin
especificar un directorio. El resultado incluye el tamaño, la capacidad utilizada y el espacio
disponible para cada sistema de archivos.
Para ver los procesos que se están ejecutando actualmente en su sistema, puede usar el comando
«ps» o «process status».
Esto resulta útil cuando se necesita supervisar o gestionar procesos. Si utiliza «ps» con la opción «menos
e», se mostrarán todos los procesos que se están ejecutando en el sistema, independientemente del usuario
que los haya iniciado. El comando «ps» muestra información como el nombre de cada proceso en ejecución,
el ID del proceso y el tiempo en minutos y segundos que se ha estado ejecutando cada proceso.
El comando «top» o «tabla de procesos» actúa como administrador de tareas y mostrará una tabla en
la que se ejecutan los procesos y su uso de recursos.
Este comando resulta útil cuando se necesita monitorear el rendimiento del sistema o identificar
procesos que consumen muchos recursos, aquí mostramos un ejemplo de uso con la opción «n menos»
y el número «3» para mostrar las tres tareas que más se están ejecutando: Chrome, top y Spotify, de forma
predeterminada, las tareas se ordenan según el uso de la CPU. Este es un resultado simplificado del
comando «top» de este vídeo, pero «top» proporciona muchos otros detalles, como el uso de la
memoria y la ubicación del archivo ejecutable.
Aunque simple, el comando «echo» de Linux es una poderosa herramienta para mostrar texto o
variables en la terminal o en un script de shell.
Introducir solo «echo» es similar a decirle a la terminal que no imprima nada y devolverá una nueva
línea. Si quieres repetir una sola palabra, como «hola», simplemente escribe «echo hola» y el terminal
devolverá la palabra. Estrictamente hablando, no es necesario añadir comillas alrededor de una
cadena con espacios para que echo funcione como se espera, pero se considera una buena práctica
incluir comillas. Si se utiliza echo con una cadena entre comillas, se obtiene el contenido entre comillas:
«¡Aprender Linux es divertido!» Además, puede ver el valor de una variable, como la variable «PATH» de
nuestro sistema, escribiendo un signo de dólar seguido del nombre de la variable. Esto puede resultar útil a
la hora de solucionar problemas o crear scripts. En el ejemplo puedes ver cada ruta de la variable PATH del
sistema, delimitada por dos puntos.
Otro comando útil es la «date», que muestra la fecha y la hora actuales del sistema.
En este vídeo solo se tratan los aspectos básicos de estos comandos. Si quieres obtener más
información sobre cómo usar un comando, puedes usar el comando «man» o «manual». Todos los
comandos predeterminados de Linux vienen con un manual que se puede ver con la palabra «man».
Por ejemplo, si introduce «man ID», aparecerá el manual del comando «ID».
El manual proporcionará un resumen básico de lo que hace el comando, como «devolver la identidad
del usuario», también se muestran las opciones del comando «ID», como «menos a». Los corchetes
indican parámetros opcionales, como «usuario», que permiten especificar un nombre de usuario. El
comando «man» también proporciona una descripción más detallada del comando, que lo explica con
mayor detalle. El comando «man» incluso tiene su propia página «manual», que puede utilizar para obtener
más información sobre el comando manual y sus usos.
Es muy valioso dedicar tiempo a explorar y experimentar con comandos, pero hay muchas cosas que no
puedes resolver simplemente experimentando. Necesita ver qué hay ahí fuera, ver qué es posible y saber
dónde buscar para obtener respuestas. Echemos un vistazo a algunas formas excelentes de obtener la
información que necesita para ayudarle a progresar.
En esta lectura, es posible que veas enlaces a fuentes externas.
1. Utilice el comando man incorporado, el comando man, que significa "manual", proporciona la
forma estándar de acceder a la ayuda para comandos tipo Unix desde el símbolo del sistema.
Puede obtener una lista de todos los comandos de su sistema que tienen una página de manual
ingresando:
La lista resultante incluye una breve descripción de lo que hace cada comando.
Para ver la página de manual de un comando, simplemente ingrese:
Todas las páginas de manual están divididas en varias secciones, que incluyen:
NAME
El nombre del comando o característica y una breve descripción de lo que hace.
SYNOPSIS
Un resumen de la sintaxis del comando, incluidas las opciones y argumentos que se pueden utilizar.
DESCRIPTION
Una descripción más detallada del comando, incluida su función y comportamiento.
OPTIONS
Todas las opciones y argumentos disponibles que se pueden utilizar con el comando.
EXAMPLES
Algunos ejemplos de cómo utilizar el comando.
SEE ALSO
Comandos relacionados y documentación que pueden resultar útiles.
También puede ver otras secciones, que incluyen: EXIT STATUS, RETURN VALUE,
ENVIRONMENT, BUGS, FILES, AUTHOR, REPORTING BUGS, HISTORY, and COPYRIGHT.
Al igual que las páginas de man, TLDR Pages es un esfuerzo de documentación colaborativa gratuita y
de código abierto. El objetivo es crear documentación que sea más accesible que las páginas de
manual tradicionales, que tienden a ser bastante detalladas.
Las páginas TLDR, abreviatura de "Too Long; Didn't Read" y también conocidas simplemente como
tldr, proporcionan ejemplos de casos de uso comunes de varios comandos. El formato de las páginas
TLDR es similar al de una hoja de referencia.
Puede instalar una herramienta de línea de comandos para acceder a las páginas TLDR desde su
terminal. Instálelo usando el siguiente comando:
Una vez que haya instalado la herramienta, puede usar el comando tldr para acceder fácilmente a la
página TLDR de un comando.
La herramienta mostrará un resumen breve y fácil de entender del comando junto con algunos ejemplos
de cómo usarlo.
Stack Exchange es una red de comunidades de preguntas y respuestas, similar a Stack Overflow,
pero que cubre una gama más amplia de temas más allá de la programación. Hay varias
comunidades de Stack Exchange que se especializan en temas relacionados con Linux y software de
código abierto, como Unix y Linux, Ask Ubuntu y Server Fault.
Visite la comunidad relevante para buscar información sobre Stack Exchange. Al igual que Stack
Overflow, puedes usar la barra de búsqueda para ingresar el nombre del comando que estás
buscando, junto con las palabras clave o parámetros.
Google es una herramienta poderosa que puede brindarle la respuesta a casi cualquier pregunta.
Aprenda cómo ingresar las consultas correctas y filtrar sus resultados, por ejemplo incluyendo
"Wikipedia", "Stack Overflow" o "Linux" como parte de su búsqueda. Sin embargo, úselo bajo su propio
riesgo. Nunca confíes ciegamente en lo que encuentres en la web: ¡hay mucho ruido ahí fuera!
A lo largo de este curso, encontrará "hojas de referencia" que condensan la información que ha
aprendido en guías de fácil consulta. Son excelentes para revisar el material que has aprendido y
también pueden ayudarte con tus tareas calificadas.
Finalmente, Wikipedia mantiene una lista de comandos que se pueden encontrar en los sistemas
operativos Unix, junto con una breve descripción. Puede consultar la página para hacer referencia
rápidamente a un comando de Unix: https://en.wikipedia.org/wiki/List_of_Unix_commands
● Si escribe «ls» en su directorio principal, verá todos los archivos y directorios que contiene ese
directorio.
● Puede pasar un nombre de directorio, como «Descargas», como parámetro a ls, que mostrará el
contenido de la carpeta de descargas.
● El comando ls también admite opciones que muestran información adicional, supongamos que
actualmente está trabajando en su carpeta de documentos y desea obtener más información sobre los
archivos del directorio, puede usar el comando ls con la opción -l que mostrará los archivos y
directorios secundarios en un formato más largo y detallado.
Puedes ver que la terminal tiene una lista de todos los archivos secundarios, directorios y
detalles adicionales, como los permisos, la fecha de la última modificación y el propietario.
En ocasiones, es posible que necesites saber en qué directorio estás trabajando actualmente. En
estos casos, puede usar el comando «imprimir directorio de trabajo o print working directory» para obtener su
directorio de trabajo actual. Introduzca «pwd» en la línea de comandos para usar el comando.
Aquí puede ver que actualmente está trabajando en su directorio principal, «/Users/me».
Si quieres cambiar tu directorio de trabajo actual, puedes usar el comando «cambiar directorio o
change directory». El comando cd, se usa para cambiar el directorio en el que se está trabajando.
Supongamos que se encuentra en su directorio principal y desea pasar a un subdirectorio incluido en él,
como la carpeta Documentos, simplemente escribe «cd Documents» para cambiar tu directorio de trabajo.
Ahora, si escribes «pwd», verás que ahora estás trabajando en tu subdirectorio de documentos.
El comando cd te permite cambiar los directorios con una ruta relativa o absoluta, supongamos que se
encuentra en una carpeta de «Notas» dentro de su árbol de directorios de «Documentos».
Para acceder al directorio principal relativo a su carpeta actual, introduzca el comando cd con el símbolo
de ruta relativa «..» como argumento, ahora su directorio de trabajo es «Math», el directorio principal
inmediato de su carpeta «Notas».
Si quieres ir directamente a tu carpeta principal, usa el símbolo de tilde (~) con el comando cd, esto te
llevará a tu carpeta de inicio, en este caso, el símbolo de la tilde representa una ruta absoluta al hogar.
Por último, también puede proporcionar una ruta completa a un directorio, aquí se refiere al nombre de
ruta absoluto del directorio «Notes» original, como era de esperar, este comando lo llevará de nuevo a la
carpeta «Notas» donde comenzó.
Por último, el comando «buscar o find» es una poderosa herramienta que devolverá la ruta a todos
los archivos que coincidan con un criterio especificado por el usuario, supongamos que su carpeta
«Documentos» tiene una estructura de archivos como la que se muestra, dos subcarpetas, cada una de las
cuales contiene algunos archivos, digamos que estás trabajando en la carpeta «Documentos» y quieres
encontrar las rutas de todos los archivos denominados «a.txt» de tu directorio de trabajo, para ello,
escribe «find». -nombre 'a.txt'.» El argumento «.» significa «busca aquí», por lo que el comando sólo
buscará en tu directorio de trabajo actual.
Para realizar una versión de la búsqueda que no distinga mayúsculas de minúsculas, puede utilizar la
opción «-iname» en su lugar, verás que encuentras el mismo archivo, además de otro archivo con el
mismo nombre pero con una «A» mayúscula.
Supongamos que se encuentra en su carpeta de documentos, que actualmente está vacía, para crear una
carpeta llamada «test», simplemente introduce «mkdir test», ahora su directorio actual tiene una
subcarpeta llamada «test».
Supongamos que está en su carpeta de documentos, que está vacía, y desea crear algunos archivos de
texto vacíos, puede hacerlo introduciendo «touch» junto con algunos nombres de archivo: «a», «b»,
«c» y «d» con el sufijo «.txt», ahora puedes ver que tu carpeta de documentos contiene los cuatro archivos
que has creado.
Quizás se pregunte qué le hace el comando touch a un archivo existente, supongamos que su directorio
actual contiene un archivo llamado «notes.txt», puede ver cuándo se modificó por última vez usando
'date -r notes.txt ', si usa el comando táctil en notes.txt, puede ver que la fecha de su última
modificación se actualizó a la hora actual.
Para mover archivos, puede introducir «mv» seguido de las rutas de los archivos que desee mover y,
a continuación, de la carpeta a la que desee moverlos, del mismo modo, para mover directorios,
escribe «mv» con la ruta del directorio a mover, seguido de la ruta y el directorio al que quieres
moverlos.
Veamos un ejemplo: supongamos que tiene un archivo llamado «my_script.sh» y tres carpetas,
denominadas «Scripts», «Notes» y «Documents». Puedes mover «my_script.sh» a la carpeta «Scripts»
usando la sintaxis de la izquierda (mv /source/file/dest/dir/), por lo tanto, si introduce «ls my_script.sh», no
se obtiene ningún resultado, pero si introduce «ls Scripts», significa que ha movido correctamente
my_script.sh a su carpeta de scripts. A continuación, puede mover las carpetas de notas y scripts a la
carpeta de documentos utilizando la sintaxis de la izquierda (mv/source/dir/ /dest/dir/), puede ver que
su directorio ahora solo contiene la carpeta de documentos y que su carpeta de documentos contiene las
carpetas de scripts y notas que acaba de mover.
chmod significa «modo de cambio» y se utiliza para cambiar los permisos de lectura, escritura y
ejecución de los archivos.
Supongamos que tiene un archivo de script de shell en su directorio actual llamado «my_script.sh»
que dice: «¡Aprender Linux es divertido! «Al escribir ls -l my_script.sh, se indica que el script de shell
tiene permisos de lectura y escritura, tal y como indican los caracteres r y w, pero si intenta ejecutar el
archivo, aparece un error de permiso denegado. Para hacer que su script sea ejecutable, llame a chmod
en my_script.sh con la opción +x, al escribir ls -l my_script.sh, ahora se muestra que my_script.sh tiene
permisos de ejecución, tal y como indica el carácter x. ¡Genial! Ejecutar el guion ahora funciona.
#Seguridad - Gestión de permisos y propiedad de archivos
Sólo el propietario oficial de un archivo puede cambiar sus permisos, esto significa que sólo los
propietarios pueden decidir quién puede leer el archivo, escribirlo o ejecutarlo.
● Aquí hemos repetido la cadena "who can read this file?" en un nuevo archivo llamado my_new_file.
● La siguiente línea usa el comando more para imprimir el contenido del nuevo archivo.
● Finalmente, el comando ls con la opción -l muestra los permisos (predeterminados) del archivo: rw-r--r--
Los primeros tres caracteres (rw-) definen los permisos del usuario, los tres siguientes (r--) los
permisos del grupo y los tres últimos (r--) los demás permisos.
Entonces usted, como usuario, tiene el permiso rw-, lo que significa que tiene permisos de lectura y escritura
de forma predeterminada, pero no tiene permisos de ejecución, de lo contrario, en lugar del último -
aparecerá una x.
Por lo tanto, al observar la línea completa, rw-r--r--, puede ver que cualquiera puede leer el archivo, nadie
puede ejecutarlo y usted es el único usuario que puede escribir en él.
Permisos de directorio
Los permisos para directorios son similares pero distintos para archivos, aunque los directorios utilizan
el mismo formato rwx, los símbolos tienen significados ligeramente diferentes.
La siguiente tabla ilustra los significados de cada permiso para directorios:
Establecer permisos adecuados en los directorios es una práctica recomendada tanto por razones de
seguridad como de estabilidad, aunque esta lectura se centra en la seguridad, aprenderá más sobre otras
razones para configurar los permisos y la propiedad de los archivos más adelante en este curso.
En el comando chmod, go-r es el cambio de permiso a aplicar, que en este caso significa quitar para el
grupo (g) y otros (o) el permiso de lectura (r). El comando chmod se puede utilizar tanto con archivos
como con directorios.
En este curso, se familiariza con un tipo particular de ejecutable llamado script, que es un programa
escrito en un lenguaje de scripting, aprenderá todo sobre las secuencias de comandos de Shell o más
específicamente las secuencias de comandos de Bash, que consisten en escribir secuencias de comandos
en Bash (shell nacido de nuevo), un lenguaje de secuencias de comandos de Shell muy popular. Un script
de shell es un archivo de texto sin formato que puede ser interpretado por un shell.
Hablando formalmente, para que un archivo de texto se considere un script de shell ejecutable para
un usuario determinado, debe tener dos cosas:
1. Ejecutar permisos establecidos para ese usuario
2. Una directiva, llamada "shebang", en su primera línea para declararse ante el sistema operativo como un
binario
Si alguna vez has trabajado en un sistema Linux, seguro que has tratado con archivos, y eso significa que
puede que te hayas encontrado con mensajes como este de abajo:
localhost@user1$ cat /etc/sudoers
cat: /etc/sudoers: Permiso denegado
O, de forma similar, mensajes de error como "You do not have the permissions to upload files to this folder
(No tiene permisos para cargar archivos en esta carpeta)", que podrían haberle impedido leer, escribir o
acceder a un archivo concreto. Y, naturalmente, este error puede haberle hecho preguntarse -al menos la
primera vez que se encontró con este problema- por qué se le denegó el acceso.
Cuando listas archivos en un directorio particular en Linux, puede que hayas visto r, w, y x, y te hayas
preguntado qué significan estas letras, tienen un enorme significado a la hora de determinar qué puede
hacer exactamente un usuario concreto con un archivo.
Veamos un ejemplo:
localhost@user1$ ls -ltr chmod_directory/
total 0
Los permisos de archivo por defecto son rw-r--r-- (del valor umask (cubierto más adelante en el
artículo)), como se muestra en el ejemplo anterior.
Estos valores son aditivos para cada "tripleta", lo que significa que un permiso de archivo de rw- tiene el valor
de 6 y rwx tiene el valor de 7. Como se discutió anteriormente, cualquier archivo recién creado, el valor
por defecto es 644 (rw-r--r--), lo que significa que el propietario del archivo puede leer y escribir, y
todos los demás sólo pueden leer este archivo. El primer triplete es el permiso para el
propietario/creador del archivo, el segundo es para los permisos de grupo, y el tercero es para otros
(usuarios fuera del propietario/creador o un grupo con permisos).
Esta configuración tiene sentido por razones obvias: El propietario debe tener un mayor control
sobre el contenido del archivo para poder leerlo y escribir en él. Otros pueden querer leer el
contenido pero no modificarlo. Por supuesto, puedes cambiar esta configuración con el comando
chmod, que es el tema central de este artículo.
Ahora, veamos los valores de permisos por defecto para un directorio. Digamos que el directorio
chmod_directory fue creado con los permisos por defecto de 755. A diferencia de los ficheros, un directorio
contiene ficheros, para que alguien que no sea el propietario pueda hacer 'cd' en el directorio, necesita
un permiso de ejecución, que a su vez hace que el directorio:
● Legible, escribible y ejecutable por el propietario (rwx es 7).
● Legible y ejecutable por el grupo (r-x es 5).
● Legible y ejecutable por otros (r-x es 5).
Bien, ahora que has aprendido lo básico sobre los permisos de archivos y directorios, echemos un vistazo al
comando chmod, que ayuda a realizar cambios en los permisos de archivos y directorios.
En la representación octal
el primer dígito corresponde al usuario, el segundo al grupo y el tercero a otros. Veamos dos ejemplos de
configuración de permisos con representación octal para entender este concepto.
● Ejemplo 1: Si quieres dar permisos de lectura (4), escritura (2), y ejecución (1) tanto al usuario como al
grupo, y sólo permiso de lectura (4) a otros, puedes usar:
localhost@user1$ chmod 774 <nombre-archivo>
● Ejemplo 2: Si desea restringir los permisos de escritura a todos los demás excepto al propietario del
archivo, puede utilizar:
localhost@user1$ chmod 744 <nombre-archivo>
Advierto que hay dos escenarios peligrosos que es posible que quieras evitar, así que mantén esto
como una mejor práctica mientras usas chmod, evite usar casos límite, como chmod 777
<nombre-archivo> y chmod 000 <nombre-archivo>. Usar chmod 777 <nombre-archivo> da a todo el
mundo permisos rwx, y generalmente no es una buena práctica dar plenos poderes a todos los usuarios de
un sistema. El caso chmod 000 elimina los permisos a todos los usuarios, lo cual deja sin poder hacer nada
más que eliminar el directorio o el fichero.
Usando umasks
Os dejo con un concepto más que debéis conocer (umask) que decide los permisos por defecto de un
fichero. En general, los valores por defecto son:
Umask: 0022
Fichero: 0666
Directorio: 0777
Por ejemplo: suponga que desea cambiar el modo de acceso predeterminado de los archivos que van
desde 666 (rw-rw-rw-) hasta 644 (rw-r–r–). Reste 644 de 666. El resto, 022, es el valor numérico que se va
a utilizar, así:
Como recordarás, el valor por defecto del permiso de archivo es 0644, y el del directorio es 0755.
El valor de umask por defecto se resta del valor global por defecto de fichero/directorio.
Necesitamos ejecutar scripts, modificar archivos y ejecutar procesos para administrar sistemas de manera
efectiva, pero ¿qué sucede cuando vemos permiso denegado? ¿Sabes por qué vemos este mensaje?
Si conoces la causa del problema, ¿sabes cómo implementar la solución?
Voy a dar una explicación rápida de las diversas formas de calcular los permisos, y luego nos centraremos
en los permisos especiales dentro de Linux.
Voy a dar una explicación rápida de las diversas formas de calcular los permisos, y luego nos centraremos
en los permisos especiales dentro de Linux.
El TL:DR (Too Long; Didn't Read) es que hay dos formas principales de asignar permisos.
● Método simbólico
El método simbólico utiliza la siguiente sintaxis:
[tcarrigan@server ~]$ chmod WhoWhatWhich file | directory
donde:
Who - representa identidades: u,g,o,a (usuario, grupo, otro, todos)
What - representa acciones: +, -, = (añadir, eliminar, establecer exacto)
Which - representa niveles de acceso: r, w, x (leer, escribir, ejecutar)
Un ejemplo de esto es si quiero agregar los permisos de lectura y escritura a un archivo llamado test.txt
para usuario y grupo, usó el siguiente comando:
[tcarrigan@servidor ~]$ chmod ug+rw prueba.txt
Revelación completa, este no es mi método preferido para asignar permisos, y si desea obtener más
información acerca de este método, le recomiendo su motor de búsqueda más cercano.
● Método numérico
El método numérico es, según mi experiencia, la mejor forma de aprender y practicar los permisos. Se
basa en la siguiente sintaxis:
[tcarrigan@server ~]$ chmod ### archivo | directorio
Aquí, de izquierda a derecha, el carácter # representa un nivel de acceso, hay tres niveles de acceso:
usuario, grupo y otros. Para determinar qué es cada dígito, utilizamos lo siguiente:
Empieza por 0
Si se debe establecer el permiso de lectura, añada 4
Si se debe establecer el permiso de escritura, añada 2
Si se debe establecer el permiso de ejecución, añada 1
Esto se calcula por nivel de acceso. Interpretemos este ejemplo de permisos:
-rw-r-x—
❖ Los permisos se representan como 650. ¿Cómo llegué a esos números?
❖ Los permisos del usuario son: rw- o 4+2=6
❖ Los permisos del grupo son: r-x o 4+1=5
❖ Los permisos de los demás son: --- o 0
Ahora que entendemos lo básico del cálculo de permisos en Linux, veamos los permisos especiales incluidos
en el SO.
● usuario + s (pecial)
Comúnmente conocido como SUID, el permiso especial para el nivel de acceso de usuario tiene una
única función: Un archivo con SUID siempre se ejecuta como el usuario propietario del archivo,
independientemente del usuario que pase el comando. Si el propietario del archivo no tiene
permisos de ejecución, utilice aquí una S mayúscula.
Ahora, para ver esto desde un punto de vista práctico, veamos el comando /usr/bin/passwd. Este
comando, por defecto, tiene el permiso SUID:
[tcarrigan@server ~]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 33544 13 dic 2019 /usr/bin/passwd
● grupo + s (pecial)
Comúnmente conocido como SGID, este permiso especial tiene un par de funciones:
Si se establece en un archivo, permite que el archivo se ejecute como el grupo que posee el
archivo (similar a SUID)
Si se establece en un directorio, todos los archivos creados en el directorio tendrán su propiedad
de grupo establecida a la del propietario del directorio
[tcarrigan@server article_submissions]$ ls -l
total 0
drwxrws---. 2 tcarrigan tcarrigan 69 Apr 7 11:31 my_articles
Este conjunto de permisos se indica con una s minúscula donde la x indicaría normalmente privilegios
de ejecución para el grupo. También es especialmente útil para los directorios que se utilizan a
menudo en los esfuerzos de colaboración entre los miembros de un grupo. Cualquier miembro
del grupo puede acceder a cualquier archivo nuevo. Esto también se aplica a la ejecución de
archivos. SGID es muy potente cuando se utiliza correctamente.
Como se indicó anteriormente para SUID, si el grupo propietario no tiene permisos de ejecución,
entonces se utiliza una S mayúscula.
● otro + t (pegajoso)
El último permiso especial se ha denominado "sticky bit".
Este permiso no afecta a los archivos individuales, sin embargo, a nivel de directorio, restringe la
eliminación de archivos. Sólo el propietario (y raíz) de un archivo puede eliminarlo dentro de ese
directorio.
Usando el método numérico, necesitamos pasar un cuarto dígito precedente en nuestro comando
chmod. El dígito utilizado se calcula de forma similar a los dígitos de permiso estándar:
Empieza en 0
SUID = 4
SGID = 2
Sticky = 1
La sintaxis es:
[tcarrigan@server ~]$ chmod X### archivo | directorio
Aquí está el comando para establecer SGID en community_content utilizando el método numérico:
Para empezar, puede usar el comando “cat” para imprimir todo el archivo en una salida estándar.
Supongamos que su directorio actual contiene un único archivo llamado numbers.txt, que se puede ver
introduciendo el comando “ls”, para imprimir el contenido de este archivo en una salida estándar, puede
escribir cat numbers.txt, lo que produce el resultado que se muestra aquí,
compuesto por los números del 89 al 99, puede ver que la salida ocupa toda la ventana del terminal. El
archivo es mucho más largo que las doce líneas que ves aquí, por este motivo, es posible que no siempre
quieras usar cat para ver el contenido.
El comando “more” te permite ver el contenido de un archivo en un formato página por página, al
introducir more numbers.txt, verá los números del 0 al 8 en la página 1, tal y como se muestra.
Por página solo nos referimos a la ventana de terminal actual. Si expandes la ventana de tu terminal
verticalmente, también aumentas el tamaño de la página. Al hacer clic en la barra espaciadora, verá la
página siguiente que muestra los números del 9 al 17.
Puede usar el comando “head” para imprimir las primeras 10 líneas del archivo. Si introduce head
numbers.txt, se obtienen las 10 primeras líneas o los números del 0 al 9, tal y como se muestra. Puede
especificar el número de líneas que desea que vuelva Head mediante la opción -n. Si introduce head, -n
3 numbers.txt, obtendrá las tres primeras líneas de numbers.txt como 0, 1, 2.
El comando “tail” se utiliza para imprimir las últimas 10 líneas de un archivo. Al escribir tail
numbers.txt, se obtienen las últimas 10 líneas de numbers.txt, es decir, los números del 90 al 99. Al igual
que con el comando head, puede usar la opción -n para cambiar el número de líneas devueltas
introduciendo tail -n, 3 numbers.txt. Obtendrá las tres últimas líneas de numbers.txt (97 , 98 y 99).
Puede usar el comando “wc” (word count) para contar el número de caracteres, palabras o líneas del
archivo. Imagina que tienes un archivo llamado pets.txt. Si escribe cat pets.txt, verá que el archivo
contiene la palabra cat o dog en cada línea.
Al introducir wc pets.txt, obtendrá el resultado 7 7 28 pets.txt, lo que significa que su archivo contiene 7
líneas, 7 palabras y 28 caracteres, pero 7 veces 3 es 21, ¿por qué WC ve 28 caracteres? Porque también
cuenta los caracteres de línea nuevos, no puede verlos ahí, pero hay siete caracteres de línea nuevos,
uno de los cuales representa el final del archivo.
● Para ver sólo el recuento de líneas, puede usar la opción wc -l pets.txt, que devuelve 7 pets.txt.
● Para ver sólo el recuento de palabras, puede usar la opción wc -w pets.txt.
● Para ver sólo el recuento de caracteres, puede usar la opción wc -c pets.txt.
Al escribir sort pets.txt, devuelve el resultado ordenado alfabéticamente, con «gato» repetido cinco veces y
«perro» repetido dos veces. Si escribes sort -r pets.txt, se obtienen las líneas ordenadas en orden inverso,
con las líneas en forma de «perro» que aparecen antes líneas en forma de «gato».
Si tiene líneas repetidas en su archivo, puede usar el comando uniq (único) para filtrar las líneas
repetidas. Recuerda el contenido del cat pets.txt:
Al escribir uniq pets.txt «texto con puntos para mascotas únicas», devuelve «gato», «perro» y «gato».
Tenga en cuenta que el comando uniq solo elimina líneas duplicadas si son consecutivas, por lo tanto,
la palabra «gato» aparece dos veces aquí porque «gato» aparece antes y después de las dos líneas
de «perro», interrumpiendo la secuencia consecutiva.
El comando grep, devuelve las líneas de un archivo que coinciden con las especificadas patrón, como
una expresión regular.
Supongamos que tiene una lista de personajes famosos nombres almacenados en un archivo, que puede ver
ingresando cat people.txt, puedes usar grep para buscar todas las líneas en people.txt que contengan los
caracteres consecutivos ch, para ello, asigne a grep el término coincidente ch, seguido del nombre del
archivo (grep ch people.txt), la salida arroja dos resultados, Dennis Ritchie, y Erwin Schrodinger, que
contiene una coincidencia en minúscula con ch. Realizando la misma operación, pero esta vez con la
opción -i osea “grep -i ch people.txt”, devuelve un resultado extra, Charles Babbage, que tiene una C
mayúscula, la opción -i expande el patrón busca haciendo que no distinga entre mayúsculas y
minúsculas.
Algunas opciones utilizadas frecuentemente para grep incluyen:
También puede utilizar el comando cut para extraer secciones específicas de cada línea de tu archivo.
Aquí vuelve a ver la lista de nombres famosos, como Alan Turing y Charles Babbage.
Puede utilizar el comando cut para extraer del segundo al noveno carácter de cada línea escribiendo cut -c
2-9 people.txt, se puede ver en el resultado que «Alan Turing» se devuelve como «Lan Turi».
Veamos un ejemplo más práctico de usar cut con archivos de texto.
Supongamos que deseas extraer solo el último nombre de cada persona de tu lista, sabes que cada línea de
tu lista está compuesta por dos campos: el nombre y los apellidos de la persona. Hay un espacio que separa
estos campos. Aquí, estás cortando utilizando -d ' ', puedes especificar que el delimitador de campo o el
carácter que indica la pausa entre campos, es un espacio, a continuación, utilice la opción -f2 para devolver
el segundo campo de cada línea. Esto, cut -d ' ' -f2 people.txt, devolverá el apellido de cada persona de la
lista.
La opción paste puede combinar líneas de varios archivos. Imagina que te dan los tres siguientes
archivos de texto, todos con el mismo número de líneas: un archivo de texto llamado first.txt que contiene
una lista de los nombres de las personas, un archivo de texto complementario llamado last.txt, que contiene
los apellidos del mismo personas, y un tercer archivo de texto, llamado yob.txt, que indica el año de
nacimiento de cada persona.
Puede ver estos archivos en forma de tabla ingresando paste, observe que las tres columnas están
alineadas uniformemente porque paste usa una tabulación como delimitador predeterminado, con esta tabla,
puede ver, por ejemplo, que Charles Babbage nació en 1791. Puede
especificar un delimitador que no sea Tab utilizando la opción -d con el
comando paste, por ejemplo, puede utilizar una coma como delimitador
escribiendo paste -d “,” first.txt last.txt yob.txt, como puede ver esto
creará una tabla que combina los tres archivos con una coma entre cada
campo, como «Dennis comma Ritchie comma 1941".
❖ Redes de ordenadores
Una red informática es un conjunto de ordenadores capaces de comunicarse entre sí y compartir los
recursos proporcionados por los nodos de la red.
Ejemplos de redes informáticas son las redes de área local (LAN), las redes de área extensa (WAN) e
Internet. Internet, o World Wide Web, es esencialmente una gigantesca red de redes informáticas.
Un recurso de red es cualquier objeto, como un fichero o un documento, que puede ser identificado por la
red.
Un objeto es identificable si se le puede asignar un nombre y una dirección únicos que la red puede utilizar
para identificarlo y acceder a él.
Un host es un tipo especial de nodo en una red informática: es un ordenador que puede funcionar como
servidor o cliente en una red.
Un servidor es un ordenador host capaz de aceptar una conexión de un host cliente y satisfacer
ciertas peticiones de recursos realizadas por el cliente.
Muchos hosts pueden desempeñar ambos papeles, actuando como cliente y como servidor.
❖ Paquetes y Pings
Un paquete de red es un trozo de datos formateado que puede transmitirse a través de una red.
Las redes informáticas actuales suelen utilizar protocolos de comunicación basados en este tipo de paquetes
de información. Cada paquete consta de dos tipos de datos:
1. La información de control son datos sobre cómo y dónde entregar la carga útil, como las direcciones
de red de origen y destino,
2. La carga útil es el mensaje que se envía.
El comando ping funciona enviando paquetes especiales de "solicitud de eco" a un host y esperando
una respuesta de éste. Ping es una utilidad disponible en la mayoría de los sistemas operativos con
capacidad de red. Linux tiene su propia implementación del comando ping que se utiliza para probar y
solucionar problemas de conectividad con otros hosts de red.
❖ URLs y direcciones IP
IP son las siglas de "Internet Protocol", que define el formato de los datos transmitidos por Internet o
una red local.
Una dirección IP es un código utilizado para identificar de forma única cualquier host de una red, esta
puede utilizarse para establecer una conexión con un host e intercambiar paquetes con él, por
ejemplo mediante el comando ping, además de su carga útil, los paquetes IP -un tipo de paquete de red
que se ajusta al Protocolo de Internet- contienen las direcciones IP de los hosts de origen y destino.
Una URL, más comúnmente conocida como dirección web, significa Localizador Uniforme de
Recursos.
Una URL identifica de forma única un recurso web y permite acceder a él. Normalmente, el recurso al
que apunta una URL es una página web, pero también puede utilizarse para tareas como transferir
archivos, enviar correos electrónicos y acceder a bases de datos.
Por ejemplo, la URL de la página de Wikipedia para URL es https://en.wikipedia.org/wiki/URL, al igual que
para una URL típica, su formato indica:
● un protocolo (https).
● un nombre de host (es.wikipedia.org).
● un nombre de archivo (/wiki/URL).
#Comandos de red
El comando hostname se utiliza para obtener o configurar el «nombre de host» y demás información
que identifica de forma exclusiva a su equipo. Al introducir el comando hostname sin ninguna opción, se
devuelve el nombre de host de su máquina,
que en este ejemplo es “my Linux machine dot local”. El sufijo .local aparece en el nombre del host si su
máquina tiene configurados los «dominios locales».
Si utilizas la opción “hostname -i”, hostname proporcionará la dirección IP del nombre de host.
El comando ifconfig, que significa configuración de interfaz, muestra información sobre todos los
dispositivos de comunicación del dispositivo, si lo introduces sin opciones
Obtiene mucha información, incluida la dirección IP, las direcciones MAC y las especificaciones de
hardware de sus dispositivos de comunicación.
También puede especificar un dispositivo específico que desee que inspeccione ifconfig, como un
adaptador Ethernet llamado eth0. Si introduce ifconfig eth0 , obtendrá información sobre su adaptador
Ethernet,
como su dirección de Internet, el número de paquetes recibidos, incluidos los recuentos de errores y
paquetes descartados, las mismas métricas aplicadas a los paquetes transmitidos y la cantidad total de
datos recibidos y transmitidos.
Puede usar el comando «ping» para probar la conectividad con un host o una dirección IP, “ping”
envía paquetes conocidos como solicitudes ICMP (Protocolo de mensajes de control de Internet) al
servidor, escucha la respuesta e imprime el resultado,
Por ejemplo, si escribes ping www.google.com, ping devuelve una línea de información por cada
respuesta correcta a una solicitud de eco y continúa hasta que abortes con ^C, cuando se interrumpe
el ping, imprime un resumen de las estadísticas de los resultados del ping. Para cada solicitud de eco,
ping proporciona información útil, como la dirección IP de la URL indicada, 142.251.41.68 y el tiempo
total de ida y vuelta en milisegundos. Las estadísticas proporcionadas al final incluyen:
● cuántos paquetes se transmitieron y recibieron.
● el porcentaje de paquetes descartados
● la desviación mínima, media, máxima y estándar de los tiempos de ida y vuelta en milisegundos.
Si deseas que el comando ping devuelve un número determinado de resultados de ping, puedes usar la
opción -C: si escribes ping -c 5 www.google.com, se devuelven los cinco resultados de ping, se abortan y,
a continuación, se imprimen las mismas estadísticas que se imprimirán sin la opción -C.
El comando «curl» es una potente herramienta que permite transferir datos a y desde las direcciones
URL y es compatible con muchos protocolos diferentes. Al escribir curl www.google.com, se devuelve
todo el contenido HTML de la página de destino de www.google.com, utilizando el protocolo
predeterminado HTTP, por ejemplo,
la ruta al archivo PNG del logotipo G de Google. Para renderizar el logotipo, añade tu ruta a google.com
en su navegador, incluso puedes hacer que Curl escriba el contenido de una URL en un archivo local,
esto se hace mediante la opción -O, por ejemplo, puede introducir curl www.google.com -o google.txt, a
continuación, puede ver el contenido de google.txt con el comando head
y comprobar que el contenido del archivo coincide realmente con el resultado anterior.
El comando wget se usa para recuperar archivos ubicados en una URL, wget es como Curl pero está
más especializado en su compatibilidad con protocolos y tiene capacidades de descarga recursiva.
Esto resulta útil cuando una URL puede apuntar a una carpeta que contiene varios archivos, aquí se
utiliza wget para descargar un único archivo de prueba llamado iso_8859-1.txt
que está alojado en w3.org. wget devuelve información mientras se descarga, como:
● resolver y conectar al servidor de destino.
● solicitud HTTP enviada, pendiente de respuesta.
● guardar el archivo al que nombra automáticamente en el directorio actual.
Como referencia, esto es lo que su navegador le muestra al ver los datos ubicados en la URL.
Es un archivo de texto simple, al escribir head -n 12 iso_8859-1.txt, verá las doce primeras líneas del
contenido del archivo descargado.
Como era de esperar, el archivo contiene exactamente los mismos datos que acabamos de ver en la
diapositiva anterior.
#Comandos de archivo y compresión de archivos
La compresión de archivos, por otro lado, implica reducir el tamaño de un archivo aprovechando la
redundancia en su contenido de información, las principales ventajas de la compresión incluyen:
● La conservación del espacio de almacenamiento.
● La aceleración de las transferencias de archivos.
● La reducción de las cargas de ancho de banda.
Ahora, supongamos que ha creado un directorio de notes para llevar un registro de los materiales del curso.
Decide que sería una buena idea archivar sus notas en caso de que las necesite en el futuro. El árbol de
directorios de notes tiene la siguiente estructura:
● contiene dos subcarpetas, denominadas math y physics, cada una de las cuales contiene archivos
denominados con los mismos nombres, week1 y week2. Si utiliza el comando ls -r, puede enumerar
de forma recursiva todos los directorios y archivos del árbol de directorios actual, puede ver la
correspondencia con la representación gráfica del árbol, empezando por el directorio principal de notes,
los subdirectorios de math y physics y los archivos de la week1 y week2 de las carpetas de math y
physics. Puede usar el comando tar para archivar y desarchivar archivos y directorios.
Para archivar todo el directorio de notas, incluidos sus subdirectorios y todos los archivos que contiene,
introduce el comando: tar -cf, un nombre para el archivo archivado, como notes.tar, seguido del archivo o
directorio que deseas archivar, que es notes.
La opción c significa crear un nuevo archivo, y la marca f le dice a tar que interprete la entrada del
archivo en lugar de la entrada predeterminada, que es la entrada estándar. Si introduce ls, indica que su
directorio actual contiene ahora la carpeta de notes original y el archivo notes.tar.
Si también desea comprimir su archivo, puede introducir el mismo comando, excepto que ahora
incluye la opción -z, que filtra el archivo comprimido a través de un archivo GNU.
Al añadir el sufijo .gz al nombre del resultado, se garantiza que los programas basados en Windows, por
ejemplo, reconozcan correctamente el tipo de archivo. Si introduce ls, ahora se muestra el archivo
comprimido notes.tar.gz que ha creado.
Puedes comprobar el contenido del archivo de notas archivado llamando tar a la bola tar de tus notes
con la opción -t o list.
Esto lista todos los archivos y directorios de tu bola tar, y como era de esperar, tiene la misma
estructura que la carpeta de notes original, con notes como directorio principal, math y physics como
subdirectorios y los archivos de la week1 y week2 en los nodos terminales.
También puedes desempaquetar o desarchivar los archivos archivados mediante el comando tar.
Puedes introducir tar -xf seguido del nombre del archivo, notes.tar, además de un nombre de destino
opcional, por ejemplo notes, que resulta ser el predeterminado.
La opción -x le indica a tar que extraiga los objetos de archivos y directorios del archivo, ahora si
escribes ls -r, verás que la carpeta de notas archivada se ha desarchivado en una carpeta principal
llamada notas, subcarpetas llamadas math y physics, y los archivos de cuatro semanas, uno y dos con los
que empezaste, esto comprueba que la estructura original del directorio de «notas» esté intacta.
Del mismo modo, puede descomprimir un archivo tar.gz y extraer los archivos de él. Para
descomprimir y descomprimir el archivo notes.tar.gz, puede escribir tar -xzf seguido del nombre del archivo
comprimido, notes.tar.gz, y una carpeta de destino opcional, notes.
De nuevo, si introduce ls -r, verá que los directorios y archivos se han desempaquetado como se esperaba.
Puede usar el comando zip para comprimir archivos y directorios y empaquetarlos en un solo archivo.
Observe el orden de las operaciones que implementa zip.
Zip comprime los archivos antes de agruparlos, mientras que tar, con la opción -z, logra la
compresión aplicando «g zip» en todo el archivo tar, pero solo después de empaquetarlo. Para
comprimir el directorio de notes y empaquetarlo en un archivo zip, escribe zip notes.zip notes, y después
de ingresar ls, puede ver que se ha creado el archivo notes.zip.
El comando unzip extrae los archivos comprimidos de un archivo zip y los descomprime.
Para descomprimir el archivo notes.zip, simplemente escribe unzip notes.zip, tras introducir ls -R, verás
que unzip ha creado tu carpeta de notas y ha desempaquetado tus directorios y tus archivos de week1 y
week2, tal y como esperabas.
Un script es una lista de comandos que pueden ser interpretados y ejecutados por un programa
llamado lenguaje de scripting
Los comandos pueden introducirse de forma interactiva en la línea de comandos o enumerarse línea
por línea en un archivo de texto.
El intérprete es una ruta absoluta a un programa ejecutable, y el argumento opcional es una cadena
que representa un único argumento.
Los scripts de shell son scripts que invocan un programa de shell, por ejemplo: '#!/bin/sh' invoca el
shell Bourne u otro programa shell compatible, desde el directorio bin. #!/bin/bash' 'shebang' invoca al shell
Bash. Las directivas 'shebang' no se limitan a los programas de shell, por ejemplo, puedes crear un script
python con la siguiente directiva: '#!/usr/bin/env python3'. Aquí mostramos cómo se puede utilizar un script
de shell para ejecutar un programa con un simple ejemplo de 'hola mundo'. Desde la línea de comandos,
puedes crear un simple 'shell script hola mundo' de la siguiente manera:
Utilice el comando touch para crear un archivo de texto vacío llamado 'hola_mundo.sh', la extensión
'.sh' es una convención utilizada para indicar que el archivo es un script de shell. Ahora, convierta su
archivo de texto en un script bash haciendo eco del shebang bash, y anexando el texto hecho eco a su
archivo usando el símbolo “>>”, que es el operador Bash de 'redirección de salida' usado para anexar la
salida a un archivo, finalmente, usa el comando “echo” para imprimir la declaración 'echo Hello World' y de
nuevo, redirige esa salida a tu script bash.
Antes de que puedas ejecutar tu script bash, necesitas hacerlo ejecutable.
Primero, comprueba la configuración actual de permisos de tu script utilizando el comando 'ls' con la opción
'-l'.
Las entradas R y W indican que el script es legible y escribible, pero la falta de una X significa que no es
ejecutable.
Las entradas R, W y X se aplican a tres grupos de permisos basados en usuarios: el propietario, que eres tú,
el grupo y todos los usuarios. Puedes hacerlo ejecutable para todos los usuarios invocando el comando
chmod con la opción +X, La comprobación de la configuración de permisos muestra ahora que tu script es
ejecutable para todos los usuarios, debido a las entradas 'X' para los tres grupos de permisos, ahora ya
puedes ejecutar tu script bash escribiendo './hello_world.sh' y pulsando enter, y el texto 'hola mundo'
aparecerá en la línea de comandos.
● La primera línea asigna el valor Jeff a una nueva variable llamada firstname.
● La siguiente línea accede y muestra el valor de la variable, utilizando el comando echo junto con el
carácter especial $ delante del nombre de la variable para extraer su valor, que es la cadena Jeff.
Así, hemos creado una nueva variable shell llamada firstname cuyo valor es Jeff.
Esta es la forma más básica de crear una variable shell y asignarle un valor, todo en un solo paso.
Ahora podemos ver que el valor Grossman acaba de ser almacenado en la variable lastname por el
comando read:
Por cierto, observa que puedes hacer eco de los valores de múltiples variables a la vez.
Como pronto verás, el comando read es particularmente útil en los scripts de shell, puedes utilizarlo
dentro de un script de shell para pedir a los usuarios que introduzcan información, que luego se
almacena en una variable de shell y está disponible para su uso por el script de shell mientras se está
ejecutando.
También aprenderás sobre los argumentos de la línea de comandos, que son valores que pueden pasarse a
un script y asignarse automáticamente a variables del shell.
Los filtros son comandos o programas del shell que toman su entrada de la entrada estándar,
normalmente el teclado, y devuelve su salida a la salida estándar, que normalmente es el terminal.
Podemos pensar en un filtro como un transformador, un programa que transforma los datos de entrada
en datos de salida. Hay muchos ejemplos: wc, cat, more head, sort, grep, etc. El valor de los filtros es que
pueden encadenarse, lo que nos lleva al comando pipe.
El comando pipe, denotado por una barra vertical (|), amplía enormemente la funcionalidad de los shells,
te permite encadenar secuencias de comandos de filtrado, en consecuencia, la salida del comando 1 se
convierte en la entrada del comando 2, y así sucesivamente. No es sorprendente que pipe sea la abreviatura
de pipeline (tuberia).
Las variables de shell son variables cuyo alcance está limitado al shell en el
que se crearon, por lo tanto, los shells no pueden ver las variables de otros
shells.
Puedes invocar el comando set para listar todas las variables y sus
definiciones que son visibles para el shell actual. Debido a que también lista
mucha información subsecuente, puede canalizar la salida a head para mostrar
sólo las primeras cuatro definiciones de variables.
#Ejemplo de tuberías
¡No hay límite para el número de veces que puede encadenar tuberías en una fila!
❖ Ejemplos de tuberías
Combinación de comandos
Empecemos con un ejemplo de uso común. Recuerde los siguientes comandos:
● sort - ordena las líneas de texto de un fichero y muestra el resultado.
● uniq - imprime un archivo de texto con todas las líneas consecutivas repetidas comprimidas en una sola
línea.
Con la ayuda del operador pipe, puede combinar estos comandos para imprimir todas las líneas
únicas de un fichero.
Suponga que tiene el archivo pets.txt con el siguiente contenido:
Si sólo utiliza sort en pets.txt, obtendrá:
El fichero está ordenado, pero hay líneas duplicadas de "perro" y "pez dorado".
.
Esta vez has eliminado los duplicados consecutivos, pero quedan duplicados no consecutivos de "perro" y
"pez".
Pero si combinas los dos comandos en el orden correcto, primero con sort y luego con uniq,
obtendrás:
Cómo sort ordena todos los elementos idénticos consecutivamente, y uniq elimina todos los
duplicados consecutivos, al combinar los comandos sólo se imprimen las líneas únicas de pets.txt.
En casos como éste, se puede utilizar piping para aplicar el comando a cadenas y contenidos de ficheros.
Con cadenas, puede utilizar echo en combinación con tr para sustituir todas las vocales de una cadena por
guiones bajos _:
Para realizar el complemento de la operación del ejemplo anterior -o para sustituir todas las consonantes
(cualquier letra que no sea vocal) por un guión bajo - puede utilizar la opción -c:
Con los archivos, puede utilizar cat en combinación con tr para cambiar todo el texto de un archivo a
mayúsculas de la siguiente manera:
Las posibilidades son infinitas, por ejemplo: usted podría agregar uniq a la tubería anterior para devolver
sólo las líneas únicas en el archivo, así:
El campo JSON que quieres coger aquí es "precio": [números].[números]", para obtenerlo, puedes utilizar el
siguiente comando grep para extraerlo del texto JSON:
Utilice el comando cat para obtener la salida del archivo JSON y canalícelo con el comando grep para
obtener la salida requerida.
También puede extraer información directamente de las URL y recuperar cualquier dato específico utilizando
estos comandos grep.
2. Introduzca su dirección de correo electrónico y contraseña, y proceda a verificar su correo electrónico,
tras la verificación, se le redirigirá al panel de control.
3. En el panel de control, localice y haga clic en el botón Generar clave API, esto generará una clave API,
como se muestra a continuación. Asegúrese de guardar esta clave API.
4. A continuación, haga clic en la sección API Docs de la parte izquierda del panel de control.
5. Al hacer clic en ella, se le dirigirá a la página que se muestra a continuación, haga clic en el punto final
/coins.
6. En la esquina derecha de la página que se abre, encontrará un comando curl para recuperar la salida
en formato JSON, para probar esta funcionalidad, haga clic en el botón Probar.
Nota: Este proceso sólo funciona si introduce la clave de API generada en el cuadro de texto
denominado encabezado que solicita autorización.
7. Después de la autorización, la salida se generará en formato JSON, como se muestra a continuación:
Utilice el comando 'grep', siguiendo las directrices descritas anteriormente, para obtener los datos
necesarios.
Los metacaracteres son caracteres especiales que tienen significado para el shell.
Quoting especifica si el shell debe interpretar los caracteres especiales como metacaracteres o
'escapar' de ellos.
Entrada/Salida, o redirección 'I' 'O', se refiere a un conjunto de características utilizadas para redirigir
la entrada estándar, el teclado, o la salida estándar, el terminal.
● El símbolo '>' se utiliza para redirigir la salida estándar de un comando a un archivo, también crea el
archivo si no existe y sobrescribe su contenido si ya existe.
● Puede evitar la sobreescritura utilizando el símbolo doble mayor “>>” que, que añade la salida al
contenido existente.
● La combinación '2>' redirige un mensaje de error a un fichero. Para añadir el mensaje de error, por
ejemplo, a un archivo de registro de errores, añada otro signo mayor que (2>>).
● El signo menos (<) que es una redirección que se utiliza para pasar el contenido de un fichero como
entrada a la entrada estándar.
Veamos algunos ejemplos:
Puedes empezar creando simultáneamente un fichero y rellenándolo
con algo de texto, como esto, continuación, puede cat el archivo para
ver lo que hay allí. Como puedes ver, 'linea1' fue escrita en 'eg.text',
ahora, puedes intentar añadir otra línea al fichero y viendo el
contenido de nuevo, puedes ver que el fichero contiene exactamente
las dos líneas que has añadido.
Puede utilizar la sustitución de comandos para reemplazar un comando por su salida, hay dos
notaciones equivalentes:
● En la primera, el comando se encierra entre paréntesis con un signo de dólar delante ($(comando)).
● En la segunda, el comando se encierra entre comillas inversas (`comando`).
Supongamos que desea almacenar la ruta actual del directorio en una variable llamada
"here", puede utilizar la sustitución de comandos en el comando pwd (o directorio de
trabajo actual) para capturar su salida y asignarla a la variable "here", y efectivamente,
al hacer echo de su valor se devuelve el directorio actual.
Los argumentos de línea de órdenes son argumentos utilizados por un programa especificado en la
línea de órdenes, en particular, proporcionan una forma de pasar argumentos a un script de shell, un
programa. Los argumentos de línea de comandos para un script Bash se especifican: Los argumentos 'arg1'
y 'arg2' se pasan a 'MyBashScript.sh'.
$ ./MyBashScript.sh arg1 arg2
Metacaracteres
Los metacaracteres son caracteres con un significado especial que el shell interpreta como
instrucciones.
Metacarácter Significado
Numeral #
El metacarácter Numeral # Se utiliza para representar comentarios en scripts de shell o archivos de
configuración, cualquier texto que aparezca después de un # en una línea se trata como un comentario y es
ignorado por el shell.
Los comentarios son útiles para documentar tu código o archivos de configuración, proporcionando contexto
y explicando el propósito del código a otros desarrolladores que puedan leerlo. Es una buena práctica
incluir comentarios en tu código o ficheros de configuración siempre que sea necesario para
hacerlos más legibles y mantenibles.
Punto y coma ;
El metacarácter punto y coma ; se utiliza para separar varios comandos en una misma línea de
comandos, cuando varios comandos están separados por un punto y coma, se ejecutan secuencialmente
en el orden en que aparecen en la línea de comandos.
Como puede ver en el ejemplo anterior, la salida de cada comando echo se imprime en líneas separadas y
sigue la misma secuencia en la que se especificaron los comandos.
Asterisco *
El metacarácter asterisco * se utiliza como carácter comodín para representar cualquier secuencia de
caracteres, incluso ninguna.
En este ejemplo, *.txt es un patrón comodín que coincide con cualquier archivo del directorio actual con
extensión .txt. El comando ls lista los nombres de todos los archivos coincidentes.
Signo de interrogación ?
El metacarácter signo de interrogación ? se utiliza como carácter comodín para representar cualquier
carácter.
En este ejemplo, archivo?.txt es un patrón comodín que coincide con cualquier archivo del directorio actual
cuyo nombre empiece por archivo, seguido de cualquier carácter y termine con la extensión .txt.
Citas
El entrecomillado es un mecanismo que permite eliminar el significado especial de los caracteres,
espacios u otros metacaracteres de un argumento de comando o script de shell. Las comillas se utilizan
cuando se desea que el shell interprete los caracteres literalmente.
Barra invertida \
La barra invertida se utiliza como carácter de escape. Indica al shell que conserve la interpretación
literal de caracteres especiales como espacio, tabulador y $, por ejemplo, si tiene un archivo con
espacios en su nombre, puede utilizar barras invertidas seguidas de un espacio para tratar esos espacios
literalmente:
Observe que en lugar de imprimir el valor de $USER, las comillas simples hacen que el terminal
imprima la cadena "$USER".
Redirección de entrada/salida
La redirección de entrada/salida (IO) es el proceso de dirigir el flujo de datos entre un programa y sus
fuentes de entrada/salida.
Por defecto, un programa lee la entrada desde la entrada estándar, el teclado, y escribe la salida en la salida
estándar, el terminal, sin embargo, utilizando la redirección IO, puede redirigir la entrada o salida de un
programa hacia o desde un archivo u otro programa.
Sustitución de comandos
La sustitución de comandos permite ejecutar un comando y utilizar su salida como componente del
argumento de otro comando. La sustitución de comandos se indica encerrando un comando entre comillas
(`command`) o utilizando la sintaxis $(). Cuando se ejecuta el comando encapsulado, su salida se
sustituye en su lugar y puede utilizarse como argumento dentro de otro comando. Esto es particularmente
útil para automatizar tareas que requieren el uso de la salida de un comando como entrada para otro
comando.
Por ejemplo, puedes almacenar la ruta a tu directorio actual en una variable aplicando la sustitución de
comandos en el comando pwd, luego moverse a otro directorio, y finalmente volver a tu directorio original
invocando el comando cd en la variable que almacenaste, de la siguiente manera:
● Condicionales
Los condicionales, o sentencias if, son una forma de decirle a un script que haga algo sólo bajo una
condición específica.
Los condicionales de script Bash utilizan la siguiente sintaxis if-then-else:
Si la condición es verdadera, entonces Bash ejecuta las sentencias en statement_block_1 antes de
salir del bloque condicional de código. Después de salir, continuará ejecutando cualquier comando después
del cierre “fi”.
Alternativamente, si la condición es falsa, Bash ejecuta las sentencias en statement_block_2 bajo la
línea else, luego sale del bloque condicional y continúa ejecutando comandos después del cierre “fi”.
Observe el uso de los corchetes dobles, que es la sintaxis requerida para hacer comparaciones de
enteros en la condición [[ $# == 2 ]].
También puede hacer comparaciones de cadenas, por ejemplo, suponga que tiene una variable llamada
cadena_var que tiene asignado el valor "Si". Entonces la siguiente sentencia se evalúa a verdadero:
Fíjese que sólo necesita corchetes simples cuando hace comparaciones de cadenas.
También puede incluir múltiples condiciones a satisfacer utilizando el operador "and" && o el operador "or" ||.
Por ejemplo
● Operadores lógicos
Los siguientes operadores lógicos se pueden utilizar para comparar enteros dentro de una condición
en un bloque de condición if.
==: es igual a
Si una variable a tiene un valor de 2, la siguiente condición se evalúa como verdadera; en caso contrario, se
evalúa como falsa.
!=: no es igual a
Si una variable a tiene un valor distinto de 2, la siguiente condición se evalúa como verdadera. Si su valor es
2, entonces se evalúa como falso.
Consejo: El operador lógico de negación ! cambia verdadero por falso y falso por verdadero.
Aquí sólo hemos dado una pequeña muestra de los operadores lógicos, puedes explorar recursos
como la Guía Avanzada de Bash-Scripting para encontrar más información.
Cálculos aritméticos
Puedes realizar sumas, restas, multiplicaciones y divisiones de números enteros utilizando la
notación $(()).
Por ejemplo, los dos conjuntos de comandos siguientes muestran el resultado de sumar 3 y 2.
Bash maneja aritmética de enteros de forma nativa, pero no maneja aritmética de coma flotante,
como resultado, siempre truncará la parte decimal del resultado de un cálculo, Por ejemplo:
Esta sentencia crea y rellena la matriz mi_matriz con los elementos entre paréntesis: 1, 2, "tres", "cuatro" y 5.
Si quieres añadir elementos a tu array después de crearlo, puedes hacerlo añadiendo un elemento
cada vez:
● bucles for
Puede utilizar una construcción llamada bucle for junto con la indexación para iterar sobre todos los
elementos de una matriz, por ejemplo, los siguientes bucles for se ejecutarán una y otra vez hasta que se
impriman todos los elementos:
El bucle for requiere un componente ; do para recorrer el bucle. Además, necesita terminar el bloque
del bucle for con una sentencia done.
Otra forma de implementar un bucle for cuando sabes cuántas iteraciones quieres es la siguiente, por
ejemplo, el siguiente código imprime los números del 0 al 6.
Puede utilizar los bucles for para realizar todo tipo de cosas, por ejemplo, puedes contar el número
de elementos de un array o sumar sus elementos, como hace el siguiente script de Bash:
Prueba a ejecutar este script, para que te hagas una idea de cómo funciona este bucle.
Al introducir crontab "menos e" en la línea de comandos, se abre el editor de texto predeterminado, con
el editor, puede especificar un nuevo cronograma y un comando, que tiene la siguiente sintaxis: "comando"
puede ser cualquier comando del shell, incluida una llamada a un script del shell. Los símbolos significan
minuto, hora, día del mes, mes y día de la semana. las cinco posiciones deben tener una entrada
numérica o un asterisco, que es un símbolo comodín que significa "cualquiera", por ejemplo, la
siguiente sintaxis significa:
anexar la fecha actual al archivo 'sundays.txt' a las 15:30 de cada domingo, al cerrar el editor y guardar los
cambios, la tarea se añade a la tabla cron. Veamos con más detalle cada uno de estos pasos.
Al introducir crontab "menos e" en la línea de comandos, se abre el editor de texto predeterminado.
En este caso, el editor predeterminado es GNU nano, convenientemente, las instrucciones para configurar
las tareas cron se incluyen aquí como comentarios. También se incluyen instrucciones para utilizar el editor,
pero es probable que sólo necesite "control x" en este contexto.
Observe que los espacios adicionales se ignoran, por lo que para mejorar la legibilidad puede alinear
las entradas como columnas bajo el encabezado.
1. La primera entrada ordena a cron que añada la fecha actual al archivo "sundays.txt" a las 15:30 todos
los domingos.
2. La siguiente línea especifica un guión shell de "carga de datos" para que se ejecute todos los días a
medianoche.
3. La última línea hace que cron ejecute el guión shell de "copia de seguridad" de datos para que se
ejecute los domingos a las 2 de la madrugada.
Para guardar el trabajo, escriba primero "control x" para salir del editor y, a continuación, "y" para
guardar los cambios. Los trabajos ya están en producción.
Ejecutar crontab con la opción "l" devuelve una lista de todas las tareas cron y sus horarios.
Utilicé "tail" para evitar devolver todos los comentarios del archivo crontab.
Para eliminar una tarea, basta con invocar el editor crontab, eliminar la línea correspondiente en el
archivo crontab y guardar los cambios.
Proyecto Practico
Escenario
Su equipo le ha encomendado la tarea de crear un proceso automatizado de extracción, transformación y
carga (ETL) para extraer las previsiones meteorológicas diarias y los datos meteorológicos observados y
cargarlos en un informe activo que el equipo de análisis utilizará para su posterior análisis, como parte de un
proyecto más amplio de modelización de predicciones, el equipo quiere utilizar el informe para supervisar y
medir la precisión histórica de las predicciones de temperatura por fuente y estación.
Como prueba de concepto (POC), para empezar sólo se le pide que lo haga para una única estación y una
única fuente, para cada día a mediodía (hora local), recopiló tanto la temperatura real como la temperatura
prevista para el mediodía del día siguiente en Casablanca, Marruecos.
En una fase posterior, el equipo prevé ampliar el informe para incluir listas de ubicaciones, diferentes fuentes
de previsión, distintas frecuencias de actualización y otras métricas meteorológicas como la velocidad y
dirección del viento, las precipitaciones y la visibilidad.
Fuente de datos
Para este proyecto de prácticas, utilizarás el paquete de datos meteorológicos proporcionado por el proyecto
de código abierto wttr.in, un servicio web que ofrece información sobre previsiones meteorológicas en un
formato sencillo y basado en texto, para más información, puedes leer más sobre el servicio en su GitHub
Repo.
En primer lugar, utilizarás el comando curl para obtener datos meteorológicos a través del sitio web
wttr.in. Por ejemplo, para obtener los datos de Casablanca, introduce:
Resumen
Tareas de información meteorológica
Debe extraer y almacenar los siguientes datos cada día a mediodía, hora local, para Casablanca, Marruecos:
● La temperatura real (en grados Celsius)
● La temperatura prevista (en grados Celsius) para el día siguiente a mediodía.