Linux运维学习历程-第五天-Linux文件系统与管理

Linux运维学习历程-第五天-Linux文件系统与管理

本章内容


文件系统

 文件和目录被组织成一个单根倒置树结构从根目录下开始,用“/” 表示根文件系统(rootfs) :root filesystem,用路径分隔的 /;遵循FHS: (Filesystem Hierarchy Standard)

 文件系统分层结构:LSB Linux Standard Base

wKioL1ed_THCijGZAABYcittwCg867.jpg

文件系统结构

/boot :引导文件存放目录,内核文件(vmlinuz) 、引导加载器(bootloader, grub) 都存放于此目录

/bin :供所有用户使用的基本命令;不能关联至独立分区,OS 启动即会用到的程序

/sbin :管理类的基本命令;不能关联至独立分区,OS 启动即会用到的程序

/lib :启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)

/lib64 :专用于x86_64 系统上的辅助共享库文件存放位置

/etc :配置文件目录

/home/ USERNAME :普通用户家目录

/root :管理员的家目录

/media :便携式移动设备挂载点

  /mnt :临时文件系统挂载点

/dev :设备文件及特殊文件存储位置

       b: block device ,随机访问, 有缓存、物理

       c: character device ,线性访问,无缓存、逻辑

/opt :第三方应用程序的安装位置

/srv :系统上运行的服务用到的数据

/tmp:临时文件存储位置

      空设备:/dev/null  

  /usr: universal shared, read-only data   

    bin:  保证系统拥有完整功能而提供的应用程序

    sbin:

    lib :32 位使用

    lib64 :只存在64 位系统

    include: C 程序的头文件(header files)

    share :结构化独立的数据,例如doc, man等 等

    local :第三方应用程序的安装位置

    bin, sbin, lib, lib64, etc, share    

 /var: variable data files

    cache:  应用程序缓存数据目录

    lib:  应用程序状态信息数据

    local :专用于为/usr/local 下的应用程序存储可变数据;

    lock:  锁文件

    log:  日志目录及文件

    opt:  专用于为/opt 下的应用程序存储可变数据;

    run:  运行中的进程相关数据;通常用于存储进程pid 文件

    spool:  应用程序数据池

    tmp: 保存系统两次重启之间产生的临时数据 

 /proc:  用于输出内核与进程信息相关的虚拟文件系统

/sys :用于输出当前系统上硬件设备相关信息虚拟文件系统

/selinux: security enhanced Linux ,selinux 相关的安全策略等信息的存储位置

 /misc    centos6中存在  可用/misc/cd挂载光驱

      /net   涉及到网络服务  

RHEL7  目录变化

 /bin 和 和 /usr/bin

/sbin 和 和 /usr/sbin

/lib  和/usr/lib

/lib64 和 和 /usr/lib64

   

 

文件有两类数据:

    元数据:metadata   包括大小、时间、所属主、组、权限等

    数据:data       文件的内容

文件名规则

 除了斜杠和NUL, 所有字符都有效. 但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们。

   包括路径在内文件名称最长4095 个字节,用/ 分隔的路径不能超过255 个字节。

 标准Linux 文件系统(如ext4 ),文件名称大小写敏感。例如:MAIL, Mail, mail, mAiL,但是linxu在FAT文件系统下大小写不敏感,例如挂载的U盘(FAT文件系统)所以说linux大小写敏感是基于文件系统的


Linux 下的文件类型

    以文件权限开头区分

     – :普通文件            灰色    文本、二进制文件等     

             可执行文件     绿色    .ELF等

              压缩文件      红色    .tar等

     d:  目录文件           深蓝色   

     b:  块设备    随机访问   亮黄色   有缓存  物理设备

     c:  字符设备   顺序访问   亮黄色   无缓存  逻辑设备 

     l:  符号链接文件        浅蓝色

     p:  管道文件pipe        黄色

     s:  套接字文件socket      粉色    用于进程间通讯


Linux 上的应用程序的组成部分

二进制程序:/bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin, /usr/local/sbin

库文件:/lib, /lib64, /usr/lib, /usr/lib64,/usr/local/lib, /usr/local/lib64

配置文件:/etc, /etc/DIRECTORY, /usr/local/etc

