zoukankan      html  css  js  c++  java
  • Linux文件系统及常用命令

    Linux 文件系统的特性:

    • super block(超级块):记录整个文件系统的信息,包括 block 与 inode 的总量,已经使用的 inode 和 block 的数量,未使用的 inode 和 block 的数量,block 与 inode 的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。
    • date block(数据块,也称作 block):用来实际保存数据的(柜子的隔断),block 的大小(1KB、2KB 或 4KB)和数量在格式化后就已经决定,不能改变,除非重新格式化(制作柜子的时候,隔断大小就已经决定,不能更改,除非重新制作柜子)。每个 blcok 只能保存一个文件的数据,要是文件数据小于一个 block 块,那么这个 block 的剩余空间不能被其他文件是要;要是文件数据大于一个 block 块,则占用多个 block 块。Windows 中磁盘碎片整理工具的原理就是把一个文件占用的多个 block 块尽量整理到一起,这样可以加快读写速度。
    • inode(i 节点,柜子门上的标签):用来记录文件的权限(r、w、x),文件的所有者和属组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。

    Linux 目录结构:

    目 录 名 目录的作用
    /bin/ 存放系统命令的目录,普通用户和超级用户都可以执行。 是/usr/bin/目录的软链
    /sbin/ 存放系统命令的目录, 只有超级用户才可以执行。是/usr/sbin/目录的软链接
    /usr/bin/ 存放系统命令的目录,普通用户和超级用户都可以执行
    /usr/sbin/ 存放系统命令的目录, 只有超级用户才可以执行
    /boot/ 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
    /dev/ 设备文件保存位置
    /etc/ 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件
    全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等
    /home/ 普通用户的家目录。在创建用户时,每个用户要有一个默认登录和保存自己数据
    的位置,就是用户的家目录,所有普通用户的宿主目录是在/home/下建立一个和
    用户名相同的目录。如用户 user1 的家目录就是/home/user1/
    /lib/ 系统调用的函数库保存位置。是/usr/lib/的软链接
    /lib64/ 64 位函数库保存位置。是/usr/lib64/的软链接
    /lost+found/ 当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的
    过程中 fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分
    区中出现,例如/lost+found 就是根分区的备份恢复目录, /boot/lost+found 就是
    /boot 分区的备份恢复目录
    /media/ 挂载目录。系统建议是用来挂载媒体设备的,如软盘和光盘
    /misc/ 挂载目录。系统建议用来挂载 NFS 服务的共享目录。我们在刚刚已经解释了挂载,
    童鞋们应该知道只要是一个已经建立的空目录就可以作为挂载点。那么系统虽然
    准备了三个默认挂载目录/media/mnt/misc,但是到底在哪个目录中挂载什么
    设备都可以由管理员自己决定。例如超哥接触 Linux 的时候,默认挂载目录只有
    /mnt 一个,所以养成了在/mnt 下建立不同目录挂载不同设备的习惯。如
    /mnt/cdrom 挂载光盘, /mnt/usb 挂载 U 盘,这都是可以的
    /mnt/ 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。现在系统建议这个
    目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
    /opt/ 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装
    的源码包软件都可以安装到这个目录中。不过超哥还是习惯把软件放到
    /usr/local/目录中,也就是说, /usr/local/目录也可以用来安装软件
    /proc/ 虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保
    存系统的内核、进程、外部设备状态和网络状态等。如/proc/cpuinfo 是保存 CPU
    信息的, /proc/devices 是保存设备驱动的列表的, /proc/filesystems 是保存文件系统列表,/proc/net是保存网络协议的。
    /sys/ 虚拟文件系统。和/proc/目录相似,该目录中的数据都保存在内存中,主要保存
    与内核相关的信息
    /root/ root 的宿主目录。普通用户宿主目录在/home/下, root 宿主目录直接在“/”下
    /run/ 系统运行时产生的数据,如 ssidpid 等相关数据。 /var/run/是此目录的软链接
    /srv/ 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
    /tmp/ 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。
    我们建议此目录中不能保存重要数据,最好每次开机都把该目录清空
    /usr/ 系统软件资源目录。注意 usr 不是 user 的缩写,而是“UNIX Software Resource
    的缩写,所以不是存放用户数据的目录,而是存放系统软件资源的目录。系统中
    安装的软件大多数保存在这里
    /usr/lib/ 应用程序调用的函数库保存位置
    /usr/local/ 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置
    /usr/share/ 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
    /usr/src/ 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过
    超哥更习惯把手工下载的源码包保存到/usr/local/src/目录中,把内核源码保存到
    /usr/src/kernels/目录中
    /usr/src/kernels/ 内核源码保存位置
    /var/ 动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件
    /var/www/html/ RPM 包安装的 Apache 的网页主目录
    /var/lib/ 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在
    /var/lib/mysql/目录中
    /var/log/ 系统日志保存位置
    /var/run/ 一些服务和程序运行后,它们的 PID(进程 ID)保存位置。是/run/目录的软链接
    /var/spool/ 放置队列数据的目录。就是排队等待其他程序使用的数据,比如邮件队列和打印
    队列
    /var/spool/mail/ 新收到的邮件队列保存位置。系统新收到的邮件会保存在此目录中
    /var/spool/cron/ 系统的定时任务队列保存位置。系统的计划任务会保存在这里

    Linux 常见文件系统

    文件系
    描 述
    ext Linux 中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用
    ext2 是 ext 文件系统的升级版本, Red Hat Linux 7.2 版本以前的系统默认都是 ext2 文件
    系 统 。 于 1993 年 发 布 , 支 持 最 大 16TB 的 分 区 和 最 大 2TB 的 文 件
    (1TB=1024GB=1024×1024KB)
    ext3 是 ext2 文件系统的升级版本,最大的区别就是带日志功能, 以便在系统突然停止时
    提高文件系统的可靠性。支持最大 16TB 的分区和最大 2TB 的文件
    ext4 是 ext3 文件系统的升级版。 ext4 在性能、伸缩性和可靠性方面进行了大量改进。 ext4
    的变化可以说是翻天覆地的,比如向下兼容 ext3、最大 1EB 文件系统和 16TB 文件、无
    限数量子目录、 Extents 连续数据块概念、 多块分配、延迟分配、持久预分配、快速 FSCK、
    日志校验、无日志模式、在线碎片整理、 inode 增强、默认启用 barrier 等。它是 CentOS
    6.x 的默认文件系统
    xfs XFS 最早针对 IRIX 操作系统开发,是一个高性能的日志型文件系统,能够在断电以及
    操作系统崩溃的情况下保证文件系统数据的一致性。它是一个 64 位的文件系统,后来
    进行开源并且移植到了 Linux 操作系统中,目前 CentOS 7.x 将 XFS+LVM 作为默认的文
    件系统。据官方所称, XFS 对于大文件的读写性能较好。
    swap swap 是 Linux 中用于交换分区的文件系统(类似于 Windows 中的虚拟内存),当内存
    不够用时,使用交换分区暂时替代内存。一般大小为内存的 2 倍,但是不要超过 2GB。
    它是 Linux 的必需分区
    NFS NFS 是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件
    共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源
    iso9660 光盘的标准文件系统。 Linux 要想使用光盘,必须支持 iso9660 文件系统
    fat 就是 Windows 下的 fat16 文件系统,在 Linux 中识别为 fat
    vfat 就是 Windows 下的 fat32 文件系统,在 Linux 中识别为 vfat。支持最大 32GB 的分区
    和最大 4GB 的文件
    NTFS 就是 Windows 下的 NTFS 文件系统,不过 Linux 默认是不能识别 NTFS 文件系统的,如
    果需要识别,则需要重新编译内核才能支持。它比 fat32 文件系统更加安全,速度更快,
    支持最大 2TB 的分区和最大 64GB 的文件
    ufs Sun 公司的操作系统 Solaris 和 SunOS 所采用的文件系统
    proc Linux 中基于内存的虚拟文件系统,用来管理内存存储目录/proc
    sysfs 和 proc 一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs
    tmpfs 也是一种基于内存的虚拟文件系统,不过也可以使用 swap 交换分区

    常用的硬盘管理命令

    Linux df命令

    语法

    df [选项]... [FILE]...
    • 文件-a, --all 包含所有的具有 0 Blocks 的文件系统
    • 文件--block-size={SIZE} 使用 {SIZE} 大小的 Blocks
    • 文件-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...)
    • 文件-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
    • 文件-i, --inodes 列出 inode 资讯,不列出已使用 block
    • 文件-k, --kilobytes 就像是 --block-size=1024
    • 文件-l, --local 限制列出的文件结构
    • 文件-m, --megabytes 就像 --block-size=1048576
    • 文件--no-sync 取得资讯前不 sync (预设值)
    • 文件-P, --portability 使用 POSIX 输出格式
    • 文件--sync 在取得资讯前 sync
    • 文件-t, --type=TYPE 限制列出文件系统的 TYPE
    • 文件-T, --print-type 显示文件系统的形式
    • 文件-x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
    • 文件-v (忽略)
    • 文件--help 显示这个帮手并且离开
    • 文件--version 输出版本资讯并且离开
    [root@iZbp143t3oxhfc3ar7jey0Z dns]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        1.9G     0  1.9G   0% /dev
    tmpfs           1.9G     0  1.9G   0% /dev/shm
    tmpfs           1.9G  644K  1.9G   1% /run
    tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/vda1        40G  8.0G   30G  22% /
    tmpfs           379M     0  379M   0% /run/user/0

    Linux du命令

    Linux du命令用于显示目录或文件的大小。

    du会显示指定的目录或文件所占用的磁盘空间。

    语法

    du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]

    参数说明

    • -a或-all 显示目录中个别文件的大小。
    • -b或-bytes 显示目录或文件大小时,以byte为单位。
    • -c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
    • -D或--dereference-args 显示指定符号连接的源文件大小。
    • -h或--human-readable 以K,M,G为单位,提高信息的可读性。
    • -H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
    • -k或--kilobytes 以1024 bytes为单位。
    • -l或--count-links 重复计算硬件连接的文件。
    • -L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
    • -m或--megabytes 以1MB为单位。
    • -s或--summarize 仅显示总计。
    • -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
    • -x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
    • -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
    • --exclude=<目录或文件> 略过指定的目录或文件。
    • --max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
    • --help 显示帮助。
    • --version 显示版本信息。
    [root@iZbp143t3oxhfc3ar7jey0Z dns]# du -sh /
    du: cannot access ‘/proc/24763/task/24763/fd/3’: No such file or directory
    du: cannot access ‘/proc/24763/task/24763/fdinfo/3’: No such file or directory
    du: cannot access ‘/proc/24763/fd/4’: No such file or directory
    du: cannot access ‘/proc/24763/fdinfo/4’: No such file or directory
    7.9G    /

    du 与 df 的区别: du 是用于统计文件大小的,统计的文件大小是准确的; df 是用于统计空间大小的,统计的剩余空是准确的 ,df比du大,是把临时文件都算进去了。

    Linux fsck命令

    Linux fsck命令用于 检查与修复 Linux 档案系统,可以同时检查一个或多个 Linux 档案系统。

    语法

    fsck [-sACVRP] [-t fstype] [--] [fsck-options] filesys [...]

    参数 

    • filesys : device 名称(eg./dev/sda1),mount 点 (eg. / 或 /usr)
    • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
    • -s : 依序一个一个地执行 fsck 的指令来检查
    • -A : 对/etc/fstab 中所有列出来的 partition 做检查
    • -C : 显示完整的检查进度
    • -d : 列印 e2fsck 的 debug 结果
    • -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
    • -R : 同时有 -A 条件时,省略 / 不检查
    • -V : 详细显示模式
    • -a : 如果检查有错则自动修复
    • -r : 如果检查有错则由使用者回答是否修复
    [root@iZbp143t3oxhfc3ar7jey0Z dns]# fsck –y /dev/sdb1

    注:此命令不要执行,因为在系统启动的时候也会执行修复命令,能修复的话,那个时候就已经修复了。

    Linux  dumpe2fs命令

    [root@iZbp143t3oxhfc3ar7jey0Z dns]# dumpe2fs -h  /dev/vda1
    dumpe2fs 1.42.9 (28-Dec-2013)
    Filesystem volume name:   <none>
    Last mounted on:          /
    Filesystem UUID:          1114fe9e-2309-4580-b183-d778e6d97397
    Filesystem magic number:  0xEF53
    Filesystem revision #:    1 (dynamic)
    Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
    Filesystem flags:         signed_directory_hash
    Default mount options:    user_xattr acl
    Filesystem state:         clean
    Errors behavior:          Continue
    Filesystem OS type:       Linux
    Inode count:              2621440
    Block count:              10484164
    Reserved block count:     471777
    Free blocks:              8102524
    Free inodes:              2381953
    First block:              0
    Block size:               4096
    Fragment size:            4096
    Reserved GDT blocks:      1021
    Blocks per group:         32768
    Fragments per group:      32768
    Inodes per group:         8192
    Inode blocks per group:   512
    Flex block group size:    16
    Filesystem created:       Thu Jul 11 10:52:00 2019
    Last mount time:          Tue Mar 17 18:42:14 2020
    Last write time:          Wed Mar 18 02:42:12 2020
    Mount count:              8
    Maximum mount count:      -1
    Last checked:             Thu Jul 11 10:52:00 2019
    Check interval:           0 (<none>)
    Lifetime writes:          20 GB
    Reserved blocks uid:      0 (user root)
    Reserved blocks gid:      0 (group root)
    First inode:              11
    Inode size:               256
    Required extra isize:     28
    Desired extra isize:      28
    Journal inode:            8
    First orphan inode:       1447930
    Default directory hash:   half_md4
    Directory Hash Seed:      0163c9aa-b271-4625-b08d-5a774c70359e
    Journal backup:           inode blocks
    Journal features:         journal_incompat_revoke
    Journal size:             128M
    Journal length:           32768
    Journal sequence:         0x0006551c
    Journal start:            4069
    
    [root@iZbp143t3oxhfc3ar7jey0Z dns]#

    Linux stat命令

    stat以文字的格式来显示inode的内容。

    语法

    stat [文件或目录]
    [root@iZbp143t3oxhfc3ar7jey0Z tmp]# touch abc
    [root@iZbp143t3oxhfc3ar7jey0Z tmp]# stat abc
      File: ‘abc’
      Size: 0               Blocks: 0          IO Block: 4096   regular empty file
    Device: fd01h/64769d    Inode: 1183621     Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2020-04-09 22:58:48.523933945 +0800
    Modify: 2020-04-09 22:58:48.523933945 +0800
    Change: 2020-04-09 22:58:48.523933945 +0800
     Birth: -
    [root@iZbp143t3oxhfc3ar7jey0Z tmp]#

    判断文件类型

    file 文件名 判断文件类型
    type 命令名 判断命令类型

    [root@iZbp143t3oxhfc3ar7jey0Z tmp]# file abc
    abc: ASCII text
  • 相关阅读:

    双向链表
    obs分析 笔记
    循环链表
    静态链表
    链式顺序表
    线性表
    ffmpeg-4.1.1-win64-dev在vs2017的搭建
    G1 与 CMS 两个垃圾收集器的对比
    垃圾回收算法有几种类型? 他们对应的优缺点又是什么?
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12670382.html
Copyright © 2011-2022 走看看