file
指定されたファイルがあるとしますmtime
。シンボリックリンク自体sym
を指すシンボリックリンクを作成すると、 -stampとは異なる生成時間に対応する-stampが得られます。file
ln -s
mtime
symlink
mtime
file
mtime
それでは、指すファイルと同じシンボリックリンクを作成する方法はありますか?
この質問の背景はこれクラウドイメージの最新のn個のファイルのリンクディレクトリを生成するスクリプト。ls -lt
このディレクトリでこれを行うと、current
実際のファイルの作成日を表示するのではなく、シンボリックリンクの作成日が表示されます。さて、ファイル作成日を見たいです。
編集する 元の投稿で誤ってctimeを要求しましたが(上記で変更しました)、質問はmtimeに関するものでなければなりません。この点を指摘してくれた@ilkkachuに感謝します。
答え1
ctimeやmtimeを言うのですか? Ctimeは、ファイルメタデータ(inodeの内容)が最後に変更された時刻です。または文書の内容。書き込み時に更新されますが、権限が変更されても更新されます。 mtimeはファイルデータが最後に書き込まれた時間であり、変更できますが、touch
ctimeは通常変更できません。
レプリカをリセットできるため、通常はmtimeが便利です。また表示されますls -lt
(ctimeを表示するには追加する必要があります-c
)。
touch -h
以下を使用してシンボリックリンクのランタイムを変更できます。
$ ls -lt
total 4
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Sep 4 15:10 link.txt -> hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31 1999 hello.txt
$ touch -h -r hello.txt link.txt
$ ls -lt
total 4
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31 1999 hello.txt
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Dec 31 1999 link.txt -> hello.txt
ただし、これはまだ手動で実行する必要があり、ターゲットファイルが変更されても自動的に更新されません。ただし、ls -L
リンク自体ではなくターゲットファイルの詳細を印刷することができます。
$ touch hello.txt
$ ls -L -lt
total 8
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep 4 15:12 hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep 4 15:12 link.txt
もちろんリンクという事実も隠す。
リンク名と宛先、指定されたファイルの日付と所有権を表示する混合出力が必要な場合は、Perlなどのツールを使用してリストを作成できます。
答え2
ln
または、touch
システムコールはすべて変更utimensat
できず、&ctime
のみ変更できます。mtime
atime
これがあなたの場合本物実行する必要がある場合の唯一のオプションは、独自のシステムコール/カーネルモジュール/ユーザースペースexeファイルを実行することです。
答え3
いいえ、シンボリックリンク自体には便利なメタデータ(タイムスタンプ、所有者、権限)はありません。
ただし、withを使用する-H
と、ls
シンボリックリンクを逆参照(つまりフォロー)できます。または-L
。stat
あるいは、readlink -e
リンクされた質問に対する私の答えでasを使用して、そのシンボリックリンクが指す完全なフルパス名を取得することもできます。