• ベストアンサー

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

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

  • zgoo
  • お礼率75% (3/4)

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

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

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

zgoo
質問者

お礼

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

その他の回答 (2)

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

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

zgoo
質問者

お礼

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

  • nekomilk
  • ベストアンサー率24% (20/83)
回答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
zgoo
質問者

お礼

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

関連するQ&A

  • cpの-H -L -Pオプションについて

    こんにちは。 cpコマンドでディレクトリをまるごとコピーする際の話なのですが、-H,-L,-Pオプションの違いについて悩んでいます。 man cpでは、 -H 処理は、source_file オペランドとして指定したシン ボ リッ クリンクが参照するファイルの種類と内容に基づい て行われます。 -L 処理は、source_file オペランドとして指定したシン ボ リッ ク リ ンク、あるいは、ファイル階層の検索中に出 会ったシンボリックリンクが参照するファイルの種類 と 内容に基づいて行われます。 -P 処理は、source_file オペランドとして指定したシン ボ リッ ク リ ンク、あるいは、ファイル階層の検索中に出 会ったシンボリックリンク自身に行われます。 と出ます。いったいなにが言いたいのかわかりません(^^; 実際試してみると、-H,-Pはシンボリックリンクファイルはそのままシンボリックリンクファイルとしてコピーされ、-Lはシンボリックリンクファイルが普通のファイルになってコピーされます。-Hと-Pは実際どのように違うのでしょうか?また、-Lについても、manでの意味がわかりません。 どなたか、それぞれの動作の違いと、manでの意味について解説願えないでしょうか?参考になるページでも構いません。よろしくお願いします。 Solarisのバージョンですが、manの最後には SunOS 5.10 と表示されています。

  • 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です。

  • MS-DOSバッチファイルで

    以下のようなMS-DOSバッチファイルで同じ処理の繰り返しを行う場合、for文を使って書くにはどのようにしたらよいでしょうか? 下記はvistaバージョンですがwindowsでも大丈夫です。ご教授宜しくお願い致します。 robocopy %CP_FROM_DIR1% %CP_TO_DIR%%DIR_a% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR2% %CP_TO_DIR%%DIR_b% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR3% %CP_TO_DIR%%DIR_c% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR4% %CP_TO_DIR%%DIR_d% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR5% %CP_TO_DIR%%DIR_e% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR6% %CP_TO_DIR%%DIR_f% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR7% %CP_TO_DIR%%DIR_g% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR8% %CP_TO_DIR%%DIR_h% /E /R:2 /W:1 >> %LOGFILE%

  • 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

  • テキストファイルの結合

    はじめまして。配列とか変数でFORでループさせれ ばいいのかなと思うのですが変数の取り扱いがわ かりません。あるフォルダに拡張子なしの . の 後連番のテキストファイルがあります(SGML出力)。 その連番順にテキストを結合したファイルを作成 したい。 条件として"a086.xxx"のファイルについて処理し たいです。よろしくお願いします。 ファイル名 中身 a084.000 ............. a085.000 ............. a086.000 abc.......xxx a086.001 123.......xxx ・ ・ a086.036 xyz.......xxx a087.000 ............. 結合したファイルの中身 abc.......xxx 123.......xxx ・ ・ ・ xyz.......xxx フォルダの中のそのファイルの個数はその都度 違います。 下記のように処理したいファイル名は抽出して みたのですがその後どうすればいいのかわかり ません。また、ファイル名を抽出しないでその まま処理するものでしょうか。 opendir ( DIR , "a:\\S603000" ) or die; while($dir = readdir (DIR) ){ if ( $dir =~ /a086/ ){ print "$dir\n"; } } closedir ( DIR );

    • ベストアンサー
    • Perl
  • UNIXシェルの設定ファイルについて

    solaris8使用してるのですが2つほど質問があります。 1. rootのシェルの設定ファイル(.cshrcとか.profileにあたるもの?) ってどこにあるのでしょうか? su でroot になったときや、rootでcshと打ち込んだときなど はどこのファイルの設定を読むのでしょうか? 2. 一般ユーザを新規に追加した場合にその新規ユーザの シェルの設定ファイルってどこからもってきたものなんでしょうか? デフォルトのファイルのようなものをコピーしてくる感じなのでしょうか? ご存知の方よろしくお願いします。

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

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

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

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

  • KNOPPIX のファイルコピーでエラー

    KNOPPIX でファイルコピーするだけなのに cp コマンドでエラーが出て困っています。 色々ホームページを探したのですが、解答が見つかりません。 エラーなしでコピーするにはどうしたらよいでしょうか。 助けて下さい。よろしくお願いします。 【条件】 スーパーユーザで入力 a番のUSBから、b番のUSBにファイルを写すだけです 【投入コマンド】 mount -t vfat /dev/sdb1 /mnt/sdb1 chmod 777 /mnt/sdb1/knx/source/KNOPPIX cp -rp /KNOPPIX/* /mnt/sdb1/knx/source/KNOPPIX 【エラー(許可されていない操作です)】 "cp: failed to preserve ownership for ...." "cp: cannot create symbolic link '........" "cp: cannot create special file '........" 以上、よろしくお願いします。

  • 改行区切りのテキストを1行ずつ読み込むシェルを作りたい

    awkにて改行区切りのテキストファイルを読み込みテキストファイルに記述されているファイルを別のフォルダへコピーしたいと考えております。 file1=コピー対象ファイル名が書かれたテキストファイル DIR1=コピー先ディレクトリ cat $file1 |gawk '{print "cp",$file1,$DIR1}'|sh 上記をシェルでで実行しようとすると下記のようなエラーで帰ってきてしまいます。 ⇒ cp: `****' と `****' は同じファイルです よい方法をご存知でしたらぜひ御教授いただけませんでしょうか。コピーが目的ですので別のコマンドでも結構です。