|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
操作系统的主要功能之一就是文件的管理。文件管理是由文件系统来实现的,Linux 系统支持多种格式
" Q* K& C4 l7 F% \9 z的文件系统,本届我们主要讲解下文件系统的类型,以及文件操作的一些常用命令。
e, \/ Q; Y2 t7 [3 w2 w! ~) X8 o E2.8.1 Linux 文件系统类型" K! U4 _0 a. T$ @
我们在使用 Windows 系统的时候,有时会对硬盘,U 盘等的存储设备进行格式化,在格式化的时候会要求
. _2 W: w {: a" A* g我们选择文件系统的类型,比如:exFAT、FAT32、NTFS,同样 Linux 系统也支持各种不同类型的文件系统,
6 ?" J& h/ |& x( I比如:ext2、ext3、ext4、yaffs、FAT32、NTFS 等。这里我们主要讲解下几种常用的文件系统。
4 y3 m! M. d f3 V4 @3 ?& ^, |FAT32 文件系统:
; |" ?" Y" U2 T% \FAT32 指的是文件分配表是采用 32 位二进制数记录管理的磁盘文件管理方式,因 FAT 类文件系统的核心是
6 u% W) s9 m5 T0 H0 F( e文件分配表,命名由此得来。FAT32 是从 FAT 和 FAT16 发展而来的,优点是稳定性和兼容性好,能充分兼容! P6 _. z j& p$ ?5 r
Win 9X 及以前版本,且维护方便。缺点是安全性差,且最大只能支持 32GB 分区,单个文件也只能支持最大0 u) I. _% L& {6 Q5 C$ r4 Y) |+ m
4GB。 ]: _8 M& G9 ~0 u! d( S0 c
3 ext3 文件系统; _8 l) e$ n( M" k0 T/ H
EXT3 是第三代扩展文件系统(英语:Third extended filesystem,缩写为 ext3),是一个日志文件系统,. i! ]' [" Q1 s. U4 F- }6 T
常用于 Linux 操作系统。它是很多 Linux 发行版的默认文件系统。Stephen Tweedie 在 1999 年 2 月的内核0 A& P6 e% D; C h$ g
邮件列表中,最早显示了他使用扩展的 ext2,该文件系统从 2.4.15 版本的内核开始,合并到内核主线中。& K7 C+ j5 H. E9 L! o
ext4 文件系统, T: K/ L4 C& U' S
4 EXT4 是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是 Linux 系统下的日志
+ v% \6 A1 d: w, _ G% K文件系统,是 ext3 文件系统的后继版本。Ext4 是由 Ext3 的维护者 Theodore Tso 领导的开发团队实现的,
( _' y. X8 Z9 b* A" ?1 Z# [并引入到 Linux2.6.19 内核中。Ext4 产生原因是开发人员在 Ext3 中加入了新的高级功能。
+ k! }( y$ Y5 z" F" I) R上面几种文件系统是我们在 Linux 下经常使用的,那么我们安装的 Ubuntu 系统下的文件系统使用的是哪种
8 h1 F/ }7 ^ ^3 ?* ~' U格式的呢?我们可以在终端输入“df -T”命令来查看下,如下图所示:
9 G2 A% n" t" C, s2 K
; e& z" H4 |2 n5 e从上图红色方框的文件就是我们安装 Ubuntu 的磁盘,在 Linux 下一切皆为文件,“/dev/sda1”就是我7 O/ E6 l; {3 v0 B
们的磁盘分区,可以看到他的类型是 ext4。我们在 Windows 系统下有 C、D、E 盘这样的概念,但是通过上7 {1 U: I# j- d; T8 ~% }- O
面的命令我们可以看到 Linux 下对磁盘的管理与 Windows 是不一样的,没有 C、D、E 盘这样的概念。Linux+ ^- O; t+ [' Q4 C" @2 A
系统只有一个跟目录“/”,我们可以在 Ubuntu 的桌面打开“文件”应用,我们可以看到打开的文件路径
& Z2 ~7 ^. a- |% e; G并不是在根目录下,这是因为 Ubuntu 是支持多用户的,会为每个用户分配一个根目录,比如我的 Ubuntu
0 K+ M7 f* F0 k9 Q3 e登录的用户是 topeet,那么默认进入的就是 topeet 用户的根目录“home”,如下图所示:) k) C2 v7 k! g! q1 _
7 X' l& k/ l( P' W7 Z+ J
我们在上图中点击左侧的“计算机”,如下图所示:0 F) ]5 l/ u v6 a' a! E& B
* h5 B6 e- s' C" C上图就是 UBuntu 的根目录,那么前面我们的说的 Ubuntu 会为每一个用户创建一个根目录,那么这个根目0 x; l) H' r' U; w0 g$ ] O
录具体位置在哪里呢?我们在创建用户的时候,Ubuntu 同时会在“/home”目录下创建与应户名同名的文
7 q, J) [! K# @2 W件夹,这个文件夹就是用户的根目录,比如我这里登陆的用户名是 topeet,那么 topeet 用户对应的用户根& W3 x r4 |. v$ m& a( o
目录就是“/home/topeet”这个目录。用户可以对自己用户根目录下的文件进行任意的读写操作。我们可
8 ~1 N. q7 [( m/ W0 a, L0 j以打开终端使用“cd /”命令,进入到系统根目录下,然后在输入“ls”命令,产看下系统根目录下都有哪( i0 h( _, p9 u6 l0 T& C
些文件,如下图所示:6 C& `+ [7 N% p7 ~- x1 o, j! @! G
+ N0 p: Y" Z9 c
从上图可以看到系统根目录下都有哪些文件夹,我们来看下这些文件夹的具体功能:
- M; S7 X% H6 O" p" ?& B N/bin 存储一些二进制可执行命令文件- t ~3 e" a' V- v; _$ b
/boot 存放 Ubuntu 系统内核和系统启动文件" O* k: }& Z. I( ~' x5 I
/dev 存放设备节点
7 S$ y$ q$ Y6 y) `& c! D$ r6 A/etc 存放系统管理所需的配置文件6 }3 }0 g2 @0 T1 E
/home 普通用户默认目录,每个用户在改目录下都有一个以本用户名命名的文件夹% m) ]" v! A3 f/ B9 Y H( @) ]
/lib /lib64 存放系统程序运行所需的库文件1 q# ]! W9 |- n/ r' T7 S" k
/media 存放 Ubuntu 系统自动挂载的设备文件
7 S5 W0 w5 X8 ^1 M2 ]9 r' [/mnt 用于挂载的文件系统的挂载点
' n2 a3 @2 R7 H X/ s4 l5 Y/opt 可选文件和程序的存放目录
o2 d8 i4 B" P2 V, @/proc 通常用来保存系统信息和进程信息
) w0 A0 a! z1 D; V. v3 Q/root 超级用户 root 的根目录文件
9 u7 R9 D! D% k/sys 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息 O! t6 | g; M) o
/tmp 存储系统和用户的临时文件
( [& \& g* i( S/ U/usr 包括与系统用户直接有关的文件和目录7 Z4 u2 t1 G% g: w u
/var 存储一些不断变化的文件,比如日志文件8 `0 X1 s' z# [- i. V% E: @; m
2.8.2 文件操作命令
$ Y& \2 w3 v' h5 K: I' @/ k( J创建文件命令 touch0 G2 a9 n! Q- C& F4 E/ q/ _4 _
我们在前面学习 vim 的时候,可以通过 vim 来创建一个文本文件,“touch”不仅可以用来创建文本文件,5 B' Y- }) C' s& \6 H( c5 R3 I2 p
还可以创建其它类型的文件,命令格式如下:5 W! x2 U+ C/ v, [
touch [参数] [文件名]; s3 h. w g! R) u
参数说明:
& d4 A: u; `. e2 S) K-a 只更改存取时间
: @& T0 R. w2 U& m! h6 c( g* o-c 不建立任何文件
! C1 N# Z1 O7 j! ^" p% X4 |- I: E# |-d<日期> 使用指定的日期创建文件
& A0 d" f* s) j c' e-t<时间> 使用指定的时间创建文件
" {8 u+ a$ y$ q: m5 V1 }5 s当我们使用“touch”命令创建文件的时候,如果创建的文件不存在,则会直接创建,如果创建的文件
: z7 q; w$ V# R& f已经存在,则会修改下文件的最后修改日期(修改成运行该命令时候的系统日期)。现在我们使用命令“cd+ i; ]# M6 J y9 g% d* o
~”进入到用户的根目录下,然后使用“touch”命令创建一个名为 ceshi 的文件,运行结果如下图所示:
2 X3 X$ U, J9 Q3 O4 l3 n
& J! q" H2 d$ r/ Y2 Q( l- V- h9 \
文件夹创建命令 mkdir |2 |3 t2 Z6 @/ M; j6 [
mkdir 是用来创建文件夹的命令,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,并且创
0 D! Q; W* ?; o: O8 V) S建的文件夹名称不能是当前目录中又有的目录,命令格式如下:- T* ^, G, x- ^/ _4 v X S, X' F6 T% `
mkdir [选项] 目录..." \" T+ h1 e1 O7 K% C
选项的说明如下:
4 N5 _) W( @0 q+ \6 ^; d-m //设定权限<模式>(类似 chmod)
6 p* {6 {; q5 \-p //可以是一个路径命令,如果路径中的目录不存在,则依次创建他们
, {3 `0 l0 M& t-v //每次创建新目录都显示信息
, }- j; ]- A! B' K6 k--help //显示帮助信息: a3 M$ P4 ~- K3 x& s8 u( Q W+ }
--version //输出版本信息
" _2 q2 M, v, \2 v& Z我们可以使用 mkdir 创建一个名为“test”的文件夹,我们在终端运行命令“mkdir test”,运行结果如下图
; b1 e( x3 T; V& J3 z所示:' S& S. W7 }+ q9 r' q
) k! ^; c) M" O8 K
文件删除命令 rm6 |* ]( p* F2 y" Z9 }
rm 命令可以删除文件和文件夹,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,命令格式如下:1 w( B1 d) i$ w7 m3 B4 d& W* n: n
rm [选项]... 目录...
7 f4 a$ ?. { P9 V& m选项的说明如下:5 R0 C, a8 V m9 Q) G' C
-d //删除可能仍有数据的目录(只限超级用户 root)2 {* s1 q$ H8 h. `# x$ S' O; M' i
-f //略过不存在的文件,不显示任何信息
2 |3 r& \3 m2 H A: a-i //进行任何删除操作前,必须先确认: g' k. h1 O9 h5 n- y5 W
-r //同时删除该目录下的所有目录层
3 R) Y$ W. q8 N9 Z8 m-v //详细显示进行的步骤
9 M- ^: ~+ S+ K* n--help //显示帮助信息并退出
/ }1 h2 ~% C+ B$ v--version //显示版本信息并退出! O5 O; s. ?/ s
我们使用“rm”命令删除前面创建的文件“ceshi”,我们在终端输入“rm ceshi”,然后回车就可以删
4 ~2 ^7 ]: q8 i8 m3 x) R- T% a% ~掉文件“ceshi”了,运行结果如下图所示: ~8 q3 ]+ Y4 o$ k+ T
( {" w8 J$ g' T4 Q
“rm”命令也可以删除文件夹,我们删除前面创建的 test 目录,我们在终端执行“rm -RF test”,运行结果, B2 b$ R5 |# r1 b1 C5 {. a
如下图所示:
# d3 Y- G5 l& A+ m9 M' Z+ Z
6 v6 S" }: n1 k' Q" I文件复制命令 cp2 L% y" W: _ @4 Q' u
Linux 下文件复制的命令是“cp”,命令格式如下:
; }: D- p9 \4 v( {$ G6 A# Lcp [参数] [源文件] [目标文件]
) }2 W+ V& N/ ^, J, c- a参数的说明如下:
! P9 g$ v) X" X-d //复制有符号连接的文件时,保留原始的连接5 F* \2 s3 g* L1 N6 @# o5 \
-f //强行复制文件,不管要复制的文件是否已经存在于目标目录3 f. D; ~* j4 _+ W) ~* o3 u3 ]4 S
-r //递归处理,将指定目录下的文件及子目录一并处理
6 D% r/ j4 q+ r- Q5 L8 U e6 ]我们在用户跟目录下使用 mkdir 命令创建两个文件夹:ceshi1、ceshi2,如下图所示:! {% x% p! v8 g4 `4 W5 a5 v
% i# A- W) t% F/ @& n1 S+ O然后进入“ceshi1”文件夹,在 ceshi1 文件夹创建 a 文件,如下图所示:
# ?+ L: q6 \* {8 ~: z! X8 Q * v% x4 ^3 t7 b# L5 s3 ]; `, |
我们将文件 a 复制到用户根目录下的 ceshi2 文件夹,运行结果如下图所示:9 }- X; D1 N- z0 ~5 X. `" t
. b" W+ c& W% G; k完成文件的复制,接下来我们来实现文件夹的复制,首先我们返回到用户根目录下,然后将 ceshi1 文件夹 @# a1 {' S7 }- C$ j
复制到 ceshi2 文件夹,运行结果如下图所示:, K: \& T1 z1 I1 @3 N" @
8 e% G7 m: x- X移动文件命令 mv
1 q" n8 k% v7 |, W, j3 s1 kLinux 下文件移动的命令是 mv,命令格式如下:
- }) W6 F' Q! e1 umv [参数] [源文件] [目标文件]7 e% N. V; f9 O- M5 v% ~% ?# P3 ?/ D- i
参数说明:3 ?+ D* U& W; X3 S( o
-b //如果要覆盖文件的话覆盖前先进行备份! k+ E- y U* \* z7 g; G
-f //若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录
. S/ o4 O9 e. E ?6 z-i //若目标文件存在,则会询问是否覆盖
9 f( N+ _0 c, D" W [1 l-u //若目标文件已经存在,且源文件比较新,则会更新3 p& D; p$ G0 x9 x8 z2 U5 Y$ d
我们在前面创建了两个文件夹:ceshi1、ceshi2,在 ceshi1 文件夹创建了文件 a,我们将文件 a 重命名成文/ l, @6 B1 J- a& u& w9 f
件 b,然后将文件 b 移动到 ceshi2 文件夹,运行结果如下图所示:
X# S/ O! J, J1 n9 Y8 f* q( w
1 l4 m0 a" W% l& J d# j$ [
文件接压缩命令 tar% O9 P* ~" `. ^! S$ B+ h5 C
Linux 下常用的压缩包格式有两种:.bz2 和.gz。我们可以使用 tar 命令来解压或压缩这两种格式的压缩包,
4 g1 R8 E& f! o& ?1 i( `命令格式如下:; Q, {- Z0 n9 v6 w
tar [必要参数] [选择参数] [文件]
3 L% O" E2 M' C, D6 R必要参数说明如下:& Z+ P1 _8 l: k. v9 _) v% z
-A //新增压缩文件到已存在的压缩
' G- P) V4 S2 W( v8 d-B //设置区块大小* T9 x9 P& W" S) |
-c //建立新的压缩文件
* h; T4 P+ |) S- @' X& V6 Y-d //记录文件的差别
1 L1 d" U8 r) w3 [, D-r //添加文件到已经压缩的文件
) f% H6 n7 s8 p2 C3 U) Z-u //添加改变了和现有的文件到已经存在的压缩文件
; ]8 ~8 o; R# c# g# {-x //从压缩的文件中提取文件; N1 r8 \+ A9 {# P# r
-t //显示压缩文件的内容
+ j* l" f4 g$ ]# l; v: ^. y! i1 U-z //支持 gzip 解压文件
" O2 `0 d; h1 V4 y+ ~-J //支持 bzip2 解压文件
. e5 [2 a8 y9 h# @+ t# v5 [; \-Z //支持 compress 解压文件0 j6 D$ R3 h1 w
-v //显示操作过程
0 e7 ~; s A$ t! t4 p, y" b-k //保留原有文件不覆盖3 e) K/ x; u6 ~& l+ k$ x* ?
-m //保留文件不被覆盖& w N: p$ ]% ^+ I) g. d- \
-W //确认压缩文件的正确性7 T7 X1 X' x. H6 b- T
可选参数如下:
9 q& I! s8 G: A0 [; S* ]" L-b //设置区块数目
! A9 ?4 z3 O+ o1 T-C //切换到指定目录
, e. P* M8 @2 }& B& N F, p! \-f //指定压缩文件
$ J4 q; w% ^" E% b, k--help //显示帮助信息$ \' a8 E! o( Y, G1 G1 o( }
--version //显示版本信息
; j+ _. a8 g" C L* Z我们使用 tar 命令压缩生成.bz2 和.gz 压缩包,运行结果如下图所示:
4 s0 R# c0 p, q
1 f E# N+ J/ }
在上图中我们分别压缩了.bz2 和.gz 两个格式的压缩包,其中压缩.bz2 格式的压缩包我们使用的参数' l7 V/ D P! Q Q3 c1 I
是-jcvf,而.gz 格式的压缩包使用的参数是-zcvf。下面在我们在来学习下 tar 解压文件,操作如下图所示:* u6 O% s: m* E
: K2 ?' l1 I& u }# \) n |) @
在上图中,我们分别解压了.tar.bz2 和.gz 两种格式的压缩包。其中.tar.bz2 压缩包使用的-jxvf 参
3 O' ^* @$ N, E' i2 A/ E数来解压的,而.gz 格式的压缩包使用-zxvf 参数来解压的。关于 tar 的命令我们就介绍到这里,更多详细
7 E% d, \9 o: U; h4 B! c4 z的用法大家可以去网上找下相关的文档。
; u: X! b! @4 S( u, i! X文件查找命令 find
$ N# }7 v. A* Z7 F文件查找在我们的平常使用中也是很常见的,比如在 Linux 内核源码中,我们要查找某个文件的路径,这
! r5 [; m: W) z- I+ r) j' l是就会用到文件查找 find 命令了,器格式如下:) ~) [' O0 H0 Y: G. p
find [路径][参数][关键字]( ]0 ^/ t' s8 n" q$ n
路径标识要从哪个目录下开始查找文件,如果不写默认从执行 find 的当前目录下开始查找。
+ ?: [& k! @, x参数说明如下:& o8 L' b# j! F) U; {. Z! I2 f
-name 按照文件名称查找,查找与 filename 匹配的文件
0 a* g" }5 {3 R! Q2 ]8 J-depth 从指定目录下的最深层的子目录开始查找
: ?5 n% z8 N; O5 i" V6 A/ D8 H3 `& R-size<文件大小> 查找符合指定文件大小的文件 U' U+ `$ `0 W R3 B$ O
-type<文件类型> 查找符合指定文件类型的文件0 v( N: u2 t# @5 Z* Y5 ^- M* Q4 K
-user<拥有者> 查找符合指定的拥有者的文件或目录
7 U T: ~9 q9 S" Z* ^-gid<群组识别码> 查找符合指定的群组识别码的文件或目录
" n8 }3 V, _3 M9 k-group<群组名称> 查找符合指定的群组名称的文件或目录
( I/ j% p/ V6 ~" e( [# r该命令的参数有很多,我们这里只是列举除了一些常用的。我们来使用 find 命令查找一下在目录“/etc”3 V* }0 a. n2 z) |; S/ m0 X. Z
下以“host”开头的文件,我们在终端输入“find /etc -name host*”命令,运行结果如下图所示:0 w- [. V! b7 i9 r" g' `
/ X/ X) u: d* C! R9 [从上图中我们可以看到在“/etc”目录下,以“host”关键字开头的文件全部查找出来了。
- h4 {8 j$ @0 R- p文本搜索命令 grep6 b, ~# s( z; s7 ?
有时候我们需要搜索出包含特定关键字的文件有哪些,这样就会用到 grep 这个命令,命令格式如下:
2 T+ O" o0 M- q. S& V0 m; Ygrep [参数] 关键字 文件列表
o3 K# d+ Q/ N6 t1 o1 a参数说明如下:
# I# L R) s |$ f2 e6 S-b //在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号4 R% n, a+ M! Z1 \
-a //不要忽略二进制的数据
9 ]; j& y7 ]* d5 F& b: E-c //计算符合范本样式的列表 q4 p) d2 g" t$ E* t9 B
-i //忽略字符的大小写
# W! ~. m6 f6 i8 J% X+ x& \-n //在显示符合样本范式的那一列前面,标出该列的列数编号
- \1 M* O- N; ^-r //在指定目录中递归查找6 g* E9 K) D2 r9 q0 Y8 S) C# A
-v //反转查找,只显示不匹配的行
4 V- |) D/ w; W+ _- f9 k6 y比如我们在“/etc”下递归查找包含字符“topeet”的文本,运行结果如下图所示:
5 x7 \" f" M2 b# C, t& B
- c; U# u9 t7 A; }! `
|
|