☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Shell Script. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Shell Script. Mostrar todas as mensagens

sábado, 30 de março de 2024

JCL e USS: Eu Sabia Fazer... Até Descobrir que Precisava Aprender de Novo

 

Bellacosa Mainframe jcl e uss eu sabia fazer ate que li esse artigo

☕ Um Café no Bellacosa Mainframe

Eu Sabia Fazer... Até Descobrir que Precisava Aprender de Novo

JCL, USS e a maior lição que um Programador Mainframe pode aprender na era da Modernização

"O conhecimento verdadeiro não está em decorar comandos. Está em reconhecer padrões, independentemente da linguagem utilizada."


Existe um momento curioso na carreira de praticamente todo profissional de tecnologia.

Não importa se você programa em COBOL, Java, Python ou C.

Não importa se trabalha em Linux, Windows ou IBM z/OS.

Mais cedo ou mais tarde você olha para uma tarefa simples — algo que faz há vinte anos — e pensa:

"Espera... como é mesmo que faz isso aqui?"

A primeira reação costuma ser de frustração.

"Será que estou esquecendo?"

Na maioria das vezes, não.

Você continua sabendo exatamente o que precisa ser feito.

O problema é que o ambiente mudou.

E quando o ambiente muda, a maneira de conversar com ele também muda.

Foi exatamente isso que aconteceu quando muitos profissionais Mainframe conheceram o USS (Unix System Services).

Eles não estavam aprendendo um novo trabalho.

Estavam aprendendo uma nova língua.

E, curiosamente, isso costuma ser muito mais difícil.

Pegue uma xícara de café.

Hoje vamos conversar sobre uma das maiores armadilhas da modernização do IBM Z.


Quando o piloto entra em outro avião

Imagine um comandante com trinta anos de experiência pilotando um Boeing 737.

Um belo dia ele recebe treinamento para voar um Airbus A320.

Ele esqueceu como voar?

Claro que não.

Ele continua entendendo:

  • sustentação

  • velocidade

  • meteorologia

  • navegação

  • segurança

Tudo isso continua igual.

O que muda é:

  • onde fica cada botão;

  • como os sistemas conversam;

  • quais procedimentos devem ser executados.

Durante alguns dias ele parece um iniciante.

Mas ele não voltou ao zero.

Ele apenas precisa reconstruir seus reflexos.

É exatamente isso que acontece quando um programador experiente em JCL começa a trabalhar no USS.


O erro mais comum dos iniciantes

Quando um programador júnior aprende COBOL, tudo é novidade.

Ele aceita naturalmente ser iniciante.

Mas existe um problema curioso com profissionais experientes.

Quando entram em um ambiente parecido...

...eles esperam que tudo funcione igual.

E aí começam as comparações.

"Cadê o EXEC PGM?"

"Cadê o DD?"

"Cadê o DSN?"

"Cadê o DISP?"

"Cadê o SYSIN?"

A resposta é simples.

Eles continuam existindo...

...mas não da forma que você espera.


O IBM z/OS possui dois universos

Muitos iniciantes imaginam que existe um único ambiente Mainframe.

Na verdade existem dois mundos convivendo harmoniosamente.

Mundo tradicional

  • Batch

  • JES2/JES3

  • JCL

  • DFSORT

  • IDCAMS

  • IEBGENER

  • TSO/ISPF

  • Dataset

É o universo clássico.

É onde o Mainframe cresceu.


Mundo USS

Agora imagine colocar um Unix inteiro dentro do z/OS.

Foi exatamente isso que a IBM fez.

O USS oferece:

  • Shell

  • Bash

  • Diretórios

  • Arquivos

  • Scripts

  • Permissões POSIX

  • OpenSSH

  • Python

  • Git

  • Java

  • Node.js

  • Zowe CLI

Sem sair do z/OS.

Esse detalhe é importantíssimo.

O USS não substitui o Mainframe.

Ele amplia o Mainframe.


O maior equívoco sobre o USS

Muita gente pensa:

"Agora o Mainframe virou Linux."

Não.

Nem perto disso.

O Kernel continua sendo o z/OS.

O gerenciamento de memória continua sendo do z/OS.

O Workload Manager continua sendo do z/OS.

O RACF continua protegendo recursos.

O JES continua executando Batch.

O USS apenas fornece outra interface para conversar com o sistema operacional.

É como trocar o painel de instrumentos de um carro.

O motor continua o mesmo.


Dataset não morreu

Uma das primeiras confusões acontece aqui.

Durante décadas escrevemos:

CLIENTE.VENDAS.ARQUIVO

No USS passamos a enxergar algo como:

/u/vagner/clientes/vendas.txt

A primeira impressão é:

"Agora só existem arquivos."

Não.

Os datasets continuam existindo.

Inclusive é possível acessá-los a partir do USS.

Da mesma forma, programas Batch conseguem trabalhar com arquivos do USS.

Os dois mundos conversam.

E isso é fantástico.


DD Statements versus Pathnames

Durante anos aprendemos:

//INPUT DD DSN=CLIENTE.INPUT,DISP=SHR

O programa COBOL nunca conhecia o nome físico do dataset.

Ele apenas dizia:

SELECT CLIENTES
ASSIGN TO INPUT.

O JCL fazia a ligação.

Isso separava infraestrutura do programa.

No USS isso muda.

Agora normalmente fazemos:

programa entrada.txt saida.txt

Ou

fopen("/u/input/clientes.txt")

É outra filosofia.

Não melhor.

Não pior.

Diferente.


EXEC PGM virou comando

No Batch.

//STEP01 EXEC PGM=COBPROG

No USS.

./cobprog

Ou

cobprog

A intenção continua exatamente igual.

Executar um programa.

Mas agora o pensamento é imperativo.

Você manda executar imediatamente.

Enquanto o JCL descreve um processo inteiro.


Ordenação: o exemplo perfeito

Durante décadas utilizamos DFSORT.

//STEP EXEC PGM=SORT

Depois:

SORT FIELDS=(1,10,CH,A)

No USS tudo parece diferente.

Agora temos:

sort arquivo.txt

Ou:

syncsort

Ou pipelines:

cat clientes.txt | sort

Ou:

sort clientes.txt > clientes_ordenados.txt

Você continua ordenando.

Mas agora conversa diretamente com o sistema operacional.


Copiar arquivos

Batch.

IEBGENER.

PGM=IEBGENER

USS.

cp origem destino

Uma linha.

Fim.


Excluir arquivos

Batch.

DELETE CLIENTE.ARQ

USS.

rm arquivo

Mesma ação.

Outra gramática.


O verdadeiro desafio é psicológico

Essa talvez seja a parte mais interessante.

Quando tudo é completamente novo...

Nosso cérebro aceita aprender.

Mas quando algo parece familiar...

Tentamos usar nossos velhos reflexos.

É aí que começamos a tropeçar.

É como trocar de carro.

Você continua sabendo dirigir.

Mas procura o limpador de para-brisa no lugar errado.


O cérebro funciona por padrões

Programadores experientes não decoram comandos.

Eles criam padrões mentais.

Por exemplo.

Quando alguém fala:

"Preciso copiar dados."

Seu cérebro já responde:

IEBGENER.

Isso virou memória muscular.

Agora imagine trocar isso por:

cp

Não é difícil.

Mas o cérebro insiste em procurar o antigo caminho.


O mesmo acontece em outras tecnologias

COBOL → Java

Você continua escrevendo lógica.

Mudam:

  • sintaxe;

  • paradigma;

  • bibliotecas.


DB2 → PostgreSQL

SQL continua sendo SQL.

Mas:

  • utilitários;

  • administração;

  • backup;

  • tuning;

mudam completamente.


ISPF → VS Code

Você continua editando programas.

Mas os atalhos mudam.

A organização muda.

O fluxo muda.


JCL → Shell Script

Você continua automatizando processos.

Mas agora usa:

  • variáveis;

  • loops;

  • funções;

  • pipelines;

  • redirecionamento;

  • permissões.


Shell pensa diferente

JCL é declarativo.

Você descreve.

Quero executar isso.

Depois usar esse dataset.

Depois gravar ali.

Depois liberar espaço.

O sistema organiza tudo.

Shell é imperativo.

Você diz:

faça isso

agora isso

agora aquilo

agora copie

agora compacte

agora envie

Parece uma conversa.


A revolução silenciosa

Pouca gente percebe.

Hoje praticamente todas as ferramentas modernas do IBM Z passam pelo USS.

Git.

Python.

OpenSSH.

OpenSSL.

Java.

Node.js.

Ansible.

Docker Build Tools.

Make.

Maven.

Gradle.

VS Code.

