私はLinuxの初心者>でtouchあり、同じ効果があるかどうか疑問に思っています。つまり、次の2つのコマンドは同じ効果がありますか?
$ > file.txt
$ touch file.txt
もしそうなら、 `> file.txt 'と入力して新しいファイルを作成できることを知っておくといいでしょう。
touchがデータを含むファイルは何も起こらないが、あなたが>そのファイルを消すなら何も起こらないと言っています。
私はLinuxの初心者>でtouchあり、同じ効果があるかどうか疑問に思っています。つまり、次の2つのコマンドは同じ効果がありますか?
$ > file.txt
$ touch file.txt
もしそうなら、 `> file.txt 'と入力して新しいファイルを作成できることを知っておくといいでしょう。
touchがデータを含むファイルは何も起こらないが、あなたが>そのファイルを消すなら何も起こらないと言っています。
回答:
両方でtouch、>存在しない場合は新しいファイルを作成します。次の端末コマンドはtouch、既存のファイルを表示するとアクセス/最終変更時刻が更新されることを示しています。ただし>、既存のファイルに移動すると、ファイルは切り捨てられ、最終変更時刻が更新されます(アクセス時刻は更新されません)。>ファイルを削除/リンク解除しないことに注意してください。iノードは同じまま-理由である>/またはtruncate一般的にも、開いているファイルハンドルにログファイルをクリアするために使用されています。
rick@dell:~$ > EmptyFile
rick@dell:~$ touch EmptyFile2
rick@dell:~$ ls Empty*
EmptyFile EmptyFile2
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ echo Hello > EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ > EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ echo Hello > EmptyFile
rick@dell:~$ touch EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:32 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
コメントで述べたようにtouch、外部コマンドであり、ファイルに対してのみ動作します。>は、さまざまな目的に役立つシェルの組み込み機能です。通常、次のように使用されcat source.fil > target.filます。
ファイルを空にする長い形式は次のとおりです。
cat /dev/null > emptyme.fil
を使用> emptme.filすると、ファイルに何もリダイレクトしないコンパクトな形式で同じことが実現します。
> file.txtログファイルを消去するのに適しています。
ln foo bar、その後、削除して再作成foo、barまだその前の内容を持っています)。
rm /var/log/nginx/access.lognginxがそのファイルを開いている間、リンクは0になりますが、iノードはまだ存在するとします。 lsof -c nginx | grep access.log次にpidを使用しls -l /proc/<pid>/fd/ | grep access.log、最後にcat / proc / <pid> / fd / <前のコマンドのファイル名> `を使用します。これは古いですが、コメントします。それが理にかなったことを願って
2つの間には大きな違いがあります。 Touchファイルにタイムスタンプを付けるために使用されるコマンドです。>記号は標準出力リダイレクタです。
タッチの使用法
ファイルが存在しない場合、ファイルが作成されます。
タッチは一般的にフラグを作成するために使用されます。たとえば、システムで2回の間にすべてのファイルを検索する場合、次のコマンドシーケンスを使用できます。
$ touch -t 201609292200 starttime
$ touch -t 201609292300 endtime
これにより、次のファイルが作成されます(または、存在する場合はタイムスタンプが変更されます)。
-rw-rw-r-- 1 ljames ljames 0 Sep 29 23:00 endtime
-rw-rw-r-- 1 ljames ljames 0 Sep 29 22:00 starttime
これで、findを使用して、その時間(これら2つのファイルのタイムスタンプ間の時間、つまり2016年9月29日の午後10時から午後11時まで)に変更されたすべてのファイルを表示または処理できます。
$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n"
これは、上記のfindコマンドの部分的な出力です。
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com_groups.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/google_feed_backups/apollothethird@gmail.com.xml
-rw-rw-r-- 09/29 22:08 08 /home/users/l/j/ljames/.thunderbird/lj7p62iq.default/gcontactsync/address_book_backups/abook.mab.bak
-rw-rw-r-- 09/29 23:00 00 /home/users/l/j/ljames/endtime
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/Temp
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi
drwx------ 09/29 22:44 44 /home/users/l/j/ljames/.config/google-chrome/Default/Extensions/fahmaaghhglfmonjliepjlchgpgfmobi/1.337.0_0
出力リダイレクトの使用
リダイレクトシンボルは、標準出力を指定されたファイルにリダイレクトします。clobber / noclobberの設定によっては、失敗する可能性があります。Noclobberは、ファイルが存在しない場合にのみファイルを作成します。
リダイレクト出力には次のような多くのバージョンがあります。
>-標準出力をリダイレクトします。既存のファイルを作成または上書きします。 >>-追加をリダイレクトします。既存のファイルを作成または追加します。 >&-標準出力と標準エラーの両方をリダイレクトします。 >>&-標準出力と標準エラーの両方をリダイレクト/追加する
find上記のコマンドを使用して、指定された時間内に作成されたすべてのファイルの内容を、後でログに記録して調査できるファイルにリダイレクトできます。
$ find ~/ -newer starttime ! -newer endtime -printf "%M %Tm/%Td %TH:%TM %TM %p\n" > ~/files.log
file.txt存在し、空でない場合、> file.txtその内容を消去しますが、消去しないと述べてtouch file.txtいます。しかし>> file.txt、touch file.txtこれに代わる適切な代替手段については誰も言及していません。ファイルが存在しない場合は作成します(許可されている場合)が、既存のファイルは切り捨てられません。参照してください。「>」と「>>」の違いは何ですか?
Usage of Output redirectionます。通知はsays >>= Redirect append>です。
>> file.txtはできませんtouch file.txt。(あなたが言及した唯一の人物だという事実>> のすべてでは、私はあなたの答えの下ではなく、質問の下に私のコメントを投稿する理由である。)
>シェル出力リダイレクト演算子であり、前のコマンドのSTDOUTを後述のファイル記述子にリダイレクトするために使用されます>。ファイルが存在する場合はopen(2)、O_TRUNCフラグ付きの-edが付いたファイルとしてコンテンツが切り捨てられ、ファイルが存在しない場合は作成されます。
このリダイレクション演算子は、前のコマンドが実行される前にシェルによって処理されるため、コマンドに依存せず、シェル自体によって処理されることに注意してください。
いくつかのシェル(例zsh:)は、次のような空のリダイレクトでは異なる動作をすることに注意してください。
>file.txt
一般的な回避策は、:(true)no-opコマンドを追加することです。
: >file.txt
従来、touchファイルの作成ではなく、ファイルのタイムスタンプを変更することが主な目的でした。
touch引数で指定されたファイルが存在しない場合にのみファイルを作成します。そうでない場合は、ファイルの変更時刻を現在のタイムスタンプに変更します。を使用して、アクセス時間とiノード作成時間を変更することもできますtouch。
zsh空のリダイレクトをサポートします- catファイルへの引数なしのリダイレクトと非常によく似た動作をします。基本的に、入力した内容はすべて、EOF文字または割り込みが発生するまでファイルに書き込まれます。これは、のようにファイルの内容を単純に出力するzshjustだけ<fileで動作をミラーリングしますcat。これらは設定可能かもしれません<fileが、ページャーでファイルを開くのを見てきました。
EOF(cat >file.txtあなたが言ったように行うことのように)、どこでもbash行うだけで>file.txt十分です。
touchは、ファイルの変更時刻とアクセス時刻の両方を更新します。どちらか一方のみを更新するオプションがあります。(2)Unix / Linux / POSIXは、一般に「inode作成時間」をサポートしません。一部のファイルシステムタイプではサポートされていますが、それを変更することはもちろん、普遍的な方法で見ることはできません。touchユーザーがiノードの作成時間を変更できるようにするインカネーションがあるという参照を提供できますか?
file.txt、すでに存在し、空ではありませんが、彼らは確かにしないでください。