2008年10月27日星期一

Linux TIPS

---------------------------------------------------------------------------------------------------------------------------
获取user 信息的命令
 
 groups, id 显示当前所属group;
who, users, w 显示有哪些user 已登录;
last [username] 显示user 的最后登录时间;
last -1 reboot 显示最后重启记录;
finger [username] 显示某user 信息。
 
---------------------------------------------------------------------------------------------------------------------------
解决sar一个问题
 
 在linux下输入sar后,显示:
Cannot open /var/log/sa/sa28: No such file or directory
 
解决方法:
1. /usr/lib/sa/sa1 1 1
2. /usr/lib/sa/sa2 -A
3. 在系统的crontab里看看上面2条sa的命令是否用root执行
或者: vi /etc/cron.d/sysstat
 
----------------------------------------------------------------------------------------------------------------------------
解决Fedora4下vsftpd无法上下传文件
setsebool -P ftpd_disable_trans 1
----------------------------------------------------------------------------------------------------------------------------
创建LVM
1、首先,我们要先创建新磁盘分区
----------------------------------
#fdisk /dev/had
----------------------------------
创建2个500MB分区(hda10,hda11),然后在fdisk命令下输入t,
选择刚创建好的分区,输入8e,将刚创建好的2个分区转换为8e格式。
输入w保存退出
 
2、激活刚创建好的分区
----------------------------------
#partprobe
----------------------------------
 
3、创建成pv格式
----------------------------------
#pvcreate /dev/had{10,11}
#pvdisplay   查看pv
----------------------------------
 
4、将分区加载到vg卷组,vg0是卷组名称,vg0卷组总空间是1000MB
----------------------------------
#vgcreate vg0 /dev/had{10,11}
#vgdisplay   查看vg卷组
----------------------------------
 
5、创建lv分区800M是分区大小,lv0是lv分区名称,vg0是加载到卷组名称,
此时创建了一个800MB的lvm分区,vg0卷组还剩余200MB的空间
----------------------------------
#lvcreate –L 800M –nlv0 vg0
#lvdisplay   查看lv分区
----------------------------------
 
6、将lv分区格式化成ext3格式
----------------------------------
#mkfs.ext3 /dev/vg0/lv0
----------------------------------
 
7、将LVM分区mount到目录上,并修改fstab表
----------------------------------
#mount /dev/vg0/lv0 /lvm
#vi /etc/fstab
----------------------------------
 
8、扩展(lv)刚才我们创建了800mb的lvm分区,当要对分区进行扩展应
如下操作:
----------------------------------
#lvextend –L+100M /dev/vg0/lv0
#ext2online /dev/vg0/lv0    动态扩展
----------------------------------
 
此时,我们已经向lv0分区增加了100MB空间,vg0卷组还剩余100MB空间,
如果当我们认为空间还是不足,需要扩充,而vg0卷组的空间也不足时,我们
就需要对vg0卷组进行扩展,然后再对lv分区进行扩展
 
1、创建1个500MB分区(hda12),然后在fdisk命令下输入t,选择刚创建
好的分区,输入8e,将刚创建好的分区转换为8e格式。输入w保存退出
----------------------------------
#fdisk /dev/had
----------------------------------
 
2、激活刚创建好的分区
----------------------------------
#partprobe
----------------------------------
 
3、创建成pv格式
----------------------------------
#pvcreate /dev/had12
----------------------------------
 
4、将hda12添加到vg0卷组,此时vg0卷组的总空间大小为1500MB
----------------------------------
#vgextend vg0 /dev/hda12
----------------------------------
 
5、对lv0分区进行动态扩展,增加500M空间
----------------------------------
#lvextend –L+500M /dev/vg0/lv0
#ext2online /dev/vg0/lv0
----------------------------------
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 
自动弹出磁带
mt -f /dev/st0 offline
 
清除磁带上的所有资料
mt -f /dev/st0 erase
 
查看磁带机状态
mt -f /dev/st0 status
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 
发表主题: 我想让一个软件在系统启动的时候自动执行的问题!   
 

~/.bashrc
 
写一个脚本放在/etc/rc.d/rc*下。以S开头
写在/etc/rc.local中,最好是写绝对路径
 
[root@redhat71 root]# more /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
 
------------------------------------------------------------------------------------------------------------------------------------------------------------
删除 040210-040229的文件
 
rm -rf 04021[0-9] 04022[0-9]
------------------------------------------------------------------------------------------------------------------------------------------------------------
 
发表主题: 怎么看unix\linux系统中都开了哪些服务呢?
 
运行了哪些服务?
怎么停止、启动这些服务?
 
一种方法是通过netsysv这个命令看看系统中开了那些服务
二种方法是用netstat -a可以看看开了那一些网络服务
 

cat /etc/inetd.conf
这个文件里前面没有#好的都是开启的服务
 

#nmap -sS -P0 x.x.x.x可以查看开了那些端口和服务。
 

servicename start
servicename stop
 
--------------------------------------------------------------------------------
 
怎么编写统计系统信息脚本   
 
现在需要每个月对cpu的使用率做一个统计,不知哪位有很好的方案?脚本怎么写?cpu使用率可以统计每天的高峰时段,需要计算出这个月的平均使用率。
 
 
这样你看咋样
每分钟取一次cpu利用律.
aaa=`sar 1 1|tail -1|awk '{print 100-$5}',`
同时去时间
bbb=`date +%H%M`
一起防到文件中
一个月后可以统计每分钟的平均使用率,及高峰
 
while [ 1 ]
do
aaa=`sar 1 1|tail -1|awk '{print 100-$5}',`
bbb=`date +%H%M`
echo "$bbb $aaa" >> test.txt
sleep 60
done
 
 
 
代码:
awk '{a[$1]+=$2;b[$1]++}END{for(i in a){printf("%s %s %d\n",i,a[i],a[i]/b[i])}}' test.txt > 1.txt
 
就是把test.txt文件第一个域(时间)相同的第二个域取count和sum,再sum/count就系均值.
 
--------------------------------------------------------------------------------
 
如何统计字符串中某字符的个数   
 
echo "aabcd"
 
如何统计此字符串中"a"字符的个数??
 
 
$ echo -n "aabbcdaf" | sed 's/[^a]*//g'|wc -c
 

---------------------------------------------------------------------------------
 
删除空行
sed '/^[[:space:]]*$/d' file_name
 

---------------------------------------------------------------------------------
 
mount windows下的硬盘
mount -t smbfs -o username=administrator,password=gzimg-admin //192.168.104.181/d$ /mnt/win
 
RHEL 5
mount -t cifs -o username=administrator,password=gzimg-admin //192.168.104.181/d$ /mnt/win
 

开机后自动mount
//192.168.108.2/d$ /mnt/ray smbfs defaults,iocharset=cp936,username=administrator,password=it 0 0
 
------------------------------------
cp显示进度
#cp -r -v dir1 dir2
#cp -a -d -v dir1 dir2
 

------------------------------------
 
del space in file
 
sed 's/[ ]//g' file
 
--------------------------------------------------------------------
发表主题: 如何删除对应的行   
 
文件:aa内容如下:
1234
2234
4567
5234
88999887
要求:把所有含有'234'的行全部删除后的结果。
结果:
4567
88999887
 
 
sed '/234/d' aa
 
or
 
grep -v 234
 
------------------------------------------------------
 
代码:
 
df -h|tail -2|awk '{printf "\n[硬盘总容量%s] [已用空间%s] [剩余空间%s] [使用率%s] [硬盘位置%s]\n",$2,$3,$4,$5,$6}'|sed 's:/.*/\(.*]\)$:\1:g'
 
df -h|tail -8|awk '{printf "\n[Size:%s] [Used:%s] [Available:%s] [Use:%s] [Mounted on:%s]\n",$2,$3,$4,$5,$6}'|sed 's:/.*/\(.*]\)$:\1:g'
 
 

最终效果
 
代码:
 
[硬盘总容量73G] [已用空间61G] [剩余空间9.3G] [使用率87%] [硬盘位置80g]
 
[硬盘总容量73G] [已用空间20G] [剩余空间50G] [使用率28%] [硬盘位置80g_2]
 
 

------------------------------------------------------------
 

从文件读入信的内容:
cat a .txt | mail -s "subject" mail@address
写入信的内容:
echo "abcdefg" | mail -s "xxx" xxx@xxx.xxx
附件:
uuencode a.file a.file | mail -s "subject" mail@address
 
echo "body" | mutt -s "subject" -a attached.file mail@address
 

--------------------------------------------------------------
 

当然可以,在串口接个MODEM
 
然后,得到告警指示后
echo "atdt13523323223\n" > /dev/ttyS0
 
/dev/ttyS0为连接MODEM的串口
13523323223为你的手机号码
应该可以
 
--------------------------------------------------------------
 
主题内容为serch.sh, 主题是title, 附件是serch.sh, 收件人最后
 
cat serch.sh | mutt -s "title" -a serch.sh rayli_gz@ctihk.com
 
--------------------------------------------------------------
在linux下发信息到windows
 
echo hello | smbclient -M 192.168.108.4
 
--------------------------------------------------------------
找出60天前的文件夹
 
find ./ -type d -mtime +60
 
--------------------------------------------------------------
 
屏蔽错误消息
command &>/dev/null
 
--------------------------------------------------------------
ssh不用密码登陆远程机器
 
ssh-keygen -d
 
scp id_dsa.pub 192.168.104.67:/root/.ssh/authorized_keys2
 
--------------------------------------------------------------
不想输出错误信息
 
[root@dreamer shell]# ls aaaa
ls: aaaa: No such file or directory
[root@dreamer shell]# ls aaaa >/dev/null 2>&1
 
--------------------------------------------------------------
遇到同名的文件不加提示就覆盖
 
alias cp=cp
然后cp -f就ok了
 
你可以用alias cp='cp'来取消-i参数,如果想永久改变,那么修改~/.bashrc,把alias cp='cp -i'删掉。
 
--------------------------------------------------------------
列出最新的文件
 
ls -t *|sed -n 1p
 
--------------------------------------------------------------
 
读取第一行数据
 
sed -n 1p a.txt
--------------------------------------------------------------
 
man 有乱码
 
发现用export LANG=C可以暂时解决这个问题
 
--------------------------------------------------------------
 
开机自动运行程序,在以下文件中添加路径即可
 
/etc/rc.d/rc.loacal
--------------------------------------------------------------
 
使pc喇叭发响的语句
 
tput bel 应该通用
 
-------------------------------------------------------------
 
实时查看内存,硬盘,用户等等
watch free/df/w
 
---------------------------------------------------------------
调试sh文件的命令
sh -xv alert
看看错误具体出自哪里?
 
---------------------------------------------------------------
 
解开*.cpio.gz或*.cgz用:
 
gzip -dc file.cgz | cpio -div
 
---------------------------------------------------------------
MRTG
 
indexmaker mrtg.cfg > /var/www/html/mrtg/index.html
 
----------------------------------------------------------------
 
如何删除040401-040415这段连续的文件价?
rm -rf 04040[1-9] 04041[0-5]
 
------------------------------------------------------------------
 
压缩
tar czvf jlly.tar.gz jlly
 
解压的时候:
tar xzvf jlly.tar.gz
 
解压
tar jxvf ***.bz2
 
------------------------------------------------------------------
 

hostname;df | grep -w '^\/dev\/hda5' | awk '{if($5+0>=80) print $0}'
 

---------------------------------------------------------------------
 
[ "$(date +%R)" = "$(ls -lt *|sed -n 1p |awk '{print $8}')" ] && echo Match || echo no match
 
----------------------------------------------------------------------
 
 屏蔽:
command 2>/dev/null
 
捕捉:
command 2>/tmp/err.out
 