Zowe CLI.

IBM Dependency Based Build.

Open Enterprise SDK.

Tudo isso vive ou conversa intensamente com o USS.

Quem domina USS ganha acesso ao universo moderno do Mainframe.


Curiosidade #1

O USS segue os padrões POSIX.

Isso significa que muito software originalmente criado para Unix pode ser recompilado para z/OS com poucas adaptações.

É um dos motivos pelos quais Python, Git e OpenSSH funcionam tão bem no IBM Z.


Curiosidade #2

Você pode acessar datasets tradicionais usando caminhos especiais dentro do USS.

Algo parecido com:

//CLIENTE.INPUT

Ou utilizando APIs específicas do z/OS.

É uma ponte entre os dois mundos.


Curiosidade #3

O comando ls mostra arquivos.

Mas também pode mostrar permissões POSIX.

Enquanto datasets continuam possuindo atributos completamente diferentes como:

  • RECFM

  • LRECL

  • BLKSIZE

  • DSORG

São dois modelos coexistindo.


Curiosidade #4

Muitos programas COBOL modernos conseguem trabalhar simultaneamente com:

  • datasets tradicionais;

  • arquivos USS;

  • bancos DB2;

  • APIs REST;

  • filas MQ.

Tudo no mesmo programa.

Essa integração é uma das maiores forças do IBM Z atual.


Dicas para o Programador Júnior

Não tente decorar comandos

Aprenda conceitos.

Quem entende conceitos aprende comandos rapidamente.


Entenda o objetivo

Antes de perguntar:

"Qual comando faz isso?"

Pergunte:

"O que eu quero fazer?"

A resposta quase sempre será:

  • copiar;

  • ordenar;

  • executar;

  • pesquisar;

  • transformar.

Depois descubra como cada ambiente expressa essa ideia.


Aprenda os dois mundos

Não escolha entre JCL e USS.

Aprenda ambos.

O mercado procura profissionais híbridos.


Pratique pequenos scripts

Faça scripts simples.

Copie arquivos.

Liste diretórios.

Ordene textos.

Execute programas.

Quanto mais prática, menos estranhos parecerão os comandos.


Leia JCL antigo

Muita lógica de negócio ainda vive em Batch.

Conhecer esse mundo é um enorme diferencial.


Explore o USS sem medo

Abra um shell.

Digite:

pwd
ls
cd
mkdir
cp
mv
rm
cat
grep
sort
find

São comandos simples.

Mas representam uma mudança enorme na forma de pensar.


Easter Egg do Bellacosa ☕

Existe uma frase famosa entre administradores Unix:

"Everything is a file."

No mundo Mainframe poderíamos adaptá-la para:

"Everything is a dataset... até você conhecer o USS."


Easter Egg Mainframe Nerd 🤓

Repare na sequência dos utilitários clássicos:

  • IEBGENER copia.

  • IEBCOPY copia PDS.

  • IDCAMS administra VSAM e datasets.

  • DFSORT organiza dados.

Agora observe os equivalentes Unix:

  • cp

  • mv

  • rm

  • sort

Quatro comandos substituem dezenas de utilitários especializados. Isso não significa que um modelo seja superior ao outro; significa apenas que cada ecossistema evoluiu para atender necessidades diferentes. O z/OS privilegiou controle, rastreabilidade e processamento corporativo em larga escala. O Unix priorizou simplicidade, composição de ferramentas e interatividade.


Conclusão: Aprender de Novo Não é Recomeçar

Existe uma enorme diferença entre recomeçar do zero e reconstruir seus referenciais.

Quando um desenvolvedor COBOL aprende Java, ele não esquece lógica de programação.

Quando um DBA DB2 aprende PostgreSQL, ele não esquece bancos de dados.

Quando um especialista em JCL aprende USS, ele não desaprende Batch.

Ele apenas descobre uma nova maneira de conversar com o mesmo sistema.

E talvez essa seja a maior lição da modernização do IBM Z: a tecnologia evolui, as interfaces mudam, as ferramentas se renovam, mas os princípios fundamentais permanecem. Quem entende esses princípios consegue atravessar décadas de inovação sem perder sua essência técnica.

No fim das contas, a verdadeira competência não está em decorar comandos como EXEC PGM, cp, sort ou rm. Ela está em compreender o problema, reconhecer padrões e adaptar-se rapidamente a novas formas de expressar soluções.

É por isso que os melhores profissionais de Mainframe não são aqueles que conhecem apenas o legado, nem os que dominam apenas as ferramentas modernas. São aqueles capazes de caminhar com naturalidade entre o JCL e o Bash, entre o ISPF e o VS Code, entre o dataset e o pathname, entre o Batch e o DevOps.

Porque, no IBM Z, existem dois mundos. E o profissional do futuro é aquele que fala fluentemente os dois.


domingo, 17 de fevereiro de 2019

IBM Mainframe Discovery : Capítulo XIV — O Jardim Secreto da Nave

 

Bellacosa Mainframe apresenta ibm mainframe parte xiv

☕ Um Café no Bellacosa Mainframe

Capítulo XIV — O Jardim Secreto da Nave

UNIX System Services (USS): O Lugar Onde o Mainframe Aprendeu a Falar a Língua das Estrelas


DÉCIMA PRIMEIRA REGRA DOS VIAJANTES CÓSMICOS

Se alguém lhe disser:

"Mainframe não roda Linux, não roda Python e não entende UNIX..."

...sorria.

Ofereça um café.

Respire fundo.

E pergunte gentilmente:

"Em que século você está morando?"

Porque existe um lugar dentro do IBM Z que muitos exploradores jamais visitaram.

Um lugar escondido atrás de corredores discretos.

Ali não existem PDS.

Nem membros.

Nem JCL.

Pelo menos...

não da forma que você está acostumado.

Ali existem:

  • diretórios;

  • arquivos texto;

  • Shell;

  • Bash;

  • Korn Shell;

  • Python;

  • Perl;

  • Java;

  • Git;

  • SSH;

  • OpenSSL;

  • Node.js;

  • Makefiles.

É quase como atravessar um portal dimensional.

Bem-vindo ao UNIX System Services.

Ou simplesmente...

USS.


O Boato Mais Persistente da Galáxia

Existe uma antiga lenda espacial.

Ela diz:

"O Mainframe vive isolado."

Outra afirma:

"Ele não conversa com tecnologias modernas."

Outra ainda garante:

"É impossível desenvolver software moderno dentro dele."

Essas histórias continuam viajando pela galáxia...

...mesmo estando completamente desatualizadas.


Um Jardim Dentro da Fortaleza

Imagine uma gigantesca fortaleza.

Paredes de aço.

Portões blindados.

Salas cheias de computadores.

Agora imagine descobrir...

...um enorme jardim escondido em seu interior.

Árvores.

Lagos.

Bibliotecas.

Observatórios.

É exatamente essa sensação que muitos profissionais têm ao conhecer o USS pela primeira vez.


O Grande Equívoco do Padawan

Todo Programador COBOL iniciante imagina que o IBM Z funciona apenas assim:

TSO

ISPF

JCL

COBOL

Fim.

Na realidade...

isso representa apenas uma parte do universo.

Existe um continente inteiro esperando para ser explorado.


Um Novo Continente

Imagine que sua nave pousou em outro planeta.

Curiosamente...

os habitantes utilizam comandos familiares.

Você digita:

ls

E funciona.

Depois:

cd projetos

Também funciona.

Depois:

pwd

Novamente funciona.

O Padawan olha para a tela.

Olha novamente.

Coça a cabeça.

E pergunta:

"Isso é mesmo um Mainframe?"

Sim.

É.


A Floresta dos Diretórios

No mundo tradicional do z/OS aprendemos sobre:

PDS.

PDSE.

Datasets.

HLQ.

LRECL.

RECFM.

No USS encontramos outra paisagem.

Diretórios.

Subdiretórios.

Arquivos.

Links.

Permissões.

É como trocar uma gigantesca biblioteca de fichários por uma cidade repleta de ruas e endereços.


O Explorador Galáctico

Imagine um explorador.

Ele caminha pela floresta.

Anota tudo.

Descobre cavernas.

Mede rios.

Esse explorador possui uma ferramenta.

Ela chama-se:

Shell.

O Shell é o intérprete que conversa com o sistema operacional.

É como um tradutor entre o explorador e a nave.


O Diário de Bordo Automatizado

Agora imagine que o explorador repete exatamente a mesma missão todos os dias.

Acender sensores.

Verificar radares.

Enviar relatórios.

Atualizar mapas.

Depois do terceiro dia...

ele percebe que pode automatizar tudo.

Assim nasceram os:

Shell Scripts.

Pequenos programas que executam tarefas repetitivas automaticamente.


Permissões — As Chaves da Cidade

Imagine uma cidade.

Nem todas as portas podem ser abertas por qualquer pessoa.

Algumas pertencem ao laboratório.

Outras ao cofre.

Outras à ponte de comando.

No USS encontramos exatamente esse conceito.

Cada arquivo possui permissões.

Quem pode:

ler.

escrever.

executar.

Tudo cuidadosamente controlado.

O USS implementa um ambiente compatível com padrões POSIX, permitindo controle refinado de usuários, grupos e permissões enquanto convive com os mecanismos tradicionais de segurança do z/OS.


POSIX — A Constituição Planetária

Imagine dezenas de planetas.

Cada um possui leis diferentes.

Até que todos concordam em criar uma constituição comum.

Essa constituição chama-se:

POSIX.

Graças a ela...

programas escritos para UNIX podem ser adaptados muito mais facilmente ao USS.

Não é magia.

É padronização.


ASCII Encontra EBCDIC

Chegamos a uma das conversas mais curiosas da galáxia.

Imagine dois povos.

Um escreve da esquerda para a direita.

Outro utiliza símbolos completamente diferentes.

Ambos precisam trocar documentos.

No IBM Z isso acontece diariamente.

O mundo UNIX normalmente utiliza:

ASCII ou UTF-8.

O mundo tradicional do Mainframe utiliza:

EBCDIC.

O USS atua como uma ponte entre esses universos, oferecendo mecanismos para conversão de caracteres e integração entre ambientes.


Python Entra na Nave

Imagine um jovem cientista chegando à nave.

Ele pergunta:

"Posso usar Python?"

Os veteranos sorriem.

A resposta é:

"Claro."

Hoje o USS permite executar aplicações Python diretamente no IBM Z, possibilitando automação, análise de dados, APIs e integração com aplicações tradicionais.


Git Também Mora Aqui

Outro visitante curioso chega.

Ele pergunta:

"Existe Git?"

Sim.

Existe.

Imagine uma gigantesca biblioteca onde cada alteração fica registrada.

Cada capítulo.

Cada linha.

Cada revisão.

É exatamente isso que o Git proporciona.

E ele funciona muito bem dentro do USS.


OpenSSH — O Portal Interestelar

Agora imagine que um engenheiro deseja acessar a nave remotamente.

Sem precisar utilizar um terminal 3270.

Ele abre o computador.

Digita:

ssh usuario@servidor

E poucos segundos depois...

está dentro do USS.

Como se estivesse sentado na própria ponte de comando.


Java, Node.js e Companhia

Curiosamente...

o USS não recebe apenas Python.

Ali vivem também:

Java.

Node.js.

PHP.

Ruby.

Go.

C.

C++.

Ferramentas modernas compartilham espaço com aplicações COBOL que executam há décadas.

É como assistir a um mestre artesão e um engenheiro de robótica trabalhando lado a lado.


O Laboratório de Ferramentas

Imagine uma oficina gigantesca.

Existem:

grep.

awk.

sed.

find.

tar.

gzip.

vi.

vim.

nano.

curl.

wget.

Cada ferramenta resolve um problema específico.

Separadamente parecem simples.

Juntas...

transformam-se em um verdadeiro canivete suíço da administração de sistemas.


Pipelines — A Esteira da Fábrica

Imagine uma fábrica.

Um robô corta.

Outro pinta.

Outro monta.

Outro embala.

Nenhum faz tudo.

Mas juntos produzem algo extraordinário.

O Shell utiliza exatamente essa filosofia.

cat log.txt | grep ERROR | sort | uniq

Cada comando faz apenas uma tarefa.

O resultado final parece magia.


O USS Conversa com o z/OS

Talvez a parte mais fascinante seja esta.

O USS não vive isolado.

Ele conversa continuamente com:

JES.

CICS.

Db2.

MQ.

RACF.

z/OSMF.

COBOL.

REXX.

JCL.

É um cidadão legítimo da Federação.

Não um visitante.


O Nascimento do DevOps no IBM Z

Agora imagine um engenheiro moderno.

Ele deseja:

Git.

Jenkins.

Ansible.

Docker.

OpenShift.

CI/CD.

Automação.

Todos esses elementos podem utilizar o USS como ponto de integração.

É ali que muitas ferramentas open source encontram um lar natural dentro do IBM Z.


O Que Diz Spruth?

Quando Wilhelm G. Spruth escreveu seu relatório, já destacava que o suporte a UNIX representava um passo decisivo na integração do System z com o restante da indústria, permitindo que aplicações e ferramentas desenvolvidas segundo padrões abertos coexistissem com os tradicionais ambientes z/OS.

Na época, essa visão já apontava para um futuro em que o IBM Z deixaria de ser visto como uma plataforma isolada e passaria a fazer parte do ecossistema aberto da computação empresarial.


O Que Mudou Desde 2010?

Se Spruth pudesse visitar um IBM z17 hoje...

provavelmente ficaria impressionado.

O USS evoluiu para suportar um universo ainda maior:

  • Python para IA e automação;

  • Git integrado ao desenvolvimento COBOL;

  • Zowe CLI e Zowe Explorer;

  • VS Code e IBM Z Open Editor;

  • Jenkins;

  • Ansible;

  • OpenSSH;

  • OpenSSL;

  • APIs REST;

  • Node.js;

  • Java 21;

  • Open Liberty;

  • OpenTelemetry;

  • Kubernetes e OpenShift;

  • contêineres em Linux on Z;

  • automação baseada em IA.

O jardim secreto transformou-se em uma verdadeira metrópole tecnológica.


Uma Lição Para Além da Tecnologia

Existe uma mensagem escondida neste capítulo.

As maiores inovações raramente acontecem quando destruímos o passado.

Elas acontecem quando construímos pontes.

O USS não substituiu o TSO.

Não aposentou o COBOL.

Não eliminou o JCL.

Ele simplesmente ampliou o universo.

Mostrou que tradição e inovação podem dividir a mesma nave.

Talvez essa seja uma das maiores lições da história do IBM Z.


Curiosidades do Diário de Bordo

🌿 O USS implementa uma interface compatível com POSIX dentro do z/OS, aproximando o ambiente IBM Z do ecossistema UNIX.

🐍 Python, Java, Node.js, Git, OpenSSH e diversas ferramentas open source podem ser utilizados diretamente nesse ambiente.

🛰️ O USS tornou-se peça fundamental para iniciativas de DevOps, automação e desenvolvimento moderno no IBM Z.

🚀 Muitas equipes utilizam o USS como ponte entre aplicações clássicas em COBOL e ferramentas contemporâneas de integração contínua e desenvolvimento colaborativo.


Diário de Bordo do Padawan COBOL

Antes de deixar o Jardim Secreto da Nave, registre estas coordenadas no seu Holocron Técnico:

✅ O UNIX System Services amplia o universo do IBM Z, oferecendo um ambiente compatível com padrões UNIX e POSIX.

✅ O USS permite integrar tecnologias modernas sem abandonar a robustez do z/OS.

✅ Shell Scripts, Python, Git, SSH e ferramentas open source convivem harmoniosamente com COBOL, JCL, CICS e Db2.

✅ O verdadeiro segredo da longevidade do IBM Z nunca foi resistir às mudanças. Foi aprender a incorporá-las sem perder sua identidade.


Missão Seguinte

No próximo capítulo seguiremos para a Grande Oficina dos Construtores da Federação: WebSphere, Java e z/OS Connect.

Descobriremos como programas COBOL escritos há quarenta anos podem conversar com APIs REST, microsserviços, aplicações em nuvem, dispositivos móveis e Inteligência Artificial, transformando a velha nave da Frota Estelar em um dos mais modernos centros de integração da galáxia. Lá entenderemos que o futuro não substituiu o legado — ele simplesmente aprendeu a conversar com ele.

☕ Um Café no Bellacosa Mainframe

O Guia Galáctico do IBM Z

Dezoito capítulos e uma conclusão reunidos em um painel interativo. Escolha uma missão, abra no visor e continue explorando diretamente no artigo original.

Não entre em pânico: se o Blogger impedir a exibição dentro do iframe, use “Abrir artigo”. Os links diretos continuam visíveis para leitores e motores de busca.
01

Capítulo I — Não Entre em Pânico!

Leia no visor ou abra a publicação original.

Abrir artigo
02

Capítulo II — A Planta da Nave Mais Duradoura da Galáxia

Leia no visor ou abra a publicação original.

Abrir artigo
03

Capítulo III — A Nave Que Se Recusa a Explodir

Leia no visor ou abra a publicação original.

