QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1521|回复: 11

求救:将一个用户加入一个组而不改变原有组的命令!

[复制链接]
发表于 2004-11-30 16:42:38 | 显示全部楼层 |阅读模式
系统是redhat9
按说应该是:/usr/sbin/usermod -G GROUPNAME USERNAME,但实际情况是用了这个命令后,是加入了一个组,但却将用户从以前的组中删除了!!!
如果用/usr/sbin/usermod -G GROUP1,GROUP2,GROUP3…… $USERNAME这个命令倒是可以同时加入几个组!
但我现在需要的是将已有用户在不改变原来组的情况下加入新的组,到底该如何进行?
已经给这个问题纠缠了很久了!
因为这个命令是要写在脚本中,所以如果需要先判断用户属于的组用脚本写就很麻烦了,而且刚接触linux,对脚本什么的都不熟,希望高手指教!
万分感谢!
发表于 2004-11-30 17:10:12 | 显示全部楼层
用useradd -g试试
回复

使用道具 举报

发表于 2004-11-30 17:27:16 | 显示全部楼层
[code:1][root@test7 etc]# groups test
test : test
[root@test7 root]# groupadd test1
[root@test7 etc]# usermod -G test1 test
[root@test7 etc]# groups test
test : test test1[/code:1]

你说用usermod -G test1 test 不行,但在我的机器操作是成功的
回复

使用道具 举报

 楼主| 发表于 2004-12-1 09:04:03 | 显示全部楼层
[root@WL-SERV data]# groups zhangtan
zhangtan : public project1
[root@WL-SERV data]# usermod -G zhangtan zhangtan
bash: usermod: command not found
[root@WL-SERV data]# /usr/sbin/usermod -G zhangtan zhangtan
[root@WL-SERV data]# groups zhangtan
zhangtan : public zhangtan

这是在我机器上的结果,又从project1这个组里去掉了!!
难道系统不一样?还是一个用户只能加进两个组?
回复

使用道具 举报

发表于 2004-12-1 09:08:59 | 显示全部楼层
[code:1][root@test7 root]# groups test
test : test test1
[root@test7 root]# groupadd test2
[root@test7 root]# usermod -G test2 test
[root@test7 root]# groups test
test : test test2
[root@test7 root]# usermod -G test2,test1 test
[root@test7 root]# groups test
test : test test1 test2[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-12-1 09:17:30 | 显示全部楼层
你执行的是:root@test7 root]# usermod -G test2,test1 test
这是一次同时加入两个组,但我需要的是用usermod后面只加一个组参数,而不是用逗号分开加入几个组,原因就是我第一个帖子说的,开始是不知道用户属于哪些组的,因为这个命令是要写在脚本中,所以如果需要先判断用户属于的组用脚本写就很麻烦了。
不知道有没有别的方法解决?
回复

使用道具 举报

发表于 2004-12-1 12:20:04 | 显示全部楼层
先判断用户现在都属于那些组,写在脚本里有什么麻烦的?

[code:1]OLDGROUPS=`groups ${USER} | sed 's/ /,/g'`

usermod -G ${OLDGROUPS},${NEWGROUPS} ${USER}[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-12-1 13:32:58 | 显示全部楼层
为什么执行过这个后显示“usermod: unknown group :”?
回复

使用道具 举报

发表于 2004-12-1 13:52:32 | 显示全部楼层
哦,我的脚本大概不适合 RH。
RH 非要在输出结果前面加上 $USER : 这种没用的东西……

改改,这样:[code:1]
OLDGROUPS=`groups ${USER} | sed -e 's/.*: //' -e 's/ /,/g'`
usermod -G ${OLDGROUPS},${NEWGROUPS} ${USER}[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-12-1 14:02:27 | 显示全部楼层
现在搞定了,呵呵
多谢版主了!
我刚接触linux,对脚本就更是不知道从何下手,多谢指教!
顺便问一句:-e 's/.*: //' -e是不是将“:”前的东西屏蔽掉?
回复

使用道具 举报

发表于 2004-12-1 14:22:25 | 显示全部楼层
-e 参数告诉 sed 后面接下来的是传给它的命令而不是要它处理的文本。

单引号之间的是 *NUX 上常见的、功能强大的正则表达式了

s/A/B/ 意思是把字符串 A 替换成 B,有匹配的话只进行一次。

.*:  匹配从任意字符开始到冒号和一个空格(注意冒号后面还有个空格)的所有字符,就是上面说的 A 。
B 是空的,也就是说把 A 删掉咯。

后面的有个“g”,意思是前面的命令(s)在匹配一次后还要继续,直到结束。
回复

使用道具 举报

 楼主| 发表于 2004-12-1 14:41:16 | 显示全部楼层
再次感谢版主的认真解答!
在这里真的是学到不少东西,以后会经常来这里请教
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-6 23:34 , Processed in 0.043694 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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