てきとうなメモ

本の感想とか技術メモとか

Shell

set -eはどこまで有効なのか

シェルスクリプト(bash)はコマンドが失敗しても次のコマンドを実行してしまうので怖い→set -eしておけという話はよくあるが、実際どこまで有効なのか。 基本 コマンドの戻り値が0になった時にシェルを終了する #!/bin/bash set -e echo "before false" false…

suやsudoにおけるPATH

suとかsudoとかrootになる方法はいくつかあるけど、/usr/local/binにパスが通っていないことがあった。 で、なんでかなと。centos7の環境で確認すると以下のようになる。 $ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.lo…

Shellshockの攻撃をModSecurityで防ぐ

今回のShellshock問題の対策としては普通にbashのアップデートで良いのだけども、RedHatにModSecurityで防ぐ方法が載っていた。 The following mod_security rules can be used to reject HTTP requests containing data that may be interpreted by Bash as…

bashの脆弱性(CVE-2014-6271, CVE-2014-7169)

CVE - CVE-2014-6271 Bash Code Injection Vulnerability via Specially Crafted Environment Variables (CVE-2014-6271, CVE-2014-7169) - Red Hat Customer Portal これはひどい。こんな感じで環境変数に設定したスクリプトを実行してしまう。 $ env x='()…

bashで一回でもエラーが発生したらスクリプトをエラー終了する

some_command if [ $? -ne 0 ] then echo "failed to execute some_command" exit 1 fi とか毎回やるのはめんどいので、 err_handler() { echo "failed to execute '$BASH_COMMAND'" exit 1 } trap err_handler ERR some_command ... とやればいいかtrapはシ…

パイプライン使うなという意見

existential type crisis : Don't Pipe to your Shell 最近、 $ wget -O - http://www.example.com | sudo shを実行する形のインストーラが多いけど、ネットワークが途中で切れていたら、スクリプトが途中で終わったけども、意味が通る状態でsudo shとか実行…

Tomcat6が終了できない対策

catalina.shを実行してもなかなか終了してくれない場合があって、再起動するときに catalina.sh stop catalina.sh start とスクリプトで実行すると失敗することがある。で、ubuntuの起動スクリプトとかだと以下のようになっている。 log_daemon_msg "Stoppin…

tcshのhistory substitution

シングルクォートの中でも有効なのか % openssl ciphers -v 'ALL:!EXPORT' EXPORT: Event not found.tcshのmanによると History substitution is prevented by backslashes but not by single quotes. というわけで % openssl ciphers -v ALL:\!EXPORTとすれ…

標準出力と標準エラー出力を別々のファイルと画面に出力する

標準出力をファイルと画面に両方出力する場合、 command1 | tee out.txtとするし、標準エラー出力もファイルと画面に出力したい場合は command 2>&1 | tee out.txtとするのだけども、標準出力と標準エラー出力を別々のファイルに保存したいことがあった。以…

プロセス置換

diff the outputs of two programs | commandlinefu.com diff <(exiftool img_1.jpg) <(exiftool img_2.jpg)リダイレクトの何かの機能かなと思っていてら、Bashだとプロセス置換という機能があって、 command <(list) command >(list)と記述すると、名前付き…

cshのクォート文字列内部のエスケープ

POSIX Shellについては調べたことがあるけども、cshの場合はどうなのかなと思っていたらどうもエスケープできないみたい % echo 'foo\'bar' Unmatched '. % echo "foo\"bar" Unmatched ".「Csh Programming Considered Harmful」でもそんなこと書いてあった…

Shellのシングルクォート

Shellのシングルクォートはエスケープしないのでシングルクォートの中でシングルクォートを利用することができない。 Enclosing characters in single-quotes ( '' ) shall preserve the literal value of each character within the single-quotes. A singl…

perldocのcompletion

Big Sky :: perldocのbash-completionが激しく便利でうれしょん出た。 ubuntuのbash-completionでもできるんじゃないかと思って試したらできた $ perldoc IO IO IO\:\:Compress\:\:Zip IO\:\:Seekable IO\:\:Uncompress\:\:Base ...ubuntuの方はprefixが一致…

Bournegol

インタビュー記事を読んでいたときは知らなかったのだが,shのソースコード自体もalgolっぽく書いていたのか. V7/usr/src/cmd/sh/mac.h どんだけalgol好きなんだよwBournegolというのはBourneが利用したAlgol-likeなCの方言ということらしい.

Steve Bourneのインタビュー

The A-Z of Programming Languages: Bourne shell, or sh - a-z of programming languages - Computerworld Any one language cannot solve all the problems in the programming world and so it gets to the point where you either keep it simple and re…

bashの'\n'と';'の違い

これもOK。となると、次もOKでしょうよ、当然。 for x in 1 2 3; do; echo $x; doneガーン、ダメなんだってぇ。 syntax error near unexpected token `;' シェルスクリプトのセミコロンの打ち所がわからん - 檜山正幸のキマイラ飼育記 for文の改行が';'に置…

bashによる検索エンジンというかgrep

http://www.ghettosearch.net/wgetしてgrepして,なかったらリンクを抽出してwgetして…の繰り返し.aboutページがユーモラスに書かれていて面白い Boolean Queries echo "$query" | tr ' ' '|' Natural Language Processing echo "$query" | sed -Ee 's/(s|i…