[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 19:35 / Filesize : 221 KB / Number-of Response : 848
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part5



1 名前:1様 [2009/04/03(金) 22:17:43 ID:0qFlvOW9]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

Part4 : pc11.2ch.net/test/read.cgi/linux/1210999497/
Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/
Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/
Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。

148 名前:login:Penguin mailto:sage [2009/07/12(日) 19:44:16 ID:o8qLTMAv]
death
じゃないのか。

149 名前:login:Penguin mailto:sage [2009/07/12(日) 20:31:41 ID:elf51XSl]
>>148
--orz


150 名前:login:Penguin mailto:sage [2009/07/14(火) 14:57:37 ID:gyyoowtT]
nanika() {
while read line
do
case "$line" in
*$1*) return
esac
done <"$2"
echo $1 >>"$2"
}

151 名前:login:Penguin mailto:sage [2009/07/14(火) 15:44:41 ID:CH7bWn6s]
つまらん。

152 名前:login:Penguin mailto:sage [2009/07/14(火) 21:42:07 ID:LzAZSljQ]
:(){ :|:& };:


153 名前:login:Penguin [2009/07/20(月) 15:40:26 ID:K8L8w1qf]
age

154 名前:login:Penguin [2009/07/20(月) 21:55:40 ID:ae6hxCnx]
ps aux | grep processA
でグレップしたプロセスのIDを変数に格納するにはどうかいてやればいいでしょうか?


155 名前:login:Penguin mailto:sage [2009/07/20(月) 22:11:42 ID:ODKc/pMj]
変数=`ps aux | grep processA | gawk '{print $2}'`

