Linuxで名前にコロンを付けたファイル、フォルダとエクスプローラー

12月12日のIPFactoryアドベントカレンダーです。

# はじめに
:::note warn
この記事は次の見出しの原因を解明できていません。ご存知の方がいらっしゃいましたら、ぜひ教えてください。
:::

ファイル、フォルダ名を決める時、何と付ければ良いか未だにパッと思いつきません。結果行き当たりばったり統一性の無い名前にしてしまいます。
きちんと名前を付けている方から見ると大変ショッキングなネーミングと思われます。
ファイル名やフォルダ名に使わない方がよい文字記号を把握せず、配慮しなかった結果ご覧の有様です。

# ファイルが移動できない
Linux上のファイルを、エクスプローラーにて同じ階層に作ったフォルダに入れようとしたら、怒られてしまいました。
![too_large_to_mv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/1246076d-5c17-e540-6ea9-45308b5bc10e.png)
>ファイル'flag_page.html'は大きすぎて、対象のファイルシステムに入りません。

308バイトで大きすぎるは流石に噓です。何か別の問題があると考えます。

# なんとしてでも移動させてやる
エクスプローラー上が駄目ならターミナルでやるまでです。

ディレクトリ構成は次のような感じです。
```
nandemo
└seccon_forHighSchoolStudent_2022
 ├TODO:Catch The Flag     (空のフォルダ)
 │                        ↑
 ├flag_page.html       ───┤
 ├index.php            ───┤　移動させたい⇒大きすぎて入らない
 └style.css            ───┘
```
`flag_page.html`の他に`index.php`と`style.css`の3つのファイルを**TODO:Catch The Flag**フォルダに入れたいのですが、どれも同様に怒られてしまいます。

試しに`flag_page.html`を移動させてみます。

**Ubuntu**
![mv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/5161579c-842c-6fa8-29bc-fbcc8d6ab26b.png)
できるじゃん

# フォルダ名がおかしい
エクスプローラー上では、フォルダ名が**TODO・Catch the flag**となっていましたが、本来付けた名前ではありません。

どうやらコロンがいけないようです。コロンはWindowsではファイル、フォルダ名に使えない文字に指定されていました。

## エクスプローラー上でのフォルダ作成
![explorer_colon_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/a486c2e5-3723-05c1-e795-39a67d46a691.png)
エクスプローラー上でコロンを使おうとすると勿論怒られます。
## VSCode上でのフォルダ作成
![VSCode_colon_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/1afe7b8d-fadc-ebce-7a84-049ad94f19cd.png)
![VSCode_colon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/cd5e9eea-12da-0e51-cc6a-852a347cf1c9.png)
上ではコロンは使えないと怒られています。
しかし下は怒られていません。このままフォルダを作ることもできます。下では、WSLにリモートで接続している状態です。調べるとどうやらLinuxではコロンを使えるみたいです。なのでUbuntuのターミナルでのコマンド操作も受け付けてもらえます。
**TODO:Catch The Flag**フォルダはVSCodeでの作業中に作ったので、怒られず見逃してもらえていたようです。しかしエクスプローラー上で本来はコロンを使えないので、コロンを用いたフォルダ名はエクスプローラーで見た目が中黒にされてしまうと考えます。
![sample_colon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/cf349d38-f521-9db9-91e2-60d8cd4698a5.png)

**TODO:Catch The Flag**をコロンを用いないフォルダ名に修正しましょう。ついでに不用意な半角スペースもよろしくないようなので修正します。

# フォルダ名の修正
**todo_catch_the_flag**
このように修正することで、残り2つのファイルをエクスプローラー上でも無事にフォルダに入れることができました。
![file_mv.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/f254b401-b2aa-8844-fe52-677c971c5452.gif)
やった～

# サイズが大きすぎるとは何事じゃ
フォルダ名を修正したところ移動できたので、サイズが大きい判定を喰らったのもコロンが原因と考えます。フォルダ名とコロンについて調べてみました。
何やら**代替データストリーム**なるものがあるようです。

# 代替データストリーム
代替データストリームとは何ですか？

:::note info
NTFSファイルシステムで通常ファイルの裏に書き込めるエリアです。
:::
？？？
よくわからないのでNTFSについてまずは理解します。

## NTFS
New Technology File Systemの略です。
ファイルを管理する仕組みである、**ファイルシステム**の1つです。
NTFSはWindowsが使っているファイルシステムです。

Linuxでは違うファイルシステムを使っているようです。`df -T`コマンドで確認できます。
**Ubuntu**
![file_system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/dd549ea9-a486-c484-6f72-23fac7197e3f.png)
よくわかりませんが、Filesystem欄にNTFSが無いのでNTFSは使用していないという認識です。

代替データストリームとは、NTFSの機能で隠しファイルを作成できるもののようです。LinuxではNTFSを使用していないのでこれは作れないということですね。

