大家都知道rm -rf 的功能,所以很避讳的就是“rm -rf 相对路径”,太危险了,万一漏了个点,来个rm -rf /,就死翘翘了。
同样ln的功能,也知道,创建一个软连接。很多时候我都是ln -s /xxx/frameword /xxx/xxx/web/,让framework存在于每个目录下面。当然也可以直接指定。
以前我删除软连接的时候,都是 rm -rf /xxx/xxx/,从来没有出过事,只是这一次,在使用https://github.com/snakevil/bashrc.x进行优化bash的时候,发现软链接删除不掉了。
在问了snakevil后,才了解:“rm -rf /xxxx 与 rm -rf /xxxx/ ”是不一样的东西,在某些平台下面 rm -rf /xxx/是删除软链接目录里的文件,而不是删除软链接,有很多人因此吃过药。。。正确的删除方法就是不带最后的“/”
---
纯粹记录一下
其实dnspod官方有phpsdk,只是自己写的看起来好看一点。原来我用的是shell版的,但shell版的时候nc ns1.dnspod.net出来的IP老是不正确。估计是整个大楼里面有代理 。
但是我访问 http://iframe.ip138.com/ic.asp,里面出来的IP是真实IP,所以没办法,我只能改成PHP了(主要是因为不知道wget 或者 curl回来的文件怎么grep得到那个IP,好吧,我OUT了)
所以,花了5分钟写了个脚本。。。执行,没有报 任何错,好吧,原来是我没有输出。
输出的时候发现,不支持get方式提交。于是我偷了个懒,直接把file_get_contents用POST方式提交了。
OK,更新成功。但我发现,如果用Record.Ddns接口,那么,还是用的类似ns1.dnspod.net的探测方式,所以IP不准,最后,只能用Record.Modify接口来更新域名了。。
不多说废话,代码地址:https://github.com/neatstudio/yiiextension
用法也相当简单:
XML/HTML代码
- @description
- 其实这个程序是扔在命令行下的,最好是crontab。
- 因为远程获取IP地址比较耗时间
- @useage
- 在使用前最好chmod +x Dnspod.php
- 注意第一行#!/usr/bin/env php,当然你也可以去掉这一条,直接使用/xxx/xxx/php Dnspod.php
- crontab -e 后加入一条:
- */10 * * * * /xxx/xxx/Dnspod.php
看到标题不要以为是植树节,tree这个命令还是很爽的。
在windows下面,我们用tree命令可以将当前的目录结构打印出来方便工作交接和介绍项目,在linux下面。。。。默认没有这个tree命令。
因为我用ubuntu,所以直接apt-get install tree,就OK了。
用法很简单,如果你不愿意记参数,直接去要统计的目录下面执行一下,tree
然后就出来结构树了。最后还有一行:
952 directories, 4642 files
好吧,这是我的一个项目中的protected目录,嗯。主要是因为多了一个zend框架,如果没有它。我只有1000多个文件了。整个项目还不如一个框架。。。。
如果apt也回不来?这里有一篇文章可以参考一下:http://www.cnblogs.com/dekun_1986/archive/2011/09/04/2166146.html
我用busybox建的根文件系统,没有这个tree命令,可以下载此命令的源码,交叉编译一下,再放到根文件系统中的/bin目录中就好。
源码下载地址:ftp://mama.indstate.edu/linux/tree/
我是在arm平台下,所以把makefile 文件中的CC那行改为“CC=arm-linux-gcc”,再把生成的tree文件通过nfs弄到开发板的bin文件下就可以了
现在的最新版本是1.6.0,下载地址:
/Files/dekun_1986/tree-1.6.0.rar
---EOF---
上述的链接是在cnblogs的。如果你不放心,就去上面的ftp地址下载吧。
有了服务器,怎么着都得装个Ftp吧,否则,必须得让人用ssh连接来上传文件 ?
于是我找了proftpd,因为比较简单vsftpd太麻烦了。proftpd的教程很简单
1、先apt-get update,apt-get upgrade
2、apt-get install proftpd-basic proftpd-mod-mysql
3、修改 /etc/proftpd/proftpd.conf
因为原内容都注释了,所以直接在文件的最后加上:
XML/HTML代码
- DefaultRoot ~
- Include /etc/proftpd/sql.conf
- RequireValidShell off
4、添加一个组,和一个用户:
XML/HTML代码
- groupadd -g 2001 ftpgroup
- useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
5、去mysql里增加一个用户,如proftpd/proftpdpass,建一个数据库,如:proftpd
6、插入表结构:
SQL代码
- CREATE TABLE ftpgroup (
- groupname varchar(16) NOT NULL default '',
- gid smallint(6) NOT NULL default '2001',
- members varchar(16) NOT NULL default '',
- KEY groupname (groupname)
- ) ENGINE=MyISAM COMMENT='ProFTP group table';
-
- CREATE TABLE ftpuser (
- id int(10) unsigned NOT NULL auto_increment,
- userid varchar(32) NOT NULL default '',
- passwd varchar(32) NOT NULL default '',
- uid smallint(6) NOT NULL default '2001',
- gid smallint(6) NOT NULL default '2001',
- homedir varchar(255) NOT NULL default '',
- shell varchar(16) NOT NULL default '/sbin/nologin',
- count int(11) NOT NULL default '0',
- accessed datetime NOT NULL default '0000-00-00 00:00:00',
- modified datetime NOT NULL default '0000-00-00 00:00:00',
- PRIMARY KEY (id),
- UNIQUE KEY userid (userid)
- ) ENGINE=MyISAM COMMENT='ProFTP user table';
7、修改/etc/proftpd/modules.conf,去掉两行注释:
XML/HTML代码
- LoadModule mod_sql.c
- LoadModule mod_sql_mysql.c
8、修改/etc/proftpd/sql.conf
XML/HTML代码
- SQLBackend mysql
- SQLAuthTypes Crypt
- #下面一行就是用户名密码
- SQLConnectInfo 数据库@localhost 用户名 密码
- SQLUserInfo ftpuser userid passwd uid gid homedir shell
- SQLGroupInfo ftpgroup groupname gid members
- # Update count every time user logs in
- SQLLog PASS updatecount
- SQLNamedQuery updatecount UPDATE "countcount=count+1, accessed=now() WHERE userid='%u'" ftpuser
- SQLLog STOR,DELE modified
- SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
9、插入用户:
XML/HTML代码
- INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');
- INSERT INTO `ftpuser` ( `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`) VALUES ( 'username', ENCRYPT('password'), 2001, 2001, '/var/www/www.example.com/', '/sbin/nologin', 0);
10、重启proftpd:/etc/init.d/proftpd restart
上面这段其实是来自:http://www.sysadminworld.com/2011/install-proftpd-with-mysql-backend-on-debian-ubuntu/
--------EOF---
至此,上面的内容基本上就能够登录成功了,如果还是失败,建议先停掉proftpd,然后运行proftpd -nd6,查看错误信息,比如我就看到了这个:
XML/HTML代码
- Mar 09 00:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): notice: unable to use '~/' [resolved to '/server/wwwroot/htdocs/']: Permission denied
- Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): Preparing to chroot to directory '~/'
- Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): chroot to '~/' failed for user 'xxxxxx': Operation not permitted
- Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): error: unable to set default root directory
- Mar 08 16:22:29 test proftpd[8850] test (0.0.0.0[0.0.0.0]): FTP session closed.
我靠,这个怎么办?
这时候我又请vampire帮忙了。他就帮我检查了一下,做了几个处理:
1、vim /etc/groups ,在www-data:x:33后面加了:www-data:x:33:ftpgroup ,表示权限跟着www-data,因为我们的ftp目录里的文件都是基于www-data的
2、修改/etc/proftpd/proftpd.conf,改其中的:user / group ,都改成www-data
3、还是/etc/proftpd/proftpd.conf ,改 Umask ,原来是Umask 022 022,去掉一个022
4、因为我的www-data是gid是33,所以刚才在数据库里插的gid统统换成33,而不是原来的2001,这时候再登录其实还是不正常。
5、最重要的一个,在刚才的sql.conf里面,加入:SQLMinID 33,这个玩意要参考:http://www.proftpd.org/docs/directives/linked/config_ref_SQLMinID.html,我晶,这个东西,居然在默认的sql.conf里是没有这一行的。果然还是vampire有经验。因为www-data的gid是33,所以sqlminid就是33了。
这时候,终于一切正常了。折腾了好久。。。