156 名前:login:Penguin [2009/07/20(月) 22:32:09 ID:ae6hxCnx]
>>155 ありがとう
特定のプロセスAが起動したら、date >> /home/log
としたいと考えています。ただし、プロセスAは、 grep で把握できるとして、
複数の場合があります。
この場合方法ですが、 ps aux | grep processA | gawk '{print $2}'` | wc -l
でこの帰り値が、0でないとき として if 分で、制御すべきでしょうか?(Whileなどで無限ループしたなかにif を配置)

なにかもっとシンプルな方法ないでしょうか?



157 名前:login:Penguin mailto:sage [2009/07/20(月) 22:49:46 ID:ODKc/pMj]
ああ、改めて見たら
>>154にレスしてるみたいに見えるな。

158 名前:login:Penguin mailto:sage [2009/07/20(月) 23:01:27 ID:iUvo3V7o]
>>156
以下でできるかも

変数=`pgrep プロセスA`
[ -n $変数 ] && date >> /home/log

159 名前:login:Penguin [2009/07/21(火) 10:43:13 ID:BO90gQOW]
>>156
変数に入れる必要あるの?
pgrep processA >/dev/null && date >> /home/log

160 名前:login:Penguin mailto:sage [2009/07/21(火) 23:11:34 ID:xGYTho7h]
pidof
とか使わんの?

161 名前:login:Penguin mailto:sage [2009/07/23(木) 17:30:46 ID:WFggSjQ8]
ここで聞くべきか若干怪しいかと思うのですが、
sudo 経由した場合のみ、特定コマンド(たとえばps)を
一般ユーザ権限で利用させる方法ってないでしょうか?

ps をパーミッション700にしておき、
root以外は使用できなくなる状態へしたいのですが、
sudo 経由した場合のみ使わせたいと思ってます。

162 名前:login:Penguin mailto:sage [2009/07/23(木) 18:06:19 ID:P+5ig7CA]
くだ質池

163 名前:login:Penguin [2009/07/26(日) 07:44:48 ID:FW8uMlXc]
ttaファイルを再生するスクリプトを作ってみました。
一応ちゃんと動くのですが、、、

バックグラウンドで動かしているttaencがエラーで死んだ場合に
(単純な例では$1のファイルがない、とか)
playコマンドが入力を待ち続けてしまうのです。
何かよい方法ないですか?

#! /bin/sh -e

WAV=`mktemp -t $$.wav`
rm -f $WAV
mknod $WAV p
trap "rm -f $WAV" 0
ttaenc -o $WAV "$1" > /dev/null 2>&1 &
play -q $WAV > /dev/null 2>&1



164 名前:login:Penguin mailto:sage [2009/07/26(日) 08:26:44 ID:BwoYtVgZ]
>>163
ifで$?を判定すればいいんじゃないかな

165 名前:login:Penguin mailto:sage [2009/07/26(日) 09:00:23 ID:VmbGTICm]
>>164
コア吐いたらダメっしょ。

trapしたほうがよくね?

166 名前:163 mailto:sage [2009/07/26(日) 09:07:33 ID:FW8uMlXc]
>>163 自己レス

playとttaencを両方ともバックグラウンドにし、
ttaencをwaitすることでエラーを捕捉、必要ならplayを停止。
これで解決しました。


#! /bin/sh -e

WAV=`mktemp -t $$.wav`
rm -f $WAV
mknod $WAV p
trap "rm -f $WAV" 0
ttaenc -o $WAV "$1" &
DECODE_PID=$!
play -q $WAV > /dev/null 2>&1 &
PLAY_PID=$!
exec 2> /dev/null
wait $DECODE_PID || (kill -10 $PLAY_PID)

>>164
$?について調べたのですが、バックグラウンドプロセスには効かないようです。
でも、調べる過程で解決の発想を得られました。ありがとう!





167 名前:login:Penguin [2009/07/30(木) 18:32:54 ID:8kF2jsLv]
シェルスクリプト初めて数日ですが、ファイルの書き換えやなんかは検索すると出てくるんですが
選択肢形式の作り方がいまいちわかりません。
lokkitやsystem-config-networkみたいな選択形式を作りたいのですが
何かヒントをいただけないでしょうか?

168 名前:login:Penguin mailto:sage [2009/07/30(木) 18:37:48 ID:3Jkdy3aR]
>>167
whiptail とか?

169 名前:login:Penguin mailto:sage [2009/07/30(木) 19:33:48 ID:1ZQVAEXh]
dialog

170 名前:login:Penguin mailto:sage [2009/07/30(木) 19:43:13 ID:fH5JNdXj]
$ lokkit
bash: lokkit: command not found
$ system-config-network
bash: system-config-network: command not found
$ whiptail
bash: whiptail: command not found
はう??

$ xmessage -button 'nipple,ass' 'which?'

171 名前:login:Penguin mailto:sage [2009/07/30(木) 20:01:21 ID:3Jkdy3aR]
>>170
何が言いたいんだ?

172 名前:167 [2009/07/30(木) 20:08:32 ID:8kF2jsLv]
>>168-169
ありがとうございます。
両方とも試してみましたがどちらもライブラリを追加しないと機能しないっぽいですね。
はじめて数日の私にはなかなか敷居が高いようです。
うーん・・・今さわってる環境でライブラリ追加させてもらえると大丈夫だと思いますが
ダメって言われたらアウトっぽいですね・・・。

173 名前:login:Penguin mailto:sage [2009/07/30(木) 20:10:01 ID:3Jkdy3aR]
引き数で渡すとかじゃだめなん?

174 名前:167 [2009/07/30(木) 20:21:04 ID:8kF2jsLv]
引数で渡してもいいんですが
項目が少し多いので引数を渡すまでに選択肢で絞りたかったというのがあります。
関連ライブラリがいまいちまだ特定できないですが、道のりは遠そうです・・・

175 名前:login:Penguin mailto:sage [2009/07/30(木) 20:37:05 ID:w4YhvOQC]
>>172
両方とも試してみたって、どうやって試したん?

176 名前:login:Penguin mailto:sage [2009/07/30(木) 21:09:43 ID:neY1QnOU]
シェルスクリプトに詳しいみなさんに聞きたいのですが、
ユーザ追加して第三者に利用させるときに
これ禁止させておけばよい、といったコマンドありますか?
例えば find などです。




177 名前:login:Penguin mailto:sage [2009/07/30(木) 21:17:05 ID:otd/7QOf]
>>176
シェルの内部コマンドだけで相当できるから考えるだけ無駄。

178 名前:login:Penguin mailto:sage [2009/07/30(木) 21:17:21 ID:uCTsIRNg]
なんでfindはだめなの?
TOMOYO入れたら?

179 名前:login:Penguin mailto:sage [2009/07/30(木) 21:25:06 ID:wVBjHvC9]
>>174
コマンドラインに収まらなくてもいいのなら、zenityは?

echo -e "選択肢1\n選択肢2\n選択肢3" | zenity --list --column="項目"

180 名前:login:Penguin mailto:sage [2009/07/30(木) 23:35:05 ID:zSR6vlNV]
>>174
bash 限定でいいなら、
select i in "Yes" "No" "Cancel"; do
[ -n "$i" ] && break
done
case "$i" in
Yes) echo "$i, we can.";;
No) echo "$i, it's so hard.";;
Cancel) echo "...";;
esac


181 名前:login:Penguin mailto:sage [2009/07/31(金) 00:19:11 ID:eB5hWQQH]
$(ls)

`ls`
は同じと考えていいの?

182 名前:login:Penguin mailto:sage [2009/07/31(金) 01:07:21 ID:dqFrtp13]
よくない

183 名前:login:Penguin mailto:sage [2009/07/31(金) 08:21:07 ID:Q0h6j6GB]
同じじゃないのか?

184 名前:174 [2009/07/31(金) 10:38:52 ID:unqMPfm1]
>>179
zenityもcommand not foundって言われてしまったので入ってないようです。
ですが選択肢としていろいろと勉強になりました。
ありがとうございます。

>>180
サンプルありがとうございます。
大変勉強になりました。
bash限定ならこのあたりが限界っぽいですね。せめて項目の文字を色分け出来るくらいはしたかったですが
モジュール追加出来ないからって事で先方にはあきらめてもらうようにします。

185 名前:login:Penguin mailto:sage [2009/07/31(金) 10:47:53 ID:dFOhVUdW]
>>182
どう違うの?

186 名前:login:Penguin [2009/07/31(金) 11:03:30 ID:JVm6T/2T]
Bashで設定を変更するものを作ってるんですがCtrl + C とかでプロンプトに抜けられないようにするにはどうすればいいんでしょうか?





187 名前:login:Penguin mailto:sage [2009/07/31(金) 11:08:16 ID:dFOhVUdW]
>>186
trap

188 名前:186 [2009/07/31(金) 11:16:14 ID:JVm6T/2T]
>>187
ありがと。

出来ました。

189 名前:login:Penguin [2009/07/31(金) 16:40:28 ID:YezVKpJb]
コンフィグ情報から
DEVICEとIPADDRだけを抜き出したいのですが下記だとDEVICEの行が5行表示され
ます。
構文が間違っているからだと思いますがアドバイスもらえないでしょうか。

eth0=/etc/sysconfig/network-scripts/ifcfg-eth0
while read eth0
do
echo $eth0 | sed -n '/DEVICE/p' /etc/sysconfig/network-scripts/ifcfg-eth0
done < /etc/sysconfig/network-scripts/ifcfg-eth0

190 名前:login:Penguin mailto:sage [2009/07/31(金) 16:49:00 ID:Q0h6j6GB]
sed -n '/DEVICE/p;/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-eth0

191 名前:login:Penguin mailto:sage [2009/07/31(金) 16:51:37 ID:dFOhVUdW]
なんで何度も /etc/sysconfig/network-scripts/ifcfg-eth0 を書いてんだろ。

192 名前:login:Penguin mailto:sage [2009/07/31(金) 16:52:11 ID:sKGfGulX]
>>189
答え先に書かれちゃったか。

1行目のeth0はどこで使ってるの?とか、whileでループさせる意味は?とか
ちょっと落ち着いて考えた方が良い

193 名前:login:Penguin mailto:sage [2009/07/31(金) 16:56:53 ID:IvZ7j8yJ]
>>189
今後の為に基礎から勉強しなおしてきた方がいいよ

194 名前:login:Penguin mailto:sage [2009/07/31(金) 16:57:14 ID:6mUE4jrQ]
> 1行目のeth0はどこで使ってるの?とか、whileでループさせる意味は?とか
> ちょっと落ち着いて考えた方が良い

落ち着いて考えてもわかんねーよ
1行目のeth0がどこにも使われてないのはわかるけど

195 名前:189 [2009/07/31(金) 17:37:11 ID:YezVKpJb]
みなさん回答ありがとうございます。
改めて見ると意味わからないことしてました。
下記のコードで意図する事ができました。
ありがとうございました。

while read
do
echo | sed -n '/DEVICE/p;/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-eth0
break
done < /etc/sysconfig/network-scripts/ifcfg-eth0

196 名前:login:Penguin mailto:sage [2009/07/31(金) 17:45:29 ID:sKGfGulX]
>>195
全力で釣られてやる。

>>190 さんが書いてるように、sed1行でいける
sed -n '/DEVICE/p;/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-eth0

whileしたあげくに無条件でbreakとか意味わからん。
各行で何をしているのかもう少し考えよう



197 名前:login:Penguin mailto:sage [2009/07/31(金) 20:49:41 ID:M2gWEg8T]
>>195
まずその「よく分からないけどとにかく丸写しでそれらしく作っとけばいいだろう」
という思想を改めるべきだな。

198 名前:login:Penguin [2009/07/31(金) 21:59:52 ID:JVm6T/2T]
何やら上でもsedの質問出てますが質問させてください。
sedでtet.txt内にあるhogeをhogehogeに書き換えるものをつくりました。

sed -i 's/hoge/hogehoge/g' /tmp/test.txt

次にhogeとhogehogeの部分を変数にしたのですが今度は書き換わってくれません。
$aにはhoge
$bにはhogehoge
sed -i 's/$a/$b/g' /tmp/test.txt

test.txtを見ると更新はされているので何らかのアクションがあるみたいなんで
すが何か指定方法間違ってますでしょうか?




199 名前:login:Penguin mailto:sage [2009/07/31(金) 22:03:23 ID:Y1b6fdMF]
sed -i "s/$a/$b/g" /tmp/test.txt

200 名前:login:Penguin mailto:sage [2009/07/31(金) 22:06:26 ID:Gbr9waoH]
>>199
""だとシェル変数展開されないっすか?

201 名前:sage mailto:sage [2009/08/01(土) 01:27:09 ID:2gkCvOw5]
シェルでリスタートとかかけると
活性化しますとか表示されるんですが、これ表示させないようにする方法ありますか?
/dev/nullとかしても表示されたので表示させない方法あれば教えてください。

202 名前:login:Penguin mailto:sage [2009/08/01(土) 01:38:27 ID:MXySzGMG]
>>201
使ってるディストリのスレへ。

203 名前:login:Penguin mailto:sage [2009/08/01(土) 02:29:31 ID:SZCdXM7k]
>>198
$ a='hoge'
$ b='hogehoge'
$ cat >/tmp/test.txt
hogepiyo$a$b$c
$ sed -i 's/$a/$b/g' /tmp/test.txt
$ cat /tmp/test.txt
hogepiyo$b$b$c # hogeはそのまま、$aは$bに。
$ cat >/tmp/test.txt
hogepiyo$a$b$c
$ sed -i "s/$a/$b/g" /tmp/test.txt
$ cat /tmp/test.txt
hogehogepiyo$a$b$c # hogeがhogehogeに、$aはそのまま。

204 名前:login:Penguin mailto:sage [2009/08/01(土) 04:42:15 ID:SZCdXM7k]
>>181
入れ子のとき注意がいる。
$ echo $(echo a:$(echo b:$(echo c:$(echo d))))
a:b:c:d
$ echo `echo a:`echo b:`echo c:`echo d````
a:echo b:c:echo d
$ echo `echo a:\`echo b:\\\`echo c:\\\\\\\`echo d\\\\\\\`\\\`\``
a:b:c:d

