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 comandomkdir” é 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