百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Linux下的软连接和硬链接 linux中软连接和硬链接的概念和区别

sinye56 2024-12-15 16:35 4 浏览 0 评论



在 Linux 操作系统中链接会分两种,一种被称为硬链接,另一种被称为符号链接,即软链接。而默认情况下,ln 命令产生的是硬链接。

Linux 软硬链接

1. 如何查看inode

关于inode是什么,可以看这篇文章:Inode 详解

bash

# 查看文件和文件夹的inode号
$ ll -di /boot / /app

# 查看挂载点文件夹的inode号
$ df -i

2. 做inode增长实验

文件粉碎工具shredshred -uzvn10 FILE重复随机写入 10 次覆盖源文件,然后最后删除此文件。


# 创建60万个文件的方法1(效率不高)
$ for i in {1..600000}; do touch file$1; echo file$i is created;done

# 创建60万个文件的方法2(效率高)
$ echo file{1..600000} | xargs touch

# 删除前20万个文件
$ echo file{1..200000} | xargs rm

# 在创建的过程中,可以另开一个窗口,用下面命令,每隔1秒运行df -hi命令,可以查看inode的增长情况
$ watch -n1 df -hi

3. 硬链接、软链接

软链接

就相当于 Windows 的快捷方式,删掉源文件,快捷方式就失效了,软链接就找不到源文件了。

硬链接

相当于多个链接指向同一份数据存储区域,每多一个硬链接,硬链接数+1,如果一个文件,有 n 个硬链接,删除 n-1 个硬链接,源文件还在,直到删除所有硬链接,才会删除源文件。

