第四天-文件管理
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表(除时间戳)或磁盘上的数据位置:没有数据被移动!