|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
操作系统的主要功能之一就是文件的管理。文件管理是由文件系统来实现的,Linux 系统支持多种格式
0 z' b4 u3 F+ P的文件系统,本届我们主要讲解下文件系统的类型,以及文件操作的一些常用命令。
4 E2 P- z2 g: r, v$ J m2.8.1 Linux 文件系统类型
. ?$ h( A3 N# ?% W, a我们在使用 Windows 系统的时候,有时会对硬盘,U 盘等的存储设备进行格式化,在格式化的时候会要求
; ~5 j, F! m7 K2 W1 L( i我们选择文件系统的类型,比如:exFAT、FAT32、NTFS,同样 Linux 系统也支持各种不同类型的文件系统,
/ V) c3 n' y) G- b- v比如:ext2、ext3、ext4、yaffs、FAT32、NTFS 等。这里我们主要讲解下几种常用的文件系统。
6 k# i5 H1 a. U0 C" l3 hFAT32 文件系统:
, \& i7 d) h- x/ @" z! ^% HFAT32 指的是文件分配表是采用 32 位二进制数记录管理的磁盘文件管理方式,因 FAT 类文件系统的核心是$ e1 N* f; n M- I; D- Y$ f3 j
文件分配表,命名由此得来。FAT32 是从 FAT 和 FAT16 发展而来的,优点是稳定性和兼容性好,能充分兼容, C( ^7 a; f+ C0 `2 w: I5 W& Z( o# P' e
Win 9X 及以前版本,且维护方便。缺点是安全性差,且最大只能支持 32GB 分区,单个文件也只能支持最大
6 D: F0 @: ?4 _ \4GB。/ G- j. F$ L! C4 g, B
3 ext3 文件系统! |5 s% `+ Y* B
EXT3 是第三代扩展文件系统(英语:Third extended filesystem,缩写为 ext3),是一个日志文件系统,: U/ K/ a# O, I. U
常用于 Linux 操作系统。它是很多 Linux 发行版的默认文件系统。Stephen Tweedie 在 1999 年 2 月的内核
6 n/ T2 ~0 ~& m9 M9 i, {邮件列表中,最早显示了他使用扩展的 ext2,该文件系统从 2.4.15 版本的内核开始,合并到内核主线中。, N1 m! c6 S) ~% A. [/ K
ext4 文件系统9 j4 ~2 K& Z8 ~9 r' |2 a) A u
4 EXT4 是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是 Linux 系统下的日志+ T' Q, d. e/ c7 c J) Q
文件系统,是 ext3 文件系统的后继版本。Ext4 是由 Ext3 的维护者 Theodore Tso 领导的开发团队实现的,3 O; m R6 @/ t3 ^+ Y+ A
并引入到 Linux2.6.19 内核中。Ext4 产生原因是开发人员在 Ext3 中加入了新的高级功能。$ Z7 V) _1 o0 l, R l& `
上面几种文件系统是我们在 Linux 下经常使用的,那么我们安装的 Ubuntu 系统下的文件系统使用的是哪种
( h, f% x8 z: k5 ~; m& _1 y格式的呢?我们可以在终端输入“df -T”命令来查看下,如下图所示:
7 E$ |3 v q2 q5 c. y+ M2 c
1 r( s" H; `0 G4 i7 ~; s5 g9 T0 r从上图红色方框的文件就是我们安装 Ubuntu 的磁盘,在 Linux 下一切皆为文件,“/dev/sda1”就是我# b5 B; [& C" `7 }1 Z
们的磁盘分区,可以看到他的类型是 ext4。我们在 Windows 系统下有 C、D、E 盘这样的概念,但是通过上
4 X1 x( L, q7 D4 g' j面的命令我们可以看到 Linux 下对磁盘的管理与 Windows 是不一样的,没有 C、D、E 盘这样的概念。Linux3 E9 q% }9 g$ Y
系统只有一个跟目录“/”,我们可以在 Ubuntu 的桌面打开“文件”应用,我们可以看到打开的文件路径" s8 M3 F: a5 m7 @
并不是在根目录下,这是因为 Ubuntu 是支持多用户的,会为每个用户分配一个根目录,比如我的 Ubuntu
" s# V5 R& T9 `登录的用户是 topeet,那么默认进入的就是 topeet 用户的根目录“home”,如下图所示:
( Q7 F a" }$ Q+ Y0 S" w) p# a
5 B- v2 E2 b: S& R% ]
我们在上图中点击左侧的“计算机”,如下图所示:
3 n: y: E+ r' ~7 o
- @8 ?: k9 [! a; }! ?
上图就是 UBuntu 的根目录,那么前面我们的说的 Ubuntu 会为每一个用户创建一个根目录,那么这个根目: B, W8 k0 N, `
录具体位置在哪里呢?我们在创建用户的时候,Ubuntu 同时会在“/home”目录下创建与应户名同名的文
- X' i' @: O K件夹,这个文件夹就是用户的根目录,比如我这里登陆的用户名是 topeet,那么 topeet 用户对应的用户根
- d; Q) t8 \% T5 T- M+ [目录就是“/home/topeet”这个目录。用户可以对自己用户根目录下的文件进行任意的读写操作。我们可
4 a R! K: N- {) j9 ?; u; h以打开终端使用“cd /”命令,进入到系统根目录下,然后在输入“ls”命令,产看下系统根目录下都有哪
M4 e$ |: b/ z2 A8 e: ^些文件,如下图所示:
+ ?! T. O4 w2 x
5 o& W9 `2 J; G! Q- e从上图可以看到系统根目录下都有哪些文件夹,我们来看下这些文件夹的具体功能:
' y( I+ n1 |% l/ ]0 |4 z8 U }+ O/bin 存储一些二进制可执行命令文件
4 P; [; A5 c: d# `1 g/boot 存放 Ubuntu 系统内核和系统启动文件! t$ A% e: D0 m2 k8 P
/dev 存放设备节点
0 c. Q+ V, s" B3 `1 E/etc 存放系统管理所需的配置文件
0 N8 l \( V! y; c6 c2 ?& F/home 普通用户默认目录,每个用户在改目录下都有一个以本用户名命名的文件夹
, y9 {9 b4 T' L+ W5 {/lib /lib64 存放系统程序运行所需的库文件
) S* t( g. i4 |1 B% [8 m/media 存放 Ubuntu 系统自动挂载的设备文件. R7 @/ R/ T& W7 W( K/ g
/mnt 用于挂载的文件系统的挂载点
/ t8 f8 m" o9 C1 A1 i1 n1 q5 e/opt 可选文件和程序的存放目录, U( z$ J6 c' f+ |# X1 r. [
/proc 通常用来保存系统信息和进程信息
- G: T7 k; V, @; ~+ E" v/root 超级用户 root 的根目录文件: | z* a# J3 u' I- a
/sys 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息
# a3 p/ C8 @. a( S2 d8 H2 v/tmp 存储系统和用户的临时文件5 i' e/ W$ x8 A/ C' n
/usr 包括与系统用户直接有关的文件和目录! ^1 O: @: Q ?; m! k% t) ?3 c0 x* K: e5 W
/var 存储一些不断变化的文件,比如日志文件
. ~: v: r& c/ {7 p2.8.2 文件操作命令
4 v, A8 c( e P& a创建文件命令 touch
3 A( H9 N8 d3 t; x5 m我们在前面学习 vim 的时候,可以通过 vim 来创建一个文本文件,“touch”不仅可以用来创建文本文件,, b/ [+ U4 _1 J+ E
还可以创建其它类型的文件,命令格式如下:
* S r+ u5 N: M3 d& `touch [参数] [文件名]
& v: S# R0 @/ s# s参数说明:
+ x& ]4 }7 Q" e% O-a 只更改存取时间
8 t* l0 g; ~2 ^ I \6 [ F-c 不建立任何文件
6 `9 s7 p6 c. o. M/ {+ m8 M6 U9 e" |-d<日期> 使用指定的日期创建文件
4 s! ^9 I: c6 t, J* O-t<时间> 使用指定的时间创建文件
, ^4 u% r" G# ]/ Y* }当我们使用“touch”命令创建文件的时候,如果创建的文件不存在,则会直接创建,如果创建的文件
9 Z4 A& _9 k' n" @% N3 X( g/ V' x已经存在,则会修改下文件的最后修改日期(修改成运行该命令时候的系统日期)。现在我们使用命令“cd0 F/ p" B! x2 b4 O. r( l2 o, [
~”进入到用户的根目录下,然后使用“touch”命令创建一个名为 ceshi 的文件,运行结果如下图所示: p: H4 @* t" S+ ?8 U9 J
/ b$ Y e. `( D3 T' {# a
文件夹创建命令 mkdir
" H; ^6 ^" Z4 r& z# m) Kmkdir 是用来创建文件夹的命令,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,并且创6 L% \ ^, G. I. U+ C
建的文件夹名称不能是当前目录中又有的目录,命令格式如下:8 m2 E3 O' e* v. j: \" O
mkdir [选项] 目录...9 q( }# \3 P$ P" I
选项的说明如下:
7 U! q% D5 T5 _-m //设定权限<模式>(类似 chmod)
& k6 f; J `: d' j7 M/ O-p //可以是一个路径命令,如果路径中的目录不存在,则依次创建他们
m8 J# D" c; h! i M: o, r-v //每次创建新目录都显示信息
7 r$ A r' F3 A7 L--help //显示帮助信息
% r* |; `( X* \0 @+ B--version //输出版本信息( [; F d. t8 S3 U, ^
我们可以使用 mkdir 创建一个名为“test”的文件夹,我们在终端运行命令“mkdir test”,运行结果如下图
9 H) u+ A, ?5 \! ]所示:
" v: x9 A9 W5 A2 |' I
- ~2 ?4 K9 e" \" e6 C4 v文件删除命令 rm
5 e V% R% D- [, o) z! [& yrm 命令可以删除文件和文件夹,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,命令格5 p# K' }0 _8 Z5 j
式如下:
' @ Y" c( @+ L7 L t3 f5 yrm [选项]... 目录...
; m' f# Z7 [1 J; N3 n4 n选项的说明如下:
: O, {" X, m" g) ?-d //删除可能仍有数据的目录(只限超级用户 root)
, S( z+ o1 [7 c8 Z5 H1 T-f //略过不存在的文件,不显示任何信息
- j( G5 \( Q! T7 }: `-i //进行任何删除操作前,必须先确认+ X% h# M) H0 L. G. N
-r //同时删除该目录下的所有目录层
! t5 }. d2 r J: I7 g$ I-v //详细显示进行的步骤
2 f" q) l z8 c0 y8 T5 ?--help //显示帮助信息并退出
! w: J" |2 _1 Y2 F! c4 x% w8 ]--version //显示版本信息并退出1 h& x% f# p, U: p8 D
我们使用“rm”命令删除前面创建的文件“ceshi”,我们在终端输入“rm ceshi”,然后回车就可以删
" L6 O3 n* |$ G2 X掉文件“ceshi”了,运行结果如下图所示:" b0 p5 l2 C0 n) j% B
# P/ V6 t) C7 X1 E“rm”命令也可以删除文件夹,我们删除前面创建的 test 目录,我们在终端执行“rm -RF test”,运行结果
2 v% D9 L. b- `; T如下图所示:/ s4 {& q i+ X- X" H
3 X6 B+ ] w H, `! l
文件复制命令 cp
0 W% K: x9 ^% [% Z8 ?2 DLinux 下文件复制的命令是“cp”,命令格式如下:# N3 I( K# Z7 j+ h* d `, c
cp [参数] [源文件] [目标文件]
( }2 e1 N/ q6 c, `' j$ }: e, `参数的说明如下:& J) d# q# x) m S) y8 Z- J
-d //复制有符号连接的文件时,保留原始的连接8 R* \! H3 S6 z
-f //强行复制文件,不管要复制的文件是否已经存在于目标目录2 D( q1 y( }; X. j' A5 b
-r //递归处理,将指定目录下的文件及子目录一并处理0 S8 X. g2 O. ^; `( K; V# I
我们在用户跟目录下使用 mkdir 命令创建两个文件夹:ceshi1、ceshi2,如下图所示:# e9 m7 L: q1 m) f: A7 I
$ i6 Y4 V" D3 X) ?4 R然后进入“ceshi1”文件夹,在 ceshi1 文件夹创建 a 文件,如下图所示:0 [' S; {3 K6 u. V* B
; X4 v: A, X7 c+ @. W我们将文件 a 复制到用户根目录下的 ceshi2 文件夹,运行结果如下图所示:
& `/ R6 @7 p( `' v: Z% O8 p- v( h/ f
7 W6 b% I9 K4 l9 v* q
完成文件的复制,接下来我们来实现文件夹的复制,首先我们返回到用户根目录下,然后将 ceshi1 文件夹6 p2 b2 h% N( y2 t. [+ P
复制到 ceshi2 文件夹,运行结果如下图所示:
5 j1 X' H2 g7 L/ N
8 Y# s; }1 F3 p( G1 v1 n4 g移动文件命令 mv" Y }- V( g! I
Linux 下文件移动的命令是 mv,命令格式如下:# U% g/ k2 y, O# F9 F" v4 H6 b: m
mv [参数] [源文件] [目标文件]$ c4 {8 C% S! c3 b& h+ W
参数说明:
; {" C- ], s. o-b //如果要覆盖文件的话覆盖前先进行备份7 o! m3 M1 `& z, G
-f //若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录7 _" [- s0 N7 Y7 A
-i //若目标文件存在,则会询问是否覆盖
1 i2 Q4 C0 i$ E v-u //若目标文件已经存在,且源文件比较新,则会更新: Z. Z% Q0 b" {; I
我们在前面创建了两个文件夹:ceshi1、ceshi2,在 ceshi1 文件夹创建了文件 a,我们将文件 a 重命名成文
6 l6 p" m' ^4 q. J1 j件 b,然后将文件 b 移动到 ceshi2 文件夹,运行结果如下图所示:
& E4 j$ W# ^. h9 K
& |- Q; A0 I. d/ h$ w ?
文件接压缩命令 tar
% A) V5 R2 y( \, GLinux 下常用的压缩包格式有两种:.bz2 和.gz。我们可以使用 tar 命令来解压或压缩这两种格式的压缩包,
6 ?+ r9 |. |0 s, z命令格式如下:
! s" r' \. x; P t1 d+ Q0 N9 Qtar [必要参数] [选择参数] [文件]; k, ^# h: e1 g' B+ Z
必要参数说明如下:
4 f# w' H$ F+ v1 E6 `-A //新增压缩文件到已存在的压缩* ~0 v6 l. B) w1 x
-B //设置区块大小
7 n' S" Z3 X. c& q8 f, G-c //建立新的压缩文件 ~6 o4 E* C; p# c' i( n, M
-d //记录文件的差别
+ G1 j& Q- o( T$ A- y c-r //添加文件到已经压缩的文件: M, r9 z; B5 G# O7 [: q+ y
-u //添加改变了和现有的文件到已经存在的压缩文件& T3 u9 j! u0 }% t! m! B0 \# K
-x //从压缩的文件中提取文件) ~, l4 m2 q! N
-t //显示压缩文件的内容
* g: G2 N& K; }5 p' ]3 D-z //支持 gzip 解压文件) |; ]: n, X& z) b* I; s
-J //支持 bzip2 解压文件# L2 r, B6 v- W% A4 D# D- ?
-Z //支持 compress 解压文件
6 n6 {' U4 @9 ~. Y; Y" n% J-v //显示操作过程
& f; Q' h# x" ~-k //保留原有文件不覆盖
# t1 G6 f7 W! q8 h8 U-m //保留文件不被覆盖
. z+ W" C$ _) V/ a, \) _-W //确认压缩文件的正确性2 f' G5 c2 A1 L5 `' y: y
可选参数如下:
; w+ Z8 Y3 _' a. B) w6 Y& \-b //设置区块数目
4 W7 p4 w+ {' [5 t: }5 X5 @-C //切换到指定目录
. ?- D0 e0 f: K/ |! j-f //指定压缩文件
8 A& l, h! T" Q2 h--help //显示帮助信息
7 T4 {5 Z( h" M2 B& M# G$ j--version //显示版本信息
+ D- C. S( ?- d我们使用 tar 命令压缩生成.bz2 和.gz 压缩包,运行结果如下图所示:
4 [6 j0 q; j/ r% L5 f
: W2 v7 i" `, k* U4 g: z( ~8 ?- _在上图中我们分别压缩了.bz2 和.gz 两个格式的压缩包,其中压缩.bz2 格式的压缩包我们使用的参数- w; |/ G+ q+ u S1 c1 ^; V/ r
是-jcvf,而.gz 格式的压缩包使用的参数是-zcvf。下面在我们在来学习下 tar 解压文件,操作如下图所示:0 a. p9 I9 h. g8 r
6 X8 _5 @+ I: y- w% F. Z. @
在上图中,我们分别解压了.tar.bz2 和.gz 两种格式的压缩包。其中.tar.bz2 压缩包使用的-jxvf 参
& A- q" s. P+ Q" p0 X7 n! J数来解压的,而.gz 格式的压缩包使用-zxvf 参数来解压的。关于 tar 的命令我们就介绍到这里,更多详细
( l: c2 P/ T1 C' j% p5 B4 A, z7 `的用法大家可以去网上找下相关的文档。0 d; K4 H! O& G7 m. u
文件查找命令 find
4 ^+ a$ p' }% R5 h9 s. _文件查找在我们的平常使用中也是很常见的,比如在 Linux 内核源码中,我们要查找某个文件的路径,这% t; ~6 B! f2 e9 x' k
是就会用到文件查找 find 命令了,器格式如下:
5 a' N: J# {1 g1 @7 G9 bfind [路径][参数][关键字]
5 w, L# J, j2 c4 e路径标识要从哪个目录下开始查找文件,如果不写默认从执行 find 的当前目录下开始查找。. I/ o9 Z* n7 u; S6 L
参数说明如下:3 P* }/ _7 B5 y' T) _$ z
-name 按照文件名称查找,查找与 filename 匹配的文件7 b" {5 O1 Y( @% F7 @
-depth 从指定目录下的最深层的子目录开始查找
. d* a% F3 p2 v* W' Z3 t0 B2 @-size<文件大小> 查找符合指定文件大小的文件; O$ }3 j a5 \2 ^, J5 b
-type<文件类型> 查找符合指定文件类型的文件/ f Y/ r" ^. u) x
-user<拥有者> 查找符合指定的拥有者的文件或目录
% x8 [) x. X+ z" s-gid<群组识别码> 查找符合指定的群组识别码的文件或目录
& ~' l% a0 T8 C6 G% E# ?" U-group<群组名称> 查找符合指定的群组名称的文件或目录
8 ?/ x" p: |; \该命令的参数有很多,我们这里只是列举除了一些常用的。我们来使用 find 命令查找一下在目录“/etc”+ M' M) W0 X# U
下以“host”开头的文件,我们在终端输入“find /etc -name host*”命令,运行结果如下图所示:! w! _0 `: _( x$ t
/ d4 X B) B1 ]% r" j
从上图中我们可以看到在“/etc”目录下,以“host”关键字开头的文件全部查找出来了。) ]3 j% F3 I+ x% X# o5 F" z
文本搜索命令 grep
3 Y( {* D8 c! A- l& w有时候我们需要搜索出包含特定关键字的文件有哪些,这样就会用到 grep 这个命令,命令格式如下:5 S5 I. s; a0 t( C
grep [参数] 关键字 文件列表9 a: M$ g: x9 [# u- b! n2 B
参数说明如下:: e& x* C0 M) ~5 e
-b //在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号( n3 v5 \/ I3 Q
-a //不要忽略二进制的数据
3 e' v% W [: w2 j: e: U- M& y/ G, E-c //计算符合范本样式的列表; R9 S: j9 w* o; t c
-i //忽略字符的大小写
. I3 Z; @# A- g4 R: l* Q* O* _) B-n //在显示符合样本范式的那一列前面,标出该列的列数编号 {+ N& y7 I& V8 H3 b! D
-r //在指定目录中递归查找
* P/ ~7 G: c* B7 @* w-v //反转查找,只显示不匹配的行7 [0 V a$ s8 H) V6 g' j
比如我们在“/etc”下递归查找包含字符“topeet”的文本,运行结果如下图所示:‘
# q2 k' P, W% ^* t$ H/ T, w
) c* g4 g1 q; B" m) t5 l7 n
|
|