人気マンガがだれでも無料♪電子コミック読み放題!!

PHPのソースを拾ってきてtar命令でアーカイブを展開したところ
生成されたディレクトリーの所有者を確認してみたら別のユーザのものになってる!!!
なにこれ、ありえなくないですか、オレだけですか。

このQ&Aに関連する最新のQ&A

A 回答 (8件)

#3です。


さっき書いたのはかなり昔のSystemVでの経験です。一般ユーザーでも起こりましたので、setUIDビットがオンになっていたんだと思います。
一般ユーザーでtarしてもオーナーが変わる場合は、tar自体を(/tmpにでも)コピーしてそれを実行すると大丈夫です。

>アーカイブした時点のオーナーと同じユーザ名が、たまたま私のシステム内に存在したため
tarファイル中に記録されるのはユーザ名でなくユーザ番号(数字)なので、連番でつけてたりすると結構一致します。
    • good
    • 0
この回答へのお礼

notnotさん、ご返信ありがとうございます。
どうも一般ユーザで展開した場合は問題なく
rootで展開した場合のみ以前の所有者になってしまう仕様のようです。
こうなったら生成されたディレクトリー以下全てのファイルとディレクトリーの所有権を無理矢理変更するしかないですかね。

そういえばユーザには番号があるのでしたね。
どうりで、たまたま一致したにしても、うまく出来過ぎてると思いました。

お礼日時:2004/01/11 13:34

>挙動に変更するオプションが用意されているはずだ。


その手のオプションは,tarの方言によりいろいろです。
お使いのシステム上のtarのマニュアルを引いてください。

>uidとは何ですか
ユーザID(番号)のことです。

>どのような不都合が考えられますか。
あなたも既にその一つを経験しているじゃないですか。
    • good
    • 0
この回答へのお礼

onosukeさん、ご返信ありがとうございます。
なるほど、そういえばtarには色々な種類があるらしいですね。
マニュアルを見る限りでは、どうやらそのようなオプションは無さそうですw

もう体験してるって??
そうでした。これはしたり。
これは、かなり大きな不都合でした。

しかし、この本にはルートになってから展開すると書いてあるしなー。
質問は文書でしか受け付けないって書いてあるし面倒臭いなー。
って感じですw

お礼日時:2004/01/17 01:58

>rootで展開した場合のみ、このような状況になってしまうのですね。


>いったい何のために、こんな仕様になっているんだか(涙)。

バックアップを作成/復元するためです。
ちなみに,普通,root権限なしに,ファイル所有者の変更は行えない為,rootのみのこの挙動は至極あたりまえのこと。

p.s.
# 一般ユーザのような大きなuidで保存してあるなら
# "rootで展開すべきではない"可能性が濃厚ですねぇ。
    • good
    • 0
この回答へのお礼

onosukeさん、ご返信ありがとうございます。
なるほど、そのような重要な理由があったのですね。
しかしそれならば、これを一般ユーザーと同じような挙動に変更するオプションが用意されているはずだ。
と思うのは私だけでしょうかw

