Introdução ao Linux
Linux, MacOS e Windows
Para fazer as simulações atomísticas do tutorial do siesta, é precisa saber pelo menos o básico da interface de linhas de comandos (CLI, command line interface) do linux. Tanto no sistema operacional Linux como no MacOS, há o programa Terminal, em que podemos digitar comandos para realizar as tarefas desejadas. Para o Windows, há um programa no Windows Store chamado de Ubuntu on Windows. Esse programa criar um terminal do linux no próprio Windows. O programa de simulação SIESTA também funciona no Ubuntu on Windows, mas pode precisar de algumas modificações.
Estrutura de um comando
Um exemplo de um comando que podemos utilizar é:
$ mkdir exemplo01
Nesse exemplo, o caractere “$” é o prompt do shell. Esse caractere não precisa ser digitado pelo usuário. Só indica que o comando que vem a seguir deve ser digitado no prompt do shell, por um usuário comum. Se o prompt for “#” ao invés de “$”, significa que deve ser digitado por um root (um usuário com todas as permissões do sistema). O comando “mkdir” é um dos exemplo que serão listados na seção abaixo. Nesse caso, é um comando para criar um diretório. O que vem a seguir, o “exemplo01“, é o argumento do comando “mkdir”. Nesse caso, é o nome do diretório que será criado.
Lista dos principais comandos
pwd
Esse comando mostra o caminho do diretório que você se encontra no momento.
pwd
ls
O comando “ls” lista o arquivos e sub-diretórios do diretório atual que você se encontra.
ls
Podemos também utilizar alguns argumentos (complementos) no comando ls para modificar como esses arquivos e diretórios são listados. Por exemplo,
ls -a
lista todos os arquivos e diretórios, incluindo os arquivos ocultos, que no linux começam com um ponto no nome.
O comando
ls -l
modifica a lista para por cada diretório ou arquivo em uma única linha, e mostra mais informações de cada um desses itens. Incluindo os argumentos “t” para ordenar a lista por ordem temporal, e “r” para reverter a ordem a lista, podemos ter uma lista de arquivos e diretórios, do mais antigos ao mais recentes com
ls -ltr
cd
O comando “cd” é utilizado para mudar de diretório. Por exemplo, se no diretório atual há um sub-diretório “exemplo01”, para mudar a navegação para esse diretório usamos o comando
cd exemplo01
Para mudar para o diretório superior, antes do “exemplo01”, usamos o comando
cd ..
Ao utilizar o comando “cd” sem qualquer diretório como parâmetro, a navegação no terminal muda para o diretório $HOME, que é um diretório padrão. Se você digitou isso acidentalmente, pode utilizar o comando
cd -
que vai para o último diretório do histórico de navegação do terminal que você está utilizando.
mv
Esse comando pode ser utilizado para dois propósitos, o primeiro para mover um arquivo (ou diretório) para outra localização (outro diretório). Por exemplo, se há um arquivo “arquivo01.dat” no seu diretório atual, e um sub-diretório “exemplo01”, podemos mover esse arquivo para o sub-diretório através do comando:
mv arquivo01.dat exemplo01
A outra aplicação do comando “mv” é renomear um arquivo (ou diretório). Por exemplo, com o comando:
mv arquivo01.dat novo_arquivo.dat
o arquivo que antes se chamava “arquivo01.dat” agora tem o novo nome “novo_arquivo.dat”.
cp
Esse é comando usado para copiar um arquivo. Por exemplo, para copiar um arquivo “arquivo01.dat” com um novo nome “arquivo02.dat” usamos o comando:
cp arquivo01.dat arquivo02.dat
mkdir
Esse comando é usado para criar um diretório (pasta) vazio com o nome dado pelo argumento que segue ao comando. Por exemplo, para criar um diretório com nome “novo_diretorio” no diretório atual, usa-se o comando:
mkdir novo_diretorio
rmdir
O comando “rmdir” é usado para remover (excluir) diretórios vazios. Tem uso semelhando ao comando “mkdir”. Por exemplo, para remover o diretório “novo_diretorio” do diretório atual, usa-se o comando:
rmdir novo_diretorio
rm
O comando “rm” pode ser utilizado para remover arquivos, ou até mesmo diretório não-vazios (que não podem ser excluídos com o rmdir). Para remover um arquivo com nome “arquivo01.dat”, usamos o comando:
rm arquivo01.dat
Enquanto que para remover um diretório não-vazio “novo_diretório” usamos o comando
rm -r novo_diretorio
Podem haver casos em que seja preciso incluir o argumento -f para “forçar” a remoção do arquivo ou diretório.
cat
O comando “cat” escreve todo o conteúdo de um arquivo de texto na tela. Por exemplo, dado um arquivo de texto “arquivo.dat” com o conteúdo de em formato de texto (ou dados de uma simulação), isso pode ser visto com
cat arquivo.dat
head e tail
Quando o arquivo que queremos ver o conteúdo é muito grande, podemos escolher mostrar apenas uma pequena parte do início, ou uma pequena parte do final. Para mostrar uma parte do início, usamos o comando head. Enquanto que para mostrar o parte final do arquivo, usamos o comando tail. Por exemplo, para mostrar as primeiras 10 linhas do arquivo “input.fdf”, o comando é:
head input.fdf
De forma semelhante, para mostrar as últimas 10 linhas do arquivo “input.fdf”, o comando é:
tail input.fdf
Para modificar o número de linhas que queremos mostrar usa-se o argumento -n seguido do número de linhas e do nome do arquivo. Por exemplo, para mostrar as 50 primeiras linhas de um arquivo “input.fdf”, usamos o comando:
head -n 50 input.fdf
O argumento -n também se aplicado ao comando tail.
O comando
tail -F arquivo.out
pode ser usado para acompanhar a escrita de um arquivo arquivo.out em tempo real. Isso pode ser utilizado para acompanhar o arquivo de saída do nosso programa de simulação atomística, que pode demorar para ser realizada. Para sair desse modo de acompanhamento em tempo real é preciso digitar Ctrl+C.
touch
O comando “touch” cria um arquivo vazio com o nome dado pelo seu argumento. Por exemplo:
touch teste.dat
cria um arquivo vazio com o nome “teste.dat”. Se esse arquivo já existe, ele só atualiza a data e hora da última vez que o arquivo foi modificado para agora.
grep
O comando “grep” é usado para mostrar o conteúdo de um arquivo que contém a palavra-chave dada no argumento. Por exemplo, o comando
grep "palavra" arquivo.dat
vai mostrar todas as linhas do arquivo.dat que contém a palavra “palavra”.
sed
O comando “sed” é utilizado para substituir uma ou mais palavras em um arquivo por outra coisa. Por exemplo, o comando
sed "s/antigo/novo/g" arquivo_antigo.dat > arquivo_novo.dat
Substitui as palavras “antigo” dentro do arquivo “arquivo.dat” pela palavra “novo”. O resultado é salvo no novo arquivo “arquivo_novo.dat”. Se o “> arquivo_novo.dat” não for digitado no comando, o texto do arquivo com as palavras substituídas serão escritos na tela.
Para substituir as palavras no mesmo arquivo, usamos o argumento “-i”. Por exemplo:
sed -i "s/antigo/novo/g" arquivo.dat
diff
Esse comando serve para comparar dois arquivos e mostrar as diferenças entre eles. Por exemplo, dado dois arquivos parecidos “arquivo1.dat” e “arquivo2.dat”, o comando
diff arquivo1.dat arquivo2.dat
mostra as diferenças entres esses arquivos. Um comando parecido, mas com o uso do editor de texto VIM, é o vimdiff. Nesse comando, o editor de texto abre duas abas com os dois arquivos e destaca as diferenças entre eles.
find
O comando “find” é usado para listar arquivos ou diretórios com um nome (ou padrão de nome) dado. Para utilizar esse comando, é preciso especificar a partir de que diretório é preciso procurar os arquivos e diretórios, e os critérios dos nomes especificados. Por exemplo, para procurar todos os arquivos *.dat no seu diretório atual, usamos o comando
find . -name *.dat
Para procurar um arquivo com nome específico “input.fdf” em todos os subdiretórios do /home/, usamos o comando
find /home/ -name input.fdf
Se não queremos diferenciar letras maiúsculas de minúsculas, usamos o argumento “-iname” ao invés de “-name”.
Também podemos especificar os argumentos “-type f” se estamos procurando somente arquivos, ou “-type d” se estamos procurando somente diretórios.
chmod
O comando “chmod” é usado para mudar as permissões de um arquivo. Por exemplo, arquivos de somente leitura, arquivos que podem ser salvos, ou até mesmos arquivos que podem ser executados. Esse último caso é muito útil para transformar o arquivo em um script em shell que pode ser executado como um programa. Para transformar um script em shell executar.sh em um arquivo executável usamos o comando
chmod +x executar.sh
Entretanto, veja bem se a primeira linha desse script executar.sh possui o shebang, isto é, o caminho para o programa interpretador da linguagem.
df
O comando “df” é usado para mostrar como está o uso da capacidade dos discos e outros dispositivos de armazenamento de dados instalados no computador. Geralmente é utilizado com o argumento “-h” para deixar os valores de armazenamento de dados legíveis para humanos. Nesse caso, o comando para ver como está o uso dos dispositivos de armazenamento de dados é:
df -h
du
Este comando é usado para ver o tamanho dos arquivos e sub-diretórios do seu diretório atual. Por exemplo, o comando
du -sh
mostra o tamanho total do diretório atual.
du -sh *
lista todos os arquivos e sub-diretórios e fornece o tamanho de cada um desses itens.
wget
Para baixar um arquivo simples da internet, podemos usar o comando wget. O comando pode ser utilizado apenas com o wget e o link completo do arquivo como argumento. Por exemplo:
wget https://raw.githubusercontent.com/MackSimResearch/siesta-tutorials/master/omp.make
git (git clone)
Outra forma de baixar arquivos é através dos repositórios git, como do github ou gitlab. Para os repositórios git há vários comandos para gerenciamento, inclusão de arquivos, modificação de dados, e download de arquivos. Aqui vamos usar o mais básico que é para apenas baixar um repositório completo. Podemos baixar com o comento git clone. Por exemplo, o comando
git clone https://gitlab.com/siesta-project/siesta.git
é usado para baixar o repositório do programa SIESTA.
Para baixar os exemplos do tutorial do SIESTA do nosso grupo de pesquisa, o comando é:
git clone https://github.com/MackSimResearch/siesta-tutorials.git
Tutoriais mais completos sobre o git podem ser encontrados no link: https://try.github.io/
sudo
Alguns programas precisam de permissões especiais para ser executados. Um usuário padrão não tem acesso. Para isso, é necessário acrescentar o comando sudo antes do comando que precisa da permissão especial. Por exemplo,
sudo apt-get install grace
é usado para executar o programa apt-get, para instalar o programa xmgrace para fazer gráficos.
Após a execução da linha de comando acima, será requerido a senha do usuário com a permissão especial.
O sudo também é usado para acessar o modo root com o comando
sudo su
No modo root, o prompt pode ser modificado para “#” para indicar que você está no modo root com mais acesso ao sistema. É preciso de mais cuidado com o modo root, use somente quando for realmente necessário.
apt-get
Para instalar programas no linux, há o programa apt-get que pode instalar vários outros programas de modo fácil. Entretanto, para essas instalações geralmente é preciso usar também o sudo para ter permissões de instalar programa no sistema operacional. Por exemplo, o comando
sudo apt-get install grace
instala o programa xmgrace para fazer gráficos dos dados das simulações.
O programa pode ser usado com vários nomes em sequência. Por exemplo:
sudo apt-get install make gfortran libopenblas-dev libomp-dev
instala todos os programas listados depois do “install”.
ssh
O comando “ssh” (secure shell) é usado para acessar outros computadores em rede. Dado um nome de usuário “user01” e nome de máquina “machine001” com opção de acesso via ssh, podemos acessar esse computador com o comando:
ssh user01@machine001
Em alguns casos, é preciso especificar a porta de acesso. Isso é feito com o argumento “-p” e o número da porta. Por exemplo:
ssh -p 5001 user01@machine001
se a porta de acesso é a 5001.
Esse comando é importante no uso de computadores de alto desempenho (supercomputadores) com acesso remoto. Para algumas simulações atomísticas, é preciso fazer uso desse tipo de supercomputadores.
top e htop
Para analisar os processos em andamento do seu computador, podemos usar o comando top:
top
Dentro do programa, ainda podemos digitar 1 para acessar o processamento de cada núcleo do processador.
Uma versão mais moderna e melhor do comando top é o comando htop. Entretanto, esse programa não vem instalado nativamente com o linux, é preciso instalar ele antes com o apt-get:
sudo apt-get install htop
Depois do programa htop instalado, podemos utilizá-lo com:
htop
De forma semelhando ao antigo programa top.
kill
Podemos matar um processo em andamento sabendo o id do processo em execução. Esse id pode ser obtido com o programa top ou htop. Com o id, matamos o processo com o comando:
kill numero_id_do_processo
Por exemplo, se queremos matar o processo de número 6344, o comando para matá-lo é:
kill 6344