【効率化】知っていると便利な Linux コマンド集 10 選【バイオインフォマティクス】

こんにちは、受託コンサルティングチームの hosor です。

バイオインフォマティクス解析では Linux コマンドを使用することが多く、Linux 上での作業の効率化は非常に重要です。

今回は、cd や ls のような頻繁に使うコマンドとは少し異なり、知っていると便利な Linux コマンドを 10 個厳選してご紹介します。

便利屋

1. md5sum -c : ファイルが壊れていないか確認する

NCBI や Ensembl などの公共データベースから、数 GB にもなるゲノムリファレンスファイルやアノテーションファイルをダウンロードすることは日常茶飯事です。

ダウンロード中にファイルが破損してしまう可能性もゼロではなく、破損したファイルを使って解析を進めてしまうと、原因不明のエラーに長時間悩まされることになります。

そうした事態を避けるため、ダウンロードファイルと一緒に md5sum 値が記載されたテキストファイル (例: md5sums.txt) が用意されている場合が多くあります。

このファイルを使って、ダウンロードしたファイルが提供元のファイルと完全に一致するかを検証できます。

# ゲノムファイル GRCh38.primary_assembly.genome.fa.gz と、その MD5 値が書かれた md5sums.txt をダウンロードした後に確認を行う。

# md5sums.txt の中身(例)
# 6e2b172e61a86850730b2c31795c1e78  GRCh38.primary_assembly.genome.fa.gz

# -c オプションでチェックを実行
md5sum -c md5sums.txt

# 実行結果
# GRCh38.primary_assembly.genome.fa.gz: OK
# このように OK と表示されれば、ファイルは正常です。
# もし FAILED と表示された場合は、ファイルが破損しているため、再ダウンロードが必要です。

2. ln -s : ファイルのショートカットを作成する

ゲノムファイルのような巨大なファイルを、複数の解析プロジェクトで使い回したい場合があります。

しかし、プロジェクトごとにファイルをコピーすると、ディスク容量を大幅に消費してしまいます。

そこで役立つのが、シンボリックリンクを作成する ln -s コマンドです。

これは、元のファイルの実体をコピーすることなく別の場所に「ショートカット」を作成する機能で、リンク先のファイルは元のファイルと全く同じように扱うことができます。

# /database/genomes/ にあるリファレンスゲノム hg38.fa を、現在作業中の ~/project/rna-seq/ ディレクトリ内にリンクとして作成する。

# ディレクトリを移動
cd ~/project/rna-seq/

# /database/genomes/hg38.fa へのシンボリックリンクを、現在のディレクトリに hg38.fa という名前で作成
ln -s /database/genomes/hg38.fa hg38.fa

3. ll (ls -l) : ファイルの詳細情報を表示する

ls -l は、ファイルやディレクトリの権限、所有者、サイズ、最終更新日時などの詳細情報を表示するコマンドです。

多くの Linux 環境では ll というエイリアス (別名) が設定されており、より短く入力できます。

解析で生成された BAM ファイルが想定通りのサイズになっているか、自分で書いたスクリプトに実行権限 (x) が付与されているかなどを確認する際に必須のコマンドです。

ll

# 実行結果(例)
# drwxr-xr-x 2 user group  4.0K Oct 17 10:20 results/
# -rw-r--r-- 1 user group   78G Oct 17 14:30 aligned.bam
# -rwxr-xr-x 1 user group  1.2K Oct 16 09:00 mapping.sh
# aligned.bam のファイルサイズが 78GB であることや、mapping.sh には実行権限があることなどがわかります。

※ 自分でエイリアスを設定することもできるので、興味がある方は調べてみてください。

4. zcat | head : 圧縮ファイルの中身を少しだけ見る

FASTQ ファイルなど、バイオインフォマティクスで扱うシーケンスデータは、そのほとんどが gzip (.gz) 形式で圧縮されています。

ファイルの中身の形式などを少しだけ確認したいときに、gunzip コマンドでわざわざ巨大なファイルを展開するのは非常に時間がかかります。

zcat は圧縮されたファイルの内容を展開せずに標準出力へ表示するコマンドです。

これと、ファイルの先頭数行を表示する head コマンドをパイプ (|) で繋ぐことで、圧縮ファイルの中身を瞬時に確認できます。

# 圧縮された FASTQ ファイル sample_A_R1.fastq.gz の最初の 8 行だけを表示して、フォーマットを確認する。
zcat sample_A_R1.fastq.gz | head -n 8

# 実行結果(例)
# @A00123:456:H7L2LDSX2:1:1101:1234:5678 1:N:0:ACGT
# NTCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGA...
# +
# FFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...
# @A00123:456:H7L2LDSX2:1:1101:2345:6789 1:N:0:ACGT
# NTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGC...
# +
# FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...

5. less -S : 長い行を折り返さずに表示する

遺伝子の情報をまとめた GFF/GTF ファイルや、複数サンプルの発現量を行列にしたテキストファイルなど、データが横に長くなることは珍しくありません。

less コマンドでこれらのファイルを開くと、デフォルトでは画面の幅で自動的に行が折り返されてしまい、非常に見づらくなります。

-S オプションを付けて実行すると、この折り返しが無効になり、左右の矢印キーでスプレッドシートのようにスクロールしながら閲覧できます。

