Posts Tagged linux
Merge Two Hg Repositories
最近在折腾手头上的小项目,发现有一个工程已经建了Hg的版本库,但是想把它给丢到现有的版本库中以方便管理。假设现在用的版本库叫A,需要被merge过来的版本库叫B,于是有:
A: hg pull –f <repo B> A: hg merge A: hg ci
关键的地方是在那个-f处,如果没有加这个参数会报两个版本库不同源而不让你这么折腾。(via)
Reuse the TIME_WAIT Port
最近在调试的时候,经常会需要直接kill掉监听的进程,然后在SLES上再启动进程的时候就会报端口被占用,用netstat查看会发现这个端口处于TIME_WAIT状态。此状态是表示,当机器A发出CLOSE请求后,经过FIN_WAIT_1和FIN_WAIT_2,机器B会将socket置于CLOSE状态,此时机器B会将端口置于 TIME_WAIT状态一定时间(2*msl)以保证机器B的数据不会丢失。这一策略可以保证TCP的可靠性,但是在测试过程中经常会报端口被占用,daemon启动错误的信息。
解决的方法一是减少msl时间,让TIME_WAIT的socket尽快结束,这个值好像可以在/proc/sys/net/ipv4/tcp_fin_timeout中指定,不过不是很确定。再一种方式就是通过设置reuse标志位,让处于TIME_WAIT状态的端口可以被新的进程bind,此方式同样需要动/proc系统中的东西:
net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1
其实我也不太确定第一个是做什么用的,只是照猫画虎了。这个方式的写法是写在/etc/sysctl.conf文件中的,而不需要直接向/proc文件系统中echo东西。在改完sysctl.conf文件后运行sysctl -p让配置生效。还有一点需要注意的是可能需要运行如下的命令刷新缓存
sysctl -w net.ipv4.route.flush=1
差不多就这些了,话说,很诡异的一点就是,这个情况只在ppc64_sles11中碰到过,x86/amd64都没碰到过,ppc64_rh5没做测试,不表态,嗯。
话说文章里面TCP状态所表示的含义及转换关系是我自己的理解,嘿嘿,自辨对错哈~~
The Capital S in Linux Permission Bitmap
昨天某人丢过来一个问题,为啥Linux下有的文件权限是-rws,有的是-rwS,当时就没想法了,后来某人被逼求助于Google顺便把结果发给了我,顺便记一下吧~
首先,这个S,不管大写还是小写都是setuid/setgid bit, 大小写的不同之处在于,大写的S表示这个文件没有x位,而小写的则是一般常见(这个只是我常见的哈,有空查查,如果大S比较常见俺会上来改的)的即是有x权限的。即在chmod中,如果是4755的话,那么它的权限就是通常的-rwsr-xr-x,如果是4655的话,就是大写的-rwSr-xr-x。就这么些东西。
最后多一句嘴,第一位的那个4其实也是bitmap,4代表setuid bit,2代表setgid bit,1代表sticky bit。下面木有了~~
Using sudo in rsh’s command
公司的产品需要配置无密码rsh,刚写了一个脚本用于重置环境,但是被系统告知sudo需要在tty的环境下用,所以只好去找把这个安全选项禁掉的方法。开始想当然的把pts加到/etc/securetty中,可惜不行,最后求助于G神才发现需要在/etc/sudoers中把下面这行注释掉
Defaults requiretty
最后说一句,最好用visudo编辑,而不要手动改~
Mask Mouse on Linux
最近折腾个东西,需要把鼠标弄掉,一是不显示,二是对点击事件没有响应。在网上找了找,用了个比较ugly的方法:
不显示
一般的发行版都能找到一个叫unclutter的软件包,这玩意的功能就是在你idle多少秒后把鼠标从屏幕上抹掉,具体效果就像mplayer放电影里让鼠标不见的那样。如果把idle设成0(unclutter –idle 0),那么鼠标就会从屏幕上消失了,不过在移动的过程中,还是能偶尔看到那熟悉的白色箭头
屏蔽响应事件
虽然鼠标不显示了,但是点击事件还是没有屏蔽掉,就是说你去点鼠标,还会是和原来的情况一样。本来想找HAL去直接禁用这个设备,但是在乱逛的过程中找到了xmodmap这个东西,然后也顺便看到了怎么用它去折腾鼠标,就用了。
这个命令可以用来把鼠标的键重新映射到新的行为上去,在它自己的man page里面,可以看到使用 xmodmap -e "pointer = 3 2 1" 可以让鼠标左右键对调,其实就是让按左键的响应从1变成3,而右键的从3变成1。执行下面这条命令
xmodmap -e "pointer = 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1"
把前面的几个按键都给映射到高位上去,这样一般的程序就不会去处理这些个大的响应事件,于是乎就算是屏蔽了事件吧。
就这两条命令,具体的没的细究,有空再看吧。
Set local dir as yum repo
新装的RH52,装软件的时候想用yum解决依赖关系,看帮助没找到zypper里面的ar,只好去改配置文件。
按着/etc/yum.repos.d下的一个.repo文件改了一下,其实也简单,只需要提供名字,baseurl,就差不多了,文件如下:
[local repo]
name=Repository on lldev
baseurl=file:///XXX/YYY/ZZZ
enabled=1
gpgcheck=0
需要注意的是那个baseurl下需要有一个目录叫repodata,里面要有个文件repomd.xml,这样才能被yum认出,我用的是光盘目录下的Server目录。比较不爽的是这个baseurl只支持http/https/ftp/file,想用nfs啥的都没门,只好mount了~
Auth ssh with keys
每次配都要找一堆网页,最后郁闷了,所以在这记上一笔。环境是两台新装的机器,ssh客户端和服务器都安装上了,配置用的默认的。分为两台机器,C表示客户端,即发起ssh连接请求的机器,S自然是服务端了…
- S: mkdir ~/.ssh # create the directory for keys
- S: chmod 700 ~/.ssh # 必需滴,要不然不起作用
- C: ssh-keygen –d # generate dsa key, the type is changable
- C: cat ~/.ssh/id_dsa.pub | ssh user@host “cat – >>.ssh/authorized_keys” # copy the keys to remote host
- S: chmod 600 ~/.ssh/authorized_keys # 必需滴
这样好像就差不多了。多说一句,如果那个权限不对的话,会在log里面看到Authentication refused: bad ownership or modes云云(log文件在/var/log/secure),当然就连不上了~
强制umount无响应NFS分区
折腾机器的时候,不小心mount上了一个NFS分区,然后那台机器又十分神奇的挂了,只好想着点子去umount了,要不然ls都有问题。
直接umount -f,丫在那等了N久告诉我RPC啥错,然后说device忙,于是乎只有这样了:
# fuser -km /mnt/dir
# umount -f /mnt/dir
给iphone传电子书
没在iphone上找到好玩的游戏,只好拿它当电子书阅读器了。文章转换文件名格式说了怎么转换文件格式,其实文本的格式也需要转换的。把用的脚本写出来吧。
首先,弄到的txt是用cterm从水木上弄下来的,理由很简单,cterm的F4下载太好用了,所以我就懒了,呵呵。然后用HFS(www.rejetto.com/hfs/)开服务器,本来是想在iphone的SSH上直接wget的,费了好大力气找到了可用的wget后下载居然是乱码,从文件名到内容,只好自力更生了。
用wget把文章弄到那台Linux机器上,在这需要提一下,HFS有可以直接打包下载文件夹的功能,把一个文件夹打成一个tar包传过来,很好用的功能。
下载下来后,解压。由于我的Linux的终端编码是utf8的,自然乱码就出来了先用convmv转文件名,转完后再用iconv转文本格式。由于iconv不能批量转,所以写了个py脚本用来弄这个,诶,不会sh脚本的人只能这么玩了。
#!/usr/bin/python2.5
import glob
import os
filenames = glob.glob('*.txt')
for foo in filenames:
tmp_name = foo.replace('Download\\', '')
cmd_str = 'iconv -f gb18030 -t utf8 "%s" -o "%s"' % (foo, tmp_name)
os.system(cmd_str)
os.system('rm "%s"' % foo)
print tmp_name
中间还加上了文件名转换的功能,因为解压时文件名多了点东西。 需要注意的就是那个cmd_str两个%s加上的引号,因为文件名中间有空格,所以如果不加的话命令执行会出错。源目标格式选18030主要是怕有些特殊字符。等全转完后直接用scp拷到iphone就行了。SSH真的很好用,临了再感叹一下,Linux下的东西有些真的是方便至极。
雁过留声