アメリエフのブログ

バイオインフォマティクスの紹介と社員の日々
稼働中のタスクをtopコマンドで!
サーバで動いているタスクを「top」コマンドで確認してみましょう。

コマンドはとてもシンプルです。
$ top


システムのCPU使用率順に、稼働中のプロセスが表示されます。図ではpsiblastとvimが一番プロセスを使用していますね。プロセスを稼働しているユーザも表示されます。
topコマンドを「q」を押して終了するまで、稼働状況は3秒ごと(※デフォルト)に自動で更新されます。

実行中に「c」を入力すると、実行中のタスクをコマンド名(例:「vim」)だけでなく、コマンドラインの引数(例:「vim sample.txt」)まで見ることができます。
他にも、自動更新の時間を変更したり、CPU使用率ではなく使用メモリ順に並べ替えたりすることもできます。

複数のタスクを同時に実行しているせいでサーバの動作が重くなっているとき、どれが一番重い処理なのか確認したいとき、逆に、これからとても重い処理を実行したいけど、すでにサーバを使っている人の邪魔にならないか確認したいときに使用します。
弊社のサーバを購入された方には積極的に使用を推奨している、基本のコマンドなのですが、過去にブログで取り上げたことがなかったので、紹介してみました。
| kubo | システム | 17:44 | comments(0) | - |
Google日本語入力なら矢印の入力が簡単
こんにちは、久保(@kubor_)です。
スマートフォンのバイブモーターが経年劣化のためか、軸ブレしており、ギュイーンギュイーン鳴ってしまうんですが、買い替えどきでしょうか。

ウェイトの偏りが振動を生みます

正常なバイブモーターであれば、軸がブレず、軸先に取り付けられたウェイトの偏りだけで振動を生み出します。

↑●↓
 ←
Fig. 1 正常なモーターの軸と回転の様子

ただし、僕のスマートフォンの場合、軸がブレているようです。
↓→→↓→↓
↓↑●●↑↓
←↑←↑←←
Fig. 2 僕の人生そのものな軸ブレ

矢印の入力方法が喜びを生みます

さて、ここまでブレると”やじるし”でブレ具合を伝えるのは困難ですが、
僕が伝えたいのは、”やじるし”の入力方法です。
実は、Google日本語入力なら”やじるし” → 変換 → 「選択」をしなくていいので、入力がとても楽です。

試しに、IMEをONにした状態で”zl(ゼットエル)”と入力してみてください。

右矢印が入力できたでしょうか?

次に、”zj(ゼットジェイ)”と入力すると下矢印が入力できます。
あとの2方向は”h”と”k”です。
hjklが矢印の向きに対応しているのです。
簡単に入力できて便利なので、ご活用下さい。

ちなみに、このhjklですがVim(Vi)というテキストエディタでカーソルを移動させるときに使うキーと同じです。
Vimmerの声が聞こえてきますね。

(さあ、Vimを使うのです。)
| kubor | システム | 16:27 | comments(0) | - |
cpコマンドの進捗状況をチェックする
コピー中にあとどれくらいか知りたい時があるんです、
特に`cp -v`を忘れた時に有用

Xfennec/progress
調べたら、こちらのprogressを使うと簡単にできます

ダウンロード

$ git clone https://github.com/Xfennec/progress.git
Initialized empty Git repository in /home/kubor/src/progress/.git/
remote: Counting objects: 279, done.
remote: Total 279 (delta 0), reused 0 (delta 0), pack-reused 279
Receiving objects: 100% (279/279), 206.50 KiB | 111 KiB/s, done.
Resolving deltas: 100% (142/142), done.

コンパイル

$ cd progress; make
cc -g -Wall -D_FILE_OFFSET_BITS=64 -c progress.c
cc -g -Wall -D_FILE_OFFSET_BITS=64 -c sizes.c
cc -g -Wall -D_FILE_OFFSET_BITS=64 -c hlist.c
cc -Wall progress.o sizes.o hlist.o -o progress -lncurses -lm

usage

$ ./progress -h
progress - Coreutils Viewer
---------------------
Shows running coreutils basic commands and displays stats.

Commands monitored by default:
cp mv dd tar gzip gunzip cat grep fgrep egrep cut sort xz md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb

Usage: ./progress [-qdwmM] [-W secs] [-c command] [-p pid]
-q --quiet hides all messages
-d --debug shows all warning/error messages
-w --wait estimate I/O throughput and ETA (slower display)
-W --wait-delay secs wait 'secs' seconds for I/O estimation (implies -w, default=1.0)
-m --monitor loop while monitored processes are still running
-M --monitor-continous like monitor but never stop (similar to watch ./progress)
-c --command cmd monitor only this command name (ex: firefox)
-p --pid id monitor only this process ID (ex: `pidof firefox`)
-v --version show program version and exit
-h --help display this help and exit
監視対象は結構いろいろあるみたいですね
cp mv dd tar gzip gunzip cat grep fgrep egrep cut sort xz md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb
シンボリックリンクは、cvコマンドとしてリンクしておきます
coreutils viewerとのことですし
$ ln -s ~/src/progress/progress ~/bin/cv

cpで大きなファイルをコピー中に実行してみる

せっかくなので別セッションで実行してみます
$ cp huge_genome_R1.fastq /mnt/usb/
cpが別セッションで実行中に、新しく接続したセッションで監視してみます
$ cv
[32720] cp /home/oryza/exome/fastq/huge_genome_R1.fastq /mnt/usb/ 44.4% (698.5 MiB / 1.5 GiB) 50.9 MiB/s eta 0:00:17
ファイルはフルパスで展開されるのですね
ちなみに`-m`オプションをつけるとリアルタイム監視できます
`watch cv`してるのと同じでしょうか

READMEを読むと`/proc`を読んでいるらしいです

この記事はQiitaでも読むことができます
| kubor | システム | 13:51 | comments(0) | - |
ヘビーな夏
弊社が一部講義を担当した平成27年度NGSハンズオン講習会のアンケート結果を、事務局のかたから送っていただきました。

私が担当したSh、Perl、Pythonに関しては、「易しいと思っていたらいきなり最終課題が難しくなった」というご意見が多かったです。
実は去年もこのようなご意見が多かったため、去年よりは気を付けたつもりなのですが、まだ不十分だったようです。
来年以降(もアメリエフにお声がかかるのであれば)の課題ですね!

アンケートには役に立ちそう・今後使ってみたいというコメントもたくさんいただきました。
本業が忙しい中泣きながら資料を作ったり、群馬のスネークセンターに行ってみたり、講義中はネタが滑りまくったりと大変でしたが、少しでもお役にたてたのであれば良かったなあと思います。

ご参加いただいた皆様、TA・講師各位、門田先生、お疲れ様でした。

最後に、Python編のまとめです。

  • 値の整形はformat

  • リストは編集可能、タプルは編集不可能

  • 学習にお奨め→https://www.codecademy.com/

  • 飛ばしたいならcontinue

  • うるさい分コードがきれい(Perlと比べて)

  • 互換性に注意(Python2→3)

  • 座学よりも実習が大事

  • インデントは半角4文字で

  • 「丸いが頑固なタプルちゃん、角(かく)も柔軟リストくん」

  • シバンは「#! /usr/bin/env python」や「#! /usr/bin/python」

  • タプルは辞書のキーに使える


| hat | システム | 14:51 | comments(0) | - |
どの括弧が閉じているのかよく分かるVimの設定
京都支店に居た頃、鴨川でサンドウィッチを食べているところをトンビに襲われ、出血したことがある久保(kubor)です。

Vimを使っていて、コーディング中、
括弧が重なって困るなら、対応する括弧をハイライトしましょう。
もしくは対応する括弧へカーソルをジャンプしましょう。

対応する括弧にジャンプする

括弧の上にカーソルがある状態で「%」を入力すると対応する括弧にジャンプします。

対応する括弧をハイライトする

.vimrcに以下を書いておきます
showmatchで機能が有効になり、matchtimeで、対応する括弧がハイライトされるまでの待ち時間を設定できます。
matchpairsで、HTMLを書くときのために<>も強調表示対象に入れておくと便利です。
set showmatch
set matchtime=1
set matchpairs& matchpairs+=<:>


試してみてください。
| kubor | システム | 15:09 | comments(0) | - |
どんな改行コードでも・後
前回に引き続き改行コードの処理の話です。
今回はPerl・Pythonのなかでどう扱うか、コード例を挙げて説明します。

perlの例


行末の「¥n」はchompで取り除くことができます。それ以外は正規表現を使うと簡単と思います。
open IN,"file.txt" or die "$!";
while(my $line = <IN>>){
chomp($line);
$line =~ s/¥r$//g;
# 処理
}



Pythonの例


Pythonの場合少し注意が必要です。
下の,諒法だと、「¥n」を改行の目印にしている(「¥r」を改行コードだとみなしてくれない)ため、「¥r」で改行しているファイルを読み込んだとき、1行ずつ読み込むつもりが、ファイルすべてを1行であるかのように扱ってしまいます。
with open('file.txt', 'r') as f:
for line in f:
line = line.replace(('¥r' or '¥r¥n'), '¥n').rstrip('¥n')
# 処理