帮助文件:/usr/share/man, /usr/share/doc,/usr/local/share/man, /usr/local/share/doc

    

显示当前工作目录

    每个shell 和系统进程都有一个当前的工作目录CWD:current work directory

    显示当前shell CWD 的绝对路径

      #pwd: printing working directory


绝对和相对路径名

 绝对路径:以正斜杠开始,完整的文件的位置路径,可用于任何想指定一个文件名的时候

 相对路径:不以斜线,开始指定相对当前的工作目录位置,可以作为一个简短的形式指定一个文件名


更改目录

cd:改变当前shell工作目录

  cd [-L|[-P [-e]]] [dir]

    -p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录 

    -L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。 – 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。


为绝对或相对路径:

        cd /home/joshua/work

        cd project/docs

    cd 进入用户主目录; 

    cd ~ 进入用户主目录; 

    cd – 返回进入此目录之前所在的目录; 

    cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思); 

    cd ../.. 返回上两级目录; 

    cd !$ 把上个命令的参数作为cd参数使用。

相关的环境变量:

    PWD :保存了当前目录路径;

    OLDPWD :上一次所在目录路径;


列出目录内容

 列出当前目录的内容或指定目录

用法:

ls [options] [files_or_dirs]

Example:

    ls -a  包含隐藏文件

    ls -l  显示额外的信息

    ls -R 目录递归通过

    ls -ld 目录和符号链接信息

    ls -1 文件分行显示

    ls –S  按从大到小排序

    ls –u 配合-t 选项,显示并按atime  从新到旧排序

    ls –U 不排序按目录存放顺序显示


glob文件通配符

*        匹配零个或多个字符

?        匹配任何单个字符

~        当前用户家目录          

~username   用户家目录   

~+        当前工作目录

~-        前一个工作目录          

[0-9]      匹配一个数字范围

[1-3]      1到3    [^1a3]或非1或非a或非3

[a-z]      大写和小写字母

[A-Z]      大写字母

[wxc]      匹配列表中的任何的一个字符[^wxc]     匹配列表中的所有字符以外的字符


预定义的字符类:#man 7 glob

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

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

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

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

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

    [:blank:] :水平空白字符

    [:space:] :水平或垂直空白字符

    [:punct:]: : 标点符号

    [:print:] :可打印字符

    [:cntrl:] :控制(非打印)字符

    [:graph:] :图形字符

    [:xdigit:]:十六进制字符


查看文件状态

   stat

    文件:metadata, data

    三个时间戳:

    access time:访问时间,atime,读取文件内容    因为relattime的原因:atime>一天或atime<mtime时更新

    modify time: 修改时间, mtime,改变文件内容(数据)

    change time: 改变时间, ctime,元数据发生改变


touch 命令:创建空文件和刷新时间

    touch [OPTION]… FILE…

        -a: 变 仅改变 atime

        -m: 变 仅改变 mtime

        -t :STAMP:[[CC]YY]MMDDhhmm[.ss]

        -c: 如果文件不存在,则不予创建


复制文件和目录cp

cp [OPTION]… [-T] SOURCE DEST

cp [OPTION]… SOURCE… DIRECTORY

cp [OPTION]… -t DIRECTORY SOURCE…

cp SRC DEST

    SRC 是文件:

    如果目标不存在:新建DEST ,并将SRC 中内容填充至DEST中   实质是:复制并改名

    如果目标存在: 

        如果DEST 是文件:将SRC 中的内容覆盖至DEST中;基于安全,建议为cp 命令使用-i 选项

        如果DEST 是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中

cp SRC… DEST

     SRC… :多个文件

     DEST 必须存在,且为目录,其它情形均会出错;

