Linux

udevでデバイスファイルのシンボリックを作成

  • POST
udevでデバイスファイルのシンボリックを作成 はじめに Linux環境において、デバイスファイルのファイル名は機種により異なるが、 RXTXライブラリのようにライブラリ側で、デバイスファイル名が固定されているケースがある。 この場合は、デバイスファイルを参照するシンボリックリンクをライブラリが指定しているデバイスファイル名で作成することで、ミスマッチを回避できる。 Linux環境でデバイスファイルのシンボリックを作成する手順を記載する。 udevとは udevは、Linuxにおいての/dev配下のデバイスファイルの管理を行う仕組みである。 USBフラッシュメモリなどのデバイスの差し込みを行うと、/dev配下にデバイスファイルが作成され、デバイスを取り外しすると、/dev配下のデバイスファイルが作成される。 シンボリックリンクを作成 RaspberryPi環境での実行する。 USBフラッシュメモリを装着すると、デバイスファイル(/dev/sda)が作成される。 以下のコマンドを実行すると、デバイスファイルの情報が表示される。 $ udevadm info -a -n /dev/sda # SUBSYSTEMSの項目を確認する looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2': KERNELS=="1-1.2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceClass}=="00" ATTRS{manufacturer}=="UFD 2.0" ATTRS{bmAttributes}=="80" ATTRS{bConfigurationValue}=="1" ATTRS{version}==" 2.00" ATTRS{devnum}=="9" ATTRS{bMaxPower}=="200mA" ATTRS{idProduct}=="3600" ATTRS{avoid_reset_quirk}=="0" ATTRS{urbnum}=="1558" ATTRS{bDeviceSubClass}=="00" ATTRS{maxchild}=="0" ATTRS{bcdDevice}=="0100" ATTRS{bMaxPacketSize0}=="64" ATTRS{idVendor}=="13fe" ATTRS{product}=="Silicon-Power32G" ATTRS{speed}=="480" ATTRS{removable}=="removable" ATTRS{ltm_capable}=="no" ATTRS{serial}=="201108SP001507B80507CD4F175B" ATTRS{bNumConfigurations}=="1" ATTRS{busnum}=="1" ATTRS{authorized}=="1" ATTRS{quirks}=="0x0" ATTRS{configuration}=="" ATTRS{devpath}=="1.2" ATTRS{bDeviceProtocol}=="00" ATTRS{bNumInterfaces}==" 1" $ vi /etc/udev/rules.d/99-test.rules # 以下の内容を入力して保存する SUBSYSTEMS=="usb", KERNEL=="sda", SYMLINK+="Link", MODE="0666" USBフラッシュメモリを抜き差しすると、シンボリックリンクが作成される。

ルーティングテーブルをMarkdown形式で表示するスクリプトを作成

  • POST
ルーティングテーブルをMarkdown形式で表示するスクリプトを作成 ipコマンドのrouteオプション表示されるルーティングテーブルをMarkdown形式で表示するスクリプトを作成したので、下記に記載する。 ファイル内容 シェルスクリプトとawkの2ファイルで構成される。 make_markdown_route.sh #!/bin/bash # # ipコマンドで表示したルーティングテーブル情報をMarkdown形式に変換して表示するスクリプト #--------------------------------------------------------------------------------------- current_directory_path="$( dirname "$(readlink -f $0)" )" ip route show table all | awk -f "${current_directory_path}/make_markdown_route.awk" make_markdown_route.awk #!/usr/bin/awk # # ipコマンドで表示したルーティングテーブル情報をMarkdown形式に変換して表示するスクリプト # # Note: # * Destination : 宛先アドレス # * Scope : 送信先 # - scope link: 直接unicast/broadcastにて通信する経路。自身が属するネットワーク等が該当。 # - scope host: 自分自身への経路 # - scope global: (他ネットワークへの)ゲートウェイを経由したunicast通信による経路。 # * Protocol : # - proto kernel:カーネルが自動生成した経路。 #----------------------------------------------------------------------- #----------------------------------------------------------------------- # 事前処理 #----------------------------------------------------------------------- BEGIN { # ヘッダー部分の出力 printf("| %-17s | ", "Destination"); printf("%-15s | ", "Gateway"); printf("%-15s | ", "Source"); printf("%-8s | ", "Protocol"); printf("%-8s | ", "Scope"); printf("%-6s | ", "Metric"); printf("%-4s | ", "Dev"); printf("%-9s | ", "Table"); printf("\n"); printf("| %-17s | ", "---"); printf("%-15s | ", "---"); printf("%-15s | ", "---"); printf("%-8s | ", "---"); printf("%-8s | ", "---"); printf("%-6s | ", "---"); printf("%-4s | ", "---"); printf("%-9s | ", "---"); printf("\n"); } #----------------------------------------------------------------------- # 配下を初期化する関数 #----------------------------------------------------------------------- function initialize_array(array){ array["route"] = ""; array["dest"] = ""; array["mask"] = ""; array["via"] = ""; array["dev"] = ""; array["proto"] = ""; array["scope"] = ""; array["src"] = ""; array["metric"] = ""; return 0; } #----------------------------------------------------------------------- # 配列の内容を出力 #----------------------------------------------------------------------- function print_array(array){ printf("| %-17s | ", array["dest"]); printf("%-15s | ", array["via"]); printf("%-15s | ", array["src"]); printf("%-8s | ", array["proto"]); printf("%-8s | ", array["scope"]); printf("%-6s | ", array["metric"]); printf("%-4s | ", array["dev"]); printf("%-9s | ", array["table"]); printf("\n"); return 0; } #----------------------------------------------------------------------- # メイン処理 #----------------------------------------------------------------------- { initialize_array(array) begin_number=2 # テーブル情報が含まれる場合 = 項目数が偶数の場合 # Exsample: # broadcast 127.