Linux TIPS

ユーザ

ユーザと追加するときはユーザidを設定して追加しましょう。移行のときとかめんどくさい...

useradd hoge ユーザ追加
useradd -u 100 -g 50 -m -d /home/hoge1 -s /bin/bash hoge1 -mでディレクトリの作成 -s /bin/falseにするとログイン不可のアカウントになります。
pw useradd -g hogegroup -d /dev/null -s /bin/false -n hogeuser freebsdの時
passwd hoge パスワード設定
userdel hoge ユーザ削除
groupadd hoge グループ追加
pw groupadd -n hoge freebsdの時
gpasswd -a hogeuser hogegroupe グループにユーザを追加

passwdでパスワードを変更できるが、/et/shadowと整合性が取れていないときには、エラーになる。(Authentication token manipulation error) このときはpwconvで整合性をとる。
shellは

/etc/shells

で指定されているものをしているする。
一括でユーザを登録したい場合は、適当にファイルを作成し、

emacs test.user

中身

hogeuser1:hogepass1:1101:1101:hogeu1:/home/hogeuser:/bin/bash
hogeuser2:hogepass2:1102:1102:hogeu2:/home/hogeuser:/bin/bash2

として、(左からユーザ,グループ,uid,gid,備考,ホーム,シェル)

newusers test.user

一括でパスワードを登録したい場合は、適当にファイルを作成し、

emacs test.pass

中身

hoge1:hogepass
hoge2:hogepass2

として、

chpasswd < test.pass

で読み込ませます。 もしくは

printf "hogepass1\n"|passwd --stdin hoge1
printf "hogepass2\n"|passwd --stdin hoge2

acl

特集:Linuxカーネル2.6で実現するACL (1/5)

psで端が切れる

wをつけてやります。

ps auxw -H

それでもだめな場合はさらにw  -Hはツリー上に出力
ちなみに特定のプロセスだけ抜き出す場合は、

ps aux |grep httpd

とかしますが、

ps aux |grep [h]ttpd

はちょっと感心した。
ちなみにVSZ(Virtual Set Size)は、仮想メモリで、RSS(resident set size)が実メモリです。
またSTATは(どこからか引用)

D    割り込み不可能なスリープ状態 (通常 IO 中) 
R    実行中または実行可能状態 (実行キューにある) 
S    割り込み可能なスリープ状態 (イベントの完了を待っている) 
T    ジョブ制御シグナルまたはトレースされているために停止中の状態 
W    ページング状態 (2.6.xx カーネルからは無効) 
X    死んだ状態 (見えるべきではない) 
Z    終了したが、親プロセスによって回収されなかった、消滅した (ゾンビ) プロセス 

BSD 形式で stat キーワードが用いられたときは、以下の添付文字が表示されることがある。

<    優先度の高いプロセス (他のユーザーに対して良くない) 
N    優先度の低いプロセス (他のユーザーに対して良い) 
L    実メモリのページをロックして利用している (リアルタイム処理やカスタム IO 向け) 
s    セッションリーダ 
l    マルチスレッド化されている (NPTL pthreads が行うように、CLONE_THREAD が使われている) 
+    フォアグラウンドのプロセスグループに含まれている 

su

Switch Userの略。

su - hoge

suの後ろに-をつけることにより、環境変数を引き継ぎ、hogeユーザになる。

yes

yesやyとか入力を何回も求められてめんどくさい場合は、

yes | hoge

また yがデフォルトになっているだけなので、

yes no | hoge

とかすればnoが入力されていく

コピー,削除

cp -rp ディレクトリ1 ディレクトリ2  <-- pで属性を維持
cp -a こっちのほうが楽。
rm -fr ディレクトリ <-- rで再帰的に削除

FreeBSD

cp -R ディレクトリ1 ディレクトリ2

http://www.jp.freebsd.org/man-jp/search.html

削除するときに

/bin/rm: 引数リストが長すぎます

とか出た場合は、ファイルの数が多くて、OSの制限にひっかかってますので、

ls  | xargs rm

として消してやりましょう。コピーの場合は、

ls *.* |xargs -i cp -a {} /hogepath

日付を指定してコピーしたりするとき

touch -t 200902010000 /work/oldstamp
touch -t 200902020000 /work/newstamp
find ./ -newer /work/oldstamp -and ! -newer /work/newstamp  -exec cp {} /work/test/{} \;

iノード

df -i

で使用している割合が参照できます。まだ枯渇したことはないですが、注意しましょう。 ITmedia エンタープライズ : Linux Tips「iノードってなに?」

network

  • ネットワークカード再起動
    /etc/sysconfig/network-scripts/ifcfg-eth*のファイルでONBOOT=yesとなってる場合は
    /etc/rc.d/init.d/network restart
    もしくは、
    ifdown eth0
    ifup eth0

ホスト名変更は、 /etc/hostsと/etc/sysconfig/network
デフォルトゲートウェイ変更は/etc/sysconfig/network
DNSの変更は/etc/resolv.conf

search hoge.domain
nameserver 192.168.1.1

DHCPは/etc/sysconfig/network-scripts/ifcfg-eth0を編集する。またゲートウェイもとってきている場合は、/etc/sysconfig/networkのGATEWAY=192.168.1.1も消しておきましょう。

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet

固定IPの場合は、

DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.2
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
TYPE=Ethernet

1 つのネットワークインターフェースに複数の IP アドレスを割り当てる

ifconfig eth0:0 192.168.100.190 netmask 255.255.255.0 broadcat 192.168.100.255

