ウェブインコ

インコの技術メモ

Linux

■ありがちな設定
find /home/hoge/ -type d -exec chmod 777 {} \;
find /home/hoge/ -type f -exec chmod 666 {} \;
find /home/hoge/ -name '*.cgi' -exec chmod 755 {} \;

■改行コードを無視してdiffる
diff --strip-trailing-cr ファイル1 ファイル2
diff -r --strip-trailing-cr ディレクトリ1 ディレクトリ2
diff -qr --strip-trailing-cr ディレクトリ1 ディレクトリ2(ファイル名だけ知りたいとき)

■CentOSのバージョン確認
cat /etc/redhat-release
cat /etc/issue

■32bitか64bitか確認
arch

■shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
cd で移動したあとにそのディレクトリを消し、そこでそのままアパッチ再起動とかしたらこのエラーが出ます。

■少しでもブラウジングを早く
httpd.conf で以下が止まっているので解放
LoadModule filter_module modules/mod_filter.so

.htaccess や httpd.conf 等に以下を記述。

# キャッシュ
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/png "access plus 1 months"
ExpiresByType image/jpeg "access plus 1 months"
ExpiresByType image/gif "access plus 1 months"
ExpiresByType text/css "access plus 1 months"
ExpiresDefault "access plus 1 days"
</IfModule>

# 圧縮送信
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
FilterDeclare Compression CONTENT_SET
FilterProvider Compression DEFLATE Content-Type $text/plain
FilterProvider Compression DEFLATE Content-Type $text/css
FilterProvider Compression DEFLATE Content-Type $application/xhtml
FilterProvider Compression DEFLATE Content-Type $application/xml
FilterProvider Compression DEFLATE Content-Type $application/xhtml+xml
FilterProvider Compression DEFLATE Content-Type $application/rss+xml
FilterProvider Compression DEFLATE Content-Type $application/atom+xml
FilterProvider Compression DEFLATE Content-Type $application/x-javascript
FilterProvider Compression DEFLATE Content-Type $image/svg+xml
FilterChain Compression
# Don't append Vary heder for specific files
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|zip|lzh|exe)$ dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
Header append Vary Accept-Encoding env=!dont-vary

■vsfpt ffftpで繋がらない
サーバー内のコマンドラインでは繋がる。

/etc/sysconfig/iptables
で以下のチェックを外す。そう言えば構築時に禁止してた。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

/etc/init.d/iptables restart

■テスト環境のssh設定まとめ
◆Windows
PuTTYgen
Generateクリック
 画面上でマウスをぐりぐり動かすが良いです。
 パスワードを入力します。
Save private keyクリック
 ファイル名は何でも良い、ここでは hogehoge.ppk とします。
  保存した hogehoge.ppk を以下で指定します。
  PuTTy→接続→SSH→認証→認証のためのプライベートキーファイル
  WinSCP→セッション→秘密鍵

画面上部の Public key oasting ? の欄内をコピペ。※

◆Linux
cd /etc/ssh/
cp sshd_config sshd_config_20120204
vi /etc/ssh/sshd_config
 # パスワード禁止
 PasswordAuthentication no
 # rootログイン禁止
 PermitRootLogin no
/etc/init.d/sshd restart

/root/.ssh/authorized_keys が無ければ作っておきます。
パーミッションは600
chmod 600 authorized_keys

■ディレクトリまるごと差分
diff -r /home/aaa /home/bbb

■お名前.comのVPSでyum
最初はyumが使えない。
コントロールパネルからバージョンアップをしない(上級)にすると使えるようになる。
ただし、コントロールパネルからのバージョンアップの保障外になる。←あてにならないから要らん。

■updatedb locate ができない。
yum -y install mlocate

■ユーザー追加が出来ない
用意されたサーバーでありましたが、パスが通ってない。
rootのディレクトリで実行。
su - root
useradd hogeuser
又は対話式
adduser hogeuser
passwd パスワード

■パスワードの設定
スパーユーザーから
# passwd hoge
自分の
$ passwd

■ユーザーの確認
cat /etc/passwd

■ユーザーの削除
userdel hoge
userdel -r hoge ←ディレクトリごと消す時
(ディレクトリを作らないでユーザー作成 useradd -M picture)

■特定のディレクトリ以外を全部圧縮
/home/hoge/の下をすべて圧縮したいが、/home/hoge/logsと/home/hoge/tmpはいらない。
$ tar cfvz hoge.tar.gz `ls -1d /home/hoge/* | egrep -v '/hoge/fff/(logs|tmp)'`

■ディレクトリだけコピー
find . -type d | cpio -pdlm hoge_dir

■最近更新したファイル
10分以内
find ./ -mmin -10 -print
10日以内
find ./ -mtime -10 -print

■viの使い方
◆開く
vi ファイル名
◆閉じる
Esc→:q!
◆保存して閉じる
Esc→:wq
◆編集モードに
aとかiとか
◆移動
1G 文頭へ
G 文末へ
nnG nn行目へ
◆行番号表示
:set number
◆一行削除
dd
◆検索
/正規表現 前方検索
?正規表現 後方検索
n 次の候補
N 前の候補
◆置き換え
:s/old/new/g

■かんたん接続コマンドの作り方
以下のようなファイルを作ってから、.bashrcにエイリアスを張ります。
管理者専用の内緒コマンドってことで。
例)
/root/hoge/fuga
#!/usr/bin/expect
set timeout 5 #5秒だけ待って次へ進む
spawn ssh user@999.999.999.999 #ユーザー@ipアドレス
expect "password:" # 左記の文字列を含むメッセージがサーバーから返ってきたら
send "xxxxxxxx\r" # 左記を送信。\rとか\nで送信
expect "XXXXXX"
send "sudo su -\r"
expect "Password"
send "xxxxxxxx\r"
interact

