2017-02-09 11 views
0

以下は、アプリケーションのソケットに関連するすべてのファイル記述子のリストを返す:2つのUNIXコマンドの結果をbashスクリプトでどのように「結合する」のですか?

ls -haltr /proc/$PID/fd/ | cut -f3 -d":" | cut -f2 -d"[" | cut -f1 -d"]" | grep '^[0-9][0-9]*$' | sort -h 

ファイルディスクリプタのnetstatに-eフラグを使用して見られるように、それは最後の列で同じ数である。

netstat -ante 
tcp 0 0 1.9.146.125:41460 192.28.1.48:443 ESTABLISHED 0 83999  
tcp 0 0 1.9.146.125:59270 192.28.7.28:443 ESTABLISHED 0 58975  
tcp 0 0 1.9.146.125:34948 192.28.14.8:443 ESTABLISHED 0 67916  

どうすれば2つのファイルを結合できますか?ファイル記述子と一致する行が表示されます。

+1

根本的な問題は何ですか?特定のPIDのオープンな接続のアドレスを取得しますか? –

+0

基本的には、結果の列に基づいて2つのbashコマンドの出力を結合する方法を検討したいと思います。しかし、はい、私はこのアプリケーション(pid)が接続に固執しようとしているものを解決しようとしています。 – Jacob

答えて

0

私は最終的に試行錯誤を使って方法を試しました。私はそこでも良い方法があると思う:

arr=(`ls -haltr /proc/2293/fd/ | cut -f3 -d":" | sort -u | \ 
    cut -f2 -d"[" | cut -f1 -d"]" | grep '^[0-9][0-9]*$' | sort -h`); \ 
    pat=$(echo ${arr[@]}|tr " " "|"); netstat -ante | grep -Ew "($pat)" 
+2

使用できる 'join'コマンドもあります。セミコロンとバックスラッシュは余計なようです - 1つのライナーは賞賛の言葉ではなく、賞賛の言葉です。 –

+0

私はJoinコマンドを認識できませんでした。ありがとう。私はそれを見るでしょう。バックスラッシュはスタックオーバーフローで読みやすくすることでした。私は感情的な関連性(良いか悪いか)を、1ライナーという言葉では持っていません。 – Jacob

関連する問題