205 名前:login:Penguin mailto:sage [2009/08/02(日) 01:23:15 ID:tM/nSNrk]
画面を切り替えたりするとselect文が数行表示されない(実際には選択は出来る)ことが
よくあるんですが、データの受信が表示までに間に合ってないような感じです。
これを避ける方法などはあるんでしょうか?
使用しているターミナルはPoderosaになります。

206 名前:login:Penguin [2009/08/03(月) 09:09:05 ID:J0mTyN5X]
今までbashでスクリプト組んで表示はExiteで翻訳とか適当にコピペってたのですが
シェルスクリプトって日本語表示出来ますか?
お偉いさんが英語じゃわからんとかぬかしやがったので・・・



207 名前:login:Penguin mailto:sage [2009/08/03(月) 09:14:24 ID:+8DYA08E]
>>206
文字コード決めうちでよければ比較的簡単だな。

問題はそれで表示できるかどうかは実行する人が
使ってるターミナルに依存するということだ。一般的に
やろうとするとロケール見て切り替えみたいなことを
しなきゃならないが結構面倒だね。

ま、お偉いさんの環境に合わせておけばいいんじゃね?

208 名前:206 [2009/08/03(月) 09:29:50 ID:J0mTyN5X]
>>207
やっぱりそうですよね。
アクセスしてきたターミナルの文字コードを判別してとか切り替えられればいいんですが
さすがに無理ですよね。

