侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux下ln命令用法详解

ln命令介绍

ln命令是Linux系统中的一个基本命令,它的作用是为文件或目录创建链接。链接有两种类型:硬链接和符号链接。硬链接是指不同的文件名指向同一个文件,它们共享相同的inode号和数据块。符号链接是指一个文件名指向另一个文件名,它们只是保存了目标文件的路径信息。通过使用ln命令,我们可以方便地管理文件和目录,实现快速访问和节省空间等功能。

适用的linux版本

ln命令是一个通用的Linux命令,它在大多数Linux发行版中都可以使用。如果某些Linux系统没有安装ln命令,可以通过以下命令来安装:

# Debian/Ubuntu
sudo apt-get install coreutils

# Red Hat/CentOS
sudo yum install coreutils
#或者
sudo dnf install coreutils

# Arch Linux
sudo pacman -S coreutils

ln命令的基本用法

ln命令的语法格式如下:

ln [选项] 源文件 目标文件

其中,源文件是要创建链接的原始文件或目录,目标文件是要创建的链接文件或目录。如果没有指定选项,ln命令默认创建硬链接。如果要创建符号链接,需要使用-s选项。

ln命令的常用选项说明

ln命令有很多选项,但以下是最常用的几个:

  • -s:创建符号链接,而不是硬链接。
  • -f:强制执行,如果目标文件已经存在,就覆盖它。
  • -i:交互模式,如果目标文件已经存在,就询问用户是否覆盖它。
  • -v:显示详细信息,显示每个创建的链接。
  • -n:当创建符号链接时,如果目标文件是一个目录,就不要跟随它。
  • -b:当覆盖目标文件时,先备份它,备份文件的后缀为~。

ln命令的实例

以下是一些使用ln命令的实例,你可以根据自己的需要进行修改和尝试。

实例1:为一个文件创建硬链接

# 创建一个名为file1.txt的文件,并写入一些内容
echo "Hello, world!" > file1.txt

# 为file1.txt创建一个硬链接,名为file2.txt
ln file1.txt file2.txt

# 查看两个文件的inode号和内容,可以看到它们是相同的
ls -i file1.txt file2.txt
cat file1.txt file2.txt

实例2:为一个目录创建硬链接(失败)

# 创建一个名为dir1的目录,并在其中创建一些文件
mkdir dir1 && cd dir1 && touch a b c && cd ..

# 试图为dir1创建一个硬链接,名为dir2(失败)
ln dir1 dir2

# 查看错误信息,提示不允许为目录创建硬链接
ln: 'dir1': hard link not allowed for directory

实例3:为一个文件创建符号链接

# 创建一个名为file3.txt的文件,并写入一些内容
echo "Hello, Linux!" > file3.txt

# 为file3.txt创建一个符号链接,名为file4.txt
ln -s file3.txt file4.txt

# 查看两个文件的inode号和内容,可以看到它们是不同的,但内容相同
ls -i file3.txt file4.txt
cat file3.txt file4.txt

实例4:为一个目录创建符号链接

# 创建一个名为dir3的目录,并在其中创建一些文件
mkdir dir3 && cd dir3 && touch d e f && cd ..

# 为dir3创建一个符号链接,名为dir4
ln -s dir3 dir4

# 查看两个目录的inode号和内容,可以看到它们是不同的,但内容相同
ls -i dir3 dir4
ls -l dir3 dir4

实例5:覆盖已经存在的目标文件

# 创建一个名为file5.txt的文件,并写入一些内容
echo "Hello, world!" > file5.txt

# 创建一个名为file6.txt的文件,并写入一些内容
echo "Hello, Linux!" > file6.txt

# 试图为file5.txt创建一个硬链接,名为file6.txt(失败)
ln file5.txt file6.txt

# 查看错误信息,提示目标文件已经存在
ln: 'file6.txt': File exists

# 使用-f选项强制覆盖目标文件
ln -f file5.txt file6.txt

# 查看两个文件的inode号和内容,可以看到它们是相同的,且内容为file5.txt的内容
ls -i file5.txt file6.txt
cat file5.txt file6.txt

实例6:在覆盖已经存在的目标文件之前进行备份

# 创建一个名为file7.txt的文件,并写入一些内容
echo "Hello, world!" > file7.txt

# 创建一个名为file8.txt的文件,并写入一些内容
echo "Hello, Linux!" > file8.txt

# 使用-b选项在覆盖目标文件之前进行备份,备份文件的后缀为~
ln -b file7.txt file8.txt

# 查看两个文件和备份文件的inode号和内容,可以看到它们是不同的,且内容分别为file7.txt和file8.txt的内容
ls -i file7.txt file8.txt file8.txt~
cat file7.txt file8.txt file8.txt~

实例7:在覆盖已经存在的目标文件之前询问用户是否确认

# 创建一个名为file9.txt的文件,并写入一些内容
echo "Hello, world!" > file9.txt

# 创建一个名为file10.txt的文件,并写入一些内容
echo "Hello, Linux!" > file10.txt

# 使用-i选项在覆盖目标文件之前询问用户是否确认,输入y表示确认,输入n表示取消
ln -i file9.txt file10.txt