/root/.bashrc
に以下を追加
alias hogefuga='/root/hoge/fuga'

■他のパソコンで使っていたハードディスクをマウントする。
Linuxが2台あって、片方が潰れたのでメモリとハードディスクを1台に集約する。
1)
だいたいは同じボリュームグループ名が同じになってしまっているので、
マウントするほうのHDDだけつないで、CDからLinuxを起動します。
今回はクノーピクスを使いました。
2)
pvscan
PV /dev/hdb2 VG VolGroup00 lvm2 [19.88 GB / 0 free]
?
3)No entry for device-mapper ?とかのエラーが出るので、先にこれを読んでおきます。
sudo modprobe dm-mod
4)
普通にインストールしているとみんなVolGroup00という名前なので変更します。
名前変更の前後には無効化有効化。
sudo lvm vgchange -an VolGroup00
sudo lvm vgrename VolGroup00 VolNewGroup00
sudo lvm vgchange -ay VolNewGroup00
4)
電源を切って、マスターとスレイブにHDDを繋ぎます。
5)
# pvscan
PV /dev/hdb2 VG VolNewGroup00 lvm2 [148.94 GB / 0 free]
PV /dev/hda2 VG VolGroup00 lvm2 [148.94 GB / 0 free]
Total: 2 [297.88 GB] / in use: 2 [297.88 GB] / in no VG: 0 [0 ]
こんな感じで見えたらOKです。
6)
# lvchange --available y /dev/VolNewGroup00/LogVol00 /dev/VolNewGroup00/LogVol01
7)
# mount /dev/mapper/VolNewGroup00-LogVol00 /mnt
これで /mnt 以下にマウントされたデーターが来ます。
8)
いらなくなった以下。
# umount /mnt
# lvchange --available n /dev/VolNewGroup00/LogVol00 /dev/VolNewGroup00/LogVol01
9)
メモリは抜いて挿すだけ。
freeで確認。

■メモリキャッシュ開放
freeで見たらほとんどusedでps auxで確認してもたいしたプログラムが動いていない。
ので、メモリキャッシュ開放。1:ページキャッシュ解放、2:ダーティキャッシュ、inode解放、3:ページキャッシュとダーティキャッシュ、inode解放
echo 3 > /proc/sys/vm/drop_caches

■CentOSでifconfig
rootにならないとできません。
su -
パスワード
或いは
sudo su -
パスワード
してからifconfig

■IPを調べる
dig ドメイン名

■逆引き
dig -x IPアドレス

■解凍の方法
tar xzf 圧縮ファイル名.tgz .tar.gz

■圧縮の方法
tar czf hoge.tgz hoge
左圧縮後ファイル名 右圧縮されるファイル

■tarのオプション
c 統合ファイルを作成する。
t 集録ファイルを表示する。
x 統合ファイルを分解する。
z gzip で圧縮/解除する。 (*.tar.gz)
j bzip2 で圧縮/解除する。 (*.tar.bz2)
Z compress で圧縮/解除する。 (*.tar.Z)
v 進捗を表示する。
f 統合ファイル名を指定する

■ディスク使用量
df -a -h

■ディレクトリの総容量
総容量のみ表示
du -h -s dir_name

■サブディレクトリ毎の容量
du -h dir_name

■ファイルに書き込む
なにかしらの出力 > ファイル名   ← ファイルに書くだけ。
なにかしらの出力 | tee ファイル名 ← 目視してかつファイルに書く。
例)
topの内容をファイルに出力。
top -b -n1 > hoge.log
サーバーの状況を監視しながらファイルに出力。(1秒毎に10回)。
vmstat 1 10 | tee hage.log

■文字コード変換
nkf -w --overwrite ファイル名
-w utf8へ
-j JISコードへ
-e EUCコードへ
一括
for f in `find /home/hoge/ -name \*.php`;do echo $f;nkf -w --overwrite $f;done

■文字コード確認
nkf -g ファイル名

■FTPサーバー構築
ローカルのLinuxに他のPCから繋ぐ為に作った例。
以下ググった情報から抜粋と覚書。
yum -y install vsftpd
vi /etc/vsftpd/vsftpd.conf

ここから??????????????????????????????
anonymous_enable=NO ← anonymousユーザ(匿名ユーザ)のログイン禁止
local_enable=YES ← ローカルユーザのアクセス許可
write_enable=YES ← 行頭の#を削除してコメント解除(書き込みを許可)
xferlog_enable=YES ← /var/log/vsftpd.logに接続・転送を記録(1/3)
xferlog_file=/var/log/vsftpd.log ← /var/log/vsftpd.logに接続・転送を記録(2/3)
xferlog_std_format=NO ← /var/log/vsftpd.logに接続・転送を記録(3/3)
ascii_upload_enable=YES ← アスキーモードでのアップロードを許可
ascii_download_enable=YES ← アスキーモードでのダウンロードを許可
ftpd_banner=Welcome to blah FTP service. ← FTPログイン時にソフト名とバージョンが表示されないようにする
chroot_local_user=YES ← デフォルトでホームディレクトリより上層へのアクセスを禁止する
chroot_list_enable=YES ← ホームディレクトリより上層へのアクセスを許可するユーザのリストの有効化
chroot_list_file=/etc/vsftpd/chroot_list ← ホームディレクトリより上層へのアクセスを許可するユーザのリスト
use_localtime=YES ← タイムスタンプ時間を日本時間にする
ここまで??????????????????????????????
touch /etc/vsftpd/chroot_list
echo fedora >> /etc/vsftpd/chroot_list
mkdir /etc/skel/etc
cp /etc/localtime /etc/skel/etc/
他のパソコンからユーザーhogeで設定する例。
adduser hoge ← ?
passwd hoge
パスワード2回入力 ← ?
/home/の下にhogeディレクトリが出来ているのを確認。
FTPソフトにはサーバーネーム(或いはIP)と上記?ユーザー、?パスワードを設定して接続。

