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