専門学校49日目(情報工学)6月20日(木)

1時限~3時限
Linux実習 新しいLinuxの教科書 第2版

前回はハードリンクやシンボリックリンク、ファイルに対する権限の設定を学びました。
今日はスーパーユーザーから学んでいきます。スーパーユーザーはユーザ名がrootとなっている。管理者権限をもつ。ファイルのパーミッションの影響を受けずにファイルの操作ができる。ls -lコマンドでファイル操作の権限を確認できる。重要なファイルを削除したりしないように通常は一般ユーザとして作業するべきです。スーパーユーザに変更するにはsuコマンドを実行し、パスワードを入力することで切り替わります。しかし、rootのパスワードはまだ設定していないのに求められるのでsudo su(スーパーユーザドゥー)コマンドを使う。これだと一般ユーザのパスワードでログインできる。パスワードを忘れてしまった場合、パスワードの初期化という方法があります。passwd ユーザ名で再設定できる。sudo cat /etc/shadowコマンドでパスワードファイルの中身を見る。sudo cat /etc/sudoers

教科書ではwheelグループとなっているが、我々は%sudoグループに権限が与えられている。
スーパーユーザが/etc/sudoersファイルに追記して権限を追加できる。
「ユーザ名 マシン名=権限 コマンド」で記述する。
visudoコマンドでファイルを編集できるが、操作を誤ると危険なのでやり方を読むだけにしました。


sudo usermod -aG sudo Linuxのユーザ名 で権限を付与できる。
権限を削除するにはsudo deluser Linuxのユーザ名 sudo でできる。

10章プロセスとジョブ、は飛ばします。今のところ必要ないので、必要があればあったら立ち戻ってみようかと思います。
11章標準入出力とパイプライン
リダイレクトとパイプラインが重要な概念になる。
来週から12章に入りますが、12章と13章が終わったらいよいよシェルスクリプトを作っていきます。

以下が本日のレポートです。

■実際に実施したコマンド
$ cat /etc/shadow
$ sudo su
$ sudo cat /etc/shadow
$ cat
$ cat < /etc/crontab
$ ls -l > list.txt
$ cat list.txt
$ ls /xxxxxx > list.txt
$ ls /xxxxxx 2> error.txt
$ ls /xxxxxx > list.txt 2> error.txt
$ ls /xxxxxx > result.txt 2>&1
$ echo 123 > number.txt
$ cat number.txt
$ echo 456 > number.txt
$ echo 789 >> number.txt
$ ls -l /dev/null
$ history | less
$ ls -l / /xxxxxx 2>&1 | less
$ history | head
$ history | tac
$ du -b /bin/* | sort -n


■疑問点1
sudo
■調査結果・解決方法1
一般ユーザにスーパーユーザの権限を与えるコマンド。求められるパスワードは現在ログインしているユーザのパスワードなので、スーパユーザのパスワードを知らずとも実行できる。どのユーザに権限を与えるかを管理するファイルが/etc/sudoersファイル。そのファイルを編集することができるが、それにはvisudoコマンドを実行する。

■疑問点2
スーパーユーザ
■調査結果・解決方法2
管理者権限を持つ特別なユーザ。Linuxでのユーザ名はrootとなる。一般ユーザでは行えないような操作ができる。suコマンドでスーパーユーザに切り替えられるがパスワードが必要になる。

■疑問点3
標準入出力
■調査結果・解決方法3
標準入力、標準出力、標準エラー出力の3つを合わせたものをいう。標準入力はキーボードからでもいいし、ファイルからでもいい。出力は通常ディスプレイだが、出力先がファイルでも構わない。入出力先を変えるのがリダイレクト。

■疑問点4
リダイレクト
■調査結果・解決方法4
標準入出力先を変更する機能。入力リダイレクトは<記号を使いcat < /etc/crontabのように書く。
これはcat /etc/crontabでファイルを指定して開くという実行と結果は変わらない。
標準出力では>記号を使う。コマンドの実行結果を画面表示するのでなく、ファイルに保存するときなどに使われる。
リダイレクトによるファイルの上書きを避けるには、>>を使う。これで出力先をファイルの末尾にできます。

■疑問点5
パイプライン
■調査結果・解決方法5
コマンドの標準出力を2つ目のコマンドの標準入力に送るという連携を行う機能。パイプラインは|記号で使うことができる。たとえばhistoryとheadというコマンドを組み合わせて、
history | headでコマンド履歴の表示を先頭から指定した行数だけ表示させることができる。


■疑問点6
フィルタ
■調査結果・解決方法6
標準入力を入力として受け取り、標準出力に出力するコマンドの総称。

■振り返りレポート
※実施した内容を以下に列挙する
・sudoコマンドでスーパーユーザの権限でコマンドを実行しました。
・標準入力、標準出力、標準エラー出力のリダイレクトを実行しました。
・パイプラインで複数のコマンドを連携させて実行しました。
・代表的なフィルタコマンドをいくつか実行しました。


4時限~6時限
国家試験対策    コンピュータ概論
          アルゴリズムとデータ構造
          キーワードで学ぶ最新情報トピックス2024

第8章アルゴリズムとデータ構造
コンピュータ概論の本では扱う内容が薄いので、青い本(アルゴリズムとデータ構造)からも学びます。
第1節データ構造
データの記憶装置上での配置方法をデータ構造という。
変数はプログラムでデータを一時的に入れるもののことで、変数には任意の名前が付けられる。言語によって異なるが、データの型を指定して格納するのが一般的。
データ型には数値型(int型、double型など)、文字型(char型、String型)、論理型(boolean型)などがある。

配列とは、同じデータ型の変数を連続した記憶領域に並べるデータ構造。配列中の各変数を要素という。要素には先頭から添字という番号が割り振られる。言語により先頭が0か1か異なる。
配列の要素指定に括弧を使うが、()は小括弧、{}は中括弧、[]は大括弧という。括弧にはほかにもいろいろあるが、この3つは押さえておきたい。
1次元配列の要素指定はA(1)などと書く。配列には行を増やして行と列で表す2次元配列もある。それ以上にも増やすことができ、まとめて多次元配列という。2次元配列の要素の指定はA(1, 1)などと書く。

リストはデータをポインタでつないだデータ構造。単方向リストは次の要素へのポインタを一つだけ持つ。要素を逆にたどることはできない。最後の要素にはポインタがないのでnullが入っている。双方向リストはひとつ前の要素へのポインタと次の要素へのポインタの2つもつ。先頭の要素は前のポインタは持たず、最後の要素の次の要素はないので、それを示すポインタをもたない。環状リストはリストの最後と先頭を結んで環状につないだリスト。環状リストにも単方向、双方向リストがある。

キュートスタック
これはセットで覚えたほうがいいかなと思います。
キューは押し出すという意味がある。最初に格納したデータを最初に取り出す構造で、FIFO(First In First Out)ともいう。キューにデータを格納する操作をエンキュー(enqueue)といい、取り出す操作をデキュー(dequeue)という。
スタックは最後に格納したデータを最初に取り出す。スタックには積み重ねるという意味がある。LIFO(Last In First Out)ともいいます。スタックにデータを格納する操作をPush(プッシュ)、取り出す操作をPop(ポップ)という。キューはプリンタの印刷待ちの制御に使い、スタックは関数の戻り番地の保持に使われる。

キューとスタックを扱った基本情報の過去問を学びました。
push(a)
push(b)
enq(pop())
などの命令を実行していき、最終的にどうなるかを問う問題でした。
2つ目の問題はA、C、K、S、Tの順でスタックに格納する。これを適宜pop命令で取り出しSTACKの順で出力したい。文字のスタック間の移動はしないとするとき、スタックはいくつ必要か。答えは3つスタック。


木構造
階層構造を表現するデータ構造。ルート(根)、ノード(節)、リーフ(葉)、ブランチ(枝)から構成される。
親子構造は上にあるノードを親、下にあるノードを子という。
部分木は各ノードから下にある木構造をいう。左側に伸びている部分木を左部分木、右に伸びているのを右部分木という。
二分木は各ノードが持つブランチ数が2本以内の木構造。
完全二分木はルートからリーフまでの深さの差が1以内の二分木。
ヒープ木は各ノードの親子関係に大小関係がある二分木。親<子か親>子の関係がどの親子関係を見ても成り立っているもの。
二分探索木は次の関係が成り立つ二分木です。
親ノードの値>左部分木のすべての値
親ノードの値<右部分木のすべての値
まとめると、二分木の左側は値が小さく、右側は値が大きい構造。一番左が一番値が小さくなって、一番右が一番大きい。

木の巡回方法
深さ優先順と幅優先順があり、深さ優先順はよく使います。そして深さ優先順には、先行順方式、中間順方式、後行順方式がある。
先行順はルートから開始し、ノード→左部分木→右部分木の順でアクセスする。ルートノードからアクセスを始めるのでルートノードが最初。
中間順はルートから開始し、左部分木→ノード→右部分木の順でアクセスする。ルートノードから見た左部分木から巡回し、ルートノードへのアクセスは中間。
後行順はルートから開始し、左部分木→右部分木→ノードの順でアクセスする。ルートノードから見た左部分木から巡回するので、ルートノードは最後。

幅優先順はルートノードから始め、階層の上から同一階層のノードの左から巡回する。

バランス木
ノードの追加や削除をしてもルートからリーフまでの距離がどのノードでも変わらないように調整する木構造。AVL木やB木がある。AVL木はすべてのノードの左部分木と右部分木の階層差が1以下の二分木。B木は多分木構造をもつバランス木。

第2節アルゴリズム
コンピュータで処理をする際は有限時間で処理が終わるように手順を考える必要がある。
フローチャート(流れ図)
これはJavaの授業でも習いました。開始と終了は角を丸くした四角、条件分岐はひし形などの図形で表現するものです。

擬似言語
実際に記述されるプログラムに近い形式の処理手順を表したもの。基本情報試験用に作られた言語では代入は=でなく←で表されるが、分岐はif、繰り返しはwhileやforで実際のプログラミング言語と同じようになっている。大学入試の情報科目用の言語はまた別なのがあるという。IPAが基本情報の試験などで使われる擬似言語の記述形式を公開しており、それをコピーしたプリントが配られ解説を受けました。


アルゴリズムはフローチャート、擬似言語の2つの表し方がある。

擬似言語の例

〇1から100までの整数のうち、3の倍数の合計を求める
整数型:sum
整数型:cnt
sum←0
cnt←1
while(cntが100以下)
if(cntが3の倍数)
sum←sum+cnt
endif
cnt←cnt+1
endwhile

擬似言語について書いた本が売ってたりしますが、買うなら新しい擬似言語の本を買うのがいいと思います。次回は整列と探索を学びます。


7限目 情報数学

前日にLINEで伝えられたプリントの内容が分からない人だけ出席すればいいという授業でした。内容としては、三角比を求める計算問題でsin、cos、tanの値を与えられた直角三角形の辺から求めるものでした。sinは(高さ/斜辺)で、cosは(底辺/斜辺)で、tanは(sin/cos)で求められます。また2辺だけが与えられている問題もあり、それは三平方の定理で辺の長さの2乗を求め平方根を取り、図形は正の長さなので平方根のうちの正の値をとれば長さが求まります。あとは同じように解きます。また混乱したときはsinとcosは-1から1の範囲を取るのだと覚えておけば、あってるか確かめるのに役立ちます。

また0°から180°までの三角関数表を書きました。このくらいはスラスラ書けるようであってほしいそうです。90°を中心に対称的になっているので、0°から90°までを暗記すれば簡単に導出できます。ただcosとtanだけは符号が変わるので注意が必要です。tan90°は定義されないのでそこは埋める必要はありませんが、理屈としてはsin90°が1、cos90°が0なので、tan=sin/cosに当てはめるとtan90°=1/0と0で割ってしまう形になるから定義されないのです。

他には問題として登場したわけではなく公式として書いてあるだけでしたが、正弦定理、余弦定理、面積の公式、ヘロンの公式を使いこなせるくらいであってほしいとのことでした。

この記事が気に入ったらサポートをしてみませんか?