Linux文件系统

Linux文件系统目录结构


Linux文件系统目录结构

根目录:“/”,文件系统开始

一级目录:

       /boot:存放系统相关的内容,如内核文件(Vmlinuz),引导加载器(grub)等

       /dev:存放设备相关内容

              /dev/sda(/dev/sr0):硬盘光盘等块设备(b,block)

              /dev/zero:字符设备(c,character),是一个逻辑概念

              /dev/null:空值,“黑洞”

              /dev/random:生成随机数

       /etc:存放linux相关设置,等同于windows注册表,系统配置文件

       /home:存放用户数据,各用户的家目录

       /root:系统管理员root家目录

       /run:存放系统运行中产生的相关数据

       /bin:二进制binary,存放用户可执行的二进制程序

       /sbin:s代表系统管理,存放系统管理员root可执行的二进制程序

       /tmp:存放临时数据

       /usr:操作系统中的绝大部分数据

       /var:可变内容,如日志、缓存数据等

       /proc:进程(不存放在硬盘上),存放于内存中

Linux文件系统特点:

        大小写敏感是针对于文件系统(ext4,xfs敏感;fat,ntfs不敏感)而非操作系统

        *例如Linux系统使用fat文件系统时大小写不敏感

        文件数据:包括元数据metadata(文件属性)和数据data(文件内容)

        Linux文件系统分层结构基于LSB(Linux Standard Base),官方规范标准FHS(FilesystemHierarchy Standard)

        文件名最长255个字节,包括路径在内文件名称最长4095个字节

        颜色:蓝色->目录,绿色->可执行程序,红色->压缩文件,浅蓝色->软连接(类似于windows中快捷方式),灰色->其他文件(颜色可通过/etc/DIR_COLORS文件进行配置)

        类型:- 普通文件,d 目录文件,b 块设备,c 字符设备,l 符号链接文件,p 管道文件pipe,s 套接字文件socket

