Itu tergantung pada sistem file apa yang Anda gunakan. Dari beberapa yang lebih populer:
- ext3:Tidak
- ext4:Tidak
- jfs:Ya
- reiserf:Tidak
- xfs:Tidak
Jawabannya adalah Anda tidak bisa, kecuali sistem file Anda memiliki bug. Inilah alasannya:
Ada panggilan sistem untuk mengganti nama file Anda yang ditentukan dalam fs/namei.c
disebut renameat
:
SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
int, newdfd, const char __user *, newname)
Saat panggilan sistem dipanggil, ia melakukan pencarian jalur (do_path_lookup
) pada namanya. Terus lacak ini, dan kita sampai ke link_path_walk
yang memiliki ini:
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;
...
Kode ini berlaku untuk sistem file apa pun. Apa artinya ini? Artinya jika Anda mencoba meneruskan parameter dengan '/'
yang sebenarnya karakter sebagai nama file menggunakan cara tradisional, itu tidak akan melakukan apa yang Anda inginkan. Tidak ada cara untuk melarikan diri dari karakter. Jika sistem file "mendukung" ini, itu karena keduanya:
- Gunakan karakter unicode atau sesuatu yang terlihat seperti garis miring tetapi tidak.
- Mereka memiliki bug.
Selanjutnya, jika Anda melakukannya masuk dan edit byte untuk menambahkan karakter garis miring ke dalam nama file, hal buruk akan terjadi. Itu karena Anda tidak pernah bisa merujuk ke file ini dengan nama :( karena setiap kali Anda melakukannya, Linux akan menganggap Anda merujuk ke direktori yang tidak ada. Menggunakan teknik 'rm *' juga tidak akan berhasil, karena bash hanya memperluasnya ke nama file. Bahkan rm -rf
tidak akan berfungsi, karena strace sederhana mengungkapkan bagaimana hal-hal terjadi di bawah tenda (disingkat):
$ 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
...
Perhatikan bahwa panggilan ini ke unlinkat
akan gagal karena mereka perlu merujuk ke file dengan nama.
Hanya dengan penyandian yang disepakati. Misalnya, Anda dapat menyetujui bahwa %
akan dikodekan sebagai %%
dan %2F
itu berarti /
. Semua perangkat lunak yang mengakses file ini harus memahami penyandian.
Anda dapat menggunakan karakter Unicode yang ditampilkan sebagai /
(misalnya garis miring fraksi), dengan asumsi sistem file Anda mendukungnya.