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