标签存档: linux

Linux FTP 安装与配置

安装与配置:

$ apt-get install vsftpd
$ service vsftpd start #重启restart;停止stop
$ vim /etc/vsftpd.conf
anonymous_enable=YES #是否允许anonymous登录FTP服务器,默认是允许的
anon_upload_enable=YES #允许匿名上传
anon_mkdir_write_enable=YES #允许匿名用户建立文件夹
local_enable=YES #是否允许本地用户登录FTP服务器,默认是允许
write_enable=YES #是否允许用户具有在FTP服务器文件中执行写的权限,默认是允许
local_umask=022 #设置本地用户的文件生成掩码为022,默认是077
xferlog_enable=YES #启用上传和下载日志功能
connect_from_port_20=YES #启用FTP数据端口的连接请求
listen=YES #使vsftpd 处于独立启动模式

#当chroot_local_user=NO、chroot_list_enable=YES时,vsftpd.chroot_list中用户为锁定用户,即他们除了自己的目录,不可以访问其他目录。
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list #vsftpd.chroot_list是没有创建的需要自己添加,要想控制帐号就直接在文件中加帐号即可(一行一个用户帐号)

#添加ftp用户
$ useradd -g ftp -d /var/www/test/ -s /bin/false ftptest #-g ftp指定该用户到ftp组;-s /bin/false该用户不能登录系统
$ passwd ftptest #设置密码
$ chown -R root.ftp /var/www/test/
$ chmod 775 /var/www/test/ -R

遇到问题:
1.在passwd更改密码时,出现:passwd: Authentication token manipulation error,导致无法更改用户密码
解决办法:mount -rw -o remount /

2.530 Login incorrect
解决办法:
vim /etc/shells
增加一行:/bin/false

Python SocketServer

这几天在搞2台服务器同步文件的问题,由于公司文件传送限制用户权限,导致写好的传送脚本scp.exp用apache用户无法执行脚本同步。所以另外想办法,参照相关文档用python写了一个SocketServer,在后台跑然后接受php的命令去执行脚本($ nohup python server.py > nohup.out &或者$ python server.py &,然后#exit,再ssh登陆,查看后台进程#ps -ef | grep py,能查到server.py的进程就OK了。)
server端:server.py

import os
import SocketServer
class MyHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        while 1:
            dataReceived = self.request.recv(1024)
            if not dataReceived: break
            #self.request.send(dataReceived)
            #print dataReceived
            if dataReceived == 'cmd=1':
                os.system('/home/cgi/scp.exp')
                self.request.send(dataReceived+'&result=1\n')
            else:
                self.request.send(dataReceived+'&result=0\n')
myServer = SocketServer.ThreadingTCPServer(('localhost',6000), MyHandler)
myServer.serve_forever()

client端:client.py

import socket
remote_host = '127.0.0.1'
remote_port = 6000
send_buf = raw_input()
#send_buf = open('test.txt', 'rb').read()
#send_buf = send_buf.replace('\x0D\x0A', '')
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((remote_host, remote_port))
sock.send(send_buf)
response_data = sock.recv(1024)
print response_data
sock.close()

或者用PHP写client端:client.php

$fp = fsockopen("127.0.0.1", 6000, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";exit;
} else {
    $out = "cmd=1";
    fwrite($fp, $out);
    while (!feof($fp)) {
        $str .= fgets($fp, 4096);
    if(strpos($str, "\n") !== FALSE){
        if(strpos($str, "&result=1") != FALSE){
            break;
        }else{
    }
    }
}
fclose($fp);

启动apache 报错:libphp5.so:undefined symbol: zend_parse_parameters

今天在PHP扩展ssh2的时候,重启apache时候,发现报错,网上找了好久资料,一种是关闭selinux,怕安全性问题没这么做,后来又找到了一个解决方案(http://www.linuxforums.org/forum/red-hat-fedora-linux/87975-configuring-php-work-apache.html),如下:

$ /usr/local/apache2/bin/apachectl start
httpd: Syntax error on line 203 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib/httpd/modules/libphp5.so into server: /usr/lib/httpd/modules/libphp5.so: undefined symbol: zend_parse_parameters

解决方法:
首先,安装bison,bison 是替代yacc的语法分析程序生成器。

$ wget http://ftp.gnu.org/gnu/bison/bison-2.5.tar.gz
$ tar -zxvf bison-2.5.tar.gz
$ cd bison-2.5
$ ./configure
$ make
$ make install

然后,重新编译php

$ make install distclean
$ /usr/local/apache2/bin/apachectl start

Linux Mysql常用命令

连接Mysql
1、本地连接
mysql -uroot -p123456
2、远程连接
mysql -h110.110.110.110 -uroot -p123456
//连接host为110.110.100.100的服务器,数据库用户名为root,密码为123456的机器,回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

操作Mysql
1、显示数据库列表。
show databases;
2、显示库中的数据表:
use mysql; //打开库
show tables;
3、显示数据表的结构:
describe 表名;
4、建库:
create database 库名;
5、建表:
use 库名;
create table 表名(字段设定列表);
6、删库和删表:
drop database 库名;
drop table 表名;
7、将表中记录清空:
delete from 表名;
8、显示表中的记录:
select * from 表名;
9、导出数据库和表:
mysqldump -hhost -uuser -ppass –databases dbname > file.sql //不是在mysql>状态下执行
10、增加新用户:
grant select on 数据库.* to 用户名@登录主机 identified by “密码”
如增加一个用户test密码为123,让他可以在任何主机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
grant select,insert,update,delete on *.* to ” Identified by “123″;
增加所有权限命令:
GRANT ALL PRIVILEGES ON *.* TO ‘root’@'%’ IDENTIFIED BY ’123456′;
11、刷新权限:
FLUSH PRIVILEGES;
12、查看创建表的SQL语句:
SHOW CREATE TABLE table_name;
13、查看表状态(已用空间等):
SHOW TABLE STATUS LIKE ‘Login’\G
*************************** 1. row ***************************
Name: Login
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 31687398
Avg_row_length: 110
Data_length: 3494789120
Max_data_length: 0
Index_length: 1858551808
Data_free: 67802905968640
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options: partitioned
Comment: NULL
1 row in set (28.03 sec)

samba安装与配置

由于公司的代码统一独立服务器管理,为了方便开发,在开发机上配置samba映射一个目录,来进行SVN的提交和更新。

samba安装

$ wget http://www.samba.org/samba/ftp/stable/samba-3.6.0.tar.gz
$ ls
$ rm samba-3.6.0.tar.gz
$ rz
$ tar -zxvf samba-3.6.0.tar.gz
$ cd samba-3.6.0/
$ ls
$ find . -name configure
$ ./source3/configure
$ cd source3/
$ mkdir /usr/local/samba
$ ./configure --prefix=/usr/local/samba/
$ make
$ make install
$ make clean
$ cd /usr/local/samba
$ ls
$ mkdir etc
$ cp /home/super/samba-3.6.0/examples/smb.conf.default  ./etc/smb.conf

//启动samba服务

$ /usr/local/samba/sbin/smbd -D
$ /usr/local/samba/sbin/nmbd -D
$ /usr/local/samba/sbin/winbindd -D

//查看samba网络情况

$ netstat -tlnp | grep smb

samba配置

# 添加系统用户
$ useradd superzc
$ passwd superzc
# 创建samba用户
$ /usr/local/samba/bin/smbpasswd -a superzc #必须是系统已存在的用户

$ vim /usr/local/samba/lib/smb.conf
#增加
[superzc]
comment = superzc
path = /var/www/html/superzc
directory mask = 0700
valid users = superzc
read only = No
create mask = 0755

连接
Windows -> 映射网络驱动器 -> \\10.1.163.42\superzc -> 输入用户名和密码 -> 成功访问

解决远程连接mysql 错误1130代码

更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称’%'。
#mysql -u root -p
mysql>use mysql;
mysql>select ‘host’ from user where user=’root’;
mysql>update user set host = ‘%’ where user =’root’;
mysql>flush privileges;
mysql>select ‘host’ from user where user=’root’;
第一句是以权限用户root登录
第二句:选择mysql库
第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)
第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址
第五句:刷新MySQL的系统权限相关表
第六句:再重新查看user表时,有修改。。
重起mysql服务即可完成:
#/etc/init.d/mysqld restart

PS:
之前lamp环境配置的时候将mysqld服务放到了/etc/rc.d/init.d/目录下,这里解释一下/etc/init.d和/etc/rc.d/init.d的区别是:/etc/init.d是/etc/rc.d/init.d软链接(soft link) 。/etc/rc.d/init.d目录下的脚本就类似与windows中的注册表,这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本,在系统启动的时候某些指定脚本将被执行开机时运行的脚本。

Linux 常用命令

vim替换命令

利用 :s 命令可以实现字符串的替换。具体的用法包括:

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上

chmod

说明:Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用

chmod [-cfvR] [--help] [--version] mode file

mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]…][,...],其中
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
–help : 显示辅助说明
–version : 显示版本

此外chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。

例子1:chmod a=rwx file 和 chmod 777 file

例子2:将档案 file1.txt 设为所有人皆可读取 : chmod ugo+r file1.txt

例子3:将目前目录下的所有档案与子目录皆设为任何人可读取 : chmod -R a+r *

chown

chmod [-cfvR] [--help] [--version] mode file

说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户I D。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。

-R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
-v 显示chown命令所做的工作

例子1:chown super test.c 把文件test.c的所有者改为super。
例子2:chown -R super.users /his 把目录/his及其下的所有文件和子目录的属主改成super,属组改成users。

crontab

crontab命令的功能是在一定的时间间隔调度一些命令的执行。在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。

第一到第五个字段的整数取值范围及意义是:
0~59 表示分
1~23 表示小时
1~31 表示日
1~12 表示月份
0~6 表示星期(其中0表示星期日)

#cd /etc
#vim crontab

例子1:*/5 * * * * root links –dump http://www.superzc.com
例子2:*/5 * * * * root /var/www/html/test.php

df

说明:Df命令是Linux查看磁盘空间系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,如下:

#df -hl

Filesystem Size Used Avail Capacity Mounted on
/dev/disk0s2 298Gi 36Gi 261Gi 13% /

scp

1.获取远程服务器上的文件

#scp -P 2222 root@www.superzc.com:/root/test.tar.gz /home/test.tar.gz

2.获取远程服务器上的目录

#scp -P 2222 -r root@www.superzc.com:/root/test/ /home/test/

PS:拷贝mysql的数据库之后,需要更改文件权限:
#chown mysql.mysql *
#ls -ll

getconf

说明:将系统配置变量值写入标准输出

#getconf -a //将全部系统配置变量值写入标准输出

#getconf LONG_BIT //假如在uname -a无法判断系统位数时,可以判断系统属于32位或者是64位

rz/sz

说明:只要在windows下安装SecureCRT,就可以进行文件传输,真方便啊!

#rz

curl

说明:curl是Linux下一个很强大的http命令行工具,其功能十分强大。

# curl -d user=superzc http://www.superzc.com/cgi-bin/super //以POST模式请求,user是POST的参数;superzc是POST的参数值;http://www.superzc.com/cgi-bin/super请求地址

Linux LFS

LFS——Linux From Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw code) 作成符合自己口味的菜肴──个性化的linux,不单单是个性的桌面。 (转自百度百科)

之前有接触过,但是没有能安装完成。明天开始根据LFS文档来安装自己的第一个LFS,fighting!!!

NOSQL mongodb 安装及简介

简介
NOSQL:指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
MongoDB:是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

安装
服务端:

$ cd /home/super
$ wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.6.5.tgz
$ tar -zxvf mongodb-linux-i686-1.6.5.tgz
$ mv mongodb-linux-i686-1.6.5 /usr/local/mongodb
$ cd /usr/local/mongodb
$ mkdir /data
$ mkdir /data/mongodb
$ ./mongod --fork --dbpath /data/mongodb --logpath /data/mongod.log --maxConns 1000 --directoryperdb --auth --quiet --logappend &
$ netstat -ln #查看******

显示如下图所示:

测试:

$ ./mongo
>help
db.help()                    help on db methods
db.mycoll.help()             help on collection methods
rs.help()                    help on replica set methods
help connect                 connecting to a db help
help admin                   administrative help
help misc                    misc things to know

show dbs                     show database names
show collections             show collections in current database
show users                   show users in current database
show profile                 show most recent system.profile entries with time >= 1ms
use                 set current database
db.foo.find()                list objects in collection foo
db.foo.find( { a : 1 } )     list objects in foo where a == 1
it                           result of the last line evaluated; use to further iterate
> use test #选择数据库,test可以是从未建立过的数据库
switched to db test
> a={name:'test'}
{"name":"test"}
> b={url:'http://www.test.com'}
{ "url" : "http://www.test.com" }
> db.data.save(a) #将数据保存到data表中,data表可以是从未建立过的数据表
> db.data.save(b)
> db.data.find()  #数据查询
{ "_id" : ObjectId("4d7f7c1076568212fe4efbad"), "name" : "test" }
{ "_id" : ObjectId("4d7f7c1876568212fe4efbae"), "url" : "http://www.test.com" }
> show collections #显示test库下所有的表
data
system.indexes
> db.data.find().limit(1) #只显示一条记录
{ "_id" : ObjectId("4d7f7c1076568212fe4efbad"), "name" : "test" }
#增加认证,添加管理员
> use admin
> db.addUser("admin","123456");
#以后登录mongodb必须认证
> use admin
> db.auth("admin","123456")
> db.shutdownServer()

