がらくたネット


Linuxのメモメモ

Linuxのメモメモ

linux関連のメモメモ

mailx

mailxでSMTP-AUTH with Submission

mailx -v -s "$EMAIL_SUBJECT"
-S smtp-use-starttls
-S ssl-verify=ignore
-S smtp-auth=login
-S smtp=smtp://smtp.gmail.com:587
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)"
-S smtp-auth-user=$FROM_EMAIL_ADDRESS
-S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD
-S ssl-verify=ignore
$TO_EMAIL_ADDRESS

で、-S部分を~/.mailrcに設定しておけばいつでも利用可能!

vi ~/.mailrc
set smtp-use-starttls
set ssl-verify=ignore
set smtp-auth=login
set smtp=smtp://smtp.gmail.com:587
set from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)"
set smtp-auth-user=$FROM_EMAIL_ADDRESS
set smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD
set ssl-verify=ignore

このほかにもmailx君は多数の設定項目があるので 詳しくはmanとかWebとか参考するのがよい

BIOS情報

Linux上からBIOS情報読むのってどうだっけ?

dmidecode

いっぱい出るから要注意。(笑

dmidecode -s KEYWORD → KEYWORDの文字列を有しているDMI情報のみを表示
有効なKEYWORDは以下
  bios-vendor
  bios-version
  bios-release-date
  system-manufacturer
  system-product-name
  system-version
  system-serial-number
  system-uuid
  baseboard-manufacturer
  baseboard-product-name
  baseboard-version
  baseboard-serial-number
  baseboard-asset-tag
  chassis-manufacturer
  chassis-type
  chassis-version
  chassis-serial-number
  chassis-asset-tag
  processor-family
  processor-manufacturer
  processor-version
  processor-frequency

例えば
# dmidecode -s baseboard-product-name
X7SPA-HF
とか、
TYAN Toledo i3210W/i3200R S5211
とか

ちなみにこれ、dmidecodeっていうRPMパッケージに含まれている。そのままやんけ。/usr/sbin/dmidecodeが実行バイナリ君です。

viの規定値設定

viを開いた時にタブが4文字で行数表示させて自動インデントする設定

$ cd
$ vi .exrc
set tabstop=4
set number
set autoindent

viで文字コード変更

vi hogehogeでファイルを開いた後に編集文字コードを変更

:e ++enc=sjis

たったこれだけでUTF-8環境でShift_JISファイルの編集ができる

ロカールDVDからのyum

マウントしたDVDからyumを実行する方法

vi /etc/yum.repo.d/CentOS-Media.repo
baseurl=file:///media/  ←追加
        file:///media/CentOS/

mount /dev/cdrom /media
yum --disablerepo=\* --enablerepo=c5-media install package-name
便利ぃぃ。

便利なリポジトリ

CentOSではyumコマンドでパッケージRPMをインストールできる。インストール先はリポジトリサーバーと呼ばれる箇所から引っ張ってくる。このリポジトリで便利なものがあるのでメモ。各々インストール後は/etc/yum.repos.dにリポジトリファイルがインストールされるので、必要箇所を修正する必要がある。

    • DAGは多くのパッケージを扱ってる。
      CentOS5 x86の場合
      # rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
  • EPELhttp://fedoraproject.org/wiki/EPEL、Extra Packages for Enterprise Linuxの略
    • Fedoraの拡張パッケージリポジトリ、remiも利用している
      CentOS5 x86の場合
      # rpm -Uhv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
    • 最新バージョンのRPMを扱ってる、EPELがインストールされていることが必要
      CentOS5 x86の場合
      # rpm -Uhv http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
  • wing
    • 国産リポジトリ
      # wget http://wing-net.ddo.jp/wing/wing.repo

初回起動時のSetup Agent

初回起動時にSetup Agentが実行される
実行後は

cat /etc/sysconfig/firstboot
RUN_FIRSTBOOT=NO
が作成される

パスワード文字列

linuxの暗号化パスワード文字列作成方法

# openssl passwd -1 <パスワード文字列>
$1$DTebWsys$NaW9CZiczjVglHhxHuQWA/
色んなところで使えるかもね。

EL6系のやつ

#!/bin/perl
#SHA-512の文字列を生成
#引数に元となる文字列を指定
#saltは乱数16文字で設定
 
## yum install perl-String-Random
use String::Random;
 
my $input = $ARGV[0];
if ( $input eq "" ){
        print "not input. exit...\n";
        exit 1;
}
 
##perl -e 'print crypt("Red Hat", "\$6\$salt\$") . "\n"'
 
my $rand = String::Random->new();
my $salt = $rand->randregex('\w{16}');
my $str = crypt("$input", "\$6\$$salt\$");
 
print $str . "\n";

RPM

rpm -qpl hoge.rpm hoge.rpmファイルの中身を表示

RPMからファイルを取り出す 直接取り出しできないので一度RPMをcpioに解凍してから取り出す

# mkdir /tmp/hoge; cd /tmp/hoge
# rpm2cpio hoge.rpm | cpio -id
# ls

cpio -id カレントディレクトリに全て解凍
cpio -i hoge.spec hoge.specを解凍

ログローテート

/var/lib/logrotate.status ログローテートステータスファイル

このステータスファイルに日時情報が含まれているので適宜修正して実行する必要あり

テストモード
# logrotate -dv ローテート設定ファイル

EXT3

ext3ファイルシステムの制限値?

  • iノード数制限がある
    # df -iT
    Filesystem    Type    Iノード  I使用   I残り I使用% マウント位置
    /dev/mapper/VolGroup00-LogVol00
                  ext3   1270464   97617 1172847    8% /
    /dev/sda1     ext3     26104      39   26065    1% /boot
    tmpfs        tmpfs     64436       1   64435    1% /dev/shm
  • mkdirやrenameする時にチェックされているらしい。最大数は32000。
  • ファイルシステム毎にiノード数が設定される。
  • フォーマット時にiノード数を決められる。

CPU

CPU利用率について

  • LoadAverageは実行待ちプロセス数
  • CPU使用率(CPU Usage)はssCpuRawSystemとssCpuRawUser、ssCpuRawNiceの値
  • ssCpuRawは1tickごとの累積値
  • 1tickは10ms(kernelで設定変更可能)

OID .1.3.6.1.4.1.2021.10.1.5.1と.1.3.6.1.4.1.2021.10.1.5.2はCPU Load AverageのLoadInt
つまり、この値は100%率で正数化された値が入っていることになる
100で1%を表すことになる

LoadAverageは待ちプロセス数なので、コア数以上になるという事は待ちプロセスが発生していることを意味する

メモリ

Linuxは起動後、物理メモリの空き領域を自動的にCacheとBufferに割り当てる

各プロセスのメモリ利用量に応じてCacheとBufferを調整する

各プロセスは処理が完了すれば利用していたメモリ空間を開放する

  • メモリ使用量はtotal-(Cache+Buffer)
  • 空きメモリ量はfree+(Cache+Buffer)
  • freeコマンドは引数なしでKbyte単位
  • freeコマンドの-/+ buffers/cache行が該当する

$ free
             total       used       free     shared    buffers     cached
Mem:        515488     508924       6564          0     147968     172972
-/+ buffers/cache:     187984     327504
Swap:      1048568         60    1048508
この場合は以下となる

  • メモリ使用量=508924-(172972+147968)=187984 Kbyte
  • 空きメモリ量=6564+(172972+147968)=327504 Kbyte

TOPコマンドで表示される各意味

VIRT(kb) タスクが使用している仮想メモリ量 = SWAP + RES
RES(kb) タスクが使用しているスワップされない物理メモリ量 = CODE + DATA
SWAP(kb) 総仮想メモリイメージのうちスワップアウトされた量
%MEM 物理メモリ占有率 = RES

psコマンドで表示される各意味

RSS 物理メモリ
VRS 仮想メモリ

SNMPでは次のようになる

snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.4
UCD-SNMP-MIB::memIndex.0 = INTEGER: 0
UCD-SNMP-MIB::memErrorName.0 = STRING: swap
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 4194296
UCD-SNMP-MIB::memAvailSwap.0 = INTEGER: 4194296
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 4149624
UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 2955112
UCD-SNMP-MIB::memTotalFree.0 = INTEGER: 7149408
UCD-SNMP-MIB::memMinimumSwap.0 = INTEGER: 16000
UCD-SNMP-MIB::memShared.0 = INTEGER: 0
UCD-SNMP-MIB::memBuffer.0 = INTEGER: 196204
UCD-SNMP-MIB::memCached.0 = INTEGER: 755744
UCD-SNMP-MIB::memSwapError.0 = INTEGER: 0
UCD-SNMP-MIB::memSwapErrorMsg.0 = STRING:

free -k
             total       used       free     shared    buffers     cached
Mem:       4149624    1192940    2956684          0     196204     755744
-/+ buffers/cache:     240992    3908632
Swap:      4194296          0    4194296

  • memTotalSwap.0(.1.3.6.1.4.1.2021.4.3.0)がSwap全体量
  • memAvailSwap.0(.1.3.6.1.4.1.2021.4.4.0)がSwap残り量
  • memTotalReal.0(.1.3.6.1.4.1.2021.4.5.0)が物理メモリ量
  • memAvailReal.0(.1.3.6.1.4.1.2021.4.6.0)が物理メモリ空き容量
  • memTotalFree.0(.1.3.6.1.4.1.2021.4.11.0)が物理メモリ空き容量+Swapメモリ空き容量
  • memBuffer.0(.1.3.6.1.4.1.2021.4.14.0)がBuffer量でfreeのbuffersと同じ
  • memCached.0(.1.3.6.1.4.1.2021.4.15.0)がCache量でfreeのChachedと同じ

メモリ解放?

メモリ解放の魔法。kernel2.6.16からできるようになったらしい。メモリのゴミを解放してくれるんだそうだ。つまり空きメモリが増えるって事です。

# free
             total       used       free     shared    buffers     cached
Mem:        506124     496912       9212          0     273392     127848
-/+ buffers/cache:      95672     410452
Swap:      2097144          0    2097144

# sysctl -w vm.drop_caches=1
vm.drop_caches = 1

# free
             total       used       free     shared    buffers     cached
Mem:        506124     106804     399320          0        252      16900
-/+ buffers/cache:      89652     416472
Swap:      2097144          0    2097144
う~ん。空き容量が9212から399320になった。すごい魔法だ…

これは原因があるのです。ページキャッシュ等のデータで最後にアクセスされてからある程度時間が経って解放可能な状態のメモリ空間を保持し続けてます。これを手動で解放するのがdrop_cacheです。1ではページキャッシュのみを解放し、3ではSlabキャッシュも解放します。Slabキャッシュはディレクトリのメタデータ情報を格納するdentryやファイルのメタデータ情報を格納するinode構造体などをキャッシュしているカーネル内のメモリ領域です。

Quota

  • パーティション単位で設定
  • /etc/fstabにQuota指定 → usrquota,grpquota
  • パーティションのルートにaquota.userとaquota.groupを作成しパーミッションを600に
  • 再起動後、quotacheck -m -v <ファイルシステム名>で初期化
  • repquota -aで確認
  • edquotaでquotaを編集
  • edquota -p protonameでprotonameで指定されたユーザQuotaを雛形として複製する
  • setquotaでコマンドライン編集可能
  • hardlimitを超えるとファイル作成やシンボリック作成は不可
  • softlimitを超えるとエラー表示されるがファイル作成が可能
  • 猶予期間はsoftlimitを超えてからhardlimitまでの間で利用可能な経過時間のこと、既定値はblock-grace、inode-grace共に7日間

setquota

setquotaはコマンドラインによるquotaエディタ

# setquota -u ユーザ名 block-softlimit block-hardlimit inode-softlimit inode-hardlimit filesystem
# setquota -T -u ユーザ名 block-grace inode-grace filesystem

ユーザgarakutaの/homeにソフトリミット100MB、ハードリミット200Mを実施
# setquota -u garakuta 1024000 2048000 0 0 /home

  • -Tはソフトリミットが実施された場合、個々のユーザ・グループに対する猶予時間を設定。単位は秒。unsetも指定可能
  • 値0は対応パラメータを設定しないとの意味
  • 成功したら戻り値は0、失敗したらコンソールにエラー表示した上で戻り値1

色出し

echo出力で色出し

  1. 環境変数を設定する
    export SETCOLOR_SUCCESS="echo -en \\033[1;32m"  →緑
    export SETCOLOR_ERROR="echo -en \\033[1;31m"   →黄
    export SETCOLOR_WARNING="echo -en \\033[1;33m"  →赤
    export SETCOLOR_NORMAL="echo -en \\033[0;39m"   →白
  2. echo出力前に色指定する
    $SETCOLOR_SUCCESS
    echo "色つき文字"
  3. echo出力後は通常出力に戻す
    $SETCOLOR_NORMAL

これでコンソールに色が出せる!

FTP自動化

$1はサーバ名/IPアドレス
$2はユーザ名
$3はパスワード

#!/bin/bash

## MAIN
DC_DIR=httpdocs
BK_DIR=/home/hos/BKDATA/

cd ${BK_DIR}

### START
ftp -i -v -n $1<<END
    user $2 $3
    cd ${DC_DIR}
    ascii
    mget *.html
    quit
    END

### EXIT


wget -mck --passive-ftp ftp://FTPサーバ名/ディレクトリ名 --ftp-user=FTPユーザ名 --ftp
-password=FTPパスワード

クロック

clockの設定内容

# cat /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=false
ARC=false

ZONE ゾーンファイル名、/usr/share/zoneinfoディレクトリを参照する
UTC tureならハードウェアクロックは世界標準時にセット、falseならローカル時間
ARC falseなら標準UNIXエポックが使用中、その他の値は不明…

ホスト名変更

仮想化等でコピーした時のホスト名変更

/etc/hosts
127.0.0.1    [FQDN名] [host名] localhost.localdomain localhost

/etc/sysconfig/network
HOSTNAME=[FQDN名]