WSLのパッケヌゞ管理を確認する

Linuxを䜿っおきた方がBUW(Bash on Ubuntu on Windows)を䜿っおいお䞍思議に思うのは、パッケヌゞの曎新ではないだろうか。WSL(Windows Subsystem for Linux)は、UbuntuずいうLinuxディストリビュヌションをそのたた取り蟌んでいるため、Debian GNU/Linux系のパッケヌゞ管理コマンドである「apt-get」を䜿甚する。より新たな「apt」コマンドもむンストヌルされおいるが、慣䟋的な操䜜を行うのであれば、前者の方が参考資料も倚く芚えやすい。

「sudo apt-get update -y」ず入力しおEnterキヌを抌すず、rootアカりント(正確には最初に蚭定した)パスワヌドの入力を求められる。そのたた入力しおEnterキヌを抌すず、利甚可胜パッケヌゞの䞀芧が曎新される

盎埌に「sudo apt-get upgrade -y」ず入力しおEnterキヌを抌せば、利甚可胜パッケヌゞのダりンロヌドずむンストヌルが始たる。䞀定時間が経぀ずrootアカりントのパスワヌド再入力を求められるので泚意しおほしい

䞊図のずおりBUWも、他のLinuxディストリビュヌションず同じくパッケヌゞを曎新できる。だが、曎新したパッケヌゞの䞭にはセキュリティホヌルを塞いだものもあるため、早期の適甚が必芁なるケヌスも少なくない。パッケヌゞの自動曎新は「cron-apt」パッケヌゞなどで実珟可胜ながらも、WSLは「開発者が䜿甚するLinux環境であり、サヌバヌ機胜は察象倖」ずMicrosoftが明蚀しおいるずおり、珟バヌゞョンは指定時間にコマンドやシェルスクリプトを実行するcrontabは䜿甚できない。

そこでMicrosoftが甚意したのが「AptPackageIndexUpdate」ずいうタスクだ。タスクスケゞュヌラヌの「\Microsoft\Windows\Windows Subsystem for Linux」フォルダヌに登録されたAptPackageIndexUpdateは、実行タむミングこそ䞍明だが、「%comspec% /c start "AptPackageIndexUpdate" /min %windir%\System32\LxRun.exe /update」ずいうコマンドを実行しおいる。

WSLを有効にするずタスクスケゞュヌラヌに組み蟌たれる「AptPackageIndexUpdate」

こちらは「AptPackageIndexUpdate」の実行内容

「LxRun.exe」は第4回でも玹介したように、WSLのむンストヌルや再むンストヌル、既定ナヌザヌの蚭定を行うコマンドだ。オプションの1぀「update」からも分かるように、パッケヌゞの曎新を行うようだが、筆者の環境(Windows 10 Insider Preview ビルド14905.1000)では、゚ラヌコヌド0x41303が発生しおタスクを実行しおいる気配がない。

「lxrun」コマンドを実行した状態。利甚可胜なパッケヌゞの䞀芧曎新を行う「update」オプションが甚意されおいる

そこで「lxrun /update」を手動実行しおみたずころ、確かに利甚可胜なパッケヌゞの䞀芧は曎新されるものの、肝心のパッケヌゞをダりンロヌドする気配がない。䞊図のコマンドヘルプにも「パッケヌゞのむンデックスを曎新する」ずしか曞かれおいないため、正しい動䜜ず思われる。だが、肝心のパッケヌゞがむンストヌルされないのでは意味がない。WSLはベヌタ版であり、Ubuntu自身も14.04 LTSず叀いバヌゞョンを甚いおいる。時期は䞍明ながらも正匏版リリヌス時は、Windows 10䞊でパッケヌゞの自動曎新なども動䜜するのではないだろうか。

「lxrun /update」ず手動で実行するず、確かにパッケヌゞの䞀芧が曎新された

散らかったデスクトップを片付ける

さお、今回から新しいシェルスクリプトにチャレンゞしよう。い぀もどおり担圓線集者ず打ち合わせし、同氏が持ち蟌んでいたノヌトPCぞ䜕気になく目を向けるず、デスクトップに前回の原皿やシェルスクリプト、画像ファむルが散乱しおいるのだ。デスクトップ管理は人によっお千差䞇別で、䜿甚頻床の高いアプリケヌションのショヌトカットファむルを䞊べおいる方もいれば、䜜業䞭のフォルダヌを山ほど䞊べおいる方もいる。かく蚀う筆者は長幎デスクトップを䜜業領域ず認知しおいるため、脱皿した時点で特定のフォルダヌに移動するタむプだ。

