[解決済み] ファイル名に"/"を使用することは可能ですか?
質問
絶対にやってはいけないことだとは思うのですが、Linux でファイル名の中で通常ディレクトリを区切るスラッシュ文字を使用する方法はありますか?
どのように解決するのですか?
答えは、ファイルシステムにバグがない限り、無理です。その理由は次のとおりです。
で定義されたファイル名を変更するためのシステムコールがあります。
fs/namei.c
と呼ばれる
renameat
:
SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
int, newdfd, const char __user *, newname)
システムコールが呼び出されると、パスのルックアップを行います (
do_path_lookup
) を行います。これをトレースし続けると
link_path_walk
にたどり着き、これを持っています。
static int link_path_walk(const char *name, struct nameidata *nd)
{
struct path next;
int err;
unsigned int lookup_flags = nd->flags;
while (*name=='/')
name++;
if (!*name)
return 0;
...
このコードはどんなファイルシステムにも適用されます。これは何を意味するのでしょうか?それは、もしあなたがパラメータを渡すときに実際の
'/'
文字をファイル名としてパラメータに渡そうとした場合、 従来の方法では思い通りにならないことを意味します。この文字をエスケープする方法がないのです。ファイルシステムがこれをサポートしている場合は、以下のいずれかの理由によるものです。
- ユニコード文字または に見えるもの のように見えるがスラッシュではないものを使用する。
- バグがあります。
さらに、もしあなたが
した
を実行し、ファイル名にスラッシュ文字を追加するためにバイトを編集すると、悪いことが起こります。なぜなら、このファイルを名前で参照することは決してできないからです :( なぜなら、参照するときはいつでも、Linux は存在しないディレクトリを参照していると仮定するからです。rm *」というテクニックを使っても、bashは単にそれをファイル名に展開するだけなので、うまくいきません。でも
rm -rf
でさえうまくいかないでしょう。なぜなら、単純な strace はボンネットの下で物事がどのように進行しているかを明らかにするからです。
$ ls testdir
myfile2 out
$ strace -vf rm -rf testdir
...
unlinkat(3, "myfile2", 0) = 0
unlinkat(3, "out", 0) = 0
fcntl(3, F_GETFD) = 0x1 (flags FD_CLOEXEC)
close(3) = 0
unlinkat(AT_FDCWD, "testdir", AT_REMOVEDIR) = 0
...
これらの
unlinkat
の呼び出しは、ファイル名で参照する必要があるため失敗することに注意してください。
関連
-
ディープインシステムの画面解像度を設定する方法は?ディープインシステムの解像度を設定する方法
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] Pythonでファイル名から拡張子を抽出する
-
[解決済み] Linux で grep を使ってファイル名だけを表示するにはどうしたらいいですか?
-
[解決済み] grep --exclude/--include構文を使って特定のファイルをgrepしないようにする
-
[解決済み] WindowsとLinuxのディレクトリ名で禁止されている文字は何ですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Bashでファイル名と拡張子を抽出する。
-
[解決済み】カレントディレクトリの全サブディレクトリのリストを取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linux sarコマンドによるシステム性能の詳細解析事例
-
Linux Mintシステムでプログラムをアンインストールするには? Linux で不要なアプリケーションをアンインストールするためのヒント
-
LinuxでJenkinsプラグインのインストールが遅い場合の解決策
-
Centos7 dns service named installation, encountered ** server can't find xxx.com: NXDOMAIN問題
-
apache startup error (98) Address already in use: make_sock: could not bind to...
-
[解決済み] CPAN.pmが@INCに見つからない(@INCには含まれています。/usr/local/lib/perl5 /usr/local/share/perl5。
-
[解決済み] エラーです。Can't open display: (null)と表示されることがあります。
-
[解決済み] エクスポートされた環境変数を削除する方法を教えてください。
-
[解決済み] find .コマンドでディレクトリを除外する方法
-
[解決済み] WindowsとLinuxのディレクトリ名で禁止されている文字は何ですか?