- 投稿日:2020-11-17T22:50:43+09:00
Linux パーミッション
【Linux パーミッション】
パーミッション (例: - rwx rw- r--)
左から、
①番目は、ファイルの種類(- : 通常ファイル、 d : ディレクトリ、 l : シンボリックリンク)
②番目は、ユーザ(所有者)に対するパーミッション
③番目は、グループに対するパーミッション
④番目は、その他のユーザに対するパーミッションシンボリックモード、オクタルモード
・シンボリックモード : 文字や記号を用いてパーミッション変更
chmod ①(ユーザ) ②(操作) ③(パーミッション) ファイル名
① u : 所有者、 g : グループ、 o : その他、 a : すべてのユーザ
② + : 許可を与える、 - : 許可を削除する、 = : 許可を設定する
③ r : 読み取り権、 w : 書き込み権、 x : 実行権・オクタルモード : 目的のパーミッションを8進数の数値を使用して変更
①rwx ②rw- ③r--
① ユーザ rwx : 4+2+1 = 7
② グループ rw- : 4+2+0 = 6
③ その他 r-- : 4+0+0 = 4(r : 読み取り権、 w : 書き込み権、 x : 実行権)
(読み取り権 : 4、 書き込み権 : 2、 実行権 : 1、 権限なし : 0)デフォルトパーミッション
ファイル
作成時にアプリケーションが指定するパーミッションは、666(rw- rw- rw-)
umask値は、002(--- --- -w-)
デフォルトのパーミッションは、664(rw- rw- r--)ディレクトリ
作成時にアプリケーションが指定するパーミッションは、777(rwx rwx rwx)
umask値は、002(--- --- -w-)
デフォルトのパーミッションは、775(rwx rwx r-x)余談
少し前に、「755」というアプリが人気だったような気がしますが、パーミッションから名前を思いついたんですかね??
755だと、rwx r-x r-x だから、ユーザは読み取り権、書き込み権、実行権がある。
グループとその他は、読み取り権と実行権はあるけど書き込み権がない?ということなのかな。全然知らないけど。
- 投稿日:2020-11-17T20:45:55+09:00
UNIX ファイルディスクリプタ
- 投稿日:2020-11-17T20:27:02+09:00
Linux 主なパッケージ管理システム
【Linux 主なパッケージ管理システム】
RPM形式
RedHat LinuxやFedora Linux、CentOS等のRedHat系ディストリビューションで採用されている。
rpmコマンド、yumコマンドを利用してrpmパッケージの管理を行う。Debian方式
Debian GNU/LinuxやUbuntu LinuxのDebian系ディストリビューションで採用されている。
dpkgコマンド、apt-getコマンド、apt-cacheコマンドを利用して debパッケージの管理を行う。主なパッケージの形式と管理コマンド
RedHat系
パッケージ形式は、rpm形式
パッケージ管理コマンドは、rpmコマンド
リポジトリを利用したパッケージ管理コマンドは、yumコマンドUbuntu/Debian系
パッケージ形式は、deb形式
パッケージ管理コマンドは、dpkgコマンド
リポジトリを利用したパッケージ管理コマンドは、apt-cacheコマンド、apt-getコマンド
- 投稿日:2020-11-17T17:31:19+09:00
Linuxに関する基礎知識
概要
ITエンジニアになるべくプログラミングの勉強をしておりますが、よく「Linuxの基本は知っておくべき」という情報を目にします。確かにAWSの勉強をする際、「OSはLinuxで良いでしょう」など当たり前に使われています。一度基本は学ばなければこの先厳しいと思い、今回Linuxについて調べました。
参考資料
Linuxとは?初心者でもわかる概要や基礎を解説!
Linux(リナックス)とは?種類や導入メリット、Linuxで出来ることを解説!
以上を参照させて頂きました。
OSのお話になるのでPCパーツのサイトも勉強となりました。Linuxとは
PCを動かすソフトウェアをOS(オペレーションシステム)と呼びますが、Linuxはその一つです。また、OSの中核部のカーネルという部分のLinuxカーネルを指しているという場合もあります。
OSといえばWindows OSやMac OSが有名ですが、その中でもLinux OSの特徴として、オープンソース化されておりカスタマイズができる、サーバー用として多く使用されている点が挙げられます。Linuxの使用例
サーバー構築
Linuxはサーバー用OSとして多く使用されており、レンタルサーバーの初期OSとして選ばれることが増えている。
システム開発
Linuxカーネルをベースとした、Linuxディストリビューションなど多くのシステムが開発されています。
AndroidもLinuxから派生しているOSです。
IoT
組み込みOSとしても使われており、IoTの普及により製品をインターネットにつなげるため、Linuxをカスタマイズし、製品に組み込む使用されています。Linuxの種類
Linuxは二つに分けることができます。
Linuxカーネル
Linuxの中核になる部分でLinux OSを動かす上で必要な部分です。中核になる部分ではありますが、これだけではPCを操作することができません。
Linuxディストリビューション
LinuxカーネルをベースとしてカスタマイズさせたものがLinuxディストリビューションです。たくさんの開発者がLinuxカーネルをベースとしてLinuxディストリビューションを作成されており、多くの派生が生まれています。Linuxディストリビューションの派生
Red Hat系
Red Hat社が提供しているディストリビューションから派生しているものが、Red Hat系です。代表的なものとしてCentOSがあり、サーバー用として活躍しています。
Debian系
ボランティアが中心となって開発されたものがDebian系です。代表的なものはUbuntuが挙げられます。
Slackware系
最も歴史があるSlackwareをベースとしたものがSlackware系です。初期からあるため玄人向けではありますが、安定性、セキュリティ、速度も高いです。シェル
シェルとはOSユーザーのためにインターフェースを提供するソフトフェアです。シェルを使用することでカーネルの様々な処理を行うことができます。
またコマンドを入力することで、操作することができます。代表的なLinuxコマンド
pwd
print working directoryの略で、現在のディレクトリを表示します。$ pwd /Users/namecd
change directoryの略で、指定したディレクトリへ移動できます。$ cd /programing $ pwd /Users/name/programingls
list segmentsの略で、現在のディレクトリの内容を表示します。
-aを足すと隠しファイルを表示することができます。$ ls applications Desktop documents Downloads Library $ ls -a .bash_profile .history applications Desktop documents Downloads Librarymkdir
make directoryの略でディレクトリを作成します。$ mkdir datacp
copyの略で、ファイルをある場所へ移動することができます。$ cp data1.txt datamv
moveの略で、ファイルやディレクトリの移動、名前の変更を行うことができます。$ mv data.txt data $ cd data $ mv data1.txt data2.txtrm
removeの略で、指定したファイルを削除することができます。
削除したものは復元が難しいため、操作の際注意が必要です。$ rm data.txtcat
catenateの略で、ファイルの中身を表示するコマンドです。
ファイルの名前を複数指定することで、ファイル内容を連結し、結果を表示させることもできます。まとめ
参照サイト様の内容が非常にわかりやすく、自分の中で曖昧だったLinuxの基本を理解することができました。
サーバー構築にLinuxはかなりの率で使用されているので、今のうちに慣れていきたいです。
コマンドもこの機会に復習できてよかったです。
AWSなどのパブリッククラウドの勉強にも役立つと思うので、まとめることができてよかったです。
- 投稿日:2020-11-17T14:39:35+09:00
Linux初心者がIoTゲートウェイを触る時に使ったコマンドをメモ
LinuxベースのOSが入ったIoTゲートウェイを触る時によく使うコマンドのメモです。
入門の位置付けなので、それぞれのコマンドのオプションなどの深追いはしていません。ここで挙げていないオプションもたくさんあるので、気になった方は調べてみてください。※できるだけそのまま使えるように、コマンド開始記号は省いています。
端末への接続に関するもの
シリアル接続する
screen {接続先} {接続先端末のボーレート}例えば、ボーレートが115200 bps、接続先が
/dev/tty.usbserial-xxxxxx
の端末に接続したい場合screen /dev/tty.usbserial-xxxxxx 115200接続を終えたい場合は
command + a + k
で セッションを終わらせましょう。セッションが残っていると、再接続の際にうまくいかないことがあります。SSH接続する
ssh {ログインユーザ}@{送信先のIP}例えば、
user1
というログインユーザを利用して、IPアドレス192.168.0.10
の端末に入りたい場合ssh user1@192.168.0.10ユーザーに関するもの
ユーザーを切り替える
rootユーザーに切り替える
- su ←
super user
su
- パスワードが必要です
- デフォルトのパスワード設定は各機器の初期設定やOSによって異なります
例えば、
user1
に切り替えるsu user1パスワードを変更する
passwd
- その後、現在のパスワードを入力(
current
とある場合)- 変更したいパスワードを入力(
Retype
と出た場合はもう一度打つ)実行に関するもの
実行中のプロセスのうちで特定のワードが含まれるものを出力する
- ps ←
process
ps aux | grep {検索したいワード}実行中のプロセスを強制的に終わらせる
kill {終了させたいプロセスの番号}過去の実行コマンドの履歴を出力する
history
過去の実行コマンドから特定のワードが含まれるものを出力する
history | grep {検索したいワード}ファイルに関するもの
ファイル・ディレクトリの一覧表示
- ls ←
list
隠しファイル(
.
始まり)も表示したい時ls -aファイルサイズを単位つきでわかりやすくしたい時
ls -lhオプションは組み合わせられます
ls -lahファイルコピー
ファイルを別の場所にコピーする
cp {コピー元ファイル名} {コピー先ディレクトリ}ファイルの中身を別のファイルにコピーする(別名で保存する)
cp {コピー元ファイル名} {コピー先ファイル名}ファイル検索
全ファイルから、ファイル名に特定のワードが含まれるファイルを出力する
find / -type f -name {検索したいワード}
/
の検索先が全てのディレクトリ(=全てのファイル)を表します- 検索には
*
のワイルドカードを利用します。利用しない場合は、一意のファイル名検索となります- ファイルではなくディレクトリを検索したい場合は、
-type d
にします例えば、ファイル名に
test
が含まれるファイルを出力したい場合find / -type f -name `*test*`全ファイルから、特定の期間に更新されたファイルを出力する
mtime
←modified time
find / -type f -mtime {数字}例えば、現在時刻から三日(72時間)以内に更新されたファイルの場合
find / -type f -mtime -3例えば、現在時刻から三日以上前に更新されたファイルの場合
find / -type f -mtime +3例えば、現在時刻から三日前(72時間前〜96時間前)の間に更新されたファイルの場合
find / -type f -mtime 3全ファイルから、特定の期間にアクセスされたファイルを出力する
atime
←accessed time
find / -type f -atime {数字}例は
mtime
を参考にしてください。全ファイルから、特定の日時にアクセスされたファイルを出力する
find / -type f -daystart -atime {数字}
-daystart
オプションで、1日の始まりを0時とすることができます例えば、三日前の0時から24時の間にアクセスされたファイルを出力する
find / -type f -daystart -atime 3
mtime
の例のような期間指定もできます現在のディレクトリ以下から、ファイル内テキストに特定のワードが含まれるファイルを出力する
grep ./ {検索したいワード} -slr *
-s
オプションでディレクトリの場合の出力(エラー出力)をスキップします-l
オプションでファイル名だけ出力するようにします-r
オプションでディレクトリ内のさらにディレクトリに再起的に検索を行いますあるファイルの中で特定のワードが含まれる列を出力する
grep {検索対象のファイル} {検索したいワード} * -sn
-n
オプションで行数表示させます例えば、
syslog
に出力されたrc.local
の実行に関するログを見たい場合grep /var/log/syslog rc.local * -snファイル転送
手元の端末から別端末にファイルを転送する(SSHログインが必要)
scp {送信したいファイル} {ログインユーザ}@{送信先のIP}:{送信先フォルダ}例えば、
user1
というログインユーザを利用して、IPアドレス192.168.0.10
の端末に入って、そのディレクトリの/home/
以下にファイルtest_script.sh
を置きたい場合scp test_script.sh user1@192.168.0.10:/home/ログファイル
ログファイル名を指定し、ファイルの最終行から遡って10行分のログを表示し続ける
tail -F {コンソールに出力したいログファイル名}
- 途中でログローテートなどによりファイル名が変更された場合は、同名のファイルをもう一度探し、開き直してくれます
- ファイル名変更後も引き続き同じファイルを参照し続けたい場合は、
-F
オプションの代わりに-f
を使います- 行数を指定する場合は
-n
オプションを利用します- コンソールがログ出力で占拠されるので、別ターミナルを開くなどの工夫が必要です
圧縮ファイル
.xz
ファイルを解凍するxz -d {file_name}.xz圧縮されたファイルとは別のファイルとして解凍ファイルを作成する
xz -d {file_name}.xz --keepファイルを
.xz
形式で圧縮するxz -z {file_name}
- オプション指定で別の形式を選べます
元ファイルとは別のファイルとして圧縮ファイルを作成する
xz -z {file_name} --keep
- 投稿日:2020-11-17T13:57:35+09:00
dd の進捗をプログレスバーで見れるようにする
$ brew install pv $ pv /path/to/disk.img | sudo dd of=/dev/disk2 bs=1m 681MiB 0:03:42 [2.26MiB/s] [==> ] 9% ETA 0:36:39
- 投稿日:2020-11-17T13:54:01+09:00
Windows環境にてWSL+Ubuntu+VSCodeで環境構築してみた
はじめに
Windowsを使ってプログラミング学習をこれから始める!って方に向けて簡単に環境構築をやっていけたらなと思い書きました
今回は研究会のみんなにnode.jsでコマンドを叩いて出力結果を表示してほしいと思い、Linux(Ubuntu)導入に走りましたWSLって?Ubuntuって?
WSL
WSLとはWindowsOS上でLinuxの実行環境を実現するサブシステムです。
要するにアプリケーションとしてLinuxを使える!!!!
LinuxもWindowsも1つのパソコンで?!ってのがWSLみたいですね(笑)Ubuntu
UbuntuとはLinuxディストリビューションのOS(オペレーティングシステム)一つです。
Ubuntuはとにかく使いやすい!ということしかあんまりわからず、、(勉強不足というか理解不足なのか、、)
詳しい説明はWikipedia環境構築
手順① Linux用Windowsサブシステム(WSL)を有効にする
Windows上にLinuxディストリビューション(Ubuntu)をインストールする前に、まず、”Linux用Windowsサブシステム”を有効にする必要があります。
・’管理者’としてPowerShellを開き、以下のコマンドを実行します
→左下のWindowsアイコンを右クリックし、「Windows PowerShell(管理者)」をクリックします。Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux・パソコンを再起動
手順② Ubuntuをインストール
・Microsoft Store」を起動し、「Ubuntu」を検索
・「Ubuntu 20.04 LTS」を開く
・入手をクリックで自動でダウンロード開始
・ダウンロード完了通知が来たら、「起動」をクリック
起動したら、下記内容が表示され、ユーザー名とパスワードを入力してインストールを完了!!!Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: user Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Installation successful! To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. user@:~$手順③ Ubuntuの更新
下記コマンドでubuntuを更新。パスワードが聞かれるので、上記入力したパスワードを入力。
sudo apt update sudo apt upgrade手順④ WSL(Ubuntu 20.04 LTS)環境にNode.jsをインストール
・リポジトリ追加
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -・aptでnodejsをインストール
sudo apt install -y nodejs・確認メッセージが来たらYesを選択
・nodejsとnpmがインストールできているか確認node --version npm --version手順⑤VSCodeをインストール
次にVScodeがまだインストールされていない場合はインストールします。
ここで注意ですが、VScodeは必ずWSL側ではなくWindows側にインストールします。手順⑤VSCodeに拡張機能を追加する
次にRemote DevelopmentのためのVScode拡張機能(Remote - WSL)を追加します。
「Install」ボタンをクリックするとVScodeが起動するのでメッセージに従ってインストールしてください。
Remote - WSL
↓公式ドキュメントにもインストール方法あります!
公式ドキュメント
上画像のように左下の緑部分をクリック
すると上画像のように出てくるのでRemote WSL New Windowをクリック
これでVSCodeでWSLを使えるようになっています!
(一枚目の画像の左下の緑の部分みたいにWSLのときはWSL:Ubuntu-20.04と表記されています)Node.jsでコマンド出力させてみよう
・VSCodeの上部に「ファイル・編集・選択・表示・移動・実行・ターミナル・ヘルプ」とあるのでターミナルをクリックして「新しいターミナル」をクリック。
・画面下に現れたのがターミナルです!
以下:ターミナル内で実行Unixコマンドでコマンドを叩いてみよう!!
→ practiceディレクトリを作成
mkdir practice→practiceディレクトリに移動
cd practice→mainというjsファイルをpracticeディレクトリの中に作成
touch main.jsこれで準備は完了!
入力結果を表示させよう
Open folderからさっき作成した「lesson」を選択
main.jsのファイルがあるのでその中でconsole.log('Hello Tech.Uni')と入力して、保存!!!(忘れがちだから気をつけてね(笑))
今度はターミナルにnode main.jsと入力してEnter!!!!
下の画像のようになれば完璧です
お疲れさまでした!
参考文献
Windows 10 用 Windows Subsystem for Linux のインストール ガイド
Visual Studio Codeの「Remote – WSL」がめちゃくちゃ便利
https://syobon.jp/blog/2019/11/04/visual-studio-code-remote-wsl/
- 投稿日:2020-11-17T11:16:11+09:00
Linuxとは
今回は特出して書くことは無いかなって思ってます。
Linuxのインストールなどを行いました。
PowerShellを使っての直接のダウンロードインストールは面白かったです。
改めてマウスって便利なんだなって思いました笑今回は準備がメインだったため次回また頑張りたいと思います!
- 投稿日:2020-11-17T10:17:49+09:00
公的空間のイベント混雑状況をレーザー距離計で可視化する
概要
- 公的空間で行われるマルシェの混雑状況を2日間に渡りカウントし可視化する実験を試みた
- 通行量、滞在人数、滞在時間を計測するには入り口、出口を絞る必要がある。今回は会場のあるポイントの人の通過量を混雑度と見なす
- イベントでの入場者数は貴重なデータである。無人でカウントがどこまでできるのかを試してみる
- 広島駅北口エリアのエリアマネジメントを行う、エキキタまちづくり会議 (https://ekikita.jp) にご協力頂いた。
【参考】
エリアマネジメントについて(国土交通省)
https://www.mlit.go.jp/common/001059393.pdf
地方創生 まちづくり - エリアマネジメント - (内閣官房まち・ひと・しごと創生本部事務局)
https://www.kantei.go.jp/jp/singi/sousei/about/areamanagement/areamanagement_panf.pdf用意するもの
- Raspberry Pi3 Model B (4でもおそらく大丈夫)
- Raspberry Pi用のケース
- Raspberry Pi用のヒートシンク、ファン
- Raspberry Pi3 Model B B+ 対応 電源セット(5V 3.0A)
- vl53l1x 超音波距離センサー (最大計測範囲 4m)
- LED,330Ωの抵抗
- 100円ショップの三脚
- 100円ショップで購入したAirPodsのケース (センサーのカバーとして使用)
準備
- RaspberryPiのセットアップをしWifi接続できるようにしておく。
https://www.raspberrypi.org/downloads/- Ambient(IoTの可視化サービス)のライブラリが使用できるようにしておく。
- Ambientにてダッシュボードを作成し、チャネルIDとライトキーを取得しておく。
https://ambidata.io/refs/python/- vl53l1xのPython用ライブラリを使用できるようにしておく
https://github.com/pimoroni/vl53l1x-python組み立て
プログラミング
- 汎用のライブラリを使うためPython3を使いプログラミング
- git cloneしたライブラリのexamplesフォルダにあるdistance.pyを改変して使用
- レーザー距離センサーの値をloopして読み取り、しきい値を下回った数を通過数としてカウント
- カウントする毎にGPIOピンに接続したLEDを点灯/消灯させる
- 5分毎のカウント数をAmbientに送信し可視化する
distance.py#!/usr/bin/env python import time import sys import signal import VL53L1X import ambient import datetime import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(25, GPIO.OUT) #LED点滅用 from time import sleep print("""distance.py Display the distance read from the sensor. Uses the "Short Range" timing budget by default. Press Ctrl+C to exit. """) ambi = ambient.Ambient(xxxxx, 'xxxxxxxxxxxxxxxx') # ←ambientのチャネルIDとライトキー count = 0 sndcnt = 0 # Open and start the VL53L1X sensor. # If you've previously used change-address.py then you # should use the new i2c address here. # If you're using a software i2c bus (ie: HyperPixel4) then # you should `ls /dev/i2c-*` and use the relevant bus number. tof = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29) tof.open() # Optionally set an explicit timing budget # These values are measurement time in microseconds, # and inter-measurement time in milliseconds. # If you uncomment the line below to set a budget you # should use `tof.start_ranging(0)` tof.set_timing(66000, 70) tof.start_ranging(0) # Start ranging # 0 = Unchanged # 1 = Short Range # 2 = Medium Range # 3 = Long Range running = True def exit_handler(signal, frame): global running running = False tof.stop_ranging() print() sys.exit(0) # Attach a signal handler to catch SIGINT (Ctrl+C) and exit gracefully signal.signal(signal.SIGINT, exit_handler) while running: distance_in_mm = tof.get_distance() print("Distance: {}mm".format(distance_in_mm)) now = datetime.datetime.now() minute = '{0:%M}'.format(now) second = '{0:%S}'.format(now) print(minute) print(second) if distance_in_mm < 1300: # カウントするか否かのしきい値(mm) count += 1 GPIO.output(25, GPIO.HIGH) # LED点滅 sleep(0.5) GPIO.output(25, GPIO.LOW) sleep(0.5) if int(minute) % 5 == 0 and int(second) == 0: if sndcnt < 1: r = ambi.send({'d1': count}) if r.status_code != 200: continue print(count) print("***sended***\n") count = 0 sndcnt += 1 else: sndcnt = 0 time.sleep(0.1)現地に設置した様子
結果
- イベントの開催時間を通して正常なカウントをすることはできなかった。
- 調整設置場所、しきい値の変更など現地で調整したが、安定したカウントはできなかった。
赤背景:データ取得されていた部分
青背景:調整中
グレー背景:イベント開催時間外
不具合内容
- レーザー距離計の値が安定しない。対象物の素材(石、木、紙)や表面の凸凹により安定度が変わってしまう。
- 1人の通過で2〜3人分とカウントされてしまう。(検知した場合のwaitを入れてある程度改善した)
- 明るさ、日光が当たらない場合と当たらない場合での安定度の違いが大きい模様。
- 数時間に一度、ambientのapi URLに対して、HTTP MaxRetryErrorが出る。
自宅Wifiでは10時間以上稼働していたため、現地でお借りしたWifi設備による可能性が高い。今後に向けて
- コロナ渦で屋内イベントの開催が難しい状況であるが、まずは屋内で確実にカウントできるように調整を続ける
- 屋外でカウントが難しい問題は、他の種類のセンサーを検討することも考える
- ToFタイプの距離計を使う場合は安定して反射できる対象物を用意する
- 現地のWifi環境で予め長時間接続に問題がないかテストが必要