Abrir artigo
04

Capítulo IV — A Sala dos Cofres Cósmicos

Leia no visor ou abra a publicação original.

Abrir artigo
05

Capítulo V — A Frota Invisível do Transporte Interestelar

Leia no visor ou abra a publicação original.

Abrir artigo
06

Capítulo VI — O Grande Maestro Invisível

Leia no visor ou abra a publicação original.

Abrir artigo
07

Capítulo VII — O Grande Terminal de Embarque da Galáxia

Leia no visor ou abra a publicação original.

Abrir artigo
08

Capítulo VIII — A Metrópole das Transações Infinitas

Leia no visor ou abra a publicação original.

Abrir artigo
09

Capítulo IX — A Federação das Naves Invisíveis

Leia no visor ou abra a publicação original.

Abrir artigo
10

Capítulo X — A Consciência Coletiva da Galáxia

Leia no visor ou abra a publicação original.

Abrir artigo
11

Capítulo XI — O Almirante Invisível da Frota

Leia no visor ou abra a publicação original.

Abrir artigo
12

Capítulo XII — A Biblioteca Infinita da Galáxia

Leia no visor ou abra a publicação original.

Abrir artigo
13

Capítulo XIII — O Serviço Postal Mais Confiável da Galáxia

Leia no visor ou abra a publicação original.

Abrir artigo
14

Capítulo XIV — O Jardim Secreto da Nave

Leia no visor ou abra a publicação original.

Abrir artigo
15

Capítulo XV — O Tradutor Universal da Federação

Leia no visor ou abra a publicação original.

Abrir artigo
16

Capítulo XVI — A Fábrica Automática da Federação

Leia no visor ou abra a publicação original.

Abrir artigo
17

Capítulo XVII — A Última Fronteira Nunca Foi o Espaço

Leia no visor ou abra a publicação original.

Abrir artigo
18

Capítulo XVIII — O Guia Nunca Terminou

Leia no visor ou abra a publicação original.

Abrir artigo
19

Conclusão — Não Entre em Pânico... A Jornada Está Apenas Começando

Leia no visor ou abra a publicação original.

Abrir artigo

sábado, 21 de julho de 2018

O Sistema de Arquivos Linux Explicado Para um Programador COBOL Padawan

 

Bellacosa Mainframe e o sistema de arquivos linux

☕ Um Café no Bellacosa Mainframe

O Sistema de Arquivos Linux Explicado Para um Programador COBOL Padawan

Muito Além do /home e do /etc: Como Pensar Como um Engenheiro DevOps, Entender a Filosofia "Everything is a File" e Descobrir as Semelhanças Entre Linux, IBM z/OS e os Grandes Data Centers do Mundo

"No Linux, cada diretório tem um propósito. No Mainframe, cada Dataset também. O profissional que entende essa filosofia deixa de decorar comandos e começa a compreender a arquitetura."


Introdução

Se existe uma característica comum entre os grandes profissionais de tecnologia, ela não é saber centenas de comandos de memória nem decorar parâmetros obscuros de configuração.

O verdadeiro diferencial é compreender como os sistemas foram projetados.

Quando um programador COBOL começa a estudar Linux, normalmente acontece algo curioso.

Ele abre um terminal, executa:

ls /

e aparece algo parecido com isto:

bin
boot
dev
etc
home
lib
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

A primeira reação costuma ser:

"Quem inventou essa bagunça?"

Mas a resposta é exatamente o contrário.

Não existe bagunça alguma.

Existe uma organização extremamente rigorosa.

Cada diretório possui uma finalidade específica.

Cada arquivo está onde deveria estar.

Essa organização é resultado de mais de cinquenta anos de evolução dos sistemas UNIX e Linux.

Curiosamente, quem já trabalhou com IBM Mainframe possui uma enorme vantagem.

Por quê?

Porque o z/OS também foi construído sobre uma filosofia semelhante:

cada recurso possui um lugar definido, cada componente possui uma responsabilidade e a organização vale mais do que a improvisação.

É exatamente isso que iremos explorar neste café.


A filosofia antes dos comandos

Um erro muito comum entre iniciantes é querer aprender Linux decorando comandos.

ls

pwd

cd

mkdir

grep

find

chmod

systemctl

Isso é importante.

Mas não é suficiente.

Imagine entregar um martelo para alguém.

Ele pode aprender a usar o martelo.

Mas isso não significa que saiba construir uma casa.

O mesmo acontece com Linux.

Os comandos são ferramentas.

O sistema de arquivos é a arquitetura da casa.


A metáfora da casa

A imagem apresentada faz uma analogia fantástica.

Imagine que o computador é uma casa.

Existe uma porta principal.

Existem quartos.

Existe uma garagem.

Existe um depósito.

Existe uma oficina.

Existe um escritório.

Você não guarda ferramentas dentro da geladeira.

Também não coloca roupas dentro da caixa de correio.

Cada ambiente possui uma função.

Linux funciona exatamente assim.


Tudo começa no diretório raiz

/

Esse caractere é conhecido como Root Directory.

Aqui aparece uma das primeiras confusões dos iniciantes.

Muitos pensam que:

/

é o mesmo que

/root

Não é.

São coisas completamente diferentes.

O símbolo

/

representa a raiz da árvore inteira.

/root

é apenas a pasta pessoal do usuário administrador.

É exatamente como dizer que:

"O Brasil"

não é a mesma coisa que

"Brasília".

Uma coisa contém a outra.


Uma única árvore

No Windows estamos acostumados com letras.

C:

D:

E:

Cada disco possui sua própria árvore.

Linux faz diferente.

Existe apenas uma árvore.

/

Todos os discos são conectados em algum ponto dessa árvore.

Por exemplo.

Um SSD adicional pode ser montado em

/dados

Um pendrive pode aparecer em

/media

Um NAS pode ser montado em

/mnt/storage

Tudo pertence ao mesmo sistema.

Essa decisão torna a administração muito mais elegante.


O diretório /home

Na imagem, o /home representa os quartos da família.

É uma comparação perfeita.

Ali vivem os usuários.

Exemplo:

/home/joao

/home/maria

/home/vagner

Cada usuário possui seus documentos.

Downloads.

Projetos.

Fotos.

Scripts.

Repositórios Git.

VS Code.

Configurações pessoais.


Comparando com Windows

C:\Users\Joao

é praticamente equivalente a

/home/joao

Comparando com IBM Mainframe

No z/OS USS (UNIX System Services), cada usuário também possui um diretório HOME.

Exemplo:

/u/USER01

ou

/home/user01

Ou seja...

Mesmo no mundo Mainframe existe esse conceito.


O diretório /etc

Se existisse um cérebro da configuração do Linux, seria este.

/etc

A imagem chama de livro de regras.

Excelente definição.

Ali ficam praticamente todas as configurações do sistema.

Não são programas.

São parâmetros.


Arquivos famosos

passwd

/etc/passwd

Lista usuários.


shadow

/etc/shadow

Senhas criptografadas.


hosts

/etc/hosts

Tabela local de nomes.

Muito usada por desenvolvedores.


resolv.conf

Define DNS.


ssh

Configuração do servidor SSH.


systemd

Serviços do sistema.


Analogia Mainframe

Quem administra z/OS conhece o PARMLIB.

Lá ficam dezenas de parâmetros essenciais do sistema operacional.

No Linux, esse papel é desempenhado principalmente pelo /etc.


O diretório /var

VAR significa:

Variable.

São dados que mudam constantemente.

A imagem representa um depósito.

Correto.

Mas podemos aprofundar.

Ali encontramos:

logs

cache

spool

mail

bancos de dados

filas

O lugar favorito do administrador

Quando alguma aplicação falha...

Para onde todo administrador corre?

/var/log

Ali estão os registros do sistema.

Sem logs não existe investigação.

Sem investigação não existe diagnóstico.

Sem diagnóstico não existe solução.


Exemplo real

Servidor Apache.

/var/log/apache2

Servidor NGINX.

/var/log/nginx

Jenkins.

/var/log/jenkins

Docker

/var/lib/docker

PostgreSQL

/var/lib/postgresql

Analogia Mainframe

No z/OS fazemos exatamente isso.

Quando um JOB falha procuramos:

  • JESMSGLG

  • JESJCL

  • JESYSMSG

  • SYSOUT

  • SYSLOG

  • OPERLOG

  • SMF

A lógica é exatamente igual.


O diretório /tmp

A famosa área temporária.

Programas criam arquivos provisórios.

Compiladores armazenam dados temporários.

Editores também.

Arquivos antigos normalmente são removidos automaticamente.

Jamais coloque algo importante aqui.


