我要做一个终端登陆系统,要求去掉某些linux固有的shell命令,并增加一些自己写的命令,怎么搞?
我只知道内核源码包的某个目录下有一个后缀为“bash”的文件夹,这个文件夹的内容在内核编译好后,就是bash进程的所对应的可执行程序
bash进程就是终端运行时的进程。
我知道这个进程中有一个函数明教readline,他接受命令行参数为其参数,并根据参数值调用相应进程,已完成这个命令的功能,如:
ls -l
我现在想知道,怎样找到某个命令所对应的进程,即对应的可执行程序
这就是我的问题。
另外,正规的linux在打开终端时,首先并未运行终端对应的bash进程,还是一个登陆界面,要求输入用户名和密码。这个登陆界面对应的进程又是什么,怎么知道它是内核源代码中的哪个部分编译而来。
我们设计的系统不能用linux的固有shell命令(应该说shell命令的绝大多数“必须”去除),不管对普通用户,还是超级用户,甚至是最原始的admin用户。
你说:“增加一些自己写的命令“,道理如上,你把你增加的命令放到普通用户的系统路径就可以了~
比如我自己写了个命令"xianshi"模拟shell的"ls"功能,我把实现写出来了,也放在你说的/sbin下,但是我在命令行敲入“xianshi -l”,系统怎么知道要去调用我写的那个实现呢?
我简单说下:shell在执行一个命令时,先判断其类型,若是内建命令(等于是shell可以识别的“口令”),则表明它是shell自己实现的,那就需要调用外部命令,如果不是,就表明需要需要调用外部命令,则此时需要去在系统路径中查找对应的文件,如果找到了就传递参数并执行它,找不到就会提示command not found~
你需要做的就是去实现一些必要的工具,比如一个shell环境,(bash,zsh,csh等都是),和一些必要的命令(保证一些系统基本服务的启动,比如ifconfig这样的)。
我不准备回答你最后一个问题,你搞明白我上面说的就知道答案了
我只所以要问linux登录时,登录页面所运行的进程,是因为我想了解他的机制。因为我们要求不用linux原来的那套登录机制,而自己重新改写,并换上新的加密机制来进行密码的传输和存储。
ps aux|grep bash
我敲这个命令干啥啊,难道我不知道是bash进程在起作用吗
find /bin -name login
我找他干啥啊,找到他又不知道为什么登录界面和他关联,其实现又是什么!
我们是做一个系统,我做其中的一个模块,你三行回答就了事!高!