------------------------------------------------------------------------
在linux中mount其它linux分区
1.)  vi /etc/exports
    在被mount机器中增加对方:  /nhome/tmp/ 192.168.104.188(ro,sync)
 
2.)重启
 exportfs -r
/etc/rc.d/init.d/nfs restart
 
3.)
mount -a server:/tmp /mnt
 
-------------------------------------------------------------------------
使用hdparm -t -T /dev/hdX就可以测试硬盘的buffer-cache reads和
buffered disk reads两个数据,可以用来当作硬盘性能的参考。
同时使用hdparm -c3 /dev/hdaX还能设置硬盘以32bit传输,以加快数据传输的速度。
-------------------------------------------------------------------------
 
1.安装一个包
# rpm -ivh
 
2.升级一个包
# rpm -Uvh
 
3.移走一个包
# rpm -e
 
4.安装参数
--force 即使覆盖属于其它包的文件也强迫安装
--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
 
5.查询一个包是否被安装
# rpm -q < rpm package name>
 
6.得到被安装的包的信息
# rpm -qi < rpm package name>
 
7.列出该包中有哪些文件
# rpm -ql < rpm package name>
 
8.列出服务器上的一个文件属于哪一个RPM包
#rpm -qf
 
9.可综合好几个参数一起用
# rpm -qil < rpm package name>
 
10.列出所有被安装的rpm package
# rpm -qa
 
11.列出一个未被安装进系统的RPM包文件中包含有哪些文件?
# rpm -qilp < rpm package name>
 
----------------------------------------------------------------------------------------------------------
 
NFS 最初是由 Sun Microsytem 公司於 1984 年所开发出来的,最主要的功能就是让网路上的 UNIX 电脑可以共享目录及档案。我们可以将远端所分享出来的档案系统,挂载 (mount) 在本地端的系统上,然後就可以很方便的使用远端的档案,而操作起来就像在本地操作一样,不会感到有甚麽不同。而使用 NFS 也有相当多的好处,例如档案可以集中管理,节省磁碟空间......等等。
 
安装 NFS:
 
大部份的 Linux Distribution 安装时都会将 NFS 安装上去,在 OpenLinux 上,NFS 由两个 RPM 套件所组成,分别为 nfs 及 nfs-server,nfs 主要包括一些 client 端所需要的程式,而 nfs-server 主要是 NFS Server 的一些 daemon 程式。
 
设定 NFS:
 
设定档:/etc/exports
设定档格式:档案系统 [主机][选项]
例:
 
/ charlie(ro) john(rw,no_root_squash)
/tmp pc*.col.com.tw(rw) 172.29.0.0/255.255.0.0(ro)
/pub (ro)
/pub/private (noaccess)
 
选项说明:
 
ro read only
rw read write
no_root_squash 信任客户端,对应 UID
noaccess 客户端不能使用
 
启动及结束 NFS 的服务:
 
设定档更改後,一定要记得重新启动 NFS 的服务,启动及停止的方式如下:
 
# /etc/rc.d/init.d/nfs [ start | stop | restart | reload ]
 
start 启动 NFS 服务
stop 停止 NFS 服务
restart 停止并重新启动 NFS 服务
reload 重新载入 NFS 设定值
 
客户端使用 NFS:
 
1.查看 NFS 的服务:
 
client 要查看 Server 有提供哪些 NFS 服务,可以使用 showmount 这个指令。
 
# showmount -e 可看有分享哪些目录
# showmount -a 可看出所有的 mount
 
2.连接 NFS Server:
 
要使用 NFS server 上的资源,使用 mount 指令就可以了。
# mount -t nfs hostname:/shared_dir
 
例:
# mount -t nfs 192.168.1.100:/tmp /mnt/nfs
 
3.开机时自动连上 NFS:
 
如果希望开机的时候,系统就自动挂载 NSF,则需要编辑 /etc/fstab 档。
例:
192.168.1.100:/tmp /mnt/nfs nfs defaults 0 0
 
------------------------------------------------------------------------------------------------
 
显示昨天的日期
date -d "yesterday" +%Y%m%d
 
------------------------------------------------------------------------------------------------
 
find ./trace.* -type f -mtime +5 -exec rm {} \;
 
-------------------------------------------------------------------------------------------------
Load the driver:
insmod bcm5700
 
--------------------------------------------------------
when rm -rf * show Argument too long
 
for i in `cat list`
do
rm $i
done
 
-------------------------------------------------------
 
呵呵,sar在系统维护的时候有用的说,就象top命令。
=========================================
sar:统计单CPU系统的系统活动情况
cpusar:多处理器系统中单个处理器的活动情况
mpsar:多处理器系统中处理器的总体活动情况
 
sar -u:检查是否有逃逸进程大量占用CPU
此命令的显示有四个字段,含义如下:
%usr:执行用户进程的时间
%sys:执行系统进程的时间
%wio:等待完成I/O的时间
%idle:空闲时间
 
显示结果分析说明:
1) 一般情况下,%usr与%sys的值基本相等
2) 在一般的多用户系统中,%idle通常大于40%
3) 若%wio经常>15%,意味着硬盘有可能会造成瓶颈
4) 若%idle经常小于30%,意味着处理器能力较弱
5) 若%idle经常小于10%,表明处理器负担过重,或者存在逃逸进程
6) 若%idle接近于0,并且%sys又远远高于%usr,则可能是因为内存短缺引起了大量的swapping和paging
 
------------------------------------------------------------------------------------------------------------------------------------------
 
ext2文件系统下恢复误删除的文件
 
---------------------------------------------------------------------
 
  本系的 BBS 系统真是多灾多难 (嗯 .... 其实是因为我的疏忽,才会这么多灾多难 ....) ,继这几日系统时间不正确,造成许多人的 ID 被误砍后,又一次因系统设定上的问题,将 BBS 的重要备份档给杀了。这件事是学弟发现后告诉我的,当我上站来一见到他的 mail, 当真是欲哭无泪,差点没去撞墙。
 
  那时已是周六晚 11:00 左右,我一边想着要编一套说辞向大家解释无法替大家恢复旧信件与设定了,一边还在想是否能够挽回局面。大家知道, UNIX like 的系统是很难像 M$ 的系统一样,做到 undelete 的,所有网管前辈都曾再三警告我们,要小心! 小心! 砍档之前三思而后行,砍了之后再后悔也没用。虽然我已渐渐做到砍档三思而后行,但之次误砍事件是系统在背景中定时执行的,等到我找出原因时已是档案被砍后一个多小时。我凭着一点点的印象,想起在网络上,有人讨论过在 Linux ext2 filesystem中 undelete 的可能性,但我所见到的多半是负面的答案,但好象真的有人做过这件事,于是我第一个所做的,就是马上将该档案原来所在的 partition mount成 read-only, 禁止任何的写入动作,不是怕再有档案被误砍 (因为已没什么可砍的了) ,而是怕有新档案写进来,新资料可能会覆盖到旧资料原本存在的磁区 (block) 。我们现在唯一个指望,就是企图将档案原来存在的磁区一个个找回来,并且「希望」这些磁区上的旧资料都还在,然后将这些磁区串成一个档案。终于被我找到了!! 原来这方面的技术文件就存在我自己的系统中 )
 
/usr/doc/HOWTO/mini/Ext2fs-Undeletion.gz
 
  于是我就按照这份文件的指示一步步来,总算将一个长达 8MB 的压缩档救回了 99%, 还有一个长达 1.1 MB 的压缩档完整无缺地救了回来。感谢上帝、 Linux 的设计者、写那篇文件的作者、曾经讨论过此技术的人、以及 Linux 如此优秀的 ext2 filesystem, 让我有机会抢救过去。现在,我将我的抢救步骤做一个整理让大家参考,希望有派得上用场的时候 (喔! 不,最好是希望大家永远不要有机会用到以下的步数 ))
 
  在此严正声明!! 写这篇文章的目的,是给那些处于万不得已情况下的人们,有一个挽回的机会,并不意味着从此我们就可以大意,砍档不需要三思。前面提到,我有一个档案无法 100% 救回,事实上,长达 8MB 的档案能救回 99% 已是幸运中的幸运,一般的情况下若能救回 70% - 80% 已经要愉笑了。所以,不要指望 undelete 能救回一切。预防胜于治疗! 请大家平时就养成好习惯,砍档前请三思!!!
 
  理论分析
 
  我们能救回的机会有多大? 在 kernel-2.0.X 系列中 (本站所用的 kernel 是 2.0.33) ,取决以下两点:
 
  档案原来所在的磁区是否没有被覆写?
 
  档案是否完全连续?
 
  第一点我们可以与时间竞赛,就是当一发现档案误砍时,要以最快的速度 umount 该 filesystem, 或将该 filesystem remount 成唯读。就这次的情况而言,档案误砍是在事发一个小时后才发现的,但由于该 filesystem 写入的机会很少 (我几乎可确定一天才只有一次,做 backup),所以第一点算是过关了。
 
  第二点真的是要听天由命了,就本站所使用的 kernel, 必须要在假设「长档案」所占的 block 完全连续的情况下,才有可能完全救回来! 一个 block 是 1024 bytes,长达 8 MB 的档案就有超过 8000 个 block。在经常读写的 filesystem 中,可以想见长档案很难完全连续,但在我们的系统中,这一点似乎又多了几分指望。同时,Linux ext2 如此精良的 filesystem, 能做到前 7950 多个 block 都连续,这一点也功不可没。
 
  好了,以下我就讲一下我的步骤。
 
  抢救步骤 I - mount filesystem readonly
 
  该档案的位置原来是在 /var/hda/backup/home/bbs 下,我们系统的 filesystem 组态是:
 
root@bbs:/home/ftp/rescue# df
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/sda1 396500 312769 63250 83% /
/dev/sda3 777410 537633 199615 73% /home
/dev/hda1 199047 36927 151840 20% /var/hda
/dev/hda2 1029023 490998 485710 50% /home/ftp
 
  因此 /var/hda 这个 filesystem 要马上 mount 成 readonly (以下请用 root 身份):
 
mount -o remount,ro /var/hda
 
  当然也可以直接 umount 它,但有时候可能有某些 process 正在此 filesystem下运作,您可能无法直接 umount 它。因此我选择 mount readonly。但您也可以用:
 
fuser -v -m /usr
 
  看一下目前是那些 process 在用这个 filesystem, 然后一一砍掉,再 umount。
 
  抢救步骤 II
 
  执行
 
echo lsdel | debugfs /dev/hda1 | less
 
  看一下该 filesystem 最近被砍的 inode (档案) 有那些 (为什么是 /dev/hda1? 请见上头的 df 列表)? 在这奶F档案的重要资讯,如大小、时间、属性等等。就我们的系统而言,其列示如下:
 
debugfs: 92 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
....................................................................
29771 0 100644 1255337 14/14 Sat Jan 30 22:37:10 1999
29772 0 100644 5161017 14/14 Sat Jan 30 22:37:10 1999
29773 0 100644 8220922 14/14 Sat Jan 30 22:37:10 1999
29774 0 100644 5431 6/6 Sat Jan 30 22:37:10 1999
 
  请注意!我们必须要在档案大小、被砍时间等资讯中判断出要救回的档案是那一个。在此,我们要救回 29773 这个 inode。
 
  抢救步骤 III
 
  执行
 
echo "stat <29773>" | debugfs /dev/hda1
 

  列出该 inode 的所有资讯,如下:
 
