数学建模社区-数学中国

标题: Linux必学60个命令文件处理 [打印本页]

作者: huashi3483    时间: 2004-9-27 14:13
标题: Linux必学60个命令文件处理
Linux必学60个命令文件处理</P>
* C0 {4 [3 M  J8 u" |Linux系统信息存放在文件里,文件与普通的公务文件类似。每个文件都有自己的名字、内容、存放地址及其它一些管理信息,如文件的用户、文件的大小等。文件可以是一封信、一个通讯录,或者是程序的源语句、程序的数据,甚至可以包括可执行的程序和其它非正文内容。 Linux文件系统具有良好的结构,系统提供了很多文件处理程序。这里主要介绍常用的文件处理命令。 ; V) A' G" p7 a, ]& q( |7 @
6 j5 c2 B6 B. u& i
file 1 ~! X* {+ ~' E1 n6 `  n; p# b  U! ?
$ j$ u0 Y' z  Y) n6 T* h
1.作用
* y0 q9 s4 e& G* K$ y* W
3 p1 T4 Y3 G7 V6 _7 G( gfile通过探测文件内容判断文件类型,使用权限是所有用户。
: x% G4 o# |7 p. j( X( a/ h9 `- h6 c& ?
2.格式
- B+ M. T; k6 R( ~
$ y# U$ F- I  y5 K' yfile [options] 文件名
( y( ~0 x1 f! ?, o
0 s  V/ J9 ~4 z3.[options]主要参数 7 S) s' t! c. }0 m4 X, }

; I  w7 W3 K$ s; N7 @-v:在标准输出后显示版本信息,并且退出。 7 _- P& I3 D. _1 F( H" e/ x4 M
. h4 J! F- |! N$ B7 l1 A
-z:探测压缩过的文件类型。
, t9 g# ]4 F  s( S
# p. U2 `/ y- a0 I# z0 Z-L:允许符合连接。 8 R2 M; x+ M' u- H% K5 N  H

5 I: N0 s3 H' @7 B- p-f name:从文件namefile中读取要分析的文件名列表。
: s! D( `$ ?; T0 I% a3 X4 H* m- N
# D7 a+ }7 \  c' }- H$ J4.简单说明
' p& S( ~) B* q+ T# ]5 I) I8 Q
4 h# m  k" i3 _# N使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script文件,或者是其它的什么格式。file能识别的文件类型有目录、Shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。
0 E$ z% E% L' l) g  \/ M0 R$ R6 X" ~  B- U$ P
5.应用实例 + t( b( e7 g8 M

1 g5 O4 j# J+ C2 R: ~6 F) F, z如果我们看到一个没有后缀的文件grap,可以使用下面命令:
1 Q. H$ u" Q! `9 ]) N6 k
) v4 u8 h! S) [+ Q2 @1 `$ file grap 8 M2 v! z1 ^( E1 a! |( @1 T$ f
& A* [6 N8 n- f; g' w/ f
grap: English text 2 X: ~+ I' o* O. R$ \
2 j) f, m$ e6 [  T. ?, p2 g
此时系统显示这是一个英文文本文件。需要说明的是,file命令不能探测包括图形、音频、视频等多媒体文件类型。
& V% u, C* c+ ^9 F9 [
* a' _) f4 C0 D1 I3 V5 mmkdir
" L5 u  Q8 z4 [! ?9 q0 {% ?4 O2 _2 R! D9 ?4 E! C" u+ l- V  G
1.作用
: ]( }; ^5 c. \" W  I" C1 D# W) }/ c  c5 U# z/ r& V. I
mkdir命令的作用是建立名称为dirname的子目录,与MS DOS下的md命令类似,它的使用权限是所有用户。
! N4 M% J* n& X" H: ~8 j8 ~/ I2 h2 v3 s: h- }4 |+ L' {
2.格式
# b  R" h8 @' U; O% s2 t" ^
8 W% P  {9 h8 o+ c; y: M3 x' }& v8 q  Rmkdir [options] 目录名
( u* z3 e) p% V( H2 R7 E' ?7 N5 q1 N7 |( a8 H. f1 u
3.[options]主要参数
8 m: @4 l5 p3 Q: \" r- j2 X! g8 |
-m, --mode=模式:设定权限&lt;模式&gt;,与chmod类似。 " Y  u1 A+ E  U$ D* a- k

, j( I; H$ m' K-p, --parents:需要时创建上层目录;如果目录早已存在,则不当作错误。 * Z% a" H: E8 w

; g6 R' G, L- S' _-v, --verbose:每次创建新目录都显示信息。 7 E1 e; [+ ~! @8 ^

' j9 i3 p. K$ x+ h0 z4 V9 w--version:显示版本信息后离开。
/ V5 `4 ?. [  H& H
4 o1 Y2 h# _2 B4.应用实例
# w$ M6 ]7 V1 Z) {8 Q; M: X' h* K1 E# H3 m: ~+ r" |- O
在进行目录创建时可以设置目录的权限,此时使用的参数是“-m”。假设要创建的目录名是“tsk”,让所有用户都有rwx(即读、写、执行的权限),那么可以使用以下命令:
& W1 a7 }( v; }+ h& v' D& q3 `8 t' S
$ mkdir -m 777 tsk 0 C3 z! i- D: B( p2 `: O1 }1 C4 f+ k4 c

: ^$ M: d) z2 \+ I# d+ Q2 j% Ggrep ' R' n/ \5 k4 a& J1 ^* V% W2 G
) y3 g. ?" S# ~3 Y* H
1.作用
7 U0 G! [1 M& n/ i, f. V; r, J% j4 T4 U
grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
3 t; {4 Z7 k( f8 D* t3 Z* M: w& L
3 {/ K0 _; B% \7 z2.格式 & u5 K. t, R( }1 A! _/ w
+ J2 {$ C, D/ I$ f3 u% S
grep [options]
4 h  e9 a* R; b1 S8 j3 C5 H% f  F
3.主要参数 ) [5 G" ^7 M" v  N* ?, _- G
4 h8 @" u* D5 X$ W
[options]主要参数: - d2 X  U, o, p) M8 K" C, M

1 o+ z6 K% e$ P9 W-c:只输出匹配行的计数。 2 C# d' U% _% |4 Q9 G

+ I9 x$ y- M3 g+ P. [-I:不区分大小写(只适用于单字符)。 " l9 j9 \/ R+ [: ^- r

' l5 o0 a2 X2 |8 T-h:查询多文件时不显示文件名。 ( a' G- S8 j) [4 L

$ A- E' k3 ^+ a/ v& T/ |-l:查询多文件时只输出包含匹配字符的文件名。 8 r* U$ X; C" A. ~* c( Q0 @
$ l4 H* H' U4 g+ V3 x  y3 B
-n:显示匹配行及行号。 " E( R. n0 ^6 C4 O6 M# F  q9 p; y
4 T0 S+ ~/ x3 D* y+ B5 p8 c+ d
-s:不显示不存在或无匹配文本的错误信息。
0 x! b) C, n$ L; }$ [& m9 |
* o% p3 [; C/ p5 @3 C$ h-v:显示不包含匹配文本的所有行。 # v1 E: w) `& o7 L
4 b& |% e8 ?, r; I
pattern正则表达式主要参数: % ~5 G1 d7 H3 U! w8 Z2 E' [
  S' {( f8 m* T. [. W. k2 y
\:忽略正则表达式中特殊字符的原有含义。
/ u, U/ C5 d& q- `5 `' [. [, @% L/ i) d2 F0 _
^:匹配正则表达式的开始行。
! o4 ?. y% t  ^4 ~- k6 ?, O
. ?% Q' D( M) e$: 匹配正则表达式的结束行。
: n6 i7 z, p+ N" `9 x% v  w7 X. Z9 _
8 o1 r; A7 d3 N! W" _\&lt;:从匹配正则表达式的行开始。 ) y" i7 ~7 p* V( M$ c( D

' l4 E( P2 y: ^8 P2 v\&gt;:到匹配正则表达式的行结束。 / r) j& _( |0 W9 U$ Y
8 z5 n3 p. [% d" m" a. {6 o& W
[ ]:单个字符,如[A]即A符合要求 。
1 [- ^1 G9 m9 p" Y( O0 G3 d
# f9 l. ^! {4 M6 x; J  a[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。 8 T9 l6 _" Y0 b
5 m& g9 K0 Z# c6 T! `. y8 D
。:所有的单个字符。 " u' _. H  N/ O% a
6 u7 O) }$ R2 ^, N1 {
* :有字符,长度可以为0。
" r& a& I  ]2 C6 N6 t# S  j) g) L  v* f' }
正则表达式是Linux/Unix系统中非常重要的概念。正则表达式(也称为“regex”或“regexp”)是一个可以描述一类字符串的模式(Pattern)。如果一个字符串可以用某个正则表达式来描述,我们就说这个字符和该正则表达式匹配(Match)。这和DOS中用户可以使用通配符“*”代表任意字符类似。在Linux系统上,正则表达式通常被用来查找文本的模式,以及对文本执行“搜索-替换”操作和其它功能。 3 z/ V! F- |8 K* C% N3 _$ ~7 `
( a0 p$ M: S# S9 |! ?9 P
4.应用实例 , {' N4 q1 K( g/ D5 U1 r- p9 q

. R8 J& ^$ B, G* E  z8 D- |查询DNS服务是日常工作之一,这意味着要维护覆盖不同网络的大量IP地址。有时IP地址会超过2000个。如果要查看nnn.nnn网络地址,但是却忘了第二部分中的其余部分,只知到有两个句点,例如nnn nn..。要抽取其中所有nnn.nnn IP地址,使用[0-9 ]\{3 \}\.[0-0\{3\}\。含义是任意数字出现3次,后跟句点,接着是任意数字出现3次,后跟句点。 - F  E7 R4 h. w: a  G0 ~
# L& }$ L6 |( A+ o6 G0 D
$grep '[0-9 ]\{3 \}\.[0-0\{3\}\' ipfile
0 @8 c: r) ^. ~! L5 T4 R0 e( J& X. i9 X
补充说明,grep家族还包括fgrep和egrep。fgrep是fix grep,允许查找字符串而不是一个模式;egrep是扩展grep,支持基本及扩展的正则表达式,但不支持\q模式范围的应用及与之相对应的一些更加规范的模式。 1 m- g' P# L4 B, I
2 w5 B0 F6 N! J
dd
+ {( F/ j  z8 x
( p1 R/ a8 _* c8 n) o1.作用 ( }8 `3 s0 K# _% H  z

: i' O' m5 i  L' j) r. zdd命令用来复制文件,并根据参数将数据转换和格式化。 7 ], V; F6 O- J4 `8 S' B3 {" a% ~
- D2 |" r2 `( d: Y, x5 F% ?
2.格式 " V! E2 B# T' |+ ]8 v# v
6 [# v$ M1 s% M! Z+ g
dd [options] : u' s- A+ V, I4 d6 ~' D
* M. w7 h' S0 m% ^: A6 S8 N4 C
3.[opitions]主要参数 $ M# M* s* ~4 L  K2 h% h2 [
' ?1 ^' d1 z6 R8 ]7 P" d9 x
bs=字节:强迫 ibs=&lt;字节&gt;及obs=&lt;字节&gt;。 + h# Z* J$ S% y: `7 X) q
, T% O7 O7 S5 f8 z8 m5 I; \) M  T& g
cbs=字节:每次转换指定的&lt;字节&gt;。 * a4 K: F2 F2 Y3 l2 V( [) n$ u

, A2 n0 {8 ]$ ]% S5 X, M4 Rconv=关键字:根据以逗号分隔的关键字表示的方式来转换文件。
  S; y, G0 n& a3 K/ {
; F$ C" C: z, Qcount=块数目:只复制指定&lt;块数目&gt;的输入数据。 . k) k8 f/ L( \9 g) j$ }
& B6 b6 j4 Q, P
ibs=字节:每次读取指定的&lt;字节&gt;。 4 U* l+ d4 `+ u
4 C, m- v' m* R# C( V
if=文件:读取&lt;文件&gt;内容,而非标准输入的数据。
# C9 e9 x1 j2 N
8 i7 e: i- E' b  @obs=字节:每次写入指定的&lt;字节&gt;。
& ]1 E+ Y: e9 g1 U$ f2 p1 |( \
3 J6 Z. L6 w3 j7 E; b2 I) Mof=文件:将数据写入&lt;文件&gt;,而不在标准输出显示。
0 P! ]$ O0 \+ i4 F+ j& }4 T
; i4 m2 d4 m' D4 tseek=块数目:先略过以obs为单位的指定&lt;块数目&gt;的输出数据。
* _/ o. E5 G; \. q; p$ i4 S* f3 T8 A. A, O1 a: K5 u! D" W) S& v8 u
skip=块数目:先略过以ibs为单位的指定&lt;块数目&gt;的输入数据。
" Z1 [7 ~, V. ^1 i2 J& \$ y2 [# }3 a" J$ b
4.应用实例 ( e" P: Y. D, z( ~
5 S. t) m! S( h* O! e+ O0 t6 `
dd命令常常用来制作Linux启动盘。先找一个可引导内核,令它的根设备指向正确的根分区,然后使用dd命令将其写入软盘: : V/ F' t1 j9 U0 r" K7 I

% G  Y' O4 n; v' h" v! @$ rdev vmlinuz /dev/hda
/ W+ B* ^, k) i, b2 ~0 l- S3 q( A' s) P! F5 d
$dd if=vmlinuz of=/dev/fd0
* Y; _+ X( W( p3 G
7 x7 w8 s/ b0 ^; O" x4 s, S0 P上面代码说明,使用rdev命令将可引导内核vmlinuz中的根设备指向/dev/hda,请把“hda”换成自己的根分区,接下来用dd命令将该内核写入软盘。
& p" @# q3 m$ rfind
4 \0 n* D7 D8 C) G! P1 k* L, @8 N' r  A0 \. ?! n
1.作用
6 m$ `/ {+ V$ n- A+ l/ A7 `" ?. H/ n2 \5 J/ |
find命令的作用是在目录中搜索文件,它的使用权限是所有用户。
& g  j. f! @. S5 O" G8 F9 T
9 G1 d6 \8 G& A7 U; e3 t2.格式 ( W3 F( G3 [- w. h/ P
: R5 o4 q, h1 g6 u! S6 m% R
find [path][options][expression] 0 |; R0 J" C' a  J
- t3 r9 E+ ]" I  x3 c0 v2 Q
path指定目录路径,系统从这里开始沿着目录树向下查找文件。它是一个路径列表,相互用空格分离,如果不写path,那么默认为当前目录。 , W- M2 k4 s$ N1 v% X
1 ~! S4 |' I0 G# i# H! l3 g+ Z: T& j
3.主要参数 * l3 y' }; a+ @  ^% K& j- s
  i+ f; m- T: k+ N. L! U  h# J: D
[options]参数: + I' [. @- r0 K
! d: V# N/ a6 K3 ^2 \* t
-depth:使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容。 ' I% B- F; g+ a" N: E' h
; u, g3 Z: M" R# ^! u$ T( s7 U" Q8 l, c
-maxdepth levels:表示至多查找到开始目录的第level层子目录。level是一个非负数,如果level是0的话表示仅在当前目录中查找。
5 d6 _9 `2 y& v' E) z/ {
/ Z- W; i' h% U2 g-mindepth levels:表示至少查找到开始目录的第level层子目录。 9 _$ R$ M5 o2 p  j
2 N" b! ^6 M6 `$ \; z
-mount:不在其它文件系统(如Msdos、Vfat等)的目录和文件中查找。 - w3 M1 D% A4 }8 D* {* [

6 V+ N# ?6 @+ p8 H; j-version:打印版本。 5 F, q7 p5 y$ B; C4 P+ Q# g8 a& b. ~

4 ]$ t! ?# B7 Z4 J[expression]是匹配表达式,是find命令接受的表达式,find命令的所有操作都是针对表达式的。它的参数非常多,这里只介绍一些常用的参数。
% H& g2 |5 o! K9 n+ r" t0 M1 s: |/ Z2 d6 X% o  s
—name:支持统配符*和?。 ( U( f  I; ^4 I4 e; [3 I/ Q. E; e# U
( z/ X( U6 B5 ^' q* H* t
-atime n:搜索在过去n天读取过的文件。
1 W3 g$ D8 \, [
; l/ f& \: u6 e-ctime n:搜索在过去n天修改过的文件。
' R! [# B) H( X% A( B8 p9 k8 g* T- l  Z; c' S  \; _0 L; x
-group grpoupname:搜索所有组为grpoupname的文件。 3 I+ U2 x& }  c: Q' A8 ^  Y; `
. y! ]  X3 X/ Z/ D$ r5 z6 c
-user 用户名:搜索所有文件属主为用户名(ID或名称)的文件。 ' r0 g$ n. n, S- S) v! K& e
- I( O9 }; Z$ B! v
-size n:搜索文件大小是n个block的文件。 . v1 Q' {5 X6 S

- h5 D! J' F2 T8 X7 w6 j-print:输出搜索结果,并且打印。
: K' {9 a- d: ?. I# X% o& A: D& {0 X& L
4.应用技巧
3 d4 M8 s0 G& A6 {( [* x7 \  j
3 l8 a" }6 ^' ~' ]! Hfind命令查找文件的几种方法: 5 n0 M. i' O: a7 J9 \6 f' ^
; ]2 m+ _$ ~7 U$ O: r: H5 J
(1)根据文件名查找 2 w; B; }6 X1 y" i7 X3 R" {
: J- z2 ?0 _* M0 X8 E8 a1 i
例如,我们想要查找一个文件名是lilo.conf的文件,可以使用如下命令:
% }5 @3 Q8 j  P% m3 R4 p& d7 M- m; b9 v
find / -name lilo.conf
/ n6 U% _: i, K& @6 Q; B8 r$ N( i; \; j1 D$ F" h: _
find命令后的“/”表示搜索整个硬盘。
5 M& @/ G1 H9 R/ d, x2 f3 Y: h9 A, q% H0 g
(2)快速查找文件 ; x/ q4 y# R7 b( a: q
# Z7 K0 g9 `( b5 |# {
根据文件名查找文件会遇到一个实际问题,就是要花费相当长的一段时间,特别是大型Linux文件系统和大容量硬盘文件放在很深的子目录中时。如果我们知道了这个文件存放在某个目录中,那么只要在这个目录中往下寻找就能节省很多时间。比如smb.conf文件,从它的文件后缀“.conf”可以判断这是一个配置文件,那么它应该在/etc目录内,此时可以使用下面命令:
1 R* M& N( O- f: f" \8 j: P9 |! _; Y4 T, F1 j
find /etc -name smb.conf ' I7 o& t3 ]2 o* Z

* T. n1 D3 E" ?, s这样,使用“快速查找文件”方式可以缩短时间。
( \$ e  l- `% {9 O2 [  u2 U; ?
/ s& U# o, C9 [(3)根据部分文件名查找方法 5 K( U2 ~4 t& }* k& F

) L) x4 w$ f8 j2 d有时我们知道只某个文件包含有abvd这4个字,那么要查找系统中所有包含有这4个字符的文件可以输入下面命令: $ p( ~0 U# S7 _5 O' s

: [- O7 j; N! b1 ^* a* yfind / -name '*abvd*' ! J" r' ~3 I4 _

! f8 l5 ^' K- O9 k1 n9 J输入这个命令以后,Linux系统会将在/目录中查找所有的包含有abvd这4个字符的文件(其中*是通配符),比如abvdrmyz等符合条件的文件都能显示出来。
7 V1 v; s; v/ s1 Y% H3 y
1 ^' j3 r" g1 I' f  D' l(4) 使用混合查找方式查找文件 7 I% N6 e) v2 d  F2 B; |, }) W

8 {( X% a- K2 }find命令可以使用混合查找的方法,例如,我们想在/etc目录中查找大于500000字节,并且在24小时内修改的某个文件,则可以使用-and (与)把两个查找参数链接起来组合成一个混合的查找方式。
- N0 U4 A! g: T" O2 Y! t' P8 k0 m* q3 a; v
find /etc -size +500000c -and -mtime +1
' S2 x' x5 l3 ?) C9 S( S3 G3 \
2 Y; \) O' c$ u/ F7 V8 z6 |mv ; g. n8 R- b8 E! B  X

; p( y( S3 Z& n/ o1.作用
) k4 B: m9 l; O8 |# A8 W; p1 `9 c/ K: J0 Y  p7 }
mv命令用来为文件或目录改名,或者将文件由一个目录移入另一个目录中,它的使用权限是所有用户。该命令如同DOS命令中的ren和move的组合。
  d' {/ T( H) \; v, p% e# C' i( q2 K2 B; Z8 a3 \4 M7 X
2.格式 - B$ V! A, j. H+ e

& R! C4 D* s, r! O" s% ^. a! @mv[options] 源文件或目录 目标文件或目录 8 Z6 n5 b! b( d1 g8 u

6 j$ {: l; ]0 O3.[options]主要参数
7 C/ l8 w- G4 [3 w, d9 m
$ P% Q" a1 C# ]! f1 H* X-i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答“y”或“n”,这样可以避免误覆盖文件。 9 R1 L5 o3 K. }* L$ P! a
. q# v9 t  W' d1 x; d
-f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。
, T3 z, ~2 t# |% v# Y+ D0 U3 Z
% ?- B$ ?, G0 ]9 Y4 D/ f6 i4.应用实例 % S( `' F1 p4 ^# a* [

9 L* a8 }7 m2 V  `(1)将/usr/cbu中的所有文件移到当前目录(用“.”表示)中:
' m# Z( c, X. l4 E( C# X' n* i4 n( \9 N" t# q% \- A
$ mv /usr/cbu/ * . , d' x- x3 F. v/ s! c  o& b6 y
7 |4 y+ x& g, J9 |2 \0 B
(2)将文件cjh.txt重命名为wjz.txt: 0 i4 b# q) p5 R0 J' e4 p1 [

! `0 J) G4 j1 b7 i7 `, t3 s$ mv cjh.txt wjz.txt  ( c( i+ @' I1 K" t2 w
, h" j8 A- @3 _6 h. Z! N
ls 3 k# y1 s3 w! K

$ E$ N7 @; J5 c8 j6 @6 d1.作用
2 f4 {# z; C9 s- Y
" @) t2 n/ Z. x8 nls命令用于显示目录内容,类似DOS下的dir命令,它的使用权限是所有用户。
5 P/ L- ^3 X6 X, Q# |8 e. R  o9 S& Y
2.格式
* a( P9 S& q6 i) m4 q; f. n& D0 N% x- o5 h; ?
ls [options][filename]
1 Z% V5 A) A* V1 Q* W8 n. Q+ ]- u- ^2 ^9 S" b. V" D
3.options主要参数 * F' G! y$ b( T# j: C- l$ r

, b  V9 o' i$ H* z: @-a, --all:不隐藏任何以“.” 字符开始的项目。
8 z" e. U, f( I  c0 }8 s. P
* m5 M- ~: g% s' x6 h-A, --almost-all:列出除了“ . ”及 “.. ”以外的任何项目。 ' _% Y# A; F+ j; J6 D3 u! R+ p6 \
$ B1 n1 |: l9 n4 \
--author:印出每个文件著作者。 " h# C& s$ D* d
* S* u2 F4 l8 u3 p
-b, --escape:以八进制溢出序列表示不可打印的字符。
! U/ ]1 y! n0 Q! l+ b7 m5 G( X: ~* b9 i4 Z; B) @# r9 S7 p3 g0 m" G
--block-size=大小:块以指定&lt;大小&gt;的字节为单位。 6 b4 z$ s7 n% c' E
$ z+ l+ D' i  U
-B, --ignore-backups:不列出任何以 ~ 字符结束的项目。 3 f+ V) i. X0 [& y/ m6 e7 d7 V

3 P4 r1 t( }  {% i& c-f:不进行排序,-aU参数生效,-lst参数失效。
- C! \3 Y6 ^! I8 B. v
) q% D, L. A9 F-F, --classify:加上文件类型的指示符号 (*/=@| 其中一个)。
8 R5 W; z8 g, {3 o5 \# X/ P" i1 H7 o4 j
-g:like -l, but do not list owner。
  e' \8 b7 o" ~/ p& l7 c6 x/ q" Q  J4 `8 X6 X
-G, --no-group:inhibit display of group information。 9 u0 ]) q" b* O3 H5 w* ^. ?
% I/ l! Q0 V9 B& o$ U1 M8 K
-i, --inode:列出每个文件的inode号。
4 j( S! y; r" {) x
/ D+ D* r% j# D# I$ R-I, --ignore=样式:不印出任何符合Shell万用字符&lt;样式&gt;的项目。 , l) l( ~$ _) k2 H
' j) j  T# r) J) N: v0 r
-k:即--block-size=1K。
* f$ t& Q2 n+ k' N8 n) S
' F$ a, t3 _: F3 d$ `-l:使用较长格式列出信息。
5 l' q0 Q, l9 I3 {0 \$ ~8 X8 Z7 V8 `1 ~' ?
-L, --dereference:当显示符号链接的文件信息时,显示符号链接所指示的对象,而并非符号链接本身的信息。
; E. z, d& R8 @, o7 `- Y; p  V2 a9 c+ K* C5 h! _
-m:所有项目以逗号分隔,并填满整行行宽。 5 y! j4 H& c! b" V" f

9 y2 B) d$ {/ ?6 F3 E  o-n, --numeric-uid-gid:类似-l,但列出UID及GID号。 8 v2 p8 u6 b2 g+ K! z% q+ w. X

) @! ~! S1 T' z* c% s+ j: u-N, --literal:列出未经处理的项目名称,例如不特别处理控制字符。
1 K& F+ G3 Z4 \& `- C/ k0 X
1 `5 Y7 ^( c+ U! y: S-p, --file-type:加上文件类型的指示符号 (/=@| 其中一个)。
5 r* p, X3 I' p9 {5 R
. q, [+ Y& B8 Z-Q, --quote-name:将项目名称括上双引号。
( g5 h, E2 R2 l- ?" P6 E2 l
1 V$ L- c) F5 S- S8 @-r, --reverse:依相反次序排列。 $ B" o8 q) I1 _6 Q

- i5 m4 \* e4 V8 H  O-R, --recursive:同时列出所有子目录层。
9 ~. ^3 q: Q' L& n& ^
& Z7 q4 @- t, ^7 H  u! `  g" n-s, --size:以块大小为序。
! V- g- v$ [# Y4 S5 x: M8 F0 z+ J+ d% d* ^5 Q, l
4.应用举例 0 w' H# Q, T" |! h$ b0 t* @
% L/ P3 O  @7 x6 n9 \
ls命令是Linux系统使用频率最多的命令,它的参数也是Linux命令中最多的。使用ls命令时会有几种不同的颜色,其中蓝色表示是目录,绿色表示是可执行文件,红色表示是压缩文件,浅蓝色表示是链接文件,加粗的黑色表示符号链接,灰色表示是其它格式文件。ls最常使用的是ls- l,见图1所示。 3 p! R, T+ U2 i7 H/ n$ q1 K
, @0 }, b) k7 m% f
% K9 p2 v) t1 h
9 Q; }7 |0 \+ V1 M* q4 w& D1 x% z
0 `$ [! u5 _% L4 P1 V
图1 使用ls-l命令
7 f2 S( i4 ]  r0 I1 R1 c- w: e  s  _8 F& q/ f2 b9 z4 V6 e- J

' y. y  x" o* F1 `4 ~, j文件类型开头是由10个字符构成的字符串。其中第一个字符表示文件类型,它可以是下述类型之一:-(普通文件)、d(目录)、l(符号链接)、b(块设备文件)、c(字符设备文件)。后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读(r)、写(w)和执行权限(x)。对于目录,表示进入权限。s表示当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组 ID)。t表示设置标志位(留在内存,不被换出)。如果该文件是目录,那么在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,那么在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。接着显示的是文件大小、生成时间、文件或命令名称。
0 a7 f- s% {* x8 g* B/ Cdiff
& d% _9 R0 D" u8 _, K5 S! u  F( G2 B4 {( N$ J8 w' j3 J
1.作用 % k- C& ?. z* h8 q5 z
/ T$ \4 f; y# Q
diff命令用于两个文件之间的比较,并指出两者的不同,它的使用权限是所有用户。
7 h9 }. q- h. c  D+ L) y& O8 s0 ~2 s
2.格式 ' |8 {) S! z" k, |  \$ _

, G5 B4 M; a8 J! Q9 O1 zdiff [options] 源文件 目标文件 ! ]4 G7 \( b5 x; Q. g2 y6 J

" n$ @4 H& Z: e9 t9 v) m$ F3 N, {3.[options]主要参数
5 K+ y8 u1 V) L6 [; f4 Q9 ?
( s' q& m/ N* v$ v-a:将所有文件当作文本文件来处理。 / w8 C% L1 {$ e# d/ q5 Z* }
* a& }9 U8 m; k' w: z8 B1 |7 S5 k
-b:忽略空格造成的不同。 3 B+ N& P1 v9 c. ?& i- f

! a  @: d+ q" Z4 l4 ~# R-B:忽略空行造成的不同。 2 S: C# M1 }' ^) L
! C0 e( ~2 `' O( J  X1 L: ~
-c:使用纲要输出格式。
0 B, \7 I$ V# z. t) d1 ~
- J( f5 @( n- w-H:利用试探法加速对大文件的搜索。 ; y! m: b- {# J* {7 s" h; q: G( w
6 z2 I+ ?% ~/ n: Q  f5 U0 l
-I:忽略大小写的变化。
/ p. q  g+ ?; q$ f; z- z$ q% G7 e7 a* l( V9 [8 K
-n --rcs:输出RCS格式。
# z; a  `# ]* b! J( U+ @- z1 z7 e; X+ ~% v4 }) I; X) \/ L
cmp & i& M6 z  D1 O, ~3 X# Q
* D. w" T  \* @' d" F# f
1.作用
3 I; l, v2 O0 ^/ H8 O* o0 L+ m  N0 P
cmp(“compare”的缩写)命令用来简要指出两个文件是否存在差异,它的使用权限是所有用户。
* F! n2 U2 Q, s3 p0 X
1 ?8 Y$ `5 v# |4 c( R+ X2.格式
8 o3 f5 h$ Z2 V  A$ s5 L( r. l6 G9 D- o6 ^9 r$ j$ ~. Y
cmp[options] 文件名
/ l0 W# A( p% s+ [9 H! e3 _& y& n) K  I, d
3.[options]主要参数
  q4 m0 \% H/ q. [+ T
$ H2 ?/ L+ b: I3 B* u. A: Q-l: 将字节以十进制的方式输出,并方便将两个文件中不同的以八进制的方式输出。 + ]+ s: d. {$ [' z8 z% W/ e1 \

% N6 Y. U& o7 m/ {" @! ycat
  o( p- u) R. {3 t) O$ l* O, x6 Q& x3 p+ t- q
1.作用 ) T2 K9 M/ N  g& m- S: k$ i- |  }" q9 V

' j9 ~) t, N8 e( I9 xcat(“concatenate”的缩写)命令用于连接并显示指定的一个和多个文件的有关信息,它的使用权限是所有用户。
1 e( H$ V/ Y) c" u
9 d+ {4 s! `7 d2.格式   S! T* F& ~; T5 Q

: H- W1 o$ W, Y+ {1 g# Hcat [options] 文件1 文件2……
5 K3 w" x/ A/ C' c( b  z- a! w! _( b9 G% c1 k0 D  O
3.[options]主要参数
: Z3 t* S# J2 F* Q
3 z8 m# u6 h/ g-n:由第一行开始对所有输出的行数编号。
5 n' `8 p2 [7 r+ A, T  g$ J8 ?
& l2 M8 U4 d" o8 E-b:和-n相似,只不过对于空白行不编号。
$ p7 u# o( L& ^8 {1 x4 q0 U% }, L% J+ X* a7 f* }& B" W/ c. O" ~7 @
-s:当遇到有连续两行以上的空白行时,就代换为一行的空白行。 3 A2 m$ y. Z  p4 d; X9 H( U' L

8 r7 k+ Y& `8 q4.应用举例
$ {5 e. {$ b+ J4 W4 g
, a! `- b* W0 O0 q9 x(1)cat命令一个最简单的用处是显示文本文件的内容。例如,我们想在命令行看一下README文件的内容,可以使用命令: - T3 e  H1 C$ Q  `# A8 Y  S8 M0 x

: U( I( ]8 l, g5 T7 b$ cat README  : ^' f: s& z$ \1 k: M  v
% v, m6 r* p5 }6 }
(2)有时需要将几个文件处理成一个文件,并将这种处理的结果保存到一个单独的输出文件。cat命令在其输入上接受一个或多个文件,并将它们作为一个单独的文件打印到它的输出。例如,把README和INSTALL的文件内容加上行号(空白行不加)之后,将内容附加到一个新文本文件File1 中: 0 ?! v9 K8 G9 ~" W
/ y7 O# k- C% m! o; s
$ cat README INSTALL File1 ! g$ a) q8 k' J/ Q

, N9 @5 ^: k. q$ {; Y$ m(3)cat还有一个重要的功能就是可以对行进行编号,见图2所示。这种功能对于程序文档的编制,以及法律和科学文档的编制很方便,打印在左边的行号使得参考文档的某一部分变得容易,这些在编程、科学研究、业务报告甚至是立法工作中都是非常重要的。 1 A0 Z; B  X9 l3 P" E+ o/ Q) Q- S

' s; K2 U/ ]+ v" y6 A
+ j+ C3 B: R4 x% w4 @
% [& Q% c. v: f9 S  s6 [+ d3 B6 z/ q& |9 Z4 o) s+ T. V
图2 使用cat命令/etc/named.conf文件进行编号
: ~9 `/ q0 s3 a* j  R
% ]4 {, Y/ i  y
+ [$ j# M$ E7 [+ `, c: K6 |对行进行编号功能有-b(只能对非空白行进行编号)和-n(可以对所有行进行编号)两个参数:
' p" \$ j; w; D9 k& R
8 z& M* b; p2 L$ [# R, X3 C$ cat -b /etc/named.conf
4 s1 I- x( M" K% w2 v4 n
$ p# U% `$ p. }3 S! rln
+ G$ {( E4 q5 B& @4 r6 {; n8 d0 r8 k+ g, ^( t
1.作用 % u7 z: U- j8 v9 z5 g3 v
* Y4 S3 `( k* m9 N$ p1 g
ln命令用来在文件之间创建链接,它的使用权限是所有用户。 / Z% R  {( t! E7 o. k
  ?7 k1 O% k) i, [# M8 l
2.格式 " D6 y' L3 A6 r* F3 j9 u! h

" {% `  s! I1 A5 t; ^8 |. E& W; eln [options] 源文件 [链接名]
2 S; L7 y" d+ }/ m0 j, x, q4 C
6 z: r3 f. N( j' W3 G- L3.参数 % f' V5 e/ X' x+ v: L1 @) n3 F$ |

; d3 l, g% \3 U! @9 D9 A-f:链结时先将源文件删除。 # w2 o/ \4 B! S

7 d' x) `% a& c% L7 r-d:允许系统管理者硬链结自己的目录。
  f2 O9 S' c! P8 W; _2 b( w3 h) D
7 ^% B" k* p* k' W-s:进行软链结(Symbolic Link)。
3 j( [# w% |- _1 G* I/ Q! E9 N6 Q$ ]
-b:将在链结时会被覆盖或删除的文件进行备份。 ; _0 D" i$ ?& m, V

2 K3 `* @& l& w+ h0 Z链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 8 s! e# N. D+ Q# j0 k
7 C! Q) l4 r6 L  F, W
硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。 $ D; D6 ^2 S7 N5 |
9 T8 l  J8 M) I
与硬连接相对应,Lnux系统中还存在另一种连接,称为符号连接(Symbilc Link),也叫软连接。软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
$ @$ @" d$ J" H3 w7 I
, m/ ]' ~/ @1 b% h. m: Y动手联系 3 W0 Y5 Y- |( z
8 E+ y' G' V5 n- c
上面我们介绍了Linux文件处理命令,下面介绍几个实例,大家可以动手练习一下刚才讲过的命令。 , V% h, B1 P8 i& V

3 y# P# T9 R9 h- M; u1.利用符号链接快速访问关键目录 8 b$ m! @7 f; B

4 y& P% v$ X, A0 M. f. Y  n符号链接是一个非常实用的功能。假设有一些目录或文件需要频繁使用,但由于Linux的文件和目录结构等原因,这个文件或目录在很深的子目录中。比如,Apache Web服务器文档位于系统的/usr/local/httpd/htdocs中,并且不想每次都要从主目录进入这样一个长的路径之中(实际上,这个路径也非常不容易记忆)。 4 Y, `, k6 ]  V% L. Z7 ]
% ~: L8 j; {9 _* E( s" w8 X6 {8 ~; l
为了解决这个问题,可以在主目录中创建一个符号链接,这样在需要进入该目录时,只需进入这个链接即可。
2 d% k! `# n5 r' Z' l0 a/ a4 |) B! R9 p. V* Y
为了能方便地进入Web服务器(/usr/local/httpd/htdocs)文档所在的目录,在主目录下可以使用以下命令:
7 W; j/ G$ g+ V7 @7 |
4 g2 H" b1 ^) ^8 s* v. D0 k0 e0 Y- G, g$ ln -s /usr/local/httpd/htdocs gg
1 N7 j7 Q, `- f3 @5 G: p6 t* Z- Q" ]6 J
这样每次进入gg目录就可访问Web服务器的文档,以后如果不再访问Web服务器的文档时,删除gg即可,而真正的Web服务器的文档并没有删除。
( C* |9 m0 i# ?: w
3 e  x) N' Q  G3 }$ q' o2.使用dd命令将init.rd格式的root.ram内容导入内存
+ H, d0 A2 Z( E: f* }/ M0 }7 l2 n, H9 C# D, Q  o6 F- z
dd if=/dev/fd0 of=floppy.fd - R( z. j3 A, {* c0 M5 G

, w  X. |2 p5 o) _3 zdd if=root.ram of=/dev/ram0 #
7 X, N/ e0 q0 Q" q- c  M  O, X1 G6 @! W! l4 x9 J) m
3.grep命令系统调用
+ O* h# i1 D  g  ?2 {
6 E# o6 n5 b) ]6 G- Bgrep是Linux/Unix中使用最广泛的命令之一,许多Linux系统内部都可以调用它。
' M* \! j4 u% Z+ m9 _3 D! w3 K1 d
! u6 l; O/ y1 B(1)如果要查询目录列表中的目录,方法如下: * Q3 |0 e: z! z$ C& ^# R
4 X! c( K% p6 L- F
$ ls -l | grep '∧d' * p  A5 f8 k8 E
3 M4 }0 Y( Y6 Q: C$ K, Q: @
(2)如果在一个目录中查询不包含目录的所有文件,方法如下: + b  t6 j+ I4 U' I$ e) ^4 q

- I& z6 ~, j* _8 D/ E1 h$ ls -l | grep '∧[∧d]' " Q6 V5 T) U# h9 g/ n' P( A( g1 I

6 ?+ C! }" y- O- C# X* r5 l( U6 A(3)用find命令调用grep,如所有C源代码中的“Chinput”,方法如下: 4 X7 w6 y4 L1 M( o, o9 W3 j

" T2 f! s2 s8 A$find /ZhXwin -name *.c -exec grep -q -s Chinput {} \;-print 5 K& f" o$ M$ ^  d& Z+ \
' Y  ^" O' u8 q  O. `
</P>: \! I2 o7 Z, r" \! _# Z
</P>
作者: 一人    时间: 2007-8-14 18:31
最后一个
作者: neilhua    时间: 2010-2-16 17:36
楼主,辛苦了,谢谢!!!楼主,辛苦了,谢谢!!!
作者: 978462113    时间: 2010-4-22 13:34
楼主不错····顶·················
作者: hezhao    时间: 2010-6-10 07:36
不错,顶一个!
作者: 流水秋鸿    时间: 2010-12-1 10:41
好辛苦,学习了
. t8 D- W! R% ~, T( E' z
作者: huahouq    时间: 2010-12-6 21:05
楼主不错····顶·················
作者: 0tanggula    时间: 2010-12-17 14:01





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5