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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章