いづいづブログ

アジャイルコーチになりたい札幌在住SEです。アジャイル札幌スタッフ&ScrumFestSapporo実行委員。Like:パクチー/激辛/牡蠣/猫/初期仏教

Linuxゲリラ戦記を読んでLinuxのことを知る #26〜#37

Linuxゲリラ戦記を読んで理解する。長い・・・。

26.touchコマンド

空のファイルの作成する。

$ touch ファイル名

ファイル名にすでに存在するファイル名を指定した場合は、ファイルの日付だけを更新することができる。

おまけ ワイルドカード

例えばlsコマンドを使うときにテキストファイル(拡張子が.text)だけを表示したいことがある。こういう場合「.text」の前のファイル名は何でもいい。 そういうときにはワイルドカードという特別は「*」を指定する。ワイルドカードは、OSのシェルが提供する特殊な意味を持つアスタリスクである。

以下のように指定してlsコマンドを実行すると、拡張子が.textのファイルだけを表示できる。

$ ls *.text

27.テキストエディタ「nano」

LinuxCUI環境でも使えるテキストエディタ

Linuxで有名なテキストエディタといえばEmacsVimだが、この2つはコマンド操作を使いこなす必要があり、必ずしも初心者向けではない。 nanoはそういう意味で初心者向けのテキストエディタ。OSに最初からインストールされていることが多い。

※基本的にVimを覚えるつもりなのでサラッと触って終了。

28.alias

コマンドに別名をつけること。

今回はbash*1の設定ファイルである「.bashrc」に記述を追加して、cdコマンドのエイリアス「osakana」を作成してみる。

.bashrcは隠しファイルなのでls -lで実行するとファイルを確認できる。ちなみに隠しファイルを作成するにはファイル名の先頭に.をつければいいだけ。

まず.bashrcファイルを開く。

$vim .bashrc

「cdコマンドのエイリアスosakanaを指定」する設定を追加

alias osakana=‘cd'

実行結果。「osakana」と打ってディレクトリを移動できるようになった。

f:id:izumii-19:20181118222259p:plain:w300

ちなみにスペースとか入れたらだめらしい。最初alias osakana = ‘cd'のように「=」 の間にスペース入れたら認識されなかった。

29.chmodコマンド

ファイルのアクセス権限を変更するコマンド。 あるユーザーに対しそのファイルを「読める」「書き込める」「実行できる」の3種類の権利を許可または拒否の設定をする。

一番左

f:id:izumii-19:20181118223302p:plain

一番左 説明
- ファイル
d ディレクト

rwx

f:id:izumii-19:20181118223548p:plain

rwx 説明
r ファイルを見る権利
w ファイルに書き込む権利
x ファイルを実行する権利

人やグループごとの設定

f:id:izumii-19:20181118224209p:plain

人やグループ設定 説明
左3つ そのファイルを所有している人の権限
真ん中3つ そのファイルを所有しているグループの権限
右3つ その他の人の権限

所有者とグループ

f:id:izumii-19:20181118224425p:plain

左側がそのファイルの所有者名。右側がそのファイルの所有グループ名

アクセス権限の変更

以下のように記述する。

$ chmod u+x ファイル名(またはディレクトリ名)

オプションの意味は以下の通り。

オプション 説明
u そのファイルの所有者
g そのファイルの所有グループ
o その他の人
w 書き込み権限
r 読み取り権限
x 実行権限
+ 権限を与える
- 権限を拒否する

30.echoコマンドとexprコマンド

echoコマンド

ここ参照。

exprコマンド

シェル画面上で計算をするためのコマンド。 足し算(+) 引き算(-)掛け算( *)*2割り算(/)余りを求める(%)の計算ができる。 数字と記号の間にはスペースを入れること。

$ expr 3 + 5

31.シェルスクリプトでプログラミング

シェルスクリプトとは、複数のコマンドを組み合わせてひとつのプログラムにしたもの。 シェルスクリプトのファイルを作成する場合、拡張子は「.sh」にする。

1から10まで表示するシェルスクリプト

#!/bin/sh

a=1
while [ $a -le 10 ]
do
        echo $a
        a=`expr $a + 1`
done
  • 1行目 シバン。 シェルスクリプトを書くときのおまじない。
  • 3行目 変数a に1を代入。*3
  • 4行目 「変数aが10よりも小さいか等しい間、do 〜 done間の処理を繰り返す」という条件が書かれている。
  • 5行目 変数aの中身を標準出力(画面)に出力。
  • 6行目 右辺「変数aに1を加算」した結果を左辺の変数aに代入。ここで変数aの値は2になる。 計算結果を変数に代入する場合``(バッククォート)で囲む。

6行目まで終わると4行目のwhile文に戻り、whileの条件に当てはまる間do 〜 doneの処理を繰り返す。

do 〜 doneのループ処理のように、処理を入れ子にする場合Tabでインデントを下げること(可読性の向上)。