less -S genes.gff3
# これで、各カラムの対応関係を崩さずにデータを確認できます。less を終了するには q を押します。

6. Ctrl+Z + bg, fg : 実行中のジョブをバックグラウンド化する

数時間かかるジョブの実行中に、少しだけ別のコマンドを実行したくなることがあります。

そのために別ターミナルを開くのも手ですが、現在の処理を一時停止させて裏で動かす、という方法もあります。

  • Ctrl+Z : フォアグラウンド (手前) で実行中のプロセスを「一時停止」します。
  • bg : 一時停止したプロセスをバックグラウンド (裏) で実行再開します。
  • fg : バックグラウンドで実行中のプロセスをフォアグラウンドに戻します。
# BWA でアライメント中に、Ctrl+Z で一時停止し、ls でファイルを確認した後、bg でアライメントをバックグラウンドで続行させる。
# 1. 時間のかかる処理を実行
bwa mem hg38.fa sample.fastq > aligned.sam

# 2. 実行中に Ctrl+Z を押す
# [1]+  Stopped  bwa mem hg38.fa sample.fastq > aligned.sam

# 3. 別のコマンドを実行 (ターミナルが操作可能になる)
ls -lh

# 4. 停止していたジョブをバックグラウンドで再開
bg

7. nohup : ターミナルを閉じても処理を続行させる

前述の bg コマンドは、ターミナルを閉じてしまう (SSH 接続が切れる) とプロセスも一緒に終了してしまいます。

数日がかりのジョブを実行したままにしておきたい場合にはこれでは困ります。

nohup コマンドは、"No Hang Up" の略で、ログアウトしてもプロセスを終了させないためのコマンドです。

コマンドの先頭に nohup を付け、末尾に & を付けて実行することで、プロセスはバックグラウンドで走り続けます。

# 時間のかかる解析スクリプト long_run.sh を、SSH 接続を切っても実行させ続ける。
nohup bash long_run.sh > analysis.log 2>&1 &
# 標準出力と標準エラー出力 (2>&1) は、analysis.log ファイルに書き込まれるようリダイレクトしていますので、後からログを確認できます。
# 指定しない場合は nohup.out というファイルが自動で作成されます。

8. watch : コマンドの結果をリアルタイムで監視する

長時間かかる解析が本当に進んでいるか不安になることがあります。

watch コマンドを使うと、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けてくれます。

出力ファイルのサイズが増えている様子や、ジョブのステータスの変化をリアルタイムで監視するのに非常に便利です。

# results ディレクトリの中身を 5 秒おきに監視し、ファイルサイズの増加を確認する。
watch -n 5 ll results/
# 画面がクリアされ、5 秒ごとに ll results/ の実行結果が更新されます。監視を終了するには Ctrl+C を押します。

9. htop, top : CPU やメモリの使用状況を監視する

バイオインフォマティクスのツールは、多くの計算資源 (CPU, メモリ) を消費します。

マルチスレッドを指定して実行したツールが、意図した通りに CPU コアを使っているか、あるいは想定以上にメモリを消費して他のユーザーに迷惑をかけていないかなどを確認することは、共有サーバーを利用する上で非常に重要です。

top コマンドは標準でインストールされているリソースモニターで、より高機能で視覚的に分かりやすい htop コマンドもよく使われます。

htop
# CPU ごとの使用率がカラーバーで表示され、メモリ使用量や実行中のプロセスが一覧で確認できます。
# 自分が実行したジョブのプロセスを見つけ、CPU やメモリの使用率を確認するのに役立ちます。

※ 実際に表示される画面イメージについては以下をご確認ください。

htop.dev

10. rename : 複数のファイル名を一括で変更する

作業を進めているうちに、ファイル名に特定の情報を追加したり、逆に一部の文字列を一括で変更・削除したくなったりすることがあります。

例えば、処理段階を示すために _processed という接尾辞を追加したり、サンプルの命名規則を後から統一する必要が出たりする場合などです。

for ループと mv コマンドを組み合わせても変更できますが、rename コマンドを使えばより直感的に一括置換が可能です。

# カレントディレクトリにある全ての FASTQ ファイル名に、処理が完了したことを示す _processed を追加する。
# 変更前のファイル名
# SampleA.fastq.gz
# SampleB.fastq.gz

# rename コマンドで一括置換
# .fastq.gz の部分を _processed.fastq.gz に置換する
rename 's/\.fastq\.gz/_processed.fastq.gz/' *.fastq.gz

# 変更後のファイル名
# SampleA_processed.fastq.gz
# SampleB_processed.fastq.gz
# 's/置換したい文字列/置換後の文字列/' という書式で、正規表現を使った柔軟なファイル名の変更が一度に実行できます。
# (この例では、正規表現の特殊文字である「.」を「\.」とエスケープしています)

まとめ

ここまで、バイオインフォマティクス解析で特に役立つ Linux コマンドを厳選して 10 個ご紹介しました。

これらのコマンドを上手く組み合わせることで、作業時間を大きく短縮し、単純なミスを減らすことができます。

最初は使い方を覚えるのが少し大変に感じられるかもしれませんが、ぜひ実際の解析の中で試していただければと思います。

バイオインフォマティクスに関してお困りごとがございましたら、アメリエフにお声がけください!