# 第四天-文件管理

第四天-文件管理

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

软链接和硬链接的区别

原文地址:https://www.cnblogs.com/uscWIFI/p/11229844.html