debugfs: stat <29773>
Inode: 29773 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 0 Group: 0 Size: 8220922
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 16124
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x36b31916 -- Sat Jan 30 22:37:10 1999
atime: 0x36aebee4 -- Wed Jan 27 15:23:16 1999
mtime: 0x36adec25 -- Wed Jan 27 00:24:05 1999
dtime: 0x36b31916 -- Sat Jan 30 22:37:10 1999
BLOCKS:
123134 123136 123137 123138 123140 131404 131405 131406
131407 131408 131409 131 410 131411 131668
TOTAL: 14
 
  现在的重点是,必须将该 inode 所指的档案,所指的 block 全部找回来。在这它?14 个 block? 不对啊! 应该要有 8000 多个 block 才对啊! 在这卯ilesystem 的「奥密」了。上头所列的前 12 个 block 是真正指到档案资料的 block, 称之为 direct block 。第 13 个称为第一阶 indirect block, 第 14 个称为第二阶 indirect block 。什么意思? 该档的资料所在的 block 位置如下:
 
  各位明白吗? 第 13 个 (131411) 与第 14 个 block 其实不是 data, 而是 index,它指出接下来的 block 的位置。由于一个 block 的大小是 1024 bytes, 一个 int 在 32 位系统中是 4 bytes, 故一个 block 可以记录 256 笔资料。以 131411 block 为例,它所记录的资料即为 (在档案未砍前):
 
131412 131413 131414 .... 131667 (共 256 笔)
 
  而这 256 个 block 就真正记录了档案资料,所以我们称为第一阶。同理,第二阶就有两个层 index, 以 131668 来说,它可能记录了:
 
131669 131926 132182 .... (最多有 256 笔)
 
  而 131669 的 block 记录为:
 
131670 131671 131672 .... 131925 (共 256 笔)
 
  而这 256 个 block 才是真正储存档案资料的。而我们要的,就是这些真正储存档案资料的 block 。 理论上,我们只要将这些 index block 的内容全部读出来,然后照这些 index 把所有的 block 全部读到手,就能 100% 救回档案 (假设这些 block 全部没有被新档案覆写的话)。工程很大,但是可行。不幸的是,在 kernel-2.0.33, 其设计是,如果该档案被砍了,则这些 index block 全部会规零,因此我所读到的是
 
0 0 0 0 0 ..... (共 256 笔)
 
  哇! 没办法知道这些 data block 真正所在的位置。所以,在此我们做了一个很大的假设: 整个档案所在的 block 是连续的! 也就是我上头的例子。这也就是为什么说,只有连续 block (是指后头的 indirect block) 的档案才能完整救回,而这一点就要听天由命了。
 
  抢救步骤 IV
 
  好了,现在我们只好假设所有的档案处于连续的 block 上,现在请用http://archie.ncu.edu.tw/去找这个工具: fsgrab-1.2.tar.gz, 并将它安装起来。因为步骤很简单,故在此我就不多谈。我们要用它将所需的 block 全部抓出来。它的用法如下:
 
fsgrab -c count -s skip device
 
  其中 count 是只要 (连续) 读几个, skip 是指要从第几个开始读,例如我要从 131670 开始连续读 256 个,就这样下指令:
 
fsgrab -c 256 -s 131670 /dev/hda1 > recover
 
  现在我们就开始救档案吧! 以上头的资料,我们必须用以下的指令来救: (注意到头开的 12 个 block 并没有完全连续!!!)
 
fsgrab -c 1 -s 123134 /dev/hda1 > recover
fsgrab -c 3 -s 123136 /dev/hda1 >> recover
fsgrab -c 1 -s 123140 /dev/hda1 >> recover
fsgrab -c 7 -s 131404 /dev/hda1 >> recover
 
  这是开头的 12 个 block, 对于第一阶 indirect, 就资料来看好象是连续的 )
 
fsgrab -c 256 -s 131412 /dev/hda1 >> recover
 
  注意要跳过 131411, 因为它是 index block。对于第二阶 indirect, 我们 *假设* 它们都是连续的:
 
fsgrab -c 256 -s 131670 /dev/hda1 >> recover
fsgrab -c 256 -s 131927 /dev/hda1 >> recover
fsgrab -c 256 -s 132184 /dev/hda1 >> recover
............................................
 
  要一直做,直到 recover 的大小超过我们所要救回的档案大小 (8220922) 为止。要注意在这市 p心地跳过那些 index block (如 131668, 131669, 131926, 132183, ....) 了。
 
  抢救步骤 V
 
  最后一步,就是把档案「剪」出来,并看看我们救回多少了。在这戊]我们重复上述步骤,弄出来的 recover 档大小为 8294400,而我们要的大小是 8220922, 那就这样下指令:
 
split -b 8220922 recover rec
 
  则会做出两个档,一个是 recaa, 大小是 8220922, 另一个是 recab 则是剩下的大小,后者是垃圾,扔了即可。现在我们可以检查这个档案是不是「完整」的那个被误砍的档案了。由于我们的那个档案是 .tar.gz 的格式,于是我们这个方法来检查:
 
mv recaa recaa.tar.gz
zcat recaa.tar.gz > recaa.tar
 
  如果没有错误讯息,那表示成功了! 完全救回来了。但不幸的是,我们没有成功,将弄出的 recaa.tar 改名再 gzip 之后,与原来的 recaa.tar.gz 比一下大小,发现少了 1%, 表示说该档原来所在的 block 中最后有 1% 是不连续的 (或者被新写入的档案覆写了),但这已是不幸中的大幸了。
 
  后记
 
  对于在 undelete 时 *必需* 假设所有 block 连续的问题,那份 HOWTO 文件说 Linus 与其它 kernel 设计者正着手研究,看能否克服这个困难,也就是在档案砍掉时,不要将 index block 规零。我刚刚试一下 kenrel-2.2.0 的环境,发现已做到了!! 以下是一个已砍的档案的 inode data (由 debugfs 所读出):
 
debugfs: Inode: 36154 Type: regular Mode: 0600 Flags: 0x0 Version: 1
User: 0 Group: 0 Size: 2165945
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 4252
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x36b54c3b -- Mon Feb 1 14:39:55 1999
atime: 0x36b54c30 -- Mon Feb 1 14:39:44 1999
mtime: 0x36b54c30 -- Mon Feb 1 14:39:44 1999
dtime: 0x36b54c3b -- Mon Feb 1 14:39:55 1999
BLOCKS:
147740 147741 147742 147743 147744 147745 147746 147747 147748 147769
147770 157642 157643 157644 157645 157646 157647 157648 157649 157650
157651 157652 157653 157654 157655 157656 157657 157658 157659 157660
157661 157662 157663 157664 157665 157666 157667 157668 157669 157670
157671 157672 157673 157674 157675 157676 157677 157678 157679 157680
157681 157682 157683 157684 157685 157686 157687 1...................
.........9745 159746 159747 159748 159749 159750 159751 159752 159753
159754 159755 159756
TOTAL: 2126
 
  真是太完美了!! 这意味着在 kernel-2.2.X 的环境下,我们不必假设所有的 block 都连续,而且可以百分之百找回所有砍掉的 block! 因此上述的第二个风险就不存在了。
 
  以上资料,谨供参考。
 
------------------------------------------------------------------------------------------------------------------------------------------
 
文件:aa内容如下:
1234
2234
4567
5234
88999887
要求:把所有含有'234'的行全部删除后的结果。
结果:
4567
88999887
 
sed '/234/d' aa
 
grep -v 234
 
------------------------------------------------------------------------------------
 
解开initrd-x.x.x.img文件
 
先用file看一下文件是否被压缩
file initrd-2.4.21-AS.2smp.img
有就:
gunzip initrd-x.x.x.img.gz
无就:
mount -o loop initrd-2.4.21-AS.2smp.img /mnt/floppy/
解除
umount /mnt/floppy
gzip -9 initrd-x.x.x.img 得到initrd-x.x.x.img.gz文件,推荐使用-9参数取得较好的压缩效果。
mv initrd-x.x.x.img.gz initrd-x.x.x.img 重命名initrd-x.x.x.img.gz为initrd-x.x.x.img
 
------------------------------------------------------------------------------------------
 
如果我从这个文件中,把只要包含 "jinghua",或者含有"style",或者含有"1059119253"字符串中的行保留,其它行都删去。这个脚本怎么样写最简洁?
 
我是这样写的:
代码:
sed -ne '/jinghua/p' myfile >temp0
sed -ne '/style/p' myfile >>temp0
sed -ne '/1059119253/p' myfile >>temp0
mv temp0 myfile
 
or
 
sed -n '/jinghua/p;/style/p;/1059119253/p' myfile
-----------------------------------------------------------------------------------------------
 
reiserfsck /dev/sdb1 --rebuild-tree
 
-----------------------------------------------------------------------------------------------
 
端口相关命令:
ntsysv
lsof
comment the service in /etc/services
 
-----------------------------------------------------------------------------------------------
 
ncftp -u username hostname
输入密码后登录成功。
然后使用get -r dirname
或put -r dirname
 
------------------------------------------------------------------
 
建立新分区
fdisk /dev/sdb
mkfs.ext3 /dev/sdb
mkdir folder
mount -t ext3 /dev/sdb /folder
修改 /etc/fstab
--------------------------------------------------------------------
 
find . -name *gzobv170* -print
 
--------------------------------------------------------------------
 
#!/bin/sh
for i in $(cat list | awk -F. '{print substr($3,1,6)}'|uniq)
do
mkdir $i
cp $(cat list | grep $i) $i
echo "Done."
done
 
*************************************************
 
awk '/gz$/' list > dir
 
awk -F. '{print substr($3,1,6)}' dir | sort | uniq | awk '{print "mkdir", $1}' | sh
 
awk -F. '{print "cp",$0, substr($3,1,6) "\/\."}' dir | sh
 
--------------------------------------------------------------------
 
一次性将一个文件夹里面所有文件的ower,group属性改过来
 
chown -R root.root filename
 
--------------------------------------------------------------------
 
target_dir=/backup
find ./ -name '*.gz' -exec cp {} $target_dir \;
 
--------------------------------------------------------------------
 
awk  '{print $1, $7, $9, $10, $14}' a.txg
 
--------------------------------------------------------------------
 
在这个文本的每一行最前面添加一个','字符
 
sed 's/^/,/' filename
 
--------------------------------------------------------------------
 
ssh不行有可能是设置了防火墙
/etc/init.d/iptables stop
 
--------------------------------------------------------------------
杀进程
kill -9 pid
 
killall [process name]
 
--------------------------------------------------------------------
 
开机自动运行程序
/etc/rc.d/rc.local
 
--------------------------------------------------------------------
在linux中安装程序一半步骤:
1.) ./configure
2.) make
3.) make install
 
--------------------------------------------------------------------
 
在vi中查找替换
:%s/old/new/g
 
--------------------------------------------------------------------
linux下只显示目录
 
ls -F | grep /
--------------------------------------------------------------------
在文件中的每行前加上序号
从第1开始。
 
nl -v 1 diff.list | more
 
--------------------------------------------------------------------
如何从一个大文件中截取一段内容???
比如从abcd@163.com这个邮件地址这行开始
一直截取到ffff@263.net这个地址
 
sed -n '/abcd.163.com/,/ffff.263.net/p'
--------------------------------------------------------------------
可修改文件名代回车符
 
for i in `ls 010017081202.N* | grep -v wav`; do mv $i?.wav $i.wav;done
--------------------------------------------------------------------
sybot link
 
ln -s /目标目录/ 当前目录
 
--------------------------------------------------------------------
如何替换带"/"的字符串?
 
sed   " s#nhome/output#nhome1/iad#" filename
 
--------------------------------------------------------------------
两个文件a1,b1
内容分别如下:
a1:
1
2
3
b1:
a
b
c
如何把它们合在一起内容如下的:
1 a
2 b
3    c
 
paste -d"\t" a1 a2
 
------------------------------------------------------------------------------------
 
fuser -v -m /usr
看一下目前是那些 process 在用这个 filesystem
 
------------------------------------------------------------------------------------
 
第1步:
 
我们在/var/www(apache的主页根目录)下建立一个yanzheng目录
 
mkdir /var/www/yanzheng
 
第2步
 
