1.在shell脚本中改变当前目录
cd只能改变current目录,因此不能指望在一个脚本中实现cd ...(long path)的目的,脚本是通过fork/exec执行的,等于说在一个新的进程环境中执行的,一旦这个脚本执行完毕,当前进程的pwd还将是原来的shell的pwd,shell脚本中的cd对pwd的改变随着shell脚本的exit而一同消失,还是老老实实敲路径吧,其实为了避免敲过于长的路径,可以将自己的登录路径设置成那个很长的路径,另外shell提供了一个方法,那就是用source执行脚本,source和cd一样,都是shell的内建命令,当你执行source abc的时候,并不会以fork/exec的方式来执行abc而是直接读取abc的每一行,读一行便执行一行,但是要注意,用source执行shell脚本的时候,脚本中不要有exit,否则一下子连shell都退出了
2./etc/passwd维护了一个uid和用户名的对应关系,而很多程序比如ls -l都需要这个映射关系,因此所有的用户都必须对该文件可读
cd只能改变current目录,因此不能指望在一个脚本中实现cd ...(long path)的目的,脚本是通过fork/exec执行的,等于说在一个新的进程环境中执行的,一旦这个脚本执行完毕,当前进程的pwd还将是原来的shell的pwd,shell脚本中的cd对pwd的改变随着shell脚本的exit而一同消失,还是老老实实敲路径吧,其实为了避免敲过于长的路径,可以将自己的登录路径设置成那个很长的路径,另外shell提供了一个方法,那就是用source执行脚本,source和cd一样,都是shell的内建命令,当你执行source abc的时候,并不会以fork/exec的方式来执行abc而是直接读取abc的每一行,读一行便执行一行,但是要注意,用source执行shell脚本的时候,脚本中不要有exit,否则一下子连shell都退出了
2./etc/passwd维护了一个uid和用户名的对应关系,而很多程序比如ls -l都需要这个映射关系,因此所有的用户都必须对该文件可读
3.getspnam函数的行为其实就是对/etc/password文件的f2i行为,将文件数据转换为了内部数据,但是为何不将password文件也定义成二进制的呢,比如utmpx文件一样?将password定义成二进制是非常方便的,每一行一个记录,一条记录对应一个结构体,若干个记录正好是一个结构体数组,岂不很好?是很好,但是那样做的话每个需要读取password文件的程序都应该知道这个结构体的文档描述,如果是文本文件,虽然每个程序也依然需要知道文件各个字段的含义,但是却可以将说明文档写入同一个文件中,比如用注释的形式存在,unix和linux中很多配置文件都是这样的,没有单独的文档,顶多一个随程序安装的man/info,由于文档是文本的,因此为了将文档和对应的文件集成,文件也最好是文本的,编程者看见了文件,同时也可以随即参考文档,最终看懂了文件,开始编码,省去了文档的管理,这也许就是unix使用人可读的文本格式的深层次的原因吧。
本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271807