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

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

LinuxホストでVirtualboxを使う際、USBデバイスを利用するためにしなければならないこと

Linux上でVirtualboxを使っている時、USBデバイスが認識されないで困っていました。
ドキュメントを見たら、きちんと書いてありました。

ドキュメントはこちら

2.3.4. The vboxusers group

The Linux installers create the system user group vboxusers during installation. Any system user who is going to use USB devices from VirtualBox guests must be a member of that group. A user can be made a member of the group vboxusers through the GUI user/group management or at the command line with

sudo usermod -a -G vboxusers username

vboxusersというグループにユーザーを登録しないと使えないと書いてあります。

早速やってみました。ユーザーネームがfooだとすると、

$ sudo usermod -a -G vboxusers foo

となるわけです。

そうしたところ問題なく使えるようになりました。

fslmathsでproportional scalingをするワンライナー

Proportional scalingは割り算するだけなので大変ではありません。
スクリプトを書くまでもなく、ワンライナーでいけないかと思いました。
次のような感じでばっちりいけました。

必要なものはファイル名となんらかのglobalが記載されているテキストファイルです。ここでは、id_volume.txtとします。

$ cat id_volume.txt

filename1 1.34
filename2 1.43
filename3 1.36
...
filename4 1.47

それでは、本題です。

$ cat id_volume.txt | while read line; \
do id=`echo $line | awk '{ print $1 }'`; \
icv=`echo $line | awk '{ print $2 }'`; \
echo "ID=${id} and ICV=${icv}"; \
fslmaths ${id} -div ${icv} p${id}; done

これで、ファイル名の前にpがついたファイルができます。

Packages to install to run MITK-2015.05.2 on Ubuntu 14.04

MITK-2015.05.2 depends on Qt5, which makes users to install some additional packages.
With trials and errors, below is what you need to do to run MITK-2015.05.2 on Ubuntu 14.04.

  1. build-essential
  2. You need this to run Qt5

    $ sudo apt-get install build-essential
    
  3. Core of Qt5
  4. $ sudo apt-get install qt5-default qttools5-dev-tools
    

    With this command bunch of software packages will be installed on your system.

  5. Two more libraries…
  6. You need two more libraries to run MITK-2015.05.2

    sudo apt-get install libqt5webkit5 libqt5svg5
    
  7. Set environment variable
  8. As the official site points out, you need to set envirament variable as below (when you use bash). I put this in ~/.bashrc

    export QT_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins 
    

Now it works!

Thinkpad X250, X201s, T430s上のUbuntu 14.04に対して、lm-sensorsとthinkfanを用いて熱対策を行う方法

しばらく前から気になっていたのですが、Thinkpad X201sやThinkpad X250にUbuntu 14.04を入れると、妙に熱くなる時がありました。
lm-sensorsをインストールして、温度を見たところ、CPUの温度が77℃に達していました!これは大変と思いました。
調べたところ、”Thinkpad overheating with Ubuntu”といった感じの記事がいろいろ見つかりました。
それらを見てみると、どうもファンの制御がうまくいっていないようです。

そんな中、”Ubuntu 11.10 on ThinkPad X220 でファン制御“という投稿を見つけました。

続きを読む

Linuxでターミナルから日本語名のディレクトリだけを削除したい時の簡単なコマンド

Linuxを使っていると、ターミナルから日本語関連のものを削除するときに、わざわざ日本語入力を可能にしてからというのはめんどくさいですよね。

スマートな方法はと考えました。

下記の方法で、アルファベットおよび数字ではじまらないディレクトリを削除できます。間違って削除するのは心配なので、削除する前に確認のメッセージを出すようにしました。

$ rm -ri [!a-zA-Z0-9]*

Linuxにおいては、シェルでは、[]の中の!は「それ以外」を意味します。
今の場合は、「a-z, A-Z, 0-9ではじまるもの以外」ということになるわけですね。

私の場合、これで、不要な日本語ディレクトリをさらっと消せました。

画像ファイル振り分けスクリプト

画像解析を行っている人ならば、一度は画像の振り分け作業に悩まされたことがあると思います。
私ももれなくその一人で、最近、あるプロジェクトにおいて、画像を分けなければならずしばらく放置していました。

しかし、よく考えてみたら、こういう「めんどくさい」けれども「単純な作業」こそ、コンピューターにさせるべき作業なわけです。

そこで、以下のようなスクリプトを考えてみました。コメントで何をしているか説明します。

#!/bin/sh

#filesorter.sh
#sort files according to the sorting list
#Usage: filesorter.sh sorting_list
#You need to prepare a sorting list beforehand.
#It should be like the following.
# img001  HC
# img002  PT
# img003  HC
# img004  PT
# img005  PT

#引数が指定されているかチェック
if [ $# -ne 1 ]; then
	echo "A sorting file should be specified!"
	echo "Usage: $0 sorting_file"
	echo "Sorting file includes ID and Categorized Group"
	echo "example:"
	echo "img001  HC"
	echo "img002  PT"
	echo "img003  HC"
	echo "img004  PT"
	echo "img005  PT"

	exit 1
fi

#ファイルを読み込み、空白行を削除し、1行ずつ$lineにセット
cat $1 | sed '/^$/d' | while read line
do
    #AWKを使って、第1フィールドを変数idにセット
    #第2フィールドを変数categoryにセット
    id=`echo $line | awk '{ print $1 }'`
    category=`echo $line | awk '{ print $2 }'`
	
    #変数categoryの名前に相当するディレクトリがなければ作成
    if [ ! -e $category ]; then
        mkdir $category
    fi

    #変数idを含むファイルを先ほど作成したディレクトリにコピー
    echo "copy $id to $category"
    cp *${id}* $category
done

興味のある方は、こちらからダウンロードしてください。

Ubuntu 14.04でLibreOfficeを4.xから5.xにアップグレードする方法

この記事は、もともとは、Ubuntu 12.04でLibreOfficeを3.xから4.xにアップグレードする方法に記載していたものですが、Ubuntu 14.04においても同様の方法でいけますので、改めて記載します。

Ubuntu 14.04を利用していると、LibreOfiiceは4.xのままです。
しかし、LibreOfficeは5.xにアップグレードされ、互換性なども以前にまして高まっています。
以下の方法で、簡単にLibreOfficeを4.xから5.xにアップグレードできます。

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get dist-upgrade

ここでポイントは、apt-get updateの後にapt-get dist-upgradeを行うことです。

apt-get upgradeとapt-get dist-upgradeの違いは、man apt-getに以下の記載があります。

upgrade
upgrade は、現在システムにインストールされている全パッケージの最新バージョンを、/etc/apt/sources.list に列挙した取得元からインストールするのに使用します。現在インストール中のパッケージに新しいバージョンがあれば更新しますが、いかなる時も現在インストール中のパッケージの削除は行いません。対象のパッケージが、他のパッケージのインストール状態を変更せずに更新できない場合は、現在のバージョンのままとなります。最初に update を実行しておき、apt-get にパッケージの新しいバージョンがあることを知らせる必要があります。

dist-upgrade
dist-upgrade は、upgrade の機能に加え、新バージョンのパッケージに対する依存関係の変更を知的に操作します。apt-get は「洗練された」競合解決システムを持ち、必要とあらば比較的重要でないパッケージを犠牲にして、最重要パッケージの更新を試みます。そのため dist-upgradeは、いくつかのパッケージを削除する可能性があります。/etc/apt/sources.list ファイルには、必要なパッケージファイルを検索する場所のリストが含まれています。

upgradeは全く削除されることなく、dist-upgradeは必要あらばファイルを削除する可能性があるわけですね。今回、LibreOfficeの3.xから4.xへのアップグレードには、いくつかのファイルが削除される必要もあるので、dist-upgradeを利用することとなります。

何はともあれ、この3つのコマンドで、LibreOfficeを安定した最新版にアップグレードできます。

UbuntuでXPSファイルをPDFに変換する方法

Windowsでは、PDFに対抗してXPS形式という形式でファイルを出力することができます。
今はMicrosoft OfficeならばPDFに直接書き出すことができますが、それ以外のソフトウェアでは、WindowsではAdobe Acrobatやその他のPDFに出力することができるソフトウェアを使わないと直接PDF出力ができません。その点、XPS形式ならばどんなソフトウェアからも出力することができます。

出張先で、プリンタがなく、アクセスできるWindowsにPDF出力機能がない場合、XPSをとりあえず出力して、
Ubuntu側でXPSをPDFに変えられるのではないだろうか?と思いました。

そうしましたら、見つけました。その名もxpstopdfというコマンドです。
これは、libgxps-utilsというソフトウェアに入っています。

続きを読む

Xubuntu14.04にIBM SPSS 22をインストールし、日本語の文字化けをなくす方法

Linuxで統計をやるならRを使えばいいじゃないと言われそうですが、
同僚がSPSSを多く使う場合、SPSSを動かせた方がいい時もあります。
ただ、インストールしてみたら日本語が文字化けして苦しみました。
ちょっとした工夫でクリアーできたので、ご紹介します。
ちなみに、SPSS_Statistics_22_lin_.binというファイルを使ってインストールしました。

続きを読む

Ubuntuでlessを使って構文をカラー表示する方法

viやgeditなどを使うと、シェルスクリプトなど、様々な構文を自動でカラー表示させることができて便利です。しかし、lessで表示させると白黒でわかりづらくなってしまいます。

そこで、lessでカラー表示する方法がないか調べたところ、様々な方がその情報を発信されていました。

  • とりあえず、解決法
  • 時間がない方は、以下の2つをやってください。

    まず、source-highlightをインストールします。

    $ sudo apt-get install source-highlight
    

    次に、以下の2行をホームディレクトリにある.bashrcに追加します。

    #Source-hilight with less
    export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
    export LESS='-R'
    

    これを保存し、シェルを新しく起動すると、lessでシェルスクリプトが色付きで表示されるようになります。ちょっと感動です。

    私のサンプルスクリプトは下図のようになります。

    less_color

    ここまでなら、いくつもあるのですが、原典にあたってみたいということと、LESSとLESSOPENの意味を調べてみたので、少し紹介します。

  • 原典
  • この情報の出処は、GNU Source-highlightの解説サイトと考えられます。こちらになります。

    引用しておきます。

    This was suggested by Konstantine Serebriany. The script src-hilite-lesspipe.sh will be installed together with source-highlight. You can use the following environment variables:

    export LESSOPEN=”| /path/to/src-hilite-lesspipe.sh %s”
    export LESS=’ -R ‘

    This way, when you use less to browse a file, if it is a source file handled by source-highlight, it will be automatically highlighted.

  • 変数LESSの意味
  • 次に、LESS=’-R’の意味が何かを調べてみました。いろいろ調べたところ、lessのmanページの解説が一番しっくりきました。以下のように記載されています。

    -R または –RAW-CONTROL-CHARS
    -r と似ているが、可能な場合には画面表示を正しく維持しようとする。 このオプションが有効なのは、入力が通常のテキストの場合である。入力には ANSI の「カラー」エスケープシーケンスが含まれていてもよい。 このシーケンスは

    ESC [ … m

    のような形式で、”…” は “m” 以外の 0 個以上の文字である。画面の状況を保つため、 全ての制御文字と ANSI カラーシーケンスは カーソルを移動させないと仮定している。 less に “m” 以外の文字を ANSIカラーエスケープシーケンスの終了文字として認識させることもできる。そのためには、認識させたい終了文字のリストを 環境変数LESSANSIENDCHARS に設定すればよい。

    ここに「カラー」エスケープシーケンスとありました。
    どうもこれを指定することで、色がきちんと表示されそうです。
    ちなみに、これを指定しないとどうなるかやってみました。
    その結果は、一目瞭然です。

    less_bw

  • LESSOPENの意味
  • 次に、LESSOPENです。なぜ、最初にいきなりパイプが入っていたり、最後に%sがあるのでしょうか。これも、lessのmanページに記載がありました。引用します。

    入力プリプロセッサ
    less のための「入力プリプロセッサ」を定義することができる。 less がファイルを開く前に、入力プリプロセッサで 入力ファイルの内容の表示の仕方を変更することができる。 入力プリプロセッサに渡される。 入力プリプロセッサは、ファイルの内容を 代替ファイルと呼ばれる別ファイルに書き出す 単純な実行可能プログラム (もしくは、シェルスクリプト) である。 代替ファイルの内容がオリジナルファイルの内容の代わりに表示される。 しかし、ユーザーにとってはオリジナルファイルが開かれているかのように見える。less は現在の代替ファイルの名前としてオリジナルファイルの名前を表示する。

    入力プリプロセッサは、ユーザーによって入力される オリジナルファイル名を1 つのコマンドライン引き数として受け付ける。 そして、代替ファイルを生成し終えると、代替ファイル名を標準出力に表示する。 入力プリプロセッサが代替ファイル名を出力しない場合、less は標準としてオリジナルファイルを用いる。 入力プリプロセッサは、標準入力を閲覧する場合には呼び出されない。
    入力プリプロセッサを設定するためには、 入力プリプロセッサを呼び出すコマンドラインを環境変数 LESSOPENに設定する。このコマンドラインには、入力プリプロセッサコマンドが呼び出されるときに、ファイル名に置き換えられる文字列 “%s” を含んでいなければならない。

    ここで%sの意味が明らかになりました。最後の%sは、ファイル名を意味するのですね。

    その後に以下のような記載があります。

    ファイルのデータを代替ファイルに書き出さず、そのまま、less にパイプするような入力プリプロセッサを設定することも可能である。こうすることにより、閲覧する前に圧縮ファイル全体を展開するのが避けられる。このような働きをする入力プリプロセッサは、入力パイプと呼ばれる。 入力パイプは、代替ファイル名を標準出力に表示する代わりに、代替ファイルの内容全てを標準出力に書き出す。入力パイプが標準出力に何も書き出さない場合、代替ファイルは生成されず、less は普通にオリジナルファイルを使う。入力パイプを使う場合は、入力プリプロセッサが入力パイプであることを知らせるために、環境変数 LESSOPEN の最初の文字を、縦棒 (|) に設定する。

    つまり、LESSOPENの最初に指定するパイプ(|)は、入力プリプロセッサが入力パイプであることを明示しているわけですね。

    つまり、私の理解では、上記の2行によって、

    • ファイルをパイプで、src-hilite-lesspipe.shに渡す。%sは渡すファイル名を意味
    • 変数LESSに-Rを指定することによって、色のエスケープシーケンスを設定し、端末上に色が表示されるようにする

    ことを可能にしているわけですね。

掘り下げて勉強した結果、manページに当たることの大切さを再び学びました。

How to install official NVIDIA drivers on Xubuntu 14.04

(I wrote this post originally in Japanese, but this post may be helpful universally, so re-write in English.)

I got a new PC with NVIDIA GeForce GTX 750 Ti in December 2014.

At that time nvidia-current did not support GTX750Ti, so I needed to install drivers from nvidia website. However, some tweaks were needed to get things done, so I drop a note how to install NVIDIA drivers without much pain.

続きを読む

(筑波大関係者専用)Ubuntuで筑波大のVPNサービスに接続する方法

筑波大の学術情報メディアセンターはVPNサービスを運用してくださっています。
非常にわかりやすいマニュアルを提供してくださっていますが、残念ながら、Linuxのマニュアルはまだ提供されていません。

そこで、私の環境(Xubuntu 14.04)でOpenVPNを使ってうまくVPN接続に成功しましたので、備忘録を兼ねて書いておきます。

続きを読む

Ubuntu12.04以降に本家TeX Liveの最新版を簡単にインストールする方法

先日、私のシステムをXubuntu 12.04からXubuntu 14.04にアップグレードしました。
私はLaTeXに関しては、本家のTeX Liveを使っています。インストーラーは十分に使いやすいのですが、怠け者なので、より簡単にできないかと方法を探してみました。

なぜかというと、本家を使う場合、リンクにあるように、少し設定が必要だからです。

そのリンクをひとつずつ確認していたところ、ある方が、Ubuntu用の本家TeX Liveのインストールスクリプトを公開しているということを知りました。最新版にリンクされています。

早速トライしてみたら便利だったので、紹介します。

続きを読む

Linuxにおけるハイフンの意味

ときどき、下記のような表現を見ます。

$ wget -O- http://www.example.com/example.gpg.key | \
  sudo apt-key add -

この -Oのあとについているハイフンや、apt-key addのあとについているハイフンの意味をきちんと理解していませんでした。

改めて、調べたら、いろいろな方が解説してくれていました。

結論からいうと、

Linuxにおけるハイフンは、標準入出力をさす

のですね。

上記の例の場合、wget -O は本当はファイル名を引数にもつはずで、

wget -O file となるはずなんです。

でも、今の場合、-を指定することで、

wget -O- はその内容を、標準出力に表示するんですね。
今の場合は、example.gpg.keyが表示されるわけです。

で、上記の場合、さらにパイプがつながっていて、apt-key add -と続きます。
今回のハイフンは、今度は標準入力になるわけですね。

つまり、example.gpg.keyの内容が標準出力に出力され、
それがパイプで今度は標準入力になって、apt-key addの引数として使われるわけです。

となると、次と同じということですね。

$ wget -O tmpfile http://www.example.com/example.gpg.key
$ sudo apt-key add tmpfile
$ rm tmpfile

ハイフンを上手に使うことで一時ファイルを作ることなくパイプを使うことができるわけです。
スマートですね。