目录
文件的软硬链接
系统的链接文件
文件有文件名和数据,在linux上被分为两部分:用户数据,元数据
用户数据:文件的数据块(data block),数据块是记录文件真实内容的地方,我们将其称为block
元数据:文件的附加属性,例如:文件大小,创建时间,属组,属主...等,我们称其为Inode
在Linux中,inode
是文件元数据的一部分,但其并不包含文件名,inode
号即索引节点号
文件名仅是为了方便人们的记忆和使用,系统或者程序通过inode
号寻找正确的文件数据块。
下图为文件读取的流程:
软链接
1什么是软链接
软链接相当于windows的快捷方式,软链接文件会将inode指向源文件的block
注意:当我们访问这个软链接文件时,其实就是在访问源文件的本身。
1.那么当我们对一个文件创建多个软链接时,其实就是多个inode
指向同一个block
。
2.那么当我们删除软链接文件时,其实只是删除了一个inode
的指向,并不会对源文件造成影响。
3.如果我们删除的是源文件,那么该文件的所有软链接文件都会失效。
[root@db04 ~]# touch soft_link
[root@db04 ~]# ln -s soft_link /tmp/soft_link
[root@db04 ~]# ls -li soft_link /tmp/soft_link
662184 -rw-r--r-- 1 root root 0 6月 1 10:42 soft_link
915769 lrwxrwxrwx 1 root root 9 6月 1 10:42 /tmp/soft_link -> soft_link
软链接的应用场景
- 软件升级
- 代码发布
- 不方便移动的目录
- 数据回滚
- 程序读取
硬链接
- 具有同一个inode号的文件,互为硬链接文件
- 目录不能创建连接
软硬链接总结
- 创建命令不同
软链接:ln -s
硬链接:ln - 目录不能创建硬链接,并且硬链接不可以跨越系统的分区,软链接可以
- 硬链接文件与源文件inode相同,软链接文件与源文件inode不同
- 删除软链接文件,对源文件无影响,但是删除软链接源文件对软链接文件有影响
- 删除硬链接文件,对源文件也无影响,并且删除源文件,对硬链接文件也无影响
企业面试题
当前磁盘空间还剩余500G,但是就无法往里面写入数据,报错,磁盘空间满了。
1T磁盘,用户数据把inode沾满了
[root@db04 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg_db01-lv_root 1152816 76391 1076425 7% /
tmpfs 238319 1 238318 1% /dev/shm
/dev/sda1 128016 39 127977 1% /boot
#模拟
[root@db04 ~]# dd if=/dev/zero of=/opt/disk bs=1K count=1024
[root@db04 ~]# mkfs.ext4 -i 1024 /opt/disk
[root@db04 ~]# mkdir /data1
[root@db04 ~]# mount -t ext4 -o loop /opt/disk /data1
[root@db04 data1]# touch file{1..2000}
touch: 无法创建"file1014": 设备上没有空间
touch: 无法创建"file1015": 设备上没有空间
touch: 无法创建"file1016": 设备上没有空间
touch: 无法创建"file1017": 设备上没有空间
touch: 无法创建"file1018": 设备上没有空间
[root@db04 data1]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_db01-lv_root 18G 2.0G 15G 12% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 485M 39M 421M 9% /boot
/opt/disk 891K 39K 801K 5% /data1
[root@db04 data1]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg_db01-lv_root 1152816 76393 1076423 7% /
tmpfs 238319 1 238318 1% /dev/shm
/dev/sda1 128016 39 127977 1% /boot
/opt/disk 1024 1024 0 100% /data1
硬链接数计算
[root@db04 ~]# mkdir hard
[root@db04 ~]# ll hard -d
drwxr-xr-x 2 root root 4096 6月 1 12:50 hard
[root@db04 ~]# cd hard
[root@db04 hard]# mkdir test1
[root@db04 ~]# ll -d hard
drwxr-xr-x 3 root root 4096 6月 1 12:50 hard
[root@db04 ~]# cd hard
[root@db04 hard]# touch test
[root@db04 ~]# ll -d hard
drwxr-xr-x 3 root root 4096 6月 1 12:50 hard
VIM编辑
vi和vim的区别
- vi不显示高亮颜色语法
- vim显示高亮颜色语法
- 其他功能没有什么区别
- 所以在linux系统下,使用vi还是vim取决个人习惯。
VIM模式介绍
vim编辑器配置文件整体流程如下:
- 默认打开文件处于普通模式
- 需要从普通模式切换至编辑模式
- 编辑模式修改配置文件, 然后返回普通模式.
- 最后通过普通模式进入末行模式,保存和退出操作.
注意
在vim中,无法直接从编辑模式切换到末行模式。
vim环境变量
环境变量临时生效
- :set nu 显示行号
- :set ic 忽略大小写, 在搜索的时候有用
- :set ai 自动缩进
- :set list 显示制表符(空行、tab键)
- :set no[nu|ic|ai…] 取消临时设定的变量
环境变量永久生效
~/.vimrc 个人环境变量(优先级高) /etc/vimrc 全局环境变量
# vim ~/.vimrc
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
set number
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set ruler
set incsearch
set showmatch
set matchtime=10
set ignorecase
set cursorline
set t_Co=256
colorscheme molokai
#语法检查及高亮
syntax on
#设定默认解码
set?fenc=utf-8?
set?fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
#显示行号
set?number?
#vim使用自动对齐,也就是把当前行的对齐格式应用到下一行
set?autoindent?
#依据上面的对齐格式,智能的选择对齐方式
set?smartindent?
#设置tab键为4个空格
set?tabstop=4?
#设置当行之间交错时使用4个空格
set?shiftwidth=4?
#设置在编辑过程中,于右下角显示光标位置的状态行
set?ruler?
#设置增量搜索,这样的查询比较smart
set?incsearch?
#高亮显示匹配的括号
set?showmatch?
#匹配括号高亮时间(单位为?1/10?s)
set?matchtime=10?
#在搜索的时候忽略大小写
set?ignorecase?
#禁止生成临时
#set?nobackup?
#当前行高亮
set?cursorline?
#支持256色
set?t_Co=256?
//如果个人vim环境没有配置, 则使用全局vim环境变量配置。
//如果个人vim环境和全局环境变量产生冲突, 优先使用个人vim环境变量。
vim扩展知识
1.如何同时编辑多个文件
vim -o file1 file2 水平分割
vim -O file1 file2 垂直分割
//ctrl+ww 文件间切换
2.相同文件之间差异对比
diff
vimdiff vim方式打开两个文件对比,标记不同的内容
3.如果vim非正常退出(Ctrl+z)挂起或强制退出终端没关闭vim
删除同文件名.swp文件即可解决
w 查看是否有人编辑
.filename.swap rm -f .filename.swp