文件管理

文件管理

一切都是文件。--linux哲学思想

目录

1.文件目录系统结构
2.文件和目录管理

在linux中一切都可以看作是文件,即使是物理设备也不例外,所以文件对于linux来说分为重要。我们要对linux文件目录系统来个充分的了解,然后再去使用它。

1.文件目录系统结构

文件目录结构

捕获.PNG

可以看出文件系统是从根开始的,由图中“/”来代表根。系统的路径分割也是由“/”进行分割。那这些文件目录都有什么用呢?这些简要说明下:

/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,这个也是那个方便就用那个。

以上是简单介绍了下文件目录系统,仅仅表面了解了文件目录,还在文件目录的外面徘徊。后面会对其再次进行更详细的了解。

原文地址:https://www.cnblogs.com/shenxm/p/7616164.html