|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
操作系统的主要功能之一就是文件的管理。文件管理是由文件系统来实现的,Linux 系统支持多种格式4 O* e* x4 }* \! I8 @/ D" Q. r Q3 d
的文件系统,本届我们主要讲解下文件系统的类型,以及文件操作的一些常用命令。
( g8 Y0 H! U/ }/ x( S2.8.1 Linux 文件系统类型, f" n' w8 K+ P V
我们在使用 Windows 系统的时候,有时会对硬盘,U 盘等的存储设备进行格式化,在格式化的时候会要求: Q) ^$ K. n9 B! [, C
我们选择文件系统的类型,比如:exFAT、FAT32、NTFS,同样 Linux 系统也支持各种不同类型的文件系统,
# T/ i {0 N p" E3 A& E- r( u6 y比如:ext2、ext3、ext4、yaffs、FAT32、NTFS 等。这里我们主要讲解下几种常用的文件系统。
' k( }' K+ s9 e5 y# J& |FAT32 文件系统:: @! a" o4 I* N* K$ n4 y
FAT32 指的是文件分配表是采用 32 位二进制数记录管理的磁盘文件管理方式,因 FAT 类文件系统的核心是
: H& M; P+ l5 H: @* o# w文件分配表,命名由此得来。FAT32 是从 FAT 和 FAT16 发展而来的,优点是稳定性和兼容性好,能充分兼容
" `. M1 w* l2 \* m, z% `Win 9X 及以前版本,且维护方便。缺点是安全性差,且最大只能支持 32GB 分区,单个文件也只能支持最大) ~+ |* c% R4 J) X# \! D
4GB。 X& U/ O3 g; z/ f
3 ext3 文件系统
8 t7 d Q) I% `. H. N" z4 fEXT3 是第三代扩展文件系统(英语:Third extended filesystem,缩写为 ext3),是一个日志文件系统,
6 m8 x" a9 T3 d4 r5 A% X" j/ Y常用于 Linux 操作系统。它是很多 Linux 发行版的默认文件系统。Stephen Tweedie 在 1999 年 2 月的内核: J& m& l, G* J9 {+ z
邮件列表中,最早显示了他使用扩展的 ext2,该文件系统从 2.4.15 版本的内核开始,合并到内核主线中。: W" P/ Z( X0 x( O1 t% \
ext4 文件系统. J# t: `" K' X, w9 G
4 EXT4 是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是 Linux 系统下的日志/ ` z7 t( y. }& S: [; c
文件系统,是 ext3 文件系统的后继版本。Ext4 是由 Ext3 的维护者 Theodore Tso 领导的开发团队实现的,4 |+ D! V9 Y9 ]) V7 k) u
并引入到 Linux2.6.19 内核中。Ext4 产生原因是开发人员在 Ext3 中加入了新的高级功能。! ^" u4 e( L" g4 \
上面几种文件系统是我们在 Linux 下经常使用的,那么我们安装的 Ubuntu 系统下的文件系统使用的是哪种5 v/ p$ x, B. p8 K5 E
格式的呢?我们可以在终端输入“df -T”命令来查看下,如下图所示:% H# x/ M3 \) e5 R5 z; o& f
1 S6 q3 B. i% u
从上图红色方框的文件就是我们安装 Ubuntu 的磁盘,在 Linux 下一切皆为文件,“/dev/sda1”就是我
0 e* o2 e* K& {! l8 M们的磁盘分区,可以看到他的类型是 ext4。我们在 Windows 系统下有 C、D、E 盘这样的概念,但是通过上
0 X' K' F3 |% x0 X$ G/ \面的命令我们可以看到 Linux 下对磁盘的管理与 Windows 是不一样的,没有 C、D、E 盘这样的概念。Linux
8 [" }/ e2 z( Z J% h/ e系统只有一个跟目录“/”,我们可以在 Ubuntu 的桌面打开“文件”应用,我们可以看到打开的文件路径" _& h" R& U( b. e0 I4 ]7 T' [
并不是在根目录下,这是因为 Ubuntu 是支持多用户的,会为每个用户分配一个根目录,比如我的 Ubuntu( {: p, ~& e. U5 P
登录的用户是 topeet,那么默认进入的就是 topeet 用户的根目录“home”,如下图所示:
4 {* X9 g q$ u) L' L
( H9 B( q4 I3 H6 m: Y* ~) i1 @
我们在上图中点击左侧的“计算机”,如下图所示:! a+ G/ f& b; k6 n s9 B
" O# y0 Y" ^6 Y& j" O& c) w
上图就是 UBuntu 的根目录,那么前面我们的说的 Ubuntu 会为每一个用户创建一个根目录,那么这个根目: S+ k% Y2 U) z* C" I; u6 I1 e
录具体位置在哪里呢?我们在创建用户的时候,Ubuntu 同时会在“/home”目录下创建与应户名同名的文
8 I/ N# A8 R; S0 F9 h件夹,这个文件夹就是用户的根目录,比如我这里登陆的用户名是 topeet,那么 topeet 用户对应的用户根
: r7 L9 d3 \, z( c. ^2 Q. H目录就是“/home/topeet”这个目录。用户可以对自己用户根目录下的文件进行任意的读写操作。我们可
8 t7 W3 E% g6 b0 |& D" T+ B以打开终端使用“cd /”命令,进入到系统根目录下,然后在输入“ls”命令,产看下系统根目录下都有哪
" z9 I. H: d' W些文件,如下图所示:# h' N4 t6 j% N: I6 k
, s0 d' E! y' T$ ^从上图可以看到系统根目录下都有哪些文件夹,我们来看下这些文件夹的具体功能:, g; X/ [) e; Z- z ?7 Y
/bin 存储一些二进制可执行命令文件, R) |, s0 i: I8 w- A% N5 F
/boot 存放 Ubuntu 系统内核和系统启动文件
! t& p3 a. S; P- ^) n/dev 存放设备节点
& | X- Z( I4 w" @. n4 L/etc 存放系统管理所需的配置文件
; M+ g8 \" i- }" g; r/home 普通用户默认目录,每个用户在改目录下都有一个以本用户名命名的文件夹
( G k- ^( V0 Q: }/lib /lib64 存放系统程序运行所需的库文件
( [$ d$ _: D$ ^- x/media 存放 Ubuntu 系统自动挂载的设备文件, _0 b6 X5 ^: u( Q( \$ R8 |
/mnt 用于挂载的文件系统的挂载点
, w7 c; r% q3 Q- u, ~* u( r/opt 可选文件和程序的存放目录' o6 e: c9 p" _, L) g5 M
/proc 通常用来保存系统信息和进程信息
$ n+ i5 y3 A% }5 s' }7 b6 [1 c/root 超级用户 root 的根目录文件
+ s0 d* w3 V. F5 k7 a$ C7 I/sys 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息5 Z- W* u+ Z8 S9 t: o6 u$ |9 M7 G
/tmp 存储系统和用户的临时文件( x; t; ?8 {( z. U0 ?' _
/usr 包括与系统用户直接有关的文件和目录
0 o) W8 }8 U5 Z! e$ m0 {/var 存储一些不断变化的文件,比如日志文件
7 \* q& f1 J% d: f4 {$ v6 S2.8.2 文件操作命令( [: C. d% l: M( r2 c( E
创建文件命令 touch1 T) h3 T. c3 K, a
我们在前面学习 vim 的时候,可以通过 vim 来创建一个文本文件,“touch”不仅可以用来创建文本文件,
. h0 K. B e; z" g还可以创建其它类型的文件,命令格式如下:7 a# `0 x2 u' a0 N+ h2 K* ]
touch [参数] [文件名]. n& B$ |- o& e" r
参数说明:
. A5 g! t2 _ \( q9 O. M t* n-a 只更改存取时间
" u% G$ n, y& z8 J-c 不建立任何文件
( c: U3 J& E% _- Z# g-d<日期> 使用指定的日期创建文件' Q+ K3 [& v3 L: z2 u
-t<时间> 使用指定的时间创建文件
- B3 x6 H0 ^6 ]4 z" P/ I9 i当我们使用“touch”命令创建文件的时候,如果创建的文件不存在,则会直接创建,如果创建的文件7 o! h F! C! o: I( k# y+ h3 K% k
已经存在,则会修改下文件的最后修改日期(修改成运行该命令时候的系统日期)。现在我们使用命令“cd
% X, O' A3 u8 O~”进入到用户的根目录下,然后使用“touch”命令创建一个名为 ceshi 的文件,运行结果如下图所示:. @/ @/ V p' f: Q& o8 `
: Q. f; h; E+ M& w) H( M5 M
文件夹创建命令 mkdir
; u; V2 d8 S* Q2 B! U3 Smkdir 是用来创建文件夹的命令,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,并且创8 c7 y$ y% h5 V; i' \3 h
建的文件夹名称不能是当前目录中又有的目录,命令格式如下:
6 y/ g7 z1 I! j8 b; b; f5 rmkdir [选项] 目录...
$ q* t( }9 l" ]! ?选项的说明如下:
! D' v& _, x5 y$ W( M) ?; b-m //设定权限<模式>(类似 chmod)
4 x' i/ X/ _/ {) S: R( b5 W-p //可以是一个路径命令,如果路径中的目录不存在,则依次创建他们
- e3 z4 Y @8 P5 M-v //每次创建新目录都显示信息( m' V/ ?; b* m$ S- _' _9 P
--help //显示帮助信息# |. I {; w) y0 ^5 E
--version //输出版本信息% d, v6 `5 @8 q" p3 o2 [
我们可以使用 mkdir 创建一个名为“test”的文件夹,我们在终端运行命令“mkdir test”,运行结果如下图
5 y! z' ^* S4 I2 B' m所示:+ O/ A" n/ u: I
8 {0 u" A* k& w; n$ d$ ]文件删除命令 rm- i) `( X- Z5 Y# |, e% P
rm 命令可以删除文件和文件夹,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,命令格式如下:8 l& `) ^& U4 q3 Q& r6 ^
rm [选项]... 目录...2 A) Q3 e2 }. X4 x
选项的说明如下:9 Y, E! j# L4 T1 `, N5 V
-d //删除可能仍有数据的目录(只限超级用户 root)7 I8 j& K) k, f0 [; p: d" r% T( i
-f //略过不存在的文件,不显示任何信息
5 _7 N$ [/ v+ F k0 R-i //进行任何删除操作前,必须先确认
* P8 D1 b, ?5 a1 f* G9 K/ y9 ?2 n1 l4 w-r //同时删除该目录下的所有目录层
. F) y2 Z: f( O z2 I- M V-v //详细显示进行的步骤
$ E( Q# a. u( s" N) l5 ~, L--help //显示帮助信息并退出% |- g; E9 M( I: |
--version //显示版本信息并退出
8 Y) b9 y2 _9 f# {1 T: D7 }我们使用“rm”命令删除前面创建的文件“ceshi”,我们在终端输入“rm ceshi”,然后回车就可以删
! Z/ L0 G( Z, p4 j掉文件“ceshi”了,运行结果如下图所示:
$ r! b" c3 O' b( H0 a+ q+ A
7 ?6 O" `* O( s
“rm”命令也可以删除文件夹,我们删除前面创建的 test 目录,我们在终端执行“rm -RF test”,运行结果! N( o3 K+ A# g0 G
如下图所示:
" J* Z+ E6 C* u7 Y0 Z f
% l( y$ ]! v+ U& X5 y5 @
文件复制命令 cp
) W6 p u1 t6 D" b- f# p5 @Linux 下文件复制的命令是“cp”,命令格式如下: V, K9 u! y! R5 j3 f+ U/ h
cp [参数] [源文件] [目标文件]
, l4 `! X+ c. |. q) y参数的说明如下:
# G: K1 h1 }' N, Q! X: e-d //复制有符号连接的文件时,保留原始的连接& P- k) V' g3 [/ ?* ~( r
-f //强行复制文件,不管要复制的文件是否已经存在于目标目录
8 `3 s+ ^# D( V. e2 I- G5 S-r //递归处理,将指定目录下的文件及子目录一并处理& `( v2 G0 q# u7 s# S' J+ J4 ]3 C
我们在用户跟目录下使用 mkdir 命令创建两个文件夹:ceshi1、ceshi2,如下图所示:
+ f0 {! G* L& F4 ~1 Z! z! c _. \
7 l! M+ ?& f' H7 M然后进入“ceshi1”文件夹,在 ceshi1 文件夹创建 a 文件,如下图所示:! t9 T7 i1 c4 |3 v( o0 U6 B+ `
9 E: o6 |! y) [9 v. U% y/ o我们将文件 a 复制到用户根目录下的 ceshi2 文件夹,运行结果如下图所示:
: X7 x) Y) J4 t5 h
' X$ X& y# {* g+ v; V
完成文件的复制,接下来我们来实现文件夹的复制,首先我们返回到用户根目录下,然后将 ceshi1 文件夹
% ] B: i* j+ w7 H& u4 |+ c+ \复制到 ceshi2 文件夹,运行结果如下图所示:
/ g+ ?+ p3 a2 W# Z8 T
% p% ?$ `; s8 K% X4 J d
移动文件命令 mv( z8 E- t( I( h6 Z2 W# e
Linux 下文件移动的命令是 mv,命令格式如下:
, v$ T, J; o l3 m5 Zmv [参数] [源文件] [目标文件]4 Z- \+ y, ^7 X
参数说明:5 x7 m& y( L" p( u: H4 Z
-b //如果要覆盖文件的话覆盖前先进行备份5 M4 L9 H; J! f' J' b* A0 z% b1 D
-f //若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录
8 c6 H$ C0 o" c# b1 q-i //若目标文件存在,则会询问是否覆盖3 l. I/ q; i9 E2 @1 i. ~5 c7 J
-u //若目标文件已经存在,且源文件比较新,则会更新# B3 ~ Z- i# X! a- q
我们在前面创建了两个文件夹:ceshi1、ceshi2,在 ceshi1 文件夹创建了文件 a,我们将文件 a 重命名成文
8 K' x8 s/ x% T$ E件 b,然后将文件 b 移动到 ceshi2 文件夹,运行结果如下图所示:3 {& `5 v/ ]# I5 A V- a, ?8 m, }) `
" Z' E% j: [- N& u! }
文件接压缩命令 tar+ [0 @& d2 }9 `! Z
Linux 下常用的压缩包格式有两种:.bz2 和.gz。我们可以使用 tar 命令来解压或压缩这两种格式的压缩包,
+ H1 _4 I T+ } e5 T命令格式如下:7 O+ j" O' t3 | I' O- d$ D
tar [必要参数] [选择参数] [文件]
# N$ E4 k0 J8 D$ S' z必要参数说明如下:' v$ D& a7 V# `& R
-A //新增压缩文件到已存在的压缩5 a- X: L( X) k8 Y6 W- b5 L0 z y
-B //设置区块大小
, C8 z2 k* q& `- m2 ^0 d9 g; S-c //建立新的压缩文件1 P0 o. l( D4 \4 p" d! h) p( K
-d //记录文件的差别1 ]! ^* W6 ?$ _* q5 L, W w3 L
-r //添加文件到已经压缩的文件
* a. c. o* O& l5 P0 p5 h) i' V) R% N' H-u //添加改变了和现有的文件到已经存在的压缩文件
) e* c5 s- g. ]9 e5 @; |! ]3 o-x //从压缩的文件中提取文件
0 g$ N4 m0 ^ U! j1 B* J-t //显示压缩文件的内容% \5 K. E/ n3 W1 K) U
-z //支持 gzip 解压文件' R( U I7 ~; M& U: W4 n9 y
-J //支持 bzip2 解压文件
- m, D4 _( k1 h3 e7 `3 A |; j-Z //支持 compress 解压文件
3 X4 J/ J4 h) I- c-v //显示操作过程" N+ R: X7 W# [) L
-k //保留原有文件不覆盖
) \3 Z) O1 n+ J5 W6 V-m //保留文件不被覆盖" k/ x: z9 w$ `( q. y
-W //确认压缩文件的正确性
8 @6 z( n- c) M' z可选参数如下:4 N6 k: r {5 H; |/ q& R/ |
-b //设置区块数目
5 B- R1 o/ l: ~ W0 a-C //切换到指定目录/ x& n' j* O' N4 r
-f //指定压缩文件/ [6 V5 H& @ L# D6 X% _# ~/ ]
--help //显示帮助信息
4 C9 N5 E" Z- Y4 f9 `5 D; n2 I5 n--version //显示版本信息. h2 N5 C% ?) `9 G0 M
我们使用 tar 命令压缩生成.bz2 和.gz 压缩包,运行结果如下图所示: B* S- }* e# n% @- X j
8 @) @; i" K( _& T" g" m9 e在上图中我们分别压缩了.bz2 和.gz 两个格式的压缩包,其中压缩.bz2 格式的压缩包我们使用的参数
# ~9 g1 `$ n5 J1 f' p是-jcvf,而.gz 格式的压缩包使用的参数是-zcvf。下面在我们在来学习下 tar 解压文件,操作如下图所示:* i0 E0 J1 [: ?" d" u( s
3 P5 c7 i5 z2 K- g/ F& \* I
在上图中,我们分别解压了.tar.bz2 和.gz 两种格式的压缩包。其中.tar.bz2 压缩包使用的-jxvf 参& ]! ~) S( K6 u% n% C8 ~; h. i
数来解压的,而.gz 格式的压缩包使用-zxvf 参数来解压的。关于 tar 的命令我们就介绍到这里,更多详细5 C8 {" ~/ }# X" I) N _& a
的用法大家可以去网上找下相关的文档。9 T/ ?' N- e$ ~* d
文件查找命令 find. O7 b* I9 E! y( U+ _4 o
文件查找在我们的平常使用中也是很常见的,比如在 Linux 内核源码中,我们要查找某个文件的路径,这
% K& w2 z: e0 K. V7 W6 y& L' |是就会用到文件查找 find 命令了,器格式如下:+ \2 U' W5 y, [
find [路径][参数][关键字]( q4 o1 O2 F! h2 }- V
路径标识要从哪个目录下开始查找文件,如果不写默认从执行 find 的当前目录下开始查找。 V6 w M: l8 X0 D
参数说明如下:: }, C1 ~6 `8 E- B
-name 按照文件名称查找,查找与 filename 匹配的文件6 W. S- N P' p
-depth 从指定目录下的最深层的子目录开始查找! `) }5 `4 T, E- m
-size<文件大小> 查找符合指定文件大小的文件- g2 U' ]- e2 X+ w% Q
-type<文件类型> 查找符合指定文件类型的文件. a6 p3 h l9 B& {0 X$ [
-user<拥有者> 查找符合指定的拥有者的文件或目录
3 C# C7 c% a9 H' h' A-gid<群组识别码> 查找符合指定的群组识别码的文件或目录
+ N; I0 _! D# l, U3 k; _4 t-group<群组名称> 查找符合指定的群组名称的文件或目录% y6 m8 m4 E5 r5 T$ a( x) m
该命令的参数有很多,我们这里只是列举除了一些常用的。我们来使用 find 命令查找一下在目录“/etc”- R( \& v: {/ X* ?; C, S
下以“host”开头的文件,我们在终端输入“find /etc -name host*”命令,运行结果如下图所示:" k/ C8 Q5 h3 z" U: ^1 {: C# z! r
- F3 f7 ^; v+ d- Y: ]1 w从上图中我们可以看到在“/etc”目录下,以“host”关键字开头的文件全部查找出来了。- F" }# q- T1 `5 U3 d
文本搜索命令 grep
" V/ F2 U9 i- Q* L: T有时候我们需要搜索出包含特定关键字的文件有哪些,这样就会用到 grep 这个命令,命令格式如下:
3 ]9 E& t8 B) U2 `, Agrep [参数] 关键字 文件列表
+ R% i: K& h7 [5 f7 F6 L* |参数说明如下:7 Z- s- u+ n+ M1 _
-b //在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号: N% S. U" m: Q. ]
-a //不要忽略二进制的数据8 n I6 [* V% k1 l" y4 v! R! e" C
-c //计算符合范本样式的列表2 ]/ U) H' g' U6 u2 g
-i //忽略字符的大小写
1 q# K: O% j% H" w7 p! d- W-n //在显示符合样本范式的那一列前面,标出该列的列数编号! D% x1 X- _1 L
-r //在指定目录中递归查找& i3 j$ Q4 [+ ]4 C8 a5 K2 H& _
-v //反转查找,只显示不匹配的行
1 | M0 J* e* l. p比如我们在“/etc”下递归查找包含字符“topeet”的文本,运行结果如下图所示:
' u) {( a6 j% L, T' N4 H" ~" T: b& z
: z' V T6 |2 T p6 W |
|