文件管理
一切都是文件。--linux哲学思想
目录
1.文件目录系统结构
2.文件和目录管理
在linux中一切都可以看作是文件,即使是物理设备也不例外,所以文件对于linux来说分为重要。我们要对linux文件目录系统来个充分的了解,然后再去使用它。
1.文件目录系统结构
文件目录结构
可以看出文件系统是从根开始的,由图中“/”来代表根。系统的路径分割也是由“/”进行分割。那这些文件目录都有什么用呢?这些简要说明下:
/bin: 供所有用户使用的基本命令存放目录;不能关联至独立分区,OS启动即会用到的程序
/sbin: 管理类的基本命令,系统重要的执行文件;不能关联至独立分区,OS 启动即会用到的程序
/boot: 引导文件存放目录,内核文件(vmlinuz) 、引导加载器(bootloader, grub) 都存放于此目录
/dev: 设备文件及特殊文件存储目录。b: block device ,随机访问;c: character device ,线性访问
/etc: 系统配置文件目录
/home: 普通用户家目录
/lib: 启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)存放目录
/lib64: 专用于x86_64系统上的辅助共享库文件存放目录
/media: 便携式移动设备挂载点
/mnt: 临时文件系统挂载点目录
/opt: 第三方应用程序的安装目录
/proc: 目录本身是一个用于输出内核与进程信息相关的虚拟文件系统,它放置的数据都在内存当中,如系统内核、进程、网络状况等。
/root: 系统管理员目录
/run: 某些程序或服务启动后,会将pid放置在这里
/srv: 系统上运行的服务所需要用到的数据存放目录
/sys: 用于输出当前系统上硬件设备相关信息的虚拟文件系统,类似/proc
/tmp: universal shared, read-only data,临时文件存储目录
/usr: UNIX software rescue,与软件安装和执行相关
/var: variable data files,与系统运作过程有关,例如缓存,登录文件以及软件运行所产生的文件,包括程序文件
/var/cache: 应用程序缓存数据目录
/var/lib: 应用程序状态信息数据
/var/local: 专用于为/usr/local下的应用程序存储可变数据;
/var/lock: 锁文件
/var/log: 日志目录及文件
/var/opt: 专用于为/opt 下的应用程序存储可变数据;
/var/run: 运行中的进程相关数据, 通常用于存储进程pid 文件
/var/spool: 应用程序数据池
/var/tmp: 保存系统两次重启之间产生的临时数据
/usr/bin: 保证系统拥有完整功能而提供的应用程序,是客户端上执行的前台任务
/usr/sbin: 一般是守护进程类的后台服务
/usr/lib: 32 位使用
/usr/lib64: 只存在64 位系统
/usr/include: C程序的头文件(header files)
/usr/share: 结构化独立的数据,例如doc, man等
/usr/local: 第三方应用程序的安装位置
/selinux: security enhanced Linux ,selinux 相关的安全策略等信息的存储位置
实际上linux支持十多种的文件系统类型,如ext1,2,3,4等,以只是简单说明了下其结构模式和常用作用。
这么多文件那它们都是什么类型呢?整个文件系统中文件总共分为以下七种类型:
-: 普通文件
d: 目录文件
b: 块设备文件
c: 字符设备文件
l: 符号链接文件
p: 管道文件pipe文件
s: 套接字文件socket文件
以上这种分类除了可以通过在文件属性中权限那块来看出来,文件属性是属于元数据的,而文件有两类数据,元数据是一类,另一类就是文件内部所书写记录的数据了。除上面方式外还可以过颜色区分:
蓝色代表目录文件
绿色代表可执行文件
红色代表压缩文件
浅蓝色代表链接文件
灰色代表其他文件
对文件系统有个简单了解后,来对文件目录进行些操作。
2.文件和目录管理
当你进入linux的CLI(命令行交换系统)时,会出现到一个工作目录下,每个shell和系统进程都有一个当前的工作目录,可以通过pwd命令来确认你在那个工作目录下。
1.显示当前工作目录:pwd
pwd - print name of current/working directory
pwd [OPTION]...
-L
, --logical : 显示链路路径
-P
, --physical:显示真实物理路径
pwd有两个重要选项,分别显示物理路径和链路路径。
物理路径是以正斜杠开始,是完整的文件位置路径,我们也称其为绝对路径。与其相对,我们称不以正斜杠开始,但指定相对当前工作目录或某目录位置的路径为相对路径。而链路路径是由ln命令产生的当前目录文件还与那个目录文件相链接的路径(个人理解)。
当前是什么工作目录我们知道了,那这个目录下有什么东西呢?
2.列出目录内容:ls
ls- list directory contents
ls [OPTION]... [FILE]...
-a:
列出包含的隐藏文件
-l:
显示属性信息
-R:
递归处理
-r:
逆序排列
-d:
显示目录名和链接文件本身
-1:
单列格式输出
-S:
从大到小排序
-s:
从小到大排序
-t:
按mtime排序
-u:
配合-t,按atime从新到旧排序
-U:
按目录存放顺序显示
-X:
按文件后缀排序
通过以上这些都是我们经常要用到的,实际上ls的选项还有很多,大家可以通过man ls来选用自己需要的。
提示:可通过alias来都有命令都有那些别名,可以方便输入。
你可以查看目录下都有什么内容了,那怎么切换呢?
3.目录切换:cd
cd [-L|[-P [-e]]] [dir]
虽然cd
也有些选项但一般不怎么用,一些用法介绍下:
父目录就是上级目录,这里介绍下:
../
表示上级目录
./
表示当前目录
PWD
:当前目录路径的环境变量
OLDPWD
:上一次目录的环境变量
cd
切换时可以用相对路径也可以使用绝对路径。
上面我们说到ls
可以列出目录下都有那些目录文件,但其具体属性我们就不是很清楚了。
4.查看文件状态属性:stat
stat
- display file or file system status,就是来查看文件所有的元数据。
stat [OPTION]... FILE...
-L, --dereference
:支持符号链接
-f, --file-system
: 显示文件系统状态而非文件状
-t, --terse
:简洁方式输出信息
从上图可以看到文件的元数据具体信息,其中有三个时间戳可能使人迷惑:
access:这个显示的是access time 简称atime是用户读取文件内容时的时间。
modify:这个显示的是modify time 简称mtime是用户改变文件内容(数据)的时间。
change:这个显示的是change time 简称ctime是元数据发生改变的时间。
你经过几次查看操作后发现atime怎么没有改变,这个与系统默认设置有关。
触发atime更改的条件:如果atime已经超过一天没有更新了,当你当前读取文件的时候它就会更新。另一个条件是,当mtime比atime新时,atime也会更新。
有时候你会发现一个目录下面有大量的文件,那么你怎么从这些文件中找到你需要的呢?这就需要用到文件通配符了。
5.文件通配符
*
:匹配零个或多个字符
?
:匹配任何单个字符
~
:当前用户家目录
~home
: 用户家目录
.
:当前工作目录
..
:前一个工作目录
[0-9]
匹配数字范围
[a-z]
:字母 大小写都会存在
[A-Z]
:字母 大小写都会存在
[]
:匹配列表中的任何的一个字符
[^]
:匹配列表中的所有字符以外的字符
[:alnum:]
:任意数字或字母
[:digit:]
:任意数字,相当于0-9
[:alpha:]
:任意大小写字母
[:lower:]
:任意小写字母
[:upper:]
: 任意大写字母
[:blank:]
:水平空白字符
[:space:]
:水平或垂直空白字符
[:punct:]
:标点符号
[:print:]
:可打印字符
[:cntrl:]
:控制(非打印)字符
[:graph:]
:图形字符
[:xdigit:]
:十六进制字符
这么多通配符怎么用呢,这举个例子来认识下:
显示/var 目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录.
知道了怎么查找文件,哪怎么创建文件呢?
6.创建空文件
实际上创建文件的方法有很多,这里简单介绍几个:
touch
用于创建空文件,如果文件已经存在就不再创建,但会刷新时间。
touch [OPTION]... FILE...
-a
仅改变atime和ctime
-m
仅改变mtime和ctime
-t [CC]YY]MMDDhhmm[.ss]
指定atime和mtime的时间戳
-c
如果文件不存在就不创建
>
也可以创建空文件,要是跟已经存在的文件,会把文件给清空。
>>
也可以创建空文件,要是跟已经存在的文件,并不会清空文件,只会在该文件的最后加个空行。
echo
也可以创建空文件,直接跟已经存在的文件,也可以把文件清空。
还有其他许多的创建方法,这里就不再一一列举了。
当我们想要把这个目录下的某个或某些文件放到另一个目录怎么弄?这就用到了复制命令了。
7.复制文件和目录
cp - copy files and directories
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
-i
:覆盖前提示 。
–n
:不覆盖,注意于-i
的前后顺序
-a
: 归档,相当于-dR --preserv=all
-d
:--no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
:attr_list有权限属组类的
-p
:等同--preserv=mode,ownership,timestamp
-v
:显示复制过程
-f
: 强制复制目录和文件,不管其是否存在
-t
:--target-directory=DIRECTORY
-T
: --no-target-directory
上面只是列举了下常用的,实际上cp
的选项有很多,大家可以用man帮助来查看所需的。
cp
文件和目录时有几种情况,这里详细解释下:
cp SOURCE DEST
- SOURCE是文件:如果目标不存在:新建DEST ,并将SOURCE 中内容填充至DEST中
- DEST存在且为文件:将SOURCE 中的内容覆盖至DEST中基于安全,建议为
cp
命令使用-i
选项 - DEST存在且是目录:在DEST下新建与原文件同名的文件,并将SRC 中内容填充至新文件中
cp SOURCE… DEST
- *SOURCE... *:多个文件
- *DEST *必须存在,且为目录,其它情形均会出错
cp SOURCE DEST
- SOURCE 是目录:此时使用
-r
选项 - 如果DEST 不存在:则创建指定目录,复制SOURCE 目录中所有文件至DEST 中;且创建目录的条件是:所创建目录的上一级目录必须存在,才能创建当前目录
- DEST存在且是文件:报错
- DEST是目录:在DEST下新建与原目录同名的目录,并将SRC中内容复制到新目录中
以下图片可能使你理解的更清除点儿:
当我们把文件复制过后,不想要原文件了,就可以把原来的文件删除掉。
8.删除命令:rm(危险命令)
rm
- remove files or directories,这命令很危险,所以一般尽量少用
rm [OPTION]... FILE...
-i
:交互模式
-f
:强制进行(这个选项更加危险)
-r ,-R
:递归进行,特别是目录类的。
-v
:显示过程
实际上这个rm命令直接删除数据的,删除的是文件目录的元数据,数据并没有被删除,只是让你找不到数据了,释放inode。
上面我们说到过>
可以创建空文件,且跟存在的文件时会清空文件。实际>
就是删除数据命令,可以帮我们快速清理大的文件。
除上面两个外,还有个更好更安全的删除命令。
9.安全的删除命令,粉碎命令:shred
shred
- overwrite a file to hide its contents, and optionally delete it
shred [OPTION]... FILE...
shred -zvun5 FILE
-z, --zero
:add a final overwrite with zeros to hide shredding
-v, --verbose
:show progress
-n, --iterations=N
: overwrite N times instead of the default
-f, --force
: change permissions to allow writing if necessary
-u, --remove[=HOW]
: truncate and remove file after overwriting
常用到的也就以上几个选项,看下效果
这样删除后的文件很难被恢复,这就保持了数据的安全性。
有关文件的些操作,知道了,哪针对目录的操作有那些呢?
10.目录操作
显示目录树:tree
tree - list contents of directories in a tree-like format
-d
:只显示目录
-L
:指定显示的层级数目
-P pattern
:只显示由指定pattern匹配到的路径
创建目录:mkdir
mkdir - make directories
mkdir [OPTION]... DIRECTORY...
-p
:存在不报错,且可自动创建所需的各目录
-v
:显示详细创建过程信息
-m MODE
:创建目录时直接指定权限
删除空目录:rmdir
rmdir - remove empty directories
rmdir [OPTION]... DIRECTORY...
-p
:递归删除父目录
-v
:显示过程信息
有关目录操作命令中也有好多选项,这里只是列出了常用的几个,切一般删除目录也不用rmdir
而是用rm
,这个也是那个方便就用那个。
以上是简单介绍了下文件目录系统,仅仅表面了解了文件目录,还在文件目录的外面徘徊。后面会对其再次进行更详细的了解。