zoukankan      html  css  js  c++  java
  • Linux文件系统简介一(磁盘分区、开机过程、目录结构、文件权限、文件扩展名、目录管理)

    Linux:就是一组软件,一套操作系统=核心+系统呼叫接口层。

    1、操作系统

    操作系统 = 核心(内核) + 系统呼叫(接口)

    操作系统其实也是一组程序,重点在于管理计算机的所有活动以及驱动系统中的所有硬件。

    初识操作系统,我们从一张图片开始:

     

    核心:即是我们通常所说的操作系统内核,其主要负责整个计算机系统相关的资源分配与管理,可归纳为以下几大核心功能

    • 程序管理:程序资源分配及调度执行等管理。
    • 内存管理:内存的控制与使用。
    • 文件系统管理:文件格式支持,数据输入/输出等等。
    • 硬件驱动管理:驱动硬件供使用这是内核的主要工作,目前都支持【可加载模块】方式管理硬件。

    系统呼叫接口:方便程序开发者可以轻易透过与内核的沟通,使用硬件资源。 

    2、计算机组成

    冯诺依曼提出的计算机基本工作原理:

    1. 用二进制形式表示数据和指令;
    2. 采用存储程序方式执行;
    3. 计算机由算数逻辑运算器、控制器、存储器、输入设备和输出设备5大部分组成。[运控存入出]

     

    CPU的组成:运算器+高速缓冲存储器 

    实体计算机内部结构:

     

    上图是Intel生产的典型的x86架构主板。

    3、计算机开机过程

    1.BIOS:写入到主板上的一个软件程序,BIOS在开机的时候,计算机系统会主动执行的第一个程序。BIOS会去分析计算机里面有哪些存储设备,比如:以硬盘为例,BIOS会依据使用者的设定去取得能够开机的硬盘,并且到该硬盘里面去读取第一个扇区的MBR位置。BIOS工作结束,MBR内的开机管理程序开始工作。

    2.MBR存放的内容:放置最基本的开机管理程序。MBR的目的:是在加载(load)核心档案,这个开始管理程序是系统提供的,所以去读取核心档案,核心档案开始工作,开机管理程序结束。

    3.开机管理程序(boot loader):一支可读取核心档案来执行的软件。

    • 提供选单:用户可以通过选择不同的开机项目,多重引导,即安装不同的系统。
    • 载入核心档案:直接指向开机的程序区段来开始操作系统。
    • 转交给其他loader:将开机管理功能转交给其他loader负责。

    4.核心档案:开始操作系统的功能... 

    CMOS:记录各项硬件参数且嵌入在主板上的存储器。

      台式机与笔记本开机过程有些许差异,但主要过程大致相同:按下开机键 –> EC检测到开机键(高低电平变化)-> CPU上电完成并获得控制权 -> 读取BIOS及CMOS中参数完成系统所有设备上电和自检 -> CPU根据BIOS设置的顺序找到第一个可开机设备,读取其第一个扇区MBR所在的位置 -> CPU运行扇区MBR中的开机管理程序(boot loader),boot loader程序则根据分区表找到可启动分区并加载其中的系统内核(核心档案) -> 完成开机。

    开机过程,可通过流程图如下:

    红色字体是需求我们留意的,其中涉及到这样几个概念或者实体:第一个扇区、boot loader、分区表及系统内核。

    开机管理示意图如下:MBR提供2个选单,建议一般先安装windows[安装程序会主动覆盖掉MBR以及自己所在分割槽的启动扇区]在安装linux[因为linux可以进行选择将开机管理程序安装在MBR或各别分割槽的启动扇区].

    4、磁盘概览

      由于机械硬盘更形象,因此这里以机械硬盘来介绍上述的概念。当下固态在逐步成为主流,其与机械硬盘最大的区别在于工作原理:固态硬盘是以半导体状态做记忆介质,机械硬盘是以磁作为记忆介质。

     

    硬盘容量=磁头数*磁轨数*扇区数*扇区大小(512Bytes)

    =读取头*上下总共n圈磁轨的数量*一圈扇区口的数量*扇区口的大小(512Bytes)

    硬盘的数据存储在一个个的盘片上,每个盘片由多个同心圆磁轨组成,每个磁轨又由多个扇区组成。扇区是数据存储的基本单位,人为规定每个扇区大小为512Bytes。硬盘可以有多个盘片,每个盘片上相同的磁轨组成了磁柱,而磁柱是分区的基本单位。

    磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头与主轴马达。数据写入是在磁盘盘上面,磁盘盘上面又可细分出扇区(sector)与磁柱(Cylinder)。扇区大小默认是512bytes。磁盘盘如下:

    磁盘的扇区并不是都一样重要,最重要的是磁盘的第一个扇区,因为它记录了整颗磁盘的重要信息,主要有以下两个重要信息:

    1. MBR(Master Boot Record)主要启动记录区,大小446Bytes,用于安装开机管理程序;
    2. 分割表(partition table),记录整颗硬盘的分割状态,64Bytes。

    4.1 磁盘分区

    文件系统的最小单位:开始磁柱和结束磁柱,也是分割槽的最小单位。利用参考对照磁柱号码的方式进行处理。

    分割表所在的64Bytes容量中,总共分为四组记录区,每组记录区记录了该区段(分区)的启始与结束的磁柱号码。

    仅有主分区磁盘分区,磁盘分区表的作用示意图:

    假设该磁盘只有400个磁柱,共分割成为四个分割槽,第四个分割槽起始位置是从301开始,400号磁柱的范围。

    从windaow角度:第一个到第四个分割槽的代码应该是C,D,E,F。当你的资料写入F槽时,你的数据会被写入这颗磁盘的301~400磁柱之间。

    //假设上面的硬盘装置文件名
    /dev/hda
    //四个分割槽在linux系统中的装置文件名,重点是档案名后面会再接一个数字,数字与分割槽所在的位置有关
    p1:/dev/hda1
    p2:/dev/hda2
    p3:/dev/hda3
    p4:/dev/hda4

    引入扩展分区磁盘分区,磁盘分区表的作用示意图:

    硬盘的四个分割记录仅使用了两个,P1为主要分割,P2则为扩展分区。

    注意,引入扩展分区的目的:使用额外的扇区来记录分割信息,扩展分区本身并不能被拿来格式化。需要将扩展分区的分区段继续分割后(分割后的分区成为逻辑分区)才能进一步格式化。

     

    //假设上面的硬盘装置文件名
    /dev/hda
    //分割槽在linux系统中的装置文件名。P开始的分区保留3和4,L开头的逻辑分区的装置名称从5开始。
    p1:/dev/hda1[主分区]
    p2:/dev/hda2
    L1:/dev/hda5
    L2:/dev/hda6
    L3:/dev/hda7
    L4:/dev/hda8
    L5:/dev/hda9
    //缺少/dev/hda3、/dev/hda4的原因:前面4个号码都是保留给Primary或Extended。Extened分区本身并不能进行进行结构化。

    总结:

    1. 主要分区与扩展分区最多有四个(硬盘的限制)。
    2. 扩展分区最多只能有一个。
    3. 逻辑分区是由扩展分区切割出来的分割槽。
    4. 能够被格式化,作为数据存取的分区只有主要分区和逻辑分区,扩展分区无法格式化。
    5. 逻辑分区的数量根据操作系统而定,比如linux:IDE硬盘最多有59个逻辑分区(5-63号),SATA硬盘则有11个逻辑分区(5-15号)。

    4.2 加载系统

      加载系统主要用到第一颗可启动设备的第一个扇区的MBR位置。MBR里面放置的就是最基本的开机管理程序(boot loader),它的作用就是加载操作系统内核。Boot loader有3项基本任务:

    • 提供选单:当有多重引导时,可同用户选择不同的开机项目;
    • 载入系统内核:指向可开机的程序区段来开始操作系统;
    • 转交其他loader:将开机管理功能转交其他loader负责------能实现多重引导的根本。

    PS:如果电脑安装多系统,需要先安装windows系统,在安装linux系统。

    5 Linux目录结构

      在Linux系统中,所有数据都是以文件[档案的形态]形式呈现,因此整个Linux系统最重要的地方就在于目录树架构。所谓目录树架构就是以根目录为主,然后向下呈树形分支状的目录结构,因此目录树架构最重要的就是根目录,在Linux中以一条斜线/表示。目录树的呈现方式如下图所示:

     

    所有的文件都是由根目录(/)来的,而次目录之下还能够有其他的数据存在。比如上图长方形表示目录,波浪形为文件。

    至于系统有哪些目录,以及各种目录放置哪些数据,为了规范这些东西,于是就有了所谓的FHS(Filesystem Hierachy tandard)。FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否与是否允许使用者随便更动,而将目录定义成为四种交付作用的形态:

    • 可分享的:可以分享给其他系统挂载使用功能的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录。
    • 不可分享的:自己机器上面运作的装置档案或者是程序有关的socket档案等,只与机器本身有关,不适合分享给其他主机。
    • 不变的:数据不会经常变动,比如:函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等
    • 可变动的:经常改变的数据,例如登录文件、一般用户可自动收受的新闻组等。

    事实上,FHS针对目录树架构仅定义出三层目录下应该放置的数据:

    • /(根目录) : 与系统开机、回复、备份相关;
    • /usr(unix software resource) : 与软件安装/执行相关;
    • /var(variable): 与系统运行过程有关。包括快取(cache)、log日志(log file)以及某些软件运作所产生的档案, 包括程序档案(lock file, run file).

    目录树的特性:

    • 目录的起始点为根目录(/,root)
    • 每一个目录不止能使用本地端的partition的文件系统,也可以使用网络上的filesystem。比如:利用Networdk File System(NFS)服务器挂载某特定目录等。
    • 每一个档案在此目录树中的文件名(包含完整路径)都是独一无二的。

    目录树架构示意图如下:

    绝对路径与相对路径:

    • 绝对路径:由根目录(/)开始写起的文件名或目录名称,例如/home/dmtsai/.bashrc。
    • 相对路径:./home/dmtsai或../../home/dmtsai/等等,反正开头不是/就属于相对路径的写法。
    // 其中.表示当前的目录: ./ 
    //当前目录所在位置:/var/spool/mail;需求:进入/var/spool/log目录
    cd ./log
    //..表示上一层目录: ../ 
    //当前所在目录:/var/spool/mail/目录;需求:进入/var/spool/scron/目录
    cd /var/spool/mail
    cd ../cron 

    FHS官方文档可参看: http://www.pathname.com/fhs

    6 分区挂载与目录映射

      截止目前,我们知道整个Linux系统使用的是目录树架构,但是我们的文档数据其实是放置磁盘分区中,所以现在的问题是“如何结合目录树架构与磁盘分区内的数据?”答案是“挂载(mount)”。

      挂载:就是利用一个目录当成进入点,将磁盘分区中的数据放置在该目录下;换种说法就是,进入该目录就可以读取到相应分区内的数据。将目录与分区映射这个动作就叫“挂载”,进入点的目录就叫挂载点。

    目录树与分割区之间的相关性:

      假设我的硬盘分为2个区,分区1是挂载到根目录,分区2则是挂载到/home这个目录。比如我的数据放在/home内的次目录下时,数据是放在分区2的,如果不是放在/home低下的目录,那么数据就会被放置在分区1了。

    常见的挂载点与磁盘分区的规划:

    1. 初次接触Linux: 分割为/及swap两个分区即可;
    2. 建议分区方式:/, /boot, /var, /usr, /home, swap;
    3. 根据服务器具体用途分区;
    # df -T  //查看已挂载的分区和相应的文件系统类型 

    7 目录及文件权限

      在介绍文件与目录权限之前,简要解释一下拥有者,群组,及非本群组外其他人三个概念,并结合ll命令查看文件权限及目录权限。

    场景:linux是多人多任务的系统,可能常常会有多人同时使用这部主机来进行工作的情况,因此产生文件拥有者角色。

    文件的拥有者、群组以及其他人的示意图:

      比如以王三毛为例,王三毛这个文件属于文件的拥有者、他属于王大毛这个群组,而张小猪对于王三毛来说,则只是一个其他人others。

      linux用户身份与群组记录的档案:所有的系统上的账号与一般身份使用者,还有那个root的相关信息,都是记录在/etc/passwd这个档案,个人密码记录在etc/shadow这个档案下,linux所有的组名都记录在/etc/group内。用户及用户组常用管理命令可参考:

    eg1:
    cat /etc/passwd //查看账号信息
    cat /etc/group   //查看用户组信息
    cat /etc/shadow  //查看用户密码信息
    
    ### 用户相关操作
    新增用户
    useradd UserName
    在运行上面命令后,一般需要用passwd UserName来进行秘密设置
    删除用户
    userdel UserName
    修改用户
    usermod UserName
    
    ### 用户组相关操作
    与用户联系非常紧密的还有用户组的概念,与用户组相关的命令常见如下:
    新增用户组
    groupadd GroupName
    删除用户组
    groupdel GroupName
    修改用户组
    groupmod GroupName

    https://blog.51cto.com/taoismli/1977864 

      有了上述用户、用户组及权限概念之后,再来了解一下权限之于文档及目录的意义.

    权限对档案的重要性:档案是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。权限于文档的意义:

    • r (read):可读取此一档案的实际内容,如读取文本文件的文字内容等; 
    • w (write):可以编辑、新增或者是修改该档案的内容(但不含删除该档案);
    • x (execute):该档案具有可以被系统执行的权限。

    权限对目录的重要性:目录主要的内容是记录文件名列表,文件名与目录有强烈的关联。

    • r (read):表示具有读取目彔结构列表的权限,所以当你具有读取(r)一个目彔的权限时,表示你可以查询该目彔下的文件名数据。 所以你就可以利用 ls 这个指令将该目彔的内容列表显示出来!
    • w (write):表示具有移动该目彔结构列表的权限,也就是底下这些权限:x (execute):代表的是用户能否进入该目彔成为工作目彔。
      • 建立新的文档与目彔;
      • 删除已经存在的文档与目彔(无论该文档的权限为何!);
      • 更名文档与目录;
      • 移动该目彔内的文档、目彔位置;
    //在目录/tmp中建立一个名为testing的目录,该目录权限为744且目录拥有者为root.
    //在testing目录下建立一个空的文件,文件名为:testing
    //建立目录可用mkdir
    cd /tmp  //切换工作目录到/tmp
    mkdir testing //建立新目录
    chmod 744 testing //变更权限
    touch testing/testing //建立空的文件
    chmod 600 testing/testing //变更权限
    su -vbird //切换身份成为vbird

    8 linux文件权限概念

    linux文件属性的示意图:

    档案的类型与权限之内容:[档案类型][档案拥有者之权限][档案所属群组之权限][其他人之权限]。其中每三个分别代表[可读][可写][可执行][无权限]

    //查看档案的指令[权限][连结][拥有者][群组][档案容量][修改日期][文件名]
    //ls:list,显示档案的文件名与相关属性,-al 则表示列出所有的档案详细的权限与属性(包含隐藏文件,就是文件名第一个字符为.)
    [wendy@cs010 ~]$ ls -al
    total 352
    drwxr-xr-x  17 wendy wendy   4096 Apr 22 14:47 .
    drwxr-xr-x.  3 root   root     4096 Mar 19  2019 ..
    drwxrwxr-x   4 wendy wendy 4096 Feb 28 15:06 logs
    drwxrwxr
    -x //档案的类型与权限之内容:[档案类型][档案拥有者之权限][档案所属群组之权限][其他人之权限]。其中每三个分别代表[r可读][w可写][x可执行][-无权限] //d第一个字符代表这个档案是【目录、档案或链接文件等等】。 //d:表示目录,-:表示档案,l:连结档(link file),b:表示装置文件里面的可供储存的接口设备(可随机存取装置);c:表示装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。 //man ls 或info ls
    //chgrp:改变文件所属群组
    //chown:改变文件拥有者
    //chmod:改变文件的权限,SUID,SGID,SBIT等等的特性
    
    //改变所属群组,chgrp,[-R]表示进行递归(recursive)的持续变更,chgrp [-R] dirname/filename
    chgrp users install.log //改变install.log的所属群组为users.
    ls -l
    
    //改变文件拥有者,chown,[-R]账号名称 文件或目录
    //chown [-R] 账号名称:组名 文件或目录,[-R]表示进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更
    chown bin install.log //改变install.log的拥有者为bin这个账号
    ls -l
    
    chown root:root install.log //将install.log的拥有者与群组改回为root.
    ls -l
    
    //chmod,改变权限,chmod [-R] xyz文件或目录,xyz:刚刚提到的数字类型的权限属性,为rwx属性数值的相加。-R:进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都会变更
    //权限的设定有2种,分别可以使用数字或者是符号来进行权限的变更:数字类型改变文件权限和符号类型改变档案权限
    
    //数字类型改变文件权限、r:4 w:2 x:1,每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:
    owner = rwx = 4+2+1 = 7
    group = rwx = 4+2+1 = 7
    others= --- = 0+0+0 = 0
    
    //符号类型改变文件权限,user、group、others三种身份,由u、g、o代表,a表示all。读写权限可写成r,w,x。
    chmod 777 .bashrc
    ls -al .bashrc

    9 linux文件扩展名

    linux档案扩展名:

    • *.sh:脚本或批处理文件(scripts),因为批处理文件为使用shell写成的,所以扩展名就变成.sh;
    • *Z,*.tar,*.tar.gz,*.zip,*.tgz:经过打包的压缩文件;
    • *.html,*.hph:网页相关档案,分别代表HTML语法与PHP语法的网页档案。.html的档案可使用网页浏览器来直接开启,至于.php的档案,则可透过client端的浏览器来server端浏览,以得到运算后的网页。

     linux档案长度限制:使用预设的Ext2/Ext3文件系统时,针对档案的档名长度限制。

    • 单一档案或目录的最大容许文件名为255个字符。
    • 包含完整路径名称及目录(/)之完整档名为4096个字符。

    linux文件名的限制:

    • 避免使用特殊字符:* ? > < ; & ! [ ] | ' " ` ( ) { }。

    10 目录管理

    • ls: 列出目录
    • cd:切换目录
    • pwd:显示目前的目录
    • mkdir:创建一个新的目录
    • rmdir:删除一个空的目录
    • cp: 复制文件或目录
    • rm: 移除文件或目录
    • mv: 移动文件与目录,或修改文件与目录的名称

    查看具体的指标,使用命令:man ls

    10.1 目录相关的操作

    //特殊目录
    . 表示此层目录
    ..表示上一层目录
    - 表示【目前用户身份】所在的home目录
    ~表示 account这个用户的home目录(account是个账号名称)
    
    //目录处理指令,cd 表示change directory,变换工作目录的指令
    cd 表示变换目录,cd [相对路径或绝对路径]
    pwd 表示显示当前目录
    mkdir 表示建立新的目录
    rmdir  表示删除空的目录
    //pwd 显示目录所在的目录 pwd [-P] 表示显示出真正的完整路径,而非使用链接(link)路径。pwd:Print Working Directory
    pwd //显示当前路径
    
    //mkdir(建立新目录);mkdir [-mp] 目录名称 -m表示配置文件的权限,直接设定,-p 表示将你所需要的目录递归建立起来.mk:make directory。
    mkdir test //建立一个名为test的新目录
    mkdir -p test1/test2/test3/test4 //自行建立多层目录
    
    //rmdir(删除空目录):rmdir -p 目录名称
    rmdir test //直接删除,如果test内有内容,无法进行删除
    rmdir -p test1/test2/test3/test4 //递归删除,如果任何一级内有内容,无法进行删除
    
    //$PATH,PATH这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)隔开,每个目录是由顺序之分的。
    PATH="$PATH":/root  // 表示/root加入到执行文件搜索路径PATH中

    10.2 文件与目录管理

    //ls:文件与目录的检视
    ls -al ~ //将home目录下的所有文件列出来(含属性与隐藏文件);-l表示长串显示数据内容; -a 表示将隐藏档也一起列出来的数据内容
    
    //cp:复制文件或目录,建立快捷方式。cp [-adfilprsu] 来源文件(source) 目标文件(destination),eg:cp [options] source1 source2 source3...directory
    cp ~/.bashrc /tmp/bashrc  //home目录下的.bashrc复制到/tmp下,并更名为bashrc
    cp -i ~/.bashrc /tmp/bashrc  // -i表示覆盖
    cp -a ~/.bashrc /tmp/bashrc  // -a表示将文件所有的特性一起复制
    PS:[cp复制行为会复制执行者的属性与权限],所以会涉及到chmod权限的修改。
    
    //rm:删除文件或目录,rm [-fir] 文件或目录。fir:force[忽略不存在的档案,不会出现警告讯息]、互动模式、递归删除 
    rmdir /tmp/etc //mv:移动文件、目录或更名。mv [-fiu] source destionation。fiu:force[强制覆盖]、已经存在的文件,就会询问是否覆盖、若目标文件已经存在,且source比较新,才会更新(update) 
    //eg:mv [options] source1 source2 source3 ...directory[目录]。 mv test001 test2 //移动test001到test002的内容 eg: [wendy@cs010 hbase-1.4.12]$ basename /opt/wendy/local local //取得路径的文件名 [wendy@cs010 hbase-1.4.12]$ dirname /opt/wendy/local /opt/haishu //取得路径的目录名称

     10.3 文件内容查询

    //直接查看文件内容:cat,tac,nl
    • cat 由第一行开始显示文件内容
    • tac 从最后一行开始显示,可以看出tac是cat的倒着写
    • nl 显示的时候,顺道输出行号! 
    //直接查看文件内容:cat,tac,nl[concatenate,]
    //cat[-AbEnTv]
    选项不参数:
    -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
    -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
    -E :将结尾的断行字符 $ 显示出来;
    -n :打印出行号,连同空白行也会有行号,不 -b的选项不同;
    -T :将 [tab] 按键以 ^I 显示出杢;
    -v :列出一些看不出来的特殊字符
    eg:
    test.txt文件内容如下:

    wendy001
    wendy002

    
    

    wendy003

    [wendy@cs010 logs]$ cat test.txt
    wendy001
    wendy002
    
    wendy003
    [wendy@cs010 logs]$ cat -n test.txt
         1  wendy001
         2  wendy002
         3
         4  wendy003
    [wendy@cs010 logs]$ cat -b test.txt
         1  wendy001
         2  wendy002
    
         3  wendy003
    [wendy@cs010 logs]$ cat -A test.txt
    wendy001$
    wendy002$
    $
    wendy003$
    
    //tac(反向列式)
    [wendy@cs010 logs]$ tac test.txt
    wendy003
    
    wendy002
    wendy001
    
    //nl(添加行号打印),nl[-bnw]档案,-b指定行号,主要有两种;列出行号表示的方法,主要有三种
    选项不参数:
    -b :指定行号指定的方式,主要有两种:
        -b a :表示不管是否为空行,也同样列出行号(类似 cat -n);
        -b t :如果有空行,空的那一行要列出行号(默认值);
    -n :列出行号表示的方法,主要有三种:
        -n ln :行号在屏幕的最左方显示;
        -n rn :行号在自己字段的最右方显示,且不加 0-n rz :行号在自己字段的最右方显示,且加 0-w :行号字段的占用的位数。
    
    [wendy@cs010 logs]$ nl test.txt
         1  wendy001
         2  wendy002
    
         3  wendy003
    [wendy@cs010 logs]$ nl -b a test.txt   //[-b a]类似cat -n,无论是否为空行,同样列出行号
         1  wendy001
         2  wendy002
         3
         4  wendy003
    
    [wendy@cs010 logs]$ nl -b a -n rz test.txt //[-n rz]表示行号在自己字段的最右方显示,且加0
    000001  wendy001
    000002  wendy002
    000003
    000004  wendy003
    
    [wendy@cs010 logs]$ nl -b a -n rz -w 3 test.txt //[-w]表示行号字段的占用的位数
    001     wendy001
    002     wendy002
    003
    004     wendy003
    //可翻页查看:more less
    • more 一页一页的显示文件内容
    • less与more类似,但是比more更好的是,可以往前翻页
    //more(一页一页翻动)
    空格键 (space):代表向下翻一页;
    Enter :代表向下翻『一行』;
    /字符串 :代表在这个显示的内容中,向下搜寻『字符串』这个关键词;
    :f :立刻显示出文件名以及目前显示的行数;
    q :代表立刻离开 more ,不再显示该文件内容。
    b 或 [ctrl]-b :代表往回翻页,不过这动作叧对文件有用,对管线无用。
    eg: [wendy@cs010 logs]$
    more test.txt wendy001 wendy002 wendy003 //less(一页一页翻动) 空格键 :向下翻动一页; [pagedown]:向下翻动一页; [pageup] :向上翻动一页; /字符串 :向下搜寻『字符串』的功能; ?字符串 :向上搜寻『字符串』的功能; n :重复前一个搜寻 (与 / 或 ? 有关!) N :反向的重复前一个搜寻 (与 / 或 ? 有关!) q :离开 less 这个程序;

    eg: [wendy@cs010 logs]$
    less test.txt wendy001 wendy002 wendy003
    //资料截取
    head  只看头几行
    tail 只看尾巴几行
    //资料截取 head
    eg:
    [wendy@cs010 logs]$ head -n 2 test.txt wendy001 wendy002 [wendy@cs010 logs]$ head test.txt wendy001 wendy002 wendy003 [wendy@cs010 logs]$ tail -n 1 test.txt wendy003 [wendy@cs010 logs]$ tail -f test.txt wendy001 wendy002 wendy003
    //非纯文本档
    od  以二进制的方式读取文件内容!
    //修改文件时间与建置新档
    touch
     //touch [-acdmt] 档案,选项与参数
    -a :仅修订 access time-c :仅修改文件的时间,若该文件不存在则不建立新文件;
    -d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
    -m :仅修改 mtime ;
    -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]

     10.4 文件与目录的默认权限与隐藏权限

    • 文件预设权限:umask
    • 文件隐藏属性:chattr,lsattr
    • 文件特殊权限:SUID,SGID,SBIT,权限设定
    • 观察文件类型:file
    //档案预设权限,umask:指定目前用户在建立文件或目录时候的权限默认值.比如:002 user、group并没有被拿掉任何权限,others的权限被拿掉了2(r:4,w:2,x:1)
    [wendy@cs010 logs]$ umask -S
    u=rwx,g=rwx,o=rx
    [haishu@cs010 logs]$ umask
    0002
    
    eg:
    //umask 为 003 ,所以拿掉的权限为wx,因此:
    文件:(-rw-rw-rw-) - (--wx) = -rw-rw-r--
    目录:(drwxrwxrwx) - (--wx) = drwxrwxr--
    //隐藏文件属性chattr(配置文件隐藏属性),chattr [+-=][ASacdistu]文件或目录名称
    选项与参数:
    + :增加某一个特殊参数,其他原本存在参数则不动。
    - :移除某一个特殊参数,其他原本存在参数则不动。
    = :设定一定,且仅有后面接的参数
    
    a :设定a之后,这个档案将只能增加数据,而不能删除也不能修改数据,只有root
    才能设定这个属性。
    c :这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存。
    i :一个文件不能被删除、改名、设定连结此属性。
    
    //显示文件隐藏属性lsattr,lsattr [-adR] 文件或目录
    选项与参数:
    -a :将隐藏文件的属性进行显示;
    -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
    -R :连同子目录的数据也一并列出来
    
    eg:
    chattr +ajj test
    lsattr test

    档案特殊权限

    SUID有这样的限制与功能:

    • SUID 权限仅对二进制程序(binary program)有效;
    • 执行者对于该程序需要具有 x 的可执行权限;
    • 本权限仅在执行该程序的过程中有效 (run-time);
    • 执行者将具有该程序拥有者 (owner) 的权限

    Set GID

    • SGID 对二进制程序有用;
    • 程序执行者对亍该程序来说,需具备 x 的权限;
    • 执行者在执行的过程中将会获得该程序群组的支持!

    //观察文件类型:file
    file 目录名或文件 

    10.5 指令与文件的搜索

    • 脚本文件名的搜索:which
    • 文件名的搜索:whereis,locate,find
    //which(寻找执行档),-a 表示将所有由PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称
    which ifconfig
    
    //文件名的搜索,whereis [-bmsu] 文件或目录名 
    选项与参数:
    -b :只找 binary 格式的文件
    -m :只找在说明文件 manual 路径下的文件
    -s :叧找 source 来源文件
    -u :搜寻不在上述三个项目当中的其他特殊文件
    whereis ifconfig
    
    eg:
    [wendy@cs011 local]$ whereis ifconfig
    ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
    [wendy@cs011 local]$ which ifconfig
    /usr/sbin/ifconfig

     11 linux 磁盘与文件系统管理

    11.1 认识EXT2 文件系统 

    文件系统特性

    • 磁盘分区后需要进行格式化,原因:操作系统设定的文件属性/权限不同,为了存放这些档案所需的数据,分区需要进行格式化,以适应文件系统格式。比如windows主要用的是FAT/NTFS,linux主要是Ext2.
    • 一个分区 格式化 一个文件系统

    Ext2文件系统的内容

    主要包含6部分:boot sector[启动扇区]、superblock、inode bitmap、block bitmap、inode table、data block。

    • boot sector:启动扇区,可以安装开机管理程序。
    • superblock:超级区块,记录此filesystem的整体信息,包括block/inode的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
    • inode:记录文件的属性/权限等数据,其他重要项目为:每个inode大小均固定为128bytes,每个文件都仅会占用一个inode而已,因此文件系统能够建立的文件数量与inode的数量有关,每个inode基于一个block号码要花掉4bytes.
      • inode table(inode 表格):文件的存取模式(r/w/e),文件的拥有者与群组(owner/group),文件的容量,文件建立或状态改变的时间(ctime),最近一次读取的时间(atime),最近修改的时间)(mtime),定义文件特性的标识(flag),如SetUID,文件真正内容的指向(pointer)。
      • inode bitmap:inode对照表,记录使用与未使用的inode号码。
    • block:记录文件的实际数据,若文件太大时,会占用多个block。目录的block则在记录目录底下文件名与其inode号码的对照表。
      • data block:资料区块,用来放置文件内容数据地方,ext2系统支持的block大小有1K,2K,4K三种。在格式化时block的大小就固定了,且每个block都有编号,以方便inode的记录。
      • block bitmap:区块对照表,记录使用与未使用的block号码。删除数据时,block bitmap当中相对应到该block号码的标志修改为未使用中。
    • 日志式文件系统:多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间。

    PS:inode table与data block称为数据存放区域,superblock、block bitmap、inode bitmap等区段称为metadata[中介资料]。

    linux的正统文件系统为Ext2,Ext2文件系统的数据存取为“索引式”文件系统,该文件系统内的信息主要有:superblock、inode、block.每个inode与block都有编号,每个文件都会占用一个inode,inode内则有文件数据放置的block号码。ext2 文件系统示意图:

    inode结构示意图:

    inode/block资料存取示意图:数据存取的方式是“索引式”文件系统,文件系统格式化出inode与block的区块,假设某一个文件的属性与权限数据放在inode 4号,inode记录了文件数据放在2、7、13、15这4个block号码,就可以根据此来排列磁盘的阅读顺序,可以一口气将四个block内容读出来。

    “索引式文件系统”数据存取如下:

     

     “FAT文件系统”数据存取方式如下:文件的数据依序写入1 -> 7 -> 4 -> 15号这4个block号码中,但是文件系统没有办法一口气知道是个block号码。

    目录:在ext2文件系统建立一个目录时,ext2会分配一个inode与至少一块block给该目录。

    目录占用的block记录的数据示意图: 

     

    文件:ext2建立一个一般文件时,会分配一个inode与相对于该文件大小的block数量给该文件。

    目录树的读取:透过挂载的信息可以找到挂载点的inode号码,此时能够得到根目录的inode内容,并已经该inode读取根目录的block内的文件名数据,在一层一层的往下读到正确的文件名。 

    11.2 文件系统的简单操作

    磁盘与目录的容量:df,du

    //磁盘的整体数据放在superblock区域中,但是每个个别文件的容量则在inode当中记载的。
    //df:列出文件系统的整体磁盘使用量,df [-ahikHTm][目录或文件名]
     -a:列出所有的文件系统,包括系统特有的/proc等文件系统
     -k:以KBytes的容量显示各文件系统
     -m:以MBytes的容量显示各文件系统
     -i : 不使用硬盘容量,而以inode的数量来显示
     -h: 以易读的方式进行显示
    eg:
    [wendy@cs011 ~]$ df -ih
    Filesystem     Inodes IUsed IFree IUse% Mounted on
    /dev/vda2        2.3M  1.4M  912K   61% /
    devtmpfs         2.0M   393  2.0M    1% /dev
    tmpfs            2.0M     2  2.0M    1% /dev/shm
    tmpfs            2.0M   638  2.0M    1% /run
    tmpfs            2.0M    16  2.0M    1% /sys/fs/cgroup
    /dev/vdb1        500M  1.9M  499M    1% /opt
    tmpfs            2.0M     1  2.0M    1% /run/user/1000
    
    //du:评估文件系统的磁盘使用量(常用在推估目录所占容量),du [-ahskm] 文件或目录名称
     -a:列出所有的文件与目录容量,因为默认仅统计目录底下的文件数量。
     -h:易读的方式进行显示
     -s:列出总量,不列出各目录占用容量
     
    eg:
    [wendy@cs011 reading-system]$ du
    1656736 ./log
    1759460 .
    [wendy@cs011 reading-system]$ du -h
    1.6G    ./log
    1.7G    .
    [wendy@cs011 reading-system]$ du -s
    1759460 .
    [wendy@cs011 reading-system]$ du -sh
    1.7G    .

    实体链接与符号链接:ln

    linux底下的链接有种方式:一种是类似windows快捷方式功能,快速链接到文件或目录,另一种是透过文件系统的inode连结来产生新档名,这种称为实体链接。

    • Hard Link:实体链接,硬式连结或实际连结。每个文件都会占用一个inode,文件内容由inode的记录来指向。如果要读取该文件,先要经过目录记录的文件名来指向到正确的inode号码才能进行读取。

    实体链接的文件读取示意图:不能跨文件系统,不能link目录。

    • symbolic Link:符号链接,快捷方式。

    符号链接的文件读取示意图:

    //ln [-sf] 来源文件 目标文件
     -s:符号链接,默认是硬链接
     -f:如果目标文件存在时,就主动的将目标文件直接移除后再建立 

    11.3 磁盘的分割、格式化、检验与挂载

    磁盘的使用必需要经过:分割、格式化与挂载,3个指令如下:fdisk -> mkfs -> mount。

    磁盘分区:fdisk、partprobe.

    //fdisk [-l] 装置名称
    -l : 输出后面接的装置所有的分区内容。

    磁盘格式化:mkfs、make2fs.

    //mkfs [-t 文件系统格式] 装置文件名
     -t:可以接文件系统格式,例如ext3,ext2,vfat等
    mkfs -t ext3 /dev/hdc6 // 制作的/dec/hdc6格式化为ext3 文件系统
    
    //mkfs[tab][tab],按下2个tab键,会发现mkfs支持的文件格式有很多,其中还可以格式化为vfat。
    
    //mke2fs [-b block 大小][-i block 大小][-L 标头][-cj]装置
     -b:可以设定每个block的大小,目前支持1024,2048,4096 bytes三种
     -i: 多少容量给予一个inode呢
     -c:检查磁盘错误
     -L:后面可以接标头名称(Label)
     -j: mke2fs是ext2,加上-j后,会主动加入journal而成为ext3.

    磁盘检验:fsck、badblocks.

    //fsck [-t 文件系统][-ACay] 装置名称  ,用来检验文件系统是否出错
     -t:如同mkfs一样,需要指定文件系统
    fsck [tab][tab]  //系统有多少文件系统支持的fsck软件。
    
    //badblocks -[svw] 装置名称,用来检查硬盘或软件扇区有没有坏轨的指令,可以通过[mke2fs -c 装置文件名 ]在进行格式化时处理磁盘表面的读取测试。
     -s:在屏幕上列出进度
     -v:可以在屏幕上看到进度
     -w:使用写入的方式来测试。
    badblocks -sv /dev/hdc6

    磁盘挂载与卸除:mount、unmount.

    挂载点 = 目录,而这个目录是进入磁盘分区的入口。挂载前确定点如下:

    • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中。
    • 单一目录不应该重复挂载多个文件系统。
    • 要作为挂载点的目录,理论上都是空目录。

    文件系统挂载到我们的linux系统上,就要使用mount。

    //mount -a 
    //mount [-l]
    //mount [-t 文件系统][-L Label名][-o 额外选项][-n]装置文件名 挂载点
     -a:按配置文件/etc/fstab的数据将所有未挂载的磁盘都进行挂载
     -l:输入mount会显示目前挂载的信息。
     -n:默认会将实际挂载的情况时实时写入/etc/mtab中。
    mkdir /mnt/hdc6 
    mount /dev/hdc6 /mnt/hdc6
    df
    
    /etc/filesystem:系统指定的测试挂载文件系统类型
    /proc/filesystems:linux系统已经加载的文件系统类型
    mount -l //查看已挂载的文件,包含各文件系统的Label名称
    // unmount [-fn] 装置文件名或挂载点 ,将装置文件卸除
     -f:强制卸除!可用在类似网络文件系统(NFS)无法读取到的情况下
     -n:不更新 /etc/mtab情况下卸除
    eg:
    unmount /dev/hdc6    //用装置文件名来卸除
    unmount /media/cdrom //用挂载点来卸除
    unmount /mnt/flash //因为挂载点比较好记忆
    unmount /dev/df0   //用装置文件名
    unmount /mnt/home  //一定要用挂载点,挂载的是目录

    磁盘参数修订:mknod、e2label、tune2fs、hdparm.

    11.4 设定开机挂载

    开机挂载:/etc/fstab、/etc/mtab

    特殊装置loop挂载(映象档不刻录就挂载使用)

    11.5 内存置换空间(swap)之建置

    使用实体分区建置swap

    //实体分区建置swap
    //1、分割:先使用fdisk在你的磁盘中分割出一个分割槽给系统作为swap.
    //2、格式化:利用建立swap格式的[mkswap 装置文件名]就能格式化该分割槽称为swap格式
    //3、使用:启动swap装置启动,方法:swapon 装置文件名
    //4、观察,free指令查看内存用量
    
    eg:
    fdisk /dev/hdc
    partprobe //核心更新分区表
    mkswap /dev/hdc7
    free

    使用文件建置swap

    swap使用上的限制

      

  • 相关阅读:
    随机产生16进制颜色值
    关于单元测试的思考--Asp.Net Core单元测试最佳实践
    使用xUnit为.net core程序进行单元测试
    SQLSERVER——查看阻塞信息(sp_who_lock优化无误版)
    SQLServer连接查询之Cross Apply和Outer Apply的区别及用法
    .netcore 写日志(使用NLog,log4net)
    概率与影响矩阵
    WebApi Helper帮助文档 swagger
    C# 使用HttpWebRequest Post提交数据,携带Cookie和相关参数示例
    解决哈希(HASH)冲突的主要方法
  • 原文地址:https://www.cnblogs.com/wendyw/p/12382088.html
Copyright © 2011-2022 走看看