Comandos Internos e Externos [RESOLVIDO]

1. Comandos Internos e Externos [RESOLVIDO]

Rafael Duval Lüdtke
Ludtke

(usa Linux Mint)

Enviado em 28/09/2018 - 01:05h

Pessoal, estou estudando linux e me deparei com comandos internos e externos, vi a diferença entre eles, sendo o primeiro executado na memória RAM e o segundo usando o Path no disco. Gostaria de saber qual a necessidade de ter-se estes comandos separados e o motivo desta separação. Valeu! Se tiverem alguma dica de por onde estudar com eficiência estou aceitando, estudo por apostilas.


  


2. MELHOR RESPOSTA

Palomo
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.


3. Comandos Internos e Externos

Rafael Duval Lüdtke
Ludtke

(usa Linux Mint)

Enviado em 28/09/2018 - 19:35h

darksrc obrigado, explicou até mais do que eu desejava entender e sempre é bom informações extras. Entendi o que disseste, mas me confirma se deduzi corretamente o que escrevo a seguir: O Shell quando iniciado, carrega consigo comandos básicos como o echo, cd, exit e help. e somente se requisitado outro comando que não esteja nos internos ele irá buscar no disco ( Comandos externos). Ou seja, todos os comandos estão armazenados em pastas, porém alguns já são carregados junto com o Shell e outros somente se requisitados pelo usuário?
Minha dúvida era o porquê separar comandos internos e externos, mas se entendi bem, eles não são separados, só que os internos são carregados antecipadamente como shell enquanto os externos são carregados quando requisitados. Essa dedução está correta?


4. Re: Comandos Internos e Externos [RESOLVIDO]

Mac
Skylen

(usa Debian)

Enviado em 28/09/2018 - 21:27h

Boa noite,

Os comandos internos (como cd, help, exit, echo), são carregados diretamente pelo bash na memória RAM. Por sua vez, os comandos externos como path, ls, mount, entre outros, são carregados no disco. Porém a diferença na questão na separação entre comando interno e externo está na economia da memória RAM.

Estou usando as apostilas encontradas neste site:
http://www.guiafoca.org


5. Re: Comandos Internos e Externos [RESOLVIDO]

Palomo
palomo

(usa Arch Linux)

Enviado em 28/09/2018 - 22:28h

Ludtke escreveu:
Minha dúvida era o porquê separar comandos internos e externos, mas se entendi bem, eles não são separados, só que os internos são carregados antecipadamente como shell enquanto os externos são carregados quando requisitados. Essa dedução está correta?


Está sim como o Skylen disse a separação se dá pelo motivo de economia de memoria, desempenho e a propria segurança do shell.. Até onde entendi os comandos externos são carregados mas apenas como um atalho para o arquivo do comando.. assim comandos como cd, exit, echo são carregados no proprio shell como se fossem escritos junto com o shell... imagina o tamanho do shell para guardar todos os comandos externos nele? sem contar que daria muito pau.. pois eu posso usar um determinado software e criar um comando externo para ele.. mas se eu migra-se esse shell para outro computador daria pau pois não tem o software que continha no pc anterior.. ia quebrar os paths... sacou essa separação se da pq cada sistema se comporta de um jeito o shell foi escrito para ser executado no modo minimal em qualquer pc.. ou seja cd, mkdir, echo ...




6. Re: Comandos Internos e Externos [RESOLVIDO]

Rafael Duval Lüdtke
Ludtke

(usa Linux Mint)

Enviado em 29/09/2018 - 08:08h

Obtive melhor entendimento pessoal, obrigado a todos mesmo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts