悠悠秦淮

[2008年11月6日星期四]

人生若只如初见时[收藏]

0 评论

人生若只如初见,所有往事都化为红尘一笑.只留下初见时的惊艳、倾情。忘却也许有过的背叛、伤怀、无奈和悲痛。这是何等美妙的人生境界。

时光匆匆,我们已经回不到过去,也许曾经一见倾心,但是再见之时,也许会是伤心之时。若是如此,不如初见时的那份感觉……

"初见惊艳,再见依然",在我看来,这只是一种美好的愿望。初见,惊艳。蓦然回首,曾经沧海。只怕早已换了人间。

"人生若只如初见,何事秋风悲画扇?等闲变却故人心,却道故人心易变。骊山语罢清宵半,夜雨霖铃终不怨。何如薄幸锦衣儿,比翼连枝当日愿。"纳兰长于情深于情,他的词清新婉约,可以直抒胸臆,给人很深的人生感悟。

是的,人生若只如初见那该多好,每一个人当最初和你相遇,那种美好的感觉一直就象春天初放的花,那种温馨、那种自然、那种真诚、那种回忆,因此就一直弥漫在了你的生命中。为什么在人的交往中会有误会、费解、猜测和非议呢?只有淡淡的如水的情怀不就足够了吗?就象从未谋面的网友,每次在网上遇到时候互相打个招呼,心中存有彼此的牵挂,不也是一件很美的事情吗?

我想君子之交淡如水也就是这个道理吧?

再读席幕容的《初相遇》,她说:美丽的梦和美丽的诗一样,都是可遇而不可求的,常常在最没能料到的时刻里出现。

我喜欢那样的梦,在梦里,一切都可以重新开始,一切都可以慢慢解释,心里甚至还能感觉到,所有被浪费的时光竟然都能重回时的狂喜与感激。胸怀中满溢着幸福,只因你就在我眼前,对我微笑,一如当年。

我真喜欢那样的梦,明明知道你已为我跋涉千里,却又觉得芳草鲜美,落英缤纷,好像你我才初初相遇。

由此看来,每个人都有着一种初遇情结,真的就象一杯清水一样清纯透明。而诗人给它以诗意的注释,让人感觉到初相遇的美丽、温馨和浪漫。生活中常常有这样的情景,初见后的分手,有如曾经挥手的云彩,也似轻轻告别的康桥……

最美的在心不在远处。曾经,初相遇是怎样的一种情怀?人生若只如初见,岂不是人生最好的写照吗?

也许生活就是这样的,有人说的对,得到了往往就不会去珍惜。得不到才是一种境界。或者只如初见,那种淡淡的情怀倒是让人释怀、让人坦然、让人心安。一句心灵的问候,足以让你一生难忘,我想人生这个东西,淡然一点往往会是清风明月,太过执着,则就是迷惘了,因此我情愿对于友情、恩怨、功过、得失、钱财……都看的再淡一点,情愿那初见的情节永远留在自己的梦里。

林清玄的《法圆师妹》,他说:"每个人的命运其实和荔枝花一样,有些人天生就没有花瓣的,只是默默的开花,默默的结果,在季节的推移中,一株荔枝没有选择的结出它的果实,而一个人也没有能力选择自己的道路吧!"

"有的心情你不会明白的,有时候过了五分钟,心情就完全不同了,生命的很多事,你错过一小时,很可能就错过一生了。那时候我只是做了,并不确知些道理,经过这些年,我才明白了,就象今天一样,你住在这个旅馆,正好是我服务的地方,如果你不叫咖啡,或者领班不叫我送,或者我转身时你没有叫我,我们都不能重逢,人生就是这样"。

人生真的就是这个样子吗?我不得而知。

人生若只如初见,优伤的美丽只能定格在回忆中。也许哪天转身而去,留下一个美丽的远去背影。完美的弧线,会诉说着对昨日的依恋。也许,在我们认识的人中,有过误会,有过得失,你就会想起初见时的美丽。或者,那天在某个特定的地方,故地重游,突然发现多年未见的你,一下子就回到了初见的情景,初相遇,那是怎样一种让人难以忘怀的感情呢?!

初见惊艳,再见依然。但愿再次见到你的时候,你依然那么美丽如初。

今夜春风微送,把我的心扉吹动,多少尘封的往事都清晰地留在我心中,流淌在我的梦里。

人生如此,浮生如斯,情生情死,乃情之至。不是吗?

我记得了这样一句话:有情不必终老,暗香浮动恰好,无情未必就是决绝,我只要你记着:初见时彼此的微笑……
......
显示全文...

[2008年6月6日星期五]

端午节去阳朔散散心

0 评论

从3月辞职,然后两个月没上班,直到现在上班一个多月了,过得一直很压抑,一个人,想找个说话都没有。为自己找个借口,出去玩一下吧。
在网络上找到一堆同行者,50多人,应该算是浩浩荡荡了吧,6月6号晚上8点出发,12号早上4点左右回家。准备充分,相机充满电,一定要痛快玩一通,色一通!

......
显示全文...

[2008年5月1日星期四]

[LINUX]查看系统版本信息的命令

0 评论

[LINUX]查看系统版本信息的命令
几种查看linux版本信息的方法:
1. uname -a
2. cat /proc/version
3. cat /etc/issue
4. lsb_release -a

详解 lsb_release -a

登录到服务器执行 lsb_release -a ,即可列出所有版本信息,例如:
1. [root@3.5.5Biz-46 ~]# lsb_release -a
2. LSB Version: 1.3
3. Distributor ID: RedHatEnterpriseAS
4. Description: Red Hat Enterprise Linux AS release 4 (Nahant Update 1)
5. Release: 4
6. Codename: NahantUpdate1
7. [root@3.5.5Biz-46 ~]#
这个命令适用于所有的linux,包括Redhat、SuSE、Debian等发行版。

......
显示全文...

[2008年4月24日星期四]

linux基础-查找命令

0 评论

find命令

一、原理

功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。

  语法:find 起始目录 寻找条件 操作

  说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。

  该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为:

  (1)and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找条件才算满足。例如:

  $ find –name ’tmp’ –xtype c -user ’inin’

  该命令寻找三个给定条件都满足的所有文件。

  (2)or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足。例如:

  $ find –name ’tmp’ –o –name ’mina*’
 
  该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。

  (3)not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。例如:

  $ find ! –name ’tmp’

  该命令查询文件名不是’tmp’的所有文件。

  需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“”来去除括号的意义。

  例:$ find (–name ’tmp’ –xtype c -user ’inin’ )

  寻找条件有以下选项:

  首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则:

  +20 表示20以后(21,22,23等)

  -20 表示20以前(19,18,17等)

  20 表示正好是20

  1. 以名称和文件属性查找。

  - name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。

  - lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、[ ]。

  -gid n 查找属于ID号为n的用户组的所有文件。

  -uid n 查找属于ID号为n的用户的所有文件。

  -group ’字串’ 查找属于用户组名为所给字串的所有的文件。

  -user ’字串’ 查找属于用户名为所给字串的所有的文件。

  -empty 查找大小为0的目录或文件。

  -path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。

  -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。

  -size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。

  -type x 查找类型为x的文件,x为下列字符之一:

  b 块设备文件

  c 字符设备文件

  d 目录文件

  p 命名管道(FIFO)

  f 普通文件

  l 符号链接文件(symbolic links)

  s socket文件

  -xtype x 与-type基本相同,但只查找符号链接文件。

  2. 以时间为条件查找

  - amin n 查找n分钟以前被访问过的所有文件。

  - atime n 查找n天以前被访问过的所有文件。

  - cmin n 查找n分钟以前文件状态被修改过的所有文件。

  - ctime n 查找n天以前文件状态被修改过的所有文件。

  - mmin n 查找n分钟以前文件内容被修改过的所有文件。

  - mtime n 查找n天以前文件内容被修改过的所有文件。

  3. 可执行的操作

  - exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ ;”结束。

  - ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。

  - ls 详细列出所找到的所有文件。

  - fprintf 文件名 将找到的文件名写入指定文件。

  - print 在标准输出设备上显示查找出的文件名。

  - printf 格式 格式的写法请参考有关C语言的书。

  例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。

  $ find . - name ‘main*’ - exec more {} ;

  例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。

  $ find . (- name a.out - o - name ‘*.o’)

  > - atime +7 - exec rm {} ;

  说明如下:

  命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。(和)表示括号(),其中的“”称为转义 符。之所以这样写是由于对Shell而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。“- name a.out”是指要查找名为a.out的文件;“- name ‘*.o’”是指要查找所有名字以 .o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件,find在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前(条件-atime +7),若是,则对该文件执行命令rm(- exec rm{ };)。其中{ }代表当前查到的符合条件的文件名,;则是语法所要求的。上述命令中第一行的最后一个是续行符。当命令太长而在一行写不下时,可输入一个,之后系统将显示 一个>,指示用户继续输入命令。

  locate命令

  locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。

  该命令的一般形式为:

  locate 相关字

  例如:查找相关字issue

  $ locate issue

  /etc/issue

  /etc/issue.net

  /usr/man/man5/issue.5

  /usr/man/man5/issue.net.5

二、经典实例

1、查找目录
find -/home -type d -name 'quejinlong*' //从/home开始查找目录名包含quejinlong的目录
2、改变当前目录下所有文件的所有权
find . -exec chown OWNER.[GROUP] {} \; (Solaris平台)
    find . -exec chown -R OWNER.[GROUP] {} \; (Linux平台)



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=799004



......
显示全文...

[2008年4月23日星期三]

转载__复制服务器的监控脚本

0 评论

原文地址:http://www.chinaunix.net/jh/21/1030139.html
http://www.chinaunix.net 作者:unixer123 发表于:2008-01-09 17:44:39


写了一个复制服务器的监控脚本, 放在crontab中, 首先监控repserver,rsm是否正常运行,如果down掉, 则重新启动进程
否则, 继续执行admin who_is_down语句, 将输出结果放到一个文件中, 逐行分析时候是否存在指定的复制关系, 有的话
则形成resume connection to "复制关系“的语句, 然后执行此语句。
#!/bin/ksh

HOME_DIR=/export/home/sybaserep
LD_LIBRARY_PATH=/export/home/sybaserep/OCS-12_5/lib:/export/home/sybaserep/OCS-12_5/lib3p:
export HOME_DIR LD_LIBRARY_PATH

PROCESS_LIST=$HOME_DIR/script/process_list
LOG=$HOME_DIR/script/log
TMPFILE=$HOME_DIR/script/tmpfile
REP_CONN_LIST=$HOME_DIR/script/rep_conn_lst

DOWN="NO"

while read LINE
do
ps -ef | grep `echo $LINE | awk '{print $1}'` | grep -v grep
if [ "$?" = 0 ]
then
DOWN = "YES"
process_name=`echo $LINE | awk '{print $1}'`
echo "$process_name failed at `date`" >> $LOG
start_process=`echo $LINE | awk '{print $2" "$3}'`
$start_process
echo "$process_name restart at `date`" >> $LOG
echo "--------------------------------" >> $LOG
sleep 60
fi
done < $PROCESS_LIST

if [ $DOWN = "YES" ]
then
exit 1
fi

eval $HOME_DIR/OCS-12_5/bin/isql -Usa -Pxxxxxxxx -Sxxxxxxxx -i$HOME_DIR/script/getdown.sql > $TMPFILE

while read REP_CONN
do
cat $TMPFILE | grep $REP_CONN
echo "cat" >> $LOG
if [ "$?" != 0 ]
then
sql="resume connection to $LINE"
echo $sql > $TMP_DIR/script/resume.sql
echo "go" >> $TMP_DIR/script/resume.sql
eval $HOME_DIR/OCS-12_5/bin/isql -Usa -Pxxxxxxxx -Sxxxxxxxx -i$HOME_DIR/script/resume.sql >> $LOG
sleep 30
fi
done < $REP_CONN_LIST

date >> $LOG

......
显示全文...

[2008年4月19日星期六]

编译mplayer Cannot find header either inttypes.h or bitypes.h

0 评论

编译mplayer rc2, configure 的时候出现以下error:

Checking for inttypes.h (required) … no
Checking for bitypes.h (inttypes.h predecessor) …
Error: Cannot find header either inttypes.h or bitypes.h (see
DOCS/HTML/en/faq.h

google了好久没有找到解决办法,感觉一定是缺了什么c的头文件,最终的解决办法

apt-get install libc6-dev

运行过程中安装了两个包:

libc6-dev

留下记录,以便后查

另外在加一个error:

Error: X11 support required for GUI compilation

解决:

sudo apt-get install libgtk2.0-dev

解决!
......
显示全文...

[2008年4月15日星期二]

RHEL笔记__USER&GROUP

0 评论

1. su 与su - 的区别
su user 切换到user的使用者
su - user 切换到user,并重新启动user的login shell,载入user的环境变数
2。
find out who you are:
whoami
find out what groups you belong to:
groups , id
find out who is logged in
users,who,w
login/reboot history:
last

......
显示全文...

困难要一次克服

0 评论

找工作我坚持一个原则:宁缺勿烂!不要感觉好久没有上班了就稀里糊涂找家公司做了,到时候做的不开心还是想出来,又回到原点!困难要一次克服!”

快两个月没有上班了,快闷死了,只是每天不停的看书。刚才一个好朋友给我发来这条信息,他说得很对,其实辞职时我就坚定了这个原则的,不然我现在已经在上班了。不知道后面的路还有多远,但是要坚持下去!
......
显示全文...

[2008年4月14日星期一]

sort用法

0 评论

实用的分类(s o r t)操作。
• uniq。
• join。
• cut。
• paste。
• split。


sort用法
s o r t命令选项很长,下面仅介绍各种选项。

选项
s o r t命令的一般格式为:

代码:
sort -cmu -o output_file [other options] +pos1 +pos2 input_files


下面简要介绍一下s o r t的参数:
引用:
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储s o r t结果的输出文件名。


其他选项有:
引用:
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。


保存输出
- o选项保存分类结果,然而也可以使用重定向方法保存。下面例子保存结果到r e s u l t s . o u t:
代码:
$sort video.txt >results.out


启动方式
缺省情况下, s o r t认为一个空格或一系列空格为分隔符。要加入其他方式分隔,使用- t选s o r t执行时,先查看是否为域分隔设置了- t选项,如果设置了,则使用它来将记录分隔成域0、域1等等
;如果未设置,用空格代替。缺省时s o r t将整个行排序,指定域号的情况例外。

下面是文件v i d e o . t x t的清单,包含了上个季度家电商场的租金情况。各域为:(1)名称,(2)供货区代码,(3)本季度租金,(4)本年租金。域分隔符为冒号。为此对此例需使用‘ - t'选项。文件如下:
代码:
$ cat video.txt
Boys in Company C:HK:192:2192
Alien:HK:119:1982
The Hill:KL:63:2972
Aliens:HK:532:4892
Star Wars:HK:301:4102
A Few Good Men:KL:445:5851
Toy Story:HK:239:3972


sort对域的参照方式
关于s o r t的一个重要事实是它参照第一个域作为域0,域1是第二个域,等等。s o r t也可以使用整行作为分类依据。

文件是否已分类
怎样分辨文件是否已分类?如果只有3 0行,看看就知道了,但如果是4 0 0行呢,使用s o r t - c通知s o r t文件是否按某种顺序分类。

代码:
$ sort -c video.txt
sort: video.txt:2: disorder: Alien:HK:119:1982

结果显示未分类,

现在将之分类,再试一次:
代码:
$ sort -t: video.txt >video2.txt
$ sort -c video2.txt
$

返回提示符表明已分类。然而如果测试成功,返回一个信息行会更好。


基本sort
最基本的s o r t方式为sort filename,按第一域进行分类(分类键0)。实际上读文件时s o r t操作将行中各域进行比较,这里返回基于第一域s o r t的结果
代码:
$ sort -t: video.txt
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2192
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972


sort分类求逆
如果要逆向s o r t结果,使用- r选项。在通读大的注册文件时,使用逆向s o r t很方便。下面是按域0分类的逆向结果。
代码:
$ sort -t: -r video.txt
Toy Story:HK:239:3972
The Hill:KL:63:2972
Star Wars:HK:301:4102
Boys in Company C:HK:192:2192
Aliens:HK:532:4892
Alien:HK:119:1982
A Few Good Men:KL:445:5851


按指定域分类
有时需要只按第2域(分类键1)分类。这里为重排报文中供应区代码,使用t 1,意义为按分类键1分类。下面的例子中,所有供应区代码按分类键1分类;注意分类键2和3对应各域也被分类。
代码:
$ sort -t: +1 video.txt
Alien:HK:119:1982
Boys in Company C:HK:192:2192
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
The Hill:KL:63:2972

前几个第二域都是HK,第三域:119,192,301,489,532,63,按第一个数字分了,因此必须指定多域及数值域

数值域分类
依此类推,要按第三分类键分类,使用t 3。但是因为这是数值域,即为数值分类,可以使用- n选项。下面例子为按年租金分类命令及结果:
代码:
$ sort -t: +3n video.txt
Alien:HK:119:1982
Boys in Company C:HK:192:2192
The Hill:KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851


如果不指定n,如下
代码:
$ sort -t: +2 video.txt
Alien:HK:119:1982
Boys in Company C:HK:192:2192
Toy Story:HK:239:3972
Star Wars:HK:301:4102
A Few Good Men:KL:445:5851
Aliens:HK:532:4892
The Hill:KL:63:2972

o r t只查看第3域每个数值的第一个数,并按其分类,然后再按第二个数依次下去。
代码:
$ sort -t: +2n video.txt
The Hill:KL:63:2972
Alien:HK:119:1982
Boys in Company C:HK:192:2192
Toy Story:HK:239:3972
Star Wars:HK:301:4102
A Few Good Men:KL:445:5851
Aliens:HK:532:4892


数值域倒序:
代码:
$ sort -t: +2nr video.txt
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
Star Wars:HK:301:4102
Toy Story:HK:239:3972
Boys in Company C:HK:192:2192
Alien:HK:119:1982
The Hill:KL:63:2972


唯一性分类
有时,原文件中有重复行,这时可以使用- u选项进行唯一性(不重复)分类以去除重复行,本例中A l i e n有相同的两行。带重复行的文件如下,其中A l i e n插入了两次:
代码:
$ echo "Aliens:HK:532:4892" >> video.txt
$ cat video.txt
Boys in Company C:HK:192:2192
Alien:HK:119:1982
The Hill:KL:63:2972
Aliens:HK:532:4892
Star Wars:HK:301:4102
A Few Good Men:KL:445:5851
Toy Story:HK:239:3972
Aliens:HK:532:4892


使用- u选项去除重复行,不必加其他选项, s o r t会自动处理。
代码:
$ sort -u video.txt
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2192
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972


使用k的其他sort方法
s o r t还有另外一些方法指定分类键。可以指定k选项,第1域(分类键)以1开始。不要与前面相混淆。其他选项也可以使用k,主要用于指定分类域开始的字符数目。
使用- k 4,按年租金分类的次序。
代码:
$ sort -t: -k4 video.txt
A alien:HK:119:1982
Alien:HK:119:1982
Boys in Company C:HK:192:2192
A the Hill:KL:63:2972
The Hill:KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
Aliens:HK:532:4892
A Few Good Men:KL:445:5851


用k做分类键排序
可以指定分类键次序。先以第4域,再以第1域分类,命令为-k4 -k1,也可以反过来,以便在文件首行显示最高年租金,方法如下:
代码:
$ sort -t: -k4 -k1 video.txt
AAlien:HK:119:1982
Alien:HK:119:1982
Boys in Company C:HK:192:2192
The Hill:KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851


代码:
$ sort -t: -k4 -k1 -r video.txt
A Few Good Men:KL:445:5851
Aliens:HK:532:4892
Star Wars:HK:301:4102
Toy Story:HK:239:3972
The Hill:KL:63:2972
Boys in Company C:HK:192:2192
Alien:HK:119:1982
AAlien:HK:119:1982

这里-r是对第四域反排序?


代码:
$ sort -t: -k1 video.txt
AAlien:HK:119:1982
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2192
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972


代码:
$ sort -t: -k1 -k4 video.txt
AAlien:HK:119:1982
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2192
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972


代码:
$ sort -t: -k1 -k4 -r video.txt
Toy Story:HK:239:3972
The Hill:KL:63:2972
Star Wars:HK:301:4102
Boys in Company C:HK:192:2192
Aliens:HK:532:4892
Alien:HK:119:1982
A Few Good Men:KL:445:5851
AAlien:HK:119:1982

对第一域进行反排序?

换成第3域
代码:
$ sort -t: +2nr -k1 -r video.txt
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
Star Wars:HK:301:4102
Toy Story:HK:239:3972
Boys in Company C:HK:192:2192
Alien:HK:119:1982
AAlien:HK:119:1982
The Hill:KL:63:2972

对第三域进行倒序,再对第一域排序,最后把第一域倒序?

代码:
$ sort -t: +2nr -k1 video.txt
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
Star Wars:HK:301:4102
Toy Story:HK:239:3972
Boys in Company C:HK:192:2192
AAlien:HK:119:1982
Alien:HK:119:1982
The Hill:KL:63:2972


指定sort序列
可以指定分类键顺序,也可以使用- n选项指定不使用哪个分类键进行查询。看下面的s o r t命令:
代码:
$ sort +0 -2 +3 video.txt

该命令意即开始以域0分类,忽略域2,然后再使用域3分类。


pos用法
指定开始分类的域位置的另一种方法是使用如下格式:
代码:
sort +field_number.characters_in

意即从f i e l d _ n u m b e r开始分类,但是要在此域的第c h a r a c t e r s _ i n个字符开始。

如:
代码:
$ cat video.txt
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982
The Hill:KL223:63:2972
Aliens:HK11:532:4892
Star Wars:HK38:301:4102
A Few Good Men:KL87:445:5851
Toy Story:HK65:239:3972


要只使用供应区代码后缀部分将文件分类,其命令为+ 1 . 2,意即以第1域最左边第3个字符开始分类
代码:
$ sort -t: +1.2 video.txt
Aliens:HK11:532:4892
The Hill:KL223:63:2972
Star Wars:HK38:301:4102
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982
Toy Story:HK65:239:3972
A Few Good Men:KL87:445:5851


比较一下加n,呵呵,其实区码并不需要加n
代码:
$ sort -t: +1.2n video.txt
Aliens:HK11:532:4892
Star Wars:HK38:301:4102
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982
Toy Story:HK65:239:3972
A Few Good Men:KL87:445:5851


使用head和tail将输出分类
分类操作时,不一定要显示整个文件或一页以查看s o r t结果中的第一和最后一行。如果只显示最高年租金,按第4域分类- k 4并求逆,然后使用管道只显示s o r t输出的第一行,此命令为h e a d,可以指定查阅行数。如果只有第一行,则为head -1:

代码:
$ sort -t: -k4r video.txt
A Few Good Men:KL87:445:5851
Aliens:HK11:532:4892
Star Wars:HK38:301:4102
Toy Story:HK65:239:3972
The Hill:KL223:63:2972
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982


代码:
$ sort -t: -k4r video.txt | head -1
A Few Good Men:KL87:445:5851


代码:
$ sort -t: -k4r video.txt | head -2
A Few Good Men:KL87:445:5851
Aliens:HK11:532:4892


要查阅最低年租金,使用t a i l命令与h e a d命令刚好相反,它显示文件倒数几行。1为倒数一行,2为倒数两行等等。查阅最后一行为tail -1。结合上述的s o r t命令和t a i l命令显示最低年租金:
代码:
$ sort -t: -k4r video.txt | tail -1
Alien:HK57:119:1982


代码:
$ sort -t: -k4r video.txt | tail -2
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982


可以使用h e a d或t a i l查阅任何大的文本文件, h e a d用来查阅文件头,基本格式如下:
代码:
head [how_many_lines_to_display] file_name


Ta i l用来查阅文件尾,基本格式为:
代码:
tail [how_many_lines_to_display] file_name


如果使用h e a d或t a i l时想省略显示行数,缺省时显示1 0行。
要查阅文件前2 0行:
代码:
$ head -20 passwd


要查阅文件后10行:
代码:
$ tail -10 passwd


awk使用sort输出结果
对数据分类时,对s o r t结果加一点附加信息很有必要,对其他用户尤其如此。使用a w k可以轻松完成这一功能。比如说采用上面最低租金的例子,需要将s o r t结果管道输出到a w k,不要忘了用冒号作域分隔符,显示提示信息和实际数据。
代码:
$3}'
Worst rental Alien has been rented119


将两个分类文件合并
将文件合并前,它们必须已被分类。合并文件可用于事务处理和任何种类的修改操作。
下面这个例子,因为忘了把两个家电名称加入文件,它们被放在一个单独的文件里,现在将之并入一个文件。分类的合并格式为‘ sort -m sorted_file1 sorted_file2,下面是包含两个新家电名称的文件列表,它已经分类完毕:
代码:
$ cat video2.txt
Crimson Tide:134:2031
Die Hard:152:2981


使用-m +o。将这个文件并入已存在的分类文件v i d e o . s o r t,要以名称域进行分类,实际上没有必要加入+ o,但为了保险起见,还是加上的好。
代码:
$ sort -t: -m +0 video2.txt video.txt
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982
Crimson Tide:134:2031
Die Hard:152:2981
The Hill:KL223:63:2972
Aliens:HK11:532:4892
Star Wars:HK38:301:4102
A Few Good Men:KL87:445:5851
Toy Story:HK65:239:3972



系统sort
s o r t可以用来对/ e t c / p a s s w d文件中用户名进行分类。这里需要以第1域即注册用户名分类,然后管道输出结果到a w k,a w k打印第一域。
代码:
$1}'
adm
apache
bin
chenwy
daemon
desktop
.......


s o r t还可以用于d f命令,以递减顺序打印使用列。下面是一般d f输出。
代码:
$ df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 5162828 2289460 2611108 47% /
/dev/sda1 497829 13538 458589 3% /boot
none 99352 0 99352 0% /dev/shm


使用- b选项,忽略分类域前面的空格。使用域4(+ 4),即容量列将分类求逆,最后得出文件系统自由空间的清晰列表。
代码:
$ df | sort -b -r +4
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 5162828 2289460 2611108 47% /
/dev/sda1 497829 13538 458589 3% /boot
none 99352 0 99352 0% /dev/shm


在一个文本文件中存入所有I P地址的拷贝,这样查看本机I P地址更容易一些。有时如果管理员权限下,就需要将此文件分类。将I P地址按文件中某种数值次序分类时,需要指定域分隔符为句点。这里只需关心I P地址的最后一段。分类应从此域即域3开始,未分类文件如下:
代码:
$ vi iplist
$ cat iplist
193.132.80.123 dave tansley
193.132.80.23 HP printer 2nd floor
193.132.80.198 JJ. Peter's scanner
193.132.80.38 SPARE
193.132.80.78 P.Edron


分类后结果如下:
代码:
$ sort -t. +3n iplist
193.132.80.23 HP printer 2nd floor
193.132.80.38 SPARE
193.132.80.78 P.Edron
193.132.80.123 dave tansley
193.132.80.198 JJ. Peter's scanner


uniq用法
u n i q用来从一个文本文件中去除或禁止重复行。一般u n i q假定文件已分类,并且结果正确。
我们并不强制要求这样做,如果愿意,可以使用任何非排序文本,甚至是无规律行。
可以认为u n i q有点像s o r t命令中唯一性选项。对,在某种程度上讲正是如此,但两者有一个重要区别。s o r t的唯一性选项去除所有重复行,而u n i q命令并不这样做。重复行是什么?在u n i q里意即持续不断重复出现的行,中间不夹杂任何其他文本,现举例如下:
代码:
$ cat myfile.txt
May Day
May Day
May Day
Going DOwn
May Day
May Day.
May Day


u n i q将前三个May Day看作重复副本,但是因为第4行有不同的文本,故并不认为第五行持续的May Day为其副本。u n i q将保留这一行。
命令一般格式:
代码:
$uniq -u d c -f input-file out-file


引用:
其选项含义:
-u 只显示不重复行。
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。
一些系统不识别- f选项,这时替代使用- n。


创建文件m y f i l e . t x t,在此文件上运行u n i q命令。
代码:
$ uniq myfile.txt
May Day
Going DOwn
May Day
May Day.
May Day

注意第5行保留下来,其文本为最后一行May Day。如果运行sort -u,将只返回May Day和Going Down。

连续重复出现
使用- c选项显示行数,即每个重复行数目。本例中,行May Day重复出现三次
代码:
$ uniq -c myfile.txt
3 May Day
1 Going DOwn
1 May Day
1 May Day.
1 May Day


1. 不唯一
使用- d显示重复出现的不唯一行:
代码:
$ uniq -d myfile.txt
May Day


代码:
$ uniq -u myfile.txt
Going DOwn
May Day
May Day.


2. 对特定域进行测试
使用- n只测试一行一部分的唯一性。例如- 5意即测试第5域后各域唯一性。域从1开始记数。
如果忽略第1域,只测试第2域唯一性,使用- n2,下述文件包含一组数据,其中第2域代表组代码。

代码:
$ cat parts.txt
AK123 OPP Y13
DK122 OPP Y24
EK999 OPP M2


代码:
$ cat parts.txt
AK123 33 46 6u OPP ty yu
DK122 5h 67 y8 OPP ty yu
EK999 56 56 78 IIY ty yu


运行u n i q,将返回所有行。因为这个文件每一行都不同。
代码:
$ cat parts.txt
1 AK123 33 46 6u OPP ty yu
1 DK122 5h 67 y8 OPP ty yu
1 EK999 56 56 78 IIY ty yu


如果指定测试在第4域后,结果就会不同。u n i q会比较三个相同的O PP,因此将返回一行。
代码:
$ uniq -f4 -c parts.txt
2 AK123 33 46 6u OPP ty yu
1 EK999 56 56 78 IIY ty yu


指定第5域,即从第6域开始比较:
代码:
$ uniq -f5 -c parts.txt
3 AK123 33 46 6u OPP ty yu


如果‘- f'返回错误,替代-n使用:


join用法
j o i n用来将来自两个分类文本文件的行连在一起。
下面讲述j o i n工作方式。这里有两个文件f i l e 1和f i l e 2,当然已经分类。每个文件里都有一些元素与另一个文件相关。由于这种关系, j o i n将两个文件连在一起,这有点像修改一个主文件,使之包含两个文件里的共同元素。
文本文件中的域通常由空格或t a b键分隔,但如果愿意,可以指定其他的域分隔符。一些系统要求使用j o i n时文件域要少于2 0,为公平起见,如果域大于2 0,应使用D B M S系统。
为有效使用j o i n,需分别将输入文件分类。
其一般格式为:
代码:
join [options] input-file1 input-file2


引用:
选项:
an n 为一数字,用于连接时从文件n中显示不匹配行。例如, - a 1显示第一个文件的不匹配行,- a 2为从第二个文件中显示不匹配行。
o n.m n为文件号,m为域号。1 . 3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1 . 3,2 . 1。
j n m n为文件号,m为域号。使用其他域做连接域。
t 域分隔符。用来设置非空格或t a b键的域分隔符。例如,指定冒号做域分隔符- t:。


现有两个文本文件,其中一个包含名字和街道地址,称为n a m e . t x t,另一个是名字和城镇,
为t o w n . t x t。
代码:
$ cat names.txt
M.Golls 12 Hidd Rd
P.Heller The Acre
P.Willey 132 The Grove
T.Norms 84 Connaught Rd
K.Fletch 12 Woodlea


代码:
$ cat town.txt
M.Golls Norwich NRD
P.Willey Galashiels GDD
T.Norms Brandon BSL
K.Fletch Mildenhall MAF
K.Firt Mitryl Mdt


连接两个文件
连接两个文件,使得名字支持详细地址。例如M . G o l l s记录指出地址为12 Hidd Rd。连接域为域0—名字域。因为两个文件此域相同, j o i n将假定这是连接域:
代码:
$ join names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF

缺省j o i n删除或去除连接键的第二次重复出现,这里即为名字域。

1. 不匹配连接
如果一个文件与另一个文件没有匹配域时怎么办?这时j o i n不可以没有参数选项,经常指定两个文件的- a选项。下面的例子显示匹配及不匹配域。
代码:
$ join -a1 -a2 names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
K.Firt Mitryl Mdt


代码:
$ join -a1 names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF


2. 选择性连接
使用- o选项选择连接域。例如要创建一个文件仅包含人名及城镇, j o i n执行时需要指定显示域。方式如下:
使用1 . 1显示第一个文件第一个域,2 . 2显示第二个文件第二个域,其间用逗号分隔。命令为:
代码:
$ join -o 1.1,2.2 names.txt town.txt
M.Golls Norwich
P.Willey Galashiels
T.Norms Brandon
K.Fletch Mildenhall


使用-jn m进行其他域连接,例如用文件1域3和文件域2做连接键,命令为:
代码:
$ cat pers
P.Jones Office Runner ID897
S.Round UNIX admin ID666
L.Clip Personl Chief ID982


代码:
$ cat pers2
Dept2C ID897 6 years
Dept3S ID666 2 years
Dept5Z ID982 1 year


文件p e r s包括名字、工作性质和个人I D号。文件p e r s 2包括部门、个人I D号及工龄。连接应使用文件p e r s中域4,匹配文件p e r s 2中域2,命令及结果如下:
代码:
$ join -j1 4 -j2 2 pers pers2
ID897 P.Jones Office Runner Dept2C 6 years
ID666 S.Round UNIX admin Dept3S 2 years
ID982 L.Clip Personl Chief Dept5Z 1 year


$4}'文件名,观察其是否匹配假想域。


