- 投稿日:2021-10-22T17:01:16+09:00
bashの変数の展開がいつ行われるのか? あれ、代入済みなのに反映されない?
bashの変数の展開がいつ行われるのか? あれ、代入済みなのに反映されない? bashの変数の展開やコマンドの実行の順番の解釈の理解になれば幸いです。 遭遇した問題 $ TEST_A=abc echo $TEST_A 果たして、これは何が出力されるでしょうか?もともとTEST_Aという変数は未定義だったとします。 答え: $ TEST_A=abc echo $TEST_A (何も出力されない) あれ?abcじゃないの?と数人で混乱していました。 なにが起こっていたか bashのparserが先に変数TEST_Aを展開するため、TEST_A=abcとは関係なく。何も出力されていませんでした。 そもそもシェルで変数が展開されたあとにコマンドが頭から順番に実行されるため、実質的に $ TEST_A=abc echo をしていたわけですね。したがって $ TEST_B=hoge $ TEST_B=abc echo $TEST_B の場合にはhogeが出力されるわけですが、実質的には $ TEST_B=hoge $ TEST_B=abc echo hoge を実行していたわけです。 確認問題 問題 test.pyを以下の内容で作成します(Python3.6以上)。 import os import argparse parser = argparse.ArgumentParser() parser.add_argument('--arg') args = parser.parse_args() print(f"{args.arg} {os.environ['TEST_A']}") このとき、以下を実行するとなにが実行されるでしょうか? $ TEST_A=foo $ TEST_A=bar python test.py --arg=$TEST_A 答え 答えを開く $ TEST_A=bar python test.py $TEST_A foo bar 解説 arg=$TEST_Aのほうの$TEST_AはTEST_A=barが実行される前にこの1行がすべて展開されるのでfooになっています。一方、os.environ['TEST_A']のほうのTEST_Aは、このコマンドが冒頭から実行されるためTEST_A=barが実行されているために、Pythonが実行されるときにはbarに書き換わっています。この1行を展開されるときには当然test.pyの内容は展開されていないためにこのようなことが起きているようです。 参考 How does one properly assign temporary Bash variables on a per-command basis?
- 投稿日:2021-10-22T12:15:13+09:00
Windowsを使わずにIntel製のSSDのFirmwareを更新する方法を探る
Linux環境でSSDのFirmwareを更新したい メインのノートパソコンCF-B11には、Intel製のSSD(Intel 330 Series)の60GBを使っているのですが、これがよくプチフリという状況を引き起こします。故障が近いのかも知れませんし、別の原因が有るのかも知れませんが、最近のSSDではコントローラーが改善されて起こりにくいらしいです。そこで、SSDのFirmwareを更新したいと思ったのですが、いまはWindows機がなく、Ubuntuしか使えないので、Linux環境で更新するにはどうすれば良いのか調べてみました。 ちなみにS.M.A.R.T情報が以下のコマンドを利用することで見られます。 使うにはsmartctlコマンドが使えるようにインストールが必要です apt経由でインストールできます sudo apt-get install smartmontools ドライブのS.M.A.R.T情報を見る sudo smartctl -i /dev/sda こちらが出力結果。 smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.124-99] (local build) Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Intel 330/335 Series SSDs Device Model: INTEL SSDSC2CT060A3 Serial Number: CVMP*************AGN LU WWN Device Id: 5 001517 bb28f9066 Firmware Version: 300i User Capacity: 60,022,480,896 bytes [60.0 GB] Sector Size: 512 bytes logical/physical Rotation Rate: Solid State Device Device is: In smartctl database [for details use: -P show] ATA Version is: ACS-2 T13/2015-D revision 3 SATA Version is: SATA 3.0, 3.0 Gb/s (current: 3.0 Gb/s) Local Time is: Fri Oct 22 11:20:48 2021 JST SMART support is: Available - device has SMART capability. SMART support is: Enabled Firmwareが300iになっていますが、コレを最新に更新したいというわけです。 解決策はある 早速調べてみると、Intel® Memory and Storage Tool CLI (Command-Line Interface) というのが有るらしいです。GUIもありますが、これはWindows専用らしいです。そこのHPを見ているとOSindependentということで、USBメモリとかCDイメージに焼いて使えるものも見つかりました。 こちらは、Intel® Memory and Storage Tool CLI (Command-Line Interface) こっちは、イメージとしてブート可能な、Intel® SSD Firmware Update Tool さっそくやってみる 今回は既にOSが動いているので、上のリンク先にあるIntel® Memory and Storage Tool CLI (Command-Line Interface)を使ってアップデートを試みてみます。 CLIなのにこのzip 500MB近くある、正気とは思えないレベルの巨大ファイルとなっています。intel側のサーバー回線は超速い(のか?1.0MB/s)のでダウンロードは結構スイスイ出来ましたが、モバイル環境だとキツイかも。ブータブルイメージだと110MBなのでそっちが良いかも知れません。いつでもフィルムウェア更新できるようにCD作って用意していても良いかも知れませんね。しかしながら、とりあえず今回はUbuntu環境からやってみます。 そういうわけで、Intel_MAS_CLI_Tool_Linux_1.10-v2.zipというファイルをダウンロードしてきましたので、これを解凍します。 unzip Intel_MAS_CLI_Tool_Linux_1.10-v2.zip -d intelmas zipの中身をintelmasというフォルダに解凍しました。 Archive: Intel_MAS_CLI_Tool_Linux_1.10-v2.zip inflating: intelmas/CLI-Intel_MAS_Tool_Install_Guide-Public-342329-005US.pdf inflating: intelmas/CLI-Intel-MAS-1.10-User-Guide-Public-342245-011US.pdf inflating: intelmas/CLI-Intel-MAS-1.10-v2-Release-Notes-342335-013.pdf inflating: intelmas/intelmas_1.10.155-0_amd64.deb inflating: intelmas/intelmas_1.10.155-0_i386.deb inflating: intelmas/intelmas-1.10.155-0.i386.rpm inflating: intelmas/intelmas-1.10.155-0.x86_64.rpm inflating: intelmas/NSG_SoftwareLicenseAgreement_Commercial Use.pdf 中身はこんななっていました。 CF-B11は64bitでこのパソコンはdebian系のLinuxなので、必要なファイルはintelmas/intelmas_1.10.155-0_amd64.debです。 と言うわけで、すぐにインストール debパッケージをインストール cd intelmas sudo dpkg --install intelmas_1.10.155-0_amd64.deb コレでインストール完了です。さっそく使ってみましょう IntelMASを使ってSSDの情報を見る intelmasで見えるSSDの情報 $ sudo intelmas show -intelssd - 0 Intel SSD 330 Series CVMP217504CG060AGN - Capacity : 60.02 GB DevicePath : /dev/sg0 DeviceStatus : Healthy Firmware : 300i FirmwareUpdateAvailable : The selected drive contains current firmware as of this tool release. Index : 0 MaximumLBA : 117231407 ModelNumber : INTEL SSDSC2CT060A3 PercentOverProvisioned : 100.00 ProductFamily : Intel SSD 330 Series SMARTEnabled : True SectorDataSize : 512 SerialNumber : CVMP********** 先程のS.M.A.R.T.で見えるものとほぼ同じようなものが見えています。 このCLIプログラム恐ろしいくらい機能がついていまして、これだけで相当遊べそうです。非常に楽しいプログラムです。使い方はpdfに書かれていますが、なにかいろんなことができそうですよ。これは調べて正解でした。SSDのフォーマットやSSDの設定の変更?も出来るらしいです。今回はとりあえずfirmwareのupdateだけが目的なのでそれを挑戦してみます。 Firmwareのupdate Firmwareの更新 $ sudo intelmas load -intelssd 0 WARNING! You have selected to update the drives firmware! Proceed with the update? (Y|N): Y Checking for firmware update... - Intel SSD 330 Series CVMP217504CG060AGN - Status : The selected drive contains current firmware as of this tool release. 最新版でした。といわけで、今回の行動は無駄に終わりましたが、このintelmasという面白いプログラムのことが知れました。 今回のSSDでは対応してませんでしたが、ドライブの最適化(-optimizer)とか、-selftestとかいろいろいなオプションが指定できます。面白い使い方がありそうなので覚えておいて損はなさそうな感じです。 CLIからintelのSSDの情報がいろいろ取得できるintelmasというものの紹介でした。ブート版も面白そうです。 追記ブート版を使ってみる DVD-Rでやってみてたんですが、ドライブがおかしくなっているのか焼き込みは出来ても、ロードがうまくいかなかったので、usbメモリでやってみました。 結果としては同じメッセージがでて最新版だから更新必要なしと出ました。ブート版の方でも同じことが出来るようです。状況に合わせて選択すればOKのようです。
- 投稿日:2021-10-22T08:52:11+09:00
【Linux】シェルスクリプトファイル実行権限付与が Chmod 755 (ファイル名)な理由を権限周りの基礎から解説
はじめに どうも、27歳未経験からエンジニア転職を目指しているもきおです。 Linuxにおいて、シェルスクリプトファイルの実行権限を事前に付与させないとファイルを実行する際に(今回は分かりやすいように適当に名前を付けたkengen.shというシェルスクリプトファイルを実行しています) $ ./kengen.sh -bash: ./kengen.sh: Permission denied 実行権限がないんで実行できませんよって言われます。 そこでGoogle先生の出番です。 実行権限付与するコマンドを調べた結果、Chmod 755 (ファイル名)で権限付与できるとのこと。 そんな簡単なのね、ひゃっフォー!という勢いでそのまま調べたものを活用。 $ chmod 755 kengen.sh $ ./kengen.sh $ Hello ← 実行結果 無事実行でき、シェルスクリプトファイルに記載していたHelloを表示させることができました。 しかしここでなんで実行権限付与が755なんだ?と思うようになりました。 そこでLinuxの実行権限を改めて学習しなおしたので、この記事に書き記しておきたいと思います。 シェルスクリプトに関してはこちらの記事を読めば理解できてくると思うのでこちらも併せてお読みいただけますと幸いです。 こんな人に読んで欲しい ・Linuxコマンドについて学び始めた方 ・Linuxを実務レベルで今後使っていきたい方 そもそもなんで実行権限が必要になるの? なぜLinuxにおいて実行権限が必要になるのでしょうか? それはそもそもLinuxは一つのマシンへ複数のユーザーが同時にログインして操作することを前提として作られているためです。開発はチームでやるのが基本なのでLinuxもそこら辺を考慮して作られているわけなんですね。 まぁ当たり前のことではありますが、個人開発をしているとそこら辺を考慮して作成することが意外とできないもんですよね。 まずは実行権限を確認してみる さて、話は戻りまずはファイルの実行権限を確認してみましょう。 権限確認はls -l (ファイル名)で確認できます。 $ ls -l kengen.sh $ -rwxr-xr-x 1 (ユーザー名) staff 13 10 22 06:20 kengen.sh ここで注目していただきたいのは最初の部分の-rwxr-xr-x 何やらわけわかんない文字列みたいなのが出てきましたね。 分解してみていきましょう。 まず先頭の文字のーはファイルタイプを表しています。今回はーと表示されており、これは通常ファイルを示しています。ちなみに先頭文字がdであればディレクトリ、lであればシンボリックリンクを示しています。 後ろの9文字rwxr-xr-xはファイルモードと呼ばれここでファイルの権限が表示されています。 この9文字はrwx、r-x、r-xという3文字ごとに一つのブロックになっており、それぞれが「オーナー」、「グループ」、「その他ユーザー」に対する権限を示しています。 さて、このr、w、xは一体何を表しているのでしょうか? 権限記号とその意味 r,w,xといった記号はファイルへの操作権限の種類を示しています。 操作は「読み取り」、「書き込み」、「実行」と3種類ありそれぞれ「r」「w」「x」の記号で表現されます。 記号 意味 r 読み取り(read) w 書き込み(write) x 実行(execute) よって先程の-rwxr-xr-xの権限一覧表は ユーザー種別 読み取り 書き込み 実行 オーナー(rootユーザー) 許可 許可 許可 rootグループに所属するユーザー 許可 禁止 許可 その他のユーザー 許可 禁止 許可 となります。 少しLinuxの操作権限に関して理解が深まってきましたね。 さて、次から権限の追加方法を解説していき、実行権限付与が755である理由に迫っていきたいと思います。 権限変更方法 chmod ファイルやディレクトリの権限を設定するにはchmodを使用します。 書式 chmod (ugoa)(+-=)(r w x) (ファイル名) 例 $ chmod u+w kengen.sh 初めの「ugoa」はどのユーザーに対する権限を変更するのかを指定しています。 それぞれの記号の意味は以下 記号 意味 U オーナー g グループ o その他ユーザー a ugo全て 次の「+-=」は記号から推測できるように、「+」は権限の追加「-」は権限削除、「=」は指定した権限と等しくする。 よって先程の chmod u+w kengen.shはオーナーの書き込み権限を追加するという実行コマンドになります。 遂に755の核心に迫る お待たせしました。やっと755の謎を解明していきたいと思います。 これらの権限付与は数値によって付与することが可能です。 意味 数値 読み取り(r) 4 書き込み(w) 2 実行(x) 1 これらの数値を足した値を「オーナー」「グループ」「その他のユーザー」の3つのグループの順に並べて記載することによりそれぞれのグループごとに権限を付与する事が可能です。 例えば読み取り、書き込み、実行権限全てを付与したい場合は4+2+1=7となります。 読み取り、実行権限のみであれば4+1となります。 したがってrwx r-x r-xは 7 5 5となる訳なんですね。 $ ls -l kengen.sh $ -rw-r--r-- 1 (ユーザー名) staff 13 10 22 06:20 kengen.sh ←実行権限なし $ chmod 755 kengen.sh $ ls -l kengen.sh $ -rwxr-xr-x 1 (ユーザー名) staff 13 10 22 06:20 kengen.sh ←実行権限付与された! あと、よく使われるのは 644らしいです。 $ ls -l kengen.sh $ -rwxr-xr-x 1 (ユーザー名) staff 13 10 22 06:23 kengen.sh ←実行権限あり $ chmod 644 kengen.sh $ ls -l kengen.sh $ -rw-r--r-- 1 (ユーザー名) staff 13 10 22 06:22 kengen.sh ←オーナー以外読み取り専用 ユーザーにファイルは見られても良いが、編集や削除をさせないようにする時によく使うらしいですね。 あとがき いかがだったでしょうか? 今回は実行権限付与の際に使用した755の謎の数値の核心に迫りつつ、Linuxの権限周りを解説してみました。 実際企業だと必ずこういった権限管理を行なって運用されているんでしょうね。 自分自身も改めてセキュリティ意識を高め、これからも学習、実装していきたいと思います。 この記事が少しでも良かったと感じていただけましたらLGTMポチッと押していただけますと幸いです。 ここら辺の知識に対し良さげな記事を記載しておきます。
- 投稿日:2021-10-22T07:46:20+09:00
xubuntu20.10 to 21.10
お久しぶりでございます。 いよいよ寒くなってまいりました。 さて本日は、長らくupgrade を保留していたxubuntu 21.10 が発表されたとのことで 20.10 からupgrade 一晩かかってupgrade しました。 実は 20.10 は直には 21.10 へupgradeできません。 一度 20.04 へupgradeしなければ・・・ 21.10のFileValue は3Gほど・・・ 迷いましたが格安シムの通信量が余っていたので コマンドでupgradeしてみましたが 通信量が 21.04 へが1.5G 21.10 へが1.5G 合計で3G ISO でダウンロードしたほうがメディアが作れる点で有利 なんてぇこったい! という残念な結果でした。 ではでは! 風邪などお召になりませんように・・・
- 投稿日:2021-10-22T07:46:20+09:00
xubuntu upgrade 20.10 to 21.10
お久しぶりでございます。 いよいよ寒くなってまいりました。 さて本日は、長らくupgrade を保留していたxubuntu 21.10 が発表されたとのことで 20.10 からupgrade 一晩かかってupgrade しました。 実は 20.10 は直には 21.10 へupgradeできません。 一度 20.04 へupgradeしなければ・・・ 21.10のFileValue は3Gほど・・・ 迷いましたが格安シムの通信量が余っていたので コマンドでupgradeしてみましたが 通信量が 21.04 へが1.5G 21.10 へが1.5G 合計で3G ISO でダウンロードしたほうがメディアが作れる点で有利 なんてぇこったい! という残念な結果でした。 ではでは! 風邪などお召になりませんように・・・
- 投稿日:2021-10-22T02:11:09+09:00
Linuxでもバーチャル背景を実現する
環境 Arch linux ハードオフで拾ってきたジャンクのWebカメラ Linux-Fake-Background-Webcamを導入する fake-background-webcam-gitをAURからダウンロードしてビルド・インストールする。 v4l2-loopbackが入っていなかったら入れる。 お好みのファイルに以下のコンフィグを記述。 解像度などはv4l2-ctl -d /dev/video0 --allなどして適宜調整する。 sudo modprobe v4l2loopback devices=1する。 sudo python /usr/lib/fake-background-webcam/fake.py -c (コンフィグファイルの絶対パス)で起動する。 お好みのアプリケーションでバーチャルカメラの設定をする。 楽しむ。 # https://pypi.org/project/ConfigArgParse/ #Set real webcam width width=640 #Set real webcam height height=480 #Set real webcam FPS fps=30 #Set real webcam codec codec='MJPG' #Set real webcam path webcam-path="/dev/video0" #V4l2loopback device path v4l2loopback-path="/dev/video2" #Disable background image and blur the real background #no-background=true #Background image path, animated background is supported. #background-image=background.jpg background-image=/var/lib/fake-background-webcam/default/background.jpg #Tile the background image #tile-background=true #The gaussian bluring kernel size in pixels #background-blur=21 #The fraction of the kernel size to use for the sigma value (ie. sigma = k / frac) #background-blur-sigma-frac=3 #Crop background if needed to maintain aspect ratio #background-keep-aspect=true #Disable foreground image #no-foreground=true #Foreground image path foreground-image=/var/lib/fake-background-webcam/default/foreground.jpg #Foreground mask image pat foreground-mask-image=/var/lib/fake-background-webcam/default/foreground-mask.png #Add a hologram effect #hologram=true #Continue processing when there is no application using the virtual webcam no-ondemand=true #The running average percentage for background mask updates background-mask-update-speed=100 #Force the mask to follow a sigmoid distribution #use-sigmoid=true #The minimum percentage threshold for accepting a pixel as foreground threshold=50 #Disable postprocessing (masking dilation and blurring) no-postprocess=true #Select the model for MediaPipe. For more information, please refer to https://github.com/fangfufu/Linux-Fake-Background-Webcam/issues/135#issuecomment-883361294 select-model=0 #Apply colour map to the person using cmapy. For examples, please refer to https://gitlab.com/cvejarano-oss/cmapy/blob/master/docs/colorize_all_examples.md #cmap-person= #Apply colour map to background using cmapy #cmap-bg= おわり