Script para instalar e configurar o samba no Damn Small Linux
Publicado por Isaac Luiz Angelo Castro 13/05/2009
[ Hits: 6.651 ]
Homepage: http://bitcoinrotator.pe.hu/
Eu vi que existia uma grande possibilidade de usar o Damn Small Linux como distribuição base para um servidor com Samba. Aí, comecei a desenvolver o script.
Estou muito no início mas a ideia é boa. Fiquei interessado pelo DSL-N que tem kernel 2.6.X e tem algumas diferenças do 2.4.X, mas a versão do samba funciona bem nas duas. Se alguém quiser participar do desenvolvimento, mande um email para isaacangello@gmail.com.
#!/bin/bash
#
# esse script
#
sversion="versao 0.8.85"
#
# Desativando no boot
# update-rc.d -f samba remove
# Ativando no boot
# update-rc.d -f samba defaults
# ativação do samba manual
# /etc/.d/samba start
# parando samba para configurar
# /etc/.d/samba stop
#comando para filtrar usuarios no sistema
# sed -e '\/*/D' /etc/shadow | sed -e '\/!/D'| cut -d : -f1 | grep usuario
#definindo variáveis
BACKTITLE="SMB SETUP SERVER , POR ISAAC ANGELO =<ISC>= SCRIPT DE CONFIGURACAO DO SAMBA "
T1=" SMB SETUP SERVER "
arqconf="/tmp/smb.conf"
ordir=`pwd`
chmod 666 /etc/samba/smb.conf
which /usr/sbin/nmbd |cut -d/ -f4-42>/tmp/var0101.txtsmb
which /usr/sbin/smbd |cut -d/ -f4-42>/tmp/var0102.txtsmb
var0101=`cut -f1 /tmp/var0101.txtsmb`
var0102=`cut -f1 /tmp/var0102.txtsmb`
#instalando temas no dialog
# embelezando
user100=`whoami`
if [ $user100 = "root" ]
then
HOME=/root
else
HOME=/home/$user100
fi
export DIALOGRC=$HOME/.dialog/default_theme_rc.cfg
#função para sair do script caso o usuário queira
run-time()
{
M1="ESTE E UM SCRIPT DE CONFIGURACAO DO SAMBA ! DESEJA CONTINUAR ?, ESCOLHA NAO PARA SAIR..."
dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 10 70
if [ $? = 1 ];then
clear
rm -f $arqconf
rm -f /tmp/*smb
/usr/sbin/nmbd
/usr/sbin/smbd
/usr/sbin/winbindd
samba start
clear
exit 0
fi
}
#loop para voltar ao inicio
loop()
{
M1="DESEJA SAIR DO SCRIPT? DIGITE NAO PARA VOLTAR AO INICIO... "
dialog --backtitle" $BACKTITLE" --title "$T1 " --yesno "M1" 10 70
if [ $? = 0 ]; then
exit 0
rm -f $arqconf
rm -f /tmp/*smb
/usr/sbin/nmbd
/usr/sbin/smbd
/usr/sbin/winbindd
samba start
else
run-time
fi
}
# iniciando a configuração
init-conf(){
M1="$sversion
|\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
|/\.....ESTE SCRIPT FOI ESCRITO POR ISAAC ANGELO...../\|
|\/__________________________________________________\/|
|/\...ELE TE AJUDARA A CONFIGURAR O SERVIDOR SAMBA.../\|
|\/.........ESCOLHA UM ITEM NA DA PROXIMA TELA.......\/|
|/\__________________________________________________/\|
|\/.........RESPONDA CANCELAR SE QUISER SAIR.........\/|
|/\................................................../\|
|\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
"
#pergunta que define se oservidor é ou nào padrão
dialog --backtitle "$BACKTITLE" --title "$T1" --msgbox "$M1" 20 70
M1="ESCOLHA UMA DAS OPCOES ABAIXO :\n \n <> BASICA = E AUTOMATICA \n <> PERSONALIZADA = POSSIVEL ADIONAR COMPARTILHAMENTO PERSONALIZADOS \n \n "
rm -f /tmp/test1.txtsmb
dialog \
--backtitle "$BACKTITLE" \
--title "$T1" \
--menu "$M1" \
18 70 3 \
BASICA "CONFIGURACAO_BASICA" \
PERSONALIZADA 'CONFIGURACAO_PERSONALIZADA' \
SAIR 'SAIR' 2>/tmp/test1.txtsmb
test1=`head -n 1 /tmp/test1.txtsmb | cut -f1`
case $test1 in
BASICA)
clear
# parando samba para configurar
samba stop
killall nmbd
killall smbd
killall winbindd
smb-padrao
;;
PERSONALIZADA)
clear
# parando samba para configurar
samba stop
killall nmbd
killall smbd
killall winbindd
smb-server
;;
*)
run-time
;;
esac
}
smb-padrao(){
ordir=`pwd`
cd /etc/samba
gzip -c smb.conf > smb.conf-$$-.back.gz &
cd $ordir
#sudo rm -f /etc/samba/smb.conf
rm -f $arqconf
#read barbom
NomeComp="Servidor"
PastaComp="/mnt/servidor"
NomeComp1="Arquivos"
PastaComp1="/mnt/arquivos"
sudo cat <<isc> $arqconf
# Arquivo de Configuração do Samba
# baseado no arquivo de configuração do kurumin .
# gerado por SMB SETUP SERVER $sversion
# Seção Globals:
# Aqui vão parâmetros gerais, como o nome da máquina e grupo de trabalho.
[global]
workgroup = HOME
netbios name = SERVIDOR
server string = %h server (Samba %v)
encrypt passwords = Yes
security = user
os level = 100
log file = /var/log/samba/log.%m
preferred master = yes
domain master = no
local master = yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
[homes]
comment = Home Directories
create mask = 0700
directory mask = 0700
browseable = No
[printers]
comment = Todas as Impressoras
path = /var/spool/samba
guest ok = yes
public = yes
printable = yes
browseable = yes
use client driver = yes
isc
cd /tmp
NomeComp="Servidor"
PastaComp="/mnt/servidor"
NomeComp1="Arquivos"
PastaComp1="/mnt/arquivos"
echo "# Adicionando pasta compartilhada...">> $arqconf
echo "">> $arqconf
echo "[$NomeComp]">> $arqconf
echo "">> $arqconf
echo " path = $PastaComp ">> $arqconf
echo "browseable = yes ">> $arqconf
echo "writeble = yes">> $arqconf
echo "read only = no ">> $arqconf
echo " directory mask = 0770">> $arqconf
echo " create mask = 0770">> $arqconf
echo " force create mode = 0770">> $arqconf
echo " force directory mode = 0770">> $arqconf
echo "">> $arqconf
echo "# Adicionando pasta compartilhada...">> $arqconf
echo "">> $arqconf
echo "[$NomeComp1]">> $arqconf
echo "">> $arqconf
echo " path = $PastaComp ">> $arqconf
echo "browseable = yes ">> $arqconf
echo "writeble = yes">> $arqconf
echo "read only = no ">> $arqconf
echo " directory mask = 0770">> $arqconf
echo " create mask = 0770">> $arqconf
echo " force create mode = 0770">> $arqconf
echo " force directory mode = 0770">> $arqconf
echo "">> $arqconf
mkdir $PastaComp
mkdir $PastaComp1
sudo chmod 666 /etc/samba/smb.conf
sudo rm -f /etc/samba/smb.conf
sudo tar -cf - smb.conf | tar -xf - -C /etc/samba
#cp -a --reply=yes smb.conf /etc/samba/
cd $ordir
clear
(echo 33 ; sleep 1
echo 44 ; sleep 1
echo 66 ; sleep 1
echo 100) |
dialog --backtitle "$BACKTITLE" \
--title " $T1 " \
--gauge 'CRIANDO CONFIGURACAO BASICA, AGUARDE...' \
8 70 0
#M1=" O SCRIPT TERMINOU A CONFIGURAÇÃO PADRÃO, DESEJA INICIAR O SAMBA AGORA. "
#dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 10 50
#if [ $? = 0 ] ; then
# ativação do samba manual
#/etc/init.d/samba start
#fi
add-nome
}
# função para escrita do arquivo de configuração do samba sem pdc
smb-server()
{
sudo cat<<isc> $arqconf
# Arquivo de Configuração do Samba
# baseado no arquivo de configuração do kurumin .
# gerado por SMB SETUP SERVER $sversion
# Seção Globals:
# Aqui vão parâmetros gerais, como o nome da máquina e grupo de trabalho.
[global]
workgroup = HOME
netbios name = SERVIDOR
server string = %h server (Samba %v)
encrypt passwords = Yes
security = user
os level = 100
log file = /var/log/samba/log.%m
preferred master = yes
domain master = no
local master = yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
[printers]
comment = Todas as Impressoras
path = /var/spool/samba
guest ok = yes
public = yes
printable = yes
browseable = yes
use client driver = yes
isc
#ff escavusca
#sudo chmod 666 /etc/samba/smb.conf
#sudo rm -f /etc/samba/smb.conf
#sudo tar -cf - smb.conf | tar -xf - -C /etc/samba
#cd $ordir
init-comp
}
#função que possibilita o usuario escolher se que configurar o compartilhamento manualmento ou pelo script
init-comp(){
clear
echo "PARANDO SERVICO DO SAMBA "
dialog --backtitle "$BACKTITLE" --title " $T1 " --infobox " PARANDO SERVICO DO SAMBA ! " 10 70
samba stop
killall nmbd
killall smbd
killall winbindd
clear
(echo 31 ; sleep 1
echo 44 ; sleep 1
echo 68 ; sleep 1
echo 100; sleep 1) |
dialog --backtitle "$BACKTITLE" \
--title " $T1 " \
--gauge 'PREPARANDO CONFIGURACAO, AGUARDE...' \
8 70 0
M1="
=====================================================
||.........ADICIONANDO COMPARTILHAMENTO............||
||=================================================||
||.......A CONFIGURACAO BASICA FOI FEITA...........||
|| PASSEMOS A CONFIGURACAO DOS COMPARTILHAMENTOS .||
||=================================================||
||............RESPONDA NAO SE QUISER...............||
||............FAZER ISSO MANUALMENTE...............||
=====================================================
"
#pergunta que define se oservidor é ou nào padrão
dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 20 70
while [ $? = 0 ] ; do
dados
compadd
M1=" DESEJA CRIAR OUTRO COMPARTILHAMENTO ? "
dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 10 70
done
if [ $? = 1 ]; then
ordir=`pwd`
cd /tmp
sudo chmod 666 /etc/samba/smb.conf
sudo rm -f /etc/samba/smb.conf
sudo tar -cf - smb.conf | tar -xf - -C /etc/samba
#cp -a --reply=yes smb.conf /etc/samba/
cd $ordir
add-nome
fi
}
# função para escrita no arquivo de configuração do samba : criando compartilhamento
compadd()
{
chmod 666 /etc/samba/smb.conf
cd /tmp/
echo "# pasta(s) compartilhada(s)...">> $arqconf
echo "">> $arqconf
echo "[$NomeComp]">> $arqconf
echo " path = $PastaComp ">> $arqconf
echo "avaliable = $R1">> $arqconf
echo "browseable = $R2 ">> $arqconf
echo "writeble = $R3">> $arqconf
echo "">> $arqconf
#echo "=====debug"
#read isc
clear
(echo 38 ; sleep 1
echo 45 ; sleep 1
echo 71 ; sleep 1
echo 100) |
dialog --backtitle "$BACKTITLE" \
--title " $T1 " \
--gauge 'ADICIONANDO COMPARTILHAMENTO(S), AGUARDE...' \
8 70 0
}
# funções para determinar opções configuraveis do arquivo
dados(){
rm -f /tmp/nome.txtsmb
rm -f /tmp/pasta.txtsmb
dialog --backtitle "$BACKTITLE" --title " $T1 " --inputbox " INSIRA: UM NOME PARA O COMPARTILHAMENTO... " 10 70 2>/tmp/nome.txtsmb
if [ $? = 1 ] ;then
run-time
fi
dialog --backtitle "$BACKTITLE" --title " $T1 " --inputbox " INSIRA: UMA PASTA PARA O COMPARTILHAMENTO... " 10 70 2>/tmp/pasta.txtsmb
if [ $? = 1 ];then
run-time
fi
NomeComp=`cat /tmp/nome.txtsmb| cut -f1`
PastaComp=`cat /tmp/pasta.txtsmb| cut -f1`
M1="DESEJA CRIAR A PASTA DO COMPARTILHAMENTO? "
dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 10 70
if [ $? = 0 ] ;then
rm -f /tmp/pasta.logsmb
mkdir $PastaComp 2>/tmp/pasta.logsmb &
clear
(echo 33 ; sleep 1
echo 44 ; sleep 1
echo 66 ; sleep 1
echo 100) |
dialog --backtitle "$BACKTITLE" \
--title " $T1 " \
--gauge 'CRIANDO DIRETORIO, AGUARDE...' \
8 70 0
verificar=`cat /tmp/pasta.logsmb |cut -d ":" -f3-3 | cut -d " " -f 3-3`
if [ $verificar = "existe" ]; then
M1=" A PASTA JA EXISTE! <<<<>>>> VERIFIQUE SE A PASTA NAO ESTA SENDO USADA POR OUTRO COMPARTILHAMENTO.! "
dialog --backtitle "$BACKTITLE" --title "$T1" --msgbox "$M1" 10 70
fi
fi
M1=" AVALIABLE <<<<>>>> GERALMENTE SEM ESSA OPCAO ABILITADA O SAMBA NAO FUNCIONA, DIGITA SIM(RECOMENDADO) ... "
dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 10 70
if [ $? = 0 ]; then
R1=`echo "yes"`
else
R1=`echo "no"`
fi
M1="DESEJA QUE ESTE COMPARTILHAMENTO SEJA NAVEGAVEL ? "
dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 10 70
if [ $? = 0 ]; then
R2=`echo "yes"`
else
R2=`echo "no"`
fi
M1=" DESEJA ABILITAR ESCRITA PARA ESTE COMPARTILHAMENTO ?"
dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 10 70
if [ $? = 0 ]; then
R3=`echo "yes"`
else
R3=`echo "no"`
fi
}
# verificando se o usuario realmente quer adicionar usuarios no sistema e no samba
add-nome(){
M1="
______________________________________________
<>......ADICIONANDO USUARIOS NO SAMBA.......<>
<><><><><><><><><><><><><><><><><><><><><><><>
<>....PARA ADICIONAR USUARIOS NO SAMBA......<>
<> E NECESSARIO QUE OS USUARIOS ESTEJAM.....<>
<>..........CADASTRADOS NO SISTEMA..........<>
<><><><><><><><><><><><><><><><><><><><><><><>
<>..........RESPONDA NAO SE QUISER..........<>
<>..........FAZER ISSO MANUALMENTE..........<>
---------------------------------------------- "
#pergunta que define se oservidor é ou nào padrão
dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 20 70
if [ $? = 1 ]; then
loop
fi
add-nome-system
}
# adicionando usuários no sistema
add-nome-system(){
rm -f /tmp/nome.txtsmb
dialog --backtitle "$BACKTITLE" --title " $T1 " --inputbox " INSIRA: UM NOME PARA ADICIONAR USUARIO.NO SISTEMA. " 10 70 2>/tmp/nome.txtsmb
if [ $? = 1 ] ; then
add-nome
fi
dialog --backtitle "$BACKTITLE" --title " $T1 " --passwordbox " INSIRA : UMA SENHA PARA O NOVO USUARIO.NO SISTEMA. " 10 70 2>/tmp/senha.txtsmb
if [ $? = 1 ] ; then
add-nome-system
fi
dialog --backtitle "$BACKTITLE" --title " $T1 " --passwordbox " INSIRA NOVAMENTE : UMA SENHA PARA O NOVO USUARIO.NO SISTEMA. " 10 70 2>/tmp/senha1.txtsmb
if [ $? = 1 ] ; then
add-nome-system
fi
user1=`cat /tmp/nome.txtsmb| cut -f1`
usersenha=`cat /tmp/senha.txtsmb| cut -f1`
usersenha1=`cat /tmp/senha1.txtsmb| cut -f1`
if [ "$usersenha" != "$usersenha1" ] ; then
dialog --backtitle "$BACKTITLE" --title " $T1 " --msgbox " AS SENHAS DIGITADAS NAO SAO IGUAIS : INSIRA NOVAMENTE " 10 70
add-nome-system
fi
userdel $user1
useradd $user1 -p $usersenha
#passwd $user1<< isc
#$usersenha
#$usersenha
isc
dialog --backtitle "$BACKTITLE" --title " $T1 " --msgbox " O USUARIO ==>> $user1 <<== FOI ADICIONADO NO <<SISTEMA>> " 10 70
add-nome-samba
}
#adicionando usuários no samba
add-nome-samba (){
rm -f /tmp/nome1.txtsmb
dialog --backtitle "$BACKTITLE" --title " $T1 " --inputbox " INSIRA: UM NOME PARA ADICIONAR USUARIO.NO >>SAMBA<<. " 10 70 2>/tmp/nome1.txtsmb
if [ $? = 1 ] ; then
add-nome
fi
dialog --backtitle "$BACKTITLE" --title " $T1 " --passwordbox " INSIRA : UMA SENHA PARA O NOVO USUARIO.NO <>SAMBA<>. " 10 70 2>/tmp/senha0.txtsmb
if [ $? = 1 ] ; then
add-nome-samba
fi
dialog --backtitle "$BACKTITLE" --title " $T1 " --passwordbox " INSIRA NOVAMENTE : UMA SENHA PARA O NOVO USUARIO.NO SAMBA. " 10 70 2>/tmp/senha01.txtsmb
if [ $? = 1 ] ; then
add-nome-samba
fi
user01=`cat /tmp/nome1.txtsmb| cut -f1`
usersenha0=`cat /tmp/senha0.txtsmb| cut -f1`
usersenha01=`cat /tmp/senha01.txtsmb| cut -f1`
if [ "$usersenha0" != "$usersenha01" ] ; then
dialog --backtitle "$BACKTITLE" --title " $T1 " --msgbox " AS SENHAS DIGITADAS NAO SAO IGUAIS : INSIRA NOVAMENTE " 10 70
add-nome-samba
fi
smbpasswd -a -s $user01<< isc
$usersenha0
$usersenha0
isc
dialog --backtitle "$BACKTITLE" --title " $T1 " --msgbox " O USUARIO ==>> $user01 <<== FOI ADICIONADO NO SAMBA " 10 70
add-nome
}
#funcao para testar se os modulos do samba estão instalados caso nao esta ele instala.
testando(){
MSG="COMO DESEJA INSTALAR O SAMBA ?"
rm -f /tmp/dia.log01smb
dialog --backtitle "$BACKTITLE" --menu "$MSG" 10 70 3 1 FAZER_DOWNLOAD_DO_SAMBA 2 INSTALAR_DA_PASTA 3 CONTINUAR_SETUP-SMBSERVER 2>/tmp/dia.log01smb
test=`cut -f1 /tmp/dia.log01smb`
case $test in
1)
M1="
ESSE PARTE SCRIPT BAIXA E INSTALAR O SAMBA VERAO 2.2.9 NO DSL-N,
DESEJA CONTINUAR ?"
ordir=`pwd`
dialog --backtitle "$BACKTITLE" --title "$T1" --yesno "$M1" 10 70
if [ $? = 1 ] ; then
exit 0
fi
cd /tmp/
rm -f samba.dsl*
rm -f wget.log
clear
echo " <===FAZENDO DOWNLOAD DO SAMBA===>"
echo""
#wget -c -o /tmp/wget.log http://linorg.usp.br/www.broffice.org/stable/3.0.1/BrOo_3.0.1_LinuxIntel_install_pt-BR.tar.gz -b
wget -o /tmp/wget.logsmb ftp://ibiblio.org/pub/Linux/distributions/damnsmall/mydsl/net/samba.dsl -b
M1="
<===FAZENDO DOWNLOAD DO SAMBA===>
"
porcentagem=1
(sleep 5
while [ "$porcentagem" != "00" ]; do
porcentagem=`cat /tmp/wget.logsmb |cut -c63-64|tail -n 4 | head -n 1 `
echo $porcentagem
done
echo 100
)| dialog --title "$TI" --gauge "$M1" 10 70 0
mv /tmp/samba.dsl /tmp/samba.tar.gz
tar -xzf samba.tar.gz -C /
rm -f /tmp/samba.tar.gz
M1="
===>INSTALANDO SAMBA V.2.2.9<===
"
cd $ordir
(echo 20
sleep 1
echo 45
echo 56
sleep 2
echo 67
echo 78
sleep 1
echo 86
sleep 1
echo 98
sleep 1
echo 100
)| dialog --title "$TI" --gauge "$M1" 10 70 2
M1="
:-) = :-) = :-) = :-) = :-) = :-) = :-)
A INSTALACAO OCORREU COM SUCESSO !
"
dialog --backtitle "$BACKTITLE" --title "$T1" --msgbox "$M1" 10 70
init-conf
;;
2)
ordir=`pwd`
M1="APONTE A PASTA AONDE ESTA O ARQUIVO <<>>.dsl<<>>"
rm -f /tmp/arq00.txtsmb
dialog --backtitle "$BACKTITLE" --title "$M1" --inputbox $ordir/ 10 70 2>/tmp/arq00.txtsmb
arq00=`cut -f1 /tmp/arq00.txtsmb`
arq01=`echo $arq00/samba.dsl`
DIA=`dialog`
rm -f /tmp/tarlog
#tar -xzf $arq01 -C / 2>/tmp/tarlog
#rm -f /tmp/samba.tar.gz
M1="
===>INSTALANDO SAMBA V.2.2.9<===
"
cd $ordir
(echo 20
sleep 1
echo 45
echo 56
sleep 2
echo 67
echo 78
sleep 1
echo 86
sleep 1
echo 98
sleep 1
echo 100
)| dialog --title "$TI" --gauge "$M1" 10 70 2
verif=`cut -f3 -d : /tmp/tarlogsmb | head -n 1 | cut -c2-7`
if [ ¨$verif¨ = ¨Cannot¨ ]; then
M1="
= :-( = :-( = :-( = :-( = :-( = :-( = :-(
OUVE UM ERRO NA INSTALACAO DO SAMBA !
"
dialog --backtitle "$BACKTITLE" --title "$T1" --msgbox "$M1" 10 70
testando
fi
M1="
:-) = :-) = :-) = :-) = :-) = :-) = :-)
A INSTALACAO OCORREU COM SUCESSO !
"
dialog --backtitle "$BACKTITLE" --title "$T1" --msgbox "$M1" 10 70
;;3)
init-conf
;;
*)
exit
;;
esac
}
run-time
which /usr/sbin/nmbd |cut -d/ -f4-42>/tmp/var0101.txtsmb
which /usr/sbin/smbd |cut -d/ -f4-42>/tmp/var0102.txtsmb
var0101=`cut -f1 /tmp/var0101.txtsmb`
var0102=`cut -f1 /tmp/var0102.txtsmb`
if [ "$var0101" = "nmbd" ]; then
init-conf
else
M1="
O SCRIPT DETECTOU QUE O SAMBA NAO ESTA INSTALADO
<<>>
ESCOLHA UMA OPCAO NA PROXIMA JANELA... "
dialog --backtitle "$BACKTITLE" --title "$T1" --msgbox "$M1" 10 70
testando
fi
if [ "$var0102" = "smbd" ]; then
init-conf
else
M1="
O SCRIPT DETECTOU QUE O SAMBA NAO ESTA INSTALADO
<<>>
ESCOLHA UMA OPCAO NA PROXIMA JANELA..."
dialog --backtitle "$BACKTITLE" --title "$T1" --msgbox "$M1" 10 70
testando
fi
init-conf
Instalar splashtop em um pendrive
Script para listar tentativas de acessos
Validar e-mails em arquivo CSV
Nenhum comentário foi encontrado.
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Trazendo de volta o Serviços em Segundo Plano no Plasma6
Desenvolvi um programa de hot corner (você colocar o mouse nos cantos)... (1)
Problema com uso do sed [RESOLVIDO] (3)
Atualizei meu ubuntu e desliguei e ele não inicia corretamente (13)









