Unix の基本操作

2020 年 11 月 7 日 改訂

系統解析に役立つ Unix のテクニックをメモしています.

Xcode (Developer tool) のインストール

Xcode のインストールは主に make を得るため
raxml や paml などの系統解析ソフトウェアを使う私にとって,Xcode のインストールは make をインストールするのが狙いです.C 言語などで書かれた系統解析ソフトウェアのインストールは,Mac の場合ターミナルから「make」というプログラムを動かす必要があります.

make が入っているか確認
以下のコマンドを入力して同様のメッセージが得られれば make がインストールされていることを示します (2015 年 5 月).

[air:~]$ make
make: *** No targets specified and no makefile found. Stop.
[air:~]$ which make
/usr/bin/make

X code のインストール手順
アプリケーションフォルダに入っている App Store を使って,X code をダウンロード&インストールします.Mac の OS が Snow leopard ぐらいになってから,X code のインストール方法が App Store を使ってやるようになっています.Apple ID が必要です.

Command Line Tools を選んで Install
App Store で X code をインストールしただけでは,cc などのコンパイラは使えるようになりません.アプリケーションフォルダにある Xcode というアプリケーションを立ち上げて,Preference > Downloads にある Command Line Tools を選んで Install を押します.ただし,X code のバージョンによっては,この操作は必要ないかも知れません (2015 年 5 月).



PC のプロセッサを調べる

ターミナルに

uname -a

と入力します.以前,uname -p と紹介していましたが,uname -a の方が良いみたいです.こちらを参照しました.


シェル変数の表示
[junINOUEpro:readFasta]$ set
BASH=/bin/bash
COLUMNS=97
HOME=/Users/junINOUEpro
PATH=/Library/Frameworks/Python.framework/Versions/3.6/bin
PWD=/Users/junINOUEpro/Downloads/readFasta
USER=junINOUEpro
[junINOUEpro:readFasta]$ echo $HOME
/Users/junINOUEpro
[junINOUEpro:readFasta]$ echo $USER
junINOUEpro

.bash_profile と .bashrc

ホームディレクトリ (ターミナルではチルダ「~」で示される) にある .bash_profile と .bashrc ファイルは,どちらも bash の設定を行うファイルです.環境変数を設定するのに使います.これら二つのファイルがない場合は,自分で作成する必要があります.
  これら「.」で始まるファイルは,通常の ls では見ることができません.ls -a などを入力すると,リストアップできます.エディットするには vi や emacs を使う必要があります.BBEdit などで編集する場合は,最初の「.」を取り除くなど,名前を変更する必要があります.

.bashrc の読み込み
.bash_profile はログイン時に読み込まれます.一方で .bashrc は bash を起動させた時に読み込まれます. どちらを使っても良いようですが,.bashrc にいろいろ書き込んだ方が良いみたいです.読み込まれる順番についてはこちらが参考になります.

.bash_profile の中で,以下のように .bashrc を実行するように設定するのが一般的です.

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi


PATH の設定

使用するプログラムをどのディレクトリにいても自動的に読み込ませるために,アドレスをあらかじめ PATH に入れておく必要があります.PATH の設定は .bash_profile ファイルで設定しても良いですが,.bashrc の方が良いみたいです (医科研ニュースによる).

.bash ファイルへの記述: ここではまず,ホームディレクトリにある bin ディレクトリに,PATH を通してみます.「cd」と入力してホームディレクトリに移動してください.bin ディレクトリがない場合は,作成してください..bashrc ファイルがあるか確認してみましょう.

[air:~]$ ls -a
./
../
.DS_Store
.Rapp.history
.Trash/
.adobe/
.bash_history
.bash_profile
.bashrc
Desktop/
Documents/
...

.bashrc や .bash_profile など,「.」で始まるファイルは vi などのエディタで読み込みます.

vi .bashrc

すると vi で以下のように表示されるはずです.

# .bashrc

# User specific aliases and functions
PS1="[air:\W]$ "

