Para obter o uid, escreva seu próprio programa em C (ou algum plugin do shell, se o seu shell os aceita; o FYI zsh pode ter plugins, chamado módulos .) ou mais simplesmente execute o id (1) .
Para outros syscalls (listados em syscalls (2) ), é o mesmo: use algum programa (ou algum embutido ou algum plugin) fazendo-os. Esse programa poderia ser codificado diretamente no assembler e usaria SYSCALL
ou SYSENTER
instruções da máquina para fazer a chamada do sistema, ou (e com muito mais frequência) usaria sua C biblioteca padrão e use a função libc
fazendo isso syscall. Executáveis não precisam ser obtidos a partir da fonte C (por exemplo, busybox é codificado em assembler, o Scheme bones não usa libc). No entanto, o seu libc
é a pedra angular do seu sistema.
As chamadas do sistema que alteram algumas propriedades mutáveis e herdáveis dos processos devem ser integradas no shell (como cd
para chdir (2) , ulimit
para setrlimit (2) , etc ...), porque você pode querer alterar a propriedade no próprio processo do shell (e herdado por futuros processos de comando iniciados pelo shell). Portanto, se cd
fosse um programa, isso se aplicaria apenas ao processo filho do shell que executa esse programa.
BTW, chamadas do sistema só fazem sentido quando feitas de alguns process . Esse processo pode ser o processo shell ou algum processo filho (ou descendente) iniciado pelo shell.
Observe que os shells Unix são programas comuns. Existem muitos deles (por exemplo, zsh , peixe , < a href="https://scsh.net/"> scsh , es , etc ....) ... É um exercício interessante para codificar sua própria shell (e isso pode ser feito simplesmente, veja sash para um exemplo, veja também este para dicas sobre globbing). Leia algo sobre programação do Linux . Se você não está feliz com bash
use outro shell (talvez alterando seu shell de login usando chsh (1 ) ) ou escreva o seu próprio. Além disso, o bash do GNU é, como a maioria dos outros shells, software livre . Você pode estudar seu código-fonte e melhorá-lo se quiser.