■強制終了
# ps aux | grep p
?
26 19456 0.0 0.0 20044 2028 ? S 2009 0:00 /usr/bin/postmaster -D /var/lib/pgsql/data
26 19459 0.0 0.0 10844 492 ? S 2009 0:00 postgres: stats buffer process
26 19460 0.0 0.0 10276 1428 ? S 2009 0:00 postgres: stats collector process
# kill 19456

■念のためポートも閉じておこう
テスト環境からうっかりメールを送信しないように。
↓無ければインストール
yum install nmap
↓以下手順
nmap localhost -p 1-65535
Starting Nmap 5.00 ( http://nmap.org ) at 2010-01-10 19:04 JST
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 65528 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
631/tcp open ipp
5432/tcp open postgresql
40949/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 3.41 seconds
smtpが開いていたので
lsof -i:25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sendmail 1833 root 4u IPv4 6956 0t0 TCP localhost.localdomain:smtp (LISTEN)
kill 1833
nmap localhost -p 1-65535
Starting Nmap 5.00 ( http://nmap.org ) at 2010-01-10 19:09 JST
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 65529 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
631/tcp open ipp
5432/tcp open postgresql
40949/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 3.39 seconds
消えました。

■UbuntuのSamba
Windowsから
フォルダを開こうとすると、「アクセスできません。パラメーターが間違っています。」。
フォルダのプロパティを開こうとすると、「サーバーはリモート要求を受け付けません。」。

Linuxで設定
システム→システム管理→ネットワークの「全般」タブの「ホスト名」を短くする。

■ホスト名を調べる
hostname -f

■Linux マシンの基本調査
ソフト dpkg -l 又は rpm -qa
マシン dmidecode
IP ifconfig
メモリ free
HD df

■インストールアップデートのコマンド
ためしてみよう。
yum
aptitude
apt-get
up2date
rpm

■make が使えない
Debian で使えないときがあった。
aptitude kernel-package で使えるようになった。

■ログフォーマット
例えば以下のように設定して
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i %{X-Up-Subno}i\" \"%{cookie}i\" \"%{Set-cookie}o\"" masulog
ログの吐き出し先をこうしたら
ErrorLog /home/mobaserv.jp/logs/error_log
CustomLog /home/mobaserv.jp/logs/access_log combined
CustomLog /home/mobaserv.jp/logs/masulog/access_log masulog
アクセスログは2種類吐き出されることになります。

■ubuntuでsuを有効に
/etc/shadow にrootのパスワードを書き込む。ただしGUIにはこれでもrootで入れない。

■他所のサーバーでsshの設定しているファイルの在り処が分からんかった。
# /usr/local/apache2/bin/httpd -S送信
VirtualHost configration:?
/etc/httpd/conf.d/ssl.conf にあった。
/usr/local/apache2/bin/httpd -l とか /usr/local/apache2/bin/httpd -L も知っておくと便利。

■パスワードが分からないのでシングルモードで起動
1) 起動時にタイトルが出たら矢印キーを押す
2) カーネルを選んでe
3) ro root=?などと書いているものを選んでe
4) 一番おしりに single と書き足してenter
5) キーボードの b
6) しばらくするとコマンドラインが使えるようになるので
 # passwd
 Changing password for user root.
 New UNIX password
 とか2回効いてくるのでパスワードを2回入力する。
7) # reboot 再起動
8) ↑で設定したrootとパスワードでログイン

■mod_rewriteが無かった
.htaccess に RewriteEngine On
って書いたら
Invalid command 'RewriteEngine', perhaps mis-spelled or defined by a module not included in the server configuration
って言われた。
このサーバーにはmod_rewriteの設定をしていない。
というか、モジュールmod_rewrite.soが無い。
updatedb
locate mod_rewrite
で、/usr/local/httpd-2.2.6/modules/mappersに以下を発見
mod_rewrite.c
mod_rewrite.h
これらを適当な場所にコピー
cp -ip /usr/local/httpd-2.2.6/modules/mappers/mod_rewrite.c /tmp/
cp -ip /usr/local/httpd-2.2.6/modules/mappers/mod_rewrite.h /tmp/
cd /tmp/
ls
mod_rewrite.c mod_rewrite.h
コンパイル
/usr/local/apache2.0/bin/apxs -c mod_rewrite.c
ls
mod_rewrite.c mod_rewrite.h mod_rewrite.la mod_rewrite.lo mod_rewrite.o mod_rewrite.slo
apacheへインストール
/usr/local/apache2.0/bin/apxs -i -a -n rewrite mod_rewrite.la
updatedb
locate mod_rewrite
で、/usr/local/apache2/modules/mod_rewrite.so を発見。
httpd.confに以下を書き足す。
LoadModule rewrite_module modules/mod_rewrite.so
と思ったら書いてある。
アパッチ再起動して終わり。
/etc/init.d/httpd restart

■アパッチ再起動のテスト
/etc/init.d/httpd configtest

■アパッチ再起動せずに設定を反映
/etc/init.d/httpd graceful

■一括削除
find /home/testdir/ -name '*svn*' -exec rm {} -r \;

■一括削除(確認有り)
find /home/testdir/ -name '*svn*' -ok rm {} -r \;

■一括パーミッション変更
find /home/testdir/ -name '*.cgi' -exec chmod 755 {} \;