Linux文件系统相关命令

        *绝对路径:完整的文件为路径

        *相对路径:相对于当前工作目录或某目录的位置

        basename:显示路径基名

        dirname:显示路径目录名

        pwd:显示当前工作目录(CWD:Current Working Directory)的绝对路径

               -L显示链接路径(默认)

               -P显示真实物理路径

               [cf]进入/bin路径下分别输入pwd –L和pwd–P

        ls:列出目录内容

               -a包含隐藏文件

               -l显示额外信息

               -R目录递归通过

               -ld目录和符号链接信息

               -1文件分行显示

               -S按从大到小排序

               -t按mtime排序(--time=ctime|atime)

               -X按文件后缀排序

        cd:进入文件目录(changedirectory)

        文件时间:

               mtime:文件修改时间(modify)

               atime:文件访问时间(access)

               ctime:文件属性变更时间(change)

               *可用stat命令查看,touch命令可用来更新文件时间

        cp:复制文件和目录

               cp[OPTION] [-T] SOURCE DEST

               cp[OPTION] SOURCE… DIRECTORY

               cp[OPTION] -t DIRECTORY SOURCE…

               *root用户cp命令使用了重命名alias cp=‘cp -i’

               *cp-a:归档,常用于备份 (等同于-dR)

        mv:移动和重命名文件

               mv [OPTION] [-T]SOURCE DEST

               mv[OPTION] SOURCE… DIRECTORY

               mv[OPTION] -t DIRECTORY SOURCE…

               常用选项:

                      -i:交互式

                      -f:强制

                      -b:目标存在,覆盖前先备份

               重命名可以使用rename命令(rename STD1 STD2 file:将file中的STD1修改为STD2)

        rm:删除文件或目录

               *生产中建议禁用,或者使用alias重命名为mv

               rm[OPTION]… FILE…

               常用选项:

                      -i:交互式

                      -f:强制删除

                      -r:递归

                      --no-preserve-root:删除根目录(也可以用rm -rf /*)

                      *centos6之后rm -rf /命令无法执行

        文件通配符:

               *:匹配零或多个字符

               ?:匹配任何单个字符

               ~:用户家目录

              ~name:用户name的家目录

              ~+:当前工作目录

              ~-:前一个工作目录

               [0-9]:匹配0-9之间的数字

               [a-z]:匹配aAbBcC…yYz之间的数字

               [A-Z]:匹配AbBcC…yYzZ之间的数字

               [abc]:匹配a,b,c之间的任一字符

               [^abc]:匹配a,b,c之外的字符

               预定义字符:可通过man 7 glob查看

                      [:digit:]:任意数字,相当于0-9

                      [:lower:]:任意小写字母

                      [:upper:]:任意大写字母

                      [:alpha:]:  任意大小写字母

                      [:alnum:]:任意字母或数字

Linux目录操作

        tree:显示目录树

               -d只显示目录

               -Llevel:制定显示的层级数(tree –L 2 /etc:表示显示/etc目录下两层的树结构)

               -Ppattern:只显示由指定pattern匹配到的路径(tree–P /etc/rc*)

        mkdir:创建目录

               -p 自动创建所需的各目录

               -v显示详细信息

               -mMODE创建目录时直接指定权限

        rmdir:删除空目录

               -p递归删除父空目录

                -v 显示详细信息

        rm –r:递归删除目录树

Linux索引节点

        file = file name + file data + filemetadata + inode number

               filename存放在目录的数据内容中

               filemetada和inode number存放在文件的inode table节点表中

        inode:index node表中包含文件系统所有文件列表

               一个节点(索引节点)是一个表项,包含相关文件的属性信息(元数据),包括:

                      文件类型,权限,UID,GID

                      链接数(指向这个文件名的路径名称个数)

                      该文件大小和不同时间戳

                      指向磁盘上文件的数据块指针

                      有关文件的其他数据

        inode表结构


inode表结构


inode表结构

        数据块指针(以ext4为例)

               直接指针:直接指向存储的数据区域,前12个

               间接指针:一级指针,二级指针,三级指针等

Linux链接

        硬链接

               格式:link filename [linkname]

               本质:针对一个文件,起多个文件名

                创建硬链接会增加额外的记录项以引用文件

                对应于同一文件系统上的一个物理文件

                每个目录引用相同的inode号

                创建时链接数递增

                删除文件时:

                       rm命令递减计数的链接

                       文件要存在,至少有一个链接数

                        [eg]执行ln /data/f1

                */data/f1-link后尽管删除/data/f1文件,还能访问/data/f1-link    

                不能跨驱动器或跨分区链接,不能对目录进行链接

        软链接

               格式:ln -s filename [linkname]

               本质:指向软连接所引用文件的名称,又称符号链接,

               原始文件一般路径用相对路径,相对路径是相对于软链接文件的路径,非当前工作路径。

               ls-l显示链接的名称和引用的文件

               可以对目录进行,可以跨分区进行

                符号链接指向引用文件的路径;其大小为指向路径字符串的长度;不增加或减少目标文件的inode计数

                区别:

                       同一个文件?

                       跨分区?

                       链接数增长?

                       inodeNumber相同?

                       删除原始文件,链接文件可否访问?

                       链接大小

                       支持目录?

                       相对路径写法?

标准I/O和管道

        三种I/O设备:

               0:标准输入(STDIN),默认接受来自键盘的输入

               1:标准输出(STDOUT),默认输出到终端窗口

               2:标准输出(STDERR),默认输出到终端窗口

               *每打开一个文件linux系统都会生成一个文件描述符fd(file decriptor)

        I/O重定向:

               本质:改变默认的输入输出位置

               >:将STDOUT重定向到文件

               2>:将STDERR重定向到文件

               &>:将所有输出重定向到文件

                >>:在原有内容基础上,追加内容

                <:重定向STDIN

                ( ):合并多个命令进行重定向,例如(cal 2007;cal 2008) &> file

                *在使用>命令时文件内容会被覆盖:

               set –C:禁止将内容覆盖至已有文件,但可以追加

               set +C:允许覆盖

               >| file强制覆盖

        tr:转换和删除字符

               格式:tr [OPTION]SET1 [SET2]

               -c –C --complement:去字符集补集(取反)

               -d --delete:删除所有属于第一字符集的字符

               -s --squeeze-repeats:将连续重复的字符单独以一个字符表示

               -t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应字符(默认)

        管道:

               本质:用于连接命令,将一个命令的标准输出做为另一个命令的标准输入

               格式:cmd1 | cmd2 | cmd3…

                      [eg]ls | tr ‘a-z’ ‘A-Z’

               注意:

                      cmd1和cmd2一定是STDOUT

                      STDERR默认无法通过管道转发,但可以通过2>&1或|&实现

                      最后一个命令会在当前shell进程的子进程中进行

                 -符号:例如tar –cvf - /home | tar –xvf –

                            将/home内的文件打包,但打包的数据不记录到文件而是传到STDOUT,经过管道后传给后面的tar –xvf,-代表前一个命令的STDOUT,因此不需要临时文件file了

               tee:重定向到多个目标(可既在终端输出,又重定向到文件,同时查看和记录输出)

                      cmd1| tee [-a] file | cmd2

                      将cmd1的STDOUT保存在file中,作为cmd2的输入-a追加

相关练习

1.显示/etc目录下,所有以.d结尾的文件或目录

命令:ls -d /etc/*.d

   2.显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录

命令:ls -d /etc/[mnrp]*.conf

3.创建/app/rootdir目录,并复制/root下所有文件到该目录内, 要求保留原有权限

命令:mkdir -p /app/rootdir和cp -pr /root/* /app/rootdir


复制结果

4.使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z

命令:mkdir -p /tmp/{a{1/{a,b},2},{x,q}_{y,z}}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 万物皆是文件 在unix里面这是一句很有名的话: 在linux系统的大多数资源都以文件形式存在,包括文件 目录...
    deppyu阅读 2,288评论 0 51
  • inode是什么 理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector...
    狗尾巴草败了阅读 709评论 0 0
  • 姓名:李振华 学号:17101223418 【嵌牛导读】:文件系统是linux的一个十分基础的知识,同时也是学习...
    大华华0504阅读 273评论 0 1
  • 姓名:李振华 学号:17101223418 【嵌牛导读】:文件系统是linux的一个十分基础的知识,同时也是学习...
    大华华0504阅读 634评论 0 2
  • 1、文件系统与目录结构 在不重启的情况下,磁盘扫描搜索新增加的磁盘的方法: echo '- - -' > /sys...
    tiny9999阅读 1,436评论 0 0