zoukankan      html  css  js  c++  java
  • 文件管理

    文件管理

    一切都是文件。--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,这个也是那个方便就用那个。

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

  • 相关阅读:
    java代码,继承。。。主要是传值,赋值。
    java代码继承。。。找出不能继承父类方法的问题
    java代码继承super
    HDU 6114 Chess
    #113. 【UER #2】手机的生产
    uoj 118 赴京赶考
    戏game
    序sort
    迷enc
    Jupyter 同时支持python2、python3 kernel
  • 原文地址:https://www.cnblogs.com/shenxm/p/7616164.html
Copyright © 2011-2022 走看看