关于网狐棋牌6603源码的整理、编译和搭建 - mergerly的专栏 - 博客频道 - CSDN.NET

mikel阅读(1654)

最近换工作,趁着有一段清闲时间,整理了一下网狐棋牌的源码,这份源码下载很久了,一直呆在硬盘。这次正好好好看看。       网狐的代码质量很高,流露出来的代码也比较完整,基本上都能编译通过。但是要真的搭建起来,还是需要额外花一些功夫的。       我下载的是6603版本,经过分析和研究,服务器这边主要是缺少KernelEngine的源码,客户端这边主要是缺少NetworkServ

来源: 关于网狐棋牌6603源码的整理、编译和搭建 – mergerly的专栏 – 博客频道 – CSDN.NET

最近换工作,趁着有一段清闲时间,整理了一下网狐棋牌的源码,这份源码下载很久了,一直呆在硬盘。这次正好好好看看。

网狐的代码质量很高,流露出来的代码也比较完整,基本上都能编译通过。但是要真的搭建起来,还是需要额外花一些功夫的。

我下载的是6603版本,经过分析和研究,服务器这边主要是缺少KernelEngine的源码,客户端这边主要是缺少NetworkService的源码。都是核心的网络库和基础库呀,还好在网上其他地方找到了这2个工程的源码,整理编译之后发现和主体版本还是能够对上。

由于流出来的版本是VS2003的工程,我顺手就把网狐的代码移植到VS2012了,顺便把服务器移植的过程中有以下问题,第一个问题是for循环的变量在循环体外还有使用,VC工程升级过的同学应该都能解决。第二个问题是stdafx.h的内容比较老了,找一个新过程的拷贝过去。第三个问题是客户端大厅和游戏客户端启动后崩溃,研究了一段时间,后来发现只要有RichEdit的界面加载就崩溃,到网上查了一下,发现是没加载richedit的dll。需要在程序启动的时候加上这么一句,LoadLibrary(TEXT( “riched20.dll”)); 就可以了。

到此为止,所有的程序都能跑了,要搭建私服还不行,还缺数据库,还好在网上还是能找到流出来的数据库,我在SQL2005和SQL2008都能运行,不过存储过程是加密的,看不到,对于我这样控制欲很强,后期可能定制游戏服务器的人来说,这是不可接受的,在网上查了许多破解的方案,试过都不太完美,最后找到了一个工具,能够完美的破解SQL Server的加密存储过程。工具名字是DMT SQL Decryptor。

然后又整理和分析了一下数据库,很快就把服务器运行起来了。比较开心,后期计划把网狐的客户端游戏移植到Android

 

把整理后的源码上传,分享给大家吧,使用VS2012的环境。大家遇到什么问题可以咨询我!

资源要10分,算我的辛苦费吧,大家自愿下载!大笑

网狐棋牌整理版代码

有同学找我要数据库文件,前段时间没空,这两天我补了一篇说明文档,并分享了数据库文件。

关于网狐棋牌的数据库

网狐棋牌数据库整理文件

最后上图得瑟一下,大笑

 

——————————————————————————————

前不久放出了我自己整理的网狐棋牌的源码,下载的网友反应都不错,只是不少同学都找我要数据库,最近一直没时间,今天趁放假的时间把数据库放出来,分享给大家。

关于网狐棋牌6603源码的整理、编译和搭建

数据库是我从网上下载,然后自己整理的,网狐的数据库存储过程原来是加密了的,我解密之后把数据库导出成了sql文件,大家下载之后直接导入sql文件即可。

数据库我使用使用SQL SERVER2005和2008都能架设成功。

关于数据库内容,我大致说一下,GameUserDB、ServerInfoDB、ServerInfoDataDB、ThreasureDB是框架级别的数据库,GameDataDB是游戏数据库,每个游戏的数据库结构是一样的,大家创建一个游戏,就导入一个该数据库即可。

大家在架设的过程中如果有问题可以咨询我。最后给出数据库文件的下载地址。

网狐棋牌数据库整理文件

微赞平台拼团插件的支付流程

mikel阅读(1668)

最终支付的是页面是
vzan/payment/wechat/pay.php第73行
$wOpt = wechat_build($params, $wechat);构造向腾讯发送的参数,并在本地页面调用支付的JS

参数的传递是由url(‘mc/cash/wechat’);这个地址传送过来的,传递的规则是ps中放的是订单的参数
$sl = base64_encode(json_encode($ps));
$auth = sha1($sl . $_W[‘uniacid’] . $_W[‘config’][‘setting’][‘authkey’]);
header(“location: ../payment/wechat/pay.php?i={$_W[‘uniacid’]}&auth={$auth}&ps={$sl}”);
url(‘mc/cash/wechat’)起的是支付中转的作用,将不同的支付方式转到相应的.php中,进行处理,对应的文件就是
vzan/app/source/mc/cash.ctrl.php
微信的支付大约是在第150行左右

那么如何进行跳转呢,具体的实现是在paycenter这个文件中,执行文件site.php,大约是在第111行中protected function pay

{if !empty($pay[‘wechat’][‘switch’])}

<div class=”pay-btn” id=”wechat-panel”>
<form action=”{php echo url(‘mc/cash/wechat’);}” method=”post”>
<input type=”hidden” name=”params” value=”{php echo base64_encode(json_encode($params));}” />
<input type=”hidden” name=”encrypt_code” value=”” />
<input type=”hidden” name=”card_id” value=”{php echo base64_encode($card_id);}” />
<input type=”hidden” name=”coupon_id” value=”” />
<button class=”btn btn-success btn-block col-sm-12″ disabled=”disabled” type=”submit” id=”wBtn” value=”wechat” style=”height: 42px; font-size: 18px;”>微信支付(必须使用微信内置浏览器)</button>
</form>
</div>
<script type=”text/JavaScript”>
document.addEventListener(‘WeixinJSBridgeReady’, function onBridgeReady() {
$(‘#wBtn’).removeAttr(‘disabled’);
$(‘#wBtn’).html(‘微信支付’);
});
</script>
{/if}

由谁来引导到支付中心的页面的呢?是由订单确认来引导向这个页面的,具体的实现原理是这样的
执行文件:orderconfirm.php,
模板文件:include $this->template(‘confirm’);
页面提交到site.php后,检查是否是提交信息,如果是提交信息,
转到下面的url:header(“location: ” .  $this->createMobileUrl(‘pay’, array(‘orderid’ => $orderid)));
之前的页面由order.php来完成

git拉取远程分支并创建本地分支和Git中从远程的分支获取最新的版本到本地 - jtracydy的博客 - 博客频道 - CSDN.NET

mikel阅读(1500)

git拉取远程分支并创建本地分支一、查看远程分支使用如下Git命令查看所有远程分支:git branch -r11二、拉取远程分支并创建本地分支方法一使用如下命令:git checkout -b 本地分支名x origin/远程分支名x11使用该方式会在本地新建分支x,并自动切换到该本地分支x。方式二使用如下命令:gi

来源: git拉取远程分支并创建本地分支和Git中从远程的分支获取最新的版本到本地 – jtracydy的博客 – 博客频道 – CSDN.NET

git拉取远程分支并创建本地分支

一、查看远程分支

使用如下Git命令查看所有远程分支:

git branch -r
  • 1
  • 1

二、拉取远程分支并创建本地分支

方法一

使用如下命令:

git checkout -b 本地分支名x origin/远程分支名x
  • 1
  • 1

使用该方式会在本地新建分支x,并自动切换到该本地分支x。

方式二

使用如下命令:

git fetch origin 远程分支名x:本地分支名x
  • 1
  • 1

使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。

转自:http://blog.csdn.NET/tterminator/article/details/52225720

Git中从远程的分支获取最新的版本到本地

Git中从远程的分支获取最新的版本到本地有这样2个命令:

1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge

git fetch origin master
git log -p master..origin/master
git merge origin/master

以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并

上述过程其实可以用以下更清晰的方式来进行:

git fetch origin master:tmp
git diff tmp
git merge tmp

从远程获取最新的版本到本地的test分支上
之后再进行比较合并

2. git pull:相当于是从远程获取最新版本并merge到本地

git pull origin master

上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并

 

git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支 - arkblue的专栏 - 博客频道 - CSDN.NET

mikel阅读(1099)

$ git branch -a* br-2.1.2.2 master remotes/origin/HEAD -> origin/master remotes/origin/br-2.1.2.1 remotes/origin/br-2.1.2.2 remotes/origin/br-2.1.3 remotes/origin/master

来源: git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支 – arkblue的专栏 – 博客频道 – CSDN.NET

1 查看远程分支

  1. $ git branch -a
  2. * br-2.1.2.2
  3.   master
  4.   remotes/origin/HEAD -> origin/master
  5.   remotes/origin/br-2.1.2.1
  6.   remotes/origin/br-2.1.2.2
  7.   remotes/origin/br-2.1.3
  8.   remotes/origin/master

 

2 查看本地分支

  1. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
  2. $ git branch
  3. * br-2.1.2.2
  4.   master

 

3 创建分支

  1. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
  2. $ git branch test
  3. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
  4. $ git branch
  5. * br-2.1.2.2
  6.   master
  7.   test

线面是把分支推到远程分支

  1. $ git push origin test

4 切换分支到test

  1. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
  2. $ git branch
  3. * br-2.1.2.2
  4.   master
  5.   test
  6. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
  7. $ git checkout test
  8. M       jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java
  9. M       jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java
  10. Switched to branch ‘test’
  11. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)
  12. $ git branch
  13.   br-2.1.2.2
  14.   master
  15. * test

M 表示cong 原来分支(上一次修改没有提交br-2.1.2.2)带过来的修改

5 删除本地分支   Git branch -d xxxxx

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)

  1. $ git checkout br-2.1.2.2
  2. M       jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java
  3. M       jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java
  4. Switched to branch ‘br-2.1.2.2’
  5. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
  6. $ git br
  7. * br-2.1.2.2
  8.   master
  9.   test
  10. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
  11. $ git br -d test
  12. Deleted branch test (was 17d28d9).
  13. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)
  14. $ git br
  15. * br-2.1.2.2
  16.   master

 

