入門者のLinux 11章 まとめ

 

奈佐原顕郎さん「入門者のLinux」より

 

コマンドの実体

・シェルの上で走るコマンドは多くの場合それぞれが独立したソフトウェアである
・1つのコマンドに対し、ディレクトリ・ツリーのどこかにその実体(プログラムを格納した実行可能ファイル)が一つ存在する(例外もある)

コマンドの実態を調べる
which ls (lsコマンドの実体がどこにあるか調べている)

実行可能ファイル

パーミッションに実行許可が与えられているファイル
・ほとんどのコマンドの実体は

「/bin」
「/user/bin」
「/sbin」
「/user/sbin」

の4つのどれかの中にある、コマンドと同名の実行可能ファイルである

Unixのコマンドには重要度というか立ち位置的なものがある

ほとんどのLinuxが共通して持っている基本的なコマンド
/bin」「/sbin」
ディストリビューションや設定や構成によって入れたり入れなかったり
「/user/bin」「/user/sbin」

・「bin」の前に「s」が付いているディレクトリにはシステム管理にまつわるコマンドが入る(たぶんsystemのs)

シェルもコマンド

・シェルはコンピュータの上の仕組みであり、シェル自体を動かすプログラムというかコマンドがある

SHELLという名前のシェル変数の内容を調べる
echo $SHELL

・シェル変数はコンピュータを立ち上げたときに自動的に作られる
・現在ユーザーが使っているシェルがなんなのかが記録されている

いろいろなシェル

・普段使っているシェルの実態は/bin/bashである
・「/bin/bash」は「bash(バッシュ)」と呼ばれる有名なシェル
bashはもともと「bourne shell」と呼ばれるシェルから派生して生まれた

Bourne
$ sh

bourne shellではコマンドの履歴機能が使えない

bashの方が使いやすいのでbashに戻りたい
$ exit

・他にzshtcshがある
tcshbashに劣らずポピュラーで特にLinux以外のUnixで使われる

困ること

・シェルが違うと使い方がちょっと違うことがある
・ネットで調べたコマンドがうまく走らないとか、ちょっと古めのUnixのテキストに書いてあることがうまく動かないとかの原因はシェルの違いであることが多い

シェルの組み込みコマンド

which cd

・なにもでてこない(cdコマンドを走らせるための実行可能ファイルが存在しない)
bashが自分の中にcdコマンドを持っている
・cdはbashというシェルの付属品である(シェルの組み込みコマンドである)
・1つのコマンドに1つの実行可能ファイルという原則の例外である

bashの組み込みコマンドを調べる
$ help
シェルで走るコマンドには2種類ある

・独立したコマンド(実行可能ファイルを持ったコマンド)
・シェルの付属品(組み込みコマンド)

特別なシェル変数

・シェルはユーザーの好みや要望に沿えるよう多様な設定ができる

環境変数

・シェル設定などに関する情報を格納している

使用しているシェルにどのようなシェル変数があるか調べる
set | less
今開いている端末のウインドウの横幅(文字数)
COLUMNS
ホームディレクトリの絶対パスを格納する環境変数
HOME
どの言語環境か
LANG

・個々のシェル変数・環境変数の内容を表示するときはechoコマンドを使う
・シェル変数・環境変数の中身を見るときは$という記号を頭につけて指定する

コマンドサーチパス

・コマンドの実態が入っている可能性が高いディレクトリに関する情報
・「PATH」という環境変数に格納されている

コマンドサーチパスの中身を見る
echo $PATH

・いくつかの絶対パスが:で分かち書きされる

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

シェルは6つのディレクトリの中を順番に探して実行可能ファイルを見つける

・「/usr/local/bin」と「/usr/local/sbin」はユーザーの特殊な要望に応えるためのコマンドを入れるところ
・コマンドを普遍的なもの(どんなLinuxにも入っているコマンド)から特殊なもの(用途に応じて入れたり入れなかったりするコマンド)に段階的に分類して、順に「/bin」「/usr/bin」「/usr/local/bin」に入れておくのがUnixの文化

