Skip to content

smzht/wsl-utils

Repository files navigation

WSL Utilities


※ 本ページの内容は WSL2 でも動作します。DrvFs や VolFs の記載がある場合には、Windows 側の ファイルシステム、WSL2 側のファイルシステムと読み替えてください。


Windows Subsystem for Linux で動作するユティリティコマンド群です。

Windows 10 1903 以降で利用可能です。それより前の Windows で利用する場合は、 該当するバージョンのサブディレクトリ配下のファイルを本ディレクトリにマージしてご利用ください。

DrvFs を多くマウントしている場合は、.bash_profile を以下のように設定して、wslinit を実行して ご利用ください。wsl コマンドの高速化 が図られます。

[ -r ~/.bashrc ] && source ~/.bashrc
source wslinit

wslcommon は、コマンドと同じ場所(コマンドパスが通ったディレクトリ)に格納してご利用ください。 UNC パスへのアクセスが必要な場合には、以下のような /etc/fstab を設定し、マウントしてご利用 ください。

\\<ホスト名称>\<共有名>	/mnt/share1	drvfs	defaults,noatime,uid=1000,gid=1000	0 0

Windows 10 1803 以降では、/etc/fstab があれば自動マウントするデフォルト設定となっています。

/etc/fstab の設定で、IPアドレスを含む UNC パスに対してのマウントポイントを指定する場合、 「\172」で始まる箇所などが 8進数で認識されてしまいます。この場合、「\」の代わりに「/」を 利用することができます。

//172.16.0.1/<共有名>	/mnt/share1	drvfs	<オプション>	0 0

同一のネットワークボリュームに複数の UNC パスを指定したい場合には、以下のようにマウント ポイントを同一のものにすることが可能です。

\\<IPアドレス>\<共有名>		/mnt/share1	drvfs	<オプション>	0 0
\\<ホスト名称>.<domain>\<共有名>	/mnt/share1	drvfs	<オプション>	0 0
\\<ホスト名称>\<共有名>		/mnt/share1	drvfs	<オプション>	0 0

認証を必要とするネットワークボリュームを利用する場合は、予め以下の設定により認証情報を 記憶させる必要があります。

ネットワークボリュームにアクセスした際に開く認証画面で、「資格情報を記憶する」にチェック を入れることでも登録できます。

/etc/fstab を変更した際は、コマンドプロンプトから次のコマンドを入力後、WSLコンソール を再起動してください。

> wsl -t <ディストリビューション名>

■ wslstart

cygstart 的コマンドです。

使用方法

wslstart target
wslstart -h

詳しくは以下を参照してください。

■ sglstart

singleton な動きをする cygstart 的コマンドです。

使用方法

sglstart target
sglstart -h

詳しくは以下を参照してください。

■ wslln

NTFS シンボリックリンクの作成に対応した ln 的コマンドです。

Windows 10 1709 の Windows Subsystem for Linux では、DrvFS ファイルシステム上 にある NTFS シンボリックリンクを表示できるようになりました。ただし、ln コマンドで NTFS シンボリックリンクを作成することはできません。 本コマンドは、DrvFs ファイルシステム上にシンボリックリンクを作成する場合は NTFS シンボリックリンク を、DrvFs ファイルシステム以外にシンボリックリンクを作成する場合は WSL 本来のシンボリックリンク を作成するように動作する ln と mklink の機能をラッパーしたコマンドです。

Windows 10 1709 以降の Build 17046 では、DrvFs 上での NTFS シンボリックリンクの作成がサポートされ ましたが、リンクターゲットが相対パスである必要があるなど、幾つかの制約が有るようです。

使用方法

wslln [-s] [-f] [-a] target link
wslln [-s] [-f] [-a] target
wslln -h

コマンドオプション

● -s オプション

ハードリンクではなく、シンボリックリンクを作成します。 wslln -s target link 実行時のシンボリックリンク作成ルールは、以下のとおりとなります。

target が示すのパスの位置link を作成する場所動作
DrvFs 配下DrvFs 配下NTFS のシンボリックリンクを作成
VolFs 配下DrvFs 配下許可しない(エラーとする)
DrvFs 配下VolFs 配下WSL のシンボリックリンクを作成
VolFs 配下VolFs 配下WSL のシンボリックリンクを作成

● -f オプション

リンクファイルが存在する場合、削除してからリンクファイルを作成します。

● -a オプション

ターゲットファイルのパスを絶対パスに変換(readlink -m)してからリンクを作成します。 ln コマンドには無いオプションとなります。以下で紹介している Emacs との連携の設定の 中で利用されています。

