文件的软硬链接

文件的软硬链接

系统的链接文件

文件有文件名和数据,在linux上被分为两部分:用户数据,元数据

用户数据:文件的数据块(data block),数据块是记录文件真实内容的地方,我们将其称为block

元数据:文件的附加属性,例如:文件大小,创建时间,属组,属主...等,我们称其为Inode

在Linux中,inode是文件元数据的一部分,但其并不包含文件名,inode号即索引节点号

文件名仅是为了方便人们的记忆和使用,系统或者程序通过inode号寻找正确的文件数据块。

下图为文件读取的流程:

1561348143497

软链接

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

1561348228140

软链接的应用场景
  • 软件升级
  • 代码发布
  • 不方便移动的目录
  • 数据回滚
  • 程序读取

硬链接

  • 具有同一个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模式介绍

img

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

原文地址:https://www.cnblogs.com/1naonao/p/11065943.html