自動起動したい場合は、/etc/rc.d/rc.localにでも追加しておいてください。またあるホスト(例:192.168.1.1)にこのeth0:0を使いたい場合は、

route add -host 192.168.1.1 dev eth0:0

ssh

ssh -i .ssh/ninsyou hogeuser@192.168.1.1

glibcのバージョン

/lib/libc.so.6

wget

http://www.gnu.org/software/wget/wget.htmlからダウンロード 

./configure
make
make install

稼動中のサービスが知りたい

service --status-all

リソース確認(CPU使用状況、メモリ等)

topコマンドを使う。 -dでスクリーンを更新する間隔を指定 立ち上げている際に、

[space] 表示更新
M メモリ利用順にsort
T 時間順にsort
P CPU利用率順でsort
A 新しい順にsort
k プロセスをkill

TOP フィールドの説明とか
http://www.7key.jp/computer/top.html
http://www.math.kobe-u.ac.jp/~kodama/tips-free-memory.html

CPU、搭載メモリを調べる

cat /proc/cpuinfo
cat /proc/meminfo

ホスト名変更

/etc/sysconfig/networkを修正します。ついでに/etc/hostsも。その後

/etc/rc.d/init.d/network restart 

もしくは

hostname xxx.ffff.yyy

dnsdomainnameでドメイン確認

grep

テキストファイルからある文字を抜き出したいとき

grep kensakusitaimoji hoge.txt

find/grep/xargsコマンドを使いこなす業務で楽するためのUNIXテクニック集「検索」編

システム起動時に実行させたい

/etc/rc.localに記述しておきます。起動の順番として、 inittabファイルを参照しながら、

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

より、/etc/rc.d/rc.sysinitを起動します。

id:3:initdefault:

とあれば、

l3:3:wait:/etc/rc.d/rc 3

で/etc/rc.d/rc3.dの最初がSのファイルが実行されます。その後/etc/rc.localが実行されます。ではログインですが、

/etc/profile
~/.bash_profile
~/.bash_login
~/.profile

になりますので、必要な場所に書きましょう。

Linux起動の仕組みを理解しよう[init/inittab編]
Linuxの起動と起動スクリプト

tcpdump

送受信するパケットの情報がみえます。

tcpdump dst port 80 and src host 192.168.1.1  #送信元192.168.1.1からポート80に対してのダンプを取得する場合

参考:http://itpro.nikkeibp.co.jp/article/COLUMN/20070403/267311/

カーネルの情報

uname -a

サービスの登録

chkconfigを使います。/etc/init.dのファイルを登録します。そのファイルでは

# chkconfig: 345 80 15

とか記述しておいてください。345はランレベルです。

chkconfig --level 345 httpd on

ちなみに

/sbin/service --status-all

で/etc/init.dのディレクトリ以下に起動スクリプトをもつサービスの状況を表示します。

バックグラウンドで動かす

hoge &

で実行する。確認は

jobs

フォアグランドにするには

fg

yum 強制

まず、

yum install yum-utils

で、

yumdownloader hoge;

これでrpmが取得できるので、後は

rpm -ivh --force hoge.rpm 

RPM

rpmを探しているときhttp://rpm.pbone.net/で探していました。インストール時のオプションは、

  • v インストール/アンインストール時の情報表示オプション。-hオプションと一緒に使うと良い。
    #rpm -ivh hoge.rpm 
  • h インストール/アンインストールする際に '#' で表示します 情報表示オプション「-h」と一緒に使うと良い。
    #rpm -ivh hoge.rpm 
    その他問い合わせオプションコマンド
  • q パッケージがインストールされているかの問い合わせ。 インストールされていれば、バージョンも表示される。
    #rpm -q hoge
  • qi パッケージ情報をより詳細に表示する。
    #rpm -qi hoge
  • qs インストール先表示
    #rpm -qs hoge
  • qa インストールされている パッケージをすべて表示
    #rpm -qa
  • qf 特定のファイルがどのパッケージの物なのかを調べるオプション。
    #rpm -qf /root/.Xdefaults  
  • help RPMヘルプ参照。
    #rpm --help 
  • version 使用している rpm のバージョンを表示します。
    #rpm --version 
  • i 新規インストールオプション。 新規のみ許可、既にインストールされている場合はインストールされない。
    #rpm -i hoge.rpm 
  • U アップグレードオプション。 アップグレード用のチェックをして、既存のパッケージが無くてもインストールされる。
    #rpm -U hoge.rpm 
  • F アップグレードオプション。 アップグレード用のチェックをして、既存のパッケージがある場合のみインストールされる。
    #rpm -F hoge.rpm 
  • e アンインストールオプション。
    #rpm -e mozilla 