必要な環境設定

NTFS シンボリックリンクを管理者権限なしで作成できるようにするために、以下のどちらかの 対応を実施する必要があります。

● 開発モードにする

● SeCreateSymbolicLinkPrivilege 権限を付加する(再ログインが必要)

※ administrators のメンバーは UAC により特権が削除されるという以下のような情報も あるのですが、私の環境では発生していません。

Emacs との連携

以下の説明を参照してください。

■ wslsc

Windows ショートカットを作成するためのコマンドです。

使用方法

wslsc [-f] target shortcut
wslsc [-f] target
wslsc -h

Windows 10 1903 より前のバージョンの Windows でのショートカットの作成ルールは、以下の とおりとなります。 Windows 10 1903 以降では、VolFs にも \\wsl$\ で始まるパスで Windows からアクセス可能と なりましたので、target ファイルが VolFs 上にあってもショートカットを作成することができます。

target が示すのパスの位置shortcut を作成する場所動作
DrvFs 配下DrvFs 配下ショートカットを作成
DrvFs 配下VolFs 配下ショートカットを作成
VolFs 配下DrvFs 配下許可しない(エラーとする)
VolFs 配下VolFs 配下許可しない(エラーとする)

コマンドオプション

● -f オプション

ショートカットファイルが存在する場合、削除してからショートカットファイルを作成します。

Emacs との連携

以下の説明を参照してください。

■ cyg

WSL から Cygwin のコマンドを実行するためのコマンドです。

Cygwin 環境で作成したシェルスクリプト等を WSL のシェルから実行できるようにするために 作成しました。

コマンドスクリプトの初めに Cygwin の bash.exe の在り処を指定する変数がありますので、 利用者の環境に合わせて修正し、ご利用ください。

使用方法

cyg command [args]
cyg -h

使用例

cyg uname -a
cyg cygstart notepad
cyg cygstart .
cyg shell-script
cyg sh shell-script
cyg eval 'echo $PATH'

wslstart コマンドを作成しているので不要と思いますが、以下のような alias を 定義することで利用しやすくなると思います。

alias open="cyg cygstart"

また、以下のようにシェルスクリプトのシバンを指定して、間接的に cyg を実行する 方法もあります。

#!/home/<username>/bin/cyg sh

uname -a

注意事項

● ホームディレクトリに .bash_profile の作成が必要な場合があります

cyg では Cygwin の bash.exe コマンドを -l オプション付きで実行しています。 このため、Cygwin のホームディレクトリに .bash_profile が存在しないと .bashrc が実行されずに環境変数(PATH 等)の設定が行われません。この場合は、 Cygwin のホームディレクトリに以下の内容の .bash_profile ファイルを作成する ことで対策してください。

[ -r ~/.bashrc ] && source .bashrc

● cyg では、tty を必要とするコマンドは動作しません

cyg では、tty を必要とするコマンドは動作しません。gnupack-13 系で提供される .bashrc には stty の設定が含まれており、これが cyg 実行時にエラーを出力します。 stty 文を以下のとおりに if 文で囲むことでエラーを回避できますので、必要であれば 対策をしてください。

if [ -t 1 ]; then
    stty -ixon
fi

● gnupack の startup_config.ini で行っている環境変数の設定は有効になりません

gnupack では startup_config.ini で環境変数の設定が可能となっています。しかし、 cyg ではその設定が有効になりません。startup_config.ini で PATH などの環境設定 を設定している場合は、.bashrc に設定を移すなどの対策が必要となります。

● Cygwin のコマンドは、WSL の LANG 環境変数の値で実行します

cyg では、Cygwin のコマンドを WSL の LANG 環境変数の値で実行します。これは、 コマンド出力の文字化けを回避するために行っているものです。もし、Cygwin を cp932 で使っている場合には、スクリプトの文字コードを変更するなど調整が必要 となる可能性があります。

● cyg コマンド実行時にエラーメッセージが表示される場合があります

cyg コマンド実行時に以下のエラーメッセージが表示される場合があります。

bash.exe: warning: could not find /tmp, please create!

このエラーメッセージが表示される場合は、以下のコマンドを実行してください。 次回の cyg コマンド利用時からエラーメッセージが表示されなくなります。

cyg mkdir /tmp

■ win

WSL で exe コマンドを実行するためのコマンドです。

Windows 10 1809 以降では、Emacs の shell-mode で exe コマンドを実行できません。 「exec > /dev/tty」というコマンドを入力することで回避はできるのですが、以降で紹介 する winsudo が動かないことが分かりましたので、本コマンドを作成しました。