cut用法
c u t用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。

c u t一般格式为:
代码:
cut [options] file1 file2


引用:
下面介绍其可用选项:
-c list 指定剪切字符数。
-f field 指定剪切域数。
-d 指定与空格和t a b键不同的域分隔符。
- c用来指定剪切范围,如下所示:
- c 1,5-7 剪切第1个字符,然后是第5到第7个字符。
-c1-50 剪切前5 0个字符。
-f 格式与- c相同。
-f 1,5 剪切第1域,第5域。
- f 1,10-12 剪切第1域,第1 0域到第1 2域。


现在从' p e r s '文件中剪切文本。
代码:
$ cat pers
P.Jones Office Runner ID897
S.Round UNIX admin ID666
L.Clip Personl Chief ID982


使用域分隔符
文件中使用空格“ ”为域分隔符,故可用- d选项指定冒号,如- d " "。如果有意观察第3域,可以使用- f 3。要抽取I D域。可使用命令如下:
代码:
$ cut -d" " -f3 pers
Runner
admin
Chief


剪切指定域
c u t命令中剪切各域需用逗号分隔,如剪切域1和3,即名字和I D号,可以使用:
代码:
$ cut -d" " -f1,3 pers
P.Jones Runner
S.Round admin
L.Clip Chief


使用- c选项指定精确剪切数目
这种方法需确切知道开始及结束字符。通常我不用这种方法,除非在固定长度的域或文件名上。
当信息文件传送到本机时,查看部分文件名就可以识别文件来源。要得到这条信息需抽取文件名后三个字符。然后才决定将之存在哪个目录下。下面的例子显示文件名列表及相应c u t命令:
代码:
$ cat pers2
Dept2C ID897 6 years
Dept3S ID666 2 years
Dept5Z ID982 1 year


代码:
$ cut -c4-8,11-12 pers2
t2C I97
t3S I66
t5Z I82


要剪切谁正在使用系统的用户信息,方法如下:
代码:
$ who -u|cut -c1-8
root
root


paste用法
c u t用来从文本文件或标准输出中抽取数据列或者域,然后再用p a s t e可以将这些数据粘贴起来形成相关文件。粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。
p a s t e将按行将不同文件行信息放在一行。缺省情况下, p a s t e连接时,用空格或t a b键分隔新行中不同文本,除非指定- d选项,它将成为域分隔符。
p a s t e格式为;
代码:
paste -d -s -file1 file2


引用:
选项含义如下:
-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
- 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。


从前面的剪切中取得下述两个文件:
代码:
$ cut -d" " -f 2 pers2 >pas1
$ cat pas1
ID897
ID666
ID982


代码:
$ cut -d" " -f1 pers >pas2
$ cat pas2
P.Jones
S.Round
L.Clip


基本p a s t e命令将之粘贴成两列:
代码:
$ paste pas1 pas2
ID897 P.Jones
ID666 S.Round
ID982 L.Clip


指定列
通过交换文件名即可指定哪一列先粘:
代码:
$ paste pas2 pas1
P.Jones ID897
S.Round ID666
L.Clip ID982


使用不同的域分隔符
要创建不同于空格或t a b键的域分隔符,使用- d选项。下面的例子用冒号做域分隔符。
代码:
$ paste -d: pas2 pas1
P.Jones:ID897
S.Round:ID666
L.Clip:ID982


要合并两行,而不是按行粘贴,可以使用- s选项。下面的例子中,第一行粘贴为名字,第二行是I D号。
代码:
$ paste -s pas2 pas1
P.Jones S.Round L.Clip
ID897 ID666 ID982


paste命令管道输入
p a s t e命令还有一个很有用的选项( -)。意即对每一个( -),从标准输入中读一次数据。
使用空格作域分隔符,以一个4列格式显示目录列表。方法如下:
代码:
$ ls | paste -d" " - - - - -
1.bak 1.txt append.sed backll.ee change.sed
data.f data.txt delete_me_and_die dht dir1
......................

一行显示四个文件,以空格分开

代码:
$ ls | paste -d: - - - - -
1.bak:1.txt:append.sed:backll.ee:change.sed
data.f:data.txt:delete_me_and_die:dht:dir1
.....................

一行显示四个文件,以冒号:分开

也可以以一列格式显示输出:
代码:
$ ls | paste -d" " -
1.bak
1.txt
append.sed
backll.ee
..................
一行显示一个文件


split用法
s p l i t用来将大文件分割成小文件。有时文件越来越大,传送这些文件时,首先将其分割可能更容易。使用v i或其他工具诸如s o r t时,如果文件对于工作缓冲区太大,也会存在一些问题。
因此有时没有选择余地,必须将文件分割成小的碎片。
s p l i t命令一般格式:
代码:
split -output_file-size input-filename output-filename


这里o u t p u t - f i l e - s i z e指的是文本文件被分割的行数。
s p l i t查看文件时,o u t p u t - f i l e - s i z e选项指定将文件按每个最多1 0 0 0行分割。如果有个文件有38行,那么将分割成3个文件,分别有
10、10、10、8行。每个文件格式为x [ a a ]到x [ z z ],x为文件名首字母, [ a a ]、[ z z ]为文件名剩余部分顺序字符组合,下面的例子解释这一点。
如passwd有38行:
代码:
$ ls -l
总用量 8
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1


代码:
$ split -10 passwd
$ ls -l
总用量 24
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1
-rw-rw-r-- 1 sam sam 368 12月 4 11:24 xaa
-rw-rw-r-- 1 sam sam 474 12月 4 11:24 xab
-rw-rw-r-- 1 sam sam 495 12月 4 11:24 xac
-rw-rw-r-- 1 sam sam 312 12月 4 11:24 xad

生成了四个文件,前三个文件每个文件10行,最后一个8行,分割分的文件名自动产生,格式为x[a-a][z-z]

再如split有6行:
代码:
$ cat split1
this is line1
this is line2
this is line3
this is line4
this is line5
this is line6


按每个文件1行分割,命令为:
代码:
$ split -1 split1
$ ls -l
总用量 32
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaa
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xab
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xac
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xad
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xae
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaf

文件有6行,s p l i t按每个文件1行进行了分割,并按字母顺序命名文件。为进一步确信操作成功,观察一个新文件内容:
代码:
$ cat xaa
this is line1
$ cat xaf
this is line6


使用 head 和 tail 以块方式读取文本流

没实践过,有兴趣的自己试试

假定您想只处理文件的一部分,譬如头几行或后几行,那您该怎么做呢?请使用 head(它将头 10 行发送至标准输出)或 tail(它将后 10 行发送至标准输出)。

您可以通过使用 -n 选项改变这些命令发送至其标准输出的行数(当然,输出结果将随 XF86Config 文件的内容而不同):

清单 1. 将 XF86Config 中选定行数的内容发送至标准输出
代码:
$ head -n 4 /etc/X11/XF86Config


引用:
# File generated by anaconda.

# **********************************************************************

# Refer to the XF86Config(4/5) man page for details about the format of

# this file.



代码:
$ tail -n 4 /etc/X11/XF86Config


引用:
Modes "1600x1200"

ViewPort 0 0

EndSubsection

EndSection




如果您想让 head 或 tail 以字节而不是以行为单位 ,那该怎么办呢?您可以用 -c 选项代替 -n 选项。因此,要显示前 200 个字符,请使用
代码:
head -c 200 file

或者使用
代码:
tail -c 200 file

来显示后 200 个字符。如果数字后面跟有 b(表示块(block)),那么这个数字将被乘以 512。类似地,跟有 k(表示千字节(kilobyte))表示用 1024 去乘给定的数字,而跟有 m(表示兆字节(megabyte))表示用 1048576 字节去乘给定的数字。

请记住,
代码:
head file1 file2 file3


代码:
cat file1 file2 file3 | head

之间有重大差别。前者将打印每个文件指定行数的内容,不同文件的内容之间用头信息隔开,头信息以 ==> 后跟文件名开头。
后者将打印由 cat 命令后所列文件组成的输入流中指定行数的内容,但将把输入流作为单个文件对待。
可以使用 -q(表示静默(quiet))选项关闭文件名头信息。与 -q 相反的是 -v(表示详列(verbose))。

假如您要处理的文件在处理期间一直在发生变化(比如,当您让 head 或 tail 读取来自正在被另一个命令写入的文件的数据时,就是这种情况),请使用 -f 选项让 tail 持续读取来自指定文件的数据并将这些数据发送至 tail 自己的标准输出中。通过管道发送数据时该选项会被忽略。因此,cat file | tail -f 将不会得到所期望的结果,但 tail -f file 则可以。

(如果 tail 正在读取的文件不止一个,那么各行内容之间将用标准头信息隔开,以指明它们来自哪个文件,标准头信息以 ==> 开头。)

这个选项用于监视系统日志再合适不过,譬如,在单独的终端窗口(或单独的控制台)中执行的 tail -f /var/log/access.log 将持续打印每次点击后新添加的 Apache 访问日志条目,一直到您用 Ctrl-C 停止它为止。

通过组合使用 head 和 tail,可以从文件的中间部分读取给定长度的一块数据!下面说明如何做到:假定您想从文件开头算起第 1000 字节处开始读取一块 789 字节的数据。可以使用
代码:
cat file | head -c 1788 | tail -c 789

来解决这一问题。


使用 tac 命令逆序排序文件

如果您想对文件中的各行进行逆序排序,该怎么做呢?这就要用到 tac 命令。(请注意,tac 由 cat 逆序拼写而成。)该命令对所列出的文件中的各行或各段进行逆序排序。

该命令不能逆序排序各文件的顺序 — 这个任务您得自己做,以逆向顺序在 tac 命令后列出各文件即可。作为说明 tac 的工作原理的示例,对一些文件使用 ls -l | tail 和 ls -l | tail | tac,比较其结果。

代码:
$ ls -l |tail
总用量 32
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaa
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xab
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xac
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xad
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xae
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaf

正序

代码:
$ ls -l |tail | tac
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaf
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xae
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xad
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xac
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xab
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaa
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd

倒序

代码:
$ tac split1
this is line6
this is line5
this is line4
this is line3
this is line2
this is line1

对文件操作

......
显示全文...

补课--linux中软盘的使用

0 评论

前两天去面试,做了一份试卷,就一道题没答出来,那张卷子的第一道题,“linux下怎么挂载软盘“
后面其它的写脚本什么的都搞定了,就这一个卡了,面试的时候那个对我说,你用linux那么久了,怎么挂载软盘怎么不答不出来呢?当时那叫一个汗呀。
俺用挂载过硬盘,光驱,磁带机,移动设备。说真的,还真从来没在linux下挂载过软盘。其实mount格式就是样的,主要是软盘的那个设备文件叫什么名字记不得了。
知耻后勇,现在补上吧:
1。Mounting Floppy Disks
Must be manually mounted and unmounted
mount /dev/fd0 /media/floppy
umount /media/floppy

2。Formattiong Floppy Disks
Two types of format needed to prepare a floppy:
Alow levelformat: fdformat /dev/df0H1440
A filesystem,one of
mkfs -t ext2 /dev/fd0
mke2fd /dev/fd0
mkfd -t vfat /dev/fd0

3。使用tar备份文件到未格式化的软盘
Floppeds can used like tape drives
low level format required
File system not needed
Floppy cannot be mounted
Use tar to write to the floppy
/dev/fd0 ks the destination
备份时按如下方法:
#unount /media/floppy (卸载)
#fdformat /dev/fd0H1440 (低格)
#tar cvfM /dev/fd0 file (其中"file"表示要备份的文件,M表示分片写入,当第一片写完后就会提示放入
第二片)
还原:
#tar xvfM /dev/fd0
如果有多片磁盘,在第一片还原完毕后会提示放入每二片。

......
显示全文...

RHEL笔记__sort用法

0 评论

引用:
• 实用的分类(s o r t)操作。
• uniq。
• join。
• cut。
• paste。
• split。


sort用法
s o r t命令选项很长,下面仅介绍各种选项。

选项
s o r t命令的一般格式为:

代码:
sort -cmu -o output_file [other options] +pos1 +pos2 input_files


下面简要介绍一下s o r t的参数:
引用:
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储s o r t结果的输出文件名。


其他选项有:
引用:
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。


保存输出
- o选项保存分类结果,然而也可以使用重定向方法保存。下面例子保存结果到r e s u l t s . o u t:
代码:
$sort video.txt >results.out


启动方式
缺省情况下, s o r t认为一个空格或一系列空格为分隔符。要加入其他方式分隔,使用- t选s o r t执行时,先查看是否为域分隔设置了- t选项,如果设置了,则使用它来将记录分隔成域0、域1等等
;如果未设置,用空格代替。缺省时s o r t将整个行排序,指定域号的情况例外。

下面是文件v i d e o . t x t的清单,包含了上个季度家电商场的租金情况。各域为:(1)名称,(2)供货区代码,(3)本季度租金,(4)本年租金。域分隔符为冒号。为此对此例需使用‘ - t'选项。文件如下:
代码:
$ cat video.txt
Boys in Company C:HK:192:2192
Alien:HK:119:1982
The Hill:KL:63:2972
Aliens:HK:532:4892
Star Wars:HK:301:4102
A Few Good Men:KL:445:5851
Toy Story:HK:239:3972


sort对域的参照方式
关于s o r t的一个重要事实是它参照第一个域作为域0,域1是第二个域,等等。s o r t也可以使用整行作为分类依据。

文件是否已分类
怎样分辨文件是否已分类?如果只有3 0行,看看就知道了,但如果是4 0 0行呢,使用s o r t - c通知s o r t文件是否按某种顺序分类。

代码:
$ sort -c video.txt
sort: video.txt:2: disorder: Alien:HK:119:1982

结果显示未分类,

现在将之分类,再试一次:
代码:
$ sort -t: video.txt >video2.txt
$ sort -c video2.txt
$

返回提示符表明已分类。然而如果测试成功,返回一个信息行会更好。


基本sort
最基本的s o r t方式为sort filename,按第一域进行分类(分类键0)。实际上读文件时s o r t操作将行中各域进行比较,这里返回基于第一域s o r t的结果
代码:
$ sort -t: video.txt
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2192
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972


sort分类求逆
如果要逆向s o r t结果,使用- r选项。在通读大的注册文件时,使用逆向s o r t很方便。下面是按域0分类的逆向结果。
代码:
$ sort -t: -r video.txt
Toy Story:HK:239:3972
The Hill:KL:63:2972
Star Wars:HK:301:4102
Boys in Company C:HK:192:2192
Aliens:HK:532:4892
Alien:HK:119:1982
A Few Good Men:KL:445:5851


按指定域分类
有时需要只按第2域(分类键1)分类。这里为重排报文中供应区代码,使用t 1,意义为按分类键1分类。下面的例子中,所有供应区代码按分类键1分类;注意分类键2和3对应各域也被分类。
代码:
$ sort -t: +1 video.txt
Alien:HK:119:1982
Boys in Company C:HK:192:2192
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
The Hill:KL:63:2972

前几个第二域都是HK,第三域:119,192,301,489,532,63,按第一个数字分了,因此必须指定多域及数值域

数值域分类
依此类推,要按第三分类键分类,使用t 3。但是因为这是数值域,即为数值分类,可以使用- n选项。下面例子为按年租金分类命令及结果:
代码:
$ sort -t: +3n video.txt
Alien:HK:119:1982
Boys in Company C:HK:192:2192
The Hill:KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851


如果不指定n,如下
代码:
$ sort -t: +2 video.txt
Alien:HK:119:1982
Boys in Company C:HK:192:2192
Toy Story:HK:239:3972
Star Wars:HK:301:4102
A Few Good Men:KL:445:5851
Aliens:HK:532:4892
The Hill:KL:63:2972

o r t只查看第3域每个数值的第一个数,并按其分类,然后再按第二个数依次下去。
代码:
$ sort -t: +2n video.txt
The Hill:KL:63:2972
Alien:HK:119:1982
Boys in Company C:HK:192:2192
Toy Story:HK:239:3972
Star Wars:HK:301:4102
A Few Good Men:KL:445:5851
Aliens:HK:532:4892


数值域倒序:
代码:
$ sort -t: +2nr video.txt
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
Star Wars:HK:301:4102
Toy Story:HK:239:3972
Boys in Company C:HK:192:2192
Alien:HK:119:1982
The Hill:KL:63:2972


唯一性分类
有时,原文件中有重复行,这时可以使用- u选项进行唯一性(不重复)分类以去除重复行,本例中A l i e n有相同的两行。带重复行的文件如下,其中A l i e n插入了两次:
代码:
$ echo "Aliens:HK:532:4892" >> video.txt
$ cat video.txt
Boys in Company C:HK:192:2192
Alien:HK:119:1982
The Hill:KL:63:2972
Aliens:HK:532:4892
Star Wars:HK:301:4102
A Few Good Men:KL:445:5851
Toy Story:HK:239:3972
Aliens:HK:532:4892


