
1.若非根目录挂载分区出现错误(如 /dev/hda1),那么在开机过程中,使用root身份运行 fsck /dev/hda1来检查文件系统是否有错误,如果发现有错误,就会显示Clear[Y/N]:直接输入y就行了,
之后重新启动,就可以了。
2.若根目录挂载的分区出现错误,那么就将硬盘拆下来,装在另一个运行linux系统的机器上(不要挂载),然后使用 root身份运行 fsck 来检查根目录分区,如果发现有错误,就会显示Clear[Y/N]:直接输入y就行了,然后将硬盘重新安装在之前的机器上,启动,一切ok了。
楼主,shell 接收到一个 非内部命令 (如 ls, find)时,不是把命令提交给内核的,这个概念是错误的。 shell 应该是 fork 出一个进程,这个子进程调用 exec* 系列系统调用 (比如 execlp 等)来载入ls, find等可执行程序执行, 而此时的shell进程本身会 通过 wait 系统调用等待子进程完成。由上可见,一个进行拦截的地方可以放在 exec 系列调用中,exec是实现在 glibc 里的,所以你只要下载 glibc (或者你们系统使用的 libc )的源码,在 exec 调用中加入你的拦截代码。 编译修改后的glibc,替换系统中的glibc即可。
另外要注意的是,除了shell,其他程序也可能使用 fork+exec 来执行某些命令,如果不想拦截这种情况,在拦截时需判断一下当前进程的父或祖进程,看看是否是shell进程。
最后,glibc实在是太重要了,是所有程序的基础,改动需小心。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)