実行結果

f:id:izumii-19:20181118232335p:plain:w300

Ctrl+C

無限ループしたらCtrl+Cで強制終了。

32.diffコマンド

2つのファイルを比較するコマンド。

$ diff moto.txt count.sh

33.lwp-requestコマンドと/dev/null

lwp-requestコマンド

Webサーバにリクエストメッセージを送りその応答を表示する。

(と、ここでlwp-requestがインストールされていなかったので「libwww-perl」パッケージをインストールした。)

$ lwp-request http://www.garunimo.com/program/linux/sample/counter.php

実行結果。サーバーからHTMLが返されているのがわかる。

f:id:izumii-19:20181118233312p:plain

/dev/null

次に> /dev/nullを追加して実行する。

$ lwp-request http://www.garunimo.com/program/linux/sample/counter.php > /dev/null

実行結果には何も表示されない。

f:id:izumii-19:20181118233530p:plain

これはサーバーから返される実行結果をリダイレクトして/dev/nullに送り込んでいるためだ。

「>」がリダイレクト。パイプの仲間のようなもので、パイプ「|」はその結果を別のコマンドの入力として渡したいときに使用するのに対し、リダイレクト「>」はあるコマンドの出力結果を別のファイルに書き込むときに使用する。

今回の場合、リダイレクトで出力結果を書き込む先が「/dev/null」になっている。

この「/dev/null」はUNIXUnixオペレーティングシステム (OS) におけるスペシャルファイルの1つで、そこに書き込まれたデータを全て捨てて読み出してもどんなプロセスに対してもデータを返さない特別なファイル。ブラックホールのような存在。

つまり実行結果をリダイレクトでブラックホールに送り込んでいるため、lwp-requestコマンドは実行されているにもかかわらず画面には実行結果が表示されないのである。

34.nslookupコマンドとwhoisコマンドとifconfigコマンド

nslookupコマンド

DNSサーバーに問い合わせてホスト名からIPアドレスを取得する。または逆にIPアドレスからホスト名の取得も可能。 IPアドレスやホスト名を調べる他、DNSサーバが正常に動作しているのかを調べる際にも使用したりする。

$ nslookup IPアドレス(またはドメイン名)

f:id:izumii-19:20181118234955p:plain

whoisコマンド

whoisコマンドはドメイン名、またはIPアドレスからドメインの情報を取得する。

$ whois ドメイン名またはIPアドレス

f:id:izumii-19:20181119000020p:plain

ifconfigコマンド

(ifconfigコマンドの説明の前に)ifconfigを実行しようと思ったら入ってなかったので「net-tools」パッケージをインストール。

ところが、インストール後$ ifconfigを実行 しても「Command not found」と言われてしまう。なんでなんだ・・・。

ここで調べたところ、net-tools は/sbinの下にインストールされるが、そのパスが通っていないらしい。 試しに

$ /sbin/ifconfig

と打ったら実行できたのでPATHが通っていないことに間違いなさそう。パスの通し方は ここ参照。

インストールパスの確認方法はこれでいける。

$ dpkg -L net-tools | grep ifconfig

あらためてifconfigのコマンド。

$ ifconfig

f:id:izumii-19:20181118235553p:plain:w400

35.pingコマンドとtracerouteコマンド

pingは、ネットワーク疎通を確認したいホストに対してIPパケットを発行し、そのパケットが正しく届いて返答が行われるかを確認するためのコマンド

$ ping www.yahoo.co.jp

tracerouteは、あるホストから別のホストまでのネットワーク経路をリスト表示するコマンド。ここでいう経路とは、ホスト間を接続するルーターゲートウェイ)のこと。tracerouteにより、経路上にどのようなルーターが位置しているかを表示する。

$ traceroute www.yahoo.co.jp

主な用途としては、pingで相手ホストから正常な応答がなかった場合などに、ホスト自身や経路上のルーターのルーティング設定が正しいかどうかを確認するために用いられる。

順番的にはpingしてからtracerouteする感じ。

36.findコマンド、locateコマンド

findコマンド

$ find 検索を開始するディレクトリ -name ファイル名

locateコマンド

$ locate 検索キーワード

findコマンドでは直接ファイルやディレクトリを探す。

対して、locateコマンドは、あらかじめ検索しておいたファイルやディレクトリのデータベースを検索することで高速な検索を行うことができる。

37.設定ファイルをいじる

設定ファイルの変更は.bashrcファイルの変更のときにやったし、nanoを使用していないので割愛。

*1:Linuxディストリビューションが標準で採用しているシェル。

*2:掛け算の*にはエスケープ文字「\」をつかう。エスケープ文字は「この後に出てくる文字は特別な意味をもたない文字」ということを示す文字

*3:変数とはa=5のように値を入れる入れ物。CUI環境を一度閉じるとリセットされる。