- 论坛徽章:
- 0
|
1/11/2008
by yifengzhang21c
RHCT033总结(一)
RHCT033是redhat网络技师课程之一,属于基础部分,并不难.我归纳了下,大概分如下几个部分来学习:bash和常见命令工具(U6,U7,U8,U12,U13);用户,组权限管理与高级管理(U5,U15);vim(U9);system admin基础(U1,U2,U3,U10,U11,U14,U17,U18);file system及常见管理工具(U4,U16).以上归纳仅为个人观点,不代表redhat官方建议.
由于redhat认证教材版权属于redhat所有,因此我没有权利发布其内容,以下内容仅为笔记整理,并不代表官方资料.有准备RHCT/RHCE考试的朋友,仅供参考!欲了解更多信息,请与redhat(
www.redhat.com
)或者各地redhat总代理联系.
bash scripts and some command tools
/*这部分内容主要是.4th.Edition的读后感,个人觉得这本书写的非常好,有N多可以动手的实践题目很容易上手,同时又不缺理论支持,可以说是柔中带刚吧.另外,它含概了redhat033bash部分的全部知识点.如果你希望尽快上手,希望我的文章可以给大家带来帮助.如果希望系统学习,建议你去阅读原版教材.*/
一些基本常识:
1.Linux命令格式:command [options] [arguments]
2.Linux系统启动的第一个进程init,PID为1,init初始化系统并打开终端线路,分别为stdin,stdout,stderr.可以通过下面命令查看它们对应的设备
[root@localhost dev]# ls -l /dev/std*
lrwxrwxrwx 1 root root 15 Jan 8 08:04 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Jan 8 08:04 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Jan 8 08:04 stdout -> /proc/self/fd/1
3.shell与命令的执行过程
![]()
理解这个图,是很重要的,它讲述了shell是如何执行一个终端输入的命令.
首先在命令提示符后面输入命令,然后shell检查这个命令是否为内部指令,如果是,则执行;不是则派生一个子shell,这个子进程检查程序是否为可执行程序,是则内核将其载入内存,并在子进程中执行,执行后退出,唤醒父进程;否则检查是否到达脚本程序结尾,是则退出,否则重复上一个过程.
4.命令类型:
(1)别名:原有命令缩写
(2)函数:由一组指令组成的命令集
(3)内置命令:shell内部程序
(4)可执行程序:存放在磁盘上的程序,有shell路径变量在磁盘上定位.
5.命令类型执行顺序:
(1)别名
(2)关键字
(3)函数
(4)内置命令
(5)可执行程序
6.进程简介:
进程是正在运行的程序,可以用它唯一的PID表示.kernel负责控制和管理进程.进程由可执行程序,进程的数据和堆栈,程序指针,堆栈指针,寄存器以及程序运行时需要的所有信息组成.
查看进程的命令:ps/pstree
系统调用(system call)
system call是对kernel服务的请求,并且是系统访问系统硬件的唯一方式.有大量系统调用可以创建,执行和终止进程.
e.g:在终端输入命令,由shell找到并执行的过程就是system call.
7.创建进程
(1)系统调用fork
在UNIX系统中进程是通过系统调用fork创建的.系统调用fork创建调用进程的一个副本.新创建的这个进程成为子进程(child),创建它的进程称为父进程(parent).fork调用完后,子进程立即开始运行,最初阶段,父进程共享CPU,子进程还将得到父进程信息的 副本,包括环境,打开的文件,真实且有效的用户标识,umask,当前工作目录和信号.
e.g:当用户在终端键入命令时,shell会去判断该命令是否为内部命令,这和前面介绍过的一样,如果是本地命令,则在本地执行;如果是磁盘上的可执行程序,shell就调用fork创建一个进程副本,子进程通过shell路径变量查找该可执行程序并且执行它.在子进程执行时,父进程处于wait状态.
(2)进程调用wait
当子进程处理重定向,管道和后台进程等细节时,父shell进入睡眠状态.系统调用wait导致父进程挂起,直至它的子进程终止.如果wait调用成功,它将返回死去进程的PID和子进程的退出状态.如果父进程没有等待,子进程就进入僵尸状态.并且保持这个状态直至父进程调用wait或死亡.如果父进程先与子进程死亡,则init进程会处理遗留的僵尸子进程.因此系统调用wait不仅仅用于让父进程进入睡眠状态,还可用于保证进程正常终止.
(3)系统调用exec
在终端输入一条命令后,shell通常会派生一个新的shell进程,即子进程.子shell负责运行用户输入的命令.它通过系统调用exec实现这一点.用户命令其实就是可执行程序.shell在路径中查找新程序.如果找到shell就以命令的名字作为参数调用系统调用exec.内核把新程序加载到内存.替换掉调用它的shell.于是子shell便被这个新程序覆盖.新程序成为子进程并开始执行.虽然新进程有自己的局部变量,但是所有的环境变量,打开文件,信号和当前工作目录还是会保留.这个进程结束后就退出,然后唤醒父shell.
(4)系统调用exit
新程序随时可以通过调用exit终止.子进程终止时,会向父进程发出一个信号(sigchild)并等待父进程接受它的退出状态.退出状态是一个0-255之间的数,退出状态为0,说明程序成功退出;不为0表示发生了某种错误.
e.g:
[yfz@localhost ~]$ ls
Desktop
[yfz@localhost ~]$ echo $?
0
[yfz@localhost ~]$ haha
bash: haha: command not found
[yfz@localhost ~]$ echo $?
127
(5)系统调用fork,wait,exec,exit综合举例:
![]()
1)父shell通过系统调用fork创建自己的一个副本.这个副本称为子shell.
2)子shell有一个新的PID,是父进程的副本.它将和父进程共享CPU.
3)内核把grep程序载入内存,并且执行(exec)它,替换掉子shell.grep程序继承了子shell的已打开文件和工作环境.
4)grep程序退出.内核负责清理工作,父进程被唤醒.
8.交互式bash
(1)查看当前bash版本:
[yfz@localhost ~]$ bash --version
GNU bash, version 3.1.17(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
[yfz@localhost ~]$ echo $BASH_VERSION
3.1.17(1)-release
(2)修改用户shell:
修改/etc/passwd中相应用户的最后一个字段,可以使用你熟悉的编辑器,RHEL5推荐使用nano或者vi,emacs等都可以.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27173/showart_462556.html |
|