使用- u选项去除重复行,不必加其他选项, s o r t会自动处理。
代码:
$ sort -u video.txt
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2192
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972


使用k的其他sort方法
s o r t还有另外一些方法指定分类键。可以指定k选项,第1域(分类键)以1开始。不要与前面相混淆。其他选项也可以使用k,主要用于指定分类域开始的字符数目。
使用- k 4,按年租金分类的次序。
代码:
$ sort -t: -k4 video.txt
A alien:HK:119:1982
Alien:HK:119:1982
Boys in Company C:HK:192:2192
A the Hill:KL:63:2972
The Hill:KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
Aliens:HK:532:4892
A Few Good Men:KL:445:5851


用k做分类键排序
可以指定分类键次序。先以第4域,再以第1域分类,命令为-k4 -k1,也可以反过来,以便在文件首行显示最高年租金,方法如下:
代码:
$ sort -t: -k4 -k1 video.txt
AAlien:HK:119:1982
Alien:HK:119:1982
Boys in Company C:HK:192:2192
The Hill:KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851


代码:
$ sort -t: -k4 -k1 -r video.txt
A Few Good Men:KL:445:5851
Aliens:HK:532:4892
Star Wars:HK:301:4102
Toy Story:HK:239:3972
The Hill:KL:63:2972
Boys in Company C:HK:192:2192
Alien:HK:119:1982
AAlien:HK:119:1982

这里-r是对第四域反排序?


代码:
$ sort -t: -k1 video.txt
AAlien:HK:119:1982
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2192
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972


代码:
$ sort -t: -k1 -k4 video.txt
AAlien:HK:119:1982
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2192
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972


代码:
$ sort -t: -k1 -k4 -r video.txt
Toy Story:HK:239:3972
The Hill:KL:63:2972
Star Wars:HK:301:4102
Boys in Company C:HK:192:2192
Aliens:HK:532:4892
Alien:HK:119:1982
A Few Good Men:KL:445:5851
AAlien:HK:119:1982

对第一域进行反排序?

换成第3域
代码:
$ sort -t: +2nr -k1 -r video.txt
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
Star Wars:HK:301:4102
Toy Story:HK:239:3972
Boys in Company C:HK:192:2192
Alien:HK:119:1982
AAlien:HK:119:1982
The Hill:KL:63:2972

对第三域进行倒序,再对第一域排序,最后把第一域倒序?

代码:
$ sort -t: +2nr -k1 video.txt
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
Star Wars:HK:301:4102
Toy Story:HK:239:3972
Boys in Company C:HK:192:2192
AAlien:HK:119:1982
Alien:HK:119:1982
The Hill:KL:63:2972


指定sort序列
可以指定分类键顺序,也可以使用- n选项指定不使用哪个分类键进行查询。看下面的s o r t命令:
代码:
$ sort +0 -2 +3 video.txt

该命令意即开始以域0分类,忽略域2,然后再使用域3分类。


pos用法
指定开始分类的域位置的另一种方法是使用如下格式:
代码:
sort +field_number.characters_in

意即从f i e l d _ n u m b e r开始分类,但是要在此域的第c h a r a c t e r s _ i n个字符开始。

如:
代码:
$ cat video.txt
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982
The Hill:KL223:63:2972
Aliens:HK11:532:4892
Star Wars:HK38:301:4102
A Few Good Men:KL87:445:5851
Toy Story:HK65:239:3972


要只使用供应区代码后缀部分将文件分类,其命令为+ 1 . 2,意即以第1域最左边第3个字符开始分类
代码:
$ sort -t: +1.2 video.txt
Aliens:HK11:532:4892
The Hill:KL223:63:2972
Star Wars:HK38:301:4102
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982
Toy Story:HK65:239:3972
A Few Good Men:KL87:445:5851


比较一下加n,呵呵,其实区码并不需要加n
代码:
$ sort -t: +1.2n video.txt
Aliens:HK11:532:4892
Star Wars:HK38:301:4102
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982
Toy Story:HK65:239:3972
A Few Good Men:KL87:445:5851


使用head和tail将输出分类
分类操作时,不一定要显示整个文件或一页以查看s o r t结果中的第一和最后一行。如果只显示最高年租金,按第4域分类- k 4并求逆,然后使用管道只显示s o r t输出的第一行,此命令为h e a d,可以指定查阅行数。如果只有第一行,则为head -1:

代码:
$ sort -t: -k4r video.txt
A Few Good Men:KL87:445:5851
Aliens:HK11:532:4892
Star Wars:HK38:301:4102
Toy Story:HK65:239:3972
The Hill:KL223:63:2972
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982


代码:
$ sort -t: -k4r video.txt | head -1
A Few Good Men:KL87:445:5851


代码:
$ sort -t: -k4r video.txt | head -2
A Few Good Men:KL87:445:5851
Aliens:HK11:532:4892


要查阅最低年租金,使用t a i l命令与h e a d命令刚好相反,它显示文件倒数几行。1为倒数一行,2为倒数两行等等。查阅最后一行为tail -1。结合上述的s o r t命令和t a i l命令显示最低年租金:
代码:
$ sort -t: -k4r video.txt | tail -1
Alien:HK57:119:1982


代码:
$ sort -t: -k4r video.txt | tail -2
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982


可以使用h e a d或t a i l查阅任何大的文本文件, h e a d用来查阅文件头,基本格式如下:
代码:
head [how_many_lines_to_display] file_name


Ta i l用来查阅文件尾,基本格式为:
代码:
tail [how_many_lines_to_display] file_name


如果使用h e a d或t a i l时想省略显示行数,缺省时显示1 0行。
要查阅文件前2 0行:
代码:
$ head -20 passwd


要查阅文件后10行:
代码:
$ tail -10 passwd


awk使用sort输出结果
对数据分类时,对s o r t结果加一点附加信息很有必要,对其他用户尤其如此。使用a w k可以轻松完成这一功能。比如说采用上面最低租金的例子,需要将s o r t结果管道输出到a w k,不要忘了用冒号作域分隔符,显示提示信息和实际数据。
代码:
$3}'
Worst rental Alien has been rented119


将两个分类文件合并
将文件合并前,它们必须已被分类。合并文件可用于事务处理和任何种类的修改操作。
下面这个例子,因为忘了把两个家电名称加入文件,它们被放在一个单独的文件里,现在将之并入一个文件。分类的合并格式为‘ sort -m sorted_file1 sorted_file2,下面是包含两个新家电名称的文件列表,它已经分类完毕:
代码:
$ cat video2.txt
Crimson Tide:134:2031
Die Hard:152:2981


使用-m +o。将这个文件并入已存在的分类文件v i d e o . s o r t,要以名称域进行分类,实际上没有必要加入+ o,但为了保险起见,还是加上的好。
代码:
$ sort -t: -m +0 video2.txt video.txt
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982
Crimson Tide:134:2031
Die Hard:152:2981
The Hill:KL223:63:2972
Aliens:HK11:532:4892
Star Wars:HK38:301:4102
A Few Good Men:KL87:445:5851
Toy Story:HK65:239:3972



系统sort
s o r t可以用来对/ e t c / p a s s w d文件中用户名进行分类。这里需要以第1域即注册用户名分类,然后管道输出结果到a w k,a w k打印第一域。
代码:
$1}'
adm
apache
bin
chenwy
daemon
desktop
.......


s o r t还可以用于d f命令,以递减顺序打印使用列。下面是一般d f输出。
代码:
$ df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 5162828 2289460 2611108 47% /
/dev/sda1 497829 13538 458589 3% /boot
none 99352 0 99352 0% /dev/shm


使用- b选项,忽略分类域前面的空格。使用域4(+ 4),即容量列将分类求逆,最后得出文件系统自由空间的清晰列表。
代码:
$ df | sort -b -r +4
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 5162828 2289460 2611108 47% /
/dev/sda1 497829 13538 458589 3% /boot
none 99352 0 99352 0% /dev/shm


在一个文本文件中存入所有I P地址的拷贝,这样查看本机I P地址更容易一些。有时如果管理员权限下,就需要将此文件分类。将I P地址按文件中某种数值次序分类时,需要指定域分隔符为句点。这里只需关心I P地址的最后一段。分类应从此域即域3开始,未分类文件如下:
代码:
$ vi iplist
$ cat iplist
193.132.80.123 dave tansley
193.132.80.23 HP printer 2nd floor
193.132.80.198 JJ. Peter's scanner
193.132.80.38 SPARE
193.132.80.78 P.Edron


分类后结果如下:
代码:
$ sort -t. +3n iplist
193.132.80.23 HP printer 2nd floor
193.132.80.38 SPARE
193.132.80.78 P.Edron
193.132.80.123 dave tansley
193.132.80.198 JJ. Peter's scanner


uniq用法
u n i q用来从一个文本文件中去除或禁止重复行。一般u n i q假定文件已分类,并且结果正确。
我们并不强制要求这样做,如果愿意,可以使用任何非排序文本,甚至是无规律行。
可以认为u n i q有点像s o r t命令中唯一性选项。对,在某种程度上讲正是如此,但两者有一个重要区别。s o r t的唯一性选项去除所有重复行,而u n i q命令并不这样做。重复行是什么?在u n i q里意即持续不断重复出现的行,中间不夹杂任何其他文本,现举例如下:
代码:
$ cat myfile.txt
May Day
May Day
May Day
Going DOwn
May Day
May Day.
May Day


u n i q将前三个May Day看作重复副本,但是因为第4行有不同的文本,故并不认为第五行持续的May Day为其副本。u n i q将保留这一行。
命令一般格式:
代码:
$uniq -u d c -f input-file out-file


引用:
其选项含义:
-u 只显示不重复行。
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。
一些系统不识别- f选项,这时替代使用- n。


创建文件m y f i l e . t x t,在此文件上运行u n i q命令。
代码:
$ uniq myfile.txt
May Day
Going DOwn
May Day
May Day.
May Day

注意第5行保留下来,其文本为最后一行May Day。如果运行sort -u,将只返回May Day和Going Down。

连续重复出现
使用- c选项显示行数,即每个重复行数目。本例中,行May Day重复出现三次
代码:
$ uniq -c myfile.txt
3 May Day
1 Going DOwn
1 May Day
1 May Day.
1 May Day


1. 不唯一
使用- d显示重复出现的不唯一行:
代码:
$ uniq -d myfile.txt
May Day


代码:
$ uniq -u myfile.txt
Going DOwn
May Day
May Day.


2. 对特定域进行测试
使用- n只测试一行一部分的唯一性。例如- 5意即测试第5域后各域唯一性。域从1开始记数。
如果忽略第1域,只测试第2域唯一性,使用- n2,下述文件包含一组数据,其中第2域代表组代码。

代码:
$ cat parts.txt
AK123 OPP Y13
DK122 OPP Y24
EK999 OPP M2


代码:
$ cat parts.txt
AK123 33 46 6u OPP ty yu
DK122 5h 67 y8 OPP ty yu
EK999 56 56 78 IIY ty yu


运行u n i q,将返回所有行。因为这个文件每一行都不同。
代码:
$ cat parts.txt
1 AK123 33 46 6u OPP ty yu
1 DK122 5h 67 y8 OPP ty yu
1 EK999 56 56 78 IIY ty yu


如果指定测试在第4域后,结果就会不同。u n i q会比较三个相同的O PP,因此将返回一行。
代码:
$ uniq -f4 -c parts.txt
2 AK123 33 46 6u OPP ty yu
1 EK999 56 56 78 IIY ty yu


指定第5域,即从第6域开始比较:
代码:
$ uniq -f5 -c parts.txt
3 AK123 33 46 6u OPP ty yu


如果‘- f'返回错误,替代-n使用:


join用法
j o i n用来将来自两个分类文本文件的行连在一起。
下面讲述j o i n工作方式。这里有两个文件f i l e 1和f i l e 2,当然已经分类。每个文件里都有一些元素与另一个文件相关。由于这种关系, j o i n将两个文件连在一起,这有点像修改一个主文件,使之包含两个文件里的共同元素。
文本文件中的域通常由空格或t a b键分隔,但如果愿意,可以指定其他的域分隔符。一些系统要求使用j o i n时文件域要少于2 0,为公平起见,如果域大于2 0,应使用D B M S系统。
为有效使用j o i n,需分别将输入文件分类。
其一般格式为:
代码:
join [options] input-file1 input-file2


引用:
选项:
an n 为一数字,用于连接时从文件n中显示不匹配行。例如, - a 1显示第一个文件的不匹配行,- a 2为从第二个文件中显示不匹配行。
o n.m n为文件号,m为域号。1 . 3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1 . 3,2 . 1。
j n m n为文件号,m为域号。使用其他域做连接域。
t 域分隔符。用来设置非空格或t a b键的域分隔符。例如,指定冒号做域分隔符- t:。


现有两个文本文件,其中一个包含名字和街道地址,称为n a m e . t x t,另一个是名字和城镇,
为t o w n . t x t。
代码:
$ cat names.txt
M.Golls 12 Hidd Rd
P.Heller The Acre
P.Willey 132 The Grove
T.Norms 84 Connaught Rd
K.Fletch 12 Woodlea


代码:
$ cat town.txt
M.Golls Norwich NRD
P.Willey Galashiels GDD
T.Norms Brandon BSL
K.Fletch Mildenhall MAF
K.Firt Mitryl Mdt


连接两个文件
连接两个文件,使得名字支持详细地址。例如M . G o l l s记录指出地址为12 Hidd Rd。连接域为域0—名字域。因为两个文件此域相同, j o i n将假定这是连接域:
代码:
$ join names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF

缺省j o i n删除或去除连接键的第二次重复出现,这里即为名字域。

1. 不匹配连接
如果一个文件与另一个文件没有匹配域时怎么办?这时j o i n不可以没有参数选项,经常指定两个文件的- a选项。下面的例子显示匹配及不匹配域。
代码:
$ join -a1 -a2 names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
K.Firt Mitryl Mdt


代码:
$ join -a1 names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF


2. 选择性连接
使用- o选项选择连接域。例如要创建一个文件仅包含人名及城镇, j o i n执行时需要指定显示域。方式如下:
使用1 . 1显示第一个文件第一个域,2 . 2显示第二个文件第二个域,其间用逗号分隔。命令为:
代码:
$ join -o 1.1,2.2 names.txt town.txt
M.Golls Norwich
P.Willey Galashiels
T.Norms Brandon
K.Fletch Mildenhall


使用-jn m进行其他域连接,例如用文件1域3和文件域2做连接键,命令为:
代码:
$ cat pers
P.Jones Office Runner ID897
S.Round UNIX admin ID666
L.Clip Personl Chief ID982


代码:
$ cat pers2
Dept2C ID897 6 years
Dept3S ID666 2 years
Dept5Z ID982 1 year


文件p e r s包括名字、工作性质和个人I D号。文件p e r s 2包括部门、个人I D号及工龄。连接应使用文件p e r s中域4,匹配文件p e r s 2中域2,命令及结果如下:
代码:
$ join -j1 4 -j2 2 pers pers2
ID897 P.Jones Office Runner Dept2C 6 years
ID666 S.Round UNIX admin Dept3S 2 years
ID982 L.Clip Personl Chief Dept5Z 1 year


$4}'文件名,观察其是否匹配假想域。


cut用法
c u t用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。

c u t一般格式为:
代码:
cut [options] file1 file2


引用:
下面介绍其可用选项:
-c list 指定剪切字符数。
-f field 指定剪切域数。
-d 指定与空格和t a b键不同的域分隔符。
- c用来指定剪切范围,如下所示:
- c 1,5-7 剪切第1个字符,然后是第5到第7个字符。
-c1-50 剪切前5 0个字符。
-f 格式与- c相同。
-f 1,5 剪切第1域,第5域。
- f 1,10-12 剪切第1域,第1 0域到第1 2域。


现在从' p e r s '文件中剪切文本。
代码:
$ cat pers
P.Jones Office Runner ID897
S.Round UNIX admin ID666
L.Clip Personl Chief ID982


使用域分隔符
文件中使用空格“ ”为域分隔符,故可用- d选项指定冒号,如- d " "。如果有意观察第3域,可以使用- f 3。要抽取I D域。可使用命令如下:
代码:
$ cut -d" " -f3 pers
Runner
admin
Chief


剪切指定域
c u t命令中剪切各域需用逗号分隔,如剪切域1和3,即名字和I D号,可以使用:
代码:
$ cut -d" " -f1,3 pers
P.Jones Runner
S.Round admin
L.Clip Chief


使用- c选项指定精确剪切数目
这种方法需确切知道开始及结束字符。通常我不用这种方法,除非在固定长度的域或文件名上。
当信息文件传送到本机时,查看部分文件名就可以识别文件来源。要得到这条信息需抽取文件名后三个字符。然后才决定将之存在哪个目录下。下面的例子显示文件名列表及相应c u t命令:
代码:
$ cat pers2
Dept2C ID897 6 years
Dept3S ID666 2 years
Dept5Z ID982 1 year


代码:
$ cut -c4-8,11-12 pers2
t2C I97
t3S I66
t5Z I82


