12月12日のIPFactoryアドベントカレンダーです。
はじめに
この記事は次の見出しの原因を解明できていません。ご存知の方がいらっしゃいましたら、ぜひ教えてください。
ファイル、フォルダ名を決める時、何と付ければ良いか未だにパッと思いつきません。結果行き当たりばったり統一性の無い名前にしてしまいます。
きちんと名前を付けている方から見ると大変ショッキングなネーミングと思われます。
ファイル名やフォルダ名に使わない方がよい文字記号を把握せず、配慮しなかった結果ご覧の有様です。
ファイルが移動できない
Linux上のファイルを、エクスプローラーにて同じ階層に作ったフォルダに入れようとしたら、怒られてしまいました。
ファイル'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
を移動させてみます。
フォルダ名がおかしい
エクスプローラー上では、フォルダ名がTODO・Catch the flagとなっていましたが、本来付けた名前ではありません。
どうやらコロンがいけないようです。コロンはWindowsではファイル、フォルダ名に使えない文字に指定されていました。
エクスプローラー上でのフォルダ作成
VSCode上でのフォルダ作成
上ではコロンは使えないと怒られています。
しかし下は怒られていません。このままフォルダを作ることもできます。下では、WSLにリモートで接続している状態です。調べるとどうやらLinuxではコロンを使えるみたいです。なのでUbuntuのターミナルでのコマンド操作も受け付けてもらえます。
TODO:Catch The FlagフォルダはVSCodeでの作業中に作ったので、怒られず見逃してもらえていたようです。しかしエクスプローラー上で本来はコロンを使えないので、コロンを用いたフォルダ名はエクスプローラーで見た目が中黒にされてしまうと考えます。
TODO:Catch The Flagをコロンを用いないフォルダ名に修正しましょう。ついでに不用意な半角スペースもよろしくないようなので修正します。
フォルダ名の修正
todo_catch_the_flag
このように修正することで、残り2つのファイルをエクスプローラー上でも無事にフォルダに入れることができました。
やった~
サイズが大きすぎるとは何事じゃ
フォルダ名を修正したところ移動できたので、サイズが大きい判定を喰らったのもコロンが原因と考えます。フォルダ名とコロンについて調べてみました。
何やら代替データストリームなるものがあるようです。
代替データストリーム
代替データストリームとは何ですか?
NTFSファイルシステムで通常ファイルの裏に書き込めるエリアです。
???
よくわからないのでNTFSについてまずは理解します。
NTFS
New Technology File Systemの略です。
ファイルを管理する仕組みである、ファイルシステムの1つです。
NTFSはWindowsが使っているファイルシステムです。
Linuxでは違うファイルシステムを使っているようです。df -T
コマンドで確認できます。
Ubuntu
よくわかりませんが、Filesystem欄にNTFSが無いのでNTFSは使用していないという認識です。
代替データストリームとは、NTFSの機能で隠しファイルを作成できるもののようです。LinuxではNTFSを使用していないのでこれは作れないということですね。
代替データストリームを作ってみよう
ADSフォルダにsample.txt
ファイルを作成しました。sample.txt
の中身は"This is sample"と書かれています。
ADS
└sample.txt →This is sample
Windows
代替データストリームはコロンを使うことで作成できます。
> echo This is ADS > sample.txt:hidden
で先程のsample.txt
に対して「hidden」という名前の代替データストリームを作成しました。中身は"This is ADS"と書かれています。
Windows
ADS
└sample.txt →This is sample
│
(代替データストリーム)
└──hidden →This is ADS
代替データストリームの中身は> more < sample.txt:hidden
で確認できます。type
コマンドでsample.txt
の中身を確認しても、"This is sample"のみ表示されます。ファイルの個数も変わりませんね。空き容量が若干減っています。
Windows
フォルダに対して代替データストリームを作ってみる
sample.txt
のファイルに対して代替データストリームは作れました。今回はフォルダ名にコロンを使用したので、フォルダに代替データストリームが作れるか試します。
ADSフォルダにsampleフォルダを作成しました。sampleフォルダの中身は空っぽです。
> echo This is ADS > sample:ADS
で先程のsampleに対して「ADS」という名前の代替データストリームを作成しました。中身は"This is ADS"と書かれています。
Windows
ADS
├sample.txt →This is sample
│ │
│(代替データストリーム)
│ └──hidden →This is ADS
│
└sample
│
(代替データストリーム)
└──ADS →This is ADS
これも代替データストリームの中身は> more < sample:ADS
で確認できます。dir
コマンドでsampleの中身を確認しても空っぽです。
Windows
代替データストリームをフォルダにも作れることができました。やった~
で?
代替データストリームを作れることは分かりました。これはエクスプローラーからは参照できないので、データが膨れ上がるのに気づかないことがありそうです。しかし、ただ作る分には何も問題ありません。代替データストリームの付いた先程のsampleフォルダに何かファイルを入れることも可能です。aaa.txt
を入れてみました。
Windows
問題なさそうです。
これはもしかすると代替データストリームは関係ないのではないでしょうか。
コロン付きファイルとコロン付きフォルダをエクスプローラー上で操作する
よくわからないのでいじってみます
コロン付きファイル、フォルダの作成は当然Windows上ではできないので、Ubuntu上で作ってみます。
コロン付きフォルダにファイルを入れる
TODO:Catch The Flagフォルダでもうやりましたが念のためもう一度やってみます。
Ubuntu
:(コロン)フォルダとtest.txt
ファイルを作りました。
nandemo
└test
├:
└test.txt
:(コロン)フォルダにtest.txt
ファイルを入れます。
Ubuntuターミナルでは勿論移動できるので、エクスプローラー上で移動させます。
あー
フォルダにコロン付きファイルを入れる
逆です。やってみましょう。
testフォルダの中身は空にしました。
Ubuntu
folderフォルダと:(コロン).txt
ファイルを作りました。
nandemo
└test
├folder
└:.txt
folderフォルダに:(コロン).txt
ファイルを入れます。
!!!
これは問題ないようです。なぜ……
コロン付きフォルダの代替データストリームが見たい
これができれば原因がつかめそうです。しかしWindowsのターミナルからUbuntu上のフォルダに入れるのでしょうか。
できます。
先輩に教えていただきました。ありがとうございます。これで何か分かりそう!
test
フォルダの中身は爆破させました。
:(コロン)フォルダを作りました。
nandemo
└test
└:
Windows
nandemoフォルダ内のtestフォルダにWindowsPowerShellから入っています。:(コロン)フォルダは文字化けしているようです。cd
コマンドでフォルダ内に入ってみましょう。
Windows
え
これは……コロンがフォルダ名で認識されていない感じですかね。
代替データストリームの有無の確認を試したいのですが……
うーんだめっぽいですね……
Ubuntu上で作ったコロン付きファイルをエクスプローラーでWindows側に持ってくる
エクスプローラー上で切り貼りしました。上手くいかないと思っていたのですが、
できました!
代替データストリームを作ってみたファイルとフォルダが入っているADSフォルダにsample:(コロンフォルダを入れました。
ADS
├sample.txt →This is sample
│ │
│(代替データストリーム)
│ └──hidden →This is ADS
│
├sample
│ │
│(代替データストリーム)
│ └──ADS →This is ADS
│
└sample:
代替データストリームを確認します。
薄々気づいていましたが、やはりコロンの付いたフォルダにファイルが移動できなかったのに代替データストリームは関係なさそうですね……
しかし、
コロン付きフォルダ内に入ることができました!WindowsPowerShellでの操作は何か間違っていて、もしかしたら前段階でコロン付きフォルダ内に入れていたのかもしれません。
ここで、コロン付きフォルダにファイルを入れてみたいと思います。
できていますね!フォルダ名は文字化けしていますが、候補で補完して指定しました。
エクスプローラー上でも怒られず移動できました。
文字化けしたコロンを直接入力すると、
これはやはりだめなようです。
可能性を考える
Ubuntu上かつコロン付きのフォルダかつエクスプローラーでの操作が上手くいかないようです。WindowsPowerShellでLinuxのフォルダに入った時は操作が上手くいっていなかったので、同じようにWindows側のエクスプローラーからLinuxのフォルダやらファイルやらの操作は何か難しい処理になってしまうのでしょうか。サイズが大きすぎる原因は分からず終いですが……今回はここまででまとめます。
終わり
結局ファイルが移動できなかった原因は分かりませんでした。所謂kusoまとめサイトのような結果になってしまい不甲斐ないです……
しかし、代替データストリームの概要を知ることができたのは面白かったです。
ご覧いただきありがとうございました。
この記事は IPFactory Advent Calendar 2022 の 12 日目の記事です。
12月11日はdamegane先輩の記事でした。
今回アドベントカレンダーの日付を直前でずらしていただきました。ありがとうございます。ご迷惑をおかけしました。
参考
- ファイル、フォルダ名に使わない方がいい文字が理由と共に挙げられています。代替データストリームの存在はこれで知りました。
NTFS ALTERNATE DATA STREAMS: THE GOOD AND THE BAD
- 先輩に教えていただいたページです。代替データストリームが何たるか、メリット、デメリット、作成方法等が載っています。
代替データストリーム(ADS)について色々調べてみた - こちらも代替データストリームの作成方法や検索方法が分かります。
NTFSとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 - ファイルシステムの概要もあわせて載っているので、分かりやすいです。