Terminal (3/3): administração do sistema

Terminal (3/3): administração do sistema

Nas partes anteriores vimos os fundamentos do terminal e as utilidades de rede, compressão e processos. Neste último capítulo colocamos o chapéu de administrador: **gestão de memória, disco e interfaces**, **gerenciamento de pacotes**, **usuários e permissões de administração**, **segurança**, **programação de comandos** e algumas **firulas** finais.

Aviso: Este post foi traduzido para o português usando um modelo de tradução automática. Por favor, me avise se encontrar algum erro.

📚 **Esta entrada faz parte da série _Introdução ao terminal_**, dividida em três capítulos que se leem em ordem:

> * Parte 1: Navegación, archivos y comandos

* Parte 2: Red, compresión y procesos

* 👉 **Parte 3: Administración del sistema**

Gestão de memória RAMlink image 79

Se só quisermos obter informações da memória, podemos usar o comando free

	
< > Input
Python
!free
Copied
>_ Output
			
total usado libre compartido búfer/caché disponible
Memoria: 32774516 6563544 20091804 276296 6119168 25479600
Swap: 2097148 0 2097148

Mas como essa informação não é muito fácil de digerir, adicionamos o flag -h (human) para que seja mais fácil de ler

	
< > Input
Python
!free -h
Copied
>_ Output
			
total usado libre compartido búfer/caché disponible
Memoria: 31Gi 6,3Gi 19Gi 270Mi 5,8Gi 24Gi
Swap: 2,0Gi 0B 2,0Gi

Gestão do disco rígidolink image 80

Para obter informações do disco rígido, fazemos uso do comando du. Se apenas introduzirmos este comando no terminal, ele nos dará informações sobre todas as pastas da nossa máquina; por isso, para não obter informação em excesso, é necessário introduzir um caminho que queiramos escanear.

	
< > Input
Python
!du ~/Documentos/web/portafolio/posts/
Copied
>_ Output
			
8 /home/wallabot/Documentos/web/portafolio/posts/__pycache__
1648 /home/wallabot/Documentos/web/portafolio/posts/notebooks_translated
4288 /home/wallabot/Documentos/web/portafolio/posts/html_files
336 /home/wallabot/Documentos/web/portafolio/posts/prueba/tocompress
1132 /home/wallabot/Documentos/web/portafolio/posts/prueba
16 /home/wallabot/Documentos/web/portafolio/posts/introduccion_python/__pycache__
28 /home/wallabot/Documentos/web/portafolio/posts/introduccion_python
11232 /home/wallabot/Documentos/web/portafolio/posts/

Assim como antes, adicionamos o flag -h (human) para que seja mais fácil de ler

	
< > Input
Python
!du ~/Documentos/web/portafolio/posts/ -h
Copied
>_ Output
			
8,0K /home/wallabot/Documentos/web/portafolio/posts/__pycache__
1,7M /home/wallabot/Documentos/web/portafolio/posts/notebooks_translated
4,2M /home/wallabot/Documentos/web/portafolio/posts/html_files
336K /home/wallabot/Documentos/web/portafolio/posts/prueba/tocompress
1,2M /home/wallabot/Documentos/web/portafolio/posts/prueba
16K /home/wallabot/Documentos/web/portafolio/posts/introduccion_python/__pycache__
28K /home/wallabot/Documentos/web/portafolio/posts/introduccion_python
11M /home/wallabot/Documentos/web/portafolio/posts/

Gestão de interfaceslink image 81

No Ubuntu, por padrão iniciamos em uma interface gráfica, mas podemos abrir outras interfaces, que não serão gráficas, pressionando CTRL+ALT+F<num> onde o número pode ir de 1 a 6. Apenas a 2 terá a interface gráfica e a 1 será o início de sessão

Ao lidar com várias interfaces, podemos não saber em qual nos encontramos, então, introduzindo o comando tty, ele nos dirá em qual estamos

	
< > Input
Python
!tty
Copied
>_ Output
			
/dev/pts/0

Gestão de pacoteslink image 82

Repositórios PPA (Arquivos de Pacotes Pessoais)link image 83

No Linux, o gerenciamento de pacotes é feito por meio de repositórios. Esta é uma lista de endereços onde se encontram os binários dos nossos programas. Assim, quando queremos atualizar ou instalar nossos programas (depois explicaremos como), o que o sistema operacional fará é ver a lista desses repositórios e ir aos endereços indicados para buscar os binários

Esta lista de repositórios se encontra em /etc/apt/sources.list e dentro da pasta /etc/apt/sources.list.d. Vamos ver esta lista.

	
< > Input
Python
terminal("cat /etc/apt/sources.list", max_lines_output=10)
Copied
>_ Output
			
# deb cdrom:[Ubuntu 20.04.2.0 LTS _Focal Fossa_ - Release amd64 (20210209.1)]/ focal main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://es.archive.ubuntu.com/ubuntu/ focal main restricted
# deb-src http://es.archive.ubuntu.com/ubuntu/ focal main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://es.archive.ubuntu.com/ubuntu/ focal-updates main restricted
...
deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /
# deb-src https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /
deb https://apt.kitware.com/ubuntu/ focal main
# deb-src https://apt.kitware.com/ubuntu/ focal main

As primeiras linhas que incluem a palavra cd-rom são referências ao CD de instalação, sempre vêm com as palavras deb cdrom: embora tenha sido instalado pela rede ou de um USB.

A partir daqui começam a aparecer diversas linhas que começam com deb ou deb-src. Em deb encontram-se os binários e em deb-src encontra-se o código-fonte.