お偉いさんだけじゃなくてユーザーも使うんで文字コードって混在してるんですよね。
標準的な文字コードってどんなの使われてるのかはよくわかりませんが
まぁ無理って方向で進めていこうかと思います。

ありがとうございます。

209 名前:login:Penguin mailto:sage [2009/08/03(月) 09:57:12 ID:pu8sCNil]
ローマ字でいいんじゃね。

210 名前:login:Penguin mailto:sage [2009/08/03(月) 10:31:49 ID:3RzsW8i/]
exciteのわけわからん翻訳貼り付けるのは
ユーザーが可哀想だろw
自分の英語に自信が持てないなら、いっそ日本語の方がいいんじゃね。

そのディストリビューションで日本語選んでインストールしたとき
デフォルトになる文字コード選んどけば
誰も文句いわないんじゃね?
自分でLANGいじるようなやつは、文字化けのなおしかたぐらい知ってるだろ。

211 名前:login:Penguin mailto:sage [2009/08/03(月) 10:52:42 ID:3RzsW8i/]
なんか変だ。
ユーザー作ったときデフォルトでなってる文字コードにしとけばいいんじゃね、だ。
LANGとかLANGUAGEとかいじるやつは文字化けの直し方ぐらい知ってるだろ。
デフォルトがCとかenとかなら…シラネ

212 名前:login:Penguin [2009/08/04(火) 12:15:50 ID:OyyR8ocQ]
動けばいいって程度で作ってたものをどうやら他にもリリースするとかで見栄えをよくしろと言われました。
bashで文字を寄せたり全体を中央寄せにしたりするコマンドとか関数ってありますか?

213 名前:login:Penguin mailto:sage [2009/08/04(火) 12:53:29 ID:h5jokg18]
COLUMNS見て計算する。

いっそwhiptailやdialog使うとかな。

214 名前:login:Penguin mailto:sage [2009/08/04(火) 21:45:57 ID:1cLNSoFd]
printf ?
あとよく知らないけど fmt とか groff とか?

215 名前:212 [2009/08/04(火) 22:25:14 ID:OyyR8ocQ]
>>213
文字数はじき出して何とか出来ました。

あとスクリプトの中で
/etc/rc.d/network restart
といれているんですが、手動で/etc/rc.d/network restartすると大丈夫なんですが
#!/bin/bash
/etc/rc.d/network restart
とかで実行するとshould not be world writeable users cannnot control this device
と表示されて実行されていないようです。
権限の問題かと思い色々と変えてみましたがダメでした。
なにか他に注意すべき点があればご教示いただければと思います。

216 名前:login:Penguin mailto:sage [2009/08/04(火) 22:32:07 ID:ACq2bWOB]
> 色々と変えてみましたがダメでした。