open関数の引数を 'r' ではなく 'rU'('U'だけでも可)に変えると、すべての改行コードに対応して、ちゃんと1行ずつ読み込んでくれます。
詳細はこちら(PEP 278 -- Universal Newline Support
首尾よく1行ずつ読み込んだあとは、replaceメソッドなどで「¥r」や「¥r¥n」を「¥n」に置き換えたり、rstripメソッドで右端から改行コードを取り除いたりします。
with open('file.txt', 'rU') as f:
for line in f:
line = line.replace(('¥r' or '¥r¥n'), '¥n').rstrip('¥n')
# 処理



スクリプトに入力するファイルにどんな改行コードが含まれているかわからないときは、全部の改行コードにあらかじめ対応しておくと、後々改行コードにまつわるトラブルに悩まされることがありません。
とhatさんに教えていただいたので、私も気を付けます!
| kubo | システム | 14:21 | comments(0) | - |
どんな改行コードでも・前
弊社のトレーニングやNGSハンズオン講習会などでPerlやPythonに触れた方は「『¥n』で行の末尾を示す」と聞いたことがあると思います。
『¥n』はLine Feed、LFとも呼び、LinuxまたはMac OS Xで使われる改行コードです。改行コードはOSの種類やバージョン、ソフトごとに種類が異なります。
Linux、Mac OS X… ¥n
Windows… ¥r¥n
OS Xより前のMac… ¥r
『¥r』はCarriage Return、CRと呼びます。
ファイルにどんな改行コードが含まれているかは「od -c」コマンドなどで確認できます。(過去の記事を参照

バイオインフォの解析はLinux上で行われることが多いと思います。しかし、普段の作業はMacやWindows上で行っており、そちらで作製したファイルをLinux上で扱いたいときなど、改行コードが混在するケースも多々あると思います(テキストエディタによっては、ファイル保存時の改行コードを指定することができるものもあります)。

以下のコマンドで、ファイルの改行コードをすべて「¥n」に変換することができます。
$ cat oldfile.txt | tr -s '¥r' > newfile.txt


そのほかに、自分で組んだPerl/Pythonスクリプト内で、改行コードを処理するようにしてもいいです。
PerlやPythonのスクリプト内部で「ファイルを一行ずつ読み込んで処理する」ときは、基本的に処理前に行末から改行コードを削除します。スクリプト内部で、どのような改行コードがきても対応できるように処理をしておくと、上の tr コマンドを実行する手間を減らすことができ、トラブルが少なくなると思います。

次回にPerlとPythonの例を示します。
| kubo | システム | 15:09 | comments(0) | - |
Pythonでgzipされたテキストファイルをcsvモジュールで読み込む
gzip圧縮されたファイルをPythonで読み込むときには、少し注意が必要です。
例として、手元に偶然あった魔法の言葉が書かれたタブ区切りテキストファイルを使用してみます。
zcat supercalifragilisticexpialidocious.txt.gz
super cali fragilistic expia lidocious!
su percali fragili stic expialidocious!
su per califragilis ticexpia lidocious!
読み込みましょう。

[magic.py]
import gzip
import csv

file = 'supercalifragilisticexpialidocious.txt.gz'
with gzip.open(file, 'r') as f:
reader = csv.reader(f, delimiter='¥t')
for row in reader:
print ''.join(row)
もし、下記のようなエラーが出た場合は、お使いのPythonバージョンがPython2.7未満かと思います。
Traceback (most recent call last):
File "magic.py", line 5, in <module>
with gzip.open(file, 'r') as f:
AttributeError: GzipFile instance has no attribute '__exit__'
Python2.7未満の場合はgzipにコンテキストマネージャーの機能が実装されていませんので、with文では使えません。→ [Pythonドキュメント-gzip]
以下のように書きます。
import gzip
import csv

file = 'supercalifragilisticexpialidocious.txt.gz'
f = gzip.open(file, 'r')
reader = csv.reader(f, delimiter='¥t')
for row in reader:
print ''.join(row)
f.close()
下記の出力が得られるはずです。
supercalifragilisticexpialidocious!
supercalifragilisticexpialidocious!
supercalifragilisticexpialidocious!
大きなファイルを圧縮できたらスッキリ!
supercalifragilisticexpialidocious!
| kubor | システム | 14:34 | comments(0) | - |
シェル芸
hatです。
先日、jus & USP友の会さんのシェル芸勉強会に参加してきました。

シェル芸は、USP友の会会長上田さんのブログで次のように定義されています。
「マウスも使わず、ソースコードも残さず、GUIツールを立ち上げる間もなく、あらゆる調査・計算・テキスト処理をCLI端末へのコマンド入力一撃で終わらすこと。あるいはそのときのコマンド入力のこと。」

シェル芸勉強会、ディープでした。
まがりなりにも十数年仕事でLinuxを使ってきて、それなりにシェルスクリプトを使える自信はあったのですが、私などまだまだだということを痛感しました。
知らなかった(ほとんど変態的ともいえる)テクニックや便利なコマンドを教えていただき、大変勉強になりました。

上田さんのブログで勉強会の過去問が公開されていますので(シェル芸勉強会問題一覧)、ご興味のある方はシェル芸に挑戦してみてはいかがでしょう。
| hat | システム | 15:29 | comments(0) | - |
or dieよりもautodieがナウい
こんにちは、朝ごはんはパン派の久保(kubor)です。
みなさん、Perl書いてますか?

文字列処理が得意なPerlの使いドコロといえば、FASTQファイルを処理したり、TSVファイルを処理したり、とにかくファイル操作が多いです。
Perlでは、ファイルハンドルの作成に、open関数を使いますが、
この時、ファイルを読み込めたかどうかをチェックしたい場合が多いです。

よく書くのが以下の例です。

[selfDie.pl]
open my $FH_HOGE, '<', $ARGV[0] or die "Error: Cannot open $ARGV[0]"

これでも良いのですが、複数のファイルを開いたり、閉じたり、
開いたりしていると、「or die "Error: Cannot open $ARGV[0]"」を何回も書くのは、煩わしくなってきます。

そんなときは、冒頭で「use autodie;」と書いておきましょう。
「autodie」は標準モジュールなのですが、組み込み関数の例外を上手く処理してくれる大変便利なモジュールです。

[spewDie.pl]
use autodie;
open my $FH_HOGE, '<', $ARGV[0]
これを実行すると
perl spewDie.pl hoge.txt
Can't open 'hoge.txt' for reading: 'そのようなファイルやディレクトリはありません' at sampleperl.pl line 3
このように勝手にdieしてくれます。
素敵ですね。
use strict;
use warnings;
use autodie;
use utf8;
僕は、この4つをテンプレートに入れています。
例外処理を細かく書かないのであれば、とりあえず書いておくのがお勧めです。
| kubor | システム | 15:18 | comments(0) | - |
全部ぶちまける前に
五月になり、GWも終わって、世間の新歓ムードも落ち着いてきました。

自分が学生や新社会人だった頃を思い返すと、この時期はお酒を飲んでいろいろなもの(暴言や未消化の食物)を口から出していた思い出ばかりです。

そのような記憶を胆汁の味とともに苦々しく思い出しながら、五月の爽やかな風に吹かれている今日この頃です。
続きを読む >>
| hat | システム | 15:32 | comments(0) | - |
書き込み権限の無いファイルをsudoで上書き保存する
こんにちは、根は真面目な、久保(kubor)です。
みなさん、Vim使ってますか?

vimでファイルを編集し終わって、よし、保存しようと思い、
:w
E45: 'readonly' オプションが設定されています (! を追加で上書き)

「ああああ、sudo vimしてない」てなことが結構有ります。

そんな時には、このコマンドを使って無理やり保存してしまいます。
:w !sudo tee % > /dev/null

Vimコマンドでは、! がシェルコマンドの呼び出し、
% が編集中のファイル名です。

すなわち、root権限でteeを実行し、編集中のファイルと同名のファイルに無理やり書き込んでいるのです。
このコマンドを実行後に、「編集中に上書きされました」と警告が出ますが、気にせずそのまま「q!」で終了しても問題ありません。
変更は書き込まれています。

あまりにも重宝するので、僕は、.vimrcに以下の設定を加えて「w!!」にエイリアスしています。

cmap w!! w !sudo tee % > /dev/null


現場からは以上です。
| kubor | システム | 15:14 | comments(0) | - |
Pythonの19のおきて
温泉街などに行くと「長生きの心得 10訓」や「夫婦円満の秘訣 20条」などを湯飲みやペナントに書いたものが売られているのを目にすることがあります。
箇条書きなので一見説得力がありますが、良く読むとそれほど実のあることを言っていなかったりして、そのゆるさにリゾート感が高まります。

先日、一緒にプログラム開発をしている方に、PEP 20 The Zen of Pythonというのがあることを教えていただきました。
Pythonistaが心得ておくべき19条とのことです。

Pythonの対話モードで「import this」を実行すると内容を見ることができます。
続きを読む >>
| hat | システム | 14:02 | comments(0) | - |
CentOSの2TBの壁
こんにちは。Kitanoです。

突然ですが、皆さんは「CentOSにおける2TBの壁」というものをご存知でしょうか? これは、サーバ構築時やfdiskコマンドによるパーティション作成の際に、2TB以上のパーティションの作成ができないという問題を示した言葉です。
つまり「3TBのHDDを購入しても3TBのまま使えない」と言うことです。
しかし、バイオインフォマティクスにおいてはデータ量が膨大であり、バックアップを取る際など大容量のHDDを必要とする場面が少なくありません。
そのような場合、今回ご紹介する方法であれば、簡単に「2TBの壁」を超えることができます。

その方法とはディスク・ユーティリティによるパーティション作成です。

まず、ディスク・ユーティリティを開きます。
ディスク・ユーティリティはCentOSのGUI操作により開くことができます。
(スタート画面の左上)アプリケーション>システムツール>ディスク・ユーティリティ
次に、ディスク・ユーティリティ内のストレージデバイスに表示されているHDDの中から、使用したいHDDを選択します。
最後に、「ドライブをフォーマット(D)」を選択し「GUIDパーティションテーブル」に指定した後、フォーマットを行います。

これで完了です。ただし、最後の手順の際にHDDをフォーマットするため、データ管理には注意が必要です。
後は、使用したい場所にマウントするだけで、大容量のHDDを使用することができます。

この方法であれば、特別なCUI操作も必要なく、「CUI操作が苦手」と感じておられる方でも比較的簡単に行えるのではないでしょうか。
ぜひお試しください。
| kitanog | システム | 15:56 | comments(0) | - |
ログの残し方
ソフトウェアによっては、実行時に非常に詳細なログをずらーっと出力してくれます。
なぜか解析がうまくいかないときなど、解析時の実行内容を確認するため、このログを後から見返すと役に立つことも度々あります。
しかし、ログを流しっぱなしにしては、後から見返す際に不便です。
そこで、そのログをファイルに書き出して残す方法をご紹介します。

$ command > log.txt

> はリダイレクトと呼び、コマンドの標準出力をファイル(ここではlog.txt)に書き込む記号です。

コマンドの出力には標準出力だけでなく標準エラー出力もあります。
標準出力と標準エラー出力を分けて残したい場合は以下のようにします。

$ command > log.txt 2> log_error.txt

標準出力と標準エラー出力を、一緒にログに残すためには、 2>&1 と付け加えます。>と&の順番に注意してください。

$ command > log.txt 2>&1

【FastQCでの使用例】
$ fastqc --nogroup test_1.fastq > log.txt 2>&1

log.txtの中身を確認してみると、普段は画面上に出力されるFastQCの進行状況が書き込まれていることがわかります。
| kubo | システム | 15:01 | comments(0) | - |
grepのこんなオプション
grepでは検索にヒットした行の前後の行を併せて表示することができます。

このようなファイルがあった場合に
Humpty Dumpty sat on a wall,
Humpty Dumpty had a great fall.
All the King's horses, And all the King's men
Couldn't put Humpty together again!


$ grep -B 1 'King' file を実行すると以下の結果が得られ、
Humpty Dumpty had a great fall.
All the King's horses, And all the King's men


$ grep -A 1 'King' file を実行すると以下の結果が得られます。
All the King's horses, And all the King's men
Couldn't put Humpty together again!


例えば、fastqファイルをIDで検索して塩基配列も同時に見たりするときに便利です。
AfterのAとBeforeのBと覚えると覚えやすそうです。

| hat | システム | 14:32 | comments(0) | - |
大事なことなので
10年以上Linuxで仕事していますが、いまだに知らないコマンドが
たくさんあります。
最近 yes というコマンドを知りました。
指定した文字列をひたすら出力し続けるコマンドです。

実行例です。

$ yes SPAM!
SPAM!
SPAM!
SPAM!
SPAM!
SPAM!

止めるにはCtrl+Cを押してください。

これはかなり暑苦しいです。これからの季節にぴったりですね。

なんのためにこんなコマンドがあるのかと思いましたが、
インストール中や実行中にしょっちゅうyesかnoか聞いてくるような
ソフトウェアを実行するときにかませると、全部yで自動応答するので
便利だそうです(文字列を指定しないと「y」になります)。

ちなみに no というコマンドがあるか試しに実行してみましたが
ありませんでした。

※実行環境はCentOS 6.4です。

| hat | システム | 14:53 | comments(0) | - |
数値をカンマで3ケタ区切りにする
先日、数年ぶりに同い年の従兄弟に会いました。彼は正規表現の研究をしています。具体的にどんな研究をしているのか想像できないのですが、日頃からお世話になっている技術なので、お礼を言っておきました。

ということで、正規表現を使って、数値を3ケタのカンマ区切りにする方法をご紹介します。PerlとPythonです。

・Perl
$num = 1234567890;
$num =~ s/(¥d{1,3})(?=(?:¥d¥d¥d)+(?!¥d))/$1,/g;
print "$num¥n";
・Python
import re   #正規表現操作モジュールのインポート
num = 1234567890
num = re.sub(r'(¥d)(?=(¥d{3})+(?!¥d))', '¥¥1,', str(num))
print num
以上のソースコードをそれぞれファイルに保存して実行すると、以下のように3ケタごとにカンマで区切られた結果を出力します。
1,234,567,890
Pythonの場合、localモジュールを使う方法もありますが、今回は正規表現を使った方法のみのご紹介でした。
| heshi | システム | 15:38 | comments(0) | - |
ファイルの大きさを知りたい
あるディレクトリに含まれているファイルのサイズを知りたい場合に、「du」というコマンドを使います。
$ du
このコマンドを実行するとカレントディレクトリ以下の全ディレクトリのファイルのサイズを再帰的に、つまり一番深い階層のディレクトリまで全部表示してくれます。また「-h」オプションを付けることで、出力されるファイルサイズを見やすくしてくれます。
$ du -h
しかし、このままでは、再帰的に全ディレクトリのサイズ情報が出力されるため、出力行数が多くなり、お目当てのディレクトリのサイズを確認することが困難です。そこで、以下のオプションをつけてみましょう。
$ du -h --max-depth=1
この「--max-depth=」オプションは、表示するディレクトリの階層の深さを表します。1に設定すれば、カレントディレクトリから一階層下のディレクトリまでしか見に行きませんので、結果が確認しやすくなります。
ぜひお試しください。
| deda | システム | 15:36 | comments(0) | - |
維持してコピー
Linux上でファイルをコピーする際に、「cp」というコマンドを使用します。
$ cp hoge.txt ../
このコマンドでは hoge.txt を一つ上の階層のディレクトリにコピーしていますね。またディレクトリをコピーする際は、以下のオプションを付けます。
$ cp -r hogedir/ ../
「-r」オプションを付けることでディレクトリもコピーできます。しかし、これらの方法では、シンボリックリンクなどはリンク先の実体ファイルがコピーされてしまいます。実体ファイルのサイズが巨大な場合は困ったことになります。そこで、以下のオプションをつけてみましょう!
$ cp -ar hogedir/ ../
「-a」オプションで、ファイルの属性情報を維持したまま、また、シンボリックリンクをリンクのままコピーすることができます。
また余談ですが、「rsync」コマンドでデータをバックアップする場合は「-av」オプションで同じ目的が達成できます。
なかなか使えるコマンドですよ。ではでは。
| deda | システム | 16:53 | comments(0) | - |
ディレクトリ内のファイル数を知りたい
ディレクトリ内のファイル数をカウントしたいことがありますが、大量のファイルが存在する場合、一つ一つ数えるのはとても面倒です。

そんなときは以下のコマンドを試してください。
$ find ./ -type f | wc -l
25

カレントディレクトリ以下に存在するファイルの総数をカウントします。つまり、サブディレクトリ内のファイルを含みます。

カレントディレクトリ上に絞ってファイルの総数を得るには、lsコマンドを使います。
$ ls -1 | wc -l
11

この場合、カレントディレクトリに存在するディレクトリとファイルの総数が得られます。

カレントディレクトリ上のファイルのみ(ディレクトリを除く)の総数を得るには、以下のコマンドを試してください。
$ ls -1F | grep -v / | wc -l
10

ディレクトリ上のファイル数をカウントできます。
| heshi | システム | 15:22 | comments(0) | - |
どこにあるの?
Linux上でファイルを検索する場合は以下のコマンドを使用します。
$ find /home -name hoge.txt
このコマンドでは、/home ディレクトリ以下で hoge.txt を検索します。ファイル名の一部しかわかっていない時は、以下のようにワイルドカードを使用できます。
$ find /home -name *.txt
では、ある特定の文字列を含むファイルを検索したい場合はどうすればいいでしょうか。その場合は以下のコマンドを入力します。
$ find /home | xargs grep "hoge12345"
このコマンドでは、"hoge12345" という文字列を含むファイルを検索することができます。また、システムにパスが通っているコマンドのファイル本体がどこにあるか知りたい時は以下のコマンドを打ちます。
$ which bwa
この例では、bwaコマンドのファイル本体へのパスが表示されます。
これらのコマンド使うと検索が便利になりますよ。
| deda | システム | 15:32 | comments(0) | - |
ファイルの更新日時を詳細に確認する
Linux上でファイルの一覧を取得する際のコマンドである、「ls」にはいろんなオプションがあります。
例えば、以下のオプションでは、日付や権限も分かるリスト形式でファイルの一覧を取得できます。
$ ls -l
ところで、通常の「ls -l」では更新時間の最小単位は分になっています。秒単位で時間を確認したい場合はどうすればいいでしょうか。
そんな時には、以下のオプションを打ってみましょう。
$ ls -l --time-style=full-iso
少々長いですが、このコマンドを打つことで秒単位で更新日時を確認することができます。
| deda | システム | 14:37 | comments(0) | - |
再帰的
recursive:再帰的な
という英語があります。
再帰というのは説明が難しいのですが、wikipediaによると「あるものについて記述する際に、記述しているものそれ自身への参照が、その記述中にあらわれることをいう」のだそうです。
わかりませんね。
「Aについての定義の中に「Aを参照」と書いてある」というようなことです。

Linuxのコマンドのオプションに、このrecursiveが頻出します。
作業ディレクトリの下層のディレクトリにまで下ってコマンドを実行することを「再帰的に」●●(コマンド)する、と表現するのです。

例として /home/amelieff/hoge/moge というディレクトリがあり、作業ディレクトリが /home/amelieff/ だったとします。
amelieff/ディレクトリの下にはhoge/ディレクトリがあり、さらにその下にmoge/ディレクトリがあります。
一番下のmoge/ディレクトリごとhoge/ディレクトリをどこかへコピーしたいときのコマンドは
$ cp -r hoge/ [コピー先]
となります。 -r オプションは、ディレクトリの中のディレクトリも再帰的にコピーする、という指示です。

cpコマンド以外にもrecursiveオプションを指定できるコマンドはたくさんあります(rは大文字だったり、小文字だったりします)。
主に使うものを紹介すると、

$ cp -r [ファイル/ディレクトリ] [コピー先]
ディレクトリの内容を再帰的にコピー
(ディレクトリの中のディレクトリにまで下ってすべてコピー)

$ ls -R
ディレクトリの内容を再帰的に表示する
(下層のディレクトリの内容まですべて表示)

$ grep -r [パターン] [ディレクトリ]
ディレクトリの内容を再帰的に文字列検索する
(下層のディレクトリの内容もすべて検索して表示)

$ chmod -R [モード] [ディレクトリ]
ディレクトリの内容を再帰的にアクセス権限を変更する

ちなみにrecursiveの名詞形はrecursionですが、Googleの検索ボックスで"recursion"と入れて検索すると……?
(大したことのない小ネタなので、お暇な時にどうぞ)
| kubo | システム | 15:16 | comments(0) | - |
最新のファイルを知りたい時
Linuxのコマンドで
$ ls -l
というのがあります。このコマンドを実行すると、ファイルとディレクトリの一覧をアルファベット順で取得できます。ですがファイルの更新日時順に並べたい時も結構あります。そんな時には以下のオプションを使ってみましょう!
$ ls -lt
すると、更新日時が新しい順に上から下までソートされて出てきます。便利ですね。
また、ファイルの数が多すぎて、このコマンドを実行しても実行結果の上部が隠れてしまい、最新のファイルがどれかわからなくなる時があります。
そんな時は、以下のオプションを使ってみましょう!
$ ls -ltr
すると、今度は更新日が新しい順に、下から上までソートされて出てきます。一番下に表示されたファイルが最新ということですね。
このコマンドはたまに使えるので覚えておくと便利かもしれません。
| deda | システム | 14:55 | comments(0) | - |
Pythonでグラフを書こう その3
Pythonでグラフを書こう、の第3回です。
前回の記事では、matplotlibを使用して円グラフを描いてみました。今回はそのプログラムのソースを見ていきたいと思います。

前回の記事でダウンロードした pie_chart.py をテキストエディタなどで開くと以下のように表示されます。

===========================================
import matplotlib.pyplot as plt

# The slices will be ordered and plotted counter-clockwise.
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs')

plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=90)
# Set aspect ratio to be equal so that pie is drawn as a circle.
plt.axis('equal')
plt.show()


===========================================

最初のimport行は、matplotlibを使用するためのおまじないです。
labelsでグラフの各項目のラベル、sizesで各項目の割合、colorsで各項目の色を決定します。またexplodeは円グラフの該当する項目を円から離す設定を書き込みます。explodeの次の行の plt.pie() で、円グラフに上記の設定を反映させます。

これらの設定を変更することで多様な円グラフを書くことができます。次回は、別の種類のグラフを書いてみたいと思います。
| deda | システム | 14:44 | comments(0) | - |
Pythonでグラフを書こう その2
Pythonでグラフを書こう、の第2回です。
前回の記事では、グラフの描画パッケージであるmatplotlibのインストールを行いました。今回は、簡単なグラフを書いてみたいと思います。

matplotlibのウェブサイトには豊富なexampleが表示されていまして、任意のグラフをクリックするとそのソースが表示されます。それを、そのままコピー&ペーストするだけでグラフを書くことができます。それでは、Pie and polar charts の左側のグラフをクリックしてみましょう。するとそのグラフのページが開きます。このページの下方にソースが書かれていますので、それをそのままコピー&ペーストして、pie_chart.pyとして保存し、自分の環境(ここではCentOS)で実行してみましょう。

$ python pie_chart.py

GUIのデスクトップ上で実行した場合は、そのまま下記のような円グラフが表示されたと思います。


しかし、コマンドラインのみの環境(外部からssh等で接続している場合等)では、実行してもエラーになります。デスクトップ上に出力できないためです。そこで以下のソースを追記することで、グラフの出力先をファイルに変更することができます。

【プログラムの先頭に以下の2行追記】
import matplotlib
matplotlib.use('Agg')

【プログラムの最後に以下の1行追記】
plt.savefig("hoge.png")


この内容で実行すると、PNGフォーマットでグラフを保存できます。
このプログラムの詳細については、次回お話したいと思います。
| deda | システム | 15:03 | comments(0) | - |
楽しくコマンドを覚える・7
「nice」コマンドは、プロセスの優先順位を設定するコマンドです。

プロセスの優先度(ナイス値)を-20〜19の整数で決めます。-20が最優先で、数が大きくなるほど(19に近くなるほど)優先度が低くなります。
複数のジョブのうち特に急ぎのものがある場合、より多くの計算資源をそのジョブに振り分けられるというわけです。

使い方としては、
nice -n -20 command

-nオプションでナイス値を決めます。上の場合、最優先の-20なので、大急ぎでこのお仕事を捌いてくれるはずです。
-nオプションを指定しないと、ナイス値は10になります。

「ナイス値(niceness value)」=どれだけナイスなプロセスか、という指標です。おもしろいですね。

覚え方は、
急ぎの仕事ナイッスか?

個人的に力作です!
| heshi | システム | 10:20 | comments(0) | - |
楽しくコマンドを覚える・6
楽しくコマンドを覚える・1
楽しくコマンドを覚える・2
楽しくコマンドを覚える・3
楽しくコマンドを覚える・4
楽しくコマンドを覚える・5

突然ですが、選択の積み重ねこそが人生なのではないでしょうか。

かつ丼が好きだけどカレーライスも好きだ!
でも今日のお昼には一つしか選べない!困った!

というようなことがしばしばあるかと思います。

Linuxを使っている時も、
この実行結果を、標準出力にも出したいし、
ファイルにも出したい!どうしたらいいんだ!

ということがあるのではないでしょうか。あります。きっとあります。

そのような場合に両方を実現できるのが、teeコマンドです。

例えば次のコマンドを実行してみましょう。
$ echo "好きだ!" | tee log.txt
好きだ!

echoの結果が標準出力に出ました。

teeで指定したファイルの中身を見ると、こちらにも同じ内容が
書き込まれています。
$ head log.txt
好きだ!


現実世界もこのように全てを叶えられたらいいですね。
※いい語呂合わせは思いつきませんでした。
| hat | システム | 14:46 | comments(0) | - |
Pythonでグラフを書こう その1
 バイオインフォマティクスの分野に限らず、様々な数値データをグラフで可視化したいという要望はよくあります。手作業でよければエクセル等の表計算ソフトを利用する事もできますが、グラフの描画を自動化したい場合はどうすればいいのでしょうか。
 そこで、今回は、Pythonでグラフを描画するパッケージである「matplotlib」を紹介いたします。matplotlibの詳細についてはこちらのwikipediaのページが詳しいので、こちらを参照ください。では、さっそくmatplotlibをインストールしてみましょう。今回インストールした環境は以下の通りです。

CentOS 6.4 64bit
Python 2.7.2
numpy インストール済み

matplotlibの実行にはnumpyが必要になります。numpyが入っていない場合は、こちらのページなどを参考にインストールしてください。

次に、matplotlibのインストールに進みます。mapplotlibのダウンロードページを開き、matplotlib-1.3.0.tar.gz をクリックしてダウンロードします。ダウンロードが終わりましたら、以下のコマンドで解凍し、出来たディレクトリに移動します。

$ tar zxvf matplotlib-1.3.0.tar.gz
$ cd matplotlib-1.3.0

そこでルートユーザーになって、以下のコマンドを入力すると、インストールが完了します。

$ su
# python setup.py build
# python setup.py install

matplotlibのインストールにはnumpy以外にもいくつかの外部パッケージが必要になります。それらが入っていない場合は、matplotlibのInstallingのページを参考にされるといいかもしれません。

次回からはmatplotlibの使い方を紹介したいと思います。

| deda | システム | 17:24 | comments(0) | - |
楽しくコマンドを覚える・5
楽しくコマンドを覚える・1
楽しくコマンドを覚える・2
楽しくコマンドを覚える・3
楽しくコマンドを覚える・4

suは別のユーザになるコマンドです。

$ su 別のユーザ
のように実行します。
そのユーザのパスワードを聞かれますので入力してください。
パスワードが正しければ、そのユーザになります。

また、
$ su
のようにユーザ名を指定しないで実行すると
rootユーザになることができます。

現実世界では他人になりかわることは難しいですが、
Linuxではパスワードさえ知っていれば、誰にでも
(全知全能のrootユーザにでも!)なることができます。

そんな解放感いっぱいの気持ちを、次の語呂合わせに籠めてみました。

別人になったらスーっとした

suしすぎて、自分が誰なのかわからなくなってきたら
$ whoami
で、確認してください。

※あと5回は続きます。
| hat | システム | 14:26 | comments(0) | - |
楽しくコマンドを覚える・4
Linuxコマンドの機能を楽しく覚えるシリーズです。
今回は「ssh」コマンドです。これは、リモートマシンへのログインやコマンド実行をするためのコマンドです。クライアントとリモートマシンの通信データが暗号化されるので、インターネット経由でも比較的安全です。sshとは"Secure Shell"の略です。
使い方は以下の通りです。

・IPアドレス(xxx.xxx.xxx.xxx)でリモートログイン
$ ssh xxx.xxx.xxx.xxx

・リモートでコマンド実行
$ ssh xxx.xxx.xxx.xxx ls

IPアドレスの代わりにホスト名でログインすることや、ユーザを指定してログインすることも可能です。

覚え方は、
シーッ」と静かにリモートログイン

ちなみに英語の正式な「シーッ!(静かにしなさい!)」は"Shh!"です。惜しいんです!

実はこのシリーズ、弊社の2014年カレンダーに掲載されます。1か月に1つずつ紹介するので、合計12個のLinuxコマンドを楽しく覚えて頂けます!
| heshi | システム | 14:16 | comments(0) | - |
楽しくコマンドを覚える・3
ファイルの各行を並び替えるにはsortコマンドを使います。

sortコマンドにはオプションがたくさんあります。
例えば、-nで数値としてソートしたり、-rで逆順にしたり、
-kで並び替えに使う列を指定したりできます。

また、大きいファイルをソートして途中で落ちてしまう場合、
-Tで中間ファイルを指定すると動くことがあります。
→過去の記事:「余裕が大事」

重複行をマージするuniqコマンドは、隣り合った行しかマージしません。
このため、uniqする前にはsortするとよいでしょう。
$ sort FILE | uniq

そんな大事なsortコマンドを忘れないよう、語呂合わせを考えました。

ソーット並び替え...

このだじゃれシリーズはまだ続きます。
| hat | システム | 14:55 | comments(0) | - |
楽しくコマンドを覚える・2
hatさんの「wc」コマンドに引き続き、「chown」コマンドの覚え方です。
「chown」はファイルやディレクトリの所有者を変更するLinuxコマンドです。次のように使います。

$ chown user:group FILE

これで、FILEの所有者と所属グループが変更されます。
chownコマンドの由来は、おそらく"change owner"ですが、できればもっと楽しく機能を覚えたいですよね。
そこで、次のダジャレを考えました。

所有者を変えまチョーン

これでいちいちman chownやchown --helpを実行してUsageを確認する
必要がなくなりましたね。よかったです。

※このシリーズはもう少し続く予定です。
| heshi | システム | 18:18 | comments(0) | - |
遺伝的アルゴリズム
「遺伝的アルゴリズム(以後GA)」とは、生物の進化を模倣した最適化アルゴリズムです。

「無数のルートの中から近道を探す」というような問題のように、複数の選択肢の中から最適なもの(解)を選択したいときがあります。そんなときは、最適化アルゴリズムの出番です。最適化アルゴリズムの中で、バイオ系研究者にも親しみやすいのがGAです。

個体群が、選択・交叉・突然変異によって環境条件に適応するように何世代にも渡って進化を繰り返すと、生き残った個体はものすごく優秀だと言えます。

GAの最初のプロセスとして、個体の表現方法と評価方法を考える必要があります。これらは解決したい事象によって工夫しなければならないものですが、「遺伝的」という名前の所以となるプロセスが以下の3つです。
・選択(淘汰):評価の高い親を選ぶ
・交叉:選ばれた親(ペア)から子供を生成する
・突然変異:任意の確率で突然変異を起こす

「遺伝的アルゴリズム」というネーミングについては、「遺伝的」というより「進化的」といった方がしっくりくる気もしますが、「進化的アルゴリズム」というものがGAの1つ上の階層に存在していて、GAは進化的アルゴリズムの一種なのだそうです。Wikipediaによると。

GAはRのパッケージとしても用意されているので、なにか最適化問題に直面したときは、どうぞ使ってみてください。
| heshi | システム | 17:08 | comments(0) | - |
楽しくコマンドを覚える・1
「wc」はファイルの行数、単語数、バイト数を表示するコマンドです。
次のように使います。

$ wc FILE
12 27 176 FILE


実行してはみたものの、どれが行数でどれが単語数かわからなく
なることはありませんか?ありますね!

あるいは、3つ目の数字が何を示すかど忘れしてしまうことは?
あるある!

そんなあなたのために、次の語呂合わせを考えました。

ワシ(wc)、ギョーザとワンタン作るバイ

これでいちいちman wcやwc --helpを実行してUsageを確認する
必要がなくなりましたね。よかったです。

※このシリーズはもう少し続く予定です。
| hat | システム | 16:15 | comments(0) | - |
相対パスと西瓜わり
夏の風物詩の一つと言えば「西瓜わり」ですが、
西瓜に向かっている人に、どのような指示を出しますか?

「(そこから)まっすぐ前」「ちょっと右」のように
今いる場所からどちらに向かえばいいかを伝えると思います。
「北緯36度東経140度に移動してください」とは言いませんよね。

前者がコンピュータで言うところの「相対パス」で、
後者が「絶対パス」です。

「絶対パス」は常に同じであるというメリットがありますが、
階層が深くなるほど文字数が長くなりがちです。
近くに移動したい場合は、今いるところから見てどちらかを示す
「相対パス」を使うほうがわかりやすいことが多いです。

Linuxで「/home/amelieff/」から「/home/genome/」に
相対パス指定で移動する

$ cd ../genome

Rで「C:/Users/amelieff/Documents/」から
「C:/Users/amelieff/Desktop/1_work/」に相対パス指定で
移動する

> setwd("../Desktop/1_work")

「相対パス」と「絶対パス」については以前にも記事を書いていますので、
ご参考になれば幸いです。

「絶対パス」と「相対パス」を使い分けて、LinuxやRを
楽に速く操作しましょう!
| hat | システム | 11:07 | comments(0) | - |
熱中症
暑い夏が続きますが、皆様いかがお過ごしでしょうか。
こう暑い日が続くと心配になるのは熱中症ですね。
人はもちろんペットなども熱中症には要注意です。そして、それ以外にも熱に弱いものがあります。そう、パソコンやサーバーです。

冷房の効いた涼しい部屋にサーバーが設置できればいいのですが、そうもいかない場合も多々あるでしょう。
そのような状況におけるサーバーの熱対策について、簡単にできるものをいくつか書いてみました。

1、室内での設置位置を工夫する
 まずは、窓際などの日光が当たるところにサーバーを設置するのはやめましょう。また、サーバーの周囲を机や壁でかこってしまうと熱がこもりますので、サーバー周りはスペースに余裕を持たせるようにしましょう。

2、エアフローを考える。
 基本的に弊社が販売しているようなタワー型のサーバーでは、前面から冷却用の空気を吸って、背面に排気しています(例外もあります)。ですので、前面にエアコンの風が当たるようにしたり、背面にスペースを持たせ、サーキュレーターを設置して空気の流れを作るだけでも、大きな違いがあるでしょう。

3、ほこりをとる
 設置場所にもよるのですが、床の上や、ほこりっぽいところに置いてあるサーバーは、内部やファンの吸気口にほこりがたまりやすくなります。ほこりがたまれば、当然のようにエアフローが悪化し、熱もこもりやすくなります。一年に一回はサーバーの中のほこりをとることをお勧めします。

以上、いろいろと書いてきましたが、これ以外にも冷却ファンを高性能なものにかえる、温度を常に監視するなどいろいろな対応法があります。
サーバーの熱対策もしっかりして、よりよい解析ライフが過ごせるようにしたいものですね。
| deda | システム | 15:58 | comments(0) | - |
いろいろな「さよなら」
hatです。

久しぶりにftpをコマンドラインから使う機会があり
終了コマンドがわからなくて調べたら「bye」でした。

「bye」はかっこいいなあと思いまして、
他のコマンドやプログラミング言語についても
終了コマンドを整理してみました。

exit派
・Windowsコマンドプロンプト
・Perl言語
・PHP言語
・Python言語(「sys.exit()」 ※対話モード終了はCtrl+D)
・Java言語(「System.exit()」)
・nslookupコマンド
・sshコマンド(「logout」でも)

quit派
・telnetコマンド
・ftpコマンド(「bye」でも)

独自路線
・R(「q()」※作業スペース強制非保存は「q("no")」)
・日本語プログラミング言語なでしこ(「終了」)

※強制終了dieとかもありますが省略

やはりexitやquitが多数派なのでしょうか。
確かに共通化されていたほうがわかりやすいのですが
byeは3文字で打ちやすく、実行後の気分も爽やかなので
もっと評価されてもいいのになあと思いました。

他に変わった終了コマンドをご存知の方は教えてください。

bye
| hat | システム | 16:04 | comments(3) | - |
scp stalled
サーバー間で、データをやり取りするときによく使用するコマンドにscpがあります。
便利なコマンドなので、私も良く利用するのですが、コピーしている途中で転送速度が急激に低下し stalled という表記と共に、コピーがストップすることがあります。

原因としては、ネットワークの速度に問題がある場合が多いようですが、何度コピーを試みても落ちることもあり、なかなか不便です。

解決策がないものかと、ネットで調べていたのですが、[-l]オプションで転送速度の上限を指定すれば落ちにくくなるようです。

$ scp -l 5000 hoge.txt 192.168.0.0:/home/hoge

-l の後ろに指定する数字はKbit/s単位になります。私はこれで、落ちにくくなり、データを無事にコピーすることが出来ました。

stalledが出るときは、この方法を試してみるのもいいかもしれません。
| deda | システム | 14:55 | comments(0) | - |
shufコマンド
「入力行をランダムに並び替えて出力する」
shufというコマンドがあることを知りました。

早速試してみました。

こんなファイルを作りました。

$ more urashima.txt
むかしむかし
うらしまは
たすけたかめに
つれられて
りゅうぐうじょうへ
きてみれば
えにもかけない
うつくしさ

shufしてみましょう。

$ shuf urashima.txt
うらしまは
むかしむかし
えにもかけない
うつくしさ
つれられて
りゅうぐうじょうへ
たすけたかめに
きてみれば

前衛詩っぽくなりました。

$ shuf urashima.txt
えにもかけない
りゅうぐうじょうへ
たすけたかめに
うらしまは
つれられて
きてみれば
うつくしさ
むかしむかし

なんだか楽しくなってきたのですが、
キリがないのでこれくらいでやめます。

このコマンド、とても何かに使えそうな気がするのですが、
具体的な用途が思いつきません。
活用されている方がいらっしゃったら、ぜひ教えてください。

知らないコマンドがいっぱいあるなあという話でした。
| hat | システム | 16:42 | comments(0) | - |
改行コードを確認
Linuxで作業をしていると、ファイルの改行コードやタブがどこに含まれているかを確認したい時があります。

そのような時に、私は od -c コマンドをよく使います。

例えば、以下のようなファイル hoge があったとしましょう。

$ less hoge
hoge moge
moge piyo
piyo hoge


これだけではよくわかりませんが、この中にはタブやスペースが含まれています。では、od -c コマンドでこのファイルを覗いてみましょう。

$ od -c hoge
0000000 h o g e   m o g e ¥n m o g e ¥t p
0000020 i y o ¥n p i y o   ¥t   h o g e ¥n


このように、改行コードが¥nであること、¥tが含まれている位置や空白(スペース)がどこにあるかよくわかります。

ちょっとした時に便利なコマンド od -c の紹介でした。
| deda | システム | 15:21 | comments(0) | - |
比較演算子の比較
ShellスクリプトとPerlスクリプトを書く機会が同じくらいあるので、
しばしば文法が混乱します。

面倒くさいのが、Shellでやろうと思って書きかけた処理を
途中で「やっぱりPerlにしよう」とPerlに書き直すときで、
変数が最初に出てきたときから頭に「$」がついていて怒られたり、
行末に「;」を付け忘れて怒られたり、とにかく怒られます。

一番混乱するのが比較演算子で、
Shellだと数値比較が「-eq」でPerlだと文字列比較が「eq」だとか、
Shellだと文字列比較が「=」でPerlだと数値比較が「==」だとか、
Shell派とPerl派の間でなにか確執があったのだろうかと勘繰ってしまうくらい
錯綜しています。

毎回混乱するので表にまとめてみました。
これで、いきなり「Shellの数値比較演算子は!」と聞かれても大丈夫ですね。


今回の記事、最初は「SEあるある」だと思ったのですが、
ちゃんとしたSEは文法チェッカーのついている開発環境でプログラムを
書くので(おそらく)、こういった些事は気にならないのかもしれないなと
途中で思いました(私はviで書いています)。

| hat | システム | 17:23 | comments(0) | - |
MacBookにUbuntu
自宅のMacBookにUbuntuを入れてみました。

既存のOSXを再インストールする必要もなく、あっけないくらい簡単でした。

手こずったのは最初家のWifiを認識しなかったことくらいですが、有線LANにつないでapt-getでアップデートしたらつながるようになりました。

手順はこんな感じです。

1. Ubuntuを入れるためにディスクを空けます。
「ディスクユーティリティ」で現在OSXが入っているパーティションのサイズを小さくし、40GBくらい空けました。

2. OSX上にブートマネージャ「rEFIt」をインストールします。
http://refit.sourceforge.net/

3. Ubuntuをインストールします。
Ubuntuのブータブルディスクから起動してインストールします。私はパソコン雑誌についてきたDVDを使いました。

Ubuntuはマウスをアイコンでクリックするだけでいろいろとできてしまうので、Linux食わず嫌いの方にもぜひお試しいただきたいなあと思いました。
たまに面倒くさい処理をしたい時にだけコマンドを使っていただいて、その便利さを感じていただければと思います。

Ubuntuはディスクから起動することも、VirtualBox上で動かすこともできますので(仮想ハードディスクイメージが公開されています)、それならアプリケーションを一つ入れる感覚で、もっとお手軽ですね。
| hat | システム | 10:04 | comments(0) | trackbacks(0) |
余裕が大事
linuxには、処理中の一時ファイルを出力する/tmpや/var/tmpというディレクトリがあります。

巨大ファイルのソートなど、一時ファイルを大量に出力する処理では、/tmpディレクトリの空き容量が足りないと処理が止まります。

そんな時の解決策をまとめてみました。

解決策1./tmpディレクトリ内のファイルを削除して、空きを増やす

linuxには/tmp内の10日以上更新されていないファイルを自動的に削除するしくみがあります(/var/tmpは30日)。

通常はこれで十分なようですが、NGSのデータは大きいので、解析を続けていると自動削除が間に合わず/tmpがいっぱいになってしまう場合があります。
その場合、/tmp以下のファイルを手動で削除して容量を空けてあげます。

/tmp以下には基本的に「消されて困らないものしか置かない」ことになっていますので、基本的には削除してしまって大丈夫なのですが、怖い場合は他の場所(自分のホームディレクトリなど)に移動するのでもいいです。

ただし使用中のファイルがある可能性がありますので、実行中のプロセスを確認してから行いましょう。


解決策2.一時出力先を/tmp以外に変更する

コマンドによっては、一時出力先を変更できるものがあります。
例えば、sortでは「-T」オプション、javaでは「-Djava.io.tmpdir」オプションで任意出力先を指定できます。

$ sort -T /home/hat/mytmp IN.txt > OUT.txt

$ java -Djava.io.tmpdir=/home/hat/mytmp -jar SortSam.jar I=IN.bam O=OUT.bam SO=coordinate


これなら/tmpディレクトリの空きを気にしなくていいです。

注意点として、自分で指定した先に出力された一時ファイルは時間が経ってもlinuxに自動削除されませんので、不要になったら手動で消す必要はあります(一時ファイルは、処理が終わると削除されるものも多いですが)。

コマンドのオプションで変更できない場合は、以下のようにenvコマンドで環境変数TMPDIRを指定して実行することにより、実行中の間だけ一時出力先を変更することもできます。

$ env TMPDIR=mytmp samtools sort IN.bam OUT


解決策3.環境変数TMPDIRを設定する

~/.bashrcに
「export TMPDIR=/home/hat/mytmp」
のように設定すれば、以降は一時出力先としてそこが使われます。


この「/tmp空き不足」問題は、朝から晩まで熱心に解析されているお客様ほど発生しやすいので、こちらも最大限のサポートをご提供できるよう、対策ノウハウをためていきたいと思います。
もっと良い解決策をご存知の方はぜひご教示ください。
| hat | システム | 17:06 | comments(0) | trackbacks(0) |
あとはまかせた!
突然ですが、あなたはSEです。次のような時、どうしますか?

・A、Bというプログラムがある。
・Aは3時間、Bは6時間かかる。
・Bは、Aが完全に終わらないと開始できない。
・明日の昼までにBを終わらせる必要がある。
・Aは現在実行中で、あと2時間はかかる見込み。
そしてもう19時だ。

一回しかやらない処理のためにcronを設定するのも面倒くさいし、
21時まで残ってBを実行して帰るか...と思いながら、なんとなくネットで「コマンド 時間後に実行」を検索してみたところ、「at」という便利なコマンドがあることを知りました。

@IT「一定の時間後にプログラムを実行するには」

恥ずかしながら私は今日初めてこのコマンドの存在を知りました。

こんな風に使います。

$ at now + 1 minute
at> cd $HOME
at> echo "Hello, me in the future!" > msg
at> (Ctrl+Dで抜ける)

どきどきしながら1分間待つと、今いるディレクトリに「msg」というファイルができて、その中に
Hello, me in the future!
と怪しい英文が書かれています。

なんとなくタイムマシン気分が味わえますね。

調子に乗って
at now + 5 second
として、5秒以内に設定完了できるかスリルを味わおうと思ったのですが、指定できる単位はminuteからのようでした。残念。

時間指定は、現在からの相対時刻だけでなく、YYYYMMTT形式やat 1am tomorrow(明日の午前1時)、at midnight(真夜中)やat teatime(午後四時)という風にも指定できるようです。

あとはまかせた私は帰る」の「at」と覚えましょう。
| hat | システム | 19:11 | comments(0) | trackbacks(0) |
なにもしない
私はずっと、緩い言語の極致であるPerlを使ってきたので、
同じ感覚でPythonを使っているとインデントや型などが適当で、
「ちゃんとしろ」と怒られることが多いです。

私がPythonでおもしろいと思ったのは、
「なにもしない」というpassという命令文があることです。

向こうから来たのが友達なら「Hello!」と話しかけ、
ライオンなら走って逃げ、それ以外ならなにもしない
という処理をPythonで書いてみました。

#!/usr/bin/env python
import sys
he = "friend"

if he == "friend":
__print "Hello!"
elif he == "lion":
__sys.exit("Escape!")
else:
__# do nothing


これを実行するとエラーになります。
elseの中に命令がないためです。

Pythonは構文の構造にストイックなので、
「elseがあるんだから中になにか書きなさいよ!」と怒るのです。

次のように、elseの中に「pass」を書けば実行できるようになります。

if he == "friend":
__print "Hello!"
elif he == "lion":
__sys.exit("Escape!")
else:
__# do nothing
__pass


「なにもしない」ことまでいちいち宣言するなんて、
Pythonは律儀だなあと思いました。
| hat | システム | 19:19 | comments(0) | trackbacks(0) |
64bit マシンでの Python upgrade
皆様こんにちは。
今回はCentOSの64bit版でPythonをupgradeする方法をご紹介いたします。

現行のPythonには大きく分けて 2.x と 3.x の二つのバージョンがあります。当然3.xの方が新しいのですが、2.xへの後方互換性に乏しい面があり、当面は2.xが主流です。

現行の2.xの最新版は2.7.3になっています。ところがCentOS上でyum updateしても2.6.6のままになります。2.7以降で便利な機能が追加されていることもあり、出来れば2.7.3にしたいものです。

そこで、2.7.3へ手動upgradeをしてみたいと思います。

まず、Python2.7.3を落としてきます。

$ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz

解凍して、作成されたPythonディレクトリに移動します。

$tar zxvf Python-2.7.3.tgz
$ cd Python-2.7.3


configureをします。この時に --enable-shared をつけるようにしてください。

$ ./configure --enable-shared

あとは、make と make install になります。

$ make
# make install


makeが成功したら、さらにlib64へlibpythonのリンクを張る必要があります。

# ln -s /usr/local/lib/libpython2.7.so.1.0 /lib64/

以上で最新版のPythonが利用できるようになります。
次回はここにNumpyを入れていきたいと思います。
| deda | システム | 10:04 | comments(0) | trackbacks(0) |
Python を使ってみよう
皆様、こんにちは。
前回に引き続きPythonについて記事を書かせていただきます。

実は、日本ではPythonの知名度はあまり高くありません。
我々の業界でもPerlやRubyの方がよく使われているように感じます。
実際に、前の記事で紹介したPyConでもwebサービス系の講演がほとんどでした。
しかし、Pythonについて少し調べた限りでは(まだ本当に少ししか調べられてないのですが)理数計算、統計に関するライブラリが非常に充実しています。例えば、少し命令を書くだけでヒストグラムが作れたりするなど、サイエンスの人間が使うのにも非常に適した言語であると感じます。

そこで、今回は Python の文法について、特に他の言語との違いという観点から、ごく一部ですがご紹介したいと思います。

Perlでif-else文を書くと、以下のようになります。

my $cnt = 0;
if ($cnt == 0){
  $cnt++;
}
else{
  print $cnt;
}


これをPythonで書いてみましょう。

cnt = 0
if cnt == 0:
   cnt += 1
else:
   print cnt


どうでしょうか?初めてPythonのソースを見た方は驚かれるかもしれません。私の予想する驚きポイントを以下に記します。

1.{}はないの?ブロック構造はどうやって表現するの?
2.命令の後ろには;とかいらないの?
3.インクリメント演算子はないの?


ブロック構造については、なんとインデントで表現します。インデントの深さでブロックを表現するため、インデントの深さを間違えるとすぐエラーになります。慣れると案外コードを組みやすい記法です。また、誰が書いても同じコードになりやすいため、可読性、保守性が上がります。

また、命令の後ろには;とか要りません。;を毎回打たなくていいのでプログラミング速度は上がります。ただし、ifやelse、for、whileの後ろには:が必要です。たまにPerlとかに戻ると、すぐ;をつけるのを忘れてしまいますのでお気を付け下さい。

あと、細かいことですが、++ や -- 等のインクリメント、デクリメント演算子はありません。+=で対応してください。

Pythonについては、サイエンスの立場から今後もいろいろとご紹介したいと思っています。
今日はこのくらいで。detでした。
| deda | システム | 18:21 | comments(0) | trackbacks(0) |
PyCon JP 2012 に行ってきました
Pythonというプログラミング言語があります。
海外では人気がある言語でして、読みやすさとモジュールの豊富さで日本でもじわじわと人気が出てきている言語です。

つい先日、Pythonのコンファレンス PyConJP 2012 が東京で開催されました。日本中のPython使い達が集まってくる一大イベントです。

今回、私も参加することになりまして、先週土曜日はドキドキしながら会場に向かいました。実際に会場に着きますと、学会等とは異なり、比較的自由な雰囲気が流れていました。いい意味でゆるい感じの会議でした。プログラマ、ハッカー文化の一端に触れた気がしました。

発表内容自体はWebサービス系が多く、私が期待したサイエンス・技術系関連の発表はほとんどありませんでした。しかし、懇親会などで有益な情報を入手することが出来たり、昔の知り合いの方とお会いして今後も情報交換をすることになるなど、非常に有意義な会議でした。

PythonにはNumPyやSciPy等の数値計算系のモジュールが充実しているらしく、今後色々試していきたいと思っています。

ぜひ来年も参加したいですね。

それではdetでした。
| deda | システム | 10:57 | comments(0) | trackbacks(0) |
Linuxでソフトのバージョンを簡単に切り替える方法
Linux上で、いろんなソフトやアプリケーションの複数のバージョンを使い分けたい時ってありますよね。
そんな時に、重宝するのが、[alternatives] というコマンドです。
このコマンドを使うと、簡単にソフトのバージョンを切り替えて使用することができます。

今回は、CentOSを例にalternativesの基本的な使い方をご説明いたします。最近のCentOSでは、デフォルトでOpenJDKが入っています。そこに、SunのJavaを入れて、両方を使い分けてみましょう。
まず、今入っているJavaのバージョン確認をします。

$ java -version
java version "1.6.0_17"
OpenJDK Runtime Environment (IcedTea6 1.7.4) (rhel-1.21.b17.el6-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)


こんな感じでOpenJDKが入っていることが分かります。
では、次にalternatives コマンドでインストールされているjavaを確認してみましょう。

$ alternatives --config java
1 プログラムがあり 'java' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:


このように表示されると思います。いま、alternativesにはOpenJDKだけが登録されています。つぎに、SunのJavaをインストールしましょう。SunのJavaはこのページからダウンロードします。

# rpm -ivh jdk-7u7-linux-x64.rpm
準備中... ################################## [100%]
1:jdk ##################################[100%]
Unpacking JAR files...


インストールできたら、alternatives にSunのJavaを登録します。

# alternatives --install /usr/bin/java java /usr/java/default/bin/java 10

最初の引数はリンク、2つ目の引数はalternativesへの登録名、3つ目の引数はプログラムへの実際のパスを書きます。4つ目の10という数字は登録時の優先度を表します。では、alternatives コマンドで登録状況を確認しましょう。

# alternatives --config java
2 プログラムがあり 'java' を提供します。
選択 コマンド
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
2 /usr/java/default/bin/java
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:


インストールしたSunのJavaが登録されます。ここで2を入力してEnterを押すと、SunのJavaに切り替わります。

$ java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)


このように、alternativesコマンドを使うと、簡単にバージョンを切り替えて、ソフトを利用できます。
alternatives の詳しい使い方などは、ネットで検索すれば沢山出てきますので、ご興味がある方はぜひ調べてみてください。
| deda | システム | 14:26 | comments(0) | trackbacks(0) |
OSX Mountain Lion
先日、OSX 10.8「Mountain Lion」が販売開始されましたね。

iCloudとの連携強化などいろいろな新機能があるようですが、私が一番気になっているのが音声入力機能です。
iPhoneのSiri日本語版は、最初のうちこそ面白がっていろいろ話しかけたものですが、自分の滑舌の悪さによる認識率の悪さに落ち込み、だんだん使わなくなってしまいました。
Mountain Lionではどのくらい認識してくれるようになっているか、楽しみです。

ところでOSXはコードネームがネコ科しばりのようですが、そのうちネタが尽きるのではないかと他人事ながら心配しています。

もしアップルが128ビットOSを出すことになった暁には、ぜひネコ科で体が最も大きいと言われる「Liger(ライガー)」をコードネームに使っていただきたいと思います(どのくらい大きいか、画像検索してみてください)。

「Liger」は、ライオン(オス)とトラ(メス)の間に生まれた交雑種で、基本的には繁殖力がありません。そして、ライオンよりも体が大きくなるというのが不思議です。
トラ(オス)とライオン(メス)の間の雑種も可能で、こちらは「Tigon(タイゴン)」と呼ばれるそうです。

ちなみに今回のOSX 10.8ですが、クラウド()を前面に押し出すならコードネーム「ウンピョウ(雲豹)」のほうがよかったんじゃないかと個人的に思っています。
| hat | システム | 11:40 | comments(0) | trackbacks(0) |
「環境変数PATH」と「アクセス権限」
以前、Linux入門者がとまどいがちなものの一つが「ディレクトリ間の移動」であると書きましたが、今回は残りの二つ「環境変数 PATH」と「アクセス権限」について書きます。

先週の土曜日は、弊社のバイオインフォマティクス・スクール「Linux基礎」第二回でした。
その中で「環境変数 PATH」の説明もあったのですが、やはり最初は「?」という顔をされている方が多かったようです。


「環境変数 PATH」は「みんなが使う道具を置く場所」である

突然ですが、みなさんの家では「つめきり」や「TVのリモコン」をどこに置いていますか?「ドライヤー」や「ヘアブラシ」は?
家族で共有して使うものは、「リビングのカゴ」や「洗面所の棚」など、
みんなが知っている場所に置くことが多いのではないでしょうか。
「環境変数 PATH」はこの「リビングのカゴ」や「洗面所の棚」にあたります。

「環境変数 PATH」には最初から/usr/local/binや/binや/usr/binなどが設定されており、
基本的なコマンドは大体このどこかに置いてあるので、Linuxをインストールした直後からcdやlsが実行できるのです。
お使いのLinuxの「環境変数 PATH」に何が設定されているかは以下のコマンドで確認できます。
$ echo $PATH

