入門者のLinux 13章 まとめ

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

文字置換のコマンド

sed

大文字小文字変換でよく使うコマンド

tr

単語を辞書順に並べ替える

sort

単語を数える

uniq -c

出現回数の多い順に並び替える

sort -n -r

・nオプションは辞書順でなく、数字の小さい順に並べる
・rオプションは順序をひっくり返す

まとめ

・様々な細々とした仕事について、それぞれのためのソフトウェアをいちいち用意するのはきりがないし、効率も良くない。

Unixは、「その仕事のためのソフト」ではなく「その仕事を構成する部品」たちを提供する(wgetコマンドやconvertコマンドなど)。それらを使いユーザーは自分で「その仕事のためのソフト」をワンライナーシェルスクリプトで組み立てる

UnixCUIは相手の大きさによって怯んだりしない。このことが小さいものから大きいものまでいろいろなコンピュータに搭載されている理由のひとつ

Unixは論理的な整理が可能で、大量のデータを対象とし、自動化が望まれるような仕事に大きな力を発揮する

 

この章は実践が多いので大変でしたけどその分面白かったです〜

結構この本の中では応用章というかコマンドが少し複雑でした。

 

入門者のLinux 12章 まとめ

 

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

 

マルチタスク

・同時に複数の処理をする

現在実行中の仕事を調べる
$ ps au

・ユーザーのLinuxマシンが今まさに処理している仕事を1行に1つという単位で示している
・個々の行で示されている仕事をプロセスという

・最初の行が表の項目名
・左端のUSERという項目は、そのプロセスを実行したユーザー名
・2番目の項目PIDはプロセスIDで、たくさんあるプロセスを互いに区別するためにある
・3番目の%CPUはCPUの性能のうちどのくらいがそのプロセスに使われているか
・4番目の%MEMはメモリがどのくらいそのプロセスに使われているか

コンピュータの速度が異様に遅いときは3.4番あたりの数値が極端に大きいプロセスがないかどうかチェックするとよい

・9番目のSTARTはそのプロセスが開始された時刻
・10番目のTIMEはそのプロセス実行のためにCPUが費やした時間
・11番目のCOMMANDはそのプロセスを起動したコマンド

バックグラウンドとフォアグラウンド

・シェルでコマンドを走らせるとき、普通はそのコマンドが終わるまでそのシェルでは他のことができない

例えば
$ sleep 10

10秒後にプロンプトが出る

ところがこのコマンドの最後に&をつけると

$ sleep 10 &

何か1行表示が出てすぐにプロンプトに戻る

・このときsleep 10というコマンドがシェルの画面の中ではなく、別のところで動いている

コマンドの末尾に&をつけてシェルの画面外で走らせることをバックグラウンドという
バックグラウンドで走っているコマンドを元の画面内に戻したくなったとき
$ fg

・fgはフォアグラウンドの略称。シェルの画面の中で実行する
・コマンドを&をつけずに走らせるとフォアグラウンドで実行される

やっぱりバックグラウンドで走らせたいとき(例としてsleep 10コマンド)
「CTRL」キーを押しながら「z」
        
^zと表示され、その次の行に[1]+ 停止 と表示されプロンプトが戻る
このときコマンドは一時停止に入る
bgというコマンドを打つとバックグラウンドで再開される

ジョブとプロセス

・sleepのとき、&をつけた場合、結果に[1]というのが出るが、この数値はジョブIDと呼ばれるもの
・ジョブとはまとめて実行されるプロセスの集まり

例えば
$ コマンドA | コマンドB | コマンドC のとき

これら全体が1つのジョブであり3つのプロセスの集まりとみなされる

・ジョブの数を増やすとジョブIDも増える

例えば
$ sleep 10 & というコマンドを間髪入れずに3回実行すれば
[1]5324
[2]5325 
[3]5326

というようにジョブIDの値が1,2,3というふうに増えていき、プロセスIDの値も増えている

・プロセスとジョブは管理するところが違う

プロセス
・OS全体で統一的に管理されるため多くのプロセスを同時に動かす。それら全てに対し、重複しないようなプロセスIDがつけられるのでしばしば大きな値になる
ジョブ
・そのジョブを実行するシェルで管理されるので大抵コマンドのジョブIDは1番から始まる

プロセス強制終了

UnixLinuxはとても安定したOSだが特定のコマンドやアプリケーションがフリーズすることがある。そのときは強制終了する
・ターミナルの中でシェル上で動いているコマンドなら[ctrl]+[c]で強制終了できることが多い

プロセスを直接的に強制終了する
kill プロセスID[ctrl]+[c]ができないときに、別のターミナルを開いて実行中のコマンドのプロセスIDを調べkillする

・別のターミナルすら開けないとき

[ctrl]+[alt]+[F1]を押す場合
GUIのウィンドウ全体が停止し、画面全体が1つのCUIのターミナルになる
・そこでログインし、ps auコマンドを実行してプロセスIDを確認し、killコマンドを打つ
・終わったらログアウトし[ctrl]+[alt]+[F7]を押すと元のGUIの画面に戻る
別のコンピュータからやる場合
・SSHというやり方でトラブルの起きたコンピュータにログインし、ps auしてkillする
killコマンドでも終了できないプロセスがあるとき
$ kill -kill プロセスID

入門者の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 ソフト

まとめ

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