O diretório /root

Outra confusão clássica.

Não é a raiz.

É apenas a casa do administrador.

Assim como:

/home/joao

pertence ao João,

/root

pertence ao root.


O diretório /usr

A imagem chama de oficina.

Gostei muito dessa comparação.

Ali vivem:

programas

bibliotecas

manuais

executáveis

documentação


/usr/bin

Ferramentas.

git

python

java

awk

grep

curl

find

/usr/lib

Bibliotecas.

Semelhante às DLLs do Windows.


/usr/share

Documentação.

Temas.

Ícones.

Arquivos compartilhados.


/usr/local

Programas instalados manualmente.

Muito utilizado por administradores.


Diretórios que a imagem não mostra

Agora vamos além.

/boot

Arquivos usados durante a inicialização.

Kernel.

GRUB.

Initramfs.

Sem eles o sistema não inicia.


/dev

Talvez o diretório mais genial do Linux.

Ali ficam dispositivos.

/dev/null

/dev/zero

/dev/random

/dev/sda

/dev/tty

O HD é um arquivo.

O teclado também.

A impressora também.

A porta serial também.


"Everything is a File"

Essa é uma das ideias mais elegantes da computação.

No Linux quase tudo pode ser tratado como arquivo.

Isso simplifica enormemente o sistema operacional.

Por exemplo:

cat /proc/cpuinfo

Lemos informações do processador.

cat /proc/meminfo

Informações de memória.

cat /etc/hosts

Configuração.

cat /var/log/messages

Logs.

Sempre usando a mesma ferramenta.


/proc

Não existe fisicamente.

É um pseudo sistema de arquivos.

É criado pelo kernel.

Mostra informações em tempo real.


/sys

Outra interface do kernel.

Muito usada para hardware moderno.


/media

Pendrives.

DVD.

Cartões SD.


/mnt

Montagens temporárias.

Administradores usam frequentemente.


/opt

Softwares opcionais.

Muito comum para:

IBM

Oracle

SAP

WebSphere

Ferramentas corporativas.


O Linux e o IBM z/OS têm mais em comum do que parece

Um programador COBOL acostumado com JCL pode estranhar Linux no início, mas logo percebe vários paralelos:

  • Ambos valorizam organização e padronização.

  • Ambos utilizam permissões rigorosas.

  • Ambos registram eventos em logs.

  • Ambos permitem automação por scripts (Shell Script e JCL).

  • Ambos são usados em ambientes de missão crítica.

No z/OS, você prepara um JOB, define DD Statements, controla datasets e acompanha o resultado no SDSF. No Linux, cria scripts Shell, agenda tarefas com cron ou systemd timers, redireciona entradas e saídas e consulta logs no /var/log. O objetivo é o mesmo: automatizar processos com segurança e repetibilidade.


O olhar de um profissional DevOps

DevOps não é apenas instalar Docker ou usar Git.

É compreender como o sistema funciona.

Um pipeline de CI/CD depende diretamente da estrutura do sistema operacional.

Considere um servidor Jenkins:

  • A configuração da aplicação pode estar em /etc.

  • Os binários podem estar em /usr/bin.

  • Os dados persistentes em /var/lib/jenkins.

  • Os logs em /var/log/jenkins.

  • Arquivos temporários em /tmp.

Quando algo falha, o engenheiro não "chuta". Ele segue um método, conhece a função de cada diretório e sabe onde procurar.


Lições para um COBOL Padawan

Quem programa em COBOL já aprendeu algo muito importante: organização importa.

Você separa:

  • IDENTIFICATION DIVISION

  • ENVIRONMENT DIVISION

  • DATA DIVISION

  • PROCEDURE DIVISION

Cada seção possui uma finalidade.

O Linux segue exatamente a mesma filosofia.

Misturar configurações com logs, executáveis e dados de usuários seria tão ruim quanto escrever um programa COBOL inteiro dentro da PROCEDURE DIVISION sem definir arquivos, variáveis ou estruturas.


Conclusão

A imagem da casa é uma excelente porta de entrada para compreender o sistema de arquivos Linux, mas ela é apenas o primeiro passo. Por trás dessa analogia existe uma arquitetura refinada, construída ao longo de décadas, que prioriza organização, modularidade e previsibilidade.

Para um programador COBOL Padawan, essa forma de pensar não é novidade. O mundo IBM Mainframe sempre valorizou ambientes bem estruturados, datasets organizados, bibliotecas especializadas, parâmetros centralizados e processos automatizados. Linux compartilha a mesma essência, apenas utilizando outra terminologia e outras ferramentas.

O grande ensinamento não é decorar que /etc guarda configurações ou que /var/log contém logs. O verdadeiro aprendizado é entender que cada componente do sistema tem uma responsabilidade clara. Essa disciplina reduz erros, facilita a manutenção e torna possível administrar desde um pequeno servidor até um ambiente com milhares de máquinas.

Quando você compreender a filosofia por trás da árvore de diretórios, deixará de enxergar o Linux como uma lista de comandos e passará a vê-lo como uma plataforma de engenharia. É exatamente essa mudança de mentalidade que transforma um iniciante em um profissional preparado para trabalhar com DevOps, Cloud, Containers, Kubernetes e até mesmo com a integração entre Linux e IBM Z.

Porque, no fim das contas, seja em um servidor Linux, em um cluster Kubernetes ou em um IBM z/OS que processa milhões de transações bancárias por dia, a regra continua a mesma:

Os melhores engenheiros não decoram caminhos; eles entendem a arquitetura que dá sentido a cada caminho.

 

sexta-feira, 23 de fevereiro de 2018

IBM JCL vs Shell Script

 


☕ Um Café no Bellacosa Mainframe

IBM JCL vs Shell Script

O Que Todo Programador COBOL Padawan Precisa Saber Sobre as Semelhanças e Diferenças Entre a Linguagem de Controle do Mainframe e a Automação do Mundo Linux

"Você não está aprendendo duas tecnologias diferentes. Está descobrindo duas filosofias de automação que nasceram em épocas distintas para resolver exatamente o mesmo problema: fazer o computador trabalhar sozinho."


Introdução

Existe uma frase muito comum entre profissionais que estão migrando do IBM Mainframe para Linux:

"Shell Script é o JCL do Linux."

Embora essa frase seja extremamente útil para explicar rapidamente o conceito, ela não é totalmente correta.

Na realidade, JCL e Shell Script possuem objetivos semelhantes, mas nasceram em épocas diferentes, foram projetados para sistemas operacionais completamente distintos e seguem filosofias arquitetônicas bastante diferentes.

Se você é um Programador COBOL Padawan, provavelmente domina conceitos como:

  • JOB

  • EXEC

  • DD Statements

  • PROC

  • COND

  • RC

  • GDG

  • IDCAMS

  • SORT

  • IKJEFT01

Ao começar a estudar Linux, você encontrará conceitos aparentemente novos:

  • Bash

  • Variáveis

  • Loops

  • Pipes

  • Exit Status

  • Cron

  • sed

  • awk

  • grep

A boa notícia é que boa parte dessa lógica já faz parte da sua experiência.

Hoje vamos tomar um café e descobrir que o universo Mainframe e o universo Linux possuem muito mais pontos em comum do que a maioria das pessoas imagina.


Dois mundos separados por décadas

IBM Mainframe

O primeiro System/360 foi anunciado pela IBM em 7 de abril de 1964.

Foi uma revolução.

Pela primeira vez uma família inteira de computadores utilizava a mesma arquitetura.

Junto com ela surgiu o conceito de execução Batch em larga escala.

Era necessário criar uma linguagem capaz de dizer ao sistema operacional:

  • qual programa executar;

  • quais arquivos utilizar;

  • quais impressoras imprimir;

  • onde gravar a saída;

  • como controlar o fluxo.

Nascia o Job Control Language (JCL).


UNIX

Cinco anos depois, em 1969, Ken Thompson iniciou o UNIX nos Bell Labs.

A filosofia era completamente diferente.

Em vez de grandes computadores corporativos, o objetivo era construir um sistema operacional simples, modular e portátil.

Ao invés de Jobs Batch, surgiram pequenos comandos.

Ao invés de DD Statements, surgiram arquivos comuns.

Ao invés de datasets catalogados, surgiram diretórios.

Ao invés do JCL, surgiu o Shell.


O Problema que Ambos Resolvem

Apesar das diferenças históricas, ambos procuram responder exatamente às mesmas perguntas:

O que deve ser executado?

Em que ordem?

Quais arquivos serão utilizados?

Como tratar erros?

O que fazer quando terminar?

É justamente por isso que tantas empresas conseguem integrar Mainframe e Linux.


