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