然后我们编辑httpd.conf
 
在httpd.conf里添加的内容
 
Alias /acd/ "/nhome/acd/"
 
<Directory "/nhome/acd">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
    Authtype basic
    Authname "If you haven't Username and Password, Please send a request email to gz_pcsupp@ctihk.com"
    Authuserfile /mnt/apache_user/.htpasswd
    Require valid-user
</Directory>
 

第3步
 
就是创建apache的验证用户
 
htpasswd -c /etc/.htpasswd mayi
#之后会提示输入密码
#/etc/.htpasswd是密码文件存放的地方,mayi是进行验证的用户
#第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数
 
如果想修改密码,可以如下
 
htpasswd -m /etc/.htpasswd mayi
 

ok,重启apache服务,然后访问 http://你的网站地址/yanzheng 如果顺利的话,应该能看到一个用户验证的弹出窗口,只要填入第3步创建的用户名和密码就行
 

---------------------------------------------------------------------------------------
 
wget -t0 -c -nH -np -b -m -P /localdir http://freesoft.online.sh.cn/mirrors/ftp.redhat.com -o wget.log
 

---------------------------------------------------------------------------------------
 
linux版vnc server的改进.
linux上的vnc server内定的桌面管理环境是twm,实在是太简陋了.
修改$HOME/.vnc/xstartup这个文件.
把#twm &
再在接尾部份加上:
gnome-session
 
---------------------------------------------------------------------------------------
开机自动运行VNC
add to /etc/rc.d/rc.local
 
---------------------------------------------------------------------------------------
 
服务器负载超高啊
 
pstree
ps -aux
netstat -lnp
top之后按M
 
vmstat
解释:
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果bi,bo 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。
 
procs:
r-->在运行队列中等待的进程数
b-->在等待io的进程数
w-->可以进入运行队列但被替换的进程
 
memoy
swap-->现时可用的交换内存(k表示)
free-->空闲的内存(k表示)
 
pages
re--》回收的页面
mf--》非严重错误的页面
pi--》进入页面数(k表示)
po--》出页面数(k表示)
fr--》空余的页面数(k表示)
de--》提前读入的页面中的未命中数
sr--》通过时钟算法扫描的页面
 
disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号
 
fault 显示每秒的中断数
in--》设备中断
sy--》系统中断
cy--》cpu交换
 
cpu 表示cpu的使用状态
cs--》用户进程使用的时间
sy--》系统进程使用的时间
id--》cpu空闲的时间
 
 
 
---------------------------------------------------------------------------------------
 
man有乱码
 
export LANG=C
 
---------------------------------------------------------------------------------------
 
安装磁带机
 
我的问题是scsi卡的驱动模块没有加载上,察看文件/etc/modules.conf,找到sisc卡那一行如:alias scsi_hostadapter1 3wxxx

alias scsi_hostadapter1 aic7xxx
 
最后运行insmod aic7xxx 就可以了
---------------------------------------------------------------------------------------
 
判断文件大小是否为0
if [ ! -s filename  ]
then
echo OK
else
echo NO
fi
 
---------------------------------------------------------------------------------------
 
08333200408012015abcde
8311200408033568aced
 
要截取其中的2004及其之后的4位,请问如何实现!
 
grep -o '2004[0-9]\{4\}' file
 
---------------------------------------------------------------------------------------
crontab命令使用浅析
 
第一道第五个字段的整数取值范围及意义是:
 
0~59 表示分
1~23 表示小时
1~31 表示日
1~12 表示月份
0~6 表示星期(其中0表示星期日)
---------------------------------------------------------------------------------------
在apache中添加modules
 
在mod_name.c的当前目录
/usr/local/apache2/bin/apxs -c mod_name.c
/usr/local/apache2/bin/apxs -i -a -n mod_name mod_name.la
 

---------------------------------------------------------------------------------------
 
如何让linux启动后自动进入图形界面或不让它进入图形界面?
a.进入图形界面:安装时选图形启动方式或把/etc/inittab的id:x:initdefault:这行改成id:5:initdefault:。
b.不进入图形界面:安装时选文本启动方式或把/etc/inittab的id:x:initdefault:这行改成id:3:initdefault:。
 
---------------------------------------------------------------------------------------
 
www.mysql.com , www.apache.org , www.php.net下载mysql,apache,php的最新源码包
mysql-standard-5.0.1-alpha-snapshot-pc-linux-i686.tar.gz
httpd-2.0.52.tar.gz
php-5.0.2.tar.gz
 
我们先来安装mysql
cp mysql-standard-5.0.1-alpha-snapshot-pc-linux-i686.tar.gz /home
tar -zxvf mysql-standard-5.0.1-alpha-snapshot-pc-linux-i686.tar.gz
mv mysql-standard-5.0.1-alpha-pc-linux-i686 mysql
cd mysql
groupadd mysql;useradd -g mysql mysql
cd /usr/local/mysql/
./scripts/mysql_install_db --user=mysql;./configure;chown -R root .;chown -R mysql data;chgrp -R mysql .
 
vi /etc/profile
在hostname下增加以下内容:
MYSQL_HOME=/usr/local/mysql
PATH=$MYSQL_HOME/bin:$PATH
 
cp support-files/mysql.server /etc/init.d/mysqld
cp support-files/my.cnf /etc/my.cnf
./bin/mysqld_safe --user=mysql &
从后台启动mysql,这时会看到
[1] 3879
[root--1014--/usr/local/mysql]Starting mysqld daemon with databases from /usr/local/mysql/data
证明已经成功,可以用ps -aux | grep mysql 可以看到。
安装成功
 
再来安装apache
tar -zxvf httpd-2.0.52.tar.gz
cd httpd-2.0.52
emacs INSTALL 获得一些安装信息
./configure --enable-so;make; make install
/usr/local/apache2/bin/apachectl start
httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
再仔细看看,好像有点问题。
cd /usr/loca/apache2/conf/
 
emacs httpd.conf
找到#ServerName www.example.com:80
把它改为ServerName 127.0.0.1
../bin/apachectl restart 没有出错提示证明成功
 
再来安装php
tar -zxvf php-5.0.2.tar.gz
cd php-5.0.2
emacs INSTALL 获得一些安装信息
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql
 
./configure --prefix=/www/php --with-apxs2=/www/bin/apxs --with-config-file-path=/www/php --enable-sockets --with-mysql=/usr/local/mysql --with-zlib-dir=/usr/include --with-gd --enable-wddx --with-snmp=/usr/local;make;make install
 
for dotproject:
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --with-zlib-dir=/usr/local/include --with-gd --enable-gd-native-ttf --with-ttf --with-freetype-dir;make;make install
 
如果出现如下证明快成功了。
+--------------------------------------------------------------------+
│ License: │
│ This software is subject to the PHP License, available in this │
│ distribution in the file LICENSE. By continuing this installation │
│ process, you are bound by the terms of this license agreement. │
│ If you do not agree with the terms of this license, you must abort │
│ the installation process at this point. │
+--------------------------------------------------------------------+
 
Thank you for using PHP.
 
make;make install
 
cp php.ini-dist /etc/php.ini
cp:是否覆盖'/etc/php.ini'? y
 

php与apache整合
emacs /usr/local/apache2/conf/httpd.conf 找到DirectoryIndex改为如下:
DirectoryIndex index.html index.php index.htm index.html.var
找到
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
在它后面添加
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
 
/usr/local/apache2/bin/apachectl restart
 
测试php
emacs /usr/local/apache2/htdocs/index.php
添加<? phpinfo();?>
打开浏览器,输入
http://127.0.0.1/index.php
可以看到关于php的信息,证明php安装成功。
 
---------------------------------------------------------------------------------------
Mount CDROM
 
dmesg|grep hd 先看看cdrom到底是那个设备
mount -t iso9660 /dev/hdb /mnt/cdrom
 
---------------------------------------------------------------------------------------
 
系统提示符总是显示"-bash-2.05b#",转换路径也只是显示"-bash-2.05b#"
在主目录重建你的:.bash_profile
主目录中".bashrc"有吗,如没有建一个
 
---------------------------------------------------------------------------------------
 
echo "1,2,3,4,5,6"|awk -F',' '{print (NF-1)}'
 
---------------------------------------------------------------------------------------
 
-gt大于
-lt小于
-eq等于
 
---------------------------------------------------------------------------------------
 
设置时间:date MMDDhhmm
 
---------------------------------------------------------------------------------------
 
redhat 怎么看到我系统有几条内存条?
dmidecode | grep MB
 
---------------------------------------------------------------------------------------
 
[root@storage_server_jt mail]# mii-tool
eth0: negotiated 100baseTx-FD, link ok
eth1: negotiated 100baseTx-FD, link ok
---------------------------------------------------------------------------------------
 
请问如何看网卡每秒的packets数
iptraf
 
---------------------------------------------------------------------------------------
 
按照内存使用大小排序
ps -aux|awk '{print $4"\t"$11}'|grep -v MEM|sort -r
 
-----------------------------------------------------------------------------------------
 
Unix&Linux:
1.用root或者运行mysqld的用户登录系统;
2.利用kill命令结束掉mysqld的进程;
3.使用--skip-grant-tables参数启动MySQL Server
shell>mysqld_safe --skip-grant-tables &
4.为root@localhost设置新密码
shell>mysqladmin -u root flush-privileges password "newpassword"
5.重启MySQL Server
 
------------------------------------------------------------------------------------------
 
mii-tool eth0 -A 100base-FD
这样
就改成100M全双工了。
 
ethertool
------------------------------------------------------------------------------------------
 
在redhat下如何检测COM1通讯状况。谢谢
statserial
 
------------------------------------------------------------------------------------------
 
有什么东西来查MD5码?
md5sum
 
------------------------------------------------------------------------------------------
 
/proc虚拟文件系统(也叫procfs)是Unix操作系统所使用的虚拟文件系统的Linux实现,包括Sun Solaris、LinuxBSD。在/proc开始时,它以一个标准文件系统出现,并包含与正在运行的进程IDs同样名字的文件。然而,在/proc中的文件不占用磁盘空间,它们存在于工作存储器(内存)中。/proc最初的目的是便于进程信息的存取,但是现在,在Linux中,它可被内核的每一部分使用来报告某些事情。
 
    在/proc文件系统提供的成百上千的值当中,我们将集中考虑集群监控所需的最小集,它们包括:
    ◆ /proc/loadavg:包含系统负载平均值;
    ◆ /proc/meminfo:包含存储管理统计量;
    ◆ /proc/net/dev:包含网卡度量;
    ◆ /proc/stat:包含内核统计量;
    ◆ /proc/uptime:包含总的系统正常工作时间及空闲时间。
 
    每个文件提供的值的数量是不同的。这些文件的完整有效值列表如下。
    ◆ /proc/loadavg提供以下数据:
 
1分钟平均负载;
5分钟平均负载;
15分钟平均负载;
总作业数;
正在运行的作业总数。
 
 

    ◆ /proc/meminfo提供的存储器信息包括:
 
活动存储器;
不活动存储器;
缓冲存储器;
高速缓冲存储器;
总的自由存储器;
总的高位存储器;
自由高位存储器;
总的低位存储器;
自由低位存储器;
共享存储器;
交换存储器;
交换高速缓冲存储器;
交换自由存储器;
总存储器。
 
 

    ◆ /proc/net/dev中包括每个网卡的如下数据:
 
接收到的字节;
接收到的压缩字节;
收到的误码数;
收到的漏失误码;
收到的FIFO误码;
收到的帧误码;
收到的多播误码;
收到的总包数;
已传输的字节;
已传输的压缩字节;
传输误码总数;
传输载波误码;
传输冲突误码;
传输漏失误码;
传输FIFO误码;
传输的总包数。
 
 

    ◆ /proc/stat提供:
 
