ls renkleri: neden bazı yazı tiplerim siyah ve diğerleri yeşil çıktı


10

Bazı font dosyalarını AWS'ye (Amazon Linux çalıştıran) yükledim ve .ebextensions komutunu /usr/share/fontskullanarak dizine cptaşıdım.

Mac bilgisayarımda SSH kullandığımda ve kullandığımda ls -a, bazı dosyaların farklı renkte olduğunu görüyorum - bir dizi yazı tipi dosyası siyah, diğerleri yeşil. Bunun nedenini merak ediyorum ve kodum için herhangi bir sorun yaratıp yaratmayacağını merak ediyorum .

Beanstalk'ta AWS Linux çalıştıran yazı tipleri dizini

ls -la ekran görüntüsü

Gönderen Ask Ubuntu başka cevap I bu renkleri nasıl yorumlanacağı bu anahtar buldum. Neden bir .ttf dosyasının çalıştırılabilir olacağını veya neden bir .ttfs kümesinin diğerini tanıyacağını anlayamıyorum.

Mavi: Dizin

Yeşil: Yürütülebilir veya tanınan veri dosyası

Sky Blue: Bağlantılı dosya

Sarı siyah arka plan: Aygıt

Pembe: Grafik görüntü dosyası

Kırmızı: Arşiv dosyası

Bu dosyaların tümü yüklenmeden önce çeşitli yazı tipi sitelerinden bir mac'a indirildi.


5
Belirli renkler (mavi, pembe, vb.) Hiçbir şey ifade etmiyor. Renkleri istediğiniz gibi olacak şekilde özelleştirebilirsiniz. linux-sxs.org/housekeeping/lscolors.html Sisteminize özel renkleri kontrol etmek için $ LS_COLORS
beardedlinuxgeek

Açıklığa kavuşturmak için, amacım aslında renklerle ilgili değildi, ancak bunun komut dosyalarım / kodumla herhangi bir sorunla karşılaşacağımı gösterip göstermediğini anlamak.
Pranab

Yanıtlar:


13

ls -lbir dosyanın yürütülebilir olup olmadığını kesin olarak söyleyecektir. Burada büyük bir gizem olduğunu sanmıyorum. Her biri bir sebepten ötürü farklı izin bitlerine sahip olabilecek çeşitli kaynaklardan dosya indirdiniz. * Bazıları renklerle ve diğerleri denemeden görmek istemiyorsanız chmod -x *.ttf... yazı tipi dosyalarının çalıştırılabilir bit setine ihtiyacı yoktur.

* Matteo Italia'nın korunması gereken son derece açık yorumunun söylediği gibi: Büyük olasılıkla, yürütülebilir biti saklamayan bir FAT veya NTFS biriminden kopyalandılar, bu nedenle tüm dosyaların yürütülebilir bit setine sahip olması için varsayılan olarak monte edilirler. .


1
Kesinlikle. 'Yürütülebilir' izin ayarlı olan ve olmayan bir dosya arasındaki tek fark, dosyayı komut satırından çalıştırmaya çalıştığınızda x bit ayarlı dosya için işletim sisteminin bir programı kullanmaya çalışmasıdır. herhangi bir sistemde o dosyayı açmak için tanımlanır.
Gnudiff

2
@Pranab no, yazı tipleri için herhangi bir fark olmamalıdır.
Gnudiff

1
@Pranab Memnuniyetle yardımcı olabilirim. Klavye ile uygun bir bilgisayardayken, biraz daha bilgilendirici bir cevap vermeye çalışacağım, böylece daha geniş bir bağlam mevcut.
Gnudiff

1
Aslında, başka türlü bilmeyen birini yanlış yönlendirmemeyi tercih ederim, bu yüzden orijinal yorumum eksi yanlış bitler: Bitin ayarlanmasının çeşitli nedenleri vardır .. Hat boyunca herhangi bir yerde çalıştırılabilir bit açılırsa dosyayı "takip edebilir". (Bu, onu kopyalayan her kişinin bu orijinal bitleri koruduğunu varsayar.) Her durumda oldukça zararsızdır.
B Katmanı

12
Büyük olasılıkla, yürütülebilir biti saklamayan bir FAT veya NTFS biriminden kopyalandılar, bu nedenle tüm dosyaların yürütülebilir bit kümesine sahip olması için varsayılan olarak monte edilirler .
Matteo Italia

6

lsYürüttüğünüz komutun takma adı olduğu anlaşılıyorls --color

adam ls