Todo endereço válido de repositório tem um destes formatos:

  • deb http://direção_do_servidor/nome_da_pasta nome_da_versão (main ou universe ou multiverse ou main restricted, etc)
  • deb-src http://direccion_del_servidor/nombre_carpeta nombre_de_version (main ou universe ou multiverse ou main restricted, etc)

Os seis tipos de repositórios do Ubuntu são:

  1. Principal

O repositório Main está ativado por padrão e contém apenas software livre e de código aberto ou FOSS por suas siglas em inglês (Free and Open-Source Software).

  1. Universo

Como Main, Universe también ofrece FOSS. A diferença é que, neste repositório, não é a Ubuntu quem garante atualizações regulares de segurança, mas sim a comunidade que se encarrega do seu suporte. Vem ativado por padrão, mas nem sempre. Alguns sistemas operativos o têm desativado por padrão e talvez tenhamos de o ativar se estivermos a executar uma Live Session. Se não o tivermos adicionado, podemos fazê-lo com este comando:

sudo add-apt-repository universe

O que encontramos em «Universe»? Eu diria que a maior parte do software que vale a pena, entre o qual temos VLC e OpenShot.

  1. Multiverso

A partir daqui vêm os repositórios do Ubuntu com menos liberdade. Multiverse contém software que já não é FOSS e o Ubuntu não pode ativar este repositório por padrão por problemas legais e de licenças. Por outro lado, também não pode fornecer patches e atualizações. Com isso em mente, temos de avaliar se o adicionamos ou não, algo que poderemos fazer com este comando:

sudo add-apt-repository multiverse
  1. Restrito

Nos repositórios do Ubuntu poderemos encontrar software livre e de código aberto, mas isso não é possível quando se trata de algo relacionado com o hardware. Nos repositórios Restricted encontraremos drivers, como os das placas gráficas, painéis táteis ou placas de rede.

sudo add-apt-repository restricted
  1. Parceiro

Este repositório contém software proprietário compilado pela Ubuntu de seus parceiros.

  1. Repositórios de terceiros do Ubuntu

Por fim, temos os repositórios de terceiros. O Ubuntu tenta oferecer sempre a melhor experiência de usuário e esse é um dos motivos pelos quais rejeita determinado software. Também há desenvolvedores que preferem ter um controle total sobre o que oferecem e, por esse motivo, criam seus próprios repositórios.

Adicionar repositórioslink image 84

Se estamos no Ubuntu, podemos adicionar um repositório usando o comando add-apt-repository <repository>. Mas, como em outras distribuições que não sejam o Ubuntu, não temos esse comando.

Atualizar os repositórioslink image 85

Por meio do comando apt update poderemos atualizar para as últimas versões dos pacotes que temos em nosso repositório.

Atualizar os pacoteslink image 86

Por meio do comando apt upgrade poderemos atualizar os programas que tivermos instalados e dos quais antes tenhamos atualizado seu repositório

Atualizar o kernellink image 87

Se usamos o comando apt dist-upgrade, também serão atualizados os pacotes do kernel

Cuidado!: Atualizar pacotes do kernel pode fazer com que alguns pacotes quebrem

Lembrete: Ao atualizar pacotes do kernel, para que tenham efeito é necessário reiniciar o computador

Busca de pacoteslink image 88

Com o comando apt search <paquete> podemos encontrar pacotes

	
< > Input
Python
terminal("apt search vlc", max_lines_output=10)
Copied
>_ Output
			
Ordenando...
Buscar en todo el texto...
anacrolix-dms/focal 1.1.0-1 amd64
Go UPnP DLNA Digital Media Server with basic video transcoding
cubemap/focal 1.4.3-1build1 amd64
scalable video reflector, designed to be used with VLC
dvblast/focal 3.4-1 amd64
Simple and powerful dvb-streaming application
...
x264/focal 2:0.155.2917+git0a84d98-2 amd64
video encoder for the H.264/MPEG-4 AVC standard

Lista de pacotes instaladoslink image 89

Para ver quais pacotes temos instalados, podemos usar dpkg -l, isso nos dará uma lista de todos os pacotes que temos instalados em nosso computador

	
< > Input
Python
terminal("dpkg -l", max_lines_output=10)
Copied
>_ Output
			
Deseado=desconocido(U)/Instalar/eliminaR/Purgar/retener(H)
| Estado=No/Inst/ficheros-Conf/desempaqUetado/medio-conF/medio-inst(H)/espera-disparo(W)/pendienTe-disparo
|/ Err?=(ninguno)/requiere-Reinst (Estado,Err: mayúsc.=malo)
||/ Nombre Versión Arquitectura Descripción
+++-==========================================-=====================================-============-===========================================================================================================================================================================================================================================================================================================================================================================================================================================
ii accountsservice 0.6.55-0ubuntu12~20.04.5 amd64 query and manipulate user account information
ii acl 2.2.53-6 amd64 access control list - utilities
ii acpi-support 0.143 amd64 scripts for handling many ACPI events
ii acpid 1:2.0.32-1ubuntu1 amd64 Advanced Configuration and Power Interface event daemon
ii adduser 3.118ubuntu2 all add and remove users and groups
...
ii zip 3.0-11build1 amd64 Archiver for .zip files
ii zlib1g:amd64 1:1.2.11.dfsg-2ubuntu1.5 amd64 compression library - runtime
ii zlib1g:i386 1:1.2.11.dfsg-2ubuntu1.5 i386 compression library - runtime
ii zlib1g-dev:amd64 1:1.2.11.dfsg-2ubuntu1.5 amd64 compression library - development

Se quisermos procurar se temos um pacote instalado, podemos usar o comando anterior e criar um pipe e procurar o nome do pacote com grep

	
< > Input
Python
terminal("dpkg -l | grep vlc")
Copied
>_ Output
			
Deseado=desconocido(U)/Instalar/eliminaR/Purgar/retener(H)
| Estado=No/Inst/ficheros-Conf/desempaqUetado/medio-conF/medio-inst(H)/espera-disparo(W)/pendienTe-disparo
|/ Err?=(ninguno)/requiere-Reinst (Estado,Err: mayúsc.=malo)
||/ Nombre Versión Arquitectura Descripción
+++-==============-============-============-=================================
ii grep 3.4-1 amd64 GNU grep, egrep and fgrep
ii vlc 3.0.9.2-1 amd64 multimedia player and streamer

Instalar pacotes baixados e não de repositórioslink image 90

Em algumas ocasiões, quando você quer instalar um programa, o que fazem é te dar um arquivo .deb, por isso, para instalá-lo, usamos o comando dpkg -i <file.deb>

Administrador de usuárioslink image 91

Informações do usuário ativo com idlink image 92

Por meio do comando id posso ver qual usuário eu sou

	
< > Input
Python
!id
Copied
>_ Output
			
uid=1000(wallabot) gid=1000(wallabot) grupos=1000(wallabot),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),131(lxd),132(sambashare),998(docker)

Com este comando posso ver meu id, a ID de grupo gid e os grupos aos quais pertenço. Nas distribuições baseadas em Debian, aos usuários é atribuída uma ID a partir de 1000, enquanto ao usuário root é atribuída a ID 0

Informações do usuário ativo com whoamilink image 93

Outro comando para saber qual usuário sou é whoami

	
< > Input
Python
!whoami
Copied
>_ Output
			
wallabot

Arquivo com as informações de todos os usuárioslink image 94

As informações dos usuários estão no arquivo /etc/passwd

	
< > Input
Python
terminal("cat /etc/passwd", max_lines_output=10)
Copied
>_ Output
			
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
...
sshd:x:126:65534::/run/sshd:/usr/sbin/nologin
nvidia-persistenced:x:127:135:NVIDIA Persistence Daemon,,,:/nonexistent:/usr/sbin/nologin
fwupd-refresh:x:128:136:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
glances:x:129:137::/var/lib/glances:/usr/sbin/nologin

Alterar a senha de um usuáriolink image 95

Se eu quiser alterar a senha de um usuário, é preciso usar o comando passwd <user> <password>. Se o usuário não for especificado, será usado o valor retornado pelo comando whoami.

Criar usuários com useraddlink image 96

Para criar um novo usuário usa-se o comando useradd <user name>, vamos criar um novo usuário

	
< > Input
Python
!sudo useradd usertest1
Copied
>_ Output
			

Vamos ver se está no arquivo com todos os usuários

	
< > Input
Python
!cat /etc/passwd | grep usertest
Copied
>_ Output
			
usertest1:x:1001:1001::/home/usertest1:/bin/sh

Como vemos, o usuário foi criado com o id 1001, o seguinte ao que meu usuário wallabot tinha, que era o último

No entanto, ao criar este usuário, ele não nos pediu para atribuir uma senha. Além disso, se olharmos o que há dentro de home

	
< > Input
Python
!ls /home
Copied
>_ Output
			
wallabot

Só existe a pasta do usuário wallabot, mas não a do usuário test1

Criar usuários com adduserlink image 97

Portanto, vamos ver outro comando para criar usuários que exige uma senha e também cria uma pasta em home. Este comando é adduser

	
< > Input
Python
!sudo adduser usertest2
Copied
>_ Output
			
[sudo] contraseña para wallabot:
Añadiendo el usuario `usertest2' ...
Añadiendo el nuevo grupo `usertest2' (1002) ...
Añadiendo el nuevo usuario `usertest2' (1002) con grupo `usertest2' ...
Creando el directorio personal `/home/usertest2' ...
Copiando los ficheros desde `/etc/skel' ...
Nueva contraseña:
Vuelva a escribir la nueva contraseña:
passwd: contraseña actualizada correctamente
Cambiando la información de usuario para usertest2
Introduzca el nuevo valor, o presione INTRO para el predeterminado
Nombre completo []:
Número de habitación []:
Teléfono del trabajo []:
Teléfono de casa []:
Otro []:
¿Es correcta la información? [S/n] s

Se olharmos no arquivo com todos os usuários

	
< > Input
Python
!cat /etc/passwd | grep usertest
Copied
>_ Output
			
usertest1:x:1001:1001::/home/usertest1:/bin/sh
usertest2:x:1002:1002:,,,:/home/usertest2:/bin/bash

Vemos que o usuário usertest2 foi criado

	
< > Input
Python
!ls /home
Copied
>_ Output
			
usertest2 wallabot

E vemos que foi criada uma pasta para ele em home

Para apagar um usuário, é preciso usar o comando userdel <username>

	
< > Input
Python
!sudo userdel usertest1
Copied
>_ Output
			
	
< > Input
Python
!sudo userdel usertest2
Copied
>_ Output
			

Vamos ver se estão no arquivo com todos os usuários.

	
< > Input
Python
!cat /etc/passwd | grep usertest
Copied

Vemos que já não aparece nada, na verdade vemos o final desse arquivo.

	
< > Input
Python
!tail /etc/passwd
Copied
>_ Output
			
geoclue:x:122:127::/var/lib/geoclue:/usr/sbin/nologin
pulse:x:123:128:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
gnome-initial-setup:x:124:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:125:130:Gnome Display Manager:/var/lib/gdm3:/bin/false
wallabot:x:1000:1000:wallabot,,,:/home/wallabot:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
sshd:x:126:65534::/run/sshd:/usr/sbin/nologin
nvidia-persistenced:x:127:135:NVIDIA Persistence Daemon,,,:/nonexistent:/usr/sbin/nologin
fwupd-refresh:x:128:136:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
glances:x:129:137::/var/lib/glances:/usr/sbin/nologin

