• ベストアンサー
  • すぐに回答を!

UNIXのファイルタイプp(パイプ)って何?

solaris 2.6 初心者です。 #cp -rp xxx ./ でコピー中に(恐らく)このファイルタイプの所で止まってしまいます。 丸ごとコピーしたいものが、dir階層が深くて広いので、困っています。 どなたか、良きアドバイスをお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数2119
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.3

コピーしたいという目的は達成されたようなので、パイプについてひとつ。 パイプというのは、UNIX内の二つのプロセス間でデータを送れる通信路のことです。 基本的にはパイプごとにメモリを用意して、 プロセスの一つがそこにデータを書き込んだら、 別のプロセスが読み出すときに書き込んだ順に読めるようになっています。 プロセス間にパイプを一旦作ってしまうと、 読み書きはファイルの読み書きとまったく同じにできますので、 シェルが "|" を解釈してパイプを作ったあと二つのコマンドを起動すると、 標準出力に書いたものが、別のコマンドの標準入力から読めるというわけです。 で、名前付きパイプというのは、 誰も接続していないパイプがあらかじめ作られていて、 ファイルシステム中にあたかもファイルのように名前をつけて置いてあるものです。 あるプロセスがそのファイルを書き込みでオープンし、 別のプロセスがそのファイルを読み出しでオープンすれば、 シェルがパイプを用意しなくても無関係のプロセスどうしで通信できることになります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 とてもわかりやすいご説明でした。 このファイルが、file コマンドでFIFOと表示されたのもなんとなく理解できました。

関連するQ&A

  • unixでファイルの中身をコピーしたらサイズが変わりました・・・

    すいません。UNIX初心者です。 unixでAというファイルをcatコマンドで全部表示させ全コピーし 別のウィンドウにviで貼り付け、Bというファイルを作ったのですが 何故かファイルサイズが変わってしまいました。 cp -pでは変わらないのですが・・・ sdiffでAとBを比較したら何も差分はなかったのですが、 diffで比較すると一部を除いて差分が出てきたのですが、見た目どこに差分があるのかわかりません。スペースか何かか?と思ったのですが、肉眼で確認する限り違いがあるようには思えません。 unixの端末からftpでwindowsの端末にファイルを転送したときも同じようにファイルサイズが変わってしまいました。。。 二回目やったら何故かファイルサイズ変わらず成功しましたが。 すいません、考えられる可能性を教えていただけますでしょうか

  • OSによるcpコマンドの動作違いに関して(特にリンクファイルのコピー)

    cpコマンドでシンボリックリンクファイルをコピーする際にlinux版のcpではリンクのままコピーされますが、solaris版ではハードコピーされてしまいます。 リンクをリンクのままとしてコピーするにはtarを使うなど他の方法も考えられますが、出来ればコピーコマンドのオプションによって簡単に出来たら楽と思っています。 どのようにしたらよいのでしょうか? <cpのバージョンを使い分ける、オプションを与える等々> また、linux版でも「あるファイルのリンクのリンク」をコピーすると元ファイルまで辿って新しいリンクファイルが作成される様です。これを直接コマンドラインで指定したファイルのリンクとしたい場合どのようなオプションを与えるのが良いのでしょうか? 細かな内容で申し訳在りませんが、宜しくお願いいたします。 ------ [linux(Redhat8)版cp]  touch file; ln -s file linked_file cp -R linked_file aaa ※ aaa はfileのシンボリックリンクになる /bin/cp --version cp (fileutils) 4.1.9 著者 Torbjorn Granlund, David MacKenzie, and Jim Meyering. Copyright (C) 2002 Free Software Foundation, Inc. [solaris(sunos5.8)版cp] ※ 上と同じコマンド実行でcpは実ファイルになる /mp/suel/tool/bin/cp --version cp (GNU fileutils) 4.0

  • コマンドプロンプトでファイルの階層表示に作成日も

    いつもお世話になっています。 コマンドプロンプト初心者ですが、指定したルートの全てのファイルを階層?表示して、最後に作成日も表示したいと考えています。   dir/b/s 指定したファイル名   ↑ これで表示したものの右端に作成日も付け足したいのですが、     なにか方法はないでしょうか? よろしくおねがいします。