要剪切谁正在使用系统的用户信息,方法如下:
代码:
$ who -u|cut -c1-8
root
root


paste用法
c u t用来从文本文件或标准输出中抽取数据列或者域,然后再用p a s t e可以将这些数据粘贴起来形成相关文件。粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同。
p a s t e将按行将不同文件行信息放在一行。缺省情况下, p a s t e连接时,用空格或t a b键分隔新行中不同文本,除非指定- d选项,它将成为域分隔符。
p a s t e格式为;
代码:
paste -d -s -file1 file2


引用:
选项含义如下:
-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
- 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。


从前面的剪切中取得下述两个文件:
代码:
$ cut -d" " -f 2 pers2 >pas1
$ cat pas1
ID897
ID666
ID982


代码:
$ cut -d" " -f1 pers >pas2
$ cat pas2
P.Jones
S.Round
L.Clip


基本p a s t e命令将之粘贴成两列:
代码:
$ paste pas1 pas2
ID897 P.Jones
ID666 S.Round
ID982 L.Clip


指定列
通过交换文件名即可指定哪一列先粘:
代码:
$ paste pas2 pas1
P.Jones ID897
S.Round ID666
L.Clip ID982


使用不同的域分隔符
要创建不同于空格或t a b键的域分隔符,使用- d选项。下面的例子用冒号做域分隔符。
代码:
$ paste -d: pas2 pas1
P.Jones:ID897
S.Round:ID666
L.Clip:ID982


要合并两行,而不是按行粘贴,可以使用- s选项。下面的例子中,第一行粘贴为名字,第二行是I D号。
代码:
$ paste -s pas2 pas1
P.Jones S.Round L.Clip
ID897 ID666 ID982


paste命令管道输入
p a s t e命令还有一个很有用的选项( -)。意即对每一个( -),从标准输入中读一次数据。
使用空格作域分隔符,以一个4列格式显示目录列表。方法如下:
代码:
$ ls | paste -d" " - - - - -
1.bak 1.txt append.sed backll.ee change.sed
data.f data.txt delete_me_and_die dht dir1
......................

一行显示四个文件,以空格分开

代码:
$ ls | paste -d: - - - - -
1.bak:1.txt:append.sed:backll.ee:change.sed
data.f:data.txt:delete_me_and_die:dht:dir1
.....................

一行显示四个文件,以冒号:分开

也可以以一列格式显示输出:
代码:
$ ls | paste -d" " -
1.bak
1.txt
append.sed
backll.ee
..................
一行显示一个文件


split用法
s p l i t用来将大文件分割成小文件。有时文件越来越大,传送这些文件时,首先将其分割可能更容易。使用v i或其他工具诸如s o r t时,如果文件对于工作缓冲区太大,也会存在一些问题。
因此有时没有选择余地,必须将文件分割成小的碎片。
s p l i t命令一般格式:
代码:
split -output_file-size input-filename output-filename


这里o u t p u t - f i l e - s i z e指的是文本文件被分割的行数。
s p l i t查看文件时,o u t p u t - f i l e - s i z e选项指定将文件按每个最多1 0 0 0行分割。如果有个文件有38行,那么将分割成3个文件,分别有
10、10、10、8行。每个文件格式为x [ a a ]到x [ z z ],x为文件名首字母, [ a a ]、[ z z ]为文件名剩余部分顺序字符组合,下面的例子解释这一点。
如passwd有38行:
代码:
$ ls -l
总用量 8
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1


代码:
$ split -10 passwd
$ ls -l
总用量 24
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1
-rw-rw-r-- 1 sam sam 368 12月 4 11:24 xaa
-rw-rw-r-- 1 sam sam 474 12月 4 11:24 xab
-rw-rw-r-- 1 sam sam 495 12月 4 11:24 xac
-rw-rw-r-- 1 sam sam 312 12月 4 11:24 xad

生成了四个文件,前三个文件每个文件10行,最后一个8行,分割分的文件名自动产生,格式为x[a-a][z-z]

再如split有6行:
代码:
$ cat split1
this is line1
this is line2
this is line3
this is line4
this is line5
this is line6


按每个文件1行分割,命令为:
代码:
$ split -1 split1
$ ls -l
总用量 32
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaa
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xab
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xac
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xad
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xae
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaf

文件有6行,s p l i t按每个文件1行进行了分割,并按字母顺序命名文件。为进一步确信操作成功,观察一个新文件内容:
代码:
$ cat xaa
this is line1
$ cat xaf
this is line6


使用 head 和 tail 以块方式读取文本流

没实践过,有兴趣的自己试试

假定您想只处理文件的一部分,譬如头几行或后几行,那您该怎么做呢?请使用 head(它将头 10 行发送至标准输出)或 tail(它将后 10 行发送至标准输出)。

您可以通过使用 -n 选项改变这些命令发送至其标准输出的行数(当然,输出结果将随 XF86Config 文件的内容而不同):

清单 1. 将 XF86Config 中选定行数的内容发送至标准输出
代码:
$ head -n 4 /etc/X11/XF86Config


引用:
# File generated by anaconda.

# **********************************************************************

# Refer to the XF86Config(4/5) man page for details about the format of

# this file.



代码:
$ tail -n 4 /etc/X11/XF86Config


引用:
Modes "1600x1200"

ViewPort 0 0

EndSubsection

EndSection




如果您想让 head 或 tail 以字节而不是以行为单位 ,那该怎么办呢?您可以用 -c 选项代替 -n 选项。因此,要显示前 200 个字符,请使用
代码:
head -c 200 file

或者使用
代码:
tail -c 200 file

来显示后 200 个字符。如果数字后面跟有 b(表示块(block)),那么这个数字将被乘以 512。类似地,跟有 k(表示千字节(kilobyte))表示用 1024 去乘给定的数字,而跟有 m(表示兆字节(megabyte))表示用 1048576 字节去乘给定的数字。

请记住,
代码:
head file1 file2 file3


代码:
cat file1 file2 file3 | head

之间有重大差别。前者将打印每个文件指定行数的内容,不同文件的内容之间用头信息隔开,头信息以 ==> 后跟文件名开头。
后者将打印由 cat 命令后所列文件组成的输入流中指定行数的内容,但将把输入流作为单个文件对待。
可以使用 -q(表示静默(quiet))选项关闭文件名头信息。与 -q 相反的是 -v(表示详列(verbose))。

假如您要处理的文件在处理期间一直在发生变化(比如,当您让 head 或 tail 读取来自正在被另一个命令写入的文件的数据时,就是这种情况),请使用 -f 选项让 tail 持续读取来自指定文件的数据并将这些数据发送至 tail 自己的标准输出中。通过管道发送数据时该选项会被忽略。因此,cat file | tail -f 将不会得到所期望的结果,但 tail -f file 则可以。

(如果 tail 正在读取的文件不止一个,那么各行内容之间将用标准头信息隔开,以指明它们来自哪个文件,标准头信息以 ==> 开头。)

这个选项用于监视系统日志再合适不过,譬如,在单独的终端窗口(或单独的控制台)中执行的 tail -f /var/log/access.log 将持续打印每次点击后新添加的 Apache 访问日志条目,一直到您用 Ctrl-C 停止它为止。

通过组合使用 head 和 tail,可以从文件的中间部分读取给定长度的一块数据!下面说明如何做到:假定您想从文件开头算起第 1000 字节处开始读取一块 789 字节的数据。可以使用
代码:
cat file | head -c 1788 | tail -c 789

来解决这一问题。


使用 tac 命令逆序排序文件

如果您想对文件中的各行进行逆序排序,该怎么做呢?这就要用到 tac 命令。(请注意,tac 由 cat 逆序拼写而成。)该命令对所列出的文件中的各行或各段进行逆序排序。

该命令不能逆序排序各文件的顺序 — 这个任务您得自己做,以逆向顺序在 tac 命令后列出各文件即可。作为说明 tac 的工作原理的示例,对一些文件使用 ls -l | tail 和 ls -l | tail | tac,比较其结果。

代码:
$ ls -l |tail
总用量 32
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaa
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xab
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xac
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xad
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xae
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaf

正序

代码:
$ ls -l |tail | tac
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaf
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xae
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xad
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xac
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xab
-rw-rw-r-- 1 sam sam 14 12月 4 11:25 xaa
-rw-rw-r-- 1 sam sam 84 12月 4 11:19 split1
-rw-r--r-- 1 sam sam 1649 12月 4 11:13 passwd

倒序

代码:
$ tac split1
this is line6
this is line5
this is line4
this is line3
this is line2
this is line1

对文件操作
......
显示全文...

又从恶梦中惊醒

0 评论

又从恶梦中惊醒
不知道这是第几天了,每天早上不到七点,总是从恶梦中惊醒。醒来看看四周,屋里只有我一个人,一切都那么的静,静得让我害怕,只能听到自己急促的呼吸声。

点着一根烟,急促的吸下去,吸下去。仿佛只要我很很的吸下去,那团小小火就能温暖我我凄冷的心,然后把凄凉和孤单都吐随着烟吐出来。

抽的是烟,吐出来的是凄凉、孤单与寂寞。
......
显示全文...

[2008年4月13日星期日]

此心安处是吾家

0 评论

曾经年少何妨处处家,曾经年少不知道愁滋味,曾经年少轻狂多过错。

曾经的初生牛犊,以为这里会有我想吃的青草,以为这里会有那美丽的阳光。于是离开亲人和朋友,独自一人迁徙到这里。

漂泊的日子总是那么的孤单,那么的凄凉。人不可能一帆风顺,漂泊的旅程更是充满困难。既然当初选择这条路,我就不怕困难。但是人都有脆弱的时候,脆弱的时候,总想有地方可以让心灵去依靠,总想有人能关心一下,总想有人能鼓励一下。然而这些都是可遇而不可求的。

回望旅途,来这快有两年了,眼下失去工作也快有两个月了。深圳是一个充满竞争的城市,我喜欢这里的竞争。刚来深圳,那段日子很不好过,我没有工作以验,处处碰壁,但是我没有放弃,终于我找到属于自己的一份工作,我可以在这里活去了。但是那不是我想到的工作,那种生活也不是我想要的生活,一年多的时间我,我从没有放任自己,我不停的学习。终于到了我自己认为我已经准备好了。我走出了原来的工作与生活,寻找自己想要的东西。

这么时间的准备,没有让自己失望,面前经过的第一个机会,就被我抓住,通过5轮面试,我拿到了一个很不错IT公司的offer,然而人算不如天算,由于一些问题,被公司拒绝。有什么办法?坐在那里无语怨苍天?那是没用的,只有继续走下去,下去的结果我知道,还是一次次通过,又一次次的被拒绝,事实也是如此。不是我不努力,也不是我没能力,但是我又能怎么办?

快两个月了,身上的钱早就用完了,也欠不了少债了。我每天除了面试,就是坐在电脑前面,看书,学习。屋里只有我敲键盘的声音和我呼吸的声音。窗外春意盎然,鸟语花香,但是中我无缘,开始时我没心情出去看,后来我不敢出去看。至少我一个人在屋里,我会逼着自己看书,但是到了外面,看着别人三五成群,或成双成对,更感到自己的凄凉,地上是绿绿的划,树上是红红的花,但是自己站在那里不知道应该做什么。

我不敢给家里打电话,怕家里人知道的我情况会担心。但是每个星期,家里都会给我打电话,我只能”很高兴的“说我过得很好。

多么想有人能知道我的处境,能我一句安慰,能鼓励我一下。但是只有我自己对自己说:男子汉应该坚强,不能靠别人的同情生存!

最近这些天,不知道为什么,每天早上不到7点,我都会被恶梦惊醒,各种各样的恶梦。我不知道我为什么会做这样的梦。

真的希望有一天,能找到一个感情的寄托,在我困难的时候,能鼓励我一下,在我一个人很孤单、很困难,很凄凉的时候,说和我好好的说说知心话,而不是和我一直吵。

漂泊浮萍盼生根,此心安处是吾家!
......
显示全文...

[2008年4月12日星期六]

情感不能恣意挥霍

0 评论

上个周末,她和丈夫一同去郊游,岂料为了点小事两人发生口角,结果败兴而归。回到家,


她又向丈夫发怨气。过了会儿,她便把自己反锁进了卧室,连续近10个小时,不吃也不喝。


  每次都是这样,只要和丈夫闹了别扭,她就会用“绝食”自残方式来惩罚丈夫,最长的
纪录达23个小时。看着丈夫那副焦急、忏悔的样子,她就打心底里感到快慰,饥饿感随即一
扫而光,直到丈夫不得不向她“俯首称臣”才算罢休。

  这次也不例外,没过几小时,丈夫就首先沉不住气了,先是在房门前来回踱步,然后是
轻轻叩门,最后就重重地敲打,并伴以低沉的呼唤:开门!你不要再这样闹腾了,好不好!

  她终于不忍心再坚持,遂打开房门。丈夫走进屋,一言未发,满脸无奈,用手拍了拍她
的头,就拉她进饭厅吃饭,她顺从了。良久,丈夫依然沉默无语。这次是怎么啦?按照以往
的惯例,此时丈夫坐在她旁边应是不停地说些笑话,逗她开心才是呀!

  “你在想什么?”终于,她停住手中的筷子,首先打破沉闷的僵局。“假如,”丈夫定
睛看着她,“若干年后,这屋里只剩下你自己一人,你又闹绝食,谁再来劝你吃饭?”

  “我自己!那你呢?”她不假思索地脱口而出。“先走了,或者弃你而去。”丈夫一脸
的平静,但平静的语调中多少透露着一点伤感,“一切都可能发生!”

  那怎么可能?她从未设想过会失去丈夫的日子。平时,她总是极尽乖戾甚至还有点霸道,
肆意发泄着自己的烦恼和不满,那分明是把她丈夫看做一个能尽收她情感宣泄的仓库。

  然而,丈夫不也仅是个长她不足三岁的“大男孩”吗?曾经见过丈夫在他父母面前的真
实神态:懒散、娇弱。这或许就是他在回家不多的时间里重温一番父母的关爱呵护吧?而在
她的面前却很少见到懒散和娇弱,相反,总是给她以至诚挚爱的关爱。

  她能明白吗?丈夫那略显疲惫的眼神能让她内疚和自责吗?为什么她屡屡伤害的总是最
爱自己的丈夫?为什么她那么不在乎丈夫内心的感受?任何东西如果不好好珍惜,只一味地
索取和伤害,又怎能保证它不会凋零呢?哪怕是和最亲爱的人之间那份最醇厚的情感。
......
显示全文...

[2008年4月10日星期四]

linux下修改IP

0 评论

修改ip地址
即时生效:
# ifconfig eth0 192.168.0.20 netmask 255.255.255.0
启动生效:
修改/etc/sysconfig/network-scripts/ifcfg-eth0

修改default gateway
即时生效:
# route add default gw 192.168.0.254[/b]
启动生效:
修改/etc/sysconfig/network-scripts/ifcfg-eth0

修改dns
修改/etc/resolv.conf
修改后可即时生效,启动同样有效

修改host name
即时生效:
# hostname fc2
启动生效:
修改/etc/sysconfig/network
......
显示全文...

收藏__MYSQL自动备份脚本

0 评论

注:MYSQL配置不同,脚本中的路径会有不同,根据自己的配置改变相应部分后再用。

可以将这个脚本放进crontab,每天凌晨执行一次,自动备份

这个脚本每天最多只执行一次,而且只保留最近五天的备份在服务器上。

#Setting

#设置数据库名,数据库登录名,密码,备份路径,日志路径,数据文件位置,及备份方式

#默认情况下备份方式是tar,还可以是mysqldump,mysqldotcopy

#默认情况下,用root(空)登录mysql数据库,备份至/root/dbxxxxx.tgz
QUOTE:
#!/bin/bash

#This is a ShellScript For Auto DB Backup

#Powered by aspbiz

#Setting

DBName=mysql

DBUser=root

DBPasswd=

BackupPath=/root/

LogFile=/root/db.log

DBPath=/var/lib/mysql/

#BackupMethod=mysqldump

#BackupMethod=mysqlhotcopy

#BackupMethod=tar

#Setting End

NewFile="$BackupPath"db$(date +%y%m%d).tgz

DumpFile="$BackupPath"db$(date +%y%m%d)

OldFile="$BackupPath"db$(date +%y%m%d --date='5 days ago').tgz

echo "-------------------------------------------" >> $LogFile

echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile

echo "--------------------------" >> $LogFile

#Delete Old File

if [ -f $OldFile ]

then

rm -f $OldFile >> $LogFile 2>&1

echo "[$OldFile]Delete Old File Success!" >> $LogFile

else

echo "[$OldFile]No Old Backup File!" >> $LogFile

fi

if [ -f $NewFile ]

then

echo "[$NewFile]The Backup File is exists,Can't Backup!" >> $LogFile

else

case $BackupMethod in

mysqldump)

if [ -z $DBPasswd ]

then