Criar um usuário administradorlink image 98

Primeiro vamos criar um novo usuário, que no início não será administrador

	
< > Input
Python
!sudo adduser noadmin
Copied
>_ Output
			
Añadiendo el usuario `noadmin' ...
Añadiendo el nuevo grupo `noadmin' (1001) ...
Añadiendo el nuevo usuario `noadmin' (1001) con grupo `noadmin' ...
Creando el directorio personal `/home/noadmin' ...
Copiando los ficheros desde `/etc/skel' ...
Nueva contraseña:
Vuelva a escribir la nueva contraseña:
passwd: contraseña actualizada correctamente
Cambiando la información de usuario para noadmin
Introduzca el nuevo valor, o presione INTRO para el predeterminado
Nombre completo []:
Número de habitación []:
Teléfono del trabajo []:
Teléfono de casa []:
Otro []:
¿Es correcta la información? [S/n] s

Vamos ver a quais grupos pertence o usuário que acabamos de criar; para isso usamos o comando groups <user>

	
< > Input
Python
!groups noadmin
Copied
>_ Output
			
noadmin : noadmin

Como vemos, ele está apenas no grupo noadmin, que é um grupo criado ao criar o usuário

Vamos ver a quais grupos meu usuário pertence

	
< > Input
Python
!groups wallabot
Copied
>_ Output
			
wallabot : wallabot adm cdrom sudo dip plugdev lpadmin lxd sambashare docker

Como vemos, meu usuário pertence a vários grupos mais, entre eles a um chamado sudo. Os usuários que tenham acesso a esse grupo têm poderes de administrador, então para que o novo usuário que criamos tenha esses poderes é preciso adicioná-lo ao grupo sudo

Para adicionar um usuário a um grupo há duas maneiras: uma é com o comando gpasswd -a <user> <group>

	
< > Input
Python
!sudo gpasswd -a noadmin sudo
Copied
>_ Output
			
Añadiendo al usuario noadmin al grupo sudo

Vamos agora ver a quais grupos pertence o usuário noadmin

	
< > Input
Python
!groups noadmin
Copied
>_ Output
			
noadmin : noadmin sudo

Como vemos, já pertence ao grupo sudo, portanto já teria poderes de administrador

Removemos o usuário noadmin do grupo sudo com o comando gpasswd -d <user> <group>

	
< > Input
Python
!sudo gpasswd -d noadmin sudo
Copied
>_ Output
			
Eliminando al usuario noadmin del grupo sudo

Vemos que noadmin já não pertence ao grupo sudo

	
< > Input
Python
!groups noadmin
Copied
>_ Output
			
noadmin : noadmin

O segundo comando para adicionar um usuário a um grupo é usermod -aG <group> <user>

	
< > Input
Python
!sudo usermod -aG sudo noadmin
Copied
>_ Output
			

Vamos ver a quais grupos pertence o utilizador noadmin

	
< > Input
Python
!groups noadmin
Copied
>_ Output
			
noadmin : noadmin sudo

Removemos o usuário noadmin do grupo sudo e o excluímos

	
< > Input
Python
!sudo gpasswd -d noadmin sudo
Copied
>_ Output
			
Eliminando al usuario noadmin del grupo sudo
	
< > Input
Python
!sudo userdel noadmin
Copied
>_ Output
			

Histórico de comandoslink image 99

historylink image 100

Se, no terminal, introduzirmos o comando history, veremos um histórico dos comandos utilizados

	
< > Input
Python
!history
Copied
>_ Output
			
1009 docker build . nvidia/cuda
1010 docker build --help
1011 docker build --build-arg nvidia/cuda
1012 docker build --build-arg [nvidia/cuda]
1013 cd ../docker/
1014 docker ps -a
1015 docker rm boring_wescoff
1016 docker compose up -d
1017 docker compose exec deepstream61 bash
1018 cd ..
....
1996 ps
1997 ps aux
1998 camerasIP.sh
1999 sudo su
2000 sudo useradd usertest
2001 sudo userdel usertest
2002 sudo useradd usertest
2003 sudo userdel usertest
2004 sudo su
2005 sudo apt install history
2006 history
2007 clear
2008 history

Se quisermos executar um dos comandos do histórico, fazemos isso com !<num comando>, por exemplo, se eu quiser voltar a executar o comando 1996

	
< > Input
Python
! !1996
Copied
>_ Output
			
PID TTY TIME CMD
6610 pts/0 00:00:00 bash
20826 pts/0 00:00:00 ps

Uma maneira mais refinada de buscar no histórico é digitar CTRL+r. Ao fazer isso, aparecerá a seguinte mensagem no console

	
< > Input
Python
!reverse-i-search)`':
Copied
>_ Output
			

Dessa forma, à medida que você vai escrevendo, irão aparecendo comandos que correspondem ao que você digitou. Por exemplo, se eu digitar if, aparece a última vez que usei ifconfig.

Se voltarmos a introduzir CTRL+r irão aparecendo correspondências mais antigas

Remover comandos do históricolink image 102

Há comandos como ls, cd, pwd que não nos acrescentam muito por estarem no histórico, por isso é possível configurar para que não sejam guardados no histórico. Para isso, modificamos o arquivo ~/.bashrc e adicionamos a linha HISTIGNORE="pwd:ls:cd"

Segurançalink image 103

Firewall ufwlink image 104

O Ubuntu vem com o firewall ufw instalado, mas para verificá-lo usamos o seguinte comando

	
< > Input
Python
!sudo ufw status
Copied
>_ Output
			
Estado: inactivo

Como vemos, por defecto está inativo, por isso vamos criar um conjunto de regras. Por exemplo, vamos começar abrindo a porta 22 (SSH), para isso usamos o comando sudo allow <port> comment "<coment>", com o qual abrimos uma porta e adicionamos um comentário

	
< > Input
Python
!sudo ufw allow 22 comment 'ssh'
Copied
>_ Output
			
Regla añadida
Regla añadida (v6)

Como vemos, abriu a porta 22 para IPv4 e IPv6. Vamos agora ativar ufw com o comando ufw enable

	
< > Input
Python
!sudo ufw enable
Copied
>_ Output
			
El cortafuegos está activo y habilitado en el arranque del sistema

Se quisermos ver as regras que temos no firewall, usamos o comando ufw status

	
< > Input
Python
!sudo ufw enable
Copied
>_ Output
			
Hasta Acción Desde
----- ------ -----
22 ALLOW Anywhere # ssh
22 (v6) ALLOW Anywhere (v6) # ssh

Também podemos dizer para ele mostrar as regras numeradas com o comando ufw status numbered

	
< > Input
Python
!sudo ufw status numbered
Copied
>_ Output
			
Estado: activo
Hasta Acción Desde
----- ------ -----
[ 1] 22 ALLOW IN Anywhere # ssh
[ 2] 22 (v6) ALLOW IN Anywhere (v6) # ssh

Como elas estão numeradas, podemos remover uma usando o comando ufw delete <rule number>, então para excluir a regra para IPv6 fazemos

	
< > Input
Python
!sudo ufw delete 2
Copied
>_ Output
			
Estado: activo
Borrando:
allow 22 comment 'ssh'
¿Continuar con la operación (s|n)? s
Regla eliminada (v6)

Voltamos a ver o estado

	
< > Input
Python
!sudo ufw status numbered
Copied
>_ Output
			
Estado: activo
Hasta Acción Desde
----- ------ -----
[ 1] 22 ALLOW IN Anywhere # ssh

Vemos que, de fato, a regra número 2 foi eliminada.

Se queremos habilitar a conexão SSH a partir de um único IP, usamos a flag from <IP>

	
< > Input
Python
!sudo ufw allow from 192.168.1.103 proto tcp to any port 22 comment 'ssh ip'
Copied
>_ Output
			
Regla añadida

Volvamos a verificar as regras

	
< > Input
Python
!sudo ufw status numbered
Copied
>_ Output
			
Estado: activo
Hasta Acción Desde
----- ------ -----
[ 1] 22 ALLOW IN Anywhere # ssh
[ 2] 22/tcp ALLOW IN 192.168.1.103 # ssh ip

Se quisermos apagar todas as regras, usamos o comando reset

	
< > Input
Python
!sudo ufw reset
Copied
>_ Output
			
Estado: activo
Reiniciando todas las reglas a sus valores predeterminados instalados.
¿Continuar con la operación (s|n)? s
Respaldando «user.rules» en «/etc/ufw/user.rules.20221205_171730»
Respaldando «before.rules» en «/etc/ufw/before.rules.20221205_171730»
Respaldando «after.rules» en «/etc/ufw/after.rules.20221205_171730»
Respaldando «user6.rules» en «/etc/ufw/user6.rules.20221205_171730»
Respaldando «before6.rules» en «/etc/ufw/before6.rules.20221205_171730»
Respaldando «after6.rules» en «/etc/ufw/after6.rules.20221205_171730»

Voltamos a verificar o estado

	
< > Input
Python
!sudo ufw status numbered
Copied
>_ Output
			
Estado: inactivo

Vemos que já não há nenhuma regra

Para desativar o firewall, usamos o comando ufw disable

	
< > Input
Python
!sudo ufw disable
Copied
>_ Output
			
El cortafuegos está detenido y deshabilitado en el arranque del sistema

Voltemos a verificar o estado

	
< > Input
Python
!sudo ufw status
Copied
>_ Output
			
Estado: inactivo

Auditoria de segurança com Lynislink image 105

Para instalar o Lynis, você precisa usar o comando sudo apt install lynis

Para fazer uma auditoria do seu sistema, é preciso usar o comando lynis audit system. Isso começa a fazer uma varredura de todo o sistema e te o reporta.

Não vou mostrar o resultado da análise do meu sistema para não expor na Internet as minhas vulnerabilidades

Programação de comandoslink image 106

Programação de comandos periódicos com cronlink image 107

Com o comando cron podemos agendar comandos para que sejam executados periodicamente. Para isso temos que editar o arquivo /etc/crontab

	
< > Input
Python
!cat /etc/crontab
Copied
>_ Output
			
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / &amp;&amp; run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.monthly )
#

Como se pode ver, neste arquivo há uma série de comandos que são executados periodicamente. O formato destes comandos é o seguinte

<minuto> <hora> <dia do mês> <mês> <dia da semana> <usuário> <comando>

Para criar corretamente a data em que você quer que o comando seja executado, há muitas páginas online que te ajudam a escrevê-lo corretamente, como por exemplo crontab guru

Programação de comandos de uma única execução com atlink image 108

Quando queremos que no futuro seja executado um comando, mas não queremos que isso seja feito periodicamente, e sim apenas uma única vez, podemos usar o comando at. Por exemplo, você liga uma máquina da Azure ou da Amazon, pela qual cobram, e quer ter certeza de que ela vai ser desligada e de que não vai chegar uma surpresa na fatura; você pode deixar programado que à noite ela se desligue. Assim, mesmo que você se esqueça de desligá-la, ela se desligará sozinha

Fazemos um ls na pasta /tmp

	
< > Input
Python
!ls -l /tmp
Copied
>_ Output
			
total 60
-rw------- 1 wallabot wallabot 0 sep 24 08:51 config-err-QM3AAe
-rw-r--r-- 1 root root 2049 sep 24 08:51 glances-root.log
drwx------ 2 wallabot wallabot 4096 sep 24 09:06 pyright-9853-BG3nXEXw0Tao
drwxrwxr-x 3 wallabot wallabot 4096 sep 24 09:06 python-languageserver-cancellation
drwx------ 3 root root 4096 sep 24 08:51 snap-private-tmp
drwx------ 2 wallabot wallabot 4096 sep 24 08:51 ssh-mHjlSPPoqCp7
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-colord.service-rpjPri
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-fwupd.service-FzPoQf
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-geoclue.service-F6pMWi
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-ModemManager.service-Orf6Bi
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-switcheroo-control.service-1QXRqj
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-systemd-logind.service-lL35tg
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-systemd-resolved.service-iaswSi
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-systemd-timesyncd.service-Yet8lj
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-upower.service-oTL7Gg
drwx------ 2 wallabot wallabot 4096 sep 24 09:31 tracker-extract-files.1000

Agora vamos programar para que seja criado um novo arquivo em /tmp dentro de 5 minutos

	
< > Input
Python
!at 09:55 touch /tmp/at.txt
Copied
>_ Output
			
warning: commands will be executed using /bin/sh
at&gt; touch /tmp/at.txt
at&gt; &lt;EOT&gt;
job 1 at Sun Sep 24 09:55:00 2023

Como vemos, há que escrever at <time> e na linha seguinte o comando que queremos que seja executado

Vemos agora os arquivos que há em /tmp

	
< > Input
Python
!ls -l /tmp
Copied
>_ Output
			
total 60
-rw-rw-r-- 1 wallabot wallabot 0 sep 24 09:55 at.txt
-rw------- 1 wallabot wallabot 0 sep 24 08:51 config-err-QM3AAe
-rw-r--r-- 1 root root 2049 sep 24 08:51 glances-root.log
drwx------ 2 wallabot wallabot 4096 sep 24 09:06 pyright-9853-BG3nXEXw0Tao
drwxrwxr-x 3 wallabot wallabot 4096 sep 24 09:06 python-languageserver-cancellation
drwx------ 3 root root 4096 sep 24 08:51 snap-private-tmp
drwx------ 2 wallabot wallabot 4096 sep 24 08:51 ssh-mHjlSPPoqCp7
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-colord.service-rpjPri
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-fwupd.service-FzPoQf
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-geoclue.service-F6pMWi
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-ModemManager.service-Orf6Bi
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-switcheroo-control.service-1QXRqj
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-systemd-logind.service-lL35tg
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-systemd-resolved.service-iaswSi
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-systemd-timesyncd.service-Yet8lj
drwx------ 3 root root 4096 sep 24 08:51 systemd-private-371a1d9479324db8bd79b6844b8b589b-upower.service-oTL7Gg
drwx------ 2 wallabot wallabot 4096 sep 24 09:31 tracker-extract-files.1000

Como vemos, há um at.txt que foi criado às 09:55

Atalhos de tecladolink image 109

A seguir, mostram-se alguns atalhos de teclado úteis no uso do terminal

  • Ctrl+a: leva o cursor para o início da linha de comandos.
  • Ctrl+e: leva o cursor ao final da linha de comandos.
  • Ctrl+l: limpa o terminal, semelhante ao que faz o comando clear.
  • Ctrl+u: limpa desde a posição do cursor até o início da linha. Se estiver no final, limpa a linha inteira.
  • Ctrl+k: limpa desde a posição do cursor até o final da linha. Se estiver no início, limpa a linha inteira.
  • Ctrl+h: faz o mesmo que a tecla backspace, apaga o caractere imediatamente anterior à posição do cursor.
  • Ctrl+w: apaga a palavra imediatamente anterior ao cursor.
  • Alt+d ou Esc+d: apaga a próxima palavra depois do cursor.
  • Ctrl+p: estabelece a linha de comandos com o último comando introduzido.
  • Ctrl+r: inicia a busca de comandos usados anteriormente, digitando parte de um comando usado anteriormente que tenhamos realizado, incluindo as opções e parâmetros. Faça uma busca pressionando novamente a combinação de teclas e encontraremos correspondências anteriores.
  • Ctrl+c: termina o processo que está sendo executado, útil para recuperar o controle do sistema.
  • Ctrl+d: sai do terminal, semelhante ao comando exit.
  • Ctrl+z: suspende a execução do processo que está sendo executado e o coloca em segundo plano; com o comando fg, poderemos voltar a continuar sua execução.
  • Ctrl+t: troca a posição dos dois caracteres antes do cursor, útil para corrigir erros de digitação.
  • Esc+t: intercambia a posição das duas palavras antes do cursor, útil para corrigir erros de digitação.
  • Alt+f: move o cursor para o início da próxima palavra na linha, o mesmo que Ctrl+right no terminal GNOME.
  • Alt+b: move o cursor para o início da palavra anterior da linha, o mesmo que Ctrl+left no terminal do GNOME.
  • Tab: autocompleta comandos ou caminhos de diretórios ou arquivos.
  • Ctrl+Shift+F: abre um diálogo para fazer uma busca de texto na saída do terminal.
  • Ctrl+Shift+g: procura a próxima ocorrência da pesquisa anterior no terminal.
  • Ctrl+Shift+h: procura a ocorrência anterior da busca anterior no terminal.
  • Ctrl+Shift+c: copia o texto selecionado do terminal para a área de transferência.
  • Ctrl+Shift+v: cola o texto da área de transferência na linha de comando.
  • Up: define na linha de comando o comando anterior do histórico, assim como Ctrl+p.
  • Down: estabelece na linha de comando o seguinte comando do histórico.
  • Mouse Esquerdo: seleciona linhas de texto do terminal.
  • Ctrl+Botón izquierdo del ratón: seleciona blocos de texto do terminal.

Sistema de pastas no Linuxlink image 110

Na imagem a seguir, podemos ver como é o sistema de pastas no Linux

carpetas_linux

Esta imagem foi extraída da publicação no LinkedIn de Roberto Morais

Fricadaslink image 111

Você esqueceu de usar sudolink image 112

¿Nunca te aconteceu de ir usar um comando que tinha que executar com sudo, mas você esqueceu de escrever sudo? Pois bem, depois de receber o erro correspondente, se você fizer sudo !! o comando anterior será executado com sudo

	
< > Input
Python
!apt update
Copied
>_ Output
			
Leyendo lista de paquetes... Hecho
E: No se pudo abrir el fichero de bloqueo «/var/lib/apt/lists/lock» - open (13: Permiso denegado)
E: No se pudo bloquear el directorio /var/lib/apt/lists/
W: Se produjo un problema al desligar el fichero /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permiso denegado)
W: Se produjo un problema al desligar el fichero /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permiso denegado)

Como se pode ver, ao executar sudo update nos dá um erro, mas se agora executarmos sudo !! será executado sudo apt update

	
< > Input
Python
!sudo !!
Copied
>_ Output
			
[sudo] contraseña para wallabot:

Mensagens do kernellink image 113

Com o comando dmesg (display kernel ring buffer messages) podemos ver as mensagens do kernel. Por exemplo, isto é muito útil para ver se foi conectado um dispositivo USB, ou para depurar erros HW do nosso computador

	
< > Input
Python
!dmesg | tail
Copied
>_ Output
			
[ 35.812312] input: LogiOps Virtual Input as /devices/virtual/input/input33
[ 35.916406] input: LogiOps Virtual Input as /devices/virtual/input/input34
[ 36.002064] input: LogiOps Virtual Input as /devices/virtual/input/input35
[ 63.879806] input: MX Master 3 as /devices/virtual/misc/uhid/0005:046D:B023.0006/input/input36
[ 63.879931] logitech-hidpp-device 0005:046D:B023.0006: input,hidraw3: BLUETOOTH HID v0.15 Keyboard [MX Master 3] on 4c:77:cb:1d:66:d0
[ 63.902120] logitech-hidpp-device 0005:046D:B023.0006: HID++ 4.5 device connected.
[ 69.604899] input: MX Keys Keyboard as /devices/virtual/misc/uhid/0005:046D:B35B.0007/input/input37
[ 69.605221] input: MX Keys Mouse as /devices/virtual/misc/uhid/0005:046D:B35B.0007/input/input38
[ 69.606204] hid-generic 0005:046D:B35B.0007: input,hidraw4: BLUETOOTH HID v0.13 Keyboard [MX Keys] on 4c:77:cb:1d:66:d0
[ 188.285030] input: T9 (AVRCP) as /devices/virtual/input/input40

Com a flag --follow podemos ver em tempo real as novas mensagens que forem sendo geradas

	
< > Input
Python
!dmesg --follow
Copied
>_ Output
			
[ 0.000000] Linux version 5.15.0-84-generic (buildd@lcy02-amd64-005) (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #93~20.04.1-Ubuntu SMP Wed Sep 6 16:15:40 UTC 2023 (Ubuntu 5.15.0-84.93~20.04.1-generic 5.15.116)
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-84-generic root=UUID=59002381-d88d-44a6-b83d-8c5a226ce058 ro quiet splash vt.handoff=7
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] Hygon HygonGenuine
[ 0.000000] Centaur CentaurHauls
[ 0.000000] zhaoxin Shanghai
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ffff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000000a0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000009d01fff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000009d02000-0x0000000009ffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x000000000a000000-0x000000000a1fffff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000a200000-0x000000000a20bfff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x000000000a20c000-0x00000000b8983fff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000b8984000-0x00000000b8acdfff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000b8ace000-0x00000000b8c56fff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000b8c57000-0x00000000b9107fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000b9108000-0x00000000ba55cfff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000ba55d000-0x00000000bcffffff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000bd000000-0x00000000bfffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff] reserved
...
[ 35.916406] input: LogiOps Virtual Input as /devices/virtual/input/input34
[ 36.002064] input: LogiOps Virtual Input as /devices/virtual/input/input35
[ 63.879806] input: MX Master 3 as /devices/virtual/misc/uhid/0005:046D:B023.0006/input/input36
[ 63.879931] logitech-hidpp-device 0005:046D:B023.0006: input,hidraw3: BLUETOOTH HID v0.15 Keyboard [MX Master 3] on 4c:77:cb:1d:66:d0
[ 63.902120] logitech-hidpp-device 0005:046D:B023.0006: HID++ 4.5 device connected.
[ 69.604899] input: MX Keys Keyboard as /devices/virtual/misc/uhid/0005:046D:B35B.0007/input/input37
[ 69.605221] input: MX Keys Mouse as /devices/virtual/misc/uhid/0005:046D:B35B.0007/input/input38
[ 69.606204] hid-generic 0005:046D:B35B.0007: input,hidraw4: BLUETOOTH HID v0.13 Keyboard [MX Keys] on 4c:77:cb:1d:66:d0
[ 188.285030] input: T9 (AVRCP) as /devices/virtual/input/input40
>_ Output
			
^C

Informação do hardwarelink image 114

Com lshw podemos ver informações do hardware do nosso computador

	
< > Input
Python
!lshw
Copied
>_ Output
			
AVISO: debería ejecutar este programa como superusuario.
wallabot
descripción: Computer
anchura: 64 bits
capacidades: smp vsyscall32
*-core
descripción: Motherboard
id físico: 0
*-memory
descripción: Memoria de sistema
id físico: 0
tamaño: 32GiB
...
producto: PnP device PNP0501
id físico: 6
capacidades: pnp
configuración: driver=serial
*-pnp00:05
producto: PnP device PNP0c02
id físico: 7
capacidades: pnp
configuración: driver=system
AVISO: la salida puede ser incompleta o imprecisa, debería ejecutar este programa como superusuario.

Cowsaylink image 115

Existe um comando chamado cowsay ao qual você passa como parâmetro um texto e ele desenha uma vaca dizendo esse texto.

É possível que você não o tenha instalado, portanto, para instalá-lo, você deve inserir o comando

sudo apt install cowsay
	
< > Input
Python
terminal("cowsay MaximoFN")
Copied
>_ Output
			
__________
< MaximoFN >
----------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||

Se você adicionar a flag -f dragon, quem fala é um dragão.

	
< > Input
Python
terminal("cowsay -f dragon MaximoFN")
Copied
>_ Output
			
__________
< MaximoFN >
----------
\ / \ //\
\ |\___/| / \// \\
/0 0 \__ / // | \ \
/ / \/_/ // | \ \
@_^_@'/ \/_ // | \ \
//_^_/ \/_ // | \ \
( //) | \/// | \ \
( / /) _|_ / ) // | \ _\
( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
(( / / )) ,-{ _ `-.|.-~-. .~ `.
(( // / )) '/\ / ~-. _ .-~ .-~^-. \
(( /// )) `. { } / \ \
(( / )) .----~-.\ \-' .~ \ `. \^-.
///.----..> \ _ -~ `. ^-` ^-_
///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
/.-~
	
