|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
操作系统的主要功能之一就是文件的管理。文件管理是由文件系统来实现的,Linux 系统支持多种格式
0 a3 g+ d& i! M# O0 E8 P k的文件系统,本届我们主要讲解下文件系统的类型,以及文件操作的一些常用命令。4 n3 R! N- t& I# P- B4 Y! f
2.8.1 Linux 文件系统类型# G. X* V4 N: K$ p0 A2 p
我们在使用 Windows 系统的时候,有时会对硬盘,U 盘等的存储设备进行格式化,在格式化的时候会要求/ a5 j; f7 U. L% {; d
我们选择文件系统的类型,比如:exFAT、FAT32、NTFS,同样 Linux 系统也支持各种不同类型的文件系统," V+ J" v# D) ^7 W
比如:ext2、ext3、ext4、yaffs、FAT32、NTFS 等。这里我们主要讲解下几种常用的文件系统。
8 ?( _2 x' ]1 D) f# iFAT32 文件系统:
* u! y+ {$ U; G6 MFAT32 指的是文件分配表是采用 32 位二进制数记录管理的磁盘文件管理方式,因 FAT 类文件系统的核心是/ x6 N+ `3 w3 i4 S
文件分配表,命名由此得来。FAT32 是从 FAT 和 FAT16 发展而来的,优点是稳定性和兼容性好,能充分兼容# x Y$ I+ @- F
Win 9X 及以前版本,且维护方便。缺点是安全性差,且最大只能支持 32GB 分区,单个文件也只能支持最大
8 Z$ z9 y# O0 Z, `4GB。' e0 H# z- V+ Q1 D# K
3 ext3 文件系统1 `6 a t# _- s* |* T4 S
EXT3 是第三代扩展文件系统(英语:Third extended filesystem,缩写为 ext3),是一个日志文件系统,7 C/ c U& ?8 [/ B) K" k
常用于 Linux 操作系统。它是很多 Linux 发行版的默认文件系统。Stephen Tweedie 在 1999 年 2 月的内核- X* I+ }- z' W, [2 Q( |. b
邮件列表中,最早显示了他使用扩展的 ext2,该文件系统从 2.4.15 版本的内核开始,合并到内核主线中。
" U. P. T, H2 next4 文件系统
9 W: B7 T T7 N' m3 X0 k4 EXT4 是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是 Linux 系统下的日志
' O6 Z/ G. ]# B& A) A& S0 r文件系统,是 ext3 文件系统的后继版本。Ext4 是由 Ext3 的维护者 Theodore Tso 领导的开发团队实现的,
5 @& F/ T$ o2 B3 m$ |: _* | f并引入到 Linux2.6.19 内核中。Ext4 产生原因是开发人员在 Ext3 中加入了新的高级功能。! _3 C8 F" D& Z/ y$ e. ?
上面几种文件系统是我们在 Linux 下经常使用的,那么我们安装的 Ubuntu 系统下的文件系统使用的是哪种! @/ Z s2 \. }; ]' L' g) [' X
格式的呢?我们可以在终端输入“df -T”命令来查看下,如下图所示:2 X/ b- b! u/ d- e
; w' [. e7 q$ u9 j4 v# n从上图红色方框的文件就是我们安装 Ubuntu 的磁盘,在 Linux 下一切皆为文件,“/dev/sda1”就是我
. n% p. F4 @! W6 a们的磁盘分区,可以看到他的类型是 ext4。我们在 Windows 系统下有 C、D、E 盘这样的概念,但是通过上% _' `/ P B% O5 m' @) b
面的命令我们可以看到 Linux 下对磁盘的管理与 Windows 是不一样的,没有 C、D、E 盘这样的概念。Linux" {8 [. Z( Y5 @0 s
系统只有一个跟目录“/”,我们可以在 Ubuntu 的桌面打开“文件”应用,我们可以看到打开的文件路径
: m) O9 P; \% a8 L并不是在根目录下,这是因为 Ubuntu 是支持多用户的,会为每个用户分配一个根目录,比如我的 Ubuntu# w* q) r# W. q: @0 Z
登录的用户是 topeet,那么默认进入的就是 topeet 用户的根目录“home”,如下图所示:; i* g! Z4 [2 L: w2 H) Z
6 v) T0 E1 {0 e# u4 N) ^1 v% N( m
我们在上图中点击左侧的“计算机”,如下图所示:0 U; \8 r9 E. `; t+ y
) S0 l& k8 ?2 i: X上图就是 UBuntu 的根目录,那么前面我们的说的 Ubuntu 会为每一个用户创建一个根目录,那么这个根目9 H! t$ m( u5 X3 l$ L
录具体位置在哪里呢?我们在创建用户的时候,Ubuntu 同时会在“/home”目录下创建与应户名同名的文) z4 R6 m6 b0 Y/ ~5 }/ w
件夹,这个文件夹就是用户的根目录,比如我这里登陆的用户名是 topeet,那么 topeet 用户对应的用户根
3 e2 q* M% ~: e' C+ H) ~4 U i目录就是“/home/topeet”这个目录。用户可以对自己用户根目录下的文件进行任意的读写操作。我们可' J: C) N8 x* ?2 O5 P- r
以打开终端使用“cd /”命令,进入到系统根目录下,然后在输入“ls”命令,产看下系统根目录下都有哪& C5 I- s4 e4 f/ d8 |5 _
些文件,如下图所示:; H# C& F2 u4 C0 U
! z6 `: Z0 }) o3 u: R& f) k
从上图可以看到系统根目录下都有哪些文件夹,我们来看下这些文件夹的具体功能:
D0 z" K: c" i9 H+ M/bin 存储一些二进制可执行命令文件
% S) B2 B: l& B* n8 p; s/boot 存放 Ubuntu 系统内核和系统启动文件, S& U. B9 L0 b& f. Z/ S% w6 d1 l
/dev 存放设备节点/ g, p( r& T" Y6 S0 x# \5 p
/etc 存放系统管理所需的配置文件
+ Y/ A2 b2 [! t+ c6 Y2 i/home 普通用户默认目录,每个用户在改目录下都有一个以本用户名命名的文件夹
3 t( |- B% d" k M; L4 X. _ V4 G7 T/lib /lib64 存放系统程序运行所需的库文件! G+ y" H1 L$ j% T8 V
/media 存放 Ubuntu 系统自动挂载的设备文件
0 ^' t8 k8 Y* E' _/mnt 用于挂载的文件系统的挂载点
! i8 i/ y; C* k2 J/opt 可选文件和程序的存放目录
6 r1 h: [7 I# g* v# P, X/proc 通常用来保存系统信息和进程信息9 f. U# u! T, b
/root 超级用户 root 的根目录文件
' ?' y0 y0 k4 `* ^. h# [5 _7 s+ B/sys 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息
% i. ]0 W) w& {6 s$ `/tmp 存储系统和用户的临时文件
& q- o) q) _- o8 a/usr 包括与系统用户直接有关的文件和目录
6 `1 O; V0 }. h3 {& B8 B/var 存储一些不断变化的文件,比如日志文件
/ I7 ^' a4 P. e2 k2.8.2 文件操作命令! S; X- S0 b) c5 f6 @
创建文件命令 touch) D/ N; ?3 r7 l4 Q* @5 x% K+ Y6 f4 D$ v
我们在前面学习 vim 的时候,可以通过 vim 来创建一个文本文件,“touch”不仅可以用来创建文本文件,# S- u( P& U+ b3 Y
还可以创建其它类型的文件,命令格式如下:$ Q" m. ^- e9 U) V% N. s" Z
touch [参数] [文件名]
8 x! ^2 Z* F9 M9 v5 D参数说明:, B7 G: I) _2 T: ?
-a 只更改存取时间
$ j F- A1 [! i, \-c 不建立任何文件/ l- w- N) h- w+ {# s @
-d<日期> 使用指定的日期创建文件6 f$ d- I# {4 M! o; J
-t<时间> 使用指定的时间创建文件
" G# M$ W; ^; V! E a当我们使用“touch”命令创建文件的时候,如果创建的文件不存在,则会直接创建,如果创建的文件- f% a6 S8 N3 \; h
已经存在,则会修改下文件的最后修改日期(修改成运行该命令时候的系统日期)。现在我们使用命令“cd
: l5 j w/ Q+ f. l# U, I( `0 F~”进入到用户的根目录下,然后使用“touch”命令创建一个名为 ceshi 的文件,运行结果如下图所示:/ A& @+ _/ d4 L e. Y, f5 x
% q% j1 v- f/ I7 c
文件夹创建命令 mkdir
# @$ G2 n/ S8 K. wmkdir 是用来创建文件夹的命令,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,并且创- H4 a+ H4 s+ i1 b# N+ c, Q& k2 ?6 b( F8 V
建的文件夹名称不能是当前目录中又有的目录,命令格式如下:
4 k' z: Q( Z3 tmkdir [选项] 目录...( G. W( b3 l2 F
选项的说明如下:- e9 m' B1 S( @- S
-m //设定权限<模式>(类似 chmod)' {7 B7 B) V# m/ A4 ^. K0 r
-p //可以是一个路径命令,如果路径中的目录不存在,则依次创建他们0 D- C9 ]- } i- S6 S
-v //每次创建新目录都显示信息+ W+ J2 A6 L) s6 Z: T) o
--help //显示帮助信息
: T9 t M2 a$ Q* C--version //输出版本信息
5 n; [" L% E! Z% o我们可以使用 mkdir 创建一个名为“test”的文件夹,我们在终端运行命令“mkdir test”,运行结果如下图! ]/ u0 Q* J& K7 t
所示:; S4 y( m$ ]; e: V3 {
e8 {( l1 K+ [" w
文件删除命令 rm
' o7 g5 M' D3 L5 |2 x9 Hrm 命令可以删除文件和文件夹,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,命令格 `3 v- D* f0 `+ T( c- M
式如下:8 V1 V" j1 p3 ~1 U" z2 D, A
rm [选项]... 目录...0 S0 V& T, a- B! ^5 L
选项的说明如下:
* Z+ Z+ `) M) v/ s2 M B2 D+ R-d //删除可能仍有数据的目录(只限超级用户 root)' |$ e# a! z% Z
-f //略过不存在的文件,不显示任何信息
" ?5 [! U* M$ a* ]3 H- {-i //进行任何删除操作前,必须先确认$ S( F$ Z, d* ? o
-r //同时删除该目录下的所有目录层) R! P! g1 W2 X n! p4 V3 p
-v //详细显示进行的步骤. V! n3 R( T" @; G3 y- I7 Z9 [
--help //显示帮助信息并退出6 R* s4 l$ d% t' S8 ?3 l" |
--version //显示版本信息并退出4 y& c. u$ T& c4 |; i" p
我们使用“rm”命令删除前面创建的文件“ceshi”,我们在终端输入“rm ceshi”,然后回车就可以删
1 b2 \4 F1 W( O4 m5 E. H& h掉文件“ceshi”了,运行结果如下图所示:3 ^5 D% I3 N0 P. I0 Y; V7 b& d5 q
' g9 ~/ f! u- B- ~9 a
“rm”命令也可以删除文件夹,我们删除前面创建的 test 目录,我们在终端执行“rm -RF test”,运行结果% |& E7 ]- Y+ _, `) n+ V
如下图所示:& H# F$ z! V4 {6 w/ P, K
6 U, m5 H- N' K* d/ ^, s文件复制命令 cp
' N* m1 P" A" O9 f0 L1 xLinux 下文件复制的命令是“cp”,命令格式如下:
( Q8 i; J2 o, v3 ycp [参数] [源文件] [目标文件]+ U, f. e. L3 H M
参数的说明如下:# c& l% F8 ?# Y
-d //复制有符号连接的文件时,保留原始的连接% ]4 g4 M/ `& J# b4 Z% J+ p) ~
-f //强行复制文件,不管要复制的文件是否已经存在于目标目录- T2 n0 h/ M9 y# k1 y
-r //递归处理,将指定目录下的文件及子目录一并处理
+ m- a, Q& q! o8 X3 i7 B我们在用户跟目录下使用 mkdir 命令创建两个文件夹:ceshi1、ceshi2,如下图所示:" S& E- P, `" X2 C5 n: O, ]0 ]$ S5 X
& g" s; c! z' ]" D) \3 Z/ s, M然后进入“ceshi1”文件夹,在 ceshi1 文件夹创建 a 文件,如下图所示:& [8 i. f e+ n# u1 i( G! P( Z
$ F3 @/ h; l# b3 J1 M |
我们将文件 a 复制到用户根目录下的 ceshi2 文件夹,运行结果如下图所示:
8 p' Q1 }2 d: T/ J! m$ F4 O
. q: H( u; ?+ @! C$ |6 W完成文件的复制,接下来我们来实现文件夹的复制,首先我们返回到用户根目录下,然后将 ceshi1 文件夹1 |! i4 r: N9 D! o% a2 z' R
复制到 ceshi2 文件夹,运行结果如下图所示:
, t! h: |5 `$ K1 K, @' u
+ H5 y8 I% Z, m8 b3 O! H* `
移动文件命令 mv* m/ Q5 q7 k8 r. F F
Linux 下文件移动的命令是 mv,命令格式如下:2 M+ r' ^- Q8 f' ` `
mv [参数] [源文件] [目标文件]
0 C; H- q- f: j X5 }参数说明:$ e* Q8 H! g& M$ o3 A
-b //如果要覆盖文件的话覆盖前先进行备份
) X7 L5 q/ c6 w" b-f //若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录% W3 R# f, X/ U( {9 h9 ~
-i //若目标文件存在,则会询问是否覆盖! ~! r) Q1 I9 G. r% @4 Y2 ~
-u //若目标文件已经存在,且源文件比较新,则会更新
3 @! I4 O7 O# \, i: T0 `8 [) D我们在前面创建了两个文件夹:ceshi1、ceshi2,在 ceshi1 文件夹创建了文件 a,我们将文件 a 重命名成文
# [5 \' D3 c3 F( k件 b,然后将文件 b 移动到 ceshi2 文件夹,运行结果如下图所示:2 z; G: i3 X1 b, h" ~
0 z7 L# l. S6 X4 [4 k$ G
文件接压缩命令 tar' z2 D8 c1 ]2 @1 v4 X1 k
Linux 下常用的压缩包格式有两种:.bz2 和.gz。我们可以使用 tar 命令来解压或压缩这两种格式的压缩包," z, Z0 L0 E* ~3 H" I6 x3 H
命令格式如下:
- W3 u0 ^0 E/ e, I3 ktar [必要参数] [选择参数] [文件]* F$ Z4 A7 K3 k# d8 f
必要参数说明如下:
8 }7 L# X' s. T% u; S-A //新增压缩文件到已存在的压缩
7 \, f9 N1 m3 U$ [ D-B //设置区块大小% k. j$ {1 X! I% l; U2 u4 G
-c //建立新的压缩文件& @; j1 Q) e5 V$ C; y/ U! n
-d //记录文件的差别3 p: }% U4 l! Y. s6 [8 h! O0 v" ~4 T
-r //添加文件到已经压缩的文件
& q- f7 ^9 e1 p6 k; A-u //添加改变了和现有的文件到已经存在的压缩文件
% J9 Y x5 E( v; P1 n-x //从压缩的文件中提取文件
5 k2 A$ `; k4 E* u9 p0 X' b! r3 u-t //显示压缩文件的内容* |% A) ~5 j2 k- Q8 W2 `
-z //支持 gzip 解压文件; `- e; Q2 F1 W3 O+ T, z
-J //支持 bzip2 解压文件
8 H) H# v$ n9 J ^3 Y-Z //支持 compress 解压文件. F8 Y: P- x' |7 L' M: O
-v //显示操作过程/ U; @$ }: m+ a5 F
-k //保留原有文件不覆盖
9 k+ ^+ A- K* U/ {2 r# o-m //保留文件不被覆盖
- F N# O( q" `1 R0 w6 I-W //确认压缩文件的正确性. f7 u- z9 M7 d. s+ Y
可选参数如下:
9 g4 w$ T; i9 {; [4 v-b //设置区块数目
' F5 b# E, l% c! o" w/ w+ u-C //切换到指定目录
0 D" k* {- i$ f* \-f //指定压缩文件
- @0 {/ {- J6 Q) j--help //显示帮助信息; `1 d* ]% H( \9 L) E5 Y3 _0 [3 Z
--version //显示版本信息
0 ^ \* I; Z# w- V- b) {% |( D' J我们使用 tar 命令压缩生成.bz2 和.gz 压缩包,运行结果如下图所示:7 R: q$ p7 }# E) G6 A* Q
5 c) w2 X* v+ t' N: A
在上图中我们分别压缩了.bz2 和.gz 两个格式的压缩包,其中压缩.bz2 格式的压缩包我们使用的参数
' J9 M. v. t3 R* B9 A是-jcvf,而.gz 格式的压缩包使用的参数是-zcvf。下面在我们在来学习下 tar 解压文件,操作如下图所示:# Y! q1 y/ [" _% q$ u7 ~* \" n, Z5 ?
. @; ]+ n9 s3 f" z* Z8 |0 K在上图中,我们分别解压了.tar.bz2 和.gz 两种格式的压缩包。其中.tar.bz2 压缩包使用的-jxvf 参0 n* r0 l& I3 s5 d0 r, Z1 c3 V( I0 H
数来解压的,而.gz 格式的压缩包使用-zxvf 参数来解压的。关于 tar 的命令我们就介绍到这里,更多详细
' q, X/ r4 w* {( i) e; Q" ^+ r的用法大家可以去网上找下相关的文档。( w, D8 ]* v& |8 u3 P: V1 B+ @
文件查找命令 find* q8 G8 f1 i2 P8 ^" d
文件查找在我们的平常使用中也是很常见的,比如在 Linux 内核源码中,我们要查找某个文件的路径,这
. N& g/ q) {# H4 g是就会用到文件查找 find 命令了,器格式如下:( }' o) B! m2 ]5 i2 Q2 X, H) k
find [路径][参数][关键字]
+ U& F! }7 l. F4 G. h* [# V3 l7 y路径标识要从哪个目录下开始查找文件,如果不写默认从执行 find 的当前目录下开始查找。
" Q1 b5 D8 H, H- V- r- \6 y& O参数说明如下:0 K0 j p8 S& V
-name 按照文件名称查找,查找与 filename 匹配的文件
. z& \1 G1 J- q9 A3 w-depth 从指定目录下的最深层的子目录开始查找- L9 Y- G8 p4 g+ B( f# T' d" m0 L' p
-size<文件大小> 查找符合指定文件大小的文件8 ~6 V0 z! i: p
-type<文件类型> 查找符合指定文件类型的文件
% v) p- q$ v. i% \) M; }-user<拥有者> 查找符合指定的拥有者的文件或目录
( Z9 V" r `* V" Z8 d$ g0 m-gid<群组识别码> 查找符合指定的群组识别码的文件或目录
2 q n3 G, @4 i! A9 e" O: c: c9 C-group<群组名称> 查找符合指定的群组名称的文件或目录$ i' m* b$ g/ Y" m- B
该命令的参数有很多,我们这里只是列举除了一些常用的。我们来使用 find 命令查找一下在目录“/etc”. S1 Z3 }4 p, T1 m
下以“host”开头的文件,我们在终端输入“find /etc -name host*”命令,运行结果如下图所示:
) }: e. _8 f7 p7 m1 m o: U
, d: l$ \5 ~- I! y" L
从上图中我们可以看到在“/etc”目录下,以“host”关键字开头的文件全部查找出来了。
: ]' f* b$ T8 P9 e* l* H& k9 \6 [文本搜索命令 grep% u1 ~! g' b9 K* |( a7 B# y8 n
有时候我们需要搜索出包含特定关键字的文件有哪些,这样就会用到 grep 这个命令,命令格式如下:4 q* w/ O! X- G
grep [参数] 关键字 文件列表, ]* `1 q- ^+ y! r5 v) ^1 _' z
参数说明如下:4 G0 { ~. ^* y( Y4 N
-b //在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号
% m3 F2 x; @5 E+ Z5 L-a //不要忽略二进制的数据) u8 H# f- N5 i, h
-c //计算符合范本样式的列表' F' C2 c2 x( @# c
-i //忽略字符的大小写- \8 C) u" y( ^" M5 j* i6 Y, _
-n //在显示符合样本范式的那一列前面,标出该列的列数编号2 @3 x+ C1 N6 O3 R$ y j _' Z6 w
-r //在指定目录中递归查找
! w! \$ U: r: J. V) C9 o& H' I8 m-v //反转查找,只显示不匹配的行
& ~3 V: \$ d/ C9 z. D% S/ H比如我们在“/etc”下递归查找包含字符“topeet”的文本,运行结果如下图所示:‘
5 {4 y4 t8 z6 `) M0 O0 ~, I8 f
9 p9 z2 ^0 Y7 N! w |
|