Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxのexecとファイル記述子のトリック

Linuxのexecとファイル記述子のトリック

  

Linuxの場合、デバイスとファイルに対する操作はすべてファイル記述子を使用して行われます。ファイル記述子は、インデックス値であり、カーネル内の各プロセス用にファイルを開くレコードテーブルを指す負でない整数です。既存のファイルを開くとき、または新しいファイルを作成するとき、カーネルはファイル記述子をプロセスに返します;ファイルを読み書きする必要があるときは、ファイル記述子をパラメータとして対応する関数に渡す必要もあります。

通常、プロセスが起動すると、標準入力、標準出力、および標準エラー処理の3つのファイルが開きます。これら3つのファイルは、マクロ記述子STDIN_FILENO、STDOUT_FILENO、およびSTDERR_FILENOであるファイル記述子0、1、および2に対応しています。

LINUXファイル記述子の数を表示および設定します。
ulimit -nulimit -n 1024

インスタンス1:execによるファイル記述子の割り当て
exec 3<> hello.txt#読み取りと書き込みこの方法は、ファイル記述子“ 3” echo” hello exec”>& 3#write“ hello exec”にバインドされており、以前に内容がある場合は、ファイルエコーの先頭から書き直される。 >& 3#「hello world」と改行してください。 Exec 3>& - #書き込みを閉じて書き込みを禁止しますが、読み取ることはできません。〜#exec 3<& - の場合は読み取りを閉じ、上記の例では〜

を書き込めません。ファイル内で、ファイルhello.txtを記述子3にバインドします。

インスタンス2:標準出力のリダイレクト
exec 1> hello.txt#それ以降は、このスクリプトからの出力がファイルhelloに書き込まれます。 Txtecho" hello exec" echo" hello world>

インスタンス3:標準出力のリダイレクトとリダイレクトの復元
exec 100> 1#ファイルディスクリプタ100の標準出力への接続#それ以来端末に出力するには、一時的なディスクリプタを使って保存する必要があります。 Exec 1> hello.txt#は、ファイルhello.txtに出力をリダイレクトし、それ以降は、このスクリプトからの出力がファイルhello.txtecho" hello exec" echo" hello world" exec>&に書き込まれます。 100 100> - #標準出力を以前に保存した標準出力である100に接続します。#標準出力が復元されたため、記述子100をオフにします。< /span> echo "「ああ、私の神よ!」#この文は端末に表示されます

インスタンス4:入力リダイレクト
exec 100<& 0exec< hello.txtread line1echo $ line1read line2echo $ line2exec 0< & 100 100>& -read custom

インスタンス5:ファイルの読み書き
#!/bin /bashLANG = Cecho" begin" OUTFILE =" hello2.txt" INFILE =" hello.txt"関数file1 {< strong>< /strong>< strong>> $ OUTFILE#ファイルを空にするのと同じです。< /strong> exec 4>& 1exec 1> $ OUTFILEを読み取り中L INEdoecho" $ LINE":< $ INFILEexec 1>& 4exec 4>& - } file1echo""< p>で、現在のディレクトリ(サブディレクトリを含む)で検索すべてのテキストファイルと、現在のディレクトリ内の文字列 "bin"を含む行を検索します。find ./-name "* .txt" -exec grep "bin" {} \\;

(2) (サブディレクトリを含む)すべてのテキストファイルを削除します。
./-name" *。txt" -exec rm {} \\;

Copyright © Windowsの知識 All Rights Reserved