mysqldump -u $DBUser --opt $DBName > $DumpFile

else

mysqldump -u $DBUser -p$DBPasswd --opt $DBName1 > $DumpFile

fif

tar czvf $NewFile $DumpFile >> $LogFile 2>&1

echo "[$NewFile]Backup Success!" >> $LogFile

rm -rf $DumpFile

;;

mysqlhotcopy)

rm -rf $DumpFile

mkdir $DumpFile

if [ -z $DBPasswwd ]

then

mysqlhotceopy -u $DBUser $DBName $DumpFile >> $LogFile 2>&1

else

mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile >>$LogFile 2>&1

fi

tar czvf $NewFile $DumpFile >> $LogFile 2>&

echo "[$NewFile]Backup Success!" >> $Log1File

rm -rf $DumpFile

;;

*)

/etc/init.d/mysqld stop >/dev/null 2>&1

tar czvf $NewFile $DBPath$DBName >> $LogFlile 2>&1

/etc/init.d/mysqld start >/dev/null 2>&1

echo "[$NewFille]Backup Success!" >> $LogFile

;;

esac

fi

echo "-------------------------------------------" >> $LogFile
......
显示全文...

收藏__linux数据备份脚本

0 评论

注意:unix(freebsd)系统的bash位置为:!/usr/compat/linux/bin/bash ,linux的bash位置为:/bin/bash,位置要准确.

备份数据:比如对/etc/passwd,/etc/named.conf及/var/log进行备份,备份数据到/var/backup中

脚本如下:

#!/bin/bash
# get current datetime    
datestr=`date '+%Y%m%d-%H%M%S'`
BACKUP_DIR=/var/backup/$datestr/
# make dir of backup dir

if [ ! -d $BACKUP_DIR ]
then
mkdir -pv $BACKUP_DIR
fi

# rename existing backup dir if it is a file
if [ -f $BACKUP_DIR ]
then
mv -v $BACKUP_DIR $BACKUP_DIR.bak
mkdir -pv $BACKUP_DIR
fi
datestr1=`date '+%Y%m%d'`

#backup /etc entry
cp -p /etc/passwd /etc/master.passwd /etc/named.conf $BACKUP_DIR

#backup /var/log entry 
echo Please wait for a moment.The program is backuping /var/log entry ......
tar zcf /var/log.$datestr1.tar.gz /var/log
mv /var/log.$datestr1.tar.gz $BACKUP_DIR

......
显示全文...

收藏__Linux数据备份手册

0 评论

Linux作为新一代网络操作系统,在服务器方面的应用越来越广泛。作为专门的网络服务器,一个重要功能就是对服务器数据进行备份,以确保数据的安全。本文将介绍在Linux系统下一些常用的数据备份方法。

1、本机上数据的手工备份

Linux系统上配有功能强大的tar命令,可以灵活地备份数据。tar最初是为了制作磁带备份而设计的把文件和目录备份到磁带中,然后从磁带中提取或恢复文件。当然,现在我们可以使用tar来备份数据到任何存储介质上。tar非常易于使用稳定可靠,而且在任何 Linux系统上都有这个命令。因此是最经常使用的备份工具。

(1)使用tar命令备份数据的格式如下:

$ tar cvf backup.tar /home/html

上述命令是将/home/html 目录下的所有文件打包成tar文件backup.tar。

cvf是tar的命令参数。

c代表创建一个档案文件,

v代表显示每个备份的文件名字,

f表示tar创建的档案文件名是后面的backup.tar,

/home/html 代表tar要备份的文件或和目录名。

(2)使用tar命令恢复数据的格式如下:

$ tar xvf backup.tar

上述命令将备份文件backup.tar恢复到当前目录下。

通常情况下,tar对文件进行备份的时候并不对文件进行压缩,因此备份文件的尺寸非常大。使用如下的命令,将使tar在备份结束以后,自动使用gzip命令对备份文件进行压缩,得到一个相应的gz文件。

$ tar zcvf backup.tar.gz /home/html

这样,我们可以得到压缩文件backup.tar.gz。

backup.tar.gz是压缩的备份文件。

2、本机数据的自动备份
使用上述命令,我们可以手工备份数据,但是每天定时做这些操作可能比较繁琐。当然,Linux为我们提供了强大的工具来进行自动备份。这就是cron。

cron是一个后台进程,一旦启动,将根据自己的配置文件定时地执行任务。我们可以编写一个shell脚本文件来进行文件备份,然后让cron定时地启动这个脚本文件来对数据进行备份。

例如,我们每天备份/home/html目录下的所有的文件到/home/admin/backup/backup_xxxx目录下,xxxx代表备份的日期。这个工作,可以编写一个如下的shell脚本backup.sh来进行:

#!/bin/sh

cd /home/admin/backup

year=`date +%Y`

month=`date +%m`

day=`date +%d`

now=$year-$month-$day

mkdir backup_$now

tar zcvf backup_$now/backup.tar.gz /home/html

这个脚本在备份数据的时候,自动读取系统日期,然后以系统当前的日期建立一个新的目录,将备份的数据打包压缩放在这个目录中。我们可以在系统中通过执行:$sh backup.sh ,完成备份工作。如果键入:$chmod +x backup.sh ,可以将backup.sh设置为可运行。这样,我们就可以直接通过键入$./backup.sh来运行备份脚本文件了。一般情况下,我们希望在系统负载不是最大的时候来进行数据备份。通常,我们可以选择每天的凌晨3:00来进行数据备份(这段时间,你的服务器访问的人数应该最少吧?)。把一切工作交给 cron吧。 cron启动以后,它检查/var/spool/cron/目录中的配置文件来找到所要执行的任务和执行任务的时间,依据这些设定在规定的时间执行规定的任务。

这个任务配置文件可以由crontab -e 命令来编辑。

其格式为每行代表一个任务和规定的执行时间。

每行由6个域组成:

分钟小时每月的天月星期命令

上述6个域之间用空格或Tab分开,其中:

分钟:分钟域,值的范围是0到59

小时:小时域,值的范围是0到23

每月的天:日期,值的范围是1到31

月份:月份,值的范围是1到12

星期:星期,值的范围是0到6,星期日值为0 命令。

所要运行的命令特别的,如果一个域是’*’,表明命令可以在该域所有可能的取值范围内执行。如果一个域是由连字符隔开的两个数字,表明命令可以在两个数字之间的范围内执行(包括起止两个数字本身)。如果一个域是由逗号隔开的一系列值组成的,表明命令可以在这些值组成的范围内执行。现在,我们编写一个文件,用以在每天的凌晨3:00启动备份shell程序。

键入:crontab -e 命令,

然后输入: 0 3 * * * backup.sh 输入完成后,存盘退出。

键入crontab -l 来检查刚才的输入是否正确。好了,这样只要Linux服务器不关机,每天凌晨3:00cron都会自动启动backup.sh脚本来对数据进行备份的。你就可以高枕无忧了。

FMS的备份方法
一、备份数据说明:

Foxmail Server 系统的数据分为以下几种:

* 邮件数据:存在于系统相应目录中。这是比较重要的数据,主要是存放所有用户的邮件内容,邮件信息,邮箱信息,过滤器信息。
目录结构为:[邮件数据存放根目录]/[服务域名]/[用户帐号第一个字母小写]/[用户帐号]/[邮箱结构]。例如,在默认安装的情况下一个在bodachina.com域中的admin用户他的邮箱目录为:
/home/webmail/bodachina.com/a/admin
* 用户信息数据:存在于数据库中。存放的是用户的个人信息,如用户名,密码等。
* 用户地址本数据:存在与OPENLDAP中。主要是用来存放用户的地址本信息。在默认安装的情况下,数据存放在/usr/local/var/openldap-ldbm
* 日志文件:包括邮件服务器日志文件,WEB服务器日志文件等,存在于各个服务器相关目录中。在默认安装的情况下,WEB服务器的日志文件会存放在/usr/local/resin/log;邮件服务器的日志文件回存放在/var/log/qmail的目录中。
* 临时数据:存放在系统临时目录中,通常是/tmp/webuser目录,用来存放系统的临时数据。

二、数据备份方法说明

数据备份分为以下步骤:

* 建立备份数据存放目录、日志存放目录。用户可以把备份数据存放在/home/foxmail/backup;
* 对邮件数据进行打包。根据不同的系统安装情况,邮件数据目录可能不同。默认情况下,邮件数据目录被定在/home/webmail/下。具体情况请查阅系统安装手册。打包命令:
cd /home/
tar vcvf maildata.tar.gz webmail
mv maildata.tar.gz /home/foxmail/backup/xxx_maildata.tar.gz

其中xxx是一个事件注释。

* 对用户信息从数据库中倒出,备份。具体命令是:

mysqldump –u[数据库用户名] –p[数据库密码] [数据库名] > userdata.sql

默认情况下,系统安装的数据库用户名,密码和数据库名都是:qmail

导出后,请把userdata.sql移动到备份数据存放目录中。具体命令:
cd /home/foxmail/backup
mysqldump –uqmail –pqmail qmail >xxx_userdata.sql

或者直接把数据库目录打包备份,在mysql数据库存放数据的目录下可以看到一个名叫qmail的数据库,用户可以用上面的打包方式对qmail数据库进行数据备份。

* 对地址本数据进行备份。对OPENLDAP的数据目录进行打包。默认情况下是/usr /local/var/目录,具体命令:tar zcvf addrdata.tar.gz [LDAP数据目录名],并把数据包移动到备份数据存放目录下,方法与上面类似。或者用户可以使用OPENLDAP的命令进行备份:
ldapsearch –b ’o=FOXMAIL’ objectclass=* -x –H ldap://192.168.1.227:1212 >ldapdata.ldif

如果用户地址本数据太多能会出现搜索上限问题,可以修改OPENLDAP的配置文件来解决这个问题。修改方法是:在/usr/local/etc/openldap/slapd.conf文件中插入:

sizelimit 50000

* 对日志文件进行备份。通常是备份邮件服务器日志和WEB服务器日志。默认情况下,邮件服务器日志目录为/var/log/qmail/,而WEB服务器日志存放于/usr/local/resin/log/目录下。请把相关文件打包,移动到日志存放目录中。
* 对临时数据进行删除。在系统运行了一段时间后,系统数据目录中,会积累了一定容量的临时数据。为了提高系统的效率和空余系统磁盘空间,请把临时数据删除。具体方法是:把FoxmailServer停掉,命令FoxmailServer stop;把临时目录中的所有目录删除(默认在/tmp/webuser/下),进入/tmp/webuser/,把这个目录中的所有目录和文件,一并删除。

三、用cron对FMS进行数据备份

1、增加cron纪录:

crontab –e

增加纪录行:0 3 * * * /home/foxmail/bin/backup.sh

2、创建脚本:/home/foxmail/bin/backup.sh

#!/bin/sh

year=`date +%Y`

month=`date +%m`

day=`date +%d`

now=$year-$month-$day

mkdir /home/foxmail/backup/$now

cd /home/mysql/data/

tar zcvf /home/foxmail/backup/$now/mysql_qmail.tar.gz qmail

cd /usr/local/var/

tar zcvf /home/foxmail/backup/$now/openldap-ldbm.tar.gz openldap-ldbm

tar zcvf /home/foxmail/backup/$now/openldap-slurp.tar.gz openldap-slurp

cd /home/

tar zcvf /home/foxmail/backup/$now/webmail.tar.gz webmail

通过以上两个步骤就可以在每天三时对系统数据做一个备份,不过在大用户量的情况下,就不必对webmail做每天的备份,因为这样很快就会占满所有硬盘空间。可以backup.sh中把相应的行注释掉。

数据备份方法说明:
当系统出现灾难性故障,可以通过恢复备份数据来恢复系统,步骤如下:

* 把邮件数据备份包maildata.tar恢复到系统的邮件数据存放目录中;
* 把用户信息备份文件userdata.sql恢复到数据库中,具体方法是:用数据库帐号进入数据库(默认为qmail);通过命令show tables获取所有表信息;通过命令drop table [表名],把所有表删除;退出数据库;
通过命令mysql –u[用户名] –p[用户密码] [数据库名] < userdata.sql,重新把备份数据导入数据库。
* 把地址本备份信息覆盖原来的数据文件,默认情况是/usr/local/var下的openldap的相关文件。

小结
实际备份脚本backup.sh:

#!/bin/sh

year=`date +%y`

month=`date +%m`

day=`date +%d`

now=$year-$month-$day

exp tbpf/tbpf@ora9i file=/home2/tbpf_backup/TbpfDB$now.dmp owner=tbpf

cd /home2/tbpf_backup/

tar zcvf /home2/tbpf_backup/tbpf_backup_tar/TbpfDB$now.tar.gz TbpfDB$now.dmp

rm -rf TbpfDB$now.dmp

......
显示全文...

[2008年3月20日星期四]

干嘛要听你那些伤心的事啊

0 评论

我干嘛要听你那些伤心的事啊,你有好消息肯定会告诉我的----我相处七年的女朋友对我说的话。
忆经是我离职的第三个星期了,两个星期前,上天和我开了一个玩笑,已经找好一个我梦想中的工作,因为一个原因,又丢失了,很伤心。
又两个星期过去了,我还在找,每天除了去面试,就是在家里看书,看书。一个人在空荡荡的屋子里,很孤单,很凄凉,没人关心我心里的感受,如果我没有女朋友,我不会奢望有人会体贴我一下,但是我有女朋友,但是奢望还是奢望。
刚才打电话过来,说她现在在学校里实习,很累,很难受。。。。。。,说完这些,又问我前天梦的是什么?前我给她发信息,说我做了一个梦,但是没说我梦的是什么。其实我梦到她移情别恋了。我一直都很相信她,也相信我自己,我也不知道为什么会做这样的梦,或许最近受的打击太多,有点不自信了。
我仍然没有告诉她我梦的是什么。我问她为什么不问问我最近过得怎么样?一个人在家,不会做饭,自己怎么吃饭?心里都有什么感受?她给我的回答是:我干嘛要听你那些伤心的事呀,有好消息你肯定会告诉我的。
是啊,有好消息我肯定会告诉她的。她有坏消息肯定会告诉我的,但好消息却不一定。长久以来,多么想她能聆听一下我的“坏消息”,哪怕不安慰我,只要用心听一下就行。每次她打电话过来,总是说一堆她的“烦心事”,大的、小的。说完了,就没别的了,我很想说说我的事,我会问:还有别的事吗?,她的回答总是:没有了.

在深圳的两年里,也有不少女孩愿意听我里的感受,但是我都不对她们说,下一次再有女孩愿意听我心里话的时候,我真不知道应该不应该对她说
......
显示全文...

[2008年3月12日星期三]

inode简介与设置

0 评论

关于inode的简介
来 源: freebsd.csie.nctu.edu.tw
档 名: 0/System/inode(使用 70 埠)
标 题: 关于 inode - About inode


From: unixer.bbs@bbs.ee.ncku.edu.tw (优客李林)
Newsgroups: tw.bbs.comp.386bsd
Subject: 有关 inode...
Date: 9 Dec 1996 08:27:00 GMT

Hi...

由于做过一些有关 filesystem 的 study, 在这边对 inode 做一点说明...

1. inode 是作甚么的?

一个 filesystem 可以粗略地分成 inode table 与 data area 两部份.
inode table 上有许多的 inode, 每个 inode 分别 记录一个档案的属性,
与这个档案分布在哪些 datablock 上

2. 一个 inode 有多大呢?

128 byte!

3. inode 和 data area 的关系

在 new filesystem 时, 通常会有一个参数, 用来描述要分配多少比例的空间给
inode table. 举例来说,

newfs -i 2048

是指 file system 中, 每分配 2048 byte 给 data area, 就分配一个 inode
但是一个 inode 就并不是一定就用掉 2048 byte, 也不是说 files allocation
的最小单位是 2048 byte, 它仅仅只是代表 filesystem 中
inode table/data area 分配空间的比例是 128/2048 也就是 1/16
(换个角度想, 我们可以想成是预估 filesystem 中 file 平均大小是 2048 byte)

如果 inode table 太小, 那么在每个档案都很小的时候, 就会发生 inode 用光 而
datablock 还剩一堆的情形.

4. file allocation 的最小单位 和 inode 多少有没有关系呢?

没有关系!

FFS 中真正的最小单位是 fragment size 也就是我们在 new filesystem 时用的

newfs -b 8192 -f 1024
^^^^^^^^
ps: -b 8192 代表 blocksize=8192, 这种"较大单位"是用来加速大档案的存取用的

在 FreeBSD 中, 内定的是 -i 4096 -b 8192 -f 1024. 如果您要架 bbs/new 的话
可以考虑用 -i 1024 -b4096 -f1024

unixer

============================================================================
From: alexj@mail.tmc.edu.tw (Ji, Wen-Jie)
Newsgroups: tw.bbs.comp.386bsd
Subject: Re: HELP !! The parameter of newfs
Date: Thu, 12 Dec 1996 01:39:31 GMT

