Wednesday, April 27, 2011

[Linux] filesystem的几个命令

查看filesystem type

$ df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
10.103.0.1:/nfsroot
               nfs   230583296 137044992  81824768  63% /
none      devtmpfs      497684       220    497464   1% /dev
none         tmpfs      502108         0    502108   0% /dev/shm
tmpfs        tmpfs      502108         0    502108   0% /tmp
none         tmpfs      502108        48    502060   1% /var/run
none         tmpfs      502108         0    502108   0% /var/lock
none         tmpfs      502108         0    502108   0% /lib/init/rw
/dev/sda1     ext4   115377640    192116 109324612   1% /localfs

查看硬盘

sudo fdisk -l /dev/sda
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000c821

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758   976771071   488134657    5  Extended
/dev/sda5          501760   976771071   488134656   8e  Linux LVM

格式化硬盘

首先使用fdisk在硬盘上建立partition
$ sudo fdisk /dev/sda
然后格式化
$ sudo mkfs.ext4 /dev/sda1
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
4890624 inodes, 19537040 blocks
976852 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
597 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424

Warning: could not read block 0: Attempt to read block from filesystem resulted in short read
Writing inode tables: 151/597
mount硬盘

$ sudo mount -t ext4 /dev/sda1 /my/mountpoint
$ sudo chown binfan:root /my/mountpoint
Ref
http://www.tldp.org/HOWTO/Partition/fdisk_partitioning.html

Sunday, April 17, 2011

关于diff, colordiff

diff常用于比较两个文件的不同:
diff path_to_file1 path_to_file2
可以用-y(或者--side-by-side)来分两列显示diff区别
diff --side-by-side path_to_file1 path_to_file2


diff还可以比较两个文件夹的不同,列出所有不同的文件的不同之处
diff -r path_to_dir1 path_to_dir2
还可以用-q(或者--brief)只显示哪些文件不同
diff --brief -r path_to_dir1 path_to_dir2


colordiff是diff的一个wrap,可以把diff的输出加上不同的色彩.所以通常能用diff的场合都可以放心的改成colordiff.也可以简单的在你的shell启动配置(比如.bashrc)里加上
alias diff=colordiff
关于colordiff的全局设置--比如什么输出配什么颜色--在/etc/colordiffrc当中.你可以把该文件拷贝至~/.colordiffrc然后自行修改.

如果希望svn diff使用colordiff(svn默认使用它自己内建的diff),修改~/.subversion/config文件,加上
diff-cmd = colordiff

Friday, April 15, 2011

[算法]关于字符串的算法

判断字符串的匹配(一个字符串是否在另一个字符串中出现):
KMP, 时间复杂度 线性, O(n)


找出k个字符串的最长公共子字符串(每个字符串长度不超过n):
使用suffix tree. 对于每个字符串建立一棵suffix tree的时间是线性O(n),合并这k棵suffix tree, 然后寻找合并过的大树中拥有属于所有string的最深的节点.


两个文件,各自拥有很多单词.寻找在两个文件中重复出现的单词:
可以用feed-forward bloom filter

Thursday, April 14, 2011

tmux: 更好的screen

tmux是什么?

tmux和screen和类似(关于screen的用法, 参见我写的screen小结).对我来说它比screen优越的地方是,它允许你在一个terminal上窗口上分割成多个tty,这样可以充分利用屏幕而不用来回切换. 比如下图:
你可以使用热键方便的在切割而成的不同的pane间切换.

怎么安装tmux?

Ubuntu下很简单
$sudo apt-get install tmux
在MacOS下可以用port
$sudo port install tmux

哪里有关于tmux的文档?

tmux官方主页
这个写得很赞: Tmux: a crash course
一个写的很好的tutorial:part1, part2
switching from gnu screen to tmux
http://wiki.frugalware.org/index.php/Tmux

tmux怎么使用?

和screen的比较:
功能 screen命令 tmux命令
查看当前session
$screen -ls
$tmux ls
$tmux list-sessions
重入的session
$screen -r
$screen -r session-name
$tmux attach
$tmux attach -t session-id
新建一个session,
执行一个shell命令(比如top)并立刻detach
$screen -m -d top
$screen -S session-name -m -d top
$tmux new-session -d top
发送指令(比如退出)到一个session中
$screen -X quit
$screen -S session-name -X quit
$tmux kill-session
$tmux kill-session -t session-id

Wednesday, April 06, 2011

[Linux]Ubuntu下网络设置

配置网卡IP地址

1 修改/etc/network/interfaces 设置各个网卡地址(DHCP或者静态)
比如下面将第一块以太网卡(eth0)设为DHCP
# The primary network interface
auto eth0
iface eth0 inet dhcp
或者静态绑定IP地址
auto eth0  
iface eth0 inet static  
address 192.168.0.103  
gateway 192.168.0.1  
netmask 255.255.255.0
2 重启网络使新设置生效
/etc/init.d/networking restart


