Saya mencoba mempelajari perintah UNIX dan saya memainkan permainan ini untuk belajar dan saya benar-benar terjebak saat ini. Saya berada di server melalui ssh dan direktori penuh dengan file dan folder acak dan kata sandi untuk tingkat berikutnya ada di dalam salah satu file. Saya telah diberitahu bahwa file tersebut memiliki attrbutes berikut:
- dapat dibaca manusia
- 1033 byte
- tidak dapat dieksekusi
Saya menduga bahwa saya harus menggunakan find
perintah dan saya mencoba find ! -executable
tetapi itu mengembalikan banyak file. Satu-satunya bantuan yang dapat dibaca manusia yang dapat saya temukan dalam manual atau online adalah mencetak ukuran file dalam yang dapat dibaca manusia. Jadi saya agak tersesat di sana?
Saya juga mencoba find ~ -size 1033b
tetapi itu tidak menghasilkan apa-apa. Tetapi ketika saya mencobanya find ~ -size -1033b
mengembalikan setiap file dalam direktori.
sumber
Jawaban:
Untuk memfilter nama file yang dapat dibaca manusia, Anda dapat menggunakan nama kelas karakter
[:print:]
(yang dapat dicetak ) . Anda akan menemukan lebih banyak tentang kelas-kelas tersebut di manual untuk .grep
Setelah dipikir-pikir, persyaratan "yang dapat dibaca manusia" mungkin merujuk pada konten file, alih-alih namanya. Dengan kata lain, Anda akan mencari file teks . Itu sedikit lebih rumit. Seperti yang disarankan @D_Bye dalam komentar, Anda harus menggunakan
file
perintah untuk menentukan tipe konten file. Tetapi itu bukan ide yang baik untuk dijalankanfile
setelah pipa, karena itu akan menyulitkan tugas menampilkan nama file. Inilah yang saya sarankan:Ini adalah singkat bagaimana
file
-bagian bekerja:-exec
predikat mengeksekusish -c 'file -b $0 | grep -q text' FILENAME
untuk setiapFILENAME
yang memenuhi semua kondisi sebelumnya (jenis, ukuran, non-executable).sh
) berjalan singkat ini naskah :file -b $0 | grep -q text
, mengganti$0
dengan nama file.file
Program menentukan jenis konten setiap file dan output informasi ini. The-b
mencegah opsi mencetak nama setiap file diuji.grep
memfilter output yang berasal darifile
program, mencari baris yang berisi "teks" . (Lihat sendiri, bagaimana output khas darifile
perintah terlihat.)grep
tidak menampilkan teks yang difilter, karena ia memiliki opsi-q
(sunyi) yang diberikan. Apa yang dilakukannya, hanya mengubah status keluarnya menjadi0
(yang mewakili "true" - teks yang difilter ditemukan) atau 1 (berarti "kesalahan" - teks "teks" tidak muncul pada output darifile
).grep
diteruskan olehsh
kefind
dan bertindak sebagai hasil akhir dari seluruh "-exec sh -c 'file $0 | grep -q text' {} \;
" tes.-print
perintah dijalankan (yaitu nama file yang diuji dicetak).sumber
find . -type f -size 1033c
juga akan mengembalikan respons yang sama persis.Perhatikan bahwa saya menggunakan
c
bukanb
untuk ukuran file.b
untuk blok 512 byte.c
untuk byte aktual.sumber
-readable
cara yang dapat dibaca manusia (yaitu bukan biner)find
kefile
.semua yang saya tulis adalah:
dan mendapat file. Rupanya bagian yang bisa dibaca manusia adalah untuk mengusirmu.
sumber
sumber
Saya pikir untuk gim namun sintaks yang benar adalah:
Anda mendapatkan pengembalian yang mencantumkan daftar masing-masing file. Ini bekerja sangat baik untuk apa yang ingin Anda capai dalam permainan Bandit. Bola kurva nyata untuk tugas ini adalah bahwa setiap file dimulai dengan - (tanda hubung).
sumber
file ./-*
ini.Saya pikir ini adalah jawaban aktual terbaik yang akan mencakup semua 3 kondisi
Tetapi seperti yang dikatakan banyak orang, yang dapat dieksekusi dan dapat dibaca manusia adalah untuk mengusir kita, jadi gunakanlah
sudah cukup!
sumber