また、道具本体を必ずしも「環境変数 PATH」に置いておく必要はなく、
「リビングのカゴ」に「包丁は台所にあります」というメモを貼っておけば、誰でも包丁を見つけることができます。
Linuxでもこのようなことができて、これを「シンボリックリンク」と呼びます。
シンボリックリンクは次のように張ります。
$ ln -s 実体のパス シンボリックリンク先のパス


「環境変数 PATH」はユーザごとに変更できる

「うちは大体なんでもトイレに置いています」というお宅もあるかもしれません。
「環境変数 PATH」には、新しい場所を追加することもできます。
「環境変数 PATH」は、ユーザのホームディレクトリにある.bashrcや.bash_profileといった設定ファイルで変更します。

トイレがメインのお宅なら、家族それぞれの「環境変数 PATH」に「トイレ」を、お父さんが書斎にゴルフ用具を置いているなら、お父さんの「環境変数 PATH」に「書斎」を追加しましょう。


実行権限は読み・書き・実行

思春期の娘さんがいると「パパ!私のお気に入りのブラシを使わないで」などと言い出すこともあるでしょう。
花子のブラシを使っていいのは花子と妹だけ、というように制限することができます。
$ chmod 754 花子のブラシ
とした場合、7・5・4は左から1文字ずつ「花子(所有者)」「花子の属すグループ」「その他の人」の実行権限を指します。
花子はブラシを見ることも改造することも使うこともでき(=7)、
妹(花子と同じグループ)はブラシを見ることと使うことができ(=5)
他の家族は「ブラシがあるなあ」と見ることだけができます(=4)。
※4が読み、2が書き、1が実行権限なので、読み+書き+実行だと4+2+1=7、読み+実行だと4+1=5、読みだけだと4、などとなります。

