※ 本ページの内容は 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 があれば自動マウントするデフォルト設定となっています。
- https://ascii.jp/elem/000/001/634/1634120/
- https://www.atmarkit.co.jp/ait/articles/1807/12/news036.html
/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 <ディストリビューション名>
cygstart 的コマンドです。
wslstart target wslstart -h
詳しくは以下を参照してください。
singleton な動きをする cygstart 的コマンドです。
sglstart target sglstart -h
詳しくは以下を参照してください。
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 シンボリックリンクの作成がサポートされ ましたが、リンクターゲットが相対パスである必要があるなど、幾つかの制約が有るようです。
- https://msdn.microsoft.com/en-us/commandline/wsl/release-notes#build-17046
- https://kledgeb.blogspot.jp/2017/11/wsl-120-build-17046wsl.html
wslln [-s] [-f] [-a] target link wslln [-s] [-f] [-a] target wslln -h
ハードリンクではなく、シンボリックリンクを作成します。 wslln -s target link 実行時のシンボリックリンク作成ルールは、以下のとおりとなります。
target が示すのパスの位置 | link を作成する場所 | 動作 |
---|---|---|
DrvFs 配下 | DrvFs 配下 | NTFS のシンボリックリンクを作成 |
VolFs 配下 | DrvFs 配下 | 許可しない(エラーとする) |
DrvFs 配下 | VolFs 配下 | WSL のシンボリックリンクを作成 |
VolFs 配下 | VolFs 配下 | WSL のシンボリックリンクを作成 |
リンクファイルが存在する場合、削除してからリンクファイルを作成します。
ターゲットファイルのパスを絶対パスに変換(readlink -m)してからリンクを作成します。 ln コマンドには無いオプションとなります。以下で紹介している Emacs との連携の設定の 中で利用されています。
NTFS シンボリックリンクを管理者権限なしで作成できるようにするために、以下のどちらかの 対応を実施する必要があります。
※ administrators のメンバーは UAC により特権が削除されるという以下のような情報も あるのですが、私の環境では発生していません。
以下の説明を参照してください。
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 配下 | 許可しない(エラーとする) |
ショートカットファイルが存在する場合、削除してからショートカットファイルを作成します。
以下の説明を参照してください。
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
cyg では Cygwin の bash.exe コマンドを -l オプション付きで実行しています。 このため、Cygwin のホームディレクトリに .bash_profile が存在しないと .bashrc が実行されずに環境変数(PATH 等)の設定が行われません。この場合は、 Cygwin のホームディレクトリに以下の内容の .bash_profile ファイルを作成する ことで対策してください。
[ -r ~/.bashrc ] && source .bashrc
cyg では、tty を必要とするコマンドは動作しません。gnupack-13 系で提供される .bashrc には stty の設定が含まれており、これが cyg 実行時にエラーを出力します。 stty 文を以下のとおりに if 文で囲むことでエラーを回避できますので、必要であれば 対策をしてください。
if [ -t 1 ]; then stty -ixon fi
gnupack では startup_config.ini で環境変数の設定が可能となっています。しかし、 cyg ではその設定が有効になりません。startup_config.ini で PATH などの環境設定 を設定している場合は、.bashrc に設定を移すなどの対策が必要となります。
cyg では、Cygwin のコマンドを WSL の LANG 環境変数の値で実行します。これは、 コマンド出力の文字化けを回避するために行っているものです。もし、Cygwin を cp932 で使っている場合には、スクリプトの文字コードを変更するなど調整が必要 となる可能性があります。
cyg コマンド実行時に以下のエラーメッセージが表示される場合があります。
bash.exe: warning: could not find /tmp, please create!
このエラーメッセージが表示される場合は、以下のコマンドを実行してください。 次回の cyg コマンド利用時からエラーメッセージが表示されなくなります。
cyg mkdir /tmp
WSL で exe コマンドを実行するためのコマンドです。
Windows 10 1809 以降では、Emacs の shell-mode で exe コマンドを実行できません。 「exec > /dev/tty」というコマンドを入力することで回避はできるのですが、以降で紹介 する winsudo が動かないことが分かりましたので、本コマンドを作成しました。
win command
win cmd.exe win ipconfig.exe
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 コマンドを管理者権限のまま何度も 実行することができます。
Windows 10 1809 以降では、Emacs の shell-mode で exe コマンドを実行できません。 この問題を回避するために「exec > /dev/tty」というコマンドを入力する方法がある のですが、このコマンドを入力していると本コマンドは正常に動作しないことが分かり ました。このため、もしこの回避コマンドを実行している場合には設定を解除し、先に 紹介している win コマンドを利用するようしてください。
wslpath の代替コマンドです。WSL2 で UNC パスの変換も正常に行えるコマンドとなっています。
wslpath2 [-u|-w|-m] [-a] path wslpath2 -h
パス名を UNIX 形式で表示します。(デフォルトの動作)
パス名を Windows 形式で表示します。
「¥」の代わりに「/」を使用する以外、-w オプションと同様に機能します。
パス名を絶対パス形式で表示します。
Windows ショートカットファイル(lnk ファイル)のリンク先を表示するコマンドです。
本コマンドを利用するためには、予め liblnk-utils package をインストールしてください。
lnkpath [-w|-m|-u] [-a] lnkfile lnkpath -h
リンク先のパス名を Windows 形式で表示します。(デフォルトの動作)
「¥」の代わりに「/」を使用する以外、-w オプションと同様に機能します。
リンク先のパス名を UNIX 形式で表示します。
Cygwin では、CYGWIN 環境変数の設定により ln -s コマンドで Windows ショートカットファイル (lnk ファイル)を作成できますが、このコマンドで作成された Windows ショートカットファイル に対しては正常に動作しません。(内部で利用している lnkinfo コマンドで解析できないようです。)
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 起動箇所を絶対パス で指定してください。
Windows ファイルシステム上のファイルもしくはフォルダのアクセス権をリセットし、親フォルダから 継承した設定にするコマンドです。
WSL2 では、Windows ファイルシステム上のファイルもしくはフォルダを異なるアクセス権のあるフォルダ に mv コマンドで移動すると、元のアクセス権を維持したまま移動されてしまうようです。このため、 異動先フォルダを利用している別のアクセス権を持ったユーザが、異動したファイルやフォルダに アクセスできない事象が発生することがあります。
本コマンドは、この状況を解消するために作成しました。
aclreset file or directory aclreset -h
スクリプト内部で利用している icacls.exe の説明は、次のページを参照ください。