淡定在黑暗和黎明时分!!!
2008年二月
linux服务器历险之使用memcached
二 26th
一,为什么要使用memcached
最优秀的cache软件,有效减轻数据库服务器的压力
不用它还要用哪个?
二,下载
从何处下载?
http://www.danga.com/memcached/
libevent从何处下载?
http://rpmforge.net/user/packages/libevent/
客户端php的memcache模块(python,java等需要哪个可以自行下载)下载,这里为PHP客户端为实例:
http://pecl.php.net/package/memcache/download/
三,如何进行安装libevent?
首先就是先下下载rpm包:
wget http://apt.sw.be/redhat/el4/en/i386/RPMS.dag/libevent-1.1a-1.2.el4.rf.i386.rpm
wget http://apt.sw.be/redhat/el4/en/i386/RPMS.dag/libevent-devel-1.1a-1.2.el4.rf.i386.rpm
rpm -ivh libevent-1.1a-1.2.el4.rf.i386.rpm
rpm -ivh libevent-devel-1.1a-1.2.el4.rf.i386.rpm
四,检查libevent安装是否成功?
[root@datam libevent-1.3e]# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 22 Oct 6 00:20 libevent-1.1a.so.1 -> libevent-1.1a.so.1.0.2
-rwxr-xr-x 1 root root 31596 Jan 7 2007 libevent-1.1a.so.1.0.2
lrwxrwxrwx 1 root root 22 Oct 6 00:36 libevent-1.3e.so.1 -> libevent-1.3e.so.1.0.3
-rwxr-xr-x 1 root root 338439 Oct 6 00:36 libevent-1.3e.so.1.0.3
-rw-r–r– 1 root root 533978 Oct 6 00:36 libevent.a
-rwxr-xr-x 1 root root 828 Oct 6 00:36 libevent.la
lrwxrwxrwx 1 root root 22 Oct 6 00:36 libevent.so -> libevent-1.3e.so.1.0.3
五,安装memcached
tar -zxvf memcached-1.2.2.tar.gz
安装memcached时,需要指定libevent的安装位置:
./configure –prefix=/usr/local/memcache
# make
# make install
六,检查memcached安装是否成功?
1看文件
[root@datam memcached-1.2.2]# ls -al /usr/local/memcache/bin/mem*
-rwxr-xr-x 1 root root 141771 Oct 6 00:41 /usr/local/memcache/bin/memcached
-rwxr-xr-x 1 root root 151317 Oct 6 00:41 /usr/local/memcache/bin/memcached-debug
2,测试运行
[root@datam memcached-1.2.2]# /usr/local/bin/memcached -h
/usr/local/bin/memcached: error while loading shared libraries: libevent-1.3e.so.1: cannot open shared object file: No such file or directory
出错了,怎么办?
进行检查
[root@datam memcached-1.2.2]# LD_DEBUG=libs memcached -v
4962: find library=libevent-1.3e.so.1 [0]; searching
4962: search cache=/etc/ld.so.cache
4962: search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64 (system search path)
4962: trying file=/lib64/tls/x86_64/libevent-1.3e.so.1
4962: trying file=/lib64/tls/libevent-1.3e.so.1
4962: trying file=/lib64/x86_64/libevent-1.3e.so.1
4962: trying file=/lib64/libevent-1.3e.so.1
4962: trying file=/usr/lib64/tls/x86_64/libevent-1.3e.so.1
4962: trying file=/usr/lib64/tls/libevent-1.3e.so.1
4962: trying file=/usr/lib64/x86_64/libevent-1.3e.so.1
4962: trying file=/usr/lib64/libevent-1.3e.so.1
4962:
memcached: error while loading shared libraries: libevent-1.3e.so.1: cannot open shared object file: No such file or directory
进行处理:
[root@datam memcached-1.2.2]# ln -s /usr/lib/libevent-1.3e.so.1 /usr/lib64/libevent-1.3e.so.1
[root@datam memcached-1.2.2]# memcached -h
memcached 1.2.2
-p <num> TCP port number to listen on (default: 11211)
-U <num> UDP port number to listen on (default: 0, off)
-s <file> unix socket path to listen on (disables network support)
-l <ip_addr> interface to listen on, default is INDRR_ANY
-d run as a daemon
-r maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num> max memory to use for items in megabytes, default is 64 MB
-M return error on memory exhausted (rather than removing items)
-c <num> max simultaneous connections, default is 1024
-k lock down all paged memory
-v verbose (print errors/warnings while in event loop)
-vv very verbose (also print client commands/reponses)
-h print this help and exit
-i print memcached and libevent license
-b run a managed instanced (mnemonic: buckets)
-P <file> save PID in <file>, only used with -d option
-f <factor> chunk size growth factor, default 1.25
-n <bytes> minimum space allocated for key+value+flags, default 48
至此安装完毕
七,如何启动memcached的服务端?
下面,我们来启动一个Memcached的服务器端:
# /usr/local/memcache/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -m 128 -l localhost -p 11211 -u root
-d 以守护程序(daemon)方式运行 memcached;
-m 设置 memcached 可以使用的内存大小,单位为 M;
-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;
-p 设置监听的端口,默认为 11211,所以也可以不设置此参数;
-u 指定用户;
-t <num> number of threads to use, default 4
如果有此项,说明已经支持了线程,就可以在启动的时候使用 -t 选项来启动多线程
然后启动的时候必须加上你需要支持的线程数量:
/usr/local/memcache/bin/memcached -t 1024
[root@datam memcached-1.2.2]# /usr/local/bin/memcached -d -m 128 -l localhost -p 11211 -u root
Illegal address: localhost
[root@datam memcached-1.2.2]# /usr/local/memcache/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u root
[root@datam memcached-1.2.2]#
至此启动成功
八,memcached的相关知识?
如何停止?如何重启?如何刷新其内容?等等
使用这个文件来实现:
#! /bin/sh
#
# chkconfig: - 55 45
# description: The memcached daemon is a network memory cache service.
# processname: memcached
# config: /etc/sysconfig/memcached
# Source function library.
. /etc/rc.d/init.d/functions
PORT1=11211
USER=nobody
MAXCONN=1024
CACHESIZE=64
OPTIONS=”-t 8″
MEMDAEMON=/usr/local/memcache/bin/memcached
if [ -f /etc/sysconfig/memcached ];then
. /etc/sysconfig/memcached
fi
# Check that networking is up.
if [ "$NETWORKING" = "no" ]
then
exit 0
fi
RETVAL=0
prog=”memcached”
start () {
echo -n $”Starting $prog: ”
# insure that /var/run/memcached has proper permissions
# chown $USER /var/run/memcached
daemon $MEMDAEMON -d -p $PORT1 -u $USER -m $CACHESIZE -c $MAXCONN $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached
}
stop () {
echo -n $”Stopping $prog: ”
killproc memcached
RETVAL=$?
echo
if [ $RETVAL -eq 0 ] ; then
rm -f /var/lock/subsys/memcached
rm -f /var/run/memcached.pid
fi
}
restart () {
stop
start
}
# See how we were called.
case “$1″ in
start)
start
;;
stop)
stop
;;
status)
status memcached
;;
restart|reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/memcached ] && restart || :
;;
*)
echo $”Usage: $0 {start|stop|status|restart|reload|condrestart}”
exit 1
esac
exit $?
九:配置php能访问memcached
wget http://pecl.php.net/get/memcache-2.2.0.tgz
tar -zxvf memcache-2.2.0.tgz
[root@datam memcache-2.2.0]# /usr/local/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20050922
Zend Extension Api No: 220051025
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
environment variable is set correctly and then rerun this script.
没有autoconf
yum install autoconf
[root@datam memcache-2.2.0]# yum install autoconf
[root@datam memcache-2.2.0]# /usr/local/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20050922
Zend Extension Api No: 220051025
[root@datam memcache-2.2.0]# ./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir
make
[root@datam memcache-2.2.0]# make install
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20050922/
至此安装成功
下面我们需把此安装成功的模块添加到php中去
vi php.ini
add下面的这两行
extension_dir = “/usr/local/lib/php/extensions/no-debug-non-zts-20050922/”
extension=memcache.so
按照相应路径进行设置这个动态模块
然后重启apache
用phpinfo()看到存在以下信息,则表示模块安装成功
memcache
| memcache support | enabled |
|---|---|
| Active persistent connections | 0 |
| Revision | $Revision: 1.86 $ |
| Directive | Local Value | Master Value |
|---|---|---|
| memcache.allow_failover | 1 | 1 |
| memcache.chunk_size | 8192 | 8192 |
| memcache.default_port | 11211 | 11211 |
| memcache.hash_function | crc32 | crc32 |
| memcache.hash_strategy | standard | standard |
| memcache.max_failover_attempts | 20 | 20 |
十:编写php代码测试访问memcached
[ 接口介绍 ]
服 务器端和客户端都安装配置好了,现在我们就来测试以下我们的成果。Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具 体可以参考PHP手册 “LXXV. Memcache Functions” 这章。我们为了简单方便,就使用面向对象的方式,也便于维护和编写代码。Memcache面向对象的常用接口包括:
Memcache::connect — 打开一个到Memcache的连接
Memcache::pconnect — 打开一个到Memcache的长连接
Memcache::close — 关闭一个Memcache的连接
Memcache::set — 保存数据到Memcache服务器上
Memcache::get — 提取一个保存在Memcache服务器上的数据
Memcache::replace — 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::delete — 从Memcache服务器上删除一个保存的项目
Memcache::flush — 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
Memcache::getStats — 获取当前Memcache服务器运行的状态
示例程序:
<?php
//连接
$mem = new Memcache;
$mem->connect(“127.0.0.1“, 11211);
//保存数据
$mem->set(‘key1‘, ‘This is first value‘, 0, 60);
$val = $mem->get(‘key1‘);
echo “Get key1 value: “ . $val .“<br>“;
//替换数据
$mem->replace(‘key1‘, ‘This is replace value‘, 0, 60);
$val = $mem->get(‘key1‘);
echo “Get key1 value: “ . $val . “<br>“;
//保存数组
$arr = array(‘aaa‘, ‘bbb‘, ‘ccc‘, ‘ddd‘);
$mem->set(‘key2‘, $arr, 0, 60);
$val2 = $mem->get(‘key2‘);
echo “Get key2 value: “;
print_r($val2);
echo “<br>“;
//删除数据
$mem->delete(‘key1‘);
$val = $mem->get(‘key1‘);
echo “Get key1 value: “ . $val . “<br>“;
//清除所有数据
$mem->flush();
$val2 = $mem->get(‘key2‘);
echo “Get key2 value: “;
print_r($val2);
echo “<br>“;
//关闭连接
$mem->close();
?>
如果正常的话,浏览器将输出:
Get key1 value: This is first value
Get key1 value: This is replace value
Get key2 value: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
Get key1 value:
Get key2 value:
十一:测试memcached缓存数据库的查询结果
<?php
/*
测试memcache缓存mysql的查询结果
by hd
2007.10.06
*/
//定义访问数据库的常量
define(SERVER_DATA_HOST,"127.0.0.1");
define(SERVER_DATA_USER,"root");
define(SERVER_DATA_PASS,"");
define(SERVER_DATA_BASE,"liuyan");
//定义访问数据库的常量
define(SERVER_MEM_HOST,”127.0.0.1″);
define(SERVER_MEM_PORT,”11211″);
//建立到数据库的连接
$dblink=mysql_connect(SERVER_DATA_HOST,SERVER_DATA_USER,SERVER_DATA_PASS);
mysql_select_db(SERVER_DATA_BASE,$dblink);
//定义到缓存的链接
$memlink = memcache_connect(SERVER_MEM_HOST,SERVER_MEM_PORT);
//定义访问数据库的函数
function sqlres($sqlstr)
{
global $dblink;
global $memlink;
$memstr = md5($sqlstr);
$memres = array();
if(!$memlink->get($memstr))
{
$dbres = mysql_query($sqlstr,$dblink);
$arrdata=array();
while ($dbrow = mysql_fetch_assoc($dbres))
{
$arrdata[]=$dbrow;
}
$memlink->set($memstr,$arrdata);
}
else
{
$memres = $memlink->get($memstr);
}
return $memres;
}
$sqlstr=”select * from rank”;
$arrdata=sqlres($sqlstr);
print_r($arrdata);
?>
十一:需要注意的问题
十一:封装一个访问memcached的类供调用
Linux操作系统中七件超厉害的武器
二 21st
Linux是一套免费使用和自由传播的类UNIX操作系统,主要用于基于Intel x86系列CPU的计算机上。Linux系统是由全世界各地的成千上万的程序员设计和实现的,其目的是建立不受任何商品化软件的版权所制约的、全世界都能自由使用的UNIX兼容产品。也许有些准备和正在使用Linux的朋友对为什么使用Linux并不十分了解。本文试就这一问题给出答案,让人们真正了解Linux带给我们的七件武器。Linux对比于商业软件,对学习者来说有一个境界上的差异,这个差异用一句话概述就是:以无法为有法,以无限为有限。这个境界上的差异也就是Linux七种武器的精华所在。
一、拳头——编程能力
Linux产生于一群真正的黑客。尽管人们习惯于认为Linus是Linux的缔造者,在linux包含的数以千计的文件中,也有一个名为Credits的文件记录了主要的Linux Hacker们的姓名和电子邮件地址(这个列表中包含了100多个名字,世界各地的都有),但没有人说得清究竟有多少人参与了Linux的改进。这一游戏到今天并没有随着时间的推移而停止,相反却因为Linux的日益流行而爱好者甚众。因此开始使用Linux就犹如加入了一个高手如云的编程组织。你可以通过互联网随时了解来自地球的某一个角落的该领域的最新进展;如果你的英文足够好,加入一个讨论组,你就可以得到不知来自什么地方的神密高手的点拨。由于GPL的存在,你还可以得到开放的源代码,从而不用发愁学习资料的来源。
随着更多专业公司的介入,Linux可以提供的开发工具的功能也越发强大。如TurboLinux就具有强大的应用程序开发环境,提供了各种开发应用程序的工具,具有对多种语言如:C、C++、Java、Perl、Tcl/tk、Python和Fortran 77的编译器/解释器,以及集成开发环境、调试和其他开发工具。再如Janus Software公司开发的被称为Linux版VB的Phoenix Object Basic,它是一套独特的面向对象的Linux RAD(Rapid Application Development,快速应用软件开发工具)。
它综合了Python和Perl等面向对象编程语言的强大功能,同时,提供了类似Visual Basic的易用性。熟悉Windows环境下Visual Basic的编程者都可以顺利地使用Phoenix Object Basic。LynuxWorks公司的VisualLynux可以和微软的Visual C++相媲美,它集成了微软Visual C++开发工具以支持Linux操作系统的产品,它不但兼容LynuxWorks公司的BlueCat Linux,而且还兼容其他的Linux 2.2.12版本。LynuxWorks公司甚至声称从此Visual C++就具备了开发嵌入式Linux应用程序的能力。嵌入式Linux系统现在相当热门,已经广泛地应用在各式各样的通信基础产品。我想可能有些Visual C++的使用者看到这里已经动了心,想要尝试一把了。
强大的开发工具+开放源代码+高手点拨,结果是什么呢?想来编程狂热分子已经心知肚明。因此强烈建议对编程有狂爱、总喜欢用程序解决问题的人使用Linux,去拥有Linux提供的第一件武器——编程能力。
二、多情环——组网能力
Linux的组网能力非常强大,它的TCP/IP代码是最高级的。Linux提供了对于当前的TCP/IP协议的完全支持,并且包括了对下一代Internet.协议Ipv6的支持。Linux内核还包括了IP防火墙代码、IP防伪、IP服务质量控制及许多安全特性。这些特性可以和像Cisco这样的公司提供的高端路由设备的特性相媲美。此外,利用Redhat Linux提供的Samba组(并不是RedHat Linux独有),Linux可以作为Windows客户机的打印和文件服务器,还可以用做NT的文件和打印服务器。
运用Linux包含的AppleTalk模块,Linux甚至可以作为一个Macintosh客户机的文件和打印服务器。让Apache这个世界上应用范围最广的Web服务器软件系统跑在linux上,你就可以运行自己的Intranet或者Internet web服务器。Linux还包含了一个Ftp服务程序、一个电子邮件传输代理程序以及,POP和IMAP邮件服务程序。如果你愿意,你还可以在Internet上免费获得一个Linux的LDAP服务程序。面对如此强大的网络功能,我们强烈建议对构造网络有兴趣的人掌握Linux的第二件武器—组网能力。
三、长生剑—创新能力
“如果你总是使用微软的开发工具,你一生只能做个操作人员。”这话一点都不假。Linux是自由软件,而自由软件和非自由软的区别在于:
1.自由软件是开放的,成千上万的人可以检查这个软件,快速地找到并修改其错误码。
2.最终用户可以按照自己的意愿自定义自由软件,有特殊需要的用户也可以完全按照他们认为合适的方式定制自己的Linux。
3.自由软件为了防止重复发明,通过共享源代码和思想来节省很多工作量。
以上这些特性是不是对有想法的好事者有莫大的吸引力?不仅如此,Linux由于自身的优点,应用领域也越来越广泛。如最近嵌入式Linux的应用相当热门,已广泛应用于包括笔记本电脑、连网装置、网络电视等在内的各式各样的通信基础产品,而嵌入式操作系统正日益成为一种势不可挡的流行趋势,最终电脑、通讯、家电会因为它的存在而成为一体。这些也为有想法的好事者提供了更广阔的发挥空间。在梦想就是力量的今天,没有了创新能力是不可想象的。因此强烈建议那些具有较强的钻研精神,喜欢刨根问底的好事者学习使用Linux,利用Linux提供的第三件武器—创新能力。
四、碧玉刀——UNIX能力
人们所以选择Linux的又一个重要原因是在于它的UNIX兼容性。由于Linux是一套自由软件,用户可以无偿地得到它及其源代码,无偿地获得大量的应用程序,还可以任意地修改和补充它们。这对用户学习、了解UNIX操作系统的内核非常有益。可以说Linux为广大用户提供了一个在家里学习和使用UNIX操作系统的廉价的机会。
现在有了许多CD-ROM供应商和软件公司对Linux操作系统的支持,Linux成为UNIX系统在个人计算机上的一个代用品。在用户级,Linux与UNIX非常相似,可以说了解UNIX,就了解了Linux的大部分内容;在编程级,大多数应用程序只需要很少的工作就可以在Linux和UNIX间转换。而且Linux也有意设计为与UNIX兼容,从而便于利用UNIX软件的主体。Linux能够很好地与其他UNIX机器相互操作,它使用了像RPC(远程过程调用)和NFS(网络文件系统)这样的标准UNIX服务。Linux还继承了UNIX的灵活性和可定制性,使其适合于广泛的应用程序,包括适应于传统的服务器和桌面应用程序,以及像嵌入式系统这样的不常见的应用程序。
因此,如果一个用户在公司上班的时候在UNIX系统上编程,或者在工作中是一位UNIX的系统管理员,他就可以在家里安装一套UNIX的兼容系统,即Linux系统。在家中使用Linux就能够完成一些工作任务。而急于通过Linux的学习掌握UNIX的目的想必不用多说了,在这个网络人才因稀缺而身价倍增的年代,想靠技术吃饭又不想掌握服务器端技术的人才是真正的傻瓜。
五、离别钩——怀旧能力
在这个IT技术日新月异的年代,怀旧应该不是一个好习惯,尽管怀旧可以有一种很不错的情调。但慢慢地我们发现我们不得不怀旧了,因为我们去年刚买的电脑现在已经老掉牙了。尽管每个IT厂商都嚷着他们的产品可以有效地降低我们的TCO(总拥有成本),可我们手里设备的折旧速度还是在不断加快。如果你肯听我的,我会说这世上从来就没有救世主,还是试试我推荐的Linux吧。
Linux非常小,可以有效地利用硬件。Linux的最小安装仅需要4MB内存,而你也可以在你的486机器上安装Linux并将其用做防火墙或Web服务器。我读到的Linux名著中甚至记载了有人用二手386建立了路由器和防火墙。Linux内核允许在运行时装载和卸载硬件的驱动程序。这样因为不必装载全部的驱动程序,就可以最大化地使用内存。总之Linux可以使老机器获得新生,节省我们的财力。因此强烈建议那些跑Windows像蜗牛一样慢的电脑的机主们学习Linux。
六、霸王枪——稳定能力
运行Linux的机器启动一次可以运行数月。Linux提供了完全的内存保护,每个进程都运行在自己的虚拟地址空间中,并且不会损坏其他进程或内核使用的地址空间。任务与内核间也是相互隔离,即行为不良或编写不良的程序只能毁坏自己。因此被破坏的进程几乎不可能使系统崩溃。Linux在和Windows98和NT在安全性的较量中占有上风,和Windows2000的情况又怎么样呢?资深的系统安全分析家指出:Windows 2000在网络系统,服务器连接方面的工作准备不足,Linux仍然是目前最安全的操作系统。
资深的系统安全分析家还预计到今年年底Windows 2000才能完成测试、除虫工作,目前比较安全的操作系统仍然是商业版本的UNIX和Linux。资深的系统安全分析家肯定地认为:在未来的5年里,Linux将成为最安全的操作系统。到2005年,管理和使用Linux将是一件十分容易的事情。
现在可以说Linux是一个非常坚固的系统了,因此强烈建议对于Windows的蓝屏死机极为厌恶的人学习Linux,使用Linux提供的第六件武器——稳定能力。
七、孔雀翎——支付能力
Linux提供的第七件武器和金钱有关,这是一个不容回避的问题。因为价格原因,每个人都可以拥有正版的Linux。此外Linux还是一个完全开放的系统。它支持各种像POSIX标准这样的开放标准和TCP/IP的Internet工程任务组标准。由于避免了专有的API(应用程序接口)和协议,可以减少对单一供应商的依赖。这样就不会出现像使用专用系统的情况:一旦犯了错误,只能继续使用原来的系统供用商的产品。也就是不会出现先享受低价,而在后期需要付出高额服务费的情况。因此强烈建议不想花太多的钱,又想使用正版软件的人学习和使用Linux
linux 批量添加用户
二 21st
一、为什么需要大批量添加用户;
我们什么时候才需要大批量添加用户呢?有时我们需要让几十个或更多的用户在主机上完成相同或相似的任务,比如我们想同时添加一堆的ftp 用户,这些ftp用户归属同一组,但不允许他们通过终端或远程登录服务器;有时我们可能为了教学,比如我们有50个学生,并且每个学生在服务器上有一个独立的用户名,能登录系统,并能管理自己的帐号或完成一些在自己权限下的作业;
二、批量用户添加流程;
批量添中用户流程是通过newusers 导入一个严格按照/etc/passwd 的书写格式来书写内容的文件来完成添加用户,然后通过chpasswd 导入用户密码文件来完成批量更新用户密码的过程;
1、newusers 成批添加用户的工具;
其用法很简单,newusers 后面直接跟一个文件;文件格式和/etc/passwd 的格式相同;
用户名1:x:UID:GID:用户说明:用户的家目录:所用SHELL
举例:
win00:x:520:520::/home/win00:/sbin/nologin
win01:x:521:521::/home/win01:/sbin/nologin
……
值得一提的是关于SHELL类型,查看主机上所有SHELL ,可以通过chsh 来查看;
[root@localhost beinan]# chsh –list
/bin/sh
/bin/bash
/sbin/nologin
/bin/ksh
/bin/tcsh
/bin/csh
/bin/zsh
其中除了/sbin/nologin ,其它类型的SHELL 都能登录系统;nologin 大多是虚拟用户用的SHELL ,也就是说虽然他是系统用户,但他并无登录系统的权限;如果您想添加这类用户,就把他的SHELL 设置成/sbin/nologin ,比如上面的例子;
关于用户名、UID、GID及用户的家目录是怎么回事,您可以读相应的参考文档;
2、chpasswd 批量更新用户口令工具;
chpasswd 工具是成批更新用户口令的工具,是把一个文件内容重新定向添加到/etc/shadow中;
chpasswd < 文件
但文件的内容并不是没有约定的,必须以下面的格式来书写,并且不能有空行;
用户名:口令
用户名1:口令1
用户名2:口令2
举例:
win00:123456
win01:654321
… …
三、批量添加用户实例;
1、首先我们创建用户文件和密码文件;
我们要创建包含新用户的文件userfile.txt ;另一个是为新添加的用户设置密码的userpwdfile.txt;
[root@localhost ~]# touch userfile.txt
[root@localhost ~]# touch userpwdfile.txt
然后用文本编辑器打开文件userfile.txt,添加如下内容;
win00:x:520:520::/home/win00:/sbin/nologin
win01:x:521:521::/home/win01:/sbin/nologin
win02:x:522:522::/home/win02:/sbin/nologin
win03:x:523:523::/home/win03:/sbin/nologin
win04:x:524:524::/home/win04:/sbin/nologin
win05:x:525:525::/home/win05:/sbin/nologin
win06:x:526:526::/home/win06:/sbin/nologin
win07:x:527:527::/home/win07:/sbin/nologin
win08:x:528:528::/home/win08:/sbin/nologin
win09:x:529:529::/home/win09:/sbin/nologin
userfile.txt 文件内容格式和 /etc/passwd 的格式是一样的,必须严格按照/etc/passwd 的格式来书写;上面所添加的用户都不能登录系统,但完全能用于ftp登录,但您得在相应ftp服务器的配置文件中打开让本地用户有读写权限;如果您想让上面的部份用户可以登录系统,可以把SHELL类似改一改,比如改成/bin/bash ;
我们再来书写新增用户的密码文件userpwdfile.txt内容;这个文件的内容中的用户名要与 userfile.txt用户名相同;也就是说我们先是添加了win00到win09的用户,现在要为这些用户更新密码;比如下面的;
win00:123456
win01:654321
win02:123321
win03:qweewq
win04:google
win05:adadwc
win06:wsscee
win07:xxec32
win08:543wew
win09:3ce3wf
2、通过newusers和chpasswd 完成批量添加用户;
[root@localhost ~]# newusers userfile.txt
[root@localhost ~]# chpasswd < userpwdfile.txt
这样就算添加完成了,如果您发现 /etc/passwd 中能发现用户的明口令,您可以通过下面的命令来映射到 /etc/shadow文件名;
[root@localhost ~]# pwconv