Como o terminal funciona? [fechadas]

1

Explicando mais sobre isso question . São comandos como ls, cd, rm, ... aplicativos se são do que como o terminal sabe onde eles estão, e é o terminal apenas uma interface para interagir com os programas, nada mais é do que apenas programas interagindo uns com os outros ? Em segundo lugar, é bash a única linguagem que funcionará no terminal, se for apenas programas apenas interagindo uns com os outros?

    
por MathCubes 13.06.2014 / 22:48

5 respostas

6

O terminal pode ser usado para executar programas dentro de um determinado PATH - você pode encontrá-lo executando echo $PATH em um bash teminal - exemplo de saída:

/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/wilf/.local/bin:/home/wilf/bin:/usr/games

Isso é definido quando o terminal é iniciado - quando ele usa o shell BASH (padrão em muitos sistemas Linux) , ele verifica ~/.bashrc antes de iniciar. Então, quando você executa um comando, ele pesquisa o caminho do comando e executa se ele o encontrar.

Com meu exemplo $PATH acima, posso colocar um script executável em /home/wilf/.local/bin (por exemplo, extension-update de aqui ) e, em seguida, ser capaz de executar o terminal sem especificar o caminho completo para o executável (por exemplo, /home/wilf/.local/bin/extension-update , /usr/bin/firefox , etc)

    
por Wilf 13.06.2014 / 22:57
0

Terminal

O terminal é uma interface na qual você pode digitar e executar comandos baseados em texto. Pode ser muito mais rápido concluir algumas tarefas usando um Terminal do que com aplicativos e menus gráficos. Outro benefício é permitir o acesso a muitos mais comandos e scripts.

Uma tarefa terminal comum de instalação de um aplicativo pode ser obtida em um único comando, em comparação à navegação pelo Centro de Software, por exemplo.

Veja este post para mais informações.

    
por user293136 13.06.2014 / 22:53
0

fazendo um "ps -ef" você pode ver todo o processo, incluindo os processos do terminal:

tthtlc    2964     1  0 08:31 ?        00:00:02 gnome-terminal

apenas "ps" sozinho, você vê apenas o seu próprio terminal:

 PID TTY          TIME CMD
 2974 pts/0    00:00:00 bash
 6420 pts/0    00:00:00 ps

Veja "pts / 0"? Vá para / dev / pts:

ls -al
total 0
drwxr-xr-x  2 root   root       0 Jun 14 08:31 .
drwxr-xr-x 18 root   root    4420 Jun 14 08:31 ..
crw--w----  1 tthtlc tty  136,  0 Jun 14 09:03 0
crw--w----  1 tthtlc tty  136,  1 Jun 14 09:02 1
crw--w----  1 tthtlc tty  136,  2 Jun 14 09:02 2
crw--w----  1 tthtlc tty  136,  3 Jun 14 09:02 3
crw--w----  1 root   tty  136,  6 Jun 14 08:31 6
crw--w----  1 root   tty  136,  8 Jun 14 08:31 8
c---------  1 root   root   5,  2 Jun 14 08:31 ptmx

Aqui você pode ver que eu tenho 0, 1, 2 == > 3 terminal criado. O "gnome-terminal" é implementado como um processo que abre stdin, stdout e stderr no mesmo dispositivo de caractere listado acima. Primeiro, observe o pid 2974 para "bash" acima? Vá para / proc / 2974 / fd para ver todo o descritor de arquivos aberto:

/proc/2974/fd>ls -al
total 0
dr-x------ 2 tthtlc tthtlc  0 Jun 14 09:30 .
dr-xr-xr-x 8 tthtlc tthtlc  0 Jun 14 09:30 ..
lr-x------ 1 tthtlc tthtlc 64 Jun 14 09:30 0 -> /dev/pts/2
l-wx------ 1 tthtlc tthtlc 64 Jun 14 09:30 1 -> /dev/pts/2
l-wx------ 1 tthtlc tthtlc 64 Jun 14 09:30 2 -> /dev/pts/2
lrwx------ 1 tthtlc tthtlc 64 Jun 14 09:55 255 -> /dev/pts/2

Isso significa que todas as entradas / saídas / stderr para o bash vêm dos drivers de dispositivos / dev / pts.

Se você abrir vários terminais gnome e, dependendo de qual deles for o primeiro plano, o teclado real será redirecionado para o processo correspondente. ou seja, se você fizer um " strace -p <pid> " onde <pid> é o processo 2974 atualmente, a primeira vez que você digitar um caractere naquele terminal você verá imediatamente uma leitura () - aqui abaixo eu insiro múltiplos "f": / p>

read(0, "f", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "f", 1)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "f", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "f", 1)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "f", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "f", 1)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "f", 1)                         = 1

Então, é assim que um terminal funcionava em geral: ler caractere por caractere e exibir caracteres por caracteres simultaneamente (chamar "eco") na tela ao mesmo tempo. Um terminal múltiplo pode estar sendo executado ao mesmo tempo, mas somente um estará recebendo entrada direta do teclado, outros serão bloqueados na API read ().

    
por Peter Teoh 14.06.2014 / 05:10
0

O terminal é aberto no interpretador de shell padrão definido em / etc / passwd. O arquivo / etc / shells define os outros interpretadores de shell disponíveis com a sua distribuição do Ubuntu, e há alguns outros zsh para um. O shell pode executar os programas de outras linguagens de programação, mas raramente são usados como uma linguagem de programação real, como C ++, python, ruby e assim por diante.

Os shells fornecem acesso a comandos, scripts e aplicativos incorporados e executam os vários programas escritos em outras linguagens de programação, além de fornecer acesso aos muitos comandos incorporados disponíveis no Linux, desde que as dependências apropriadas do idioma estejam disponíveis. na sua instalação.

Shells são mais parecidos com algumas diferenças em comandos e sintaxe, mas o bash é o padrão e a maioria dos scripts de shell que estão prontamente disponíveis são escritos na sintaxe bash.

Outras shells, sh = shell Bourne, bash = Boure novamente shell, pdksh = shell korn de domínio público, zsh = z shell, shell csh = c, shell ksh = korn e vários outros. Cada um com seu próprio sabor de sintaxe e comandos, conclusão, expansão. Mas todos têm uma coisa em comum: sua principal função é permitir o acesso ao controle, gerenciamento, monitoramento e administração geral do Linux e do Ubuntu.

    
por RCF 14.06.2014 / 05:31
0

Acho que a maioria das coisas é respondida. Eu só quero adicionar.

Você pode executar qualquer aplicativo do terminal. Mesmo o não terminal (Application Like Chrome / firefox) será executado a partir do terminal.

Para executar qualquer aplicativo, o usuário precisa conhecer o caminho do arquivo desse aplicativo e chamar o aplicativo usando esse local de arquivo. por exemplo

  /bin/ls 

mas para conveniência do usuário, o PATH é definido. e a aplicação desses caminhos pode ser chamada sem chamar o caminho completo. é por isso que você pode executar esses comandos:

ls 
cat a_simple_text_file.txt
firefox    ## this is the same as double clicking the firefox icon in your desktop

Você pode escrever seu próprio script de shell e executá-lo no terminal. E você pode escrever um programa, usando qualquer linguagem de programação (C, C ++, python, Java, Objective-C, PHP), ele pode ser executado no terminal. cada linguagem de programação tem seu próprio jeito de mostrar a saída e pegar a entrada e construir a auto-execução.

% bl0ck_qu0te%

Tecnicamente, os programas não interagem uns com os outros. todo o pedido de programa OS, OS interage com todos. (SO significa Sistema Operacional, Ubuntu / Windows / OSX, etc.)

Por exemplo. Você quer fazer upload de um arquivo usando o firefox. quando você clica em um botão de upload em um site. O firefox será solicitado ao SO para um aplicativo gerenciador de arquivos. O gerenciador de arquivos fará sua escolha e enviará o local do arquivo para o SO > > Raposa de fogo. O Firefox fará o upload do arquivo solicitando o sistema operacional para usar outros aplicativos.

Agora você pode dizer, o sistema operacional também é um programa. Então, os programas interagem uns com os outros !!

    
por Nafis Ahmad 14.06.2014 / 07:05