## page was copied from ROS/Tutorials/catkin/NavigatingTheFilesystem
<<TOC(4)>>

== Pré-requisitos ==
Neste tutorial, vamos inspecionar um pacote em ros-tutorials, instale-o com o seguinte comando

{{{
$ sudo apt-get install ros-<distro>-ros-tutorials
}}}

Substitua '<distro>' com o nome da sua [[Distributions|distribuição de ROS]] (por exemplo: kinetic, lunar, melodic etc.)

== Visão Geral dos Conceitos de Sistema de Arquivos ==
 * '''Pacotes:''' Pacotes são a unidade básica de organização de software em ROS. Cada pacote pode conter bibliotecas, executáveis, scripts ou outros artefatos.
 * '''Manifesto ([[catkin/package.xml|package.xml]]):''' Um manifesto é uma descrição de um  ''pacote''. É utilizado para definir dependências entre ''pacotes'' e para coletar meta-informação a respeito do pacote tal como versão, mantedor, licença, etc...

{{{{#!wiki blue/solid
<<SeeSaw()>>{{{  }}}<<SeeSaw(stacks, toshow="Nota sobre stacks")>>
{{{#!wiki seesaw/stacks section
'''Nota:''' Usuários de [[rosbuild]] podem estar se perguntando onde foram parar os 'stacks', o conceito de stacks foi removido no catkin para simplificar a crescente base de código e para suportar uma melhor distribuição de pacotes. Em [[catkin]] você pode definir [[catkin/migrating_from_rosbuild#Metapackages_and_the_Elimination_of_Stacks|metapackages]] para coletar pacotes similares e múltiplos pacotes podem viver num mesmo repositório de controle de versão. Essas duas funcionalidades substituíram o que os stacks faziam.
}}}
}}}}
== Ferramentas do Sistema de Arquivos ==
O código é espalhado através de muitos pacotes ROS. Navegando com ferramentas de linha de comando tais quais `ls` e `cd` pode se tornar bastando tedioso. Justamente por isso que o ROS disponibiliza ferramentas para lhe auxiliar.

=== Utilizando rospack ===
[[rospack]] permite você adquirir informações sobre pacotes. Neste tutorial, iremos simplesmente cobrir a utilização da opção `find`, que retorna o endereço do pacote.

Uso:

{{{
$ rospack find [nome_do_pacote]
}}}
Exemplo:

{{{
$ rospack find roscpp
}}}
Deveria retornar:

 . {{{
DIRETÓRIO_DE_INSTALAÇÃO/share/roscpp
}}}

Se você instalou ROS Kinetic, por exemplo, a partir do `apt` no Ubuntu, você deve ver exatamente:

 . {{{
/opt/ros/kinetic/share/roscpp
}}}

=== Utilizando roscd ===
`roscd` é parte da suíte [[rosbash]]. Esse comando permite que você mude de diretório ([[http://ss64.com/bash/cd.html|cd]]) diretamente à um pacote ou stack.

Uso:

{{{
$ roscd [local[/subdiretório]]
}}}
Execute este exemplo:

{{{
$ roscd roscpp
}}}
Para verificar que mudamos para o diretório do pacote roscpp, vamos imprimir o diretório atual utilizando o comando Unix [[http://ss64.com/bash/pwd.html|pwd]]:

{{{
$ pwd
}}}
Você deveria ver:

 . {{{
DIRETÓRIO_DE_INSTALAÇÃO/share/roscpp
}}}

Você pode notar que `DIRETÓRIO_DE_INSTALAÇÃO/share/roscpp` é o mesmo local que `rospack find` retornou no exemplo anterior.

Note que [[roscd]], assim como outras ferramentas do ROS, vai ''apenas'' encontrar pacotes ROS que estão nos diretórios listados na sua variável de ambiente [[ROS/EnvironmentVariables#ROS_PACKAGE_PATH|ROS_PACKAGE_PATH]]. Para ver o que está na sua [[ROS/EnvironmentVariables#ROS_PACKAGE_PATH|ROS_PACKAGE_PATH]], digite:

{{{
$ echo $ROS_PACKAGE_PATH
}}}
Sua variável [[ROS/EnvironmentVariables#ROS_PACKAGE_PATH|ROS_PACKAGE_PATH]] deve conter uma lista de diretórios onde você tem pacotes ROS, separados por `:`. Uma [[ROS/EnvironmentVariables#ROS_PACKAGE_PATH|ROS_PACKAGE_PATH]] típica deve parecer com isso:

 . {{{
/opt/ros/kinetic/base/install/share
}}}

Assim como outras variáveis de ambiente, você pode adicionar diretórios à sua variável [[ROS/EnvironmentVariables#ROS_PACKAGE_PATH|ROS_PACKAGE_PATH]], com cada caminho separado por dois pontos ':'.

==== Subdiretórios ====
[[roscd]] permite que você se mova para um subdiretório de um pacote ou 'stack'.

Faça:

{{{
$ roscd roscpp/cmake
$ pwd
}}}

Você deve ver:

 . {{{
DIRETÓRIO_DE_INSTALAÇÃO/share/roscpp/cmake
}}}

=== roscd log ===
`roscd log` vai lhe levar para a pasta onde o ROS armazena arquivos de log. Perceba que se você não rodou nenhum programa ROS, isto gerará um erro dizendo que tal pasta ainda não existe.

Caso você já tenha executado algum programa ROS anteriormente, faça:

{{{
$ roscd log
}}}
=== Utilizando rosls ===
[[rosbash#rosls|rosls]] faz parte da suíte [[rosbash]]. Esse comando permite que você visualize o interior de um pacote diretamente pelo nome, ao invés de informar o caminho absoluto para a pasta (como o comando [[http://ss64.com/bash/ls.html|ls]]).

Utilização:

{{{
# rosls [local[/subdir]]
}}}
Exemplo:

{{{
$ rosls roscpp_tutorials
}}}
Deve retornar:

 . {{{
cmake  launch  package.xml  srv
}}}

=== Completar com TAB ===
Digitar o nome de um pacote inteiro pode ser um tanto quanto tedioso. No exemplo anterior, `roscpp_tutorials` é um nome bastante longo. Por sorte, algumas ferramentas ROS têm suporte para [[http://en.wikipedia.org/wiki/Command_line_completion|completar com TAB]].

Comece digitando:

{{{
# roscd roscpp_tut<<< agora aperte a tecla TAB >>>
}}}
Após pressionar a tecla '''TAB''', a linha de comando deve preencher o resto:

{{{
$ roscd roscpp_tutorials/
}}}
Isto funciona porque `roscpp_tutorials` é atualmente o único pacote ROS que começa com `roscpp_tut`.

Agora tente digitar:

{{{
# roscd tur<<< agora tecle TAB >>>
}}}
Após pressionar a tecla '''TAB''', a linha de comando vai preencher o máximo possível:

{{{
$ roscd turtle
}}}
Entretanto, neste caso existem vários pacotes que iniciam com `turtle`. Tente pressionar '''TAB''' duas vezes rapidamente. Isso deve imprimir na tela todos os pacotes ROS que iniciam com `turtle`:

 . {{{
turtle_actionlib/  turtlesim/         turtle_tf/
}}}

Na linha de comando você deve ter:

{{{
$ roscd turtle
}}}
Agora digite un `s` após `turtle` e então pressione '''TAB'''

{{{
# roscd turtles<<< agora pressione TAB >>>
}}}
Já que não existe apenas um pacote que inicia com `turtles`, você deve ver:

{{{
$ roscd turtlesim/
}}}
== Revisão ==
Você talvez tenha notado um padrão com a nomeação das ferramentas ROS:

 * rospack = ros + pack(age) // (package = pacote)
 * roscd = ros + cd
 * rosls = ros + ls

{{{{#!wiki blue/solid
<<SeeSaw()>>{{{  }}}<<SeeSaw(stacks, toshow="Nota sobre cd e ls")>>
{{{#!wiki seesaw/stacks section
'''Nota:''' cd e ls são ferramentas de linha de comando bastante comuns em ambientes Linux (e outros obviamente). cd = Change Directory, ls = LiSt.
}}}
}}}}
Esta convenção de nomeação se mantém por várias outras ferramentas ROS.