|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
操作系统的主要功能之一就是文件的管理。文件管理是由文件系统来实现的,Linux 系统支持多种格式
8 d- R% D1 F4 P的文件系统,本届我们主要讲解下文件系统的类型,以及文件操作的一些常用命令。
5 E' O6 k: [% |/ w2 t2.8.1 Linux 文件系统类型) K1 t ~; |6 G; d3 x: ^
我们在使用 Windows 系统的时候,有时会对硬盘,U 盘等的存储设备进行格式化,在格式化的时候会要求' Z) }% A% z: ?7 I" l4 F
我们选择文件系统的类型,比如:exFAT、FAT32、NTFS,同样 Linux 系统也支持各种不同类型的文件系统,
0 c+ I2 ]( [0 R9 o6 Z比如:ext2、ext3、ext4、yaffs、FAT32、NTFS 等。这里我们主要讲解下几种常用的文件系统。5 o+ m9 h5 R- Q* A$ O# ]% x/ T+ m
FAT32 文件系统:* j' C- _7 {- F" b
FAT32 指的是文件分配表是采用 32 位二进制数记录管理的磁盘文件管理方式,因 FAT 类文件系统的核心是
1 D0 l- ^' o) I9 w3 u文件分配表,命名由此得来。FAT32 是从 FAT 和 FAT16 发展而来的,优点是稳定性和兼容性好,能充分兼容
7 P4 ]+ r6 ?% X" jWin 9X 及以前版本,且维护方便。缺点是安全性差,且最大只能支持 32GB 分区,单个文件也只能支持最大
Y* \7 P, U9 j+ I1 G* ~- u/ W4GB。7 J' Z! l! M( Y3 i
3 ext3 文件系统: @$ D7 r' _) v7 m8 V
EXT3 是第三代扩展文件系统(英语:Third extended filesystem,缩写为 ext3),是一个日志文件系统,
# O/ ^/ ^4 \ z; w& O- M7 L9 w常用于 Linux 操作系统。它是很多 Linux 发行版的默认文件系统。Stephen Tweedie 在 1999 年 2 月的内核 u# M" }3 q' L# a) A2 n! E* n* L( c. _
邮件列表中,最早显示了他使用扩展的 ext2,该文件系统从 2.4.15 版本的内核开始,合并到内核主线中。6 R+ D5 m! ~# _& Q; n& G
ext4 文件系统4 p+ c! p( q/ {; b* r* R, i( ^
4 EXT4 是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是 Linux 系统下的日志
) Q2 P6 h( t: G3 j4 x6 ~+ A \8 N8 E; e( E文件系统,是 ext3 文件系统的后继版本。Ext4 是由 Ext3 的维护者 Theodore Tso 领导的开发团队实现的,0 _' E( ], k& P4 p! Z
并引入到 Linux2.6.19 内核中。Ext4 产生原因是开发人员在 Ext3 中加入了新的高级功能。
! t7 C, y' q: p2 N8 Y上面几种文件系统是我们在 Linux 下经常使用的,那么我们安装的 Ubuntu 系统下的文件系统使用的是哪种! a7 G7 a* s$ g/ e4 d6 Q( ~6 O
格式的呢?我们可以在终端输入“df -T”命令来查看下,如下图所示:
0 h; }; m% w4 ], F% {' o+ p- X
6 j7 d1 y, i1 b* r# i从上图红色方框的文件就是我们安装 Ubuntu 的磁盘,在 Linux 下一切皆为文件,“/dev/sda1”就是我
( p h1 [2 X* x9 B" h8 d5 K8 p& ]们的磁盘分区,可以看到他的类型是 ext4。我们在 Windows 系统下有 C、D、E 盘这样的概念,但是通过上
, ]9 X" k) v6 h7 F, {面的命令我们可以看到 Linux 下对磁盘的管理与 Windows 是不一样的,没有 C、D、E 盘这样的概念。Linux% P- b n" M5 C& {. |: Q- _
系统只有一个跟目录“/”,我们可以在 Ubuntu 的桌面打开“文件”应用,我们可以看到打开的文件路径- P7 v: { B; ?
并不是在根目录下,这是因为 Ubuntu 是支持多用户的,会为每个用户分配一个根目录,比如我的 Ubuntu
; X5 y( a1 T% g7 e/ O登录的用户是 topeet,那么默认进入的就是 topeet 用户的根目录“home”,如下图所示:
2 u" h, [6 d3 H3 X+ j
3 I# N' A$ g! C4 H
我们在上图中点击左侧的“计算机”,如下图所示:
. c9 A- d/ N2 p7 t
( o( c7 c& c0 N+ K
上图就是 UBuntu 的根目录,那么前面我们的说的 Ubuntu 会为每一个用户创建一个根目录,那么这个根目5 t6 x) ^7 }% c! g0 J8 `9 a
录具体位置在哪里呢?我们在创建用户的时候,Ubuntu 同时会在“/home”目录下创建与应户名同名的文
( t. U! S Q$ ?: H* l6 O3 V; ^件夹,这个文件夹就是用户的根目录,比如我这里登陆的用户名是 topeet,那么 topeet 用户对应的用户根
' k: b7 @$ \9 V1 M0 _9 S目录就是“/home/topeet”这个目录。用户可以对自己用户根目录下的文件进行任意的读写操作。我们可2 \% F5 v/ f8 d. Q4 I! T% T, }
以打开终端使用“cd /”命令,进入到系统根目录下,然后在输入“ls”命令,产看下系统根目录下都有哪
$ O+ ^' j8 ~+ q; U! Z- c3 A些文件,如下图所示:
% D6 C( F' l; i2 N
& N: R3 [4 I: J9 u8 F2 `
从上图可以看到系统根目录下都有哪些文件夹,我们来看下这些文件夹的具体功能:8 @- P5 x% u+ R( u8 n3 w2 v5 t
/bin 存储一些二进制可执行命令文件$ {- T6 p- s8 ~
/boot 存放 Ubuntu 系统内核和系统启动文件; D# |! s& X7 O1 M; `" N
/dev 存放设备节点$ G- T& H; _& x3 P( D3 m
/etc 存放系统管理所需的配置文件
" b* {: ~+ Y" s+ ~* o; V8 B/home 普通用户默认目录,每个用户在改目录下都有一个以本用户名命名的文件夹/ m$ Z/ J, n0 {8 }7 z, J
/lib /lib64 存放系统程序运行所需的库文件. J) b) j9 O5 |2 n. n) {6 ^2 J
/media 存放 Ubuntu 系统自动挂载的设备文件
G& v7 Z# K( _# b/mnt 用于挂载的文件系统的挂载点
9 A% K4 ?" W/ X. }0 y( U/opt 可选文件和程序的存放目录
$ o8 J' k5 [6 Z4 o3 L1 p( u/proc 通常用来保存系统信息和进程信息2 k/ K* S& R2 P1 e! v$ d4 q* ]0 T+ h
/root 超级用户 root 的根目录文件& y! {; `: E6 Z( I/ C2 L" R
/sys 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息
+ x$ j, C, M/ c6 }" w. u# |5 D" [" _/tmp 存储系统和用户的临时文件- Z$ G/ a$ e" v+ B- s A2 p
/usr 包括与系统用户直接有关的文件和目录7 ~# t% M8 d+ L1 |' Q& j
/var 存储一些不断变化的文件,比如日志文件8 U6 |7 M& u6 S# e% V3 J
2.8.2 文件操作命令5 f" B8 J M& m+ S3 n- S
创建文件命令 touch! `+ x: F5 ~7 x2 K' x4 w
我们在前面学习 vim 的时候,可以通过 vim 来创建一个文本文件,“touch”不仅可以用来创建文本文件,/ O0 e l/ H5 H l- ~
还可以创建其它类型的文件,命令格式如下:
\! N; P6 D( N) Utouch [参数] [文件名]3 l2 [8 \0 ~, N9 H
参数说明:+ r1 D7 N% a4 w: J/ A4 A# S4 u5 Y
-a 只更改存取时间
2 R$ Q7 ?2 A, ?9 k5 C-c 不建立任何文件1 O" m2 ~2 d7 `& R
-d<日期> 使用指定的日期创建文件
7 ?4 |3 D/ }& Q; s7 T6 W7 ^, M-t<时间> 使用指定的时间创建文件
9 a6 ] f; v; @7 G( X当我们使用“touch”命令创建文件的时候,如果创建的文件不存在,则会直接创建,如果创建的文件4 l P2 \7 u% `9 w, E) `3 E
已经存在,则会修改下文件的最后修改日期(修改成运行该命令时候的系统日期)。现在我们使用命令“cd7 |% V. o2 j5 I: J
~”进入到用户的根目录下,然后使用“touch”命令创建一个名为 ceshi 的文件,运行结果如下图所示:
[# }& w4 v4 u) a* T b
, ?0 s" c0 R% f5 q
文件夹创建命令 mkdir
( M" k; E {# M( emkdir 是用来创建文件夹的命令,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,并且创, X y7 s7 W' d" _% x! _% [
建的文件夹名称不能是当前目录中又有的目录,命令格式如下:, z! \; E* r- q+ g4 y
mkdir [选项] 目录...7 Q& {( i5 l* M6 M6 v3 s- O
选项的说明如下:0 y7 j2 x, B% Y ~, r' {& C `7 ]
-m //设定权限<模式>(类似 chmod)
) Q9 I9 n2 \% M+ R% v& s, @-p //可以是一个路径命令,如果路径中的目录不存在,则依次创建他们1 E+ E8 k% t" y2 a" y" f
-v //每次创建新目录都显示信息2 G5 |$ ^4 F8 v' r- F5 |( R
--help //显示帮助信息0 F$ U% F( n+ p4 J+ F# |
--version //输出版本信息; \% n$ C1 O; X& e
我们可以使用 mkdir 创建一个名为“test”的文件夹,我们在终端运行命令“mkdir test”,运行结果如下图
7 W8 J/ \% k# U- o9 S* j. b: @/ B所示:
- J, Q' \( \$ c: |, C
h1 o5 c) T1 E4 F& Z' [% Z文件删除命令 rm7 R% m: m& s5 j" D! V+ L3 x
rm 命令可以删除文件和文件夹,在使用该命令的时候,要求当前用户在当前的目录下具有写权限,命令格式如下:
; e" }- c; U2 D. F7 B c6 [: {+ Nrm [选项]... 目录...) w# S, `1 s$ n
选项的说明如下:$ ], V6 W8 K3 U* `
-d //删除可能仍有数据的目录(只限超级用户 root)* o1 B# A- P( a& j: R' v
-f //略过不存在的文件,不显示任何信息
( ~2 C' m6 H6 s G9 K! K: C-i //进行任何删除操作前,必须先确认7 F7 T. d; ]% O2 l& y( ^; g
-r //同时删除该目录下的所有目录层
& L) { ^$ V8 ?5 K @; }-v //详细显示进行的步骤
- b" n5 ~, x5 Z! E' H: U--help //显示帮助信息并退出
8 e" }( {2 B( ~+ E--version //显示版本信息并退出
+ E& X0 I5 y; a" E/ y: F' @我们使用“rm”命令删除前面创建的文件“ceshi”,我们在终端输入“rm ceshi”,然后回车就可以删
9 h# }5 u3 m9 Q$ l+ p掉文件“ceshi”了,运行结果如下图所示:
( i: i- f2 [3 l2 c0 D
7 D: z0 p1 G* a. M9 s“rm”命令也可以删除文件夹,我们删除前面创建的 test 目录,我们在终端执行“rm -RF test”,运行结果- F- F2 ?) P+ s4 N7 h7 s
如下图所示:
: p8 \3 ^; o- g7 c2 S. T
3 a/ c. r2 q8 R0 k$ B$ N0 J文件复制命令 cp
7 X4 Q* W) ~0 t6 ~2 B: ?Linux 下文件复制的命令是“cp”,命令格式如下:( L+ Z+ K. @, |
cp [参数] [源文件] [目标文件] c4 g& x& t8 ^1 j# q' D! D
参数的说明如下:1 A! T0 i# N6 V& m
-d //复制有符号连接的文件时,保留原始的连接
) E3 r$ t9 I" P0 J- G-f //强行复制文件,不管要复制的文件是否已经存在于目标目录
. n2 f5 T/ I7 A$ \-r //递归处理,将指定目录下的文件及子目录一并处理0 E# L$ Q6 g0 ?& e: Y U9 }
我们在用户跟目录下使用 mkdir 命令创建两个文件夹:ceshi1、ceshi2,如下图所示:
& ^" B9 I0 W' [" h' y
& c# i' I! n( L; r然后进入“ceshi1”文件夹,在 ceshi1 文件夹创建 a 文件,如下图所示:
3 L D8 L+ K8 i* _3 s4 P. B
# q4 m1 C6 H; G, C我们将文件 a 复制到用户根目录下的 ceshi2 文件夹,运行结果如下图所示:
9 I# f8 L4 D) M; F8 f6 e' y
- p) n4 T# l# c3 e1 I. ?; T1 a
完成文件的复制,接下来我们来实现文件夹的复制,首先我们返回到用户根目录下,然后将 ceshi1 文件夹
. C5 |* Q4 |. f) D+ f* P% X" c) Q! o复制到 ceshi2 文件夹,运行结果如下图所示:
( W3 K" Q' j1 L7 W0 l& B
5 b* C# c) h' D V* @
移动文件命令 mv
. J- V$ _6 e! o' _7 I5 \Linux 下文件移动的命令是 mv,命令格式如下:; D. |' _4 ]( I' Y3 J' D- \
mv [参数] [源文件] [目标文件]
# G' |9 P. v) ~) }" c9 m$ Q参数说明:+ M Y) m* U6 G B
-b //如果要覆盖文件的话覆盖前先进行备份
$ J. x# P' \* ]4 U' M F-f //若目标文件或目录与现在的文件重复,直接覆盖目的文件或目录% i' ?3 D" G9 h" Z$ C; J l9 B
-i //若目标文件存在,则会询问是否覆盖7 H' L0 S4 u4 l& R, ^0 Q
-u //若目标文件已经存在,且源文件比较新,则会更新% b9 ?4 s" w6 r
我们在前面创建了两个文件夹:ceshi1、ceshi2,在 ceshi1 文件夹创建了文件 a,我们将文件 a 重命名成文3 G4 _4 I( Q- U8 Q5 N" m
件 b,然后将文件 b 移动到 ceshi2 文件夹,运行结果如下图所示:9 J* }9 I# n4 Z8 ?/ N
+ ?) b4 d: |$ s- J q% q+ q# ~
文件接压缩命令 tar# y& Y. ]8 }" \3 `" B5 h# v
Linux 下常用的压缩包格式有两种:.bz2 和.gz。我们可以使用 tar 命令来解压或压缩这两种格式的压缩包,
% W9 q- A/ }. Y/ Q j命令格式如下:
, X5 |7 ^3 Q' | B' d5 Otar [必要参数] [选择参数] [文件]' X T4 e0 w- E, p- U8 C8 l z
必要参数说明如下:. q. y8 x g4 M
-A //新增压缩文件到已存在的压缩4 ?# [/ M/ r( Q/ M1 [1 S. f
-B //设置区块大小
+ w+ t+ [4 {, e' \ z9 S-c //建立新的压缩文件+ r8 B5 J& ~$ C6 U& ~( D
-d //记录文件的差别
3 o( s1 w+ G; f8 [4 O0 L, Q-r //添加文件到已经压缩的文件' U& z. r$ Z+ L/ q: u3 d8 J
-u //添加改变了和现有的文件到已经存在的压缩文件
3 j3 M3 R! T, h5 v ~! g* J' e, V-x //从压缩的文件中提取文件
, L N/ y# M+ V7 ~-t //显示压缩文件的内容
. o% L2 h! U# `9 ~9 W3 q/ p-z //支持 gzip 解压文件
8 k! _3 } [% w, P( C J7 e-J //支持 bzip2 解压文件
! B+ }) v; a# V. o) Q-Z //支持 compress 解压文件
]1 B: n% [& N" W, C' k- [9 f1 T-v //显示操作过程
$ Q" L7 l8 q+ O* s* U* Q-k //保留原有文件不覆盖
4 \5 d9 [ u6 _% ~0 j-m //保留文件不被覆盖; E4 r: {( Z3 z; \* o5 z- k
-W //确认压缩文件的正确性( O+ `9 {$ x# b! N; s
可选参数如下:( _' [+ m) m* T: k4 Q3 _
-b //设置区块数目
7 E4 X0 e) X7 E# A0 ~, t. c-C //切换到指定目录8 ^( v% y H- ~
-f //指定压缩文件
+ `! b- a2 L: T. n4 i9 i8 x--help //显示帮助信息. o; f+ q! \* C f8 \6 c
--version //显示版本信息- v" x1 y- b5 e& f( b
我们使用 tar 命令压缩生成.bz2 和.gz 压缩包,运行结果如下图所示:
8 t0 {( G; N p
7 X |$ r9 ]' ?* [5 l在上图中我们分别压缩了.bz2 和.gz 两个格式的压缩包,其中压缩.bz2 格式的压缩包我们使用的参数0 U' v, i) P* W4 s6 U8 ]5 M- Z4 L" k- k
是-jcvf,而.gz 格式的压缩包使用的参数是-zcvf。下面在我们在来学习下 tar 解压文件,操作如下图所示:
2 y6 [2 Z9 e' a! e
5 @2 B& Q# o \
在上图中,我们分别解压了.tar.bz2 和.gz 两种格式的压缩包。其中.tar.bz2 压缩包使用的-jxvf 参 |8 G8 n7 |* L6 d. }8 @
数来解压的,而.gz 格式的压缩包使用-zxvf 参数来解压的。关于 tar 的命令我们就介绍到这里,更多详细7 U" X. v! E- z5 _% l! A4 U& l8 Q
的用法大家可以去网上找下相关的文档。
2 \4 i4 b* ^& x文件查找命令 find+ r4 [+ x- g: ]' q0 m& X
文件查找在我们的平常使用中也是很常见的,比如在 Linux 内核源码中,我们要查找某个文件的路径,这
0 x) z" ]% R; f是就会用到文件查找 find 命令了,器格式如下:
: }7 U o- I K; A8 _ h! E' nfind [路径][参数][关键字]
; A; L" _8 a/ [& l; [* E9 X路径标识要从哪个目录下开始查找文件,如果不写默认从执行 find 的当前目录下开始查找。
6 @8 w; J8 z4 U- H) S( o; U: L参数说明如下:
7 I4 J+ ~1 u' b% J-name 按照文件名称查找,查找与 filename 匹配的文件) f# |$ Z9 s6 J6 l4 F
-depth 从指定目录下的最深层的子目录开始查找0 Q9 {1 g" E6 _' q; j/ L# _
-size<文件大小> 查找符合指定文件大小的文件! U' }9 R" h$ n0 _- C( |! L; Q
-type<文件类型> 查找符合指定文件类型的文件
0 X0 z: x; s) g0 }+ @3 J' K-user<拥有者> 查找符合指定的拥有者的文件或目录
$ r$ u* M+ ~; Y' I2 n-gid<群组识别码> 查找符合指定的群组识别码的文件或目录
- n$ K/ \/ P6 T9 V3 w2 ]3 U& x-group<群组名称> 查找符合指定的群组名称的文件或目录2 Y) y, l/ i1 C' Q0 {
该命令的参数有很多,我们这里只是列举除了一些常用的。我们来使用 find 命令查找一下在目录“/etc”
. b. V! R' {4 P( k0 ~ S( v下以“host”开头的文件,我们在终端输入“find /etc -name host*”命令,运行结果如下图所示:* {6 F4 K1 h" Y; f6 O& @! O, Y
. u A9 J4 w4 ~- R! `" _1 l# S0 d
从上图中我们可以看到在“/etc”目录下,以“host”关键字开头的文件全部查找出来了。
( n8 }9 h q$ I; M文本搜索命令 grep
/ A, I$ F/ O3 t4 }% A1 @$ O, R有时候我们需要搜索出包含特定关键字的文件有哪些,这样就会用到 grep 这个命令,命令格式如下:
; n8 I a$ B0 ?0 w0 h# Ogrep [参数] 关键字 文件列表
6 p# h( P- `0 I& j' Y- k参数说明如下:& S8 @5 \" L" E; M$ d& q
-b //在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号
. P! [! I$ l2 _-a //不要忽略二进制的数据$ Y& ]* f! r2 t# X% ]" T
-c //计算符合范本样式的列表
* k: m$ D' {2 v7 Z-i //忽略字符的大小写
/ k$ [( c* @( b. {-n //在显示符合样本范式的那一列前面,标出该列的列数编号6 `' s2 z; R' Z6 X$ v+ Z& y( M E u
-r //在指定目录中递归查找
# R/ U$ r" Y8 P-v //反转查找,只显示不匹配的行
, P( u- _; _! b K0 {4 o比如我们在“/etc”下递归查找包含字符“topeet”的文本,运行结果如下图所示:
: S! p. _1 G7 u3 W0 S9 v- G+ g
" B/ {2 x7 d) T) T! l" M) {' g3 [ |
|