02/28/14

shell脚本【bad interpreter: 没有那个文件或目录】错误

【bad interpreter:没有那个文件或目录】报错的原因

1、文件格式的问题,文件是在Windows下编写的,换行的方式与Unix不一样。在vim下面,如果不Set一下又完全看不出来。

2、操作系统是windows,在windows下编辑的脚本,有可能有不可见字符。脚本文件是DOS格式的

即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.

 

问题分析:

1、将windows 下编写好的SHELL文件,传到linux下执行,提示出错。

2、出错信息:bad interpreter: 没有那个文件或目录。

 

转换不同平台的文本文件格式可以用
1. unix2dos或dos2unix这两个小程序来做, 很简单。在djgpp中这两个程序的名字叫dtou和utod, u代表unix, d代表dos
2. 也可以用sed 这样的工具来做
sed ‘s/^M//’ filename > tmp_filename
mv -f tmp_filename filename
特别说明:^M并不是按键shift + 6产生的^和字母M, 它是一个字符, 其ASCII是0x0D, 生成它的办法是先按CTRL+V, 然后再回车(或CTRL+M)

 

02/21/14

telnet 测试发送邮件过程

一、telnet发送邮件过程

[root@yf_114 chen-123]# telnet mail.phpdba.net 25
Trying mail.phpdba.net…
Connected to mail.phpdba.net.
Escape character is ‘^]’.
220 mail.phpdba.net ESMTP
helo mail.phpdba.net
250 mail.phpdba.net
ehlo mail.phpdba.net
250-mail.phpdba.net
250-PIPELINING
250 8BITMIME
auth login
502 unimplemented (#5.5.1)
mail from:<ctest@phpdba.net>
250 ok
rcpt to:<chen-123@phpdba.com>
250 ok
data
354 go ahead
From:test@phpdba.net
To:chen-123@phpdba.com
Date:Fir,21 Oct 2013 15:06:22 +0800
Subject:test

hi,chen-123!
This is a test mail,you don’t reply it.

.
250 ok 1392967270 qp 29463
quit
221 mail.phpdba.net
Connection closed by foreign host.

二、telnet测试smtp发送邮件命令说明

SMTP 命令包括:
HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
EHLO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
MAIL FROM 命令中指定的地址是发件人地址
RCPT TO 标识单个的邮件接收人;可有多个 RCPT TO;常在 MAIL 命令后面。
DATA 在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以 CRLF.CRLF 结束
VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP 查询服务器支持什么命令
NOOP 无操作,服务器应响应 OK
RSET 重置会话,当前传输被取消
QUIT 结束会话
连接到 Qmail 使用 SMTP 命令发送邮件
例如:安装 Qmail 的邮件服务器IP是192.168.0.1 (蓝色字体内容由客户端输入,红色字体内容是服务返回的)
telnet 192.168.0.1 25 ————————————— 使用 telnet 命令连接服务器 25 端口
Trying 192.168.0.1… ————————————— 正在连接服务器 25 端口
Connected to 192.168.0.1. ———————————– 连接服务器 25 端口成功
220 localhost ESMTP Qmail – by ExtMail ——————– 显示服务器标识 ( 修改main.cf 的smtpd_banner)
helo test.com ———————————————– 向服务器标识用户身份,发信不要认证,跳过下面几步直接发送 mail from 命令
250 localhost
ehlo test.com ———————————————— ESMTP 命令,发信需要认证。
250-localhost
250-PIPELINING
250-SIZE 102400000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login ————————————————- 进行用户身份认证
334 VXNlcm5hbWU6
Y29zdGFAYW1heGl0Lm5ldA== ———————————– BASE64 加密后的用户名
334 UGFzc3dvcmQ6
MTk4MjIxNA== ———————————————– BASE64 加密后的密码
235 authentication successfully —————————- 身份认证成功
(535 authentication failed ——————————— 身份认证失败)
发到本系统中域名下的账户可跳过身份认证。
mail from: <test1@domain.com> —————————— mail from 地址 test1@domain.com
250 ok —————————————————– 命令执行成功
rcpt to: <test2@domain.com> ——————————– 递送给地址 test2@domain.com
250 ok —————————————————– 命令执行成功
data ——————————————————- 数据传输初始化
354 End data with .—————————————– 开始传输数据
From: test1@domain.com
To: test2@domain.com
Date: Mon, 25 Oct 2004 14:24:27 +0800
Subject: test mail
Hi, test2
This is a test mail, you don’t reply it.
.
———————————————————— 数据内容,包括BASE64加密后的邮件内容, 以 CRLF.CRLF 结束数据传输
250 OK: queued as 2F6DE3929——————————— 命令执行成功
quit ——————————————————- 结束会话
221 Bye
Connection closed by foreign host .————————- 断开连接
02/20/14

Unable to find the socket transport “ssl”

Failed to connect 24054544 Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP?

该错误表明PHP不支持openssl

解决方案:

windows下,在php.ini中打开opensll扩展,并将php目录下的libeay32.dll和ssleay32.dll两个库拷贝到system32下;

linux下,重新编译php,编译时加上参数–enable-ssl

02/11/14

kernel: TCP: time wait bucket table overflow

1、报错信息

Feb 11 10:46:05 yfnj_253 kernel: TCP: time wait bucket table overflow
Feb 11 10:46:05 yfnj_253 kernel: TCP: time wait bucket table overflow
Feb 11 10:46:05 yfnj_253 kernel: TCP: time wait bucket table overflow
Feb 11 10:46:05 yfnj_253 kernel: TCP: time wait bucket table overflow
Feb 11 10:46:05 yfnj_253 kernel: TCP: time wait bucket table overflow

2、解决方法

[root@yfnj_253 ~]# vim /etc/sysctl.conf

net.ipv4.tcp_max_tw_buckets = 6000

[root@yfnj_253 ~]# netstat -na|awk ‘/^tcp/{++S[$NF]};END {for(a in S)print a,S[a]}’
TIME_WAIT 5784
FIN_WAIT1 113
FIN_WAIT2 140
ESTABLISHED 1325
SYN_RECV 29
LAST_ACK 23
LISTEN 26

[root@yfnj_253 ~]# vim /etc/sysctl.conf

net.ipv4.tcp_max_tw_buckets = 8000 //修改为8000

[root@yfnj_253 log]# tail messages

[root@yfnj_253 log]# sysctl -p //使更改参数生效

[root@yfnj_140_253 log]# netstat -na|awk ‘/^tcp/{++S[$NF]};END {for(a in S)print a,S[a]}’
TIME_WAIT 6633
CLOSE_WAIT 1
FIN_WAIT1 141
FIN_WAIT2 180
ESTABLISHED 1335
SYN_RECV 32
CLOSING 7
LAST_ACK 25
LISTEN 26

报错日志没有增加,问题暂时解决!

3、报错原因

 

服务器的TCP连接数,超出了内核定义最大数。

net.ipv4.tcp_max_tw_buckets这个参数是系统同时保持timewait套接字的最大数量。如果超过这个数字,time-wait套接字将立刻被清除并打印警告信息。这个限制仅仅是为了防止简单的 DoS攻击,不能过分依靠它或者人为地减小这个值,如果网络实际需要大于缺省值,更应该增加这个值。

02/10/14

errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference

1、编译ucspi-tcp-0.88遇到问题
./load tcpserver rules.o remoteinfo.o timeoutconn.o cdb.a \
dns.a time.a unix.a byte.a  `cat socket.lib`
/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in tcpserver.o
/lib64/libc.so.6: could not read symbols: Bad value
collect2: ld 返回 1
make: *** [tcpserver] 错误 1
[root@phpdba ucspi-tcp-0.88]# vim tcpserver.c

#include <errno.h> //添加这行,编译通过
#include “error.h”

2、编译qmail遇到同类问题

[root@phpdba qmail-1.03]# make setup check
./load auto-str substdio.a error.a str.a
/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in substdio.a(substdo.o)
/lib64/libc.so.6: could not read symbols: Bad value
collect2: ld 返回 1
make: *** [auto-str] 错误 1

解决方法:

[root@muxuyuan1 qmail-1.03]# vim compile
exec cc -O2 -c ${1+”$@”}
修改为:
exec cc -include /usr/include/errno.h -O2 -c ${1+”$@”}

02/7/14

WARNING:old character encoding and/or character set

现象描述:登录服务器,使用man gcc查看帮助时,发现帮助文档最上方出现“WARNING:old character encoding and/or character set ”提示。

[root@phpchen ~]# whereis iconv
iconv: /usr/bin/iconv /usr/local/bin/iconv /usr/include/iconv.h /usr/share/man/man1p/iconv.1p.gz /usr/share/man/man3p/iconv.3p.gz /usr/share/man/man3/iconv.3.gz /usr/share/man/man1/iconv.1.gz

解决方法:
1、mv /usr/local/bin/iconv /usr/local/bin/iconv.remove
2、卸载自己装的libiconv