zoukankan      html  css  js  c++  java
  • 文件管理

    The Root Filesystem(简单介绍)

      /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:临时文件存储位置

      /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 相关的安全策略等信息的存储位置

      注意点:linux所谓的大小写敏感是因为文件系统的原因,而并非linux系统本身的原因;Windows对文件后缀是有严格规定的而linux是不关心后缀的,只有在压缩打

      包那一块是关心后缀的;

      定义文件颜色需要访问:cat /etc/DIR_COLORS这个文件

    pwd(printing working directory)

      显示当前shell的绝对路径

      参数:

        -L:显示连接路径(默认)

        -P:显示真实物理路径

    ls(列出目录内容)

      ls -a 包含隐藏文件

      ls -l 显示额外的信息
     
      ls -R 目录递归通过
      ls -r:倒序(按首字符顺序来排;数字比字母优先级高)
      ls -ld 目录和符号链接信息
      ls -1 文件分行显示(竖着显示)
      ls –S 按从大到小排序
      ls –t 按mtime排序
      ls –u 配合-t选项,显示并按atime从新到旧排序
      ls –U 按目录存放顺序显示
      ls –X 按文件后缀排序

    stat(查看文件状态)

      ctime:元数据修改,会导致时间的改变,ll需要加上--time=ctime;

      mtime:修改文件内容,会导致改变,ll默认显示mtime;

      atime:访问一次会更新时间,记录最后一次读,--time=atime

      relatime

        centos6之后引入了一种机制relatime,是为了每次读一次,不会频繁的去更新时间,这样会带来很多磁盘的I/O,因为系统写一次的时间比读要慢的多,而access就

        是要写入,所以为了避免性能的损失,relatime设置为一天以后才会去写入;还有就是mtime的时间与atime一样或者比atime新时会更新;

        

    文件通配符

      *:匹配0个或多个;
      ?:任何单个字符(包括汉字也算一个字符);
      ~:家目录
      ~wang:去wang的家,root可以任意去别人家,普通用户不能去root家;
      ~-:上一个目录,用于用ls这类命令去直接打开上一次目录的;
      ~+:同.
      ^:非
      [0-9]:匹配数字范围的其中一个(只能是正序的;)  
      不连续就挨个写,比如135[135];
      注:[a-b]与[ab]是有区别的;
      [a-b]他是aAb这样的排序下去的,所以[a-c]:就是有aAbBc这些,同样的[A-B]就是为AbB(小大小大),而[ab]就是指单单的a与b;
      所以以上的方法显示纯小写字母,大写字母是不可能了的那么怎么显示呢?用[:lower:]<-->a-z;[:upper:]<-->A-Z;最外面的[]的意思是中间的内容选一个的意思;
      [[:lower:]]:就是显示某个小写的字母;当然也可以与数字连用[[:lower:]123]
      [[:upper:]]:任意大写字母;
      [[:alpha:]]:任意大小写字母;
      [[:digit:]]:任意数字相当于0-9;
      [[:alnum:]]:任意数字或字母;
      [[:space:]]:水平或垂直空白字符;
      [[:punct:]]:标点符号;  

      [:print:]:可打印字符
      [:cntrl:]:控制(非打印)字符
      [:graph:]:图形字符
      [:xdigit:]:十六进制字符

    touch命令:

      作用:

        1、创建新文件;
        2、改变时间戳;(而且刷新的是3个时间)
      创建新文件目前知道3种了:
        1、touch,比较安全,就算文件存在,最多也就更改时间戳
        2、>比较危险,可能会清空文件;
        3、dd if=/dev/zero of=/PATH/TO/SOMEWHERE bs=1024 count=100,创建一个100M的空文件

      参数:

        -t:修改atime和mtime的时间戳(年月日时分秒);
        -c:文件不存在也不创建,仅仅是刷新已经存在的时间戳;
        -a:仅改变atime和ctime;
        -m:仅改变mtime和ctime;
        ctime是元数据相关的,一般内容改变了大小会变所以mtime改变会影响ctime,访问时间的改变也会影响ctime的改变;

    cp  

      一个源文件:
        不存在:创建并将内容填充;
        文件:覆盖加改名;
        目录:目录中有同名,填充文件;没有同名,就创建同名文件,内容填充至新文件;
      多个源文件:
        不存在:提示错误
        文件:提示错误
        目录:新建同名文件,内容填充于此;
      目录(需使用-r):
        不存在:复制SRC目录下所有文件至新建同名目录;
        文件:提示错误
        目录:新建同名目录,递归复制于此

      参数:
        -f:--force
        这里的强制是指,比如你在/root下创建的文件他的所有者和属组都是root,那么如果你用普通用户去覆盖他,就需要用-f去强制执行,其原里是,删除原来文件去新建,所有者和属组的文件;
        -r/R:递归;
        -i:覆盖前提示;
        -n:如果目标存在不覆盖,注意两者顺序;
        -d:--preserv=links不复制源文件,只复制链接名;(默认cp是复制软连接真实指向的内容;)
        -preserv=all + -dR<-->-a:
        -v:显示过程
        -u:--update只复制源比目标新的的文件或目标不存在的文件;
          可用于配置文件;
        --backup=numbered:文件名存在的时候,覆盖会做一次配备分,名字为原来的名字加上.~#~

        注:cp只能复制一般的文件,比如复制/dev/zero这个文件加上-a参数还可以,如果不加参数,他会不断输入0去填充你的目标文件,最终将你的磁盘的占满,所以这里有专门复制设备文件,mknod /app/zero c 1 5(为字符设备,主设备号为1,次设备号为5;)

    rename:改名(做批量备份)

      rename [options] expression replacement file...
      例:rename '.log' '.log.bak' f*


    tree:

      参数:
        -d:只显示目录;
        -L level:指定显示的层数;
        -P pattern:显示由正则表达式匹配的;

    mkdir:

      -p:递归创建;
      -v:过程;
      -m MODE:创建目录时直接指定权限;

    rmdir:只能删空目录

      -p:从内往外分析是否是空目录往外删;
      -v:过程;

    lsof:查看进程打开的文件

      lsof|grep deleted,可以看到文件已经被删除了,但是没有被释放的,比如你vim还在编辑此文件,在这里可以查看的到;在这里能看到的都是已经删了,但是还没有释放的文件;

    对于大文件的删除:
    > /boot/bigfile:这样清空内容是最好的办法,速度也是最快的;接下来如果不需要了再rm删除;这样能马上释放文件,如果用rm直接删的话,有时候如果在使用的话,那么其实删了内存也没释放;

    watch -n 1 :1秒去执行一次,适合去监控;

    I/O:

      程序:指令+数据;
      单单使用一些指令没有数据是没有意义的,那么我们的内存是断电易失的设备,而且容量有限,所以需要配合磁盘来使用,那么就需要用到I/O;
      打开的文件都有一个fd:file description(文件描述符),是数字;
        例子:当我们用一个shell用vim去编辑一个文件的时候,通过ps aux|grep vim;可以看到在正在使用的进程编号;然后在进入到/proc/进程编号/fd,可以看到文件描述符(高亮显示的数字4),也可以看到正在打开/root/.f1.swp;
      vim的工作特性:
        你打开vim的时候,他不是真正在用vim,而是临时的先开了/root/.f1.swp,只有你修改完存盘他才会真正的去使用vim;这个文件在运行时,可以在/root下看到,而关闭vim的时候,就看不到了;
      STDIN(0):
        默认是键盘的输入;
      STDOUT(1):
        默认是当前终端窗口输出;
      STDERR(2):
        默认是当前终端窗口输出;
        重定向的意义是改变默认I/O位置;
      >(STDOUT):
        ls > /dev/pts1;可以将输出内容到其他终端下;
        set -C:禁止覆盖已有文件,但可追加;
         >| file:强制覆盖;
        set +C:允许覆盖;
        如果要多条命令追加的话,用()来括起来;
          (ls;pwd;hostname) > /app/all.log;

      /dev/null;
        用于以后写脚本时候,你不想要的在屏幕上显示的数据;

      例子:
        (echo error 1>&2) >/dev/null
          在屏幕上还是会显示,1>&2,就是把正确的跟错误的一样输出(1>&2,前面跟后一样),所以当错误的输出,所以不会去黑洞,而是在屏幕显示;
        (errcmd;hostname) 2>&1 > /app/aaa;
          系统是这样分析的,错误的结果,正确的结果 2>&1 >/app/aaa;第一层()的效果仅仅是执行的结果;然后错误的仍然照常输出,正确的经过2>&1判断下由于正确的被放到/app/aaa里去了,所以屏幕上只显示第一项
        ((errcmf;hostname) 2>&1) > /app/aaa;
          (错;对 2>&1) >/app/aaa;错变对之后是(对;对)>/app/aaa所以内容都进文件了,屏幕上无输出;
    1>&2:对变错;2>&1:错的变对的;

    tr:   

      处理输入信息的(转换和删除字符串的,后换前);
      默认是键盘输入,所以你输入tr,跟cat同理,都是等待键盘的输入的;所以tr和cat也可能利用<(输入重定向来)来接收文件的信息;

      参数:
        -t:截断;
        tr -t 123 ab;后面只有2个所以会截断到前面2个,3不做替换;
        -d:指定删
        tr -d 'a-z' < /etc/fstab;
          把所有小写的都删了;
        tr -dc 'a'
          会除了a都算,连按的回车也算,所以结束输入需要用ctrl+d;’a\n‘这样是保留a和回车;
        -s:把连续出现的自动内容压缩成一个;
          tr -s " " :
          压缩了之后再用:代替空格;
          这种方法在日后的操作中非常多用,当有很多分割符的时候可以用tr来改成一个来处理;    

        -c:取反;
          tr -sc 'a';
            就是除了a都去重;

    tee:

      在屏幕上显示又输出到文件;
        相当于有多了一条路,如T字路,多一条屏幕输出的路,又可对其进行操作了;功能更强大了;
      -a:这个命令不加-a参数是覆盖的,-a是追加;

      指定文件描述符:exec 8<> f1
        指定f1文件的fd为8;
        ll /proc/$$/fd(他相当于是软连接指向f1);
          $$是当前进程;这样可以看到刚刚指定的f1的fd为8;
      取消指定的符号描述符:
        exec 8>&-

  • 相关阅读:
    【pytorch】torch.manual_seed()用法详解
    【python】具体能做些什么?(有哪些应用领域)
    【python】函数参数前加*星号的含义
    【python】Keyword-Only Arguments(强制关键字参数)
    【python】字符串find()方法
    碧蓝航线内部表情包(有爱自取)
    【python】60行代码实现给头像戴上圣诞帽(opencv)
    【python】30行代码实现视频中的动漫人脸检测(opencv)
    Linux supervisord配置使用 ubuntu
    BananaPi python-Mysql 操作库
  • 原文地址:https://www.cnblogs.com/wuyanzu123/p/9259810.html
Copyright © 2011-2022 走看看