Linux系统编程24 文件系统 - 链接文件和目录操作

硬链接:硬链接与目录项是同义词,而且建立硬链接有限制,不能给分区建立,不能给目录建立。

如下 bigfile 文件 Inode: 12849444 Links: 1。
ln bigfile bigfile_link 硬链接之后
bigfile : Inode: 12849444 Links: 2
bigfile_link : Inode: 12849444 Links: 2

Links加一,所以硬链接就是 目录项的同义词,所以用ln 给一个文件做了硬链接,本质就是在当前目录下的目录文件当中多写了一行目录项,该目录项 用 bigfile_link 文件名 关联 Inode: 12849444 。即两个文件名对应同一个 inode。

mhr@ubuntu:~/work/linux/wenjianxitong/20$ stat bigfile
  File: 'bigfile'
  Size: 5368709120	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 12849444    Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/     mhr)   Gid: ( 1000/     mhr)
Access: 2020-05-04 09:07:52.395872798 -0700
Modify: 2020-05-04 09:04:27.883813275 -0700
Change: 2020-05-04 09:04:27.883813275 -0700
 Birth: -
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ ln bigfile bigfile_link
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ stat bigfile
  File: 'bigfile'
  Size: 5368709120	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 12849444    Links: 2
Access: (0600/-rw-------)  Uid: ( 1000/     mhr)   Gid: ( 1000/     mhr)
Access: 2020-05-04 09:07:52.395872798 -0700
Modify: 2020-05-04 09:04:27.883813275 -0700
Change: 2020-05-05 01:46:59.918698615 -0700
 Birth: -
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ stat bigfile_link
  File: 'bigfile_link'
  Size: 5368709120	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 12849444    Links: 2
Access: (0600/-rw-------)  Uid: ( 1000/     mhr)   Gid: ( 1000/     mhr)
Access: 2020-05-04 09:07:52.395872798 -0700
Modify: 2020-05-04 09:04:27.883813275 -0700
Change: 2020-05-05 01:46:59.918698615 -0700
 Birth: -
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 

符号链接:符号链接的优点是可以跨分区,可以给目录建立。

mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ ln -s bigfile_link bigfile_s
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ stat bigfile_link
  File: 'bigfile_link'
  Size: 5368709120	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 12849444    Links: 2
Access: (0600/-rw-------)  Uid: ( 1000/     mhr)   Gid: ( 1000/     mhr)
Access: 2020-05-04 09:07:52.395872798 -0700
Modify: 2020-05-04 09:04:27.883813275 -0700
Change: 2020-05-05 01:46:59.918698615 -0700
 Birth: -
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 
mhr@ubuntu:~/work/linux/wenjianxitong/20$ stat bigfile_s
  File: 'bigfile_s' -> 'bigfile_link'
  Size: 12        	Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d	Inode: 12847417    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/     mhr)   Gid: ( 1000/     mhr)
Access: 2020-05-05 01:58:18.333394043 -0700
Modify: 2020-05-05 01:58:18.201401500 -0700
Change: 2020-05-05 01:58:18.201401500 -0700
 Birth: -
mhr@ubuntu:~/work/linux/wenjianxitong/20$ 

符号链接文件的 Size: 12 就是 ‘bigfile_link’ 名的大小,所占用磁盘空间是0
如果删除符号链接文件指向的文件,源文件失效,再使用该符号链接文件,会出错。

在这里插入图片描述


link

命令 ln 是由系统调用 link()封装来的

NAME
link, linkat - make a new name for a file

SYNOPSIS
#include <unistd.h>

   int link(const char *oldpath, const char *newpath);

utime:

NAME
utime, utimes - change file last access and modification times
修改文件最后读和最后修改时间
SYNOPSIS
#include <sys/types.h>
#include <utime.h>

   int utime(const char *filename, const struct utimbuf *times);

目录的创建和销毁

NAME
mkdir, mkdirat - create a directory

SYNOPSIS
#include <sys/stat.h>
#include <sys/types.h>

   int mkdir(const char *pathname, mode_t mode);

NAME
rmdir - delete a directory

SYNOPSIS
#include <unistd.h>

   int rmdir(const char *pathname);

DESCRIPTION
rmdir() deletes a directory, which must be empty. 只能删除一个空目录


更改当前工作路径:cd

NAME
chdir, fchdir - change working directory

SYNOPSIS
#include <unistd.h>

   int chdir(const char *path);
   int fchdir(int fd);

获取当前工作路径 :pwd

NAME
getcwd, getwd, get_current_dir_name - get current working directory
获取当前工作路径

SYNOPSIS
#include <unistd.h>

   char *getcwd(char *buf, size_t size);

猜你喜欢

转载自blog.csdn.net/LinuxArmbiggod/article/details/105934941