Apt-get neden sudo gerektirir?


12

Bu muhtemelen aptalca bir soru, ama yakın zamanda apt-get ile neden tek kullanıcılı işlevsellik olmadığını bilmediğimi fark ettim .

Aradığım cevaplar:

  • "Çünkü apt sistem düzeyindeki dizinlere yazar". Bu, yüzey seviyesi nedenidir, ancak daha derin bir seviye arıyorum. Temel olarak tek kullanıcılı bir ortamı (la pip + virtualenv) engelleyen bir şey var mı?
  • "Sadece kaynaktan inşa edebilirsiniz". Bu geçici bir çözümdür, ancak sorumu ele almıyor. Kısa vadeli bir sorunu düzeltmek istemiyorum ve yine de tüm makinelerime root erişimim var.

Umarım ana dizininizdeki kaynaktan herhangi bir paket oluşturabilirsiniz.
jobin

Doğru, ama neden apt-get sınırlamasının altında olduğunu arıyorum . Kaynaktan inşa etmek buna cevap vermez.
PattimusPrime

1
Bence gerçekten sorduğunuz soru "Çoğu Linux yazılımı neden yeniden konumlandırılamıyor?" Apt-get'in kullanıcı-yerel dizinlere yazılım yüklemesine izin vermek mükemmel bir şekilde mümkün olacaktır, ancak çoğu yazılım bunu desteklemediğinden bunu yapmanın çok az anlamı olacaktır.

Yanıtlar:


10

Apt-get neden sudo gerektirir?

Her zaman değil. apt-getOlmadan mükemmel kullanabilirsiniz sudo. Orada gerekmez örnekleri olan sudokullanmak gibi, hiç apt-get downloadbir paket indirir hangi geçerli dizine , apt-get sourcegeçerli dizine debian kaynakları dosyaları indirdikten changelogindirmeleri ve belirli bir paketin changelog yazdırır ve sahip herhangi bir komut --simulate/ --dry-run/ --no-act(durumunda installsize de ihtiyaç --no-download).

Bunun nedeni, bu eylemlerin / komutların sistem dizinlerinin yazılmasını gerektirmemesidir.

Şimdi, neden apt-getihtiyaç var sudo? Aslında öyle değil. İstediğiniz dizinde apt-get, bir paket indirebilir ve paketi wgetkullanabilir dpkg --extractve ayıklayabilirsiniz. Ayrıca --instdirsadece ikili paket için hangi çalışması gerekir.

Şimdi, bu neden varsayılan değil? Çünkü bu bir acı. İstediğinizi yapmak için, her paketi iki kez paketlememiz gerekir, biri doğru yol için ve diğeri istediğinizi yapmak için. Derlemede, ikili dosyaların normalde ihtiyaç duydukları dosyaların ve kitaplıkların nerede olduğunu bilmeleri gerekir (bazı durumlarda bu derlemede kodlanır).

Şimdi bunun yerine ne yapabilirsiniz? Bazı ortamları , paketleri root olmadan yükleyebileceğiniz bir sanal sanal oluşturun.

Özet, bu apt-get'in kullanılması gereken yol değildir ve bunu yapmanıza izin veren apt-get'e benzer başka bir paket yöneticisi bilmiyorum. Günün apt-getsonunda, dpkg için bunun bir kısmını yapabilen bir ön uç var.


3

Paketin içindeki bilgiler dosyaların nereye yükleneceğini belirler, bu nedenle paket veritabanına sudohem yazmanız hem de /değiştirmeniz gerekir.

Paketleri yüklerken, paketin temel parçaları olan önceden oluşturulmuş ikili dosyaları ve ilişkili yapılandırma ile meta dosyaları ve komut dosyalarını yüklersiniz. Bu komut dosyaları ve yapılandırma dosyaları bağımlılıklara ve sistemin geri kalanına sıkıca bağlıdır. Ne yaptığınızı tam olarak bilmediğiniz sürece bunları hafifçe değiştirmek istemezsiniz.

Bir sistemdeyseniz, örneğin işyerinde sudoerişiminizin olmadığı bir yerdeyseniz, kaynaktan derleyebilir ve kurulum dizinini evinize ayarlayabilirsiniz. O zaman buna gerek yok sudo. Kaynaktan yüklerken, genellikle paket veritabanını değiştirmezsiniz.


Cevabın için teşekkür ederim! Geçici çözümleri biliyorum ve kullanıyorum, ama anlamaya çalıştığım şey onları neden kullandığım. Sorunun, yükleme yolunun paket koruyucular tarafından sabit kodlanmış olması olduğunu söylediğinize inanıyorum - bu neden değiştirilemiyor?
14:35

2

Bu aptalca bir soru değil.

İşletim sistemindeki ayrıcalık düzeyleri

Ubuntu - ve aslında herhangi bir modern işletim sistemi - farklı yazılımlar için farklı ayrıcalık seviyeleri kavramına sahiptir. Kullanıcılar tarafından başlatılan yazılımlar, genellikle güvenlik nedeniyle sistemi değiştirmek için gerekli erişime sahip olmayan kullanıcı tabanlı bir ayrıcalık düzeyi altında çalışır - yalnızca o kullanıcıya ait dosyaları değiştirebilir.

İşletim sisteminde yalnızca kullanıcının dosyalarından ziyade bir bütün olarak sistem üzerinde etkisi olabilecek herhangi bir değişiklik yapmak için, Linux'ta "süper kullanıcı" ayrıcalıkları (veya yaygın olarak adlandırılan) daha yüksek bir ayrıcalık düzeyi gerekir. "kök" olarak adlandırılır). Bu ayrıcalık düzeyi, tüm kullanıcılar için tüm dosyaları değiştirmesine veya yok etmesine olanak tanıyarak tüm işletim sistemine kesintisiz erişime sahiptir.

Apt-get'in rolü

Yazılımı apt-get ile yüklerken, sistem genelinde kullanılabilecek bir yazılım yüklüyorsunuz . Yani, yazılım yalnızca o kullanıcı tarafından çalıştırılmak üzere kullanıcının ana dizinine yerleştirilmez, sistem genelinde bir uygulama dizinine (/ usr, / etc, / var ve benzeri gibi) yüklenir. ) tüm kullanıcılar tarafından çalıştırılmak üzere. Bu dizinleri değiştirmek için süper kullanıcı ayrıcalıklarına ihtiyacınız vardır. Hiçbir ayrıcalıksız kullanıcı bu dizinleri değiştiremez, aksi takdirde ayrıcalıksız yazılım sistemle uğraşabilir.

Apt-get kullanarak süper kullanıcı ayrıcalıkları vermeden bir şey yüklemeye çalışırsanız, üstesinden gelemeyeceği ilk engel kendi yazılım kataloğuna yazmak için bir kilit elde etmektir. Sistem çapında bir yardımcı program olan apt-get, ayrıcalıklı olmayan yazılımın onunla uğraşmaması için doğal olarak süper kullanıcı ayrıcalıklarının düzenlenmesini gerektiren yüklü bir yazılım kataloğunu tutar. Ancak bir şekilde bu engelin üstesinden gelebilseniz bile (örneğin, dosya izinlerini değiştirerek), yükleme rutini birkaç sistem dizinine yazmaya bağlı olacağından, yazılımı yükleme yolu boyunca birçok adım hala başarısız olacaktır.

Linux'u kullanarak, süper kullanıcı ayrıcalıkları olmadan yazılım yüklemek mümkündür , ancak kendiniz yazmanız (örn. Kabuk komut dosyaları) veya kendiniz derlemeniz ve derlenmiş yürütülebilir dosyaları doğrudan çalıştırmanız gerekir. Erişiminiz varsa, apt-get'i (ve yetenek, sinaptik veya Ubuntu yazılım merkezi gibi diğer APT tabanlı yardımcı programları) kullanarak sistem genelinde yüklemek daha kolaydır.


Cevap verdiğiniz için ve titizlik için teşekkürler. Apt-get'in sistem genelinde doğasını anlıyorum, ama anlamaya çalıştığım şey neden bu şekilde olması gerektiğidir.
PattimusPrime

1
Bu şekilde olmak zorunda değildi. Bu sadece Ubuntu'nun (ve Debian'ın) tasarlanma şekli. Normalde yazılım yüklemenin kullanıcı başına olduğu bir işletim sistemi tasarlayan birini durduracak hiçbir şey olmazdı.
thomasrutter

1

Neden apt-get varsayılan olarak / (veya benzeri) dizinlere kurulur?

Bunun basit nedeni apt-getyazılımın nereye kurulacağına karar vermemesidir. Geliştiriciler tarafından karar verilir ve uygulamanın içinde kodlanır.

