LoginSignup
7
2

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-12-11

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

はじめに

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

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

ファイルが移動できない

Linux上のファイルを、エクスプローラーにて同じ階層に作ったフォルダに入れようとしたら、怒られてしまいました。
too_large_to_mv.png

ファイル'flag_page.html'は大きすぎて、対象のファイルシステムに入りません。

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

なんとしてでも移動させてやる

エクスプローラー上が駄目ならターミナルでやるまでです。

ディレクトリ構成は次のような感じです。

nandemo
└seccon_forHighSchoolStudent_2022
 ├TODO:Catch The Flag     (空のフォルダ)
 │                        ↑
 ├flag_page.html       ───┤
 ├index.php            ───┤ 移動させたい⇒大きすぎて入らない
 └style.css            ───┘

flag_page.htmlの他にindex.phpstyle.cssの3つのファイルをTODO:Catch The Flagフォルダに入れたいのですが、どれも同様に怒られてしまいます。

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

Ubuntu
mv.png
できるじゃん

フォルダ名がおかしい

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

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

エクスプローラー上でのフォルダ作成

explorer_colon_error.png
エクスプローラー上でコロンを使おうとすると勿論怒られます。

VSCode上でのフォルダ作成

VSCode_colon_error.png
VSCode_colon.png
上ではコロンは使えないと怒られています。
しかし下は怒られていません。このままフォルダを作ることもできます。下では、WSLにリモートで接続している状態です。調べるとどうやらLinuxではコロンを使えるみたいです。なのでUbuntuのターミナルでのコマンド操作も受け付けてもらえます。
TODO:Catch The FlagフォルダはVSCodeでの作業中に作ったので、怒られず見逃してもらえていたようです。しかしエクスプローラー上で本来はコロンを使えないので、コロンを用いたフォルダ名はエクスプローラーで見た目が中黒にされてしまうと考えます。
sample_colon.png

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

フォルダ名の修正

todo_catch_the_flag
このように修正することで、残り2つのファイルをエクスプローラー上でも無事にフォルダに入れることができました。
file_mv.gif
やった~

サイズが大きすぎるとは何事じゃ

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

代替データストリーム

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

NTFSファイルシステムで通常ファイルの裏に書き込めるエリアです。

???
よくわからないのでNTFSについてまずは理解します。

NTFS

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

Linuxでは違うファイルシステムを使っているようです。df -Tコマンドで確認できます。
Ubuntu
file_system.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
代替データストリームはコロンを使うことで作成できます。
> echo This is ADS > sample.txt:hiddenで先程のsample.txtに対して「hidden」という名前の代替データストリームを作成しました。中身は"This is ADS"と書かれています。
Windows
this_is_ads.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

フォルダに対して代替データストリームを作ってみる

sample.txtのファイルに対して代替データストリームは作れました。今回はフォルダ名にコロンを使用したので、フォルダに代替データストリームが作れるか試します。
ADSフォルダにsampleフォルダを作成しました。sampleフォルダの中身は空っぽです。
> echo This is ADS > sample:ADSで先程のsampleに対して「ADS」という名前の代替データストリームを作成しました。中身は"This is ADS"と書かれています。
Windows
sample_ads.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
sample_dir.png
代替データストリームをフォルダにも作れることができました。やった~

で?

代替データストリームを作れることは分かりました。これはエクスプローラーからは参照できないので、データが膨れ上がるのに気づかないことがありそうです。しかし、ただ作る分には何も問題ありません。代替データストリームの付いた先程のsampleフォルダに何かファイルを入れることも可能です。aaa.txtを入れてみました。
Windows
move_aaa.png
問題なさそうです。
これはもしかすると代替データストリームは関係ないのではないでしょうか。

コロン付きファイルとコロン付きフォルダをエクスプローラー上で操作する

よくわからないのでいじってみます
コロン付きファイル、フォルダの作成は当然Windows上ではできないので、Ubuntu上で作ってみます。

コロン付きフォルダにファイルを入れる

TODO:Catch The Flagフォルダでもうやりましたが念のためもう一度やってみます。

Ubuntu
mkdir_test.png
:(コロン)フォルダとtest.txtファイルを作りました。

nandemo
└test
 ├:
 └test.txt

:(コロン)フォルダにtest.txtファイルを入れます。
Ubuntuターミナルでは勿論移動できるので、エクスプローラー上で移動させます。
test_colon.png
あー

フォルダにコロン付きファイルを入れる

逆です。やってみましょう。
testフォルダの中身は空にしました。

Ubuntu
touch_colon.png
folderフォルダと:(コロン).txtファイルを作りました。

nandemo
└test
 ├folder
 └:.txt

folderフォルダに:(コロン).txtファイルを入れます。
test_folder.png
!!!
これは問題ないようです。なぜ……

コロン付きフォルダの代替データストリームが見たい

これができれば原因がつかめそうです。しかしWindowsのターミナルからUbuntu上のフォルダに入れるのでしょうか。

できます。

先輩に教えていただきました。ありがとうございます。これで何か分かりそう!
testフォルダの中身は爆破させました。
:(コロン)フォルダを作りました。

nandemo
└test
 └:

Windows
cd_windows_power_shell.png
nandemoフォルダ内のtestフォルダにWindowsPowerShellから入っています。:(コロン)フォルダは文字化けしているようです。cdコマンドでフォルダ内に入ってみましょう。
Windows
cd_error.png

cd_colon_error.png
:weary:
これは……コロンがフォルダ名で認識されていない感じですかね。
代替データストリームの有無の確認を試したいのですが……get_item_stream.png
dir_r.png
うーんだめっぽいですね……

Ubuntu上で作ったコロン付きファイルをエクスプローラーでWindows側に持ってくる

エクスプローラー上で切り貼りしました。上手くいかないと思っていたのですが、
sample_colon_windows.png
できました!
代替データストリームを作ってみたファイルとフォルダが入っているADSフォルダにsample:(コロンフォルダを入れました。

ADS
├sample.txt →This is sample
│         │
│(代替データストリーム)
│         └──hidden →This is ADS
│ 
├sample
│      │
│(代替データストリーム)
│      └──ADS →This is ADS  
│
└sample:

代替データストリームを確認します。
sample_colon_ads.png
薄々気づいていましたが、やはりコロンの付いたフォルダにファイルが移動できなかったのに代替データストリームは関係なさそうですね……
しかし、
sample_colon_cd.png
コロン付きフォルダ内に入ることができました!WindowsPowerShellでの操作は何か間違っていて、もしかしたら前段階でコロン付きフォルダ内に入れていたのかもしれません。
ここで、コロン付きフォルダにファイルを入れてみたいと思います。
bbb_move.png
できていますね!フォルダ名は文字化けしていますが、候補で補完して指定しました。
エクスプローラー上でも怒られず移動できました。
sample_colon_windows.png
文字化けしたコロンを直接入力すると、
sample_colon_cd_error.png
これはやはりだめなようです。

可能性を考える

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

終わり

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


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

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

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

参考

ファイル名に使わない方が良い文字

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2