# 代替データストリームを作ってみよう
ADSフォルダに`sample.txt`ファイルを作成しました。`sample.txt`の中身は"This is sample"と書かれています。
```
ADS
└sample.txt　→This is sample
 
```
**Windows**
![this_is_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/fb3d84ad-422e-31c0-0027-cf1de34a939b.png)
代替データストリームはコロンを使うことで作成できます。
`> echo This is ADS > sample.txt:hidden`で先程の`sample.txt`に対して「hidden」という名前の代替データストリームを作成しました。中身は"This is ADS"と書かれています。
**Windows**
![this_is_ads.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/510eee3f-57e1-bc64-a6e7-c7492324f08b.png)
```
ADS
└sample.txt　→This is sample
         │
　（代替データストリーム）
         └──hidden　→This is ADS
 
```
代替データストリームの中身は`> more < sample.txt:hidden`で確認できます。`type`コマンドで`sample.txt`の中身を確認しても、"This is sample"のみ表示されます。ファイルの個数も変わりませんね。空き容量が若干減っています。
**Windows**
![hidden_check.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/aa9ac1cf-3139-9149-85f4-f333127e3136.png)

## フォルダに対して代替データストリームを作ってみる
`sample.txt`のファイルに対して代替データストリームは作れました。今回はフォルダ名にコロンを使用したので、フォルダに代替データストリームが作れるか試します。
ADSフォルダに**sample**フォルダを作成しました。**sample**フォルダの中身は空っぽです。
`> echo This is ADS > sample:ADS`で先程の**sample**に対して「ADS」という名前の代替データストリームを作成しました。中身は"This is ADS"と書かれています。
**Windows**
![sample_ads.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/64fc1964-8649-14af-8b56-75bf136523f8.png)
```
ADS
├sample.txt　→This is sample
│         │
│（代替データストリーム）
│         └──hidden　→This is ADS
│ 
└sample
      │
（代替データストリーム）
      └──ADS　→This is ADS  

```
これも代替データストリームの中身は`> more < sample:ADS`で確認できます。`dir`コマンドで**sample**の中身を確認しても空っぽです。
**Windows**
![sample_check.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/5ef9a6b4-f566-d5b8-0362-d3e857575c63.png)
![sample_dir.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/8dc64286-36df-1c62-bde4-6043a72cae15.png)
代替データストリームをフォルダにも作れることができました。やった～

# で？
代替データストリームを作れることは分かりました。これはエクスプローラーからは参照できないので、データが膨れ上がるのに気づかないことがありそうです。しかし、ただ作る分には何も問題ありません。代替データストリームの付いた先程の**sample**フォルダに何かファイルを入れることも可能です。`aaa.txt`を入れてみました。
**Windows**
![move_aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/551ae0de-24fc-ba7d-8698-06a16f7bdf2f.png)
問題なさそうです。
これはもしかすると代替データストリームは関係ないのではないでしょうか。

# コロン付きファイルとコロン付きフォルダをエクスプローラー上で操作する
よくわからないのでいじってみます
コロン付きファイル、フォルダの作成は当然Windows上ではできないので、Ubuntu上で作ってみます。

## コロン付きフォルダにファイルを入れる
**TODO:Catch The Flag**フォルダでもうやりましたが念のためもう一度やってみます。

**Ubuntu**
![mkdir_test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/ef806c79-ac5b-5622-d744-4e99dc18db89.png)
**:**(コロン)フォルダと`test.txt`ファイルを作りました。
```
nandemo
└test
 ├:
 └test.txt
```
**:**(コロン)フォルダに`test.txt`ファイルを入れます。
Ubuntuターミナルでは勿論移動できるので、エクスプローラー上で移動させます。
![test_colon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/b7b5e2c4-03f9-4d75-dc5a-6fea054ffaf8.png)
あー

## フォルダにコロン付きファイルを入れる
逆です。やってみましょう。
**test**フォルダの中身は空にしました。

**Ubuntu**
![touch_colon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/dfdec873-c728-1570-8a5a-b68da80e07b0.png)
**folder**フォルダと`:(コロン).txt`ファイルを作りました。
```
nandemo
└test
 ├folder
 └:.txt
```
**folder**フォルダに`:(コロン).txt`ファイルを入れます。
![test_folder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/3ccefc86-93cd-a518-16ab-8b5991faf808.png)
！！！
これは問題ないようです。なぜ……

# コロン付きフォルダの代替データストリームが見たい
これができれば原因がつかめそうです。しかしWindowsのターミナルからUbuntu上のフォルダに入れるのでしょうか。

