8.3K Views
December 10, 21
スライド概要
Linux で解析する際に必要なコマンドをまとめたもの。mRNA-Seq に特化した内容というよりは、Linux で解析するぞー!と思っている人がまず頭に入れておいた方が良い(と思う)ものをぎゅぎゅっと詰め込んだ。さーっと流し見で、実際に解析するときに「むむ?」と言いながら見返していく、という想定。
社会人になり、アフリカに行き、そして大学に戻ってきたピチピチの博士課程学生(専門:環境科学)である。博士号はまだない。バイオインフォマティクスの諸々についてふわっふわっと説明したい。
mRNA-Seq 解析の流れをざっくりと説明してみた 便利コマンドたち 2021/12/02 ⽔産⽣物環境学(九州⼤学) ⾼井優⽣
基本⽤語、基本コマンド これが分からないと話にならない ⽤語 ⼤まかな説明 ホームディレクトリ ⾼井がよく⾔う表現 ログインしたときにいるディレクトリ 「とりあえずホームに戻って」 今いるディレクトリ 「今どこ︖」「どこにおるん︖」 最上階のディレクトリ、パソコンのホームディレクトリみたいな感じ 「ルートの下のどっかにあったと思う」 絶対パス ルートから対象のディレクトリ(ファイル)までのパス 「そこは相対じゃなくて絶対パスで」 相対パス カレントディレクトリから対象のディレクトリ(ファイル)までのパス 「そこは絶対じゃなくて相対でいいでしょ」 カレントディレクトリ ルート コマンド ⼤まかな説明 cd ディレクトリ(階層)を移動する cd <移動先の絶対(相対)パス> ls ディレクトリの中⾝を確認する ls <ディレクトリ> pwd mkdir cp 今いるディレクトリ(階層)を確認する pwd 新しくディレクトリを作る mkdir <作成するディレクトリ名> ファイル(ディレクトリ)をコピーする cp <コピー元ファイル> <コピー先ファイル> コマンド mv vi、nano cat ⼤まかな説明 ファイル(ディレクトリ)を移動する mv <元ファイル> <移動先ファイル> スクリプトを書いたりするときに使うエディタ 使い⽅はぐぐってください ファイルの中⾝を表⽰する cat <ファイル名> head ファイルの中⾝の先頭数⾏を表⽰する head <ファイル名> tail ファイルの中⾝の末尾数⾏を表⽰する tail <ファイル名> 細かいオプションはぐぐってください
⽔⽣環の解析⽤ PC のディレクトリ構成 他の⼈のデータは消さないで / !"" !"" !"" # | | | | | | | | | 解析は ubuntu という名前の共有ユーザで⾏います ただ、データが他の⼈とごっちゃごっちゃにならないようにホームディレクトリ配下に bin それぞれの個⼈名のディレクトリを作って、そこで作業します etc 階層構造を理解しないと他の⼈のディレクトリをぐっちゃぐちゃにしてしまうので home しっかりと階層構造を理解しましょう $"" ubuntu ホームディレクトリ !"" src 使⽤するソフトウェアのソースファイルを⼊れています | !"" bin 使⽤するソフトウェアにパスを通すためのリンクを貼っています | !"" blastdb BLAST ⽤の nr データベースを⼊れてます | !"" references マッピング⽤のリファレンス配列を⼊れてます (メダカ、ジャワメダカ、ホヤなどなど) | $"" takai 個⼈のデータ管理⽤ディレクトリです 解析する際は⾃分の名前のディレクトリを作ってください
ソフトウェア(ツール)のインストール STAR の例 1.使⽤したいソフトウェアの公式 HP を⾒つける ソフトウェア名でぐぐればすぐ⾒つかります 2.src ディレクトリに使⽤したいソフトウェアをダウンロードする ubuntu@ubuntu-man$ cd src ubuntu@ubuntu-man$ wget https://github.com/alexdobin/STAR/archive/2.7.9a.tar.gz 3.マニュアルに従ってコンパイルする(ソフトウェアによって、コンパイルが必要ない場合もあります) マニュアルに「How to install」「Compiling from source」みたいな項⽬があるはずです ubuntu@ubuntu-man$ cd STAR-2.7.9a/source ubuntu@ubuntu-man$ make STAR 4.パスを通す 僕はホーム配下に bin ディレクトリを作って、そこにシンボリックリンクを張ってます ubuntu@ubuntu-man$ ln -s /home/ubuntu/src/STAR-2.7.9a/source/STAR /home/ubuntu/bin パスを通すためには .bashrc ファイル(読み⽅︓どっとばっしゅあーるしー、 ログイン時に読み込まれる諸々の設定が書かれたファイル、ホーム配下にあります)に 「export PATH="$HOME/bin:$PATH"」と記述しておく必要があります 詳しくは「.bashrc」でぐぐってください
SSH 接続 ssh コマンド 席移動せずにリモートで作業する
SSH 接続、ssh コマンド 席移動せずにリモートで作業する(プロっぽい) Mac の⼈︓ ターミナルを使います Windows の⼈︓ Windows PowerShell もしくはコマンドプロンプトを使います(OpenSSH 必要) ⽔⽣環のラボ⽤ネット(WiFi も可)に接続した状態で ssh <ユーザ名>@<接続先の IP アドレス> 21-11-30 TakaiYuki$ ssh [email protected] [email protected]'s password: Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-90-generic x86_64) * Documentation: * Management: * Support: https://help.ubuntu.com https://landscape.canonical.com https://ubuntu.com/advantage 0 updates can be applied immediately. *** System restart required *** Last login: Tue Nov 30 19:12:43 2021 from 192.168.11.3 ubuntu@ubuntu-man$ ⽔⽣環の解析⽤ PC 所属ネットワーク ⽔⽣環のネットワーク IP アドレス 192.168.11.30 ユーザ名 ubuntu パスワード 秘密(直接教えます)
SSH 接続、ssh コマンド 席移動せずにリモートで作業する(プロっぽい) 他のラボの⽅へ Q︓そもそも解析⽤ PC を SSH 接続できるようにするには どうしたらいいん︖ A︓ぐぐってください 親切な⼈がたくさん解説してくれてます (⽔⽣環の PC は設定済です)
tmux コマンド リモートからの SSH 接続がぶちっと 切れても⼤丈夫なようにする
tmux コマンド リモートからの SSH 接続が途中でぶちっと切れても⼤丈夫なようにする リモートから ssh 接続している場合、 常に接続状態を保ったまま(⾃分のパソコンの電源を切ったりしてはだめ)にしておかないといけません この点について、短時間の作業であれば特に気になりませんが、 マッピングなど⻑時間かかる作業を⾏なっている時はなかなかに⼤変です (もう帰りたいんだけど、全然マッピングが終わらない、、、みたいな) そこで tmux コマンドの登場です 細かい説明は省きますが、tmux は ssh 接続が中断しても作業は中断されないようにする(ssh 接続先で 新たなセッションを作成する)コマンドです オプション ⼤まかな説明 new 新しいセッションを作成します(-t といっしょに使います) tmux new –t <セッション名> attach 既存のセッションに接続します(-t といっしょに使います) tmux attach –t <セッション名> -t セッション名を指定します ls 現在作成されているセッションを確認します tmux ls ubuntu@ubuntu-man$ tmux new -t takai ubuntu@ubuntu-man$ tmux attach -t takai ubuntu@ubuntu-man$ tmux ls ubuntu@ubuntu-man$ exit 作業が終わったセッションからは exit コマンドで 退出しましょう(地味に重要)
For ⽂ たくさんのサンプルに同じ処理をする
For ⽂ たくさんのサンプルに同じ処理をする(⾃動化っぽい感じ) 基本構⽂ for <変数名> in <変数のリスト> do <実⾏する処理の内容> done サンプル数が多いと For ⽂を 使わないとやってられない 例︓sample_name という変数に C1、C2、C3、、、という値が順番に⼊って、STAR が実⾏される for sample_name in C1 C2 C3 CP1 CP2 CP3 do STAR --genomeDir /reference/java_medaka \ --readFilesIn “$sample_name”_1.fq.gz “$sample_name”_2.fq.gz done
For ⽂ たくさんのサンプルに同じ処理をする(⾃動化っぽい感じ) 基本構⽂ for <変数名> in <変数のリスト> do <実⾏する処理の内容> done サンプル数が多いと For ⽂を 使わないとやってられない 例︓sample_name という変数に C1、C2、C3、、、という値が順番に⼊って、STAR が実⾏される for sample_name in C1 C2 C3 CP1 CP2 CP3 do STAR --genomeDir /reference/java_medaka \ --readFilesIn “$sample_name”_1.fq.gz “$sample_name”_2.fq.gz done 最初はこれが実⾏される STAR --genomeDir /reference/java_medaka --readFilesIn C1_1.fq.gz C1_2.fq.gz
For ⽂ たくさんのサンプルに同じ処理をする(⾃動化っぽい感じ) 基本構⽂ for <変数名> in <変数のリスト> do <実⾏する処理の内容> done サンプル数が多いと For ⽂を 使わないとやってられない 例︓sample_name という変数に C1、C2、C3、、、という値が順番に⼊って、STAR が実⾏される for sample_name in C1 C2 C3 CP1 CP2 CP3 do STAR --genomeDir /reference/java_medaka \ --readFilesIn “$sample_name”_1.fq.gz “$sample_name”_2.fq.gz done C1 が終わったら、次は C2 STAR --genomeDir /reference/java_medaka --readFilesIn C2_1.fq.gz C2_2.fq.gz
For ⽂ たくさんのサンプルに同じ処理をする(⾃動化っぽい感じ) 基本構⽂ for <変数名> in <変数のリスト> do <実⾏する処理の内容> done サンプル数が多いと For ⽂を 使わないとやってられない 例︓sample_name という変数に C1、C2、C3、、、という値が順番に⼊って、STAR が実⾏される for sample_name in C1 C2 C3 CP1 CP2 CP3 do STAR --genomeDir /reference/java_medaka \ --readFilesIn “$sample_name”_1.fq.gz “$sample_name”_2.fq.gz done C2 が終わったら、次は C3 STAR --genomeDir /reference/java_medaka --readFilesIn C3_1.fq.gz C3_2.fq.gz
For ⽂ たくさんのサンプルに同じ処理をする(⾃動化っぽい感じ) 基本構⽂ for <変数名> in <変数のリスト> do <実⾏する処理の内容> done サンプル数が多いと For ⽂を 使わないとやってられない 例︓sample_name という変数に C1、C2、C3、、、という値が順番に⼊って、STAR が実⾏される for sample_name in C1 C2 C3 CP1 CP2 CP3 do STAR --genomeDir /reference/java_medaka \ --readFilesIn “$sample_name”_1.fq.gz “$sample_name”_2.fq.gz done C3 が終わったら、次は CP1、その次は CP2、その次は CP3 STAR --genomeDir /reference/java_medaka --readFilesIn CP1_1.fq.gz CP1_2.fq.gz という感じ
For ⽂の シェルスクリプト化 たくさんのサンプルに同じ処理をする
For ⽂のシェルスクリプト化 たくさんのサンプルに同じ処理をする(⾃動化っぽい感じ) ファイルの拡張⼦を .sh にしたものをシェルスクリプトと⾔います 基本的に For ⽂はシェルスクリプトにしてからぶん回します ubuntu@ubuntu-man$ vi STAR.sh
For ⽂のシェルスクリプト化 たくさんのサンプルに同じ処理をする(⾃動化っぽい感じ) ファイルの拡張⼦を .sh にしたものをシェルスクリプトと⾔います 基本的に For ⽂はシェルスクリプトにしてからぶん回します ubuntu@ubuntu-man$ vi STAR.sh これはおまじない みたいなものだと 思ってください #!/bin/sh for sample_name in C1 C2 C3 CP1 CP2 CP3 do STAR --genomeDir /reference/java_medaka \ --readFilesIn “$sample_name”_1.fq.gz “$sample_name”_2.fq.gz done
For ⽂のシェルスクリプト化 たくさんのサンプルに同じ処理をする(⾃動化っぽい感じ) ファイルの拡張⼦を .sh にしたものをシェルスクリプトと⾔います 基本的に For ⽂はシェルスクリプトにしてからぶん回します ubuntu@ubuntu-man$ vi STAR.sh ubuntu@ubuntu-man$ chmod +x STAR.sh 実⾏権というものを付与するコマンドです おまじないだと思ってください
For ⽂のシェルスクリプト化 たくさんのサンプルに同じ処理をする(⾃動化っぽい感じ) ファイルの拡張⼦を .sh にしたものをシェルスクリプトと⾔います 基本的に For ⽂はシェルスクリプトにしてからぶん回します ubuntu@ubuntu-man$ vi STAR.sh ubuntu@ubuntu-man$ chmod +x STAR.sh ubuntu@ubuntu-man$ ./STAR.sh 実⾏します(完了)
tee コマンド 作業のログ取りを楽にする
tee コマンド 作業のログ取りを楽にする 解析を⾏なう際、作業ログ(どんな処理をしたのか、どんな結果が返ってきたのか、 どんなエラーが返ってきたのか)を取っていく必要があります 頑張ればコピペでもできますが、しんどいですし、取りこぼしも出てきますし、しんどいです なので tee コマンド(標準出⼒をファイルに書き出してくれます)を使います 具体的にはスクリプト(コマンド)をパイプで tee コマンド(tee <書き出し先のファイル名>)に渡します ubuntu@ubuntu-man$ ./STAR.sh | tee log_STAR.txt これで STAR.sh の標準出⼒が log_STAR.txt という ファイルに書き出されます
wget コマンド リファレンス配列とかソフトウェアとか 諸々をダウンロードする
wget コマンド リファレンス配列とかソフトウェアとか諸々をダウンロードする いろいろダウンロードするときに使います 使い⽅は簡単で wget <ダウンロードするファイルの URL> で OK です ダウンロードするファイルの URL は⼤元のホームページで右クリックからの 「リンクのアドレスをコピーする」みたいな感じでゲットでできます ubuntu@ubuntu-man$ wget http://ftp.ensembl.org/pub/release-104/fasta/oryzias_javanicus/dna/Oryzias_javanicus.OJAV_1.1.dna.toplevel.fa.gz ubuntu@ubuntu-man$ ls Oryzias_javanicus.OJAV_1.1.dna.toplevel.fa.gz ダウンロードした後、ソフトウェアによっては make コマンドなどを使った インストール作業が必要になることもあります インストール作業についてはそのソフトウェアの公式 HP に詳しく書かれているはずなので それに従ってください
scp コマンド ネット経由でファイルを転送する 解析⽤ PC ⇄ ⾃分の PC
scp コマンド ネット(ssh 接続)経由でファイルを転送する(解析⽤ PC ⇄ ⾃分の PC) cp コマンドと同じ感じで ssh 接続を利⽤してファイルのやり取りをします 解析⽤ PC で得た結果ファイルを⾃分の PC に持ってきたいなというとき、USB とかを使って うんとこしょどっこいしょとやっても良いですが、解析⽤ PC と⾃分の席が離れてるとめんどくさいです なので scp コマンドを使います 使い⽅はほぼほぼ cp コマンドと同じです scp <ユーザ名>@<接続先の IP アドレス>:<コピーしたいファイルの絶対パス> <コピー先> 21-11-30 TakaiYuki$ scp [email protected]:/home/ubuntu/takai/00_Java_ANTandMP/03_counts/count_data.tsv ./ もちろん逆もできます 21-11-30 TakaiYuki$ scp ./result.txt [email protected]:/home/ubuntu/takai/00_Java_ANTandMP/03_counts/count_data.tsv