シェルスクリプト

・複数のコマンドをテキストファイルにまとめて実行することができる

$ vi test.sh

・ファイル名「test.sh」の拡張子「.sh」は「sh」というシェルで実行されるシェルスクリプトであるというしるしで、これはそうしなければだめなことというより習慣である

作成したファイルに実行権限を与える
$ chmod +x test.sh
実行する
./test.sh

まとめ

Unixには徹底的に設定可能・カスタマイズ可能な範囲を広くし、それをユーザーの手の届くところに広げておくというポリシーがある

入門者のLinux 10章 まとめ

 

奈佐原顕郎さん「入門者のLinux」より

 

Unixで大切なこと

・情報はなるべくテキストファイルで管理する

ワープロテキストエディターの違い

テキストエディターは小さなワープロ的存在

・文書をいろんな風に飾れる(フォント変更・文字の大きさ変更・色変更・画像挿入など)
・余分な機能が多いため動作が遅く画面のスクロールが多いなど何かと面倒
・文書を単なる文字の集まりとして認識しそれを編集(文字を消したり追加したりする)ためだけのソフト
・テキストファイルを編集することだけに特化した道具

Unixの定番テキストエディタ

vi

Ubuntu Linuxで使いにくいvi(vim-tiny)
Ubuntu Linuxで使いやすいvi(vim

Ubuntu Linuxインストール直後はvim-tinyになっていることが多いのでvimをインストールする

sudo apt-get install vim
viの起動
vi 編集したいファイル名

・viに入った直後はコマンドモードにいる(テキストの一部を削除・コピペ・ファイル保存・viを終了などができる)
・viには挿入モードもある

挿入モード(文字入力できる)の入り方
キーボードのiを押す
挿入モードからコマンドモードへ
Escキー
ファイル保存
:w  + Enter
viの終了
:q + Enter
操作に行き詰まったとき
・Escキーを押してコマンドモードにもどる
・1文字削除は「x」
・1行削除は「dd」
・消しすぎた場合「u」で元に戻せる
・不要な部分を消し去ったら書き換えたいところまでカーソルを移動し「i」キーで挿入
echoとviのファイル作成における違い

・echo:作った後の修正や編集ができない

viをすすめるわけ

・どんなUnixにも入っているとてもよく枯れたソフト
CUIで動くしとても軽い
・巨大なファイルも編集できる
・汎用性が高い

入門者のLinux 9章 まとめ

 

奈佐原顕郎さん「入門者のLinux」より

awk

・テキストデータを加工したり処理したりする
プログラミング言語としての機能を備えており、シンプルで柔軟に出来ているのでワンライナーの部品として活躍する
・どんなコマンドでも標準出力にテキストデータを吐き出すコマンドならawkに流しこめる
・バグが出にくい

echo 100 200
応答 100 200

echo 100 200 | awk '{print $1}'
応答 100printはデータを表示するというawkが持つコマンド(あくまでawkというコマンドの中で実行されるコマンド)
・$1はawkの標準入力に流れ込んでくるデータの中の左から1番目の項目という意味
awkはデータの切れ目を空白文字(やタブ)で勝手に判断するので注意が必要

awkで計算もできる。計算が複雑になってきたら変数を使う

awkの中で複数のコマンドを順に実行するにはコマンド同士を;で分かち書きする
awkは流れてきたテキストデータをすべての行のそれぞれについて処理する(行ごとに処理を繰り返す)

・{}の前に条件判定を置くことができる

'$1==3{print}'
1項目めが3に等しかったら以下を実行せよ

入門者のLinux 8章 まとめ

奈佐原顕郎さん「入門者のLinux入門」より

 

ワンライナー

・シェルの上で1行のコマンドとして走る小さなプログラム
・いくつかのコマンドをパイプなどでつないで作る

シェル変数

・データを保存しておくための箱のようなもの(変数)
・値を代入できる

$ x=3
$echo $x
応答 3

・シェル変数の前に$を付けることでそのシェルの変数の中に入っている値という意味になる

・コマンドの結果も代入できる

$ d=`date`
$ echo $d
応答 2016129日以下略

繰り返しの処理

forループ

・ある1つのシェル変数にいろいろな値を代入しながらその都度同じ処理をする

for シェル変数名 in シェル変数に入れる値を列挙; do 繰り返したいコマンド; done

・doneはループで繰り返したいコマンドの終わりを意味する。doとdoneで挟まれた部分が繰り返される。

seq

for x in 1 2 3 4 5 6 7 8 9 10; do 繰り返したいコマンド; done

数がもっと増えるとこれでは大変→seqコマンドが使える
seq 1 10
応答
1
2
3
以下略

seqコマンドをforループの値の範囲指定に使う

・シェル変数xに1から10までの値を順次入れるには

$ for x in `seq 1 10`; do echo $x; done

grep

・テキストデータから特定の文字列パターンを抜きだして表示する

uniq

・前後で同じ行が重複したら1つにまとめる
・-cで十複数を表示

ワイルドカード

・「*」などの記号。複数のファイルをまとめて処理するのに便利

表示言語切り替え

英語に切り替え

LANG=C

・LANGはシェル変数(環境変数という特別なシェル変数)のひとつ。ターミナルの言語設定情報が入っている
・日本語に戻す場合はexitかターミナルを閉じて再起動

ワンライナーは使い捨て

・多くの場合使い捨てにし、必要になったらまた作る
・頻繁に使うならシェルスクリプトが役立つ

 

 

入門者のLinux 7章 まとめ

 

奈佐原顕郎さん「入門者のLinux」より

マルチユーザー

・一台のコンピュータを複数の人が使えるような設計思想
Unixのマルチユーザーシステムでは複数のユーザーが同時にコンピュータを使うことができる(ネットワークを介して他のコンピュータから入り込んで使うことができる

アカウント

・ユーザー名とパスワードで管理されるコンピュータの使用権
Linuxは原則ユーザー名とパスワードを持っている人しか使えない
・一人が複数のアカウントを持つことも可能だが、混乱の元なので基本一人一つにする
・複数のユーザーが一つのアカウントを使うことは可能ではあるがタブーである(各ユーザーの権限を明確にし、責任をはっきりさせるため)
・一つのアカウントに一つのユーザー名
・一つのUnixコンピュータの上に同じユーザー名を持つアカウントが複数存在するということは設計上出来ない
・一つのユーザー名には一つのユーザーID(identification)

ユーザー名とユーザーIDの確認
id 

・uid=の次に来る数値がユーザーID、その次の()内がユーザー名
・ユーザーIDも同一システム上での重複はゆるされない
gidは「グループID」を表す。システムのリソースを特定のユーザー単位で共有・管理したいときグループという概念を使う。
・一人のユーザーは複数のグループに属すことができるが本命のグループを一つ決めなくてはならず、それを「実効グループ」と呼ぶ

アカウント情報の統括

・ユーザー名・ユーザーID・グループなどの情報は通常「/etc/passwd」というテキストファイルで管理される
・idコマンドは/etc/passwdファイルの情報を参照して出力しているが、/etc/passwdではできないことができる

/etc/passwd

・いつでも誰でもが覗けるわけではない
・実効グループしか記録されていない

idコマンド

・特定のユーザーの情報を知りたいとき有用
・ユーザーが属するすべてのグループを表示する

パーミッション(許可)

・それぞれのファイルやディレクトリに対してどのような操作を許可するかしないかを定める

-rw-rw-r-- 1 test test 7 12月 6 20:28 ファイル名

・この場合3項目めのtestはファイルの所有者のユーザー名を意味する。4項目めのtestは所有グループの名前
・すべてのファイルやディレクトリについて所有者と所有グループがある
・-rw-rw-r--のrは読み込み可能(readable)という性質を意味し、rがあるということはこのファイルの内容を見ることができるということ

読み込み可能の性質の剥奪
chmod -r ファイル名
読み込み可能の性質の付与
chmod +r ファイル名

・r(読み込み可能),w(書き込み可能),x(実行可能)があり、Unixではすべてのファイルやディレクトリについてそれぞれなんらかのパーミッションが設定される
パーミッションの付与・剥奪にはchmod(change mode)コマンドを使う
・付与の際には「+」、剥奪する際は「-」をつけ、その後にr,w,xのうちどれかを指定する

パーミッションの情報を表示する
ls -l
-rw-rw-r--

・最初のrw-がuserに対するパーミッション
・真ん中のrw-が所有グループに対するパーミッション
・最後のr--はその他のユーザーに対するパーミッション

root

・システムの一部を変更・修正したり、新規のユーザーを追加したり、いなくなったユーザーを削除したりするシステム管理の作業では制限が邪魔になることがある
・管理業務に携わるユーザーを一人決めてその人だけに全権を委任する(管理者)。管理者はすべてのファイルやディレクトリへのアクセス権を持つ(管理者以外のユーザーは一般ユーザーと呼ぶ)
・通常管理者はrootというユーザー名を持つ(管理者=rootと呼ぶこともある)
・一般ユーザーがシステムの根幹になんらかの変更を加えるにはrootにお願いする必要がある。たとえば

新たなユーザーを追加する
パスワードをリセットする
ソフトのインストールやバージョンアップ

rootになる

sudo(switch user and do)
またはsu(switch user)

管理者の重要な仕事

システムのアップデート

・通常インターネットを介してそれぞれのディストリビューションリポジトリというサーバーに接続しそこから最新パッケージをダウンロードする

sudo apt-get update
sudo apt-get upgrade

・ふたつセットで行う

バージョンアップとアップデートは違う

アップデート

・不具合を直して完成度を高める

バージョンアップ

・新たな機能の追加や従来機能の削除、使用法の変更などを含めた大きな更新

バージョンアップで追加される新機能には未発見の不具合が含まれることが多いので枯れたシステムを欲する場合、あえてバージョンアップをせずアップデートだけ行う
ソフトウェアの新規インストール(一般ユーザーもできるが管理者がやるほうが楽)
sudo apt-get install ソフト

まとめ

マルチユーザーやパーミッションの役割
・システムの安全性・安定性を保つ
・それを簡便・合理的に実現することができる
・理解不能なエラーやトラブルは、所有者・所有グループ・パーミッションを疑うこと

入門者のLinux 6章 まとめ

奈佐原顕郎さん「入門者のLinux」より

 

出力・アウトプット

・「ls」や「cat」などのコマンドが、処理の結果をなんらかの形で外に向かって出すこと
・画面表示だけでなくプリンタに印刷したりハードディスクやUSBメモリに書き出したりする

入力・インプット

・コンピュータやソフトに情報を受け渡すこと
・マウスやキーボード、音声入力などでする

標準入出力

Unixで使われる入出力の仕組み
・入出力をキーボードや画面に限定せずより象徴的に扱う
・情報の受け渡しがユーザーとコンピュータ間だけでなく、コンピュータの中のソフトウェア同士の間でも容易になる
・小さなソフトウェア(コマンド)を組み合わせ、複雑で大きな処理を柔軟にかつ分散して行うことができる

出力

echo

・後に続く文章をオウム返しのようにそのまま表示する
・ファイルを作るときや、シェル変数、シェルスクリプトを学ぶ際に役立つらしきコマンド
・「>」という記号はコマンドからファイルへと情報が流れる様子を表す。たとえば

echo Hello! > output

ならば、カレントディレクトリに新たにoutputというファイルが作られ、その中にHello!という文が書かれている

・この機能はUnixではとても大切な基本的機能であり、「出力リダイレクト」と呼ばれる(方向付けしなおすという意味がある)

出力リダイレクトで上書き・追記

・「>」を使うとファイルを上書きする
「>」を「>>」にすると前の内容を消さずにファイルの末尾に新しい結果を追記していく(新規ファイルの場合どちらも同じ結果になる)

入力リダイレクト

・ファイルから入力する機能

bc

・かんたんな四則演算ができるコマンド
・計算式を入力として与えられるとそれらの式をもとに計算して結果の値を出力する
・使い終わったらquitでbcを終了しシェルのプロンプトに戻ってくること
入力リダイレクトではbcコマンドに計算式を入力することをファイルから行う
たとえば

echo 2+3 > input

・2+3という計算式の入ったテキストファイルをつくる。これをbcコマンドに渡し実行させる

bc < input

・シェルでは最初にコマンド名を打たなければならない

リダイレクト

・出力リダイレクトと入力リダイレクトをあわせてこう呼ぶ

コマンド(ソフトウェア)を相手にした入出力

コマンドの出力を画面やファイルを経由せずに、直接的に他のコマンドの入力にしてしまう

|

・パイプ
・直前のコマンドが出す出力を、直後のコマンドの入力にする
・3つ以上のコマンドをつなぐとき「パイプライン」と呼ぶ

less

・入力されたテキストデータを画面の縦の長さに応じて1ページずつ表示し、適宜、行き来できるようにするコマンド

wc

・word countの略。テキストデータの行数・語数・文字数を数える

余談

パイプの必要性

・1つのコマンドの結果を出力リダイレクトでファイルに書き出し、そのファイルを入力リダイレクトで次のコマンドに渡すのとパイプを使うのでは同じ結果になり、このような用途で作られるファイルを中間ファイルという。

中間ファイルとの比較

中間ファイル

・処理が正しく行われているかチェックしたり記録するのに有用だが、ハードディスクなどにアクセスするので時間を食ったり空容量が必要になる。
・前のコマンドが完了して中間ファイルが完成しなければ次のコマンドを動かすことができない

パイプ

・ハードディスクへのアクセスを省略するので高速化でき、空容量も必要ない
・前のコマンドの出力を後ろのコマンドの入力が待ち構えており、少しでもデータが流れてきたら後ろのコマンドは動き始める(Unixマルチタスクという複数の仕事を同時並行で行う機能を活用している)。

パイプを使うと全体の処理を高速化できる

入門者のLinux 5章 まとめ

 

奈佐原顕郎さん「入門者のLinux」より

 

ファイルの中身を見るコマンド

cat (concatenateの略) ファイル名

・CPU(中央演算処理装置)に関する情報がみれる
・テキストファイルのみ表示できる
文字コードの取り決めに従って各数値を文字に置き換えて表示する

ファイルの種類

テキストファイル

・文字で表された情報
・コンピュータの中ではそれぞれの文字は特定の数値の並びで表現される(文字コード、キャラクターコードという)
文字コードで定められた数値だけが並んで格納されているファイル
UnixではOSに関わるほとんどすべての設定情報をテキストファイルとして管理

バイナリファイル

・初心者向けにいうとテキストファイル以外のファイルがバイナリファイルだが実際にはそれは正確ではない

楽をするコマンド

・コマンドを途中までうってtabキー

ファイルを作る

すでにあるファイルからコピーして新たにファイルをつくる場合

cp コピーしたいファイル名 コピーファイル名

ファイルの名前変更

mv 変更したいファイル名 変更後のファイル名

・mvコマンドは名前変更とファイルを別のディレクトリに移動することもできる

mv 移動したいファイル名 移動後のディレクトリ

ファイルの削除

rm -f 消したいファイル名

・-fは「有無を言わさず消す」というオプション
・ファイルに使ってはいけない文字
 「/」「?」「*」「<」「>」「|」「;」「:」「¥」「,」

Unix文化

すべてのデバイスをファイルとして表現する

バイス:画面,ハードディスク,プリンタなどのCPの部品や周辺機器のこと

ls /dev

・デバイスがファイルとして扱われていることを実際に確認できる

 

練習問題のとこどうしてその動作になるのかわからないとこあったから聞かないと。