2012年 2月 13日 はてなブックマーク -
タグ: #Linux #awk
標準入力をそのまま標準出力に出力する。
$ cat foo.txt | awk ‘{print $0}’
標準入力をそのまま標準出力に出力する。
$ cat foo.txt | awk ‘1’
空行を削除する。
$ awk ‘/./’ foo.txt
空行を削除する。
$ awk ‘NF’ foo.txt
最初の 10 行を表示する。
$ awk ‘NF >= 10’ foo.txt
一行ごとに改行を追加する。
$ awk ‘1;{print “”}’ foo.txt
一行ごとに改行を追加する。
awk ‘BEGIN{ORS=”\n\n”};1’ foo.txt
ファイルに行番号を付ける。
$ awk ‘$0 = NR OFS $0’ foo.txt
ファイルに行番号を付ける。
$ awk ‘{print NR “\t” $0}’ foo.txt
ファイル毎に行番号を付ける。
$ awk ‘{prin FNR “\t” $0}’ foo*.txt
行番号を 4 桁で表示させる。
$ awk ‘{printf(“%4d : %s\n”, NR, $0)}’ foo.txt
最も長い行の長さを表示する。
$ awk ‘{if (length($0) > max) max = length($0)} END {print max}’ foo.txt
80 文字を越える行を表示する。
$ awk ‘length($0) > 80’ foo.txt
0 から 100 までの間の乱数を 5 つ表示する。
$ awk ‘BEGIN {for (i = 1; i <= 7; i++) print int(101 * rand())}’
ファイルの行数を数える。
$ awk ‘END {print NR}’ foo.txt
奇数行を表示する。
$ awk ‘NR % 2 == 1’ foo.txt
偶数行を表示する。
$ awk ‘NR % 2 == 0’ foo.txt
最初の 1 行を表示する。
$ awk ‘NR == 1’ foo.txt
最初の 1 行を表示する。
$ awk ‘{print; exit}’ foo.txt
最後の 1 行を表示する。
$ awk ‘END {print}’ foo.txt
最後の 1 行を表示する。
$ awk ‘{last = $0} END {print last}’ foo.txt
同一行の削除を行う。(uniq)
$ awk ‘a !~ $0; {a = $0}’ foo.txt
同一行の削除を行う。(uniq)
$ awk ‘{if ($0 != line || NR == 1) print; line = $0}’ foo.txt
行のソートを行う。(gawk 以上)
$ gawk ‘{line[NR] = $0} END {asort(line); for (i = 1; i <= length(line); i++) print line[i]}’ foo.txt
10 行目から 20 行目までを表示する。
$ awk ‘NR == 10, NR == 20 {print $0}’ foo.txt
1 から 10 までの数字を生成する。
$ awk ‘BEGIN {for (i == 1; i <= 10; i++) print i}’
’#’ で始まるコメントを削除する。
$ awk ‘{sub(/#.*/, “”, $0)}1’ foo.txt
さいころを作る。
$ awk ‘BEGIN {srand();print int(rand() * 6 + 1)}’
ワード数をカウントする。
$ awk ‘{n += NF} END {print n}’ foo.txt
文字数をカウントする。
$ awk ‘{n += length($0)} END {print n}’ foo.txt
Load Average を表示する。(Linux のみ)
$ awk ‘{print $1}’ /proc/loadavg
yes コマンドを作る。(延々と ‘y’ を返す)
$ awk ‘BEGIN {for (;;) print “y”}’
yes コマンドを作る。(延々と ‘y’ を返す)
$ awk ‘BEGIN {while (awk != “Perl”) print “y”}’
Apache のログにある IP アドレスからホスト名をリアルタイムで引く。(root のみ)
# tail -f /var/log/httpd/access_log | gawk ‘{system (“dig -x” $1 ” +short”)}’
Apache のログからリンク元をリアルタイムで表示する。(root のみ)
# tail -f /var/log/httpd/access_log | gawk -F" ‘$4!~/gauc/&&$4!=”-“{fflush();print $4}’
CSV (カンマ区切り) から TSV (タブ区切り) への変換を行う。
$ awk -v FS=’,’ -v OFS=’\t’ ‘$1=$1’ foo.txt
TSV (タブ区切り) から CSV (カンマ区切り) への変換を行う。
$ awk -v OFS=’,’ -v FS=’\t’ ‘$1=$1’ foo.txt
各フィールドの和を求める。
$ awk ‘{for (i = 1; i <= NF; i++) s += $i} $0=s’ foo.txt
各行のフィールド数を表示する。
$ awk ‘{print NF “:” $0}’ foo.txt
最後の行のフィールド数を表示する。
$ awk ‘{s = NF} END {print NF}’ foo.txt
フィールドが 5 以上の行を表示する。
$ awk ‘NF >= 5’ foo.txt
改行 CR/LF を LF に変換する。
$ awk ‘sub(/\r$/,”“)’ foo.txt
改行 LF を CR/LF に変換する。
$ awk ‘sub(/$/,”\r”)’ foo.txt
行頭の空白とタブを削除する。
$ awk ‘{sub(/^[ \t]+/, “”)}1’ foo.txt
行末の空白とタブを削除する。
$ awk ‘{sub(/[ \t]+$/, “”)}1’ foo.txt
行頭と行末の空白とタブを削除する。
$ awk ‘{gsub(/^[ \t]+|[ \t]+$/, “”)}1’ foo.txt
行頭と行末の空白とタブを削除する。(フィールドも再構成される)
$ awk ‘$1 = $1’ foo.txt
最後の行から表示する。(tac)
$ ‘{a[i++] = $0} END {for (j = i - 1; j >= 0;) print a[j—]}’ foo.txt
正規表現 abc の行を表示する。(grep)
$ awk ‘/abc/’ foo.txt
正規表現 abc にマッチしない行を表示する。(grep -v)
$ awk ‘! /abc/’ foo.txt
Pattern にマッチした前の行を表示する。
$ awk ‘/Pattern/ {print a} {a=$0}’ foo.txt
Pattern にマッチした前の行を表示する。
$ awk ‘{D[NR] = $0} /match/ {print D[NR-1]}’ foo.txt
ファイルサイズが 0 byte のものを表示する。
$ ls -al | awk ‘$5==0 {print $8}’
Subversion の svn status で ‘?’ の付くファイルを全て svn add する。
$ svn status | gawk ‘/^?/{print $2}’ | xargs svn add

oneliner.txt - awk-users-jp - AWK Users JP - Google Project Hosting

awkコマンドのチートシートです。


3ヶ月前 | | 2012年 2月 13日 | このエントリーを含むはてなブックマーク
2012年 2月 2日 はてなブックマーク -

2012/01/04

Linuxにおけるファイル同期とクラスタリングファイルシステム

Linux環境でファイル同期を実現するのに、数多ある手法からいくつか雑感と共にまとめてみた。 今後、それぞれ検証してみる。
プロダクト名 incon +
Unison
lsyncd + rsyncd GlusterFS DRBD Lustre OCFS2 GFS2
ストレージ ディレクトリ,ファイル ディレクトリ,ファイル ディレクトリ(Fuse) ブロックデバイス ブロックデバイス ブロックデバイス ブロックデバイス
プロトコル inotify
+ rsync?
inotify + rsync 独自 独自 独自 独自 独自
C/S構成 C x N + S x N C x N + S x N C x N + S x Y C + S,
(C + S) + C
MetaData (1 ~ 2)
+ C x N + S x Y
(C + S) x N (C + S) x N
レプリケーション 1世代xN 1世代xN 1世代xN 1世代xN N世代xN 1世代xN 1世代xN
マルチマスター △(別途FS実装)
制限,課題 inotifyリソース制限有り。
Windows環境では
デッドロックする場合があるらしい
inotifyリソース制限有り CPU負荷が高い 結局はシングルマスタ メタサーバー多重化が厄介? コミュニティーサポートが手薄 RedHat系以外での導入は面倒
IO雑感と予想 読み取り速い.同期遅い。
但し、rsyncよりエコな同期?
読み取り速い.同期遅い 全体的にやや遅い シングルマスタなら
IO共に速い
C/S増加の影響は限定的。
読み取り速い
C/S増加と共に逓減 C/S増加と共に逓減

Linuxにおけるファイル同期とクラスタリングファイルシステム

3ヶ月前 | | 2012年 2月 2日 | このエントリーを含むはてなブックマーク
2011年 11月 30日 はてなブックマーク -
タグ: #Linux #ssh #CentOS

/etc/hosts.allow に以下のように記載し

1
sshd:    /etc/hosts.sshd_allow

includeするファイルを以下のように作成すると

/etc/hosts.sshd_allow
1
2
192.168.1.10
192.168.1.11

通常記載するような以下の動きと同じになります。

1
2
sshd:    192.168.1.10
sshd:    192.168.1.11

役割が違うサーバーのそれぞれの /etc/hosts.allow をバージョン管理していて、両方で共通のルールだけ別ファイルで一元管理などに便利に使えそうです。

/etc/hosts.allowで外部ファイルをincludeして使う - blog.tnmt.info

5ヶ月前 | | 2011年 11月 30日 | このエントリーを含むはてなブックマーク
2011年 11月 12日 はてなブックマーク -
タグ: #Linux

lessでソースコードに色をつける

シェルの操作中「テキストファイルをちょこっと覗きたいな」と思ったときに抜群に便利なlessコマンドであるが、普段綺麗に色付けされたソースコードを見慣れていると、モノクロのソースコードの見づらさに愕然としてしまう。結局lessを終了して他のエディタで開きなおすことになるのだが、lessでソースコードに色付け(シンタックスハイライト)できれば便利なのになーっ!と思ったことはないだろうか。そう、あるんです!lessでシンタックスハイライトする方法はあるんです!というわけで、今日はその方法を紹介しよう。

GNU Source-highlight
結論から言うと、今日紹介する方法はGNU Source-highlightを使う。GNU Source-highlightを使えばイッパツだ。なのでまずGNU Source-highlightをインストールしよう。UbuntuやFedoraならリポジトリにあるので、次のようにapt-get等でインストールする。

Ubuntuの場合
1

shell> sudo apt-get install source-highlight

Fedoraの場合
1
2

shell> su -
shell# yum install source-highlight

その後、環境変数を次のようにセットすればシンタックスハイライトは完了だ。

1
2

shell> export LESS=’-R’
shell> export LESSOPEN=’| /usr/share/source-highlight/src-hilite-lesspipe.sh %s’

後はlessを使ってソースコードを開けばあら不思議!!綺麗にシンタックスハイライトされたソースコードが見られるというわけだ。

漢(オトコ)のコンピュータ道: lessでソースコードに色をつける

6ヶ月前 | | 2011年 11月 12日 | このエントリーを含むはてなブックマーク
2011年 11月 12日 はてなブックマーク -
タグ: #Linux

sslh - ssl/ssh multiplexer

What is it?

sslh accepts HTTPS, SSH and OpenVPN connections on the same port. This makes it possible to connect to an SSH server or an OpenVPN on port 443 (e.g. from inside a corporate firewall, which almost never block port 443) while still serving HTTPS on that port.

Install me!

sslh has been packaged for Debian, Gentoo, FreeBSD and some other operating systems, so check out your favourite package repository first before installing by hand.

It should also work under Windows with Cygwin.

ssl/ssh multiplexer

ファイアーウォールによりhttpsであるport443の通信しか許可されていない環境から、ssh接続できるようにサーバにインストールしておくと便利なOSSです。

このデーモンが待ち受けて、プロトコルによってhttpsなのか、sshなのか、openvpnなのかを判定して該当するプログラムに受け渡します。


6ヶ月前 | | 2011年 11月 12日 | このエントリーを含むはてなブックマーク
2011年 10月 16日 はてなブックマーク -
タグ: #Linux #CentOS

rpmbuild で spec ファイルから rpm を作ろうとするとエラーがでることがある。

error: Installed (but unpackaged) file(s) found:

これは、パッケージには含まれてるけど、インストール対象になってないというエラー。昔は無視してくれたのだが最近はチェックするようになって面倒になった。

日本語だと次のエラーになる。

インストール済み(ただし未伸張)ファイルが見つかりました:

対処方法

%files に そのファイルを書いてインストール対象にする。
spec ファイルに %define _unpackaged_files_terminate_build 0 を書いて、エラーを無視させる。
ドキュメントのエラーはこっち。 %define _missing_doc_files_terminate_build 0

ず’s - rpmbuildすると error: Installed (but unpackaged) file(s) found:が出る

7ヶ月前 | | 2011年 10月 16日 | このエントリーを含むはてなブックマーク
2011年 10月 3日 はてなブックマーク -
タグ: #Linux #CentOS #swap

swapをクリアしたいなら

swapoff -a && swapon -a

3000req / sec と戦う - だるろぐ

OS再起動すれば確かに消えるけども、再起動せずにswapを消したいときに使えるコマンドです。
実行完了まで結構時間掛かるので、負荷の低い時間帯に実施した方が良いです。

RedHatやCentOS等なら
/etc/sysctl.conf に以下を記載する事で、可能な限りswapは使わない設定となります。
vm.swappiness = 0


7ヶ月前 | | 2011年 10月 3日 | このエントリーを含むはてなブックマーク
2011年 8月 27日 はてなブックマーク -
タグ: #hddtemp #Linux

今までそこでハードディスクの温度を「hddtemp」を利用してハードディスクの温度を取得していました。

しかし、最近「hddtemp」でハードディスクの温度を取得するのが一般的でないという事に気づきました。

普通は「smartctl」を使用するようです。

smartctl」は標準で備わってて「hddtemp」は別途インストールが必要なので、「smartctl」を使用するのも当然か・・・

ということで、「smartctl」についてのメモです。

ハードディスクのS.M.A.R.T.サポート状況を表示する

[root@hoge ~]# smartctl -i /dev/sda
smartctl version 5.38 [i686-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Model Family:     Maxtor DiamondMax 10 family (SATA/300)
Device Model:     Maxtor 6V250F0
Serial Number:    V501XATG
Firmware Version: VA111630
User Capacity:    251,000,193,024 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   7
ATA Standard is:  ATA/ATAPI-7 T13 1532D revision 0
Local Time is:    Fri Oct 29 18:04:16 2010 JST
SMART support is: Available - device has SMART capability.  ←S.M.A.R.T.に対応していて
SMART support is: Enabled                                   ←かつ機能している

温度やシークエラーなどの状況を表示する

[root@hoge ~]# smartctl -A /dev/sda
smartctl version 5.38 [i686-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 32
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  3 Spin_Up_Time            0x0027   185   185   063    Pre-fail  Always       -       18438
  4 Start_Stop_Count        0x0032   253   253   000    Old_age   Always       -       1169
  5 Reallocated_Sector_Ct   0x0033   253   253   063    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000a   253   252   000    Old_age   Always       -       0
  8 Seek_Time_Performance   0x0027   250   241   187    Pre-fail  Always       -       42755
  9 Power_On_Hours          0x0032   199   199   000    Old_age   Always       -       18983
 10 Spin_Retry_Count        0x002b   253   252   157    Pre-fail  Always       -       0
 11 Calibration_Retry_Count 0x002b   253   252   223    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   251   251   000    Old_age   Always       -       901
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   051   039   000    Old_age   Always       -       49 (Lifetime Min/Max 22/49) ← ハードディスクの温度
192 Power-Off_Retract_Count 0x0032   253   253   000    Old_age   Always       -       0
193 Load_Cycle_Count        0x0032   253   253   000    Old_age   Always       -       0
194 Temperature_Celsius     0x0032   041   253   000    Old_age   Always       -       49
195 Hardware_ECC_Recovered  0x000a   253   240   000    Old_age   Always       -       620
196 Reallocated_Event_Count 0x0008   253   253   000    Old_age   Offline      -       0
197 Current_Pending_Sector  0x0008   253   253   000    Old_age   Offline      -       0
198 Offline_Uncorrectable   0x0008   253   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0008   199   199   000    Old_age   Offline      -       0
200 Multi_Zone_Error_Rate   0x000a   253   252   000    Old_age   Always       -       0
201 Soft_Read_Error_Rate    0x000a   253   252   000    Old_age   Always       -       3
202 TA_Increase_Count       0x000a   253   250   000    Old_age   Always       -       0
203 Run_Out_Cancel          0x000b   253   252   180    Pre-fail  Always       -       0
204 Shock_Count_Write_Opern 0x000a   253   252   000    Old_age   Always       -       0
205 Shock_Rate_Write_Opern  0x000a   253   252   000    Old_age   Always       -       0
207 Spin_High_Current       0x002a   253   252   000    Old_age   Always       -       0
208 Spin_Buzz               0x002a   253   252   000    Old_age   Always       -       0
210 Unknown_Attribute       0x0032   253   252   000    Old_age   Always       -       0
211 Unknown_Attribute       0x0032   253   252   000    Old_age   Always       -       0
212 Unknown_Attribute       0x0032   001   001   000    Old_age   Always       -       4096

※他にもコマンドオプションがあります。”-h”で確認可能です。

mk-mode BLOG » CentOS - smartctl でハードディスク温度取得!

以下コマンドでインストール出来ます。
yum install smartmontools


9ヶ月前 | | 2011年 8月 27日 | このエントリーを含むはてなブックマーク
2011年 8月 22日 はてなブックマーク -
タグ: #Linux #CentOS

インストール

Ubuntuでは、aptでインストールできました。簡単。

$ sudo apt-get install httping

簡単な使い方

$ httping (URLまたはIPアドレス)

で、実行可能です。以下、実行例。

$ httping http://xxx.xxx.xxx.xxx/
PING xxx.xxx.xxx.xxx:80 (http://xxx.xxx.xxx.xxx/):
connected to xxx.xxx.xxx.xxx:80, seq=0 time=17.03 ms 
connected to xxx.xxx.xxx.xxx:80, seq=1 time=9.49 ms 
connected to xxx.xxx.xxx.xxx:80, seq=2 time=17.71 ms 
connected to xxx.xxx.xxx.xxx:80, seq=3 time=17.24 ms 
connected to xxx.xxx.xxx.xxx:80, seq=4 time=15.96 ms 
--- http://xxx.xxx.xxx.xxx/ ping statistics ---
5 connects, 5 ok, 0.00% failed
round-trip min/avg/max = 9.5/15.5/17.7 ms

特定のURLに対して、HTTPでのリクエスト/レスポンスの確認となり、応答時間(RTT)の最小/平均/最大がわかります。

ちなみに、ここで利用されるのはHEADリクエストです。

オプションを特に何も付けないと、Linuxでのpingコマンド同様、延々とリクエストを繰り返します。

HTTPで疎通やレイテンシを確認する「httping」 - RX-7乗りの適当な日々

RedHat EL5,6(CentOS5,6)であればdagリポジトリを使って以下コマンドで利用可能です。
yum install httping


9ヶ月前 | | 2011年 8月 22日 | このエントリーを含むはてなブックマーク
2011年 8月 20日 はてなブックマーク -
タグ: #Python #Linux
例えば、UbuntuやFedoraといったLinuxディストリビューションのシステム設定関連のスクリプトでPythonは必要不可欠なほどLinuxの基盤に取り入れられていることや、仮想化環境の管理ツール「virt-manager」などGUIアプリでもPythonが利用されている例を指摘。「オープンソース系では標準言語になりました」(稲田氏)という。Pythonは、このほか、Google App Engineでの採用などWeb系の開発ではよく使われているといい、「みなさんもぜひPythonを使ってください」と講演を締めくくった。

恒例の「LL祭」に異変!? ScalaやClojure、HTML5も! - @IT (via atm09td)

デバイス操作をする関数があらかじめ多く揃っているので、Pythonはとても使いやすいです。
これからBashを使うならPythonで良いのではないかと思うほどです。


9ヶ月前 | | 2011年 8月 20日 | このエントリーを含むはてなブックマーク
2011年 8月 10日 はてなブックマーク -
タグ: #terminal #Linux

toby-net:

誤ってバイナリファイルを開いてしまってターミナルが文字化けした場合の対処方法 - みちしるべ

戻す方法

echo ^[c

^[c は、制御文字、エスケープシーケンスなので、そのまま「^」「[」「c」を入力しちゃだめよ。

「e」「c」「h」「o」「スペース」「Ctrl + V」「Esc」「c」「Enter」と入力する。

9ヶ月前 | | 2011年 8月 10日 | このエントリーを含むはてなブックマーク
2011年 7月 14日 はてなブックマーク -
タグ: #Apache #sed #Linux

Apacheログに色を付けて快適tail生活 - y-kawazの日記

で「Apacheログをtail中にステータスコード部分だけに色つけしたい」

#!/bin/sed -f
## MEMO
# [0m reset
# [1m bold
# [3m italic
# [4m underline
# [5m blink
# [30m black
# [31m red
# [32m green
# [33m yellow
# [34m blue
# [35m magenta
# [36m cyan
# [37m white
s/\(HTTP\/1.."\) \(2[0-9][0-9]\) /\1 \x1b[34m\2\x1b[0m /
s/\(HTTP\/1.."\) \(3[0-9][0-9]\) /\1 \x1b[32m\2\x1b[0m /
s/\(HTTP\/1.."\) \(4[0-9][0-9]\) /\1 \x1b[33m\2\x1b[0m /
s/\(HTTP\/1.."\) \(5[0-9][0-9]\) /\1 \x1b[31m\2\x1b[0m /

10ヶ月前 | | 2011年 7月 14日 | このエントリーを含むはてなブックマーク
2011年 7月 13日 はてなブックマーク -
タグ: #Linux #Windows #Ext4

WindowsからLinuxのファイルシステムを扱える「Ext2Fsd」 | エンタープライズ | マイコミジャーナル

LinuxがインストールされたボリュームはWindowsからは扱えない。しかしExt2Fsdをインストールしたあと、Ext2 Volume Managerを使ってExt4などの領域をマウントすると、Windowsからもその領域にアクセスできるようになる。マウントしたあとの操作は通常の操作と同じ。

今回のリリースから、最近CentOS6で標準採用されたext4をサポートされました。
ただしエンタープライズで使用するような負荷の高い利用は想定されていません。
また、ジャーナルやトランケーション/エクスパンド、拡張属性、ALCなどの機能はサポートされていないので要注意です。

10ヶ月前 | | 2011年 7月 13日 | このエントリーを含むはてなブックマーク
2011年 7月 9日 はてなブックマーク -

このサーバは接続を受け入れきれずに、SYNを取りこぼしてしまっているみたいです。memcachedのbacklogはデフォルト値を使用しているので1024になっているはずです。

$ memcached -h | grep backlog
-b            Set the backlog queue limit (default 1024)

これって、本当に1024で足りなくなっているのでしょうか。単純にバックログを増やせば解決する問題かなと期待しつつも、どうも釈然としなかったので 、man listen をじっくりと読み返していたところ、

backlog 引き数が /proc/sys/net/core/somaxconn の値よりも大きければ、backlog の値は暗黙のうちにこの値に切り詰められる。このファイルのデフォルト 値 は128 である。バージョン 2.4.5 以前のカーネルでは、この上限値はコード埋め込みの固定値 SOMAXCONN であり、その値は 128 であった。

いやーな予感がしたので、おもむろにコマンドを叩いてみると・・・・・

# sysctl net.core.somaxconn
net.core.somaxconn = 128

あちゃあ!
実際はこれ、128になっていたわけですね!

# sysctl -w net.core.somaxconn=1024

としてmemcachedを再起動したところ、大幅に性能が改善されました。

DSAS開発者の部屋:高負荷サイトのボトルネックを見つけるには

TCP接続のリトライが起きているなら変更しておきたい所ですね。
上記設定だとマシンを再起動したら消えてしまう気がします。以下の様に実行すればOKです。
echo “net.core.somaxconn = 1024” » /etc/sysctl.conf
sysctl -p


10ヶ月前 | | 2011年 7月 9日 | このエントリーを含むはてなブックマーク