• Linux之文件类指令(1)


    Linux之文件类指令

    Author:Onceday date:2022年7月29日

    Linux基础知识整理系列,不积跬步无以至千里。

    1.引言

    在Linux里,每个硬件都被当成一个文件来看待。

    常见硬件的设备名(持续更新):

    设备设备在linux中的文件名
    SCSI/SATA/USB磁盘驱动器/dev/sd[a-p]
    U盘/dev/sd[a-p]
    虚拟磁盘Virtio接口/dev/vd[a-p]
    软盘驱动器/dev/fd[0-7]
    打印机/dev/lp[0-2],25针接口;/dev/usb/lb[0-15],USB接口
    鼠标/dev/input/mouse[0-15]通用;/dev/psaux(PS/2接口)/dev/mouse(当前鼠标)
    CD-ROM/DVD-ROM/dev/scd[0-1];/dev/sr[0-1];/dev/cdrom当前CD-ROM
    磁带机/dev/ht0;/dev/st0;.dev/tape当前磁带
    IDE磁盘驱动器/dev/hd[a-d]

    2.MBR和GPT分区格式

    MBR(Master Boot Record),主引导记录。

    这种分区格式, 通常把启动引导程序记录区和分区表放在磁盘的第一个扇区。

    该扇区通常是512字节,其中446字节用来存放启动引导程序。

    剩余的64字节用来存放分区表,最多有四组记录。每组记录了该区段的起始和结束的柱面号码。

    这四个分区记录,被称为主要分区(Primary),其固定分配/dev/sda1-4四个名字。

    可以拿主要分区的空间来存放扩展分区(Extended),其指向分区存放有额外的分区表

    扩展分区的分配号码从/dev/sda[5, xx]开始,最低序号为5。

    由扩展分区划分出来的多个新分区,称为逻辑分区(logical partition)。

    其具有以下两个较大的缺陷:

    • 操作系统无法使用2.2TB以上的磁盘容量

    • MBR仅有一个区块,若被破坏后,经常无法或很难恢复。

    GPT(GUID partition table)磁盘分区表

    使用逻辑区块地址LBA(Logical Block Address)来替代扇区概念,其大小默认为512字节。

    GPT使用开头的34个LBA区块来记录分区信息,此外还使用磁盘最后的34个LBA拿来做另外一个备份。

    LBA0区块用来兼容MBR分区格式:

    该分区的格式和MBR一样,但放入了一个特殊标识符,可以表明此磁盘是GPT格式之意。

    LBA1(GPT表头记录)

    记录了分区表本身的位置和大小,同时记录了备份用的GPT分区放置的位置,以及分区表的校验码(CRC-32),

    LBA2-33(实际记录分区记录)

    从LBA2区块开始,每个LBA都可以记录4组分区记录,所以在默认的情况下,总共可以有4x32=128 组分区记录,每组LBA有512字节,每组记录用到128字节的空间,GPT在每组记录中分别提供64位来记录开始/结束的扇区号码。因此单个最大空间高达1ZB。

    3.启动流程中的BIOS和UEFI启动检测程序

    流程如下:

    1. BIOS(Basic Input Output System),基本输入输出系统:启动主动执行的固件,会认识到第一个可启动的设备。

    2. MBR(Master Boot Record),主分区记录:第一个可启动设备的第一个扇区内的主引导记录块,内含启动引导代码。

    3. 启动引导程序(boot loader):一个可读取内核文件来执行的软件

    4. 内核文件:开始启动操作系统

    注意: 如果分区表为GPT格式,BIOS可以从LBA0的MBR兼容区块读取第一阶段的启动引导程序代码,如果启动引导程序能够支持GPT,那么BIOS同样可以读取到正确的操作系统内核。如果启动代码不懂GPT,那么无法读取内核文件,也就无法启动。

    Boot loader的主要任务有以下部分:

    • 提供选项:用户可以选择不同的启动选项,这也是多重引导的重要功能。

    • 加载内核文件:直接指向可使用的程序区段来启动操作系统。

    • 转交其他启动引导程序:将启动管理功能转交给其他启动引导程序负责。

    启动引导程序除了可以安装在MBR之外,还可以安装到每个分区的启动扇区(boot sector)

    UEFI(Unified extensible Firmware interface),统一可扩展固件接口。

    以下是UEFI和传统BIOS的差异:

    比较项目传统BIOSUEFI
    使用程序语言汇编语言C语言
    硬件资源控制使用中断(IRQ)管理/不可变的内存存取/不可变的输入/输出存取使用驱动程序与协议
    处理器运行环境16位CPU保护模式
    扩充方式通过IRQ连接直接加载驱动程序
    第三方厂商支持较差较佳且可支持多平台
    图形能力较差较佳
    内置简化操作系统环境不支持支持

    一般而言,BIOS boot需要一个额外的分区,一般2MB大小,存放实际的启动程序。

    UEFI则需要一个FAT格式的文件系统分区(/boot),大约500MB到1GB大小。

    因此现在前两个分区一般都是他们占用了,实际磁盘分区都会从/dev/sda3开始了。

    4.X windows与命令行切换

    LInux默认有六个终端存在,X Windows启动在tty1

    使用[Ctrl]+[Alt]+[F1-F6]指令便可以进行切换。

    使用su 用户名可以切换用户。

    使用exit可以注销登入。

    使用locale可查看使用的语系。

    使用以下两个指令可切换到英文(中文下,终端会有乱码)

    LANG=en_US.utf8
    export LC_ALL=en_US.utf8
    
    • 1
    • 2

    5.Linux的基础命令

    5.1 日期时间
    date #按默认格式直接输出日期时间
    date --help #获取帮助文档
    
    • 1
    • 2

    显示日历:

    cal #默认显示当月时间
    cal 2022 #显示这一年的日历
    cal 10 2022 #显示此年该月的日历
    
    • 1
    • 2
    • 3
    5.2 man page 查看详细的命令操作说明
    man date
    
    • 1

    查询的date(1)的数字含义如下:

    代号代表内容
    1用户在shell环境中可以操作的命令或可执行文件
    2系统内核可调用的函数和工具
    3一些常用的函数(function)与函数库(library),大部分为c的函数库(libc)
    4设备文件的说明,通常在/dev下的文件
    5配置文件或者某些文件的格式
    6游戏(games)
    7惯例与协议等,例如Linux文件系统,网络协议,ASCII代码等的说明
    8系统管理员可用的管理命令
    9跟内核有关的文件

    man page常用按键:

    按键进行工作
    空格键向下翻一页
    Page Down向下翻一页
    Page Up向上翻一页
    Home去到第一页
    [End]去到最后一页
    /string向下查找string这个字符串
    ?string向上查找string这个字符串
    n,N利用/或?查找字符串,可以使用他们
    q结束这次man page

    在linux上可以使用info xxx来代替,可提供超链接能力,操作与man类似。

    更多额外的文档帮助可以在:/usr/share/doc下面查一查。

    5.3 简单的文本编辑器Nano

    直接使用即可,比较简单,有中文介绍。

    5.4 正确关机方法

    首先需要内存数据同步写回磁盘。

    sync     #同步所有缓存文件
    sync [-f] 文件 #同步该文件及他所包含的文件系统
    sync [-d] 文件 #仅同步文件数据,不处理无需同步的元数据
    
    • 1
    • 2
    • 3

    然后可以使用以下的命令进行不同的操作:

    shutdown  #1分钟后关机
    shutdown -h #立即关机
    shutdown -c #取消关机
    shutdown -k #假装要关机
    shutdown -r #重新启动
    
    • 1
    • 2
    • 3
    • 4
    • 5

    以下三个命令也很常用:

    reboot  #重新启动
    halt    #系统停止
    poweroff #系统关机
    
    • 1
    • 2
    • 3

    6.Linux的文件权限与目录配置

    6.1 引言

    用户账号信息保存在/etc/passwd

    个人密码信息保存在/etc/shadow

    所有组名信息记录在/etc/group

    使用命令ls -al查看所有文件和属性:

    [[-][rwxrwx---]][1][root][root][1456][May 4 18:25][xxxx.xxx]

    其输出行形式如图所示:

    • 第一个斜杠字符代表了文件类型:

      [l]表示链接,

      [-]表示文件,

      [d]表示目录,

      [b]表示设备文件里面可供存储的周边设备,

      [c]表示为设备文件里面的串行端口设备,例如键盘、鼠标。

      [s]数据接口文件,如sockets。

      [p]数据输送文件(FIFO,pipe)

    • [1]这个表示链接数。

    • 后面依次是文件拥有者、文件所属用户组、大小、修改时间、文件名。

    6.2 修改文件属性与权限

    修改文件所属用户组:

    chgrp 用户组 [-R]  目录/文件   #-R用于文件目录下的递归修改
    
    • 1

    修改文件拥有者:

    chown [-R] 账号名[:用户组名] 文件/目录 #-R用于文件目录下的递归修改
    
    • 1

    修改文件权限:

    对于标准的9位权限:rwxrwxrwx

    将每一位看成2进制,则可以看成三个数字[xyz]:[rwx][rwx][rwx]=[0-7][0-7][0-7]

    常用指令如下:

    chmod [-R] xyz 文件/目录 #-R用于文件目录下的递归修改
    
    • 1

    可以使用以下组合进行细节修改:

    命令参数方式权限对象
    chmodu(user)/g(group)/o(others)/a(all)+(加入)/-(移除)/=(设置)r/w/x文件/目录

    示例如下:

    chmod u=rwx,go=rx  .bashrc
    chmod a+w .bashrc
    
    • 1
    • 2
    6.3 目录和权限的具体含义

    rwx对文件来说,意义如下:

    • r(read):可以读取此文件的实际内容,如读取文本文件的文字内容。

    • w(write):可以编辑、新增或是修改该文件的内容(但不含删除该文件)。

    • x(execute):该文件具有可以被系统执行的权限。

    rwx对于目录来说,意义如下:

    • r(read contents in directory)读取目录结构列表的权限,如使用ls命令浏览文件。

    • w(modify contents of directory)具有改动该目录结构列表的权限。

      1.建立新的文件和目录

      2.删除已经存在的文件和目录

      3.将已存在的文件和目录进行更名

      4.移动该目录内的文件、目录位置

    • x(access directory),是否可以把当前目录变成工作目录

    6.4 文件配置标准FHS(Filesystem Hierarchy Standard)

    常见的三层目录架构:

    • /(root,根目录),与启动系统有关。

    • /usr(unix software resource),与软件安装/执行有关。

    • /var (variable),与系统运行过程有关。

    FHS定义的根目录下面的目录:

    目录应放置的文件内容
    /bin存放执行文件的地方,一般由root直接调用
    /boot存放启动会使用到的文件,如内核vmlinuz,启动引导程序/grub2
    /devlinux上的任何设备和接口设备都是以文件的形式存放在这个目录里面
    /etc系统的主要配置文件几乎都放置在这个目录里面,如账户密码,服务的启动文件。
    /lib系统的库函数
    /media放置多媒体设备
    /mnt暂时挂载某些额外的设备
    /opt给第三方辅助软件放置的目录
    /run启动后运行产生的各类信息
    /sbin启动过程(启动、修复、还原系统)所需的命令
    /srv网络服务启动后,其所需的数据目录
    /tmp让一般用户或者正在执行的程序暂时放置文件的地方,任何人都能存取。
    /home系统默认的用户家目录
    /root系统管理员的家目录
    /lost+found使用标准的ext2、ext3、ext4文件格式产生的目录,用于发生错误时,存放一些片段。
    /proc虚拟文件系统,数据在内存中,如系统内核,进程信息,外接设备的状态等
    /sys虚拟文件系统,记录内核与系统硬件信息相关的内容。
    /usr/bin所有一般用户能够使用的命令都在这里。
    /usr/lib/lib一样,直接链接,存放函数库文件
    /usr/local安装的本机自己下载的软件
    /usr/sbin非系统正常运行所需的系统命令,/sbin直接链接
    /usr/share放置只读的数据文件,包括共享文件,比如帮助文档
    /usr/include程序语言用到的各类头文件
    /usr/src一般的源代码文件
    /var/cache程序运行过程的缓存
    /var/lib程序本身执行过程中,需要使用到的数据文件放置的目录。
    /var/log日志文件放置的地方
    /var/mail放置个人电子邮件的目录
    /var/run某些程序或者服务启动后,会将它们的PID放置在该目录下。
  • 相关阅读:
    形式化定义软件动态更新
    2020华数杯全国大学生数学建模竞赛C题-脱贫帮扶绩效评价(五)(附MATLAB和SPSS代码)
    【计算机毕设选题推荐】蛋糕甜品店管理系统SpringBoot+SSM+Vue
    通过git服务提高端侧开发调试效率
    人工智能指数报告2023
    怎么提取一个python文件中所有得函数名称
    leetcode 367 有效的完全平方数
    LIO-SAM论文与代码总结
    Traceroute
    【广度优先搜索】leetcode 994. 腐烂的橘子
  • 原文地址:https://blog.csdn.net/Once_day/article/details/126056280