- 1 名前:シェルスクリプトライター mailto:sage [2011/12/10(土) 20:06:40.38 ]
- シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その18 hibari.2ch.net/test/read.cgi/unix/1308195527/ 次スレは >>970 で。
- 241 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/27(金) 19:32:43.61 ]
- >>232
$ cat ./test.sh #!/bin/sh device=/dev/sda total_size=`fdisk -l $device | grep "Disk $device" | awk '{print $5}'` echo $total_size $ sudo ./test.sh 2> /dev/null 21474836480
- 242 名前:232 mailto:sage [2012/01/28(土) 21:12:44.61 ]
- すいません、遅くなりました
~$ cat mksd.sh #! /bin/sh device=$1 echo $device total_size=`fdisk -l $device | grep Disk | awk '{print $5}'` echo "total_size = $total_size" ~$ sudo ./mksd.sh /dev/sdb /dev/sdb total_size = ~$ su パスワード: # ./mksd.sh /dev/sdb /dev/sdb total_size = 3904897024 です
- 243 名前:232 mailto:sage [2012/01/29(日) 08:51:14.17 ]
- >>241
あれ、すいません見てませんでした ~$ cat mksd.sh #! /bin/bash device=$1 echo $device total_size=`fdisk -l $device | grep Disk | awk '{print $5}'` echo "total_size = $total_size" size=$[$total_size / 2] echo $size saito@ubuntu:~$ mksd.sh /dev/sdb mksd.sh: command not found saito@ubuntu:~$ ./mksd.sh /dev/sdb ./mksd.sh: line 9: /2: syntax error: operand expected (error token is "/2") ~$ su パスワード: # ./mksd.sh /dev/sdb /dev/sdb total_size = 3904897024 1952448512 なぜ、こうなるんでしょうか?
- 244 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/29(日) 09:09:10.62 ]
- >>243
面倒だから /proc/partitions の方使えよ。こっちならroot権限要らん。 1kバイトのブロック単位だから、1024倍な。 引数は /dev/sdaじゃなく、sdaだけで指定する。 grep/awkとか使わずに内部コマンドだけで組んでみた。 $ cat hoge.sh device=$1 while read x x blocks name && [ "$name" != "$device" ] do :; done < /proc/partitions total_size=$((blocks*1024)) $ ./hoge.sh sda 1000204886016
- 245 名前:243 mailto:sage [2012/01/29(日) 11:28:34.42 ]
- >>244
ありがとう、ございます。
- 246 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/29(日) 12:12:34.09 ]
- >>243
まだやってたんだ。 envやsetの出力差分とか見ないのか?
- 247 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 08:01:56.00 ]
- >>242
↓の結果を比べてみる、とか。 #! /bin/sh result=`fdisk -l /dev/sda` echo "$result"
- 248 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 20:31:06.87 ]
- 標準入力からデータを読み込むようなbashスクリプトを書いています。
スクリプトの途中でread -s -n 1などとして画面をポーズしたいのですが、 標準入力にデータが渡されているため画面ポーズのためのreadにもそれが読み込まれてしまい、思ったように動作しません。 一旦ファイルディスクリプタの0番をクリアすれば良いのかと思うんですが、どのようにすれば実現できるでしょうか? 念のため、画面の一時停止はsleepなどでも可能なのは分かっていますが、 今回はreadで実現したいということでよろしくお願いします。
- 249 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 20:35:24.72 ]
- >>248
read -s -n 1 < /dev/tty
- 250 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 20:51:23.68 ]
- >>249
出来ました!こんな簡単な事だったんですね。 ついでに聞きたいんですが、一旦読み込まれた標準入力のクリアとかって無理なんでしょうか? それと/dev/ttyは移植性のある?書き方なんでしょうか。 質問ばかりですみません。
- 251 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 20:56:36.52 ]
- >>250
exec < /dev/tty を実行すると、以降の行は標準入力が端末に戻るので read -s -n 1 だけで行けるようになる。 /dev/ttyはどのOSでも移植性がある。
- 252 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/30(月) 21:24:08.05 ]
- >>251
なるほど、そういうテクニックがあるんですね。 勉強になりました。 どうもありがとうございました。
- 253 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 01:12:06.63 ]
- >>251
流石に「どのOSでも」は言い過ぎではw まあsh動く環境ならまず大丈夫だとは思うから実害はないが
- 254 名前:名無しさん@お腹いっぱい。 [2012/01/31(火) 06:11:03.04 ]
- >>253
いいや、「どのOSでも」OK。 反論するなら反例を挙げろや、カス。
- 255 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 08:01:25.65 ]
- 縛りはOSだけでいいの?
じゃ MS-DOS を挙げよう。 UNIX系OS特有なんだし、少なくともPOSIXに準拠してなきゃ持ってないよ。
- 256 名前:名無しさん@お腹いっぱい。 [2012/01/31(火) 08:27:24.42 ]
- >>255
お前ほんとにアホだなw MS-DOS ではシェル(スクリプト)は使えない。
- 257 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 08:32:02.94 ]
- >>253
もとの質問の >>249 read -s -n 1 < /dev/tty の readの -s -n オプションは bash依存だが、/dev/ttyがOS依存なんて話は聞いたことがない。 テストスクリプトとして ---- #!/bin/sh echo hoge > /dev/tty ---- があるとして、このスクリプトが「/dev/tty」が無いのが原因で動かないようなOSを 挙げてくれるかな。>>253 よ。まあ、無理だろうけどw
- 258 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 08:36:03.03 ]
- >>255
>POSIXに準拠してなきゃ持ってないよ /dev/ttyはPOSIX以前からあるよ
- 259 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 08:48:05.58 ]
- >>256-258
もうほっとけ。 質問者の質問に自分では答えずに、 正しく回答した回答者に後から間違ったつっこみを入れる >>253 のようなアホは いつの時代にも居るから。
- 260 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 09:28:37.54 ]
- FreeBSDでは/dev/ttyに直接アクセスしようとするまで存在しないのか。
- 261 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 09:39:19.39 ]
- アスペだらけのスレで「posixな」とか「シェルスクリプトが動く」などの制約を付けずに
> /dev/ttyはどのOSでも移植性がある。 と言っちゃった>>253の負け。
- 262 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 10:03:34.61 ]
- 確かにそこだけ切り取ればWindowsも無いわな
- 263 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 10:05:33.60 ]
- 負けは>>253じゃなくて>>251だった。
- 264 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 10:09:49.20 ]
- >>255
MS-DOS版の sh.exeでは /dev/tty動くぞ。sh.exe内部で解釈してるらしい。
- 265 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 12:57:13.51 ]
- cl.ly/1z1S0Y2g3n0L133x0X2M
写真の同じやつ整理したくてこんなん書いたんだけど, いかんせん遅い・・・ どうやったらもうちょっと早くなるかな?
- 266 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 13:33:07.43 ]
- >>265
遅い原因は毎回md5sumを呼んでいるから md5sum "$@"で求めておいて、その結果に対しての処理ならそれほど遅くない アルゴリズムもcut -d' ' -f1してsortしてuniq -dして重複ファイルのMD5だけ列挙 そのMD5でgrepすればファイル名も分かるだろ
- 267 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 13:39:35.46 ]
- 一気にmd5取る、md5でソート、ユニークなものだけ移動。残りは重複したファイル。
ユニークなファイルのリスト md5sum "$@" |sort -k 1 | uniq -w 32 |cut -d' ' -f 2
- 268 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 13:39:36.12 ]
- rsyncを--dry-runで走らせるくらいで十分、かつ速いんじゃないかと
何の検証もせず言ってみる
- 269 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 16:00:18.26 ]
- >>266-267
md5sumコマンド起動のオーバーヘッドより、 MD5計算時間の方がはるかに長いから、 毎回md5sumを呼んでも、ファイル名引数まとめてmd5sumを呼んでも ほとんど改善しないよw それより、まずはファイルサイズだけ見て、 同じファイルサイズのファイルが他にない場合は無条件でユニークなファイルとして md5sum計算対象から除外した方がよい。
- 270 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 16:06:28.42 ]
- 写真ファイルの同一検出ならファイル全体のmd5計算しなくても、
適当な位置で4KBくらい抜き出すのでもよさそうな
- 271 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 17:27:47.76 ]
- >>269
そんなところで高速化図ったんじゃねーよ。 見当はずれの言いがかり付けるって惨めだぞ。w
- 272 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 17:43:31.60 ]
- >>269
ソース読んでないだろwどのみちMac何だからそういう機能持ったアプリありそうだと思う。それ使った方がいい
- 273 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 18:01:40.88 ]
- 読んだけどわからなかっただけだろ。
- 274 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 19:11:12.35 ]
- openって何だろうと思ったらMacにはそういうコマンドがあるのか。
- 275 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 19:29:02.96 ]
- で、openってなに?
- 276 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 20:30:08.94 ]
- $ open foo.txt
$ open -a /Application/TextEdit.app foo.txt $ open -a /Application/Emacs.app/Contents/MacOS/Emacs foo.txt こんなコマンド。
- 277 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 21:06:38.95 ]
- 適当なアプリ探して、バックグラウンドでそいつを渡すわけね
- 278 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/01/31(火) 21:16:36.01 ]
- openはNEXTSTEP由来でファイルやディレクトリを開くコマンド
- 279 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 11:43:16.32 ]
- OSXのopenコマンドは
open . でカレントディレクトリをGUIで開かせるってのが一番使うかな
- 280 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 12:05:32.98 ]
- blogに書いてろ
- 281 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 12:58:13.47 ]
- >>269は理解できたのかな? w
- 282 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 16:07:29.43 ]
- md5 でなんとかなる程度なら
さいしょから samefile なり samesame でよいのでは
- 283 名前:265 mailto:sage [2012/02/01(水) 17:06:16.13 ]
- cl.ly/221Q2p202r1f0g232K1Q
みんなありがとう! こうかな?
- 284 名前:265 mailto:sage [2012/02/01(水) 17:09:15.95 ]
- あ,最初で移動してたら次のmd5sumの$@がないて言われるね\(^o^)/
- 285 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/01(水) 18:13:12.63 ]
- >>283
>>269は全然わかってないマヌケな素人だから、奴の指摘は全部無視していい。 サイズなんて調べる必要ない。
- 286 名前:名無しさん@お腹いっぱい。 [2012/02/01(水) 23:15:24.01 ]
- testコマンドで質問です。
man testを見てみると、以下の2つのオプションの説明があります。 1.-nオプションのところ True if the length of string is nonzero. 2.stringオプションのところ True if string is not the null string. これらの違いは、何があるのでしょうか?それとも同じなのでしょうか? 出来ればサンプルスクリプトで説明していただけると助かります。
- 287 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 00:06:01.32 ]
- stringオプション?
- 288 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 00:19:26.32 ]
- >>286
直接引用しろ。うちでは等価って書いてある
- 289 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 01:32:54.28 ]
- シェルスクリプトの勉強をしたいのですが、
何シェルがいいですか。
- 290 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 01:40:36.62 ]
- これの事だな。
www.freebsd.org/cgi/man.cgi?query=test&apropos=0&sektion=0&manpath=FreeBSD+9.0-RELEASE&arch=default&format=html -n string True if the length of string is nonzero. string True if string is not the null string. 違い test -n $nonexistent; $? <= バグ? test -z $nonexistent; $?と矛盾する test $nonexistent; $?
- 291 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 03:44:03.15 ]
- >>289
>>1 特記ない限り bourne shell ということは、それを選択すれば無難ということ。 Linux オンリーなら bash だろうけど。
- 292 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 06:26:43.33 ]
- >>289
そんな貴方に、Windows Power Shell。
- 293 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 08:40:58.52 ]
- >>290
なんだよ、矛盾するって。
- 294 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 08:59:55.63 ]
- 自分が何調べてるかを理解してないだけに見える
- 295 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/02(木) 09:17:20.91 ]
- オペレータだけ与えるとstringと解釈するのか。エラーにしろよお。
- 296 名前: 忍法帖【Lv=4,xxxP】 mailto:sage [2012/02/02(木) 23:56:58.70 ]
- >>292
なんかUNIXのシェルより強力って書いてあるのが多いけどマジ?
- 297 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/03(金) 10:31:06.58 ]
- 「協力」の基準をどう考えるか次第でどうとでも
- 298 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/03(金) 20:58:42.50 ]
- いま流行のステマとか
- 299 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/04(土) 08:30:04.97 ]
- >>296
シェルそのものの機能は確かに強力だけど 肝心のコマンド資産がなさ過ぎて実用シェルとしてはなあ…
- 300 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/04(土) 08:42:10.79 ]
- パワシェルはインタラクティブに使うとしょぼい。
- 301 名前:265 mailto:sage [2012/02/04(土) 22:16:58.57 ]
- >>284
最終的にこれで出来ました! みなさんありがとうお(^ω^) cl.ly/152U342e2o212b2B1q3j
- 302 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/09(木) 07:27:17.71 ]
- 遅レスだけど、PowerShellは.Netのライブラリも呼べるしWin32APIも呼べるから、Windowsのシェルとしては強力だわ
それを参考にシステムコールや動的ライブラリをロード・実行する機能を持ったシェルが作られたとしても 自分はあんまり使いたいと思わんな。そういう機能の需要と言うか必要性はあるのかどうか
- 303 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/09(木) 14:49:30.97 ]
- PowerShellはいい加減スレ違いな気がするけれども……
その手の機能が欲しいときはぶっちゃけLL使えばよくね、と俺は思ってしまう それよりもシェルとしては以下の点がネックで、cmd.exeに比べてすら劣る ・デフォルトでスクリプトの実行が禁止されているので配布物でのスクリプト利用は 事実上不可能 ・入力リダイレクトが使えない ・オブジェクトパイプラインという一見高機能なものを備えているが、代償として バイナリデータをパイプやリダイレクトで扱えない 最後の問題が困る。外部コマンドをパイプでチェインする場合もPowerShellが 間に割って入って無駄にテキストに変換するので、データを壊すだけでなく 多分無駄に非効率でもある XPではそれに加えて我慢がならないほど起動が遅かった(ngen使っても)ので 遊んでみようという気にすらならなかったけど Windows7では起動時間は我慢できる範疇になったな
- 304 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/09(木) 16:28:39.02 ]
- >PowerShellはいい加減スレ違いな気がするけれども……
だったらgdgd書かなきゃいい
- 305 名前: 忍法帖【Lv=3,xxxP】 mailto:sage [2012/02/09(木) 16:51:38.01 ]
- >>303
>・デフォルトでスクリプトの実行が禁止されているので配布物でのスクリプト利用は > 事実上不可能 うんこやん
- 306 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/09(木) 22:51:58.68 ]
- 質問です。
$ cat hoge $GLOBALS['hoge']['huga'] $GLOBALShogehuga とします。 $ grep $GLOBALS\[\'hoge\'\]\[\'huga\'\] hoge とすると、どちらの行も引っかかってしまいます。 $GLOBALS['hoge']['huga'] だけ引っかけたいのですが、どうすればよいでしょうか、ご教示ください。
- 307 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/09(木) 23:03:56.62 ]
- $ grep "\$GLOBALS\['hoge'\]\['huga'\]" hoge
- 308 名前:名無しさん@お腹いっぱい。 [2012/02/09(木) 23:05:25.02 ]
- grepに食わせるべきパターンが $ [ ] をエスケープした
¥$GLOBALS¥['hoge'¥]¥['huga'¥] なので、これをシェル的にクォートする必要がある。 シングルクォートでがんばるなら '¥$GLOBALS¥['¥''hoge'¥''¥]¥['¥''huga'¥''¥]' 正規表現として解釈されることを意図していないならfgrep使えば? とか思ったりもする。
- 309 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/09(木) 23:42:52.43 ]
- >>306
$ grep -F "\$GLOBALS['hoge']['huga']" hoge
- 310 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/10(金) 08:45:25.71 ]
- >303
すれ違いかもしれんが参考になった (unix shell 人視点の評価として)
- 311 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/10(金) 12:45:56.45 ]
- >>310
すれ違いかもしれんが > (unix shell 人視点の評価として) こゆとき俺はこーかく ( unix shell 人視点の評価として )
- 312 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/10(金) 13:15:55.88 ]
- >>311
そう書くとunixから定義しないといけない
- 313 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/10(金) 13:41:46.96 ]
- ここはunix shell人のいるスレですね。
- 314 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/10(金) 13:46:55.14 ]
- ()は空白開けなくても大丈夫だろ。{}は必要だけど。
- 315 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/10(金) 13:47:22.31 ]
- >>307-309
grep の件、man もロクに読まない私にお力添えいただき、ありがとうございました。 m(__)m
- 316 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/13(月) 21:53:21.26 ]
- 質問です。
あるスクリプトをホームディレクトリに作ったのですが、以下の条件があります。 ・他の人もそのスクリプトを実行できるようにしたい ・でもファイルの中身は他の人は見れないようにしたい。 このような場合、一般的にはどのような手法がとられるのでしょうか?
- 317 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/13(月) 22:07:38.54 ]
- そういう無茶なことは考えない方がいい。
- 318 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/13(月) 22:09:09.60 ]
- (chmod 0711じゃ)いかんのか?
- 319 名前:名無しさん@お腹いっぱい。 [2012/02/13(月) 22:20:32.11 ]
- うちにあるsudoのパーミッションが -r-s--x--x で、実際実行はできるけど
中身はみられない。適当なシェルスクリプトを作って同じパーミッションにして みたけど、実行したらPermission deniedsetuidになってしまった。 (OSXにて)
- 320 名前:名無しさん@お腹いっぱい。 [2012/02/13(月) 22:21:22.41 ]
- setuidというフレーズを消しわすれてしまった。
- 321 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/14(火) 00:05:14.25 ]
- スクリプトはインタープリターに読んでもらわないと実行できない。
そして、インタープリターは実行する人の権限で動作する。 したがって、スクリプトは実行する人が読むことができる。できなければ実行できない。
- 322 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/14(火) 00:21:01.04 ]
- つBATCOM
- 323 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/14(火) 01:25:34.75 ]
- なるほどぉー
- 324 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/14(火) 06:10:33.21 ]
- じゃあコンパイルできる言語で書き直すとか
- 325 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/14(火) 06:50:57.33 ]
- UNIXサーバーの管理をしています。
ユーザーはスクリプトの実行は禁止ですが、 最近、ユーザーでも自分のホームフォルダーにスクリプトをコピーし、 X権限をすることによってスクリプトが実行できてしまうことが判明しました。 これはOSのセキュリティーボールではないのでしょうか? ユーザーのフォルダーではたとえX権限がされていても 実行できないようにする方法はありますか? 必要ならカーネルにバッチを当てる方法も、やもうえません。
- 326 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/14(火) 08:28:25.69 ]
- >>325
> ユーザーはスクリプトの実行は禁止ですが、 なんか御幣のある言い方をしているようにも思えるが、つまりのところ特定コマンド 以外は実行させたくないんだろ? であればログインスクリプトを制限がきつい奴にすれば出来る。 bash の rbash の項目の man page かググって調べろ。 .bashrc や .bash_profile などを個人で書き換えられないようにしておかないと意味が無かったりと 環境整備には手間がかかるとは思うが。 > ユーザーのフォルダーではたとえX権限がされていても > 実行できないようにする方法はありますか? 以下を実行して↑に何の意味も無いことを学べ。 chmod 644 sample.sh /bin/sh ./sample.sh これ以上はスレチなのでここでの質問をクローズした上で、以上の情報を元に自分で調べるか 適切なスレに行って再質問されたし。
- 327 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/14(火) 08:30:28.16 ]
- ネタだろ。
かまっちゃいかんよ。
- 328 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/14(火) 08:34:56.59 ]
- ここからのコピペ
toro.2ch.net/test/read.cgi/unix/1000022300/775-
- 329 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/16(木) 01:53:58.03 ]
- mountにnoexecってなかったっけ?nodevはあったよな。
- 330 名前:名無しさん@お腹いっぱい。 [2012/02/16(木) 02:11:23.48 ]
- コンパイルできるシェルはありませんか?
- 331 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/16(木) 03:11:31.80 ]
- つ ttp://ftpmirror.gnu.org/bash/
- 332 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/16(木) 15:25:59.88 ]
- だから、コンパイルできるシェルはありませんか?
- 333 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/16(木) 15:26:22.53 ]
- ありません。
- 334 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/16(木) 15:38:01.31 ]
- >>330
int main(){return system("シェルスクリプト本文");} って書けばコンパイルできるよ。 C言語上での文字列改行を行なえば複数行も記述できる。
- 335 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/16(木) 19:45:29.07 ]
- shcの事か?
- 336 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/19(日) 20:05:22.42 ]
- 初心者なんですけど、16進数のテキストデータをシェルスクリプトでバイナリ化する事はできますかね?
- 337 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/19(日) 20:23:44.75 ]
- printf '¥x68¥x6f¥x67¥x65?n'
- 338 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/19(日) 21:15:12.00 ]
- >>337
これがヒントなんですか?? 全然理解できへん(~_~;)
- 339 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/19(日) 21:46:07.41 ]
- echo 686f 6765 0a | xxd -r -p
- 340 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/20(月) 02:10:00.67 ]
- /etc/rcファイルを読んでるんですけど、
全く理解できません。 しょっぱなにこれが有るんですが、 stty status '^T' なんのためにあるのでしょうか? rcファイルが読まれ始めるときは、^Cや^Hが設定されていないという事? ですか? さらに、 if [ -f /etc/rc.first ] then . /etc/rc.first fi という一文は /etc/rc.firstが存在するならば、/etc/rc.firstを実行するという意味だと思うんですが、 -fオプションはググると 「file が普通のファイルならば真となる。」 とありましたが、普通ではないファイルって有るんでしょうか?
- 341 名前:名無しさん@お腹いっぱい。 mailto:sage [2012/02/20(月) 06:22:24.92 ]
- 普通ファイルをそういう意味で捕らえるのはフレッシュ過ぎて噴いたw懐かしさがこみ上げてくるレベル
|

|