入門者のLinux 9章 まとめ
奈佐原顕郎さん「入門者のLinux」より
awk
・テキストデータを加工したり処理したりする
・プログラミング言語としての機能を備えており、シンプルで柔軟に出来ているのでワンライナーの部品として活躍する
・どんなコマンドでも標準出力にテキストデータを吐き出すコマンドならawkに流しこめる
・バグが出にくい
echo 100 200
応答 100 200
echo 100 200 | awk '{print $1}'
応答 100
・printはデータを表示するという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
応答 2016年12月9日以下略
繰り返しの処理
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
・デバイスがファイルとして扱われていることを実際に確認できる
練習問題のとこどうしてその動作になるのかわからないとこあったから聞かないと。
入門者のLinux 4章 まとめ
奈佐原顕郎さん「入門者のLinux」より
ディレクトリ
・ファイルが保存されている場所
・データやプログラムはファイルという単位で必ずどこかのディレクトリに格納される
・入れ子になって存在する(ディレクトリの中にディレクトリさらにそのディレクトry)本の図がめっちゃわかりやすいからおすすめ
・ディレクトリの階層構造のことをディレクトリ・ツリーという
ルートディレクトリ
/
・すべてのディレクトリに最上流に位置する
カレントディレクトリ
・シェルを操作するユーザーは常にディレクトリ・ツリーの中のどこかのディレクトリにいることになっている。それのこと
pwd
・カレントディレクトリがどこなのかを表示する
ディレクトリの移動
cd (change directory)
・様々な仕事をするときその仕事に必要なデータやプログラムのあるディレクトリに行く(そこをカレントディレクトリにする)ためのコマンド
ホームディレクトリ
/home/ユーザー名
・ユーザーが自由にデータを置くことができるディレクトリ
・ユーザーの利用環境に関する設定情報も保管されている
特別なディレクトリの表現方法
.
・カレントディレクトリ
..
・一つ上のディレクトリ
/
~
・ホームディレクトリ
プロンプトの変化
・現在自分がどこのディレクトリにいるかわかりやすくしてくれる
・Linuxの標準機能ではなく、Ubuntuなどの特定のディストリビューションで初期設定にされているので非表示にすることもできるしもともとその機能がないディストリビューションもある
ディレクトリの中身を見る
ls
・調べたいディレクトリを引数で指定して実行すればそのディレクトリの内容を見ることができる
オプションによる機能拡張
lsコマンドに -l というオプション
・より詳細な情報が出る
例えば
ls -l /usr の結果
・drwxr-xr-xの先頭のdはカレントディレクトリですよというしるし。もしファイルならdは表示されない
・rwx以下はパーミッションと呼ばれるもの(次章)
2列目:リンク数
3列目:所有者名
4列目:グループ名
5列目:サイズ(バイト数)
6~8列目:最終更新日時
9列目:ファイルやディレクトリの名前
man ls
・lsコマンドのマニュアル表示
ls --help
・シンプル版のマニュアル
ディレクトリの作成
mkdir (make directory)
ディレクトリの名前変更
mv (move)
ディレクトリの削除
rmdir (remove directory)
・空っぽでないディレクトリを消すには「rm -rf」コマンド
パス
・個々のディレクトリやファイルがディレクトリ・ツリーの中のどこにあるかという情報のこと
絶対パス
/home/maruko/test
・このようにルートディレクトリからたどってパスを表現する
・カレントディレクトリから遠く離れたディレクトリやファイルを指定するときよい
・カレントディレクトリがどこであれ、常に同じディレクトリやファイルを指定できる
相対パス
./maruko/test
・カレントディレクトリを起点にどのようにディレクトリをたどればそのファイルまたはディレクトリにたどり着くかというやりかた(.は省略可)
・カレントディレクトリのすぐ近くにあるディレクトリやファイルを指定するとき簡潔に表せる
・カレントディレクトリが違えば無意味なパスになる
冗長性
・同じことをするのにいくつもやり方があること
・システムの整合性や柔軟性を確保してくれる
余談
・「bin」「sbin」はコマンドを走らせるプログラムのファイルが入っているディレクトリ(binはbinariの略。Unixでは実行可能なプログラムの実体をbinary fileと呼ぶ)
・「include」「lib」「src」はプログラムを開発するときに必要なものが入っている
・「local」はユーザーが独自に入れるソフトなどのためのディレクトリ
入門者のLinux 3章 まとめ
奈佐原顕郎さん「入門者のLinux」より
ターミナル出現
Ctrl + Alt + t
プロンプト
$
*コマンド入力待ち
今日の日付と現在の時刻
date
ハードディスクやUSBメモリの使用状況を表示
df
カレンダーを表示
cal
・半角スペースを空けて添える情報を引数と(パラメータとも)いう
・calは年や月日を引数にとることができる
・-に何かの記号を続ける(オプション)ことにより挙動が変わる
コンピュータのメモリに関する情報
free
コマンド履歴
history
コマンド再利用
↑(上矢印)
ソフトのインストール
sudo apt-get install ソフト名
処理中断
ctrl + c
x秒間、停止せよ
sleep x