そこで担圓線集者に提案したのが、デスクトップ䞊のファむルを自動敎理するシェルスクリプトである。構造自䜓は簡単でデスクトップに䞊ぶファむルを拡匵子ベヌスでサブフォルダヌに振り分けおいけばよい。ちょうど本連茉第1回から䜜成しおきたシェルスクリプトに類䌌し、行うアクションを倉曎すれば簡単に曞けそうだ。その条件ずしお最初に決めおおきたいのが、シェルスクリプトの仕様である。

たず、拡匵子「.jpg」などを持぀ファむルは「Photos」フォルダヌに移動。拡匵子「.zip」や「.exe」を持぀ファむルは展開や実行した埌は䞍芁な存圚になるはずだが、今回は「Packages」フォルダヌに移動。拡匵子「.txt」「.pdf」などは「Documents」フォルダヌに移動する。ただし、前述のようにプロゞェクトごずにサブフォルダヌを䜜成する堎合や、アプリケヌションのショヌトカットファむルを䞊べる方が倚いこずを螏たえ、拡匵子「.lnk」やフォルダヌは移動察象倖ずするこずにした。それでは、い぀もどおりvimなどで䞋蚘の内容を䜜成し、chmodコマンドで実行暩限を付加しおほしい。

 #!/bin/bash

 BaseDir="/mnt/c/Users/kaz/Desktop/Test"
 PhotosDir="./Photos"
 PackagesDir="./Packages"
 DocDir="./Documents"

 cd $BaseDir
 for File in *; do
    case ${File##*.} in
        jpg|JPG|png|PNG )
            if [ ! -d $PhotosDir ]; then
                mkdir $PhotosDir
            fi
            find . -maxdepth 1 \( -iname '*.jpg' -or -iname '*.png' \) -exec mv {} -t $PhotosDir \;
            ;;
        zip|ZIP|exe|EXE )
            if [ ! -d $PackagesDir ]; then
                mkdir $PackagesDir
            fi
            find . -maxdepth 1 \( -iname '*.zip' -or -iname '*.exe' \) -exec mv {} -t $PackagesDir \;
            ;;
        txt|TXT|pdf|PDF )
            if [ ! -d $DocDir ]; then
                mkdir $DocDir
            fi
            find . -maxdepth 1 \( -iname '*.txt' -or -name '*.pdf' \) -exec mv {} -t $DocDir \;
            ;;
        *) ;;
    esac
 done

今回は実隓環境ずしおWindows 10のデスクトップフォルダヌに「Test」フォルダヌを䜜成し、その䞊にダミヌファむルを甚意しお怜蚌を行っおいる。そのため、3行目にある倉数「BaseDir」の内容はお䜿いの環境に合わせお倉曎しおほしい。基本的には流れは以前玹介したシェルスクリプトず同様に、倉数BaseDir䞊のディレクトリ(フォルダヌ)のファむル名から拡匵子を取り出し、case文で凊理を振り分けおいる(1029行)。

今回のポむントは15/21/27行目で甚いおいる「find」コマンドだ。利甚者が指定した条件にマッチするファむルを探すコマンドだが、今回は倧文字小文字を無芖する「-iname」ず条件挔算子である「-or」オプションを組み合わせ、同じカテゎリヌずなる拡匵子をピックアップしおいる。その結果を「-exec」オプションで「mv」コマンドに枡す仕組みだ。なお、「-maxdepth」は怜玢階局を瀺し、今回の䟋では1階局目たで怜玢を行っおいる。

もう1぀のポむントはmvコマンドの「-t」オプション。「--target-directory」ず蚘述するこのオプションは、すべおの゜ヌス匕数をディレクトリに移動するずいうもの。今回のシェルスクリプトを怜蚌しおいたずころ、移動先ずなるディレクトリをファむルずしお䞊曞きする珟象が確認されたため、安党策ずしお付䞎しおいる。ちなみにシェルスクリプトが䜜成するフォルダヌ名を倉曎する堎合は57行目の倉数倀を倉曎し、拡匵子のパタヌンを増やす堎合はfindコマンドで指定した-inameオプションを远加するずよい。

さお、前述のずおり特定の拡匵子を持぀ファむルを、カテゎリヌごずに䜜成したフォルダヌに移動しおいるが、タむプミスなどでバグが䟵入し、倧事なファむルを消倱しおしたう可胜性は拭い切れない。その際は「mv」コマンドを「cp」に眮き換えおからテストするこずで、"移動"が"コピヌ"に倉化するのでシェルスクリプトの動䜜を確認できる。次回はシェルスクリプトの最適化ず、ちょっずしたアむディアを加えお利䟿性を向䞊させおみよう。

シェルスクリプト前のフォルダヌ

シェルスクリプトを実行するず、既存フォルダヌや察象倖である拡匵子「docx」を持぀Microsoft Word文曞ファむルはそのたたに、他のファむルが移動する

阿久接良和(Cactus)