安装rockmongo://MongoDB可视化管理工具

$ mkdir /var/www/html/rockmongo
$ cd /var/www/html/rockmongo
$ wget http://rock-php.googlecode.com/files/rockmongo-v1.0.12.1.zip
$ unzip rockmongo-v1.0.12.1.zip
#修改管理员名和密码
$ vim config.php

mongo-php-driver: //参照:http://www.php.net/manual/en/mongo.installation.php#mongo.installation.nix

$ cd /home/super
$ wget --no-check-certificate https://github.com/mongodb/mongo-php-driver/tarball/master
$ tar -zxvf mongodb-mongo-php-driver-1.1.4-4-g0c16c89.tar.gz
$ cd mongodb-mongo-php-driver-0c16c89/
$ phpize
$ ./configure
$ make && make install

memcached配置

1.memcache-client //memcached客户端

$ cd /home/super
$ wget http://pecl.php.net/get/memcached-2.1.0.tgz
$ tar -zxvf memcached-2.1.0.tgz
$ cd memcached-2.1.0
$ /usr/local/bin/phpize #使用phpize建立php扩展
$ ./configure --prefix=/usr/local/memcached --with-php-config=/usr/local/bin/php-config
$ make && make install
#记录下一个很长的路径:/usr/local/lib/php/extensions/no-debug-zts-20090626/

$ vim /usr/local/php/lib/php.ini #配置php.ini
>extension_dir = "/usr/local/lib/php/extensions/no-debug-zts-20090626/"
>extension=memcached.so
$ /usr/local/apache2/bin/apachectl restart

2.memcached //memcache服务端

#安装 libevent
$ cd /home/super
$ wget http://monkey.org/~provos/libevent-1.3b.tar.gz
$ tart -zxvf libevent-1.3b.tar.gz
$ cd libevent-1.3b
$ ./configure
$ make && make install
#安装 memcached
$ cd /home/super
$ wget http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz
$ tar -zxvf memcached-1.2.1.tar.gz
$ cd memcached-1.2.1
$ ./configure
$ make && make install
#测试libevent是否安装成功:
$ ls -al /usr/lib | grep libevent
#启动(安装后位置:/usr/local/bin/memcached)
#$ memcached -d -m 128 -l 0.0.0.0 -p 11211 -u root //0.0.0.0对任何客户端都开放memcache
#memcached的基本设置
#启动Memcache的服务器端:
$ /usr/local/bin/memcached -d -m 10 -u root -l 0.0.0.0 -p 12000 -c 256 -P /tmp/memcached.pid
#-d选项是启动一个守护进程,
#-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
#-u是运行Memcache的用户,我这里是root,
#-l是******的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
#-p是设置Memcache******的端口,我这里设置了12000,最好是1024以上的端口,
#-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
#-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
#如果要结束Memcache进程,执行:
#kill cat /tmp/memcached.pid
#也可以启动多个守护进程,不过端口不能重复。

成功截图:
写一个phpinfo();的php文件,成功啦~

$ cd /var/www/html
$ vim memcache.php
>$memcache = new Memcache();
>$memcache->connect('127.0.0.1', 12000);
>$memcache->set('key', 'This is a memcache key!', 0, 60);
>$res = $memcache->get('key');
>echo $res;

3.memcached统计监控

$ telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
STAT pid 1467
STAT uptime 59525
STAT time 1368585692
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.196012
STAT rusage_system 0.232014
STAT curr_connections 5
STAT total_connections 51
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 42
STAT cmd_set 20
STAT cmd_flush 6
STAT cmd_touch 0
STAT get_hits 29
STAT get_misses 13
STAT delete_misses 0
STAT delete_hits 5
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 3520
STAT bytes_written 3893
STAT limit_maxbytes 268435456
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 470
STAT curr_items 2
STAT total_items 20
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 3
END

遇到问题:
如果遇到 memcached:error while loading shared libraries:libevent-1.3b.so.1:cannot open shared object file:No such file or directory.
使用 LD_DEBUG=libs /usr/local/bin/memcached -v 查看其启动的时候,加载lib情况;具体的不列出;
执行:ln -s /usr/local/lib/libevent-1.3b.so.1 /lib/libevent-1.3b.so.1问题可以解决;

第 1 页,共 2 页12