
【Bash / Ruby / Python3】ファイルの存在を確認する方法の比較
前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

前書き 自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。 ...

前書き:自動化にBashを使うと後々辛い 本記事では、自動化で用いる言語をBash(Shell Script)からRubyやPython3に変更する方法を紹介します。Bash / Ruby / Python3のそれぞれで、ファイル操作やディレクトリ操作などをどのように書くか、コード例と実行例を示しながら紹介します(正確には、別記事で実装例を説明します)。 ...

前書き PostgreSQLは、オープンソースのオブジェクト関係リレーショナルデータベース関係システム(ORDBMS)です。2020年時点のシェアランキングは、4位です。やや人気のないDBと言えるでしょう。 シェア1位のOracle DatabaseおよびMicrosoft SQL Serverは、有償です(Microsoft SQL Severは無償版も存在)。そのため、PostgreSQLは同じくオープンソースであるMySQL(シェア2位)と比較される機会が多いです。PostgreSQLは高機能・堅牢な設計、MySQLは速度に重きを置いた設計であり、用途に応じて使い分けられるようです。 ...

ASCII<->N進数への変換は、Terminalで確認可能 ASCIIコードは、10進数(8進数、16進数)から英数字・記号に変換するための文字コードです。正確には、文字コードとは以下の定義のように、2進数との変換を指します。 ...

前書き 本記事では、autofsを用いて、HDD/SSD/USBメモリ(SATA接続 or M.2接続 or USB接続)を自動的にマウントする方法を紹介します。 ...

前書き:何故HDDを2TBまでしか認識しないか 本記事では、gdisk/mkfsコマンドを用いて2TB超のHDDをフォーマットする方法を紹介します。 前提知識ですが、HDDは2TBの壁が存在します。HDDは、MBR(Master Boot Record)形式を用いて、パーティション(領域)をセクター単位で管理しています。通常のHDDは、セクターサイズが512Byteであり、パーティション内のセクター開始位置とセクター数の管理には4Byte(32bit)を使用します。この制約によって、「最大2TB(アクセスできるセクター数×セクターサイズ = 2の32乗×512)」までしか管理できません。 ...

前書き 前回、キーボードのみで操作を完結させる手段として、keynavを紹介しました。 マウスポインタをキーボードで操作するkeynav 同じように、キーボードで操作が完結できるw3mを本記事で紹介します。w3m(WWW-wo-Miru)は、日本人が作成したテキストベースWebブラウザです。端末上でWeb検索作業できますが、使いづらい部分があったため、それらを補うスクリプトも本記事に記載します。 検証環境 _,met$$$$$gg. nao@debian ,g$$$$$$$$$$$$$$$P. ---------- ,g$$P" """Y$$.". OS: Debian GNU/Linux 10 (buster) x86_64 ,$$P' `$$$. Kernel: 4.19.0-6-amd64 ',$$P ,ggs. `$$b: Uptime: 46 minutes `d$$' ,$P"' . $$$ Packages: 2476 (dpkg) $$P d$' , $$P Shell: fish 3.0.2 $$: $$. - ,d$$' Resolution: 2560x1080 $$; Y$b._ _,d$P' DE: Cinnamon 3.8.8 Y$$. `.`"Y$$$$P"' WM: Mutter (Muffin) `$$b "-.__ WM Theme: cinnamon (Albatross) `Y$$ Theme: BlackMATE [GTK2/3] `Y$$. Icons: gnome [GTK2/3] `$$b. Terminal: gnome-terminal `Y$$b. CPU: Intel i3-6100U (4) @ 2.300GHz `"Y$b._ GPU: Intel HD Graphics 520 `""" Memory: 2974MiB / 32060MiB w3mのインストール方法 $ sudo apt update $ sudo apt install w3m $ sudo apt install w3m-img (注釈)端末上で画像を表示したい場合はインストール w3mの起動方法 [起動書式] ...

