zoukankan      html  css  js  c++  java
  • # 第四天-文件管理

    第四天-文件管理

    Linux文件目录

    /bin:二进制(binary),在CentOS7上已经与/usr/bin合并
    /usr/bin:二进制
    /sbin:在CentOS7上已经与/usr/sbin合并
    /boot:linux内核及启动文件
    /dev:各种设备文件(块设备(分区,硬盘设备,块设备有缓存),字符设备(登陆终端,字符设备无缓存))
    /etc:各种配置文件
    /home:家目录~
    /run:正在运行中的程序生成的文件,pid,sock,管道文件(两进程之间通讯,单向)(CentOS7),CentOS6放在/car/run
    /tmp:临时文件
    /usr:二层根,
    /bar:变化的文件,日志等,网页文件等,ftp文件等,邮件等
    lib和lib64目录:库目录
    /media:媒体设备,可挂载光盘等
    /mnt:也可以挂载U盘等设备
    /opt:用户安装的一些软件,目前不太用了
    /proc:内存的各种运行信息(进程,内存,CPU等,内存中的文件不占内存空间)
    srv:服务器数据,少用了
    /sys:硬件相关

    使用vmware不关机添加一块硬盘,并触发磁盘扫描

    1、不关机先添加一个硬盘设备()此时/dev目录下面没识别出来
    2、触发硬盘扫描
    [root@centos7 ~]# echo '- - -' > /sys/class/scsi_host/host2/scan 
    [root@centos7 ~]# echo '- - -' > /sys/class/scsi_host/host1/scan 
    [root@centos7 ~]# echo '- - -' > /sys/class/scsi_host/host0/scan
    


    • FAT32分区不区分大小写;xfs,ext4,ext3区分大小写。由文件系统决定
    • 文件有两类数据:元数据(metadata,文件属性,时间,权限,大小等),数据(data)
    • 文件名长度最长255个字节,包括路径在内文件名称最长4095个字节,NUL和斜杠不能做文件名
    • /etc/DIR_COLORS决定了各种文件显示的颜色
    • 31-37 字体颜色 41-47 背景颜色

    linux文件类型

    • -:普通文件
    • d:文件夹
    • b:块设备
    • c:字符设备
    • l:软链接文件
    • p:管道文件pipe
    • s:套接字文件socket

    以十六进制+ASCII码显示文件

    [qqq@ubutnu ~]$ cat 1.txt 
    1
    [qqq@ubutnu ~]$ hexdump -C 1.txt 
    00000000  31 0a                                             |1.|
    00000002
    [root@centos7 ~]# hexdump --help
    hexdump:无效选项 -- -
    
    用法:
     hexdump [选项] 文件 ...
    
    选项:
     -b              单字节八进制显示
     -c              单字节字符显示
     -C              规范化 十六进制+ASCII 显示
     -d              两字节十进制显示
     -o              两字节八进制显示
     -x              两字节十六进制显示
     -e 格式         用于显示数据的格式字符串
     -f 格式文件     包含格式字符串的文件
     -n 长度         只解释输入的指定长度个字节
     -s 偏移         跳过开头指定长度个字节
     -v              显示时不压缩相似的行
     -V              显示此帮助并退出
    

    使用dd命令创建一个1MB的文件,并使用hexdump查看文件

    [qqq@ubutnu ~]$ sudo dd if=/dev/zero of=/data/zerofile bs=1MB count=1
    [sudo] password for qqq: 
    1+0 records in
    1+0 records out
    1000000 bytes (1.0 MB, 977 KiB) copied, 0.85987 s, 1.2 MB/s
    [qqq@ubutnu ~]$ hexdump -C /data/zerofile 
    00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000f4240
    

    设备文件独有的属性

    [qqq@ubutnu ~]$ ll /dev/sd*
    brw-rw---- 1 root disk 8, 0 Jul 17 17:47 /dev/sda
    brw-rw---- 1 root disk 8, 1 Jul 17 17:47 /dev/sda1
    brw-rw---- 1 root disk 8, 2 Jul 17 17:47 /dev/sda2
    brw-rw---- 1 root disk 8, 3 Jul 17 17:47 /dev/sda3
    brw-rw---- 1 root disk 8, 4 Jul 17 17:47 /dev/sda4
    brw-rw---- 1 root disk 8, 5 Jul 17 17:47 /dev/sda5
    

    使用mknod命令创建一个块设备

    [qqq@ubutnu ~]$ ll /dev/sda
    brw-rw---- 1 root disk 8, 0 Jul 17 17:47 /dev/sda
    [qqq@ubutnu ~]$ sudo mknod /data/disk b 8 0
    [qqq@ubutnu ~]$ ls -l /data/disk 
    brw-r--r-- 1 root root 8, 0 Jul 23 09:11 /data/disk
    

    7月22,下午场

    • touch一般用于创建新文件,如果文件存在,会刷新文件的时间戳
      touch通过-a -c修改文件时间戳
    • cp -a用于备份,不改变文件的链接属性
    • [qqq@centos7 ~]$ sudo cp -a /etc/issue{,.bak}用于备份
      [qqq@centos7 ~]$ ls /etc/issue*
      /etc/issue  /etc/issue.bak  /etc/issue.net
      
    • cp -u 只复制源比目标文件更新的文件或目标不存在的文件
    • [root@centos7 ~]# cp 1.txt 2.txt /data -av
      cp:是否覆盖"/data/1.txt"? y
      "1.txt" -> "/data/1.txt"
      cp:是否覆盖"/data/2.txt"? y
      "2.txt" -> "/data/2.txt"
      [root@centos7 ~]# ll /data/{1,2}.txt
      -rw-r--r--. 1 root root 12 7月  23 09:16 /data/1.txt
      -rw-r--r--. 1 root root  0 7月  20 20:04 /data/2.txt
      [root@centos7 ~]# vim 1.txt 
      [root@centos7 ~]# cp 1.txt 2.txt /data -uv
      cp:是否覆盖"/data/1.txt"? y
      "1.txt" -> "/data/1.txt"
      [root@centos7 ~]# ll /data/{1,2}.txt
      -rw-r--r--. 1 root root 6 7月  23 09:18 /data/1.txt
      -rw-r--r--. 1 root root 0 7月  20 20:04 /data/2.txt
      
    • cp -b,若目标文件存在,则备份,仅备份一次,如果要多次备份,使用--backup=numberd

    • rm -rf ./不会删除隐藏文件。删隐藏文件用rm -rf .,包括隐藏目录
    • 别名优先级> 内部命令 > hash表>外部命令
    • shred 强制删,覆盖
    • [root@centos7 ~]# echo abc012 > f1
      [root@centos7 ~]# hexdump -C f1
      00000000  61 62 63 30 31 32 0a                              |abc012.|
      00000007
      [root@centos7 ~]# shred -zvn 10 f1
      shred: f1:第1 次,共11 次 (random)...
      shred: f1:第2 次,共11 次 (555555)...
      shred: f1:第3 次,共11 次 (db6db6)...
      shred: f1:第4 次,共11 次 (aaaaaa)...
      shred: f1:第5 次,共11 次 (492492)...
      shred: f1:第6 次,共11 次 (random)...
      shred: f1:第7 次,共11 次 (000000)...
      shred: f1:第8 次,共11 次 (ffffff)...
      shred: f1:第9 次,共11 次 (222222)...
      shred: f1:第10 次,共11 次 (random)...
      shred: f1:第11 次,共11 次 (000000)...
      [root@centos7 ~]# ll f1
      -rw-r--r--. 1 root root 4096 7月  23 09:23 f1
      [root@centos7 ~]# hexdump -C f1
      00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
      *
      00001000
      

    一次创建50万个文件

    直接使用touch会报错
    [root@centos7 tmp]# touch {1..500000}.txt
    -bash: /usr/bin/touch: 参数列表过长
    
    应使用xargs创建,具体用法可以看骏马金龙博客
    [root@centos7 tmp]# echo {1..500000}.txt | xargs touch
    

    命令行小技巧

    • !nginx 最近一个nginx开头的命令
    • !?nginx 包含nginx的命令
    • !* 上一命令的所有参数
    • esc,. 上一命令最后一个参数

    inode表结构(使用于ext系列的文件系统)

    inode表有12个直接块指针,1个间接块指针,1个双重间接块指针,一个三重间接块指针

    每个直接指针块指针可以指向一个4k的数据块,总共48k。小于48k的文件,直接指针块都可以完成。

    间接块指针表示一个间接块指针指向的4k数据库又包含1024个指针,每个指针指向1个4k数据块,这样总共可以指向4k*1024=4M的文件

    双重间接块指针:一个双重间接块指针指向1024个指针,这1024个指针又指向1024个指针,最后每个指针指向4k的数据块。这样总共可以指向4k * 1024 * 1024=4G的文件

    三重间接块指针同理,总共可以指向4k * 1024 * 1024 * 1024=4T的文件

    目录

    • 文件引用的是一个inode号
    • 人是通过文件名来引用一个文件
    • 一个目录是目录下的文件名和文件inode号之间的映射
    • 一般inode表会占用文件系统磁盘空间的1%
    • 一个目录文件的内容就是一个该目录下所有文件的目录项 列表

    文件名规则

    • 文件名最长255个字节
    • 包括路径在内文件名称最长为4095个字节
    • 除了斜杠和NUL,所有字符都有效,但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们

    cp命令做了哪些事

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

    rm命令做了那些事

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

    mv和inode

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

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

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

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

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

    软链接和硬链接的区别

  • 相关阅读:
    [pycharm]远程调试服务器项目
    [Linux]防火墙关闭与开启
    [Linux]安装pyenv
    [Linux]ubuntu安装基本流程
    [python]html格式转md格式
    [python]目录及文件操作
    [Linux]安装node.js
    Linux基础
    爬虫基础(3)
    爬虫基础(2)
  • 原文地址:https://www.cnblogs.com/uscWIFI/p/11229844.html
Copyright © 2011-2022 走看看