--color [= NE ZAMAN] çıktıyı renklendirir; NE ZAMAN 'her zaman' (atlanırsa varsayılan), 'otomatik' veya 'asla' olabilir; aşağıda daha fazla bilgi

Başlangıç ​​noktasını çalıştırarak kontrol edebilirsiniz ls:

  • Tırnak işaretlerini kullanma:

    "ls" -a

  • Tam yolu kullanarak (örn. lsKonum varsa /bin/ls) ve renkleri gösterip göstermediğine bakın:

    / bin / ls -a

Not: çalışma ls -lasize dosyaların ayrıntılarını gösterecektir ve her dosyanın tüm ayrıntılarını görebileceksiniz, bu da beklenen çıktı ile kontrol etmenizi sağlayacaktır.ls --color


Çekirdek komuta ulaşmak için kaç yol olması ilginç. Surround-with-quotes yönteminin farkında değildim. En azından bash ile komutun önüne ters eğik çizgi eklenebilir \ls -aveya yerleşik 'command' yerleşimi kullanılabilir command ls -a. Bir komutun çalıştırmak yerine onu nasıl çözdüğünü görmek istiyorsanız, var type -a ls.
B Katmanı

@BlairM. tırnak işaretleri ve ters eğik çizgi yöntemleri yalnızca takma ad genişletmeyi önler. Kabuk işleviniz veya yerleşik bir çağrınız varsa hiçbir etkisi olmaz ls.
shadowtalker

@ ssdecontrol Doğru. Aksi halde önermek istememiştim ... ile ilgili takma adlardan bahsediyorduk ls. Ama bu iyi bir bilgi.
B Katmanı

4

Renk, dosyanın "yürütülebilir" olarak işaretlendiğini gösterir *

Yürütülebilir izin bitleri (biri kullanıcı için, biri grup için, diğeri için) dosyanın adı exec sistem çağrısından birine geçirilirse, çekirdeğin devam edip denemesini sağlar.

Kural, yalnızca gerçekte gerçekleştirilmesi amaçlanan dosyaların yürütülebilir bit kümesine sahip olmasıdır. Ancak, dosyaları çok platformlu bir ortamda hareket ettirirken / kopyalarken, çalıştırılabilir bitleri istemeden kazanmak veya kaybetmek kolaydır.

Unix izinlerini (yağ, ntfs vb.) Desteklemeyen bir dosya sisteminde depolanan dosyaların sistemde yürütülebilir olarak görünmesi muhtemeldir. İzinleri koruyan bir araç kullanarak bu dosyaları bir unix dosya sistemine taşımak veya kopyalamak, bu yürütülebilir bitleri korur.

Öte yandan, izinleri koruyamayan veya seçili olmayan izinleri koruma seçeneğiyle birlikte kullanılan dosyaları taşımak için araçların kullanılması, orijinal olsa bile kopyanın yürütülebilir olarak işaretlenmemesine neden olabilir.

Dolayısıyla, çeşitli araçlar kullanılarak çeşitli platformlar etrafında taşındıktan sonra, yürütülebilir izin bitleri oldukça keyfi bir duruma gelebilir.

* Ls ​​çalıştırılabilir bitlerin bazılarının değil, bazılarının ayarlandığı durumu nasıl işlediğinden% 100 emin değilim.


2

Önceki yanıtların söylediği gibi, renklendirme dosyaların yürütülebilir olarak kabul edilip edilmeyeceğini belirtmektir.

Linux ve diğer birçok Unix'teki "yürüt" izni (= bit), dosyalar için bir anlam ve dizinler için başka bir anlama sahiptir.

Dizinler için, yürütme izniniz varsa, içeriğini görebilirsiniz. Bunu yapmazsanız, dizine cd yazamazsınız ve dizine hem okuma hem de yazma erişiminiz olsa bile içindeki dosyaları listeleyemezsiniz.

Normal dosyalar için (aygıt dosyalarının ve diğer özel Unix dosya türlerinin aksine), yürütme biti, komut satırında dosya adını kullanırsanız, O / S'nin (veya daha doğrusu: kabuğun) "yürütmeye" veya çalıştırmaya çalışacağı anlamına gelir. dosyayı komut olarak. Tersine, dosya üzerinde yürütme izniniz yoksa, komut satırından çalıştıramazsınız.

Bu nedenle, örneğin, x bin / cat / cat dosyasındaki (bu bir Unix komutu) tüm kullanıcılardan x iznini kaldırırsanız, siz veya başka herhangi bir kişi ve "cat" komutunu kullanmaya çalışan herhangi bir program başarısız olur.