前書き Linuxエンジニアの中には、マウスを嫌う人が居ます。なるべくキーボードで操作を完結させる事を美徳と考える人(変人)です。しかし、マウスを完全に排除したくても、マウス(マウスポインタ)で無ければ操作できないタイミングがあります。 ...

前書き GDBをリッチなText User interface環境で実行するツールは、以前から複数ありました。例えば、 CGDB:ViライクなキーバインドのGDBフロントエンド GDB TUI mode:EmacsライクなキーバインドのGDB標準のTUI環境(オプションtui) NeoDebug:Vim用GDBフロントエンドプラグイン。Vim標準(Termdebug)より高機能 などがあります。 ...

前書き C言語は歴史の長い言語のため、非推奨関数があります。例えば、strcpy()は文字列をコピーする際にサイズチェックをしないため、バッファオーバーフローを引き起こす可能性があります。そのため、一般的には、strcpy()の代替関数としてstrcpy_s()を使用する事が推奨されています。 ...

前書き 過去の記事(環境構築: Linux Kernelモジュールの作成準備)では、 Linux Kernelソースコード 自作Kernelモジュール を分離して管理していました。ディレクトリ構成は、以下のような状態です。 ...

前書き:mutexとは Linux Kernelに限らず、様々なプログラミング言語やライブラリはロック機構を提供しています。ロック機構は、複数のプロセスが同時に共有データを書き換え、意図しないデータ状態となる事を防ぎます。代表的なロック機構には、 ...

前書き 本記事では、Linux KernelにおけるCharacter Device向けのDevice Driverを作成する方法を示します。専用のHardware(例:シリアルデバイスのUARTなど)を用いず、メモリ上のデータ読み書きのみを行います。そのため、擬似デバイス(/dev/nullや/dev/zeroなど)を操作するDriverと同等です。 ...

前書き 本記事では、CLI(Terminal)で用いるinteractive shellを**fish(friendly interactive shell)に移行する方法を記載します。fishは、Debian環境のdefault shellであるdash(POSIX互換のash拡張)やlogin shellであるbash**よりも優れた点が多いです。 ...

前書き 少し古い雑誌ですが、CQ出版社のInterface誌(2016年10月号)に「レベルアップ! オリジナル・コマンドを作る」という記事がありました。しかし、この雑誌に書かれている内容は、bashに偏っており、情報が不足していると(当時)感じました。 ...

前書き 過去の記事で、debソースパッケージの取得方法を示しました。 Linuxコマンドのソースコードを取得する方法(Debian環境):オリジナルコマンド作成前の勉強向け ソースコードを取得したら、自身で改変し、ビルドも試したくなる筈です。そのため、本記事では、debソースパッケージをビルドする方法を示します。debソースパッケージの取得に関する設定は、上記の過去記事を参照して下さい。 ...

前書き Neomuttは、Command Line Interface(CLI)で使用するメールクライアントです。mutt(1995年に登場したメーラー)をforkしたプロジェクトであり、その上位互換となっています。CLI環境でメールを読む理由は、動作が快適な事や省メモリである事が挙げられます。 ...

前書き Rustを学習するための一環として、Redox(OS)版coreutilsのcatコマンドをCode Readingします。本記事(その2)は、catコマンドの主要な処理(ファイル内容の表示)を説明します。catコマンドのオプションパース処理に関する内容は、以下に示す前回記事(その1)を確認して下さい。 ...

前書き Rustを学習するための一環として、Redox(OS)版coreutilsのcatコマンドをCode Readingします。Redoxプロジェクトや環境構築方法に関しては、以下の記事にまとめてあります。 ...

Rustアプリを写経できる数少ない書籍の一つ 私は、2018年に"OSS + オライリー本(下画像のカニ本)“によるRust独学で、学習を断念しました。Rustは学習曲線が急勾配で、最初の100時間はつまづきやすいです。コンパイラが引くほどエラーを出します。残業後に勉強する私は、そのエラーと向き合う体力がありませんでした。 ...

__initマクロ、__exitマクロが使われるケース 一般的に、__initマクロはKernelモジュールの初期化時、__exitマクロはKernelモジュールの終了時に付与します。以下の例では、初期化関数がdebimate_init()、終了関数がdebimate_exit()で、それぞれにマクロを付与しています。 ...

前書き C言語は、言語としてList構造およびList操作APIをサポートしていません。ここでのList構造とは、「次のデータ(前のデータ)へのポインタ」を意味します。本記事では、データとList構造(nextポインタ、prevポインタ)をセットにした状態をノードと呼びます。 ...

container_ofマクロとは container_ofマクロは、Linux Kernelで用いられ、「構造体メンバポインタ」から「そのメンバを含む構造体の先頭ポインタ」を得られるマクロです。C言語では、offsetofマクロによって構造体メンバアドレスのオフセット(構造体先頭アドレスからメンバ変数までのオフセット)を算出できます。container_ofマクロは、このオフセットを利用し、構造体の先頭アドレスを算出しています。 ...

前書き 本記事では、既存アプリや自作アプリのショートカットを作成したい場合、デスクトップアイコン(ショートカット)を用意する方法を示します。Linuxは、複数のデスクトップ環境(GNOME、MATE、KDEなど)が存在しますが、手順はX Window System環境であれば同一です。その理由は、デスクトップアイコン(ショートカット)仕様がfreedesktop.orgによって(半標準として)定められているためです。 ...

前書き:SSHをよりセキュアに SSH(Secure SHell)は、通信を暗号化した状態でリモートPCに接続するソフトウェアです。SSHは便利な反面、外部PCからの接続を許可するため、セキュリティ対策が必要です。本記事では、SSHのセキュリティ対策設定を記載します。Raspberry Pi3前提で記載しますが、他の環境でも同じ内容が(ほぼ)実施可能です。 ...

前書き 家庭内にLinux/Mac/Windows環境が存在する場合、各PCから写真などを閲覧する事が手間な場合があります。クラウドが一つの解決策ですが、写真はサイズが大きいため、クラウドを無料使用できる範囲を超えます(あと、クラウドは同期が遅い)。そこで、各PCでファイルを共有するため、Rapsberry Pi3をsambaファイルサーバ化します。sambaはUNIX系OS上でWindows互換のファイルサーバ・プリントサーバを立ち上げるOSSです。 ...

前書き Raspberry Piに他PCからSSHなどでアクセスする場合、IPアドレスが必要です。IPアドレスがDHCPで動的に割り当てられる場合、都度Raspberry Pi3のIPアドレスを調べなければなりません。その手間を無くすため、IPアドレスを固定化します。 ...

前書き AndroidにLinuxを導入する試みは、以前からありました。この試みは、AndroidのKernel部分が“Linux Kernel”(Linuxと共通)ですから、自然な発想と考えられます。過去の例で言えば、「Ubuntu(Debian)をAndroid端末に導入」したケースがあります。しかし、これまでのAndroidのLinux化は、煩雑な手順が必要、かつ失敗した場合に端末が文鎮化してしまうリスクがありました。 ...

mmdebstrapとは mmdebstrapとは、最小構成rootfsを作成するためのdebootstrapを代替するコマンドです。debootstrapと同様に、Debianサポートアーキテクチャ向けのrootfsを作成できます。mm(Multi-Mirror)が意味するように、複数のミラーサーバを使用する事により、debootstrapより3〜6倍ほど高速に動作します。 2019年3月現在(Debian9, stretch環境)では、mmdebstrapはtesting/unstableに存在します。stableに存在しないmmdebstrapを知ったキッカケは、debian-embeddedのメーリスです。128MB以下のrootfsを作成する方法がメーリス内で質問され、mmdebstrapの開発者(Johannes Schauer)がその方法の一つとして紹介していました。質問自体は、最終的にmmdebstrapが作成するrootfsのサイズがネックになり、他の方法(Yocto)が採用されていました。 ...