引导时间;
上下文切换数量;
中断总量;
进页面总数;
出页面总数;
进程总数;
换入总数;
换出总数;
合计CPU空闲时间;
合计CPU nice时间;
合计CPU系统时间;
合计CPU用户时间。
同时提供对每个CPU的:
单个CPU空闲时间;
单个CPU nice时间;
单个CPU系统时间;
单个CPU用户时间。
以及对每个磁盘驱动器的如下数据:
单个磁盘块读;
单个磁盘块写;
单个磁盘I/O总数;
单个磁盘I/O读;
单个磁盘I/O写。
 
 

    ◆ /proc/uptime中包括:
 
系统总工作时间;
系统总空闲时间。
 
--------------------------------------------------------------------------------------------------------
 
du -sk /var/*|sort -n
看看那个文件占用大
 
-----------------------------------------------------------------------------------------------------------------------------
看网卡牌子
ethtool -i eth0
lspci
----------------------------------------------------------------------------------------------------------------------------------------
如何用vi删除大段的内容
23,1045-行号
:23,1045d
 
------------------------------------------------------------------------------------------------------------------------------------------
如何将网卡更改为混杂模式?
ifconfig eth0 promisc
--------------------------------------------------------------------------------------------------------------------------------------------
[root@machine1 /]$ netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 787165 0 0 1 51655 0 0 0 BRU
eth1 1500 0 520811 0 0 0 1986 0 0 0 BRU
lo 3924 0 1943 0 0 0 43 0 0 0 LRU
 
MTU和Met字段表示的是接口的MTU和度量值值;RX和TX这两列表示的是已经准确无误地收发了多少数据包( RX - OK / TX - OK)、产生了多少错误( RX-ERR/TX-ERR)、丢弃了多少包(RX-DRP/TX-DRP),由于误差而遗失了多少包(RX-OVR/TX-OVR);最后一列展示的是为这个接口设置的标记,在利用ifconfig显示接口配置时,这些标记都采用一个字母。它们的说明如下:
 
■ B 已经设置了一个广播地址。
■ L 该接口是一个回送设备。
■ M 接收所有数据包(混乱模式)。
■ N 避免跟踪。
■ O 在该接口上,禁用A R P。
■ P 这是一个点到点链接。
■ R 接口正在运行。
■ U 接口处于"活动"状态。
 
---------------------------------------------------------------------------------------------------------------------------------------------------
 
linux连接console
 
minicom
cu -l /dev/ttyS0 dir
退出 cu,输入: ~就行了。
 
---------------------------------------------------------------------------------------------------------------------------------------------------
 
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
 
------------------------------------------------------------------------------------------
 
如果你只想看文件的前5行,可以使用head命令,
如: head -5 /etc/passwd 
------------------------------------------------------------------------------------------
 
如果你想查看文件的后10行,可以使用tail命令,
如: tail -10 /etc/passwd 
------------------------------------------------------------------------------------------
 
你知道怎么查看文件中间一段吗?你可以使用sed命令 
如: sed -n '5,10p' /etc/passwd 这样你就可以只查看文件的第5行到第10行。
------------------------------------------------------------------------------------------
 
如何查找含特定字符串的文件 [code:1:c7724c2eda]
例如查找当前目录下含有"the string you want find..."字符串的文件:
$find . -type f -exec grep "the string you want find..." {} ; -print
------------------------------------------------------------------------------------------
我们经常会遇到需要取出分字段的文件的某些特定字段,例如/etc/password就是通过":"分隔各个字段的。可以通过cut命令来实现。例如,我们希望将系统账号名保存到特定的文件,就可以:
cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段。
当然也可以通过cut取得文件中每行中特定的几个字符,例如:
cut -c3-5 /etc/passwd
就是输出/etc/passwd文件中每行的第三到第五个字符。
-c 和 -f 参数可以跟以下子参数:
N 第N个字符或字段
N- 从第一个字符或字段到文件结束
N-M 从第N个到第M个字符或字段
-M 从第一个到第N个字符或字段
------------------------------------------------------------------------------------------
 
这样程序执行期间的显示都记录到logfile同时显示到标准输出(屏幕)。
program_name |tee logfile
 
------------------------------------------------------------------------------------------
如何查找某条命令的相关库文件
ldd /bin/ls
------------------------------------------------------------------------------------------
 
网络安装的一点实践。
 
本文以RedHat Linux 9 为例,简单介绍网络安装的方法。
 
一、网络安装
 
1. 安装服务器的准备:
    
    网络安装的服务器按照安装方式的不同,可分为3种,NFS,FTP和HTTP,安装文件的组织方式有两种,安装文件树和ISO镜像。
    
    关于NFS,FTP和HTTP服务器的配置,请参考其它文档,本文主要介绍安装用到的部分。
    
(1) 安装文件树的准备:
    把Red Hat Linux 9 安装光盘的第一张放进光驱,在命令行输入:
    
    mount /mnt/cdrom
    cp -var /mnt/cdrom/RedHat /var/ftp/pub/rh9/
    umount /mnt/cdrom
    
    然后再对另两张光盘做同样的操作。
    
    安装文件树就准备好了。
    
    这样,我们就可以设置NFS,FTP和HTTP了。
    
    NFS:
    编辑/etc/exports,加入/var/ftp/pub/rh9 *(ro)
    然后启动NFS服务,service nfs start;如果已经启动NFS服务,exportfs -a或service nfs reload就可以使我们新加入的文件export出去。
    
    FTP:
    因为我们把iso放到了Anonymous的HOME下,所以我们只要启动vsftpd就可以了,service vsftpd start;如果已经启动了vsftpd,什么也不做就行了。
    
    HTTP:
    我们做一个link给iso所在的目录,ln -s /var/ftp/pub/ /var/www/html/pub
    然后启动httpd,service httpd start,如果已经启动了httpd,不用做任何事就行了。
 
(2) ISO镜像的准备和安排:
 
    ISO镜像可以是从网上下载,也可以用安装光盘来自己制作。
    
    下载的可以到官方网站,也可以到速度比较好的镜像站点,根据发行版本的不同,请选择合适的网站下载。如 http://www.redhat.com为RedHat的官方网站。
 
    下载要注意的是一定要计算MD5。因为下载的文件较大,由于网络传输的问题,有可能使下载的文件不完整。所以计算MD5是非常必要的。
   
    MD5消息摘要函数(RFC 1321)是由麻省理工学院的Ronald Rivest开发的。它是其早期版本MD4(RFC 1320)的推广。MD5的输入是任意长的消息x,输出为128比特的消息摘要h(x)。(关于MD5的更多内容,请参考其它文档。) 在下载ISO时,会同时提供一个MD5SUM,里面是ISO的MD5值。在Linux上,可以用md5sum来计算ISO的MD5值,然后和MD5SUM里的值比较,如果相同,那说明你下的文件没有问题。如果不同,那你可能需要重新下载了。
 
    关于ISO的制作,在Linux下,可以用dd;在Windows下,可以用WinISO,NERO,EasyCD,还可以用其它的工具,就不一一列举了,我们主要介绍一下在Linux下用dd制作iso的方法。
    
    dd是在物理方式读写文件的,我们就用它来制作iso文件。把Red Hat Linux 9 的安装光盘延第一张放进光驱,然后在命令行输入:
    
    dd if=/dev/cdrom of=/root/rh9-1.iso bs=512
    
    然后,对另两张光盘做同样的操作,生成文件的名字分别为rh9-2.iso,rh9-3.iso。生成文件名字可以是任意的,我这样写,主要是为了好记。
    
    好了,不管是下载的,还是自己制作的,我们有了三个iso文件。我们把它放到/var/ftp/pub/rh9iso/下:
    
    mv /root/rh9-*.iso /var/ftp/pub/rh9iso/
    
    只有NFS方式可能用ISO来安装,所以,我们修改 /etc/exports,加入 /var/ftp/pub/rh9iso *(rw),然后同上,services nfs start,或exportfs -a或service nfs reload就可以了。
 
    
二、安装的启动方式:
    
    网络安装的启动方式有三种,软盘,光盘,网卡启动(由于现在多数网卡不带启动芯片,所以,这里我们不讨论网卡启动的问题)。
    
    启动软盘是通过安装光盘上的img文件制作的,在安装光盘第一张中images目录下的bootdisk.img就是启动盘的镜像文件,可能还需要drvnet.img(网卡驱动)。把第一张光盘放进光驱,找一张空白软盘放进软驱,在命令行输入:
 
mount -o loop iso文件指定目录 /mnt/cdrom 
    
    mount /mnt/cdrom
    dd if=/mnt/cdrom/images/bootdisk.img of=/dev/fd0
    
    等到命令结束,软驱灯来时,换一张软盘,输入:
    
    dd if=/mnt/cdrom/images/drvnet.img of=/dev/fd0
    
    给两张软盘分别贴好标签,以便于使用。
    
    启动光盘有两种,安装光盘的第一张就是启动盘,也可以自己做一张启动光盘(如果你有刻录机的话),具体做法请参考其它文档。
    
三、网络安装
 
(1) 软盘启动:
    把启动软盘放进软驱,启动机器,出现boot时,直接回车;
    当提示要Driver Disk时,选yes,钱后把drvnet那张盘放进软驱,回车继续;
    当提示安装方式时选一种安装方式,这里我选NFS;
    当问IP地址的获得方式,选DHCP;
    当问server name 时,输入NFS server我名字,在下面输入路径:/var/ftp/pub/rh9;
    当安装画面开始时,就和别的安装方式一样了。
 
(2) 光盘启动:
    把启动光盘放进光驱,启动机器,过程同上,只是不用换盘了。
 
(3) 安装光盘启动:
    启动机器,把安装光盘第一张放进光驱,在出现boot时,输入 linux askmethod,其同上。
 
------------------------------------------------------------------------------------------
 
/proc中的重要信息
cat /proc/cpuinfo - CPU (i.e. vendor, Mhz, flags like mmx)
cat /proc/interrupts - 中断
cat /proc/ioports - 设备IO端口
cat /proc/meminfo - 内存信息(i.e. mem used, free, swap size)
cat /proc/partitions - 所有设备的所有分区
cat /proc/pci - PCI设备的信息
cat /proc/swaps - 所有Swap分区的信息
cat /proc/version - Linux的版本号
 
------------------------------------------------------------------------------------------
忘记mysql 的root 密码:
先确认已经杀掉mysqld 进程了,然后执行这个
/usr/bin/safe_mysqld --skip-grant-tables &
再这样登录
mysql -h 192.168.1.2 -u root
上边的192.168.1.2 是cloud 的mysqld 运行机器,你换成自己的,这样登录上
去,就可以修改密码了。
修改密码
1.mysql -h hostname –u root 命令登录到mysqld server 用grant 命令改变口令:
Grant all on *.* to root indentified by "111111"
2. mysqladmin -u 用户名-p 旧密码password 新密码
例1:给root 加个密码ab12。首先在DOS 下进入目录mysqlbin,然后键入
以下命令
mysqladmin -uroot password ab12
注:因为开始时root 没有密码,所以-p 旧密码一项就可以省略了。
2、例2:再将root 的密码改为djg345。
mysqladmin –u root -pab12 password djg345 (注意-p 不要和后面的密码分
开写,要写在一起)
3.
use mysql; update user set password =password('yourpass') where user='r
oot'
4. 载入权限表: `mysqladmin -h hostname flush-privileges' ,或者使
用SQL 命令`FLUSH PRIVILEGES'。(当然,在这里,你也可以重启mysqld。)
mysql 的建库,添加数据方法:
mysqi –u root
mysql>create database ttt;
mysql>source 1.txt
mysql>load data local infile "2.txt" into table board;
1.txt 内容:
CREATE TABLE board (
boardid int(11) NOT NULL auto_increment,
boardname char(255),
PRIMARY KEY (boardid)
);
2.txt 内容:
1 lk(Tab 键分开)
2 lklk
3 lklklk
导出database:
#mysqldump –opt ttt –uroot –p111111 > 111.sql
导入database
1. #mysql –u root –p111111 ttt < 111.sql
2. mysql>source 111.sql;
导出的多个database:#mysqldump –-databases ttt1 ttt2 ttt3 –uroot –p111111
> 111.sql
导出所有database:#mysqldump –-all-databases –uroot –p111111 > 111.sql
 
------------------------------------------------------------------------------------------
 如何把目录下的大写文件及目录改成小写
for i in *; do mv $i `echo $i |tr [a-z] [A-Z]`; done
 
------------------------------------------------------------------------------------------
 
香港 ns1.netvigator.com 205.252.144.228
澳门 vassun2.macau.ctm.net 202.175.3.8
 
------------------------------------------------------------------------------------------
 
Cat5线的制作
直:
 1   2   3    4     5   6    7     8
白橙 橙 白绿  兰  白兰  绿  白啡  啡
 
交叉:
 1   2   3    4     5   6    7     8
白绿 绿 白橙  兰  白兰  橙  白啡  啡
 
------------------------------------------------------------------------------------------
Single User Mode
LILO: linux single
or
LILO: linux 1
 
-------------------------------------------------------------------------------------------
 
(http://www.gnu.org/software/parted/parted.html) provides some
of PartitionMagic's functionality. ReiserFS, XFS, ext2fs, and
ext3fs all include their own partition resizing utilities, but they
aren't as easy to use or as flexible as PartitionMagic.
 
-------------------------------------------------------------------------------------------
 
将命令方入后台运行:
[Linux #] updatedb
[Linux #] Ctrl + Z (放入后台)
[Linux #] updatedb &
[Linux #] bg (调出前台继续运行)
 
-------------------------------------------------------------------------------------------
Virtual Memory Tuning
# cat /proc/sys/vm/freepages
64 96 128
 
# echo "256 512 768" > /proc/sys/vm/freepages
 
-------------------------------------------------------------------------------------------
Partition Tuning
# tune2fs
# hdparm
# mke2fs
# defrag
# chattr
 
Bad Blocks
# dumpe2fs /dev/hda3
# dumpe2fs /dev/hda3 | grep "Block count"
# badblocks -o badblocks.rpt /dev/hda3 533736
# e2fsck -f -l badblocks.rpt /dev/hdb1
 
-------------------------------------------------------------------------------------------
 
The five fields used in /etc/crontab are as follows:
* * * * * /home/bote.sh
minute 0–59
hour 0–23 (24-hour format)
day of the month 1–31
month 1–12
day of week 0–7 (where both 0 and 7 are Sunday)
 
-------------------------------------------------------------------------------------------
 
Creating a Linux Filesystem on a Floppy Disk
# /sbin/mke2fs -j /dev/fd0
 
-------------------------------------------------------------------------------------------
 
一些优化的措施
1开启硬盘 DMA 支持。
系统安装完毕後,硬盘的 DMA 是没有打开的,我的方法是在
/etc/rc.d/rc.local 最後面加上一行 /sbin/hdparm -d1 -c3 -m16 /dev/hda 这样每次开机後,硬盘的 DMA 就会开启,不必每次手动设定。
添加前后你可以用hdparm -Tt /dev/hda 来测试一下。
2运行ntsysv来关掉一些没有必要的服务,下面也提供一些常见服务的具体解释:
amd管理mixer设备的
amidxtape
anacron(命令调度)
apmd(高级电源管理)
arpwatch(看ARP的)
atd (功能cron类似)
autofs(自动加载文件系统)
daytime-udp(udp-用户数据报协议,与之同级别的是TCP)
dhcpd(动态主机服务)
echo(服务器回显客户数据服务)
echo-udp(UDP版本的echo)
finger(finger服务)
gated (网关服务)
gpm(控制台下的鼠标)
ipchains(防火墙)
linuxconf-web(打开linuxconf的web配置端口)
netfs(网络文件系统)
*network(提供网络支持)
pcmica(提供对pc卡的支持,一般笔记本用)
sendmail(大名鼎鼎的邮件服务器)
keytable(键盘影射,好象没有用)
KZUZU----启动系统时检测PC硬件
#我只留下了apmd   gpm  syslog  network  iptable  5个
3减少虚拟终端机的数量。
系统默认是6个,也就是 CTRL+ALT F1~F6 那六个,我关掉其中四个,只留下 CTRL+ALT F1~F2,大约省下 4 Mbytes 的记忆体,但是这样一来,X-Window 会从原来的 CTRL+ALT F7 变成 CTRL+ALT F3 。
修改 /etc/inittab 中,将 mingetty 3 ~6 全部加上 # 字号
 
几个对系统安全有好处的设置
1删除所有的特殊账户
你应该删除所有不用的缺省用户和组账户(比如lp, sync, shutdown, halt, news, uucp, operator, games, gopher等)。
2打开密码的shadow支持功能:
打开密码的shadow功能,对password加密。使用"/usr/sbin/authconfig"工具打开shadow功能。如果想把密码和组转变为shadow格式,可以分别使用"pwcov,grpconv"命令。
3、root账户
在unix系统中root账户是具有最高特权的。如果系统管理员在离开系统之前忘记注销root账户,系统会自动注销。通过修改账户中"TMOUT"参数,可以实现此功能。TMOUT按秒计算。编辑你的profile文件(vi /etc/profile),在"HISTFILESIZE="后面加入下面这行:
TMOUT=3600
3600,表示60*60=3600秒,也就是1小时。这样,如果系统中登陆的用户在一个小时内都没有动作,那么系统会自动注销这个账户。你可以在个别用户的".bashrc"文件中添加该值,以便系统对该用户实行特殊的自动注销时间。
改变这项设置后,必须先注销用户,再用该用户登陆才能激活这个功能。
4禁止系统信息暴露
当有人远程登陆时,禁止显示系统欢迎信息。你可以通过修改"/etc/inetd.conf"文件来达到这个目的。
把/etc/inetd.conf文件下面这行:
telnet  stream  tcp     nowait root    /usr/sbin/tcpd  in.telnetd
修改为:
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd -h
在最后加"-h"可以使当有人登陆时只显示一个login:提示,而不显示系统欢迎信息
 
----------------------------------------------------------------------------------------------------------------------------------------------------
 
在/etc/下建立make.conf文件,并根据cpu的型号写入不同内容。注意你的gcc版本必须在3.0以上。
 i386 (Intel):
 
 CHOST="i386-pc-linux-gnu"
 CFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"
 
 i486 (Intel):
 
 CHOST="i486-pc-linux-gnu"
 CFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"
 
 Pentium 1 (Intel)
 
 CHOST="i586-pc-linux-gnu"
 CFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"
 
 Pentium MMX (Intel)
 
 CHOST="i586-pc-linux-gnu"
 CFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer"
 
 Pentium PRO (Intel)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=pentiumpro -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=pentiumpro -O3 -pipe -fomit-frame-pointer"
 
 Pentium II (Intel)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
 
 Celeron (Mendocino), aka Celeron1 (Intel)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
 
 Pentium III (Intel)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
 
 Celeron (Coppermine) aka Celeron2 (Intel)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
 
 Celeron (Willamette?) (Intel)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
 
 Pentium 4 (Intel)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
 
 Eden C3/Ezra (Via)
 
 CHOST="i586-pc-linux-gnu"
 CFLAGS="-march=i586 -m3dnow -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=i586 -m3dnow -O3 -pipe -fomit-frame-pointer"
 
 K6 (AMD)
 
 CHOST="i586-pc-linux-gnu"
 CFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"
 
 K6-2 (AMD)
 
 CHOST="i586-pc-linux-gnu"
 CFLAGS="-march=k6-2 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=k6-2 -O3 -pipe -fomit-frame-pointer"
 
 K6-3 (AMD)
 
 CHOST="i586-pc-linux-gnu"
 CFLAGS="-march=k6-3 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=k6-3 -O3 -pipe -fomit-frame-pointer"
 
 Athlon (AMD)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=athlon -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=athlon -O3 -pipe -fomit-frame-pointer"
 
 Athlon-tbird, aka K7 (AMD)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=athlon-tbird -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=athlon-tbird -O3 -pipe -fomit-frame-pointer"
 
 Athlon-tbird XP (AMD)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
 
 Athlon 4(AMD)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=athlon-4 -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=athlon-4 -O3 -pipe -fomit-frame-pointer"
 
 Athlon XP (AMD)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
 
 Athlon MP (AMD)
 
 CHOST="i686-pc-linux-gnu"
 CFLAGS="-march=athlon-mp -O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-march=athlon-mp -O3 -pipe -fomit-frame-pointer"
 
 603 (PowerPC)
 
 CHOST="powerpc-unknown-linux-gnu"
 CFLAGS="-O3 -pipe -fsigned-char"
 CXXFLAGS="-O3 -pipe -fsigned-char"
 
 603e (PowerPC)
 
 CHOST="powerpc-unknown-linux-gnu"
 CFLAGS="-O3 -pipe -fsigned-char"
 CXXFLAGS="-O3 -pipe -fsigned-char"
 
 604 (PowerPC)
 
 CHOST="powerpc-unknown-linux-gnu"
 CFLAGS="-O3 -pipe -fsigned-char"
 CXXFLAGS="-O3 -pipe -fsigned-char"
 
 604e (PowerPC)
 
 CHOST="powerpc-unknown-linux-gnu"
 CFLAGS="-O3 -pipe -fsigned-char"
 CXXFLAGS="-O3 -pipe -fsigned-char"
 
 750 aka as G3 (PowerPC)
 
 CHOST="powerpc-unknown-linux-gnu"
 CFLAGS="-mcpu=750 -O3 -pipe -fsigned-char -mpowerpc-gfxopt"
 CXXFLAGS="-mcpu=750 -O3 -pipe -fsigned-char -mpowerpc-gfxopt"
 
 7400, aka G4 (PowerPC)
 
 CHOST="powerpc-unknown-linux-gnu"
 CFLAGS="-mcpu=7400 -O2 -pipe -fsigned-char -maltivec
 -mabi=altivec -mpowerpc-gfxopt"
 CXXFLAGS="-mcpu=7400 -O2 -pipe -fsigned-char -maltivec
 -mabi=altivec -mpowerpc-gfxopt"
 -fsigned-char -maltivec -mabi=altivec -mpowerpc-gfxopt"
 
 7450, aka G4 second generation (PowerPC)
 
 CHOST="powerpc-unknown-linux-gnu"
 CFLAGS="-mcpu=7450 -O2 -pipe -fsigned-char
 -maltivec -mabi=altivec -mpowerpc-gfxopt"
 CXXFLAGS="-mcpu=7450 -O2 -pipe -fsigned-char
 -maltivec -mabi=altivec -mpowerpc-gfxopt"
 
 
 PowerPC (If you don't know which one)
 
 CHOST="powerpc-unknown-linux-gnu"
 CFLAGS="-O3 -pipe -fsigned-char -mpowerpc-gfxopt"
 CXXFLAGS="-O3 -pipe -fsigned-char -mpowerpc-gfxopt"
 
 Sparc
 
 CHOST="sparc-unknown-linux-gnu"
 CFLAGS="-O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-O3 -pipe -fomit-frame-pointer"
 
 Sparc 64
 
 CHOST="sparc64-unknown-linux-gnu"
 CFLAGS="-O3 -pipe -fomit-frame-pointer"
 CXXFLAGS="-O3 -pipe -fomit-frame-pointer"
 
 
 好了,这样做后你编译出的程序运行效率将比以前高很多!只要你有时间,你可以把你的系统如redhat linux 9.0的源代码(后缀.src.rpm)全部重新编译一次,你会发现你的Redhat Linux系统将比原来快一大截!
 ############################################################
 
 以上我在RedHat Linux 9.0及Mandrake Linux 9.1上通过并证明有效。
 
----------------------------------------------------------------------------------------------------------------------------------------------------
 
优化编译器
编辑/etc/profile,增加:
For CPU i686 or PentiumPro, Pentium II, Pentium III
CFLAGS='-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions'
export CFLAGS
 
For CPU i586 or Pentium
CFLAGS='-O3 -march=pentium -mcpu=pentium -ffast-math -funroll-loops -fomit-frame-pointer -fforce-mem -fforce-addr -malign-double -fno-exceptions'
export CFLAGS
 
For CPU i486
CFLAGS='-O3 -funroll-all-loops -malign-double -mcpu=i486 -march=i486 -fomit-frame-pointer -fnoexceptions'
export CFLAGS
 
优化SWAP分区
将SWAP分区置于硬盘的开始部分,可以获得部分的系统性能提升。
 
优化虚拟内存系统
编辑/etc/sysctl.conf,增加或者更改如下:
# Improve file system performance
vm.bdflush = 100 1200 128 512 15 5000 500 1884 2
# Improve virtual memory performance
vm.buffermem = 80 10 60
 
优化文件系统
 
编辑/etc/sysctl.conf,增加或者更改如下:
# Improve the number of open files
fs.file-max = 8192
# Improve the number of inodes opened
fs.inode-max = 32768
 
此外,对于有频繁读写的文件系统,可以使用noatime的mount选项,这样,对于文件系统的读,系统不会产生对于文件节点atime信息的更新操作。
 

优化TCP/IP
编辑/etc/sysctl.conf,增加或者更改如下:
# Allowed local port range
net.ipv4.ip_local_port_range = 32768 61000
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Turn off the tcp_window_scaling
net.ipv4.tcp_window_scaling = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0
 
优化IDE磁盘
应用hdparm命令配置IDE磁盘的32位DMA通道,可以极大的提升磁盘IO,某些情况下几乎可以提升到2倍的IO性能。具体使用参见hdparm的manual.
 
---------------------------------------------------------------------------------------------------------------------------------------------------
 
Linux 网络安全和优化
 
简介:
 
网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的 恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linux的源码是开放的,有 成千上万的志愿者会立刻发现并修补它。本文旨在介绍用来增强/优化你的站点安全性的一般技术,以Redhat Linux作为操作环境。
 
第一部分:基本的网络安全
 
1.操作系统内部的log file是检测是否有网络入侵的重要线索,当然这个假定你的logfile不被侵入者 所破坏,如果你有台服务器用专线直接连到Internet上,这意味着你的IP地址是永久固定的地址,你会发现 有很多人对你的系统做telnet/ftp登录尝试,试着运行#more /var/log/secure | grep refused 去检查。
 
2. 限制具有SUID权限标志的程序数量,具有该权限标志的程序以root身份运行,是一个潜在的安全漏洞,当 然,有些程序是必须要具有该标志的,象passwd程序。
 
3.BIOS安全。设置BIOS密码且修改引导次序禁止从软盘启动系统。
 
4. 用户口令。用户口令是Linux安全的一个最基本的起点,很多人使用的用户口令就是简单的'password', 这等于给侵入者敞开了大门,虽然从理论上说没有不能确解的用户口令,只要有足够的时间和资源可以利用。 比较好的用户口令是那些只有他自己能够容易记得并理解的一串字符,并且绝对不要在任何地方写出来。
 
5./etc/exports 文件。 如果你使用NFS网络文件系统服务,那么确保你的/etc/exports具有最严格的存取权限设置,不意味着不要 使用任何通配符,不允许root写权限,mount成只读文件系统。 编辑文件/etc/exports并且加: 例如:
 

/dir/to/export host1.mydomain.com(ro,root_squash)
/dir/to/export host2.mydomain.com(ro,root_squash)
 
/dir/to/export 是你想输出的目录,host.mydomain.com是登录这个目录的机器名,
ro意味着mount成只读系统,root_squash禁止root写入该目录。
为了让上面的改变生效,运行/usr/sbin/exportfs -a
 
6.确信/etc/inetd.conf的所有者是root,且文件权限设置为600 。
[root@deep]# chmod 600 /etc/inetd.conf
ENSURE that the owner is root.
[root@deep]# stat /etc/inetd.conf
File: "/etc/inetd.conf"
Size: 2869 Filetype: Regular File
Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Device: 8,6 Inode: 18219 Links: 1
Access: Wed Sep 22 16:24:16 1999(00000.00:10:44)
Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16)
Change:Mon Sep 20 10:22:44 1999(00002.06:12:16)
编辑/etc/inetd.conf禁止以下服务:
ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger,
auth, etc. 除非你真的想用它。
特别是禁止那些r命令.如果你用ssh/scp,那么你也可以禁止掉telnet/ftp。
 
为了使改变生效,运行#killall -HUP inetd
你也可以运行#chattr +i /etc/inetd.conf使该文件具有不可更改属性。只有root
才能解开,用命令
#chattr -i /etc/inetd.conf
 
7. TCP_WRAPPERS
默认地,Redhat Linux允许所有的请求,用TCP_WRAPPERS增强你的站点的安全性是举手
之劳,你可以放入
"ALL: ALL"到/etc/hosts.deny中禁止所有的请求,然后放那些明确允许的请求到
/etc/hosts.allow中,如:
sshd: 192.168.1.10/255.255.255.0 gate.openarch.com
对IP地址192.168.1.10和主机名gate.openarch.com,允许通过ssh连接。
配置完了之后,用tcpdchk检查
 
[root@deep]# tcpdchk
tcpchk是TCP_Wrapper配置检查工具,它检查你的tcp wrapper配置并报告所有发现的
潜在/存在的问题。
 
8. 别名文件aliases
编辑别名文件/etc/aliases(也可能是/etc/mail/aliases),移走/注释掉下面的行。
 
# Basic system aliases -- these MUST be present.
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts.
bin: root
daemon: root
#games: root ? remove or comment out.
#ingres: root ? remove or comment out.
nobody: root
#system: root ? remove or comment out.
#toor: root ? remove or comment out.
#uucp: root ? remove or comment out.
# Well-known aliases.
#manager: root ? remove or comment out.
#dumper: root ? remove or comment out.
#operator: root ? remove or comment out.
# trap decode to catch security attacks
#decode: root
# Person who should get root's mail
#root: marc
最后更新后不要忘记运行/usr/bin/newaliases,使改变生效。
 
9.阻止你的系统响应任何从外部/内部来的ping请求。
既然没有人能ping通你的机器并收到响应,你可以大大增强你的站点的安全性。
你可以加下面的一行命令到/etc/rc.d/rc.local,以使每次启动后自动运行。
 
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
 
10. 不要显示出操作系统和版本信息。
如果你希望某个人远程登录到你的服务器时不要显示操作系统和版本信息,你能改变
/etc/inetd.conf中的一行象下面这样:
 
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
 
加-h标志在最后使得telnet后台不要显示系统信息,而仅仅显示login:
 
11.The /etc/host.conf file
编辑host.conf文件(vi /etc/host.conf)且加下面的行:
 
# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We don't have machines with multiple IP addresses on the same card
(like virtual server,IP Aliasing).
multi off
# Check for IP address spoofing.
nospoof on
IP Spoofing: IP-Spoofing is a security exploit that works by tricking
computers in a trust relationship that you are someone that you really aren't.
 
12. The /etc/securetty file
该文件指定了允许root登录的tty设备,/etc/securetty被/bin/login程序读取,它的
格式是一行一个被允许的名字列表,如你可以编辑/etc/securetty且注释出下面的行。
tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
-意味着root仅仅被允许在tty1终端登录。
 
13. 特别的帐号
禁止所有默认的被操作系统本身启动的且不需要的帐号,当你第一次装上系统时就应该
做此检查,Linux提供了各种帐号,你可能不需要,如果你不需要这个帐号,就移走它,
你有的帐号越多,就越容易受到攻击。
为删除你系统上的用户,用下面的命令:
[root@deep]# userdel username
为删除你系统上的组用户帐号,用下面的命令:
[root@deep]# groupdel username
在终端上打入下面的命令删掉下面的用户。
[root@deep]# userdel adm
[root@deep]# userdel lp
[root@deep]# userdel sync
[root@deep]# userdel shutdown
[root@deep]# userdel halt
[root@deep]# userdel mail
如果你不用sendmail服务器,procmail.mailx,就删除这个帐号。
[root@deep]# userdel news
[root@deep]# userdel uucp
[root@deep]# userdel operator
[root@deep]# userdel games
如果你不用X windows 服务器,就删掉这个帐号。
[root@deep]# userdel gopher
[root@deep]# userdel ftp
如果你不允许匿名FTP,就删掉这个用户帐号。
===
打入下面的命令删除组帐号
[root@deep]# groupdel adm
[root@deep]# groupdel lp
[root@deep]# groupdel mail
如不用Sendmail服务器,删除这个组帐号
[root@deep]# groupdel news
[root@deep]# groupdel uucp
[root@deep]# groupdel games
如你不用X Windows,删除这个组帐号
[root@deep]# groupdel dip
[root@deep]# groupdel pppusers
[root@deep]# groupdel popusers
如果你不用POP服务器,删除这个组帐号
[root@deep]# groupdel slipusers
====
用下面的命令加需要的用户帐号
[root@deep]# useradd username
用下面的命令改变用户口令
[root@deep]# passwd username
 
用chattr命令给下面的文件加上不可更改属性。
[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow
 
14. 阻止任何人su作为root.
如果你不想任何人能够su作为root,你能编辑/etc/pam.d/su加下面的行:
 
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=isd
 
意味着仅仅isd组的用户可以su作为root.
然后,如果你希望用户admin能su作为root.就运行下面的命令。
 
[root@deep]# usermod -G10 admin
 
16. 资源限制
对你的系统上所有的用户设置资源限制可以防止DoS类型攻击(denial of service attacks)
如最大进程数,内存数量等。例如,对所有用户的限制象下面这样:
编辑/etc/security/limits.con加:
 
* hard core 0
* hard rss 5000
* hard nproc 20
你也必须编辑/etc/pam.d/login文件加/检查这一行的存在。
 
session required /lib/security/pam_limits.so
 
上面的命令禁止core files"core 0",限制进程数为"nproc 50",且限制内存使用
为5M"rss 5000"。
 
17. The /etc/lilo.conf file
 
a) Add: restricted
加这一行到每一个引导映像下面,就这表明如果你引导时用(linux single),则需要一个password.
 
b) Add: password=some_password
当与restricted联合用,且正常引导时,需要用户输入密码,你也要确保lilo.conf
文件不能被不属于root的用户可读,也免看到密码明文。下面是例子:
编辑/etc/lilo.conf加:
====
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
Default=linux
restricted ? add this line.
password=some_password ? add this line.
image=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-10.img
root=/dev/sda6
read-only
[root@deep]# chmod 600 /etc/lilo.conf (不再能被其他用户可读).
[root@deep]# /sbin/lilo -v (更新lilo配置).
[root@deep]# chattr +i /etc/lilo.conf(阻止该文件被修改)
 
18. 禁止 Control-Alt-Delete 重启动机器命令
 
[root@deep]# vi /etc/inittab
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
To
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
[root@deep]# /sbin/init q
 
19. 重新设置/etc/rc.d/init.d/目录下所有文件的许可权限
[root@deep]# chmod -R 700 /etc/rc.d/init.d/*
仅仅root可以读,写,执行上述所有script file.
 
20. The /etc/rc.d/rc.local file
默认地,当你login到linux server时,它告诉你linux版本名,内核版本名和服务器
主机名。它给了你太多的信息,如果你就希望得到提示login: ,编辑
/etc/rc.d/rc.local放#在下面的行前面:
--
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue
--
然后,做下面的事情:
[root@deep]# rm -f /etc/issue
[root@deep]# rm -f /etc/issue.net
[root@deep]# touch /etc/issue
[root@deep]# touch /etc/issue.net
 
21. 被root拥有的程序的位。
移走那些被root拥有程序的s位标志,当然有些程序需要这个,用命令'chmod a-s'完成这个。
注:前面带(*)号的那些程序一般不需要拥有s位标志。
 
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls –lg {} \;
-rwsr-xr-x 1 root root 33120 Mar 21 1999 /usr/bin/at
*-rwsr-xr-x 1 root root 30560 Apr 15 20:03 /usr/bin/chage
*-rwsr-xr-x 1 root root 29492 Apr 15 20:03 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 3208 Mar 22 1999 /usr/bin/disable-paste
-rwxr-sr-x 1 root man 32320 Apr 9 1999 /usr/bin/man
-r-s--x--x 1 root root 10704 Apr 14 17:21 /usr/bin/passwd
-rws--x--x 2 root root 517916 Apr 6 1999 /usr/bin/suidperl
-rws--x--x 2 root root 517916 Apr 6 1999 /usr/bin/sperl5.00503
-rwxr-sr-x 1 root mail 11432 Apr 6 1999 /usr/bin/lockfile
-rwsr-sr-x 1 root mail 64468 Apr 6 1999 /usr/bin/procmail
-rwsr-xr-x 1 root root 21848 Aug 27 11:06 /usr/bin/crontab
-rwxr-sr-x 1 root slocate 15032 Apr 19 14:55 /usr/bin/slocate
*-r-xr-sr-x 1 root tty 6212 Apr 17 11:29 /usr/bin/wall
*-rws--x--x 1 root root 14088 Apr 17 12:57 /usr/bin/chfn
*-rws--x--x 1 root root 13800 Apr 17 12:57 /usr/bin/chsh
*-rws--x--x 1 root root 5576 Apr 17 12:57 /usr/bin/newgrp
*-rwxr-sr-x 1 root tty 8392 Apr 17 12:57 /usr/bin/write
-rwsr-x--- 1 root squid 14076 Oct 7 14:48 /usr/lib/squid/pinger
-rwxr-sr-x 1 root utmp 15587 Jun 9 09:30 /usr/sbin/utempter
*-rwsr-xr-x 1 root root 5736 Apr 19 15:39 /usr/sbin/usernetctl
*-rwsr-xr-x 1 root bin 16488 Jul 6 09:35 /usr/sbin/traceroute
-rwsr-sr-x 1 root root 299364 Apr 19 16:38 /usr/sbin/sendmail
-rwsr-xr-x 1 root root 34131 Apr 16 18:49 /usr/libexec/pt_chown
-rwsr-xr-x 1 root root 13208 Apr 13 14:58 /bin/su
*-rwsr-xr-x 1 root root 52788 Apr 17 15:16 /bin/mount
*-rwsr-xr-x 1 root root 26508 Apr 17 20:26 /bin/umount
*-rwsr-xr-x 1 root root 17652 Jul 6 09:33 /bin/ping
-rwsr-xr-x 1 root root 20164 Apr 17 12:57 /bin/login
*-rwxr-sr-x 1 root root 3860 Apr 19 15:39 /sbin/netreport
-r-sr-xr-x 1 root root 46472 Apr 17 16:26 /sbin/pwdb_chkpwd
[root@deep]# chmod a-s /usr/bin/chage
[root@deep]# chmod a-s /usr/bin/gpasswd
[root@deep]# chmod a-s /usr/bin/wall
[root@deep]# chmod a-s /usr/bin/chfn
[root@deep]# chmod a-s /usr/bin/chsh
[root@deep]# chmod a-s /usr/bin/newgrp
[root@deep]# chmod a-s /usr/bin/write
[root@deep]# chmod a-s /usr/sbin/usernetctl
[root@deep]# chmod a-s /usr/sbin/traceroute
[root@deep]# chmod a-s /bin/mount
[root@deep]# chmod a-s /bin/umount
[root@deep]# chmod a-s /bin/ping
[root@deep]# chmod a-s /sbin/netreport
 
你可以用下面的命令查找所有带s位标志的程序:
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
> suid-sgid-results
把结果输出到文件suid-sgid-results中。
 
为了查找所有可写的文件和目录,用下面的命令:
[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \; > ww-files-results
[root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \; > ww-directories-results
 
用下面的命令查找没有拥有者的文件:
[root@deep]# find / -nouser -o -nogroup > unowed-results
 
用下面的命令查找所有的.rhosts文件:
[root@deep]# find /home -name .rhosts > rhost-results
 
---------------------------------------------------------------------------------------------------------------------------------------------------
 
Linux中增加软路由的两种方法
 
第一种:
 
route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.254 dev eth0 /* 增加一条网络172.16.6.0/24 经过172.16.2.254 eth0 */
/* -net增加网络 -host增加主机 netmask 子网掩码 gw 网关 dev 装置,设备,这里是你的网卡名*/
route del gw 172.16.2.254 /* 删除默认网关172.16.2.254 */
route del -net 172.16.86.0/24 /* 删除默认网络172.16.86.0 */
route /* 显示当前路由表 */
常用的是这种方式,但有时你在删除或一条软路由时会不起作用,会有什么提示:
SIOCADDRT: 無法接觸網路
所以这时用如下的这种方法就可以了
 
