findコマンドの除外

いつもわからなくなってしまうのでメモ。

# find ./ -type f -print -or -path "/var/log" -prune
# find ./ -mtime 10 -print -or -name "*.tmp" -prune

除外条件を複数指定する場合はorでつなげる。

# find /var -type f -ls -or -path "/var/log" -prune -or -path "/var/crash" -prune -or -path "/var/tmp" -prune -or -name "www" -prune -or -path "/var/lib" -prune

findコマンドは除外のpruneにしてもmtimeの+-指定とかexecとか、とにかく書き方がスマートじゃないのがなぁ。便利なんだけども。

SSD導入検討する上でのメモ

  • Windowsでファイル参照すると、"atime"(最終アクセス時刻)属性が更新されるが、読み込むたびに更新が走るとSSDの寿命も縮めるわ、読み込みが重くなったりするわで、まったくもって幸せになれないので、以下のコマンドを実行することで、"atime"属性を更新させなくする。

fsutil behavior set disablelastaccess 1

  • 8.3 形式のファイル名の生成(PROGRA~1とか)を抑止するのは以下のコマンド

fsutil behavior set disable8dot3 1

  • PreFeche無効化

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnablePrefetcher
1: 有効
0: 無効

  • SuperFetch無効化

サービス "SuperFetch" を無効にする(Win7なら自動無効)

  • デフラグは3ヵ月に1回、断片化20%以上で実施(Win7なら自動無効)
  • Trimを発行してるか確認する

Windows7のcmdで以下を入力

fsutil behavior query DisableDeleteNotif
DisableDeleteNotify = 1: 無効
DisableDeleteNotify = 0: 発行してる

  • BIOSSATAのインターフェース設定は当然にAHCI
  • SSDのインデックス作成は無効化(HDDはお好きに)

ドライブのプロパティから、"Allow Indexing Service to index this disk for fast file searching"チェックを外す

hp-uxのログイン時のユーザ名・パスワード修正

hp-uxにログインする際、ユーザ名・パスワードを間違えた場合、バックスペースによる取り消しは出来ないが、代わりに"@"(アットマーク)を入力すると、それまでの入力が無視され、"@"以降の文字列が評価される。

  • ユーザ名: hogehoge
  • パスワード: fugafuga

login: hogr@hogehoge
Password: fua@fugafuga
Last successful login: Tue Aug 10 21:30:23 MDT 2010 pc1

なお、"@"は何度使っても良い(上限あるかも?)

login: 111@222@333@444@555@666@777@888@999@000@hogehoge
Password: fugafuga
Last successful login: Tue Aug 10 21:38:48 MDT 2010 pc1

他ユーザのレジストリを変更する

ユーザ固有のレジストリ情報は、[HKEY_CURRENT_USER]に保管されるが、これはあくまで現在ログインしているユーザのレジストリ情報なので、同一端末上の他ユーザ固有の情報を変更するためには、当該ユーザのハイブをロードする必要がある。

  1. regedt32を起動
  2. [HKEY_LOCAL_MACHINE]または[HKEY_USERS(HKU)]を選択
  3. ファイル⇒ハイブの読み込み
  4. ハイブファイルを指定(c:\Documents and Settings\%USERNAME%\NTUSER.dat など)
  5. ロード先サブキー名を指定。任意。(hive_ユーザ名 など)
  6. 編集、閲覧が終ったら、ロードしたサブキーに移動⇒ファイル⇒ハイブのアンロード(これ忘れがちなので注意)


以下のように、コマンドラインでも同様の作業が可能。大抵以下をバッチにして配るかも?

  1. reg load <トップレベル・キー名>\<ロード先サブ・キー名> <ハイブ・ファイル名>

例)reg load HKLM\hive_ユーザ名 "c:\Documents and Settings\ユーザ名\NTUSER.dat"

  1. reg unload <トップレベル・キー名>\<ロード先サブ・キー名>

例)reg unload HKLM\hive_ユーザ名

勿論レジストリを弄れる権限で実施のこと。世の情シス担当に救いあれ。

「クリップボードが空にできません」の対処

RDP接続でEXCEL等のOFFICE製品を使っていると、「クリップボードが空にできません」という非常にアレなメッセージが出ることがよくあります。これに関する対処法はネット上にたくさんあるのですが、あまり成功することが無く、OFFICE製品を一度全部落とすと直ったりします。RDPで「クリップボード共有しなければいいじゃない」というアントワネット的意見は無視するとして、どーにかならんものかなぁと思っていた所、まさにキタコレな解決策が見つかりました。以下手順(というほど難しくも無い)

  1. RDPクライアント(リモートコントロールしてるパソコン)で「クリップボードが空にできません」が出る
  2. RDPホスト(手元のパソコン)でEXCELとか起動する
  3. 編集→OFFICEクリップボード→すべてクリア
  4. RDPクライアントでコピペのテストをしてみる

今のところこれで回復しなかった経験は無いんですが、アラートの原因とか使用環境で異なってくると思うので、うまくいかなかったらgoogle航海に出てください…

シェルスクリプトでtelnet自動操作

telnetでログインして何か実行した結果をテキストに保存して情報収集したり、複数のサーバにログインして同じコマンドをひたすら入力したりするのはつらいものです。操作端末がWindowsTeratermが使える環境ならマクロでどうとでも出来るのですが、UNIXのコンソール環境でどうにかしなければいけなかったり、cronで裏で粛々と動いて欲しい時は困ってしまいます。
そんな事があってperlを頑張って勉強してNet::telnetとか使って無理矢理実現させていたんですが、某氏からこんなやり方を教えてもらい、あまりの簡単さにちびりそうになりました。というかちびりました。

telnet接続後の入力文字列をechoで羅列。タイミングはsleepで調整。
cmds.sh

#!/bin/sh
sleep 1; echo user-name
sleep 1; echo password
sleep 5; echo ls -al
sleep 1; echo exit

で、このスクリプトの後にパイプでtelnetを繋いで実行。(勿論これもスクリプトにしても問題ない)

sh ./cmds.sh | telnet 192.168.0.1 >> auto-telnet.log

これだけです…か簡単過ぎる…っ!!
小難しい事考えて頑張るのは実は簡単で、仕組みを知った上で柔軟に実現させる事が真に難しい。

ファイル名を指定して実行でコントロールパネルとかを表示

"Winキー+R"の「ファイル名を指定して実行」でメモ帳を"notepad"、電卓を"calc"、コマンドプロンプトを"cmd"、とだけ指定して実行するのは基本ですが、コントロールパネルとかも起動できるらしい。

  • control コントロールパネル
  • appwiz.cpl プログラムの追加と削除
  • hdwwiz.cpl ハードウェアの追加ウィザード
  • inetcpl.cpl インターネットオプション
  • ncpa.cpl ネットワーク接続
  • powercfg.cpl 電源オプション
  • winmsd システム情報
  • winver Windowsバージョン情報

ネットワーク接続とか、よく使うので便利そうなんですが、覚えられなそうだなぁ…