A Filosofia de Cada Um

JCL

O JCL é uma linguagem declarativa.

Ele descreve um trabalho.

O sistema operacional executa.

Exemplo:

//JOB1 JOB ...
//STEP1 EXEC PGM=COBOLPGM
//SYSIN DD *
...

Você informa:

  • programa

  • datasets

  • parâmetros

O restante fica sob responsabilidade do z/OS.


Shell Script

O Shell Script é procedural.

Você escreve cada passo.

cp arquivo backup

gzip backup

rm arquivo

O Shell executa exatamente na ordem definida.


Primeira Grande Diferença

JCL controla programas.

Shell Script executa comandos.

Essa distinção parece pequena.

Mas muda completamente a arquitetura.


Quem executa?

Mainframe

JCL

↓

JES2/JES3

↓

Initiator

↓

Programa COBOL

O JES agenda.

Controla filas.

Seleciona recursos.

Gerencia prioridades.


Linux

Shell

↓

Kernel

↓

Processo

Muito mais direto.

Não existe um JES intermediário.


Comparando Conceitos

IBM JCLShell Script
JOBScript
STEPComando
EXECExecução
DDArquivo
PROCFunção
PARM$1 $2
RCExit Status
CONDif
Schedulercron
SYSINstdin
SYSOUTstdout
SYSPRINTstdout
JESShell + Kernel

Observe que praticamente todos os conceitos possuem um equivalente.


JOB x Script

No Mainframe:

//MEUJOB JOB ...

No Linux

#!/bin/bash

Ambos representam o início da automação.


STEP x Comando

Cada STEP executa um programa.

//STEP01 EXEC PGM=SORT

No Shell

sort arquivo.txt

A ideia é exatamente a mesma.


DD Statement x Arquivos

No Mainframe

//ENTRADA DD DSN=CLIENTES

No Linux

clientes.txt

O conceito é semelhante.

A implementação é completamente diferente.


Dataset vs Sistema de Arquivos

Mainframe

CLIENTES.VENDAS.2025

Linux

/clientes/vendas/2025.txt

No Mainframe existe um catálogo.

No Linux existe uma árvore de diretórios.


GDG x Arquivos Versionados

O GDG cria gerações automaticamente.

ARQ(+1)

ARQ(0)

ARQ(-1)

No Linux normalmente fazemos:

backup-20260704.tar.gz

Ou utilizamos ferramentas como:

  • rsnapshot

  • borg

  • restic


PROC x Funções

PROC

// EXEC PROC=BACKUP

Shell

backup(){

}

Ambos evitam repetição.


RC x Exit Status

Talvez a maior semelhança.

Mainframe

RC=0000

Linux

$?

↓

0

RC 8

No Linux

Exit Status 8

A filosofia permanece.


COND x IF

JCL

COND=(4,LT)

Shell

if [ $? -lt 4 ]
then

fi

Mesmo conceito.

Sintaxe diferente.


Scheduler x Cron

Mainframe

Control-M

CA-7

IBM Workload Scheduler

ESP

Linux

Cron

Systemd Timer

Kubernetes CronJob

Airflow

A ideia continua sendo:

"Execute automaticamente."


SYSIN x stdin

Mainframe

//SYSIN DD *

Linux

comando < entrada.txt

Ambos fornecem entrada ao programa.


SYSOUT x stdout

Mainframe

//SYSPRINT DD SYSOUT=*

Linux

>

Redirecionamento.


RC e Tratamento de Erros

Mainframe

IF RC > 8

Linux

if [ $? -gt 8 ]

Scripts profissionais verificam sempre o retorno da operação anterior.


Pipes

Aqui surge uma diferença enorme.

O JCL não possui Pipes nativos.

No Linux:

grep ERROR log \
| awk '{print $2}' \
| sort \
| uniq

Os dados fluem diretamente entre processos.

É uma das maiores inovações do UNIX.


grep x SORT Utility

Mainframe

DFSORT

ICETOOL

SYNCSORT

Linux

grep

sort

uniq

cut

awk

sed

São ferramentas menores, porém extremamente especializadas.


IDCAMS x Comandos Linux

IDCAMS

LISTCAT

DELETE

DEFINE

ALTER

No Linux

ls

rm

mkdir

mv

cp

Ambos administram recursos.


IKJEFT01

No Mainframe

Executa comandos TSO em Batch.

No Linux

O próprio Shell executa comandos diretamente.


Variáveis

No JCL

&DATA

No Shell

$DATA

Conceito muito semelhante.


Loops

JCL praticamente não possui repetição.

Shell

for

while

until

Essa é uma enorme vantagem do Shell.


Expressões Regulares

Outro diferencial.

O Shell possui:

grep

sed

awk

regex

O JCL depende normalmente do programa executado.


Permissões

No Mainframe

RACF

ACF2

Top Secret

No Linux

rwx

Controlados por:

chmod

chown

ACL


Segurança

Mainframe

RACF

Linux

PAM

SELinux

AppArmor

Embora diferentes, ambos seguem princípios semelhantes de autenticação e autorização.


Performance

O Mainframe foi criado para:

milhões de transações

Linux

milhões de processos

Cada um otimizado para seu ambiente.


Cloud

JCL praticamente não conversa diretamente com APIs REST.

Shell Script faz isso naturalmente.

curl

wget

Essa integração explica sua enorme popularidade.


DevOps

Ferramentas modernas utilizam Shell Script diariamente.

Jenkins

GitLab

GitHub

Docker

Kubernetes

Ansible

Terraform

Mesmo quando escritas em outras linguagens, o Shell continua sendo a "cola" que integra todas elas.


Shell no IBM Z

Aqui muitos profissionais se surpreendem.

O z/OS possui o UNIX System Services (USS).

Isso significa que é possível executar:

  • Bash

  • Korn Shell

  • POSIX Shell

  • Git

  • Python

  • Java

Tudo dentro do IBM Z.

É justamente esse recurso que permite pipelines modernos envolvendo COBOL, Git, Jenkins e DevOps.


Curiosidades

  • O JCL possui mais de 60 anos de história e continua em uso em bancos, seguradoras e governos.

  • O Bash, lançado em 1989, permanece como o shell padrão de inúmeras distribuições Linux.

  • O primeiro shell do UNIX era extremamente simples e não possuía muitos dos recursos atuais, como histórico de comandos e autocompletar.

  • O conceito de pipe (|) foi introduzido no UNIX na década de 1970 e tornou-se um dos maiores símbolos da filosofia UNIX.

  • Muitos scripts corporativos executados diariamente ainda são compostos por poucas dezenas de linhas, mas movimentam bilhões de dólares em operações.


Easter Eggs

Algumas curiosidades divertidas:

  • O nome Bash significa Bourne Again Shell, uma brincadeira com o Bourne Shell original.

  • O comando : é um comando válido que não faz nada e retorna sucesso (0).

  • true sempre retorna código de sucesso.

  • false sempre retorna um código de erro.

  • No JCL, um único parâmetro incorreto em um DD Statement pode impedir a execução de um Job inteiro; no Shell, esquecer aspas em uma variável pode causar efeitos igualmente inesperados.


Quando Escolher Cada Um?

Use JCL quando:

  • estiver executando workloads Batch do z/OS;

  • precisar integrar programas COBOL, PL/I, Assembler ou Db2 no ambiente Mainframe;

  • utilizar JES, datasets, PROCs e schedulers corporativos.

Use Shell Script quando:

  • administrar servidores Linux;

  • automatizar tarefas DevOps;

  • criar pipelines CI/CD;

  • integrar APIs REST;

  • trabalhar com containers, Kubernetes e serviços em nuvem;

  • automatizar operações no z/OS UNIX System Services.

Em muitos ambientes modernos, os dois convivem: o JCL inicia processos no z/OS, enquanto o Shell Script automatiza componentes Linux, integra aplicações via APIs e participa dos pipelines de entrega contínua.

Conclusão

JCL e Shell Script são filhos de épocas diferentes, mas compartilham a mesma missão: automatizar o trabalho do computador para que o operador não precise repetir tarefas manualmente. O JCL nasceu em um mundo dominado por processamento batch, grandes volumes de dados e controle rigoroso de recursos do IBM Mainframe. O Shell Script surgiu em um ambiente UNIX que valorizava simplicidade, modularidade e a composição de pequenos programas especializados.

Para um Programador COBOL Padawan, compreender essa relação é um enorme diferencial. Em vez de enxergar o Linux como um universo completamente novo, é possível reconhecer conceitos familiares: JOB e script, STEP e comando, PROC e função, RC e Exit Status, SYSIN e stdin, SYSOUT e stdout. Essa ponte reduz a curva de aprendizado e facilita a atuação em projetos de modernização.

Na era da transformação digital, não existe mais uma divisão rígida entre Mainframe e plataformas abertas. Bancos, seguradoras, indústrias e órgãos governamentais executam aplicações COBOL no IBM Z, integram serviços por APIs, utilizam Git, Jenkins, Ansible, Kubernetes e automatizam grande parte da infraestrutura com Shell Script. O profissional que domina esses dois mundos torna-se capaz de construir soluções híbridas, conectar tecnologias históricas às plataformas modernas e participar da evolução contínua da computação corporativa.

Em outras palavras, aprender Shell Script não significa abandonar o Mainframe. Significa ampliar sua caixa de ferramentas e levar a experiência adquirida no IBM Z para um ecossistema cada vez mais integrado, automatizado e orientado à nuvem. Esse é o caminho do Programador COBOL Padawan rumo ao próximo nível de sua jornada profissional.

terça-feira, 30 de janeiro de 2018

Shell Scripting - O Que Todo Programador COBOL Padawan Precisa Saber Sobre a Linguagem que Automatiza o Mundo Linux, DevOps, Cloud e Infraestrutura Moderna

 

Bellacosa Mainframe e o shell scripting

☕ Um Café no Bellacosa Mainframe

Shell Scripting

O Que Todo Programador COBOL Padawan Precisa Saber Sobre a Linguagem que Automatiza o Mundo Linux, DevOps, Cloud e Infraestrutura Moderna

"Você não está apenas aprendendo Shell Script. Está descobrindo a linguagem que faz no Linux aquilo que o JCL faz no Mainframe: coordenar, automatizar e colocar toda a infraestrutura para trabalhar em perfeita harmonia."


Introdução

Existe um momento na carreira de praticamente todo profissional de tecnologia em que ele percebe que digitar dezenas de comandos repetidamente não faz mais sentido.

Criar usuários.

Mover arquivos.

Executar backups.

Monitorar logs.

Subir aplicações.

Executar testes.

Parar servidores.

Gerar relatórios.

Se tudo isso pode ser automatizado, por que continuar fazendo manualmente?

Foi exatamente essa pergunta que ajudou a moldar um dos conceitos mais elegantes da história da computação: o Shell Script.

Hoje, praticamente toda infraestrutura Linux do planeta — desde pequenos servidores domésticos até supercomputadores, clusters Kubernetes, ambientes IBM LinuxONE, IBM Z, AWS, Azure e Google Cloud — depende diariamente de milhares de Shell Scripts.

Se você é um Programador COBOL Padawan, provavelmente já domina conceitos como JCL, Return Codes (RC), Jobs Batch, PROCs, Schedulers, datasets e automação no z/OS.

A boa notícia é que Shell Script não é um universo completamente novo.

Na verdade, diversos conceitos já fazem parte do seu dia a dia.

A diferença é que agora eles vivem no mundo Linux.

Pegue sua caneca de café.

Hoje vamos entender por que Shell Script continua sendo uma das habilidades mais valiosas da computação moderna.


A Origem do Shell

Para entender Shell Script precisamos voltar aproximadamente cinquenta anos.

Em 1969, Ken Thompson iniciou o desenvolvimento do UNIX nos laboratórios Bell Labs.

O sistema operacional precisava de uma interface simples para executar comandos.

Nascia então o primeiro Shell.

O Shell era apenas um interpretador.

Ele recebia comandos digitados pelo usuário.

Interpretava.

Chamava funções do Kernel.

Mostrava os resultados.

Naquela época ninguém imaginava que alguns anos depois aqueles comandos poderiam ser gravados em arquivos texto e executados automaticamente.

Assim surgiram os primeiros scripts.


O Shell Não é o Linux

Esse é um dos maiores equívocos dos iniciantes.

Muitos acreditam que Shell e Linux sejam a mesma coisa.

Não são.

A arquitetura simplificada funciona assim:

Usuário

↓

Shell

↓

Kernel Linux

↓

Hardware

O Kernel conversa com discos, memória, processadores e dispositivos.

O Shell conversa com o usuário.

Ele traduz comandos humanos em chamadas para o Kernel.


O Nascimento do Bourne Shell

Em 1977, Stephen Bourne desenvolveu o Bourne Shell (sh).

Foi uma revolução.

Pela primeira vez era possível escrever programas inteiros utilizando comandos do próprio sistema operacional.

A linguagem era simples.

Mas incrivelmente poderosa.

Até hoje praticamente todos os Shells modernos descendem dele.


O Surgimento do Bash

Em 1989, Brian Fox, no projeto GNU, lançou o Bash (Bourne Again Shell).

O nome é um trocadilho com "Born Again".

Ele foi desenvolvido para substituir o Bourne Shell tradicional, mantendo compatibilidade e adicionando diversos recursos modernos.

O Bash tornou-se rapidamente o padrão das distribuições GNU/Linux.

Hoje ele está presente em praticamente todas as distribuições Linux e em diversos sistemas UNIX.


Linha do Tempo dos Principais Shells

AnoShellCriador
1971Thompson ShellKen Thompson
1977Bourne Shell (sh)Stephen Bourne
1983Korn Shell (ksh)David Korn
1989BashBrian Fox (GNU)
1990Z Shell (zsh)Paul Falstad
2005Fish ShellAxel Liljencrantz

Cada um possui características específicas, mas Bash continua sendo a principal referência para automação.


Por que o Shell Existe?

Imagine administrar mil servidores.

Sem Shell Script seria necessário executar centenas de comandos manualmente em cada máquina.

Com um único script você consegue:

  • atualizar aplicações;

  • reiniciar serviços;

  • copiar arquivos;

  • verificar espaço em disco;

  • consultar APIs;

  • monitorar processos;

  • enviar alertas;

  • automatizar backups.

É exatamente por isso que o Shell é considerado uma das ferramentas fundamentais de DevOps.


A Filosofia UNIX

Existe um princípio que influenciou praticamente toda a engenharia de software moderna:

Faça uma coisa. Faça bem feita.

Em vez de criar programas gigantes, o UNIX passou a oferecer dezenas de pequenas ferramentas especializadas.

Cada comando resolve apenas um problema.

Por exemplo:

  • grep procura padrões.

  • sort ordena dados.

  • uniq elimina duplicatas.

  • cut extrai colunas.

  • sed transforma textos.

  • awk processa dados estruturados.

  • wc conta linhas, palavras e caracteres.

O verdadeiro poder surge quando essas ferramentas são combinadas por meio de pipes.


O Poder dos Pipes

O caractere | é muito mais do que um simples símbolo.

Ele conecta a saída de um comando diretamente à entrada do próximo.

Imagine uma linha de montagem industrial:

Matéria-prima
     ↓
Corte
     ↓
Pintura
     ↓
Montagem
     ↓
Embalagem

No Linux:

cat

↓

grep

↓

awk

↓

sort

↓

uniq

↓

wc

Cada comando realiza uma tarefa específica e entrega o resultado ao próximo.

Esse modelo permitiu construir sistemas extremamente eficientes décadas antes da popularização dos microsserviços.


Shell Script e o Mundo Mainframe

Esta é provavelmente a parte mais interessante para um Programador COBOL Padawan.

Observe a comparação:

MainframeLinux
JCLShell Script
PROCFunção
PARM$1, $2
Return CodeExit Status
DatasetArquivo
SchedulerCron
SYSINstdin
SYSOUTstdout
SYSPRINTstdout
CONDif
IF/THEN JCLif/then

Percebe a semelhança?

Os conceitos mudam de nome, mas a lógica permanece.

Quem domina JCL normalmente aprende Shell Script muito mais rapidamente.


Shebang

Todo script profissional começa com algo parecido com:

#!/usr/bin/env bash

Esse cabeçalho informa qual interpretador será utilizado.

Sem ele, o sistema pode tentar executar o script utilizando outro Shell, causando incompatibilidades.

É equivalente a informar explicitamente qual ambiente executará o programa.


Variáveis

No Shell praticamente tudo começa com variáveis.

NOME="Bellacosa"
IDADE=52

Elas armazenam dados temporários utilizados durante a execução.

O acesso ocorre por meio do caractere $.

echo "$NOME"

Diferentemente de linguagens como Java ou COBOL, não há necessidade de declarar tipos de dados.

Tudo inicialmente é tratado como texto.


Variáveis de Ambiente

Algumas variáveis já existem antes mesmo do script iniciar.

Entre as mais importantes estão:

  • HOME

  • PATH

  • USER

  • SHELL

  • PWD

  • HOSTNAME

  • LANG

  • TERM