Diğer dizinlere kurabilir miyim?

Evet, diğer dizinlere yükleyebilirsiniz.Açık kaynak yazılımı için, kaynağı alın, kurulum dizinini değiştirin, derleyin, derleyin ve kurun. Genellikle içerilen configurekomut dosyasında nereye yükleneceğinizi belirlemenizi sağlayan bir seçenek vardır . Bu genellikle --prefix.

Ama apt-get kullanmakta ısrar ediyorum. Şimdi ne yapmalı?

TAMAM. Son kullanıcı için çok fazla olsa da, apt-get ile bunu yapmanın bir yolu hala var. Adımları takip et.

  1. Kaynağı alın.
  2. Kurulum dizinini aşağıdaki gibi değiştirin $HOME.
  3. Derleyin ve oluşturun.
  4. bir .deb dosyasına paketleyin .
  5. Launchpad hesabı oluşturun.
  6. Ubuntu davranış kurallarını imzalayın (bunun gerekli olup olmadığından emin değilim).
  7. kendiniz için bir ppa oluşturun .
  8. Deb paketini ppa'ya yükleyin.
  9. kaynaklarınıza ppa ekleyin.
  10. Koş sudo apt-get update.
  11. Koş apt-get install package.

Kurulum sırasında dizin seçmek mümkün mü?

Evet ve hayır.

Mümkün olduğu için Evet, bazı yazılımlar, ben biliyorum sadece birini bu yöntemi kullanmak Qt5.Bu bir sahiptir .run , çalıştırıldığında diğer birçok girişler arasında yükleme dizininde sorar dosyayı.

Hayır, çünkü bu yöntem kullanılmaz apt-get.

Bunu bir gün kolayca yapabilir miyim apt-get?

apt-getYazılım geliştiricilerinin ve / veya yazılım geliştiricilerinin bunu yapmakla ilgileneceğini düşünmüyorum , ancak sadece kurulum dizinini sorarak kaynak, değişiklik, derleme, derleme, yükleme adımlarını otomatik olarak yapacak bazı yazılımlar geliştirilebilir .

6. duygum bana emrin

apt-dont-get install pkg1 pkg2 ...

Cevabınız için teşekkürler - kapsamlı ve sorumu ele alıyor. Bununla birlikte, apt-get'e tek kullanıcılı işlevsellik geliştirmeye neden ilgi duymayacağını anlamıyorum. Bazı kullanım durumlarında işlevsellik son derece yararlı olacaktır.
PattimusPrime

İyi bilgi, ama Soru-Cevap içinde Soru-Cevap formatı ...? :) Idk, belki standart bir formatta düzenlemelisiniz? Sadece bir düşünce.
chaskes

@PattimusPrime Bu tür durumlar çoğunlukla nadirdir, çünkü çoğu durumda yöneticiler gerekli tüm yazılımları yükler ve diğerlerinin yazılım yüklemesine gerek yoktur. Ayrıca, kaynaktan inşa etmenin çok kolay olduğu ve yazılım geliştiricileri bunu orada uygulamadığı sürece böyle bir işlevselliğin uygulanmasının işe yaramaz olacağı gerçeği, geliştiricilerin bunu yapmasını durduracaktır apt-get. Ayrıca, mevcut programların çoğu diğer programlara bağlıdır ve bunları / usr dizininde ararlar.
Kayıtlı Kullanıcı

$ HOME'da dosyaları yüklemek için Debian ilkesi ihlalidir. Bunu asla yapmamalısın. Bir şey varsa /opt/package, dizini kullanın ve chmod yapın.
Braiam

@Braiam: İnsanların, paketleri $HOME/opt/yüklemek için ayrıcalık gerektirmedikleri takdirde paketleri kurmayı önerdiğini gördüm /opt/..
Aditya

-1

Çünkü chmodded dosyaları düzenlemek, böylece onları kullanamazsınız. Onları chmod olabilir, bu yüzden bunu yapmayı önermem


Cevabın için teşekkür ederim. Benim aradığım neden sadece chmodded dosyaları düzenler. Bana öyle geliyor ki, tek kullanıcılı bir işlevsellik, bazı alanlarda (örneğin, süper hesaplama kümeleri) uygulanması kolay ve son derece yararlı olacaktır
PattimusPrime
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.