2017年3月22日

古いファイルのタイムスタンプを表示するには?(lsコマンド)

lsコマンドでは、ファイルのタイムスタンプが古いものは時刻表示がカットされ、年月日のみが表示されます。

$ ls -l /bin/cat
-rwxr-xr-x 1 root root 47904  3月 11  2016 /bin/cat

より詳細な時刻を知りたいときは、--full-timeオプションを追加します。

$ ls -l --full-time /bin/cat
-rwxr-xr-x 1 root root 47904 2016-03-11 04:10:57.000000000 +0900 /bin/cat



2017年3月21日

ディレクトリの役割を調べるには(man hier)

Linuxのディレクトリ階層は、FHS(ファイルシステム階層標準)として仕様が定められています。ディレクトリにどんな役割があるのか確認したいときは、次のコマンドを実行します。

$ man hier

このようなmanページが表示されます。




2017年3月20日

16進数を10進数に変換するには?(echoコマンド)

16進数を10進数に変換したいときは電卓アプリなどを使えばいいのですが、ちょっとした確認のためだけに起動するのは面倒です。Bashの算術式展開を使うと、16進数を10進数に変換して表示することができます。

【書式】$((0xHEX))

HEXの位置に16進数を記述します。次の例では、FFF(16)を10進数に変換しています。

$ echo $((0xfff))
4095



2017年3月19日

連番を生成するには?(seq文)

seqコマンドを使うと、連続した数値のリストを生成できます。

【書式】seq 開始値 [増分] 終了値

次の例では、1~5の数値を生成します。

$ seq 1 5
1
2
3
4
5

次の例では、1~20の数値を5飛ばしで生成します。

$ seq 1 5 20
1
6
11
16

seqコマンドは、シェルスクリプト内のfor文などで使われます。単体で使うことはあまりないでしょう。



2017年3月18日

lsコマンドのカラム数を調整するには?(prコマンド)

lsコマンドで表示されるカラム数(列)は、端末の幅によって変化します。書式を整えるprコマンドと組み合わせると、カラム数を調整することができます。

例えば、横5列で表示したい時は、次のようにします。-Tはヘッダや余白を省略するオプションです。

$ ls | pr -5 -T
a1.txt        b1.txt        c1.txt        d1.txt        e1.txt
a2.txt        b2.txt        c2.txt        d2.txt        e2.txt
a3.txt        b3.txt        c3.txt        d3.txt        e3.txt
a4.txt        b4.txt        c4.txt        d4.txt        e4.txt
(省略)

今度は横5列で、かつページ幅を40文字としてみます。

$ ls | pr -3 -T -w 40
a1.txt       b7.txt       d4.txt
a2.txt       b8.txt       d5.txt
a3.txt       b9.txt       d6.txt
a4.txt       c1.txt       d7.txt
(省略)


2017年3月17日

シェルスクリプトで処理を一定の回数くりかえすには?(for文)

Bashのfor文は、C言語やJavaに慣れた人にとっては違和感があるでしょう。安心してください。C言語やJavaのような使い方もできます。次の例では、1~9までの数値を表示します。

#!/bin/bash
for ((i=1; i<10; i++))
{
  echo $i;
}

echo文の末尾に「;」はなくてもよいのですが、あえてC言語っぽく書きました。うっかり「i=1」を「i = 1」のように「=」前後にスペースを入れないよう気をつけてください。


2017年3月16日

シェルスクリプトでループ処理をするには?(for文)

for文は、値リストに並んだ値を変数に代入しつつ、do~doneのループを繰り返します。値リストは、スペースで区切られた文字列です。値リストが尽きれば、ループは終了します。

for 変数 in 値リスト
do
  処理
done

次の例では、1~10までの数値を変数に代入しつつループ処理を行います。

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
  echo $i
done

実行してみます。

$ bash fortest.sh
1
2
3
4
5
6
7
8
9

数が大きいときは、連続した数値を生成するseqコマンドを使った方がよいでしょう。

#!/bin/bash
for i in $(seq 1 9)
do
  echo $i
done

「$(コマンド)」は、括弧内のコマンドを実行してその結果に置き換える、という意味です。

2017年3月15日

ホームディレクトリの容量を調べるには?(duコマンド)

ディレクトリ内にどのくらいのファイルが保存されているのか、その容量を調べたい時は、duコマンドを使って次のように調べます。

$ du -scm ~
931     /home/north
931     合計

-sは指定したディレクトリのみを対象とするオプション、-cは合計を表示するオプション、-mは単位をMバイトで表示するオプションです。上記の例では、ホームディレクトリ内で931Mバイトが使われていることが分かります。



2017年3月14日

ファイルの種類を確認するには?(fileコマンド)

fileコマンドを使うと、ファイルの種類を確認することができます。

$ file /etc/hosts
/etc/hosts: ASCII text
$ file abc.jpg
abc.jpg: JPEG image data, JFIF standard 1.02
$ file exdir.tar
exdir.tar: POSIX tar archive (GNU)
$ file exdir.tar.bz2
exdir.tar.bz2: bzip2 compressed data, block size = 900k
$ file /bin/ls
/bin/ls: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.24, 
BuildID[sha1]=8d0966ce81ec6609bbf4aa439c77138e2f48a471, stripped

上から順に、テキストファイル、JPEG画像ファイル、TARアーカイブファイル、bzip2圧縮ファイル、実行ファイルとなっています。


2017年3月13日

連続する文字列を生成するには?(ブレース展開)

Bashでは、記号{}を使って連続する文字列を生成できます(ブレース展開)。次の例では、1~10までの連番を生成します。

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10

次の例では、aからgまでのアルファベット文字列を生成します。
$ echo {a..g}
a b c d e f g

複数の空ファイルを作成したいときなどに便利です。次の例では、touchコマンドを使い、a1.txt~e9.txtまで45個のファイルを生成しています。

$ touch {a..e}{1..9}.txt
$ ls
a1.txt     b1.txt     c1.txt     d1.txt     e1.txt
a2.txt     b2.txt     c2.txt     d2.txt     e2.txt
a3.txt     b3.txt     c3.txt     d3.txt     e3.txt
a4.txt     b4.txt     c4.txt     d4.txt     e4.txt
a5.txt     b5.txt     c5.txt     d5.txt     e5.txt
a6.txt     b6.txt     c6.txt     d6.txt     e6.txt
a7.txt     b7.txt     c7.txt     d7.txt     e7.txt
a8.txt     b8.txt     c8.txt     d8.txt     e8.txt
a9.txt     b9.txt     c9.txt     d9.txt     e9.txt



2017年3月12日

シェルスクリプトでループ処理をするには?(while文)

while文は、条件式が満たされている間、do~doneの処理を繰り返します。

while 条件式
do
  処理
done

次の例では、変数iをループ変数とし、iが10以下の間ループ処理をします。

#!/bin/bash
i=1
while [ $i -le 10 ]
do
  echo $i
  i=$((i+1))
done

下から2行目で算術式展開を使って変数iの値をインクリメントしています。これを実行すると、次のようになります。

$ bash whiletest.sh
1
2
3
4
5
6
7
8
9
10

もう一つ、例を見ておきましょう。次のシェルスクリプトは、ファイルsample.txtを1行ずつ読み込み、読み込んだ行を変数lineに代入してループを回します。doneの後に入力リダイレクトでファイルを指定している点に注意してください。

#!/bin/bash
while read line
do
  echo $line
done < sample.txt



2017年3月11日

シェルスクリプトでif文を使うには?

条件判定の定番if文。もちろんBashでも使えます。基本的な構文は次のとおりです。

if 条件式
  then
    条件式が真の場合の処理
  else
    条件式が偽の場合の処理
fi

インデントは不要ですが、読みやすくするために入れた方がよいでしょう。末尾を「fi」で締めるのをお忘れなく。条件式にはtestコマンド([ ])がよく使われます。

例を見ておきましょう。ログイン時の初期化ファイル~/.profileを見てみます。

if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

-fはファイルの存在判定です。ホームディレクトリに「.bashrc」ファイルがあれば(ファイルの存在が真ならば)、「.」コマンド(sourceコマンド)を使って.bashrcファイルの処理を実行します。

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

これも~/.profileに登場するif文です。-dはディレクトリの存在判定です。ホームディレクトリに「bin」ディレクトリがあれば、PATH変数に「$HOME/bin」を追加します。



2017年3月10日

telnetを利用するには?(telnetコマンド)

telnetコマンドを利用するには、telnetパッケージをインストールします。

$ sudo apt install telnet

使い方は、次のとおりです。

【書式】telnet 接続先ホスト [ポート番号]

次の例では、192.168.1.10のホストにtelnetで接続しログインを試みます。接続先サーバーではもちろんtelnetサービスが稼働している必要があります。

$ telnet 192.168.1.10

現在では、telnetによるログインサービスが実施されていることはほとんどないでしょう。通信が暗号化されないなど、セキュリティ的に危険だからです。しかし、サーバーの動作確認などに使われていることがあります。Webサーバーに接続して直接HTTPメソッドを実行したり、メールサーバーに接続してSMTPやPOPを使ったりすることができます。次の例では、192.168.1.10のWebサーバー(80番ポート)に接続し、GETメソッドを実行しています。

$ telnet 192.168.1.10 80
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
GET /index.html HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 7 Mar 2017 10:55:54 GMT
Server: Apache
Last-Modified: Tue, 14 Jan 2014 09:41:51 GMT

(省略)



2017年3月9日

シェルスクリプトで対話的にデータを入力するには?(readコマンド)

readコマンドを使うと、シェルスクリプト内で対話的にデータを取り込むことができます。

【書式】read [-p "メッセージ"] 変数名

次のようなシェルスクリプトyourname.shを用意します。

#!/bin/bash
read -p "Your Name? : " name
echo "Hello ${name}!"

実行してみます。入力した文字列は変数nameに格納されます。

$ bash yourname.sh
Your Name? : Nakajima
Hello Nakajima!



2017年3月8日

シェルスクリプト内で引数を利用するには?

シェルスクリプトを実行する際に引数を指定し、シェルスクリプト内で使うことができると便利です。シェルスクリプトの引数は、位置パラメータという特殊な変数に格納されます。

位置パラメータ説明
$1 1番目の引数
$2 2番目の引数(以下$3、$4...と続く)
$# 指定された引数の数
$@ すべての引数(スペース区切り)

簡単なシェルスクリプトで確認してみましょう。argstest.shというシェルスクリプトを用意します。

#!/bin/bash
echo '$1 = '$1
echo '$2 = '$2
echo '$3 = '$3
echo '$# = '$#
echo '$@ = '$@

実行してみます。

$ source argstest.sh foo bar
$1 = foo
$2 = bar
$3 =
$# = 2
$@ = foo bar

引数は2つしか指定しなかったので、3番目の引数を示す$3には何も入っていないのが分かります。


2017年3月7日

シングルクォートとダブルクォートの違いは?

Bashでは、シングルクォート(')とダブルクォート(")は区別されています。どちらもクォーテーション内を文字列として扱う記号ですが、文字列内の特殊記号(メタキャラクタ)の扱いが異なります。

例えば、Bashで文字列の頭に「$」を付けると変数への参照として扱われますが、シングルクォート内では「$」記号として扱われます。

$ echo "$USER"
north
$ echo '$USER'
$USER

文字列内でダブルクォートを使うためには、特殊記号としての意味を打ち消すため、バックスラッシュ記号(\)を付ける必要があります(エスケープシーケンス)。

$ echo "echo \"Hello, world.\""
echo "Hello, world."

一方、シングルクォート内では、ダブルクォート記号もそのまま使えます。

$ echo 'echo "Hello, world."'
echo "Hello, world."

簡単に言えば、引用符内の文字をすべて文字列として扱いたい時にはシングルクォートを使うようにするとよいでしょう。

2017年3月6日

端末上でストップウォッチを使うには(timeコマンド)

コマンドの実行時間を計測するtimeコマンドを使うと、簡単なストップウォッチを用意できます。次のコマンドを実行した瞬間にストップウォッチがスタートします。

$ time read -s

Enterキーを押すと、カウントが終了します。

$ time read -s

real    0m4.384s
user    0m0.000s
sys     0m0.000s



2017年3月5日

ファイルの内容をクリアするには?

ファイルを削除するのではなく、ファイルの内容を消してしまうには、次のようにするとよいでしょう。

$ > samplefile

ファイルサイズは0になります。

$ ls -l samplefile
-rw-r--r-- 1 north north 0  3月 3 19:30 samplefile



2017年3月4日

rar形式のファイルを解凍するには?(unrarコマンド)

ファイルの拡張子が「.rar」のファイルを解凍するには、あらかじめunrarコマンドをインストールしておく必要があります。

$ sudo apt install unrar

次の例では、sample.rarファイルを解凍します。「e」コマンドでカレントディレクトリに解凍されます。

$ unrar e sample.rar


2017年3月3日

ファイル名で検索するには?(findコマンド)

ファイルを名前で検索するには、findコマンドを使います。

【書式】find [検索ディレクトリ] -name ファイル名

検索ディレクトリには、検索を開始するトップディレクトリを指定します(省略するとカレントディレクトリ)。ファイル名は「"*.txt"」のようにワイルドカードを使って指定できます。その際は「"」でくくってください。次の例では、カレントディレクトリ以下から、ファイル名の末尾が「.c」のファイルを検索します。

$ find -name "*.c"

findコマンドは、ファイルだけではなくディレクトリも検索します(Linuxではディレクトリもファイルの一種です)。次の例では、ファイル名またはディレクトリ名の一部に「image」があるファイルやディレクトリを検索します。

$ find -name "*image*"
./Data/image.png
./images
./images2
./images3
./images4
./images5
./www/blue/images

検索対象をファイルだけに限定するには「-type f」を指定します(ディレクトリなら「-type d」)。

$ find -name "*image*" -type f
./Data/image.png

findコマンドはとても多機能なコマンドです。まずは基本的な使い方を覚えるとよいでしょう。



2017年3月2日

エディタを使わずにファイルを作成するには?(catコマンド)

catコマンドは標準入力から文字列(テキストストリーム)を受け取ります。これを利用して、

【書式】cat > ファイル名

という形で、複数行のテキストファイルを生成できます。入力を終えるには[Ctrl]+[D]キーを押します。ちょっとしたシェルスクリプトなどを作成するのに便利です。

$ cat > testfile.sh
echo -n "Who are you? "
read username
echo "Hello, $username!"

ファイルの内容を確認してみます。

$ cat testfile
echo -n "Who are you? "
read username
echo "Hello, $username!"

なお、ヒアドキュメントという入力リダイレクトを使う方法もよく紹介されていますが、変数が展開されてしまう点に注意が必要です。次の例を見てください。

$ cat > testfile << EOF
> echo $PATH
> $(date)
> EOF
$ cat testfile
echo /home/north/.nvm/versions/node/v7.4.0/bin:/home/north/.rbenv/shims:/home/north/.rbenv/bin
:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/go/bin
2017年  3月 2日 水曜日 19:05:00 DST

指定した文字列(ここではEOF)を入力するまで続けて入力できますが、変数やコマンドが展開されてしまっています。最初に挙げた方法であれば、変数は展開されず、そのままファイルに書き出せます。

$ cat > testfile
echo $PATH
$(date)
$ cat testfile
echo $PATH
$(date)



2017年3月1日

ファイル作成時のデフォルトパーミッションを設定するには?(umaskコマンド)

ファイルやディレクトリを作成したときにデフォルトで設定されるパーミッションは、umask値で決まります。umask値とは「0022」といった数値です。ファイルであれば「666」から、ディレクトリであれば「777」からumask値を引いた値がデフォルトパーミッション(数値)になります。umask値が「0022」であれば、ファイルは「666-0022」=「644(rw-r--r--)」、ディレクトリは「777-0022」=「755(rwxr-xr-x)」となります。

$ touch testfile
$ mkdir testdir
$ ls -l
合計 0
drwxr-xr-x 2 north north 0  2月 23 21:47 testdir
-rw-r--r-- 1 north north 0  2月 23 21:47 testfile

現在のumask値は、umaskコマンドを実行すると表示されます。

$ umask
0022

umask値の設定は、~/.bashrcファイルで行います。このファイルに、次のような設定を記述しておきましょう。変更は、次回ログイン時から適用されます。

umask=0022



2017年2月28日

テキストファイルを分割するには?(splitコマンド)

splitコマンドを実行すると、ファイルを任意の行単位で分割できます。例えば、1万行あるsamplefileがあるとします。

$ wc -l samplefile
10000 samplefile

このファイルを1000行ごとに分割するには、次のようにします。

$ split -1000 samplefile
$ ls
samplefile  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

分割したファイル名はアルファベットの連番が付けられるのですが、ちょっとわかりにくいですね。「samplefile.aa」「samplefile.ab」のように分割するには、次のようにします。

$ split -1000 samplefile samplefile.

確認してみます。

$ ls
samplefile     samplefile.ab  samplefile.ad  samplefile.af  samplefile.ah  samplefile.aj
samplefile.aa  samplefile.ac  samplefile.ae  samplefile.ag  samplefile.ai

ファイルごとの行数も確認してみます。

$ wc -l *
10000 samplefile
 1000 samplefile.aa
 1000 samplefile.ab
 1000 samplefile.ac
 1000 samplefile.ad
 1000 samplefile.ae
 1000 samplefile.af
 1000 samplefile.ag
 1000 samplefile.ah
 1000 samplefile.ai
 1000 samplefile.aj
20000 合計

なお、分割したファイルを結合するには、catコマンドを使います。

$ cat samplefile.* > samplefile





2017年2月27日

ファイルを圧縮するには?(gzip/bzip2/xzコマンド)

Linuxでは、いくつかの圧縮形式が使われています。圧縮形式は「.gz」「.bz2」「.xz」といった拡張子で区別できるようになっています。圧縮形式ごとにコマンドが異なります。「.gz」はgzipコマンドを使った圧縮、「.bz2」はbzip2コマンドを使った圧縮、「.xz」はxzコマンドを使った圧縮で、一般的に後者ほど圧縮率が高くなります。

ファイルを圧縮するには、ファイルを指定してコマンドを実行するだけです。次の例では、sampleファイルを圧縮し、sample.gzファイルを作成します。

$ gzip sample

すると、圧縮ファイルsample.gzが作成されます。注意したいのは、元のファイルが削除されてしまう点です。圧縮前のファイルも残したい場合は、圧縮結果を標準出力へ出力する-cオプションを使い、圧縮ファイル名をリダイレクトで指定してください。

$ gzip -c sample > sample.gz

他のコマンドも使い方は同様です。

なお、これらのコマンドでディレクトリの圧縮はできません。tarコマンドを使ってディレクトリのアーカイブを作成する必要があります。



2017年2月26日

空のファイルを作成するには?(touchコマンド)

サイズが0の空ファイルを作成するには、touchコマンドを使います。次の例では、空のファイルemptyfileを作成します。

$ touch emptyfile

引数に指定したファイルが存在しないと、サイズが0のファイルを作成します。すでにファイルが存在すると、そのファイルのタイムスタンプを現在に書き換えます。


2017年2月25日

行頭にTabを挿入するには?(sedコマンド)

テキストファイルのすべての行頭にTabを挿入したいときがあります。sedコマンドを使うと、一息でTabを挿入できます。例えば、以下のようなファイルがあるとします。

$ cat testfile
978  2017/02/09 10:07:34 which g++
979  2017/02/09 10:10:08 cd code
980  2017/02/09 10:10:09 ls
981  2017/02/09 10:10:14 vi hello.cpp
982  2017/02/09 10:11:11 rm hello

Tabを1つ挿入するには、次のようにします。実行結果は画面上に出力されます。

$ sed 's/^/\t/' testfile
        978  2017/02/09 10:07:34 which g++
        979  2017/02/09 10:10:08 cd code
        980  2017/02/09 10:10:09 ls
        981  2017/02/09 10:10:14 vi hello.cpp
        982  2017/02/09 10:11:11 rm hello

「s/A/B/」で、文字列Aを文字列Bに置換します。Aの部分「^」は行頭を表す正規表現です。Bの部分「\t」はTabを示す記号です。「\t\t」とすると、Tabが2つ挿入されます。

$ sed 's/^/\t\t/' testfile
                978  2017/02/09 10:07:34 which g++
                979  2017/02/09 10:10:08 cd code
                980  2017/02/09 10:10:09 ls
                981  2017/02/09 10:10:14 vi hello.cpp
                982  2017/02/09 10:11:11 rm hello

実行結果を保存するには、リダイレクトで新たなファイルに保存するか、sedコマンド実行時に-iオプションを指定して元ファイルを上書きします。

$ sed -i 's/^/\t/' testfile



2017年2月24日

Windowsのフォルダとホームディレクトリ内のディレクトリとを同期させるには?(unisonコマンド)

unisonコマンドを使うと、2つのディレクトリを同期させることができます。unisonコマンドはaptコマンドでインストールできます。

$ sudo apt install unison

例えば筆者は、BoWのホームディレクトリ内にあるDropboxディレクトリ(/home/ユーザー名/Dropbox)と、WindowsのDropbox内にあるubuntuフォルダとを同期するようにしています。次のコマンドを実行すると、フォルダが同期されます。

$ unison -perms 0 $HOME/Dropbox /mnt/c/Users/north/Dropbox/ubuntu -batch

「-perms 0」はパーミッションの同期を解除するオプションです(Windowsとはファイルシステムが異なるため)。~/.bashrcファイルにこのコマンドを記述しておくと、BoWを起動したときに自動的に同期してくれます。



2017年2月23日

変数の値を変数名として使いたい場合は?(evalコマンド)

例えば、変数distroにはディストリビューション名が、変数ubuntuにはバージョン番号が格納されているとします。

$ echo $distro
ubuntu
$ echo $ubuntu
16.04

このとき、変数distroに入っている値(ubuntu)を変数名とする変数($ubuntu)の内容を参照したい場合は、どうすればよいでしょうか。以下の例はうまくいきません。

$ echo "$$distro"
2distro

変数「$$」は、実行したコマンド(この場合はechoコマンド)自身のPIDを表す特殊変数です。都合良く「$ $distro」→「$ ubuntu」のような順で展開してくれません。

このような時は、引数を評価するevalコマンドを使います。

$ eval echo '$'$distro
16.04

最初の$記号が単一引用符で囲まれているのは、evalコマンドの実行時に展開されてしまわないようにするためです。evalコマンド実行後は「echo $ubuntu」のようになり、変数ubuntuの内容が表示されます。



2017年2月22日

変数を読み取り専用にするには?(readonlyコマンド)

Bashのreadonlyコマンドを使うと、変数を読み取り専用にして、定数のように利用できます。

$ readonly var=Ubuntu
$ echo $var
Ubuntu

変数に値を代入しようとすると、エラーになります。

$ var=CentOS
bash: var: 読み取り専用の変数です


2017年2月21日

コマンドの出力に行番号を付けて表示するには?(nlコマンド)

nlコマンドは、行番号を付けて出力するコマンドです。引数にテキストファイルを指定すると、その各行に行番号を付けて出力しますが、他のコマンドの出力に行番号を付けることもできます。次の例では、lsコマンドの出力に行番号を付けて表示しています。

$ ls
argtest.sh   for1.sh      getfiles.sh  month.sh     randomtest.sh  while2.sh
backup.sh    for2.sh      iftest.sh    monthday.sh  stars.sh       while3.sh
fizzbuzz.sh  forlikec.sh  lshome.sh    ppap.sh      while1.sh
$ ls | nl
     1  argtest.sh
     2  backup.sh
     3  fizzbuzz.sh
     4  for1.sh
     5  for2.sh
     6  forlikec.sh
     7  getfiles.sh
     8  iftest.sh
     9  lshome.sh
    10  month.sh
    11  monthday.sh
    12  ppap.sh
    13  randomtest.sh
    14  stars.sh
    15  while1.sh
    16  while2.sh
    17  while3.sh



2017年2月20日

変数の内容を表示するには?(echoコマンド)

変数の内容は、echoコマンドを使って調べることができます。echoコマンドは、引数に指定された文字列を表示するコマンドです。次の例では、変数PATHの内容を表示します。

$ echo $PATH
/home/north/.nvm/versions/node/v7.4.0/bin:/home/north/.rbenv/shims:/home/north/.rbenv/bin:
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/go/bin

変数の内容を参照するには、$記号を使います。

【書式】$変数名
【書式】${変数名}

下の書式を使った方が、変数名の範囲を明確にすることができます。



2017年2月19日

ファイルをサイズ順にソートして表示するには?(lsコマンド)

lsコマンドで-Sオプションを使うと、ファイルサイズの大きい順に並べて表示します。

$ ls -lS images
合計 364
-rw-rw-rw- 1 north north 56023  7月  8  2016 11.jpg
-rw-rw-rw- 1 north north 43260  7月  8  2016 10.jpg
-rw-rw-rw- 1 north north 37299  7月 20  2016 1.jpg
-rw-rw-rw- 1 north north 30826  7月  8  2016 9.jpg
-rw-rw-rw- 1 north north 29440  7月  8  2016 3.jpg
-rw-rw-rw- 1 north north 28248  7月  8  2016 2.jpg
-rw-rw-rw- 1 north north 27570  7月  8  2016 4.jpg
-rw-rw-rw- 1 north north 23911  7月  8  2016 5.jpg
-rw-rw-rw- 1 north north 21657  7月  8  2016 6.jpg
-rw-rw-rw- 1 north north 19573  7月  8  2016 12.jpg
-rw-rw-rw- 1 north north 16951  7月  8  2016 7.jpg
-rw-rw-rw- 1 north north 15800  7月  8  2016 8.jpg

ファイルサイズの小さい順にソートして表示したい場合は、-rオプションを追加してください。

$ ls -lSr images
合計 364
-rw-rw-rw- 1 north north 15800  7月  8  2016 8.jpg
-rw-rw-rw- 1 north north 16951  7月  8  2016 7.jpg
-rw-rw-rw- 1 north north 19573  7月  8  2016 12.jpg
-rw-rw-rw- 1 north north 21657  7月  8  2016 6.jpg
-rw-rw-rw- 1 north north 23911  7月  8  2016 5.jpg
-rw-rw-rw- 1 north north 27570  7月  8  2016 4.jpg
-rw-rw-rw- 1 north north 28248  7月  8  2016 2.jpg
-rw-rw-rw- 1 north north 29440  7月  8  2016 3.jpg
-rw-rw-rw- 1 north north 30826  7月  8  2016 9.jpg
-rw-rw-rw- 1 north north 37299  7月 20  2016 1.jpg
-rw-rw-rw- 1 north north 43260  7月  8  2016 10.jpg
-rw-rw-rw- 1 north north 56023  7月  8  2016 11.jpg



2017年2月18日

指定した秒数だけ待機させるには?(sleepコマンド)

sleepコマンドは、指定した秒数だけ「何も実行しない」コマンドです。シェルスクリプト内などで、しばらく処理を停止させたいときに使います。

【書式】sleep 秒数

次の例では、dateコマンドを実行後、10秒間待ってから、再度dateコマンドを実行します。

$ date; sleep 10; date
2017年  2月  5日 日曜日 06:01:19 DST
2017年  2月  5日 日曜日 06:01:29 DST

デフォルトは秒数ですが、「10m」とすると10分、「10h」とすると10時間の指定になります。

2017年2月17日

ファイルの属性を保持したままコピーするには?(cpコマンド)

ファイルをコピーすると、ファイルの所有者やタイムスタンプ、アクセス権などは、元のファイルとは違ったものに変えられます。つまり、所有者はcpコマンドを実行したユーザー、アクセス権はumask値に応じたものに、タイムスタンプはコピーした日時に変わります。

$ ls -l /etc/hosts
-rw-r--r-- 1 root root 227 12月 25 18:59 /etc/hosts
$ cp /etc/hosts .
$ ls -l hosts
-rw-r--r-- 1 north north 227  2月 16 21:31 hosts

-pオプションを付けると、可能な範囲で元のファイルの属性を保持したままコピーします。

$ cp -p /etc/hosts .
$ ls -l hosts
-rw-r--r-- 1 north north 227 12月 25 18:59 hosts

日時が元のファイルのままになっているのが分かります。所有者や所有グループは、元のファイルはrootユーザーなので、一般ユーザーに置き換わってしまいます。所有者等も変えたくない場合は、rootユーザーで(sudoコマンドを使って)コピーしてください。



2017年2月16日

ファイルを拡張子ごとに並べて表示するには?(lsコマンド)

lsコマンドでファイルを表示するとき、-Xオプションを使うと、拡張子ごとにグルーピングして表示されます。

$ ls
a0.dat  a1.txt  a3.dat  a4.txt  b0.dat  b1.txt  b3.dat  b4.txt
a0.txt  a2.dat  a3.txt  a5.dat  b0.txt  b2.dat  b3.txt  b5.dat
a1.dat  a2.txt  a4.dat  a5.txt  b1.dat  b2.txt  b4.dat  b5.txt
$ ls -X
a0.dat  a3.dat  b0.dat  b3.dat  a0.txt  a3.txt  b0.txt  b3.txt
a1.dat  a4.dat  b1.dat  b4.dat  a1.txt  a4.txt  b1.txt  b4.txt
a2.dat  a5.dat  b2.dat  b5.dat  a2.txt  a5.txt  b2.txt  b5.txt

なお、Linux上では「拡張子」はファイル名の一部として扱われます。ファイルとアプリケーションを結びつけるような役割は持っていません。-Xオプションでは、「.」以後を拡張子とみなします。


2017年2月15日

隠しファイルのみを表示するには?(lsコマンド)

Linuxでは、「.」で始まる名前のファイルやディレクトリは、デフォルトでは表示されません。ドットで始まる名前のファイルやディレクトリ(ドットファイル)は、ソフトウェアの設定ファイルとして使われています。デフォルトでは非表示とすることで、うっかり設定を消してしまうような事態を避けられます。

それらのファイルだけを表示するには、少し工夫が必要です。例えば、lsコマンドを実行しても、通常は無視されます(-aまたは-Aオプションを付けると表示されます)。また「ls .*」のようにすると、すべてのファイルが表示されてしまいます。

ドットファイルのみを表示するには、以下のようにするとよいでしょう。

$ ls -d .*
.              .bash_logout  .conkyrc        .gvfs     .nvm             .scala_history  .vim
..             .bashrc       .dbus           .lesshst  .profile         .ssh            .viminfo
.Eterm         .cache        .dbus-keyrings  .local    .python_history  .texmf-var      .vimrc
.ICEauthority  .config       .fonts          .nanorc   .rbenv           .thumbnails     .w3m
.bash_history  .conky        .gitconfig      .nanorc~  .ruby-version    .unison

なお、「.」はカレントディレクトリ、「..」は親ディレクトリを表します。


2017年2月14日

ファイルの詳細情報を表示するには?(lsコマンド、statコマンド)

ファイルの所有者やパーミッション、ファイルサイズ、タイムスタンプなどを確認するには、lsコマンドに-lオプションを付けて実行します。

$ ls -l bg.jpg
-rwxr-xr-x 1 north north 293910 12月  3 21:45 bg.jpg

より詳細な情報がほしいときは、statコマンドを使います。

$ stat bg.jpg
  File: `bg.jpg'
  Size: 293910          Blocks: 576        IO Block: 4096   通常ファイル
Device: 10h/16d Inode: 5910974511101484  Links: 1
Access: (0755/-rwxr-xr-x)  Uid: ( 1000/   north)   Gid: ( 1000/   north)
Access: 2016-12-03 21:45:40.663409000 +0900
Modify: 2016-12-03 21:45:40.664411900 +0900
Change: 2016-12-03 21:45:40.664411900 +0900
 Birth: -



2017年2月13日

文字コードを変換するには?(nkfコマンド)

文字コードを変換するには、nkfコマンドを使います。インストールされていない場合は、次のコマンドでインストールします。

$ sudo apt install nkf

【書式】nkf オプション [ファイル名]

入力側の文字コードを大文字オプションで、出力側の文字コードを小文字オプションで指定します。引数には、変換元のファイル名を指定します。

オプション説明
-S、-s Shift-JISで入力/出力する
-E、-e EUC-JPで入力/出力する
-W、-w UTF-8で入力/出力する
-J、-j ISO-2022-JPで入力/出力する
-Lw 改行コードをCR+LFに変換する(Windows)
-Lu 改行コードをLFに変換する(Unix系)
-Lm 改行コードをCR+LFに変換する(macOS)
--overwrite 変換した結果を元のファイルに書き込む
--guest 文字コードと改行コードを判別する
-g 文字コードを判別する

次の例では、Shift-JISのファイルmemo1.txtを、UTF-8に変換してmemo_utf8.txtとして書き込みます。リダイレクトを使わないと、変換結果は画面上(標準出力)に出力されます。

$ nkf -Sw memo1.txt > memo_utf8.txt

次の例では、EUC-JPのファイルmemo2.txtを、UTF-8に変換し、改行コードもLFのみ(Linux)にします。変換した結果でmemo2.txtを上書きします。

$ nkf -Ew -Lu --overwrite memo2.txt


2017年2月12日

ファイルの文字コードを判別するには?(nkfコマンド)

ファイルの文字コードや改行コードを判別するには、nkfコマンドを使います。インストールされていない場合は、次のコマンドでインストールします。

$ sudo apt install nkf

「--guess」オプションを付けて実行すると、指定したファイルの文字コードと改行コードを判定してくれます。

$ nkf --guess memo1.txt
Shift_JIS (CRLF)
$ nkf --guess memo2.txt
EUC-JP (CRLF)
$ nkf --guess memo3.txt
UTF-8 (CRLF)

改行コードは、Windowsでは「CRLF」、Linuxでは「LF」、macOSでは「CR」がデフォルトです。


2017年2月11日

直前のコマンドの引数を再利用するには?

lsコマンドで確認してからchmodコマンドを実行するときなど、同じ引数を連続して入力することがあります。

$ ls -l data/tmp/batch/01/sample.log
-rw-r--r-- 1 north north 0  2月 11 22:30 data/tmp/batch/01/sample.log
$ chmod 600 data/tmp/batch/01/sample.log

同じ引数をもう一度入力したくはないものです。そんなときは[Esc]+[.]と入力すると、直前のコマンドラインの引数がカーソル位置に挿入されます。あるいは、直前の引数が格納されている変数「$_」を使ってもよいでしょう。

$ ls -l data/tmp/batch/01/sample.log
-rw-r--r-- 1 north north 0  2月 11 22:30 data/tmp/batch/01/sample.log
north@WIN10:~$ chmod 600 $_

「!#」を使う方が一般的かもしれません。こちらは実行されるコマンドが表示されます。

$ ls -l data/tmp/batch/01/sample.log
-rw-r--r-- 1 north north 0  2月 11 22:30 data/tmp/batch/01/sample.log
$ chmod 600 !$
chmod 600 data/tmp/batch/01/sample.log

コマンドを置き換える方法もあります。引数はそのままに、コマンドを置き換えて直前のコマンドラインを実行したい場合は、以下の書式を使って文字列1を文字列2に置換しましょう。

【書式】^文字列1^文字列2

次の例では、「ls -l」を「chmod 600」に置き換えて実行しています。

$ ls -l data/tmp/batch/01/sample.log
-rw-r--r-- 1 north north 0  2月 11 22:30 data/tmp/batch/01/sample.log
$ ^ls -l^chmod 600
chmod 600 data/tmp/batch/01/sample.log


2017年2月10日

サードパーティのリポジトリを追加するには?(add-apt-repositoryコマンド)

サードパーティのリポジトリを追加するには、add-apt-repositoryコマンドを使います。例えば、LibeOfficeのリポジトリを追加するには、次のコマンドを実行します。

$ sudo add-apt-repository ppa:libreoffice/ppa

PPA(Personal Package Archives)は非公式のリポジトリです。公式には扱われていないソフトウェアを利用するのに便利ですが、安易に導入するとシステムの安定性やセキュリティを損なうことも考えられるので、その点に注意して運用すべきです。PPAを登録すると、apt upgradeでアップグレードの対象となるため、システム全体で一括してアップデートをかけることができる便利さがあります。

追加されたリポジトリの情報は、/etc/apt/sources.listファイル、または/etc/apt/sources.list.dディレクトリ以下に格納されます。

リポジトリを削除するには、ppa-purgeコマンドをインストールして利用するとよいでしょう。

$ sudo apt install ppa-purge

次の例では、ppa:libreoffice/ppaを削除しています。

$ sudo ppa-purge ppa:libreoffice/ppa


2017年2月9日

PDFファイルをテキストファイルにするには?(pdftotextコマンド)

PDFファイルのテキストデータを抽出してテキストファイルにするには、pdftotextコマンドを使います。pdftextコマンドは、poppler-utilsパッケージに含まれていますので、次のようにしてインストールします。

$ sudo apt install poppler-utils

sample.pdfファイルからテキストを抽出してsample.txtファイルを生成するには、次のコマンドを実行します。

$ pdftotext sample.pdf sample.txt


2017年2月8日

リダイレクトによる上書きを禁止するには?(setコマンド)

リダイレクト「>」を使ってコマンドの出力をファイルに書き込むと、ファイルの内容は上書きされてしまいます。上書きを禁止するには、Bash上で以下のコマンドを実行します。

$ set -o noclobber

これによりBashのオプションが変更されます。永続的に設定しておくには、~/.bashrcファイルに上記のコマンドを記述しておきます。これで、既存のファイルを上書きしようとすると警告が出るようになります。

$ ls > ls.log
bash: ls.log: 存在するファイルを上書きできません

この設定を解除するには、以下のコマンドを実行します。

$ set +o noclobber


2017年2月7日

PDFファイルを分割したり結合したりするには?(pdftkコマンド)

pdftkコマンドを使うと、Adobe Acrobatなどの製品を使わなくても、PDFファイルから一部のページを切り出したり、複数のPDFファイルをまとめて1つのPDFファイルにしたりすることができます。pdftkコマンドは次のようにしてインストールします。

$ sudo apt install pdftk

PDFファイルsample.pdfの10~15ページだけを抜き出すには、次のようにします。

$ pdftk sample.pdf cat 10-15 output sample_10-15.pdf

PDFファイルを1ページごとに分割するには、次のようにします。「pg_0001.pdf」「pg_0002.pdf」のように連番が付けられ分割されます。

$ pdftk sample.pdf burst

sample1.pdf、sample2.pdf、sample3.pdfファイルを結合してsample.pdfファイルを作成するには、次のようにします。

$ pdftk sample1.pdf sample2.pdf sample3.pdf output sample.pdf

PDFを回転させることもできます。次の例では、sample.pdfファイルの1ページ目から最後のページまで(1-end)すべて180度回転(south)させ、sample_south.pdfとして保存(output sample_south.pdf)しています。

$ pdftk sample.pdf cat 1-endsouth output sample_south.pdf

回転には以下の指定が可能です。

説明
north0度
east90度
south180度
west270度
left-90度
right+90度
down+180度




2017年2月6日

C++を使うには?

GCC(GNU Compiler Collection)がインストールされていれば、C++のコンパイルも可能です。以前はg++パッケージをインストールしていましたが、その必要はありません。

以下のようなサンプルプログラム hello.cpp を作成し、コンパイルします。

#include 

int main() {
    std::cout << "Hello,C++!\n";
    return 0;
}

コンパイルにはg++コマンドを使います。-Wallは、警告をすべて表示するオプションです。-oオプションで、生成する実行ファイル名を指定します。

$ g++ -Wall -o hello hello.cpp

実行します。

$ ./hello
Hello, C++!


2017年2月5日

SSHで公開鍵を使ってログインできるように設定するには?(ssh-keygenコマンド)

SSHのユーザー認証には、パスワードを使った認証と、公開鍵を使った認証があります。公開鍵認証は、公開鍵と秘密鍵のペアを使って認証をする方法で、パスワードが第三者に知られてしまったとしても、秘密鍵が奪われない限りログインされません。秘密鍵自身もパスフレーズによって保護されているため、パスワード認証よりも安全性は高くなります。

以前の記事( SSHで接続するには? )では、他のホストの秘密鍵を持ってきて公開鍵認証をする方法を説明しました。ここでは、独自の公開鍵ペアを作成し、その上で他のホストに公開鍵を登録する方法を説明します。

まず、公開鍵と秘密鍵の鍵ペアを作成します。いくつかの種類から選べますが、ここでは一般的なRSA鍵で作成します。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/north/.ssh/id_rsa):  ← Enter
Enter passphrase (empty for no passphrase):  ← 任意のパスフレーズを入力
Enter same passphrase again:  ← パスフレーズを再入力
Your identification has been saved in /home/north/.ssh/id_rsa.
Your public key has been saved in /home/north/.ssh/id_rsa.pub.
The key fingerprint is:
e1:7a:f4:fc:f2:de:79:58:4b:e3:6e:d6:d4:36:57:13 north@WIN10
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|               E |
|        .       .|
|       . .     ..|
|        S       +|
|       o o     +*|
|      . . o   o=*|
|       .  .. ..*o|
|           ++ *o |
+-----------------+

パスフレーズには、スペースを含むこともできますので、できるだけ長い(破られにくい)パスフレーズを設定しましょう。作成された公開鍵は「.ssh/id_rsa.pub」、秘密鍵は「.ssh/id_rsa」です。

次に、接続先へ公開鍵を登録します。接続先のIPアドレスが192.168.1.24の場合、以下のコマンドを実行します。-iオプションで秘密鍵を指定します。IPアドレスの末尾の「:」を忘れないでください。

$ ssh-copy-id -i .ssh/id_rsa 192.168.1.24:
The authenticity of host '192.168.1.24 (192.168.1.24)' can't be established.
ECDSA key fingerprint is 08:31:56:0c:2c:0e:2b:75:35:97:f3:7f:26:4c:d5:f9.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
north@192.168.1.24's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.1.24'"
and check to make sure that only the key(s) you wanted were added.

さっそく試してみましょう。sshコマンドで接続して、次のように秘密鍵のパスフレーズを尋ねられたら成功です。パスフレーズを入力したら、ログインできるはずです。

$ ssh 192.168.1.24
Enter passphrase for key '/home/north/.ssh/id_rsa':




2017年2月4日

Swiftをインストールするには?

SwiftはAppleの開発したプログラミング言語ですが、mac専用ではありません。オープンソース化され、Ubuntuでも動きます。

まず、必要なソフトウェアをインストールしておきます。

$ sudo apt install clang libicu-dev

公式サイトのダウンロードページから、Ubuntu 14.04用のパッケージをダウンロードします。

$ wget https://swift.org/builds/swift-3.0.2-release/ubuntu1404/swift-3.0.2-RELEASE/swift-3.0.2-RELEASE-ubuntu14.04.tar.gz

展開します。

$ tar xf swift-3.0.2-RELEASE-ubuntu14.04.tar.gz

ディレクトリ名が長いので「Swift」ディレクトリにリネームしておきます。

$ mv swift-3.0.2-RELEASE-ubuntu14.04 Swift

パスを追加します。必要に応じて、.bashrcにも追記してください。

$ export PATH=$PATH:$HOME/Swift/usr/bin

バージョンを確認します。

$ swift --version
Swift version 3.0.2 (swift-3.0.2-RELEASE)
Target: x86_64-unknown-linux-gnu

次のようなサンプルプログラムを作成し、helloworld.swiftとして保存します。

println("Hello, world.")

実行してみます。

$ swift helloswift.swift
Hello, world.

今度はコンパイル後に実行します。コンパイルにはswiftcコマンドを使います。

$ swiftc helloswift.swift
$ ./helloswift
Hello, world.

BoWでは、対話環境(REPL)が使えなかったり、iPhoneアプリを開発したりはできませんが、プログラミング言語としてのSwiftの学習には使えるでしょう。



2017年2月3日

拡張子をまとめて変更するには?(renameコマンド)

複数のファイルの拡張子をまとめて変更するには、renameコマンドを使います。次の例では、拡張子「.log」をすべて「.txt」に変更します。

$ rename 's/\.log$/\.txt/' *.log

「's/A/B/'」の部分は、「文字列Aを文字列Bに置き換える」という意味です。文字列パターンは正規表現で記します。「\.log$」は「文字列の末尾が".log"」という意味です。引数には、拡張子を変更するファイルがマッチするファイル名パターンを記します。


2017年2月2日

環境変数を設定するには?

Bashの環境変数は、exportコマンドで設定します。環境変数VAR1に値fooを、VAR2に値barを設定するには、次のコマンドを実行します。変数名に「$」を付けないこと、「=」の前後にスペースを入れてはならないことに注意してください。

$ export VAR1=foo VAR2=bar

ただし、この設定はBashを終了すると失われてしまいます。永続的に設定するには、~/.bashrcファイルに追記します。

export VAR1=foo VAR2=bar

以下のように記述してもかまいません。

VAR1=foo
VAR2=bar
export VAR1 VAR2



2017年2月1日

PHP 7.0をインストールするには?

PHP 5のインストールは以前に紹介しました。

PHP 5をインストールするには?

PHP 7.0は、標準のリポジトリには入っていません。そこで、サードパーティのリポジトリを利用することになります。以下のコマンドでリポジトリを追加します。

$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update

すでにPHP 5をインストールしている場合は、以下のコマンドで削除します。

$ sudo apt remove php5 php5-fpm

PHP 7.0をインストールします。

$ sudo apt install php7.0


2017年1月31日

複雑なパスワードを自動生成するには?(pwgenコマンド)

pwgenコマンドを使うと、複雑なパスワードをランダムに自動生成することができます。次のコマンドでインストールできます。

$ sudo apt install pwgen

デフォルトでは8桁の英数字からなるパスワードが大量に生成されます。

$ pwgen
ue0looGh luxai2Oa YeeX9atu chia5Aes om4Iurar aeNg3OhW kohLaiW7 shoo8Quu
pheY3si1 xo8ohThe Maeg5ugh vohk3aeB choh1loL jei9AX8e aeCah7ie Goo9tea1
Roongah9 Reiy8tie iex6Ei0b theeCae5 ootho1Ah koh1Aigh leek5Pei vi5Cho8m
Ei0iuKah ouV7keec ojaiW7ia Wi6Aikai sahKae4i Thahbie3 Ahph9ieg aeH0Uk6e
Ahw0eNg4 uaJae4io AaJ6eita Uzie9aht aechoh5E EoTae9ca Vo8fu0sa goi8Doox
(...)

引数には、パスワードの文字数と、生成するパスワード数を指定できます。次の例では、12文字のパスワードを3つ生成します。

$ pwgen 12 3
EiSae8Aib8uv ohnguquoaG8t ir6geeghi7Ei

文字列に記号も入れたい場合は、-yオプションを指定します。

$ pwgen -y 12 3
eep3Eev8Pee, uumahye8iC>a Aiweeh;ef0vo

他にも、-0(数字を使わない)、-A(大文字を使わない)、-c(最低1文字は大文字を入れる)といったオプションや、l(小文字のL)と1(数字)、大文字のOと数字の0のような紛らわしい文字を排除する-Bオプションも必要に応じて使うとよいでしょう。


2017年1月30日

新刊紹介:『ちょっとだけLinuxにさわってみたい人のための Bash on Ubuntu on Windows入門』

Bash on Ubuntu on Windowsの本を書きました。Linuxコマンドに不慣れな方でも、基本コマンドからLinuxの作法、シェルスクリプトの基礎までスムーズに学べるようになっています。




以下、目次↓

インストールされているパッケージをすべて表示するには?(apt listコマンド)

BoW(Ubuntu)にインストールされているパッケージをすべて表示するには、次のコマンドを実行します。

$ apt list --installed
(一部省略)
accountsservice/xenial-updates,now 0.6.40-2ubuntu11.3 i386 [インストール済み]
acl/xenial,now 2.2.52-3 i386 [インストール済み]
acpid/xenial,now 1:2.0.26-1ubuntu2 i386 [インストール済み]
adduser/xenial,now 3.113+nmu3ubuntu4 all [インストール済み]
adwaita-icon-theme/xenial-updates,now 3.18.0-2ubuntu3.1 all [インストール済み、自動]
apache2/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 i386 [インストール済み]
apache2-bin/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 i386 [インストール済み]
apache2-data/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 all [インストール済み]
apache2-utils/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 i386 [インストール済み]
(....)

やや見づらいので、パッケージ名とバージョンだけ表示するには、次のようにするとよいでしょう。

$ dpkg -l | awk '{ print $2 $3 }'
(一部省略)
accountsservice0.6.40-2ubuntu11.3
acl2.2.52-3
acpid1:2.0.26-1ubuntu2
adduser3.113+nmu3ubuntu4
adwaita-icon-theme3.18.0-2ubuntu3.1
apache22.4.18-2ubuntu3.1
apache2-bin2.4.18-2ubuntu3.1
apache2-data2.4.18-2ubuntu3.1
apache2-utils2.4.18-2ubuntu3.1
(....)


2017年1月29日

D言語を利用するには?

gdcパッケージをインストールすれば、D言語(バージョン2)をコンパイルすることができます。

$ sudo apt install gdc

次のようなサンプルhellod.dを作成します。

import std.stdio;

void sayHello(string message)
{
  writeln("Hello, ", message");
}
void main()
{
  sayHello("D Language!");
}

gdcコマンドでコンパイルします。出力ファイル名は-oオプションで指定します。

$ gdc -o hellod hellod.d

実行してみます。

$ ./hellod
Hello, D Language!


2017年1月28日

Bashで使えるショートカット

Bash上では以下の表のようなショートカットが利用できます。

操作説明
Ctrl+A行頭にカーソルを移動する
Ctrl+E行末にカーソルを移動する
Ctrl+F1文字右にカーソルを移動する
Ctrl+B1文字左にカーソルを移動する
Ctrl+Pコマンド履歴を上方向に移動する
Ctrl+Nコマンド履歴を下方向に移動する
Ctrl+Hカーソルの左を1文字削除する(Backspace)
Ctrl+Dカーソルの右を1文字削除する(Delete)
Ctrl+Uカーソル位置から行頭まで削除する
Ctrl+Kカーソル位置から行末まで削除する

他にもいろいろありますが、とりあえずこれらを使えるようになれば、ずいぶんと快適にコマンドライン操作ができるようになると思います。


2017年1月27日

コマンド履歴に日時も保存するには?

通常、コマンド履歴には、そのコマンドを実行した日時は記録されていません。Bashの設定を変更すると、日時も記録できるようになります。ホームディレクトリにある「.bashrc」ファイルの末尾に、以下のような設定を追記してください。

HISTTIMEFORMAT='%Y/%m/%d %H:%M:%S '

次のコマンドで設定を反映させます。

$ source .bashrc

コマンド履歴を見ると、次のようになっています。コマンド履歴はhistoryコマンドで表示できます。

  757  2017/01/25 20:18:45 vi .bashrc
  758  2017/01/25 20:19:04 source .bashrc
  759  2017/01/25 20:19:14 ls
  760  2017/01/25 20:19:17 history

2017年1月26日

Windowsディレクトリへのショートカットを作成するには?

BoWでは、/mnt/cディレクトリを通してWindowsのファイルシステムへアクセスできるようになっています。

BoWのホームディレクトリ直下に、Windowsのマイドキュメントなどへのショートカットがあると便利です。Windowsのショートカットに相当するのは、Linuxのシンボリックリンクです。シンボリックリンクを作成するには、ln -sコマンドを使います。例えば、Windowsのユーザー名がnorthであれば、マイドキュメントのパスは /mnt/c/Users/north/Documentsとなります。ここへのショートカットを任意の名前、例えば「Documents」で作成します。

$ ln -s /mnt/c/Users/north/Documents ~/Documents

うまくできているか確認します。

$ ls -ld Documents
lrwxrwxrwx 1 north north 28  1月 25 17:55 Documents -> /mnt/c/Users/north/Documents

これでBoWの「/home/north/Documents」にアクセスすると、Windowsのマイドキュメントにアクセスできます。


2017年1月25日

Scalaをインストールするには?

Scalaをインストールするには、scalaパッケージをインストールします。

$ sudo apt install scala

バージョンを確認してみます。

$ scala -version
Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL

以下のようなHelloWorld.scalaファイルを作成します。

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello, world!")
  }
}

コンパイルはscalacコマンドです。

$ scalac HelloWorld.scala

実行します。

$ scala HelloWorld
Hello, world!

対話的に使うこともできます。終了するには「:quit」または「:q」を入力します。

$ scala
Welcome to Scala version 2.9.2 (OpenJDK 64-Bit Server VM, Java 1.7.0_121).
Type in expressions to have them evaluated.
Type :help for more information.

scala>


2017年1月24日

パスワードを変更するには?(passwdコマンド)

パスワードを変更するには、passwdコマンドを実行します。


文字が乱れていますが、まず現在のパスワードを入力します。次に、変更したいパスワードを2回入力します。


これでパスワードが変更されました。

2017年1月23日

PHP5をインストールするには?

BoWのベースとなるUbuntu 14.04 LTSでは、採用されているPHPのバージョンは5系(5.5.9)です。ここでは、PHPの勉強をしたい、ちょっとPHPの動作を確認したいなど、手軽にPHPを取り扱えるよう、コマンドライン版のPHP5を利用する手順を紹介します。次のコマンドでインストールします。

$ sudo apt install php5-cli

バージョンを確認します。

$ php -v
PHP 5.5.9-1ubuntu4.20 (cli) (built: Oct  3 2016 13:00:37)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

PHPスクリプトを用意し、phpコマンドの引数に指定すれば、実行した結果が出力されます。例えば、次のようなsample.phpを用意します。

<?php
  echo "Hello, PHP5!\n";
?>

実行してみます。

$ php sample.php
Hello, PHP5!

引数で直接PHPコードを試すには、-rオプションを指定します。PHPコードはシングルクォーテーション「'」で囲みましょう。また、「<?php」タグは書かなくてもOKです。

$ php -r 'echo "Hello, PHP5!\n";'
Hello, PHP5!

ビルトインWebサーバーを使うには、PHPスクリプト(例えばindex.php)を作成し、そのディレクトリで次のように指定します。

$ php -S localhost:8080 index.php

Webブラウザで「http://localhost:8080/」を指定し、ローカルホストの8080番ポートに接続すると、PHPスクリプトの実行結果が表示されるはずです。ポート番号は、1024番以上を指定してください。Ctrl+Cキーを押すとビルトインWebサーバーは停止します。




2017年1月22日

Vimの操作を練習するには?

VimはUnix系OSで広く使われている老舗のテキストエディタの一つです。慣れれば快適に使えますが、初心者にとっては敷居が高く感じられるようです。練習すれば必ず便利に扱えるようになるのですが、何も課題がないと練習もなかなか進まないでしょう。そんなときは、Vimのチュートリアルvimtutorを使ってみてください。ただし、標準のBoWでは日本語の表示が乱れてしまうため、Cmderなどのターミナルエミュレータで利用することをおすすめします。

日本語が文字化けしない環境でBoWを使うには?(Cmder編)

vimtutorコマンドを実行すると、次のような画面になります。



あとは画面の指示に従ってください。日本語が乱れてしまう箇所がありますが、数十分でひととおりの基本機能を体験することができるでしょう。もちろん、1回やっただけでは身につかないので、何度か繰り返しやってみることをおすすめします。

2017年1月21日

日本語が文字化けしない環境でBoWを使うには?(Cmder編)

現在のBash on Ubuntu on Windowsでは、日本語表示が乱れてしまうことが多々あることに加え、日本語入力もままなりません。手っ取り早い解決策としては、何らかのターミナルエミュレータをインストールし、そこからBoWを使う方法です。Windows用のターミナルエミュレータにはいろいろありますが、ここではCmderを使ってみます。

まず、CmderのWebサイトからCmderをダウンロードします。Cmderには、gitやUnixコマンドが含まれたfullバージョンと、それらが含まれていないminiバージョンがあります。UnixコマンドはBoWを使えばいいので、ここではminiバージョンをダウンロードし、展開します。

CmderのWebサイト


Cmder.exeを実行すると、次のような画面が開きますので、「Unblock and Continue」をクリックして進めます。



Cmderが起動します。ここで「bash」を実行するとBoWが使えるようになります。



Cmder起動時にBoWの環境にするには、ウィンドウ上部のタイトルバー上で右クリックし、コンテキストメニューの上から3番目にある「Settings...」をクリックします。次に、「Startup」の右下にある「Tasks」をクリックします。

「+」を押して新規のタスクを追加し、それぞれの欄にパラメータを入力します。




① bash::ubuntu(分かりやすい名前でかまいません)
② /icon"%USERPROFILE%\AppData\Local\lxss\bash.ico"
③ %windir%\system32\bash.exe ~ -cur_console:p

「Startup」をクリックし、「Specified named task」に、先ほど設定した「bash::ubuntu」を選びます。


「Main」をクリックし、「Monospace」のチェックを外します。最後に「Save settings」をクリックして設定を保存します。



これで次回Cmder起動時よりデフォルトでBoWが利用できます。

参考:Running Windows 10 Ubuntu Bash in Cmder



2017年1月20日

コマンドの実体を確認するには?

Linuxのコマンドには、いくつかの種類があります。

  • シェルに組み込まれたコマンドや関数=内部コマンド
  • 実行ファイル(バイナリファイル、シェルスクリプト)=外部コマンド
  • エイリアス

実行するコマンドがどれなのかを確認するには、typeコマンドを使います。それぞれの例として、echoコマンド、findコマンド、llコマンドを調べてみると、次のように表示されます。


2017年1月19日

コマンドの実行結果をすべて記録しておくには?

コマンドの実行結果をファイルに保存するには、リダイレクト(>や>>)を使います。しかし、これはコマンドラインが保存されません。どんなコマンドを実行したのかも含めて、すべての記録をファイルに保存するには、scriptコマンドを使います。

【書式】 script 保存ファイル名

次の例では、testlog.txtファイルに保存するようにして実行しています。記録を終了するには[Ctrl]+[D]を押します。


testlog.txtの内容はこのようになっています。


2017年1月18日

最新のNode.jsをインストールするには?

APTでNode.jsをインストールすると、バージョンは4.0.0となります。最新版はバージョン7.4.0、LTSは6.9.4です。公式サイトからバイナリをダウンロードしてもよいですが、nvm(Node Version Manager)を使った方がよいでしょう。

まずnvmをインストールします。gitコマンドが使えない場合は、先にgitパッケージをインストールしてください。

$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
$ exec bash

これでnvmが使えるようになったはずです。利用可能なNode.jsのバージョンを確認します。

$ nvm ls-remote
        v0.1.14
        v0.1.15
        v0.1.16
        v0.1.17
        v0.1.18
(...)
         v6.9.3  ESC[0;37m (LTS: Boron)ESC[0m
         v6.9.4  ESC[1;32m (Latest LTS: Boron)ESC[0m
         v7.0.0
         v7.1.0
         v7.2.0
         v7.2.1
         v7.3.0
         v7.4.0

最新の安定版はv7.4.0です。これをインストールしましょう。

$ nvm install 7.4.0

以下の設定を ~/.bashrc ファイルに追記しておきます。

source $HOME/.nvm/nvm.sh


2017年1月17日

コマンドの実行にかかる時間を計るには?

timeコマンドを使うと、コマンドの実行にかかる時間を計ることができます。次の例では、hostコマンドの実行時間を計測しています。mは分、sは秒を表します。

$ time host 8.8.8.8
8.8.8.8.in-addr.arpa domain name pointer google-public-dns-a.google.com.

real    0m1.100s
user    0m0.016s
sys     0m0.141s

realコマンドの起動から処理の終了までにかかった実時間
userユーザーモードでのCPU処理時間(プログラムの処理時間)
sysカーネルモードでのCPU処理時間(OSの処理時間)

2017年1月16日

ホスト名からIPアドレスを調べるには?

ホスト名からIPアドレスを調べたり、IPアドレスからホスト名を調べたりするには、hostコマンドを使います。hostコマンドはDNSサーバーに問い合わせ、その情報を表示します。

$ host www.google.com
www.google.com has address 172.217.25.196
www.google.com has IPv6 address 2404:6800:4004:81a::2004

このように、引数にホスト名を指定すると、そのIPアドレスが表示されます。引数にIPアドレスを指定すると、ホスト名が表示されます。

$ host 8.8.8.8
8.8.8.8.in-addr.arpa domain name pointer google-public-dns-a.google.com.

Windowsと同様に、nslookupコマンドを使ってもかまいません。

$ nslookup www.google.com
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   www.google.com
Address: 172.217.26.36

$ nslookup 8.8.8.8
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
8.8.8.8.in-addr.arpa    name = google-public-dns-a.google.com.

Authoritative answers can be found from:

2017年1月15日

コマンド履歴を利用するには?

Bashでは、カーソルキー「↑」「↓」でコマンド履歴をたどることができます。「↑」を押すごとに履歴をさかのぼって表示します。「↓」

historyコマンドを実行すると、保存されているコマンド履歴の一覧が表示されます。左側は履歴番号です。

$ history
    1  ls
    2  ls /bin
    3  ls /tmp
    4  ls /lib
    5  ls -l /etc/services

(...)

  204  which ruby
  205  which xeyes
  206  which perl
  207  which python
  208  sudo apt-get update
  209  sudo vi /etc/hosts
  210  sudo apt-get upgrade
  211  vi .bashrc
  212  sudo apt install openbox obconf menu obmenu
  213  ls /etc/dbus-1/
  214  sudo vi /etc/dbus-1/session.conf
  215  sudo apt install xfce4-panel
  216  xeyes
  217  sudo apt install x11-apps

「!履歴番号」のように指定すると、指定した履歴番号のコマンドが再実行されます。

$ !204
which ruby
/home/north/.rbenv/shims/ruby

[Ctrl]+[R]を押すと、インクリメンタルサーチモードになります。文字を入力すると、入力した文字列にマッチするコマンド履歴が表示されます。文字を入力すればするほど絞り込める、というわけです。

(reverse-i-search)`apt ': apt show golang|less

インクリメンタルサーチ中に[Ctrl]+[R]を押すと、同じ文字列の候補を順に表示していきます。目的のコマンドが見つかったら、Enterキーで再実行できます。カーソルキー等で編集してから実行もできます。


2017年1月14日

SSHで接続するには?

ネットワーク経由で他のサーバーに接続してログインする際には、一般的にSSHが使われています。たいていのサーバーでは、SSHサーバーが稼働しているでしょう。SSHでログインするには、sshコマンドを使います。

【書式】 ssh [ユーザー名@]ホスト名またはIPアドレス

次の例では、northユーザーとして192.168.1.33のホストにSSHで接続します。この場合、接続先サーバーにnorthユーザーアカウントがあり、パスワードも知っている必要があります。

$ ssh north@192.168.1.33

ユーザー名を省略すると、現在作業中のユーザー名で接続します。

サーバーによっては、パスワードによるSSHログインを禁止し、公開鍵認証によるログインのみ許可しているでしょう。秘密鍵を配布されているのであれば、秘密鍵を~/.sshディレクトリ以下に配置します。秘密鍵ファイルが「id_rsa」であるなら、次のコマンドを実行します。

$ mv id_rsa ~/.ssh

これで公開鍵認証でログインできるはずです。接続すると、次のように秘密鍵のパスフレーズを尋ねられます。接続先パスワードではない点に注意してください。

$ ssh 192.168.1.33
Enter passphrase for key '/home/north/.ssh/id_rsa':  ← パスフレーズを入力

2017年1月13日

「ホストの名前解決ができません」エラーが表示されないようにするには?

sudoコマンドを使おうとすると、最初は次のようなエラーが表示されるはずです。



sudoコマンド自体は問題なく実行できますが、毎回表示されるのは厄介です。このエラーメッセージが表示されないようにするには、/etc/hostsファイルにホスト名(コンピューター名)を追記します。例えば、nanoエディタで/etc/hostsファイルを開くには、次のコマンドを実行します。パスワードは自分のパスワードを入力してください。

$ sudo nano /etc/hosts

1行目は次のようになっているはずです。



この末尾にホスト名(この例ではWIN10)を追記します。ホスト名は、BoWのウィンドウに「ユーザー名@ホスト名: ~」のように表示されています。



変更を保存して終了するには、
(1) [Ctrl]キーを押しながら[X]キー
(2) 「Y」キー
(3) Enterキー
の順番に押します。これでエラーメッセージが表示されなくなるはずです。

なお、名前解決とは、ホスト名からIPアドレスを求める(名前から値を求める)ことです。/etc/hostsファイルは、管理者がホスト名とIPアドレスの対応を記述するシステム設定ファイルです。「127.0.0.1」は自分自身を表すIPアドレスです。

2017年1月12日

C#をコンパイルできるようにするには?

C#でプログラミングしたければWindowsのVisual Studioを使うのがもっとも手軽でしょう。しかし、Linux上に.NET Framework互換の環境を実現するMonoをインストールすることで、BoWでもC#をコンパイルできるようになります。

Monoパッケージには、Ubuntuが配布する公式パッケージと、Monoの開発を進めるXamarinが配布するパッケージがあります。Xamarinパッケージの方が新しいバージョンを使えるので、ここではその方法を示します。

まず、MonoのWebサイトに掲載されている以下のコマンドを実行し、リポジトリを追加します。

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
$ echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
$ sudo apt-get update

これで準備ができましたので、mono-completeパッケージをインストールします。

$ sudo apt-get install mono-complete

ちゃんとインストールされたかどうか、確認します。

$ mono --version
Mono JIT compiler version 4.6.2 (Stable 4.6.2.16/ac9e222 Tue Jan  3 11:48:26 UTC 2017)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug
        LLVM:          supported, not enabled.
        GC:            sgen

C#のソースコードをコンパイルするには、mcsコマンドを使います。

$ mcs hello.cs

生成された.exeファイルは、以下のコマンドで実行できます。

$ mono hello.exe
Hello World!

2017年1月11日

root権限を利用するには?

Linuxにおける管理者権限を持つユーザーはrootユーザーです(WindowsのAdministrator)。しかし、Ubuntuではrootユーザーに切り替えて作業をすることを推奨していません。どうしても管理者権限が必要なときは、sudoコマンドを使います。

【書式】 sudo 管理者コマンド

sudoコマンド実行時にパスワードを求められます。このとき入力するのは自分自身の(現在作業中のユーザーの)パスワードです。rootユーザーのパスワードではありません(そもそもrootユーザーのパスワードは設定されていないはずです)。パスワードが正しければ、指定した管理者コマンドが実行されます。一度sudoコマンドを実行すると、5分間はパスワードの入力なしでsudoコマンドを使うことができます。

このようにしているのは、rootユーザーで作業を続けることによるリスクを低減するためです。ほんの少しの操作ミスでも、rootユーザーではシステムに致命的なダメージを与えてしまう恐れがあります。

なお、sudoコマンドに-iオプション(もしくは-sオプション)を指定すると、rootユーザーに切り替えることができますが、あくまでも自己責任で行ってください。

2017年1月10日

Ctrl+Dでログアウトしないようにするには?

BashはCtrl+Dキーが押されるとログアウトします。BoWを使っている場合、うっかりCtrl+Dを押してしまうとBoWのウィンドウが閉じて終了してしまいます。これを禁止するには、次のコマンドを実行します。

$ export IGNOREEOF=1

毎回コマンドを実行するのが面倒な場合は、~/.bashrcファイルの末尾に書いておくとよいでしょう。

環境変数IGNOREEOFに数値を指定すると、その回数だけCtrl+Dが無視されます。「IGNOREEOF=1」では、1度だけCtrl+Dを押すと、次のようなメッセージが表示されます。


もう一度Ctrl+Dを押すとログアウトします。

2017年1月9日

フォントを変更するには?

デフォルトのフォントは「MSゴシック」、サイズは「12」になっています。文字が細かくて読みにくい場合などは、フォントを変更してみてください。

フォントを変更するには、まずタイトルバーの上で右クリックし、表示されるコンテキストメニューから「プロパティ」を選択してください。

「フォント」タブを選択すると、フォントの種類とサイズを選択できます。


2017年1月8日

ウィンドウのサイズを変更するには?

ウィンドウは、デフォルトでは幅80文字、高さ25行の設定になっています。この文字数を変更すると、ウィンドウのサイズが変わります。タイトルバーの上で右クリックし、表示されるコンテキストメニューから「プロパティ」を選択してください。


「レイアウト」タブを選択すると、中ほどに「ウィンドウのサイズ」で幅と高さを入力できるようになっています。


なお「画面バッファーのサイズ」は、スクロールアウトしたエリアをどのくらい保存しておくかの設定です。「ウィンドウの位置」で数値を指定すると、スクリーン上の位置を固定することもできます。


2017年1月7日

Java 8(OpenJDK)をインストールするには?

BoWのベースとなっているUbuntu 14.04では、OpenJDKのバージョンは7です。8をインストールするには、まず以下のとおりリポジトリを追加します。

$ sudo apt-add-repository ppa:openjdk-r/ppa
$ sudo apt update

これでリポジトリが追加され、aptコマンドでopenjdk-8-jdkをインストールすることができます。

$ sudo apt-get install openjdk-8-jdk

バージョンを確認します。

$ javac -version
javac 1.8.0_111

なお、Java 8ではなくJava 7がいい、という場合は、リポジトリを追加する必要はありません。次のコマンドでインストールできます。

$ sudo apt-get install openjdk-7-jdk

2017年1月6日

直前の作業ディレクトリに戻るには?

cdコマンドでディレクトリを移動しながら作業をしていると、直前までいたディレクトリに戻りたくなる場合があります。そのようなときは、

$ cd -

とすると、直前のディレクトリへ移動します。2つのディレクトリを行ったり来たりしながら作業をする際に便利です。

2017年1月5日

Chipmunk Basicを使うには?

Chipmunk Basicは、macOS、Linux、Windowsで利用できるBASICインタープリターです。Ubuntuのパッケージはありませんので、公式サイトからダウンロードし展開します。ダウンロードするのは「Chipmunk Basic for Linux/x86-64」です。

あらかじめディレクトリを作っておきましょう。

$ mkdir Basic
$ cd Basic

ファイルをダウンロードし、展開します。

$ wget http://www.nicholson.com/rhn/files/cbas367b5-linux-x86_64.zip
$ unzip cbas367b5-linux-x86_64.zip

展開されるファイルは以下の4つです。

ファイル名説明
READMEReadme
basic実行ファイル(インタープリター)
basic.man.txtドキュメント
man/basic.1manページ用ファイル

対話的に利用するには

かつてのBASICと同じように、BASICインタープリターを対話的に利用するには、実行ファイルbasicを実行します。

$ ./basic
Chipmunk BASIC 367b5
>

行番号からはじまるプログラムを入力したり、「new」「list」「save」「load」といったコマンドを実行したりで来ます。終了するには「quit」です。


BASICプログラムを指定して実行するには

BASICのプログラムファイルを指定して実行するには、引数にファイル(~.bas)を指定します。

$ ./basic sample.bas
Hello, BASIC!
>


2017年1月4日

Go最新版をインストールするには?

BoWでAPTを使ってGo言語(golang)をインストールすると、デフォルトではバージョン1.2.1がインストールされます。最新版を使いたい時は、公式サイト( https://golang.org/dl/ )からLinux版をダウンロードしてきてインストールしましょう。

$ wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz

解凍し/usr/localディレクトリ以下に展開します。

$ sudo tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz

.bashrcファイルに次のコマンドを追加します。

export PATH=$PATH:/usr/local/go/bin

Bashを再起動するか「exec bash」コマンドを実行し、設定を反映させます。最後に、バージョンを確認してみます。

$ go version
go version go1.7.4 linux/amd64

2017年1月3日

Ruby最新版をインストールするには?

BoWでAPTを使ってRubyをインストールすると、デフォルトではバージョン1.9.3がインストールされます。

$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

ここでは、最新のバージョン2.3.3をインストールする方法を紹介します。

まず、Gitがインストールされていないのであれば、インストールします。

$ sudo apt install git

次に、rbenvをインストールします。rbenv(RuBy ENVironment)はRubyのバージョン・環境管理ツールです。複数のバージョンを切り替えて利用することができます。

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

設定を「.bashrc」ファイルに追加します。

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

ruby-buildをインストールします。ruby-buildは、さまざまなバージョンのRubyをコンパイルし、インストールするツールです(rbenvのプラグインです)。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

コンパイルに必要なツールをインストールします。少し時間がかかります。

$ sudo apt install gcc build-essential libssl-dev libreadline-dev zlib1g-dev

ここでBashをいったん終了して再起動するか、次のコマンドを実行して設定を反映させます。

$ exec bash

いよいよRubyバージョン2.3.3をインストールします。かなり時間がかかります。

$ rbenv install -v 2.3.3

インストールできたら、rubyコマンドでバージョン2.3.3が使えるよう切り替えます。

$ rbenv local 2.3.3

Rubyのバージョンを確認してみます。

$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]

2017年1月2日

画面をクリアするには?

「Ctrl」+「L」を押すと、端末の画面がクリアされ、プロンプトは1行目に表示されます。「clear」コマンドを実行しても同様です。シェルスクリプト内ではclearコマンドを使うとよいでしょう。

$ clear

2017年1月1日

インターネット上のファイルを取得するには?

インターネット上のファイルをダウンロードして取得するには、いくつかの方法があります。一つめはwgetコマンドを使う方法です。wgetコマンドがインストールされていない場合は、wgetパッケージをインストールします。

$ sudo apt install wget -y

wgetコマンドは、ダウンロードしたいファイルのURLを引数に指定して実行します。例えば、「http://lpic.jp/command.html」をダウンロードしたいのであれば、次のコマンドを実行します。

$ wget http://lpic.jp/command.html

二つめは、curlコマンドを使う方法です。curlコマンドがインストールされていない場合は、curlパッケージをインストールします。

$ sudo apt install curl -y

ダウンロードしたいファイルを引数に指定し、-oオプションで出力ファイルを指定します(出力ファイルを指定しないと標準出力に出力されます)。

$ curl -o command.html http://lpic.jp/command.html

リダイレクトを使ってもかまいません。

$ curl http://lpic.jp/command.html > command.html