使用方法

win command

使用例

win cmd.exe
win ipconfig.exe

■ winsudo

WSL で動作する Windows のための sudo 的コマンドです。

WSL で Windows のコマンドを管理者権限で実行するために作成しました。chocolatey コマンドのように、実行時に管理者権限を必要とするコマンドを WSL の shell 上から実行 できるようになります。

使用方法

winsudo command

使用例

winsudo choco.exe search chocolateygui
winsudo choco.exe install chocolateygui
winsudo cmd.exe

上記の使用例の前者のコマンドをよく利用する場合は、以下の alias を .bashrc 等に 設定しておくのが良いと思います。

alias choco='winsudo choco.exe'

また、winsudo cmd.exe を実行した後であれば、exe コマンドを管理者権限のまま何度も 実行することができます。

注意事項

● 「exec > /dev/tty」を実行している場合は解除してください

Windows 10 1809 以降では、Emacs の shell-mode で exe コマンドを実行できません。 この問題を回避するために「exec > /dev/tty」というコマンドを入力する方法がある のですが、このコマンドを入力していると本コマンドは正常に動作しないことが分かり ました。このため、もしこの回避コマンドを実行している場合には設定を解除し、先に 紹介している win コマンドを利用するようしてください。

■ wslpath2

wslpath の代替コマンドです。WSL2 で UNC パスの変換も正常に行えるコマンドとなっています。

使用方法

wslpath2 [-u|-w|-m] [-a] path
wslpath2 -h

コマンドオプション

● -u オプション

パス名を UNIX 形式で表示します。(デフォルトの動作)

● -w オプション

パス名を Windows 形式で表示します。

● -m オプション

「¥」の代わりに「/」を使用する以外、-w オプションと同様に機能します。

● -a オプション

パス名を絶対パス形式で表示します。

■ lnkpath

Windows ショートカットファイル(lnk ファイル)のリンク先を表示するコマンドです。

本コマンドを利用するためには、予め liblnk-utils package をインストールしてください。

使用方法

lnkpath [-w|-m|-u] [-a] lnkfile
lnkpath -h

コマンドオプション

● -w オプション

リンク先のパス名を Windows 形式で表示します。(デフォルトの動作)

● -m オプション

「¥」の代わりに「/」を使用する以外、-w オプションと同様に機能します。

● -u オプション

リンク先のパス名を UNIX 形式で表示します。

注意事項

● Cygwin で作成した Windows ショートカットファイルに対しては、正常に動作しません

Cygwin では、CYGWIN 環境変数の設定により ln -s コマンドで Windows ショートカットファイル (lnk ファイル)を作成できますが、このコマンドで作成された Windows ショートカットファイル に対しては正常に動作しません。(内部で利用している lnkinfo コマンドで解析できないようです。)

■ wsvn

WSL 上で Windows の svn.exe を利用するためのコマンドです。

WSL2 の svn コマンドは、Windows ファイルシステム上にある subversion のリポジトリを操作すると、 リポジトリ管理データベースを破壊することがあります。この問題を解決するため、Windows の svn.exe を利用する WSL 用のコマンドを作成しました。

使用方法

wsvn <subcommand> [options] [args]

Windows 版 subversion は次の場所からダウンロードしてください。

wsvn コマンドを svn というコマンド名で利用したい場合は、alias を設定するのが良いと思います。

コマンドオプション

wsvn –help で表示されるコマンドオプションをご利用ください。

注意事項

スクリプト内部で呼ばれている svn.exe の配置ディレクトリには、 PATH が通っている必要が あります。PATH を通さないで利用する場合には、スクリプト内部の svn.exe 起動箇所を絶対パス で指定してください。

■ aclreset

Windows ファイルシステム上のファイルもしくはフォルダのアクセス権をリセットし、親フォルダから 継承した設定にするコマンドです。

WSL2 では、Windows ファイルシステム上のファイルもしくはフォルダを異なるアクセス権のあるフォルダ に mv コマンドで移動すると、元のアクセス権を維持したまま移動されてしまうようです。このため、 異動先フォルダを利用している別のアクセス権を持ったユーザが、異動したファイルやフォルダに アクセスできない事象が発生することがあります。

本コマンドは、この状況を解消するために作成しました。

使用方法

aclreset file or directory
aclreset -h

スクリプト内部で利用している icacls.exe の説明は、次のページを参照ください。

Releases

No releases published

Packages

No packages published

Languages