Bunlar daha sonra / * / bin / dizinler - / bin, / usr / bin, / sbin, / usr / sbin vb. Gibi yürütülebilir dosyaları bulunan "cat" ve "grep" gibi işletim sistemi komutlarıdır.

Ve sonra Python veya kabuk komut dosyaları gibi bazı programlama dillerinde yazılan derlenmemiş, yorumlanmış komut dosyaları olabilir (temel olarak, sshing sırasında sunucuya komut satırından yazmış olduğunuz komutlar).

Şimdi, komut dosyası üzerinde yürütme bitini ayarladığınızda (örneğin, dosya foobar) ve kabuğunuz tarafından yürütmeye çalıştığınızda: "./foobar", kabuk dosyayı analiz etmeye ve komut dosyasını iletmek için doğru programı bulmaya çalışır. için.

Bu kabuk, dosyanın ilk satırını okumaya ve bunun hangi programın çalıştırılması gerektiği "shebang" gösterimini bulmaya çalışarak yapar.

Foobar'ınız ilk satırı şu şekilde içeren bir metin dosyasıysa:

#!/usr/bin/python

Kabuk şu komutu çalıştırmayı dener: /usr/bin/python foobartemelde python yorumlayıcısını çağırır ve foobar dosyanızın adını bir Python betiği olarak geçirir.

Kabuk dosyanızda böyle bir ilk satır bulamazsa, kabuk komutları içeriyormuş gibi foobar'ın kendisini çalıştırmayı dener.

Yürütülebilir bitli dosya geçerli kabuk komutları içermiyorsa, kabuk basitçe şikayet edecektir.

Exec bit ayarlı TTF dosyalarınız varsa ve komut satırından çalıştırmayı denerseniz, bu olurdu:

$./FreeMonoOblique.ttf
-bash: ./FreeMonoOblique.ttf: cannot execute binary file: Exec format error
$

Yani, fontlar için, exec biti ayarlanmamışsa, muhtemelen hiçbir şey daha değişmez.

PS: Sadece bazı yabancı bilgiler. Bir komut veya komut dosyasındaki yürütme bitini kaldırırsanız, yine de bağımsız değişken olarak başka bir programa geçirilebilir. Bu diğer program komutunuzu nasıl çalıştıracağını biliyorsa, exec bitini kaldırmanız gerçekten önemli değildi. Örneğin, basitçe komut satırından yaptıysanız foobar Python betiği Python yorumlayıcısı tarafından çalıştırılmaya devam eder:

$python foobar

onun yerine

$./foobar

"Cat" gibi sistem komutları örneğiyle aynı. Yürütme bitini "cat" öğesinden kaldırırsanız, yürütme işlemi için yeni bir kabuk örneğine geçirebilirsiniz:

$sh -c 'cat myfile'

exec bit kediden kaldırmış olsanız bile çalışacak ve

$cat myfile

yapmaz.


2
Benim sistemde, en azından, böyle bir ikili yürütülebilir dosya üzerinde çalıştırılabilir bit unsetting catveya echoyok değil sen yoluyla çalışmasına izin sh -c 'cat myfile'ile, ne de system("cat", "myfile")Ruby gibi dillerde. Python'un yürütülebilir olmayan .pydosyaları çalıştırabilmesinin nedeni , bunları bir metin dizesi olarak okur ve sonra o metnin kod gibi davranmasını sağlamak için bir yorumlayıcı kullanmasıdır.
Ethan Kaminski

@EthanKaminski İlginç. Benim için çalıştığını açıkça hatırlıyorum, ancak ayrıntıları kontrol etmek zorunda kalacak.
Gnudiff

1
@Gnudiff İkili yürütülebilir dosyalar için, execvesistem çağrısı yürütme izninde ısrar eder. Glibc tabanlı sistemlerde dinamik bağlayıcıyı, bir shebang satırı ( /lib64/ld-linux-x86-64.so.2 /bin/cat) ile yaklaşık olarak aynı etkiyi elde etmek için bir program olarak çağırabilirsiniz ve komut satırındaki dosya yürütülebilir olmasa bile bu benim için çalışır, ancak sh -c catbunu yapmayacaktır. senin için.
zwol

Bir dosyayı alıp almayacağınızı ve nasıl uygulayacağınızı belirleyen kabuk değil, çekirdek. Kabuk sadece yürütülebilir adı ve parametreleri çekirdeğe iletir.
plugwash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.