*** Solarisのコマンドパス
①/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/ccs/bin
②/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/local/ccs/bin
↓環境変数に反映させる
PATH=① or ②
export PATH
*** コマンドの基本(bashシェル)
&
バックグラウンドで処理を実行させる
(時間が掛かる処理に付けるとgood)
例) vacuumdb -f school &
| (パイプ)
前後のコマンドを連携させて実行する
例) cat access_log | more
&&
コマンドを順に(バッチ)実行する
例)make && make install
!!
一つ前に入力したコマンドを実行する
>bashシェルでは、コマンド履歴を利用して操作を簡略化できます。
>!! 直前のコマンド
>!n 履歴番号がn番のコマンド
>!-n n回前に実行したコマンド
>!string 文字列stringで始まる直近のコマンド
>!?string 文字列stringを含む直近のコマンド
TABキー
コマンド入力の補完を行う
↑キー
コマンド履歴
history コマンド
コマンド履歴一覧を表示
~
ユーザのホームディレクトリのこと
例) cd ~
Ctrl+d
ログアウトする
Ctrl+z
現在実行中の処理をバックグラウンドで実行させる
実際にはbg [番号]でバックグラウンド実行になる
例)
tar xxx.tar /home/hoge
<ここでCtrl+z>
[1]+ Stopped
bg 1
ここで指定する番号は、Stoppedで左側表示されるモノを指定する。
逆にフォアグラウンドに戻りたい場合、fg 番号で戻ることができる。
bash [shバッチファイルなど]
あらたにシェルを起動して処理を行う
bash --debug等のオプションで詳細な戻り値などを確認可能
*** ファイルの中身を表示する
cat [ファイル名]
一画面毎に区切って表示
more [ファイル名]
パイプで利用可能
例)
cat httpd.conf | more
ファイル頭を表示
head [ファイル名]
-n [行数]
ファイル末尾を表示 (ログに使える)
tail [ファイル名]
-n [行数]
-fs[秒数] 一定秒数後に読み直す
*** ユーザ追加
useradd -m -d [ホームディレクトリ] -g [グループID or グループ名] -s [シェル] -k [テンプレートファイルの場所] -c [コメント] -p [MD5で暗号化したパスワード] [ユーザID]
-m をつけるとホームディレクトリを作成してくれる。
Linuxでの例)
useradd -g apache -m -d /soffice/es01 es01
useradd -g 1 -m -d /var/xxxxx -s /nologin xxxxx
Solarisでの例)
※Solarisでは 下記のようにしないと、
Linuxと同じようにユーザディレクトリが作成されません。
groupadd postgres
useradd -g postgres -m -d /export/home/postgres -s /usr/bin/bash -k /etc/skel postgres
useradd -g other -m -d /export/home5/demo14 -s /usr/bin/bash -k /etc/skel demo14
useradd -g other -d /home/sadmin_demo -s /usr/bin/bash -k /etc/skel sadmin_demo
*** パスワードを変更したい
passwd [ユーザID]
*** パスワードを変更したい(問い合わせ無しで)
# root 専用
passwd --stdin [ユーザID] < txt
txtには2つ同じパスワードを改行で区切って作成する。
sambaのsmbpasswd も大体同じことをしてやると応用可能。
*** ユーザ変更
usermod -m -d [ホームディレクトリ] -g [グループ] -s [シェル] -c [コメント] -p [MD5で暗号化したパスワード] [ユーザID]
SGIDとして追加させたい場合
usermod -G [グループ] [ユーザID]
*** ユーザ変更
usermod -m -d [ホームディレクトリ] -g [グループ] -s [シェル] -c [コメント]
*** ユーザ削除
userdel -r [ユーザ名]
-r:ユーザディレクトリも含めて削除
*** ディスク使用量
指定ディレクトリの使用容量(使用ブロックでのサイズ)
du -h -s [ディレクトリ]
-h:容量に単位を付ける(Linux)
-s:使用容量のみを出す
*** ファイルの合計サイズを出す(Windowsと同じ感じで出る)
find [ディレクトリ] -type f -printf "%s\n" |awk '{ sum += $1; }; END { print sum }'
*** ディスクの空き容量
df -h
-h:容量に単位を付ける(Linux)
*** ディレクトリの作成
mkdir [ディレクトリ名]
-p : ディレクトリ作成先の途中パスが存在しない場合作成する
*** ファイルコピー
cp -p [コピー元] [コピー先]
-v: 詳細(Linux)
-p: 権限を保持
-i: 上書き確認
-r: ディレクトリを含める
-f: 強制実行
ディレクトリも含めるコピー
cp -pr
*** ファイル移動
mv -p [コピー元] [コピー先]
-v: 詳細(Linux)
-p: 権限を保持
-i: 確認
-r: ディレクトリを含める
-f: 強制実行
ディレクトリも含めるコピー
mv -pr [コピー元] [コピー先]
*** ファイル削除
rm [オプション] [ディレクトリ or ファイル名]
-v: 詳細(Linux)
-i: 削除の確認を行う
-r: ディレクトリを含める
-f: 強制的に削除
ディレクトリも含めての削除
(※間違っても ルートディレクトリでやらないこと。全データ消えます)
rm -fr [ディレクトリ or ファイル名]
*** オーナー変更
chown [オプション] [ユーザID]:[グループID] [ファイル or ディレクトリ]
-v: 詳細(Linux)
-R: ディレクトリとディレクトリ内のファイルを処理対象に含める
*** 権限変更
chmod [オプション] [権限] [ファイル or ディレクトリ]
-v: 詳細(Linux)
-R: ディレクトリとディレクトリ内のファイルを処理対象に含める
000 全ユーザ読み書き不能
755 全ユーザに実行権限
600 ログインユーザのみに 書込可能
644 ログインユーザ書込、他ユーザは読み込みのみ
*** リンク
ln -s [リンク対象(実体)] [リンクファイル名]
-s:シンボリックリンク(付けないとハードリンク)
*** ファイル一覧
ls -lah [ディレクトリ or ファイル名]
-l:詳細リストで表示
-a:隠しファイルを表示する
-h:ファイルサイズ単位をわかりやすく表示する(Linux)
-F:ディレクトリには「/」を付けて表示する
-t:更新日付の新しい順に表示
-S: ファイルサイズ順で表示
-R: カレントディレクトリ配下すべて
応用)
★ディレクトリのみを確認したい (1階層のみ)
ls -F /home |grep /
★ディレクトリのみを確認したい (配下のディレクトリすべて)
ls -R /home/itou |grep : | sed s/://
*** ディレクトリ構造を取得したい
treeというコマンドを手動で入れる。
ftp://mama.indstate.edu/linux/tree/
tar xfz tree-x.x.x.tgz
cd tree-*
make
make install
使用例)
tree /home/hoge
ディレクトリのみ表示
tree -d /home/hoge
*** プロセス確認
ps -ef | grep "対象プロセス名"
例) ps -ef | grep httpd
*** CPU利用率を確認
top(Linuxのみ?) プロセス情報を監視する
Solarisは prstat とうつ
*** ファイル検索 (便利)
find [ディレクトリパス] -name "キーワード"
find [ディレクトリパス] -atime 1 -print 1日前にアクセスされたファイルの検索
find [ディレクトリパス] -ctime 2 -print 2日前に更新されたファイルの検索
find [ディレクトリパス] -size -1k -print ファイルサイズが1k以下のファイル検索
find [ディレクトリパス] -size +1c -print ファイルサイズが1byte以上のファイル
*** 複数条件での検索 (Linux)
例)
cat access.log | grep -e "127.0.0.1" -e "172.16.20.62"
*** su コマンドで一時的にユーザを替えて実行
rootでログイン
su -
su - ユーザ名
su - ユーザ名 -c "コマンド名"
*** sudo コマンドで一時的にユーザを替えて実行
sudo -u [ユーザ名] [コマンド]
例)
sudo -u nobody ls -la /tmp
sudoの設定を変更するには、visudo で書き換える
※RHEL5/CentOSでsudoを実行するとエラーになる場合、visudoで
requiretty をコメントアウトし保存する
*** su コマンドでrootになるユーザを制限する
※予め、PAMがインストール済であること(rpm -qa | grep pam)
vi /etc/pam.d/su
#↓以下の行を追加
auth required /lib/security/pam_wheel.so group=wheel
※wheelグループに属していないユーザは su 出来なくなる。
adminをwheelグループに属させる場合、
vi /etc/group
変更前:wheel:*:0:root
変更後:wheel:*:0:root,admin
とする。
最後に、設定変更
vi /etc/login.defs
#↓以下の行を追加
SU_WHEEL_ONLY yes
*** chroot
一時的にルートディレクトリを変更する。
例)
chroot /mnt/sysimage
*** 日付
確認
date
時を設定する
date -s 17:30
日を設定する
date -s MM/DD/YYYY or YYYY/MM/DD
ntpを利用して日付を合わせる
ntpdate -s [NTPサーバ]
日付を記憶させる(ハードウエアクロックと同期させる)
clock -w
or
hwclock -w
*** tar
解凍(Linux)
tar xvfz [圧縮ファイル.gz]
tar xvjf [圧縮ファイル.bz2]
解凍(Solaris)
gunzip [圧縮ファイルtar.gz]
tar xvf [tarファイル]
GZIP圧縮(Linux)
tar cvfz [tarファイル名] [圧縮対象ディレクトリorファイル名]
GZIP圧縮(Solaris)
tar cvf [tarファイル名] [tarでまとめる対象ディレクトリorファイル名]
gzip [tarファイル名]
確認
tar t [tarファイル名]
※応用
>1.tar 展開(-x)or表示(-t)
> (1)特定のファイルのみ展開(それ以外は削除)
tar -zxf hoge.tgz;mv hoge/fuga.file .;rm -fr hoge
> (2)特定のディレクトリー下全て(それ以外は削除)
tar -zxf hoge.tgz;mv hoge/fuga.dir .;rm -fr hoge
> (3)ディレクトリーのみ全て
tar -zxf hoge.tgz;rm -f hoge/*
> (4)特定のディレクトリーの直下のみ
tar -zxf hoge.tgz;mv hoge/fuga.dir .;rm -fr hoge;rm -fr
fuga.dir/*/*;rmdir fuga.dir/*
*/
*** lha
lha a [lzhファイル名] [圧縮対象ファイル]
lha m [lzhファイル] [圧縮対象ファイル] lzhファイルに圧縮後、元ファイルを削除
lha xw=[解凍先パス] [lzhファイル]
Windows上で作成したlzhを解凍するときに
ファイル名の大文字小文字を区別させて解凍する場合
lha xg [lzhファイル]
lha xf [lzhファイル] 上書きの確認をしないで解凍
*** FTP
ftp [接続先IP or ホスト名]
ユーザ、パスワードの順に入力
利用可能なコマンド(proftpd)
nlist ファイル一覧取得
bin バイナリモード
asc アスキーモード
passiv パッシブモードの切り替え
cd サーバ側のディレクトリ変更
lcd ローカル側のディレクトリ変更
ls -la ファイル一覧
!ls -la ローカル側のファイル一覧
pwd カレントディレクトリの表示
delete ファイル削除
mdelete ファイル一括削除
get ダウンロード
mget 一括ダウンロード
put アップロード
mput 一括アップロード
help コマンドの一覧表示
by 終了
bye 終了
quit 終了
*** lftp (2GB以上のファイルを扱えない場合のFTP)
lftp
open サーバ名
*** sftp (SSH暗号接続で ファイル転送する)
tcpポート はSSHの22番を使用する?
sftp [オプション] [ユーザID@ホスト名 or IPアドレス]
オプション
-C :データ圧縮して通信を行う
接続後のコマンド
Available commands:
cd path Change remote directory to 'path'
lcd path Change local directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
chmod mode path Change permissions of file 'path' to 'mode'
chown own path Change owner of file 'path' to 'own'
help Display this help text
get remote-path [local-path] Download file
lls [ls-options [path]] Display local directory listing
ln oldpath newpath Symlink remote file
lmkdir path Create local directory
lpwd Print local working directory
ls [path] Display remote directory listing
lumask umask Set local umask to 'umask'
mkdir path Create remote directory
progress Toggle display of progress meter
put local-path [remote-path] Upload file
pwd Display remote working directory
exit Quit sftp
quit Quit sftp
rename oldpath newpath Rename remote file
rmdir path Remove remote directory
rm path Delete remote file
symlink oldpath newpath Symlink remote file
version Show SFTP version
!command Execute 'command' in local shell
! Escape to local shell
? Synonym for help
※ascii や binモードがない。
*** ネットワーク設定(Linux)
すべてのネットワーク接続を確認
ifconfig -a
アダプタを起動/停止
ifconfig [アダプタ名] [up/down]
Linux専用
netconfig
上記設定後,
service network restart
# 100Full固定で オートネゴをキャンセルさせる
ethtool -s eth0 speed 100 duplex full autoneg off
*** ネットワーク設定(Solaris)
すべてのネットワーク接続を確認
ifconfig -a
アダプタを起動/停止
ifconfig [アダプタ名] [up/down]
・Solarisの場合
vi /etc/hosts 192.168.1.31 gis2
vi /etc/resolv.conf nameserver domain serach を指定
vi /etc/nodename ホスト名
vi /etc/hostname.hme0 ホスト名
vi /etc/defaultrouter 192.168.1.253 (ゲートウェイ)
vi /etc/netmasks 192.168.1.0 255.255.255.0
例
ifconfig hme0 down (※telnet経由でコレをやるとつながらなくなります)
ifconfig hme0 192.168.1.31 netmask 255.255.255.0 broadcast 192.168.1.255
ifconfig hme0 up
*** ネットワークの設定(Linux)
Red Hat Linux系の場合次のファイルに書き込まれる。
vi /etc/hosts
vi /etc/resolv.conf
vi /etc/sysconfig/network ホスト名・デフォルトゲートウェイなど
vi /etc/sysconfig/network-scripts/ifcfg-eth0 IP設定
vi /etc/sysconfig/network-scripts/route-eth0 ルーティング設定(RH9)
vi /etc/sysconfig/static-routes ルーティング設定(RH7)
*** IPエイリアスの設定(IPアドレスを複数持ちたい場合)
ifconfig eth0:[番号] [IPアドレス] netmask [ネットマスク] broadcast [ブロードキャスト]
エイリアスを無効にする
ifconfig eth0:[番号] 0
エラーは出るが消える。
*** ルーティング (route:ルート)
静的ルート設定方法(Red Hat Linux 7まで)
vi /etc/sysconfig/static-routes
eth0 net 192.168.99.0/24 gw 192.168.xx.253
eth0 net 192.168.199.0/24 gw 192.168.xx.253
/etc/sysconfig/static-routes eth0
静的ルート設定方法(Red Hat Linux 8以降)
vi /etc/sysconfig/network-scripts/route-eth0
192.168.99.0/24 via 192.168.xxx.253
192.168.199.0/24 via 192.168.xxx.253
service network reload
ルーティング情報の追加
Linux
route [add/del] [-net ] [gw] [metric] [netmask] [device]
route add -net 192.168.99.0 gw 192.168.xxx.253 metric 1 netmask 255.255.255.0 eth0
route add -net 172.16.21.0 gw 172.16.20.253 netmask 255.255.255.0 eth0
Solaris
route add 192.168.100.88 -netmask 255.255.255.0 192.168.100.193
ルーティング情報の削除
route del -net 192.168.90.0 netmask 255.255.255.0
route del -net 192.168.99.0 netmask 255.255.255.0 gw 192.168.90.253
(同じネットワークでルートが複数できてしまった場合、その個数分削除することで消せる)
デフォルトゲートウェイ追加
route add default gw 192.168.1.254
デフォルトゲートウェイ削除
route del default gw 192.168.1.254
デフォルトゲートウェイ・ホスト名など (ファイルに書いておく場合)
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=kaigi3 ←サーバのホスト名(FQDN)
GATEWAY=10.86.41.254
GATEWAYDEV=eth1 ←複数のNICがある場合に、デフォルトゲートウエイとするデバイスを指定
FORWARD_IPV4=no ←パケット中継(ルータ)とする場合のみyes
ファイル編集後、 service network restart
ルーティング確認方法
route
netstat -nr
*** 生存確認 (ping: ピン/ピング)
ping -s [IP or ホスト名]
*** ホスト名
hostname
hostname [ホスト名]
*** 使用されているポート確認 (netstat:ネットスタット)
netstat -an
*** ルーティング(経路)の確認
netstat -rn
route
*** ホスト名逆引き確認
nslookup [DNSサーバIP or ホスト名(省略可)] [IP or ホスト名]
MXを調べる場合は
set type=MX
> xxxxx.ne.jp
*** dig
*** サービス(Linux)
setup (対話的に設定可能)
サービス追加
chkconfig --add [サービス名]
サービス削除
chkconfig --del [サービス名]
サービス一覧
chkconfig --list
起動を有効化
chkconfig [サービス名] on
起動を無効化
chkconfig [サービス名] off
initレベルを指定する場合
chkconfig --level=35 [サービス] on/off
サービスの起動
service [サービス名] start
サービスの停止
service [サービス名] stop
サービスの再起動
service [サービス名] restart
サービスの状態
service [サービス名] status
※service の代わりに /etc/init.d/ と置き換えても実行できる
*** システム終了・再起動
※Solarisでいきなり再起動させるとディスクにデータを
書き込まないままになり危険らしいです。
おまじない程度にsyncコマンドを数回発行させてから終了・再起動させること。
sync キャッシュにあるデータをディスクに保存
poweroff 終了(Linux)
shutdown -h now 終了(Linux)
halt 終了
init 0 終了
shutdown -y -i0 -g0 終了(Solaris)
shutdown -y -i5 -g0 電源断(Solaris)
shutdown -r now 再起動(Linux)
shutdown -y -i6 -g0 再起動(Solaris)
reboot 再起動
init 6 再起動
fastboot チェックを簡易化して終了し再起動
*** Samba ファイル共有
Sambaの接続状況を確認
smbstatus
Sambaのユーザ追加
smbpasswd -a [ユーザ名]
Sambaのユーザ削除
smbpasswd -x [ユーザ名]
sambaの動作確認コマンド これで共有しているディレクトリの中身が見えてくればOK
smbclient -U [ユーザ名]%[パスワード] //IPorサーバホスト名/共有フォルダ名
例)
smbclient -U hoge%xxxx //win2003/test
※samba/windows上の共有ディレクトリをLinuxからマウントしてアクセスする場合
[username=,password,codepage=,....]
#smbfs が使用できる場合
mount -t smbfs -o username=admin,password=xxxxxx //192.168.2.150/backup /mnt/backup
#cifs が使用できる場合
mount -t cifs -o username=admin,password=xxxxxx //192.168.2.150/backup /mnt/backup
*** コマンドパスの確認 (which:ウィッチ)
which [コマンド名]
例)
which sudo
/usr/local/bin/sudo
*** カレントディレクトリ
pwd 現在居るディレクトリを表示
cd ホームディレクトリに移動する
cd [ディレクトリ] 指定ディレクトリに移動する
*** カレントユーザー (whoami:フーアムアイ)
whoami
*** テキストエディタ (vi:ブイアイ)
vi [ファイル名]
vim [ファイル名]
コマンド
ESC 入力・検索モードから抜ける
i 入力モードに入る
x 1文字削除
d 1行削除
o 1行挿入
a カーソル挿入
c 行クリア
b カーソル1行上へ移動
e カーソル1行下へ移動
[移動数]h ←
[移動数]j ↓
[移動数]k ↑
[移動数]l →
v Visualモードに入る(領域選択)
g ファイル先頭に移動する
Shift+g ファイル末尾に移動する
^ 行頭へ移動
$ 行末へ移動
% 対応する括弧へ移動
yy 行コピー
dd 行削除(切り取り)
p 貼り付け
u 元に戻す(アンドゥ)
Ctrl+r やり直し(リドゥ)
! コマンドを強制する
Ctrl+u ↑半ページスクロール
Ctrl+d ↓半ページスクロール
Ctrl+f ↓1ページスクロール
:[行数] 指定行にジャンプ
:w 上書き保存
:w ファイル名 ファイル名を指定して保存
:q viを終了する
<文字列検索>
:/検索文字列/
n 次の検索ヒット対象へジャンプ
<文字列置換>
:%s/置換前文字列/置換後の文字列/ でエンター
(※ .や/などの特殊文字を含む場合\.や\/とし、\マークでエスケープする)
*** メール
mail
メールを読む
コマンド
h メール一覧を表示する
n 次のメールを表示
p 現在のメールを読む
d 現在のメールを削除
q メールを保存して終了
? ヘルプ
n番目のメールを読む
mail [n番]
読み終わったメールはユーザ・ディレクトリ ~/mbox に保存される
メール送信
mail [送信先メールアドレス(複数可能)]
Subject:[題名][Enter]
[メール本文][Enter]
.でメール本文終了
Cc:[CCするメールアドレス]
mail -s 件名 -c CCアドレス -b BCCアドレス
メールを読む
mail -f mailboxのファイル名
mail -u ユーザ名
*** メールスプール
/var/spool/mail 配下にユーザ毎にできるファイルのことです。
中身はそのまま生データが入っているので読むことができる。
*** cronの設定 (クーロン)
crontab -l 一覧
crontab -e 編集
分・時・日・月・曜 コマンド 引数
例:毎日午前1時0分に実行する)
0 1 * * * /usr/local/bin/php /home/juen/web/cron/pc_notice.php
crontab のエディタをviにする(Solaris)
EDITOR=vi
*** 環境変数の登録
bash
export [A]=[B]
例)
export PATH=/bin:/usr/bin:/usr/local/bin
tcsh/csh
setenv [A] [B]
現在登録されている環境変数の確認は
env
*** ファイルの暗号化
①gpg(共通鍵暗号化)
暗号化:
gpg -c [ファイル名]
※パスフレーズを2回入力
暗号化されると、ファイル名の後ろに.gpgという拡張子が付く
複合化:
gpg [暗号化済みファイル(*.gpg)]
※暗号化した際のパスフレーズを入力
※暗号化すると、若干圧縮がかかるためファイルサイズが減少する。
◆apache でパスワードを付けてWebページに認証させたい
htpasswd -c パスワードファイル 認証ユーザ名
認証させたいページのファイルがあるディレクトリに.htaccessファイルを作成し、下記のようにする
# パスワード認証
AuthUserFile /etc/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter username and password"
AuthType Basic
require valid-user
*** ファイルのダウンロード (wget:ダブルゲット)
wget [URL]
wget http://www.yahoo.co.jp/
Proxyを経由しなければならない場合、 /etc/wgetrcを編集して
proxyの部分を経由するproxyに書き換える
か、環境変数に入れる
export http_proxy="http://hoge.ne.jp:8080/"
カレントディレクトリにファイルがダウンロードされる
--no-proxy とするとproxyを経由しない
*** RPM RedHat用のパッケージ管理
オプション
-e 削除
-i インストール
-F インストール済みであれば更新
-U アップデート
-h インストール・アップデート中に進捗バーを表示する
-v 処理内容を詳細に表示する
--nodeps 依存関係を無視する :困ったときにのみ使うこと
--force 処理を強制する
--test 処理のテストのみ行い、実際の処理は行わない
--quiet 処理中に何も表示しない
--initdb RPM用のデータベースを初期化
--rebuilddb RPM用のデータベースを作り直す
--version RPMコマンドのバージョンを表示
インストール済みパッケージの確認
rpm -qa | grep [パッケージ名]
例)
rpm -qa | grep "apache"
パッケージの削除
rpm -e [パッケージ名]
パッケージのインストール
rpm -ivh [*.rpm]
パッケージの更新
rpm -Uvh [*.rpm]
該当するパッケージがインストールされていれば更新を行う
rpm -Fvh [*.rpm]
ソースパッケージからRPMを作成する場合
rpmbuild --rebuild --target=i686 [パッケージ]
RPMを作成する場合
rpm -ba [SPECファイル]
*** apt (あぷと)
aptの設定
/etc/apt/apt.conf
ソースリストはここを編集/ etc/apt/source.list
リスト更新
apt-get update
インストール
apt-get install [パッケージ名]
アップグレード
apt-get upgrade
ディストリ全体をアップグレード
apt-get dist-upgrade
HTTPプロキシを経由する場合はapt.confに設定を書くか、
http_proxy環境変数に入れる。
http_proxy="http://hoge.ne.jp:8080"
export http_proxy
***yum (やむ)
*** patch当て (patch:パッチ)
対象と1階層下のフォルダ階層でパッチを実行
patch -p1 < [filename.patch]
対象と同じフォルダ階層でパッチを実行
patch -p0 < [filename.patch]
*** 差分を取る
テキストファイル1と2の差分を取る
diff ファイル1 ファイル2
2ソースファイルの差分からパッチファイルを作成するには
diff -c ファイル1 ファイル2 > hoge.patch
*** PostgreSQL (ポスグレ/ポストグレス)
PostgreSQLの起動
pg_ctl -o "オプション" start
-o "オプション"は省略可能
PostgreSQLの終了
pg_ctl stop
PostgreSQLの再起動
pg_ctl restart
どうしても終了しないとき
pg_ctl -m immediate stop
DB一覧
psql -h [サーバのホスト or IP(ローカルの場合省略可)] -p [ポート番号(省略可)] -l
データベースのダンプ(エクスポート)作成
pg_dump -U [DB接続ユーザ] [DB名] > [ダンプファイル名]
または
pg_dump -U [DB接続ユーザ] [DB名] -f [ダンプファイル名]
テーブルのみをダンプする (INSERT形式で)
pg_dump -U [DB接続ユーザ] -D -t [テーブル名] [DB名] > [ダンプファイル名]
または
pg_dump -U [DB接続ユーザ] -D -t [テーブル名] [DB名] -f [ダンプファイル名]
Ex)
pg_dump -U school01 -D -t base_sco_mast school > base_sco_mast.sql
すべてのデータベースをダンプする
pg_dumpall -c -U [DB接続ユーザ] > [ダンプファイル名]
※-c を付けると、復元する際に重複キーを作成させないように一旦DELETEするSQLを作成する。
インポート または SQL実行
psql -e -U [DB接続ユーザ] [DB名] < [SQLファイル名]
SQLを実行させる
psql -U [DB接続ユーザ] [DB名] < [sqlファイル名]
or
psql -U [DB接続ユーザ] [DB名] -c "sql文"
SQLの内容をファイルに書き出す(応用)
psql -U [DB接続ユーザ] [DB名] -c "sql文" > [ファイル名]
CSV形式のデータをインポートする(応用)
psql -U [DB接続ユーザ] [DB名] -c "COPY [テーブル名] FROM 'CSVファイル名' "
CSV形式でデータをエクスポートする
psql -U [DB接続ユーザ] [DB名] -c "\COPY enq_area_mast TO '/home/postgres/itou/enq_area_mast.csv' USING DELIMITERS ','"
DB最適化
vacuumdb -f -z
-f -z を付けない場合、簡易vacuum
すべてのDB最適化(時間がかかる)
vacuumdb -a -f -z
*** MySQL (マイエスキューエル)
mysql -h [ホスト名] -p[パスワード]
*** Telnet (telnet:テルネット)
telnet [接続先IP or ホスト名] [ポート番号]
HTTPの確認
telnet localhost 80
> head /
> get /
SMTP (メール送信)
telnet localhost 25
HELO ホスト名
MAIL FROM: 送信元のアドレスを入力
RCPT TO: 宛先のアドレス
DATA
354 Enter mail, end with "." on a line by itself
From: 送信元アドレス
Subjet: メールタイトル
メッセージ
.
QUIT
POP3 (メール受信)
telnet localhost 110
USER xxxxx
PASS yyyyy
STAT
LIST
QUIT
*** telnet時のログインメッセージ
Linux
vi /etc/issue.net
好きなメッセージを入力
Solaris ↓無い場合は作成する
vi /etc/default/telnetd
↓入力する
BANNER="メッセージ"
*** ログイン後のメッセージ
/etc/motd を編集する。
*** bashログインしたときのみ表示
/etc/bashrc か、 ~/.bashrcの末尾に
echo "メッセージ"
を加える
*** ポートスキャン(Linux)
nmap [ホスト or IP]
*** TCPデータを覗く
tcpdump
詳しくはweb検索して調べて。
*** プロセス管理
特定のプロセスを再起動させる
ps コマンドでプロセス番号を確認し、
kill -HUP [プロセス番号]
応用例)
kill -HUP `cat /var/log/squid/squid.pid`
プロセスの終了
kill [プロセス番号] [プロセス番号]...
プロセスの強制終了(どうしても終了しない場合)
kill -KILL [プロセス番号]
*** OSのバージョンを確認
cat /etc/issue
※ただのテキストファイルなので書き換えられていると違うことがある。
*** カーネルのバージョンを確認
cat /proc/version
または
uname -a
*** CPU情報を確認する方法
cat /proc/cpuinfo
*** サーバのメモリ情報を確認する方法
Linux
cat /proc/meminfo
Solaris
prtconf | grep Mem
*** 現在ログイン中のユーザを調査
who
もしくは
w
*** ログイン履歴を調査
Solaris
last [ユーザID]
*** パーティションの管理
Linux
fdisk [デバイス名]
例) fdisk /dev/hda
fdiskに入ったときのコマンド
m ヘルプ
p パーティション一覧
d パーティション削除
n パーティション作成
t パーティションの種類変更
a パーティションのアクティブ化
w 設定をディスクに書き込んで終了
q 設定を保存しないで終了
※[注意]fdiskはハードディスクの中身を変更するので
間違って設定した場合、データが読めなくなります。
*** パーティションのフォーマット
mkfs -t [フォーマット] [デバイス]
*** ディスクのチェック
Windowsで言うところの、スキャンディスクのことです。
システム起動時のディスクチェックでエラーが出たときに行います。
シングルユーザモードで下記のコマンドを行います
fsck [オプション] [デバイス]
オプション
-p : 有無を言わさず自動修復
-n : チェックしても実際の修復はしない
-c : 不良ブロックのチェック
-f : ファイルシステムの状態が正常でもチェックを強制する
-v : 動作の詳細な内容を表示する
例)
fsck -p /dev/hda1
fsck -p /dev/hda2
*** ディスクのマウント
mount -o [オプション,..] -t [ファイルシステム] [デバイスパス] [マウント先のパス]
※予め、マウント先のディレクトリを作成しておくこと。
例) mount -o noatime /dev/hda /home
フロッピーをマウント
mount -t vfat /dev/fd0 /mnt/floppy
USBメモリをマウント(SCSIデバイスとして認識される)
mount -t vfat /dev/sda1 /mnt/floppy
CDROMをマウント
mount -t iso9660 /dev/cdrom /mnt/cdrom
現在のマウント状態を確認(Solaris)
mount -p
現在のマウント状態を確認(Linux)
mount
マウントの解除
umount [デバイス] or [マウント先]
CDROMの取り出し
eject [デバイス(省略可)]
*** ドライブのコピー
※コピー元とコピー先のドライブの容量は同じであること!
ドライブA→ドライブB
dd if=/dev/hda of=/dev/hdb conv=sync,noerror
*** パーティションのコピー
※予めコピー元のドライブとコピー先のドライブのパーティションを同じにしておく。
ドライブAのパーティション1→ドライブBのパーティション1
dd if=/dev/hda1 of=/dev/hdb1 conv=sync,noerror
*** Linux 起動ディスクの作成
※フロッピーはvfat で予めフォーマットしておく
mkbootdisk `uname -r`
*** bash 設定 .bashrc
# set aliases
alias ls='ls -Fh --color=auto'
alias df='df -h'
.bashrcを書き換えたら
source ~/.bashrc で設定反映
Solarisでbash使う場合
/etc/bashrc を作成
# /etc/bashrc を作成する
# vi /etc/bashrc
# User Prompt
PS1="\[\e[37;0m\][\u@\h]\\$\[\e[0m\] "
USER=`/usr/xpg4/bin/id -un`
export USER
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
# このファイルを作成した後に、ユーザーのホームディレクトリに
# .bash_profile をviで以下の内容を追加する
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# もう一つ.bashrc をviで以下の内容を追加する
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
*** XWindowを自動起動させないようにする(Linux)
vi /etc/inittab
level「5」⇒「3」に変更してOS再起動する
*** 空きメモリ
free -m
-m MB単位で表示
-s [秒数]単位で表示を更新
*** ログ確認
起動プロセスのログを確認
dmesg
もしくは
less /var/log/messages
*** SCSIカードのドライバが自動的にロードされないとき
(/etc/modules.conf(kernel2.4)/etc/modprobe.conf(kernel2.6)にカード情報がかかれている
にも関わらず、ドライバが組み込まれない場合)
#手動でモジュールを組み込んでみる。
/sbin/insmod [モジュール名]
/sbin/modprobe [モジュール名]
例)
/sbin/modprobe aic7xxx
scsi2 : Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA DRIVER, Rev 6.2.36
aic7880: Ultra Wide Channel A, SCSI Id=7, 16/253 SCBs
blk: queue f71af818, I/O limit 4095Mb (mask 0xffffffff)
(scsi2:A:0): 20.000MB/s transfers (20.000MHz, offset 15)
Vendor: I-O DATA Model: HDR-S160 Rev: 112S
Type: Direct-Access ANSI SCSI revision: 02
blk: queue f71af618, I/O limit 4095Mb (mask 0xffffffff)
Attached scsi disk sdc at scsi2, channel 0, id 0, lun 0
SCSI device sdc: 312500160 512-byte hdwr sectors (160000 MB)
sdc: unknown partition table
#正常に認識されれば、起動時に認識できるようにRAMDISKを作成し直す。
/sbin/mkinitrd -v -f /boot/initrd-[カーネルバージョン].img [カーネルバージョン]
※あとは、fdisk ⇒ mkfs ⇒ mount ⇒使用可能
FTP のバッチ化は可能か?
FTP や Telnet といった対話型プログラムを自動化したい場合は、expect を使うとよい。
expect は、スクリプトに従って、他の対話型プログラムに "話しかける" プログラムであり、
プログラムから何を期待され、正しい応答が何であるべきかをスクリプトで記述することができる。
シェルスクリプトとは違って、プログラムとユーザの対話が必要なプログラムを実行するのに便利である。
以下は、とある Anonymous サイトから、ある特定のファイルを受信する例。
#!/usr/bin/expect
set anonymous-ftp.site.hoge
set email
[email protected]
spawn ftp $site
expect "*ame*:" { send "anonymous\n" }
expect "assword:" { send "$email\n" }
expect "*> " { send "cd pub/RFC\n" }
expect "*> " { send "ascii\n" }
expect "*> " { send "hash\n" }
expect "*> " { send "get rfc-index.txt\n" }
expect "*> " { send "quit\n" }
send_user "script end\n"
close
exit 0
*** Windows XPの場合 Telnet
Microsoft Telnet> set ?……セット・コマンドのヘルプ
bsasdel BackSpace を Del として送信します
crlf ニューライン モード - リターン キーで CR および LF を送信します
delasbs Del を BackSpace として送信します
escape x telnet クライアント プロンプトで x をエスケープ文字として
入力します
localecho ローカル エコーを使用します
logfile x x は現在のクライアント ログ ファイルです
logging ログを有効にします
mode x x には console または stream が入ります
ntlm NTLM 認証を使用します
term x (x には ansi, vt100, vt52, または vtnt が入ります)
codeset x (x には Shift JIS,
Japanese EUC,
JIS Kanji,
JIS Kanji(78),
DEC Kanji または
NEC Kanji が入ります)
Microsoft Telnet> set localecho……ローカル・エコーをオンにする
ローカル エコー: オン……有効になった
Microsoft Telnet> unset localecho……ローカル・エコーをオフにする
ローカル エコー: オフ ……無効になった
◆telnet 接続のタイムアウトを無効にする
サーバ側で設定する。
unset autologout
*** iptablesによるポートフォワード(VNCなどで活用)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.86.41.9 --dport 5800 -j REDIRECT --to 5800
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.86.41.9 --dport 5900 -j REDIRECT --to 5900
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5800 -j DNAT --to-destination 10.86.41.9
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5900 -j DNAT --to-destination 10.86.41.9
↓リダイレクト
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.24.99 --dport 80 -j REDIRECT --to 80
↓フォワード
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.24.99
# ssh でパスワードなし認証させる(イントラ内ならまだOKだが公開サーバでは超危険!)
①接続元(クライアント)での設定
ssh-keygen -t rsa
何も入力せずにエンターキーを三回押す
②接続先(サーバ)のssh設定を変更する
chkconfig sshd on
vi /etc/ssh/sshd_config
#-------------------------------- ここから
#rootを許可する場合は
PermitRootLogin yes
# RSA 公開鍵認証を有効にする
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# ノーパスワード認証させる
PasswordAuthentication yes
PermitEmptyPasswords yes
#-------------------------------- ここまで
#終わったらsshd を再起動
service sshd restart
③接続元のrsa共有鍵を接続先サーバへ転送する
cat .ssh/id_rsa.pub | ssh root@fsv "mkdir -p .ssh && chmod 700 .ssh && cat > .ssh/authorized_keys && chmod 600 .ssh/authorized_keys"
④接続元からsshで接続先のサーバへログインできるか確認
ssh user@servername
で認証なしで入れるか確認する
*** postfix メールキューを削除
http://city.hokkai.or.jp/~hachikun/PostfixQueueDelete.html
◆xinet制御のタイムアウト設定?(Web上のサイトから引用)
xinetd.confの設定
/etc/xinetd.confには、各サービスに共通の設定をします。
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
includedir /etc/xinetd.d
基本的には、/etc/xinetd.confの設定はデフォルトのままで構いませんが、
DoS対策として、サービスプロセスへのアクセスタイムアウト秒数である
instanceをより小さな値に設定することもできます。 この値を変更すると、
xinetdから起動される全てのサービスプロセスのアクセスタイムアウト秒数
が変更されます。
ただし、あまり小さな値に設定すると、 提供すべきサービスもネットワーク
の負荷などが原因で正常に接続できなくなる可能性が出てきますので、
ネットワークの負荷とDoSの境界をどこに設定するか等を考えてから変更して
下さい。
◆PostgreSQLの接続状態を確認する。
SELECT COUNT(*) FROM pg_stat_activity;
*** RAMディスクのようにメモリを使う。
mount -t tmpfs -o size=10m tmpfs /dev/shm
mount -t tmpfs -o size=10m /dev/shm /hoge
*** プロセスの優先度を変更したい
renice [優先度] [PID]
-19 が最優先 20 が最低。
*** リソース制限をかける
ulimitを使います。
-a 制限を表示
-m メモリ
-v 仮想メモリ
-u 1人のユーザが利用可能なプロセス数
-t cpu時間
◆テキストファイルの特定の文字列を一括置換したい
perl -p -i.bak -e 's/nobody/apache/g' */ini/dbconst.ini
上記では、dbconst.iniのnobodyという文字列を全てapacheに置換し、
変更前のファイルはファイル名に.bakを付けてバックアップされる。
◆WindowsからLinuxへファイル転送したいんだけど?
Linux側でFTPが使用できなくて接続できないです...
この場合にファイル転送したいんだけど...どうしたらいい?
SSHが使用できれば、WinSCPと言うソフトをWindows側にインストールすれば
ファイルの転送を行うことが出来ます。
◆SSHでrootでログインしたいんだけど?
RedHatES 4,5では標準でrootでログインすることが可能です。
TurboやVineでは禁止されているようですので、
次のファイルをrootユーザでviで書き換える
vi /etc/ssh/sshd_config
下記の項目を追加する
PermitRootLogin yes
書き込んで終了したら
service sshd restart
で、sshdを再起動させる。
以上でrootでログイン可能になる。これはセキュリティ的にはマズイので
正式運用時は止めること。
最終更新:2011年06月17日 15:50