TAR

  • tarで圧縮・解凍
    • 圧縮
      # tar -cvf <圧縮ファイル名> <ターゲットファイル>
      # tar -cvf access_log01.tar /usr/local/apache/logs/access_log.*
       これは、/usr/local/apache/logs/access_log.*をaccess_log01.tarと言うファイルに圧縮する。と言う意味である。カレントディレクトリに作られる。tarは、圧縮と言うよりファイル連結のようなコマンドである。
    • 解凍
      # tar -xvf <解凍したいディレクトリ> <圧縮ファイル名>
      # tar -xvf /var/log/ /usr/local/apache/logs/access_log01.tar
       これは、/usr/local/apache/logs/access_log01.tarの圧縮ファイルを/var/log/へ解凍する。
  • tarファイルをZ形式(コンプレス)で圧縮・解凍
    • 圧縮
      # compress <ターゲットファイル>
      # compress access_log01.tar
       これは、access_log01.tarファイルを圧縮する。結果的に、access_log01.tar.Zと言う圧縮ファイルが出  来る。
    • 解凍
      # uncompress <ターゲットファイル>
      # uncompress access_log01.tar.Z
       これは、access_log01.tar.Zと言う圧縮ファイルをaccess_log01.tarと言うファイルに解凍する。  この場合は、カレントディレクトリに解凍される。この場合、access_log01.tar.Zと言う圧縮ファイルは  無くなる。
  • tarファイルをgz形式で圧縮・解凍
    • 圧縮
      # gzip <ターゲットファイル>
      # gzip access_log01.tar
       これは、access_log01.tarファイルを圧縮する。結果的に、access_log01.tar.gzと言う圧縮ファイルが出  来る。
  • 解凍
    # gunzip <ターゲットファイル>
    # gunzip access_log.tar.gz
     これは、access_log01.tar.gzと言う圧縮ファイルをaccess_log01.tarと言うファイルに解凍する。  この場合は、カレントディレクトリに解凍される。この場合、access_log01.tar.gzと言う圧縮ファイルは 無くなる。
  • tar.gzファイルをtarコマンドを使って一気に解凍する。
    # tar -zxvf <ターゲットファイル>
    # tar -zxvf access_log01.tar.gz
     これは、access_log01.tar.gzと言う圧縮ファイルをaccess_log.*の元ファイルに全て解凍する。  この場合は、カレントディレクトリに解凍される。
    # tar -zxvfC access_log01.tar.gz /tmp
     これは、access_log01.tar.gzと言う圧縮ファイルを/tmpディレクトリへ解凍する。
  • tar.Zファイルをzcatコマンドを使って一気に解凍する。
    # zcat <ターゲットファイル> | tar xvf -
    # zcat access_log01.tar.Z | tar xvf -
     これは、access_log01.tar.gzと言う圧縮ファイルをaccess_log.*の元ファイルに全て解凍する。  この場合は、カレントディレクトリに解凍される。

zip

解凍

unzip hoge.zip

圧縮する場合は、

zip hoge.zip hogefile

ディレクトリごと圧縮する場合は

zip -r hoge.zip hogedir

パスワード付き

zip -P password -e test.zip *.*

CtrlとCapsを入替

/etc/X11/XF86Config-4の

#    Option "XkbOptions" "ctrl:swapcaps"

の#をとります。fedoraの場合は、xorg.conf

起動しない

MIRACLE LINUXの場合ですが、インストールCDを入れて

boot: linux rescue

とします。そのままメッセージにしたがって進めていくと、プロンプトがでてきますので、/mnt/sysimageにルートがいます。 またsingleやemergencyでの起動も試しましょう。

boot: linux single
boot: linux emergency

http://www.redhat.co.jp/manual/Doc80/RH-DOCS/rhl-cg-ja-8.0/s1-rescuemode-booting-single.html
FreeBSDの場合では、 single user modeであげて、

boot -s

デフォルトのシェルを聞かれるので、デフォルトでよければenter。read onlyでマウントされているので、

mount -u /   読み書き可能でrootをマウント
mount -a -t ufs   /etc/fstabの内容をマウント
swapon -a    スワップを有効にする

FC4/FAQ/シングルモードで動作させるには?

パーティションサイズ変更

http://ftp.gnu.org/gnu/parted/からparted-1.6.19.tar.gzをダウンロードしました。解凍後

./configure
make; make install 

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/461useparted.html
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/462partedsfd.html
http://nobumasa-web.hp.infoseek.co.jp/partition/parted/

バックアップ

rsync

rsync -avz --delete /home/test/ filesrv:/home/backup/
-a : ファイルの属性などの情報を保ってコピーする
-c : checksum を使う
-u : より新しければ、更新しない
-z : ファイルを圧縮しながら転送する
-v : 転送情報を詳しく表示
-q : 転送情報を表示しない
--delete : 転送元のディレクトリにはないが、転送先のディレクトリにあるファイルを削除する
--exclude: 転送元のディレクトリのうち、転送しないファイルを指定する

ネットワーク越しにやるときは、バックアップ先のマシンに/etc/xinet.d/rshを起動しておいてください。 ここで/home/test/とすると/home/test/以下のファイルがコピーされ、/home/testとするとtestを含んでコピーされます。
参考:rsyncを使った熟練者レベルのバックアップ

dar 完全、差分、増分バックアップができ、サイズを指定できるので、CD-R等に納めることができたり、あるファイルのみをリストアできたりと多機能なツールです。 そもそもこの完全、差分、増分とは

完全バックアップ:その名の通りすべてバックアップです。
差分バックアップ:完全バックアップ後にそれ以降は完全バックアップしたもに対しての差分をバックアップします。
         そのため、時間がたつにつれてどんどん差分が大きくなっていきます。
増分バックアップ:完全バックアップ後に直前のバックアップに対しての増分をバックアップします。ですので、容量自体は大きくならないですが、
         すべての増分がないとリストアできません。

http://dar.linux.free.fr/からダウンロードします。

wget http://downloads.sourceforge.net/dar/dar-2.3.2.tar.gz?modtime=1162240068&big_mirror=0
tar xzvf dar-2.3.2.tar.gz
cd dar-2.3.2
./configure
make

あら?

/lib/libattr.a: No such file or directory

とエラーがでました。http://dar.linux.free.fr/doc/FAQ.htmlに従って、

ln -s /usr/lib/libattr.a /lib/libattr.a

として、再度makeするとうまくいきました。では再開

make install-strip

これでおわりです。

Commands are:
 -c  creates an archive
 -x  extracts files from the archive
 -d  compares the archive with the existing filesystem
 -t  tests the archive integrity
 -l  lists the contents of the archive
 -C  isolates the catalogue from an archive
 -+  merge two archives / create a sub archive

ではバックアップです。

dar -c /backup/homeall -g home

/backupがバックアップ先のディレクトリで、homeがバックアップの対象です。/homeとすると、

Parse error on command line (or included files): Cannot add an absolute path

となり、エラーになるので相対パスで指定します。このhomeallはbasenameでこの名前をベースネームとしてバックアップが作成されます。 実行すると

homeall.1.dar

とbasenameでファイルが作成されます。では差分です。

dar -c /backup/homeall-1 -g home  -A /backup/homeall

homeall-1が差分basenameで、backup/homeallが完全バックアップのbasenameです。実行すると

homeall-1.1.dar

で作成れます。ではリストア

dar -x /backup/homeall

とするとカレントディレクトリにリストアされます。差分も同じです。あるファイルのみリストアしたい場合は、

dar -x /backup/homeall -g home/hoge.txt

です。圧縮するときは -zでgzip -y でbzip2です。

コピー

cp -ar /var/lib/mysql/*** /home/backup
cp -ar /home/httpd/html /home/backup

dump

#二日前のファイルを削除
find /backup -mtime +1 -maxdepth 1 -name '*.zip' -exec rm -f {} \; 
#バックアップ実行
/sbin/dump -0f - /dev/hda1 2>> /backup/backup.log | gzip > /backup/hda1_`date +%m%d`.zip
#圧縮しな場合
dump -0f /backup/backup /dev/hda1
#リストア
zcat /backup/hda7_0307.zip | restore -tf - z

ユーザデータは/etcの

passwd
group
shadow

をとっておきましょう。

http://www-6.ibm.com/jp/developerworks/linux/040213/j_l-roadmap8.html
http://vision.featia.net/linux/rsync.jsp
http://www.double-h.com/linux/tipsmemo/others/general01.html
http://www.mediaweb.biz/database/cobalt_tips/cobalt_rsync.html
http://ito-web.dip.jp/server_conf/mondo_rescue.html
Linuxをシステムバックアップ

ls コマンドでディレクトリのみを表示する方法

できなかったけ?

find . -type d

これでみえるんだけど...

サブディレクトリ以下も権限を変えたい

たとえば、拡張子phpをすべて555にしたい場合は、

find . -name "*.php" -exec chmod 555 {} \;

簡単バックアップ

cp -a /hoge /backup/hoge`date +%w`

これをcronに登録しておきます。すると1週間バックアップされます。%dであれば一ヶ月です。

ディスク増設

http://www.a-yu.com/opt/fdisk.html
http://www.deer-n-horse.jp/linux/tips/extension_hdd.html

cron

各フォルダに実行ファイルをおきます。/etc/crontabの中身参照

分  時  日  月  曜日 実行者 実行オプション  実行コマンド
01   *   *   *   *    root   run-parts       /etc/cron.hourly
02   4   *   *   *    root   run-parts       /etc/cron.daily
22   4   *   *   0    root   run-parts       /etc/cron.weekly
42   4   1   *   *    root   run-parts       /etc/cron.monthly

最後はリターンで。run-partsを指定すると、ディレクトリ内にあるファイルをアルファベット順に実行してくれます。

/etc/cron.hourly  毎時:01分に自動実行
/etc/cron.daily   毎日:04時02分に自動実行
/etc/cron.weekly  毎週:日曜:04時22分に自動実行
/etc/cron.monthly 毎月:1日:04時42分に自動実行
分 0 - 59 ex. */15(15分毎)
時 0 - 23 ex. 0-4,8-12 
日 1 - 31 ex. 1-20,25 
月 1 - 12 ex. 1,6,12 
曜日 0 - 7 0と7は日曜日 

5分毎に実行

0-59/5 * * * * /test

該当する項目にカンマで区切って複数の数値を指定すると、その値ごとに実行される。たとえば次の例では10分ごとに実行される。

0,10,20,30,40,50 * * * *

以下のように指定すると、毎日5時~5時59分の1分ごとといった指定が可能。

* 5 * * *

/var/log/cron に、crond[xxxx]: (tmp.2081) ORPHAN (no passwd entry) というエラーが出ていました。これは/var/spool/cronにごみがいたみたいで、消しておきました。 各個人用には/var/spool/cronの配下に作成します。 また

run-parts /etc/cron.hourly

で/etc/cron.hourly以下のファイルが実行されます。このとき、拡張子があるファイルが無視されてたので、拡張子を消すと動いた。あと#/bin/shを書いておかないとexec format errで落ちたこともありました。

/etc/cron.allowがある場合は、rootのみ実行されます。中にユーザが設定されている場合はそのユーザとrootです。

http://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html

fstab

/etc/fstabで起動時に設定しているとマウントしてくれます。fs_spec fs_file fs_vfstype fs_mntops fs_freq fs_passnoで、例を挙げると

LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2

fs_mntops

defaults:rw、suid、dev、exec、auto、nouser、async などを用います  
auto:mount -a で、自動的にマウントされます  
noauto:mount -a で、自動的にマウントされません  
user:一般ユーザーによるマウントを可能
rw:読み取りと書き込み
ro:読み取り専用
grpquota:グループ・クオータ
usrquota:ユーザー・クオータ

