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

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