#author("2018-09-24T08:31:54+09:00","","")
 小ネタをまとめてみた。

#contents

*jessieでsystemdを使わない(System-Vを使う) [#c0b225a5]
 apcupsdが、systemdと相性が悪いみたいなので、systemdをやめる。
-http://without-systemd.org/wiki/index.php/How_to_remove_systemd_from_a_Debian_jessie/sid_installation

*PerlでSQL Serverにつなぐ [#mddbd042]
 以下のようにパッケージを入れる。
 # apt-get install libdbi-perl libdbd-odbc-perl tdsodbc
 以下のファイルを変更する。
-/etc/odbcinst.ini
 [FreeTDS]
 Description = TDS driver
 Driver = /usr/lib/odbc/libtdsodbc.so
 Setup = /usr/lib/odbc/libtdsS.so
 FileUsage = 1
-/etc/odbc.ini
 [ODBC Data Sources]
 freetds = FreeTDS ODBC Driver
 
 [freetds]
 Driver = FreeTDS
 Description = Microsoft SQL Server
 Servername = mssql
 Database = <dbname>
-/etc/freetds/freetds.conf (追加部分)
 [mssql]
        host = <hostname>
        charset = utf-8
        client charset = utf-8
 接続確認。
 $ isql -v freetds <user> <passwd>

*XFSの便利なコマンド [#f487078a]
 XFSには、オンラインでデフラグする機能がある。ここでは、フラグメント状態の確認と、デフラグのコマンドを紹介する。
-フラグメント状態の確認(サイズによっては数分かかる)
 # xfs_db -c frag -r <XFSデバイス>
-デフラグ(デフォルトの2時間、次回継続可能)
 # xfs_fsr <XFSのマウントポイント>

*HDDを完全消去する [#cff9df56]
 shredコマンドを使用する。
 # shred -n 2 -v /dev/sdz
 "-n 2"で、ランダムな値を2回書き込む(デフォルトは25回)。"-z"で最後にゼロで埋める。"-v"で、進捗状況を表示する。

*仮想端末を使用する [#p63dd3ec]
 screenを使用して、同じ端末内で複数の仮想端末を切り替える。
 $ screen
 主なオプションは以下の通り。
|~オプション|~意味|
|<なし>|新しく仮想端末を起動する。|
|-ls|現在の仮想端末一覧を表示する。|
|-r [pid.tty.host]|デタッチされている仮想端末にアタッチする。|

 screen上での主な特殊コマンドは以下の通り。
|~コマンド|~意味|
|Ctrl+a d|現在の仮想端末をデタッチする|
|Ctrl+a S|端末を上下に分ける|
|Ctrl+a Tab|表示中の別の端末に移動|
|Ctrl+a c|新しい端末を作成|
|Ctrl+a n|次の端末に切り替える|
|Ctrl+a p|前の端末に切り替える|

*rrdtoolを日本語に対応させる [#sa9c8d19]
 rrdtoolで作成される画像に日本語を入れるには、以下のようにパッケージをインストールする。
 # apt-get install ttf-unifont
 その後、rrdtoolの ''GPRINT'' などに、日本語を UTF-8 で指定すれば日本語が表示される。~
 ちなみに、曜日や月を日本語で出力するには、環境変数 LANG に ''ja_JP.UTF-8'' を指定する。apacheで設定する場合、範囲を制限して''SetEnv LANG "ja_JP.UTF-8"''と指定すると良い。


*parted [#f4019a15]
 3TBのディスクを扱おうとすると、GPTが必要になる。fdiskではGPTに対応していないため、partedを使うことになる。~
 /dev/sdaをGPTにして、最大サイズのパーティションをRAID用領域として確保するには、以下のように行う。開始位置を1にしないと、「''Warning: The resulting partition is not properly aligned for best performance.''」と警告された。
 # parted /dev/sda
 (parted) mklabel gpt
 (parted) mkpart primary 1 -0
 (parted) set 1 raid on

-参考~
http://www.miraclelinux.com/technet/faq/data/00152.html

*HDDのセクタチェック [#ka3477d3]
 初めて使うHDDや、動作の怪しいHDDは、念のためチェックをしたい。ここでは、正常に読み書きできることの確認をする。この方法だと内容はすべて消える((-wをつけないか、-wの代わりに-nで保持される))。
 badblocks -b 4096 -ws /dev/sdz
 このテストでは、全セクタへの読み書きを4パターン行うので、とても時間がかかる。2TのHDDのチェックに、50時間程度かかった。
 このテストでは、全セクタへの読み書きを4パターン行うので、とても時間がかかる。~
 2Tのチェックに50時間程度、6T(WD6003FFBX)のチェックに74時間半程度かかった。

*表示内容を自動保存 [#n04fe659]
 セキュリティ的な意味もかねて、表示内容を自動保存する。~
 ただし、ユーザ権限で書き込む仕組み上、ユーザが消すことは可能なので、悪意のあるユーザに対しては無力となる。

 以下のファイルをログインシェルにする。
-/usr/local/sbin/script_tcsh.sh
 #!/bin/sh
 # 表示内容を全て記録する
 
 case `echo $0 | sed 's/^.\+_\(.\+\)\.sh$/\1/g'` in
     tcsh)
         SHELL=/bin/tcsh
         _SHELL_OPT=-l
     ;;
     bash)
         SHELL=/bin/bash
         _SHELL_OPT=--login
     ;;
     *)
         # 起動シェル不明
         SHELL=/bin/bash
         _SHELL_OPT=--login
     ;;
 esac
 
 /usr/bin/tty -s
 if [ $? != 0 ]; then
     exec $SHELL "$@"
     exit
 fi
 
 LOGDIR=$HOME/.consolelog/`date \+%Y`
 if [ ! -d $LOGDIR ]; then
     mkdir -p $LOGDIR
 fi
 
 echo '####### 表示されるすべての内容は記録されます。 #######'
 exec /usr/bin/script -aq -c "$SHELL $_SHELL_OPT" \
     $LOGDIR/`date \+%Y%m%d``tty|sed 's/\(dev\|\/\)//g'`

*sshdの設定 [#w5cfbde9]
 デフォルトでは、パスワードログインが可能になっていたり、rootでのログインが可能になっていたりするので、両方とも出来なくする(一般ユーザの鍵認証でのみログイン可能)。~
-/etc/ssh/sshd_config (更新)
 PermitRootLogin no
 PasswordAuthentication no
 UsePAM no

参考:~
http://tdg.uncure.net/blog/index.php?UID=1132579202

*GRUBの設定変更 [#g86d2d91]
 カーネルオプションを変えるときは /boot/grub/menu.lst を編集するが、カーネルバージョンアップなどで update-grub が実行されると、編集した部分は消えてデフォルトの設定となってしまう。これでは具合が悪いので、デフォルト値を変更することにする。~
 /boot/grub/menu.lst の52行目あたりから始まる「DO NOT UNCOMMENT THEM, 〜」以降にデフォルト値が書いてある。変更したい部分を、コメント状態のまま書き換える。~
 書き換えた後 update-grub を実行すると、反映されるのがわかる。~
 ~
参考:~
http://itmst.blog71.fc2.com/blog-entry-69.html

*ハードウェア環境の詳細取得 [#j5bad6b9]
 マザーボードの型番や、接続されている拡張カードの型番、メモリのクロック数など、これ以上ないと言うくらい詳細な情報がわかる。

-インストール
 # apt-get install dmidecode

-実行方法
 # dmidecode

*tcshで~/.historyの読み込みで落ちる場合の対処 [#i8b29757]
 デフォルトシェルとしてtcshを使っている場合、何かしらの原因で履歴に変な制御コードが入ったり、多バイト文字がある場合に、まれに~/.historyの読み込み時にセグメントエラーで落ちることがある。この状態になってしまうと、ログインできなくなってしまう。~
 物理的に離れた場所にマシンがあるなどの理由で、ネットワークからしかログインできない場合は、唯一のログイン方法がたたれてしまいどうしようもなくなる。~
 この問題を回避するためのよい方法を思いついたので、ここに述べる。

 まず、~/.historyがいつ読み込まれるのかに着目する。それには、各設定ファイルが読み込まれる順番を追っていく必要がある。tcshのmanによると、以下の順番で読み込まれるようだ。
+/etc/csh.cshrc
+/etc/csh.login
+&#x7e;/.tcshrc
+&#x7e;/.cshrc
+&#x7e;/.history
+&#x7e;/.login
+&#x7e;/.cshdirs

 このことから、~/.historyの読み込み前後にスクリプトを実行できることがわかる。~
 これを利用して、~/.historyの読み込み前に一時ファイルを作成し、~/.historyを読み込んだ後に一時ファイルを削除するようにしておけば、次回ログイン時に~/.historyの読み込みで失敗したことが検出できる。

 具体的には、以下のようなスクリプトを追加する。~
-~/.cshrc、または~/.tcshrcなど (追加)
 #履歴読み込み失敗対策
 if ( -f .failed_login && -f .history ) then
     set tmp_oldname=.history.`date +%Y%m%d%H%M`
     mv .history $tmp_oldname
     echo "## 前回のログインで.historyの読み込みに失敗したようです。"
     echo "## .historyを、${tmp_oldname}にリネームしました。"
     unset tmp_oldname
 endif
 if ( $?tcsh && $?prompt && ! $?GNOME_DESKTOP_SESSION_ID ) then
     touch .failed_login
 endif
-~/.login、または~/.cshdirs (追加)
 rm -f .failed_login

 [[自前パッケージ>Debian/自前パッケージ]]でtcsh自体に手を加える方法も紹介しているが、root権限を持っていなかったり、環境を変えたくないなど、バイナリを変更することが出来ない場合は、ここで紹介した方法でも永遠にログインできなくなることは防げる。

*標準出力とエラー出力をファイルに出力しつつ、エラー出力だけは標準出力にも出力 [#of45e5d2]
 cronで、コマンドの実行結果をすべてファイルにリダイレクトして、エラーがあるときは標準出力にも出してメールを飛ばしたいなどで使えそう。~
 sh系(bashなど)では、以下のようにする。
 $ command 2>&1 >> file.log | tee -a file.log
 これで、標準出力と標準エラーは"file.log"に出力され、標準エラーは標準出力にも出力される。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS