#freeze
●netcat
サーバ側
nc -l 9999(ポート番号)
や
nc -l -p 9999

クライアント側
nc hostA(サーバのホスト名やIPアドレス) 9999(ポート番号)
で双方向通信が可能

また
サーバ側
nc -l 9999(ポート番号) > ファイル名
や
nc -l -p 9999 > ファイル名

クライアント側
nc hostA(サーバのホスト名やIPアドレス) 9999(ポート番号) < ファイル名
でサーバ側にファイルの転送が可能
&br;

●デバイスに必要なドライバを調べる
lspci -nvでデバイス名とベンダIDとデバイスIDを調べる
/usr/share/hwdata/pcitable
もしくは
/lib/modules/[kernel-version]/modules.pcimap
でベンダIDとデバイスIDをキーにドライバを知ることができる
&br;

●rpmからファイルを取り出す
rpm2cpio rpmファイル名 | cpio -id ファイルのキーワード
&br;

●rpmでGPGキーがインポートされているかを確認する
rpm -qa "gpg-pubkey*"
&br;

●rpmのrequiresオプション
--requiresオプションはパッケージが必要とするパッケージ・ファイルを表示する
--whatrequiresオプションはパッケージが必要とされるパッケージ・ファイルを表示する
&br;

●ロケール変更
#cat /etc/sysconfig/i18n
LANG="ja_JP.eucJP" とか
LANG="ja_JP.UTF-8"
使用可能なロケールはlocale -aで確認
&br;

●viの文字コード
/etc/vimrcや~/.vimrcを以下のように設定する(デフォルトUTF-8の場合)
set encoding=utf-8
set fileencodings=iso-2022-jp,sjis,euc-jp
&br;

●vi技
開いているファイルの置換
:%s/置換対象文字列/置換する文字列/g
%は1行目から最終行までを表す.上記は以下と同じ
:1,$s/置換対象文字列/置換する文字列/g
&br;

●改行コードなど
WinはCRLF(0x0d0a)
LinuxはLF(0x0a)
dox2unixは改行コードのみ変換。文字コードは変換しない。
nkfはデフォルトの場合、文字コードのみ変換。
改行コード変換はオプションで指定可能。(詳細はmanで確認)
ex.改行コード変換ありでsjisからeuc変換
nkf -S -e -Lu -d ./hogehoge.txt.sjis >./hogehoge.txt.euc
&br;

●dos2unix
dox2unixは改行コードのみ変換。文字コードは変換しない。
\-nで新たなファイルに書き出すことが可能。
ex.
dos2unix -n infile.txt outfile.txt
&br;

●FTPのasciiモード
宛先サーバのシステムに応じて改行コードの変換を行う。
(改行コードのみ。文字コードは変換しない)
vsftpではデフォルトでアップロード、ダウンロードともascii転送は不可。
&br;

●FTP over HTTP
クライアント --(HTTP)-> Proxy --(FTP)-> サーバ
ProxyでHTTPリクエストをFTPコマンドに変換
&br;

●beep音を消す
/etc/inputrcや~/.inputrcに
set bell-style noneもしくはset bell-style visible
&br;

●initrdの内容を確認する
zcat initrd.img | cpio -id
とか
zcat initrd.img > ./ramdisk
cat ramdisk | cpio -id
&br;

●APIPA(169.254.0.0/16)を表示しない
/etc/sysconfig/network
NOZEROCONF=yes
&br;

●IPv6無効
/etc/modprobe.conf
alias net-pf-10 off
&br;

●sysrq
echo 1 > /proc/sys/kernel/sysrq
echo X > /proc/sysrq-trigger

※以下はsysrq.txtより抜粋
What are the 'command' keys?
'r'     - Turns off keyboard raw mode and sets it to XLATE.
'k'     - Secure Access Key (SAK) Kills all programs on the current virtual console.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOTE: See important comments below in SAK section.
'b'     - Will immediately reboot the system without syncing or unmounting your disks.
'c'     - Intentionally crash the system without syncing or unmounting your disks.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This is most useful if the NETDUMP client package
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and/or the DISKDUMP package have been installed.
'o'     - Will shut your system off (if configured and supported).
's'     - Will attempt to sync all mounted filesystems.
'u'     - Will attempt to remount all mounted filesystems read-only.
'p'     - Will dump the current registers and flags to your console.
't'     - Will dump a list of current tasks and their information to your console.
'm'     - Will dump current memory info to your console.
'v'     - Dumps Voyager SMP processor info to your console.
'0'-'9' - Sets the console log level, controlling which kernel messages
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;will be printed to your console. ('0', for example would make
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it so that only emergency messages like PANICs or OOPSes would
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make it to your console.)
'e'     - Send a SIGTERM to all processes, except for init.
'i'     - Send a SIGKILL to all processes, except for init.
'l'     - Send a SIGKILL to all processes, INCLUDING init. (Your system
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;will be non-functional after this.)
'h'     - Will display help ( actually any other key than those listed
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;above will display help. but 'h' is easy to remember :-)

●USBメモリからLinuxをブートする
mkbootdisk --size 10000(適当なサイズ) --device /dev/sda(USBメモリデバイス) `uname -r`
&br;

●USBメモリをブートデバイスにする
syslinux /dev/sda(USBメモリデバイス)
&br;

●MAIL
HELO 自ドメイン
MAIL FROM:<foo@hoge.co.jp>
RCPT TO:<boo@hoge.co.jp>
DATA
Subject:
From:
To:
(空行)
本文
.  <-ピリオド
&br;

●MAIL(ファイルの内容を送信する)
cat mail.txt
Subject: testmail
From: send@hoge.co.jp
To: recv@fuga.co.jp

test mail desu
hoge
fuga
&br;
cat mail.txt | /usr/lib/sendmail -v -f 'test <user01@send.net>' user02@recv.net
※sendmailで-tオプションを指定するとメール本文のTo:の内容宛にメールを送信する
&br;

●カーネルコンパイル
make mrproper
make oldconfigとか
make
make modules_install
make install
詳細はカーネルのREADME参照のこと
&br;

●
HDDは一番外側がMBR(らしい)
CD,DVDは逆(らしい)
&br;

●tag
ctagsパッケージ
ctags -R
Ctrl+] ->Jump
Ctrl+t ->return
&br;

●簡易な暗号化(符号化という言葉の方が近いな)
○暗号化
echo -n HOGE(暗号化したい文字列) | openssl enc -e -base64
○復号化
echo -n ****(上記コマンドで暗号化された文字列) | openssl enc -d -base64
&br;

●便利なsdiff
sdiff -s FILE1 FILE2
&br;

●ファイルディスクリプタ
1プロセス(1シェル)でオープンできるファイルのMAXはデフォルト1024
「ulimit -n」で確認。
/proc/sys/file-nrで一時的設定。
/etc/security/limits.confで恒久的設定。
「lsof」コマンドのFDのカラムで数字が表示されるのはファイルディスクリプタそのもの。
&br;

●php
php -m
phpにロードされているモジュールを表示

phpにモジュールを組み込んだ後は(必要に応じて)apacheを再起動

phpの設定をあるディレクトリ以下に限定したい場合(/etc/php.iniを書き換えたくない場合)は
.htaccessに以下のような記述をする
 <IfModule mod_php5.c>
 php_value 設定項目 設定値
 php_flag  設定項目(フラグ) ON or OFF
 </IfModule>
&br;

●メール送信スクリプト(PHP)
 <?php
 print <<< ENDDOC
 <HTML>
 <HEAD>
 <title>Mail Send Complete !!</title>
 </HEAD>
 <BODY>
 ENDDOC;
 
 $frname = "hoge";
 $fradrs = "hoge@testzone01.com";
 $toname = "root";
 $toadrs = "root@testzone01.com";
 
 $subject = "Test Mail from PHP\n";
 $comment = "Hello,\n";
 $comment .= "World\n";
 
 mb_language("ja");
 mb_internal_encoding("sjis");
 
 $frname0 = mb_encode_mimeheader($frname);
 $toname0 = mb_encode_mimeheader($toname);
 $sdmail0 = "$toname0 <$toadrs>";
 $mlhed = "From:\"$frname0\" <$fradrs>\r\n";
 $rslt = mb_send_mail($sdmail0,$subject,$comment,$mlhed);
 
 print "Mail Send Complete !!<br><br>\n";
 print "From: $frname<br>\n";
 print "From E-mail: $fradrs<br>\n";
 print "To: $toname<br>\n";
 print "To E-mail: $toadrs<br>\n";
 print "Title: $subject<br>\n";
 print "Comment: $comment<br>\n";
 print <<< END_DOC
 </BODY>
 </HTML>
 END_DOC
 ?>
&br;

●コマンドラインからのPHPの実行
こんな感じ
 php -r 'echo phpinfo();'
&br;

●ブート時にドライバをロードしない
/etc/modprobe.d/blacklist
にロードしたくないドライバを記述する。
&br;

●cron設定
ユーザ別のcron設定は
/var/spool/cron
に保存される。
&br;

●UTCとGMT
UTC(世界標準時、協定世界時)・・・原子時計を基にしている
GMT(グリニッジ標準時)・・・天体観測を基にしている
UTCとGMTでズレが生じるのでその差を埋めるためにUTCには余分な1秒を挿入する.
これが閏秒.
&br;

●暗号と認証
認証アルゴリズム(公開鍵暗号)
DSAは認証のみ
RSAは認証と暗号
暗号化アルゴリズム(共有鍵暗号)
3DES

認証と共有鍵送付には公開鍵暗号方式を使用し、
通信の暗号化には共有鍵暗号を使用するのが一般的
&br;