< > Input
Python
terminal("cowsay -f dragon-and-cow MaximoFN")
Copied
>_ Output
			
__________
< MaximoFN >
----------
\ ^ /^
\ / \ // \
\ |\___/| / \// .\
\ /O O \__ / // | \ \ *----*
/ / \/_/ // | \ \ \ |
@___@` \/_ // | \ \ \/\ \
0/0/| \/_ // | \ \ \ \
0/0/0/0/| \/// | \ \ | |
0/0/0/0/0/_|_ / ( // | \ _\ | /
0/0/0/0/0/0/`/,_ _ _/ ) ; -. | _ _\.-~ / /
,-} _ *-.|.-~-. .~ ~
\ \__/ `/\ / ~-. _ .-~ /
\____(oo) *. } { /
( (--) .----~-.\ \-` .~
//__\\ \__ Ack! ///.----..< \ _ -~
// \\ ///-._ _ _ _ _ _ _{^ - - - - ~

Limpezalink image 116

Como a pasta prueba foi criada, vamos apagá-la para deixar tudo como o encontramos.

	
< > Input
Python
!rm -r prueba
Copied

Continuar lendo

Últimos posts -->

Você viu esses projetos?

Gymnasia

Gymnasia Gymnasia
React Native
Expo
TypeScript
FastAPI
Next.js
OpenAI
Anthropic

