カテゴリ別アーカイブ: Linux
Ubuntu 20.04 の mini.iso
Ubuntu 20.04 の mini.iso はかなり隠れたところにあります。
こちらから入手できます。
http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/netboot/
日本のミラーサイトはこちら。
http://jp.archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/netboot/
いつも探すので備忘録として書いておきます。
シェルスクリプト(bash)の基本 ~チュートリアル~
目次
目的
シェルとは
シェルスクリプトとは
UNIX系OS(Linux, Mac)における基礎知識
パス(絶対パス・相対パス)
プログラミング言語は、英語の命令文に相当
ファイル名に日本語やスペースを用いない
bash基本
文字の表示(コマンド:echo)
Brace Expansionの使い方
変数(コマンド:変数=〇〇)
変数の定義
変数の利用
変数の配列処理
配列
配列の定義
配列の利用
現在いるディレクトリの確認(コマンド:pwd)
端末(ターミナル)の画面をクリア(コマンド:clear)
標準入力から変数を定義
条件分岐:If文(コマンド:if)
条件分岐:Case文(コマンド:case)
四則演算
リダイレクト(コマンド:> or >>)
ファイル内容出力(コマンド:cat)
ファイルのリスト一覧確認(コマンド:ls)
カウント(コマンド:wc -l)
パイプ [ | ](コマンド:|)と検索(コマンド:grep)
テキストファイルの作成(コマンド:touch)
フォルダの作成(コマンド:mkdir)
ファイル・フォルダのコピー(コマンド:cp)
ファイルをコピー
フォルダをコピー:オプション(-r)必須
ファイル・フォルダの移動(コマンド:mv)
ディレクトリ移動(コマンド:cd)
ファイル・フォルダの削除(コマンド:rm)
ファイルの削除
フォルダの削除:オプション(-r)必須
反復処理:For文(コマンド:for)
反復処理:While文(コマンド:while)
関数(コマンド:function)
先頭の表示(コマンド:head)
末尾の表示(コマンド:tail)
ソート処理(コマンド:sort)
重複削除(コマンド:uniq)
文字列の切り出し・抽出(コマンド:cut)
区切り文字を指定して抽出
-d: 区切り文字指定
-f: フィールドの指定
文字のインデックスを指定して抽出
-c: 先頭からの文字数
文字列の置換(コマンド:sed)
数字の連番(コマンド:seq)
コマンドのレファレンスマニュアルを表示(コマンド:man)
ワイルドカード [ * ] (コマンド:*)
脳画像解析のための環境構築
目次
1. 目的
2. はじめに
3. Lin4Neuroに必要なPCのスペック
4. Lin4Neuroを動かすためのソフト(VirtualBox)をインストール
5. Lin4Neuro(ovaファイル)をダウンロード
6. VirtualBoxに、Lin4Neuro(ovaファイル)をインポート
7. Lin4Neuroの設定
7.1. CPUとメモリ(RAM)の設定
7.2. 共有フォルダの設定
8. Lin4NeuroをVirtualBoxから起動
9. ソフトのインストール
9.1. 3D Slicerのインストール
9.2. ITK-SNAPのインストール
9.3. FSLのインストール
9.4. MRtrix3のインストール
9.5. FreeSurferのインストール
9.6. ANTsのインストール
9.7. SPMのインストール
9.8. CONNのインストール
9.9. 機械学習の環境構築
10. トラブルシューティング
10.1. 起動時に、「仮想マシン”L4N-1804-abis”のセッションを開けませんでした。」という警告
Ubuntu 18.04 への FreeSurfer 7.2.0 のインストール (debファイルの利用)
FreeSurfer 7.2.0が発表されました。
このバージョンからついに deb ファイルが提供されるようになりました。嬉しいことですね。
デフォルトのインストール先は、/usr/local/freesurfer/7.2.0 となります。
Linuxで特定の時間より後に生成されたファイルを列挙する方法
画像解析などをしていると、しばしば、「今の作業で新しくできたファイルは何だろう?」と思うことがあります。
Linuxでは、find コマンドに、-newer というオプションがあります。findのmanページには以下の記載があります。
-newer file
ファイルが file よりも最近に内容を更新されていれば、真を返す。
であるならば、あるファイルを作成して、作業をして、その後に、findをかければ列挙できるはずです。
いろいろ調べた結果、touchコマンドで -t オプションを使うとタイムスタンプを決められるので、それをスクリプトに組み込めるなと思いました。
以下のスクリプトで、新たに生成されたファイルの一覧が generated_from_タイムスタンプ.txt に作成されます。
#!/bin/bash #generate timestamp ts=$(date +%Y%m%d%H%M.%S) #generate a temporary file with current timestamp for find touch -t $ts /tmp/_timestamp # BEGIN commands to generate new files # # END # list files which is generated after /tmp/_timestamp find . -type f -newer /tmp/_timestamp | tee -a generated_from_${ts}.txt
Making use of eddy_cuda of FSL 6.0.4 on Ubuntu 18.04
eddy implemented in FSL is time-consuming program. FSL recommends using eddy_cuda, GPU version of eddy. They ship eddy_cuda8.0 and edddy_cuda9.1. If you use Ubuntu 18.04, you can make use of eddy_cuda9.1 with only 4 commands.
Disclaimer: Installing nvidia-driver could cause display problem. I am not responsible for the problem…
Ubuntu18.04上のFSL6.0.4でeddy_cudaを使う方法
FSLにはeddyという拡散MRI画像の渦電流を補正するプログラムが搭載されています。
かつてはeddy_correctというシンプルなプログラムでしたが、
今のeddyは、計算量がとてつもなく大きな(=処理時間がかかる)プログラムとなっています。
Liux版のFSLには、eddy_openmp というCPU版と、eddy_cuda{8.0,9.1}というGPU版があります。
Ubuntu 18.04 が搭載されているLinuxで NVIDIA製のグラフィックボードが搭載されている場合、eddy_cudaを比較的簡単にセットアップできるので紹介します。
注意:NVIDIAのドライバを入れる時点で、ディスプレイの解像度が変になることがあります。現在の実働マシンに使う場合は相当注意しながら行ってください。個々人の環境があまりにも違うのでこの方法で不具合が起こっても責任は負いかねます。(すでに3台のマシンでセットアップを行い問題ないことを確認していますが…)
Ubuntu で Rの「署名が無効です」への対処法
UbuntuでRを使っていらっしゃる方は多いと思います。
R3.5以上を使う場合、https://cran.rstudio.com/bin/linux/ubuntu bionic-cran35 を使っている場合が多いです。
このリポジトリの署名が2020年10月16日に失効しました。
Workaround for FSL 6.0.4 python dependencies
imglob or imcp provided with FSL requires numpy.testing.decorators. However, numpy.testing.decorators has been deprecated from numpy 1.18. So, if you use numpy >=1.18, you see the following error:
Ubuntu 18.04 に HCP Pipeline の環境を設定する方法
HCP Pipelineを準備するのは簡単ではありませんが、東京大学小池研の植松明子さんとディスカッションしている中で、Ubuntu 18.04にHCP Pipelineを設定する方法を確立できたのでご紹介します。植松さんのinputに感謝申し上げます。
シェルスクリプトで改行を削除したい時は、perl -pe ‘s/\n//’ が便利
タイトル通りの投稿ですが、よく忘れるので、備忘録として。
スクリプトを書いている時に、入力ファイルの改行を全部とって1行にしたいという時があります。
たとえば、
seq 5 > list cat list 1 2 3 4 5
となっている時、これを
1 2 3 4 5
としたいような時をイメージしてください。
これを sed でやろうとするとうまくいきません。
sed 's/\n//' list sed 's/\r//' list
などでいくかと思えどうまくいかず、いろいろはまることになります。
さらにmacとLinuxでは、sedがBSDのsedとGNU sed で違うため、ここもまたはまる原因になります。
でも、sedにこだわらず、Perlで
perl -pe 's/\n/ /' list
とすると、あっさりうまくいきます。
(細かく言うと、Windowsだと、\r\nだったりしますが、とりあえず、UNIX環境と仮定します)
なお、perlのオプション -e は引数をそのままプログラムとして実行するオプションで、ワンライナーでは必須のものであり、オプション -p は、入力の各行に対してプログラムを実行し、最後に結果を表示するオプションとのことです。こちらのサイトに詳しく書いてあり、勉強になりました。
ということで、シェルスクリプトで改行の削除に困ったら、sedにこだわらず、perl -pe を活用すると迷う時間が減るかもしれません。
UbuntuでGnumericを用いてCSVをXLSXに変換する方法
あるプロジェクトで、csvファイルをxlsxに変換する必要がありました。
いろいろな方法がありますが、比較的やりやすかった方法がありましたので、備忘録として記載します。
方法は、gnumeric (とnkf)を使う方法です。インストールは簡単です。
sudo apt install gnumeric nkf
ここでは、例として、sample.csv を sample.xlsx に変換したいと考えます。
- 文字コードをUTF-8に変換
- Gnumericで変換
- XLSXシートのタブ名から.csvを取り除く
日本語が入っている場合、Shift-JISなどだとうまくいかない場合があるので、文字コードをUTF-8に変換します。
nkf -wLu --overwrite sample.csv
Gnumericについているssconvertというプログラムが簡単に変換してくれます。
ssconvert sample.csv sample.xlsx
簡単なのですが、この場合、sample.xlsxのシート名が sample.csv となってしまいます。これは気持ち悪いなと思いました。
なので、これを取り除く工夫が以下です。xlsxをxmlに変換し、xmlの中の.csvをsedで取り除き、そして、再度xmlをxlsxに変換します。
ssconvert --export-type=Gnumeric_XmlIO:sax:0 $sample.xlsx sample.xml sed -i 's/.csv//' sample.xml ssconvert --export-type=Gnumeric_Excel:xlsx sample.xml sample.xlsx rm sample.xml
これで望みどおりの変換ができました。
以上、まとめると、以下のようなスクリプトになります。
#!/bin/bash #prerequisites: nkf and gnumeric for f in *.csv do nkf -wLu --overwrite $f base=${f%.csv} ssconvert $f ${base}.xlsx ssconvert --export-type=Gnumeric_XmlIO:sax:0 ${base}.xlsx ${base}.xml sed -i 's/.csv//' ${base}.xml ssconvert --export-type=Gnumeric_Excel:xlsx ${base}.xml ${base}.xlsx rm ${base}.xml mv $f csv done
UbuntuでDropboxの同期が進まない時は、ディレクトリ数を確認する
最近、あるワークステーションを新規にセットアップしました。
いつもファイルはDropbox経由で同期することによって楽しているので、今回も同じようにしたら、
1週間たっても同期がされません。
おかしいなと思っていろいろ調べてみたら、公式ドキュメントにヒントがありました。
同期できない場合 – 互換性のない特殊文字と不良なファイル名に関する問題の解決方法
Linux で 1 万件以上のフォルダを監視する
Linux 版の Dropbox デスクトップ アプリは、デフォルト設定により 1 万件以上のフォルダを監視することはできません。制限数を超えた場合は監視されないため、同期中に無視されます。簡単な回避策として、まずターミナルを開き、次を入力してください。
echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p
このコマンドでシステムに 10 万件までのフォルダを監視するように指示することができます。コマンドを入力しパスワードを入力したら、すぐに Dropbox が同期を再開します。
私のDropbox内のフォルダ数はどのくらいだろう?と思って、以下のコマンドでディレクトリ数を数えてみました。
find Dropbox -type d | wc -l
その結果ですが、14454 と出てきました。1万件超えています。
そこで、アドバイス通り、以下のコマンドを入力しました。
echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p
そうしたところ、同期がはじまりました!システムで何か変な設定をしてしまったのではないかと心配だったのでほっとしました。
普段使っているDropboxは、少しずつ増えていっているので、おそらく監視しているフォルダ数がそれほど多くないのかもしれませんね。
Bashの様々な設定は、.bashrc ではなく .bash_aliases に書くと事故が防げる
先日、あるスクリプトを書いている中、.bashrcに追記する内容を書いた時に
echo "something" >> ~/.bashrc
と書くべきものを
echo "something" > ~/.bashrc
と誤って書いてしまい、テストでスクリプトを走らせて .bashrc を確認したところ、
something
の一語だけになっており、顔から血の気がひくという経験をしました。
Lin4Neuro based on Ubuntu 18.04 is updated (16 May 2020)
Lin4Neuro based on Ubuntu 18.04 is updated.
Below are main changes.
- Now iso is generated from Ubuntu 18.04 Desktop so that installer can function properly.
- Connectome workbench is installed and configured.
- I changed the strategy to provide installers for huge packages such as AFNI, FreeSurfer, or FSL. It does not come with the release, but you can easily install them by just clicking the installer icons.
- Bundled software packages are all updated.
- The neuroimaging software packages available on Lin4Neuro is listed here.
- VirtualBox appliances are officially provided from now on. Username is “brain” and password is “lin4neuro”. RAM is set to 4GB, and HDD 120GB.
You can get the latest version from here.
Ubuntu で Jupyter Notebook を Google Chrome で起動したい時の設定
Ubuntu で Jupyter notebook を入れるとデフォルトでは Firefox が起動します。
Google Chrome にする方法を探しました。
こちらのリンクに方法が記載されていましたが、記載しておきます。
- 設定ファイルの書き出し
jupyter notebook --generate-config
これで、 ~/.jupyter/jupyter_notebook_config.py が生成されます。
which google-chrome
私の場合は /usr/bin/google-chrome でした。
以下の記載を探します。
# c.NotebookApp.browser = ''
ここを以下に修正します。
c.NotebookApp.browser = '/usr/bin/google-chrome'
これだけです。
Git LFS on Ubuntu 18.04
Ubuntu 18.04 で Git LFSを使うための備忘録です。リポジトリの作成者側、そして利用者側の観点が必要です。
- 共通して準備する事項
- git lfsのインストール
sudo apt install git-lfs
- リポジトリ作成側
- 当該のリポジトリでLFSが使えるようにする
git lfs install
.git/hooks/pre-pushがpushエラーを起こすため、削除(後で再作成される)
cd リポジトリ rm .git/hooks/pre-push
git lfs track "*.nii" "*.nii.gz" "*.mgz"
これで、.gitattributesが作成される。
git lfs track
通常どおり、git add; git commitでコミットする。.gitattributesもaddする。
通常どおり git push を行う
git push origin master
パスワードが複数回聞かれる。(理由は調べる必要あり)
- クローン
git clone を行う
git clone リポジトリ
この時点では、ファイルの実体はダウンロードされていない。次の git lfs pull で実体がダウンロードされる。少なくとも、この時点で、git lfs を使わない場合に起こるメモリの消費は起こらない。
ここで、git lfs pull を使う
git lfs pull
Ubuntu上のFSLやFreeSurferでsyntax errorが出る時の対処法
Ubuntu上でFSLやFreeSurferを走らせる時、
Syntax error: "(" unexpected.
といったエラーが出ることがあります。
この原因を探っていたらわかったことがありました。
FSLのプログラムは、基本、bashで動くことを前提にしていますが、ファイルの冒頭のShebang行は、#!/bin/shとなっています。
RedHatやCentOSは、/bin/sh は、bashにシンボリックリンクが張られていますが、
Ubuntuでは、dashにシンボリックリンクが張られています。
ls -l で確認するとすぐに確認できます。
$ ls -l /bin/sh lrwxrwxrwx 1 root root /bin/sh -> dash
dashとbashは完全に互換性がないため、ときにbashの文法が通用しないことがあります。
解決策は以下の2つです。
- シェルスクリプトのShebang行を #!/bin/bash に変更する
- dpkg-reconfigureで、dashをbashに変更する
自分でシェルスクリプトを書く場合などはこれがいいでしょう。
しかし、FSLでは、300以上のスクリプトがありますので、これを全部変えるのはめんどくさいですね。
Ubuntuでは、 dpkg-reconfigure dash というコマンドで、dashを使わずにbashを使うようにすることができます。
インタラクティブに行うには、以下のコマンドを叩きます。
$ sudo dpkg-reconfigure dash
すると、次の画面が出るので、「いいえ」を選びます。
再度、/bin/shのシンボリックリンク先を確認してみます。
$ ls -l /bin/sh lrwxrwxrwx 1 root root /bin/sh -> bash
今度はbashに変更されていることがわかります。
なお、インタラクティブでなく変更したい際は、以下で行います。
いくつかのサイトで情報が提供されていましたが、正しくないものもありましたので、試行錯誤した結果、以下が最適な解決法とわかりました。
echo "dash dash/sh boolean false" | sudo debconf-set-selections sudo dpkg-reconfigure --frontend=noninteractive dash