Essas informações descrevem o ambiente onde o processo está sendo executado.


Variáveis Especiais

O Shell também cria automaticamente variáveis especiais:

  • $0 → nome do script.

  • $1 → primeiro argumento.

  • $2 → segundo argumento.

  • $# → quantidade de argumentos.

  • $@ → todos os argumentos preservando cada um individualmente.

  • $* → todos os argumentos como uma única expansão.

  • $$ → PID do processo atual.

  • $! → PID do último processo em background.

  • $? → código de retorno do último comando.

Essa coleção de variáveis torna os scripts altamente reutilizáveis.


Condições

Assim como em COBOL existe IF, o Shell possui:

if
then
else
fi

É possível tomar decisões baseadas em:

  • existência de arquivos;

  • valores numéricos;

  • comparação de textos;

  • permissões;

  • retorno de comandos.


Loops

O Shell oferece diferentes formas de repetição.

For

Ideal quando conhecemos previamente os elementos.

for arquivo in *.txt
do
    echo "$arquivo"
done

While

Executa enquanto uma condição permanece verdadeira.

Until

Executa até que uma condição seja satisfeita.


Funções

Scripts profissionais utilizam funções para evitar repetição.

backup() {
    echo "Executando backup..."
}

log() {
    echo "$(date) $1"
}

Isso melhora organização, manutenção e reutilização.


Operadores de Arquivos

Antes de manipular arquivos, normalmente verificamos seu estado.

Exemplos:

  • -f → arquivo regular.

  • -d → diretório.

  • -r → leitura.

  • -w → escrita.

  • -x → executável.

  • -e → existe.

  • -s → não vazio.

  • -L → link simbólico.

Esses testes evitam erros durante a execução.


Redirecionamento

Todo processo Linux trabalha com três fluxos principais:

StreamNúmero
stdin0
stdout1
stderr2

Com isso podemos controlar exatamente para onde cada informação será enviada.

Exemplos:

>

Sobrescreve um arquivo.

>>

Acrescenta conteúdo.

2>

Redireciona apenas mensagens de erro.

&

Permite combinar fluxos.


O Poder do grep

O grep talvez seja o comando mais famoso do Linux.

Seu nome vem de Global Regular Expression Print.

Ele pesquisa padrões em arquivos.

grep ERROR servidor.log

Combinado com expressões regulares torna-se uma poderosa ferramenta de análise de logs.


AWK

Apesar de parecer apenas mais um comando, AWK é uma linguagem completa.

Ela trabalha naturalmente com colunas.

Por isso é muito utilizada em:

  • arquivos CSV;

  • relatórios;

  • processamento de logs;

  • extração de métricas.

Poucas ferramentas conseguem manipular dados textuais com tanta eficiência.


sed

O Stream Editor permite modificar arquivos sem abrir um editor.

Trocar:

IBM

por

Red Hat

é uma simples linha de comando.

Por isso o sed aparece frequentemente em pipelines de automação.


xargs

Outro comando extremamente poderoso.

Ele transforma a saída de um programa em argumentos para outro.

É muito utilizado em conjunto com find.


Exit Status

No Mainframe conhecemos os Return Codes.

No Linux existe exatamente o mesmo conceito.

Após qualquer comando podemos consultar:

echo $?

Se retornar zero:

Sucesso.

Qualquer outro valor indica algum tipo de erro.

Scripts profissionais nunca ignoram Exit Status.


DevOps e Shell Script

Hoje praticamente toda ferramenta DevOps depende, em algum momento, de Shell Script.

Exemplos:

Docker.

Kubernetes.

GitHub Actions.

GitLab CI.

Jenkins.

Ansible.

Terraform.

OpenShift.

IBM Cloud.

AWS.

Azure.

Google Cloud.

Mesmo quando utilizamos ferramentas sofisticadas, nos bastidores normalmente existem Shell Scripts coordenando processos.


Shell Script no IBM Z

Muitos profissionais acreditam que Shell Script pertence apenas ao Linux.

Não é verdade.

O IBM z/OS UNIX System Services (USS) oferece um ambiente POSIX compatível com Shell.

Isso significa que é possível executar scripts Bash ou Korn Shell diretamente no IBM Z.

Essa integração permite:

  • automatizar tarefas administrativas;

  • integrar aplicações COBOL com ambientes UNIX;

  • manipular arquivos no USS;

  • chamar programas tradicionais;

  • trabalhar com OpenSSH, Git, Python e Java.

É um dos pilares da modernização do ecossistema IBM Z.


Curiosidades

  • O Bash possui milhares de comandos internos (builtins).

  • O Shell consegue chamar programas escritos em C, COBOL, Java, Python e diversas outras linguagens.

  • Grande parte dos scripts de inicialização do Linux são Shell Scripts.

  • O Shell pode controlar processos distribuídos por SSH em centenas de servidores simultaneamente.

  • Muitos instaladores de software corporativo são escritos em Shell Script.


Easter Eggs

Algumas curiosidades divertidas:

  • O nome Bash significa Bourne Again Shell, um trocadilho com o Bourne Shell.

  • O comando : é um comando válido que não faz absolutamente nada, retornando sucesso (0).

  • O comando true sempre retorna sucesso.

  • O comando false sempre retorna erro.

  • É possível criar scripts de apenas uma linha capazes de automatizar tarefas extremamente complexas.

  • Muitos administradores brincam dizendo que "um bom Shell Script substitui centenas de cliques".


Releases e Evolução

Ao longo das décadas, o Bash evoluiu significativamente:

  • suporte aprimorado a arrays;

  • expansão de parâmetros;

  • autocompletar inteligente;

  • histórico avançado;

  • melhorias em segurança;

  • compatibilidade POSIX;

  • otimizações de desempenho.

Novas versões continuam sendo lançadas e mantidas pela comunidade GNU, garantindo correções de bugs, melhorias de segurança e novos recursos.


Por que Aprender Shell Script em 2026?

Porque praticamente toda infraestrutura moderna depende dele.

Empresas utilizam Shell Script para:

  • automação de Data Centers;

  • CI/CD;

  • monitoramento;

  • backup;

  • segurança;

  • observabilidade;

  • containers;

  • Kubernetes;

  • administração Linux;

  • IBM Z USS;

  • LinuxONE;

  • Cloud Computing;

  • IA e MLOps;

  • automação de pipelines de dados.

Mesmo linguagens modernas como Python e Go frequentemente executam Shell Scripts durante processos de instalação, build ou deploy.


Compatibilidade com o Mundo Mainframe

Para quem vem do COBOL, aprender Shell Script oferece diversas vantagens:

  • compreensão rápida da lógica de automação;

  • facilidade para trabalhar com z/OS UNIX System Services;

  • integração com Git, DevOps e CI/CD;

  • modernização de aplicações IBM Z;

  • comunicação entre ambientes Linux e Mainframe.

Em projetos de transformação digital é comum encontrar pipelines que envolvem simultaneamente COBOL, JCL, Git, Jenkins, Ansible e Shell Script.


Conclusão

Shell Script é muito mais do que uma linguagem de comandos. Ele representa uma filosofia de engenharia que atravessa mais de cinco décadas de evolução da computação. Desde os primeiros laboratórios da Bell Labs até os atuais ambientes de nuvem híbrida, inteligência artificial, IBM Z, LinuxONE e plataformas de automação em escala global, o Shell continua sendo uma das ferramentas mais eficientes para transformar tarefas repetitivas em processos confiáveis e reproduzíveis.

Para um Programador COBOL Padawan, essa jornada é especialmente natural. Conceitos como controle de fluxo, códigos de retorno, automação batch, parametrização e orquestração já fazem parte da experiência adquirida no Mainframe. O Shell Script amplia esse repertório, conectando o universo IBM Z ao ecossistema Linux, DevOps, containers, APIs, pipelines de integração contínua e infraestrutura como código.

Aprender Shell Script hoje não significa apenas dominar comandos como grep, awk, sed, find ou xargs. Significa adquirir a capacidade de construir soluções reutilizáveis, integrar tecnologias distintas, administrar ambientes complexos e participar ativamente da modernização das plataformas corporativas. Assim como o COBOL continua movimentando bilhões de transações diariamente, o Shell Script permanece como uma das engrenagens invisíveis que sustentam servidores, aplicações, clusters e serviços em praticamente todos os grandes ambientes computacionais do mundo.

No fim das contas, o Shell Script ensina uma lição que vale para toda a carreira em tecnologia: automatize o repetitivo, simplifique o complexo e deixe que os computadores façam aquilo para o qual foram criados. Esse é o espírito do UNIX, do Linux, do DevOps e, acima de tudo, da engenharia de software moderna.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...