fs_freq

0 ダンプする必要が無い
1 ダンプする必要がある

fs_passno

0 検査する必要が無い
1 検査する必要がある

ディレクトリの容量がしりたい。

du -s dir

オプションで-mはMバイト,-kはKバイト-bはバイト単位で表示します。サブディレクトリも表示されますが、総容量だけ知りたい場合は、-sをつけます。また

df -k

でマウント先の容量がわかります。

df -hT

見やすく表示します。

ディレクトリを一気につくりたい

mkdir -p hoge/hoge/hoge

メモリ

free -s 1 -c 300

メモリの情報が指定した秒数で表示される。 この場合は、1秒間隔で、300秒間出力する。

           total       used       free     shared    buffers     cached
Mem:       1018348    1002200      16148          0      91376     709944
-/+ buffers/cache:     200880     817468
Swap:      2031608        160    2031448

と表示さるとき、この-/+ buffers/cacheが実際に使用されている容量である。またwatchコマンドで継続的に表示することもできる。

watch -n 1 -d free

この-nが秒間隔で、-dが異なっている部分をハイライトで表示してくれる。

vmstat 1 300

で、1秒間隔で300秒間、CPU,I/Oと併せて表示してくれます。

http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/230989/

アンチウィルス

BitDefenderからBitDefender?-Console-Antivirus-7.0.1-3.linux-gcc29x.i586.rpmをダウンロードしました。後はrpm -ivhでインストールです。bdc --updateで定義ファイルを最新状態にします。また以下のコマンドでスキャンができます

bdc --all --arc --delete --log=/var/log/bitdefendef.log /home

nfk 文字コード変換

ない場合は、

wget http://www01.tcp-ip.or.jp/~furukawa/nkf_utf8/nkf204.tar.gz
tar xzvf nkf204.tar.gz
cd nkf204
make
make test
mv nkf /usr/bin/

使い方は、たとえば、

find . -name '*.*' | xargs nkf -e -Lu --overwrite

とすると、EUCに変換されます。引数ですが

-e EUCコードに変換
-s シフトJISに変換
-w UTF-8に変換
-L 改行モード Luでunix(LF),Lwで(CRLF),Lmでmac(CR)

パスワードの有効日数設定

chageを使います。

-l hoge hogeユーザの情報を表示
-M 10 hoge hogeユーザがパスワードを変更した後、変更が必要になるまで10日
-m 10 hoge hogeユーザがパスワードを変更した後、変更できるようになるまで10日
hoge 対話モードでhogeユーザの設定

一人ひとり設定するのはめんどくさい場合は、/etc/login.defsに設定しておく。

開いているファイル調べる

lsofを使います。

-u ユーザ
-g グループ
-i:80 80番ポートを開いてるプロセスを調べる
-c http コマンドがhttpで始まるプロセスを調べる
-i@192.168.1.1 192.168.1.1が開いているプロセスを調べる

制限をかける

ulimitを使います。

-a 制限を表示
-m メモリ
-v 仮想メモリ
-u 1人のユーザが利用可能なプロセス数
-t cpu時間

RAMディスクのようにメモリを使う。

mount -t tmpfs -o size=10m tmpfs /dev/shm
mount -t tmpfs -o size=10m /dev/shm /hoge

上限10MBのメモリのディスクを作成して、/hogeにマウントします。また常時使いたい場合は、/etc/rc.d/rc.localにでも記述しておきます。テンポラリでつかったり、もっと大きくとって、MySQLなどのDBをそっちに乗せて、高速化を図ったりしてみましょう。

共有ライブラリを検索する場所

/etc/ld.so.confに記述する。ただし、/libと/usr/libは既定で登録されている為、設定はない。また編集後は、 /sbin/ldconfigで反映

ldconfig -p | grep hoge.so

でキャッシュにあるかどうかを確認できる。

文字コード

/etc/sysconfig/i18n

LANG="ja_JP.UTF-8"

eucの場合

LANG="ja_JP.eucJP"

日本語(ja)で日本国。文字コードはEUC

nmap

ポートを調査します。http://www.insecure.org/nmap/からダウンロードしました。

wget http://download.insecure.org/nmap/dist/nmap-4.20.tgz
tar xzvf nmap-4.20.tgz
cd nmap-4.20
./configure
make 
make install

ポートを使っているプログラムを知りたい。

netstat -lutp
lsof -i:80,81

http://x68000.q-e-d.net/~68user/unix/pickup?netstathttp://www.atmarkit.co.jp/flinux/rensai/linuxtips/664useportps.htmlを参考に
netstatの詳細はhttp://www.linux.or.jp/JM/html/net-tools/man8/netstat.8.html

ポートの状況

netstat -ape

ルートのみログインの許可をしたい。

マシンのメンテナンスをする場合等につかえます。/etc/nologinファイルを作成します。その中身はなんでもよく、とりあえずメッセージをいれておきます。するとroot以外ではログインできなくなります。また可能かどうかは/etc/pam.d/loginの中身を見てましょう。この中に

auth       required     pam_nologin.so

とあれば、ルートのみのログインが可能です。

ログイン後にメッセージ表示

/etc/motdにメッセージを追加。通常0バイトのファイルである。

configureのオプションを忘れてしまった...

configureと同じ階層にconfig.statusというファイルがある場合、その中に記述がありますので、見てみましょう。

make installしたソフトの管理

