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があればそのWIFIのSSIDとパスワードを設定
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が見えるはず!!
コメント
おまけ
sshのホスト名を変更する方法
$ sudo -e /etc/hostname 変更する $ reboot
再起動するとssh -X pi@変更後のホスト名.localで接続可能
udevについて
有線LANを接続する方法
USB OTG
名前解決
参考
Raspberry Pi Zero W で遊んでみる(0)~インストール・設定~
やりたいこと
raspberry pi zero w のインストールや設定方法をまとめる
使っているバッテリーはこれ👇でとても小さい
ポータブル充電器02 通販 | au オンラインショップ | スマホ・携帯電話向けオプション品
もっと小さいバッテリーを知ってる方いたら教えてください> <
pin配置
OSダウンロード
OSの書き込み
Etcher <- 簡単おすすめ
- うまく行かない時はカードリーダを交換してみよう
Ubuntuで、RaspberryPiのOSをSDカードに書き込む | Hornet|静岡拠点のWeb、ホームページ制作
設定教科書
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
動いた〜!
コメント
のむむさんありがとうございますm( )m
数学のお勉強(1)~クオータニオン~
参考:クォータニオンの回転補間:掲示板:シムダンス「四次元能」|Beach - ビーチ
やりたいこと
クオータニオンを理解する
教科書
↓ 素晴らしくわかりやすい。
回転行列の問題
クオータニオンの利点
ジンバルロックがない
計算負荷が低い
2つの回転同士のスムーズな補間が表現できる
x,y,z軸に限らない任意の回転軸での回転が簡単にできる
複素数について
虚数単位
i ** 2 = -1
複素数
a + b * i
複素平面
参考: 複素平面 - 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は虚軸
基底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での電気オン。。。
電動カーテン自動化による太陽光で起きる作戦
ハマりポイント
まさかの購入した電動カーテンのリモコンが赤外でなく、Nature Remo使えず...
スイッチボットで物理的にリモコンボタンを押すことに(泣)
構成
IFTTTのタイマー機能で、毎朝7:00にswitch link に信号を送り、switch botでニトリの電動カーテンの無線リモコンの開きボタンを物理的に押すという無理やり構成( ̄ー ̄)
そして、コンセント周りの配線…
今後
毎朝、目覚ましをかけずに太陽光で起きれるか実験⚗
いちお寝坊防止のために、
7:00にカーテンオープン by IFTTT & switch link !
7:15に電気オン by IFTTT & Nature Remo !!
7:30に目覚まし by iphone !!!
それではおやすみなさい💤
画像処理についてまとめメモ
やりたいこと
画像処理の大事な内容について箇条書きでまとめ
教科書
まとめメモ
カメラ応答関数:カメラへの入射光強度を入力として、画素値を出力とする関数
光ショットノイズ:受光素子に到達した光子数に比例して出力電圧に含まれるゆらぎの標準偏差
暗時ノイズ:受光素子に到達した光子数に依存せずに生じるノイズの総称で暗電流ノイズや読み出しノイズなどを含む
モスキートノイズ:元画像の高周波の成分が失われるようなノイズ
フリッカ:動画において各フレームで明るさが一定でない現象
ガウシアンフィルタ:正規分布型の重み係数をもつ。
バイラテラルフィルタ: ガウシアンフィルタを改良して、「中心画素からの距離のみで決めていた重み」を「中心画素の画素値と他の画素値の離れ方も含めた重み」に変更したもの
ノンローカルミーンフィルタ:テンプレートマッチングのように周辺画素を含めた領域が、注目画素の周辺領域とどれくらい似通っているかによって重みを決定するもの
-
- ガウシアンフィルタからのラプラシアンフィルタでノイズを減らしつつもエッジを強調できる
鮮鋭化フィルタ:元画像をそのまま出力するフィルタからラプラシアンフィルタを引いたもの
ガボールフィルタ:ある特定の方向の周波数成分を検出するフィルタ
LoGフィルタ: ガウシアン分布のラプラシアン
ゼロ交差:値が生から負へ、負から正へ変化する間の0になる位置。ゼロ交差の点をつなげると閉曲線になる
点拡がり関数:劣化過程を表す空間フィルタ
歪曲収差:ピントがしっかり合致していて色のにじみもないのに、映像が歪んで見えてしまうこと
被写界深度:レンズのピント調整をした時に十分にピントがあっていると判断できる距離
平面パノラマ: 複数の画像を平面に投影しながらつなぎあわせたもの。直線性は維持。
円筒面パノラマ:円筒面に投影したもの。直線性は維持されない。
球面パノラマ:球面に投影したもの。直線性は維持されない。
フレーム間差分:二枚の差分画像を用いて、論理積を求めることで移動領域だけを抽出する
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
色の順番:青、シアン、赤、黄色、緑、青緑、青
- ラプラシアンフィルタは以下のように表すことができ、負の値にもなるし、同じ色が多い場合、0付近に値が集中する
0 | 1 | 0
1 | -4| 1
0 | 1 | 0
バイリニア補間:隣接4画素を頂点とする正方形の下底と上底それぞれについてx方向で補間を行い、得られた2つの値を用いて、y方向に線形補間を行う
オイラー数 = 連結結合の個数 - 穴の個数は
市街地距離:
ユークリッド距離:
チェス盤距離:横方向と縦方向の移動距離の大きい方の長さ
以下、赤:市街地距離、緑:ユークリッド距離、青:チェス盤距離
- マハラノビス距離:データの各方向への散らばり具合まで考慮した「データ群からの距離」 -> sqrt( (a-b)2 / delta2 )
参考:マハラノビス距離の意味を2次元の場合で理解する - 具体例で学ぶ数学
バンドル調整:たくさんの画像の対応点を利用して、各画像のカメラモーションと各対応点の3次元位置を更新する
テンレートマッチングの演算回数: 減算、絶対値、加算の三回
SIFT: http://www.vision.cs.chubu.ac.jp/cvtutorial/PDF/02SIFTandMore.pdf
FAST: 注目画素の周囲16画素の画素値が注目画像より明るい、もしくは暗い画素が一定の画素以上連続する場合はコーナーとする。
Cannyエッジ検出:
2次元DCT: 離散コサイン変換
mod M ; Mで割った余り
チェイン符号化: 線画像を、画素の連なりに注目して記述する可逆符号方式
ハフマン符号化: 画像の種類によらない符号化方式。符号割り当ては、濃度やランレングスといった情報源シンボルに符号を割り当てる作業であるが、生起確率の高い情報源シンボルほど短い符号を与えると、符号化に必要な平均の符号長を最小とすることができる。
JPEG2000方式:二次元離散ウェーブレット変換と算術符号化が用いられる
立体角:
ステラジアン:立体角の大きさを表わすSI補助単位。記号 sr 。1 sr は球の半径の2乗に等しい面積をもつ球面上の面分が球の中心に対してつくる立体角。
双方向反射率分布関数(BRDF):入射光の方向と出射光の方向に依存する四次元の関数。反射率を一般化したもので、出射光の放射輝度と入射光の放射照度の比として定義される。
ディザ法:黒と白つまり輝度が0と255の色だけを用いてハーフトーン(中間色)を表現しようという技術で,2値しか出力できない表示装置でなんとかグレースケールを表現しようとしたもの。グレースケールの画像を小さいブロックに分割し,それにマスクを掛けて閾値を越えたピクセルを白,下回ったものを黒というように処理。
デジタルカメラのゲイン:ゲインを下げるとノイズが減り、全体的に暗く撮影される
1画素のモーションブラーの計算: 対象物との距離 / 焦点距離 * 1画素あたりの大きさ 1
ライトフィールドカメラ: 被写体からの光線を、三次元的な情報も含めて記録するカメラ。イメージセンサーの前面にマイクロレンズアレイを配し、光線の明暗だけでなく、光線の入射方向に関する情報を記録する。
ダイナミックレンジ: 観測可能な最大、最小明るさの比によって定義
ノイズのない画像の推定:事後確率の最大化がある。事後確率は尤度と事前確率の積に比例する。
残差逐次検定(SSDA)法: 相違度の加算の途中で残差がしきい値を超えたら加算を打ち切ることで、全体の計算量を減らしている。
ワールド座標系X = Z / f(焦点距離) * u
基本行列E = D(歪対称行列)* R(回転行列)。Dからはカメラの相対的な平行移動ベクトルがわかる。
ネガポジ変換でエントロピーは変化しない
著作隣接権: 著作物の創作者ではないが、著作物の伝達に重要な役割を果たしている実演家、レコード製作者、放送事業者、有線放送事業者に認められた権利
ガンマ補正:ガンマ分の1乗のガンマが1より小さい時は暗くなり、大きい時は明るくなる
リギング:周波数領域において、不連続にフィルタリングを行うとエッジに対して波打つような濃淡の繰り返しが発生する
ウィーナフィルタ:復元画像と原画像の誤差が最小になるように定義されたフィルタ
オープニング:背景のノイズを除去
クロージング:画像内のノイズを除去
細線化では以下の条件を満たしているときに白画素にする
注目画素が境界上にある黒画素
白画素に変更しても連結性が保持
線分の端点でない
ミーンシフト:近傍の点群の平均位置に移動を繰り返して、極大点を求める方法
スネーク:閉曲線が縮んでエッジの境界に張り付くことにより対象物の領域を抽出する方法
JPEGの圧縮率を高くした時:隣り合うブロックの境界が目立つブロック歪みが生じる。また、はっきりとした輪郭の周りにモスキートノイズも現れる。
モスキートノイズ:デジタル画像圧縮画像(特にJPEG静止画およびMPEG動画)において輪郭部分や色の変化の激しい部分で起こる画像の乱れ
オーレンネイヤーモデル:拡散反射モデル。
フォンモデル:鏡面反射モデル。物理的に正確なモデルでない。
トランススパロウモデル:鏡面反射モデル。物理的に正確性を求めたモデル。
所感
画像処理、幅が広いので大変だぁ。。。光や色の特性や座標変換、フィルターや著作権などなど、、、
一歩ずつ!!!
Linuxのお勉強(2)
- やりたいこと
- 教科書
- システムファイルを見つける、適切な位置にファイルを配置する
- ハードリンクとシンボリックリンクを作成・変更する
- ファイルのパーミッションと所有者を管理する
- ファイルのパーミッションと所有者を管理する
- ファイルシステムの整合性を保持する
- パーティションとファイルシステムの作成
- viを使って基本的なファイル編集を行う
- プロセスの実行優先度を変更する
- プロセスを生成、監視、終了する
- ストリーム、パイプ、リダイレクトを使う
- 所感
やりたいこと
linuxの構造やコマンドの知識を増やしたい
教科書
システムファイルを見つける、適切な位置にファイルを配置する
特定のディレクトリを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は余分なものを取り除くという意味がある
ハードリンクとシンボリックリンクを作成・変更する
参考: 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
ファイルシステムの整合性を保持する
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
パーティションとファイルシステムの作成
ファイルシステムのジャーナリング機能とは: 突然の電源断など正常なシャットダウン処理が行えなかった際の、再起動時のファイルシステムチェックを効率よく行う仕組み
具体的には、実際の書き込みを行う前にジャーナルに記録を行い、もし異常終了が起きた場合は、ジャーナルの情報に基づいて壊れている可能性がある部分だけをチェックして修復する
ext3ファイルシステム: 、ext2にジャーナリング機能を追加したもの. 相互に互換性があるため、比較的使用しやすい.
ReiserFS: Hans Reiserによって作成された、古典的なB-ツリーアルゴリズムの変種を使ったファイルシステム.ジャーナリング機能が最大の特徴.
XFS: データベース技術を応用したジャーナリングファイルシステムを用いてファイルシステム内の変更履歴を保存し、ファイルシステムが破損した場合に高速に修復できるという特徴. また、64ビットファイルシステムを採用し、最大1800TB(テラバイト)のディスクスペース、最大900TBのファイルも扱うことができる.
参考:
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システムについての理解が足りない。。。
一歩ずつ !