2009年6月15日

 

bashでシェル自身のファイル名を取得する

bashでシェル自身のファイル名を取得する。
パラメータ展開を利用する。

#/bin/bash
echo ${0##*/}

ラベル:


2008年11月27日

 

psでプロセス毎のCPU使用率、スレッド数、メモリ使用率、物理メモリサイズ、仮想メモリサイズを出力

psでプロセス毎のCPU使用率、スレッド数、メモリ使用率、物理メモリサイズ、仮想メモリサイズを出力

$ ps -p [PID] -o pid,ppid,user,etime,time,pcpu,nlwp,vsz,rss,pmem,args

プロセスのコマンドの文字列でgrepする場合
$ ps -A -o pid,ppid,user,etime,time,pcpu,nlwp,vsz,rss,pmem,args | egrep 'ptn'

監視したいときは以下のようなシェルを組む。

#!bin/sh
PID=$1
INTERVAL=10

while true
do
ps -p ${PID} --no-headers -o pid,ppid,user,etime,time,pcpu,nlwp,vsz,rss,pmem,args
sleep ${INTERVAL}
done

シェルを組むのも面倒な時は、shになってからコマンドラインで実行。

$ sh
$ while true; do ps -p [PID] --no-headers -o pid,ppid,user,etime,time,pcpu,nlwp,vsz,rss,pmem,args;sleep 10; done

ラベル:


 

psをgrepした結果にgrep自身のプロセスを出力させない

psの結果をgrepした結果にgrep自身のプロセスを出力させない方法。
以下、httpdのプロセスを出力させる場合。

# grepの-vオプションを使う
$ ps aux | egrep 'httpd' | egrep -v 'grep'

# 検索文字列に文字クラスを使用してgrepの結果にかからなくする
# ps aux | egrep '[h]ttpd'

ラベル:


2008年11月14日

 

awk 1ライナー 列の抜き出し

空白やタブ等で区切られたテキストデータ列の抜き出しには、cutコマンドやawkやperlの1ライナーが便利です。
以下はawkでの実例

# "aaa bbb ccc"の1列目のみを出力する。
$ echo "aaa bbb ccc" | awk '{ print $1 }'
aaa

# "aaa bbb ccc"の2列目のみを出力する。
$ echo "aaa bbb ccc" | awk '{ print $2 }'
bbb

# "aaa bbb ccc"の1,2列目を:(コロン)区切りで出力する。
$ echo "aaa bbb ccc" | awk '{ print $1,":",$2 }'
aaa : bbb

# "aaa,bbb,ccc",(カンマ区切り)の1列のみを出力する。
$ echo "aaa,bbb,ccc" | awk -F',' '{ print $1 }'
aaa

# ps au の結果の2列目(PID)のみを出力する。
$ ps au | awk '{ print $2 }'
PID
XXXXX
XXXXX
XXXXX

同様のことはPerlの1ライナーでも可能です。
Perlの1ライナーについては以下コンテンツへ
Perl ワンライナー 勉強中。

ラベル:


2008年10月21日

 

rubyのexpect ライブラリexpect.rb

rubyのexpect ライブラリexpect.rbを使ってみました。

telnet以下はtelnet自動化のサンプルです。

#!/usr/bin/env ruby

require 'pty'
require 'expect'

$expect_verbose=true # trueにするとexpect で読み込んだ内容を標準出力に出力する

PTY.spawn("telnet -l user localhost") do |r,w|
w.sync = true
r.expect(/[Pp]assword: /) { w.puts "passward" }
r.expect(/[$%#]/) { w.puts "ls -la" }
r.expect(/[$%#]/) { w.puts "exit" }
end

ラベル:


2008年10月15日

 

pythonのExpectモジュールPexpect

pythonのExpectモジュールPexpectを使ってみました。

Pexpectのサイト : http://www.noah.org/wiki/Pexpect

telnet以下はtelnet自動化のサンプルです。

#!/usr/bin/env python

import pexpect
import sys

telnet = pexpect.spawn ('telnet -l user localhost')
telnet.logfile = sys.stdout
telnet.expect ('[Pp]assword: ')
telnet.sendline ('password')
telnet.expect ('[$%#]')
telnet.sendline ('ls -la')
telnet.expect ('[$%#]')
telnet.close

ラベル:


2008年8月29日

 

検索系 vimrc

検索系 vimrc

検索系のvimrcをまとめておきます。

" 大文字小文字区別しないで検索する
set ignorecase
" 大文字がある場合は大文字小文字区別して検索する
set smartcase
" インクリメンタルサーチ
set incsearch
" 検索文字の強調表示をしない
set nohlsearch

vimについては別コンテンツ
http://www.webhtm.net/vim/ へ。

ラベル:


2008年8月8日

 

[Linux]ruby / gemをソースコードからインストール

ruby / gemをソースコードからインストール。

#rubyとrubygemsのkitはwgetするなりして、持って$HOME/srcにおいてください。

# srcに移動
$ cd $HOME/src

# ruby-X.X.X.tar.gzを展開します。
$ tar xvfz ruby-X.X.X.tar.gz

# 展開されたディレクトリに移動します。
$ cd rubyl-X.X.X

# READ MEを読みます。
# less README

# confiureヘルプ参照
$ ./configure -h

> --prefix=PREFIX install architecture-independent files in PREFIX
> [/usr/local]
インストールディレクトリの指定には上記の--prefix=PREFIXを使用する。

# Configureを実行。今回は$HOME/local/ruby以下にインストールします。
$ ./configure --prefix=$HOME/local/ruby

# インストール開始
$ make
$ make install

# バージョン確認
$ $HOME/local/ruby/bin/ruby -v

# 1ライナー
$ $HOME/local/ruby/bin/ruby -e 'puts "HellowWorld!"'
HellowWorld!

# irb確認
$HOME/local/ruby/bin/irb

# srcに移動
$ cd $HOME/src

# xvfz rubygems-X.X.X.tgzを展開します。
$ tar xvfz rubygems-X.X.X.tgz

# 展開されたディレクトリに移動します。
$ cd rubygems-X.X.X.tgz

# READMEを読みます。
$ less README

# 先ほどインストールしたRubyでsetup.rbを実行する。
$ $HOME/local/ruby/bin/ruby setup.rb

ラベル:


2008年8月6日

 

[Linux]apacheをソースコードからインストール

[Linux]apacheをソースコードからインストール

userのローカルにインストールする場合のメモ。

# 展開
# tar xvfz httpd-X.X.X.tar.gz

# 展開されたディレクトリに移動します。
$ cd httpd-X.X.X

# configureを実行。今回は$HOME/local/apache以下にインストールします。
$ ./configure --prefix=$HOME/local/apache

> ./configure --help より
>
> Installation directories:
> --prefix=PREFIX install architecture-independent files in PREFIX
> [/usr/local/apache2]
>
> --prefix でインストールするディレクトリを指定できます。
> 指定しない場合のデフォルトは/usr/local/apache2になります。

# インストール
$ make
$ make install

# 設定ファイル変更
$ vi $HOME/local/apache/conf/httpd.conf

# 今回は既に入っているapacheとPortが被らないように以下を変更。
Listen 80
=> Listen 10080
# DocumentRoot(Webサーバのルートディレクトリ)を変えたい場合は以下を変更。
DocumentRoot

# apacheの起動。
$ $HOME/local/apache/bin/apachectl start

# プロセスの確認。apacheのプロセスが起動していること。
$ ps aux | grep apache

# Portの確認。apacheのプロセスがLISTENになっていること。
$ netstat -an | grep 10080

ラベル:


2008年7月29日

 

sshでのrootログインの許可・禁止

sshのrootログインの許可・禁止をする方法。

# switch user root
$ su -

# /etc/ssh/sshd_config を編集
# vi /etc/ssh/sshd_config

- sshのrootログインを禁止
以下パラメータをコメントアウト(デフォルト)
#PermitRootLogin yes

- sshのrootログインを許可
以下パラメータのコメントを削除
PermitRootLogin yes

# sshdサービスを再起動
# service sshd restart

セキュリティ上、sshのrootによるログインは禁止しておくが望ましい。

ラベル:


2008年7月28日

 

[Linux]perlをソースコードからインストール

perlをソースコードからインストール

# 展開します。
$ tar xvfz perl-X.X.X.tar.gz

# 展開されたディレクトリに移動します。
$ cd perl-X.X.X

# Configureを実行。今回は$HOME/local/perl以下にインストールします。
$ ./Configure -des -Dprefix=$HOME/local/perl

# インストール開始
$ make
$ make test
$ make install

# バージョンの確認。
$ $HOME/local/perl/bin/perl -V

# 1ライナー (1ライナーとは
$ $HOME/local/perl/bin/perl -e 'print "Hello World!","\n"'
Hello World!

# CPANインストール
$ $HOME/local/perl/bin/perl -MCPAN -e "shell"

ラベル:


2008年4月18日

 

bash ワイルドカード まとめ

ワイルドカードのまとめ

* 0文字以上の任意の文字列
? 任意の1文字
[str] [ ]内のいずれかの1文字
[!str] [ ]内のいずれでもない1文字
{str1,str2,str3} { } 内の,(カンマ)区切りのいずれかの文字列


ワイルドカード使用例

*.log 最後に".log"が付くものすべてにマッチ(access.log,error.log 等)
index* 最初に"index"が付くものすべてにマッチ(index.htm,index.html,index.cgi 等)
*_* _(アンダーバー)が付くものすべてにマッチ(ab_c,_abc,abc_ 等)
1*a 1で始まり、aで終わるものすべてにマッチ(1111aaa,123a,1a 等)
* すべてにマッチ
file.??? file.の後ろに3文字のものすべてにマッチ(file.txt,file.log)
????? 5文字のものすべてにマッチ
[abc] a,b,cいずれかの1文字にマッチ
[0-9] 0〜9のいずれかの1文字(数字)にマッチ
[a-zA-Z] 大文字又は小文字のアルファベット1文字にマッチ
[!abc] a,b,cいずれかの文字以外の1文字マッチ
[!0-9] 0〜9のいずれかの文字(数字)以外の1文字にマッチ
[!a-zA-Z] 大文字又は小文字のアルファベット以外の1文字にマッチ
index.{htm,html,cgi} index.htm,index.html,index.cgiのいずれかにマッチ

ラベル:


スポンサードリンク