6 查看本地和远程分支  -a。前面带*号的代表你当前工作目录所处的分支

  1. remotes/origin/HEAD -> origin/master #啥意思呢?

”在clone完成之后,Git 会自动为你将此远程仓库命名为origin(origin只相当于一个别名,运行git remote –v或者查看.git/config可以看到origin的含义),并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名) 这样的形式表示远程分支,所以origin/master指向的是一个remote branch(从那个branch我们clone数据到本地)“

这个是执行 git remote -v 的结果,看出来origin其实就是远程的git地址的一个别名。

  1. $ git remote  -v
  2. origin  git@xxxx/jingwei.git (fetch)
  3. origin  git@xxxx/jingwei.git (push)

 

  1. shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)
  2. $ git branch -a
  3.   br-2.1.2.2
  4.   master
  5. * test
  6.   remotes/origin/HEAD -> origin/master
  7.   remotes/origin/br-2.1.2.1
  8.   remotes/origin/br-2.1.2.2
  9.   remotes/origin/br-2.1.3
  10.   remotes/origin/master

 

7 删除远程版本

  1. git push origin :br-1.0.0

 

  1. 删除远程分支
  2. git branch -r -d origin/branch-name
  3. git push origin :branch-name

mesmotronic/cordova-plugin-fullscreen: Plugin for Cordova (PhoneGap) to enable Android's various full screen modes

mikel阅读(1101)

来源: mesmotronic/cordova-plugin-fullscreen: Plugin for Cordova (PhoneGap) to enable Android’s various full screen modes

Full Screen Plugin for Cordova

Plugin for Cordova (or PhoneGap) 3.0+ to enable true full screen on Android devices using lean and immersive modes, ported from our popular ANE for Adobe AIR.

Released under BSD license; see LICENSE for details.

How does it work?

This plugin enables developers to offer users a true full screen experience in their Cordova and PhoneGap apps for Android.

Using Android 4.0+, you can use true full screen in “lean mode”, the way you see in apps like YouTube, expanding the app right to the edges of the screen, hiding the status and navigation bars until the user next interacts. This is ideally suited to video or cut-scene content.

In Android 4.4+, however, you can now enter true full screen, fully interactive immersive mode. In this mode, your app will remain in true full screen until you choose otherwise; users can swipe down from the top of the screen to temporarily display the system UI.

If you find that the plugin doesn’t work as you might like on a specific device or Android configuration you’re using, don’t forget that this project is open source, so feel free to fork the project and adapt it to work in any way you like!

Installation

Cordova

cordova plugin add cordova-plugin-fullscreen

PhoneGap

phonegap local plugin add cordova-plugin-fullscreen

Notes

From version 1.0.2, the plugin ID has changed to cordova-plugin-fullscreen in line with the official Cordova plugin naming coventions following the switch to NPM. We therefore recommend that any previous version be uninstalled before upgrading to this release.

Since the release of android@5.0.0, setting <preference name="Fullscreen" value="true" /> in config.xml will use immersive mode, where available, even without this plugin.

Code example

Using the plugin in your app couldn’t be easier:

function successFunction()
{
    console.info("It worked!");
}

function errorFunction(error)
{
    console.error(error);
}

function trace(value)
{
	console.log(value);
}

// Is this plugin supported?
AndroidFullScreen.isSupported(supportedFunction, errorFunction);

// Is immersive mode supported?
AndroidFullScreen.isImmersiveModeSupported(successFunction, errorFunction);

// The width of the screen in immersive mode
AndroidFullScreen.immersiveWidth(trace, errorFunction);

// The height of the screen in immersive mode
AndroidFullScreen.immersiveHeight(trace, errorFunction);

// Hide system UI until user interacts
AndroidFullScreen.leanMode(successFunction, errorFunction);

// Show system UI
AndroidFullScreen.showSystemUI(successFunction, errorFunction);

// Extend your app underneath the status bar (Android 4.4+ only)
AndroidFullScreen.showUnderStatusBar(successFunction, errorFunction);

// Extend your app underneath the system UI (Android 4.4+ only)
AndroidFullScreen.showUnderSystemUI(successFunction, errorFunction);

// Hide system UI and keep it hidden (Android 4.4+ only)
AndroidFullScreen.immersiveMode(successFunction, errorFunction);

All methods will call the successFunction callback if the action was successful and the errorFunction if it wasn’t (or isn’t supported); if you’re using the plugin in an app for a platform other than Android, all methods will fail.

The immersiveWidth and immersiveHeight properties return the screen width and height available in immersive mode (or with the system UI hidden), where supported.

Getting the immersive screen size

You can use the immersiveWidth and immersiveHeight methods to find out the dimensions of the screen with the system UI hidden, regardless of the current screen state.

linux 查找目录或文件 - 相信自己能行,那就一定能行 - 博客频道 - CSDN.NET

mikel阅读(1094)

 查找目录:find /(查找范围) -name 查找关键字 -type d查找文件:find /(查找范围) -name 查找关键字 -print  如果需要更进一步的了解,可以参看Linux的命令详解。这里摘抄如下: ·find path -option [ -print ] [ -exec -ok command ] {} /;#-print 将查找到的文件输

来源: linux 查找目录或文件 – 相信自己能行,那就一定能行 – 博客频道 – CSDN.NET

查找目录:find /(查找范围) -name ‘查找关键字’ -type d
查找文件:find /(查找范围) -name 查找关键字 -print

 

 

如果需要更进一步的了解,可以参看Linux的命令详解。

这里摘抄如下:

 

·find path -option [ -print ] [ -exec -ok command ] {} /;
#-print 将查找到的文件输出到标准输出
#-exec command {} /;     —–将查到的文件执行command操作,{} 和 /;之间有空格
#-ok 和-exec相同,只不过在操作前要询用户

====================================================

-name filename             #查找名为filename的文件
-perm                       #按执行权限来查找
-user   username            #按文件属主来查找
-group groupname            #按组来查找
-mtime -n +n               #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime   -n +n              #按文件访问时间来查
-perm                        #按执行权限来查找
-user   username            #按文件属主来查找
-group groupname            #按组来查找
-mtime -n +n               #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime   -n +n              #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime   -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                    #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2              找文件,-n指n天以内,+n指n天以前
-ctime   -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                    #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2              #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f        #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size     n              #查长度为n块[或n字节]的文件
-depth                      #使查找在进入子目录前先行查找完本目录
-fstype                     #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f        #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size     n              #查长度为n块[或n字节]的文件
-depth                      #使查找在进入子目录前先行查找完本目录
-fstype                     #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                      #查文件时不跨越文件系统mount点
-follow                     #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                   #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                      #查文件时不跨越文件系统mount点
-follow                     #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                       #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                      #忽略某个目录

====================================================
$find ~ -name “*.txt” -print    #在$HOME中查.txt文件并显示
$find .   -name “*.txt” -print
$find .   -name “[A-Z]*” -pri26nbsp;   #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                              #忽略某个目录

=====================================================
$find ~ -name “*.txt” -print    #在$HOME中查.txt文件并显示
$find .   -name “*.txt” -print
$find .   -name “[A-Z]*” -print #查以大写字母开头的文件
$find /etc -name “host*” -print #查以host开头的文件
$find . -name “[a-z][a-z][0–9][0–9].txt”   -print #查以两个小写字母和两个数字开头的txt文件
$find . -perm 755 -print
$find . -perm -007 -exec ls -l {} /; #查所有用户都可读写执行的文件同-perm 777
$find . -type d -print
$find . ! -type d -print
$find . -type l -print

$find . -size +1000000c -print       #查长度大于1Mb的文件
$find . -size 100c        -print      # 查长度为100c的文件
$find . -size +10 -print             #查长度超过期作废10块的文件(1块=512字节)

$cd /
$find etc home apps   -depth -print | cpio -ivcdC65536 -o /dev/rmt0
$find /etc -name “passwd*” -exec grep “cnscn” {} /; #看是否存在cnscn用户
$find . -name “yao*” | xargs file
$find . -name “yao*” | xargs echo   “” > /tmp/core.log
$find . -name “yao*” | xargs chmod o-w

======================================================

find -name april*                      在当前目录下查找以april开始的文件
find -name april* fprint file        在当前目录下查找以april开始的文件,并把结果输出到file中
find -name ap* -o -name may* 查找以ap或may开头的文件
find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -name t.txt ! -ftype vfat   在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find /tmp -name wa* -type l           在/tmp下查找名为wa开头且类型为符号链接的文件
find /home -mtime -2                 在/home下查最近两天内改动过的文件
find /home   -atime -1                  查1天之内被存取过的文件
find /home -mmin   +60                  在/home下查60分钟前改动过的文件
find /home -amin +30                  查最近30分钟前被存取过的文件
find /home -newer tmp.txt             在/home下查更新时间比tmp.txt近的文件或目录
find /home -anewer tmp.txt            在/home下查存取时间比tmp.txt近的文件或目录
find /home -used -2                  列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find /home -user cnscn                列出/home目录内属于用户cnscn的文件或目录
find /home -uid +501                 列出/home目录内用户的识别码大于501的文件或目录
find /home -group cnscn              列出/home内组为cnscn的文件或目录
find /home -gid 501                   列出/home内组id为501的文件或目录
find /home -nouser                    列出/home内不属于本地用户的文件或目录
find /home -nogroup                   列出/home内不属于本地组的文件或目录
find /home   -name tmp.txt   -maxdepth 4 列出/home内的tmp.txt 查时深度最多为3层
find /home -name tmp.txt -mindepth 3 从第2层开始查
find /home -empty                     查找大小为0的文件或空目录
find /home -size +512k               查大于512k的文件
find /home -size -512k               查小于512k的文件
find /home -links +2                 查硬连接数大于2的文件或目录
find /home -perm 0700                查权限为700的文件或目录
find /tmp -name tmp.txt -exec cat {} /;
find /tmp -name tmp.txt -ok rm {} /;

find   / -amin   -10       # 查找在系统中最后10分钟访问的文件
find   / -atime -2         # 查找在系统中最后48小时访问的文件
find   / -empty              # 查找在系统中为空的文件或者文件夹
find   / -group cat        # 查找在系统中属于 groupcat的文件
find   / -mmin -5         # 查找在系统中最后5分钟里修改过的文件
find   / -mtime -1        #查找在系统中最后24小时里修改过的文件
find   / -nouser             #查找在系统中属于作废用户的文件
find   / -user   fred       #查找在系统中属于FRED这个用户的文件

查当前目录下的所有普通文件
——————————————————————————–

# find . -type f -exec ls -l {} /;
-rw-r–r–    1 root     root        34928 2003-02-25 ./conf/httpd.conf
-rw-r–r–    1 root     root        12959 2003-02-25 ./conf/magic
-rw-r–r–    1 root     root          180 2003-02-25 ./conf.d/README
查当前目录下的所有普通文件,并在- e x e c选项中使用ls -l命令将它们列出
=================================================
在/ l o g s目录中查找更改时间在5日以前的文件并删除它们:
$ find logs -type f -mtime +5 -exec -ok rm {} /;
=================================================
查询当天修改过的文件
[root@book class]# find ./ -mtime -1 -type f -exec ls -l {} /;
=================================================
查询文件并询问是否要显示
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} /;
< ls … ./classDB.inc.PHP > ? y
-rw-r–r–    1 cnscn    cnscn       13709 1月 12 12:22 ./classDB.inc.php
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} /;
< ls … ./classDB.inc.php > ? n
[root@book class]#

=================================================
查询并交给awk去处理
[root@book class]# who | awk ‘{print $1″/t”$2}’
cnscn   pts/0

=================================================
awk—grep—sed

[root@book class]# df -k | awk ‘{print $1}’ | grep -v ‘none’ | sed s”///dev////g”
文件系统
sda2
sda1
[root@book class]# df -k | awk ‘{print $1}’ | grep -v ‘none’
文件系统
/dev/sda2
/dev/sda1

1)在/tmp中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR”,最后打印出所有包含”SYSCALL_VECTOR”的文件名

