Saya mengunggah beberapa file font ke AWS (menjalankan Amazon Linux) dan memindahkannya ke /usr/share/fonts
direktori menggunakan cp
perintah dalam ekstensi.
Ketika saya SSH masuk dari mac saya dan menggunakan ls -a
, saya melihat beberapa file berwarna berbeda - satu set file font berwarna hitam sementara yang lain berwarna hijau. Saya ingin tahu apa yang menyebabkan hal ini terjadi, dan apakah itu akan membuat masalah untuk kode saya .
Dari jawaban lain di AskUbuntu saya menemukan kunci ini tentang bagaimana menafsirkan warna-warna ini. Saya tidak bisa mengerti mengapa .ttf akan dapat dieksekusi atau mengapa satu set .ttf akan dikenali dan bukan yang lain.
Biru: Direktori
Hijau: File data yang dapat dieksekusi atau dikenali
Biru Langit: File tertaut
Kuning dengan latar belakang hitam: Perangkat
Merah muda: File gambar grafik
Merah: File arsip
Semua file ini diunduh ke mac dari berbagai situs font sebelum diunggah.
sumber
Jawaban:
ls -l
akan memberi tahu Anda secara pasti apakah suatu file dapat dieksekusi atau tidak. Saya tidak berpikir ada misteri besar di sini. Anda mengunduh file dari berbagai sumber yang masing-masingnya mungkin memiliki bit izin berbeda yang ditetapkan karena satu dan lain alasan. * Jika Anda tidak suka melihat beberapa dengan warna dan lainnya tanpa mencobachmod -x *.ttf
... file font seharusnya tidak memerlukan set bit yang dapat dieksekusi.* Sebagai komentar Matteo Italia yang sangat tervvotasikan, yang harus dipertahankan, mengatakan: Kemungkinan besar mereka disalin dari FAT atau volume NTFS, yang tidak menyimpan bit yang dapat dieksekusi, jadi di -mount secara default sehingga semua file memiliki bit bit yang dapat dieksekusi .
sumber
Sepertinya
ls
perintah yang Anda jalankan adalah alias untukls --color
Anda dapat memeriksanya dengan menjalankan sumber
ls
:Menggunakan kutipan:
"ls" -a
Menggunakan path lengkap (mis. Jika
ls
lokasi berada di/bin/ls
) dan lihat apakah itu menunjukkan warna atau tidak:/ bin / ls -a
Catatan: menjalankan
ls -la
akan menunjukkan kepada Anda rincian file, dan Anda akan dapat melihat detail lengkap dari setiap file, yang akan memungkinkan Anda untuk memeriksa dengan output yang diharapkan darils --color
sumber
\ls -a
,, atau menggunakan perintah 'builtincommand ls -a
,. Jika Anda ingin melihat bagaimana suatu perintah menyelesaikan, daripada menjalankannya, adatype -a ls
.ls
.ls
. Tapi ini informasi yang bagus.Warna menunjukkan bahwa file ditandai sebagai "dapat dieksekusi" *
Bit izin yang dapat dieksekusi (satu untuk pengguna, satu untuk grup, satu untuk yang lain) berarti bahwa jika nama file dilewatkan ke salah satu sistem exec panggilan kernel akan melanjutkan dan mencoba dan membukanya.
Konvensi adalah bahwa hanya file yang benar-benar dimaksudkan untuk dibuka yang memiliki bit yang dapat dieksekusi. Namun ketika memindahkan / menyalin file, terutama di lingkungan multi platform, mudah untuk secara tidak sengaja mendapatkan atau kehilangan bit yang dapat dieksekusi.
File yang disimpan di sistem file yang tidak mendukung izin unix (gendut, ntfs dll) cenderung muncul ke sistem sebagai executable. Memindahkan atau menyalin file-file ini ke sistem file unix menggunakan alat yang mempertahankan izin kemudian akan mempertahankan bit yang dapat dieksekusi tersebut.
Di sisi lain menggunakan alat untuk memindahkan file yang tidak dapat mempertahankan izin atau digunakan dengan opsi untuk mempertahankan izin yang tidak dipilih kemungkinan akan mengakibatkan salinan tidak ditandai sebagai dapat dieksekusi meskipun aslinya.
Jadi setelah dipindahkan di berbagai platform menggunakan berbagai alat bit izin yang dapat dieksekusi dapat berakhir dalam keadaan yang cukup sewenang-wenang.
* Saya tidak 100% yakin bagaimana ls menangani case di mana beberapa tetapi tidak semua bit executable diatur.
sumber
Seperti jawaban sebelumnya mengatakan, pewarnaan adalah untuk menunjukkan apakah file dianggap dapat dieksekusi atau tidak.
Izin "eksekusi" (= bit) di Linux dan sebagian besar Unix lainnya memiliki satu arti untuk file dan lainnya untuk direktori.
Untuk direktori, jika Anda memiliki izin untuk menjalankannya, Anda dapat melihat isinya. Jika tidak, Anda tidak dapat melakukan cd ke direktori, atau Anda dapat membuat daftar file di dalamnya, bahkan jika Anda memiliki akses baca dan tulis ke direktori.
Untuk file biasa (tidak seperti file perangkat dan jenis file Unix khusus lainnya), bit eksekusi berarti bahwa jika Anda menggunakan nama file pada baris perintah, O / S (atau lebih tepatnya: shell) akan mencoba "mengeksekusi" atau menjalankan file sebagai perintah. Sebaliknya, jika Anda tidak memiliki izin untuk mengeksekusi file, Anda tidak dapat menjalankannya dari baris perintah.
Jadi, jika Anda, misalnya, menghapus izin x dari semua pengguna pada file / bin / cat (yang merupakan perintah Unix) Anda sendiri atau siapa pun dan program apa pun yang mencoba menggunakan perintah "cat" akan gagal.
Itu adalah perintah OS, seperti "cat" dan "grep", yang memiliki file executeble yang biasanya di / * / bin / direktori - / bin, / usr / bin, / sbin, / usr / sbin dll.
Dan kemudian ada skrip yang tidak dikompilasi, ditafsirkan, yang dapat ditulis dalam beberapa bahasa pemrograman, seperti skrip Python atau shell (pada dasarnya, perintah yang Anda tulis seolah-olah dari commandline saat sshing ke server).
Sekarang, ketika Anda menetapkan bit eksekusi pada file skrip (misalnya, file foobar), dan mencoba mengeksekusinya dengan shell Anda: "./foobar", shell mencoba menganalisis file dan menemukan program yang benar untuk meneruskan skrip untuk.
Shell ini melakukannya dengan mencoba membaca baris pertama file dan menemukan notasi "shebang" dari program mana yang seharusnya dijalankan.
Jadi, jika foobar Anda adalah file teks dengan baris pertama seperti ini:
Kemudian shell akan mencoba untuk mengeksekusi perintah
/usr/bin/python foobar
:, pada dasarnya memanggil juru bahasa python dan meneruskan nama file foobar Anda ke file tersebut sebagai skrip Python.Jika shell tidak menemukan baris pertama dalam file Anda, maka shell akan mencoba mengeksekusi foobar itu sendiri seolah-olah berisi perintah shell.
Jika file dengan bit yang dapat dieksekusi tidak mengandung perintah shell yang valid, shell hanya akan mengeluh.
Jadi inilah yang akan terjadi, jika Anda memiliki file TTF dengan set bit exec dan mencoba menjalankannya dari baris perintah:
Jadi, untuk font, mungkin lebih rapi, jika bit exec tidak diset, tetapi tidak benar-benar mengubah apa pun.
PS Hanya beberapa informasi asing. Jika Anda menghapus bit eksekusi pada beberapa perintah atau skrip, itu mungkin masih diteruskan ke program lain sebagai argumen. Jika program lain itu tahu, bagaimana menjalankan perintah Anda, penghapusan exec bit Anda tidak terlalu penting. Misalnya, skrip foobar Python masih akan dijalankan oleh juru bahasa Python, jika Anda melakukannya dari baris perintah:
dari pada
Sama dengan contoh perintah sistem, seperti "cat". Jika Anda menghapus bit exec dari "cat", Anda masih bisa meneruskannya ke instance baru shell untuk dieksekusi:
akan bekerja, bahkan jika Anda telah menghapus bit exec dari kucing dan
tidak.
sumber
cat
atauecho
tidak tidak membiarkan Anda menjalankan melaluish -c 'cat myfile'
, atau dengansystem("cat", "myfile")
bahasa seperti Ruby. Alasan Python dapat menjalankan.py
file yang tidak dapat dieksekusi adalah karena membacanya sebagai string teks, dan kemudian menggunakan penerjemah untuk membuat teks itu berperilaku seolah-olah itu kode.execve
panggilan sistem bersikeras untuk menjalankan izin. Pada sistem berbasis glibc, Anda dapat memanggil linker dinamis sebagai program untuk mendapatkan efek yang kira-kira sama dengan baris shebang (/lib64/ld-linux-x86-64.so.2 /bin/cat
) dan ini berfungsi untuk saya bahkan jika file pada baris perintah tidak dapat dieksekusi, tetapish -c cat
tidak akan melakukan itu untukmu.