Arasındaki İlişki lsvedir
lsve dirbenzer şekilde davranan ayrı programlardır. Açıkladı ve aşağıda başvurulan gibi, amacı dirgibi bir komut sağlamaktır lsçıkış bir terminale gidiyor olup olmadığına bağlı olarak değişmez kimin . Bunu yararlı dirbir şekilde başarmak için , çıktısını hem terminalde görüntülemek hem de dosyaya veya boruya yazmak için makul ve yararlı olacak şekilde biçimlendirmeniz gerekir.
Hakkında iki yaygın yanılgı vardır dir:
- Birçok insan
dirbir takma ad olduğuna inanmaktadır ls, ancak durum böyle değil. Her iki komut da diğerinin dirtakma adı değildir ve varsayılan olarak Ubuntu'da takma ad değildir. lsve dirayrı, aynı olmayan çalıştırılabilir öğeler tarafından sağlanır.
- Birçok kişi
dirbelirsiz tarihsel nedenlerden dolayı ya da bazı standart ya da başka bir işletim sistemi ile uyum sağlamak için var olduğuna inanmaktadır . Bu da böyle değil. lsuyumluluk için yaptığı gibi davranır. dirStandart bir Unix komutu olmadığı için uyumlu olması gerekmiyor, geliştiricilerin kendi haklarına göre değerli ve belki de tercih edilen bir şekilde değerlendirebilecekleri alternatif bir davranış sergiliyorlar.
Tamam, ama tam olarak nasıl lsve dirfarklı?
Her ikisi de lsve dirdizinlerin içeriğini listeler. Varsayılan davranışlarındaki iki özel fark onları ayırt eder.
Bunu yaparken standart çıktı bir terminal, lsdikey olarak sıralanmış sütunlar (benzerlerinde dosya listeler ls -C). Standart çıktısı bir terminal olmadığında (örneğin, bir dosya veya boru ), lsher satırda bir tane olan dosya adlarını listeler (benzeri ls -1).
Standart çıktısının bir terminal olup olmadığı, dirdosya adlarını dikey olarak sıralanmış sütunlarda (benzeri ls -C) listeler .
Her ikisi için lsve dirbu varsayılan tarafından geçersiz kılınabilir --format=bayrak ve tarafından -1, -C, -mve -xözellikle kısaltmak bayrakları, --format=seçenekleri. Detaylar için GNU coreutils başvuru el kitabındaki 10.1.4 Genel çıktı formatlama bölümüne bakın .
Standart çıkış listelenmesi için bir terminal ve bir dosya olduğunda içeren kontrol karakterleri , lsbaskı ?yerine her bir kontrol karakteri (gibi ls -q). Standart çıkışı bir terminal olmadığında lskontrol karakterlerini olduğu gibi yazdırır (gibi ls --show-control-chars).
Standart çıktısının bir terminal olup olmadığı, dirbir kontrol karakteriyle veya bir kabuğa girildiğinde özel olarak yorumlanacak herhangi bir karakterle karşılaştığında, karakterler için ters eğik çizgi dizileri yazdırır. Bu, boşluklar gibi nispeten yaygın karakterleri bile içerir. Örneğin, olarak diradlandırılan bir girişi listeler . Bu gibi .Documents backupsDocuments\ backupsls -b
Her ikisi için lsve dirbu varsayılanlar, 10.1.7'de listelenen bayraklar tarafından geçersiz kılınabilir . GNU coreutils başvuru el kitabındaki dosya adlarını biçimlendirme . Bunlar arasında -b, -q, --quoting-style=ve bazı diğerleri.
Kaynaklar : GNU coreutils başvuru el kitabında , çağrı ve yönetim çağrısı .
Neden var dir?
Ayrı bir diryardımcı programın gerekçesi, genel olarak GNU kodlama standartlarının 4.5 . Ben uygulanabilir şekilde vurgular bütün bölüm geliştiricilerin akıl anlamak için bu okuma tavsiye ederim, ama burada ls/ dir:
Bir yardımcı program davranışı onu çağırmak için kullanılan isim bağlıdır yapmayın ....
Bunun yerine, alternatif davranışlar arasında seçmek için bir çalışma zamanı seçeneği veya derleme anahtarı veya her ikisini kullanmak ....
Aynı şekilde, çıkış cihazının türüne bağlıdır bir komut satırı programı davranışını yapmayın lütfen ....
Uyumluluk, belirli programların çıkış aygıtı türüne bağlı olmasını gerektirir. Tüm kullanıcıların beklediği şekilde yapsa lsveya yapmasaydı feci olurdu sh. Bu durumlarda bazı durumlarda, programı çıkış aygıtı türüne bağlı olmayan tercih edilen alternatif bir sürümle tamamlıyoruz. Örneğin, varsayılan çıktı biçiminin her zaman çok sütun biçiminde olması dışında bir dirprogram
sağlarız ls.
GNU Projesi, bir yardımcı programın ne tür bir cihaza yazdığına (en azından yardımcı programın varsayılan yapılandırmasında) bağlı olarak, farklı bir çıktı üretmesi için bir teknik açıdan arzu edilmez. Bazı araçlar için, lscihaza bağlı çıktı dahil olmak üzere uyumluluk için gereklidir ve bu nedenle kullanıcıların beklediği gibi çalışır. Bazı kullanıcılar ayrıca bu cihaza bağlı davranışı özellikle tercih eder.
lsAygıtın bağımsız olarak davranması makul bir şekilde yazılamamış olsa da, dirbunu başarmak için ayrı bir yardımcı program oluşturulmuştur. Böylece dirtarihsel compatibility-- nedeniyle garip davranır yarar değil lsise .
Nasıl çalıştığını görmek için ls, dirve ilgili vdirbkz yarar gereksiz kod tekrarına olmadan coreutils kaynak kodunda uygulanan ls-dir.c, ls-ls.c, ls-vdir.c, ls.h, ve ls.c.
Mı dirgerçekten yararlı?
Daha önce ( ) lsborularına bağladığınızda veya bir dosyaya ( ) yönlendirdiğinizde bile çoklu sütun çıktısı oluşturmayı dilediyseniz , veya kullanabilirsiniz .lessls | lessls > out.txtdirls -C
Eğer dilediğiniz bir dosyayı doğrudan gösteren birls dosyayı kopyalayıp alıntı yapmaktan endişe duymadan komutun bir parçası olarak kullanabilirsiniz, dirya da kullanabilirsiniz ls -b.
direşittir ls -Cb, bu yüzden bu anlamda ihtiyacınız yok dir. Ancak dirpratikte genellikle yararlı olan seçeneklerin bir birleşimini sağlar (hakkında geniş ölçüde bilinmese de).
Neden ls(hatta ls -Cb) renklendirilmiş çıktı alıyorum dir?
Çoğu Ubuntu kullanıcısı lsçalışan bir takma adı kullanır ls --color=auto. lsHem diğer ad hem de harici bir komut olarak mevcut olduğunda , diğer ad basit, etkileşimli komutlarda öncelikli olur.
Diğer ad tanımları özyinelemeli olarak genişletilmez - takma adın çağırdığı harici lskomuttur . Bkz 6.6 Takma Ad içinde Bash referans kılavuzuna adlar nasıl çalıştığı konusunda daha fazla bilgi için.ls--color=auto
Geçirilen zaman ls, dirya da vdir(ve, gibi diğer bazı komutlar grep), --color=autoçıkış ama aksi halde, bir terminal olduğunda renk kullanır.
Ubuntu'da varsayılan olarak, kullanıcı hesapları şununla yaratılır ~/.bashrc:
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
lsTakma adın ( alias ls='ls --color=auto') yorumlanmadığını fark edeceksiniz, bunun için olanlar dirve vdiryorumlanmadıkları #için hiçbir etkisi olmaz. Yani, süre dir, bir takma değil lsedilir (ancak etmek dir) .
dirRenkli çıktılar da nasıl üretebilirim?
Renkli çıktıyı etkinleştirmek için, ana dizininizde dirdüzenleme .bashrcyapın ve #alias dir='dir --color=auto'satır satırını kaldırarak satırın açıklamasını kaldırın #. Değişimden sonra başlayan kabuklarda dirtakma ad olacaktır.
Geçerli kabuktaki değişikliği istiyorsanız, takma ad tanımını komut olarak çalıştırabilir veya .bashrcçalıştırarak kaynak yapabilirsiniz . ~/.bashrc.
Bu tartışmasız ana noktaya dirters düşüyor - çıkış cihazından bağımsız olarak aynı tür çıktılar üretmesi gerekiyor. Ancak:
- Bu
dirtakma adı oluşturmayı yararlı bulursanız , kesinlikle yapmanız gerekir.
- Eğer çalıştırarak takma geçersiz kılarsanız komut örneğin, bir dış komut olarak adlandırılan veya zaman
\dirya command dir, dirhala aygıttan bağımsız çıktı üretecektir. Bu, o örtüşme demek ki dirhiç dir --color=autogerçekten sonu yok dir.
dir --color;)