Unidad 3

Fundamentos en Ciencias de la Computación

Shell y Bash: comandos, path y scripts básicos

¿Qué software es una shell?

Fundamentos en Ciencias de la Computación

¿Qué es un shell?

Una shell es un programa que permite interactuar con el sistema operativo mediante comandos.


Interfaz entre el usuario y el sistema operativo

Fundamentos en Ciencias de la Computación

Tipos de shell

Fundamentos en Ciencias de la Computación

echo $SHELL

MacOS / Linux

$PSVersionTable.PSedition

Windows

Tipos de shell

Fundamentos en Ciencias de la Computación

bash (Burne Again shell)

  • Shell estándar en mayoría de Linux
  • Amplia compatibilidad y soporte histórico
  • Base de scripting en sistemas Unix
  • Equilibrio entre simplicidad y potencia

zsh (Z shell)

  • Compatible con bash (en gran medida)
  • Mejoras en autocompletado y navegación
  • Alta capacidad de personalización
  • Preferido por ser shell moderno

dash (Debian Almequist shell)

  • Implementación ligera de sh
  • Muy rápido y eficiente
  • Usado en scripts del sistema
  • No orientado a uso interactivo

PowerShell

  • Shell orientado a objetos
  • Integrado con el ecosistema Windows
  • Sintaxis distinta a Unix
  • Muy potente para admin. de sistemas
echo $SHELL

MacOS / Linux

$PSVersionTable.PSedition

Windows

¿Cómo funciona la shell?

Ejemplo: en una shell escribo    ls      (abreviación de 'list')

  • La shell interpreta el comando
  • El kernel accede al sistema de archivos
  • El resultado vuelve a la shell
  • La shell lo muestra en pantalla

 

Nota:  La shell no hace el trabajo, le pide al sistema que lo haga

Fundamentos en Ciencias de la Computación

shell

sistema operativo (kernel)

shell

shell

hardware

shell

Comandos esenciales

Fundamentos en Ciencias de la Computación

Comandos esenciales

Fundamentos en Ciencias de la Computación

pwd
ls


mkdir test
cd test
touch archivo.txt

Bash

pwd
ls


mkdir test
cd test
New-Item archivo.txt

PowerShell

Comandos esenciales

Fundamentos en Ciencias de la Computación

pwd
ls


mkdir test
cd test
touch archivo.txt

Bash

pwd
ls


mkdir test
cd test
New-Item archivo.txt

PowerShell

manipulación de archivos

inspección

Comandos esenciales

Fundamentos en Ciencias de la Computación

pwd
ls


mkdir test
cd test
touch archivo.txt

Bash

pwd
ls


mkdir test
cd test
New-Item archivo.txt

PowerShell

manipulación de archivos

inspección

Comandos que procesan texto

Comandos que procesan objetos

Inspección de archivos

  • ls
  • pwd
  • tree
  • cat
  • less     Get-Content
  • head     "
  • tail     "
  • wc       (Get-Content arch | Measure-Object).Count

Fundamentos en Ciencias de la Computación

y sistema de archivos

Manipulación de archivos

  • cp
  • mv
  • rm
  • mkdir
  • touch       New-Item

Fundamentos en Ciencias de la Computación

y sistema de archivos

Búsqueda

  • grep       Search-String
  • find       Grep-ChildItem

Fundamentos en Ciencias de la Computación

Paths y Wildcards

Fundamentos en Ciencias de la Computación

Filesystems

Fundamentos en Ciencias de la Computación

Tipos de paths

  • Path absoluto:  comienza en la raiz   /     C:\
  • Path relativo:  depende del directorio actual
  • .         (directorio actual)
  • ..       (directorio padre)

Fundamentos en Ciencias de la Computación

touch a.txt b.txt c.log img_01.png img_02.png img_10.png data1.txt data2.txt nota.md
New-Item a.txt,b.txt,c.log,img_01.png,img_02.png,img_10.png,data1.txt,data2.txt,nota.md

Bash

PowerShell

ls *.txt
ls *.png
ls data*
ls *.log
ls *

*
(cero o más)

ls img_0?.png
ls data?.txt
ls ?.txt

?
(un caracter)

Fundamentos en Ciencias de la Computación

ls *.?xt
ls img_*[0-2].png
ls [a-c].*


combinaciones

ls [ab].txt
ls data[12].txt
ls img_0[12].png

[abc]
(uno de lista)

Wildcards (globbing)

Redirección y Pipes

Fundamentos en Ciencias de la Computación

Entrada y salida en la shell

Entrada estándar (STDIN): datos que el programa recibe | Teclado

