|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
操作系统的主要功能之一就是文件的管理。文件管理是由文件系统来实现的,Linux 系统支持多种格式
z* ?, s1 v& B& N8 x, ?4 v的文件系统,本届我们主要讲解下文件系统的类型,以及文件操作的一些常用命令。
5 L* y: ~0 z1 h A) L4 G, ]2.8.1 Linux 文件系统类型' Q# T0 ^0 L1 n% N
我们在使用 Windows 系统的时候,有时会对硬盘,U 盘等的存储设备进行格式化,在格式化的时候会要求
* Y! A2 y+ P2 t. ?! g0 }+ q# C, Y我们选择文件系统的类型,比如:exFAT、FAT32、NTFS,同样 Linux 系统也支持各种不同类型的文件系统,; R- v, q) p! P+ i* R) H2 J
比如:ext2、ext3、ext4、yaffs、FAT32、NTFS 等。这里我们主要讲解下几种常用的文件系统。
! Q. |; Q# r# b6 aFAT32 文件系统:, h7 X$ {9 B) g5 I, x* j# `2 M
FAT32 指的是文件分配表是采用 32 位二进制数记录管理的磁盘文件管理方式,因 FAT 类文件系统的核心是8 f2 V5 l7 u a3 A7 e
文件分配表,命名由此得来。FAT32 是从 FAT 和 FAT16 发展而来的,优点是稳定性和兼容性好,能充分兼容) g) o0 ^. ]* N: f
Win 9X 及以前版本,且维护方便。缺点是安全性差,且最大只能支持 32GB 分区,单个文件也只能支持最大
% R1 j; c6 `7 b4GB。; P1 M1 ~' p2 Q1 d( \
3 ext3 文件系统
}( F+ j# h. `' H% H. h5 b+ c( o9 iEXT3 是第三代扩展文件系统(英语:Third extended filesystem,缩写为 ext3),是一个日志文件系统,
; [* y1 q3 N- t# B. P常用于 Linux 操作系统。它是很多 Linux 发行版的默认文件系统。Stephen Tweedie 在 1999 年 2 月的内核- U0 f! @0 A9 I* S( Y
邮件列表中,最早显示了他使用扩展的 ext2,该文件系统从 2.4.15 版本的内核开始,合并到内核主线中。: G2 Q& T; r% F1 q! n: K% F; e
ext4 文件系统
* y! e# ^, H* n: j: U( D* ?4 EXT4 是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是 Linux 系统下的日志: O3 c, q5 ^+ N, {
文件系统,是 ext3 文件系统的后继版本。Ext4 是由 Ext3 的维护者 Theodore Tso 领导的开发团队实现的,
G! a. |5 R! R5 f并引入到 Linux2.6.19 内核中。Ext4 产生原因是开发人员在 Ext3 中加入了新的高级功能。
' D2 i, F+ h, [上面几种文件系统是我们在 Linux 下经常使用的,那么我们安装的 Ubuntu 系统下的文件系统使用的是哪种
1 @: N' T0 q3 M0 s9 k- H格式的呢?我们可以在终端输入“df -T”命令来查看下,如下图所示:
. ^. @/ ]7 S5 V& _) v5 k
: O- s. r$ r4 U1 Y. w9 G& L从上图红色方框的文件就是我们安装 Ubuntu 的磁盘,在 Linux 下一切皆为文件,“/dev/sda1”就是我
; S" R2 }- H9 o4 e+ G. t O' T2 N们的磁盘分区,可以看到他的类型是 ext4。我们在 Windows 系统下有 C、D、E 盘这样的概念,但是通过上5 i( z7 V; `) N8 ^# F, z; D' I
面的命令我们可以看到 Linux 下对磁盘的管理与 Windows 是不一样的,没有 C、D、E 盘这样的概念。Linux
- i0 o: m& }* v9 c+ i4 g) o系统只有一个跟目录“/”,我们可以在 Ubuntu 的桌面打开“文件”应用,我们可以看到打开的文件路径
7 Z; \& @* U f" @并不是在根目录下,这是因为 Ubuntu 是支持多用户的,会为每个用户分配一个根目录,比如我的 Ubuntu. |4 r/ k Q/ M. [
登录的用户是 topeet,那么默认进入的就是 topeet 用户的根目录“home”,如下图所示:
9 I. p* [6 U; [% }8 Z$ u9 D% A) }, {
$ b# c* `! L$ S
我们在上图中点击左侧的“计算机”,如下图所示:
' P! c! u# J& ~# f5 x+ l" z% u
# H d6 Q+ J1 i* w: M# k上图就是 UBuntu 的根目录,那么前面我们的说的 Ubuntu 会为每一个用户创建一个根目录,那么这个根目
+ j9 t6 `( p% z7 K4 i2 q3 X3 t录具体位置在哪里呢?我们在创建用户的时候,Ubuntu 同时会在“/home”目录下创建与应户名同名的文
5 }! N- @4 t+ ]件夹,这个文件夹就是用户的根目录,比如我这里登陆的用户名是 topeet,那么 topeet 用户对应的用户根
) n$ k; _& u2 P' N目录就是“/home/topeet”这个目录。用户可以对自己用户根目录下的文件进行任意的读写操作。我们可
3 i0 e' p. @5 B" I以打开终端使用“cd /”命令,进入到系统根目录下,然后在输入“ls”命令,产看下系统根目录下都有哪
5 ^ v: L H9 E7 x0 u/ X些文件,如下图所示:
& q7 s6 a! o; b7 l/ ?/ R6 [
3 d! B+ Z. N0 h1 \6 C) {
从上图可以看到系统根目录下都有哪些文件夹,我们来看下这些文件夹的具体功能:+ B- z: R8 e7 l! g7 l- z; b N+ k
/bin 存储一些二进制可执行命令文件
[$ t9 f& u {7 v t% ?5 { i) @ @/boot 存放 Ubuntu 系统内核和系统启动文件
0 C/ C$ b+ a6 K: Z/dev 存放设备节点2 f% \0 ^8 B5 b) U2 T
/etc 存放系统管理所需的配置文件8 h& a! b9 h! ]& F R7 c
/home 普通用户默认目录,每个用户在改目录下都有一个以本用户名命名的文件夹. l+ W* M; D; [: N+ ]! C
/lib /lib64 存放系统程序运行所需的库文件
9 E! O$ ^6 U8 s0 O O- l% y' [2 u& d/media 存放 Ubuntu 系统自动挂载的设备文件
$ @: H- B( F: J) m/mnt 用于挂载的文件系统的挂载点
4 H% y+ o, _, a4 d/opt 可选文件和程序的存放目录- ^2 N, H; ]* [" `: C
/proc 通常用来保存系统信息和进程信息8 N0 Z6 d# m3 [7 b6 ?
/root 超级用户 root 的根目录文件
. C8 g: p; L! l4 i6 e, Z/sys 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息
: w4 b; g f1 m9 \! G/tmp 存储系统和用户的临时文件6 T/ [; B* _( H. C0 d/ v
/usr 包括与系统用户直接有关的文件和目录
+ J4 \$ Z y$ R: x# x( P/var 存储一些不断变化的文件,比如日志文件
2 v& ]" t, l+ i, A% t% N4 O2.8.2 文件操作命令& d9 P' G7 @3 ~; k `0 z+ u
创建文件命令 touch; H9 T9 }' v4 v R, W$ f1 ~( g
我们在前面学习 vim 的时候,可以通过 vim 来创建一个文本文件,“touch”不仅可以用来创建文本文件,
7 a# B& E9 b8 w% y还可以创建其它类型的文件,命令格式如下:" E8 ]: o0 u. y3 S- l
touch [参数] [文件名]4 Q6 b7 V1 r+ {( O0 Z6 U
参数说明:; K! U" O' ?! ^' Z X0 X& E
-a 只更改存取时间0 b0 g& T" C1 m. I
-c 不建立任何文件
- n0 l" `" z" A! J/ G+ w7 |-d<日期> 使用指定的日期创建文件
% b) j4 Q1 \( O5 v& q* p-t<时间> 使用指定的时间创建文件" }5 B' r% q: t9 n9 |
当我们使用“touch”命令创建文件的时候,如果创建的文件不存在,则会直接创建,如果创建的文件
# o" t% }$ g) C, u7 w已经存在,则会修改下文件的最后修改日期(修改成运行该命令时候的系统日期)。现在我们使用命令“cd1 R. w) e; [9 X l5 y+ U
~”进入到用户的根目录下,然后使用“touch”命令创建一个名为 ceshi 的文件,运行结果如下图所示:
- f2 b- r) _' d( B5 c
8 o6 L0 L: x, Z& n, f
文件夹创建命令 mkdir6 M" Z/ S4 f' o: d0 T
mkdir 是用来创建文件夹的命令,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,并且创
L/ z" o/ H0 w+ I" ~/ A建的文件夹名称不能是当前目录中又有的目录,命令格式如下:9 V- N* ?/ K) g p4 b5 |
mkdir [选项] 目录...
0 c6 u, ~9 C. w' `+ h选项的说明如下:
. F: A% H5 V5 a9 J-m //设定权限<模式>(类似 chmod)( P9 O* } H$ k" B7 Y# z1 z
-p //可以是一个路径命令,如果路径中的目录不存在,则依次创建他们
8 H! V* l3 z$ S1 V- n: f-v //每次创建新目录都显示信息$ V( f! K& Y2 `
--help //显示帮助信息
5 y4 A" U! i2 M: }# O--version //输出版本信息
2 z& W0 a$ N5 a3 P我们可以使用 mkdir 创建一个名为“test”的文件夹,我们在终端运行命令“mkdir test”,运行结果如下图5 ]$ {/ |2 z1 H) h# K: b
所示:+ O. ^2 K& M' l+ v$ c6 P# e2 h4 u! P
3 L9 z1 F4 q/ f8 D/ b2 A
文件删除命令 rm
& @# E2 n5 w# F; y6 rrm 命令可以删除文件和文件夹,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,命令格
9 q% X5 C) W$ [1 B7 G5 Z式如下:! L9 C" j9 }9 j% q' f" a0 Z/ p
rm [选项]... 目录...4 i3 A- ~1 M$ {
选项的说明如下:/ z" f8 x+ ?5 u2 S: v! O
-d //删除可能仍有数据的目录(只限超级用户 root); b2 g7 c# T3 A
-f //略过不存在的文件,不显示任何信息
' k. D1 o3 p3 [3 x2 Q4 ?; H-i //进行任何删除操作前,必须先确认
) ]0 b2 _7 j% q0 \2 F-r //同时删除该目录下的所有目录层, a( ~: T, S* i& P B6 i2 j0 ~
-v //详细显示进行的步骤
; i5 B- ~* F7 z7 } A/ H--help //显示帮助信息并退出) |: ^$ T% i! J* K1 M9 N
--version //显示版本信息并退出: T" V {7 J5 p+ M! j# M# k4 r# E
我们使用“rm”命令删除前面创建的文件“ceshi”,我们在终端输入“rm ceshi”,然后回车就可以删% b5 n8 {: {6 F, C" T
掉文件“ceshi”了,运行结果如下图所示:
$ e/ [' M) }9 [, U* E( g# A( P6 Z
/ x2 K+ m) B$ E; d! V! U' z“rm”命令也可以删除文件夹,我们删除前面创建的 test 目录,我们在终端执行“rm -RF test”,运行结果8 \* u& W* Q6 i3 ?2 B* T
如下图所示:
2 d0 ]6 m2 e" |6 V: Z- K% H7 S# G
5 ?" P! M# B6 A$ G' _- |3 h
文件复制命令 cp. Z9 M* u6 ^( o" }# P3 f
Linux 下文件复制的命令是“cp”,命令格式如下:5 D, s9 R5 Y5 B4 h. G% K0 A
cp [参数] [源文件] [目标文件]
* ~* o8 Z6 ]6 x) C; r( u' _; Q8 z4 @5 o参数的说明如下:5 J: @0 S \6 e- F
-d //复制有符号连接的文件时,保留原始的连接
1 |. A1 v8 o0 Q5 _) W! Z0 J-f //强行复制文件,不管要复制的文件是否已经存在于目标目录
+ W+ l8 [ E* C$ \-r //递归处理,将指定目录下的文件及子目录一并处理) ^4 |8 p# Y* p6 i: U9 K
我们在用户跟目录下使用 mkdir 命令创建两个文件夹:ceshi1、ceshi2,如下图所示:9 W" S+ S) }) y6 q& \, L* S
' v( ?) G5 N( k. s& X% o+ H, W! v
然后进入“ceshi1”文件夹,在 ceshi1 文件夹创建 a 文件,如下图所示:! k/ @ I5 P' m& A8 X* s) W' S
8 M- E% f$ k& {5 m) A0 g) m我们将文件 a 复制到用户根目录下的 ceshi2 文件夹,运行结果如下图所示:1 M- y! |* X( w% [: X
$ h e9 \$ s2 B; E完成文件的复制,接下来我们来实现文件夹的复制,首先我们返回到用户根目录下,然后将 ceshi1 文件夹$ \# M8 e3 P- v+ Q3 U. G+ P6 `% T
复制到 ceshi2 文件夹,运行结果如下图所示:7 _! @; ~7 A# P' ?/ }
1 Z" R5 s& L1 l: e9 L5 ~; p$ S) _
移动文件命令 mv2 U9 B! |" c8 y2 S/ @6 `" D* h
Linux 下文件移动的命令是 mv,命令格式如下:
( |5 I% d. s3 B* B& cmv [参数] [源文件] [目标文件]
; H: q# b0 }3 o6 b I5 P' Y参数说明:
3 Z& w/ L% ~3 }& S9 x6 B8 y: N- B& V. W-b //如果要覆盖文件的话覆盖前先进行备份) u$ V( k0 C3 s' ^3 G1 @2 _
-f //若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录; V' M" i2 x( Y
-i //若目标文件存在,则会询问是否覆盖
) b. L0 h6 W" S; R4 ]" j2 K-u //若目标文件已经存在,且源文件比较新,则会更新+ A; g) Z3 A; r& z" s
我们在前面创建了两个文件夹:ceshi1、ceshi2,在 ceshi1 文件夹创建了文件 a,我们将文件 a 重命名成文
4 _2 K+ P e8 P# a件 b,然后将文件 b 移动到 ceshi2 文件夹,运行结果如下图所示:* r6 D1 F/ N1 @& [' X
A, u7 s7 R) x, y, d
文件接压缩命令 tar
" ?0 ]6 ?$ c2 S' F2 ~Linux 下常用的压缩包格式有两种:.bz2 和.gz。我们可以使用 tar 命令来解压或压缩这两种格式的压缩包,
0 M( r, s* Q5 x+ s" n8 o: l- d( F命令格式如下:
3 T) g* v* m4 ^' W+ V( Wtar [必要参数] [选择参数] [文件]4 S/ X* d: c3 O
必要参数说明如下:' `/ t* f7 T/ S" w5 _- E# r
-A //新增压缩文件到已存在的压缩
% Q1 [4 _$ s8 Y% k( J5 K, b. a-B //设置区块大小/ G7 @& M [# ~) k# ?* Z! z
-c //建立新的压缩文件/ @. l9 k' X' c. X, U
-d //记录文件的差别
5 V0 Q8 z, h& B5 V, f! f-r //添加文件到已经压缩的文件3 F# e, {6 E. Y- |
-u //添加改变了和现有的文件到已经存在的压缩文件, V w6 f! P9 s
-x //从压缩的文件中提取文件
" d' T( ?0 q* M-t //显示压缩文件的内容
: g7 M4 W0 H0 [: J$ @5 O-z //支持 gzip 解压文件
# C9 R, g; k% \7 Y: n% h-J //支持 bzip2 解压文件
& A! o! B9 _! p+ U-Z //支持 compress 解压文件
& u) A2 C. A" ^: x1 L1 F0 }-v //显示操作过程
3 }, [* J- g1 A: f-k //保留原有文件不覆盖
$ _. p9 c. ?8 q% [! E0 Q3 J-m //保留文件不被覆盖
8 A: L" b5 h' V: [ \& u-W //确认压缩文件的正确性
" r7 N) y' J% _& y8 [可选参数如下:
# w0 @8 M3 {8 r-b //设置区块数目* H4 U4 {0 `& _# }; A
-C //切换到指定目录
! U2 P9 @& E, u" L* P-f //指定压缩文件8 D3 t) Z3 ?; k4 U; \ C
--help //显示帮助信息8 o" B4 f2 d9 J: g
--version //显示版本信息* f- U& _1 }, g+ J6 h5 ]
我们使用 tar 命令压缩生成.bz2 和.gz 压缩包,运行结果如下图所示:0 Z- M c, W- T' ?
2 C8 Z; S# U: ?/ }' ?
在上图中我们分别压缩了.bz2 和.gz 两个格式的压缩包,其中压缩.bz2 格式的压缩包我们使用的参数9 I; _; m( W O+ r( R
是-jcvf,而.gz 格式的压缩包使用的参数是-zcvf。下面在我们在来学习下 tar 解压文件,操作如下图所示:+ d- a9 t/ b# q1 [& k# n* ]6 k; X
0 l3 B! `7 C' }% ^5 |" G: p在上图中,我们分别解压了.tar.bz2 和.gz 两种格式的压缩包。其中.tar.bz2 压缩包使用的-jxvf 参; q) F: M) `6 N- K
数来解压的,而.gz 格式的压缩包使用-zxvf 参数来解压的。关于 tar 的命令我们就介绍到这里,更多详细0 c# e9 n- E# t% ~: L7 C
的用法大家可以去网上找下相关的文档。
3 t1 U- M* G* G6 Q$ L$ p文件查找命令 find1 T( h. n3 N; R( z6 v/ M5 g
文件查找在我们的平常使用中也是很常见的,比如在 Linux 内核源码中,我们要查找某个文件的路径,这8 H% U& C& {; t5 g: Y- z* j
是就会用到文件查找 find 命令了,器格式如下:
& V( y% X1 ? E( u4 o, C+ w) sfind [路径][参数][关键字]
0 N8 s6 J- o' f$ B路径标识要从哪个目录下开始查找文件,如果不写默认从执行 find 的当前目录下开始查找。
# _3 X! M6 t0 q% b* e参数说明如下:$ v/ @# x9 T( H
-name 按照文件名称查找,查找与 filename 匹配的文件
/ O [2 i' Z& A# t-depth 从指定目录下的最深层的子目录开始查找- l- Z* ]# T$ p! g1 A
-size<文件大小> 查找符合指定文件大小的文件
1 ^2 u7 \& R9 f3 ^0 o/ l z-type<文件类型> 查找符合指定文件类型的文件
$ O! I9 v% `9 [$ b+ v-user<拥有者> 查找符合指定的拥有者的文件或目录5 n- c6 v6 a5 e7 u6 q
-gid<群组识别码> 查找符合指定的群组识别码的文件或目录$ I! g% m: I4 U. [6 ?, d7 v" [
-group<群组名称> 查找符合指定的群组名称的文件或目录% ?& }, O( o0 U# Z
该命令的参数有很多,我们这里只是列举除了一些常用的。我们来使用 find 命令查找一下在目录“/etc”
' ] q9 M$ _+ i$ P5 X( A* z" J下以“host”开头的文件,我们在终端输入“find /etc -name host*”命令,运行结果如下图所示:2 c; A8 W( p, v( [. }7 K. E8 s1 |( y
. q! L O7 n* u2 ~2 S从上图中我们可以看到在“/etc”目录下,以“host”关键字开头的文件全部查找出来了。2 i1 E# J( J! _; I- `) l" D
文本搜索命令 grep
8 r+ Y, O* r* F6 Q9 f有时候我们需要搜索出包含特定关键字的文件有哪些,这样就会用到 grep 这个命令,命令格式如下:
+ U& |6 _+ X6 f( ugrep [参数] 关键字 文件列表5 R z2 b/ K! Z
参数说明如下:4 T, J5 X1 |, z" @+ B
-b //在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号) {8 s8 V U" t# F, V4 w9 V
-a //不要忽略二进制的数据
' `9 _( ]/ i1 M" m) J7 x7 M7 z# u( m5 ?-c //计算符合范本样式的列表
3 I: a" E' c: F-i //忽略字符的大小写
8 U' _+ M2 r) O-n //在显示符合样本范式的那一列前面,标出该列的列数编号+ @% ^) b4 L% r: j/ V7 X/ A/ q
-r //在指定目录中递归查找) A; W4 S9 d, v$ w
-v //反转查找,只显示不匹配的行' I; t6 M# u9 x' n8 {( q8 U5 c/ N
比如我们在“/etc”下递归查找包含字符“topeet”的文本,运行结果如下图所示:‘. r( j- X1 Q5 i$ E
' ~8 B. _5 J* Q6 N/ G |
|