Aplicativo móvel de treino pessoal com assistente de IA, biblioteca de exercícios, acompanhamento de rotinas, dieta e medidas corporais

Horeca chatbot

Horeca chatbot Horeca chatbot
Python
LangChain
PostgreSQL
PGVector
React
Kubernetes
Docker
GitHub Actions

Chatbot conversacional para cozinheiros de hotéis e restaurantes. Um cozinheiro, gerente de cozinha ou serviço de quarto de um hotel ou restaurante pode falar com o chatbot para obter informações sobre receitas e menus. Mas também implementa agentes, com os quais pode editar ou criar novas receitas ou menus

Naviground

Naviground Naviground
Ver todos os projetos -->
>_ Disponível para projetos

Tem um projeto com IA?

Vamos conversar.

maximofn@gmail.com

Especialista em Machine Learning e Inteligência Artificial. Desenvolvo soluções com IA generativa, agentes inteligentes e modelos personalizados.

Quer assistir alguma palestra?

Últimas palestras -->

Quer melhorar com essas dicas?

Últimos tips -->

Use isso localmente

Os espaços do Hugging Face nos permitem executar modelos com demos muito simples, mas e se a demo quebrar? Ou se o usuário a deletar? Por isso, criei contêineres docker com alguns espaços interessantes, para poder usá-los localmente, aconteça o que acontecer. Na verdade, se você clicar em qualquer botão de visualização de projeto, ele pode levá-lo a um espaço que não funciona.

Flow edit

Flow edit Flow edit

Edite imagens com este modelo de Flow. Baseado em SD3 ou FLUX, você pode editar qualquer imagem e gerar novas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos os contêineres -->
>_ Disponível para projetos

Tem um projeto com IA?

Vamos conversar.

maximofn@gmail.com

Especialista em Machine Learning e Inteligência Artificial. Desenvolvo soluções com IA generativa, agentes inteligentes e modelos personalizados.

Você quer treinar seu modelo com esses datasets?

short-jokes-dataset

HuggingFace

Dataset com piadas em inglês

Uso: Fine-tuning de modelos de geração de texto humorístico

231K linhas 2 colunas 45 MB
Ver no HuggingFace →

opus100

HuggingFace

Dataset com traduções de inglês para espanhol

Uso: Treinamento de modelos de tradução inglês-espanhol

1M linhas 2 colunas 210 MB
Ver no HuggingFace →

netflix_titles

HuggingFace

Dataset com filmes e séries da Netflix

Uso: Análise de catálogo Netflix e sistemas de recomendação

8.8K linhas 12 colunas 3.5 MB
Ver no HuggingFace →
Ver mais datasets -->