cp SRC DEST

     SRC是目录:此时使用选项:-r

     如果DEST 不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;

     如果DEST存在:

          如果DEST是文件:报错

          如果DEST目录:在DEST下新建与原目录同名的目录,并将SRC中内容复制至新目录中

                如果DEST目录下的内容和复制目录内的相同,则会连同复制目录本身也复制过来作为DEST目录的子目录,如果再次复制则会产生覆盖此子目录的操作    

         -a, –archive      等于-dR –preserve=all

                –backup[=CONTROL   为每个已存在的目标文件创建备份

            -b        类似–backup 但不接受参数

                –copy-contents   在递归处理是复制特殊文件内容

            -d        等于–no-dereference –preserve=links

            -f, –force     如果目标文件无法打开则将其移除并重试(当 -n 选项

                    存在时则不需再选此项)

            -i, –interactive   覆盖前询问(使前面的 -n 选项失效)

            -H        跟随源文件中的命令行符号链接

            -l, –link      链接文件而不复制

            -L, –dereference   总是跟随符号链接

            -n, –no-clobber    不要覆盖已存在的文件(使前面的 -i 选项失效)

            -P, –no-dereference    不跟随源文件中的符号链接

            -p        等于–preserve=模式,所有权,时间戳

                –preserve[=属性列表  保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr 等

            -c  same as –preserve=context

                –sno-preserve=属性列表 不保留指定的文件属性

                –parents     复制前在目标目录创建来源文件路径中的所有目录

            -R, -r, –recursive   递归复制目录及其子目录内的所有内容

                –reflink[=WHEN]    控制克隆/CoW 副本。请查看下面的内如。

                –remove-destination  尝试打开目标文件前先删除已存在的目的地

                    文件 (相对于 –force 选项)

                –sparse=WHEN   控制创建稀疏文件的方式

                –strip-trailing-slashes  删除参数中所有源文件/目录末端的斜杠

            -s, –symbolic-link   只创建符号链接而不复制文件

            -S, –suffix=后缀   自行指定备份文件的后缀

            -t,  –target-directory=目录  将所有参数指定的源文件/目录复制至目标目录

            -T, –no-target-directory 将目标目录视作普通文件

命令别名

显示当前shell 进程所有可用的命令别名

#alias

定义别名NAME ,其相当于执行命令VALUE; ;

#alias NAME='VALUE'

在命令行中定义的别名,仅对当前shell 进程有效

如果想永久有效,要定义在配置文件中

仅对当前用户:~/.bashrc

对所有用户有效:/etc/bashrc


编辑配置给出的新配置不会立即生效;

bash 进程重新读取配置文件:

    source /path/to/config_file

    . /path/to/config_file

撤消别名:unalias

    unalias [-a] name [name …]

如果别名同原命令同名,如果要执行原命令,可使用

“\COMMAND”

’COMMAND’

/PATH/COMMAND   绝对路径


mv:移动(重命名)文件   

      source表示源文件或目录,target表示目标文件或目录。

      mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。

      源文件被移至目标文件有两种不同的结果: 

            1、如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。 

            2、如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。

            3、如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。 注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。

        mv [OPTION]… [-T] SOURCE DEST

        mv [OPTION]… SOURCE… DIRECTORY

        mv [OPTION]… -t DIRECTORY SOURCE…

      长选项必须使用的参数对于短选项时也是必需使用的。

              –backup[=CONTROL]       为每个已存在的目标文件创建备份

              -b                           类似–backup 但不接受参数

              -f, –force                  覆盖前不询问

              -i, –interactive            覆盖前询问

              -n, –no-clobber             不覆盖已存在文件,如果您指定了-i、-f、-n 中的多个,仅最后一个生效。

                  –strip-trailing-slashes  去掉每个源文件参数尾部的斜线

              -S, –suffix=SUFFIX           替换常用的备份文件后缀

              -t, –target-directory=DIRECTORY      将所有参数指定的源文件或目录

                                                    移动至 指定目录

              -T, –no-target-directory     将目标文件视作普通文件处理

              -u, –update                  只在源文件文件比目标文件新,或目标文件

                                            不存在时才进行移动

              -v, –verbose         详细显示进行的步骤

              备份文件的后缀为"~",除非以–suffix选项或是SIMPLE_BACKUP_SUFFIX环境变量指定。版本控制的方式可通过–backup选项或VERSION_CONTROL 环境变量来选择。以下是可用的变量值:

                                                none, off       不进行备份(即使使用了–backup 选项)

                                                numbered, t     备份文件加上数字进行排序

                                                existing, nil   若有数字的备份文件已经存在则使用数字,否则使用普通方式备份

                                                simple, never   永远使用普通方式备份


rm:删除文件或目录

     rm [OPTION]… FILE…

          -f, –force           强制删除。忽略不存在的文件,不提示确认

          -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录

          -i                    在删除前需要确认

          -I                    在删除超过三个文件或者递归删除前要求确认。此选项比-i 提

                                示内容更少,但同样可以阻止大多数错误发生

              –interactive[=WHEN]      根据指定的WHEN 进行确认提示:never,once (-I),

                                        或者always (-i)。如果此参数不加WHEN 则总是提示

              –one-file-system         递归删除一个层级时,跳过所有不符合命令行参

                                        数的文件系统上的文件

              –no-preserve-roo 不特殊对待"/"

              –preserve-root   不允许删除"/"(默认)

          -r, -R, –recursive   递归删除目录及其内容

          -v, –verbose         详细显示进行的步骤

    注意:

        默认时,rm 不会删除目录。使用–recursive(-r 或-R)选项可删除每个给定的目录,以及其下所有的内容。

        要删除第一个字符为"-"的文件 (例如"-foo"),请使用以下方法之一:

          rm — -foo

          rm ./-foo

        请注意,如果使用rm 来删除文件,通常仍可以将该文件恢复原状。如果想保证该文件的内容无法还原,请考虑使用shred。

         对于链接文件,只是删除整个链接文件,而原有文件保持不变。 

         注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以在删除文件之前,最好再看一下文件的内容,确定是否真要删除。

         rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。


目录操作

tree默认系统中没有安装,需要手动安装

tree  显示目录树

      -a 显示所有文件和目录。

      -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。

      -C 在文件和目录清单加上色彩,便于区分各种类型。

      -d 显示目录名称而非内容。

      -D 列出文件或目录的更改时间。

      -f 在每个文件或目录之前,显示完整的相对路径名称。

      -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。

      -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。

      -i 不以阶梯状列出文件或目录名称。

      -I 不显示符合范本样式的文件或目录名称。

      -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。

      -L 层级显示

      -n 不在文件和目录清单加上色彩。

      -N 直接列出文件和目录名称,包括控制字符。

      -p 列出权限标示。

     -P 只显示符合范本样式的文件或目录名称。

      -q 用"?"号取代控制字符,列出文件和目录名称。

      -s 列出文件或目录大小。

      -t 用文件和目录的更改时间排序。

      -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。

      -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

mkdir  创建目录

     长选项必须使用的参数对于短选项时也是必需使用的。

                -m, –mode=模式       设置权限模式(类似chmod),而不是rwxrwxrwx 减umask

                -p, –parents         需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理

                -v, –verbose         每次创建新目录都显示信息

                -Z, –context=CTX     将每个创建的目录的SELinux 安全环境设置为CTX

                    –version         显示版本信息并退出

       注意:该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

rmdir  删除空目录

   rmdir [OPTION]… DIRECTORY…

   -p或–parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;

   –ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息; 

    -v或-verboes:显示命令的详细执行过程; 

    –version:显示命令的版本信息。


在Nautilus 中移动和复制

 拖曳及放下

拖动:移动在同一文件系统,在不同的文件系统复制

拖动+ Ctrl键 键  :始终复制

拖动+ Alt键 键  :询问是否复制,移动或创建符号链接(别名)

上下文菜单

        右键单击要重命名,剪切,复制或粘贴

索引节点

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

一个节点(索引节点)是在一个表项,包含有关文件的信息

( 元数据  ),包括:

    文件类型,权限,UID ,GID

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

    该文件的大小和不同的时间戳

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

    有关文件的其他数据

同一分区下inode编号唯一,不同分区可以一样,每个分区都有各自的分区表inode table

元数据:存放在 inode table

数据内容:存放在 数据block

    指针占据4个字节空间

    直接指针:12个  直接能找到低于12*4k数据

     间接指针:指向一指针数据块

    一般inode表会占用文件系统磁盘空间的1%,一个目录文件的内容就是一个该目录项的列表


目录

 文件引用一个是 inode号

 人是通过文件名来引用一个文件

 一个目录是目录下的文件名和文件inode号之间的映射


cp 和inode

在 在 CP的 的  命令:

分配一个空闲的inode 号,在inode 表中生成新条目在目录中创建一个目录项,将名称与inode 编号关联,拷贝数据生成新的文件


rm和inode

rm命令:

链接数递减,从而释放的inode 号可以被重用,把数据块放在空闲列表中,删除目录项,数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。


mv 和inode

 如果mv 命令的目标和源在相同的文件系统,作为mv

      命令用新的文件名创建对应新的目录项

      删除旧目录条目对应的旧的文件名

      不影响inode 表(除时间戳)或磁盘上的数据位置:没有数据被移动!

    如果目标和源在一个不同的文件系统, mv 相当于cp 和rm

  硬链接(一个文件多个名字)

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

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

         每个目录引用相同的inode号

         创建时链接数递增

注意:

   硬连接不能跨分区;不能对目录操作

    centos6中   inode=2的都是分区的根

            inode=1的都是虚拟目录

    centos7中   inode=128都是分区的根

 


删除文件时:

rm 命令递减计数的链接

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

当链接数为零时,该文件被删除

 不能跨越驱动器或分区

 语法 :

  ln filename [linkname ]


  符号(或软)链接

 一个符号链接指向另一个文件

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

 一个符号链接的内容是它引用文件的名称

 可以对目录进行

 可以跨分区

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

 语法:

    ln -s filename [linkname]

            原始文件路径   软链接

     软链接文件:

     路径

     原始文件相对路径:相当于软链接文件路径,而不是相对于当前工作目录



确定文件内容

文件可以包含多种类型的数据

检查文文件类型,然后确定适当的开放命令或应用程序使用

file [options] <filename>…

    Option:

-b 列出文件辨识结果时,不显示文件名称。

-c 详细显示指令执行过程,便于排错或分析程序执行形

-f 列出文件中文件名的文件类型

-F 使用指定分隔符号替换输出文件名后默认的”:” 分隔符

-i 输出mime类型的字符串

-L 查看对应软链接对应文件的文件类型

-z 尝试去解读压缩文件的内容

–help显示命令在线帮助

原创文章,作者:NameLess,如若转载,请注明出处:http://www.178linux.com/28139

(0)
上一篇 2016-08-04 14:41
下一篇 2016-08-04 14:42

相关推荐

  • Linuxd的发展史

    Linux发展史 Linux诞生:   1991年的八月,一个芬兰的名为Linus Torvalds的大学生为自己开始写作一个类似minix,可运行在386上的操作系统寻找志同道合的合作伙伴。FREAX系统后改名Linux。  Linux是什么:   按照Linux开发者的说法,Linux是一个遵循POSIX(注一)标作系统,标…

    Linux干货 2016-10-14
  • 系统启动和内核管理

    Linux组成 Linux:kernel+rootfs kernel:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能 rootfs:程序和glibc 库:函数集合,function,调用接口(头文件负责描述) 过程调用:procedure,无返回值; 函数调用:function;有返回值,可以赋值于变量中; 程序:二进制执行文件 包括根目录以及包…

    Linux干货 2017-05-14
  • Python基础—内置数据类型

    一、简介              如果你用过C或者C++,你该知道你的许多工作集中在实现数据结构上面。你需要管理内存分配,部署内存结构等等。这些东西比较乏味,通常会让你无法集中在真正想实现的目标上面。    …

    Linux干货 2015-11-10
  • 显示列表和复制文件的各种实例

    显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。 [root@localhost tmp]# ls -d /var/l*[[:lower:]] 显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。 [root@localhost tmp]# ls -d /etc/[0-9]*[^0-9…

    Linux干货 2018-03-01
  • Linux 磁盘、文件系统管理

    Linux 磁盘、文件系统管理                                               &nb…

    Linux干货 2016-09-01
  • Shell脚本编程之入门基础(二)if、case的使用

    Shell编程之条件选择和条件判断   一、条件选择(if)与条件判断(case)的对比: if语句:是选择执行,if语句可嵌套。 if条件选择使用格式 单分支 双分支 多分支 if 判断条件;then 条件为真的分支代码 fi if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi if CONDITION1; the…

    Linux干货 2016-08-15

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-04 14:59

    对命令的总结很好,如果能有一些小示例就更好了