1. 复制(cp

  • 复制过程中,复制软连接相当于复制了快捷方式,速度很快,而且可以跨分区。
  • 复制过程中,复制硬链接分为两种情形:在同一分区复制,相当于多创建一个链接指向原数据存储位置,速度很快。在不同分区复制,相当于把原来分区的数据拷贝过去存储,同时创建一个指向新数据区域的指针,速度比较慢。

2. 删除(rm

  • 删除过程中,删除软连接相当于删除了快捷方式,源文件还在。
  • 删除过程中,删除硬连接相当于删除了一个到数据块的指针,除非删除所有硬链接文件,源文件才删除。

3. 移动(mv

  • 移动过程中,移动软连接相当于移动了快捷方式而已。
  • 移动过程中,移动硬连接分为两种情形:在同一分区移动,相当于创建了一个新 inode,指向数据块,并把原来的 inode 删掉在不同分区移动,要把数据块复制到新分区,然后在新分区创建新的 inode 号指向新的数据块,并且把原来分区的 inode 号和数据块都删掉。

4. 软连接支持对目录创建,硬链接不支持

【问题 1】:当我们看到一个磁盘,使用空间没满,但是却提示”no space left on device”

那可能是inode用完了

【问题 2】:如何删除数量很多的文件(比如前面做实验创建的 60 万个文件)

技巧是使用管道|xargs,管道|后面会讲,管道是指的是前面命令的输出作为后面命令的输入。xargs,前面命令多个输出,可以用xargs一个个的传给后面的命令,而不是已下载全传给后面命令,可以解决参数太长的情况ls | xargs rm


# 创建不成功
ln dir1 dir2

# 创建成功
ln /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/ens33

5. 如何写软连接相对路径

  • 软连接写相对路径,要根据软连接文件的路径来写。


# 例如要在把/etc/issue 软连接到/app/d1/d2/d3/ilink
ln -s ../../../../../etc/issue /app/d1/d1/d3/ilink

6. 如何软链接设备文件

  • 设备文件比较特殊,如果要创建设备文件的链接,需要用到mknod命令:


[root@centos7 etc]# ll /dev/sda
brw-rw----. 1 root disk 8, 0 May 22 09:06 /dev/sda #得到主设备号和复设备号。
mknod /app/sda b 8 0
ll -i /dev/sda /app/sda

软链接练习


# 1.  创建一个目录tomcat-8.5.23,创建一个软连接tomcat到这个目录;在创建一个目录tomcat-9.0.1, 把tomcat的软连接指向新的tomcat-9.0.1目录。
ln -sv tomcat-8.5.23 tomcat
rm -rf tomcat
ln -sv tomcat-9.0.1 tomcat

# 2.  创建一个目录/mnt/lfs/tools, 然后创建/mnt/lfs/tools的软连接/tools,一般有这样的命令:ln -sv /mnt/lfs/tools /tools,如何可以更短?
mkdir -v /mnt/lfs/tools
ln -sv /mnt/lfs/tools /

4. file 命令的使用

常用选项

  • -b 列出文件辨识结果时,不显示文件名称
  • -f 列出文件中文件名的文件类型
  • -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
  • -L 查看对应软链接对应文件的文件类型
  • --help 显示命令在线帮助

注意事项

  • file命令就是查看的文件头部的信息,可以用hexdump查看源文件源码信息 (也可以用xxd命令看)。
  • 如果是二进制文件,会显示二进制的头信息。
  • 如果是文本文件,就直接是文本。


[root@centos7 ~]# hexdump -C -n 100 /bin/ls
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 3e 00 01 00 00 00 48 4b 40 00 00 00 00 00 |..>.....HK@.....|
00000020 40 00 00 00 00 00 00 00 18 c4 01 00 00 00 00 00 |@...............|
00000030 00 00 00 00 40 00 38 00 09 00 40 00 1e 00 1d 00 |....@.8...@.....|
00000040 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00 |........@.......|
00000050 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00 |@.@.....@.@.....|
00000060 f8 01 00 00 |....|
00000064

[root@centos7 ~]# hexdump -C -n 100 /etc/issue
00000000 5c 53 0a 4b 65 72 6e 65 6c 20 5c 72 20 6f 6e 20 |\S.Kernel \r on |
00000010 61 6e 20 5c 6d 0a |an \m.|
00000016

5. readlink 命令

  • 读取软连接指向的真实路径


[root@centos7 ~]$ readlink /etc/redhat-release
centos-release

文章作者: Escape

文章链接: https://www.escapelife.site/posts/1b853b12.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !

相关推荐

linux 查看当前应用内存状况,以及内存参数含义

1、查看进程号ps-ef|greptomcat2、查看当前内存分配,200ms打印一次jstat-gc进程号2001jstat-gc344802001S0CS1C...

如何显示 Linux 系统上的可用内存?这几个命令很好用!

在Linux系统中,了解可用内存是优化系统性能、故障排查以及资源管理的重要一环。本文将详细介绍如何在Linux系统上显示可用内存,包括多种方法和工具的使用。在讨论可用内存之前,我们需要了解一些...

Linux 下查看内存使用情况方法总结

Q:我想监视Linux系统的内存使用情况,在Linux下有哪些视图或者命令行工具可用呢?在做Linux系统优化的时候,物理内存是其中最重要的一方面。自然的,Linux也提供了非常多的方法来监控宝贵的内...

2、linux命令-用户管理

linux命令-用户管理用户切换[root@eric~]#sueric#切换到用户eric[eric@ericroot]$[eric@ericroot]$su#切换到rootPas...

Centos 7 进入单用户模式详解

1、开机在启动菜单按e进入编辑模式找到linux16行,在最后添加init=/bin/sh编辑完后,按ctrl+x退出2、进单用户模式后,使用passwd修改密码,提示以下错误:passwd:Aut...

每日一个Linux命令解析——newusers

newusers:在Linux系统中,newusers是一个用于批量创建用户的命令。它从一个文件中读取多行用户信息,每行描述一个用户的详细信息,并根据这些信息创建多个用户或对现有用户进行批量修改。一...

openEuler操作系统管理员指南:管理用户与用户组

在Linux中,每个普通用户都有一个账户,包括用户名、密码和主目录等信息。除此之外,还有一些系统本身创建的特殊用户,它们具有特殊的意义,其中最重要的是管理员账户,默认用户名是root。同时Linux也...

Linux用户管理

1、用户信息文件/etc/passwdroot:x:0:0:root:/root:/bin/bash第一列:用户名第二列:密码位第三列:用户ID0超级用户UID。如果用户UID...

centos7基础-用户、组、权限管理

用户和组(1)用户、组、家目录的概念linux系统支持多用户,除了管理员,其他用户一般不应该使用root,而是应该向管理员申请一个账号。组类似于角色,系统可以通过组对有共性的用户进行统一管理。每个用户...

LINUX基础 ----------组及用户的概念

在Linux中,用户和组都是非常重要的概念,可以控制文件访问权限和资源的管理。用户是标识一个进程、应用程序或系统管理员的账号,Linux中每个用户用一个用户ID(UID)来标识。对于一个...

从零入门Linux(四)用户与权限管理

在Linux系统中,用户和权限管理是系统安全的重要组成部分。通过合理配置用户和权限,可以确保系统的安全性和资源的合理分配。以下是一些与用户和权限管理相关的常用命令和概念。1.用户管理1.1添加...

如何在 Linux 中管理用户?

在Linux系统中,用户是系统资源的主要使用者,每个用户都有一个唯一的标识符(用户ID)。为了更好地组织和管理用户,Linux还引入了用户组的概念。用户组是用户的集合,有助于更有效地分配权限和资...

在 Linux 中将用户添加到特定组的四种方法

在Linux多用户操作系统中,用户组管理是系统安全架构的基石。通过合理的组权限分配,管理员可以实现:精确控制文件访问权限(chmod775project/)简化批量用户权限管理(setfacl-...

我不是网管 - 如何在Ubuntu Linux下创建sudo用户

Sudo用户是Linux系统的普通用户,具有一定的管理权限,可以对系统执行管理任务。在Linux中,root是超级用户,拥有完全的管理权限,但不建议将root凭证授予其他用户或作为r...

Linux创建普通用户,为密钥方式登录做准备

Hi,我是聪慧苹果8,就是江湖上人见人爱、花见花开,土到掉榨的Linux爱好者,一起学习吧!上一篇关于SSH安全加固的文字,有网友点评通过密钥登录更加安全,先创建一个普通用户,拒绝直接使用密码登录,这...

取消回复欢迎 发表评论: