bashのtips: 直前の引数を利用したいときは !$

私はこんな作業をよくします。

  • あるファイルをディレクトリAにコピー
  • ディレクトリAに移動

この際

$ cp something /path/to/A
$ cd /path/to/A

とするわけですが、この /path/to/A を2回うつのはめんどくさいので、簡単な方法がないかを調べてみると、

!$

という特殊変数があることがわかりました。
しかし、しょっちゅう忘れるので、覚え方を考えてみました。

bashでは、履歴を知りたいときに、!を使います。
たとえば

$ history

でコマンド履歴を調べ、その1457番目のコマンドを再度実行したいときは

$ !1457

とすればいいわけですね。

で、$ですが、正規表現において、$は「行の最後」を意味します。

この2つを組み合わせれば

「履歴において一番最後のもの」

と考えれば、 !$

は覚えやすいなと思いました。

自分の思考過程を備忘録として書いておきます。

Update of Lin4Neuro (27 Jun 2017)

Lin4Neuro was updated.

  • Fixed the bug of installer crash
  • All Neuroimaging software is up-to-date. FSL remains 5.0.9 since 5.0.10 is not available yet on Neurodebian.
  • Tutorial by Prof. Chris Rorden is put under home directory. Anybody can go through tutorial without further download.
  • Now Lin4Neuro is UEFI compatible.

You can get the latest version from here.

Lin4Neuroのアップデート (27 Jun 2017)

Lin4Neuroのアップデートを行いました。

  • Ubuntu 16.04をベースに、インストーラーがクラッシュするバグを修正しました
  • 画像解析ソフトを最新版にしました。FSLはUbuntu版はまだ5.0.10がリリースされていないため、5.0.9のままです。
  • Chris Rorden教授のチュートリアルをわかりやすい場所に配置しました。
  • UEFI対応となっており、UEFI対応PCにもインストール可能となりました。

ここから入手できます。

Pubmedの結果をviで整形する(不要な改行の削除)

Pubmedはとても便利ですが、いくつか不便なこともあります。
そのうちのひとつに、summary (text) の扱いです。
viを使ってなんとかきれいにできないかと試行錯誤した結果です。

先に結論を示すと、以下でできます。

:%s/\n\([A-Za-z0-9]\)/ \1/

以下がそのプロセスです。

続きを読む

Lin4Neuroのアップデート (31 Mar 2017)

Lin4Neuroのアップデートを行いました。

主な更新点は以下になります。

  • Ubuntu 16.04をベースにするバージョンを発表しました。(ただし、インストーラーにバグがあるため、現在調整中です。)Ubuntu 14.04版も続けてメンテナンスしていきます。
  • 画像解析ソフトをすべて最新バージョンにアップデートしました。
  • GitHub上にLin4Neuroを作成するスクリプトを公開しました。
  • https://github.com/kytk/lin4neuro-xenial

    これを用いればLin4Neuroを自分の使いたいようにカスタマイズしていただくことも可能かと思います。

  • 起動時画面のロゴに少し修正を加えました。Lin4NeuroがUbuntuのどのバージョンに基づいているかがひと目でわかります。

最新版のLin4Neuroは こちらからどうぞ。

Update of Lin4Neuro (31 Mar 2017)

Lin4Neuro is updated.

  • Now Lin4Neuro is based on Ubuntu 16.04. (I’ll keep maintenance of 14.04 Version too)
  • All of the neuroimaging software packages are up-to-date.
  • Building scripts of Lin4Neuro is publicly available on GitHub.
  • https://github.com/kytk/lin4neuro-xenial

    You can make your version of Lin4Neuro based on the repository above. I wrote instruction how to use in the repository.

  • I made some changes to the Lin4Neuro logo on splash. You will find L4N you are using is based on Ubuntu 14.04 or later.

You can download the latest Lin4Neuro from here.

BashからMatlabスクリプトを実行する方法

先日、ある方と「BashからMatlabを呼び出せないだろうか」という話をしていました。もし、これができたら、シェルスクリプトから、Matlabを呼び出せるので、シェルとMatlabを完全に連携できるわけです。

結論としては、以下でできました。

  • Short answer
  • Matlabのスクリプト名を sample_code.m とすると、以下でできます。

    $ matlab -nodesktop -nosplash -r 'sample_code; exit'
    

    コツは2つです。

  • スクリプト名ではなく、コマンドとして指示するため、.mは外す
  • Matlabから抜けるために exit を追加する

続きを読む

シーケンスを自動判別し、ファイル名を自動リネームするDICOM→NIFTI変換スクリプト

本日、第19回ヒト脳機能マッピング学会で発表したのですが、ブログのタイトル通り、シーケンスを自動判別し、ファイル名を自動でリネームするDICOM→NIFTI変換スクリプトを書いてみました。

MacおよびLinuxに対応しています。

必要なソフトウェアは以下の2つです。

  • MRIcron
  • パスが通っていることが必要です。

  • FSL
  • FSLも同様にパスが通っていることが必要です。

このスクリプトは以下から入手可能です。(右クリックで「名前をつけて保存」で保存できます。)

https://raw.githubusercontent.com/kytk/shellscripts/master/ren-dcmcnv.sh

  1. インストール
  2. インストールですが、パスが通っているディレクトリに保存していただくだけです。

  3. 使い方
  4. 使い方はとてもシンプルです。

    • フォルダの準備
    • 最初に、作業用フォルダを準備します。その中に、各被験者のフォルダを準備します。フォルダ名がとても重要です。このスクリプトはフォルダ名をファイル名のベースに使うからです。
      たとえば、被験者IDがsubj01ならば、フォルダ名をsubj01とします。その中にその被験者のDICOMファイルをすべて放り込みます。(ディレクトリ構造になっていてもなっていなくてもかまいません)

    • スクリプトの実行
    • ターミナルを起動し、作業用フォルダに移動します。

      そして、以下をタイプします。

      $ ren-dcmcnv.sh
      

      これだけです。

    • スクリプトが行うこと
    • スクリプトは以下のことを行います。フォルダ=ディレクトリです。

      1. ワーキングディレクトリに “DICOM”, “nifti” ディ
        レクトリを作成します。
      2. wd内にできたDICOMディレクトリに移動します。
      3. DICOM ディレクトリ内で dcm2nii を実行し、NIFTIファ
        イルを生成します。
      4. fslhd を用いてNIFTIファイルのヘッダー情報を取得します。
      5. 以下のルールに基づき、3次元T1強調画像、fMRI画像、DTI画像を判別します。
        • 3次元T1MRI: 画像の第2次元≧256, 第3次元>100, TE<6msec; (V_)
        • fMRI: 画像の第4次元>100; (F_)
        • DTI: 画像の第4次元が8以上100 未満 (D_)
      6. ディレクトリ名を取得し、ファイル名のベースとし、それぞれの接頭辞に識別記号を付加します。
      7. 変換したファイルをniftiディレクトリに移動します。

よかったら試してみてください。

Lin4Neuroのアップデート (14 Aug 2016)

Lin4Neuroのアップデートを行いました。

主な更新点は以下になります。

  • UEFIに対応するようにいたしました。
  • 画像解析ソフトをすべて最新バージョンにアップデートしました。
  • GitHub上にLin4Neuroを作成するスクリプトを公開しました。
  • https://github.com/kytk/lin4neuro-trusty

    これを用いればLin4Neuroを自分の使いたいようにカスタマイズしていただくことも可能かと思います。

  • 起動時画面のロゴに少し修正を加えました。Lin4NeuroがUbuntuのどのバージョンに基づいているかがひと目でわかります。

現在、Ubuntu 16.04に基づいたLin4Neuroを開発中です。できたら年末までに公開できたらと思っています。

最新版のLin4Neuroは
You can download the latest Lin4Neuro from こちらからどうぞ。

Update of Lin4Neuro (13 Aug 2016)

Lin4Neuro is updated.

Below is the points of update.

  • Now Lin4Neuro ISO is UEFI bootable.
  • All of the neuroimaging software packages are up-to-date.
  • Now I made the building scripts of Lin4Neuro publicly available on GitHub.
  • https://github.com/kytk/lin4neuro-trusty

    You can make your version of Lin4Neuro based on the repository above. I wrote instruction how to use in the repository.

  • I made some changes to the Lin4Neuro logo on splash. You will find L4N you are using is based on Ubuntu 14.04 or other.

Now I’m in the process of developing Lin4Neuro based on Ubuntu 16.04. Hopefully this version will be released by the end of this year.

You can download the latest Lin4Neuro from here.

FSLを用いたシェルスクリプト演習:3次元脳MRIの水平断一覧画像の作成

あるプロジェクトにおいて、「MRI画像の一覧画像を作成してもらいたい」という依頼を受けました。

イメージとしては、下記のようなものです。

LB_example

以前、FSLのシェルスクリプトチュートリアルを翻訳していた際に、演習に
Lightbox Viewerがあったのを思い出して、改めて、それを見ながら、さらに機能を追加したスクリプトを考えてみました。

作成しながら勉強になることがいくつもあったので、細かくわけてみたいと思います。

続きを読む

Ubuntuのapt-get updateで「ハッシュサムが適合しません」と出た時の対処法

先日、Ubuntuでapt-get updateを行った所、以下のエラーに遭遇しました。

W: http://jp.archive.ubuntu.com/ubuntu/dists/trusty-updates/main/source/Sources 
の取得に失敗しました  
ハッシュサムが適合しません

このような場合の解決法がいくつか提示されています。よくみられているもののひとつに、Ubuntuフォーラム内の投稿があります。

これでいいのですが、本質は何か考えてみました。

本質は、

/var/lib/apt/lists

の中にあるファイルとの比較で失敗しているようです。

したがって、消せばいいのは、この中身で、apt-getはその下にあるpartialディレクトリがなかったら自動で作成してくれます。

なので、やればいいのは、たった一つです。

$ sudo rm -r /var/lib/apt/lists/*

これでapt-get updateを行えば問題は解決するはずです。

自分の備忘録として残しておきます。

Ubuntu 16.04 における plymouth

Ubuntu 16.04になってから、Plymouthの挙動が変なので、いろいろ調べたところ、以下のことがわかりました。

これまでは、テーマは、/lib/plymouth/themesの下に保存されていましたが、これからは、/usr/share/plymouth/themesの下に保存されるようになったようです。

したがって、自作のテーマを使いたい場合、以下を行う必要があります。今、テーマはmytheme/mytheme.plymouthと仮定します。

  • 自作の mytheme.plymouth の中のファイルのパスを “/lib/plymouth” -> “/usr/share/plymouth” に変更
  • update-alternativesで新たにdefault.plymouthを設定
  • $ sudo update-alternatives --install \
    /usr/share/plymouth/themes/default.plymouth 
    default.plymouth \
    /usr/share/plymouth/themes/mytheme/mytheme.plymouth 100
    
  • テーマの変更
  • $ sudo update-alternatives --config default.plymouth
    
  • システムに反映
  • $ sudo update-initramfs -u
    

場所が変更になったことだけ頭においておけば、そこまで悩む必要はなさそうです。

LinuxでUSBメモリをNTFSにフォーマットにするコマンド

先日、USBメモリに4GBを超えるファイルをコピーする必要がありました。
Windowsユーザー、Macユーザーも使うUSBメモリなので、NTFSフォーマットがよいと考えました。MacユーザーもNTFSは標準で読み取りはできますので。

これまで、フォーマットするときにGPartedでやっていました。GUIで簡単ですから。

しかし、今回は、NTFSフォーマットだけでなく、ボリュームラベルも変更する必要がありました。Gpartedでは、これは2段階(NTFSへのフォーマットとラベルの設定)になってしまうので、もっと簡単な方法はないかと思いました。

検索してなかなかすぐに見つけられなかったのですが、以下の方法が簡便とわかったので、紹介します。

  • USBメモリのデバイス名の確認
  • Linuxでは、USBメモリは、/dev/sdc1とか/dev/sdb1などに割り当てられます。どこに割り当てられたかを確認する必要があります。方法として、dmesgを使う方法と、fdisk -lを使う方法があります。

    • dmesg
    • USBメモリをPCにさした時点で、端末に

      $ dmesg
      

      とタイプします。そうすると、以下のようなメッセージが出てきます。

      [ 8939.172114] usb 3-2: New USB device found, idVendor=054c, idProduct=05bb
      [ 8939.172119] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
      [ 8939.172120] usb 3-2: Product: Storage Media
      [ 8939.172122] usb 3-2: Manufacturer: Sony
      [ 8939.172124] usb 3-2: SerialNumber: EBA5A08FFF1748
      [ 8939.712192] usb-storage 3-2:1.0: USB Mass Storage device detected
      [ 8939.712398] scsi3 : usb-storage 3-2:1.0
      [ 8939.714168] usbcore: registered new interface driver usb-storage
      [ 8939.717329] usbcore: registered new interface driver uas
      [ 8940.957656] scsi 3:0:0:0: Direct-Access     Sony     Storage Media    0100 PQ: 0 ANSI: 6
      [ 8940.957872] sd 3:0:0:0: Attached scsi generic sg2 type 0
      [ 8940.958666] sd 3:0:0:0: [sdc] 30507008 512-byte logical blocks: (15.6 GB/14.5 GiB)
      [ 8940.959280] sd 3:0:0:0: [sdc] Write Protect is off
      [ 8940.959282] sd 3:0:0:0: [sdc] Mode Sense: 43 00 00 00
      [ 8940.959779] sd 3:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
      [ 8940.964615]  sdc: sdc1
      [ 8940.966528] sd 3:0:0:0: [sdc] Attached SCSI removable disk
      [ 9741.422259] usb 3-2: USB disconnect, device number 2
      

      ここにUSBとかsdcとか出てきますね。
      これで、/dev/sdcが割り当てられたとわかります。

    • fdisk -l
    • もうひとつの方法はfdiskを用いることです。-lオプションで、デバイスの一覧を表示します。

      $ sudo fdisk -l
      

      とすると、今度は次のように表示されます。

      Disk /dev/sdc: 15.6 GB, 15619588096 bytes
      ヘッド 255, セクタ 63, シリンダ 1898, 合計 30507008 セクタ
      Units = セクタ数 of 1 * 512 = 512 バイト
      セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
      I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
      ディスク識別子: 0xc3072e18
      
      デバイス ブート      始点        終点     ブロック   Id  システム
      /dev/sdc1              48    30507007    15253480    c  W95 FAT32 (LBA)
      

      この方がわかりやすいですね。いずれにしても、/dev/sdc1がUSBメモリのパーティションだということがわかります。ちなみに、sdc1の1はパーティションの番号で、USBメモリの場合、たいていパーティションは1つなので、sdc1がUSBメモリのパーティションになります。

  • NTFSへのフォーマット
  • ここでは、mkfs -t ntfsというコマンドを使います。そして、ラベルは、-Lというオプションですので、以下のようにタイプします。
    (mkfs.ntfsとmkfs -t ntfsは同義です)

    $ sudo mkfs -t ntfs -L usbdisk /dev/sdc1
    

    そうすると、フォーマットがはじまります。もし、クイックフォーマットにしたい場合は、-Qをつけて、

    $ sudo mkfs -t ntfs -Q -L usbdisk /dev/sdc1
    

    とします。(通常はこちらの方が現実的です)

  • ファイルシステムの確認
  • ふつう、する必要はありませんが、きちんとNTFSに変換されたか知りたい人もいることでしょう。

    その場合は、以下のコマンドをタイプします。

    $ sudo parted -l
    

    そうすると、以下のようなメッセージが表示されます。

    モデル: Sony Storage Media (scsi)
    ディスク /dev/sdc: 15.6GB
    セクタサイズ (論理/物理): 512B/512B
    パーティションテーブル: msdos
    
    番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
     1    24.6kB  15.6GB  15.6GB  primary  ntfs              lba
    

    きちんとファイルシステムがntfsになっていることが確認できました。

Lin4Neuroのメジャーアップデート (18 Jan 2016)

時間がかなりかかってしまいましたが、Lin4Neuroのメジャーアップデートを公開しました。
見た目は変わっていませんが、システムは相当変わっています。

  • 今後、Lin4NeuroはUbuntuのmini.isoをベースに、XFCE 4.12を搭載していきます。メモリ使用量は起動時は300MB未満です。
  • これから公開していきますが、Lin4Neuroの作成スクリプトを準備しました。どうやってLin4Neuroが作られているのかを確認できます。

現時点で、以下のパッケージが収載されています。

  • 3D Slicer
  • AFNI
  • DSI Studio
  • FSL
  • ITK-SNAP
  • Mango
  • MRI Convert
  • MRIcroGL
  • MRIcroN
  • Virtual MRI

今後のアップデートで、その他のソフトウェアも収載予定です。

最新版のダウンロードは、 こちらからどうぞ。

Major update of Lin4Neuro (18 Jan 2016)

Though it took such a long time, I’m pleased to announce the release of the update of Lin4Neuro.
It looks the same, but it is quite different.

  • From now on, Lin4Neuro is based on minimal Ubuntu with XFCE 4.12. RAM consumption is less than 300MB when the system is up.
  • I prepared scripts to show how I made Lin4Neuro. You can check what has been done while minimal Ubuntu transform into Lin4Neuro (The scripts are to be released soon).

Right now, following packages are pre-installed.

  • 3D Slicer
  • AFNI
  • DSI Studio
  • FSL
  • ITK-SNAP
  • Mango
  • MRI Convert
  • MRIcroGL
  • MRIcroN
  • Virtual MRI

Other software packages will be added in the next update.

You can download the latest version from here.

Thinkpad X250でUbuntu 14.04を動かすときに、タッチパッドを無効にする方法

私は、今、Thinkpad X250とT430を使っています。Thinkpad T430では、BIOSで、タッチパッドを無効にすれば、そのままタッチパッドが無効になったので、よかったのですが、同じことをX250でやっても効果がありません。

それでいろいろ調べてみました。

結論は、以下の方法が一番早いかと思います。

ターミナルで以下をタイプします。

$ synclient TouchpadOff=1

ただ、これは、一時的なもので、ずっとそうしたくない場合は、自動でこれが動くようにしてあげればいいわけです。

私はXFCE環境なので、XFCEでどうするかを調べました。

2つのファイルを準備する必要があります。

  • disable-touchpad.sh (名前はなんでもいいです)
  • これには、以下の2行だけ記載されています。

    #!/bin/sh
    synclient TouchpadOff=1
    

    これを実行権限をつけた後、パスの通っているディレクトリに保存します。私は、~/binに起きました。

  • disable-touchpad.desktop (これも拡張子が.desktopであれば名前はなんでもいいです)
  • これには、以下の3行だけ記載されています。

    [Desktop Entry]
    Type=Application
    Exec=disable-touchpad.sh
    

    この保存場所が大事なのですが、

    ~/.config/autostart

    に保存します。autostartがなければ自分で作れば大丈夫です。

    これで、ログアウトし、再度ログインすると、めでたく、Touchpadが無効になっています。

ちなみに、検索するとよく出てくる

/usr/share/X11/xorg.conf.d/50-synaptics.conf

の一番最後に、以下を記載

Section "InputClass"
Identifier "no need for accelerometers in X"
MatchProduct "SynPS/2 Synaptics TouchPad"
Option "Ignore" "on"
EndSection

というのは、ひとつ間違えるとシステムが起動しなくなることもあり得るので、注意が必要です。