- 在线时间
- 63 小时
- 最后登录
- 2019-5-3
- 注册时间
- 2004-5-10
- 听众数
- 443
- 收听数
- 0
- 能力
- -250 分
- 体力
- 10122 点
- 威望
- -12 点
- 阅读权限
- 150
- 积分
- -516
- 相册
- 6
- 日志
- 10
- 记录
- 10
- 帖子
- 2003
- 主题
- 1253
- 精华
- 43
- 分享
- 8
- 好友
- 1292

复兴中华数学头子
TA的每日心情 | 开心 2011-9-26 17:31 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
- 自我介绍
- 数学中国网站(www.madio.cn)是目前中国最大的数学建模交流社区
 群组: 越狱吧 群组: 湖南工业大学数学建模同盟会 群组: 四川农业大学数学建模协会 群组: 重庆交通大学数学建模协会 群组: 中国矿业大学数学建模协会 |
Linux必学60个命令文件处理</P>' [( c* [9 N8 [& a/ r
Linux系统信息存放在文件里,文件与普通的公务文件类似。每个文件都有自己的名字、内容、存放地址及其它一些管理信息,如文件的用户、文件的大小等。文件可以是一封信、一个通讯录,或者是程序的源语句、程序的数据,甚至可以包括可执行的程序和其它非正文内容。 Linux文件系统具有良好的结构,系统提供了很多文件处理程序。这里主要介绍常用的文件处理命令。 3 f3 ?2 _" C4 ?5 S j
J9 O' z1 l, o. D4 `# xfile 8 O& F# \; C/ Z6 c
" _$ g2 Y: ^. l( C
1.作用
$ Z# E4 k2 y4 [' U4 h1 }) M% t7 ^; V+ j
file通过探测文件内容判断文件类型,使用权限是所有用户。 ! j- G' n* r9 o) Q( y. i
6 s. P5 D W9 f" h: a2.格式 0 Y0 @0 I" G! K6 L* V/ Y7 M
; \; x! ]- v* `) Gfile [options] 文件名 % R3 \7 P$ c( W! D
; `/ Y& C( S" r9 q+ U
3.[options]主要参数
8 c6 I" @' v' K( e
6 S' f9 J: Z4 ~" t-v:在标准输出后显示版本信息,并且退出。 ! f! x: @$ z; m
* ]4 W- ], Q/ V/ V; [* z/ ~/ U8 _
-z:探测压缩过的文件类型。 ; R# S1 N) [0 R+ T
+ x3 Z4 u# l4 K
-L:允许符合连接。
' P0 v. l$ l4 X/ ~5 S; [+ f
! O) q7 y. m% U- n! R# x, c# d4 D-f name:从文件namefile中读取要分析的文件名列表。
5 K/ [) N2 c' }( g4 F' U* \/ |
1 j4 p' K {/ `4 J/ g4.简单说明
( j; i4 I- ^; V1 a" Z: y5 `# t' ` @) H; b/ m+ @# r
使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script文件,或者是其它的什么格式。file能识别的文件类型有目录、Shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。
/ m9 s4 m8 E+ t8 S3 I& ? T& W0 j, c
5.应用实例 9 q, x, D8 M4 J _/ `) G" e
) v. x4 K* h+ m: O s1 j, d2 p) }
如果我们看到一个没有后缀的文件grap,可以使用下面命令:
" P6 h) u$ a4 W0 j' W: F
' ?8 `$ X/ ]6 s" _$ file grap ) v' |% O* R6 U0 w9 A. U* t. B# h1 j
& f4 ^ }( x5 H8 `6 f( z3 ngrap: English text
0 t4 F2 a( _7 \2 [7 x' h- a: q
" Z7 W% k& L u* v此时系统显示这是一个英文文本文件。需要说明的是,file命令不能探测包括图形、音频、视频等多媒体文件类型。
( S6 u5 S" v6 t9 s5 Z( {* L- n2 ?0 O* n. Y: G0 E; V; V* Y
mkdir 3 q) i, N5 d1 |- z7 h. i: l8 j
8 Z2 h4 T( e- T3 ]3 J* i' ^
1.作用 7 I/ j7 f2 t) R8 Q0 k9 [$ y- o8 y% F, ~
" S1 T7 h2 z* f- s- i3 c8 Vmkdir命令的作用是建立名称为dirname的子目录,与MS DOS下的md命令类似,它的使用权限是所有用户。 # p, w3 M5 J% h; m
2 \* c( N* k* u6 s' v2.格式 . y d8 @4 e3 x: y- {3 O( o
( Z$ G! [# u5 L8 C5 C9 F2 l
mkdir [options] 目录名
5 V1 r- f2 [ W3 |: P
9 j# {3 T, e9 n9 a3.[options]主要参数
0 ]# O8 v! u5 `% L$ N5 p: H" r0 ^) y4 L% K9 H
-m, --mode=模式:设定权限<模式>,与chmod类似。 , e: @& l: u8 W0 b4 x( w
1 S. h7 W/ X9 e
-p, --parents:需要时创建上层目录;如果目录早已存在,则不当作错误。 * v, e2 `. d# v; |8 u- T
" k, j3 v: ?. ?0 D
-v, --verbose:每次创建新目录都显示信息。
( T. v- j+ f4 N+ g1 h) H. \8 X$ o' H5 A0 _' E
--version:显示版本信息后离开。
/ N+ \6 S% O, d3 f& z& h* d) \+ D" F! y$ n3 ]" i- i- U
4.应用实例
2 F: y$ P5 {+ f1 d/ g8 g
- C, {6 d" ]% Z; V8 D! `在进行目录创建时可以设置目录的权限,此时使用的参数是“-m”。假设要创建的目录名是“tsk”,让所有用户都有rwx(即读、写、执行的权限),那么可以使用以下命令:
- `; d3 A+ K) ~* Y- y i2 `: j! ~& v ?( D" C2 F5 g: C; J
$ mkdir -m 777 tsk
& t2 k* p: z+ n, X6 Q
' B! {# h/ ^$ Lgrep ' i: }) ?, j* `. I) @, _
5 @% l3 j; f- S: T; i1.作用
0 x p- f; G( R1 v1 _" Q3 c5 Z9 w: ]0 f/ t; h$ i8 [; Z
grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
# Y' X, ~% L$ s, h" @7 |& z7 D6 o z/ C7 k# M7 v! a: t) q
2.格式 ! S/ `" y% o0 J; j$ P7 H
! R( K# W# a4 u& P N% e
grep [options] 8 E0 e$ X: p1 q* [/ N1 H
+ ^$ A7 f1 K1 O- b) j
3.主要参数
! V' s7 |" Q: Z; B1 W7 ~- |$ s% m6 N6 x( I
[options]主要参数:
. b$ N8 y$ \/ m$ w- J' t; V
, j6 K. ?) C2 q. }-c:只输出匹配行的计数。
# ^/ N* A4 ~' T4 q& D2 P" y; U3 |& x/ h( F1 O+ h4 f+ ~& I
-I:不区分大小写(只适用于单字符)。
/ k E+ M8 a- w+ T
8 H; F" g" V$ p% Y$ ^-h:查询多文件时不显示文件名。
" G [7 W0 _/ q9 \! U+ D+ f' ?6 j! G4 R/ w W Y
-l:查询多文件时只输出包含匹配字符的文件名。 $ b3 u0 {/ t7 B: ]3 ~6 v( V8 W
/ v8 v/ j" D0 ~- K; H
-n:显示匹配行及行号。
, t5 h3 `* `& o9 }$ A. [/ Q) A
2 P. a$ O: V9 r-s:不显示不存在或无匹配文本的错误信息。 1 _5 j, N+ y/ X- k! [
" c2 q. f! R% X6 w-v:显示不包含匹配文本的所有行。
2 h" u2 R! _/ Y3 x4 I% |5 \: U3 @4 b6 A2 A/ d# }
pattern正则表达式主要参数:
. Y, z% w6 y( t) v. x( J5 o8 N) s
d, ^5 u$ l9 V$ Q6 T\:忽略正则表达式中特殊字符的原有含义。 % k' F' d& n b/ O8 g# F
6 ^3 e/ |7 V, B' s7 {
^:匹配正则表达式的开始行。 ; l" S, W# c1 v/ `' Q
1 n+ M. G/ `, ?8 q1 P7 Z+ {
$: 匹配正则表达式的结束行。
8 X8 S, Q3 T8 E" |- M7 t! | T$ L; v9 c% r: f
\<:从匹配正则表达式的行开始。 $ { n5 S8 Z9 e" D q3 Y
) e; l' C1 G* d6 A
\>:到匹配正则表达式的行结束。 2 g; d% n* {7 x8 B2 W; s
+ f0 s! F- n' u% v: L) Q
[ ]:单个字符,如[A]即A符合要求 。 . \3 d% J, D, e: P8 [
" U5 [' P- \& s7 S[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
) n8 P5 k& v" y/ r& u$ |; \0 W
7 ]: g# a9 y! K9 \, u# N, {( l。:所有的单个字符。 r) G( Z7 k5 Q8 ?
) Q; q6 w6 Z0 \+ p* :有字符,长度可以为0。 0 Q& x+ H. `8 s) \" G0 X
/ B, w8 C8 K; {5 @' E; u! X$ r正则表达式是Linux/Unix系统中非常重要的概念。正则表达式(也称为“regex”或“regexp”)是一个可以描述一类字符串的模式(Pattern)。如果一个字符串可以用某个正则表达式来描述,我们就说这个字符和该正则表达式匹配(Match)。这和DOS中用户可以使用通配符“*”代表任意字符类似。在Linux系统上,正则表达式通常被用来查找文本的模式,以及对文本执行“搜索-替换”操作和其它功能。 + O2 g8 U) z; d: Z3 B2 m
6 \: ^- c2 S" l
4.应用实例
; f; k3 v$ W8 B g' l0 E2 b$ A0 d/ M5 W6 B0 F$ \' q
查询DNS服务是日常工作之一,这意味着要维护覆盖不同网络的大量IP地址。有时IP地址会超过2000个。如果要查看nnn.nnn网络地址,但是却忘了第二部分中的其余部分,只知到有两个句点,例如nnn nn..。要抽取其中所有nnn.nnn IP地址,使用[0-9 ]\{3 \}\.[0-0\{3\}\。含义是任意数字出现3次,后跟句点,接着是任意数字出现3次,后跟句点。 9 x; L. U4 y" W2 u, x0 o
/ k6 p8 O* Y9 s8 z: h& c8 `" q$grep '[0-9 ]\{3 \}\.[0-0\{3\}\' ipfile K$ j1 y& O. @, |6 s
7 ?$ {- V7 X+ h7 @8 A# {
补充说明,grep家族还包括fgrep和egrep。fgrep是fix grep,允许查找字符串而不是一个模式;egrep是扩展grep,支持基本及扩展的正则表达式,但不支持\q模式范围的应用及与之相对应的一些更加规范的模式。
8 A$ s( e- t Z1 t% {
# V7 @* t" ?0 udd , h8 w$ e; X5 s
- \& P- l$ L7 N$ p L1.作用
) V3 v8 o/ _, S9 T; V; R1 r
: c- y$ |) [# ^dd命令用来复制文件,并根据参数将数据转换和格式化。 ( L5 T' c9 k: B
* n5 O, c5 o! ~ Y$ \
2.格式
7 C2 k2 @1 o {
, h8 p; ^- A3 {6 sdd [options]
# n) C7 a" Q1 J; g$ h1 O0 k; ^" {( c+ n0 F" @8 \! J
3.[opitions]主要参数 ) Y1 V( A4 {3 C& K
! c5 S- A f6 {, \bs=字节:强迫 ibs=<字节>及obs=<字节>。
0 k2 ?( ?3 V) W7 M
# p8 f2 p. z F& ^5 pcbs=字节:每次转换指定的<字节>。
; ?" x) v9 W8 q) U6 ?+ z. L5 j' \6 [1 B- F; a9 M6 p
conv=关键字:根据以逗号分隔的关键字表示的方式来转换文件。
6 U& Z" v0 H. p% i6 q: ~# Z5 @9 F
2 p \+ V7 j5 A5 Ycount=块数目:只复制指定<块数目>的输入数据。 9 b' |# P4 T+ [- o
1 v. N f; Y3 t/ L" C0 Y2 Sibs=字节:每次读取指定的<字节>。
3 F7 i1 J0 M: N' F( T
2 a, m. S1 C2 z9 n0 Kif=文件:读取<文件>内容,而非标准输入的数据。 ) {$ `: N$ t P3 ]& a7 f
0 M% ^2 f+ U. o( `4 x( uobs=字节:每次写入指定的<字节>。
7 j# B. t6 ]7 X! a6 M' t4 S) I. p( P5 b, a+ {0 v, K2 n& E" M" w* ^
of=文件:将数据写入<文件>,而不在标准输出显示。
& e" m" P* _1 k% J! y a! d( ^4 G+ Q" F
seek=块数目:先略过以obs为单位的指定<块数目>的输出数据。
( J7 L. R$ r$ f" K1 F/ X* }/ w( H6 u( C$ M
skip=块数目:先略过以ibs为单位的指定<块数目>的输入数据。 & K9 M* u* w+ G5 g5 b
# F4 ^; ^% e% Z
4.应用实例 5 {5 k9 L0 h; f r/ m3 Y9 Q/ [9 W9 m
' i% u# \0 w% V. D$ _- [4 D
dd命令常常用来制作Linux启动盘。先找一个可引导内核,令它的根设备指向正确的根分区,然后使用dd命令将其写入软盘: # N# T2 y2 o2 x# A; q
$ x: {0 d: I$ }# k. Q: q4 P M1 N$ rdev vmlinuz /dev/hda
4 n9 ~0 K# y9 U5 G6 w* ?
9 ]* j8 y# _, B% ~' ^( n$dd if=vmlinuz of=/dev/fd0 + [' c9 `5 u2 Z! [, V {5 D
, @0 _" z* U+ F. k1 f
上面代码说明,使用rdev命令将可引导内核vmlinuz中的根设备指向/dev/hda,请把“hda”换成自己的根分区,接下来用dd命令将该内核写入软盘。
% w9 r6 R0 X! e3 ` H' ?. Lfind
. u4 \$ w# E$ P% v$ h0 m
- W* ?5 |* K4 u, l r1.作用
' }4 i- p e! l! H" C3 y
: r9 y1 W1 Q# p) [5 W8 xfind命令的作用是在目录中搜索文件,它的使用权限是所有用户。 + ~ ?$ w/ n! M8 `4 p& ]0 J
: Y2 V1 l9 q/ _5 w) c4 M( Z( c" d, e$ W2.格式 ) T4 Y9 J! y- q1 e/ Z+ O
9 s. S/ t$ e9 y) @7 k Q+ ]+ Y
find [path][options][expression]
: J. D3 Q% c' a7 K. M. q( W/ k/ O% h+ w* S) Z5 x5 h! k, I, M
path指定目录路径,系统从这里开始沿着目录树向下查找文件。它是一个路径列表,相互用空格分离,如果不写path,那么默认为当前目录。
- B8 A$ w; }8 V+ Q, i6 e% R+ o5 q/ }0 v/ P7 o' N, B
3.主要参数
5 }" p5 X( r; O2 X. V, ~9 |* y* |8 f7 Z- X! Y
[options]参数:
/ `8 {) t, v ~0 w2 c& x
7 t' d3 y& d5 \* }-depth:使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容。
" d' C& A' W, y) X5 y2 L2 K7 ~0 k V9 n* M
-maxdepth levels:表示至多查找到开始目录的第level层子目录。level是一个非负数,如果level是0的话表示仅在当前目录中查找。
6 P3 Z- P* Y9 i* \
" p5 x; ^4 o2 W+ [$ Z-mindepth levels:表示至少查找到开始目录的第level层子目录。
/ y% v$ @- \0 }2 N& l6 P% p% U' Q6 i; Y+ L
-mount:不在其它文件系统(如Msdos、Vfat等)的目录和文件中查找。
6 `( g7 S' D" j2 V& `$ u$ P5 U$ T6 r2 q
-version:打印版本。
; d+ t' p/ k9 e; o
" y# x" f. r7 ]6 d[expression]是匹配表达式,是find命令接受的表达式,find命令的所有操作都是针对表达式的。它的参数非常多,这里只介绍一些常用的参数。 8 Z( K4 [4 G. i( m B& P6 S; }
5 R% h$ V, O' p* h+ h% {9 v8 Y" \
—name:支持统配符*和?。 9 x* B. X6 A0 X, ^( b! V% @7 \7 E# f3 c
, h- N1 t5 t. o% ^1 V0 J" E
-atime n:搜索在过去n天读取过的文件。
! T# e k# f9 X Q! K/ A3 R9 f; I
-ctime n:搜索在过去n天修改过的文件。 ( R- v2 l6 d2 n) n* y+ K) _
) z& _* `7 L: r& d% \" M J
-group grpoupname:搜索所有组为grpoupname的文件。
- [7 g7 e) c8 z/ A$ q
" N6 E# J% a, |& m-user 用户名:搜索所有文件属主为用户名(ID或名称)的文件。
+ E& K5 Z! d2 x
9 E. i, @7 y9 B-size n:搜索文件大小是n个block的文件。
! `2 I4 J' v. z, {& ^, m, H; J! C' v9 O; f+ a; C
-print:输出搜索结果,并且打印。
L i4 \) `# Y8 H7 h
9 [2 ^, e9 b/ E* |% A" ~; C4.应用技巧 % f- X* z, a+ \4 s- d
/ o6 T& I1 [+ ^/ b( ifind命令查找文件的几种方法:
) ?) I! J. X0 J
1 v8 k3 s9 M0 M2 a* \(1)根据文件名查找
+ C3 Z" G i7 y* E# k7 {
/ \+ d; F! F* t5 ?例如,我们想要查找一个文件名是lilo.conf的文件,可以使用如下命令: 4 {- N8 e9 m- s! o' {
8 P4 }, m$ h9 o4 f% B. Hfind / -name lilo.conf 4 x& H3 N! s' q$ ~& I! t
4 K- h! c5 D, \+ U$ B* [find命令后的“/”表示搜索整个硬盘。 * x0 C, I; H" `+ N8 o
' U0 c# E- B& ~1 N3 H6 \) u6 _/ p
(2)快速查找文件 . ~3 `" M8 n0 p, B
' e0 H6 N" Z' @# r1 x3 G% M2 ~! D1 b根据文件名查找文件会遇到一个实际问题,就是要花费相当长的一段时间,特别是大型Linux文件系统和大容量硬盘文件放在很深的子目录中时。如果我们知道了这个文件存放在某个目录中,那么只要在这个目录中往下寻找就能节省很多时间。比如smb.conf文件,从它的文件后缀“.conf”可以判断这是一个配置文件,那么它应该在/etc目录内,此时可以使用下面命令:
5 v+ Q, Y0 b/ A0 I! I
/ S S! v7 t Z0 K8 n" H3 jfind /etc -name smb.conf
3 B- |+ B7 V5 ~% }, C4 s* V) H6 K* d6 ]! m/ ^) `4 ^
这样,使用“快速查找文件”方式可以缩短时间。
& ~2 X" U- {" N' l5 Z, ^6 m, _. r( q! h3 K' ?$ M3 a. b5 P6 a
(3)根据部分文件名查找方法 2 ^+ _2 Z/ o9 D4 e! S3 b
. m! m9 B3 S# s8 c4 I6 T7 x# t5 n有时我们知道只某个文件包含有abvd这4个字,那么要查找系统中所有包含有这4个字符的文件可以输入下面命令:
7 Y8 ~2 {; z1 s; w2 Z% \/ s* D5 W7 [4 ^0 x5 t1 W' R; U: p# O
find / -name '*abvd*' ; D' g7 i; j7 t1 Z2 }
$ [$ _6 y/ X t/ F1 d+ f J
输入这个命令以后,Linux系统会将在/目录中查找所有的包含有abvd这4个字符的文件(其中*是通配符),比如abvdrmyz等符合条件的文件都能显示出来。 1 S: G& N: T- V
5 }9 b- [ J- X5 \% O" h/ m1 H4 ?(4) 使用混合查找方式查找文件 # K% L2 S" g/ O) i: g( `7 i% D
" d! B _) a, C$ ^: @find命令可以使用混合查找的方法,例如,我们想在/etc目录中查找大于500000字节,并且在24小时内修改的某个文件,则可以使用-and (与)把两个查找参数链接起来组合成一个混合的查找方式。 * G; N/ a& f9 _
4 b, O% Q8 H9 _% }9 ]: x% x2 B+ _find /etc -size +500000c -and -mtime +1
: U5 H; r' e) ?( W( @, ^# W
% v, R. T6 X) [: o' k' Lmv 6 C! V3 X$ p7 |% _
2 F8 d$ a: p) F, }- D( \# y- w1.作用 & I% ~6 ^0 @' ^5 h# H& U
0 F& T! X9 Z. F1 l% n9 V! Z, {) s6 Zmv命令用来为文件或目录改名,或者将文件由一个目录移入另一个目录中,它的使用权限是所有用户。该命令如同DOS命令中的ren和move的组合。 $ x& v5 g8 X) @9 ~! X, `
9 L' z" g' z# ^$ z) o
2.格式 7 L4 J( K' T7 W: x3 s
* d N! V2 H3 _& Q; j- k! U
mv[options] 源文件或目录 目标文件或目录
) @ g% i$ B% i7 I, x
0 ~- L! j: A( Q$ m, W0 k0 U9 }3.[options]主要参数
T8 s) Q7 w0 P# f/ Z' M& E9 {% k2 u* R' h2 X+ d
-i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答“y”或“n”,这样可以避免误覆盖文件。
* z! o( j& N' h
: t1 z4 D! p3 Q \7 i' l-f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。
; U$ [; R* h, f
& _+ o' U2 o5 R4 p1 ~9 k4.应用实例
3 U" I- |' W! _% Z4 x* o- L1 A5 {/ L4 H9 n F1 Q k
(1)将/usr/cbu中的所有文件移到当前目录(用“.”表示)中:
( K1 |+ a* ^. U& I$ b3 n) B; \" [! e3 S. i$ m; N
$ mv /usr/cbu/ * . % L, k- l$ t2 N& E
+ S8 L6 f" a* N) B( T' p(2)将文件cjh.txt重命名为wjz.txt:
c! ^: A* h( y& F$ a
W0 G; B0 U' _9 l7 S2 y$ mv cjh.txt wjz.txt
! `( e4 Z+ E$ z9 Y, f5 Z( i/ K% [5 Z; T m R F$ ^
ls
, W! {& i, h0 \5 }* W' k8 K0 @4 G) \" A' O1 z5 P
1.作用
2 F' z9 O+ k5 R R
7 `; S" N3 p# ?, gls命令用于显示目录内容,类似DOS下的dir命令,它的使用权限是所有用户。 3 t% d) K: J- G4 A& v: o
' {- J; C8 y* _
2.格式 ( ?: u3 |+ Z# n& \2 I# L, a- o
1 ~% A# y4 }! z6 U0 @ls [options][filename]
Z: ]1 H# |% y( N) h0 S- X' @1 {
4 N5 a9 `& u% q. I( u. J3.options主要参数 0 q: Z. H& h/ l6 Z- p! A; `
7 u: }7 u& `* z. A-a, --all:不隐藏任何以“.” 字符开始的项目。
4 u* c) I9 E& _% F9 R) \
, J! Z" O" @- d: H-A, --almost-all:列出除了“ . ”及 “.. ”以外的任何项目。
7 ?5 r; X. ]* f# |. ^3 W f$ \
& x* Q* |8 w4 }& m1 R--author:印出每个文件著作者。
1 k* k# U) i4 w
: e$ T' J) W2 w a% P* T: a2 X' h2 [-b, --escape:以八进制溢出序列表示不可打印的字符。 / ]' k+ P4 q0 p. x5 r
0 G# h/ y6 ?9 a& X4 c- j
--block-size=大小:块以指定<大小>的字节为单位。
" d& J* r% k1 s: H6 E4 K- r, f% {: C' N& _# c ^8 C
-B, --ignore-backups:不列出任何以 ~ 字符结束的项目。 $ v6 Q% y c3 d) b) u. F
7 s F4 ?8 ]' i8 G5 Z! }-f:不进行排序,-aU参数生效,-lst参数失效。 $ j' z4 k" e$ Y; n' k
! B$ S% y; p, `2 p7 I# ]* s
-F, --classify:加上文件类型的指示符号 (*/=@| 其中一个)。
8 e5 ?* k# ^( _/ V& ~" O$ s/ `# O, ~, N0 R8 a8 T- T
-g:like -l, but do not list owner。 . i- r+ f; ]. P/ F2 V3 K. _0 k
& S$ g/ G& H9 }! V& p6 m
-G, --no-group:inhibit display of group information。 , T t& @! k( G t' B
# R0 C7 X, ?& f4 `
-i, --inode:列出每个文件的inode号。 - Z! r% N- ?* y6 ]
* M. W) [" N+ i) c5 K" O/ f: u7 d-I, --ignore=样式:不印出任何符合Shell万用字符<样式>的项目。 ( p+ p1 R; _7 x6 ~; m: f
; Q2 F e% W0 Z) O: l-k:即--block-size=1K。 ( w8 _& x; Z& i3 F) E7 p% G
, Q+ L6 @. A8 V: C2 @4 D
-l:使用较长格式列出信息。 - }& Z+ d' N' j, X% e
: g& H5 a6 ?* \3 I-L, --dereference:当显示符号链接的文件信息时,显示符号链接所指示的对象,而并非符号链接本身的信息。
" w2 B3 J: T( O4 k) F( Y
' A e' c2 ]5 L0 f: Q( w-m:所有项目以逗号分隔,并填满整行行宽。 5 ~# b2 L& ^% Y3 _" c4 d( ~( w
) Q# |5 v5 o1 N* v/ s% \
-n, --numeric-uid-gid:类似-l,但列出UID及GID号。 . h* K6 O1 q! s( _* P" u
7 Z3 S1 Q$ [0 ?0 ?1 j
-N, --literal:列出未经处理的项目名称,例如不特别处理控制字符。 - ^6 a4 o# `( a7 @4 L
; ]( v; S% c9 d& U9 _) g-p, --file-type:加上文件类型的指示符号 (/=@| 其中一个)。
) S# S. Z; ?! c
r& T& Y1 [: K% @% k( ~: v-Q, --quote-name:将项目名称括上双引号。
; |6 ^' R( R: e9 u2 f6 M: O0 d, Q% J# ~
-r, --reverse:依相反次序排列。 ( T3 d' ]' w' E2 M! K, s
% t2 F1 |, v' t' z7 S! Z3 m" O" M- t
-R, --recursive:同时列出所有子目录层。 0 \" r9 U6 X" r: s+ p% O
; y9 [$ J) E7 i, K-s, --size:以块大小为序。
- p$ d/ l: m. U2 I3 l6 ^* |3 q7 p. o8 q+ n: d# ~: D
4.应用举例 3 ~, ~* g; ]% X2 [
5 D; H. H& H# w6 e- x
ls命令是Linux系统使用频率最多的命令,它的参数也是Linux命令中最多的。使用ls命令时会有几种不同的颜色,其中蓝色表示是目录,绿色表示是可执行文件,红色表示是压缩文件,浅蓝色表示是链接文件,加粗的黑色表示符号链接,灰色表示是其它格式文件。ls最常使用的是ls- l,见图1所示。 - B8 I" z( w2 K8 B6 y/ Q
9 n- [3 ^! R/ l
$ n: W/ K8 B# g, E6 l
8 m# s# R1 Y2 q3 e
2 C. o8 U6 s- E; {图1 使用ls-l命令
" v4 k7 c6 a' f$ y
! l2 w: G4 N Z; R2 j+ k4 Q0 F. y2 E5 B1 L
文件类型开头是由10个字符构成的字符串。其中第一个字符表示文件类型,它可以是下述类型之一:-(普通文件)、d(目录)、l(符号链接)、b(块设备文件)、c(字符设备文件)。后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读(r)、写(w)和执行权限(x)。对于目录,表示进入权限。s表示当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组 ID)。t表示设置标志位(留在内存,不被换出)。如果该文件是目录,那么在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,那么在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。接着显示的是文件大小、生成时间、文件或命令名称。 / |4 s8 W3 N3 ?' O$ c. T( C
diff 1 t* e3 d! h% s3 l/ {/ l
( m* L& ?4 t5 p2 \
1.作用 5 b. b. D2 }* O c
9 q6 T' i- p. T3 t4 C) |diff命令用于两个文件之间的比较,并指出两者的不同,它的使用权限是所有用户。 * u! e# \# U4 ~/ e* ` g) G
! _: C- \4 p5 Z% W( O3 q
2.格式
0 t0 v3 ?4 V$ V8 P/ N; A! |$ _
5 A3 ? {( C6 m' |: Rdiff [options] 源文件 目标文件 3 \) t. x9 L( \* K
* j% j5 W# I3 k; I3.[options]主要参数 . g/ @( `; k* ?! ]6 x
7 o8 y) g1 }0 C4 V" T0 y) b' g
-a:将所有文件当作文本文件来处理。 , D. ^3 P( @3 u$ R1 W, ~' C' k
& A0 ?, F, O+ c# X-b:忽略空格造成的不同。
# a1 u! z9 F" @3 H; v4 P" u/ Z# y2 ^- R9 D; @- Y2 a. ? ~
-B:忽略空行造成的不同。 5 Q9 V; g1 G R* {# R8 }& L a1 e
+ @0 {9 o* _9 v" P
-c:使用纲要输出格式。
0 E$ [) G7 V+ b: n/ t! C$ |6 F9 q( c: {9 Z% v
-H:利用试探法加速对大文件的搜索。 & N. L7 p" B: p# |
+ m& L4 F' k( q" o9 K
-I:忽略大小写的变化。
" n0 T% i) a6 k1 W: ~4 k: x" O5 r# d5 C( L n3 r
-n --rcs:输出RCS格式。
) v8 Z, G$ Z& b! p% s v8 y. h: U) a% p
cmp
* p3 a. u7 v1 a' T, u
0 M) H& U% s3 x& w1.作用
: \/ s9 X. R. a8 O" B: ]: f$ `- n, i
cmp(“compare”的缩写)命令用来简要指出两个文件是否存在差异,它的使用权限是所有用户。 # ^9 W9 l! f3 v; w" I2 a
) B2 C% h4 O- ]; z: }7 G( u9 g, k
2.格式
9 O$ \- u4 H, a5 k
N* |0 W0 {' {& `* ], Ucmp[options] 文件名
8 l* H2 o/ w4 ^3 j/ l1 c/ k
m3 J J7 K! _9 h- a9 ? o' i. p3.[options]主要参数
* O: {- b6 q9 k2 x. K! M |: P( G
; _/ Q3 G/ D+ m-l: 将字节以十进制的方式输出,并方便将两个文件中不同的以八进制的方式输出。
6 F$ C) t7 _9 V1 `5 R9 T R& f6 v) {* U. Z4 \( q
cat 3 v! W& r4 @2 R+ c
6 p2 M$ C- x: E3 J P" Y
1.作用
* g* F- `' M" c7 N y. p G0 i6 _* r. K# w! a7 ?0 s5 l% k# T- V5 X
cat(“concatenate”的缩写)命令用于连接并显示指定的一个和多个文件的有关信息,它的使用权限是所有用户。 2 m2 q: r6 s" d+ j" D$ Q. m
+ W1 H$ H+ t2 F# R
2.格式
2 }3 `! w# m1 R- F& Z! H6 o
5 C7 T) h! k3 J+ D1 j. B1 h, r2 \cat [options] 文件1 文件2……
4 [$ h+ u* P# Y# ~% m, J X0 G$ Q! g$ T. T) X' i
3.[options]主要参数 5 H( p$ J# A* [9 o. i5 \. \
`9 L4 h# a# C
-n:由第一行开始对所有输出的行数编号。 ( N" J, _7 i4 m1 D% a r: C% |
! {! ^7 f/ D* c9 v' m. f2 ]; N3 {-b:和-n相似,只不过对于空白行不编号。
6 n0 w# u5 r/ Y( I
3 ~) {2 _, h7 K8 i7 J& H$ W-s:当遇到有连续两行以上的空白行时,就代换为一行的空白行。
& {& O+ ^6 M3 A$ K% I l6 Z4 \6 Q" v- s, I/ ?5 w$ d; J k
4.应用举例 , V6 A# E& K" R, d3 W
) ]; @. B9 J) f# R0 h* {; r I
(1)cat命令一个最简单的用处是显示文本文件的内容。例如,我们想在命令行看一下README文件的内容,可以使用命令:
# A0 u( M( u6 ?. L7 o0 a. S- l; L" p2 ^+ O% M1 u
$ cat README 1 \, P6 l4 N( h! d! E
+ F4 J) n0 O" r& C; t(2)有时需要将几个文件处理成一个文件,并将这种处理的结果保存到一个单独的输出文件。cat命令在其输入上接受一个或多个文件,并将它们作为一个单独的文件打印到它的输出。例如,把README和INSTALL的文件内容加上行号(空白行不加)之后,将内容附加到一个新文本文件File1 中: 2 T: o4 i: q1 `1 H7 l+ w6 @8 S0 j
5 L0 |* q( B3 Q& ^* E+ ? F! A% S$ cat README INSTALL File1
; t* l* w3 `* ? X5 i- j/ d* r
7 n4 x8 p4 {2 h1 d# R(3)cat还有一个重要的功能就是可以对行进行编号,见图2所示。这种功能对于程序文档的编制,以及法律和科学文档的编制很方便,打印在左边的行号使得参考文档的某一部分变得容易,这些在编程、科学研究、业务报告甚至是立法工作中都是非常重要的。
0 m8 Z. w7 A! K+ Z2 L: g' q- |+ K) Y. S* q/ E8 W8 o
7 k9 r" K) M0 d3 [5 A6 |
- a0 m W, O! Y1 }
0 k/ O1 A6 V% K% p/ L6 k图2 使用cat命令/etc/named.conf文件进行编号 1 r8 r, E8 G' T0 S# B0 t
, i) T5 Y5 ], Y/ Q# h: F9 S' P: T; l! G* X& c2 g8 J
对行进行编号功能有-b(只能对非空白行进行编号)和-n(可以对所有行进行编号)两个参数:
( M; N" [. l$ O& o/ f( [
, j; C2 J' b; x6 k8 W' |, m* b$ cat -b /etc/named.conf / ^ q" r: ?: d- d* B
- f7 Q: H i' W8 y! d: U/ G- e; A
ln 7 g% i$ D9 ?3 w6 J5 i# A
5 \' n! Z1 {6 _+ o( ~! G* L1.作用
, y& d' B" x: l* Y# e8 Y M2 C
( ~8 V5 S+ f' O7 g: F4 aln命令用来在文件之间创建链接,它的使用权限是所有用户。
* D7 \1 m8 S! M) y1 c2 O8 {; \ C; h( S9 l
2.格式
1 U" k8 x# q; F, C) @' X! r& B* E; m1 Y3 N
ln [options] 源文件 [链接名] ( L; u8 X1 A( c5 j0 s
$ j5 x% L Z0 X7 p) M& U7 f
3.参数 : V; ~6 o }3 V }6 _
0 R8 N( ?1 u8 M b0 Q-f:链结时先将源文件删除。
' i4 |5 U. k k3 N
' W) @( b/ D3 @" j( D' Y) q ]2 c-d:允许系统管理者硬链结自己的目录。
' h* ]5 k* y0 f; @$ Q0 q; z( w4 ^+ k* N
-s:进行软链结(Symbolic Link)。
3 W+ S$ d2 b! r) F: l# D) F n% U2 t! l
-b:将在链结时会被覆盖或删除的文件进行备份。
. J7 R: D2 X6 u: C8 p" s1 O' h2 _* K# [0 E6 S$ S
链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
- ?; i+ r5 H! Y% n8 O1 t
; Q0 E9 R& O. P* S. \7 ?; u; `硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。 & E$ Q; D% |3 Q, ?' f7 a8 H
# X3 ^1 a, W) S" |9 ]与硬连接相对应,Lnux系统中还存在另一种连接,称为符号连接(Symbilc Link),也叫软连接。软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。 . ]9 C8 P- @& s2 D( D
4 K" D" W5 [' G4 @$ ?8 @; s% d
动手联系 ( X8 j1 \" p6 J
! S+ D8 V ~, e* d
上面我们介绍了Linux文件处理命令,下面介绍几个实例,大家可以动手练习一下刚才讲过的命令。 5 k. z- b) ]0 V3 v; x
/ p+ k/ z" h$ p9 I! h
1.利用符号链接快速访问关键目录
. p0 h5 T$ X# A* r5 @
* _# k/ e, S3 O符号链接是一个非常实用的功能。假设有一些目录或文件需要频繁使用,但由于Linux的文件和目录结构等原因,这个文件或目录在很深的子目录中。比如,Apache Web服务器文档位于系统的/usr/local/httpd/htdocs中,并且不想每次都要从主目录进入这样一个长的路径之中(实际上,这个路径也非常不容易记忆)。 8 U. F5 r+ C8 O% Z
. I' C, y% O+ _" G8 y$ A4 U+ |( @
为了解决这个问题,可以在主目录中创建一个符号链接,这样在需要进入该目录时,只需进入这个链接即可。
$ `) S H3 k* _! X$ \
# j3 C( _" |! P A, e为了能方便地进入Web服务器(/usr/local/httpd/htdocs)文档所在的目录,在主目录下可以使用以下命令:
7 J4 M3 ]" ^5 T `! _
. Y- P5 v2 B0 L$ ln -s /usr/local/httpd/htdocs gg
8 n) \, [ K, [4 z5 A ^7 J8 R
这样每次进入gg目录就可访问Web服务器的文档,以后如果不再访问Web服务器的文档时,删除gg即可,而真正的Web服务器的文档并没有删除。
' ]& E4 _* y: k' R1 |
5 Q. E( T- ?) `: I2.使用dd命令将init.rd格式的root.ram内容导入内存
. J Z$ f5 S2 X. ]1 A& U
* ^2 f/ @9 W+ W3 a6 Add if=/dev/fd0 of=floppy.fd - S c$ b, S# h r# N
8 `; j( ^ `7 R& I1 C: zdd if=root.ram of=/dev/ram0 #
2 b/ D( S3 l% w0 h! S& e9 V: H. o& b6 ~ K/ M9 Q
3.grep命令系统调用 . B$ R! j8 Q7 ?: z; g& Y
6 t! ^0 k. S2 |. T# E( \4 S
grep是Linux/Unix中使用最广泛的命令之一,许多Linux系统内部都可以调用它。 8 H: ]: I1 H2 x, |. t8 s1 N
: E: J( n& O. J$ Q(1)如果要查询目录列表中的目录,方法如下: " e4 R: H0 E" b7 ]
8 h- s( g( |, j# ^! v- W6 K- ]$ ls -l | grep '∧d'
5 E/ l [) V5 L2 y2 I1 d. q4 p) }; D6 B% C
(2)如果在一个目录中查询不包含目录的所有文件,方法如下: * ]8 \3 ^! p$ G4 G- J7 O
7 z1 r8 [& G! l$ ls -l | grep '∧[∧d]' 2 T, }$ x4 I$ G
1 X! h7 z: b1 @' Z1 u
(3)用find命令调用grep,如所有C源代码中的“Chinput”,方法如下: " r ]& h+ P, u0 _$ Q
1 {+ f1 |/ z4 k/ P6 N1 r$find /ZhXwin -name *.c -exec grep -q -s Chinput {} \;-print
& G: u$ O m t! n- |9 b- J
9 {8 `, T. k# G</P>
+ m% x7 o! G4 _. T, f( P </P> |
zan
|