そりゃダメだろうな。




217 名前:login:Penguin mailto:sage [2009/08/04(火) 22:49:56 ID:p9z/5JkD]
もしかして: should not be world writable users cannot control this device

218 名前:212 [2009/08/05(水) 09:09:45 ID:Sso6+/38]
>>217
すいません
スペル間違えてました。
217で記述されている内容が表示されておりました。

219 名前:login:Penguin mailto:sage [2009/08/05(水) 09:38:19 ID:gztfuFMV]
いろいろgrepしたけどうちのマシンには
そのメッセージを吐くプログラムは入ってないようだ。

ディストリビューションと、どのプログラム/スクリプトが
そのメッセージ出してるか書けば?

ちなみにそのスクリプトはrootで実行してるんだよね?

220 名前:212 [2009/08/05(水) 10:47:05 ID:Sso6+/38]
>>219
すいません。
CentOS5.3 です。スクリプト内容は膨大なのですがエラーが出る場所は
/etc/rc.d/init.d/network restart
の部分になります。
実行しているのは別のユーザーでてっきりrootで実行してるもんだと思ったら別ユーザーで実行していたようです。
ファイルは
-rwxr-xr-x 1 root root 1234 7月 31 00:00 test.sh
実際に実行していたログインユーザーはtestというユーザーでした。
上記の事とエラー内容から権限がないために出ていると思います。
testユーザーでもrestartをかけれる権限を付与するか、testユーザーを
rootのグループに入れるような事が出来れば出来そうな気もしますが自分には少しレベルが高そうですね。

221 名前:login:Penguin mailto:sage [2009/08/05(水) 13:12:18 ID:gztfuFMV]
のりピーが心配で仕事が手に着かない。

init.dのスクリプトは一般ユーザーが使うようには出来てない。
仮にパーミッション緩めまくって実行できるようにしても、
インターフェースの設定はuid=0じゃないと出来ないので
どこかで権限を昇格するかrootのプロセスに引き継ぐかしないと行けない。

具体的な実装方法の話に入ると、
そもそも一般ユーザーがインターフェースupdownする必要が
本当にあるのかという事から検討したくなって
長くなりそうなのでとりあえずがんばれと言っておく。

222 名前:219 [2009/08/05(水) 13:35:06 ID:Sso6+/38]
>>221
ありがとうございます。
ネットワークの設定を一般ユーザー(といっても特定のユーザーのみですが)
が出来るようにしたいと思っております。
そんなに頻繁にあるわけではないのですがroot権限を持ったものが常駐しているわけでは
ないということもありましたのでネットワーク周りだけを触るスクリプトを組みました。
権限の昇格やrootのプロセスをシェルスクリプトで引き継げるようであれば行いたいと思います。
ご存じのかたおられましたらアドバイスいただけると助かります。

223 名前:login:Penguin mailto:sage [2009/08/05(水) 14:02:44 ID:gztfuFMV]
そのぐらいならsudoでどぞ。

224 名前:login:Penguin mailto:sage [2009/08/05(水) 21:35:22 ID:dz5dEKuL]
>>222
ifcfg-eth0とかに「USERCTL=yes」でroot以外でもできそう
www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/s1-networkscripts-interfaces.html

225 名前:login:Penguin [2009/08/08(土) 16:14:34 ID:Nnr+lme9]
rebootやshutdownはrootでなくても使用できるんでしょうか?
試しにrootではないsampleユーザーで
#!/bin/bash
reboot
を実行させたら再起動かかったんですが、てっきり弾かれるかパスワード聞かれると思ってました。
上のほうで権限がどうのこうのって質問があったんですが、OSとかによって違うってことですかね。

226 名前:login:Penguin mailto:sage [2009/08/09(日) 11:26:19 ID:1P+Q9AS+]
そんなのあんの?
rebootやshutdownは管理者権限だろ



227 名前:login:Penguin mailto:sage [2009/08/09(日) 11:34:22 ID:IkGSFCMm]
sudoersに書いてたとしてもsudo rebootじゃないと駄目だろうし
何だろ

228 名前:login:Penguin mailto:sage [2009/08/09(日) 11:46:08 ID:0aZIEnpY]
>>225
rebootはできてもshutdownはできないんじゃない?

229 名前:login:Penguin [2009/08/09(日) 12:55:17 ID:aaFRdfIZ]
ディストリ次第じゃないんですか。Debian ではできないみたいだけど、Vine では
一般ユーザでも shutdown できる (Red Hat 系はみんなできるのかも)。Vine の場合、
/usr/bin/shutdown はシェルスクリプトで、中で halt や reboot を呼び出している。
そして、この halt や reboot はリンクで、実体は /usr/bin/consolehelper。
あとは、man consolehelper ですね。

230 名前: ◆Zsh/ladOX. mailto:sage [2009/08/09(日) 14:01:11 ID:/ZeBm1qf]
んーできない。

% cat /etc/redhat-release
CentOS release 5.3 (Final)
% id
uid=500(hage) gid=500(hage) 所属グループ=500(hoge) context=user_u:system_r:unconfined_t
% /sbin/shutdown -r now
shutdown: you must be root to do that!
% /sbin/reboot
reboot: must be superuser.


231 名前:229 mailto:sage [2009/08/09(日) 14:18:48 ID:PRPNML+y]
>>230
CentOS の場合、/sbin/shutdown じゃなくて、/usr/bin/shutdown はないんですか。
だとしたら、Vine だけなのかな。たしか、「一般ユーザに電源をぶち切られるより、
shutdown を許した方がマシだ」という考えだったと思います。

232 名前: ◆Zsh/ladOX. mailto:sage [2009/08/09(日) 14:27:23 ID:/ZeBm1qf]
% /usr/bin/shutdown -r now
zsh: そのようなファイルやディレクトリはありません: /usr/bin/shutdown
% locate shutdown|grep bin
/sbin/shutdown
/usr/bin/pm-shutdown

なんで無いね。


233 名前:login:Penguin mailto:sage [2009/08/09(日) 16:35:29 ID:CB8fkMOP]
# ながいこと Vine しか使ってないから他のディストリのことはわからない。

>>225
シェルスクリプトの "reboot" を
/sbin/reboot とか /usr/bin/reboot とかに書き換えてみると動作に違いがでると思う。

> 権限
pam って仕組みで管理されてると思う。/etc/pam.d/ 以下のファイル。

>>225-232
Vine だと usermode っていうパッケージに
/usr/bin/consolehelper
/usr/bin/halt
/usr/bin/poweroff
/usr/bin/reboot
/usr/bin/shutdown
/usr/sbin/userhelper
とかいったものが入ってる。usermode-gtk ってパッケージもある。

Description :
usermode パッケージには、一般ユーザが設定されたプログラムをスーパーユー
ザとして実行できるようにするユーザヘルパープログラムが含まれています。

234 名前:login:Penguin [2009/08/09(日) 22:04:40 ID:ivLlFzN/]
シェルスクリプトでコマンド番号を選択したりIPを入力したりするツールつくったんですが、
ctrl+cやIP入力にコマンドを入れてみて実行されるかどうかといった確認はしてみましたが
それ以外にセキュリティやテストしてみるといいことなどあれば教えてください。


235 名前:login:Penguin mailto:sage [2009/08/09(日) 22:52:55 ID:C0J3iJDt]
スクリプト晒して!

236 名前:login:Penguin mailto:sage [2009/08/09(日) 23:03:57 ID:IVuBeWRI]
晒されても答えようがないような。
C-c が入れられたときの正しい処理とか本人でないと知らないし。



237 名前:234 [2009/08/09(日) 23:20:52 ID:ivLlFzN/]
>>235
IP以外の文字が入れられたらといった時の処理はまだいれてませんが
下記のような事を繰り返してconfを書き換えて再起動するという感じです。

read newip
$newip="IPADDR=""$newip"
sed -i "s/$oldip/$newip/g" /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/rc.d/init.d/network restart
menufunc


238 名前:login:Penguin mailto:sage [2009/08/10(月) 00:04:28 ID:CdStD5IJ]
>>227
sidを知らんのか。

239 名前:login:Penguin mailto:sage [2009/08/10(月) 01:28:19 ID:qfqY90wM]
a
b
c
...

と一語ごとに改行された一つのテキストファイルを
a b c d e f g h i j k
l m n o ...
と言うように10列ごとに改行するテキストにしたいと思い、
スクリプトを組んだのですが動作が遅く、重くなってしまって困惑しています
どなたかお知恵をお貸しくださると助かります。

#/bin/bash
FILE=$1
LINENUM=`expr 1`
OFILE=/dev/shm/hoge

while read line
do
if [ $LINENUM -lt 10 ];then
echo -n "$line" >> $OFILE
echo -n -e "\t" >> $OFILE
LINENUM=`expr $LINENUM + 1`
else
echo "$line" >> $OFILE
LINENUM=`expr 1`
fi
done <$FILE

240 名前:login:Penguin mailto:sage [2009/08/10(月) 01:50:52 ID:vmT7yJCz]
#!/bin/sh
FILE=$1
OFILE=/dev/shm/hoge
LINENUM=1
while read line
do
if [ $LINENUM -lt 10 ]
then
echo -n "$line"
echo -n -e "\t"
LINENUM=$(( LINENUM + 1 ))
else
echo "$line"
LINENUM=1
fi
done <$FILE >$OFILE

241 名前:login:Penguin mailto:sage [2009/08/10(月) 02:00:08 ID:qfqY90wM]
>>240
ありがとうございます! 処理が覿面に早くなりました!
いちいち書き出さないで最後に一括して書けばよかったんですね…

242 名前:login:Penguin mailto:sage [2009/08/10(月) 02:10:30 ID:vmT7yJCz]
>>241
たぶんexprの呼び出しのほうがコストが高いよ

243 名前:login:Penguin mailto:sage [2009/08/10(月) 12:26:13 ID:5IcilgjJ]
自分で動かすだけならこれでいいやと思ったら、そんだけで改善できたのか…
----
#!/bin/sh
FILE=$1
OFILE=/dev/shm/hoge

sed -e '$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;$!N;s/\n/\t/g' <$FILE >$OFILE

244 名前:login:Penguin [2009/08/10(月) 15:31:57 ID:oeYkUDqx]
数字の判定は[0-9]と正規表現使って判定してるんですが
IPアドレスかどうかの判定が出来るような正規表現ってあるんでしょうか。
無い脳みそひねってもいい案が出なかったのであれば教えてください。

245 名前:login:Penguin [2009/08/10(月) 15:41:18 ID:86RyWVEw]
>>244
ググレばサンプルたくさんあるよ。

246 名前:login:Penguin mailto:sage [2009/08/10(月) 15:59:59 ID:BhLss4cE]
お前ならどうするかを教えてやりゃーいいじゃん。



247 名前:login:Penguin mailto:sage [2009/08/10(月) 16:10:10 ID:sXOG+s90]
PowerShell神すぎだろ。
このスレ見てると原始人が石斧振り回してるように見えてくるぜ。

248 名前:login:Penguin mailto:sage [2009/08/10(月) 17:33:20 ID:6xgY8KY4]
僕には端末エミュとシェルの違いもわかってないマヌケが見えます。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<221KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef