空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

Raspberry Pi Zero W で遊んでみる(3)~アクセスポイント化~

やりたいこと

WIFI環境がない場所でもひとつのraspi zero wをアクセスポイントとして通信がしたい

なので、raspi zero w をアクセスポイント化にトライ

教科書

MACアドレスを調べる

pi@raspberrypi:~$ iw dev

udev ruleを追加

ファイルを作成

$ sudo nano /etc/udev/rules.d/70-persistent-net.rules

以下の"b8:27:eb:ff:ff:ff"の部分を先に調べたMACアドレスに書き換えて上のファイルに記述

SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="b8:27:eb:ff:ff:ff", KERNEL=="phy0", \
  RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \
  RUN+="/bin/ip link set ap0 address b8:27:eb:ff:ff:ff"

Dnsmasq and Hostapdのインストール

$ sudo apt-get install dnsmasq hostapd

Dnsmasq and Hostapdのためのファイル設定

3つのファイルを書き換える

1. /etc/dnsmasq.conf

interface=lo,ap0
no-dhcp-interface=lo,wlan0
bind-interfaces
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=192.168.10.50,192.168.10.150,12h

2. /etc/hostapd/hostapd.conf

以下のssidとpassphraseを自分の好きな名前に設定する。" "で囲む必要はない。

ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
interface=ap0
driver=nl80211
ssid=YourApNameHere
hw_mode=g
channel=11
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_passphrase=YourPassPhraseHere
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

3. /etc/default/hostapd

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Interfaces Fileの修正

1. /etc/wpa_supplicant/wpa_supplicant.conf

使用できるWIFIがあればそのWIFISSIDとパスワードを設定

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="YourSSID1"
    psk="YourPassphrase1"
    id_str="AP1"
}

2. /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
auto ap0
auto wlan0
iface lo inet loopback

allow-hotplug ap0
iface ap0 inet static
    address 192.168.10.1
    netmask 255.255.255.0
    hostapd /etc/hostapd/hostapd.conf

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface AP1 inet dhcp

起動時の設定

/home/piに以下シェルスクリプトを作成

pi@raspberrypi:~$ cat ./start-ap-managed-wifi.sh
#!/bin/bash
sleep 30
sudo ifdown --force wlan0 && sudo ifdown --force ap0 && sudo ifup ap0 && sudo ifup wlan0
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE
sudo systemctl restart dnsmasq

実行権限を付加

pi@raspberrypi:~$ chmod +x ./start-ap-managed-wifi.sh

起動時に実行するために、cronに設定

$ sudo crontab -e

以下を最終行に追加

@reboot /home/pi/start-ap-managed-wifi.sh

最後に...

リブート!

これで母艦PCのwifiを見ると設定したSSIDが見えるはず!!

コメント

wifi環境がない場所でsshで作業できるのは便利 ♪

おまけ

sshのホスト名を変更する方法

$ sudo -e /etc/hostname
変更する
$ reboot

再起動するとssh -X pi@変更後のホスト名.localで接続可能

udevについて

有線LANを接続する方法

USB OTG

名前解決

参考

Raspberry Pi Zero W で遊んでみる(0)~インストール・設定~

やりたいこと

raspberry pi zero w のインストールや設定方法をまとめる

f:id:robonchu:20180319195157j:plain

使っているバッテリーはこれ👇でとても小さい

ポータブル充電器02 通販 | au オンラインショップ | スマホ・携帯電話向けオプション品

もっと小さいバッテリーを知ってる方いたら教えてください> <

pin配置

f:id:robonchu:20180319165644p:plain

OSダウンロード

OSの書き込み

設定教科書

wifi設定

SDカード内のbootディレクトリを探し、以下のファイルをboot直下に作成

  • emacs -nw /Volumes/boot/wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="your-SSID"
        psk="your-passphrase"
}

このSDを挿すとWIFIに接続される

USB経由でインターネット接続したいとき

参考: Raspberry Pi Zero(W)のセットアップ

bootドライブ内のcmdline.txtに "modules-load=dwc2,g_ether" を追加します。

rootwaitとquietの間です。エディタはvimを使っていますが、適宜変えてください。

次に、config.txtの末尾に"dtoverlay=dwc2"を追加します。

$ echo "dtoverlay=dwc2" >> /Volumes/boot/config.txt

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh quiet splash plymouth.ignore-serial-consoles

SSH対応

設定

touch /Volumes/boot/ssh

ログイン

ssh -X pi@raspberrypi.local

初期ユーザーはpi、初期パスワードはraspberryになります。

wifi安定化

参考:

rfkillフラグのリセット問題が発動すると面倒なので、念のため。

$ sudo apt install rfkill

$ sudo vi /etc/rc.local

下記を追加。

#By default this script does nothing.

/usr/sbin/rfkill unblock wifi

 初期設定

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install tmux emacs
$ sudo raspi-config

スペースキーで選択

"4. Localization Options"から"11. Change Locale"を選択して、"ja_JP.UTF-8"を有効に。

同様に"4. Localization Options"から"12 Change Timezone"。"Asia"、"Tokyo"と順にたどっていく。

参考

Raspberry Pi Zero W で遊んでみる(2)~ROS KINETIC INSTALL~

やりたいこと

ラズパイゼロにROSを入れる

教科書

ROSではじめるホビーロボット#06がほしい。手に入る方法ないのかな。。。

インストール

$ sudo apt-get update
$ sudo apt-get install -y build-essential gdebi python-defusedxml libboost-all-dev liblog4cxx-dev libconsole-bridge-dev
$ sudo pip install netifaces
$ mkdir -p ~/tmp
$ cd ~/tmp
$ wget https://github.com/nomumu/Kinetic4RPiZero/releases/download/v_2017-10-15/rpi-zerow-kinetic_1.0.0-1_armhf.zip
$ unzip rpi-zerow-kinetic_1.0.0-1_armhf.zip
$ sudo gdebi rpi-zerow-kinetic_1.0.0-1_armhf.deb
$ sudo /opt/ros/kinetic/initialize.sh

設定

$ sudo rosdep init
$ rosdep update
$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

roscore

f:id:robonchu:20180721094018p:plain

動いた〜!

コメント

のむむさんありがとうございますm( )m

数学のお勉強(1)~クオータニオン~

f:id:robonchu:20180715143240p:plain

参考:クォータニオンの回転補間:掲示板:シムダンス「四次元能」|Beach - ビーチ

やりたいこと

クオータニオンを理解する

教科書

↓ 素晴らしくわかりやすい。

回転行列の問題

  1. ジンバルロック特異点がある)

  2. 行列計算での処理負荷が重い

  3. 回転の補間が難しい

クオータニオンの利点

  1. ジンバルロックがない

  2. 計算負荷が低い

  3. 2つの回転同士のスムーズな補間が表現できる

  4. x,y,z軸に限らない任意の回転軸での回転が簡単にできる

複素数について

虚数単位

i ** 2 = -1

複素数

a + b * i

複素平面

f:id:robonchu:20180715143555p:plain

参考: 複素平面 - Wikipedia

複素数の行列表現

I = numpy.array([[0, -1], [1, 0]])

E = numpy.array([[1, 0], [0, 1]])

I ** 2 = - E

Z = a*E + b*I = numpy.array([[a, -b], [b, a]])

Z = numpy.array([[numpy.cos(theta), -numpy.sin(theta)], [numpy.siN(theta), numpy.cos(theta)]]) * numpy.array([[r, 0], [0, r]])

複素数の場合、乗法の交換法則・結合法則・分配法則を満たす

共役

z' = a - b * i

z * z' = || z || ** 2

複素数のすごさ

複素数平面における点の回転」は「複素数のかけ算」に対応している。

「回転を足す」と「複素数を掛ける」は同じ意味!

たとえば、単位円でiを掛けていくと90度ずつ回転する。めちゃ便利。

参考:

二重数について

冪零元

epsilon**n = 0

二重数

z = a + b*epsilon

epsilon = numpy.array([[0, 1], [0, 0]])

Z = a + b*epsilon = numpy.array([[a, b], [0, a]])

bを二重部という

複素数の場合、乗法の交換法則・結合法則・分配法則を満たす

クオータニオン

複素数の拡張として考えることができる

q = w + x*i + y*j + z*k  # i,j,kは虚軸 
  • 複素数は1とiという2つの線形独立な基底ベクトルで平面を表現

  • クオータニオンは1,i,j,kという4つの線形独立な基底ベクトルによる4次元空間を表す

基底i,j,kの関係

i**2 = j**2 = k**2 = -i*j*k = -1

i*j = k

j*i = -k

j * k = i

k * j = -i

k * i = j

i * k = -j

交換法則はなりたたない

クオータニオンはw,x,y,zの組として、

q = [w, x, y, z]

と表記されることがおおい

クオータニオンの演算

共役

q' = [w, -x, -y, -z]

大きさ

v = (x, y, z)

|q| = sqrt(w**2 + |v|**2)

乗算

ベクトル部の内積外積をもちいて以下のように表される

q0q1 = [w0 * w1 - v0 * v1 ,  w0 * v1 + w1 * v0 + v0 ✕ v1]

内積

q0 * q1 = w0 * w1 + v0 * v1

逆数

q**-1 = q' / |q|**2

単位クオータニオンでは、共役を求めれば逆数が求まることがわかる

行列表現

i = numpy.array([[0, 0, 0, 1], [0, 0, -1, 0],[0, 1, 0, 0],[-1, 0, 0, 0]])

j = numpy.array([[0, 0, 1, 0], [0, 0, 0, 1],[-1, 0, 0, 0],[0, -1, 0, 0]])

k = numpy.array([[0, -1, 0, 0], [1, 0, 0, 0],[0, 0, 0, 1],[0, 0, -1, 0]])

3D回転

回転

あるベクトルpを単位クオータニオンを用いて3次元空間で回転を表現する方法

p' = q * p * q**-1

p' = [0, v]

q = [qw, qv]  # qv:回転軸

p = [0, pv]

qw = +- numpy.cos(theta/2.0)

qv = +- numpy.sin(theta/2)*u  # u:qvと同じ方向の単位ベクトル

上記をまとめると、3次元の回転はクオータニオンを使って以下の式で表される

p' = q * p * q**-1

q = [numpy.cos(theta/2.0)  numpy.sin(theta/2.0)*u]

pを単位クオータニオンqで回転したあと、rをつかって回転させる場合、

r*(q*p*q**-1)*r**-1=(rq)*p*(q`r`)=(rq)*p*(rq)`

となり、あらかじめクオータニオンrqを計算してクオータニオンsとして合成しておけば、回転の合成を行うことができる

クオータニオンを使えばどんな回転も一発で表現可能

デュアルクオータニオン

定義

回転のみならず、剛体変換(回転と平行移動)を表現できる。

クオータニオンの二重数である

q^ = r + d * epsilon  # r,d: クオータニオン、epsilon:零冪元

所感

わかったようなわからないような。。。とりあえずハミルトン大先生すごい笑

まだ正直、理解しきれてない気がする。追記していこう : )

ホームオートメーション(1)~カーテン自動化~

やりたいこと

朝、めざまし無しで起きたい !

これまでは、目覚ましとiftttでの電気オン。。。

電動カーテン自動化による太陽光で起きる作戦

www.youtube.com

ハマりポイント

まさかの購入した電動カーテンのリモコンが赤外でなく、Nature Remo使えず...

スイッチボットで物理的にリモコンボタンを押すことに(泣)

構成

  1. ニトリの電動カーテン

  2. switch bot & switch link

  3. IFTTT or Alexa

IFTTTのタイマー機能で、毎朝7:00にswitch link に信号を送り、switch botニトリの電動カーテンの無線リモコンの開きボタンを物理的に押すという無理やり構成( ̄ー ̄)

そして、コンセント周りの配線…

今後

毎朝、目覚ましをかけずに太陽光で起きれるか実験⚗

いちお寝坊防止のために、

  1. 7:00にカーテンオープン by IFTTT & switch link !

  2. 7:15に電気オン by IFTTT & Nature Remo !!

  3. 7:30に目覚まし by iphone !!!

それではおやすみなさい💤

画像処理についてまとめメモ

やりたいこと

画像処理の大事な内容について箇条書きでまとめ

教科書

CG-ARTS | 書籍・教材

まとめメモ

  • カメラ応答関数:カメラへの入射光強度を入力として、画素値を出力とする関数

  • 光ショットノイズ:受光素子に到達した光子数に比例して出力電圧に含まれるゆらぎの標準偏差

  • 暗時ノイズ:受光素子に到達した光子数に依存せずに生じるノイズの総称で暗電流ノイズや読み出しノイズなどを含む

  • モスキートノイズ:元画像の高周波の成分が失われるようなノイズ

  • 量子化雑音:量子化誤差に起因する画素値の歪み

  • フリッカ:動画において各フレームで明るさが一定でない現象

  • ガウシアンフィルタ:正規分布型の重み係数をもつ。

  • バイラテラルフィルタ: ガウシアンフィルタを改良して、「中心画素からの距離のみで決めていた重み」を「中心画素の画素値と他の画素値の離れ方も含めた重み」に変更したもの

  • ノンローカルミーンフィルタ:テンプレートマッチングのように周辺画素を含めた領域が、注目画素の周辺領域とどれくらい似通っているかによって重みを決定するもの

  • ラプラシアンフィルタ:画像の二次微分に相当。

    • ガウシアンフィルタからのラプラシアンフィルタでノイズを減らしつつもエッジを強調できる
  • 鮮鋭化フィルタ:元画像をそのまま出力するフィルタからラプラシアンフィルタを引いたもの

  • ガボールフィルタ:ある特定の方向の周波数成分を検出するフィルタ

  • LoGフィルタ: ガウシアン分布のラプラシアン

  • ゼロ交差:値が生から負へ、負から正へ変化する間の0になる位置。ゼロ交差の点をつなげると閉曲線になる

  • 点拡がり関数:劣化過程を表す空間フィルタ

  • 歪曲収差:ピントがしっかり合致していて色のにじみもないのに、映像が歪んで見えてしまうこと

  • 被写界深度:レンズのピント調整をした時に十分にピントがあっていると判断できる距離

  • F値 = レンズ焦点距離 / レンズの有効開口径。F値が大きいと、被写界深度は深くなる。

  • 平面パノラマ: 複数の画像を平面に投影しながらつなぎあわせたもの。直線性は維持。

  • 円筒面パノラマ:円筒面に投影したもの。直線性は維持されない。

  • 球面パノラマ:球面に投影したもの。直線性は維持されない。

  • フレーム間差分:二枚の差分画像を用いて、論理積を求めることで移動領域だけを抽出する

  • Horn-Shunkckの方法:オプティカルフローのx,y方向の微分値の二乗値が小さくなるような平滑化項。オプティカルフローの拘束条件だけでは一意に決定することはできない。

  • 光学:

放射量 測光量 備考
放射束[W] 光束[lm] 単位時間に人感の明るさ単位
放射照度[W/m**2] 照度[lx] 単位面積あたりの光束
放射強度[W/sr] 光度[cd] 単位立体角あたりの放射束

あるアナログ的な信号をデジタルデータにサンプリングする場合、原信号に含まれる周波数成分をすべて正確にサンプリングするためには、原周波数の2倍以上のサンプリング周波数が必要となる。

これを標本化定理という。たとえば、100Hzのアナログ信号を正確にサンプリングするためには、最低でも200Hz以上の周期でサンプリングしなければならない。

もしサンプリング周波数の1/2よりも高い周波数成分が含まれていると、その成分がサンプリング結果にはエイリアス(alias、虚像)信号として現われる。

参考:標本化定理とは - コトバンク

  • dpi: dots per inch

  • 青色波長のピーク:450nm

  • 緑色波長のピーク:550nm

  • 赤色波長のピーク: 600nm

  • 色の順番:青、シアン、赤、黄色、緑、青緑、青

f:id:robonchu:20180707160328p:plain

  • ラプラシアンフィルタは以下のように表すことができ、負の値にもなるし、同じ色が多い場合、0付近に値が集中する

0 | 1 | 0

1 | -4| 1

0 | 1 | 0

  • バイリニア補間:隣接4画素を頂点とする正方形の下底と上底それぞれについてx方向で補間を行い、得られた2つの値を用いて、y方向に線形補間を行う

  • pタイル法:濃度ヒストグラムの濃度の低い方からの画素数と,画像全体の画素数の割合がpとなる濃度値を閾値とする

  • オイラー数 = 連結結合の個数 - 穴の個数は

  • 市街地距離:f:id:robonchu:20180707163500p:plain

  • ユークリッド距離:f:id:robonchu:20180707145411p:plain

  • チェス盤距離:横方向と縦方向の移動距離の大きい方の長さ

以下、赤:市街地距離、緑:ユークリッド距離、青:チェス盤距離

f:id:robonchu:20180707194907p:plain

  • マハラノビス距離:データの各方向への散らばり具合まで考慮した「データ群からの距離」 -> sqrt( (a-b)2 / delta2 )

f:id:robonchu:20180707184857p:plain

参考:マハラノビス距離の意味を2次元の場合で理解する - 具体例で学ぶ数学

  • バンドル調整:たくさんの画像の対応点を利用して、各画像のカメラモーションと各対応点の3次元位置を更新する

  • テンレートマッチングの演算回数: 減算、絶対値、加算の三回

  • SIFT: http://www.vision.cs.chubu.ac.jp/cvtutorial/PDF/02SIFTandMore.pdf

  • FAST: 注目画素の周囲16画素の画素値が注目画像より明るい、もしくは暗い画素が一定の画素以上連続する場合はコーナーとする。

  • Cannyエッジ検出:

    1. ノイズ低減と微分

    2. 勾配の最大位置の検出

    3. しきい値処理(2つのしきい値を用いる)

  • 2次元DCT: 離散コサイン変換

  • 虹彩デジタルカメラの絞りにあたるもの

  • mod M ; Mで割った余り

  • チェイン符号化: 線画像を、画素の連なりに注目して記述する可逆符号方式

  • ハフマン符号化: 画像の種類によらない符号化方式。符号割り当ては、濃度やランレングスといった情報源シンボルに符号を割り当てる作業であるが、生起確率の高い情報源シンボルほど短い符号を与えると、符号化に必要な平均の符号長を最小とすることができる。

  • JPEG2000方式:二次元離散ウェーブレット変換と算術符号化が用いられる

  • 立体角:f:id:robonchu:20180707190932p:plain

参考:立体角とは - スーパーサイエンスガール

  • ステラジアン:立体角の大きさを表わすSI補助単位。記号 sr 。1 sr は球の半径の2乗に等しい面積をもつ球面上の面分が球の中心に対してつくる立体角。

  • 双方向反射率分布関数(BRDF):入射光の方向と出射光の方向に依存する四次元の関数。反射率を一般化したもので、出射光の放射輝度と入射光の放射照度の比として定義される。

  • ヘルムホルツの相反性:ヘルムホルツの定理 [物理のかぎしっぽ]

  • ディザ法:黒と白つまり輝度が0と255の色だけを用いてハーフトーン(中間色)を表現しようという技術で,2値しか出力できない表示装置でなんとかグレースケールを表現しようとしたもの。グレースケールの画像を小さいブロックに分割し,それにマスクを掛けて閾値を越えたピクセルを白,下回ったものを黒というように処理。

  • デジタルカメラのゲイン:ゲインを下げるとノイズが減り、全体的に暗く撮影される

  • デジタルカメラの明るさ:F値の2乗に反比例する

  • 1画素のモーションブラーの計算: 対象物との距離 / 焦点距離 * 1画素あたりの大きさ 1

  • ライトフィールドカメラ: 被写体からの光線を、三次元的な情報も含めて記録するカメラ。イメージセンサーの前面にマイクロレンズアレイを配し、光線の明暗だけでなく、光線の入射方向に関する情報を記録する。

  • ダイナミックレンジ: 観測可能な最大、最小明るさの比によって定義

  • ノイズのない画像の推定:事後確率の最大化がある。事後確率は尤度と事前確率の積に比例する。

  • 残差逐次検定(SSDA)法: 相違度の加算の途中で残差がしきい値を超えたら加算を打ち切ることで、全体の計算量を減らしている。

  • ワールド座標系X = Z / f(焦点距離) * u

  • 基本行列E = D(歪対称行列)* R(回転行列)。Dからはカメラの相対的な平行移動ベクトルがわかる。

  • ネガポジ変換でエントロピーは変化しない

  • 著作隣接権: 著作物の創作者ではないが、著作物の伝達に重要な役割を果たしている実演家、レコード製作者、放送事業者、有線放送事業者に認められた権利

  • ガンマ補正:ガンマ分の1乗のガンマが1より小さい時は暗くなり、大きい時は明るくなる

  • リギング:周波数領域において、不連続にフィルタリングを行うとエッジに対して波打つような濃淡の繰り返しが発生する

  • ウィーナフィルタ:復元画像と原画像の誤差が最小になるように定義されたフィルタ

  • オープニング:背景のノイズを除去

  • クロージング:画像内のノイズを除去

  • 細線化では以下の条件を満たしているときに白画素にする

    1. 注目画素が境界上にある黒画素

    2. 白画素に変更しても連結性が保持

    3. 線分の端点でない

  • ミーンシフト:近傍の点群の平均位置に移動を繰り返して、極大点を求める方法

  • スネーク:閉曲線が縮んでエッジの境界に張り付くことにより対象物の領域を抽出する方法

  • JPEGの圧縮率を高くした時:隣り合うブロックの境界が目立つブロック歪みが生じる。また、はっきりとした輪郭の周りにモスキートノイズも現れる。

  • モスキートノイズ:デジタル画像圧縮画像(特にJPEG静止画およびMPEG動画)において輪郭部分や色の変化の激しい部分で起こる画像の乱れ

  • オーレンネイヤーモデル:拡散反射モデル。

  • フォンモデル:鏡面反射モデル。物理的に正確なモデルでない。

  • トランススパロウモデル:鏡面反射モデル。物理的に正確性を求めたモデル。

所感

画像処理、幅が広いので大変だぁ。。。光や色の特性や座標変換、フィルターや著作権などなど、、、

一歩ずつ!!!

Linuxのお勉強(2)

f:id:robonchu:20180702214333p:plain

やりたいこと

linuxの構造やコマンドの知識を増やしたい

教科書

www.lpi.or.jp

システムファイルを見つける、適切な位置にファイルを配置する

f:id:robonchu:20180702212601p:plain

特定のディレクトリをupdatedbの情報更新対象外に設定する際はupdatedb.confに設定を記述する。そのまんま。

updatedbコマンドは、locateコマンドやslocateコマンドを使ってファイルの検索をするための情報データベースを最新の状態に保つためのコマンド。

/etc/updatedb.confの内容例

PRUNEFS="sysfs selinuxfs usbdevfs devpts NFS nfs nfs4 afs sfs proc smbfs cifs autofs auto iso9660 udf"
PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /net /sfs /selinux /udev /mnt/floppy /media"
export PRUNEFS
export PRUNEPATHS
  • PRUNEFS: mountコマンドでマウントする際に指定するファイルシステムの種類

  • PRUNEPATHS: 具体的なパスの指定

pruneは余分なものを取り除くという意味がある

参考: 104.7 システムファイルを見つける、適切な位置にファイルを配置する|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC

ハードリンクとシンボリックリンクを作成・変更する

  • ハードリンクは、実体を共有している

  • 異なるファイル名(リンク名)に同一のiノード番号を割り当てることで実現している

  • 異なるパーティションにまたがってのリンクは、シンボリックリンクを使う

参考: 6.ユーザー管理

ファイルのパーミッションと所有者を管理する

  • 新たに作成されたファイルやディレクトリの所有ユーザーは、作成したユーザーと、そのユーザーのプライマリグループに設定される

  • プライマリグループとは、ユーザが何らかのコマンドを実行する際にグループ権限として参照される一番優先順位の高いグループのこと

  • "ファイルの所有ユーザーを変更できる"のは、rootユーザーのみ

  • "ディレクトリの所有者"が関係するのは、パーミッションと合わせて書き込み可能かどうかについてのみ

  • "ファイルの所有グループを変更できる"のは、rootユーザー or そのファイルを所有しているユーザー

Q: 作成したファイルを他のユーザーにもアクセスさせたいときはどうするの?

A: 所有グループを変更し、適切なパーミッションを与える

例:fileファイルをotherグループに対して読み書き可能にする

$ touch file          fileファイルを作成
$ chgrp other file    fileの所有グループをotherに設定
$ chmod g+rw file     fileのグループパーミッションをrwに設定

参考: 104.5 ファイルのパーミッションと所有者を管理する|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC

ファイルのパーミッションと所有者を管理する

  • umaskの考え方は、すべてのパーミッションが読み書き可能な状態から、umaskの値を引いた値が設定される

  • 設定値は所有者、グループ、その他の順にそれぞれ0から7の整数で表わされる

  • ファイル:666がデフォルト

  • ディレクトリ:777がデフォルト

例:

○ファイルの場合

 666 (rw-rw-rw-)
-002 (-------w-)
-----------------
 664 (rw-rw-r--)

ディレクトリの場合

777 (rwxrwxrwx)
-002 (-------w-)
-----------------
 775 (rwxrwxr-x)

参考: 104.5 ファイルのパーミッションと所有者を管理する|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC

ファイルシステムの整合性を保持する

  • Linuxで標準的に使用されているファイルシステム ext2/ext3 は、ファイルの管理にiノードを使用している

  • iノードの仕組みは、実際にファイルのデータを保管しているデータ領域とは別に、iノード情報を保管するiノード領域が確保されている

  • iノード領域の使用状況は、dfコマンドに-iオプションをつけることで確認できる

例)データ領域の使用状況

$ df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/hda2             19656572  14523320   4134752  78% /
none                    262240         0    262240   0% /dev/shm

例)iノード領域の使用状況

$ df -i
Filesystem            Iノード  I使用   I残り I使用% マウント位置
/dev/hda2            2496960  333530 2163430   14% /
none                   65560       1   65559    1% /dev/shm

例)2KB毎にiノードを割り当てる

mke2fs -i 2048 /dev/hda2

割り当てられるブロックサイズよりも小さいファイルが大量に作成されるような場合には、iノード割当量を変更を検討すべき

参考: 104.2 ファイルシステムの整合性を保持する|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC

パーティションファイルシステムの作成

ファイルシステムジャーナリング機能とは: 突然の電源断など正常なシャットダウン処理が行えなかった際の、再起動時のファイルシステムチェックを効率よく行う仕組み

具体的には、実際の書き込みを行う前にジャーナルに記録を行い、もし異常終了が起きた場合は、ジャーナルの情報に基づいて壊れている可能性がある部分だけをチェックして修復する

ジャーナリング機能を備えたファイルシステムの例↓

参考:

viを使って基本的なファイル編集を行う

Q: テキストファイルの最終行にカーソル移動させるコマンドは?

A: G

  • Go ToのG

  • 10Gと指定すれば10行目へ移動する

参考: viエディタの使い方

プロセスの実行優先度を変更する

  • Linuxは、複数のプロセスを同時に並行して動作させるマルチプロセスのOS

  • ある時点で動作しているプロセスは1つだけで時間を区切って順番にプロセスを切り替えて実行することで、見かけ上複数が同時並行で動作しているように見せている

  • nice値は、重要度はそれほど高くないプロセスには低い優先順位をつけて、他のプロセスの実行を邪魔をしないようにしたりすることで、円滑なプロセス実行を可能にする仕組み

  • nice値は、-20(最高優先)から19(最低優先)までの40段階に分かれており、基本的にデフォルトは中間の0に設定

  • reniceコマンドは、実行中のプロセスのnice値を変更できる

例: PID 2742のnice値を10に変更

renice 10 2742

参考: 103.6 プロセスの実行優先度を変更する|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC

プロセスを生成、監視、終了する

プロセスには、以下の2種類に大きく分けられる↓

  • システム起動時に実行されたり、システム管理者が起動したプロセス

  • システムを利用しているユーザーが実行しているプロセス

ジョブ: 中断されているプロセスや、バックグラウンドで実行されているプロセスのこと.

jobsコマンドを実行することでどのようなジョブが実行されているかを確認することができる

ストリーム、パイプ、リダイレクトを使う

標準入出力には番号がついており、番号指定でストリームを制御することができる↓

0 標準入力

1 標準出力

2 標準エラー出力

例1: 標準エラー出力をファイルに保存したい場合

command 2> error.txt

例2: 標準出力と標準エラー出力を、別々のファイルに出力する場合

command > file.txt 2> error.txt

例3: 標準出力と標準エラー出力を同じファイルに出力する場合

command 1> file.txt 2>&1

&を使って標準出力に標準エラー出力を混ぜる

参考: 103.4 ストリーム、パイプ、リダイレクトを使う|サンプル問題/例題解説|受験対策|IT資格といえばLPI-Japan | LinuC/OSS-DB/HTML5/OPCEL/LPIC

所感

まだまだLinuxシステムについての理解が足りない。。。

一歩ずつ !