pacoを使えば、rpmでなくても管理ができる!

wget http://downloads.sourceforge.net/paco/paco-2.0.6.tar.gz?modtime=1223591447&big_mirror=0
tar xzvf paco-2.0.6.tar.gz 
cd paco-2.0.6
./configure

ありゃ?エラーだ

checking for GTKMM... configure: error: The pkg-config script could not be found or is too old.  Make sure it

では、ftp://ftp.ring.gr.jp/pub/X/gnome/sources/gtkmm/2.4/より

wget ftp://ftp.ring.gr.jp/pub/X/gnome/sources/gtkmm/2.4/gtkmm-2.4.8.tar.gz
tar xzvf gtkmm-2.4.8.tar.gz  
cd gtkmm-2.4.8
./configure

む?今度は

configure: error: Library requirements (glibmm-2.4 >= 2.4.0 atk >= 1.6.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.

んー とりあえずglibmmからいくか。ftp://ftp.ring.gr.jp/pub/X/gnome/sources/glibmm/2.4/より

wget ftp://ftp.ring.gr.jp/pub/X/gnome/sources/glibmm/2.4/glibmm-2.4.8.tar.gz
tar xzvf glibmm-2.4.8.tar.gz 
cd glibmm-2.4.8
./configure

今度は、

configure: error: The pkg-config script could not be found or is too old.  Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full

path to pkg-config.

To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.

んーーー 無限地獄.. これLeopardでやっているんで、Linux等であれば、普通にいけるかも。 では、http://pkg-config.freedesktop.org/wiki/より

wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz
tar xzvf pkg-config-0.23.tar.gz 
cd pkg-config-0.23
./configure
make
make install

さてもう一度glibmmを

./configure

エラーが変わったぞ。

configure: error: Package requirements (sigc++-2.0 >= 2.0.0 glib-2.0 >= 2.4.0 gobject-2.0 >= 2.4.0 gmodule-2.0 >= 2.4.0) were not met.

では、ftp://ftp.ring.gr.jp/pub/X/gnome/sources/libsigc++/2.0/より

wget ftp://ftp.ring.gr.jp/pub/X/gnome/sources/libsigc++/2.0/libsigc++-2.0.18.tar.gz
tar xzvf libsigc++-2.0.18.tar.gz 
cd libsigc++-2.0.18
./configure
make
make install

ちょっと先は遠いなー 今度はCentでやってみよう。
"make install"したソフトウェアを管理できる超便利ツール「Paco」
link集/バージョン管理システム

ソフトウェアRAID

インストール画面のディスクパーティションの設定でDisk Druidを使用して手動パーティション設定を選択し、 ファイルシステムタイプでソフトウェアRAIDを選択し、ハードディスクも選択して、まず作成していきます。 このとき、シリンダで分ける場合は、右端でダブルクリックすると、その画面で表示されます。 swapはそのままで作成しておきます。そうでなくてもかまいません。お好みで。 同じことをもう一本のHDDにも行い、その後でRAIDボタンを選択し、RAIDデバイスを作成をしていきます。 ではインストールが終わりましたらブートローダのコピーをしておきます。grubと入力して、

device (hd0) /dev/hdb
root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf 
quit

hdbではなくsdbの場合は

device (hd0) /dev/sdb
root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf
quit

それでは

more /proc/mdstat

で見てみましょう。

Personalities : [raid1]
md0 : active raid1 hdb1[1] hda1[0]
 104320 blocks [2/2] [UU]

であればとりあえずOKです。 [2/2] [UU] となっていますが、 [2/1] [U_]となっていれば片方が動作していません。 壊れたらこんな感じのメールが... メールは/etc/mdadm.confで送信先を確認しておきましょう。

A Fail event had been detected on md device /dev/md3.

さて2台目も同じようにやってみましたが、

Personalities : [raid0] [raid1]
md0 : active raid0 hdb2[1] hda2[0]
     131539968 blocks 256k chunks

あれ?なんじゃこりゃ?失敗したのかな?ちょっと調査... どうも作成時にRAID0を選択してなかったようですね。raidtoolsを使おうとしたらないといわれました。どうも2.4までで、2.6からはmdadmを使うようです。

mdadm --query /dev/md3
/dev/md3: 48.83GiB raid1 2 devices, 0 spares. Use mdadm --detail for more detail.
/dev/md3: No md super block found, not an md component.

これでraid1で2つのデバイスより構成されていることがわかります。詳細にみるには

mdadm --detail /dev/md3
       Version : 00.90.01
 Creation Time : Tue Jul  5 01:43:51 2005
    Raid Level : raid1
    Array Size : 40957568 (39.06 GiB 41.94 GB)
   Device Size : 40957568 (39.06 GiB 41.94 GB)
  Raid Devices : 2
 Total Devices : 1
Preferred Minor : 2
   Persistence : Superblock is persistent

   Update Time : Wed Jul 25 11:53:11 2007
         State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
 Spare Devices : 0

          UUID : 804f4246:8ee45dfb:61f65e69:124a6043
        Events : 0.163354

   Number   Major   Minor   RaidDevice State
      0       0        0        -      removed
      1       3       69        1      active sync   /dev/hdb5

ここで、Stateにdegradedが表示されている場合は、障害が発生しています。んー しょがない。とりかえるか.... ということで、ディスク交換して、

fdisk -l /dev/hda

でシリンダを控えておいて、

fdisk /dev/hdb

でパーティションをhdaと同じようにふっていきます。後raidにしたいパーティションの種類をfd (linux raid auto) にして、最後wで書き込みして終わります。後は

fdisk -l /dev/hdb

で確認しておきます。さてここまではパーティションを作成しただけですので、raidに追加しましょう。

mdadm --manage /dev/md0 --add /dev/hdb1
mdadm --manage /dev/md1 --add /dev/hdb2

これで/dev/md0に追加されますので、

more /proc/mdstat

で確認すると、新しいディスクにデータがコピーされている様子がわかります。

SoftwareDesignの2005/3月号に記事があります。本もでてますね。 Linux RAID入門

ソフトウェアRAIDに障害が発生した時の確認方法
OSをRAID構成でインストール
CentOS5をインストールしよう その2~インストール中にソフトウェアRAIDを構築しよう~
ソフトウェアRAIDの導入
ソフトウェアRAID1のつくりかた
The Software-RAID HOWTO
ソフトウェアRAIDの構築--パーティションの構築

mount

Windows2003 DCに対してマウントしたい場合。普通にやると、cli_negprot: SMB signing is mandatory and we have disabled itってなエラーが出たとき。

mount.cifs //192.168.1.10/test /mnt/test -o username=hoge,passwrd=hogepass

じゃないWindowsの場合

mount -t smbfs -O username=hoge,password=hogepass //192.168.1.10/test /mnt/test

ここでsmbfsがサポートされていない場合はcifsにしてみる。下記コマンドで使用できるファイルシステムを確認

cat /proc/filesystems

nfs

mount -t nfs 192.168.1.2:/ /mnt/hoge

参考:http://www.linux.or.jp/JM/html/util-linux/man8/mount.8.html

パフォーマンス

IDEのパラメータを調整します。

hdparm /dev/hda
/dev/hda:
multcount    = 16 (on)
IO_support   =  0 (default 16-bit)
unmaskirq    =  0 (off)
using_dma    =  1 (on)
keepsettings =  0 (off)
readonly     =  0 (off)
readahead    = 256 (on)
geometry     = 19929/255/63, sectors = 163928604672, start = 0

このIO_supportでdefault 16-bitとなってますが、変更しましょう。まず

hdparm -Tt /dev/hda

Timing cached reads:   2200 MB in  2.00 seconds = 1099.07 MB/sec
Timing buffered disk reads:  164 MB in  3.00 seconds =  54.64 MB/sec

を控えておきます。この、32bitに変更してみます。

hdparm -c3 /dev/hda

いろいろと調整しみましょう。

参考:
http://www.linux.or.jp/JM/html/hdparm/man8/hdparm.8.html
Linuxのパフォーマンスを改善する3つのTips

ログアウトしてもプログラムを実行する。

nohup hoge &

としますと、HUPシグナルを無視して実行してくれます。出力は~/nohup.outにされてます。

コマンドやアプリケーションが、どんなライブラリをダイナミックリンクしているのか調べるには?

ldd

macの場合は

otool -L

ディスクの負荷を調べたい。

sysstatをインストールします。 http://perso.wanadoo.fr/sebastien.godard/からダウンロードしました。

wget ftp://ibiblio.org/pub/linux/system/status/sysstat-6.0.1.tar.gz
tar xzvf sysstat-6.0.1.tar.gz
cd sysstat-6.0.1
make config

とりあえずデフォルトでいきました。

make
make install

面倒な場合は、

yum install sysstat

では

iostat

また

sar 1 5

とかするとCPUとIOの状況を一秒間隔で5回表示してくれたりします。 またmpstatというCPU 使用率を調べるコマンドもあります。 http://www.atmarkit.co.jp/flinux/rensai/root07/root07b.html

ハードディスクを調べる

ハードディスクのセルフテスト shortで2分ぐらい

smartctl -t short /dev/hda

ログは

smartctl -l selftest /dev/hda

温度を調べる

smartctl -a /dev/hda

を実行すると、

194 Temperature_Celsius     0x0032   042   253   000    Old_age   Always       -       44

と出力されるので、右端が温度 -aですべての情報が表示される。この194とう項目IDは http://ja.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technologyを参考に。また

Device: /dev/hda, 1 Currently unreadable (pending) sectors

こんなログがmessagesにでていたら、一度セルフテストを実行し、-a

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       60%     17878         234152622

この234152622を確認します。

fdisk -lu /dev/hda
Disk /dev/hda: 163.9 GB, 163928604672 bytes
255 heads, 63 sectors/track, 19929 cylinders, total 320173056 sectors
Units = セクタ数 of 1 * 512 = 512 bytes

 デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *          63      208844      104391   fd  Linux raid 自動検出
/dev/hda2          208845   131749064    65770110   fd  Linux raid 自動検出
/dev/hda3       131749065   234147374    51199155   fd  Linux raid 自動検出
/dev/hda4       234147375   320159384    43006005    5  拡張領域
/dev/hda5       234147438   316062809    40957686   fd  Linux raid 自動検出
/dev/hda6       316062873   320159384     2048256   82  Linux スワップ

どうも/dev/hda5にあるようです。

不良セクタの解消

Xlib: connection to "display:0.0" refused by server

xhost + ホスト名

で追加してやりましょう。

TCP転送

rinetdを使えばできるらしい。検証はしてません。

bashで履歴操作

Ctrl+r

とすると

(reverse-i-search)`':

って変わるので、文字を入力すると履歴を後方検索してくれます。逆はCtrl+sなんですが、

stty -a

で確認すると、

stop = ^S;

ってなってますんで、とまっちゃうので、

stty stop ^x 

とかに変更しておけばいいのですが、Ctrl+sを押すと

(i-search)`':

ってなります。

configure: error: C++ preprocessor "/lib/cpp" fails sanity check

yum install gcc-c++

etc

http://www.linuxworld.jp/etc/

CPU情報

cat /proc/cpuinfo

http://www-06.ibm.com/jp/developerworks/linux/030314/j_l-htl.html
http://www-06.ibm.com/jp/developerworks/linux/040227/j_l-web26.html

カーネルパニック後の再起動?

echo 30 > /proc/sys/kernel/panic

リカバリ用Linux

リカバリに特化しているlinuxだそうです。RIPlinux

fedora8で解像度が変わらん!

メニューのシステム>管理>ディスプレイから選択すると解像度が変わらないので、設定>ハードウェア>画面の解像度から変更すると変わりました。次ログインし直すと、やたら文字が大きくなっていたので、画面を右クリックして、背景の変更を選択し、フォントタブの詳細ボタンをクリックして、解像度の値を変更しておきました。

CentOS6.5 インストール時のパッケージ追加

インストールのときに種類を選んで「今すぐカスタマイズ」を選びます。
その後パッケージグループを選びますが、そのままでは最小のパッケージしかインストールされません。
chroot化されたBINDなどを最初からインストールしたい場合はパッケージグループを選んだ後「追加パッケージ」を押してパッケージグループの詳細から追加するパッケージを選びましょう。

CentOS6.5 インストール後のLVMサイズ変更

CentOS6をインストールするとLVMで/ディレクトリのサイズを小さく /homeディレクトリを大きく確保されてしまいます。

/dev/mapper/VolGroup-lv_root
                    ext4    50G   47G   37M 100% /
tmpfs               tmpfs  3.9G     0  3.9G   0% /dev/shm
/dev/sda3           ext4   477M   61M  391M  14% /boot
/dev/mapper/VolGroup-lv_home
                    ext4   399G   20G  360G   6% /home

rootが50GBでhomeが399GBです。 このままMySQL等を使用しているといつかこんな感じで怒られます。

got error 28 from storage engine

なのでLVMのサイズを変更します。 今回はrootとhomeのサイズを逆にします。

※必ずバックアップを取ってから作業しましょう!!

1.homeディレクトリアンマウント

umount /home

2.ファイルシステムチェック

fsck.ext4 -f /dev/mapper/VolGroup-lv_home

e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/VolGroup-lv_home: 4190/26574848 files (0.5% non-contiguous), 6729788/106281984 blocks

3./homeファイルシステムサイズを50GBに変更

resize2fs /dev/mapper/VolGroup-lv_home 50G

resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/VolGroup-lv_home to 13107200 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_home is now 13107200 blocks long.

4./home論理ボリュームを50GBに変更

lvreduce -L 50G /dev/mapper/VolGroup-lv_home

WARNING: Reducing active logical volume to 50.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_home? [y/n]: y ※データ破壊される恐れあるけど、本当にいいの?y
Size of logical volume VolGroup/lv_home changed from 405.43 GiB (103791 extents) to 50.00 GiB (12800 extents).
Logical volume lv_home successfully resized

5.ext4で/homeをマウント

mount -t ext4 /dev/mapper/VolGroup-lv_home /home

6.ファイルサイズ確認

df -Th

/dev/mapper/VolGroup-lv_root
                    ext4    50G   47G   37M 100% /
tmpfs                tmpfs  3.9G     0  3.9G   0% /dev/shm
/dev/sda3            ext4   477M   61M  391M  14% /boot
/dev/mapper/VolGroup-lv_home
                    ext4    50G   20G   28G  42% /home

無事に50GBに変更されました。 次にrootディレクトリを拡張します。

1./root論理ボリュームを399GBに変更

lvextend -L 399G /dev/mapper/VolGroup-lv_root

Size of logical volume VolGroup/lv_root changed from 50.00 GiB (12800 extents) to 399.00 GiB (102144 extents).
Logical volume lv_root successfully resized

2./rootファイルシステムサイズを変更

resize2fs /dev/mapper/VolGroup-lv_root

resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-lv_root is mounted on /; on-line resizing required
old desc_blocks = 4, new_desc_blocks = 25
Performing an on-line resize of /dev/mapper/VolGroup-lv_root to 104595456 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_root is now 104595456 blocks long.

3.サイズ確認

df -Th

/dev/mapper/VolGroup-lv_root
                    ext4   393G   47G  327G  13% /
tmpfs                tmpfs  3.9G     0  3.9G   0% /dev/shm
/dev/sda3            ext4   477M   61M  391M  14% /boot
/dev/mapper/VolGroup-lv_home
                    ext4    50G   20G   28G  42% /home

無事に変更されました。
最後に一度再起動をして正常に起動できればOK
インストール時に変更できれば変更しておくようにしましょう。

リンク

コマンド集

ホームディレクトリの引越し

ブートCD作成

BashとBashのプロンプト

Linuxにデフラグが無い理由

Linux を電源ボタンで shutdown (by apmd)

Linuxのネットワークで悩まない10のコツ

第7回 Linux印刷システムの仕組みと設定

Linuxにソフトウェアをインストールする際にやってしまいがちな失敗10選

「実現したいことを計算機の問題に置き換えることが『技術力』」、伊藤CTOが“はてな流”大規模データ処理の極意を語る

一読しておきましょう。

コメント

  • #comment

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-12-03 (水) 13:42:00 (3451d)