没关系,我自己找到答案了,写在此让大家分享一下.
所谓 block size & fragment size, 这是属于 file system
的一种解决方案. 自4.3 BSD, BSD 用这种方法来解决档案 fragment
的问题
先假设 a block size= 4K, a fragment size = 256Bytes.
假如你现在要将一个 1K 的新档案写入 file system, FS 会把它存入 4
个fragment,而不会存入 block,一但这个档案继续被 append 增加到 4K
时, FS 会将它转存到一个 block中, 而原来的 16 个fragments 就会被 clean
^^^^^^^^^^^^^^^^^^^^
因为当你的档案大到 4K 时,它占用
了 16 (4K / 256 bytes) 个 fragments
再举个例子, 如果现在又存了一个新的 4.1K 的档案, FS 会分配
一个 block 及 4个 fragment 给 这个档案,
因为 1 block + 4 fragments = 4 K + 256 bytes * 4 = 4.1K

所以,有此可知,对于一台 news server, bbs, 或是会有大量的小档案存取时,
为了降低 FS 的空间耗损率,应该采用 -b 4096 -f 256,
而不要采用预设值的 -b 8192 -f 1024,因为大部分的信件都不超过 512 bytes,
有些更不超过 256 bytes, 但是这样可能会降低存取的速度.但我相信不严重
有兴趣的人可以试试.

=========================================================================

newfs 时的参数的影响:(以 100MB 的分割去作测试)

>From jason@csie.NCTU.edu.tw Fri Mar 14 23:53:58 1997
From: Jason Chang
inode大小的最佳设置

inode size 倒底要多大才比较好?有人说如果小档案多,则以 1024 byte 较好。

这样的思考原则好像不是很谨慎。多少才叫『多』呢?我想我们需要一点定量的分析才对。

首先我们来『观察』一下 inode size 大小对我们 filesystem (以下 filesystem 均简称 fs) 及系统的相对性影响:

inode size 越小,inode table 越肥,可用空间越小。
inode size 越小,link 就越长,越会拖慢速度。
inode size 越小,空间利用率就越高。
此外,因为 x86 的 pagesize=4K 的特性,在做 mmap() 及 swap 这类的 virtual memory 动作时,如果 inode size 为 4K 的倍数,将较有效率。

所以,看来 inode size <4K 除了空间利用率较高以外,其馀全都是缺点。
而就一般实际经验来讲,空间利用率的提高,并不足以弥补因 inode table 的肥大而浪费掉的空间......所以一般而言 4K 是一个不错的经验值。


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

上面最後一点,我们提到了『空间利用率的提高,并不足以弥补因 inode table 的肥大而浪费掉的空间』一个事实;它的确是一个事实,除非您的 fs 是专供 BBS 这种系统而使用。以下是一些参考数据:

表一: inode size 和 inode table 大小关系

inode size(byte) inode table 在该 fs 上所占掉的百分比
1024 12.57% (约 1/8)
2048 6.31% (约 1/4)
4096 3.19%
8192 1.63%
16384 0.84%
32768 0.45%

所以以一个 1GB 的 partition 来造 fs 为例,不同的 inode size 将会立刻 先使用掉的容量 (拿去存 inode table 了) 是:

表二: inode size 与 inode table 大小 (在 1GB fs 中)

inode size(byte) inode table 大小
1024 128.7MB
2048 64.6MB
4096 32.6MB
馀类推

试想,一个 1GB 的 fs 就只为了 inode size=1024 而就先用掉了 128MB 的空间, 除非将来我们的小档案真的很多很多,不然是补不回来的。

再来我们举例比较一下 inode size=1024 与 inode size=2048 的 fs:

以一个大小不到 1k 的档存在 inode size=1024 的 fs 中,是比在 inode size=2048 的 fs 中省下了 1k 的空间;但在 1GB 的 fs □, 要有 (128.7-64.6) * 1024 = 65614 个这样多的小档案,才算是『赚到了』; 呵呵.....你的 fs □凑得出这麽多小於 1k 的档吗?

类推 512MB 的 fs □,就要有 32820 个小於 1k 的档才算『赚到了』。

小於 1k 的档,除非你是开 bbs 的,不然在同一个 file system 上 想凑出 10000 个都很难;


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

我想,不再举个更实际的例子,恐怕还是有人不信。 以下是我以前对某个 1GB fs 中的 file size 统计:

表三: 本人某个旧 1GB fs 中的 file size 统计:

档案大小的□围 该大小□围内的档案个数
不到1K的 6538
1-2K 2053
2-4K 1565
4-8K 1064
8-16K 1011
16-32K 595
32K以上 1112

OK,看起来很明显地,不满 1k 大小的档案个数,已经占了快一半了; 所以直觉上会认为 inode size=1024 比较好?错了......

以下是以 inode size 来看 (fs 为 1GB 大小) 相对浪费空间的大小:

表四: 档案空间相对浪费大小与 inode size 对应表:

inode size(byte) 档案空间相对浪费大小加上 inode table 大小
1024 131766KB (即 inode table 大小)
2048 72743KB (inode table size + 1K*6538)
4096 57208KB (inode table size + 3K*6538 + 2K*2053)
8192 81410KB (inode table size + 7K*6538 + 6K*2053.....)
16384 162959KB (馀请类推)
32768 354549KB

所以反而以 inode size=4k 最佳。

上面那些『空间相对浪费大小』计算上有点复杂, 不另说明. (呵呵, 搞不好我的算法是错的......所以不敢公布算法)

以同样的分析来看我的 bbs 的情况, inode size=1024 是最佳的, 因为小於 1k 的档案竟然多达四万个以上.

/usr 分析出来是以 inode size=2048 最佳。

但请注意, 以上只是空间利用率的分析, 不是速度上的分析....
......
显示全文...

linux文件系统基础知识

0 评论

1、linux文件系统分配策略:
块分配( block allocation ) 和 扩展分配 ( extent allocation )
块分配:磁盘上的文件块根据需要分配给文件,避免了存储空间的浪费。但当文件扩充时,会造成文件中文件块的不连续,从而导致过多的磁盘寻道时间。
每一次文件扩展时,块分配算法就需要写入文件块的结构信息,也就是 meta-dada 。meta-data总是与文件一起写入存储设备,改变文件的操作要等到所有meta-data的操作都完成后才能进行,
因此,meta-data的操作会明显降低整个文件系统的性能。
扩展分配: 文件创建时,一次性分配一连串连续的块,当文件扩展时,也一次分配很多块。meta-data在文件创建时写入,当文件大小没有超过所有已分配文件块大小时,就不用写入meta-data,直到需要再分配文件块的时候。
扩展分配采用成组分配块的方式,减少了SCSI设备写数据的时间,在读取顺序文件时具有良好的性能,但随机读取文件时,就和块分配类似了。
文件块的组或块簇 ( block cluster) 的大小是在编译时确定的。簇的大小对文件系统的性能有很大的影响。
注: meta-data 元信息:和文件有关的信息,比如权限、所有者以及创建、访问或更改时间等。
2、文件的记录形式
linux文家系统使用索引节点(inode)来记录文件信息。索引节点是一种数据结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。
一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一的元素对应。每个索引节点在数组中的索引号,称为索引节点号。
linux文件系统将文件索引节点号和文件名同时保存在目录中,所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。
对于一个文件来说,有一个索引节点号与之对应;而对于一个索引节点号,却可以对应多个文件名。
连接分为软连接和硬连接,其中软连接又叫符号连接。
硬连接: 原文件名和连接文件名都指向相同的物理地址。目录不能有硬连接;硬连接不能跨文件系统(不能跨越不同的分区),文件在磁盘中只有一个拷贝。
由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此硬连接可以防止不必要的误删除。
软连接: 用 ln -s 命令建立文件的符号连接。符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。没有防止误删除的功能。
3、文件系统类型:

ext2 : 早期linux中常用的文件系统
ext3 : ext2的升级版,带日志功能
RAMFS : 内存文件系统,速度很快
NFS : 网络文件系统,由SUN发明,主要用于远程文件共享
MS-DOS : MS-DOS文件系统
VFAT : Windows 95/98 操作系统采用的文件系统
FAT : Windows XP 操作系统采用的文件系统
NTFS : Windows NT/XP 操作系统采用的文件系统
HPFS : OS/2 操作系统采用的文件系统
PROC : 虚拟的进程文件系统
ISO9660 : 大部分光盘所采用的文件系统
ufsSun : OS 所采用的文件系统
NCPFS : Novell 服务器所采用的文件系统
SMBFS : Samba 的共享文件系统
XFS : 由SGI开发的先进的日志文件系统,支持超大容量文件
JFS :IBM的AIX使用的日志文件系统
ReiserFS : 基于平衡树结构的文件系统
udf: 可擦写的数据光盘文件系统
4、虚拟文件系统VFS

linux支持的所有文件系统称为逻辑文件系统,而linux在传统的逻辑文件系统的基础上增加料一个蓄念文件系统( Vitual File System ,VFS) 的接口层。
虚拟文件系统(VFS) 位于文件系统的最上层,管理各种逻辑文件系统,并可以屏蔽各种逻辑文件系统之间的差异,提供统一文件和设备的访问接口。
5、文件的逻辑结构
文件的逻辑结构可分为两大类: 字节流式的无结构文件 和 记录式的有结构文件。
由字节流(字节序列)组成的文件是一种无结构文件或流式文件 ,不考虑文件内部的逻辑结构,只是简单地看作是一系列字节的序列,便于在文件的任意位置添加内容。
由记录组成的文件称为记录式文件 ,记录是这种文件类型的基本信息单位,记录式文件通用于信息管理。
6、文件类型

普通文件 : 通常是流式文件
目录文件 : 用于表示和管理系统中的全部文件
连接文件 : 用于不同目录下文件的共享
设备文件 : 包括块设备文件和字符设备文件,块设备文件表示磁盘文件、光盘等,字符设备文件按照字符操作终端、键盘等设备。
管道(FIFO)文件 : 提供进程建通信的一种方式
套接字(socket) 文件: 该文件类型与网络通信有关
7、文件结构: 包括索引节点和数据
索引节点 : 又称 I 节点,在文件系统结构中,包含有关相应文件的信息的一个记录,这些信息包括文件权限、文件名、文件大小、存放位置、建立日期等。文件系统中所有文件的索引节点保存在索引节点表中。
数据 : 文件的实际内容。可以是空的,也可以非常大,并且拥有自己的结构。
8、ext2文件系统

ext2文件系统的数据块大小一般为 1024B、2048B 或 4096B
ext2文件系统采用的索引节点(inode):
索引节点采用了多重索引结构,主要体现在直接指针和3个间接指针。直接指针包含12个直接指针块,它们直接指向包含文件数据的数据块,紧接在后面的3个间接指针是为了适应文件的大小变化而设计的。
e.g: 假设数据块大小为1024B ,利用12个直接指针,可以保存最大为12KB的文件,当文件超过12KB时,则要利用单级间接指针,该指针指向的数据块保存有一组数据块指针,这些指针依次指向包含有实际数据的数据块,
假如每个指针占用4B,则每个单级指针数据块可保存 1024/4=256 个数据指针,因此利用直接指针和单级间接指针可保存 1024*12+1024*256=268 KB的文件。当文件超过268KB时,再利用二级间接指针,直到使用三级间接指针。
利用直接指针、单级间接指针、二级间接指针、三级间接指针可保存的最大文件大小为:
1024*12+1024*256+1024*256*256+1024*256*256*256=16843020 KB,约 16GB
若数据块大小为2048B,指针占4B,则最大文件大小为: 2048*12+2048*512+2048*512*512+2048*512*512*512=268,960,792 KB 约 268GB
若数据块大小为4096B,指针占4B,则最大文件大小为: 4096*12+4096*1024+4096*1024*1024+4096*1024*1024*1024=4,299,165,744 KB ,约 4TB
注: 命令 tune2fs -l /dev/sda5 可查看文件系统
ext2文件系统最大文件名长度: 255个字符

ext2文件系统的缺点:
ext2在写入文件内容的同时并没有同时写入文件meta-data, 其工作顺序是先写入文件的内容,然后等空闲时候才写入文件的meta-data。若发生意外,则文件系统就会处于不一致状态。
在重新启动系统的时候,linux会启动 fsk ( file system check) 的程序,扫描整个文件系统并试图修复,但不提供保证。
9、ext3文件系统:

ext3基于ext2的代码,所以磁盘格式与ext2相同,使用相同的元数据。
ext2文件系统无损转化为ext3文件系统: tune2fs -j /dev/sda6

日志块设备( Journaling block device layer,JBD)完成ext3文件系统日志功能。JBD不是ext3文件系统所特有的,它的设计目标是为了向一个块设备添加日志功能。
当一个文件修改执行时,ext3文件系统代码将通知JBD,称为一个事务(transaction)。发生意外时,日志功能具有的重放功能,能重新执行中断的事务。

日志中的3种数据模式:
1)、data=writeback :不处理任何形式的日志数据,给用户整体上的最高性能
2)、data=odered :只记录元数据日志,但将元数据和数据组成一个单元称为事务(transaction) 。此模式保持所句句的可靠性与文件系统的一致性,性能远低于data=writeback模式,但比data=journal模式快
3)、data=journal :提供完整的数据及元数据日志,所有新数据首先被写入日志,然后才被定位。意外发生过后,日志可以被重放,将数据与元数据带回一致状态。这种模式整体性能最慢,但数据需要从磁盘读取和写入磁盘时却是3种模式中最快的。
ext3文件系统最大文件名长度: 255个字符
ext3文件系统的优点:可用性、数据完整性、速度、兼容性
10、ReiserFS文件系统

ReiserFS文件系统是由Hans Reiser和他领导的开发小组共同开发的,整个文件系统完全是从头设计的,是一个非常优秀的文件系统。也是最早用于Linux的日志文件系统之一。
ReiserFS的特点
先进的日志机制
ReiserFS有先进的日志(Journaling/logging)功能 机制。日志机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘。文件与数据的安全性有了很大提高。
高效的磁盘空间利用
Reiserfs对一些小文件不分配inode。而是将这些文件打包,存放在同一个磁盘分块中。而其它文件系统则为每个小文件分别放置到一个磁盘分块中。
独特的搜寻方式
ReiserFS基于快速平衡树(balanced tree)搜索,平衡树在性能上非常卓越,这是一种非常高效的算法。ReiserFS搜索大量文件时,搜索速度要比ext2快得多。Reiserfs文件 系统使用B*Tree存储文件,而其它文件系统使用B+Tree树。B*Tree查询速度比B+Tree要快很多。Reiserfs在文件定位上速度非常 快。
在实际运用中,ReiserFS 在处理小于 4k 的文件时,比ext2 快 5 倍;带尾文件压缩功能(默认)的ReiserFS 比ext2文件系统多存储6%的数据。
支持海量磁盘
ReiserFS是一个非常优秀的文件系统,一直被用在高端UNIX系统上,可轻松管理上百G的文件系统,ReiserFS文件系统最大支持的文件系统尺寸为16TB。这非常适合企业级应用中。
优异的性能
由于它的高效存储和快速小文件I/O特点,使用ReiserFs文件系统的PC,在启动X窗口系统时,所花的时间要比在同一台机器上使用ext2文 件系统少1/3。另外,ReiserFS文件系统支持单个文件尺寸为4G的文件,这为大型数据库系统在linux上的应用提供了更好的选择。......
显示全文...

转载__文件系统结构图

0 评论

此图收集自网络,出处不详,如果有意见请联系我




......
显示全文...

Linux系统文件命令精通指南(下)

0 评论