また、花子の机の引き出しには秘密の日記帳が入っているので、
引き出しおよびその中にある日記帳は花子しかいじってはいけないように設定することもできます。
$ chmod -R 700 花子の引き出し
他の人は引き出しの中に何があるのかすら見ることすらできません(=0)。-Rは「引き出しの中にあるものすべて」の意味です。

ただし、実はお父さんがこっそり花子の日記帳を読んでしまうことができる場合があります。
他のユーザの権限でコマンドを実行できる、sudoコマンドというものがあります。
$ sudo hanako less 花子の引き出し/日記帳

sudoコマンドについてはまたいずれ。
| hat | システム | 10:07 | comments(0) | trackbacks(0) |
「Linux基礎」が始まります
こんにちは。hatです。

今週土曜日から、バイオインフォマティクス・スクール「Linux基礎」が始まります。
本コースでは、Linuxをあまりお使いになったことがない方に、Linuxの基本的な使い方からバイオ系ソフトウェアのインストール〜実行までを、実際に手を動かして学んでいただきます。

LinuxのCUIに接して最初に戸惑うのが、「ディレクトリ間の移動」「環境変数PATH」「アクセス権限」あたりではないでしょうか。

「ディレクトリ間の移動」

ディレクトリ間の移動で混乱しがちな原因の一つが、「自分が今どこにいるのかわからなくなる」ことではないかと思います。
今いる場所がわからなくなったら、「pwd」コマンドを実行しましょう。

