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