前書き Debianパッケージは、基本的な使い方をしていれば、安定版(stable)がシステムにinstallされます。しかし、「使用したいパッケージがstableにない場合」や「より新しいパッケージを使いたい場合」、システムにtesting/unstableパッケージを導入する必要性がでてきます。 ...

“返り値がNULL” = “情報量がない” C言語には、返り値としてポインタを返す関数があります。 User空間の関数で例を挙げれば、メモリを確保するmalloc()、ファイルを開くfopen()などです。これらの関数は、エラー時にNULLを返します。 ...

前書き 本記事では、Linux Kernelが用いるエラー番号を説明します。 Linux Kernelがエラー番号(errno)を正しく返す意義 Linux Kernelでは、エラーの種類に応じて、返すべきエラー番号が定められています。例えば、ファイルが存在しない場合は、“ENOENT(No such file or directory、 エラー番号2)“を返します。Linux Kernel内のエラー内容は、変数errnoを通してUser空間にも伝わります。 ...

前書き 本記事は、Linux環境で実行するCommand Optionの慣習について、調査結果を記載します。調査動機は、「Option規格」や「一般的に用いられるOption」を知る事によって、よりよいInterfaceを持つCommandが作成できると考えたからです。特に、Option文字列(例:–version)は、他のCommandに可能な限り一致させた方が、ユーザが混乱しないと考えています。 ...

前書き BashによるShell Scriptを国際化(メッセージ翻訳)する方法は、C言語/Python/Rubyなどと同様です。つまり、gettextライブラリを使用し、翻訳対象メッセージの対訳を保存したカタログファイル(.moバイナリ、言語毎に必要)を用意する方法です。本記事では、その使い方を説明します。 ...

printk()とは printk(print kernel)は、ユーザ空間のprintf( print formatted )に相当します。注意すべき点として、printf()と以下の点が異なります。本記事では、この差異を説明します。 ...

前書き 本記事は、「Linux Kernel Device Driverの雛形作成」や「Linux Kernel内APIを試すためのモジュール作成」を目的として、最低限必要な環境構築手順を記載しています。 ...

前書き 大規模なプログラムをビルドする場合、数十分〜数時間かかる事があります。ビルド時間が長いと、それだけ開発者の待ち時間が増えるわけですから、短いに越したことはありません。そんなビルド時間を短縮するツールとして、ccacheがあります。 ...

前書き 本記事は、Install Android on his Raspberry Piを実践した結果を示します。具体的には、Raspberry Pi3に対して、Android7.1.1とGoogle Play Storeをインストールします。Androidの最新バージョンは、2018年にリリースされた9.x系ですので、やや古いバージョン(2016年時点の最新版)のインストール方法になります。 ...

前書き 本記事は、システム情報表示ツール"neofetch“のコードリーディング結果を記載しています。 リーディング動機は、**「neofetchは、システム情報をどこから集めているか」**が気になったからです。neofetchは約2600Step程度の小規模なBash scriptであるため、関数レベルで解説します。 ...

前書き 本記事は、以下のコマンドのコードリーディング結果を記載しています。 プロセスおよび子プロセスの(見かけ上の)ルートディレクトリを変更するchroot プロセスがchroot環境(jail環境)で動作しているかを検出するischroot ...

Raspberry Piとは Raspberry Piは、ラズベリーパイ財団(イギリス)より提供されているARMプロセッサボード。初期は、教育用を念頭に開発されてきました。現在は、RPi1からRPi3までの間で、HW性能が大幅に向上し、産業用途で使われる事例も増えてきました。 対応OSは、DebianベースのRaspbianの他に、Ubuntu、CentOS(非公式)、Windows IoT Core、Android(非公式)などに対応しています。安定性および情報量の面では、Raspbianの一択でしょう。 ...

前書き シングルボードコンピュータのRaspberry Pi3を用いて、Linux KernelのBoot Sequenceを調査します。その調査結果を複数回に分けて、記事にします。対象のLinux Kernelは、Raspberry Pi(OS)のソースコード rpi-4.1.yとします。 ...