その他の回答 (2)

  • 回答No.2
  • marine
  • ベストアンサー率34% (23/66)

パイプと言うの |(縦棒、¥の上にあるやつ)です。 通常、以下のように使いますよね。 #ls -la /hogehoge | more コマンドの入力と出力を、つなげるものです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 ただ、コマンドをつなげるパイプ記号と、ファイルタイプの名前付きパイプにはどんな関係があるのかわかりません。 これらに共通したパイプという言葉の概念だけでも知りたいので引き続き勉強したいと思います。

  • 回答No.1

止まる原因が、よくわかりませんが、 (ちなみに、cp -rpv で、コピーの進行状況を見れます) 別の、所有者・権限・階層丸ごとコピーの方法を。 JF文書のTipsの中にあったやつですが、 (cd /source && tar cf - . ) | (cd /dest && tar xvfp -) で、/sourceから/distへ丸ごとコピーできます。 初心者ということなので、別の安全な場所で 実験してから、やってみた方がいいと思います(^^; 私は、この件に関して、責任は一切負いません・・。(笑)

参考URL:
http://www.linux.or.jp/JF/JFdocs/Tips-HOWTO.txt

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございました。 cpのオンラインマニュアルに 「-R パイプが読まれるのではなく複写される、という点を除いて-rと同じです。」 という記述を見つけ、 cp -R -p で実行したところ、うまくいきました。 (パイプが何者かは、わからずじまいです) 手元の入門書3冊より、オンラインマニュアルをあたる方が得策だということがわかりました。 今後はもう少し調べてから質問しますのでよろしくお願いします。

関連するQ&A

  • cpコマンドについて

    OS:solaris10(sparc版):初心者です。 内容:既存のディスクに容量がなくったので新規ディスクに移設を実施 (1)既存のディスクには120G中100G使用中 (2)新規ディスクには270Gを設定済み 質問: 上記(1)の使用量100Gをcpコマンドで新規にコピーした場合、エラーは発生しないのでしょうか? 又、エラーが発生した場合のエラーステータスの表示の出し方は cp -rp 既存ディスク 新規ディスク;echo $?のでいいのでしょうか (man cpを見ると終了ステータスは0で 異常は>0に記載していました) ご教授をお願いします。

  • XXX.pagファイルとXXX.dirファイルの中身が見たい。

    拡張子が「pag」「dir」のファイルの中身を見たいのですが、どのようなコマンドを使えば 読むことが可能でしょうか? 使用しているOSは、Solaris8です。 宜しくお願いします!

  • Ruby1.9で上書き禁止でのファイルコピーする方法について。

    Ruby1.9で上書き禁止でのファイルコピーする方法について。 次のようなロジックを組んでいますが、同一ファイルがある場合でも上書きをしてしまいます。 同一ファイルは上書きさせないようにするにはどうすれも良いでしょうか? file1 = "C:/*.*" file2 = "C:/デバッグ用2/" FileUtils.cp(Dir.glob(file1),file2) どうか宜しくお願い致します。

    • ベストアンサー
    • Ruby
  • ファイルのロックについて

    C言語初心者です。OSはHP-UXを使っています。 AプログラムXXXファイルに書込みます。 しかし、BプログラムではXXXファイルを読込みます。 Aのプログラムが書込んでいる最中、Bは読込ませたくありません。 lockfにてAプログラムでXXXファイルをロックしているのですが BプログラムではXXXファイルを読む事ができます。 なぜでしょうか? BプログラムでもXXXファイルをlockfする必要がありますか? よろしくお願いします。

  • UNIX(Solaris)でのtarファイルの解凍エラー

    AというUNIX(Solaris)でtar cvf で固めたフォルダ階層を別のBというUNIX(Solaris)でtar xvfで解凍すると、 tes, 7 テープブロック tar: ディレクトリの検査合計エラーです というエラーメッセージがコンソールに出力されます。 これは、Solarisじゃない別のOSから持ってきた場合に出力されるという話は聞いたことがあるのですが、同じSolarisで圧縮したものを解凍してもでるのでしょうか? どのような条件下で出力されるエラーかご存知方がいらっしゃいましたらご教授のほどお願いいたします。

  • ファイルタイプのFIFOとソケットについて

    lsコマンドの-Fオプションの説明に以下のくだりがあります。 この中のFIFOとソケットについて理解していません。 このようなタイプのファイルはディレクトリ階層上どこにあるのでしょうか? また、これらのファイルタイプであることに何の意味があるのでしょうか? ファイル名にファイル・タイプを表す記号を付けて表示する。ディレクトリは/,実行可能ファイルは*,シンボリック・リンクは@,FIFOは|,ソケットは=で表わす

  • WinXPHe、フォルダとファイルの区別

    初心者です。Aフォルダの1つ下の階層に1と2と3があり、その1又は2又は3の下の階層にそれぞれア・イ・ウと内訳がある場合、どの階層までがフォルダで、どこからがファイルなのでしょう。 フォルダとファイルの違いや、必要性などお教え下さい。

  • 下階層のファイルを含めての最新ファイルの検索

    UNIXで下階層のdirにあるファイルも含めて最新のタイムスタンプのファイルを探したいのですがいい方法はないでしょうか?できればスクリプトを組まずにできればありがたいのですが、無理ならスクリプトを使用してでもできる方法を教えていただけると助かります。

  • unixのfindコマンド

    unixのfindコマンドで、ある複数のディレクトリから指定のファイル名だけを 検索し、その結果をgrepしたいのですが、 例えば 01_dir 02_dir : 11_di : 21_dir : と言うディレクトリがあります。 そこから、「0」で始まっているディレクトリの中なら拡張子が*.txtを 検索し、その検索したファイルに対して、grepを実行したいのですが、 上手くいきません。 もちろん、各ディレクトリには、「.txt」以外のファイルもありますし、 ファイル名にも条件を付与したいです。 以下の様に、 find . -name "0*_dir" -type d -print | xargs ls -l *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs ls *.txt | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls -l '{} /*.txt' | grep "検索文字" find . -name "0*_dir" -type d -print | xargs -i ls {} "検索文字" とやってみたのですがだめでした。 find ./ -type d \( -name '1_*dir' -o -name '2*_dir' -o -name '3*_dir' \) -prune -o -type f -print と「-prune」で除外するディレクトリを指定すればできなくはないですが、 すべてのディレクトリ書くのはいい方法ではないです。 よい方法をお願いします。 OSは、Solaris 11.3です。

  • cpのコマンドの使い方が解りません

    お世話になります。初心者です。 cakephpでサイト構築しています。 ディレクトリのコピーをしたいのですが、CUIでの操作がすごく苦手です。 まず、古いappと新しいappがあり、その中のtmpだけをコピーしたいです。 色々ネットで検索して, cp -r 移動元ディレクトリ 移動先ディレクトリ で出来ると書いてあったので、 cp -r tmp/ new/app/tmp と打ってみました。 古いappにあるtmpディレクトリに新しいtmpディレクトリをコピーしようと、コマンドを打ったのですが、ディレクトリを作成できずコピーも出来ません : そのようなファイルやディレクトリはありません。というエラーになります。 階層の指定が間違っているのでしょうか?ディレクトリを作成できないという事の意味が解りません。 お詳しい方、ご教授頂けますと幸いです。 よろしくお願いします!

専門家に質問してみよう