第二种:
实现的功能和上面的一样
ip route add 172.16.6.0/24 via 172.16.2.254 dev eth0
ip route del gw 172.16.2.254
ip route del 172.16.6.0/24 dev eth0
ip route
 
---------------------------------------------------------------------------------------------------------------------------------------------------
ip -s link list
 
---------------------------------------------------------------------------------------------------------------------------------------------------
 
tgz是压缩格式,用tar zxvf *.tgz先解压缩然后才能安装
 
---------------------------------------------------------------------------------------------------------------------------------------------------
 
同步时间:
/usr/sbin/ntpdate -s -t 5 192.168.3.119;/usr/sbin/hwclock --systohc
 
---------------------------------------------------------------------------------------------------------------------------------------------------
 

linux下如何解压.iso文件
 
mount -o loop 指定目录 /mnt/cdrom       --- 挂载
--------------------------------------------------------------------------------------------------------------------------------
 

介绍一个据说compile success rate 达到 99%的编译方法
 
主要分两步
 
1.技术阶段
cd /usr/src/linux-2.4.x
make mrproper (maybe no)
 
edit Makefile file
change "EXTRAVERSION=" 改成有你特色的文字, 比如:
EXTRAVERSION=10me
 
make menuconfig or make xconfig
make clean
make modules
make modules_install
make install
 
