palomo
(usa Arch Linux)
Enviado em 28/09/2018 - 09:47h
Não entendi muito bem sua pergunta... mas vou tentar explicar até onde eu entendo... se estiver falando bobagens desconsidere sou iniciante tbm...
Comandos Internos -> Ponto de vista Rede
São comandos executados em um shell local.
Comandos Externos -> Ponto de vista Rede
São comandos executados em uma rede atravez de um shell remoto.
Comandos Internos -> Ponto de vista do Shell
Quando o shell é carregado , juntamente com ele vem alguns comandos padrões como
cd, mkdir, ls. Estes comandos são previamente embutidos no shell.
Comandos Externos -> Ponto de vista Shell
São comandos configurados usando um $PATH como já foi dito por você... Por exemplo o Java e o JavaC não são comandos nativos do shell, logo não serão carregados no shell. Para resolver isso apos a instalação de uma JRE ou JDK será criada uma pasta contendo os arquivos da JVM. um $PAHT então é alocado no shell indicando o caminho até o comando java. por exemplo
o caminho é
/usr/lib/jvm/default/bin/java. = o comando java
um exemplo disso é o uso do
alias.
dentro da pasta
/usr/lib/jvm/default/bin/ existe um arquivo
jshell o comando jshell não é nativo do terminal.. portanto eu usarei o
alias para tornal ele nativo indicando seu $PATH ou apenas seu PATH.
alias jshell="/usr/lib/jvm/default/bin/jshell"
você deve ter notado que eu posso indicar o path usando $PATH ou apenas usando o PATH normal. quando usamos $ indicamos que aquilo é uma variavel do sistema. por exemplo execute:
echo $HOME
e você vai notar que ele vai imprimir o nome do diretorio home seu. logo você imagina que eu posso criar variaveis para qualquer caminho no exemplo da JVM la.. eu poderia executar.
$JVM = "/usr/lib/jvm/default/"
então na hora de apontar um comando interno em vez de eu passar o path inteiro manualmente posso passar usando a variavel criada.
Perigo a usar paths para comandos
Imagine no mesmo exemplo
que tenho a jvm 8 e a jvm 10 no meu sistema. eu defini que
a jvm 10 será a atual do meu sistema.. logo o java e o javac estão na versão 10.. mas preciso executar um programa na
jvm 8. logo alterei para
default a jvm 8 em vez da 10. pouco antes eu tinha criado o
alias do jshell.
fui executar o jshell e deu erro pq? disse comando nao encontrado.
a jvm 8 não possui jshell. e eu criei o alias usando o caminho /default.
pode parecer confuso mas vou tentar explicar o que aconteceu.
quando possuimos mais de uma jvm no sistema ela é armazenada no. seguinte diretorio ->
"/usr/lib/jvm/" por padrão o sistema precisa definir uma como principal então ele cria dentro dessa pasta uma pasta chamada default e nela ele copia uma jvm x para ser a padrão.
no caso acima todos os arquivos da jvm 10 estavam na pasta default.
quando criei o alias eu fiz ele usando
alias jshell="/usr/lib/jvm/default/bin/jshell"
ai teve aquela situação para eu precisar mudar a jvm logo todos arquivos da default se tornaram os mesmos da jvm 8. então na jvm 8 não possui o arquivo jshell. puts agora ferrou né quebrei o alias..
é mais ou menos..uma alternativa seria.
alias jshell="/usr/lib/jvm/jvm10/bin/jshell"
assim eu poderia usar qualquer outra jvm no default o comando jshell nunca iria quebrar.. a menos que eu delete a jvm10.
o mesmo acontece com as variaveis $nome_do_path se o caminho for alterado ou excluido tudo aquilo que tinha dependencia daquele caminho vai quebrar.
termos usado
* JRE -> Java Run-time Environment ("contem uma JVM e tudo mais nescessario para ler programas java")
* JDK -> Java Development Kit ("é onde podemos desenvolver programas java")
* JVM -> Java virtual machine ("é onde executa os programas java")
Esqueci de mencionar que quando trabalhamos com permissões de arquivos.. por exemplo um diretorio que somente usuarios root podem acessar , aquele comando que depende daquele caminho vai precisar ser executado como sudo ou root.