LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1350|回复: 23

update的疑问

[复制链接]
发表于 2008-10-9 11:02:07 | 显示全部楼层 |阅读模式
在emerge *-*的时候,老是能够看见etc-update的相关信息,也就按照做了,可以老得都看一遍,然后选择u,去更新,有没有办法直接都更新,不用每次都手动?

在安装的过程中,还有env-update和rc-update,从字面理解,应该是rc-update负责更新rc.d里边的内容,可是env-update是更新什么的?能够起到什么作用,MAN了一下,发现更新的是三个地方,env-update  reads  the  files in /etc/env.d and automatically generates   /etc/profile.env and  /etc/ld.so.conf. 这三个地方都不是很明白做什么的,麻烦大家解释一下。

env-update  reads  the  files in /etc/env.d and automatically generates
/etc/profile.env and  /etc/ld.so.conf.   Then  ldconfig(8)  is  run  to
update  /etc/ld.so.cache.  env-update is run by emerge(1) automatically
after each package merge.  Also, if you make changes to /etc/env.d, you
should  run env-update yourself for changes to take effect immediately.
Note that this would only affect  new  processes.   In  order  for  the
changes  to  affect  your  active  shell, you will probably have to run
source /etc/profile first.

而且里边说,env-update is run by emerge(1) automatically
after each package merge,是不是前边两个文件,不应该手动更改?因为更改后,只要emerge任何东西,都会被覆盖掉?不知道我的理解对不对?

谢谢
发表于 2008-10-9 11:51:57 | 显示全部楼层
配置文件有时候一定要手工改的
比如当你对某个文件做过修改的话,你会希望新版本的配置文件同样包含这些修改
否则就被全部替换掉了,你原来的修改就找不到了
etc-update的时候可以先挑自己曾经修改过的配置文件来改
之后,对于自己没有修改过的文件,选择-5

/etc/profile会source /etc/profile.env
gentoo里所有的软件如果要增加全局环境变量就把这些变量函数写入/etc/etc.d里的一个文件里,env-update之后,这些变量就进入/etc/profile.env,下次登录或者直接source /etc/profile,这些变量就会起效

LDPATH变量比较特殊,它会进入/etc/ld.so.conf
/etc/ld.so.conf决定了你的系统里动态连接库的路径
也就是so文件的查找路径
比如你有一个不知道何处得来的编译好的软件,包含一些独有的so文件,你随便把他放在一个什么路径,那么这个软件执行不起来。如果so文件的路径加入ld.so.conf,然后执行ldconfig,之后就可以执行了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-9 12:41:28 | 显示全部楼层
首先感谢ZHLLG的回复,谢谢了

看了下我的/etc/profile.env

# THIS FILE IS AUTOMATICALLY GENERATED BY env-update.
# DO NOT EDIT THIS FILE. CHANGES TO STARTUP PROFILES
# GO INTO /etc/profile NOT /etc/profile.env

export CONFIG_PROTECT_MASK='/etc/udev/rules.d /etc/fonts/fonts.conf /etc/gconf /etc/terminfo /etc/revdep-rebuild'
export CVS_RSH='ssh'
export DCCC_PATH='/usr/lib/distcc/bin'
export DISTCC_LOG=''
export DISTCC_VERBOSE='0'
export GCC_SPECS=''
export GDK_USE_XFT='1'
export INFOPATH='/usr/share/info:/usr/share/binutils-data/i686-pc-linux-gnu/2.18/info:/usr/share/gcc-data/i486-pc-linux-gnu/4.1.2/info:/usr/share/gcc-data/i686-pc-linux-gnu/4.1$
export LESS='-R -M --shift 5'
export LESSOPEN='|lesspipe.sh %s'
export MANPATH='/usr/local/share/man:/usr/share/man:/usr/share/binutils-data/i686-pc-linux-gnu/2.18/man:/usr/share/gcc-data/i486-pc-linux-gnu/4.1.2/man:/usr/share/gcc-data/i686$
export OPENGL_PROFILE='xorg-x11'
export PAGER='/usr/bin/less'
export PATH='/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.1.2:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2'
export PRELINK_PATH_MASK='/usr/lib/gstreamer-0.10'
export PYTHONPATH='/usr/lib/portage/pym'
export ROOTPATH='/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.1.2:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2'
export http_proxy='10.254.6.5:8080'

有一个问题,看到全局变量的赋值是通过export命令完成的,测试了下,这个文件应该是用指定的SHELL执行的,因为我在里边添加了一条测试的

mount  /dev/sda3 /mnt

source /etc/profile的结果是没有找到mount命令。
echo   "hahaha"
可以得到正确的输出。

那么使用哪个SHELL的定义是在哪个位置得到的呢?