●0バイトファイルを作成(上書き)する
echo -n >> hoge.txt
上記でうまくいかない場合は
cat /dev/null >> hoge.txt
cp /dev/null hoge.txt
&br;
●yumのソース元をcdにする
/etc/yum.repo.d/のファイル内の以下を変更
baseurl=file:///media/~
repodataディレクトリがあるディレクトリを指定する
&br;
●他プロセスと共有しているメモリ量を表示
cat /proc/XXX/statm
の3フィールド目の×4k
&br;
●fedora
最近のfedoraはネットワークをNetworkManagerで制御しているらしいが
挙動が怪しい。
NetworkManagerをchkconfig offしてnetworkをchkconfig onしたほうがよいかも
&br;

●boot時のディスクwrite throughメッセージについて
http://japan.zdnet.com/reference/devicedriver/story/0,3800080416,20365859,00.htm
&br;

●kdumpの設定(CentOS5)
kdumpはkernel panic時に予めロードしておいたセカンドカーネル(ダンプ取得用カーネル)が
起動され、セカンドカーネルを使用してダンプを取得する。
(上記の言い方は正確に言うと正しくない?
どうやらダンプ取得時に使用するカーネルは通常使用時と同一で
initrdが異なり、initrd内のinitで/dev/vmcoreをcpしてダンプとするようである)
http://www.valinux.co.jp/contents/tech/techlib/eos/dump/dump_002.html
以下はローカルに対してcoreを出力する場合
(その他リモートマシンなどに出力することも可能)
kexec-toolsパッケージインストール

grub.confを変更
kernel /boot/vmlinuz-2.6.18-128.1.6.el5 ro root=LABEL=/1 &color(Red){crashkernel=128M@16M}; rhgb quiet

設定ファイル変更(/var/crashに出力であれば変更しなくてもよい)
/etc/kdump.conf
/etc/sysconfig/kdump

# chkconfig kdump on

再起動
# shutdown -r 0
※再起動中のkdump起動時に/bootにダンプカーネル用のinitrdが作成される
  作成するのは/etc/init.d/kdumpからコールされるmkdumprd

確認
# cat /proc/iomem
(略)
  01000000-08ffffff : Crash kernel
(略)

# cat /sys/kernel/kexec_crash_loaded
で「1」が表示されればロードされている

# echo 1 > /proc/sys/kernel/sysrq
# echo c > /proc/sysrq-trigger


●ディスクの不良ブロック検査
badblocksコマンドを使用する(-svnを選択するのが良いだろう)
・非破壊(read-only)
# badblocks -sv -o /root/bad.txt /dev/sdX
・非破壊(read-write)
# badblocks -svn -o /root/bad.txt /dev/sdX
・破壊
# badblocks -svw -o /root/bad.txt /dev/sdX

e2fsckコマンド
# e2fsck -cf /dev/sdX
&br;
●ファイルを圧縮しながら転送し、転送先で解凍
tar cf - /home/hoge |gzip -9 |ssh user@example.com "tar xzvf - -C /home
とか?
gzip -9は圧縮率
&br;

●sar
sar -A -f /var/log/sa/saXX
※XXは日付。-Aだとすべてが出力される。
一部だけ出力したい場合はmanでオプション調べて。
&br;

●LVM
○作成
fdiskでパーティション確保
(パーティションIDは8e)
念のため、reboot
pvcreate /dev/sdaX
pvdisplay
vgcreate -s 32M VGNAME /dev/sdaX
(エクステントのサイズを32Mにすることにより最大LVサイズが2Tになる)
vgdisplay
lvcreate -L 20G -n LVNAME VGNAME
lvdisplay
mkfs -t ext4 /dev/VGNAME/LVNAME

blkid /dev/VGNAME/LVNAME
でUUIDを確認し、
UUID="UUID" MOUNTPOINT ext4 default 1 1
とかfstabに書く&br;

○拡張
lvextend -L+99G /dev/VGNAME/LVNAME
resize2fs /dev/mapper/VGNAME-LVNAME(※)
※dfで表示されたもの

○その他コマンド
pvs
vgs
lvs
それぞれstatusを表示

○追加
&br;
●static route(静的ルート)の設定
/etc/sysconfig/network-scripts/route-ethX

192.168.1.0/24 via 172.16.1.255 dev eth0
192.168.2.0/24 via 172.16.2.255 dev eth0
とか
&br;
●historyについて
bashなどのhistoryは.bash_historyのようなファイルに保存されたものと
カレントのものの2つがある。
「history -d XXX」で該当エントリを削除できるが
それはカレントのもの(ログインしてからログアウトするまでのもの)に限られる。
カレントでないもの(前回のログアウトまでのもの)については
ログアウトすると復活してしまう。
上記現象を回避するには「history -d XXX」したあとに「history -w」すればよい
&br;
●特定のディレクトリを除外して、ファイルをコピーする
コピー元:/home/hoge/srcdir
コピー先:/home/hoge/destdir
除外ディレクトリ:/home/hoge/srcdir/except

$ cd /home/hoge/srcdir
$ find . ! \( type -d -path "./except" -prune -a -type d \) | xargs cp -p --parents --target-directory=/home/hoge/destdir