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