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

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