alias ls='ls -F'

export PATH=.:$PATH
export PATH=/usr/local/bin:$PATH
export PATH=~/bin:$PATH
export PATH=/Users/JunINOUE/circos-0.64/bin:$PATH

.bashrc ファイルに太字で示された行をを書き込みます (ここでは「export PATH=.:$PATH」として,カレントディレクトリも書き込みました.mcmctree を操作する場合に,カレントディレクトリの PATH を通しておいた方が良いです).

export PATH=~/bin:$PATH

ただし,上記のように,行末に「:$PATH」を記述すると,今まで書かれていた PATH よりも前に入り,PATH の優先順位が上がります.以下のように記述しても同じだそうです.

export PATH=${PATH}:~/bin

.bashrc の読み込み:PATH にアドレスが入ったか確認してみましょう.まず,設定を読み直すには,以下を実行してください.

source .bash_profile
source .bashrc

source コマンドはファイルに書かれた内部コマンドを実行します.
注意: 場合によっては,terminal から新たなウィンドウを開く必要があります.おそらく,変数が入ったかどうかを確認するには,bash をもう一度立ち上げ直して,PATH に入っている変数をクリアする必要があるのでしょう.

PATH の確認:PATH が読み込まれているか確認してみましょう

[jun-inoue:~]$ echo $PATH
/home/j/jun-inoue/bin:.:/gridware/sge/bin/lx24-amd64

/home/j/jun-inoue/bin」と「.」に PATH が通っていることがわかります.「:」 を改行で示すと,よりわかりやすいです.

[jun-inoue:~]$ echo $PATH | tr ':' '\n'

ここで注意したいのが,PATH 内部でアドレスが記録される順序です.この順序によって,優先的に使われるプログラムを違ってきます.優先順位が変わっていると,以下のように表示されます.

[jun-inoue:~]$ echo $PATH
/gridware/sge/bin/lx24-amd64:/home/j/jun-inoue/bin

実際使いたいプログラムの違うバージョンが,上の例で言えば「/gridware/sge/bin/lx24-amd64」に入っていると,モジュールなどを入れた場合に思ったようにプログラムが動きません.この場合は,使われているプログラムのバージョンを調べるなど,注意が必要です.

以下のサイトも参考になります.
パスの確認と設定方法


エイリアス
コマンドに名前を付けることができます.たとえば以下を .bashrc に書き込んでおくと,i と入力するだけで,ssh iX@1x.x.8x.3x をいうコマンドを打ったことになります.

alias i='ssh iX@1x.x.8x.3x'



.bashrc と .bash_profile の例
私が使っている .bashrc ファイルをこちらに書いておきます.vi エディタを用いて,それぞれ .bashrc, .bash_profile という名前でホームディレクトリに保存してください.次回ターミナルを立ち上げたときに,自動的にこれらのファイルが読み込まれます.

[i2:~]$ cat .bashrc
# .bashrc

# User specific aliases and functions
PS1="[$USER:\W]$ "

alias ls='ls -F'
alias f='ssh jun-inoue@fish-evol.unit.oist.jp'
# 「f」と入力するだけで,ssh で目的の PC に入れます.

export PATH=.:~/bin:/usr/local/bin:$PATH
# まず「.」でカレントディレクトリを読み込み,
# 次に ~/bin で上で設定したディレクトリを読み込むように設定しています.


echo $PATH で確認してみましょう.

[i2:~]$ echo $PATH
.:/Users/i2/bin:/usr/local/bin:/usr/bin:/bin:
/usr/sbin:/sbin:/usr/local/bin



.basrh_profile は以下です.

[i2:~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi



sort

sort -nk 1,4 infile.txt > out.txt

sortRenshuu.tar.gz


ファイル/ ディレクトリの転送

scp

scp Local_Drive_Path xxx-xxxx@fish-evol.unit.oist.jp:

ディレクトリの場合は「scp -r 」にしてください.アップデートしたデータを転送する場合,rsync は既に転送済みのデータはさけてくれるそうです.


rsync

大量データの転送は rsync の方が良いそうです.

rsync -avh Local_Drive_Path xxx-xxxx@fish-evol.unit.oist.jp:

バックグラウンドで転送する場合は「nohup」と「&」を付けます.

nohup rsync -avh Local_Drive_Path xxx-xxxx@fish-evol.unit.oist.jp: &

こうしておけば,ログアウトしてもコピーが続けられます.nohup.out にログが保存されます.ポート番号の指定は以下です。

nohup rsync -avh --rsh="ssh -p 34567" yourname@ppp.aori.u-tokyo.ac.jp:/db/orthoscopeDB120 . &

watch du -s」を使うと,転送の進行状況をリアルタイムでモニターできます.
  念のため rsync は二回やった方が良いそうです (同じコマンドで自動的に重複は避けるそうです).


ファイルの改行コードを変換する

Mac から Unix に変換

perl -i -pe 's/\r/\n/g' file



ファイル・ディレクトリ容量を表示
ファイル・ディレクトリ容量を表示する.

du -h ディレクトリ名

こちらを参照しました.
あるいは,

df -h ディレクトリ名

でも良いです.


ファイル数を表示
ディレクトリ内部のファイル数を表示します.

ls -laR | grep -c '^-'

こちらを参照しました.



ファイル名を一括して変換

同じディレクトリにあるファイルの名前を一括して変換します.ここでは *.png が .jpg になります.以下のコマンドを command.sh として保存して,「sh command.sh」として走らせてください.


for f in *.png; do
mv $f ${f%.png}.jpg;
done


perl の場合はこんな感じです.ボールドの部分を変更してください.

opendir(DIR, ".");
my @dirs = readdir(DIR);
close DIR;

foreach my $file (@dirs) { unless($file =~ /^\./){ chomp($file); $newFileName = $file; $newFileName =~ s/RAxML_bipartitions.//; system("mv $file $newFileName"); } }


Linux の場合は,rename を使うともっと楽です.こちらをご覧ください.



tree ファイルを一つのファイルにまとめる

cat RAxML_bootstrap.bsout* > RAxML_bootstrap.All

「cat」は Unix のコマンドで,ファイルの内容をつなげます (cat は内容を表示する場合も用います).
「*」 はワイルドカードで,100 回反復を行った場合,RAxML_result.bsout0,RAxML_result.bsout1,,,,RAxML_result.bsout99 という 100 個のファイルを示しています.
RAxML_bootstrap.All は出力ファイルで,100 本の tree が入っています.



一つのファイルを複数のファイルに分割する.
csplit を使います.
例えば,100 種類のアライメントが一つのファイルにまとめられた場合に,これらを分割して 100 個のファイルを作成したい場合に使います.

こちらをご覧下さい.
* 私は Intel Mac でうまく動かせませんでした.-b オプションがおかしいと言うのが理由です.このため未だに Perl script を書いて同様の作業を行っています.



「mysql.pm」というファイルを探す
sh-3.2# find / -name mysql.pm -print


プロンプトの設定
PS1="[$USER]$ "

[link]


再起動

システムの終了

halt

再起動

shutdown -r now

参考リンク

http://www.k-tanaka.net/unix/shutdown.html
http://www.openspc2.org/reibun/bash/basic/005/index.html
http://linux-topics.com/01linux/099halt.html



パスワードを変更
root のパスワードを変更 (su のパスワード設定)

fasta ファイルから注釈行だけを取り出す

sequences.fasta にある注釈行を取り出し,annotation.txt に保存します.
詳しくは統合テレビの後半をご覧下さい.

grep ">" sequences.fasta > annotation.txt


リンク

Linux 初心者の基礎知識

各種コマンドの説明.

Practical computing for biologists

python を用いたバイオインフォマティクスの実践方法を紹介した本.TextWranger の使い方など,基礎的なことが丁寧に書かれています.