pwd→今いる場所の絶対パスを表示する

【pwd 実行例】
$ pwd
/home/hat


「絶対パス」という言葉が出てきました。これに対して「相対パス」というものもあります。
絶対パスは「どこから見ても通じるパス」、相対パスは「今いるところから見たパス」です。

例えば「JR浜松町駅」から「弊社(東京都港区海岸1-7-8 東京都立産業貿易センター浜松町館6F)」に移動する場合に

「/銀河系/太陽系/地球/日本/東京都/港区/海岸1-7-8/東京都立産業貿易センター浜松町館/6F部分にワープする」

と指定するのが絶対パスで、

「北口改札を出て右側に5分くらい歩くと右側に東京都立産業貿易センター浜松町館があるので6Fへ上る」


と指定するのが相対パスです。
近い場所に行きたい場合は相対パスが簡単ですし、少し遠いところに行きたい場合は絶対パスのほうが間違えづらいかもしれないですね。

ちなみに、絶対パスは「/」で始まって、相対パスはフォルダ名や「../(=今いるディレクトリの一つ上のディレクトリの意)」などで始まります。

絶対パスと相対パスを理解したら、他のディレクトリに移動してみましょう。
ディレクトリ間の移動は「cd」コマンドで行います。

cd→他の場所に移動する

【cd 実行例1】
$ cd /usr/local # 絶対パスで指定
$ pwd
/usr/local

【cd 実行例2】
$ cd bin # 相対パスで指定
$ pwd
/usr/local/bin

【cd 実行例3】
$ cd # cdだけ実行するとホームディレクトリに移動
$ pwd
/home/hat


ちなみに、パスを途中まで入力して「Tab」キーを押すと、パスが補完されます。

【cd 実行例4】
$ cd /usr/local/ # ここまで打って「Tab」キーを2回

bin/___etc/___games/___include/___lib/___lib64/___libexec/___sbin/___share/___src/
# /usr/local/の下にあるサブディレクトリが表示されます
# (サブディレクトリがない場合は何も出ません)


pwd, cdに加えて、最低限以下のコマンドさえ知っていれば、Linux上で少し自由に動けるようになるのではないでしょうか。

ls→今いるディレクトリに存在するファイル/ディレクトリ、およびそれらの属性を表示する

mkdir→新しいディレクトリを作る

それぞれのコマンドの使い方は、コマンドに-hをつけて実行したり(-hでヘルプを出すようになっているコマンドの場合)、「man」コマンドで見ることができます(マニュアルがないコマンドもあります)。

man→コマンドの使い方を見る

【man 実行例】
$ man pwd # 使い方が表示されます。「q」で終了します。


「環境変数PATH」「アクセス権限」については後日

間違いやわかりづらい点などありましたら、ぜひご意見をお寄せください。
| hat | システム | 12:33 | comments(0) | trackbacks(0) |
CentOS 6.2が公開されました!
弊社でも使用しているLinuxOSの“Cent OS”に、CentOS 6.0が公開されました!!!!
(詳細はコチラ

先日、バージョン6.1が公開されたのですが、試す間もなく・・・。
何が新機能として追加されたのか、非常に楽しみです。

興味のある方は、ぜひ試してみてください。
(CentOS はコチラからダウンロード可能


| | システム | 17:49 | comments(0) | trackbacks(0) |
なぜSELinuxを解除するのか
昨日の記事にて、SELinuxはセキュリティOSであると述べました。
詳細はコチラ

ではなぜSELinuxを解除する必要があるのでしょうか。

昨日の図に記載しましたが、SELinuxは、サーバー内のファイルや個人情報にアクセスすることを防ぐセキュリティです。

LinuxサーバーをグループAがアクセス(使用)できるようにネットワーク環境を構築しても、SELinuxがそのアクセスを防御するため、
グループAの人たちは、Linuxサーバー内のファイルにアクセスすることができません。



閉鎖したネットワーク環境であったり、セキュリティーはファイヤーウォール等に任せるから、アクセスできるようにしたい!というときは、
このSELinuxを解除しなければいけません。
| | システム | 18:17 | comments(0) | trackbacks(0) |
SELinuxとは?
本日は、SELinuxについて記載致します。
よろしくお願いいたします。

SELinuxは、“Security-Enhanced Linux”の略語であり、Linuxカーネル用のセキュリティ拡張機能です。
外からの不正な侵入を極力防ぐために開発されたオープンソース・ソフトです。
つまり、Linux用のセキュリティOSです。

ここで一つの疑問です。
セキュリティだと、ファイヤーウォールなど他にも方法がありますよね?!?!

ということで、セキュリティ方法を比較してみます(図参照)。

ファイヤーウォールなどは、侵入を未然に防ぐためのセキュリティ。
SELinuxは、万が一侵入されたとしても個人情報等にアクセスできないようにするためのセキュリティです。


参考にしたHPは、コチラ
| | システム | 18:12 | comments(0) | trackbacks(0) |
SELinuxのわな
弊社では、次世代シーケンサーデータ解析システムを構築したサーバーを提供させていただいております(詳しくはコチラ)。

サーバーを構築する際に(上記サーバーに限らず)、毎度私がひっかかるトラップがあります。
それが、SELinuxです。

ネットワーク通信がうまくいかないな・・・・SELinuxの解除を忘れてた!!
ネットワークを介してサーバーに入れたけど、自分のユーザーのディレクトリに入ってくれない・・・・またSELinux!!!!!

などなど。

自分が設定を忘れていたことを棚に上げて、
「初期設定の時点でSELinuxを解除しておいてくれよ!!」
と暴言を吐く始末。。。

ということで、今週は、SELinuxについて記載していこうと思います。
明日は“SELinuxとは”です。
| | システム | 18:30 | comments(0) | trackbacks(0) |
Sambaにユーザーを登録する
先日は、Sambaの基本設定について記述しました。
本日は、Sambaにアクセスするユーザーを制限する方法を記述します。

よろしくお願いします。

アクセスすることが可能なユーザーを設定します。

例:amelieffユーザーのアクセスを可能にします
$ smbpasswd -a amelieff
※新パスワードを入力する必要があります。
$ /etc/rc.d/init.d/smb start
$ /etc/rc.d/init.d/nmb start

これでOK!!

Windowsからshareディレクトリ(ファイル)を見る際には、
ネットワーク画面のアドレス欄に

¥¥サーバー名¥share(Sambaを設定したディレクトリ名)
もしくは
¥¥IPアドレス¥share

と入力します。

アクセス制限がある場合には、ユーザー、パスワードを聞いてくれます!

上記のネットワークを常に接続しておきたい場合は、下記を参考にしてください。






| | システム | 17:27 | comments(0) | trackbacks(0) |
Sambaの基本設定方法
昨日は、Sambaについて記述しました。
本日はLinux上でのSambaの設定方法を記述します。

1. Sambaで共有するディレクトリ(フォルダ)を作成します。
今回は、/home以下に/shareというディレクトリを作成します。

2. Sambaをインストールします。
   $ yum –y install samba

3. /etc/samba/smb.confの中身を変更します
【Global Setting】
   workgroup = WORKGROUP
   hosts allow = 共有するWindows PCのIPアドレス
   ※WORKGROUPは一般的にwindowsの事を指します。
   ※hosts allowの先頭にある“;”は除く
【Standalone Server Options】
  ・ユーザー登録などでアクセス管理をする際
   security = user
  ・全ての人をアクセスOKにする際
   security = guest

【最終行に以下を追記】
   [share]
   path = /home/share
   writable = yes
   create mode = 0777
   directory mode = 0777
   share modes = yes

4.smbおよびnmbスタート
   $ /etc/rc.d/init.d/smb start
   $ /etc/rc.d/init.d/nmb start
   $ chkconfig smb on
   $ chkconfig nmb on
| | システム | 17:42 | comments(0) | trackbacks(0) |
Samba
本日はSambaについて記述します。
よろしくお願い致します。

SambaとはWindowsネットワークを実装したフリーソフトウェアです。
LinuxやMac OSなどのUnix系OSを用いて、Windowsのファイルサーバやドメイン参加機能を提供しています。(ウィキペディア参照

とてもおおざっぱではありますが、図にまとめてみました。


複数の人々で同じファイルを共有したい場合に便利だと思います。
また、Sambaにユーザー設定をすることで、共有する人も制限することができます。
設定方法は次の機会に記述します!!
| | システム | 16:02 | comments(0) | trackbacks(0) |
ファイルを共有
弊社では、次世代シーケンサーデータ解析システム構築のサービス(詳細はコチラ)を始めましたが、(あくまで私の)予想を超えた発注にとてもびっくりしています。

システムを構築する際に困難であったことは、弊社のシステムと普段使用しているPCでファイル共有をさせる方法です。

Net経由?ftp?samba? 
???と毎日?マークが頭を支配しています。

明日から、ファイル共有について記載していきます!
| | システム | 19:05 | comments(0) | trackbacks(0) |
タイ洪水の影響でHDDが高騰!?
本日は、気になるコラムをご紹介します。

タイの洪水により、HDDが高騰!

私事ですが、本日サーバーの構築業務を行っており、HDDを追加注文しようとしたところ、目的の内蔵型HDDが品薄状態となっておりました。

そこでこのニュースを発見!

天災であるとはいえ、とても不安です。

タイの友人に連絡をしたところ、“都会はまだ大丈夫だけど、実家は大変!テレビが流された!”と言っていました。
それもすごく心配です。

| | システム | 18:10 | comments(0) | trackbacks(0) |
RAID 0 とRAID 1
昨日は、RAIDについて記述しました。本日は、RAID0とRAID1について記述します。

RAIDのレベルは0-6まで存在します。しかし実際に利用されるのは、RAID 0, RAID 1, RAID 5だそうです。

RAIDの数字は、働きの種類を表します。この数字を選択することで、目的の耐障害性と速度の比率度合いを選択します。

では、下記に図を示します。


ちなみにですが、私はRAID 0が好きです。
速度重視です。その代わりと言っては大げさではありますが、大事なデータや必要なデータは別に保存しています。

結局二度手間じゃん!とお思いでしょうが、その手間と速度を天秤にかけると、私の場合は速度が勝つんです!

自分に合ったRAIDレベルを組むことが大切です。
| | システム | 17:39 | comments(0) | trackbacks(0) |
RAID
先日、弊社よりシステムの販売に関する記事を掲載致しました。
よって本日は、システム繋がりということで、“RAID”について記述します。

記述しますとは言いましたが、実は、私も先日社長より御教授いただくまで、「レイド?・・??」という状態でした。

こんな時は、Wikipediaさんに限ります。下記に引用します(sourceはコチラ)。

“RAID(Redundant Arrays of Inexpensive Disks、または Redundant Arrays of Independent Disks、レイド)とは、複数台のハードディスクを組み合わせることで仮想的な1台のハードディスクとして運用する技術。ディスクアレイの代表的な実装形態で、主に信頼性の向上をねらって用いられるものである。”

アレイというのは、ある規則に従って並べるという意味です。
バイオの世界でも細胞アレイ!という様に使用しますね。
上記の言葉を参考に、下記に図示してみました。



明日は、このRAIDのレベルについて記述します。
| | システム | 18:40 | comments(0) | trackbacks(0) |
有機ELシフト 加速!
本日のタイトルは、先週の金曜日の日本経済新聞(夕刊)に掲載されていた言葉です。
最近では、携帯電話(スマートフォンにも)を中心としたディスプレイに有機ELが取り組まれています。

私は、学生時代の3年間、有機ELの研究を行っていました。その当時は、多くの企業が有機ELの開発を行っていましたが、コスト面の問題や、液晶ブームに押され、ほとんどが撤退を余儀なくされました。

こんなに美しいディスプレイができるのに、世に出る事はないのかもなと思っていましたが、技術というのはどんどん進化しているのですね。
液晶と変わらない値段で商品化され、かつ画質の良さから“有機ELディスプレイ搭載”が付加価値に値するとされています。

こんなにうれしい事はありません。
| | システム | 17:59 | comments(0) | trackbacks(0) |
1234567
891011121314
15161718192021
22232425262728
293031    
<< January 2017 >>

このページの先頭へ