红联Linux门户
Linux帮助

shell学习基础

发布时间:2006-08-21 09:44:36来源:红联作者:严寒
1、登陆过程:

第一步:键入用户名和密码
第二步:系统通过查询/etc/passwd来检测是否为有效用户
第三步:如果登陆正确并且密码有效,则系统执行环境设置文件/etc/profile-->.profile。
一般情况下,root的权限太高,为了防止误操作造成系统崩溃,我现在的做法是以一个普通用户的身份登陆,重新定制环境,需要root权限时以su指令切换过去执行。这样比较安全。对于shell变量的定制,有新的理解。变量的作用很多,可以定制用户本身的工作环境,可以保存有用的信息,也可以暂时保存信息。所以出现了下面变量:

1)本地变量。只是在当前shell生命期的脚本中使用,一旦shell中启动另一个进程或者退出,则失效。好处就是不会对其他的shell或者进程产生影响。

2)环境变量。在建立嵌入式交叉编译环境的工具链时设置过环境变量,在这里算是对环境变量的位置特点比较清晰了。环境变量用于所有用户进程,登录进程称为父进程,shell中执行的用户进程称为子进程。按照传统方法,所有环境变量均为大写,这点与本地变量不同。而且,环境变量在应用于用户进程前,必须用export命令导出,而本地变量不需要。环境变量的两种定制方法前面已经掌握了,在命令行中定制用户注销时就会丢失,所以最好还是在.profile中定制。

3)位置变量。这种为特殊变量,因为它们是只读的。它的作用是向一个shell脚本传递参数,用位置参数的方式完成此功能。参数数目可以任意多,但是只有前9个可以被访问,不过使用shift命令可以改变这个限制。参数从第一个开始,在第9个结束;每个访问参数前都要加$符号。其中第一个参数为0,表示预留保存实际脚本名称,无论脚本是否有参数,此值均可用。以前为openvpn的启动看过一个脚本,实质上就是使用了位置变量。现在才理解,也能够编写此类脚本了。

4)特定参数变量。为特殊变量,只读。共有7个特定变量,在编程时用的比较多。
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项参数可以超过9个。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态,0表示没有错误,其他表明错误。

2、密码文件/etc/passwd的格式:7个域

登陆名:加密的密码:uid:gid:用户全名:用户home目录:用户的shell路径
以前总结过忘记root密码的处理方法,当时只是依葫芦画瓢,现在才明白原理。只要将加密的密码域去除,密码自然也就没有了。即“::”
文章评论

共有 0 条评论