p.s.中のuidとは何ですか。
rootで展開すべきではない可能性があるのですか。
もう展開してしまいましたw
このまま使っていったら、どのような不都合が考えられますか。
(でもこの#マークは、しかとしてもいいって意味でしょうかねw)

お礼日時:2004/01/16 19:49

別のユーザってもしかして


 sys とか bin とか adm とか
じゃありませんか?

だとしたらほっといていいと思います。
上記ユーザ(アカウント)の意味は、
参考URLの「表 15-2 システムログイン」が参考になるかも。

参考URL:http://docs.sun.com/db/doc/817-0163/6mfvv54rp?l= …
    • good
    • 0
この回答へのお礼

HOGERA3さん、ご返信ありがとうございます。
次々に色んな解答が頂けて嬉しいです。
ですが残念ながら、そのようなユーザ名ではありませんでした。
このユーザは、紛れもなく、この私が自信で追加した一般ユーザです。
ユーザ数が少ないので一般ユーザの名前は全員覚えていますw

どうも、もう少ししたら、お教えいただいた最終手段を実行することになりそうですw

お礼日時:2004/01/11 13:42

rootで展開すると所有者が元のオーナーになるtarなんでしょう。

一般ユーザで展開すれば、展開した本人の所有権になると思いますよ。
ちなみに、そのアーカイブはrootで展開する必要があるのですか?そもそもそのソースの所有者に何か意味があるのですか?そうでなければ、一般ユーザが展開し、必要なものだけコピーすれば済むと思います。
    • good
    • 0
この回答へのお礼

k-841さん、ご返信ありがとうございます。
一般ユーザで展開してみたら本当だ展開した本人の所有権になりました。
rootで展開した場合のみ、このような状況になってしまうのですね。
いったい何のために、こんな仕様になっているんだか(涙)。

このアーカイブはrootで展開する必要があるものなのか、ということですが実は私にも良く分かりません。
rootになって展開すると書いてありましたので、一応その通りにしたという感じです。
あと、こういうみんなで使うファイルが、ある特定のユーザのものになってしまうなんて気分的に嫌だなという気持ちもあります。
しかし一般ユーザで展開しても問題ないのでしたら、もう少し頑張ってみて、それでもダメなら一般ユーザで展開しようと思いました。

お礼日時:2004/01/11 13:23

tar は何種類もありますが、オプションで特に指定しないと、アーカイブした時点のオーナーのIDで展開するバージョンもあります。


tar xvfzo と、小文字オーを追加してみてください。
これで駄目なら、man tar か tar --help でオーナー関連のオプションを調べる。
    • good
    • 0
この回答へのお礼

notnotさん、ご返信ありがとうございます。
なるほど、ということはアーカイブした時点のオーナーと同じユーザ名が、たまたま私のシステム内に存在したため、このような結果になってしまっているのですね。
お教えいただいた小文字のオーを追加する方法を試してみましたが残念ながらダメでした。

マニュアルにも、それっぽい説明はありませんし・・・うーん困ったな。

お礼日時:2004/01/11 00:49

(No.1の「回答に対するお礼」に対する回答です。


あーそうですか。
ごめんなさい。何もわかりません。

以下、質問の答えにはなっていませんがとりあえず。

すでにご存知かもしれませんが、所有者を変えるなら
chown コマンドでできます。
 chown -R ユーザ名 ディレクトリ名

-R オプションはディレクトリの中のファイル全ての所有者を
指定したユーザに変更するためのものです。
    • good
    • 0
この回答へのお礼

HOGERA3さん、ご返信ありがとうございます。
そうですか、分かりませんか。

生成されたディレクトリーの中を見てみると
いろんな所有者のファイルが混ざっているようです。
ですので、お教えいただいたchownコマンドで所有者を一括変更するのは、かなり危険な香りがします(汗)。

しかし、この現象はいったい何なんでしょうね。

お礼日時:2004/01/11 00:30

tar のオプションに p をつけて展開してませんか?


もしそうだとしたら p をつけずに展開してみてください。
    • good
    • 0
この回答へのお礼

HOGERA3さん、ご返信ありがとうございます。
ちょっと確認してみたのですがpオプションはついていないようです。
あとオプションかどうか分からないのですが
tarのあとにxvfzという文字列が続いています。
# tar xvfz ファイル名
といった感じです。

以上より何か分かりますでしょうか

お礼日時:2004/01/10 18:54

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qtarコマンドの"--no-same-permissions"オプション

umaskが"022"の環境で、"tar --no-same-permissions -xf ...."コマンドを実行すると、「読み取られる全てのファイルのパーミッションは"_rw_r__r__"となり、同じく読み取られる全てのディレクトリは"rwxr_xr_x"となる。」と理解していたのですが、そうはなりません。
次の例を参照ください。

# tar cf /tmp/tmp.tar /etc/shadow

$ umask
22
$ echo " " > echofile
$ mkdir dir
$ tar --no-same-permissions -xf /tmp/tmp.tar
$
$ ls -l
drwxr-xr-x 2 user group 4.0K 1月 28 15:05 dir/
-rw-r--r-- 1 user group 3 1月 28 15:05 echofile
drwxr-xr-x 2 user group 4.0K 1月 28 15:06 etc/
$ ls -l etc
-rw-r----- 1 user group 1.8K 1月 26 11:09 shadow

となり、shadowファイルのパーミッションはオリジナルを保持してしまいます。
何故でしょうか?
上の例で"shadow"ファイルのパーミッションを"_rw_r__r__"とするには、tarだけでなくchmodを使用しなければならないのでしょうか?

umaskが"022"の環境で、"tar --no-same-permissions -xf ...."コマンドを実行すると、「読み取られる全てのファイルのパーミッションは"_rw_r__r__"となり、同じく読み取られる全てのディレクトリは"rwxr_xr_x"となる。」と理解していたのですが、そうはなりません。
次の例を参照ください。

# tar cf /tmp/tmp.tar /etc/shadow

$ umask
22
$ echo " " > echofile
$ mkdir dir
$ tar --no-same-permissions -xf /tmp/tmp.tar
$
$ ls -l
drwxr-xr-x 2 user group 4.0K 1月 28 15:05 dir/
-rw-r--r...続きを読む

Aベストアンサー

その辺のからくりは #2 に
「umaskというのは、ファイルを作成するときに指定したパーミッションに対して、umaskで1になっているビットを0にするということです。umaskで0になっているビットはそのままにします。」
と, ちゃんと書いてありますよ.

Qtarとオーナー・グループについて

tarコマンドで解凍するファイルについてです。
OSはFedora5です。

この形式の圧縮ファイルをtarコマンドで解凍した後、解凍されてできたディレクトリ、それ以下のファイルのオーナーやグループは自動で設定されるのでしょうか?

rootで解凍した場合でも、解凍されてできたディレクトリやファイルのオーナーやグループが、ランダムな数字?や「game」などと自分のマシンには存在しないユーザ又はグループ名になってしまします。

いちいち直すのは面倒ですし、このようになる原因が分からないと気持ち悪い気がします。これは何かの仕様なのでしょうか?

Aベストアンサー

>これは何かの仕様なのでしょうか?

tarの仕様でtar fileを作ったときのuid, gidが保存されています。

>rootで解凍した場合でも、

rootで解凍するからそうなるので、一般ユーザーならそのユーザーがownerになります。

もっとも、rootで解凍したあと
chown -R owner.group dir
で、一発で任意のowner.groupに変更できるので不自由はないと思います。

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Qシェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

Aベストアンサー

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。

bashをご使用と判断して

res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをe...続きを読む

Qgrepで検索文字列が完全一致した行だけ取り出す方法

grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか?

通常は
grep hoge hoge.txt

と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。

例えばhoge.txtの中に
cc ghoge
kkl hogem
jjll hoge
という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。

何かよい方法があれば教えてください

Aベストアンサー

-w オプションじゃだめですか?

参考URL:http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

Q~以外を削除する場合(rmコマンド)

linuxのコマンドで
~以外のファイル、ディレクトリを全て削除したい時は
どのような記述をすれば良いのでしょうか?
シェルスクリプトではなくrmコマンド1つで削除したのいですが…

例: tar以外のファイル・ディレクトリを
   すべて削除したい場合など

どなたかご存知の方がいらっしゃったら
教えてください。よろしくお願い致します。

Aベストアンサー

rm コマンドのみという訳にはいきませんが基本的なコマンドを組み合わせると実現可能と思います。

「名前が tar で終わるもの以外のファイル・ディレクトリを削除する」場合だと

ls | grep -v -E 'tar$' | xargs rm -r

となります。

ファイルの一覧を取得し ( ls )
'tar'で終わるもの以外を抽出し ( grep )
その結果を rm -r の引数に指定して実行 ( xargs )

という流れです。

ファイルを削除するような操作については失敗するとダメージが大きいので、事前にテストして動作を確認すると良いとおもいます。また rm -r -i としてそれぞれのファイルについて、削除の問い合わせをするのも有効です。

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

Qbashなどのシェル変数の値に改行を含める事は可能でしょうか?

タイトルの通りですが、通常のシェル変数の値として

 [prompt]$ aaa="bbb<改行>ccc"

のようなセットを行い、

 [prompt]$ echo $aaa
 bbb
 ccc
 [prompt]$

のような結果を得たいのですが、可能でしょうか。

Aベストアンサー

可能です.
というか,やってみたら出来ることがわかると思います.こんなところで聞くより早い.
なお,sh/bash系では改行文字は特にエスケープせずそのまま入れられます.

aaa='bbb
ccc'

QNTPで同期が始まらない

こんにちは。
度々すみません、NTPの設定をしましたがどうも同期が始まりません。

「ntpdate 130.69.251.23」と手動同期は成功します。
しかしntpデーモンを起動し1時間以上放置しても同期されません。
※外部タイムサーバー参照としてます

ntp.confは下記のとおりです。
---------------------------------------------------
server 133.100.9.2 # clock.nc.fukuoka-u.ac.jp
server 130.69.251.23
driftfile /var/lib/ntp/drift
---------------------------------------------------

でntpq -pの結果は下記となります。

remote refid st t when poll reach delay offset jitter
==============================================================================
133.100.9.2 .INIT. 16 u - 64 0 0.000 0.000 4000.00
130.69.251.23 .GPS. 1 u 27 64 377 8.015 -99970. 17262.6

同期ができれば「remote」列に「*」が表示されると思っています。
何か設定が足りないでしょうか?。
尚、「/vat/log/message」をtailしてますが特にエラーは無さそうです。

よろしくお願いします。

こんにちは。
度々すみません、NTPの設定をしましたがどうも同期が始まりません。

「ntpdate 130.69.251.23」と手動同期は成功します。
しかしntpデーモンを起動し1時間以上放置しても同期されません。
※外部タイムサーバー参照としてます

ntp.confは下記のとおりです。
---------------------------------------------------
server 133.100.9.2 # clock.nc.fukuoka-u.ac.jp
server 130.69.251.23
driftfile /var/lib/ntp/drift
---------------------------------------------------

でntp...続きを読む

Aベストアンサー

#4のqaaqです。

○ntp.conf 関連
server 行に "iburst" を付けておきましょう。
server ntp.nict.jp iburst <--こんな感じになります。

ntp サーバ起動時の時刻調整の収束時間が早くなります。
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=ntp.conf&dir=jpman-5.4.0%2Fman&sect=0

○ntpdate での時刻調整
ntpdate -b -u [サーバ名] を複数回実行して、"offset の値が0.1以下"になるまで、強制的に時刻調整して下さい。

○ハードウエアclockの修正
hwclock -w コマンドでハードウエアclockを合わせます。
http://www.linux.or.jp/JM/html/util-linux/man8/hwclock.8.html

○ntpdの動作
ntpによる時刻調整は、調整幅が通常128mSと小さいので、1時間は様子をましょう。
2時間程度経過しても、時刻修正の兆候が見られない場合ハードウェアの不良も考えられます。

時刻調整の兆候としては、
・logファイルに 一時間毎に調整したメッセージが書かれる。
Jan 7 21:57:40 ntpd[91145]: offset 0.000994 sec freq -190.802 ppm error 0.000076 poll 8
・ntpq -p の出力の最初の桁に"*,+"が付く。また、reach が377になる。
% ntpq -np
remote refid st t when poll reach delay offset jitter
+192.168.0.102 GPS_NMEA(0) 2 u 3 32 377 0.926 -0.330 0.023
*192.168.0.192 GPS_NMEA(1) 2 u 10 32 377 0.747 -0.336 0.023
192.168.0.9 PPS(1) 2 u 3 32 377 0.757 6.559 0.161


○その他
・PC起動時には、システムクロックを計測してその後の動作の基準にしていますが、
CMOSバッテリ不足やハードウェアに何らかの異常があるととんでもない時刻を示すことがあります。(要修理です)
・BIOSの時計も起動時の初期時刻として使われてしまうので、ある程度合わせておいた方がいいです。

#4のqaaqです。

○ntp.conf 関連
server 行に "iburst" を付けておきましょう。
server ntp.nict.jp iburst <--こんな感じになります。

ntp サーバ起動時の時刻調整の収束時間が早くなります。
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=ntp.conf&dir=jpman-5.4.0%2Fman&sect=0

○ntpdate での時刻調整
ntpdate -b -u [サーバ名] を複数回実行して、"offset の値が0.1以下"になるまで、強制的に時刻調整して下さい。

○ハードウエアclockの修正
hwclock -w コマンドでハ...続きを読む


人気Q&Aランキング