■ブラウジング出来ないのでサーバーを調べる
・ハードディスクの使用状況を調べる → df
・メモリの使用状況を調べる → free
・プロセスの動作状況 → ps aux
・CPUの使用率等 → top
・システムの平均負荷 → uptime の load average(参考
・DOS攻撃 → netstat -at
・whois IPアドレスやドメイン
・cat /proc/cpuinfo → cpu情報などの確認
・hostname → ホストネーム(FQDN)の表示

■過去にダウンした例
df → アクセス解析用のログデーターがMySQLに溜まりに溜まってディスク容量0になってました。データーの整理とシステムの改善。
netstat -at → 中国の特定IPからのアクセスが大量に。ルーターで遮断。

■可能な限りディレクトリとか属性とかもそのままでコピー
cp -a -r コピー元 コピー先

■ディレクトリの容量
du ディレクトリ名

■ディレクトリ内のファイル全てに対して文字置換え
以下のファイルを作る
change.sh
----------------------------------------
#!/bin/bash
for f in `grep '2008' /var/www/html/ -rls`
do
echo $f
/usr/bin/perl -i -pe 's{2008}{2009}gxo' $f;
done
----------------------------------------
実行する
sh change.sh

■バーチャルホストのhttpd.confの設定
httpd.conf
VirtualHost localhost:80 overlaps with VirtualHost localhost2:80, the first has precedence, perhaps you need a NameVirtualHost directive とか

httpd.confのここを書く
#NameVirtualHost *:80
NameVirtualHost 219.118.164.158:80

■ネットワーク関係の生きてるプロセスとか
netstat -lp (サービス名)
netstat -ln (ポート番号)
netstat -a (全部)

■サイトをダウンロード
wget http://webinko.com/index.html ファイル1個
wget -r http://webinko.com/ サイト全部
wget -l 3 http://webinko.com/ URLを起点としてリンク先を3階層たどる
http://tech.bayashi.net/svr/doc/wget.html

■裏で実行させる
最後に&をつける。
ex.
perl -e 'while(1){}' &
こうすることによって、ps で実行状態が見れる。

■強制終了。
こんなかんじ。
# perl -e 'while(1){}' &
# ps
PID TTY TIME CMD
6322 pts/1 00:00:00 bash
6339 pts/1 00:00:02 perl
6340 pts/1 00:00:00 ps
# kill 6339

■perlのモジュールのバージョン
perldoc -m CGI::Session

■時間を合わせる
date
ntpdate clock.nc.fukuoka-u.ac.jp
hwclock --systohc

date --set="2011/1/15"

/usr/sbin/ntpdate ntp.jst.mfeed.ad.jp

■新しいサーバーにkeyを移した&サーバー名が同じもの 旧yellow → 新yellow
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
みたいなエラーが出るので、ローカルのキーを消す。
rm .ssh/known_hosts

■edの使い方
ed ed起動
a 入力モードに変更
. 入力モード終了
w filename.txt filename.txtで保存
q 終了

■ホスト間によるコピー
scp filename.tgz 999.999.999.999:/home/webinko/

■負荷テスト
/usr/local/apache2/bin/ab -n 10000 -c 100 'http://mobacam.jp/cgi-bin/diagnosis/diagnosis.cgi?rm=result&flash=on&flval=1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,m,0_29'
100台のマシンで10000アクセスしたシミュレーション。

■masu_linuxでmobacamのインストール
eclipse の 場所。チーム→アップロード
/usr/local/eclipse/eclipse
ワークスペース
/root/workspace/mobacam

■GETとか
cpan の LWP::Simple をインストールする。
get http://webinko.com/ → HTML情報
head http://webinko.com/ → ヘッダー情報
或いは
perl -MLWP::Simple -e "print get \"http://webinko.com/\""

■新しいコマンドを作る例
1) hogefile にプログラムを書く。
2) chmod +x hogefile
3) cp hogefile /usr/local/bin/ とか cp hogefile /usr/bin/

■コマンドの有りか
which ファイル名(コマンド)
cp とか rm でオプションつけてないのに(yes/no)?聞いてくるのも、これでaliasが表示されるので分かります。

■yumでのインストール -y
yum -y install php-dg

* y は[y/N]をすべて y と入力しつつ進みます。


■ベーシック認証をURLに書く
http://user:password@www.sitreurl.com/

■ベーシック認証もしくはIP認証のどちらかが通ればOK
.htaccessの書き方
AuthUserFile /home/mobalog/public_html/graphdata/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
Satisfy any
order deny,allow
allow from 192.168.1.24
allow from 192.168.1.255
allow from 192.168.1.13
deny from all

■オリジナルの命令を作成(永久保存)
cd /root/
vi .bashrc
a
alias blue='ssh blue' などと任意の命令を追加
 :wq
再接続する。
※ ssh blue; cd /home/ といったような cd の使い方はできない。

■オリジナルの命令を作成(その場限り)
alias blue='cd ; pwd' (追加)
unalias blue (削除)
alias (確認)

■一般的なソースインストール方法
tar zxf MailTools-1.67.tar.gz
cd MailTools-67
perl Makefile.PL
make
make test
make install

■sslの設定
gajdの場合(2007.7.20)
キーなどの置き場
/etc/httpd/conf/ssl.crt/gajd20070717.crt ←メールで送られてくる
/etc/httpd/conf/ssl.crt/verisign.ca.crt ←サイトで公開されている
/etc/httpd/conf/ssl.key/gajd20070717.key ←自分で作る
指定しているファイル
/etc/httpd/conf/vconf_asp.conf の一番後ろ
# SSL
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFile /etc/httpd/conf/ssl.crt/gajd20070717.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/gajd20070717.key
SSLCACertificateFile /etc/httpd/conf/ssl.crt/verisign.ca.crt
アパッチの再起動ごとにパスフレーズを聞かれるので聞かれないようにする方法
# cat gajd20070717.key | openssl rsa > gajd20070717N.key
mohemohe
# mv gajd20070717.key gajd20070717.key.org
# mv gajd20070717N.key gajd20070717.key
詳しくはwikiで。

■httpアクセス
perl agentget.pl KDDI http://reve21.jp/xh/campaign_hatsumo0706.html

■ディレクトリごとコピー
cp -r motodata motodata_20070627

■強制終了
プロセス番号確認
ps aux
任意のプロセス番号確認(namedの場合)
ps aux|grep named
強制終了
kill 470(↑で確認した番号)
これでだめなら
kill -9 470

■grepの使い方

* 例えば /tmp 以下にあるたくさんのファイルの中から "Linux" という文字を含むファイルを見つけ出したいとき

grep "Linux" /tmp/*
これで結果がずらずらと出てきます。
でもこれだと"linux"を含む文字列全てが対象となってしまいます。

* 単語の完全一致で検索したいときは

grep -w "Linux" /tmp/*
で検索します。

* 大文字と小文字の区別をなくしたいときは

grep -i "Linux" /tmp/*
で検索できます。

* サブディレクトリ以下も再帰的に検索したい場合

grep -r "Linux" /tmp/*

* サブディレクトリ以下も再帰的に検索したい場合&拡張子指定

grep "hoge" $(find /home/hoge/public_html/ -name '*.php')

* いらないものをはじく時は -v (まっちしなかったものを表示)
* ファイルだけをだすときは ls
* パイプ |

出力結果をもとにします。
grep -rls "Light" /home/hoge/public_html/ | grep -v css | grep -v js
最初の検索ででたファイルリストのなかから css を含まないものを表示したもののなかから js を含まないものを表示
行数とか | wc -l で
grep "Oct/2007" access_log | grep -v "/images/" | wc -l

良く使う感じ。ディレクトリ以下の差分で画像等を除くファイル
複数条件で要らないものを除く
diff -qr /home/com.webinko.www /tmp/com.webinko.www |egrep -v 'png|jpg|gif|log|htaccess|htpasswd'

■ackの使い方
grep のPerl版です。非常に見やすい。
インストール
# cpan
cpan> install App::Ack
cpan> exit
普通に検索(絶対パス指定で再帰的に)
ack -w "hoge" /home/hoge/lib
前後3行も表示
$ ack -C3 -w "hoge"
ファイルだけ一覧
$ ack -l "hoge"
条件とマッチしない
$ ack -L "hoge"

■CPANのインストールでのエラー
例えばGDは、Cで組まれたプログラムなので、それをperlで利用するCPANモジュールをインス
トールするときにはそもそもGDが入ってないと話になりません。
またGDのバージョンが古くてCPANが対応できない時にもエラーがでます。
CPANのインストールでつまずいたらそれに関わるlinuxのプログラムのインストールから
やる必要があります。
ImageMagicなどもその通り。configueとか使うやつはだいたいそう。
redhatなら rpm や apt-get とかで探したりします。
apt-getの方が依存性のある関連パッケージもダウンロードしてくれます。
以下参照文書

ここから-----------------

今回は私の環境がRedhat8.0である為、http://apt.freshrpms.net/から
apt-0.5.5cnc4.1-fr1.20030325a.0.rh80.4.i386.rpm
をダウンロードしました。
rootユーザーにてインストールします。
# rpm -ivh apt-0.5.5cnc4.1-fr1.20030325a.0.rh80.4.i386.rpm
インストールはこれだけですね。
次のパッケージ情報を更新します。
# apt-get update
すると更新処理がはじまります。
完了したら依存性に問題ないかチェックします。
# apt-get check
例えば w3mをインストールしたいときは
# apt-get install w3m
と入力します。
またrpm
以下に主な用途を記載します。
■パッケージデータベースの更新
apt-get update
■パッケージのインストール
apt-get install パッケージ名
■パッケージのアップグレード(インストール済みパッケージを最新にします)
apt-get upgrade
■ディストリビューションごとアップグレードされます
apt-get dist-upgrade
■パッケージのアンインストール
apt-get remove パッケージ名
■パッケージの検索
apt-cache search 検索文字列
■パッケージの依存関係表示
apt-cache depends パッケージ名
また通常社内ではproxyサーバーがありますのでproxyの設定は以下のようにします。
# export http_proxy=http://xxx.xxx.xxx.xxx:8080/
# export ftp_proxy=ftp://xxx.xxx.xxx.xxx:8080/

ここまで-----------------


■再起動
shutdown -r now
または
reboot

■ローカルからサーバーに繋がるようにする
1. local でキーをつくる
ssh-keygen -t dsa
パスワード2回入力
/root/.ssh/
id_rsa
id_rsa.pub

2. 中身の文末に任意の名前を書く
vi id_dsa.pub
== masumoto@linux

3. saver 名前を変えてサーバーに置く
id_rsa.pub → masumoto.pub
/root/.ssh/masumoto.pub

4.authorized_key に追加する
cat masumoto.pub >> authorized_keys

5.local の /root/.ssh/configに設定を書く■■■■
cat > config
vi config
Host *

ForwardAgent yes
CompressionLevel 9

Host blue

Hostname 999.999.999.999
User root


6.ssh IPアドレスで繋がる パスワードとか毎回聞かれるので
デスクトップ→個人設定→他の個人設定→セッション→自動起動するプログラム
順番 60 /usr/bin/ssh-add を追加する
手作業の時は

* $ eval 'ssh-agent'
* $ ssh-add
* キー入力

なんだけど、Fedora4ではssh-agent(keyを渡すデーモン)が自動起動なのでssh-add(ssh-agen
tにkeyを教えるプログラム)だけを自動起動するように設定する。

7.あと /etc/hosts に書く方法もある

■ファイル検索
どちらも再帰的です。locate は何もしなくても部分一致
find /home/goops/goops.jp/ -iname *woo* -type d
find /home/goops/goops.jp/ -iname *woo* -type f
find ディレクトリ、-iname 大文字小文字なし、*部分一致*、d:ディレクトリ、f:ファイル
または
スーパーユーザーで updatedb と実行した後
locate php.ini

■Apacheのバージョン
Windows
C:\Program Files\Apache Group\Apache2\bin\Apache.exe -v
Linux
/usr/local/apache2/bin/httpd -v
httpd -v :バージョン
httpd -l :mod_so.c が有ればDSO形式でインストールされている。

■Linuxのバージョンとか
# cd /proc
# ls
# cat devices  ---> デバイスの使用状態
# cat ioports   --->IO ポートアドレス
# cat interrupts --->割り込み (IRQ) 使用状況
# cat dma     --->DMA の状況
# cat pci      --->認識されている pci デバイス
# cat modules  --->認識されてるモジュール。 lsmod と同じ
# cat version   --->カーネルのバージョン
# cat cpuinfo   --->CPU の状況
uname -a
/etc にそれっぽいファイル redhat-release を cat で見る。

■エラーログ見るとき
cd /home/mobacam/logs
cat error_log 全部開く
less error_log 全部開くけど下まで行かない
tail error_log 最後の方だけ表示
tail error_log -f 最後の方だけ表示 & リアルタイム

■日付
表示
date
変更
date -s "21/11 15:31 2006"

■クローンのログ
/var/log/cron
less cron とかで見る。lessからはqで抜ける。

■redのゾーンファイル
/var/named/tomosuma.net.zone
その再起動

/etc/init.d/named stop
/etc/init.d/named start

■オーナーの変更
chown -R apache.apache ./*
現在位置以下のファイル全てをユーザー・グループともapacheに変更

* R そのディレクトリ以下全て

./* 現在位置以下全てのなにか(*)

■パーミッションの変更
chmod 444 test

■現在位置の確認
pwd

■ディレクトリごと移動する
mv data/ /home/pwblog/

■yum install libjpeg-devel
imagemagickなどはlibipeg-develを使っているので入れてみる。実験。入ってた。

■ファイルの中を削除

/temp/test


■詳細表示
ll

■DNS.新たなドメインを追加する時
新たにドメインを追加する時は新しく[ドメイン名].zoneファイルを作成する必要がある。

■DNS.DNSが動いているかどうかのチェック
#host
[ ドメイン名 ]
を実行する。
#nslookup
も使える。

■DNS.設定ファイル名
etc/namedで指定する

■bashファイル
改行コードは LF のみでないとコケます。

■Fedora Core4 でFirFox1.5
こんなエラーが出ます。
shared libraryがロードできず起動できません。
# /usr/local/firefox/firefox
/usr/local/firefox/firefox-bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
以下対処法
?
# /sbin/ldconfig -p | grep stdc

libstdc++.so.6 (libc6) => /usr/lib/libstdc++.so.6

?
# yum search libstdc

<略>

compat-libstdc++-33.i386 3.2.3-47.fc4 base
Matched from:
compat-libstdc++-33
The libstdc++ package contains compatibility standard C++ library
from GCC 3.3.4.

<略>

?
# yum install compat-libstdc++-33.i386
以下全て y と入力して Enter
?
# /usr/local/firefox/firefox

memo
?srdcと名のつくファイル全てに、といっても結果的に1つだけど、何かしら設定し、その結果を表示。
?yum で libstdc と名のつくもの一覧を表示。
?compat-libstdc++-33.i386 をインストール
/sbin/ldconfig
動的リンカによる実行時の結合関係を設定する。
共有ライブラリを検索するパスを設定。
最新の共有ライブラリに対して必要なリンクを作成したり、ライブラリをキャッシュしたりする。
オプション

* v

詳細表示モード。現在のバージョン番号を表示する。またそれぞれのディレクトリをスキャンし、新しいリンクを生成するたびに、その内容を表示する。メッセージ抑制モードを上書きする

* n

コマンドラインで指定されたディレクトリのみを処理する。通常共有ライブラリが置かれるディレクトリ (/lib と /usr/lib) や/etc/ld.so.conf で指定されたディレクトリは処理しない。暗黙のうちに -N が指定される

* N

キャッシュを再構成しない。同時に -X が同時に指定されなければ、リンクのほうは更新される

* X

リンクを更新しない。 -N が同時に指定されなければ、キャッシュのほうは再構成される

* f conf

conf を /etc/ld.so.conf の代わりに用いる

* C cache

cache を /etc/ld.so.cache の代わりに用いる

* r root

root にカレントディレクトリを変更し、ここをルートディレクトリとして用いる

* l

ライブラリモード。それぞれのライブラリを手動でリンクする。熟練者のみが用いるべきである

* p

現在のキャッシュに保存されているディレクトリのリストと、ライブラリの候補を表示する

■シェルスクリプトの作り方
initial.sh
#!/bin/bash
sudo -u apache dropdb pwtest
sudo -u apache createdb -E EUC_JP pwtest
sudo -u apache psql -f /home/pwtest/pwtest.dump -d pwtest
rm -rf /home/pwtest/public_html/user/*
こんな感じで命令を書いた後テキトーな名前で保存して実行権限を与えます。
ファイル名や拡張子は何でも良いです。
そのファイルのあるディレクトリに移動して。
./initial.sh
とかすると中に書いた命令を順番に実行します。

■ファイル検索
$ find ./ -name hogehoge* カレントディレクトリの頭からhogehogeが含まれるファイルを表示
$ find ./* -name hogehoge* カレントディレクトリ下に頭からhogehogeが含まれるファイルを表示
# find /* -name hogehoge* ルート階層下すべてから頭からhogehogeが含まれるファイルを表示

■バーチャルホストの設定を調べてみた
○そのパソコンのIPと使用するポート

ServerAdmin info@mail.com ○管理者メアド
DocumentRoot /home/hoge/public_html ○ブラウザからアクセスした時につなぐ場所
ServerName hoge ○ドメイン名 http://の後ろ
ErrorLog /home/hoge/logs/error_log ○エラーログを書くファイル
CustomLog /home/hoge/logs/access_log common○アクセスログを書くファイル
Alias /cgi-bin/ "/home/hoge/cgi-bin/" ○CGIを置く場所
○特定のディレクトリに対して何かを設定する
Order allow,deny
○allowとdenyの適用する順番をきめる。この場合denyが後から採用され優先される。
Allow from all
○全てのIPを受け付ける はじくにはDeny from IPアドレス
○例えば、この位置に Deny from 192.168.1.13 とすればそのIPはこのディレクトリにアクセスできない。
○Deny from 192.168.1 で切ると、192.168.1.0-255が許可されなくなる。
AllowOverride ALL
○このディレクトリの.htaccessを有効にします。
○ALL:全て上書き、None:無効、Limit:allow,deny,orderディレクティブのみ、Option:Optionディレクティブのみ

○特定のディレクトリに対して何かを設定する
AddHandler cgi-script .cgi .pl
Options +ExecCGI -Indexes +FollowSymLinks +MultiViews
○オプションの+追加?削除
○この場合左から順番に、CGIの実行許可、ファイルが無いときにディレクトリ一覧を表示しない、
○シムリンクを有効にする、ブラウザからのヘッダを見て日本語用ファイルとか英語用ファイルとか出力し分ける。

■レスキューモードで起動「fstabにへんな書き込みをして起動できなくなった」
/etc/fstab に余計なものを書いてしまったので起動しなくなったの件
↑に書いてあるものをマウントするんだけど、無いものを記述してしまってチェックできずにコケまくり。
方法は、fstab を元通りに書き直してやること。
ただしreadonlyとか言って絶対に書き直してくれない。
以下、書き直す手順。

FC4インストールCDの一枚目を入れてCDから起動する。
boot: が出たところで以下のようにlinux rescueと入れる
boot: linux rescue

以下のように選択する。
Choose a Language : English
Keyboard Type: jp106
Setup Networking : No
Rescue : Continue
ここで Sytem to rescue が出たら自分のlinuxシステムが入っているパーティションにあわせる(例:hda2)。出ないかもしれない。
Rescue : OK

うまく行けば/mnt/sysimageの下に元の/がマウントされているので、以下のコマンドで/etc/fstabを修正し、exit(2回)で再起動する。(exitの前にCDは抜く)

# chroot /mnt/sysimage
# vi /etc/fstab

# exit
# exit


■トレース
tracert tomosuma.mydns.jp -p 80


■ソースの実行
例えばローカルの環境ファイルを実行する時は以下の通り。
. ~/.bash_profile
とかすると再読み込みします。bash_profileは実行時に1回読み込むだけなので、あとで
修正してから反映する時にはこんな風にコマンドから実行します。
ドットが実行する印です。


■環境変数
rootの下に.bash_profileがあるのでその中を書き換える。
# User specific environment and startup programs
#LANG
=ja_JP.eucJP
PATH=$PATH:./:$HOME/bin:$JAVA_HOME/bin:$ANT_HOME/bin:$PSQL_HOME/bin

コロンが区切り文字。 ./ が現在地。左から順番に探してゆく。
$PATH はもうひとつ上の親玉。ベースとなるどこかのbash_profileを読んでいる。


■よく使うコマンド
ls ディレクトリ内のファイル一覧
cd ディレクトリ ディレクトリ移動
cd .. 1階層上に移動
cd ../.. 2階層上に移動
cat テキストファイルの中身
pwd 現在位置


■ローカルの.htaccessを有効にする
# ec

ServerAdmin info@mail.com
DocumentRoot /home/hoge
ServerName hoge.tomosuma.net

#SuexecUserGroup
hoge hosting

ErrorLog /home/hoge/logs/error_log
CustomLog /home/hoge/logs/access_log combined
ScriptAlias /cgi-bin/ "/home/hoge/cgi-bin/"

Order allow,deny
Allow from all
AllowOverride All


■CPANのフォースインストール
cpan -f Data::FormValidator


■CPAN終了
quit


■モジュールのインストール
cpan> install CGI::Application
cpan> install Jcode


■CPAN起動
perl -MCPAN -e shell


■バーチャルホスト(Windows側の設定)
C:\WINDOWS\system32\drivers\etc\hosts
の最後の方
127.0.0.1 localhost
999.999.999.999 hoge.tomosuma.net


■バーチャルホスト(Linux側の設定)
/etc/httpd/conf/httpd.conf
の最後の方
<VirtualHost 999.999.999.999:80>

DocumentRoot /var/www/html
ServerName 999.999.999.999
ErrorLog /var/logs/error_log
CustomLog /var/logs/access_log common

</VirtualHost>

<VirtualHost 999.999.999.999:80>

ServerAdmin info@mail.com
DocumentRoot /home/hoge/public_html
ServerName masu_linux
ErrorLog /home/hoge/logs/error_log
CustomLog /home/hoge/logs/access_log common
<Directory>
Order allow,deny
Allow from all
AllowOverride All
</Directory>

</VirtualHost>


■基本的な設定(/etc/httpd/conf/httpd.conf)
#
# inetモードとstandaloneモードがある。
# inetがinetデーモン経由で起動で、standaloneが自分がdaemonとなる。
ServerType standalone

#
# サーバの設定ファイルやログファイルのルートディレクトリ。
#
ServerRoot "/etc/httpd"

# oLockファイルの場所指定する
LockFile /var/run/httpd.lock

# プロセスIDを記録するファイルを指定する。
PidFile /var/run/httpd.pid

# 接続の待ち時間を指定する。
Timeout 300

# 接続を維持するかどうかを決める
KeepAlive Off

# 接続維持のリクエストを受けるクライアント数
MaxKeepAliveRequests 100

# 接続維持するときの時間
KeepAliveTimeout 15

# リクエスト待ちの子プロセスの数
MinSpareServers 5
MaxSpareServers 20

# スタート時の子プロセスの数
StartServers 8

# 接続するクライアント数の最大
MaxClients 150

# 1回の接続での子プロセスがリクエストできる最大値
MaxRequestsPerChild 1000

# ポート番号
Port 80

# 子プロセスを起動するときのユーザ名
User apache
Group apache

# 管理者のメールアドレス
ServerAdmin root@localhost

# Documentのルートディレクトリ
# ルートを要求されたときに見るところ
DocumentRoot "/home/htdocs/html"

# ログに書き込むときにdomain名で書く
# OffだとIPで書く。Onだといちいちnameサーバに尋ねるので
# パフォーマンスが悪くなる。(と思う。)
HostnameLookups Off

# エラーログファイル
ErrorLog logs/error_log

# ログレベルを指定する
# 指定できるもの: debug, info, notice, warn, error, crit,
LogLevel warn


■ディレクトリの意味
/   ルートディレクトリ
├ /bin 基本コマンド
├ /boot 起動に必要なファイル
├ /dev デバイスファイル
├ /etc 設定ファイル
├ /home(オプション) ユーザーのホームディレクトリ
├ /lib 共有ライブラリ
├ /lib(オプション)  
├ /mnt 一時的なマウントポイント
├ /opt 追加アプリケーション
├ /proc(Linux固有) プロセス情報など
├ /root(オプション) root用ホームディレクトリ
├ /sbin システム管理用コマンドなど
├ /tmp 一時的なファイル
├ /usr 各種プログラムなど
└ /var 変更されるデータ

■ローカルLinux
192.168.1.24

■IPアドレス
ipconfig

■仮テスト用SSLの設定
cd /etc/httpd/conf/
openssl req -new > inko.csr
 パスワード
 パスワード
 以下以外とばす
 Common Name* (eg, YOUR name) []: にサーバー名 ssltest.webinko.com等
mv privkey.pem inko.key
openssl x509 -req -days 365 -in inko.csr -signkey inko.key -out inko.crt
ssl.crt、ssl.keyにinko.crt、inko.keyを入れる
confに仮想サーバーを記述
例)
<VirtualHost 999.999.999.999:443>
    ServerAdmin ssltest@webinko.com
    DocumentRoot /home/webinko/html
    ServerName ssltest.webinko.com
    ErrorLog /home/webinko/logs/ssl_error_log
    CustomLog /home/webinko/logs/ssl_access_log combined
        <Directory /home/webinko/html>
                Order allow,deny
                Allow from all
                AllowOverride All
        </Directory>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/httpd/conf/ssl.crt/inko.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/inko.key
</VirtualHost>

■リスタート時にパスフレーズを聞かれないように
cd /etc/httpd/conf/ssl.key
cat inko.key | openssl rsa > inko.key.out (※ここでパスフェーズを聞かれます)
mv inko.key inko.key.save
mv inko.key.out inko.key

■サブバージョンの設定
◆サーバー
リポジトリの追加
yum install subversion
svnadmin create /home/svn/repository
chown svn:svn /home/svn -R
◆ローカル(eclipse)
リポジトリの追加
ウィンドウ→ビュー→その他→SVN→SVNリポジトリ
空欄右クリック→新規→リポジトリーロケーション→
svn+ssh://svn@999.999.999.999/home/svn/repository
プロジェクトの追加
ナビゲーター空欄右クリック→新規→プロジェクト→Perlなど
リポジトリにプロジェクトを追加
プロジェクト右クリック→チーム→共有→リポジトリを選択

■ オレオレ証明書
自分専用環境はオレオレ証明書と hosts を使って存在しない URL でアクセスしたら情つよじゃん。
例)
IP(自サーバーの):888.888.888.888
URL(URL規則に沿ったもの):https://hoge.example.com
パスフレーズ(すぐ捨てる):hogehoge
ウェブディレクトリ:/home/com.example.hoge/public_html
(複数の仮想SVを管理するので逆の方が見やすい)

URL は規則に沿っていて実在するドメインにするのが無難です。
以前はテキトーな文字列でもイケたのですが、ある日突然繋がらなくなるおそれがあります。

◆ Windows側(PC)
以下に IP と URL を記述。
C:\Windows\System32\drivers\etc\hosts
888.888.888.888 hoge.example.com

◆ Linux側(サーバー)
cd /home/com.example.hoge
openssl genrsa -aes128 2048 > server.key
hogehoge
hogehoge
openssl req -new -key server.key > server.csr
hogehoge

(国名)
Country

JP

(都道府県名)
State

Tokyo

(市区町村名)
Locality

Shinjuku-ku

(組織名)
Organizational Name  

Hogehoge Co.,Ltd.

(部門名)
Organizational Unit

system

(コモンネーム)
Common Name

hoge.example.com
以下エンター。

openssl x509 -in server.csr -days 365000 -req -signkey server.key > server.crt
hogehoge

パスフレーズの解除
cp server.key server.key.org
openssl rsa -in server.key -out server.key
hogehoge

仮想サーバー設定の例
<VirtualHost *:443>
  ServerName hoge.example.com
  DocumentRoot "/home/com.example.hoge/public_html"
  ErrorLog /home/com.example.hoge/logs/error.log
  CustomLog /home/com.example.hoge/logs/access.log combined

  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
  SSLCertificateFile /home/com.example.hoge/server.crt
  SSLCertificateKeyFile /home/com.example.hoge/server.key

  RewriteEngine on
  AddDefaultCharset UTF-8
  <Directory "/home/com.example.hoge/public_html">
    Options +ExecCGI
    AddHandler cgi-script .pl .cgi
    Options All
    AllowOverride All
  </Directory>
</VirtualHost>

アパッチ再起動
/etc/init.d/httpd restart

◆ Windows側(PC)
アクセス
https://hoge.example.com
ブラウザに駄々こねられるので強引に認めさせる。