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