centos pop3,centos如何安装软件
大家好,今天给各位分享centos pop3的一些知识,其中也会对centos如何安装软件进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
linux shell 脚本实现tcp/upd协议通讯
linux设备里面有个比较特殊的文件:
/dev/[tcp|upd]/host/port只要读取或者写入这个文件,相当于系统会尝试连接:host这台机器,对应port端口。如果主机以及端口存在,就建立一个socket连接。将在,/proc/self/fd目录下面,有对应的文件出现。
一、测试下:/dev/tcp/host/post文件
复制代码
代码如下:
[chengmo@centos5 shell]$ cat/dev/tcp/127.0.0.1/22
SSH-2.0-OpenSSH_5.1
#我的机器shell端口是:22
#实际:/dev/tcp根本没有这个目录,这是属于特殊设备
[chengmo@centos5 shell]$ cat/dev/tcp/127.0.0.1/223
-bash: connect:拒绝连接
-bash:/dev/tcp/127.0.0.1/223:拒绝连接
#223接口不存在,打开失败
[chengmo@centos5 shell]$ exec 8/dev/tcp/127.0.0.1/22
[chengmo@centos5 shell]$ ls-l/proc/self/fd/
总计 0
lrwx------ 1 chengmo chengmo 64 10-21 23:05 0-/dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:05 1-/dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:05 2-/dev/pts/0
lr-x------ 1 chengmo chengmo 64 10-21 23:05 3-/proc/22185/fd
lrwx------ 1 chengmo chengmo 64 10-21 23:05 8- socket:[15067661]
#文件描述符8,已经打开一个socket通讯通道,这个是一个可以读写socket通道,因为用:""打开
[chengmo@centos5 shell]$ exec 8-
#关闭通道
[chengmo@centos5 shell]$ ls-l/proc/self/fd/
总计 0
lrwx------ 1 chengmo chengmo 64 10-21 23:08 0-/dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:08 1-/dev/pts/0
lrwx------ 1 chengmo chengmo 64 10-21 23:08 2-/dev/pts/0
lr-x------ 1 chengmo chengmo 64 10-21 23:08 3-/proc/22234/fd
二、通过重定向读取远程web服务器头信息
复制代码
代码如下:
#!/bin/sh
#testhttphead.sh
#实现通过主机名,端口读取web服务器header信息
#copyright chengmo,qq:8292669
if(($#2));then
echo"usage:$0 host port";
exit 1;
fi
#如果参数缺失,退出程序,返回状态1
exec 6/dev/tcp/$1/$2 2/dev/null;
#打开host的port可读写的socket连接,与文件描述符6连接
if(($?!=0));then
echo"open$1$2 error!";
exit 1;
fi
#如果打开失败,$?返回不为0,终止程序
echo-e"HEAD/ HTTP/1.1/n/n/n/n/n"6;
#将HEAD信息,发送给socket连接
cat6;
#从socket读取返回信息,显示为标准输出
exec 6-;
exec 6-;
#关闭socket的输入,输出
exit 0;
脚本建立后:存为testhttphead.sh
运行结果:
复制代码
代码如下:
[chengmo@centos5~/shell]$ sh testhttphead.sh www.baidu.com 80
HTTP/1.1 200 OK
Date: Thu, 21 Oct 2010 15:17:23 GMT
Server: BWS/1.0
Content-Length: 6218
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Thu, 21 Oct 2010 15:17:23 GMT
Set-Cookie: BAIDUID=1C40B2F8C676180FD887379A6E286DC1:FG=1; expires=Thu, 21-Oct-40 15:17:23 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM"
Connection: Keep-Alive
[chengmo@centos5~/shell]$ sh testhttphead.sh 127.0.0.1 8080
open 127.0.0.1 8080 error!
突然有个奇怪想法:
我们在windows时代就通过telnet可以实现tcp/upd协议通讯,那么如果用传统方法怎么实现呢?
复制代码
代码如下:
[chengmo@centos5~/shell]$ echo-e"HEAD/ HTTP/1.1/n/n/n/n/n"|telnet www.baidu.com 80
Trying 220.181.6.175...
Connected to www.baidu.com.
Escape character is'^]'.
Connection closed by foreign host.
#直接给发送,失败
[chengmo@centos5~/shell]$(telnet www.baidu.com 80)EOF
HEAD/ HTTP/1.1
EOF
Trying 220.181.6.175...
Connected to www.baidu.com.
Escape character is'^]'.
Connection closed by foreign host.
#重定向输入,还是失败?
找到正确方法:
复制代码
代码如下:
[chengmo@centos5 shell]$(echo-e"HEAD/ HTTP/1.1/n/n/n/n/n";sleep 2)|telnet www.baidu.com 80
Trying 220.181.6.175...
Connected to www.baidu.com.
Escape character is'^]'.
HTTP/1.1 200 OK
Date: Thu, 21 Oct 2010 15:51:58 GMT
Server: BWS/1.0
Content-Length: 6218
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Thu, 21 Oct 2010 15:51:58 GMT
Set-Cookie: BAIDUID=0B6A01ACECD5353E4247E088A8CB345A:FG=1; expires=Thu, 21-Oct-40 15:51:58 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM"
Connection: Keep-Alive
#成功了!加入sleep居然可以了,sleep改成1秒也可以
是不是由于sleep后,echo会推出2秒发给通道:telnet呢?推论可以从这2个方面推翻:
一个方面:通过()括的数据是一对命令,会作为一个子命令执行,一起执行完程序结束。每个命令echo语句,就直接发送到屏幕(也就是标准输出),只要有标准输出了,就会通过通道马上传个:telnet,如果接下来命令还有输出,会注意传给telnet,直到()内所有命令执行完,与通道连接就断开了。
再一个方面:如果说是起到推迟发送的话,什么时候有数据过来,发给telnet,什么时候telnet命令启动。跟你推迟一点还是早一点发送过来。没有关系。
这种类型命令,看出sleep,其实就是保持通道跟telnet连接2秒钟。通道连接着了,telnet终端输入也还在,因此可以保持从baidu服务器获得数据。
所以,延迟多久,还是跟服务器处理速度有关系。
如果通过echo向telnet发送数据,保持通道联通,使用sleep是个很好方法。
通过重定向给telnet输入参数这种方法,我还想不到怎么样实现延迟输入。有知道朋友,可以指点指点.
区别:
telnet与echo实现 http访问,与通过打开读写socket是不一样的,打开socket通道,是可以进行交换处理的。传入命令,活动结果,再传入命令,再获得结果。telnet通过echo就不能这样处理了。
三、通过shell脚本重定向实现监控memcache状态
复制代码
代码如下:
#!/bin/sh
#通过传入ip以及端口,发送指令获得返回数据
#copyright chengmo qq:8292669
#函数往往放到最上面
function sendmsg()
{
msg=$1;
echo"$1"8;
getout;
}
#向socket通道发送指令,并且调用获得返回参数
function getout()
{
#read命令-u从打开文件描述符 8读取数据,-d读取数据忽略掉:/r换行符
while read-u 8-d$'/r' name;
do
if ["${name}"=="END"-o"${name}"=="ERROR" ];then
break;
fi;
echo$name;
done
}
#由于:memcached每次通讯完毕,会返回:END或者ERROR(出错),通过判断是否是"END"觉得读取是不是结束,否则循环不会停止
if [$#-lt 2 ];then
echo"usage:$0 host port [command]";
exit 1;
fi;
[[$#-gt 2 ]]command=$3;
#设置默认值如果command为定义则为:stats
command="${command=stats}";
host="$1";
port="$2";
exec 8/dev/tcp/${host}/${port};
#打开通向通道是8
if ["$?"!="0" ];then
echo"open$host$port fail!";
exit 1;
fi
sendmsg"$command";
#发送指定命令
sendmsg"quit";
#发送退出通向命令
exec 8-;
exec 8-;
#关闭socket通道
exit 0;
这是通过重定向,实现socket通讯中,发送然后获取返回的例子。其实,上面代码看似一次只能发送一段。时间上。我们可以反复调用:sendmsg,捕捉输出数据。实现连续的,读与写操作。
实例截图:
其它实现方法:
其实通过:telnet也可以实现的。
[chengmo@centos5 shell]$(echo"stats";sleep 2)|telnet 127.0.0.1 11211
通过nc命令实现:
[chengmo@centos5 shell]$(echo"stats")|nc 127.0.0.1 11211
不需要加延迟,直接打开通道
第二个程序里面,看到shell完全可以处理交互设计了。如果按照这样,登陆ftp,pop3,stmp都可以类似实现。这些,我们通过shell socket类似程序实现,应该不困难,只是捕捉如发送解析的问题了。
Linux系统下安装配置postfix邮件服务器教程
一,安装postfix,cyrus-sasl,cyrus-imapd
如果yum提示找不到软件包,请换一下源,请参考centos 6推荐使用epel源
代码如下:
[root@localhost~]# yum install postfix
[root@localhost~]# yum install cyrus*
二,删除了sendmail
代码如下:
[root@localhost~]# rpm-e sendmail
或者
代码如下:
[root@localhost~]# yum remove sendmail
三,更改默认邮件传输代理(MTA)
代码如下:
[root@localhost sasl2]# alternatives--config mta
共有 1个程序提供“mta”。
选择命令
-----------------------------------------------
*+ 1/usr/sbin/sendmail.postfix
按 Enter来保存当前选择[+],或键入选择号码:1
上面的只有一个postfix,sendmail已经被我删了。可以通过下面命令来查看。
代码如下:
[root@localhost~]# alternatives--display mta
四,postfix,cyrus-sasl,cyrus-imapd相关配置
1,postfix主配置文件main.cf
代码如下:
[root@localhost postfix]# vim/etc/postfix/main.cf
myhostname= localhost//76行,将等号后面的部分改写为本机主机名
mydomain= 51yip.com//82行,设置域名
myorigin=$mydomain//97行,把$myhostname改为$mydomain
inet_interfaces= all//112行,把后面的localhost改成all
mydestination=$myhostname, localhost.$mydomain, localhost,$mydomain//163行,把前面的注释拿掉,并加一下$mydomain
mynetworks= 192.168.0.0/24, 127.0.0.0/8//263行,设置内网和本地IP
local_recipient_maps=//209行,把前面的注释拿掉。
smtpd_banner=$myhostname ESMTP unknow//568行,把前面的注释拿掉,然后把$mail_name($mail_version)改成unknow
p//在main.cf文件的底部加上以下内容
smtpd_sasl_auth_enable= yes//使用SMTP认证
broken_sasl_auth_clients= yes//让不支持RFC2554的smtpclient也可以跟postfix做交互。
smtpd_sasl_local_domain=$myhostname//指定SMTP认证的本地域名
smtpd_sasl_security_options= noanonymous//取消匿名登陆方式
smtpd_recipient_restrictions= permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination//设定邮件中有关收件人部分的限制
smtpd_sasl_security_restrictions= permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination//设置允许范围
message_size_limit= 15728640//邮件大小
mailbox_transport=lmtp:unix:/var/lib/imap/socket/lmtp//设置连接cyrus-imapd的路径
如果不加local_recipient_maps这个配置,收邮件收不到,下面是qq的退信。
收件人邮件地址(tank@51yip.com)不存在,邮件无法送达。host mail.51yip.com[122.225.***.***] said: 550 5.1.1: Recipient address rejected: User unknown in local recipient table(in reply to RCPT TO command)
2,cyrus-sasl配置
代码如下:
[root@localhost postfix]# vim/etc/sasl2/smtpd.conf//在文件尾部加上以下内容
log_level: 3//记录log的模式
saslauthd_path:/var/run/saslauthd/mux//设置一下smtp寻找cyrus-sasl的路径,在这里要提一下的32位的机器和64位的机器smtpd.conf的路径是不一样的。
p//这是centos 5.5 32位机器上smtpd的配置文件
[root@linux sasl2]# ls|grep conf
Sendmail.conf
smtpd.conf
[root@linux sasl2]# pwd
/usr/lib/sasl2
//这是centos 6.0 64位机器上smtpd的配置文件,其他地方没有smtpd的配置文件
[root@localhost postfix]# ls/etc/sasl2/|grep smtpd
smtpd.conf
网上有不少关于postfix安装文章,配置的时候并没有明确提出是32位机器,还是64位机器。所以在这里标明一下。
3,配置cyrus-imapd
cyrus-imapd的主要配置文件有下面三个
代码如下:
/etc/sysconfig/cyrus-imapd
p/etc/cyrus.conf
p/etc/imapd.conf
这里是默认的配置,也就是说上面三个文件我是没有动过的。在这里提醒一下imapd.conf在这个文件里面,你可以设置管理账号
,设置邮件存放目录,设置密码连接方式等。
五,启动postfix,cyrus-sasl,cyrus-imapd
启动cyrus-imapd服务,就可以同时提供pop和imap服务,如果你已安装了dovecot服务就可以删除掉,cyrus-imapd和dovecot二者选其一就行了,二都可以提供pop和imap服务,不过cyrus-imapd可以为每个用户创建一个信息,而且信箱具有层次结构,比较好管理。建议用cyrus-imapd。
代码如下:
[root@linux sasl2]#/etc/init.d/postfix start
[root@linux sasl2]#/etc/init.d/saslauthd start
[root@linux sasl2]#/etc/init.d/cyrus-imapd start
查看一下进程,
代码如下:
//smtp监听是25端口
[root@linux u]# netstat-tpnl|grep smtpd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6319/smtpd
代码如下:
//110(POP3)和143(IMAP)端口,下面都已经有了
[root@linux u]# netstat-tpnl|grep cyrus
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 23593/cyrus-master
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 23593/cyrus-master
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 23593/cyrus-master
tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN 23593/cyrus-master
tcp 0 0:::993:::* LISTEN 23593/cyrus-master
tcp 0 0:::995:::* LISTEN 23593/cyrus-master
tcp 0 0:::110:::* LISTEN 23593/cyrus-master
tcp 0 0:::143:::* LISTEN 23593/cyrus-master
tcp 0 0:::2000:::* LISTEN 23593/cyrus-master
启动是没有问题的。
六,测试cyrus-sasl
代码如下:
[root@linux t]# passwd cyrus//设置cyrus的密码
[root@linux sasl2]# testsaslauthd-u cyrus-p'******'//系统用户和密码
0: OK"Success."
如果显示是上面的内容说是smtp是没有什么问题
七,cyrus-imapd生产邮件管理员账号,并添加测试账号
安装完cyrus-imapd后会产生一个管理账号是cyrus,所属用户组是mail
代码如下:
[root@linux sasl2]# id cyrus//imapd.conf里面默认的管理员账号就是cyrus
uid=76(cyrus) gid=12(mail) groups=12(mail),76(saslauth)
在认证admin账号时,我发现32位系统和64位系统有一点不同,二种系统我都配置过,配置都是一样的,
但是出现的结果不一样,看下图
32位机器cyrus管理员用户认证
64位机器cyrus管理员用户认证
从上图可以看出,32位的系统是不用加上--auth plain,64位的要,如果不加的话,根本进不去。
进去后,我们来添加一下测试账号
代码如下:
[root@linux sasl2]# cyradm-u cyrus localhost
IMAP Password:
localhost cm tank
localhost lm
tank(HasNoChildren)
localhost quit
这样我们可以在/var/spool/imap中看到,生成的目录,32位机器和64位机器生成的目录是不一样的
代码如下:
//这是64位系统生成的目录
[root@localhost u]# ls
user^tank
[root@localhost u]# pwd
/var/spool/imap/u
//这是32位系统生成的目录
[root@linux t]# ls
tank
[root@linux t]# pwd
/var/spool/imap/t
八,测试收发邮件
测试前添加一下DNS,
1,mail.51yip.com A默认 122.225.***.***
2,mail.51yip.com A联通 60.12.***.***
3,@ MX默认 mail.51yip.com
第1和第2,是添加二条A记录,第三行,设置了一下MX记录,这个千万不要忘了,不然你的域名是不通的。
方法有很多,我们可以利用telnet来测试,不过用telnet来测试收发邮件比较麻烦,用linux自带的
mail命令就方便多了
代码如下:
[root@localhost u]# mail-s'看一下' 95219454@qq.com/etc/imapd.conf
CentOS操作系统的22个log日志
常见的Linux操作系统登录文件有如下几个:
1)/var/log/secure:记录登录系统存取数据的文件;
例如pop3,ssh,telnet,ftp等都会记录在此.
2)/ar/log/wtmp:记录登录这的信息记录,被编码过,所以必须以last解析;
3)/var/log/message:jihu所有的开机系统发生的错误都会在此记录;
4)/var/log.boot.log:记录一些开机或者关机启动的一些服务显示的启动或者关闭的信息;
5)/var/log/maillog:记录邮件的存取和往来;
6)/var/log/cron:用来记录crontab这个服务的内容;
7)/var/log/httpd,/var/log/mysqld.log等等文件,记录几个不同的网络服务的记录文件;
8)/var/log/acpid, ACPI- Advanced Configuration and Power Interface,表示高级配置和电源管理接口。
后面的 d表示 deamon。 acpid也就是 the ACPI event daemon。也就是 acpi的消息进程。用来控制、获取、管理 acpi的状态的服务程序。
9)/var/run/utmp记录着现在登录的用户;
10)/var/log/lastlog记录每个用户最后的登录信息;
11)/var/log/btmp记录错误的登录尝试;
12)/var/log/dmesg内核日志;
13)/var/log/cpus CPU的处理信息;
14)/var/log/syslog事件记录监控程序日志;
15)/var/log/auth.log用户认证日志;
16)/var/log/daemon.log系统进程日志;
17)/var/log/mail.err邮件错误信息;
18)/var/log/mail.info邮件信息;
19)/var/log/mail.warn邮件警告信息;
20)/var/log/daemon.log系统监控程序产生的信息;
21)/var/log/kern内核产生的信息;
22)/var/log/lpr行打印机假脱机系统产生的信息;