試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Ubuntu Gutsy(7.10)のuswsusp設定補助スクリプト作成中の覚え書き

幾つか、新しく知ったことやメモしておきたいことがあったので、ここに箇条書きにしておく。

  • Debianパッケージの設定ツールDebConfのインターフェースの設定は「debconf-show debconf」を実行して「frontend:」の値を確認する。
  • Debianパッケージがインストールされているかを確認するには「dpkg-query -W -f='${Status}\n' [パッケージ名]」を実行し、「install ok installed」になっているかを見る。
  • zenity --scale」の初期値は、100が上限?それよりも大きな値にしても「100」になってしまう
  • zenity --warning」は、以前は警告アイコンの質問だったのが、「OK」ボタンのみになっている(2.18系から変わったようだ)
  • どのスワップが現在使用されているのかを調べるには「swapon -s」を実行。「Type」の部分が「partition」のものがパーティションで、「file」のものがスワップファイル。
  • /etc/fstabに書かれているスワップを全て有効にするには「swapon -a」を実行。「mount -a」に似ている。管理者権限が必要。
  • 複数行の出力をするコマンドからその結果を受け取り、1行ずつ処理をするには「while read」の構文を使用する
  • sedコマンドを用いて、ある文字列を含む行を削除したい場合、「-e 's/[文字列を含むパターン・行末まで]$//' -e '/^$/d'」とすれば楽で、スクリプトでも使用しているが、全ての空行が消えてしまう。別の方法で、行の連結を使用した手法を使用することで、空行を消すことなく処理することも可能なようだ(関連URLを参照)。
  • cat <<EOF」などと書いた後、その「EOF」のみの行までを出力するヒアドキュメントという形を用いて、それ以下の内容をファイルに出力する場合、出力内容がシェルスクリプトだと、変数の「$」をバックスラッシュでエスケープしないと、実行しているほうのシェルスクリプトの変数とみなされて(置き換えられて)しまう。ダブルクォートで囲んだ文字列の中に変数を書いているのと同じ。*1

下は、「while read」の構文を用いて、dmesgの出力に行番号を付ける例。「done;」の部分を「done | less;」とするとlessで読める。

# (そのまま)
$ i=1; dmesg | while read x; do echo "${i}:\t${x}"; i=$(expr $i + 1); done; unset i
# (行番号のフォーマットで、無い桁を0で埋める場合の例)
$ i=1; dmesg | while read x; do echo "$(printf %03d ${i}):\t${x}"; i=$(expr $i + 1); done; unset i

参考URL:

*1:一方、シングルクォートでは、囲った内容がそのまま出力される。「echo "${USER}"」と「echo '${USER}'」の出力を比べると分かる