-----------------------------------------------------------------------------------------------------
#cti_ts_acd_backup -> hostname
#127.0.0.1              localhost localhost.localdomain localhost  -> Can not send.
127.0.0.1              cti_ts_acd_backup localhost.localdomain localhost
192.168.121.3       cti_ts_acd_backup.hkbn.com.hk
 
-----------------------------------------------------------------------------------------------------
 
cat /etc/xinetd.d/telnet(ftp)
# default: on
# description: The telnet server serves telnet sessions; it uses \
#       unencrypted username/password pairs for authentication.
service telnet
{
        disable = no
        only_from       = 192.168.108.2 192.168.109.202 192.168.110.67 192.168.110.77 192.168.110.68 192.168.110.71 192.168.110.70 192.168.110.66 192.168.110.74
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
}
 
-----------------------------------------------------------------------------------------------------
生成10M文件
dd if=/dev/zero of=/home/10m.log bs=1024k count=10
 
-----------------------------------------------------------------------------------------------------
Upgrade linux2.6.*
 
###下载module-init-tools-3.1.tar.bz2
./configure --prefix=/
make moveold;make all install
./generate-modprobe.conf /etc/modprobe.conf
###下载新的mkinitrd
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.0.tar.gz
tar zvxf linux-2.6.0.tar.gz
make mrproper
###make mrproper 是清理代码树的动作,保证源代码是干净的
make menuconfig / make xconfig
make clean
4.编译
make modules
5 安装
make modules_install
make install
 
