我要做一个终端登陆系统,要求去掉某些linux固有的shell命令,并增加一些自己写的命令,怎么搞?

2024-12-05 08:44:25
推荐回答(5个)
回答(1):

你提到的需求都是些应用层次的,没有修改内核的必要,无非是限制权限等等。

只需要自己去用root用户整理下文件设置下权限~

“去掉某些linux固有的shell命令“,你直接把你不想用户执行的命令给弄到普通用户看不到而root可以看到的路径中去就好了,比如挪到/sbin或者/usr/sbin下,并且去掉普通用户的可执行权限和文件的s标志,而且禁止普通用户对sbin或者/usr/sbin目录的访问(防止拷贝)~

“增加一些自己写的命令“,道理如上,你把你增加的命令放到普通用户的系统路径就可以了~

PS:“怎样找到某个命令所对应的进程,即对应的可执行程序”(这个说法有点问题呢~~~),还是如上,在bash在执行一个命令时,首先判断是否是内建命令(这种命令是没有可执行文件的),或者是否存在于当前环境变量路径中(/bin或者/usr/bin或者/usr/local/bin或者/opt/bin等等),或者是否指定了路径。

回答(2):

bash shell没几个内建命令。shell命令其实就是调用别的程序而已。
你这么问说明你才接触linux。ls 属于coreutils包中的,你不安装,基本上什么都没有。bash也不属于内核。

回答(3):

第一个问题.你可以用busybox编译你要用的命令.就像编译内核一样选择需要用的功能.嵌入式系统比较常用的编译方法
第二个问题.不是很理解意思
第三个问题,登录进程就是login进程.源码不清楚

回答(4):

用ps aux|grep bash。
bash 只是一个Shell
find /bin -name login

回答(5):

系统从启动后第一个内核功能是init()进程 , init() 会调用login() 进程, login() 验证成功了会调用一个指定的shell, 你要是写登陆程序需要替换的是login程序, 和shell 没有直接关系

除了init() 进程, 所有的进程都是从init() 派生出来的, 通过fork() 创建子进程,你的xianshi 是shell 通过fork() 调用的,然后用exec() 执行外部命令, 也许你是想问这点吧