工作遇到了一个奇怪的现象:windows下访问某个IIS服务器没有问题,有的Linux也可以正常访问,但有的Linux访问时,服务器回应十分迟缓。
后来在bbs里有人让我参考kernel相关的一篇文章,原来自从内核2.6.17版本后TCP window scaling的变动导致无法访问某些路由器。
我进行如下设置,解决了问题:
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
1. tac
将文件的最后一行当作第一行输出,以此类推,比如:
bash-3.1$ cat /etc/passwd | tac | tail -n 3 daemon:x:2:2:daemon:/sbin:/bin/false bin:x:1:1:bin:/bin:/bin/false root:x:0:0::/root:/bin/bash
2. rev
用法:rev [file …]
描述:反转文件每行里的字符串顺序,如果没有指定文件,则从标准输出读取
bash-3.1$ echo 123456789 | rev 987654321
再复杂的密码也没有证书安全,再简单的密码也没有证书方便。有些人因为Putty无法保存密码,进而抛弃了这个免费、小巧的远程登录工具。条条大陆通罗马,其实可以ssh证书的方式让putty安全、方便的实现自动登录。
参考资料:
有些编辑器,比如M$ Windows的记事本,在创建UTF8编码文件时会在头部添加一个不可见字符
原来这个被称作BOM(Byte Order Mark)的不可见字符,是Unicode用来标识内部编码的排列方式的,在UTF-16、UTF-32编码里它是必需的,而在UTF-8里是可选的。因此,才会出现有的编辑器在文件头部添加添加BOM、而有的语法解析器又不作处理的的混乱情况。
根据w3c里FAQ的建议,解决方法就是,删无赦!
btw, 刚才无意中发现,PHP 5.2.5的命令行下去除了BOM的显示,而 PHP 5.2.6确又显示出来了。
参考:
step1. 准备工作 - 下载Slax,.iso或者.tar格式均可,当前是v6.0.7,约190M - 视主板BIOS具体选项,将U盘制作成相应格式(USB-HDD/USB-FDD/USB-ZIP)的可引导盘 如果找不到U盘附带的转换软件,可使用USBoot v1.70(下载页面)。我使用的是USB-HDD。 - U盘1个,我使用的是很普通的64M的 step2. 格式化U盘 这里建议格式化成linux下的文件系统,因为后面我使用默认的FAT32文件系统制作好,发现中途因为找不到某些文件而失败。 # mkfs.ext2 /dev/sdb1 step3. 拷贝文件 下载后直接将其中的boot和slax目录拷贝至U盘里 # cp boot slax /mnt/sdb1 -r 这里假设U盘被mount到了/mnt/sdb1目录 step4. 安装lilo至U盘的主引导扇区(MBR) # cd /mnt/sdb1 # boot/liloinst.sh 根据提示操作即可。 至此,重启,更改启动顺序,即可享受通过U盘启动的Linux - Slax!:)
中间碰到了一些问题,在这里罗列一二:
* 确保U盘可写
* 刻录U盘?
别指望着想刻录光盘那样,把iso文件里的数据“刻录”到U盘上。虽然也可以全部写进去,但毕竟U盘和光盘是两种不同的设备,终究要以失败而告终的。
* 鉴于我64M的U盘容量太小,我只保留了slax/base下的第一个,也是最核心的文件:001-core.lzm
此外,slax/tools存放一些使用的脚本,可以操作神秘的.lzm文件
由于公司选择腾讯的RTX作为官方通讯工具,使用Linux后没少和虚拟机打交道。见识了MachineMa同学演示的VirtualBox无缝模式,根据网上的教程,比葫芦画瓢体验了一把,感觉不错,终于找到了个VirtualBox代替Vmware的理由了。
步骤:
step1. 下载并安装VirtualBox
VirtualBox是从去年的1.5.0版本开始支持无缝模式的,根据使用Vmware的经验,建议选择最新的版本。
step2. 选择相应的guest additions程序
类似vmware里的工具包,不过这个是个单独的iso文件,需要单独下载。
step3. 安装guest additoins
开启虚拟机的情况下,通过菜单里的"device" / "mount CD/DVD" / "CD/DVD image",选择已下载完成的Vboxguestadditions.iso,然后在虚拟机的光驱里双击安装。
安装完成之后在虚拟机的菜单上选择"machine" / "seamless mode",进入传说中的无缝模式。相应的快捷键为Host + L(默认的Host键为右Ctrl)。
Enjoy it!
btw, 有意思的是,运行无缝模式的virtualbox时,通过选择激活的虚拟机程序截图,看到的是一张普通透明的图片(图1,图2)。
随着时间的积累,以前大家的工作方式逐渐变得混乱,领导审时度势组织大家开了一次小会。本没有对这场中午的小会抱多大希望,但“develop with pleasure”的主题货真价实,听完之后犹如醍醐灌顶般恍然大悟,感觉以前没有头绪的事情一下子有了眉目。
对于维护上线的web项目,以往的做法是发现错误随时更正。这种松散的方式看起来很辛苦,但效率总是不高,而且还极易处于被动的地位。另外一种方式的好处就显而易见了,根据各种需求、计划、决策、反馈制定一个短期的版本计划,定期发布。根据该计划,线上的每次改动都将对应代码仓库里的一个版本,这样即便是某次发布时出现错误,也可以很容易恢复到稳定版本。除了版本发布操作,不再零散更新线上的文件。如果想灵活一些,还可以缩短计划中的开发周期。
以前没有仔细考虑过类似的问题,或许这只是项目管理中的冰山一角。其实很多事情都是相通的,就拿上文中的按计划发布版本来说,早在大学时班主任就曾多次向我们灌输计划、总结的重要性,当时可能也听了,只是没真正体会到它的重要性。
总之一句话:事前计划,事后总结。
就这。
btw,新增一个”快乐开发 | developer”分类,今后用于存放类似问题。
以前曾用过Pure-FTPd提供的ftp服务,作为ftp的服务器端,其类似linux下useradd/usermod/passwd工具的用户管理方式,令人印象深刻。最近正好需要配置一台ftp服务器,当然首选这款有良好安全性口碑的Pure-FTPd。
基本需求是这样的:
虚拟用户 – 也就是说提供的ftp用户在系统里并不存在
权限 – 每个用户对自己目录拥有读写权限,但不允许访问其他目录
虚拟目录 – 每个用户目录下面需要添加一个只读的公有目录
以下为配置过程:
1. 安装
当前最新版本为1.0.21,可从官方网站下载。
wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz
tar zxvf pure-ftpd-1.0.21.tar.gz
cd pure-ftpd-1.0.21
./configure --prefix=/usr/local/stow/pure-ftpd-1.0.21 --with-puredb
make
sudo make install
其中,--with-puredb 选项代表虚拟用户支持
2. 创建用户
出于安全以及管理方便,我们让虚拟用户共享同一个系统用户。
首先,在系统中添加相应的用户和组,这里以ftpuser和ftpgroup为例:
/usr/sbin/groupadd ftpgroup
/usr/sbin/useradd -g ftpgroup -d /dev/null -s /etc ftpuser
创建虚拟用户的命令是这样的:
pure-pw useradd smzz -u ftpuser -d /home/ftpusers/smzz -m
其中, -u将虚拟用户 smzz 同系统用户 ftpuser 关联在一起。-d参数使 smzz 只能访问其 home 目录。而如果想让他访问整个文件系统,可以用 -D 选项。
此外,pure-pw useradd 的选项还有:
2. 更改用户
同 pure-pw adduser 唯一不同的是,使用 pure-pw usermod 不是创建一个用户,而是更改已经存在用户的某些属性。
如果想禁用某些属性,可直接添加空值,比如pure-pw usermod -n ''代表不限制文件数目
3. 更改密码
pure-pw passwd smzz -m
所有这些参数都有一个共同选项 -m ,它代表修改完毕之后不必重启Pure-FTPd以及重新生成puredb_file文件
此外,还有类似userdel命令的子选项pure-pw userdel。
4. 提交更改
所有用户操作必须提交更改,方能生效。目前有两种形式
a) 通过pure-pw mkdb重新生成数据文件(/etc/pureftpd.pdb)
b) 用户操作时带上-m选项,比如 pure-pw passwd smzz -m
5. 开启服务
/usr/local/sbin/pure-ftpd -j -lpuredb:/etc/pureftpd.pdb &
其中,-j代表用户第一次登录将会创建自己的home目录,-l代表验证方式
此外,匿名、配额、发呆设置、日志文件等选项均可通过相关参数在pure-ftpd启动时设置
6. 虚拟目录
Pure-FTPd并不支持类似windows下ftp服务器那样的虚拟目录,但可以通过其他方式变相实现,比如
mount --bind /home/my_apps/lib /home/ftpusers/smzz/lib
todo:
pure-ftpd的诸多参数
参考:
man pure-ftpd
man pure-pw
pure-ftpd用户管理
都说狡兔三窟,其实我经常活动的地点远不止三个(大大地狡猾)。趁着这两天紧张工作一时停下来不知该做些什么,我决定晒晒这些空间们。
That’s all.
请大家对号入座。
对了,顺便借机做个广告,前段时间胡乱整理了一个关于俺们县城的网站枣乡内黄(http://neihuang.org/)。热烈欢迎诸位,尤其是枣乡游子们,多多光临!
(本文首发于沙漠之周@草业012)
以Sony VGN-CR31这款为例,本脚本(实为命令集,笔者注)通过分析搜索页面、下载页面,最后将结果存放于相应文件(drivers_*.txt)中,同时并下载相应文件。详细见源文件:
#!/bin/bash mkdir drivers cd drivers/ echo > /tmp/zgq.txt echo -n > drivers_url.txt echo > drivers_id.txt echo > drivers_title.txt for i in $(seq 1 4); do curl http://drivers.mydrivers.com/drivers-1102-875-Sony/VGN-CR31/0-0-0-0/$i >> /tmp/zgq.txt done iconv -f gbk -t utf8 /tmp/zgq.txt > /tmp/zgq_1.txt cat /tmp/zgq_1.txt | grep '<a href="/drivers/' | awk -F'</a>' '{print $1}' | grep desc > /tmp/zgq.txt cat /tmp/zgq.txt | awk -F\/ '{print $3}' > drivers_id.txt cat /tmp/zgq.txt | awk -F'>' '{print $3}' > drivers_title.txt for i in `cat drivers_id.txt`; do curl http://drivers.mydrivers.com/download/$i > /tmp/zgq.txt 2>/dev/null cat /tmp/zgq.txt | grep dizhi | awk -F\" '{print $6}' | awk -F= '{print $3}' | head -n 1 >> drivers_url.txt done wget -i drivers_url.txt -N
注:本文章仅供学习研究之用,切勿用作非法用途,否则后果自负。
吃水不忘打井人,还是建议多点点人家的广告,如果有时间的话。:)