各种SSH终端软件对比

Xshell

收费软件

ssh secure shell

免费软件

secureCRT

Secure[1] CRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单的说是Windows下登录UNIX或Linux服务器主机的软件。SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输。有流行CRTTelnet客户机的所有特点,包括:自动注册、对不同主机保持不同的特性、打印功能、颜色设置、可变屏幕尺寸、用户定义的键位图和优良的VT100,VT102,VT220和ANSI竞争.能从命令行中运行或从浏览器中运行.其它特点包括文本手稿、易于使用的工具条、用户的键位图编辑器、可定制的ANSI颜色等.SecureCRT的SSH协议支持DES,3DES和RC4密码和密码与RSA鉴别。

SecureCRT也是一个收费软件

PuTTY

Putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具。
用它来远程管理Linux十分好用,其主要优点如下:
◆ 完全免费;
◆ 支持公钥认证;
◆ 全面支持ssh1和ssh2;
◆ 绿色软件,无需安装,下载后在桌面建个快捷方式即可使用;
◆ 体积很小,仅484KB(0.63 版本);
◆ 操作简单,所有的操作都在一个控制面板中实现。

11个rsync使用实例

rsync表示 remote sync,其用于在本地或与远程主机间进行文件或目录备份。相比较scp等工具,rsync有以下优点:

  1. 速度:除首次全拷贝外,其他时候实现增量拷贝,加快传输速度
  2. 安全:传输数据时可用ssh加密传输
  3. 带宽占用:rsync可对数据进行分块压缩传输,相比其他文件传输工具占用更少带宽
  4. 权限限制:非root用户也可安转和执行rsync命令

rsync执行方式如下:

$ rsync options source destination

source 和 destination 既可以指示本地,也可以是远程机器。下面通过实例说明rsync的用法。

1.在本地两个目录间进行数据同步

以下命令用于在两个目录间完成文件拷贝:

$ rsync -zvr /var/opt/lx/ /root/temp/
sending incremental file list
a.c
b.c

sent 211 bytes  received 50 bytes  522.00 bytes/sec
total size is 81  speedup is 0.31

以上选项表示意思如下:

  • -z 传输前进行压缩
  • -v 显示命令执行详细信息
  • -r 递归拷贝目录

此时我们看本地和目的地两个文件属性,注意到两者的时间戳是不同的:

$ ll /var/opt/lx/a.c /root/temp/a.c 
-rw-r--r-- 1 root root 73 04-06 21:11 /root/temp/a.c
-rw-r--r-- 1 root root 73 04-06 21:05 /var/opt/lx/a.c

若要保留原文件时间戳、属主/属组、权限属性,我们可以使用 -a 选项:

$ rsync -azv /var/opt/lx/ /root/temp/

-a选项亦包含递归的作用,因而可以替代-r选项。

2.本地与远程主机间完成数据同步

我们可以用rsync将本地的文件,同步到远程机器:

$ rsync -avz /root/temp/ lx@192.168.1.103:/home/lx/tmp/
Password:  
sending incremental file list
created directory /home/lx/tmp
./
a.c
b.c

sent 216 bytes  received 53 bytes  21.52 bytes/sec
total size is 81  speedup is 0.30

以上我们指明了目的机器ip、登录用户以及所路径,并且需要输入相应用户的登录密码。以上命令完成本地到远程机器的同步,调换source和destination的位置,我们亦可完成远程机器到本地的数据同步。

3.使用ssh通道进行数据同步

在与远端进行数据同步时,我们一般采用ssh通道,使用 -e ssh 选项可以完成该功能:

$ rsync -avz -e ssh /root/temp/ lx@192.168.1.103:/home/lx/tmp/

4.不覆盖目的地对文件已作的修改

经常出现这样的场景,我们对源文件和目的地文件均作了修改,同时想将源文件作的修改同步到目的地,但又保留对目的地文件的更改,此时可以使用 -u 选项:

$ ls -l /root/temp/b.c 
-rw-r--r-- 1 root root 12 04-06 22:19 /root/temp/b.c
$ ls -l /var/opt/lx/b.c 
-rw-r--r-- 1 root root 8 04-06 21:06 /var/opt/lx/b.c
$ rsync -avzu /var/opt/lx/ /root/temp/
sending incremental file list
./
a.c

sent 172 bytes  received 34 bytes  412.00 bytes/sec
total size is 101  speedup is 0.49 

以上目的地 b.c 文件经过修改,与源文件不相同,此时使用 -u 选项,可以看到对 b.c 并不进行同步,目的地 b.c 的修改得以保存。

5.删除不存在于源目录的目的地文件

对于不存在于源目录,但存在于目的地的文件,有时我们想在做文件同步时删除它们,–delete 选项可以满足要求:

$ rsync -avz --delete /var/opt/lx/ /root/temp/
sending incremental file list
./
deleting c.c
b.c

sent 101 bytes  received 34 bytes  270.00 bytes/sec
total size is 101  speedup is 0.75

以上目的地相比源目录多了c.c文件,同步时 –delete 将该文件删除。 

6.在同步时不在目的地创建新文件

有时我们只想对目的地已经有的文件进行同步,而不理会源目录新增的文件,此时可以使用 –existing 选项:

$ rsync -avz --existing /var/opt/lx/ /root/temp/

7.显示执行进度

使用 –progress 选项可以显示同步的进度,包括文件传输完成进度、传输速率信息:

$ rsync -avz --progress /var/opt/lx/ /root/temp/
sending incremental file list
./
a.c
          93 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)
b.c
           8 100%    7.81kB/s    0:00:00 (xfer#2, to-check=0/3)

sent 220 bytes  received 53 bytes  546.00 bytes/sec
total size is 101  speedup is 0.37

8.查看 source 和 destination 间的区别

rsync完成源目录到目的地的拷贝,若能查看到源目录与目的地间的差异,这对同步十分有帮助,-i 选项可以显示源目录与目的地间的差异,示例如下。

source:

$ ls -l /var/opt/lx/
总计 8
-rw-r--r-- 1 root root 145 04-06 23:11 a.c
-rw-r--r-- 1 root root   8 04-06 21:06 b.c

destination:

$ ls -l /root/temp/
总计 8
-rw-r--r-- 1 root root 93 04-06 22:20 a.c
-rw-r--r-- 1 lx   root  8 04-06 21:06 b.c

-rw-r–r– 1 lx   root  8 0406 21:06 b.c

可以看到 source 与 destination 有两处不同,一处为 a.c 的文件大小,第二处为 b.c 的属主,此时添加 -i 选项进行数据同步,有以下输出:

$ rsync -avzi /var/opt/lx/ /root/temp/
sending incremental file list
.d..t...... ./
>f.st...... a.c
.f....o.... b.c

sent 175 bytes  received 37 bytes  424.00 bytes/sec
total size is 153  speedup is 0.72

对于同步的每个文件,均对应有一条输出,有11个标志位指示源文件与目的地文件的区别,在以上例子中,各标志位意义如下:

  • > 指示传输到本地
  • f  指示所传为文件
  • s  指示文件大小不一致
  • t  指示时间戳不一致
  • o  指示属主不一致

 9.按指定模式进行同步

使用 –include 和 –exclude 选项,可以帮助我们完成只同步特定文件的目的,例如以下只同步以 ‘a’ 开头的文件:

$ rsync -avz --include 'a*' --exclude '*' /var/opt/lx/ /root/temp/
sending incremental file list
./
a.c
aa.c

sent 220 bytes  received 53 bytes  546.00 bytes/sec
total size is 148  speedup is 0.54

10.限制传输文件的大小

使用 –max-size 选项,我们可以限制传输文件的最大大小:

$rsync -avz --max-size='100K' /var/opt/lx/ /root/temp/

以上命令限制传输的文件大小只能小于或等于100K,另可以使用 M 和 G 作为大小单位。

11.全拷贝

默认情况下 rsync 采用增量拷贝,这样能节省带宽,在所同步文件不大的情况下,我们可以通过 -W 选项实现全拷贝:

$ rsync -avzW /var/opt/lx/ /root/temp/

linux下which、whereis、locate、find 命令的区别

 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索。
1、which
语法:
[root@redhat ~]# which 可执行文件名称

which是通过 PATH环境变量到该路径内查找可执行文件,每个用户的环境变量可能不同,所以搜索出来的结果也可能不同。可能用echo $PATH查看当前环境变量。-a可以列出所有PATH目录下存在的文件,而不仅仅是找到的第一个文件。默认只显示找到的第一个文件。注意:which只会搜寻可执行文件,普通文件即使在$PATH变量路径中,也是查找不到的。

例如:
[root@redhat ~]# which passwd
/usr/bin/passwd

2、whereis
语法:
[root@redhat ~]# whereis [-bmsu] 文件名

查找名中含有查找串的文件

参数说 明:
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
例如:
[root@redhat ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
将和passwd文件相关的文件都查找出来

[root@redhat ~]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd
只将二进制文件 查找出来

和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下RHDL和centos一天更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

3、 locate
语法:
[root@redhat ~]# locate 文件或者目录名称

查找含有查找字串的文件和目录,如果是目录,就会将目录下的所有文件列举一遍分别作为一个查找结果。

例 如:
[root@redhat ~]# locate passwd
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp
/lib/security/pam_unix_passwd.so
/lib/security/pam_passwdqc.so
/usr/include/rpcsvc/yppasswd.x
/usr/include/rpcsvc/yppasswd.h
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph
/usr/lib/kde3/kded_kpasswdserver.la
/usr/lib/kde3/kded_kpasswdserver.so
/usr/lib/ruby/1.8/webrick/httpauth/htpasswd.rb
/usr/bin/vncpasswd
/usr/bin/userpasswd
/usr/bin/yppasswd
…………

4、 find
语法:
[root@redhat ~]# find 路径 参数
参数说明:
时间查找参数:
-atime n :将n*24小时内存取过的的文件列出来
-ctime n :将n*24小时内改变、新增的文件或者目录列出来
-mtime n :将n*24小时内修改过的文件或者目录列出来
-newer file :把比file还要新的文件列出来
名称查找参数:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户者名称为name的文件
-name file :寻找文件名为file的文件(可以使用通配符)
例 如:
[root@redhat ~]# find / -name zgz
/home/zgz
/home/zgz/zgz
/home/weblogic/bea/user_projects/domains/zgz
/home/oracle/product/10g/cfgtoollogs/dbca/zgz
/home/oracle/product/10g/cfgtoollogs/emca/zgz
/home/oracle/oradata/zgz

[root@redhat ~]# find / -name '*zgz*'
/home/zgz
/home/zgz/zgz1
/home/zgz/zgzdirzgz
/home/zgz/zgz
/home/zgz/zgzdir
/home/weblogic/bea/user_projects/domains/zgz
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004
/home/weblogic/bea/user_projects/domains/zgz/zgz.log
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005

当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查 找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。

 

locate 是在数据库里查找,可以查找含有字符串的文件和目录
whereis 在数据库中查找,可以查找含有字符串的文件,可以找到可执行命令和man page
find 就是根据条件查找文件
which 根据环境变量PATH查找,一般只查找可执行文件,可以找到可执行文件和别名(alias)

Lee补充:用locate命令的话,如果磁盘上文件有更改,需要执行updatedb命令来更新数据库,否则结果可能会与实际不符合。

历尽艰辛的putty免密码SSH登陆服务器的配置

  前段时间在虚拟机上装了个CentOS,然后用puttyl连接上去操作,为了方便,不用每次登陆输入密码,我就想配置用密钥免密码直接登陆,下面是配置过程:

  1、在服务器的用户目录下建立一个文件夹.ssh,注意有一个句点,用来存储密钥用。

  2、生成密钥,然后用如下命令:

ssh-keygen -t rsa

  生成的过程中先会问你要存成什么文件,直接回车用默认的,就是储存在上一步建立的.ssh目录里。

  然后会让你输入passphrase(即口令,如果设置了,登陆时要输入这个口令),可以为空。最后会生成两个文件id_rsa和id_rsa.pub。

  3、公钥文件名authorized_keys。进入.ssh目录,用如下命令生成:

cp id_rsa.pub authorized_keys

  如果你不想保留id_rsa.pub,也可以直接用mv命令。

  4、更改文件权限,以用户root为例:
chmod 700 /root
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

  用户目录root的权限设置一般会被忽略掉,导致登陆时日志文件/var/log/secure里会有这样的信息:
Authentication refused: bad ownership or modes for directory /root

  我就是在这里吃了亏,到处找解决方案,不断地尝试各种权限设置,有人说是Selinux造成的,于是我也去关闭,同样不行,最后还是设置了用户目录的权限才成功。

  5、SSH服务的配置。更改配置文件/etc/ssh/sshd_config,找到以下三行:

XML/HTML代码
  1. #RSAAuthentication yes  
  2. #PubkeyAuthentication yes  
  3. #AuthorizedKeysFile      .ssh/authorized_keys  

将前面的#删除,其中第三行的authorized_keys一定要确认与第3步里生成的文件名一致。保存后重启SSH服务:
service sshd restart

  6、PuTTY上的私钥配置

  由于CentOS是OpenSSH,生成的私钥与putty和格式不同,所以不能直接拿来使用,先把第2步中在服务器上生成的私钥文件id_rsa下载到本地,然后用PuTTYgen转换一下:用菜单File->Load private key导入私钥文件id_rsa,然后点击Save private key,保存好的新私钥文件就能用来给PuTTY登陆使用了。PuTTY的具体设置我就不说了,不过有个方法可以方便使用,建立一个PuTTY快捷方式,然后更改快捷方式的属性里的目标一栏加上如下参数:
-i "私钥文件路径" root@192.168.10.60

保存后就能直接双击这个快捷方式登陆了。

PHP5.5编译安装之后设定PHP-FPM自启动及服务控制

   PHP-5.3.3版本以后PHP已经包含了PHP-FPM,编译时加上参数–enable-fpm就会安装PHP-fpm。

  php-fpm装完后默认没有自动启动,需要设置自动启动。PHP-5.3.3版本以后源代码包中已经自带启动脚本,复制到/etc/init.d目录下,并更改权限,命令如下:

cp <php-source-dir>/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm

然后使用chkconfig设定开机启动:

chkconfig php-fpm on

修改php-fpm配置文件,如果PID文件配置被注释了,就删除pid = run/php-fpm.pid前面的分号。

这样设置完后同时也能用/etc/init.d/php-fpm来控制php-fpm了,参数有:start|stop|force-quit|restart|reload|status,如重启就用命令:/etc/init.d/php-fpm restart

如果启动时报路径错误,就检查下/etc/init.d/php-fpm里的相关路径。

nginx与php-fpm打开PHP页面报错File not found

   最近在虚拟机上装了个CentOS6.5,由于是以最小化的方式装的,装LNMP环境时缺少好多东西,特别是安装PHP时缺少很多东西,过程是非常的曲折。

  我装的版本分别是:Nginx 1.6.0,Mysql 5.6.19,PHP 5.5.14。前两个用Yumj装起来还比较顺利,装PHP的时候我采用自己编译的方式安装,以php-fpm的方式与Nginx配合,装完后写了个php文件,一访问提示File not found,查看Nginx日志,有错误信息:

[error] "1842#0" *7 connect() failed (111: Connection refused)

用命令netstat -ano | grep 9000查了一下,发现9000端口没开,应该是php-fpm没有启动。马上去启动:

#/usr/local/sbin/php-fpm

启动php-fpm后还是提示File not found。再查看Nginx的错误日志,这回的错误信息是:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

折腾了半天,发现Nginx默认的配置文件是站点的root写在了各个location配置块里了,之前只改了根目录的配置,没注意php配置这块里也有一个,将root这个参数移到server块下,将配置PHP的那块location改成:

XML/HTML代码
  1. location ~ .php$ {  
  2.     try_files $uri =404;  
  3.     fastcgi_pass   127.0.0.1:9000;  
  4.     fastcgi_index  index.php;  
  5.     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  
  6.     include        fastcgi_params;  
  7. }  

其中try_files $uri =404;这个配置项是为了让Nginx判断文件不存在就直接返回404,而不用再发给php-fpm去处理。

重启Nginx:

#service nginx restart

CentOS下yum安装Nginx

 CentOS里直接用yum安装Nginx是不会成功的,要先做一些处理。

先到http://nginx.org/en/linux_packages.html找到适合你的CentOS版本的rpm包,记下路径

执行:

rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

系统就会开始自动下载这个rpm包,然后安装。你也可以先用wget下载这个包,然后再运行rpm命令来安装。

然后就可以直接用yum install nginx来安装Nginx了。

安装完后在浏览器里打开127.0.0.1,如果看到Welcome to nginx!这样的内容,说明安装成功了。

Centos 6的单网卡多IP设置

cd /etc/sysconfig/network-scripts #进入网卡配置目录
cp ifcfg-eth0 ifcfg-eth0:0 #拷贝一个网卡配置文件
vi ifcfg-eth0:0 #用vi编辑器编辑
内容如下:
DEVICE=eth0:0 #此处添加:0,保持和文件名一致,添加多个IP依次递增
ONBOOT=yes #是否开机激活
BOOTPROTO=static #静态IP,如果需要DHCP获取请输入dhcp
IPADDR=192.168.1.2 #此处修改为要添加的IP
NETMASK=255.255.255.0 #子网掩码根据你的实际情况作修改

保存完之后重启网卡让设置生效,也可以重启服务器。

重启网卡命令:service network restart
重启服务器命令:reboot

只要设置没有问题,重启之后新添加的ip就生效了。用ifconfig查看IP

加IP段:
vi ifcfg-eth0-range0 #用Vi编辑配置文件
内容如下:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR_START=192.168.2.2 #起始IP
IPADDR_END=192.168.2.254 #结束IP
CLONENUM_START=1 #表示这段IP网卡号从eth0:1开始
NETMASK=255.255.255.0

Centos 6 最小化安装后的网络设置

 在centos最小化安装刚安装完毕的时候。如果不经过设置是无法联网的,

不能联网的原因基本就是以下的3个。

1.没有网卡驱动。
如果ifconfig中只有lo,并且sudo ifconfig eth0 up都找不到网卡,那基本就是网卡没有驱动起来了。

2.网卡没有开机启动
这种情况挺多的,貌似在安装系统后才添加的网卡都不是默认启动的。这时候可以试试sudo ifconfig eth0 up (具体是eth几要看你是第几块网卡)。如果up成功了,ifconfig看看有没有对应的网卡的信息。如果有信息,那就说明网卡没有开机自动加载,只要在对应网卡的配置文件中加入 ONBOOT=yes 就ok了。如果up不成功,驱动又已经装好了,那这个问题就不在本文的讨论范围内了。

3.DHCP
如果centos的dhclient没有开机启动。这时候就要根据你的网络情况开启dhclient或手动设置ip。试着输入sudo dhclient eth1 (同上,网卡编号看情况),如果启动后获得了ip,那么就是这个问题了。解决的方法也很简单,一种是在开机脚本中写入dhclient,另一种则是在网卡的配置文件中加入BOOTPROTO=dhcp。个人推荐第二种。

 

phpStorm中的CodeIgniter代码自动提示

 首先到GitHub上下载文件

然后按照下面的步骤进行设置:
1.将下载的文件放置项目根目录.
2.在PHPStorm中打开项目,分别找到system/core/Controller.php,system/core/Model.php,system/database/DB_active_rec.php文件,右键,选择Mark as Plain Text.
3.打开my_models.php,按照上面注释中的示例的格式在这段注释代码中继续添加你的model,如你有一个admin_model就在注释中加上一行

PHP代码
  1. * @property admin_model       $admin_model  

然后你在写代码时打完admin_model后其中的方法就会提示并能自动完成。