タグ

bashに関するiwwのブックマーク (280)

  • シェルスクリプト(Bash)

    シェルスクリプトとはコマンドやシェルの組み込みコマンドなどをファイルに記述し、実行できるようにしたものである。 またプログラムの制御構造なども使用でき、柔軟な処理が可能であり、/etc/rc.d/initd/ディレクトリ内の起動スクリプトなどはシェルスクリプトである。 シェルスクリプトを実行するには実行権限および読み込み権限が必要です。 またシェルスクリプトファイルの1行目にはシェルスクリプトを実行するシェルのパスを記述します。 スクリプトファイル内でも、シェル変数を定義することができる。またその変数を参照する場合は変数名の前に" $ "を 付けることで参照できる。変数名に使用できる文字は英数字および" _ "(アンダーバー)であり先頭は英字を使用しなくてはならない。

  • bashで多重起動を防止する(その3)

    cles::blog 平常心是道 blogs: cles::blog NP_cles() « php の「 Cannot use string offset as an array ... :: RDP の脆弱性を突く実証コードが公開される » 2012/03/19 bashで多重起動を防止する(その3)  cli  sh  programming 242 3へぇ これまで何度も話題にしてきたシェルスクリプトの多重起動を防止ルーチン*1ですが、 procmail についている lockfile というコマンドを使うとより楽に実装できそうということが分かったので書き直してみました。 こんなストレートなコマンドが存在していたとは盲点でした。 LOCKFILE(1) LOCKFILE(1) NAME lockfile - conditional semaphore-file creator SY

    bashで多重起動を防止する(その3)
  • KornShell - Wikipedia

    KornShell(コーンシェル、ksh)は、Unixシェルの一種であり、1980年代初期にベル研究所のデビッド・コーン(英語版)が開発し、1983年7月14日のUSENIX年次大会で発表した[1][2]。初期にはベル研究所の開発者マイク・ヴィーチとパット・サリヴァンも開発に関わり、それぞれ入力行編集モードのEmacsスタイルとviスタイルのコードを書いた[4]。Bourne Shellに対して完全上位互換であり、コマンド履歴などのC Shellの機能の多くも取り入れている。彼はベル研究所内のユーザーの要望を受けてkshを開発したと言われている。 KornShellは、POSIX.2 Shell and Utilities, Command Interpreter (IEEE Std 1003.2-1992) に準拠している。 従来のBourne shellとKornShellとの主な違い

    iww
    iww 2012/11/08
  • IPA ISEC セキュア・プログラミング講座:C/C++言語編 第10章 著名な脆弱性対策:コマンド注入攻撃対策

    第10章 著名な脆弱性対策 コマンド注入攻撃対策 C言語にはその内部でシェルを呼び出してコマンドを実行できる system()、popen() 等のライブラリ関数が備わっているが、これらを使う場合、コマンド注入攻撃への対策が必要である。 シェル シェルは、Unix, GNU/Linux で使われるコマンド解釈実行プログラムである。 シェルはユーザが指定したプログラムを単に起動するのみならず、ファイル入出力のリダイレクト、複数コマンドの組み合わせ実行、パイプ、変数、条件分岐、ループ等プログラミング機能をも含む強力なツールである。 Unix OSの歴史とともに、かつては様々な種類やバージョンのシェルが使われてきたが、最近は bash と呼ばれるシェルが使われることが多い。GNU/Linux においても同様である。 コマンド注入攻撃は、プログラムが外部からの入力を組み入れてシェルコマンド文字列を

  • シェルスクリプトでファイル名や拡張子名を取得する - Linux シェルスクリプト プログラミング

    ディレクトリ名とファイル名とに分離する Linux シェル (sh) では次のようにして、変数に格納された文字列から "ファイル名" と "ディレクトリ名" を取得できる様子です。 #!/bin/sh # FILEPATH 変数にファイルのパスが格納されているとします。 FILEPATH="/etc/httpd/httpd.conf" # FILEPATH から拡張子を含むファイル名を取得します。 FILENAME=${FILEPATH##*/} # FILEPATH からディレクトリ名を取得します。 DIRNAME=${FILEPATH%/*} このようにすることで、FILENAME 変数には拡張子を含むファイル名が、DIRNAME 変数にはファイル名を除いたディレクトリ名が格納されます。 ここで使用している ## や % といった記号は、変数の値を調整するオプションのようで、次の意味合

  • REPORTTIME for Bash

    iww
    iww 2012/08/16
    擬似トラップのDEBUGを利用しているのか。なるほどねぇ
  • /bin/sh と /bin/bash の違い - 双六工場日誌

    みなさん、shebang書いてますか! Shebangというのは、スクリプトの最初の一行目に書く、「#!/bin/sh」とか「#!/usr/bin/perl」とかそういうあれです。詳しくはWikipediaさん(シバン (Unix))に聞いてくださいまし。 Twitter見てると、「そもそもこれにshebangなんて名前がついてるの知らなかったよ」という発言も見る不憫な子ではあるのですが、そこに何が書いてあるかで実は動作が違うよってのが今日の題です。それで、はまっていたのを最近見て、まああまりここで引っかかる人はいないと思いつつ、この点を書いた情報を見ないのでまとめてみました。*1 今日取り上げるのは、bashがデフォルト設定になっているLinuxでの「#!/bin/sh」と「#!/bin/bash」のお話。確認はCentOS5, 6で行なっています。 さて、上記の環境の場合、「/bin

    /bin/sh と /bin/bash の違い - 双六工場日誌
    iww
    iww 2012/08/09
    debian系だと/bin/shがdashなのでさらに混乱する
  • 変数を使用する | UNIX & Linux コマンド・シェルスクリプト リファレンス

    → 他のプログラミング言語と同様に = を使用する。 シェルスクリプトでも C言語などと同様に = を使用することで変数に値を設定することができる。ただし、C言語とは違い = の前後にスペースがあってはいけない。 また、変数名の大文字と小文字は区別されるため変数 VAR と変数 var は別物として扱われる。さらにシェル変数に「型」は存在しないので、文字列や数値を区別なく設定できる。 ポイントをまとめると以下のとおりとなる。 = を使う 値の設定時は変数名の先頭に $ を付けない ($ は参照時のみ) = の前後にスペースを入れない (前後にスペースがあるとエラー) 型は存在しない (declare コマンドや typeset コマンドで似たようなことができるが推奨はしない) 変数名の大文字・小文字は区別される (VAR と var は別物) 特に「2」は初心者が犯しがちなミスなので注意す

    変数を使用する | UNIX & Linux コマンド・シェルスクリプト リファレンス
  • 【 set 】 シェルのオプションを設定する

    CTRLキーを押しながらDキーを押しても,シェルを終了しないように設定する。exitコマンドは利用できる

    【 set 】 シェルのオプションを設定する
  • noclobberによる上書き禁止 - Linux備忘録

    iww
    iww 2012/06/16
  • Bash scripting

    Bash スクリプトを書くための小技集です. 変数について 文字列のクオート 単語分割 代入 パイプ,サブプロセス テキスト処理 文字列の長さ 文字列の切り出し (substring) 文字列分割 大文字小文字変換 文字列が空か パターンマッチ(グロブ) パターンマッチ(正規表現) 単語単位でパターンマッチ 文字列削除 文字列置換 文字列置換 (正規表現) 数値演算 ファイルシステム 1行ごとに処理 文字列を置換して保存 コマンドが実行可能か ファイル名,拡張子 などを取得 コマンドライン引数 引数を処理する (getopts) 引数を処理する (getopt) プロセスプロセスの終了を監視する 参考 1. 変数について 1.1. 文字列のクオート # " foo=20\" # クオートしない文字列では " をエスケープ foo="20\"" # ダブルクオート中でも " をエスケープ f

  • bashによるシェルスクリプトの小技(2) - shibainu55日記

    前回(bashによるシェルスクリプトの小技(1))に引き続き、シェルによって自動的に値が設定される特殊な変数について紹介する。特殊な変数を参照することにより、様々な情報を取得することができる(ただし、これらの変数には自分で任意の値を設定することはできない)。 さて、まずは特殊変数を一覧でまとめてみる。お馴染みのものが多いが、最後の2つ(特に最後のPIPESTATUS)についてはきっと今まで知らなかった人もいるんじゃないだろうか。シェルの中でパイプすると途中のコマンドのリターンコード、拾えないとか思っていませんか?今回のポイントとしては、「1. PIPESTATUS変数について」と「2. 特殊変数 $@と$*の違いについて」の2点を主に説明する。 特殊変数一覧表 変数名 自動的に設定される値 $? 直前に実行されたコマンドの終了ステータスが設定される変数。正常終了の場合は「0」、異常終了の場

    bashによるシェルスクリプトの小技(2) - shibainu55日記
    iww
    iww 2012/05/24
    特殊変数一覧
  • 関数は共通部品になる

    プログラムを組んでいくと、なんども同じような処理を繰り返すことがあります。例えば、画面に決まったフォーマットで表示する、といった機能などです。こうしたよく使う機能を関数としてまとめることは、シェルスクリプトでも可能です。 ユーザー定義関数の使い方 今回は関数のお話をしましょう。シェルスクリプトでも関数が使えます。ところで「関数」とはなんでしょうか? 通常プログラムの世界で関数というと、ほかのプログラムから呼ばれる「共通部品」のことを指しますね。オブジェクト指向プログラミング(C++Javaなど)の普及で古い言葉になってしまいましたが、昔は「サブルーティン」などと呼んでいました。もちろん厳密な意味では少し違うところもありりますが。 ではシェルスクリプトの世界ではどうでしょう? ここでも関数は同じようにシェルスクリプトから呼ばれる共通部品のことです。シェルスクリプトから呼ばれるものというと?

    関数は共通部品になる
    iww
    iww 2012/04/29
    エイリアスの代わりに関数を使った方がとても便利 という話。 これでかゆいところに手が届くな
  • SQLite を Linux のコマンドラインで使う - Flaming Page

    仕事SQLite を久しぶりに使うことにしたので調べた。 あまり環境をいじりたくないサーバに新規にツールを作って乗せようとしたときに、DB があればうれしいなーと思ったら SQLite が入っていたので使うことにしたという経緯。 今回は sqlite プロンプトではなく Linux ターミナルのコマンドラインで使いたい。 mysql が -e コマンドで SQL を実行できるようなイメージね。 使うバージョン は3.3.6。 $ sqlite3 -version 3.3.6古いが気にしない。 で、こんなテーブルをこさえました。馬ですね。 CREATE TABLE horses ( id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL UNIQUE, birthday TEXT, description TEXT ); SQLite の場

    SQLite を Linux のコマンドラインで使う - Flaming Page
    iww
    iww 2012/04/24
    タブ文字を使うときは -separator $'\t'
  • bashヒストリのダイエット。bash履歴活用まとめ - それマグで!

    Bashのヒストリをダイエットしました。ダイエットして減った分、よりたくさんのコマンド履歴が確保出来ました。 履歴を確保するとタイプ量が減って仕事早くなるッス。 重複する履歴を保存しない 重複するコマンドは最新一件に限定する。重複は保存しない ~/.bashrc #重複履歴を無視 export HISTCONTROL=ignoredups Ubuntuなら最初から設定してあったように思える。 空白から始めたコマンドを保存しない 履歴に保存したくないコマンドは空白から記述する ~/.bashrc #空白から始めたコマンドを無視 export HISTCONTROL=ignorespace コマンド例 $ □cat /etc/passwd|grep takuya #↑空白入れることで保存されない。 空白を履歴に追記しない、重複履歴を保存しない ignorespaceとignoredupsを同時

    bashヒストリのダイエット。bash履歴活用まとめ - それマグで!
    iww
    iww 2012/04/20
    HISTCONTROL=ignoreboth
  • シェルスクリプトを書くときに気をつけていること(その1) - mikedaの日記

    初級者向けに『自分がシェルスクリプト書くときに気をつけていること』をまとめてみました。 @masudaKの『シェルスクリプトを書く際に気を付けていること8箇条』の乗っかりエントリです。 内容は重複しないように書いてますので合わせて読んでください! 基的にLinuxの/bin/sh、/bin/bashを想定しています。 テキスト処理は標準入力から受け取って標準出力に出す テキストを扱う小さなツールを作りましょう。 引数はオプション情報を渡すのに使います。 そうすればgrep、sort、uniqなどの便利なコマンドとパイプで連携できます。 grep ERROR /tmp/test.log | my_cmd1.sh 192.168.1.1 | sort 全てを実行する1つのスクリプトを作るのはたいへんだし、応用が効かないです。 人間に伝えたいメッセージは標準エラー出力に出す パイプでつないだ時

    シェルスクリプトを書くときに気をつけていること(その1) - mikedaの日記
  • コマンドラインでtabを入力する方法 - 色々メモにっき

    Ctr+v tab 偶然知った。便利ー。 Emacsでタブ入力はC+q tabでOK

    コマンドラインでtabを入力する方法 - 色々メモにっき
    iww
    iww 2012/03/29
    CTRL+V, Tab
  • 本を読む execによるリダイレクトで番号を自動で割り振る

    シェルスクリプトのリダイレクトでは、execを使うと一般的なプログラミング言語のopenみたいなことができます。 exec 5> out.txt こうしておいて、ファイルディスクリプターの5番にリダイレクトしてやれば、out.txtに出力されます。 ls >&5 クローズは“番号>&-”。 exec 5>&- ただ、これだと空いてるファイルディスクリプター番号を自分で管理しなくてはなりません。そこで、最近のbash(4.1以降)やzshでは、数字のかわりに変数を指定すると、自動で割り振ってくれます。 exec {fd}> out.txt こうするとファイルディスクリプター番号が自動で割り振られて、その番号が変数fdに入ります。あとは番号のかわりに変数を指定します。 ls >&$fd exec {fd}>&- …ただ、実際には多くの場合、execを使わなくてもコマンド群を{}や()で囲ってリ

  • ゆにっくさー(UNIXer)

    execに助けられる あるとき、遠く離れた場所に設置してあるSolarisサーバへtelnetでログインした。 スーパーユーザはtelnetでのログインを禁止していたので、一般ユーザにて。 ユーザ名、パスワードを入力した後、bashが起動するようになっているが、 ログイン後に次のようなメッセージが表示された。 Last login: Wed Dec 15 17:07:43 from 172.10.5.1 bash: fork: 資源が一時的に使用できません。 bash-2.05$ 資源不足?メモリもディスクもたっぷりあるはずなので、それはおかしいと思った。 とりあえず入力プロンプトは出ているので、何が起こっているのか調べようと思った。 bash-2.05$ top bash: fork: 資源が一時的に使用できません。 bash-2.05$ ps -efl bash: fork: 資源が一

  • bash でfor の範囲指定 - totonのブログ

    for a in $(seq 1 5) do echo $a done 上の例では$(seq 1 5)が展開されてシェルには1 2 3 4 5が渡される.したがって,シェルが受け取るのは二つ上の例と同じである.

    bash でfor の範囲指定 - totonのブログ
    iww
    iww 2012/03/01