Salida estándar (STDOUT): datos que el programa muestra | Pantalla

Error estándar (STDERR): mensajes de error del programa | Pantalla

Fundamentos en Ciencias de la Computación

cat     <enter>

Bash

PowerShell

while ($true) { Read-Host }  <enter>
  1. escribir texto y enter
  2. Ctrl-D para terminar
  1. escribir texto y enter
  2. Ctrl-C para terminar

¿dónde están STDIN y STDOUT?

  • >    sobrescribe
  • >>  agrega
  • <    lectura

Fundamentos en Ciencias de la Computación

Redirecciones

modifica las std*

cat > archivo.txt    <enter>

Bash

PowerShell

while ($true) { Read-Host } > archivo.txt <enter>
  1. escribir texto y enter
  2. Ctrl-D para terminar
  1. escribir texto y enter
  2. Ctrl-C para terminar
cat archivo.txt
Get-Content archivo.txt

Pipes

Fundamentos en Ciencias de la Computación

comando

stdout

stdin

comando

echo -e "uno\ndos\ntres" | wc -l

Bash

PowerShell

"uno","dos","tres" | Measure-Object

Combos útiles

Fundamentos en Ciencias de la Computación

ps ax | head -1     # Ver columana STAT

ps ax | sort -nrk 3 | head    # Si STAT es columna 3

Bash

PowerShell

Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 10

listar el TOP-10 de procesos que más memoria consumen

Expresiones Regulares

Fundamentos en Ciencias de la Computación

¿Qué es una regex?

Una forma de escribir un patrón de texto que permita buscar, filtrar, validar o transformar textos

Fundamentos en Ciencias de la Computación

No busca texto literal, busca texto que coincida con un patrón

Ejemplo:

animales que terminen con ata:
'ata$' <- regex

gata

rata

suricata
 

Se usan para:

  • direcciones IP
  • nombres / apellidos
  • direcciones de correo
  • funciones y variables
  • texto entre caracteres

 

Se usan en:

  • comandos p/archivos
  • editores de texto
  • lenguajes de programación
  • aplicativos (planillas electr., correo)
  • bases de datos

 

Fundamentos en Ciencias de la Computación

Ejercicios rápidos ->

Ejercicios:

Fundamentos en Ciencias de la Computación

regex: lo básico

  1. La regex se crea y se lee de izquierda a derecha (como texto)
  2. La mayoría de los caracteres del lenguaje se representan a si mismos en la regex
    • ​la regex de la letra 'a' es:  'a'
    • la regex del string 'UCU' es:  'UCU'
  3. Hay un grupo de caracteres (metacaracteres) que en la regex representan otra cosa:
    • ​   . ? * + ^ $ | [ ] { } ( ) \  
    • la letra 'a' seguida de asterisco no es la regex 'a*'  ...  ( es 'a[*]' )

Fundamentos en Ciencias de la Computación

regex: metacaracteres representantes

MetacaracterNombreFunción
.Puntoun carácter cualquiera
[...]Listalista de caracteres permitidos
[^...]Lista negadalista de caracteres prohibidos

representan a un (1) carácter

grep -e "e.endido" allwords.txt

defendido, da
pretendido, da
grep -e "[tr]endido" allwords.txt

desentendido, da
desprendido, da
distendido, da
entendido, da
espalditendido, da
incomprendido, da
malentendido
piernitendido, da
prendido, da
pretendido, da
rendido, da
rendidor, ra
sobrentendido, da
tendido, da
grep -e "[^tr]endido" allwords.txt

autoencendido
boquihendido, da
defendido, da
encendido, da
hendido, da
labihendido, da
ofendido, da
patihendido, da
trascendido, da

Fundamentos en Ciencias de la Computación

regex: metacaracteres cuantificadores

MetacaracterNombreFunción
?Opcionalcero o uno
*Asteriscocero, uno o más
+Másuno o más

indican las repeticiones del caracter anterior

egrep "p.?ando" allwords.txt

adoptando, da
agapando
pando
egrep "d.*cia" allwords.txt

abundancia
abundancial
acodiciar
demencia
fiducia
menudencia
radioluminiscencia
egrep "f.+cion" allwords.txt

afaccionado, da
afeccionar
aficionado, da
antiinflacionista
confucionismo
defeccionar
falsacionismo
ficcional

Fundamentos en Ciencias de la Computación

regex: metacaracteres ancla

MetacaracterNombreFunción
^CircunflejoInicio de la línea
$PesosFin de la línea

marcan la posición específica en la línea

grep -e "^a[aeiou]" allwords.txt

aeración
aero
aerobús
aeroclub
aerodinámico, ca
aerodinamismo
autovía
grep -e "[^aeiou]no$" allwords.txt

adorno
autogobierno
corno
cuaderno
durazno
extorno
forno

Variables de entorno

Fundamentos en Ciencias de la Computación

Variables en la shell

Fundamentos en Ciencias de la Computación

Una variable es un nombre que referencia un valor:

  • Permite almacenar información temporal
  • Puede ser texto, números o resultados de comandos
  • Se usa para reutilizar valores en scripts o sesiones
INSTITUCION="UCU"

echo $INSTITUCION

Bash

PowerShell

$institucion = "UCU"

Write-Output $institucion

asignación

uso

  • No hay espacios en la asignación
  • Se accede con $
  • Son por defecto locales a la shell
  • Siempre comienzan con $
  • Tipado más flexible (objetos)

Variables de entorno

Fundamentos en Ciencias de la Computación

Son variables definidas en el entorno del sistema

  • Afectan procesos y programas
  • Se heredan entre procesos
  • Configuran comportamiento global

Ejemplos típicos:

  • PATH
  • HOME / USERPROFILE
  • SHELL
/usr/bin/ls
ls

echo $PATH

Bash

PowerShell

$env:PATH 

$env:PATH -split ";"
env

printenv
Get-ChildItem Env:

Scripts

Fundamentos en Ciencias de la Computación

Scripts

Fundamentos en Ciencias de la Computación

Es un archivo de texto que contiene una secuencia de comandos:

  • Se ejecuta por un intérprete (shell)
  • Automatiza tareas
  • Evita ejecutar comandos manualmente

Se usan para:

  • Automatizar tareas repetitivas
  • Reducir errores humanos
  • Encadenar múltiples comandos
  • Administrar sistemas
#!/bin/bash
PROCESOS=$(ps axu | grep $USER | wc -l)
echo "El usuario $USER está ejecutando $PROCESOS procesos"

Bash

PowerShell

$procesos = (Get-Process).Count

Write-Output "El usuario $env:USERNAME está ejecutando $procesos procesos"
bash script      # no importa la extensión (convención .sh )
.\script.ps1     # IMPORTANTE la extensión .ps1

Scripts

Fundamentos en Ciencias de la Computación

#!/bin/bash
echo "Script: $0"
echo "Primer argumento: $1"
echo "Cantidad de argumentos: $#"
Write-Output "Script: $PSCommandPath"
Write-Output "Primer argumento: $($args[0])"
Write-Output "Cantidad de argumentos: $($args.Count)"

Hay variables especiales para scripts:

chmod +x script
./script

Bash

PowerShell

Set-ExecutionPolicy -Scope Process RemoteSigned
.\script.ps1

Para ejecutarlos autónomos hay permisos:

ejecución del script

ejecución en el entorno local

Hay estructuras de control de flujo for, if, while, case, etc.

#!/bin/bash
for arg in "$@"; do
  echo "Arg: $arg"
done
foreach ($arg in $args) {
  Write-Output "Arg: $arg"
}

Permisos y
acceso a archivos

Fundamentos en Ciencias de la Computación

Permisos y accesos a archivos

Fundamentos en Ciencias de la Computación

Los sistemas operativos multiusuario controlan quién puede hacer qué sobre archivos y recursos

  • quién accede:           usuario / grupo
  • qué puede hacer:     leer / escribir / ejecutar

Linux / MacOS

Permisos sobre archivos    ->    todo es un archivo

Fundamentos en Ciencias de la Computación

echo "hola" > demo.txt
chmod 000 demo.txt
ls -l demo.txt
cat demo.txt   # falla

chmod 777 demo.txt
ls -l demo.txt
cat demo.txt   # funciona
./demo.txt     # falla

chmod 644 demo.txt

r - lectura

w - escritura

x - ejecución

Windows

Fundamentos en Ciencias de la Computación

echo "hola" > demo.txt

# Ver permisos
Get-Acl demo.txt

# Quitar acceso (ejemplo conceptual)
icacls demo.txt /deny Everyone:(F)

# Dar acceso total
icacls demo.txt /grant Everyone:(F)

Permisos descriptivos

Se asignan por ACL (Access Control List)

Sobre esta presentación

Atribución 4.0 Internacional (CC BY 4.0)

https://creativecommons.org/licenses/by/4.0/deed.es

Fundamentos en Ciencias de la Computación

U3: Shell y Bash

By Rodolfo Pilas

U3: Shell y Bash

  • 23