:::note info
できます。
:::
先輩に教えていただきました。ありがとうございます。これで何か分かりそう！
`test`フォルダの中身は爆破させました。
**:**(コロン)フォルダを作りました。
```
nandemo
└test
 └:
```
**Windows**
![cd_windows_power_shell.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/64360922-c3c0-6087-660d-eca9fa0c5316.png)
**nandemo**フォルダ内の**test**フォルダにWindowsPowerShellから入っています。**:**(コロン)フォルダは文字化けしているようです。`cd`コマンドでフォルダ内に入ってみましょう。
**Windows**
![cd_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/eb7c18ee-ab7f-5eec-e1ff-bd104a8e002b.png)
え
![cd_colon_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/6bf743f9-605f-f036-9082-b2c96edfb26c.png)
:weary:
これは……コロンがフォルダ名で認識されていない感じですかね。
代替データストリームの有無の確認を試したいのですが……![get_item_stream.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/3428dac0-5128-ba87-defd-9ff90c6342d1.png)
![dir_r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/6a9b1e12-0feb-3be3-41d7-c3b555c7f891.png)
うーんだめっぽいですね……

## Ubuntu上で作ったコロン付きファイルをエクスプローラーでWindows側に持ってくる
エクスプローラー上で切り貼りしました。上手くいかないと思っていたのですが、
![sample_colon_windows.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/391e2b35-84aa-086a-237c-a6c91e64c712.png)
できました！
代替データストリームを作ってみたファイルとフォルダが入っている**ADS**フォルダに**sample:(コロン**フォルダを入れました。
```
ADS
├sample.txt　→This is sample
│         │
│（代替データストリーム）
│         └──hidden　→This is ADS
│ 
├sample
│      │
│（代替データストリーム）
│      └──ADS　→This is ADS  
│
└sample:

```
代替データストリームを確認します。
![sample_colon_ads.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/e6e0d9c9-fe33-de96-86c6-54dffbb8bad2.png)
薄々気づいていましたが、やはりコロンの付いたフォルダにファイルが移動できなかったのに代替データストリームは関係なさそうですね……
しかし、
![sample_colon_cd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/15c17e3c-e1d9-22f3-5151-c867c53dfca0.png)
コロン付きフォルダ内に入ることができました！WindowsPowerShellでの操作は何か間違っていて、もしかしたら前段階でコロン付きフォルダ内に入れていたのかもしれません。
ここで、コロン付きフォルダにファイルを入れてみたいと思います。
![bbb_move.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/2d49a940-26b6-9312-c0fb-22aeeb6e3428.png)
できていますね！フォルダ名は文字化けしていますが、候補で補完して指定しました。
エクスプローラー上でも怒られず移動できました。
![sample_colon_windows.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/39f4b71d-130d-fedb-19c8-366634a6de56.png)
文字化けしたコロンを直接入力すると、
![sample_colon_cd_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982235/ec7a9a6f-521c-c4cd-a0b0-542e10519dcb.png)
これはやはりだめなようです。

# 可能性を考える
Ubuntu上かつコロン付きのフォルダかつエクスプローラーでの操作が上手くいかないようです。WindowsPowerShellでLinuxのフォルダに入った時は操作が上手くいっていなかったので、同じようにWindows側のエクスプローラーからLinuxのフォルダやらファイルやらの操作は何か難しい処理になってしまうのでしょうか。サイズが大きすぎる原因は分からず終いですが……今回はここまででまとめます。

# 終わり
結局ファイルが移動できなかった原因は分かりませんでした。所謂kusoまとめサイトのような結果になってしまい不甲斐ないです……
しかし、代替データストリームの概要を知ることができたのは面白かったです。
ご覧いただきありがとうございました。

---
この記事は IPFactory Advent Calendar 2022 の 12 日目の記事です。

https://qiita.com/advent-calendar/2022/ipfactory

12月11日はdamegane先輩の記事でした。

https://duglaser.dev/articles/aF8JUoNK4eRPl3IeOL4d

今回アドベントカレンダーの日付を直前でずらしていただきました。ありがとうございます。ご迷惑をおかけしました。

# 参考
[ファイル名に使わない方が良い文字](https://all.undo.jp/asr/1st/document/01_03.html)
- ファイル、フォルダ名に使わない方がいい文字が理由と共に挙げられています。代替データストリームの存在はこれで知りました。
[NTFS ALTERNATE DATA STREAMS: THE GOOD AND THE BAD
](https://blog.foldersecurityviewer.com/ntfs-alternate-data-streams-the-good-and-the-bad/)
- 先輩に教えていただいたページです。代替データストリームが何たるか、メリット、デメリット、作成方法等が載っています。
[代替データストリーム（ADS）について色々調べてみた](https://qiita.com/minr/items/c2393f532b2df35f7a9d)
- こちらも代替データストリームの作成方法や検索方法が分かります。
[NTFSとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word13131.html)
- ファイルシステムの概要もあわせて載っているので、分かりやすいです。