A) find /tmp -name “*.h” | xargs -n50 grep SYSCALL_VECTOR
B) grep SYSCALL_VECTOR /tmp/*.h | cut   -d’:’ -f1| uniq > filename
C) find /tmp -name “*.h” -exec grep “SYSCALL_VECTOR” {} /; -print
2)find / -name filename -exec rm -rf {} /;
find / -name filename -ok rm -rf {} /;
3)比如要查找磁盘中大于3M的文件:
find . -size +3000k -exec ls -ld {} ;
4)将find出来的东西拷到另一个地方
find *.c -exec cp ‘{}’ /tmp ‘;’

如果有特殊文件,可以用cpio,也可以用这样的语法:
find dir -name filename -print | cpio -pdv newdir
6)查找2004-11-30 16:36:37时更改过的文件
# A=`find ./ -name “*php”` | ls -l –full-time $A 2>/dev/null | grep “2004-11-30 16:36:37”

Linux下查看文件内容的命令

mikel阅读(1145)

来源: Linux下查看文件内容的命令 – 梨璐2012 – 博客园

查看文件内容的命令:

cat     由第一行开始显示内容,并将所有内容输出

tac     从最后一行倒序显示内容,并将所有内容输出

more    根据窗口大小,一页一页的现实文件内容

less    和more类似,但其优点可以往前翻页,而且进行可以搜索字符

head    只显示头几行

tail    只显示最后几行

nl      类似于cat -n,显示时输出行号

tailf   类似于tail -f

1.cat 与 tac

cat的功能是将文件从第一行开始连续的将内容输出在屏幕上。但是cat并不常用,原因是当文件大,行数比较多时,屏幕无法全部容下时,只能看到一部分内容。

cat语法:cat [-n]  文件名 (-n : 显示时,连行号一起输出)

 

tac的功能是将文件从最后一行开始倒过来将内容数据输出到屏幕上。我们可以发现,tac实际上是cat反过来写。这个命令也不常用。

tac语法:tac 文件名。

 

2.more和less(常用)

more的功能是将文件从第一行开始,根据输出窗口的大小,适当的输出文件内容。当一页无法全部输出时,可以用“回车键”向下翻行,用“空格键”向下翻页。退出查看页面,请按“q”键。另外,more还可以配合管道符“|”(pipe)使用,例如:ls -al | more

more的语法:more 文件名

Enter 向下n行,需要定义,默认为1行;

Ctrl f 向下滚动一屏;

空格键 向下滚动一屏;

Ctrl b 返回上一屏;

= 输出当前行的行号;

:f 输出文件名和当前行的行号;

v 调用vi编辑器;

! 命令 调用Shell,并执行命令;

q 退出more

 

less的功能和more相似,但是使用more无法向前翻页,只能向后翻。

less可以使用【pageup】和【pagedown】键进行前翻页和后翻页,这样看起来更方便。

less的语法:less 文件名

less还有一个功能,可以在文件中进行搜索你想找的内容,假设你想在passwd文件中查找有没有weblogic字符串,那么你可以这样来做:

[root@redhat etc]# less passwd

然后输入:

/weblogic

回车

此时如果有weblogic字符串,linux会把该字符已高亮方式显示。

退出查看页面,请按“q”键。

 

3.head和tail

head和tail通常使用在只需要读取文件的前几行或者后几行的情况下使用。head的功能是显示文件的前几行内容

head的语法:head [n number] 文件名 (number 显示行数)

 

tail的功能恰好和head相反,只显示最后几行内容

tail的语法:tail [-n number] 文件名

 

4.nl

nl的功能和cat -n一样,同样是从第一行输出全部内容,并且把行号显示出来

nl的语法:nl 文件名

 

5.tailf

 

tailf命令几乎等同于tail -f,严格说来应该与tail –follow=name更相似些。当文件改名之后它也能继续跟踪,特别适合于日志文件的跟踪(follow the growth of a log file)。与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件(It is similar to tail -f but does not access the file when it is not growing.  This has the side effect of not updating the access  time for the file, so a filesystem flush does not occur periodically when no log activity is happening.)。tailf特别适合那些便携机上跟踪日志文件,因为它能省电,因为减少了磁盘访问嘛(tailf  is extremely useful for monitoring log files on a laptop when logging is infrequent and the user desires that the hard disk spin down to conserve battery life.)。tailf命令不是个脚本,而是一个用C代码编译后的二进制执行文件,某些Linux安装之后没有这个命令,本文提供了怎么编译安装tailf命令的方法。

面就谈谈二者的区别:

1. tailf 总是从文件开头一点一点的读, 而tail -f 则是从文件尾部开始读

2. tailf check文件增长时,使用的是文件名, 用stat系统调用;而tail -f 则使用的是已打开的文件描述符; 注:tail 也可以做到类似跟踪文件名的效果; 但是tail总是使用fstat系统调用,而不是stat系统调用;结果就是:默认情况下,当tail的文件被偷偷删除时,tail是不知道的,而tailf是知道的。

 

常用参数

 

格式:tailf logfile

 

动态跟踪日志文件logfile,最初的时候打印文件的最后10行内容。

docker进入后台运行的容器 - 朱小杰 - 博客园

mikel阅读(1047)

来源: docker进入后台运行的容器 – 朱小杰 – 博客园

我们运行docker容器的时候,使用了-d参数,把容器在后台运行后。
这个时候,我们使用docker ps命令,我们就可以知道哪些程序在后台运行。
  

我们要怎么进入到docker容器呢?
1:使用docker attach命令
我们使用
docker attach db3 或者 docker attach d48b21a7e439

 

db3是后台容器的NAMES,d48b21a7e439是容器的进程ID  CONTAINER ID
然后就进去了这个容器的ssh界面。
但是它有一个缺点,只要这个连接终止,或者使用了exit命令,容器就会退出后台运行
 
 
2:使用docker exec命令
这个命令使用exit命令后,不会退出后台,一般使用这个命令,使用方法如下
docker exec -it db3 /bin/sh 或者 docker exec -it d48b21a7e439 /bin/sh

 

db3是后台容器的NAMES,d48b21a7e439是容器的进程ID  CONTAINER ID
 /bin/sh 是固定写法
它也能进入这个容器

Docker命令详解 - iVictor - 博客园

mikel阅读(932)

来源: Docker命令详解 – iVictor – 博客园

最近学习Docker,将docker所有命令实验了一番,特整理如下:

 

# docker --help
Usage: docker [OPTIONS] COMMAND [arg...]
docker daemon [ --help | ... ]
docker [ -h | --help | -v | --version ]

A self-sufficient runtime for containers.

Options:

--config=~/.docker Location of client config files
-D, --Debug=false Enable Debug mode
-H, --host=[] Daemon socket(s) to connect to
-h, --help=false Print usage
-l, --log-level=info Set the logging level
--tls=false Use TLS; implied by --tlsverify
--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
--tlscert=~/.docker/cert.pem Path to TLS certificate file
--tlskey=~/.docker/key.pem Path to TLS key file
--tlsverify=false Use TLS and verify the remote
-v, --version=false Print version information and quit

Commands:
attach Attach to a running container
--将终端依附到容器上
1> 运行一个交互型容器
[root@localhost ~]# docker run -i -t centos /bin/bash
[root@f0a02b473067 /]#
2> 在另一个窗口上查看该容器的状态
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4a75f165ce6 centos "/bin/bash" 5 seconds ago Up 5 seconds cranky_mahavira
3> 退出第一步中运行的容器
[root@d4a75f165ce6 /]# exit
exit
4> 查看该容器的状态
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4a75f165ce6 centos "/bin/bash" 2 minutes ago Exited (0) 23 seconds ago cranky_mahavira
可见此时容器的状态是Exited,那么,如何再次运行这个容器呢?可以使用docker start命令
5> 再次运行该容器
[root@localhost ~]# docker start cranky_mahavira
cranky_mahavira
6> 再次查看该容器的状态
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4a75f165ce6 centos "/bin/bash" 6 minutes ago Up 29 seconds cranky_mahavira
因为该容器是交互型的,但此刻我们发现没有具体的终端可以与之交互,这时可使用attach命令。
7> 通过attach命令进行交互
[root@localhost ~]# docker attach cranky_mahavira
[root@d4a75f165ce6 /]#

build Build an image from a Dockerfile
--通过Dockerfile创建镜像

commit Create a new image from a container's changes
--通过容器创建本地镜像
注意:如果是要push到docker hub中,注意生成镜像的命名
[root@localhost ~]# docker commit centos_v1 centos:v1
68ad49c999496cff25fdda58f0521530a143d3884e61bce7ada09bdc22337638
[root@localhost ~]# docker push centos:v1
You cannot push a "root" repository. Please rename your repository to / (ex: /centos)
用centos:v1就不行,因为它push到docker hub中时,是推送到相应用户下,必须指定用户名。譬如我的用户名是ivictor,则新生成的本地镜像命名为:
docker push victor/centos:v1,其中v1是tag,可不写,默认是latest

cp Copy files/folders from a container to a HOSTDIR or to STDOUT
--在宿主机和容器之间相互COPY文件
cp的用法如下:
Usage: docker cp [OPTIONS] CONTAINER:PATH LOCALPATH|-
docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH
如:容器mySQL中/usr/local/bin/存在docker-entrypoint.sh文件,可如下方式copy到宿主机
# docker cp mySQL:/usr/local/bin/docker-entrypoint.sh /root
修改完毕后,将该文件重新copy回容器
# docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/

create Create a new container
--创建一个新的容器,注意,此时,容器的status只是Created

diff Inspect changes on a container's filesystem
--查看容器内发生改变的文件,以我的mysql容器为例
[root@localhost ~]# docker diff mysqldb
C /root
A /root/.bash_history
A /test1.txt
A /test.tar
A /test.txt
C /run
C /run/mysqld
A /run/mysqld/mysqld.pid
A /run/mysqld/mysqld.sock
不难看出,C对应的均是目录,A对应的均是文件

events Get real time events from the server
--实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等。
譬如:
[root@localhost ~]# docker events
2015-09-08T17:40:13.000000000+08:00 d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71f36572436c34dc0763db79: (from wordpress) create
2015-09-08T17:40:14.000000000+08:00 d2a2ef5ddb90b505acaf6b59ab43eecf7eddbd3e71f36572436c34dc0763db79: (from wordpress) die
2015-09-08T17:42:10.000000000+08:00 839866a338db6dd626fa8eabeef53a839e4d2e2eb16ebd89679aa722c4caa5f7: (from mysql) start

exec Run a command in a running container
--用于容器启动之后,执行其它的任务
通过exec命令可以创建两种任务:后台型任务和交互型任务
后台型任务:docker exec -d cc touch 123 其中cc是容器名
交互型任务:
[root@localhost ~]# docker exec -i -t cc /bin/bash
root@1e5bb46d801b:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

export Export a container's filesystem as a tar archive
--将容器的文件系统打包成tar文件
有两种方式:
docker export -o mysqldb1.tar mysqldb
docker export mysqldb > mysqldb.tar

history Show the history of an image
--显示镜像制作的过程,相当于dockfile

images List images
--列出本机的所有镜像

import Import the contents from a tarball to create a filesystem image
--根据tar文件的内容新建一个镜像,与之前的export命令相对应
[root@localhost ~]# docker import mysqldb.tar mysql:v1
eb81de183cd94fd6f0231de4ff29969db822afd3a25841d2dc9cf3562d135a10
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mysql v1 eb81de183cd9 21 seconds ago 281.9 MB

info Display system-wide information
--查看docker的系统信息
[root@localhost ~]# docker info
Containers: 3 --当前有3个容器
Images: 298
Storage Driver: devicemapper
Pool Name: docker-253:0-34402623-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 8.677 GB --对应的是下面Data loop file大小
Data Space Total: 107.4 GB
Data Space Available: 5.737 GB
Metadata Space Used: 13.4 MB --对应的是下面Metadata loop file大小
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.134 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.93-RHEL7 (2015-01-28)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.10.0-229.el7.x86_64
Operating System: CentOS Linux 7 (Core)
CPUs: 2
Total Memory: 979.7 MiB
Name: localhost.localdomain
ID: TFVB:BXGQ:VVOC:K2DJ:LECE:2HNK:23B2:LEVF:P3IQ:L7D5:NG2V:UKNL
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

inspect Return low-level information on a container or image
--用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置、网络配置和数据卷配置等。

kill Kill a running container
--强制终止容器
关于stop和kill的区别,docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,
容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。

load Load an image from a tar archive or STDIN
--与下面的save命令相对应,将下面sava命令打包的镜像通过load命令导入

login Register or log in to a Docker registry
--登录到自己的Docker register,需有Docker Hub的注册账号
[root@localhost ~]# docker login
Username: ivictor
Password:
Email: xxxx@foxmail.com
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded

logout Log out from a Docker registry
--退出登录
[root@localhost ~]# docker logout
Remove login credentials for https://index.docker.io/v1/

logs Fetch the logs of a container
--用于查看容器的日志,它将输出到标准输出的数据作为日志输出到docker logs命令的终端上。常用于后台型容器

pause Pause all processes within a container
--暂停容器内的所有进程,
此时,通过docker stats可以观察到此时的资源使用情况是固定不变的,
通过docker logs -f也观察不到日志的进一步输出。

port List port mappings or a specific mapping for the CONTAINER
--输出容器端口与宿主机端口的映射情况
譬如:
[root@localhost ~]# docker port blog
80/tcp -> 0.0.0.0:80
容器blog的内部端口80映射到宿主机的80端口,这样可通过宿主机的80端口查看容器blog提供的服务

ps List containers
--列出所有容器,其中docker ps用于查看正在运行的容器,ps -a则用于查看所有容器。

pull Pull an image or a repository from a registry
--从docker hub中下载镜像

push Push an image or a repository to a registry
--将本地的镜像上传到docker hub中
前提是你要先用docker login登录上,不然会报以下错误
[root@localhost ~]# docker push ivictor/centos:v1
The push refers to a repository [docker.io/ivictor/centos] (len: 1)
unauthorized: access to the requested resource is not authorized

rename Rename a container
--更改容器的名字

restart Restart a running container
--重启容器

rm Remove one or more containers
--删除容器,注意,不可以删除一个运行中的容器,必须先用docker stop或docker kill使其停止。
当然可以强制删除,必须加-f参数
如果要一次性删除所有容器,可使用 docker rm -f `docker ps -a -q`,其中,-q指的是只列出容器的ID

rmi Remove one or more images
--删除镜像

run Run a command in a new container
--让创建的容器立刻进入运行状态,该命令等同于docker create创建容器后再使用docker start启动容器

save Save an image(s) to a tar archive
--将镜像打包,与上面的load命令相对应
譬如:
docker save -o nginx.tar nginx

search Search the Docker Hub for images
--从Docker Hub中搜索镜像

start Start one or more stopped containers
--启动容器

stats Display a live stream of container(s) resource usage statistics
--动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O

stop Stop a running container
--停止一个运行的容器

tag Tag an image into a repository
--对镜像进行重命名

top Display the running processes of a container
--查看容器中正在运行的进程

unpause Unpause all processes within a container
--恢复容器内暂停的进程,与pause参数相对应

version Show the Docker version information
--查看docker的版本

wait Block until a container stops, then print its exit code
--捕捉容器停止时的退出码
执行此命令后,该命令会“hang”在当前终端,直到容器停止,此时,会打印出容器的退出码。

Run 'docker COMMAND --help' for more information on a command.

linux下创建用户 - 渊蓝之蓝 - 博客园

mikel阅读(846)

来源: linux下创建用户 – 渊蓝之蓝 – 博客园

linux下创建用户(一)

Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

实现用户账号的管理,要完成的工作主要有如下几个方面:
· 用户账号的添加、删除与修改。
· 用户口令的管理。
· 用户组的管理。

一、Linux系统用户账号的管理

用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。

1、添加新的用户账号使用useradd命令,其语法如下:

代码:
useradd 选项 用户名
其中各选项含义如下:

代码:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

用户名 指定新账号的登录名。

例1:
代码:
# useradd –d /usr/sam -m sam
此命令创建了一个用户sam,
其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录)。

例2:
代码:
# useradd -s /bin/sh -g group –G adm,root gem
此命令新建了一个用户gem,该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。

这里可能新建组:#groupadd group及groupadd adm
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。

2、删除帐号

如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。删除一个已有的用户账号使用userdel命令,其格式如下:

代码:
userdel 选项 用户名

常用的选项是-r,它的作用是把用户的主目录一起删除。
例如:

代码:
# userdel sam

此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

3、修改帐号

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:

代码:
usermod 选项 用户名

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,有些系统可以使用如下选项:

代码:
-l 新用户名

这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
例如:
代码:
# usermod -s /bin/ksh -d /home/z –g developer sam
此命令将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。

4、用户口令的管理

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
代码:

passwd 选项 用户名
可使用的选项:

代码:
-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令。

例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:

代码:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******

如果是超级用户,可以用下列形式指定任何用户的口令:

代码:
# passwd sam
New password:*******
Re-enter new password:*******

普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。

为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。

为用户指定空口令时,执行下列形式的命令:

代码:
# passwd -d sam

此命令将用户sam的口令删除,这样用户sam下一次登录时,系统就不再询问口令。

passwd命令还可以用-l(lock)选项锁定某一用户,使其不能登录,例如:

代码:
# passwd -l sam

linux下创建用户(二)

二、Linux系统用户组的管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

1、增加一个新的用户组使用groupadd命令。其格式如下:

代码:
groupadd 选项 用户组

可以使用的选项有:
代码:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

例1:

代码:
# groupadd group1

此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。

例2:

代码:
#groupadd -g 101 group2

此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。

2、如果要删除一个已有的用户组,使用groupdel命令,其格式如下:

代码:
groupdel 用户组

例如:

代码:
#groupdel group1

此命令从系统中删除组group1。

3、修改用户组的属性使用groupmod命令。其语法如下:

代码:
groupmod 选项 用户组

常用的选项有:
代码:
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字

例1:

代码:
# groupmod -g 102 group2

此命令将组group2的组标识号修改为102。

例2:

代码:
# groupmod –g 10000 -n group3 group2

此命令将组group2的标识号改为10000,组名修改为group3。

4、如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:

代码:
$ newgrp root

这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

让Linux系统中的普通用户也有超级用户的权限