zoukankan      html  css  js  c++  java
  • Python学习week1-linux文件系统与IO重定向

    1、linux文件系统

    1.1、文件系统

    # 什么是文件系统?

    硬盘分区之后,还需要格式化,这个格式化操作其实就是指定文件系统;文件系统的本质就是对一个存储设备上的元数据和数据的组织;

    1.2、文件系统特征

    (1)文件和目录被组织成一个单根倒置树状结构;

    (2)文件系统从根目录下开始,用“/”表示;

    (3)根文件系统(rootfs)

    (4)文件名区分大小写

    (5)以“.”开头的为隐藏文件,路径分隔符为“/”

    (6)文件有两类数据:元数据和数据

    (7)文件系统分层结构

    (8)FHS:文件系统结构标准

    1.3、文件名命名规范

    (1)文件名最长255字节;

    (2)包括路径在内的文件名称最长4095字节;

    (3)除了/和nul,所有字符都有效;

    (4)区分字符大小写

    1.4、文件系统结构

    # /boot:引导文件存放目录,内核文件(vmlinuz),引导加载器(bootloader,grub)等文件存放目录;

    # /bin:提供所有用户使用的基本命令,不能关联至其他分区,系统启动会用到的程序;

    # /sbin:管理类的基本命令;

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

    # /lib64:专用于x86_64位系统的辅助共享库文件存放目录;

    # /etc:配置文件存放目录;

    # /home:普通用户家目录;

    # /root:管理员家目录;

    # /media:移动设备挂载点;

    # /dev:设备文件以及特殊文件存储位置;例如:b --->block device 随机访问,c--->character device 线性访问(顺序访问);

    # /usr ---> universal shared read-only data

    # /var ---> variable data files

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

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

      /var/lock:锁文件

      /var/log:日志文件

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

      /var/tmp:保存系统2次重启之间产生的临时数据;

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

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

    # /tmp:存放临时文件,存放在该目录中的文件默认如果30天内没有被访问则会被清除;(重启系统也会清除)

    ###总结:一般linux上的应用程序的组成部分:

    (1)二进制程序存放位置:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin等;

    (2)库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64等;

    (3)配置文件:/etc,/etc/apps,/usr/local/etc等;

    (4)帮助文件:/usr/share/man等;

    1.5、linux下的文件类型

     

    2、文件管理

    2.1、文件查看命令

    # ls命令:列出目录内容

      用法:ls [options][files_or_dirs]

      实例:

        ls -a:显示所有文件,包含隐藏文件;

        ls -A:显示所有文件,不包含"."和“..”;

        ls -l:长格式显示;

        ls -R:递归显示目录及子目录;

        ls -1:以一列的方式显示;

        ls -ld:以长格式显示目录及文件,不显示子文件及子目录信息;

    # stat命令:查看文件状态信息

    # 三个时间说明:

    (1)atime:文件访问时间,当文件被读取和查看的时候时间更新;

    (2)mtime:文件数据修改时间,当文件数据被修改的时候更新,但是文件的元数据被修改,mtime时间不变;

    (3)ctime:当文件的元数据或者数据被修改,时间都会被更新

    2.2、创建文件

    # touch命令:文件存在则修改文件时间戳,不存在则创建文件;

      选项:

        -a:更新atime和ctime;

        -m:更新mtime和cime;

        -c:如果文件存在则更新3个时间戳,不存在则不做任何操作;

    # mkdir命令:创建目录

      选项:

        -p:可以创建多级目录;

        -v:显示创建过程信息;

        -m:创建的同时指定目录权限;

    2.3、删除文件

    # rmdir命令:删除空目录;

    # rm -rf :删除命令,慎用;

    2.4、修改文件

    # cp命令:复制文件或者目录;

    (1)当源文件是一个文件时

        # 当目标文件不存在,就新建同名文件,并拷贝源文件内容至新文件;

        # 当目标文件存在,且为一个文件,则覆盖该文件,

        # 当目标文件时一个目录时,则将源文件拷贝至目标目录文件之下;

    (2)当源文件时多个文件时

        # 当目标文件不存在,则报错(目标文件必须为一个目录文件)

    (3)当源文件是一个目录文件时

        # 当目录不存在,则创建指定名称的目录,并将所有文件放在这个目录下;

        # 当目标文件存在,且为一个文件则会报错;如果为一个目录,则会合并两个目录,相同文件则会被覆盖;

    ##常用选项:

      -i:覆盖文件时候的交互式提示;

      -r:递归复制,可以复制目录;

      -a:归档,相当于 -dR --preserve=all;

      -f:强制覆盖;

      -v:显示复制过程;

    # mv命令:移动或重命名文件

      -i:交互式;

      -f:强制覆盖;

    记录一个特殊用法:mv  /tmp/b{,.dir} ==> mv /tmp/b /tmp/b.txt

    2.5、绝对路径与相对路径

    # 绝对路径:从“/”开始的路径,例如:/home/lxroot/a.txt;

    # 相对路径:相对于当前目录,例如:../jjgame/;

    # 以/home/lxroot/a.txt 位列

    # 基名:basename  a.txt

    # 目录名:dirname  /home/lxroot

    2.6、文件通配符

    # 文件通配符一般用来作为文件名的匹配;

    3、文件系统特性

    3.1、文件系统组成

    (1)superblock超级块

    # 文件系统中第一个块被称为超级块,记录了整个文件系统的整体信息,包括inode/block的总量,剩余量等;

    (2)inode

    # 记录文件的属性,一个文件占用一个inode,同时也记录文件所在的block号;

    (3)block数据块

    # 实际记录文件内容区域,如果文件内容大于1个block的大小(最小block为1k),则需要多个block;

    # 一个文件由目录项+inode+block组成,其中目录项=文件名+inode;

    3.2、各种操作对于inode号变化

    (1)cp对于inode变化

    # 复制文件,简单的理解为复制文件就是所有新inode号+新的block;

    (2)rm对于inode变化

    # 释放inode号,删除目录项,将inode和block位置标记为空闲,实际数据不会马上被删除,当其他文件使用到该block块,数据会被覆盖;

    (3)mv对于inode变化

    # 如果在同一文件系统下移动,在目录项中添加新的文件名和inode号的对应关系(inode号不变),如果不在同一文件系统中,则和cp或rm类似;

    4、软或硬链接

    4.1、硬链接(hard link)

    # 对于文件而言,计算机真正的识别标识为inode号而非文件名,目录文件的机构可以理解为[ dir:(filename,inode_number)]

    # 目录或者文件名不相同,但是inode号相同的文件,称为“硬链接”;由于硬链接的inode号相同,就会拥有相同的inode与block的对应关系;

    # 简单来说,对于一个文件做硬链接,相当于对这个文件的内容增加了一个读取入口而已;

    # 总结:

    (1)硬链接创建的时候占用一个计数引用(连接数),不占用新的inode号;

    (2)对于被硬链接的文件和链接文件,任意其一被修改,二者内容都会被修改;

    (3)硬链接不支持跨区,不支持目录文件;

    (4)删除文件时候,只减少连接数,直到连接数为0;

    4.2、软链接(soft link)

    # 语法:ln -s file1 file2

    (1)软链接又称为符号链接,相当于windows的快捷方式,完全依赖原文件;

    (2)软链接创建的时候不会占用连接数,但是会额外占用一个inode号;

    (3)软链接需要使用绝对路径,且大小取决于路径字符数;

    (4)软链接可以跨分区,也可用于目录文件;

    5、I/O重定向

    5.1、文件的标准输入与输出

    # 程序=指令+数据

      数据分为:读入数据input,输出数据output

    # 打开的文件都有一个fd:file description 文件描述符

    # linux提供给程序三种I/O设备

      标准输入(stdin,0) 默认接受键盘的输入

      标出输出(stdout,1)默认输出到终端minor

      标准错误输出(stderr,2)默认输出到终端minor

    # 什么叫I/O重定向:其实就是改变输入与输出的默认位置;

     # 支持的符合操作

    # >>:表示为追加重定向;

    2>&1 :表示2追随1,即正确输出到哪,错误输出也到哪;

    /dev/null:是一个特殊文件,它把所有传递给它的内容全部丢弃;

    () :能合并多个程序改变标准输出;

    6、管道的使用

    # 管道(使用符号“|”表示)用来连接命令

    # 语法:command1 | command2 | command3

    # 说明:将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN;

    # 注意:STDERR默认不能通过管道转发,可以利用2>&1或者|&来实现;

  • 相关阅读:
    Keras实例教程(2)
    Keras实例教程(1)
    tf.nn.l2_loss()的用法
    在tensorflow中使用batch normalization
    Tensorflow的LRN是怎么做的
    CNN卷积中多通道卷积的参数问题
    caffe学习网站
    交叉熵反向求导计算过程
    矩阵求导
    循环神经网络(RNN)模型与前向反向传播算法
  • 原文地址:https://www.cnblogs.com/soulgou123/p/9377189.html
Copyright © 2011-2022 走看看