This question is very baud as Kusalananda points out. There are a few high level points that might be useful to understand that I couldn't easily fit in comments...
The kernel is not directly responsible for processioning commands in the shell. The shell is a program in it's own right. The shell interprets text input from the user into commands and then performs tasks based on those commands.
It's also important to understand there are several different shells available for Linux including Bash, KSH and ZSH. So the exact syscalls used by a shell may vary a little depending on which shell you're using.
In general, some commands are built directly into the shell but many are actually programs located in directories listed in the PATH
environment variable. This means that for many commands, the action taken by the shell is to execute another program. It does this with syscalls fork
then exec
.
Example:
vi /etc/passwd
The shell doesn't know or care what /etc/passwd
is. It only knows that vi
is a program (/usr/bin/vi
). It executes vi using fork(), exec() passing the text "/etc/passwd" as an argument to exec(). It then calls wait
to wait for vi to complete and get the return value.
The kernel takes no interest in the "/etc/passwd" string. It is passed to vi and vi then interprets this as a file to open. vi is responsible for calling open
to open the file and it's only at this stage the kernel checks if the current user is allowed to open the file.
As stated the exact syscalls used vary a lot and as Kusalananda points out, the question is far too baud to list everything done by the shell but the basic fork() exec() wait() is a common pattern when running any program.