设置DNS

修改/etc/resolv.conf设置DNS服务器的地址. 比如我的DNS服务器为10.212.3.3
nameserver 10.212.3.3
domain apc999.net
search apc999.net


配置SSH Server

1 安装openssh-server
$apt-get install openssh-server
2 修改/etc/ssh/ssh_config可以设置诸如端口(默认是22)等设置.
3 重启ssh server
$sudo /etc/init.d/ssh restart


配置DHCP Server

http://www.ubuntugeek.com/how-to-install-and-configure-dhcp-server-in-ubuntu-server.html
1 安装dhcp3-server
$apt-get install dhcp3-server
2 设置dhcp server
$sudo vi /etc/default/dhcp3-server
把INTERFACES=""改成INTERFACES="eth0" (假设你是要在eth0上做dhcp server)
$sudo vi /etc/dhcp3/dhcpd.conf
根据具体要求做修改
3 重启dhcp3-server
$sudo /etc/init.d/dhcp3-server restart


配置DNS Server

http://ubuntuforums.org/showthread.php?t=236093
可以选择bind9
1 安装dns server
$sudo apt-get install bind9
也可以选择dnsmasq. dnsmasq是一个轻量级的dns/dhcp/tftp server


配置NFS Server

1 安装NFS server
$apt-get install nfs-kernel-server
2 修改/etc/exports
比如要把/share目录共享给192.168.1.0这个网络,增加如下行
/share       192.168.1.0/24(rw,fsid=0,insecure,no_subtree_check,async)
3 重启NFS server
$sudo /etc/init.d/nfs-kernel-server restart


配置tftp Server

http://www.davidsudjiman.info/2006/03/27/installing-and-setting-tftpd-in-ubuntu/
tftp是trivial file transfer protocol的缩写. tftp比ftp功能弱.但是因为简单,常用于net boot 等应用上.tftp-hpa是一个加强版的tftpd
1 安装tftp-hpa
$apt-get install tftp-hpa
2 tftp可以使用xinetd, 所以我们修改/etc/xinetd.d/tftp,让它看起来差不多如下:
service tftp
{
        disable                 = no
        socket_type             = dgram
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -v -s /var/lib/tftpboot
        only_from   = 192.168.0.0/24
        interface   = 192.168.0.1
}
这里我们的tftpd面向192.168.0这个网络,tftp的共享目录在/var/lib/tftpboot. 注意user要在设定的目录中有权限, 不然会有问题.
3 重启tftpd-hpa(通过重启xinetd)
sudo /etc/init.d/xinetd start


PXE Boot Server

PXE Boot使得一台机器的BIOS通过请求一个TFTP服务器来得到一个可以boot的linux image --- 就像你在这台机器上插入了一个CD来boot一样.
1 设置TFTP Server,
2 设置DHCP Server
3 创建或修改/var/lib/tftpboot/pxelinux.cfg/default, 这个文件用来设定PXE启动使用默认使用的Linux 镜像. 比如我的设定是:
LABEL linux
KERNEL vmlinuz-2.6.32-21-server
APPEND root=/dev/nfs initrd=initrd.img-2.6.32-21-server nfsroot=10.103.0.1:/nfsroot boot=nfs ip=dhcp rw --
注意你需要把initrd.img-2.6.32-21-server和vmlinuz-2.6.32-21-server这两个文件放在/var/lib/tftpboot底下.这样使用PXE启动的机器就可以通过tftp来下载Linux内核镜像来启动.


配置iptables实现NAT

(如果是Ubuntu用户可以使用ufw(Uncomplicated Firewall)来配置iptables)
https://help.ubuntu.com/10.04/serverguide/C/firewall.html
http://www.howtoforge.com/nat_iptables

设置IP FORWARDing and Masquerading
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
如果希望每次启动的时候都加载这些iptables设定, 先把这些rules存到一个文件中(比如IP_FORWARDING):
iptables-save > /etc/IP_FORWARDING
然后修改/etc/network/interfaces
auto eth0
iface eth0 inet dhcp
 pre-up iptables-restore < /etc/IP_FORWARDING
让kernel选择packet forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
也可以修改/etc/sysctl.conf使得默认的ip_forward为1.
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
重要命令
ifup ifdown ifconfig hostname设置主机名称, 比如
$hostname   #显示当前主机名称
$sudo hostname foo  #设定当前主机名称为foo
参考:
Setting up Network Interfaces Debian Network Setup ubuntu 10.10 Network config

Tuesday, April 05, 2011

tweak your thunderbird for gmail

http://lifehacker.com/#!314574/turn-thunderbird-into-the-ultimate-gmail-imap-client