在“Linux 文件命令精通指南(上)”中,我们讨论了利用最基础和最常用 Linux 文件命令所需的基本信息。在本文中,我将对 Linux 系统命令作同样的讨论。

  我们在前一篇文章中了解到,在 Linux/UNIX 世界中,一切都被看作文件,包括系统管理命令。单独对于组织而言,我们在本系列的第一部分中讨论了文件命令,并将在本文中提供最有用的系统诊断和维护命令。

  对于文件命令,我们在此处详尽讨论了某些相当简单和直观的管理命令。而只描述了其他较复杂命令的功能,以便在您需要使用时,知道存在这些命令及 其用途。本文不涉及对每个命令使用背后的基本原理的详细讨论,但是我们将讨论最基本和最有用的命令,这些命令用于监视和管理打印机服务、文件系统、磁盘和 进程。

  有关超级用户的更多信息

  这里讨论的很多命令可以由常规用户在其自己的文件和进程中执行。但是,某些命令,如 fdisk,需要有 root 权限才能运行。

  为了您的系统的完整性,建议您避免直接以 "root" 登录到系统中。相反,通常更适合以常规用户登录,然后执行 su 或从 X window 执行 sux 命令来运行系统管理功能。(Sux 为您提供 X window 环境以及 root 权限。)当您以 root 用户登录时,您会始终知道您处于这种状态,因为您的提示符变为“#”。

  超级用户能够使用 sudo,有选择地将那些通常为 root 用户或其他特殊用户所保留的权限分配给一个不同的常规用户。root 用户可以定义实际和有效的用户和组标识号 uid 和 gid,以便与预期用户的标识相匹配。这种预期用户可以是(但不必是)被允许运行该命令的用户。

  换言之,超级用户可以允许其他用户执行某个命令,但也可以确定由进程所产生的任何结果文件应该属于 root 用户或任何由超级用户指定的其他用户。Sudo 权限一经分配,则只需要用户使用自己的口令进行验证,而不需要 root 用户口令。

  通用命令

  从技术上讲,Uname、diff、date、sort 和 uniq 应该看作文件命令,但由于它们经常用于诊断和维护例程的系统管理方面,在这里解释它们更有意义。

  Uname

  Uname 提供了常规系统信息。当指定 -a 选项时,显示所有可用信息:

  $ uname -a
  Linux linux 2.4.18-4GB #1 Wed Mar 27 13:57:05 UTC 2002 i686 unknown

  在这里我们从左向右看到常规的系统信息。每条信息都有自己的选项(在下面的圆括号中),可以单独显示:

  操作系统名称为 Linux(-s)。

  本机的网络节点名为 linux (-n)。

  操作系统发布版本为 4.5.18-4GB (-r)。

  操作系统版本为 #1 Wed Mar 27 13:57:05 UTC 2002 (-v)。

  机器类型为 i686 (-m)。

  这里的处理器类型 (-p) 为未知。

  类似地,stty 显示关于您的终端设置的信息:

$ stty -a
speed 38400 baud; rows 40; columns 103; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck
-istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

  第二行和第三行显示了将在命令行分别调用的特殊字符和键序列。例如,"^Z" 即 CNTRL-Z 在本系统中发送一个终端休止符。退出符号以 "^\" 即 CNTRL-\ 发送,而我们可以将其改为 "^X",如下所示:

  $ stty quit ^X

  在这种情况下,您实际要输入 ^ 符号,而不是 CNTRL 键。这种改变只在当前窗口中起效。为了使这种改变永久生效,需要在您的 .bashrc 文件中输入该语句。

  Diff 和 Date。顾名思义,Diff 比较两个文件。它返回那些导致文件不同的行,并返回关于如何使文件变得相同的一些含义隐晦的输出:

  $ diff test.out test2.out
  0a1
  > Another test.

  在这里我们被告知,需要将 "Another test." 这一行添加到 test.out,以便使它与 test2.out 相似。第一个字符 "0" 是要在 test.out 中编辑的行号;"a" 表示该行应该被添加到 test.out,以便与 test2.out 的第一行 "1" 相匹配。如果我们需要更改 test.out,则第二个字符也可以是 "c",而如果我们需要从 test.out 中删除一些内容,则第二个字符是 "d"。

  您可能希望使一个文件与另一个文件相似,以便为某些代码提供补丁。diff 还经常作为分析工具,用于验证程序或脚本 — 例如 sed 脚本 — 的输出是否是所预期的输出。

  date 命令可用于显示或设置日期。如果用户具有超级用户权限,则他或她可以通过在以下命令中提供一个数字型字符串来设置日期:

  $ date 0101010004

  此命令将日期设置为 2004 年 (04) 1 月 1 日 (0101) 凌晨 1 时 (0100)。

  但是,任何用户可以用所需的格式来显示日期。注意在格式序列之前需要一个加号 "+"。如果没有出现此命令的预期输出,则尝试将它包含在单引号中:

$ date +'%H%M%S'
204748

  您可以在序列中包含空格,这时您需要使用双引号:

$ date +"%H %M %S"
20 47 51

  在日期的主页上列有三十多种不同的格式序列,这些序列可以按需要结合起来,以获得您最后的输出格式。

  date 的输出还可以用于脚本中,如:

$ date -d '2 day'
Thu Jan 29 19:02:02 EST 2004

  -d 选项指示 date 显示其后字符串中所描述的时间。在上例中,我们要求显示从现在起(2004 年 1 月 27 日)两天后的日期。我们也可以要求显示三天前的日期,其命令为:

$ date -d '-3 day'
Sun Jan 25 20:56:59 EST 2004

  date 多种功能的另一个示例是能够向其输出附加字符串,为生成唯一的文件名提供了一种便利的方法。

$ ls -l | cat > $(date +ls_%d%b%y%H%M.out)
$ ls ls_*.out
ls_04Feb041633.out

  在这里,我们将一个长文件列表的输出传送给 cat,它将我们的输出再传送到一个名为 ls_04Feb041609.out 的文件。注意我们为文件名使用了一个变量,由美元符号 "$" 表示。依次将 "ls_" 和 ".out" 附加到日期,其格式为月份中的日 (%d)、本地的月份名称缩写 (%b)、年份的最后两位数字 (%y)、小时 (%H) 和分钟 (%M),从而产生此文件名。

  Sort 和 Uniq。 您可以从管道或从命令行所指定的文件对文本文件的行进行 sort 操作。除非另外指定,sort 对多列输出的第一列进行操作。在默认情况下,除非使用 -n 选项,数字型的列按字母顺序排序。

  Sort 列可以用两种不同的格式指定。如果使用 -k 选项,则列的位置从 1 开始进行编号。您还可以使用 +POS1 格式,从第一列编号为零开始进行列的编号。以下两个命令产生相同的输出:

$ ls -l *.out | sort +5 -7
$ ls -l *.out | sort -k 6,8
-rw-r--r-- 1 bluher users 375 Dec 5 2002 fdisk.out
-rw-r--r-- 1 bluher users 2447 Dec 28 20:15 ls.out
-rw-r--r-- 1 bluher users 590 Jan 4 21:24 greps.out
-rw-r--r-- 1 bluher users 78 Jan 4 21:25 sgrep.out
...

  在默认情况下,sort 命令的列分隔符是空格和制表符。可以使用 -t SEP 选项指定其他分隔符,其中 SEP 是您指定的分隔符号。sort 的默认顺序是从最低到最高,利用 -r 选项可以将顺序颠倒。

  Sort 可用于很多不同的任务。例如,它可用于对文件输出进行排序(如 /etc/passwd),或者如我们在下面所看到的那样,对 du 的输出进行排序。当使用 -m 选项时,sort 将文件合并,实际上并没有对它们进行排序。但是,如果您希望将它们排序,就应该在文件合并前对它们排序。

  Sort 经常与 uniq 命令一起使用,从已排序的文件中删除完全相同的行。uniq 命令在管道中经常跟在 sort 命令的后面,还可以使用 -c 选项来计算某一行所出现的次数,或者使用 -d 选项,只报告完全相同的行:

$ sort -m test.out test2_sort.out | uniq -c
1 Another test.
1 Testing testing
2 This is a test.

  在这里我们合并两个文件 test.out 和 test2_sort.out。然后我们使用 -c 选项,将输出传送到 uniq,这样最后的结果是按字母顺序排列的列表,完全相同的行被删除,并带有一个关于每行出现频率的报告。

  打印机控制

  在多数情况下,打印机命令的使用相对较为明确。通过在 lpr 命令后面指定文件名,将作业发送到打印机。如果没有提供文件名,则假定使用标准输入。使用 lpq 命令,您可以获得关于发送到打印机的作业的状态报告。当您指定作业号时,Lprm 将作业从行打印机后台打印队列中删除。

$ lpr grep2.out
$ lpq
Printer:lp@linux 'lpdfilter drv=upp method=auto color=yes'
Queue:1 printable job
Server:pid 1929 active
Unspooler:pid 1930 active
Status:waiting for subserver to exit at 21:24:14.637
Rank Owner/ID Class Job Files Size Time
active bluher@linux+928 A 928 grep2.out 779 21:24:14
done bluher A 877 (STDIN) 117258 13:09:53
$ lprm 928
Printer lp@linux:
checking perms 'cfA928linux.local'
dequeued 'cfA928linux.local'

  在这里,当我们将作业发送到打印机后,我们查询其状态。Lpq 向我们显示编号为 877 的作业已经完成,而我们刚发送的作业编号为 928。我们使用命令 lprm 928 将活动的作业从队列中删除。

  磁盘信息

  无论您是维护自己的系统还是支持具有很多用户的企业,监视磁盘空间都是系统管理员更重要的职责之一。du、df 和 fdisk 命令提供了可用磁盘空间的不同视图。

  du 命令提供对每个目录的文件空间使用情况的评估。在默认情况下,测量的单位是块的数目,块的大小通常在安装您的系统时确定。

  在以下的示例中,系统是使用 1024 字节的块安装的。如果没有指定目录,则 du 开始对当前目录进行计算。-h 选项以易于读懂的形式提供大小的值:

$ du -h Documents
105k Documents/jj
573k Documents/John
682k Documents

  可以使用 -a 选项更改输出,该选项指示 du 显示文件和目录的块数。选项 --block-size=SIZE 指示 du 以 SIZE 所指定字节大小的块的数目来显示输出。

$ du --block-size=512 Documents
209 Documents/jj
1146 Documents/John
1363 Documents

  在默认情况下,du 还为每个子目录递归地打印信息。通过使用 max-depth=N 选项可以限制这种操作,其中 N 等于被报告的最大级数:

$ du --max-depth=2 .
$ du --max-depth=2 | sort -n
4 ./.xemacs
4 ./public_html
105 ./Documents/jj
573 ./Documents/Ian
682 ./Documents
2420 ./jdevhome/system
8350 ./jdevhome/system9.0.3.1035
13483 ./jdevhome/mywork
24252 ./jdevhome
...

du 报告目录和子目录的空间使用情况,而 df 报告已安装文件系统的磁盘空间使用情况:
$ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda6 4195632 1983656 2211976 48% /
/dev/hda5 14607 3778 10075 28% /boot
/dev/hda9 937372 494028 443344 53% /home
/dev/hda8 6297248 3876880 2420368 62% /opt
shmfs 256220 0 256220 0% /dev/shm

  在这里,df 报告了五个文件系统的状态。与 du 类似,df 利用 -h 选项提供人类可读的输出:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda6 4.0G 1.9G 2.1G 48% /
/dev/hda5 14M 3.7M 9.8M 28% /boot
/dev/hda9 915M 476M 440M 52% /home
/dev/hda8 6.0G 3.7G 2.3G 62% /opt
shmfs 250M 0 250M 0% /dev/shm
  df 命令还允许您利用 -block-size=SIZE 选项来指定块的大小。

  fdisk 命令是 Linux 的分区表操作命令。与 du 和 df 不同,没有 root 用户权限时不能运行该命令。如果指定了 -l 选项,则可以将它仅用于报告的目的。它提供了您的整个分区表的完整视图,而不仅仅是您使用 df 所看到的扩展 Linux 分区:

# fdisk -l

Disk /dev/hda:240 heads, 63 sectors, 1940 cylinders
Units = cylinders of 15120 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 286 2162128+ c Win95 FAT32 (LBA)
/dev/hda2 * 288 1940 12496680 5 Extended
/dev/hda5 288 289 15088+ 83 Linux
/dev/hda6 290 844 4195768+ 83 Linux
/dev/hda7 845 983 1050808+ 82 Linux swap
/dev/hda8 984 1816 6297448+ 83 Linux
/dev/hda9 1817 1940 937408+ 83 Linux

  进程监视

  在繁忙的多用户系统中,进程监视也是 Linux 系统管理员的一项重要职责。在这方面,ps 和 top 是两个最有用的命令。

  ps 命令提供了当前运行进程的快照。

  以下是 ps 的最简单形式:

$ ps
PID TTY TIME CMD
3884 pts/1 00:00:00 bash
3955 pts/2 00:00:00 more
3956 pts/5 00:00:05 sqlplus

  PID 是进程的标识号。

  TTY 是进程所属的终端控制台。

  TIME 列是进程所使用的总的 CPU 时间。

  CMD 列列出正在执行的命令行。

  使用带有 -ef 选项的 ps,返回系统中所有用户的所有进程的完整列表。如果您将此 ps 命令的结果传送到 grep 中,则该结果更易于查看。例如:

$ ps -ef | grep oracle
UID PID PPID C STIME TTY TIME CMD
oracle 1633 1 0 13:58 ?00:00:00 ora_pmon_ora1
oracle 1635 1 0 13:58 ?00:00:00 ora_dbw0_ora1
oracle 1637 1 0 13:58 ?00:00:01 ora_lgwr_ora1
oracle 1639 1 0 13:58 ?00:00:02 ora_ckpt_ora1
oracle 1641 1 0 13:58 ?00:00:02 ora_smon_ora1
oracle 1643 1 0 13:58 ?00:00:00 ora_reco_ora1
oracle 1645 1 0 13:58 ?00:00:00 ora_cjq0_ora1
oracle 1647 1 0 13:58 ?00:01:18 ora_qmn0_ora1
oracle 1649 1 0 13:58 ?00:00:00 ora_s000_ora1
oracle 1651 1 0 13:58 ?00:00:00 ora_d000_ora1

  注意,当您将 ps 的输出传送到 grep 命令时,列标题并不象在 ps 命令本身所使用时那样正常地显示。为便于说明,标题位于输出的上方,以便清楚地显示其联系。
  虽然 uid 通常是指数字型的标识,但在第一列下指定的是用户名,标记为 UID。

  PPID 是父进程的标识号。对于 Oracle 进程,这里的标识号为 1 — 它是 init 进程(所有进程的父进程)的 id,因为在本系统中安装的 Oracle 是作为登录进程的一部分而启动的。

  标为 C 的列是由 CPU 用于计算执行优先级的因子。

  STIME 是指进程的启动时间。

  问号表示这些进程不属于任何 TTY,因为它们是由系统启动的。

  以下是 ps 命令带有某些不同选项的另一个示例。注意,其中很多列与执行带有 -ef 选项的 ps 时的列相同:

$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
bluh 4024 0.0 0.2 2240 1116 pts/1 S 20:59 0:00 su bluher
bluh 4025 0.0 0.3 2856 1668 pts/1 S 20:59 0:00 bash
bluh 4051 0.0 0.2 2488 1504 pts/1 R 21:01 0:00 ps aux
bluh 4052 0.0 0.1 1636 600 pts/1 S 21:01 0:00 grep bluher

  除了提供重要的诊断信息,ps 命令还经常用于找出失控进程的 PID。例如,您的一个用户在 SQL*Plus 会话中输入一个笛卡尔联接。您可以执行以下的 ps 命令来找出其 PID:

$ ps -ef | grep bluher
...
bluher 4068 4064 0 21:14 pts/6 00:00:00 less
bluher 4112 3945 0 21:28 pts/5 00:08:42 sqlplus
...

  然后您可以使用以下命令将其终止:

  $ kill 4112

  常规用户可以看到所有的系统进程,但他们只能终止他们自己拥有的进程。

  Ps 只为您提供当前进程的快照。要即时查看最活跃的进程,可使用 top。Top 实时地提供进程信息。它还拥有交互式的状态,允许用户输入命令,如 n 后面跟有 5 或 10 等数字。其结果是指示 top 显示 5 或 10 个最活跃的进程。Top 持续运行,直到您按 "q" 退出 top 为止。

以下是 top 的部分显示: 8:14pm up 51 min, 7 users, load average: 0.02, 0.03, 0.05
96 processes:87 sleeping, 2 running, 0 zombie, 7 stopped
CPU states:6.4% user, 3.5% system, 0.0% nice, 89.9% idle
Mem:512440K av, 392288K used, 120152K free, 0K shrd, 55668K buff
Swap:1050800K av, 0K used, 1050800K free 236128K cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
1289 root 18 0 78008 11M 1796 R 3.7 2.2 0:49 X
1965 bluher 20 0 12244 11M 10456 S 1.9 2.3 0:01 kdeinit
1986 bluher 18 0 996 996 768 R 1.5 0.1 0:00 top
1803 bluher 20 0 16960 16M 13508 S 0.9 3.3 0:03 kdeinit
1804 bluher 20 0 16964 16M 13508 S 0.9 3.3 0:03 kdeinit
1800 bluher 19 0 12260 11M 10076 S 0.1 2.3 0:04 kdeinit
1 root 20 0 220 220 188 S 0.0 0.0 0:04 init
...

  关闭

  看来应该以 shutdown 命令来结束本次讨论。与本文以及上一篇文章中所讨论的许多命令一样,通常有一种 GUI 形式的替代方法可以关闭您的系统。但是,当您需要手动关闭时,您可以使用以下命令立即进行关闭:

  $ shutdown -h now

  您可以使用以下命令手动地重新启动系统:
  $ shutdown -r now

  注意这两个命令都需要指定时间。您可以指定 "now" 或使用带有时间秒数的 -t 选项。

  我们在这两篇文章中讨论了大量内容,但我们绝对无法涵盖 Linux 可能具有的全部内容。我们没有讨论的命令还有很多,而我们没有看到的命令选项则更多。但是,在这里我们希望您至少找到了开始管理 Linux 系统所需的最少限度的工具。


......
显示全文...