/proc/cpuinfo /proc/meminfo dmidecode uname -a df -hT dumpe2fs -h /dev/sda1 hdparm -I /dev/sda ethtool eth0 mii-tool eth0 lspci various cards lsmod | modinfo *** grep -i videoram /var/log/Xorg.0.log l. cd cd - skill -u wzh du -sh * init [0|6] ulimit -a ntpdate 210.72.145.44 man -f rm -- -g dos2unix 去 ^M man hd sd md elf hier syscalls ascii operator clone cal 6 2008 ps -A|egrep "3051|2043" whois 166.111.8.16 cat -A file.txt lock screen: CTRL + ALT + L new xterm: ctrl+shift+n ctrl+l=reset firefox google: ctrl+[jkl] cp "/mnt/win/"*.{avi,mkv,rmvb,rm} . chattr +a /home/peter/.bash_profile soffice resume.doc acroread resume.pdf eog mei.jpg echo "scale=2;1000/6"|bc tr "[:upper:]" "[:lower:]" < PBS.America.Revealed.Food.Machine.srt > PBS.America.Revealed.Food.Machine.srt ----------------------------------------------------------------------------------------------- 1. top Process Activity Command 2. free Memory Usage 3. ps Displays The Processes 4. w Find Out Who Is Logged on And What They Are Doing 5. /proc file system - Various Kernel Statistics 6. vmstat System Activity, Hardware and System Information 7. iostat Average CPU Load, Disk Activity 8. sar Collect and Report System Activity 9. mpstat Multiprocessor Usage 10. pmap Process Memory Usage 11. netstat and ss Network Statistics 12. iptraf iftop Real-time Network Statistics 13. tcpdump Detailed Network Traffic Analysis 14. nmap lsof 15. strace System Calls ----------------------------------------------------------------------------------------------- Shell: ctrl+j = Enter ctrl+u ctrl+k: ctrl+y 删从光标到行首行尾: 反取消 ctrl+h ctrl+d 删光标前后的字符 ctrl+f ctrl+b 光标左右移一个位置 ctrl+a ctrl+e 行首行尾 ctrl+s ctrl+q 停止恢复屏幕输出 stty -a ctrl+p/n 逐个显示history command 搜含less的history: ctrl+r -> less 之后就ctrl+r搜 login shell: 有登录过程,/bin/login 读 /etc/passwd /etc/profile -> ~/.bash_profile (~/.bashrc) -> /etc/bashrc non-login shell: 没有登录过程: xterm, konsole, /bin/bash, /bin/su ~/.bashrc -> /etc/bashrc 所以切换用户用su - ,这样会生成一个login shell,会读取配置文件,su - 之后自动切到$HOME 简单用su 就可能会因为丢失环境变量而出问题,比如su之后不会自动切到$HOME。 称一个正在运行的shell脚本为 non-interactive shell,没有登录过程,不会读取配置文件 因此普通用户crontab -e 要加上环境变量 PATH=/usr/bin:/bin:/usr/local/bin:/sbin:/usr/local/sbin HOME=/home/cngrid sh test.sh 扩展名相关: for fname in *.png do bname=`basename "$fname" .png` convert -quality 100 "$fname" "$bname".jpg done $ file 989C109D07FF5F23BEB44CD53E6F5CDC0DD3AAA7.torrent 989C109D07FF5F23BEB44CD53E6F5CDC0DD3AAA7.torrent.gz: gzip compressed data for fname in *.torrent do str=`file "$fname"` if [[ "$str" =~ "gzip compressed data" ]]; then mv $fname $fname.gz gunzip -d $fname.gz fi done $ file 989C109D07FF5F23BEB44CD53E6F5CDC0DD3AAA7.torrent 989C109D07FF5F23BEB44CD53E6F5CDC0DD3AAA7.torrent: BitTorrent file =============================================================================================== mount fat32 : mount -o codepage=936,iocharset=cp936 /dev/sda7 /mnt/dir/ 格式化u盘:先umount,在mkfs.vfat /dev/sdb* 制作iso: dd if=/dev/zero of=my.iso bs=4K count=10K mkfs.ext3 backup.iso -b 4096 mount backup.iso /mnt -o loop cp .... umount /mnt ----------------------------------------------------------------------------------------------- 大硬盘、大分区,增大分区的预留空间,reserver blocks < 1% $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 9.7G 9.0G 178M 99% / tmpfs 499M 408K 498M 1% /dev/shm /dev/sda2 64G 56G 5.4G 92% /home //10.0.1.15/share 108G 74G 34G 69% /mnt/win $ dumpe2fs /dev/sda2 ...... Block count: 16977040 Reserved block count: 848852 Free blocks: 2249295 Free inodes: 4247365 First block: 0 Block size: 4096 ...... 用 bc 可以算出分区预留磁盘空间大小: 848852 / 16977040 = 5% 848852 * 4 KB = 3 GB+ 空间,想释放一部分出来,设成 1%, 16977040 * 1% = 169770 $ sudo tune2fs -r 169770 /dev/sda2 ----------------------------------------------------------------------------------------------- 用inode number处理filename为乱码的文件: $ convmv -f utf8 -t gb2312 好.txt --notest $ ls -il *.txt 1784745 -rw-r--r-- 1 root root 2 2009-01-31 10:33 15月亮MM.txt 1783010 -rw-r--r-- 1 root root 47 2009-12-25 17:20 ???Ǻ???.txt $ find . -inum 1783010 -exec mv "{}" 好.txt \; linux windows 之间传文件tar包乱码,用rarlinux $ tar zxvf rarlinux-3.9.3.tar.gz -C /usr/local/ $ cd /usr/local/rar/ && make && make install 将字幕打包: $ rar a sub.rar *.{srt,ssa,ass} 查看检验rar内容: $ rar t sub.rar|less 解压: rar x sub.rar 提取文件: $ rar e sub.rar "中日战争扩大化的真相.srt" 添加文件: $ rar a sub.rar "上海老师到穷村.srt" "全球化资本主义的未来.srt" 删除a.srt 蒙古淘金.srt: $ rar d sub.rar a.srt 蒙古淘金.srt 只打包,不压缩: rar a -m0 linuxsoft.rar *.{rpm,tar.gz,tar.bz2} =============================================================================================== shntool 想转成ape就用mac, ape + cue 不能直接split成单个ape,只好先split成wav,再写脚本用mac一个一个转 -> [flac|wav] shntool conv -i [ape|flac|wav] -o [flac|wav] "Bizet - Carmen Fantasie.ape" -> ape: $ mac "Bizet - Carmen Fantasie.wav" "Bizet - Carmen Fantasie.ape" -c4000 cue + [wav|flac|ape] -> wav|flac|mp3 $ vi cue :set fileencoding 看文件内容的编码,转为utf-8,:set fileencoding=utf-8 $ shntool split -f "HAND IN HAND.cue" "HAND IN HAND.wav" -t "%p - %t" -o [wav|flac] $ mac foo.wav foo.ape -c4000 注意 .cue 放前面 .[ape|flac|wave]放后面 本地有3个dir: mp3 ape eng,删了一些旧的mp3,增加了一些ape,同步: $ rsync -av --delete ape mp3 eng root@10.0.1.7:/usr/local/linux-2.6.34/music/ 图片格式转换: gimp或convert $ convert -quality 100 朱晓琳.歌声飘过30年.png 朱晓琳.歌声飘过30年.jpg vcdimager-0.7.23-8.fc8.i386.rpm 和 vcdimager-libs-0.7.23-8.fc8.i386.rpm 互相依赖 一起装: rpm -ivh vcdimager* 录视频: xvidcap smplayer无法加载 UTF-16,MPEG ADTS 格式的字幕: $ file *.srt 世界粮食危机(1):粮食依赖美国的失败.srt: MPEG ADTS, layer I, v1, 96 kBits, 44.1 kHz, Stereo gedit打开srt,new一个srt,把内容copy到new srt中,save时编码选GBK。 =============================================================================================== scp "166.111.131.47:/usr/local/linux-2.6.31/music/movie/刘欢\ -\ 少年壮志不言愁.ape" . cp "The Lion King - "*.ape /home/cngrid/EN/ passwd -l cngrid passwd -u cngrid 密码lock & unlock vi /etc/passwd /sbin/nologin pwconv 不让某用户登录 不让某用户更改密码:man 5 shadow,将第4个域设置的足够长 at命令 在某一时刻一次性的执行某个命令 $ at 23:53 at>ping 10.0.1.191 at>ctrl+d atq atrm+jobnumber ctr+z fg+jobid bg $ md5sum vsftpd-2.0.3.tar.gz > md5dest.txt && diff md5.txt md5dest.txt 把interview.txt传给Windows用户成了一行,先unix2dos再传: unix2dos interview.txt ----------------------------------------------------------------------------------------------- xargs带空格的情况: man xargs知道利用find -print0 man find 知道 -exec 也行 $ find . -type d -print0 |xargs -0 chmod 755 $ find . -type d -exec chmod 755 {} \; find -> args OR find -> egrep 但find -> egrep -> xargs 不好,egrep会导致-print0失效。看看某些文件能否够刻一张盘: $ find . -maxdepth 1 -name "*Capi*" -print0 -o -name "*Morning*" -print0 | xargs -0 du -ch copy kernel txt: $ find linux-2.6.33/ | grep txt | cpio -pd ~/temp/ =============================================================================================== 对用户peter设置quota,最多给40GB空间,超过39GB Warning 先df -h 看分区情况 1.$ sudo vi /etc/fstab LABEL=/1 / ext3 defaults 1 1 LABEL=/var /var ext3 defaults 1 2 LABEL=/usr /usr ext3 defaults 1 2 LABEL=/home /home ext3 defaults 1 2 LABEL=/boot /boot ext3 defaults 1 2 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 LABEL=SWAP-sda7 swap swap defaults 0 0 将/home那行改成如下,其它不变: LABEL=/home /home ext3 defaults,usrquota 1 2 2.$ sudo umount /dev/sda2 && mount -a && less /etc/mtab 其中有如下项 /dev/sda2 /home ext3 rw,usrquota 0 0 $ sudo quotacheck -avug 结束后在/home/下生成aquota.user文件 $ sudo quotaon -avug 如果结果含有 turned on 出现就可以继续了 3.设定peter的使用空间. # edquota -u peter ,只填写soft, hard, 其它不要动. soft hard 39000000 40000000 $ edquota -t 设定宽限时间,默认7days,不用动 $ repquota -au 看最后结果 $ quota -s =============================================================================================== /etc/hosts --> IP hostname FQDN /etc/sysconfig/network--> hostname, gateway /etc/sysconfig/network-scripts/ifcfg-eth0 -->IP/submask,gateway, MAC /etc/resolv.conf->DNS /etc/host.conf--> order hosts,bind 生效:service network restart 修改hostname后注意把/etc/hosts中 127.0.0.1 cn122 localhost.localdomain localhost 也改掉 ----------------------------------------------------------------------------------------------- Linux 下配置路由器 一. 插好网线和网卡 原来 Gateway 是无线路由器,外面接公网,里面是LAN,192.168.1.1/10.128.X.X LAN 中机器都为 192.168.1.0/24 ,server0 ~ server4 xx@server4:~$ sudo vi /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.1.14 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 // Default Gateway xx@server4:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 现在无线路由器不稳定,替换掉,用 LAN 中这台双网卡的server4 做新网关,Ubuntu 12.04 设置 server4: 192.168.1.1/10.128.X.X LAN 中机器都用的 eth0 private ip,因此server4 eth0 继续做 private,把 eth1 设成 public。 这样 LAN 中其它机器的配置都不用改。新的布局为: Gateway: GW eth1: public dhcp DHCP Server: 10.108.216.1 eth0: private 192.168.1.1 LAN: server0 ~ server3 eth0: private static 192.168.1.0/24 二. Hostname/IP/SUBMASK/IP Forwarding xx@GW:~$ sudo vi /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 auto eth1 iface eth1 inet dhcp xx@GW:~$ sudo /etc/init.d/networking restart # Enables packet forwarding by kernel xx@GW:~$ sudo vi /etc/sysctl.conf net.ipv4.ip_forward=1 xx@GW:~$ sudo sysctl -p 三. NAT configuration with IP Tables # Delete and flush all the rules in filter and nat tables xx@GW:~$ sudo iptables -F xx@GW:~$ sudo iptables -t nat -F xx@GW:~$ sudo iptables -X xx@GW:~$ sudo iptables -t nat -X # Set up IP FORWARDing and Masquerading xx@GW:~$ sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE xx@GW:~$ sudo iptables -A FORWARD -i eth0 -j ACCEPT xx@GW:~$ sudo /etc/init.d/networking restart # Save and Restore iptables rules xx@GW:~$ sudo bash -c 'iptables-save > /etc/network/iptables.rules' xx@GW:~$ sudo vi /etc/network/interfaces append: post-up iptables-restore < /etc/network/iptables.rules Test: xx@GW:~$ dhclient 10.108.216.1 xx@GW:~$ ping www.google.co.uk xx@server0:~$ ping www.google.co.uk # Port Forwarding to server0 xx@GW:~$ sudo iptables -A PREROUTING -t nat -i eth1 -j DNAT --to 192.168.1.10 xx@GW:~$ sudo iptables -A FORWARD -i eth1 -d 192.168.1.10 -j ACCEPT 四. Result: xx@GW:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.108.216.1 0.0.0.0 UG 100 0 0 eth1 10.108.216.0 0.0.0.0 255.255.252.0 U 0 0 0 eth1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 xx@server0:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 xx@GW:~$ sudo cat /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 auto eth1 iface eth1 inet dhcp post-up iptables-restore < /etc/network/iptables.rules xx@GW:~$ sudo iptables -L --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere 2 ACCEPT tcp -- anywhere 192.168.1.10 tcp dpt:ssh Chain OUTPUT (policy ACCEPT) num target prot opt source destination xx@GW:~$ sudo iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT all -- anywhere anywhere to:192.168.1.10 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- anywhere anywhere Delete a rule: xx@GW:~$ sudo iptables -t nat -L --line-numbers Chain PREROUTING (policy ACCEPT) num target prot opt source destination 1 DNAT tcp -- anywhere anywhere tcp dpt:ssh to:192.168.1.10:22 Chain INPUT (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination 1 MASQUERADE all -- anywhere anywhere xx@GW:~$ sudo iptables -t nat -D PREROUTING 1 Port Forwarding 39492 to server5, 8000 to server1: xx@GW:~$ sudo iptables -t nat -L --line-numbers Chain PREROUTING (policy ACCEPT) num target prot opt source destination 1 DNAT all -- anywhere anywhere to:192.168.1.10 Chain INPUT (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination 1 MASQUERADE all -- anywhere anywhere xx@GW:~$ sudo iptables -I PREROUTING 1 -t nat -i eth1 -j DNAT -p tcp --dport 39492 --to 192.168.1.15 xx@GW:~$ sudo iptables -I PREROUTING 1 -t nat -i eth1 -j DNAT -p tcp --dport 8000 --to 192.168.1.11 xx@GW:~$ sudo iptables -I PREROUTING 1 -t nat -i eth1 -j DNAT -p tcp --dport 27017 --to 192.168.1.15 ----------------------------------------------------------------------------------------------- dmesg|grep eth 看启动时网卡是否被kernel捕捉到, r8169: eth0: link up Realtek RTL8169/8110都是G级网卡,FC6无法识别,到realtek官网下驱动,readme很详细。大概步骤: make clean modules && make install depmod -a insmod src/r8169.ko 验证,能显示相应设备就说明安装成功了: lsmod | grep r8169 ifconfig -a # vi /etc/sysconfig/network-scripts/ifcfg-eth* a. Fix IP address: DEVICE=eth* BOOTPROTO=static ONBOOT=yes TYPE=ethernet IPADDR=10.0.1.4 NETMASK=255.255.255.0 GATEWAY=10.0.1.254 b. DHCP: DEVICE=eth* BOOTPROTO=dhcp ONBOOT=yes HWADDR=00:13:20:42:79:52 # service network restart ----------------------------------------------------------------------------------------------- RealTek的 RTL8169S/8110S, RTL8169SB/8110SB, and RTL8110SC 都是G级网卡 Jumbo Frame 假设本机是RTL8110S/SB/SC某种G级网卡,想设定packet为7KB: # ifconfig ethX mtu 7168 验证,找一台目标机,对方也是诸如RTL8169S/SB/SC的G级网卡,而且已经配置好了7KB的packet, # ping <IP Address> -s 7126 -M do 即用UDP也用TCP的service: DNS, portmap(sun RPC), NFS DNS主要用UDP, 两种情况要用TCP: 1.UDP的返回报文段> 512 byte时,就改用TCP,因为TCP是byte stream,不怕报文段大. 2.secondary server向primary server请求执行zone transfer时.此时传输数据量较大,需要可靠传输 192.168.100.0/30 192.168.100.0/23 可用地址有哪些 |<---Net ID ---->| | 192.168.100.00000000 Network ID 192.168.100.00000000 192.168.100.0 Subnetmask 255.255.255.11111100 255.255.255.252 Broadcast 192.168.100.00000011 192.168.100.3 |<--NetID---->|--HostID-| 192.168.01100100.00000000 Network ID 192.168.01100100.00000000 192.168.100.0 Subnetmask 255.255.11111110.00000000 192.168.254.0 Broadcast 192.168.01100101.11111111 192.168.101.255 ----------------------------------------------------------------------------------------------- Routing 收敛:去所有的网络都可以了。 DV:distance vecotr distance:距离远近。 vecotr: 向哪个方向。 LS:link state指router Interface的状态,如Up,Down,IP地址,网络类型以及router和它邻居router间的关系. IP routing: 1) Search the routing table for an entry that matches the complete destination IP address 2) Search the routing table for an entry that matches just the destination network ID 3) search for a default entry. Ethernet: host A ---> host D A先查自己的routing table,发现dst ip和自己的network ID 符合,知道是一个Ethernet内,就用arp获取 dst mac,封装src ip, src mac, dst ip, dst mac,然后直接发给D. WAN: host A --> Router B --> Router C --> host D 包中dst IP不变,dst MAC不断变 A先查自己的routing table,发现没有对应D的entry,就向default传:先把dst ip= D ip封进去,然后arp获取B 的mac,把src ip, src mac, dst ip, B mac封起来送给B; B去掉src mac,dst mac,查自己的routing table,发现没有和dst ip匹配的.就转default,dst ip不变.通过arp 获取C的mac.把src ip, dst ip, src map, C mac封起来发给C; C去掉src mac,dst mac,查自己的routing table,发现和dst ip一个network ID,就arp获取C mac,封进去发给D RIP:router周期广播routing table给邻居,全量更新,知道跳数。DV可能产生routing loop.跳数最大16 OSPF: 配置OSPF router时可把链路带宽、时延或经济费用等设置成Cost。 dig netstat -su man ip ip {link | addr | neigh | route} help 网络正常时备份LAN ip mac 映射表: $ sudo nmap -sP 10.0.1.0/24 >> ipmac_src 现在LAN内部出问题了,原来mount一个samba分区不能用了,df -h显示不出来,卡住。也上不了外网。 $ sudo nmap -sP 10.0.1.0.24 >> ipmac_trouble $ vimdiff ipmac_src ipmac_trouble $ less ipmac_trouble Starting Nmap 5.21 ( http://nmap.org ) at 2010-04-02 12:42 CST Nmap scan report for 10.0.1.4 Host is up. Nmap scan report for 10.0.1.15 Host is up (0.00035s latency). MAC Address: 00:1E:8C:A3:61:63 (Asustek Computer) Nmap scan report for 10.0.1.192 Host is up (0.00012s latency). MAC Address: 00:13:20:4B:A7:1C (Intel Corporate) Nmap scan report for 10.0.1.196 Host is up (0.000092s latency). MAC Address: 00:24:1D:55:40:38 (Giga-byte Technology Co.) Nmap scan report for 10.0.1.197 Host is up (0.00011s latency). MAC Address: 00:E0:4D:96:F4:0C (Internet Initiative Japan) Nmap scan report for 10.0.1.202 Host is up (0.00012s latency). MAC Address: 00:24:1D:54:D6:C3 (Giga-byte Technology Co.) Nmap scan report for 10.0.1.205 Host is up (0.00027s latency). MAC Address: 00:1F:D0:12:08:CA (Giga-byte Technology Co.) Nmap scan report for 10.0.1.209 Host is up (0.00022s latency). MAC Address: 00:24:1D:59:FB:D7 (Giga-byte Technology Co.) Nmap scan report for 10.0.1.210 Host is up (0.00017s latency). MAC Address: 00:E0:4D:96:F2:D0 (Internet Initiative Japan) Nmap scan report for 10.0.1.215 Host is up (0.00011s latency). MAC Address: 00:24:1D:55:EB:3E (Giga-byte Technology Co.) Nmap scan report for 10.0.1.220 Host is up (0.00010s latency). MAC Address: 00:1B:FC:2B:E6:92 (Asustek Computer) Nmap scan report for 10.0.1.221 Host is up (0.00013s latency). MAC Address: 00:E0:4D:A3:3E:D1 (Internet Initiative Japan) Nmap scan report for 10.0.1.224 Host is up (0.00013s latency). MAC Address: 00:E0:4D:9A:E5:CF (Internet Initiative Japan) Nmap scan report for 10.0.1.231 Host is up (0.00011s latency). MAC Address: 00:13:20:4B:A7:59 (Intel Corporate) Nmap scan report for 10.0.1.232 Host is up (0.00012s latency). MAC Address: 00:13:20:42:81:7E (Intel Corporate) Nmap scan report for 10.0.1.233 Host is up (0.00013s latency). MAC Address: 00:13:20:4B:A7:3F (Intel Corporate) Nmap scan report for 10.0.1.238 Host is up (0.00011s latency). MAC Address: 00:24:1D:54:D4:BA (Giga-byte Technology Co.) Nmap scan report for 10.0.1.239 Host is up (0.00012s latency). MAC Address: 00:13:20:42:79:25 (Intel Corporate) Nmap scan report for 10.0.1.242 Host is up (0.00011s latency). MAC Address: 00:E0:4D:A3:3E:DB (Internet Initiative Japan) Nmap scan report for 10.0.1.251 Host is up (0.10s latency). MAC Address: 00:60:B3:13:94:9B (Z-com) Nmap scan report for 10.0.1.254 Host is up (0.00011s latency). MAC Address: 00:13:46:5E:A7:28 (D-Link) Nmap done: 256 IP addresses (21 hosts up) scanned in 31.10 seconds 发现10.0.1.251是0.10s latency,明显过高,拔掉251的网线,网络果然好了! ----------------------------------------------------------------------------------------------- Kernel parameter tuning source code kernel-2.6.31.5-127.fc12.src.rpm kernel-2.6.18-194.el5.src.rpm fedora: http://download.fedora.redhat.com/ RHEL: ftp://ftp.redhat.com/ man proc Documentation/sysctl/ $ sudo sysctl -a|less search keyword temporary set: # echo "512" >> /sys/block/<DEV>/queue/nr_requests # sysctl -w kernel.threads-max=16000. permanent set: write echo command to /etc/rc.d/rc.local # vi /etc/modprobe.conf Add kernel.threads-max=16000 # sysctl -p ignore all ICMP ECHO # sysctl -w net.ipv4.icmp_echo_ignore_all=1 Example: G级网时,应调高kernel的一些网络参数 man tcp increase buffer: net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 allow more syn requests: net.ipv4.tcp_max_syn_backlog = 4096 increase free mem: vm.min_free_kbytes = 65536 net.core.netdev_max_backlog = 2500 Maximum number of packets, queued on the INPUT side, when the interface receives packets faster than kernel can process them. do not modify: net.ipv4.tcp_mem do not enable as much as possible: net.ipv4.tcp_syncookies ----------------------------------------------------------------------------------------------- 安全删除某个rpm: locate avahi-> rpm -qfi /usr/sbin/avahi-daemon看package信息->rpm -e *** locate avahi->/etc/rc.d/init.d/avahi-daemon,service avahi-daemon stop-> ntsysv取消开机启动 list rpm : $ sudo rpm -qpl /usr/local/src/xmms-in-mac-0.2.1-alt2.i586.rpm 添加gridftp服务: vi /etc/xinetd.d/gridftp service gsiftp { instances = 100 socket_type = stream wait = no user = root env += GLOBUS_LOCATION=/usr/local/globus-4.0.5 env += LD_LIBRARY_PATH=/usr/local/globus-4.0.5/lib server = /usr/local/globus-4.0.5/sbin/globus-gridftp-server server_args = -i log_on_success += DURATION nice = 10 disable = no } vi /etc/services 末尾加上: gsiftp 2811/tcp service xinetd reload netstat -a|grep gsiftp 看是否已经启动 =============================================================================================== copy /etc/hosts /etc/yp.conf /etc/nsswitch.conf /etc/rc.d/rc.local mount -t nfs cn118:/lsf6.2 /lsf6.2 mount -t nfs cn117:/home/users /home/users ----------------------------------------------------------------------------------------------- NIS client端配置: 1. vi /etc/hosts 10.0.1.246 nismaster.job nismaster 10.0.1.245 nisslave.job nisslave 10.0.1.192 thucngrid.grid thucngrid 2. vi /etc/yp.conf # domain NISDOMAIN server HOSTNAME domain job server nismaster domain job server nisslave 3. vi /etc/nsswitch.conf passwd: files nis shadow: files nis group: files nis #hosts: db files nisplus nis dns hosts: files dns nis ethers: files nis netmasks: files nis networks: files nis protocols: files nis rpc: files nis services: files nis netgroup: files nis publickey: nisplus automount: files nis aliases: files nisplus nis 4. nisdomainname job 5. vi /etc/rc.d/rc.local 末尾加上 /bin/nisdomainname job /sbin/ypbind NIS Client 常用命令: id gos2 uid=695(gos2) gid=100(users) groups=100(users) 说明NIS Client已经连接上了NIS Server. yptest 看nisdomain nisserver等信息 刚假设好NIS Client时,要根据屏幕信息一个一个检查,看有无错误。 ypwhich 返回nisserver等信息. ypcat 读取数据库的内容,数据库名称在 /var/yp/ 下面的文件中 例如 ypcat passwd.byname gos2用户修改密码:yppasswd =============================================================================================== SSH Port Forwarding -L -R 需要设置/etc/ssh/sshd_config GatewayPorts yes 前提:远程有一台机器开了ssh服务,并且你有一个ssh帐号。 目标:把那台远程机器作为代理服务器,让外界看到的是远程机器的IP,隐藏自己的IP。 利用ssh port forwarding,设置firefox SOCKS代理。 $ ssh -D 9999 user@remotehost 输入密码 $ sudo netstat -an|grep 9999 tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN tcp 0 0 ::1:9999 :::* LISTEN 已经建立连接了。 Firefox 使用代理 Edit ->Preferences ->Advanced -> Network ->Settings ->Manual Proxy Configuration: SOCKS Host:127.0.0.1 PORT: 9999 ip138上看自己的IP应该已经是Proxy的ip了。如果远程机器在国外,那就可以过W了。 有错误: channel 2: open failed: administratively prohibited: open failed $ sudo vi /etc/ssh/sshd_config 设置 GatewayPorts GatewayPorts yes $ sudo service sshd restart 如果想关掉这个端口,可以先找到pid然后kill掉: $ sudo lsof -i:9999 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME ssh 32136 root 4u IPv4 668733 TCP cn122:distinct (LISTEN) ssh 32136 root 6u IPv6 668734 TCP localhost6.localdomain6:distinct (LISTEN) $ kill 32136 server set idle time: $ sudo vi /etc/ssh/sshd_config ClientAliveInterval 900 ClientAliveCountMax 100 $ sudo service ssh restart 直接上BBS很慢,找台IP地址不受限的机器做Proxy,穿梭: $ ssh -L $ telnet localhost 9988 就可以用代理上BBS了 ----------------------------------------------------------------------------------------------- ssh无密码登录: ssh-keygen && ssh cngrid@10.0.1.7 mkdir .ssh && chmod 0700 .ssh scp ~/.ssh/id_rsa.pub cngrid@10.0.1.7:~/.ssh/authorized_keys 如果很多机器两两之间都需要无密码登录: 产生2个key -> 把id_rsa.pub改名为authorized_keys 3.把这2个key传送到其它机器的~/.ssh/下即可 用expect也可实现无密码scp,但不安全: #!/usr/bin/expect # usage: expect expect.sh spawn scp -r /home/cngrid/mp3/ root@10.0.1.7:/usr/local/linux-2.6.31/music/ expect "password:" send "hello456\r" interact ftp无密码登录直接用 lftp -e "get -c High.Noon.1952.mkv" -u user,passwd <IP> ssh到对方机器很慢: # vi /etc/ssh/sshd_config UseDNS no 用ssh j而不是ssh root@10.0.1.7 登录. 在本机 vi ~/.ssh/config Host j HostName 10.0.1.7 User root ----------------------------------------------------------------------------------------------- 对用户做登录限制时,涉及ip:port 用firewall方便,涉及ip:username用sshd_config和PAM方便。 Example 1. 禁止cngrid在10.0.1.15上ssh登录。 man sshd_config sshd $ sudo vi /etc/ssh/sshd_config DenyUsers cngrid@10.0.1.15 $ sudo service sshd restart 注意: 1) 如果cngrid之前已经通过~/.ssh/known_hosts登录,则设置TCP_Wrapper hosts.allow和hosts.deny不灵。 所以对用户做限制时,尽量不要用TC_Wrapper。 2) ssh-keygen把pubkey给用户,并限制ssh只能通过RSA认证。这样虽然可以,但会导致所有ssh用户都得用 这种方式登陆,影响其它用户,也不利于将来自己这边变动。 Example 2. cngrid在内网时,只允许他在10.0.1.15登录,但cngrid在外网时不限制。 用sshd_config不灵,没见到 EXCEPT 介绍,应该是没有,用 ! 也不灵。 用PAM: $ sudo vi /etc/pam.d/sshd account required pam_access.so $ sudo vi /etc/security/access.conf 把下面这行作为第一行 -:cngrid:10.0.1.0/24 EXCEPT 10.0.1.15 这样cngrid就只能从10.0.1.15这个内网ip登陆了,不必重启sshd。 注意: 如果把上面那行放在最后一行则无效。 man pam pam.conf 都不详细,看看它的doc有哪些: $ sudo rpm -qd pam ... /usr/share/man/man5/access.conf.5.gz /usr/share/man/man5/config-util.5.gz /usr/share/man/man5/console.apps.5.gz /usr/share/man/man5/console.handlers.5.gz ... 可以 man /usr/share/man/man5/access.conf.5.gz,看了上面的文档就给/etc/ 下很多限制用户相关的文件 来个总结: /etc/motd /etc/shells /etc/nologin /etc/hosts.equiv /etc/securetty /etc/security/access.conf /etc/security/limits.d/ ...... Example 3. 不让任何普通用户登录就 $ sudo touch /etc/nologin 因为 /etc/pam.d/login 有如下一行: account required pam_nologin.so man /usr/share/man/man8/pam_nologin.8.gz Example 4. 只允许cngrid使用su: $ sudo vi /etc/pam.d/su #%PAM-1.0 auth sufficient pam_rootok.so # Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the "wheel" group. #auth required pam_wheel.so use_uid auth include system-auth account sufficient pam_succeed_if.so uid = 0 use_uid quiet account include system-auth password include system-auth session include system-auth session optional pam_xauth.so 按注释说的添加一行: auth required pam_wheel.so group=suok $ sudo groupadd suok $ sudo usermod -a -G suok cngrid 则普通用户中只有cngrid可以使用su了。 man /usr/share/man/man8/pam_wheel.8.gz 想把cngrid从suok中删除就$ sudo gpasswd -d cngrid suok man iptables iptables -L iptables -F && iptables -X 写好rule,用的时候直接 iptables-restore > ~/rule iptables-save < ~/rule 接受来自192.168.1.0/24的请求,但是拒绝192.168.1.10: iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT 拒绝192.168.1.0/24上port范围1024:65535的packet ssh到本机: iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65535 --dport 22 -j DROP 管理111端口,仅允许192.168.1.0/24从111 port进来: iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --dport 111 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 111 -j DROP 一个Web sever: iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT iptables -A INPUT -m state RELATED ESTABLISHED -j ACCEPT iptables -P INPUT DROP man dsniff tcpdump 监听eth0上port 22,来自 10.0.1.15 的 packets tcpdump -i eth0 -nn `port 22 and src host 10.0.1.15` TCP SYN flood 现象: 能ping通目标主机却无法访问 netstat -na 有大量SYN_RCVD、TIME_WAIT、FIN_WAIT_1等,ESTABLISHED很少. =============================================================================================== Ubuntu 12.04 安装 nagios 3.4 安装环境: 一共9台机器,server0 ~ server3 server5 ~ server9 / 192.168.1.10 ~ 192.168.1.19 CPU: Intel x86_64 OS: Ubuntu 12.04 Server $ uname -a Linux server0 3.3.7-030307-generic #201205211535 SMP Mon May 21 19:36:02 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux 一共3个软件包: nagios-3.4.1.tar.gz nagios-plugins-1.4.16.tar.gz nrpe-2.13.tar.gz (Nagios Remote Plugin Executor) 让 server0 负责监测 server1 ~ server3 server5 ~ server9,不监测 server0 本身。 server0 上要装那3个软件; server1 ~ server3 server5 ~ server9 上只需装后2个: nagios-plugins nrpe 官方文档很全,一定要对照看: http://nagios.sourceforge.net/docs/nagioscore/3/en/toc.html 一. 监控端 server0 上安装 nagios: 1. 首先在 server0 上添加用户。 $ sudo useradd -m -s /bin/bash nagios $ sudo passwd nagios $ groupadd nagcmd $ usermod -a -G nagcmd nagios $ usermod -a -G nagcmd www-data 切换成 nagios 用户,接下来就用这个用户安装配置 nagios: $ su - nagios 2. 安装预装包: nagios@server0:~$ sudo apt-get install build-essential libgd2-xpm-dev libssl-dev nagios@server0:~$ sudo apt-get install apache2 php5 libapache2-mod-php5 注意要先装 apache2,再装 php5,这样 apache2 和 php5 会自动关联, 如果没有自动关联就只好手动关联,手动给 apache 添加 php5 module: nagios@server0:~$ cd /etc/apache2/ apache2 配置文件在这,里面有两个 mods 文件夹 mods-available mods-enabled nagios@server0:/etc/apache2$ ls -l mods-enabled mods-available |less mods-enabled/ 里面应该有php5 module,如果没有就要手动添加,然后重启 apache2: nagios@server0:/etc/apache2$ sudo a2enmod php5 nagios@server0:/etc/apache2$ sudo service apache2 restart 虽然 apache2 启动显示 OK,还要看看 apache2 log,在 /var/log/apache2/ 下, 确定 error.log 没有问题再继续。 3. 安装 nagios: nagios@server0:~$ tar zxvf nagios-3.4.1.tar.gz nagios@server0:~$ cd nagios/ nagios@server0:~/nagios$ ./configure --with-command-group=nagcmd nagios@server0:~/nagios$ make all nagios@server0:~/nagios$ sudo make install nagios@server0:~/nagios$ sudo make install-init nagios@server0:~/nagios$ sudo make install-config nagios@server0:~/nagios$ sudo make install-commandmode nagios@server0:~/nagios$ sudo make install-webconf nagios 默认被安装到 /usr/local/nagios/ 下 添加nagios 管理员账户,系统默认 user 为 nagiosadmin,也可以添加其它的: nagios@server0:~/nagios$ htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin nagios@server0:~/nagios$ sudo service apache2 restart 4. 安装 nagios-plugins: nagios@server0:~$ tar zxvf nagios-plugins-1.4.16.tar.gz nagios@server0:~$ cd agios-plugins-1.4.16/ nagios@server0:~/nagios-plugins-1.4.16$ ./configure --with-nagios-user=nagios --with-nagios-group=nagios ...... config.status: creating po/POTFILES config.status: creating po/Makefile --with-apt-get-command: /usr/bin/apt-get --with-ping6-command: /bin/ping6 -n -U -w %d -c %d %s --with-ping-command: /bin/ping -n -U -w %d -c %d %s --with-ipv6: yes --with-mysql: no --with-openssl: yes --with-gnutls: no --enable-extra-opts: no --with-perl: /usr/bin/perl --enable-perl-modules: no --with-cgiurl: /nagios/cgi-bin --with-trusted-path: /bin:/sbin:/usr/bin:/usr/sbin --enable-libtap: no 看到 --with-openssl: yes 就可以继续了; 如果显示 no 就要安装对应 OS 的 SSL Lib package。 nagios@server0:~/nagios-plugins-1.4.16$ make nagios@server0:~/nagios-plugins-1.4.16$ sudo make install nagios@server0:~/nagios-plugins-1.4.16$ sudo make install-root 此时 /usr/local/nagios/libexec/ 下生成了很多 nagios-plugin,就是写好的一堆脚本,-h 看帮助: nagios@server0:~/nagios-plugins-1.4.16$ /usr/local/nagios/libexec/check_*** -h|less nagios@server0:~/nagios-plugins-1.4.16$ vi ~/.bashrc export PATH=$PATH:/usr/local/nagios/bin nagios@server0:~/nagios-plugins-1.4.16$ source ~/.bashrc nagios@server0:~/nagios-plugins-1.4.16$ service nagios start nagios@server0:~/nagios-plugins-1.4.16$ ps -A|grep nagios 会有显示。 接下来在 server0 上打开浏览器,输入: http://192.168.1.10/nagios 如果没有 firewall 的干扰,就能看到 server0 自己的界面了。 Current Status -> Services 能看到 Ping, Swap, Total Processes 等机器状态的参数。 如果server0 在远方,就在 router 上对 apache2 的监听端口做个 port forwarding。 这里要对照文档多看看 /usr/local/nagios/ 下的配置文件,其中 etc/nagios.cfg 被称为 Main Configuration File,etc/objects/ 下还有几个配置文件。 监测本机的配置文件是 etc/objects/localhost.cfg 对照文档看看就知道含义了。 为了监测其它机器,还要继续安装 nrpe,这是一个特殊的 nagios-plugin,需要在监控端和被监控机器上 都安装,nrpe 在远程机器上搜集信息,将信息返回给监控端: 5. 安装 nrpe nagios@server0:~$ tar zxvf nrpe-2.13.tar.gz nagios@server0:~$ cd nrpe-2.13/ nrpe 默认每个 service 只能返回 1KB 数据,nagios 默认每个 service 能读取 8KB 数据。修改两行源码, 将数值增大到 8192,然后再编译安装: nagios@server0:~/nrpe-2.13$ vi include/common.h #define MAX_INPUT_BUFFER 8192 /* max size of most buffers we use */ #define MAX_PACKETBUFFER_LENGTH 8192 /* max amount of data we'll send in one query/response */ 经过试验,默认的 1024 效果很好,远程机器的监控对象一旦发生变化,nagios web 界面上很快就能看到; 设置成 8192 后,nagios web 界面上收到 nrpe 返回信息的时间会变长很多,大于2分钟; 设置成大于 8192 会导致 nrpe 不能正常运行,即使单机也不行。 直接 configure 出错: nagios@server0:~/nrpe-2.13$ ./configure checking for SSL headers... SSL headers found in /usr checking for SSL libraries... configure: error: Cannot find ssl libraries 没找到 SSL lib 1) $ locate ssl|less 找到路径 2) $ ./configure -h|less 找到 configure 选项 nagios@server0:~/nrpe-2.13$ ./configure --with-ssl-lib=/usr/lib/x86_64-linux-gnu/ nagios@server0:~/nrpe-2.13$ make all nagios@server0:~/nrpe-2.13$ sudo make install-plugin nagios@server0:~/nrpe-2.13$ vi ~/.bashrc export PATH=$PATH:/usr/local/nagios/bin nagios@server0:~/nrpe-2.13$ source ~/.bashrc 参考官方文档 "Object Definitions" 定义自己的配置文件: http://nagios.sourceforge.net/docs/nagioscore/3/en/objectdefinitions.html 下面是我自己定义的配置: server0 监测 server1 ~ server3 server5 ~ server9 的 load, total processes 以 server1 为例,server0 根据自己的配置文件把命令传给 server1 nrpe daemon, server1 nrpe daemon 根据自己的配置文件在本机执行命令,然后把结果返回给 server0。 nagios@server0:~/nrpe-2.13$ cd /usr/local/nagios/ nagios@server0:/usr/local/nagios$ ls etc/servers/ commands.cfg hosts.cfg services.cfg nagios@server0:/usr/local/nagios$ vi etc/servers/hosts.cfg define host{ name linux-server-template check_period 24x7 check_interval 5 retry_interval 1 max_check_attempts 10 contact_groups admins notifications_enabled 1 event_handler_enabled 1 flap_detection_enabled 1 process_perf_data 1 retain_status_information 1 notification_interval 120 notification_period workhours notification_options d,u,r register 0 } define host{ use linux-server-template host_name server0 alias nagiosserver address 192.168.1.10 check_command check_nrpe!check_host_alive } define host{ use linux-server-template host_name server1 alias server1 address 192.168.1.11 check_command check_nrpe!check_host_alive } define host{ use linux-server-template host_name server2 alias server2 address 192.168.1.12 check_command check_nrpe!check_host_alive } define host{ use linux-server-template host_name server3 alias server3 address 192.168.1.13 check_command check_nrpe!check_host_alive } define host{ use linux-server-template host_name server5 alias server5 address 192.168.1.15 check_command check_nrpe!check_host_alive } define host{ use linux-server-template host_name server6 alias server6 address 192.168.1.16 check_command check_nrpe!check_host_alive } define host{ use linux-server-template host_name server7 alias server7 address 192.168.1.17 check_command check_nrpe!check_host_alive } define host{ use linux-server-template host_name server8 alias server8 address 192.168.1.18 check_command check_nrpe!check_host_alive } define host{ use linux-server-template host_name server9 alias server9 address 192.168.1.19 check_command check_nrpe!check_host_alive } 这里 check_host_alive 是在系统默认配置文件 etc/objects/commands.cfg 中: # This command checks to see if a host is "alive" by pinging it # The check must result in a 100% packet loss or 5 second (5000ms) round trip # average time to produce a critical error. # Note: Five ICMP echo packets are sent (determined by the '-p 5' argument) # 'check-host-alive' command definition define command{ command_name check-host-alive command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5 } 这就要求被监测机器 server1 上的配置文件中要有执行 check_ping 的设置,如果没有就要自己添加。 nagios@server0:/usr/local/nagios$ vi etc/servers/services.cfg define service{ name linux-service-template active_checks_enabled 1 passive_checks_enabled 1 parallelize_check 1 obsess_over_service 1 check_freshness 0 notifications_enabled 1 event_handler_enabled 1 flap_detection_enabled 1 failure_prediction_enabled 1 process_perf_data 1 retain_status_information 1 retain_nonstatus_information 1 is_volatile 0 check_period 24x7 max_check_attempts 3 normal_check_interval 10 retry_check_interval 2 contact_groups admins notification_options w,u,c,r notification_interval 60 notification_period workhours register 0 } define service{ use linux-service-template host_name server1,server2,server3,server5,server6,server7,server8,server9 service_description CPU Load check_command check_nrpe!check_load } define service{ use linux-service-template host_name server1,server2,server3,server5,server6,server7,server8,server9 service_description Total Processes check_command check_nrpe!check_total_procs } nagios@server0:/usr/local/nagios$ vi etc/servers/commands.cfg define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 30 } 设置好配置文件后,要先 nagios -v 检查一下: nagios@server0:/usr/local/nagios$ nagios -v etc/nagios.cfg 如果没有error,继续检查 command definition,如果这里 check_nrpe 后面的参数写错了, nagios -v 是检查不出来的。比如上面命令参数 -c 写成了 -C,nagios -v 检查没有 error, 就以为是 apache2 的问题,去查 apache2 log 也不会有结果。 都通过了就可以重启 nagios: nagios@server0:/usr/local/nagios$ service nagios restart 接下来要在被监控的机器上安装配置了。 二. 在被监控的机器 server1 ~ server9 上安装 nagios-plugins, nrpe: 1. 在 server1 ~ server3 server5 ~ server9 上添加 nagios 用户: $ sudo useradd -m -s /bin/bash nagios $ sudo passwd nagios 2 . 在server1 ~ server3 server5 ~ server9 上预装如下 package: nagios@server1:~$ sudo apt-get install build-essential libgd2-xpm-dev libssl-dev 3. 安装 nagios-plugins: nagios@server1:~$ tar zxvf nagios-plugins-1.4.16.tar.gz nagios@server1:~$ cd nagios-plugins-1.4.16/ nagios@server1:~/nagios-plugins-1.4.16$ ./configure --with-nagios-user=nagios --with-nagios-group=nagios nagios@server1:~/nagios-plugins-1.4.16$ make nagios@server1:~/nagios-plugins-1.4.16$ sudo make install nagios@server1:~/nagios-plugins-1.4.16$ sudo make install-root 4. 安装 NRPE: nagios@server1:~$ tar zxvf nrpe-2.13.tar.gz nagios@server1:~$ cd nrpe-2.13/ nagios@server1:~/nrpe-2.13$ vi include/common.h #define MAX_INPUT_BUFFER 8192 /* max size of most buffers we use */ #define MAX_PACKETBUFFER_LENGTH 8192 /* max amount of data we'll send in one query/response */ nagios@server1:~/nrpe-2.13$ ./configure --with-ssl-lib=/usr/lib/x86_64-linux-gnu/ nagios@server1:~/nrpe-2.13$ make all nagios@server1:~/nrpe-2.13$ sudo make install-plugin nagios@server1:~/nrpe-2.13$ sudo make install-daemon nagios@server1:~/nrpe-2.13$ sudo make install-daemon-config nagios@server1:~/nrpe-2.13$ vi ~/.bashrc export PATH=$PATH:/usr/local/nagios/bin nagios@server1:~/nrpe-2.13$ source ~/.bashrc nagios@server1:~/nrpe-2.13$ cd /usr/local/nagios/ nagios@server1:/usr/local/nagios$ vi etc/nrpe.cfg 1) 加上允许监控自己的 server0 IP: allowed_hosts=127.0.0.1,192.168.1.10 2) 搜 include_dir,在下面加上自己定义的目录: include_dir=/usr/local/nagios/etc/rservers nagios@server1:/usr/local/nagios$ mkdir etc/rservers 发现 etc/nrpe.cfg 中没有 server0 中设置的 check-host-alive command,需要我们自己定义: nagios@server1:/usr/local/nagios$ vi etc/rservers/commands.cfg command[check-host-alive]=/usr/local/nagios//libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5 启动 nrpe: nagios@server1:/usr/local/nagios$ nrpe -c etc/nrpe.cfg -d nagios@server1:~$ ps -A|grep nrpe 17300 ? 00:00:00 nrpe nagios@server1:~$ netstat -an|grep 5666 tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 每次修改 nrpe.cfg 之后,都要 kill nrpe 进程,然后重新启动。 在 本机 和 server0 上测试,都能返回版本号就安装成功了: nagios@server1:/usr/local/nagios$ libexec/check_nrpe -H localhost NRPE v2.13 nagios@server0:~$ /usr/local/nagios/libexec/check_nrpe -H server1 NRPE v2.13 如果出错就修改 etc/nrpe.cfg: debug=1 重启 nrpe,执行 nrpe 命令出错之后去 /var/log/syslog 中找 error 信息,然后 google 三. 网页验证 在 server0 的浏览器上输入: http://192.168.1.10/nagios 正常会出现被监测机器 server1 ~ server3 server5 ~ server9 的信息: load, total processes。 如果没有正常显示,可以先在命令行下测试: nagios@server0:/usr/local/nagios$ libexec/check_nrpe -H server1 -c check_total_procs PROCS WARNING: 173 processes 如果命令行显示结果都正常,就先好好检查 server0 上自己设置的 commands.cfg,看参数是否有错; 如果没错就看 apache2 log,/var/log/apache2/ 下的 error.log nagios@server0:/usr/local/nagios$ ps -A|grep nagios 更多时候要自己写 plugin,放到 libexec/ 下面,plugin 要遵循 nagios 的规范: http://nagios.sourceforge.net/docs/3_0/pluginapi.html nagios 本身对监测结果不能出图,必须安装第三方的软件。如果想出图,那么写 plugin 时除了 Output, 还要返回 perfdata,就是一个字符串,nrpe 将这个 perfdata 返回给第三方生成图形的软件处理。 plugin 返回的字符串,Output + perfdata,nrpe 只能读前 1024,要想让 plugin 返回更多数据,就 multiline 的方式输出。 如果无法出图,可以先查看 nagios host service 状态: nagios@server0:/usr/local/nagios$ less var/status.dat 如果采用被动监测方式,可以安装 Ndoutils 插件 + MySQL,然后安装 Centreon。 Centreon 可以在图形界面中修改配置文件。 这里装一个免费的 pnp4nagios,加入图形显示选项。 官方文档一定要看: http://docs.pnp4nagios.org/pnp-0.6/doc_complete 四. 安装 pnp4nagios 1. 预备安装 nagios@server0:~$ sudo apt-get install perl rrdtool php5-gd Enable apache2 rewrite module: nagios@server0:~$ cd /etc/apache2/ nagios@server0:/etc/apache2$ ls -l mods-available/|grep write -rw-r--r-- 1 root root 66 Feb 7 12:16 rewrite.load nagios@server0:~$ sudo a2enmod rewrite 2. 安装 pnp4nagios nagios@server0:~$ tar zxvf pnp4nagios-0.6.18.tar.gz nagios@server0:~$ cd pnp4nagios-0.6.18/ nagios@server0:~/pnp4nagios-0.6.18$ ./configure --with-nagios-user=nagios --with-nagios-group=nagcmd nagios@server0:~/pnp4nagios-0.6.18$ make all nagios@server0:~/pnp4nagios-0.6.18$ sudo make install nagios@server0:~/pnp4nagios-0.6.18$ sudo make install-webconf nagios@server0:~/pnp4nagios-0.6.18$ sudo make install-config nagios@server0:~/pnp4nagios-0.6.18$ sudo make install-init 默认安装到 /usr/local/pnp4nagios/ 下 nagios@server0:~/pnp4nagios-0.6.18$ sudo service apache2 restart 3. 配置 监测的机器很少,所以用最基本的 Synchronous Mode; 机器多些的用 Bulk Mode; 几百台机器的用 Bulk Mode with NPCD daemon nagios@server0:~/pnp4nagios-0.6.18$ vi /usr/local/nagios/etc/nagios.cfg 更改三行: process_performance_data=1 host_perfdata_command=process-host-perfdata service_perfdata_command=process-service-perfdata nagios@server0:~/pnp4nagios-0.6.18$ vi /usr/local/nagios/etc/servers/commands.cfg 添加如下两段: define command { command_name process-service-perfdata command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl } define command { command_name process-host-perfdata command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA } 注释掉 /usr/local/nagios/etc/objects/commands.cfg 中系统默认的两个对应 command 的定义。 打开网页: http://192.168.1.10/pnp4nagios 网页显示验证结果,显示 GD Lib 没有加入到 php 中去,但明明已经安装 php5-gd 了。 nagios@server0:~$ sudo updatedb nagios@server0:~$ locate gd|less ...... /usr/lib/php5/20090626/gd.so ...... 将 gd.so 手动加入 php 配置文件中: nagios@server0:~$ less /etc/php5/apache2/php.ini 搜 extension 找到相应位置,再用 vi 打开添加目录和lib,直接 vi 打开颜色深蓝看不清。 在相应位置添加如下两行: extension_dir = "/usr/lib/php5/20090626/" extension=gd.so nagios@server0:~$ sudo service apache2 restart 这下刷新网页就pass了,按照提示将 install.php 改名: nagios@server0:~/pnp4nagios-0.6.18$ cd /usr/local/pnp4nagios/share/ nagios@server0:~/usr/local/pnp4nagios/share$ mv install.php install.php.backup 4. 继续修改 nagios 的相关配置文件 nagios@server0:~$ sudo vi /usr/local/nagios/etc/servers/hosts.cfg define host { name host-pnp action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_ register 0 } 在各个 define host 中 use 末尾加入 host-pnp,以 server1 为例: define host{ use linux-server-template,host-pnp host_name server1 alias server1 address 192.168.1.11 check_command check_nrpe!check_host_alive } nagios@server0:~$ sudo vi /usr/local/nagios/etc/servers/services.cfg define service { name srv-pnp action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$ register 0 } 在各个 define service 中 use 末尾加入 srv-pnp,以 check_load 为例: define service{ use linux-service-template host_name server1,server2,server3,server5,server6,server7,server8,server9 service_description CPU Load check_command check_nrpe!check_load } 验证 nagios 配置文件写的是否正确: nagios@server0:~/usr/local/pnp4nagios/share$ nagios -v /usr/local/nagios/etc/nagios.cfg 没有 Error 就重启 nagios: nagios@server0:~/usr/local/pnp4nagios/share$ service nagios restart 网页输入: http://192.168.1.10/nagios 可以看到小图标了,一点击就出来大图了。 pnp4nagios 生成图的配置文件: /usr/local/pnp4nagios/etc/config_local.php 定制 pnp4nagios 生成图: /usr/local/pnp4nagios/share/ 下面有几个 templates* 目录,里面的 .php 就是生成图形的。 其中 templates.dist/ 下面有一堆样例,自己定制的 .php 放在 templates/ 下面, 比如要对 nagios service check_http 出图,就要有 check_http.php。 系统按照如下顺序搜索 check_http.php: 1. templates/check_http.php 2. templates.dist/check_http.php 3. templates/default.php 4. templates.dist/default.php 如果自己不定制,系统会用默认的 default.php 来出图,这里的 .php 都是通过读取 rrd 数据库出图。 /usr/local/pnp4nagios/var/perfdata/ 下面有一堆目录,每台被监测机器一个目录,目录里面,每个 service 都包含 .rrd .xml 两个文件。templates/*.php 除了读 .rrd 之外,也可以利用 .xml 信息。 如果出图错误,可以先把 .rrd .xml 两个文件删除,重新生成。 nagios@server0:/usr/local/pnp4nagios$ ls -l var/perfdata/ drwxrwxr-x 2 nagios nagios 4096 Aug 9 10:25 localhost drwxrwxr-x 2 nagios nagios 4096 Sep 5 19:26 server0 drwxrwxr-x 2 nagios nagios 4096 Sep 5 19:29 server1 drwxrwxr-x 2 nagios nagios 4096 Sep 5 19:29 server2 drwxrwxr-x 2 nagios nagios 4096 Sep 5 19:30 server3 drwxrwxr-x 2 nagios nagios 4096 Sep 5 19:30 server5 drwxrwxr-x 2 nagios nagios 4096 Sep 5 19:30 server6 drwxrwxr-x 2 nagios nagios 4096 Sep 5 19:30 server7 drwxrwxr-x 2 nagios nagios 4096 Sep 5 19:29 server8 drwxrwxr-x 2 nagios nagios 4096 Sep 5 19:29 server9 nagios@server0:/usr/local/pnp4nagios$ ls -l var/perfdata/server1 -rw-rw-r-- 1 nagios nagios 1151496 Sep 12 10:29 CPU_Load.rrd -rw-rw-r-- 1 nagios nagios 13063 Sep 12 10:29 CPU_Load.xml -rw-rw-r-- 1 nagios nagios 1534768 Sep 12 10:29 CPU_Usage.rrd -rw-rw-r-- 1 nagios nagios 13818 Sep 12 10:29 CPU_Usage.xml -rw-rw-r-- 1 nagios nagios 768224 Sep 12 10:21 Disk_IO_Status.rrd -rw-rw-r-- 1 nagios nagios 12621 Sep 12 10:21 Disk_IO_Status.xml -rw-rw-r-- 1 nagios nagios 384952 Sep 12 10:25 Disk_Usage.rrd -rw-rw-r-- 1 nagios nagios 11753 Sep 12 10:25 Disk_Usage.xml -rw-rw-r-- 1 nagios nagios 768224 Sep 12 10:29 _HOST_.rrd -rw-rw-r-- 1 nagios nagios 12157 Sep 12 10:29 _HOST_.xml -rw-rw-r-- 1 nagios nagios 9200208 Aug 28 17:35 KVM_Status.rrd -rw-rw-r-- 1 nagios nagios 27735 Sep 6 17:50 KVM_Status.xml -rw-rw-r-- 1 nagios nagios 1918040 Sep 12 10:26 Memory_Usage.rrd -rw-rw-r-- 1 nagios nagios 14544 Sep 12 10:26 Memory_Usage.xml -rw-rw-r-- 1 nagios nagios 1534768 Sep 12 10:27 Network_Status.rrd -rw-rw-r-- 1 nagios nagios 13800 Sep 12 10:27 Network_Status.xml -rw-rw-r-- 1 nagios nagios 768224 Aug 8 11:39 PING.rrd -rw-rw-r-- 1 nagios nagios 12536 Aug 8 11:39 PING.xml -rw-rw-r-- 1 nagios nagios 1918040 Aug 10 14:01 Total_Processes_Number.rrd -rw-rw-r-- 1 nagios nagios 14427 Aug 10 14:01 Total_Processes_Number.xml -rw-rw-r-- 1 nagios nagios 1918040 Aug 10 14:02 Total_Processes.rrd -rw-rw-r-- 1 nagios nagios 14309 Aug 10 14:02 Total_Processes.xml -rw-rw-r-- 1 nagios nagios 1918040 Sep 12 10:29 Total_Procs.rrd -rw-rw-r-- 1 nagios nagios 14301 Sep 12 10:29 Total_Procs.xml 和定制 nagios plugin 类似,定制出图的 .php 也要遵循一定的规范: 1. templates must not create any output. 2. the two arrays $opt[] and $def[] have to be filled. If both arrays contain more than one set of data, graphs will be created for every set. Inside the templates, the data from the related XML files can be used. nagios 还有许多其它 plugin,常用需求都有,先去官方网站找,都是各种脚本,直接修改添加就行。 把写好的 plugin 放到被监测机器 libexec/ 下,etc/rservers/ 下 define objects。 libexec/check_linux_stats 是一个 C wrapper,调用perl 脚本 check_linux_stats.pl, 其中 check_kvm 要root 权限,其它可以直接用 nagios 用户执行 check_linux_stats.pl: $ sudo chown root check_linux_stats $ sudo chmod 4755 check_linux_stats 预装软件 server1 ~ server9: $ sudo apt-get install libsys-statistics-linux-perl liblist-moreutils-perl libxml-xpath-perl libxml-parser-perl libxml-simple-perl libproc-processtable-perl Openstack 已经安装 libvirt-bin,这里只需安装 libvirt dev: $ sudo apt-get install libvirt-dev Sys-Virt: $ tar zxvf Sys-Virt-0.9.8.tar.gz $ cd Sys-Virt-0.9.8/ $ perl Makefile.PL $ make $ sudo make install =============================================================================================== # vi /etc/sudoers globus ALL=(cngrid) NOPASSWD: /usr/local/globus-4.0.5/libexec/globus-gridmap-and-execute -g /etc/grid-security/grid-mapfile /usr/local/globus-4.0.5/libexec/globus-job-manager-script.pl * globus 以cngrid的身份执行后面的操作,man sudoers User_Alias Host_Alias(Runas_Alias) Cmnd_Alias sudo自身很安全没有问题,但想做到安全的配置很难: 1. 比如让用户可以sudo执行vim,在vim里运行:shell 出来的就是root shell,可以做任何事。 2. sudo一个目录下所有程序,不巧用户正好可以往这个目录下写东西,它可以copy一个shell到下面, 又可以做任何事了。 =============================================================================================== task_struct-->files_struct (file **fd) --> file ---> dentry ---> inode --> data file descriptors --> file description 0 1 2 3... file offset f_pos f_flags O_DIRECT O_SYNC O_AYNC open() creates a new file struct fork() the child copies the parent’s fd_array, share file struct dup() ls > a.txt the old and new fds refer to the same file struct ----------------------------------------------------------------------------------------------- screen create a new window: C-a c next/preivous window: C-a n/p delete a window C-a K detach screen from current terminal: C-a d now if you log out, the screen will be still there. when you log in back, just: screen -rd <pid> then you get exactly what you have when you last leave ----------------------------------------------------------------------------------------------- hard link VS symbolic link 每个partition就一个superblock,其他group中的sb都是group1中sb的备份。 sb和group discriptors 备份在如下group上: 1,3,5,7 的幂 hard link:不能跨partition,不能link目录. inode只在superblock中唯一编号,且每个partiton只有一个 superblock,所以hard link无法跨越多个partition, 而symbolic link是可以跨partition的。 hardlink可以用来做重要文件的备份: /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/networking/profiles/default/ifcfg-eth0 /etc/sysconfig/networking/devices/ifcfg-eth0 stat它们一下,发现inode number相同, links=3,因此它们是hardlink symbolic link,实现时要防止出现cycle: 假设hellodir存在,test.c不存在,ln -s hellodir test.c之后,ls -li发现inode 编号不同 32095 drwxrwxr-x 2 cngrid cngrid 4096 2008-04-23 23:01 hellodir 32098 lrwxrwxrwx 1 cngrid cngrid 8 2008-04-23 23:01 test.c -> hellodir test.c此时有自己的data block,其data block中存放hellodir.所以size是8, 如果有path,还要加上path的size. 此时cd test.c就能看见hellodir下的文件. ----------------------------------------------------------------------------------------------- file sharing task_struct-->files_struct (file **fd) --> file ---> dentry ---> inode --> data file descriptors --> file description 0 1 2 3... file offset f_pos f_flags O_DIRECT O_SYNC O_AYNC open() creates a new file struct fork() the child copies the parent’s fd_array, share file struct dup() ls > a.txt the old and new fds refer to the same file struct =============================================================================================== fedora 12 常用软件安装 fedora 12 Xorg 狂占cpu,而且没解决办法。不如 fedora 8,只是 fedora 8 没有官方yum源了,只好装了 1. # vi /etc/sudoers 把普通用户加入 2. NetworkManager 有bug,有它启动后不能自动上网,卸掉 $ sudo yum remove NetworkManager -y 3. System->Preferences->Personal->Input Method $ sudo ntsysv 取消某些daemon开机启动 root vi 文件无颜色 $ sudo vi /etc/bashrc alias vi='vim' cp mv 覆盖已有文件不提示 $ vi ~/.bashrc alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' $ source ~/.bashrc $ sudo vi /etc/selinux/config SELINUX=disabled $ sudo service network restart 4. 加yum源。 如果版本很新,直接安装最新的源: $ sudo rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm $ sudo rpm -ivh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm fedora 12 已经不再更新源了,去下面两个目录找对应版本的 rpm 装上: http://download1.rpmfusion.org/free/fedora/ http://download1.rpmfusion.org/nonfree/fedora/ $ sudo rpm -ivh http://download1.rpmfusion.org/free/fedora/updates/12/i386/rpmfusion-free-release-12-3.noarch.rpm $ sudo rpm -ivh http://download1.rpmfusion.org/nonfree/fedora/updates/12/i386/rpmfusion-nonfree-release-12-3.noarch.rpm $ sudo yum install gnochm bash-completion bchunk zhcon convmv xmms xmms-mp3 xmms-skins xmms-flac mac lame iftop stardict gparted tsclient nmap iptraf wget shntool cuetools smplayer mencoder ffmpeg pcmanx-gtk2 thunderbird pidgin wireshark-gnome screen mkvtoolnix gpac subtitleeditor 5. pcmanx-gtk2: View->Font:AR PL UMing CN,Edit-> Preference-> Site Settings-> Site Encoding:gbk $ vi ~/.vimrc set fileencodings=utf-8,gbk,gb2312,gb18030,big5 gedit乱码: 打开一个.txt文件 --> 关掉文件,保留gedit --> open --> Character Coding alt+ctrl+F6-> $ zhcon --utf8 && vi Chinesebook xmms乱码未解决,fedora 8的方法不行了,但可以听。桌面底下把鼠标放上去能正常显示中文,比如: XMMS - 283. 程琳 - 风雨兼程.ape 播放列表也有行号,所以可以 $ ls ape|nl|less 来定位听的歌。相当于把歌名加密了:) ctrl + p Input Plugins MPEG Layer 1/2/3 Placeholder Plugin [librh_mp3.so](disabled) Output Plugin ALSA 1.2.10 output plugin [libALSA.so] ape: $ sudo rpm -ivh xmms-in-mac-0.2.1-alt2.i586.rpm 注意: evolution不能全部删除,否则就进不去gnome了: 应该 $ sudo yum remove evolution 不能 yum remove evolution* 6. Adobereader, Skype, Xvidcap mplayer rmvb: $ sudo tar jxvf all-20071007.tar.bz2 -C /usr/lib/codecs/ $ sudo rpm -ivh pcmanx-gtk2-0.3.8-5.fc11.i586.rpm $ wget 213.146.168.246/linux/skype-2.1.0.81-fc10.i586.rpm $ sudo rpm -ivh linux-fetion-1.3-1.fc13.src.rpm $ sudo chown -R cngrid.cngrid rpmbuild/ $ sudo rpmbuild -bb rpmbuild/SPECS/linux-fetion.spec $ sudo rpm -ivh rpmbuild/RPMS/linux-fetion-1.3-1.fc12.i686.rpm $ sudo rpm -ivh nerolinux-4.0.0.0-x86.rpm 刻录单个文件> 2GB时选UDF格式。启动刻录机,插入光盘后,nerolinux 找不到光驱: $ ll /dev|grep sg drwxr-xr-x 2 root root 80 2010-04-19 19:35 bsg crw-rw---- 1 root root 1, 11 2010-04-19 07:51 kmsg crw-rw---- 1 root disk 21, 0 2010-04-19 07:51 sg0 crw-rw---- 1 root cdrom 21, 1 2010-04-19 19:35 sg1 对应cdrom,给普通用户加上rw $ sudo chown 666 /dev/sg1 一个 4.0 的可用key: 9M1K-0098-P3HL-PK6P-T6UA-1E5X-E557-8X41 7. stardict EN-EN词典 http://reciteword.cosoft.org.cn/stardict-iso/stardict-dic/dict.org/ 下5个包: Webster's Revised Unabridged Dictionary (1913) Longman Dictionary of Contemporary English Oxford Advanced Learner's Dictionary Merrian Webster 10th dictionary stardict-collins5-2.4.2.tar.bz2 全部解压到/usr/share/stardict/dic/ 下 $ sudo tar jxvf stardict-dictd-web1913-2.4.2.tar.bz2 -C /usr/share/stardict/dic/ .... 8. mldonkey 多协议,包括BT和驴, sancho为gui $ tar jxvf mldonkey-3.0.5.tar.bz2 $ cd mldonkey-3.0.5/ && sudo ./configure && sudo make && sudo make install 到CSDN下sancho-0.9.4-59-linux-gtk.sh $ sudo sh sancho-0.9.4-59-linux-gtk.sh 释放到 /usr/local/ $ sudo ln -s /usr/local/sancho /usr/local/bin/sancho $ sudo chown -R cngrid.cngrid ~/.sancho 先 mlnet & ,再 sancho 设置sancho和mlnet关联 Preferences-> Networks添加enable_bittorrent, enable_kademlia, enable_overnet, enable_fileTP http://www.nodes-dat.com/ 下 nodes.dat -> console: kad_load /home/cngrid/nodes.dat 取消IP限制: $ rm -rf ~/.mldonkey/web_infos/level1.gz $ vi ~/.mldonkey/downloads.ini 搜 web_infos ,删除如下行: ("guarding.p2p", 96, "http://www.bluetack.co.uk/config/level1.gz"); 重启mldonkey。 导入server列表: servers server.met 与 Firefox 关联: mldonkey tar包里就带着相关工具,在 /usr/local/mldonkey-3.0.5/distrib/ed2k_mozilla/ 下 有个 mldonkey_protocol_handler-2.5.xpi,把它拖入 Firefox 中装上就行了。 增加一个share directory: /home 分区没空间了,/ 分区还有15GB 空间,把一个6GB 的大文件放里面共享给别人: $ sudo mkdir /mldonkeyshare $ vi .mldonkey/downloads.ini 搜 share 找到相应位置: shared_directories = [ { dirname = shared strategy = all_files priority = 0 }; { dirname = "incoming/files" strategy = incoming_files priority = 0 }; { dirname = "incoming/directories" strategy = incoming_directories priority = 0 };] 可见,默认共享目录是 .mldonkey/share/ 先关闭 mldonkey,按照样例在 [] 里面增加一项。直接添加不行: { dirname = "/mldonkeyshare" strategy = all_files priority = 0 }; 先在 .mldonkey/incoming/ 里做个 symlink 就行了: $ cd ~/.mldonkey/incoming/ $ ln -s /mldonkeyshare share $ vi ~/.mldonkey/download.ini 在[]里添加一项: { dirname = "incoming/share" strategy = all_files priority = 0 }; $ sudo ln -s /mnt/win/movie/mule/ .mldonkey/incoming/files/winshare 这下有什么好东西放里就行了。 共享一个文件,把 ed2k 地址给别人: 把要共享的文件放入 shared dir,然后点 Console,在下面输入 reshare 回车,计算Hash需要1分钟, 之后点 Shares 就会发现文件正被共享,右击文件 -> copy to clipboard --> ed2k://-> clipboard ,然后右键 -> paste 就行了。也可以按 shift 多选,然后 clipboard,多个地址一下 就都出来了。 mldonkey 默认每半小时更新一次 share dir 里的内容。mldonkey 启动时会读取配置文件 download.ini, 因此重启mldonkey也能更新 share dir 里的内容。 用 mldonkey 也可以下 ftp http ssh,都是通过 File --> Input link,比如输入 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.2.tar.bz2 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.2.tar.bz2 磁盘空间满,mldonkey自动 disconnection。删除文件有空间了,sancho 启动时和mlnet关联不上了: $ mlnet & 注意此时shell会有提示说有log 进入.mldonkey/mlnet.log $ sancho 就会关联不上,看看 log $ less .mldonkey/mlnet.log ... 2011/02/13 14:30:58 [cInt] WARNING: Directory temp is full, MLDonkey queues all downloads 2011/02/13 14:30:58 [cInt] WARNING: Directory /home/cngrid/.mldonkey is full, MLDonkey shuts down 2011/02/13 14:30:58 Exception Sys_error("No space left on device") in Network.iter for Donkey 2011/02/13 14:30:58 [cCO] Options correctly saved 2011/02/13 14:38:58 [cO] Started logging... File files.ini.tmp exists An error may have occurred during previous configuration save. Please, check your configurations files, and rename/remove this file before restarting 2011/02/13 14:39:03 [cO] Started logging... File files.ini.tmp exists An error may have occurred during previous configuration save. Please, check your configurations files, and rename/remove this file before restarting ... 按照提示,$ rm -rf *.tmp 此时启动sancho就正常了。 9. Dropbox i386 过w下 nautilus-dropbox-0.6.8-1.fedora.i386.rpm; 下 http://www.getdropbox.com/download?plat=lnx.x86 并解压至 ~; $ sudo rpm -ivh nautilus-dropbox-0.6.8-1.fedora.i386.rpm 如果是 x86_64 就下 http://www.getdropbox.com/download?plat=lnx.x86_64 并解压至 ~ 。 ----------------------------------------------------------------------------------------------- WAN用ftp合适 client用lftp: man lftp $ sudo vi /etc/lftp.conf 末尾: set ftp:charset “gbk” set file:charset “utf-8″ ls -lR . |grep Nemo get -c a.txt put -c a.txt mget -c *.srt mput -c *.mpg mirror -c book/ mirror -Rc test/ !ls 显示本地内容 lftp -c "mirror -c http://rpm.livna.org/fedora/8/i386/" lftp -c "get -c http://download.fedoraproject.org/iso/Fedora-11-i386-DVD.iso" $ vi lftp.sh #!/bin/bash lftp grid:hpcgrid@10.0.1.125 lftp ftp.trueice.net lftp upload:upload@ftp.trueice.net:8021 lftp media:dcecoa_ftp@59.66.188.92:10021 lftp mse:kexie@incoming.blueink.org:40021 下载指定html链接的内容: wget -r -l 1 http://staff.ustc.edu.cn/~xlanchen/EmbeddedOS2009Fall/EmbeddedOS2009Fall.html 备份整个网站: wget --recursive --no-clobber --page-requisites --convert-links --restrict-file-names=windows --no-parent http://www.tsinghua.edu.cn/publish/eea/ server用pure-ftp。vsftp打上中文补丁后,如果单个文件大于2GB就不能正常传输。 目标:禁止匿名登录,用虚拟用户grid能上传下载删除修改文件。 $ sudo yum install pure-ftpd $ sudo vi /etc/pure-ftpd/pure-ftpd.conf 禁掉匿名访问的选项,同时保证打开以下2条: PureDB /etc/pure-ftpd/pureftpd.pdb PAMAuthentication yes 末尾添加两行: FileSystemCharset utf-8 ClientCharset gbk 系统已经有普通用户fit,利用fit建立虚拟用户grid: $ sudo pure-pw useradd grid -u fit -g fit -d /var/ftp -m $ sudo chown -R fit.fit /var/ftp $ sudo service pure-ftpd start $ sudo ntsysv 开机自动启动 $ sudo pure-pw show grid 看用户信息 无法登录: PureDB选项没打开,认证过不去。 把ftp作为用户,uid=14,而配置文件却有 MinUID 500 选项,自然无法登录了。 无法下载:要保证 PAMAuthentication yes 无法上传:要保证共享目录的最后一级有w权限。 要么chown -R fit.fit /var/ftp; 要么chmod 777 /var/ftp: $ ls -l |grep ftp drwxr-xr-x 2 fit fit 4096 2010-03-05 23:29 ftp $ ls -l |grep ftp drwxrwxrwx 2 root root 4096 2010-03-05 23:29 ftp pure-ftp的pureftpd.log不能显示中文,/var/log/messages却可以:) ----------------------------------------------------------------------------------------------- Samba 用samba client访问mount上win机器上的share dir后很方便,默认对中文支持良好。 但别在linux上配置samba server,太不稳定,尝过苦头,想共享文件给别人推荐用ftp。 man smb.conf linux本机是10.0.1.4。windows是10.0.1.15,D:\共享 是个share dir 目标:在Linux本机可以直接看win上共享目录中的电影,也可以直接用linux传统cp命令copy文件。 Linux -> Win: $ sudo mkdir -p /mnt/win $ smbclient -L 10.0.1.15 -U administrator 看对方有哪些共享目录 $ sudo mount -t cifs -o user=administrator,password=hpcgridfit //10.0.1.15/共享 /mnt/win/ $ sudo vi /etc/rc.d/rc.local 把上面mount命令写进去,开机自动mount。 Linux下mount Windows的NTFS有时会有不同步的bug: 到Windows下编辑a.txt,回到Linux下访问这个a.txt, 有时发现还是以前的内容。先 umount 然后重新mount一次就好了,cache 管理方式的一个缺陷,文件太小不 真正往硬盘写。mount、umount 都会更新 /etc/mtab、/proc/mounts,/proc/mounts 信息更详细。 =============================================================================================== man bash info grep 注意 && 和 || 优先级相同 $! 写个脚本让后台运行,想取得这个bash的pid,但系统有很多bash,这时用$! 代表刚刚这个bash启动的后 台作业的pid 用local声明局部变量,否则就认为是全局的 引用str时,由于str内可能有',所以要用 "${str}",不用'${str}' for ((i=121; i<=128; i++)) do hostname="cn${i}" done 求pattern在string中第一次出现的位置: 从string末尾开始,把最长匹配 pattern* 的delete,剩下串的长度就是firstpos firstpos=${a%%${b}*} lastpos=${a%{b}*} 数字计算多用$((i+1)) 少用expr int变量相加:total=$(($total+$score)) total=$(($total + 1)) _fgrep() { s=$1 f=$2 while read line; do if strstr "$line" "$s"; then echo $line return 0 fi done < $f return 1 } 从文件输入 sh test.sh < /root/a.txt ------------------------------------------ sed & awk ------------------------------------------- substitute: &表示被替换的内容 s/love/**&**/ 替换 love 为 **love** sed 's/cngrid/wzh/g' passwd 全局替换 sed 's#peter#wzh#g' passwd 紧跟s的都被认为是分隔符,#代替了默认的/,表示把所有peter替换成wzh delete: sed '2,5d' passwd delete第2,第5行 sed '/ed2k/'d passwd delete含ed2k的行 sed -e '1,5d' -e 's/cngrid/wzh/' passwd -e允许在同一行里执行多条命令。命令执行顺序对结果有影响 print: sed -n '5,10p' passwd print5-10行, -n和p搭配只显示匹配项 sed -n '5,/^peter/p' passwd ,表示范围.print第5行到第一个包含以peter开头的行之间的所有行 sed -n '/cngrid/,/wzh/p' passwd 所有在模板cngrid和wzh所确定的范围内的行都被print sed '/cngrid/,/wzh/s/$/sed cngrid/' passwd 对于含有cngrid和wzh之间的行,每行末尾用sed cngrid替换 append,insert:一后一前 sed '2a drink tea' passwd 第2行下面append一行: drink tea sed '2,5a drink tea' passwd 第2-第5行每行下面都append一行: drink tea sed '2,5c int main' a.cpp 将第2-5行替换成一行: int main sed '/^wzh/a hello world' passwd 将wzh开头的行后面append上hello world read write: sed '/cngrid/r file' passwd passwd中匹配cngrid的行,在这些匹配行后面附上file的内容 sed -n '/cngrid/w file' passwd passwd中所有包含cngrid的行都被写入file里 next: sed '/cngrid/{n;s/aa/bb/;}' passwd 如果cngrid被匹配,则移动到匹配行的下一行,替换这一行 的aa为bb,并print该行,然后继续 y: sed '1,10y/nologin/NOLOGIN/' passwd 把1--10行所有nologin变为NOLOGIN hH gG: sed -e '/peter/h' -e '$G' passwd 匹配peter的行被找到后将被存入pattern space,h将其copy到hold space内;第二条语句的意思是当到达 最后一行后,G取出hold space中的行放到pattern space中,且append至pattern space的末尾。 简单说,任何包含peter的行都被复制并追加到该文件的末尾 数字后面直接加acdprwhHgG这些东西,否则就先/再acdprwhHgG 将127.0.0.1替换成127_0_0_1 #!/bin/bash ip=127.0.0.1 destip=$( echo ${ip} | sed "s/\./\_/g" ) echo ${destip} ----------------------------------------------------------------------------------------------- awk使用经验: 确保整个awk命令用' '括起来; 确保命令内所有" "成对出现; 确保用{}括起action语句,用()括起control语句 man awk中的record就是指一行 /pattern/{action} 允许pattern,action省略一个.如果pattern被省略,则对于输入文件的每一行,action都会被执行; 如果action被省略,则执行{print},即print所有符合pattern的行, $ cat f India's Broken People (21 September 2007).avi 370 MB The Killing of Kashmir (2004).avi 354 MB Kosovo - State of Denial (25 May 2007).avi 350 MB Guns, Votes & Money (14 September 2007).avi 350 MB Iraq - On the Front Line 01-09-06.mpg 344 MB Honduras.War On Children (12 October 2007).avi 325 MB Children Of The Lost Generation (28 September 2007).avi 325 MB 去掉最后两列: $ awk 'BEGIN {ORS = ""} {for (i = 1; i < NF-1; i++) {print $i " "}; print "\n"}' f > out awk '/cngrid/' passwd print含cngrid的行 awk -F : '/wzh/{print $3}' passwd 找出含wzh的行然后print第3个字段,fs指定为: history | awk '{print $2}'|sort|uniq -c|sort -rn|head -n 10 awk -F : '/cngrid/{print $3} /wzh/{print $7}' passwd 找出含cngrid,wzh的行然后分别print第3,7个字段 last | awk '{print $1 "\t" $3}' print第1和第3列, awk -F : '$1 != "cngrid" {print "The entry for", $1, "is not Tim.", $2}' passwd 找出第1个字段不等于cngrid的行,print其中的第1和第2个字段 ifconfig eth0 | grep -i mask | awk '{print $2}' | awk -F : '{print $2}' ifconfig | grep -i mask | awk '{print $2}' | awk -F : '{print $2}' awk -F : '$3 > 200' passwd 找出第3个字段大于200的行 awk -F : '$1 ~ /wzh/' passwd print第一个字段含wzh的那些行 BEGIN用来指明awk开始处理一个文件之前先执行一些action.BEGIN经常用来初始化数值,设置参数等. END用来在文件处理完成后执行一些指令,一般用作总结或注释. ls -l | awk '{x += $5} END {print "total bytes:" x}' 与bash scripts不同,在awk中,变量可以直接用,不必加$符号. awk处理文件过程: 1.读入一行,将第一行信息填入$0,$1,$2..中 2.根据condition的限制,判断是否要进行后面的action 3.做完所有的condition和action 4.若还有后续的行,则重复1-3.直到处理完毕 awk以行为一次处理单位,以字段为最小的处理单位. $ last | awk '{print $1 "\tlines:" NR "\tcolumns:" NF}' root lines:1 columns:10 root lines:2 columns:10 reboot lines:3 columns:9 root lines:3 columns:10 root lines:4 columns:10 reboot lines:5 columns:9 awk '{nlines++} END {print nlines}' passwd 文件有多少行 awk '{print NR, $0}' passwd print每行内容,并在每行的前面加上行号 ============================================ vim ============================================== $ vimtutor 本行搜索: fx 重复删word: dw . 跳到第8行: 8G 设定行号 :set nu :set nonu z Enter z- 将当前行置为屏幕第一最后行 H M L 光标到本屏首行 中间 最后 /string 向下搜 ?string 向上搜 n N 连续搜 u 取消操作 ctrl+r 反取消 :e 就u不回去了 ZZ 保存退出 一行太长行间移动光标,前面加g: gj gk 清空整个文件: gg -> dG copy到行首行尾: ygg yG 0 $ 行首行尾 ^0 行首第一个非空字符 90i= 插入========== 不退出当前文件,暂时看另一个文档 :e /home/cngrid/unp.h ctrl+^ 来回切换 cursor放到要搜的中文上 -> / -> ctrl+r ctrl+w 就不用敲中文了 ctrl+r ctrl+a 搜的更长 ctrl + i ctrl + o 回溯 copy 多行: v -> j -> w d :100,146 w d 将第2行到第9行copy到第100行后 :2,9 co 100 将第2行到第9行move到第100行后 :2,9 m 100 copy 多列: ctrl+v ` ` 跳到上次光标停留的地方 恢复由于断电正在编辑的文件:vi -r *** :r !date 将date命令内容加进来 :r !command help 时连续TAB可以补齐, ctrl+d 列出所有匹配 :h ctrl-f :h :e :h ctrl TAB.... :help 查细节,进入退出subsection ctrl+] ctrl+t ....... WHAT PREPEND EXAMPLE ~ Normal mode command (nothing) :help ZZ Visual mode command v_ :help v_u Insert mode command i_ :help i_<Esc> Command-line command : :help :quit Command-line editing c_ :help c_<Del> Vim command argument - :help -r Option ' :help 'textwidth' ..... ------------------------------------ insert mode ------------------------------------------- ctrl+y ctrl+e 按住别动 复制光标上行 下行的内容 ctrl+h 光标向前 ctrl+j 换行 ctrl x f 插入当前目录下的文件名 水平多窗 vi server.cpp :split client.cpp --> ctrl+w 切换 垂直多窗 :30 vsplit server.cpp 自动缩进,中文编码,代码折叠 vi ~/.vimrc set autoindent set shiftwidth=4 set cindent set fileencodings=utf-8,gb2312,gb18030,gbk,big5 set foldmethod=indent set foldlevel=100 J 连接两行 za 打开关闭当前折叠 zR zM 打开关闭所有折叠 copy整个函数: 先折叠再copy 或者 yv][ ctrl+n 自动补齐一个word ctrl+p 回到匹配前 ctrl+x ctrl+l 自动补line * # 正向反向搜variable的定义处 ~ 大小写切换 gugg guG 或者 ctr+v选中--> [u|U] 光标移动到库函数上,按“K”直接man, [I 看光标所在字符的几处定义 [<TAB> ` ` 跳到变量第一次出现的位置,回来 :grep -r "addr {" /usr/include :cope 打开quickfix窗口挨个看,ctrl+w 窗口切换 ^ 跳到本行的第一个非空字符 - + 跳到上一行下一行第一个非空字符 gd 看该word定义 ga : display hex,ascii value of char under cursor n>> n<< 以下n行缩进 ctrl+e ctrl+y 光标不动,屏幕上下滚 ctrl+g 本行所在百分比 xp 交换两个字符位置 ddp交换两行 [{ ]} 跳到本循环{ }处 [[ ]] 下一个函数的{ }处 快速注释多行: ctrl+v选中第1列--> I --> # --> ESC copy文件source中 5行~10行 的内容到文件dest中: 5G -> mk 10G -> y'k -> :e dest -> p recording,输入 1 2 3 . . . 1 -> ESC -> qq -> yyp -> ctrl+a -> q -> 100@q Ctags $ sudo ctags -R $ vi -t task_struct ,ctrl+]跳入 ctrl+t跳回; 如果已经在vi里了就:tag task_struct void *produce(void *arg); 把光标放在produce上,ctrl+]就跳到那里了, ctrl+t又跳回去. 在/usr/include/ /usr/local/src/linux-2.6.28/ 里面 grep, find配合 vi -t keyword 查找: 看宏展开: $ g++ -E -o a a.cpp && vi a 搜main 看依赖关系$ g++ -MM client.cpp server.cpp unp.cpp valgrind检测malloc/free: # g++ -g -o a a.cpp && valgrind ./a strace info cpp make objdump -d formatdb size program.out pmap pid od -c /proc/$(pidof vim)/cmdline ps -o pid,ppid,stat,cmd,wchan nm /usr/lib/purple-2/libfetion.so strip a Discard symbols from object files ctrl+h ctrl+p ctrl+n =============================================================================================== gdb 常用, 细节进去后 help all l: list source code n s : 不进入函数 进入函数 finish : 跳出函数 b serverprocess : 跳到serverprocess入口处 b *0x80483c3: set breakpoint at address 0x80483c3 b 705 --> c 在705行设置断点并跳到705行处 disable enable d 禁用 启用 删除 断点 disable 2 禁用2号断点 d 705: 删除705行处的断点 d : 删除所有断点 info break 看断点设置情况 跳出循环: until 106 跳到比当前大的行那里 或者 b 5--> r ---> b 20 --> d 5 --> c bt stack函数调用关系 静态数组直接 p arrayname 动态数组 p *arrayname@len watch i: debug时,i值如果变化会有显示 info watch d watch 2 set i=8 debug时,修改源代码也ok p *(int *) 0xbffff890 print integer at address 0xbffff890 stepi: execute one instruction stepi 4: execute four instructions signal SIGINT 发送SIGINT, 不用ctrl+c x/2w 0xbffff890 examine two(4 byte) words starting at address 0xbffff890 在i==(index-1)时让程序结束: 23 for (int i = 0; i > index; i++) 24 { 25 int m = 8; 26 .... 27 } (gdb) b 24 if i==(index-1) (gdb) c make 不退出 gdb 就可以重新产生可执行文件. shell 不离开 gdb 就执行 shell 命令. 先允许Linux生成core文件: vi /etc/profile 末尾加上 ulimit -c 1000000 $ gdb client core.*** (gdb) where
Wednesday, March 31, 2010
linuxer
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment