No site é possível escolher a plataforma que deseja utilizar para rodar a vm, no meu caso, estarei instalando em uma maquina windows.
Porem a VM uma vez criada pode ser utilizada em qualquer plataforma, pois os arquivos da VM, independe do sistema operacional que a sustenta.
Instalar uma nova VM
Após instalado o virtualbox é necessário montar a máquina virtual, para tanto, criaremos uma máquina Linux.
Para isso, siga os passos a seguir:
Vamos criar uma nova VM, clicando no botão novo, conforme demonstrado acima.
Ao clicar, no botão, surge uma janela, conforme descrito abaixo:
Preencha um nome que diz respeito ao uso desta vm, no campo nome.
No campo pasta, indique a pasta que será incluída as informações da VM, lembrando que o HD da vm pode ser incluída em pasta separada.
No campo Tipo, contem a informação do sistema operacional que voce irá armazenar, preocupe-se com o seu tipo e na versão e revisão e principalmente arquitetura (32/64bits) deste.
Por fim, click no botão Próximo.
Agora iremos indicar o tamanho da memória RAM, para tanto:
Arraste a barra, até o tamanho da memória que deseja, ou digite a mesma, na caixa ao lado.
Por fim, click no botão Proximo.
Criação de Disco virtual
Iremos criar agora o disco virtual, que irá armazenar as informações da VM.
Selecione a opção Criar um novo disco rígido virtual agora, conforme figura abaixo:
Em seguida, click no botão criar.
Agora iremos selecionar o tipo do disco rígido, na imagem abaixo, vemos 3 tipos possíveis.
No nosso caso, selecionamento VDI, e clicamos no botão Próximo.
Agora, iremos alocar o espaço da VM, conforme figura abaixo:
Selecionamos o item dinamicamente alocado, pois queremos que o tamanho possa ser alocado a medida da necessidade e não fixo como na modalidade seguinte.
Selecionamos o botão Próximo.
Agora iremos, indicar o local do armazenamento do disco rígido.
Na caixa de texto digitaremos seu local+nome, também alocando seu tamanho, rolando até o valor desejado. No nosso caso colocaremos 65Gb.
Por fim, clicamos em Criar, para gravar as alterações.
Por conclusão será criada uma VM na aba lateral com o nome apresentado durante o treinamento.
Instalando o Sistema Operacional
Para instalação do sistema operacional, é necessário baixar uma imagem do linux, no nosso caso usaremos a ubuntu 20.04, conforme apontado na imagem:
Em seguida, na vm, click na vm que deseja configurar, e em seguida no botão configurações.
Conforme figura acima.
Agora, iremos indicar a imagem, para isso, selecione o grupo Armazenamento.
Em seguida selecione Em controladora IDE, na imagem do CD (Vazio).
Agora por fim, em atributos, click no botão do cd, e indique a imagem, anteriormente indicada.
Finalizando por Abrir.
Pronto sua VM esta pronta para ser instalada.
Rodando a VM
Agora para concluir, basta iniciar a mesma, para tanto, selecione a vm desejada, e click no botão Iniciar
Neste artigo, irei descrever como trabalhar com arquivos em C no linux.
Segue o exemplo do Makefile do projeto:
all: compile
compile:
gcc files.c -o files
Excluindo arquivos
Em programação, é comum manipularmos arquivos de diversas formas. Uma boa prática é sempre a limpeza da máquina, para evitar estouro de memoria de disco.
Para isso usaremos o comando abaixo:
int unlink(const char *pathname);
Para demonstrar isso, iremos apresentar e comentar um programa (files.c).
A função Linkando, retrata a funcionalidade em si, nela temos dois parametros:
origem
arquivo
No origem, temos o arquivo que gerará um link (referência). Percebemos que indicamos o arquivo teste.old. Em seguida temos o arquivo, que é de fato o que será criado.
Podemos ver aqui, como foi montado nosso projeto.
Agora ao rodar nosso programa temos a seguinte diferença:
Percebam que o arquivo teste.old e teste.txt tem o mesmo tamanho, para ter certeza que é apenas um link, vamos mudar o tamanho do teste.old, e verificar se o teste.txt tambem modifica.
Apos a mudança de tamanho do arquivo original, verificamos que o seu link também modifica.
Em breve publicarei outros comandos relacionados a manipulação de arquivos no linux, para que eu possa continuar tralhando, envie-nos seus feedbacks sobre os artigos.
Mande-nos um email para marcelomaurinmartins@gmail.com passando o que deseja que eu escreva.
Com isso voce deverá incluir seu dominio, como fiz com o meu:
Passo 2: Mude o nginx web server
Agora devemos mudar o nginx web server para responder no endereço e porta corretas.
No meu caso, irei colocar o meu dominio e a porta 88, o arquivo é o /etc/nginx/sites-available/default, para tanto edite o arquivo, conforme a sintaxe abaixo:
sudo pico /etc/nginx/sites-available/default
Realize as seguintes modificações,
Modifique a porta do servidor no meu caso para 88, onde aparece o listen
Modifique o server_name para seu url, não esqueça o ponto e virgula.
Passo 3: Mude seu URL
Agora iremos editar o arquivo /etc/dnsmasq.conf, para tanto rode o seguinte comando:
pico /etc/dnsmasq.conf
Neste arquivo, voce deve mudar o txt-record, conforme figura abaixo:
Passo 4: Mude o site
Agora por fim iremos mudar as configurações do site, para isso, edite o arquivo config.php, localizado em /var/www/moodle/, através do seguinte comando:
sudo pico /var/www/moodle/config.php
A mudança deve ser conforme apresentada:
Passo 5: Ative as mudanças no seu roteador
Agora, é necessário criar um servidor virtual no seu roteador, para visualizar a porta, e permitir que conexões externas acessem seu servidor.
Essa parametrização muda de modelo para modelo de servidor. Por isso irei apresentar o que deve ser feito, sem entrar em detalhes, pois seria útil apenas para quem possuísse o mesmo roteador que eu.
Em modo avançado, geralmente existe uma opção de servidores virtuais, crie uma regra, para que quando alguem solicitar um acesso na porta externa seja direcionada para o ip do raspberry (precisa pegar qual é) na porta que vc quer bater.
No meu caso ficou assim:
Pronto agora é só entrar dar o comando reboot como sudo:
Este artigo é uma continuação do treinamento apresentado no artigo abaixo:
Agora iremos falar um pouco sobre as informações dos grupos no linux.
O arquivo /etc/group, é um banco de dados de grupos de usuários, os grupos são usados para permissões de acesso, pois em geral, estabelecemos permissões para o usuário, para os membros de seu grupo e depois para os outros usuários.
Ao olharmos o grupo mmm, percebemos que tem o mesmo nome e codigo do usuario (/etc/passwd). Ao criarmos um usuário, o linux automáticamente cria um um grupo para este.
Tabela das informações do /etc/group
Número de CAMPO
Dados de exemplo
Descrição
1
mmm
O nome do grupo
2
x
A senha do grupo (se existir)
3
1000
O numero de id do grupo
4
A lista de nomes de usuários que pertencem a esse grupo
Vamos ao código em C
Agora vamos estudar o código abaixo, que é basicamente uma continuação do código do primeiro artigo.
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>
void main(){
long uid = getuid();
long gid = getgid();
char nomegrupo[40];
printf("\nMeu id %ld\n",uid);
printf("Meu group id %ld\n",gid);
struct group *gp= getgrgid(gid);
printf("Meu nome do grupo %s",gp->gr_name);
struct passwd *ppw;
int erro = 0;
ppw = NULL;
printf("Listagem de usuarios\n=======================\n");
//pww = getpwent( ); /*Obtem a senha*/
while((ppw = getpwent())!=NULL){
if(erro !=0) {
printf("Falhou\n ");
//abort();
} else {
printf("Usuario:%s\n",ppw->pw_name);
printf("senha:%s\n",ppw->pw_passwd);
printf("id de usuario:%d\n",ppw->pw_uid);
printf("id do grupo:%d\n"a,ppw->pw_gid);
/*Pega as informações do grupo*/
gid = ppw->pw_gid; /*Pega o grupo do usuario*/
gp = getgrgid(gid);
/*Mostra os grupos*/
printf("Nome do grupo %s",gp->gr_name);
printf("Senha do grupo %s",gp->gr_passwd);
printf("id do grupo %d",gp->gr_gid);
for( int cont= 0; gp->gr_mem[cont]!=0;++cont) {
printf("membros do grupo %s", gp->gr_mem[cont]);
}
/*O resto das informações do usuario*/
printf("comentario:%s\n",ppw->pw_gecos);
printf("diretorio:%s\n",ppw->pw_dir);
printf("shell:%s\n", ppw->pw_shell);
}
printf("\n");
}
}
Neste código, podemos ver 2 fragmentos importantes:
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>
void main(){
long uid = getuid();
long gid = getgid();
char nomegrupo[40];
printf("\nMeu id %ld\n",uid);
printf("Meu group id %ld\n",gid);
struct group *gp= getgrgid(gid);
printf("Meu nome do grupo %s",gp->gr_name);
struct passwd *ppw;
int erro = 0;
ppw = NULL;
Neste pequeno fragmento, a lib responsável pelo gerenciamento do grupo, é
#include <grp.h>
Funções de gestão de grupo
Para comecarmos, vamos apresentar a estrutura de um grupo:
struct group {
char *gr_name; /* nome do grupo */
char *gr_passwd; /* senha do grupo */
gid_t gr_gid; /* id do grupo */
char **gr_mem; /* membros do grupo */
}
GETGRENT
Abre a listagem e pega a primeira ocorrencia do grupo. Funcionando como um cursor, para capturar todos os registros do grupo.
while ( ( gp = getgrent())!=0){
printf("%s", gp->gr_name);
}
endgrent();
No caso do exemplo acima, só para quando o ultimo registro for encontrado.
ENDGRENT
É usado em conjunto com a função getgrent, ela faz voltar para a posição inicial.
while ( ( gp = getgrent())!=0){
printf("%s", gp->gr_name);
endgrent();
}
Nesta sutil variação do código, será mostrada sempre o primeiro registro.
GETGRGID
Pesquisa o grupo, pegando a estrutura identificada pela chave gid (Group ID).
printf("\nMeu id %ld\n",uid);
printf("Meu group id %ld\n",gid);
struct group *gp= getgrgid(gid);
printf("Meu nome do grupo %s",gp->gr_name);
No fragmento acima, podemos ver que funciona, inclusive acompanhar sua sintaxe.
GETGRNAM
Função semelhante a anterior, porem em vez de pegar o id, ela procura o grupo que contenha o nome do grupo.
Os principais componentes deste fragmento, são o UID e o GID.
O UID é o User Identification – Que é um número único, que identifica o usuário
O GID é o Group Identification – Que identifica o grupo pertencente aquele usuário, este arquivo, esta associado ao arquivo /etc/groups, que auxilia na criação de permissões.
Lendo o UID e o GID do usuário conectado
Quando voce loga no linux, utiliza as suas credenciais, login e senha. Desta forma sua aplicação precisa saber como pegar tal informação.
As informações do usuário logado, podem ser obtidas através da biblioteca unistd.h, entre suas várias funções estão duas:
gid_t getgid(void)
gid_t getegid(void)
Abaixo, traremos o main.c, que é um exemplo bem simples do uso da biblioteca.
#include <unistd.h>
#include <stdio.h>
void main(){
printf("\nMeu id %i\n",getuid());
printf("Meu group id %i\n",getgid());
}
No exemplo capturamos de forma direta o getuid e o getgid, onde mostramos os mesmos em uma mensagem.
all: compile
compile:
gcc main.c -o ex01
No fragmento acima, temos o arquivo Makefile, ja nosso amigo de longa data, responsável pela compilação propriamente dita.
Listando as informações /etc/passwd
Este segundo programa, é um pouco mais complicado, ele varre a listagem de todos os usuarios, apresentando o conteúdo do passwd, e relacionando, conforme a estrutura do passwd.
#include <unistd.h>
#include <unistd.h>
#include <unistd.h>
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <sys/types.h>
void main(){
long uid = getuid();
long gid = getgid();
printf("\nMeu id %ld\n",uid);
printf("Meu group id %ld\n",gid);
struct passwd *ppw;
int erro = 0;
ppw = NULL;
printf("Listagem de usuarios\n=======================\n");
//pww = getpwent( ); /*Obtem a senha*/
while((ppw = getpwent())!=NULL){
if(erro !=0) {
printf("Falhou\n ");
//abort();
} else {
printf("Usuario:%s\n",ppw->pw_name);
printf("senha:%s\n",ppw->pw_passwd);
printf("id de usuario:%d\n",ppw->pw_uid);
printf("id do grupo:%d\n",ppw->pw_gid);
printf("comentario:%s\n",ppw->pw_gecos);
printf("diretorio:%s\n",ppw->pw_dir);
printf("shell:%s\n", ppw->pw_shell);
}
printf("\n");
}
}
Temos como saída o exemplo que se segue:
Outras funções semelhantes
A função getpwuid retorna a estrutura passwd, igual a anterior, porem, ela pega apenas a de um uid especifico, utilizado para pesquisar a informação de user id.