文件管理

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>&-

 

posted @ 2018-07-03 17:41  一直飞的无脚鸟  阅读(333)  评论(0编辑  收藏  举报