-----------------------------------------------------------------------------------------------------
 
格式化软盘
 
1. 格式化
fdformat /dev/fd0H1440
2. 作档案系统
mkfs -t ext2 /dev/fd0
 
-------------------------------------------------------------------
删除文件中的空格
sed /^[[:space:]]*$/d mafai.txt > google.txt
-------------------------------------------------------------------
替换文件中的"号
sed 's/"//g' google.txt
-------------------------------------------------------------------
[root@woson root]# cat a
10001|49|29
10002|454|sfd
10003|88a|34
10004|aaab|111
 
[root@woson root]# cat b
10002
10006
10008
10009
 
[root@woson root]# awk -F \| 'ARGIND==1{z[$0]} ARGIND==2&&!($1 in z){print $0}' b a
 
10001|49|29
10003|88a|34
10004|aaab|111
 
--------------------------------------------------------------
cat a|awk -F/ '{print $6}'> filename
 
--------------------------------------------------------------
 
/mnt/181/image/C00001/1535/153564/153564.DAS
只取153564.DAS
cat 181.log |awk -F/ '{print $8}'
只取153564
cat 181.log |awk -F/ '{print $7}'
--------------------------------------------------------------
 
去除^M
tr -d "\015" < filename
 
--------------------------------------------------------------
 
两行合一
awk '{printf(NR%2!=0)?$0"":$0" \n"}'
 
--------------------------------------------------------------
 
为什么用> filename 不能清空文件?
cat /dev/null >filename
 
--------------------------------------------------------------
 
vi中数据替换问题
:1,$s/old/new/g   或者  :%s/old/new/g
 
--------------------------------------------------------------
 
1. 進入 screen
screen
 
2. 切換最近兩個 window
Ctrl A + A
 
3. 切換到第 n window
Ctrl A + n (n為數字)
 
4. 將 screen 丟到背景
Ctrl A + D
 
5. 將背景的 screen 撿回來
screen -r
 
6. 查看目前有無 screen 在背景
screen -ls
 

------------------------------------------------------------------
修改apache无法完整显示路径的问题。
 
IndexOptions FancyIndexing NameWidth=* VersionSort
 
------------------------------------------------------------------
 
Linux下如何设置文件夹的大小
 
# dd if=/dev/zero of=/tmp/test.img bs=1M count=100
# mkfs /tmp/test.img
# mount -o loop /tmp/test.img /mnt/test
 
-------------------------------------------------------------------
将tar.gz文件解压到指定目录
tar zxvf  kleandisk-2.1.tar.gz -C /home/
 
------------------------------------------------------------------
 
在linux中无法发送邮件至hkbn的邮件地址
echo "hkbn.com.hk     smtp:mail.hkbn.com.hk" >> /etc/mail/mailertable
makemap hash mailertable.db < mailertable
/etc/init.d/sendmail restart
 
------------------------------------------------------------------------------------------------------------------------------------
ie4linux
 
Requirements
Ok, it is obvious, but we need to say: you need Wine installed!
cabextract
Use apt-get, yum, synaptic, emerge etc to install them. Or you can go to their home pages: Wine, cabextract.
 
Using IEs4Linux
Download IEs4Linux
Open the tar.gz file. You will find a program ies4linux there. Just run it.
You will be asked to choose an installation type. Choose the number, hit enter and go take a nap. If you choose to install all three IEs versions, you have to wait ~250MB to be downloaded. When you come back, everything will be installed for you!
Now, you can type ie6, ie55 or ie5 to open your new IEs!
 
------------------------------------------------------------------------------------------------------------------------------------
 
将文件中的大写字母转换成小写字母
cat leader.log |awk '{print tolower($2)}'> leader2.log

没有评论: