• 文件的软硬链接


    文件的软硬链接

    系统的链接文件

    文件有文件名和数据,在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
    
    
  • 相关阅读:
    maven插件安装与使用
    java面试题
    关于java的GC
    技术人员要树立自己的品牌
    为什么IT公司都应该鼓励开源
    你应该坚持写博客 即使没有读者
    计算机基础
    收藏 | 产品经理不可不知的 7 种技术思维
    我讨厌你公事公办的样子
    子序列问题【LIS、LCS、LCIS】
  • 原文地址:https://www.cnblogs.com/1naonao/p/11065943.html
Copyright © 2020-2023  润新知