既然是SHELL的环境配置,那么和$SHELL.env之间有什么关系呢?在这个思路的引导下,发现,居然csh.env==profile.env==profile.csh 为什么要重复三次来定义这些变量呢?而且测试了下,三个文件不是hardlink出来的。
又测试了一下,将这三个文件,里边添加echo "文件名",用SOURCE /ETC/PROFILE
得到的是profile.env,说明并没有加载其他两个,
那么其他两个会在什么情况下加载呢?
回复 支持 反对

使用道具 举报

发表于 2008-10-9 12:58:46 | 显示全部楼层
shell是在/etc/passwd里定义的
每个用户都有自己的shell

你自己不能看一看/etc/profile的内容么?
而且我前面已经说了/etc/profile会source /etc/profile.env
/etc/profile是bash的配置文件
你的shell是bash
回复 支持 反对

使用道具 举报

发表于 2008-10-9 13:00:08 | 显示全部楼层
> source /etc/profile的结果是没有找到mount命令

你把你的文件贴出来
把你的命令输出原封不动的贴出来
不要叙述
回复 支持 反对

使用道具 举报

发表于 2008-10-9 13:11:31 | 显示全部楼层
asdfkjli
回复 支持 反对

使用道具 举报

发表于 2008-10-9 13:21:10 | 显示全部楼层
没有portage software manager这么一个东西
你是说pms吧,package manager specification
这东西和楼主说的这些没有关系
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-9 13:27:29 | 显示全部楼层
mybox etc # cat profile.env
# THIS FILE IS AUTOMATICALLY GENERATED BY env-update.
# DO NOT EDIT THIS FILE. CHANGES TO STARTUP PROFILES
# GO INTO /etc/profile NOT /etc/profile.env

export CONFIG_PROTECT_MASK='/etc/udev/rules.d /etc/fonts/fonts.conf /etc/gconf /etc/terminfo /etc/revdep-rebuild'
export CVS_RSH='ssh'
export DCCC_PATH='/usr/lib/distcc/bin'
export DISTCC_LOG=''
export DISTCC_VERBOSE='0'
export GCC_SPECS=''
export GDK_USE_XFT='1'
export INFOPATH='/usr/share/info:/usr/share/binutils-data/i686-pc-linux-gnu/2.18/info:/usr/share/gcc-data/i486-pc-linux-gnu/4.1.2/info:/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/info'
export LESS='-R -M --shift 5'
export LESSOPEN='|lesspipe.sh %s'
export MANPATH='/usr/local/share/man:/usr/share/man:/usr/share/binutils-data/i686-pc-linux-gnu/2.18/man:/usr/share/gcc-data/i486-pc-linux-gnu/4.1.2/man:/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man'
export OPENGL_PROFILE='xorg-x11'
export PAGER='/usr/bin/less'
export PATH='/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.1.2:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2'
export PRELINK_PATH_MASK='/usr/lib/gstreamer-0.10'
export PYTHONPATH='/usr/lib/portage/pym'
export ROOTPATH='/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.1.2:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2'
export http_proxy='10.254.6.5:8080'
mount  /dev/sda1 /mnt
echo   "profile.env"
mybox etc # source /etc/profile
-bash: mount: command not found
profile.env
mybox etc #


问题找到了,是对于SOURCE这条命令的理解的问题,一直以为这个命令就是等价于.命令呢,原来是SOURCE是在bash的进程运行的,.命令是在bash的子进程运行,像export 这种设置全局变量的命令,不能直接用.+脚本或者命令的方式运行,设置完后,不会保存下来。

呵呵,回复flyinflash,有这么好的书当然好了,麻烦推荐下啊~~~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-9 13:55:43 | 显示全部楼层
另,总结下思路,写下来,也请各位指正。

今天说的问题应该是linux启动问题里边的一个细节。

linux的启动应该是(我能想到的,还请各位大大指正哈)

1.硬件初始化BIOS的工作,读入硬盘的引导扇区。
2.LILO或者GRUB引导,读入kernel
3.kernel初始化,寻找init程序。
4.init运行,初始化TTY,读取 /etc/inittab,查找initdefault,对于日常使用的级别3,使用/sbin/rc ,完成一些初始化工作,(对gentoo不大明白,没有/etc/rc.d啊,这个rc的功能是什么啊?)
5.init,初始化consol和串口,屏幕上终于出现了那个闪动的图标。
6.用户登陆,读取passwd文件,找到对应的SHELL执行。
7.SHELL运行/etc/profile,完成初始化的准备工作。就像profile文件中,第一句说明的那样“# /etc/profile: login shell setup”
8.根据登陆的用户,出现不同的提示符,其实就是用户配置文件的重新加载,那种在用户目录下的.开头的配置加载。我们这才开始能够输入命令了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-9 13:58:05 | 显示全部楼层
比较重要的还是init这个程序,详细介绍留个连接

http://study.chyangwa.com/IT/AIX/aixcmds5/telinit.htm
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表