Linuxシステムプログラミング24ファイルシステム-リンクファイルとディレクトリ操作

ハードリンク:ハードリンクとディレクトリアイテムは同義語であり、ハードリンクの確立には制限があり、パーティションやディレクトリには作成できません。

次のbigfileファイルiノード:12849444リンク:1。
ln bigfile bigfile_link bigfileをハードリンクした後
:iノード:12849444リンク:2
bigfile_link:iノード:12849444リンク:2

リンクプラス1であるため、ハードリンクはディレクトリエントリと同義です。したがって、lnを使用してファイルへのハードリンクを作成するには、現在のディレクトリのディレクトリファイルとディレクトリにディレクトリエントリの追加行を書き込むことが重要です。エントリは、bigfile_linkファイル名:12849444でiノードに関連付けられています。つまり、2つのファイル名は同じiノードに対応します。

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$ 

シンボリックリンクファイルのサイズ:12は、「bigfile_link」名のサイズであり、占有ディスク容量は0
です。シンボリックリンクファイル指すファイル削除すると、ソースファイルが無効になり、シンボリックリンクが無効になります。ファイルを再度使用すると、エラーが発生します。

ここに画像の説明を挿入


リンク

コマンドlnは、システムコールlink()によってカプセル化されます。

NAME
link、linkat-ファイルの新しい名前を作成します

概要
#include <unistd.h>

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

utime:

NAMEの
UTIME、utimes -最終更新ファイルアクセスと変更タイムズ
ファイルを変更最後の読み取りおよび最終更新時間だった
書式
の#include <SYS / types.h>に
する#include <utime.h>

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

カタログの作成と破棄

名前
mkdir、mkdirat-ディレクトリを作成します

概要
#include <sys / stat.h>
#include <sys / types.h>

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

名前
のrmdir -ディレクトリを削除します

概要
#include <unistd.h>

   int rmdir(const char *pathname);

説明
rmdir()は、空である必要があるディレクトリを削除します。削除できるのは空のディレクトリのみです。


現在の作業パスを変更します:cd

名前
chdir、fchdir-作業ディレクトリを変更します

概要
#include <unistd.h>

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

現在の作業パスを取得します:pwd

NAME
getcwd、getwd、get_current_dir_name-現在の作業ディレクトリ
を取得して、現在の作業ディレクトリを取得します

概要
#include <unistd.h>

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

おすすめ

転載: blog.csdn.net/LinuxArmbiggod/article/details/105934941