# 查看提示信息,提示是否覆盖目标文件,输入y表示确认,输入n表示取消
ln: replace 'file10.txt'? y # 输入y表示确认,输入n表示取消

# 查看两个文件的inode号和内容,可以看到它们是相同的,且内容为file9.txt的内容(如果输入n,则不会发生任何改变)
ls -i file9.txt file10.txt 
cat file9.txt file10.txt 

实例8:显示每个创建的链接的详细信息


# 创建一个名为file11.txt的文件,并写入一些内容
echo "Hello, world!" > file11.txt

# 为file11.txt创建两个硬链接,分别名为file12.txt和file13.txt,并使用-v选项显示每个创建的链接的详细信息
ln -v file11.txt file12.txt
ln -v file11.txt file13.txt

# 查看输出信息,显示了每个创建的链接的源文件和目标文件
'file11.txt' -> 'file12.txt'
'file11.txt' -> 'file13.txt'

实例9:当创建符号链接时,不要跟随目标目录

# 创建一个名为dir5的目录,并在其中创建一些文件
mkdir dir5 && cd dir5 && touch g h i && cd ..

# 为dir5创建一个符号链接,名为dir6,并使用-n选项不要跟随目标目录
ln -s -n dir5 dir6

# 查看两个目录的inode号和内容,可以看到它们是不同的,但内容相同
ls -i dir5 dir6
ls -l dir5 dir6

实例10:为一个远程文件创建符号链接

# 创建一个名为file14.txt的文件,并写入一些内容
echo "Hello, world!" > file14.txt

# 将file14.txt上传到一个远程服务器,假设地址为http://example.com/file14.txt
scp file14.txt user@example.com:~/file14.txt

# 为远程文件创建一个符号链接,名为file15.txt,并使用完整的URL作为源文件
ln -s http://example.com/file14.txt file15.txt

# 查看两个文件的inode号和内容,可以看到它们是不同的,但内容相同
ls -i file14.txt file15.txt
cat file14.txt file15.txt

实例11:为一个不存在的文件创建符号链接(成功)

# 试图为一个不存在的文件,名为file16.txt,创建一个符号链接,名为file17.txt(成功)
ln -s file16.txt file17.txt

# 查看两个文件的inode号和内容,可以看到它们是不同的,且内容为空
ls -i file16.txt file17.txt
cat file16.txt file17.txt

# 查看file17.txt的属性,可以看到它是一个符号链接,但是指向了一个不存在的文件,因此显示为红色或带有删除线
ls -l file17.txt

实例12:删除一个硬链接或符号链接

# 创建一个名为file18.txt的文件,并写入一些内容
echo "Hello, world!" > file18.txt

# 为file18.txt创建一个硬链接,名为file19.txt,并查看它们的inode号和内容
ln file18.txt file19.txt && ls -i file18.txt file19.txt && cat file18.txt file19.txt 

# 删除file19.txt这个硬链接,并查看它们的inode号和内容,可以看到只有file18.txt还存在,且内容不变
rm file19.txt && ls -i file18.txt file19.txt && cat file18.txt file19.txt 

# 为file18.txt创建一个符号链接,名为file20.txt,并查看它们的inode号和内容
ln -s file18.txt file20.txt && ls -i file18.txt file20.txt && cat file18.txt file20.txt 

# 删除file20.txt这个符号链接,并查看它们的inode号和内容,可以看到只有file18.txt还存在,且内容不变
rm file20.txt && ls -i file18.txt file20.txt && cat file18.txt file20.tx 

实例13:修改源文件或目标文件的内容或名称对链接的影响

# 创建一个名为file21.txt的文件,并写入一些内容
echo "Hello, world!" > file21.txt

# 为file21.txt创建一个硬链接,名为file22.txt,并查看它们的inode号和内容
ln file21.txt file22.txt && ls -i file21.txt file22.txt && cat file21.txt file22.txt 

# 修改file21.txt的内容,并查看它们的inode号和内容,可以看到它们都发生了变化,且内容相同
echo "Hello, Linux!" > file21.txt && ls -i file21.txt file22.txt && cat file21.txt file22.txt 

# 修改file22.txt的内容,并查看它们的inode号和内容,可以看到它们都发生了变化,且内容相同
echo "Hello, ln!" > file22.txt && ls -i file21.txt file22.txt && cat file21.txt file22.txt 

# 修改file21.txt的名称,并查看它们的inode号和内容,可以看到只有file21.txt的名称发生了变化,但inode号和内容不变
mv file21.txt file23.txt && ls -i file23.txt file22.txt && cat file23.txt file22.txt 

# 修改file22.txt的名称,并查看它们的inode号和内容,可以看到只有file22.txt的名称发生了变化,但inode号和内容不变
mv file22.txt file24.txt && ls -i file23.txt file24.txt && cat file23.txt file24.txt
# 创建一个名为file25.txt的文件,并写入一些内容
echo "Hello, world!" > file25.txt

# 为file25.txt创建一个符号链接,名为file26.txt,并查看它们的inode号和内容
ln -s file25.txt file26.txt && ls -i file25.txt file26.txt && cat file25.txt file26.txt
0

评论区