'Ne yapar? 'sudo' anlamına gelir!

64

Ubuntu’nun çok fazla tecrübesi olmayan kullanıcısıyım ve sudo kullanıyordum.

sudo !! ne yapar ve nasıl?

    
sordu RamHS 18.11.2013 11:24

7 cevap

74

!! , bir önceki komut için bir diğer addır (bkz. Olay Tanımlayıcıları ). Bu yüzden önceki komutu sudo izinleriyle yeniden çalıştırır.

    
verilen cevap chronitis 18.11.2013 11:28
64
Komut satırı arayüzünde çalışırken

sudo bang bang çok kullanışlı bir komuttur.

Bazı Linux dağıtımları, yönetici yerine kullanıcı olarak oturum açtınız.

Yani, yönetici olarak bir şey yapabilmek için, komutun sudo (Super-User DO) komutunu kullanarak sisteme “bunu yapacaksın,” dedim. / bang-bang (! = bang) temelde önceki komutu tekrarlamak için kullanabileceğiniz bir kısayoldur.

Öyleyse, tipik senaryo bir komut denemenizdir ve bunu yapmak için yönetici olmanız gerektiğini söyleyen bir mesaj atıyor. Yani, bu komutu süper kullanıcı / yönetici olarak çalıştırmak için sudo yazabilir veya sudo !! yazarak, sisteme denenen önceki komutu kullanmasını söyleyen !! yazabilirsiniz. UfH

Başka birçok bang-komutu var. Bunların bir listesi ve ne olduklarına ilişkin açıklamalar için Linux Bang Komutları 'na bakın, ayrıca bkz. Bash geçmişi ve patlama komutları

    
verilen cevap Mitch 18.11.2013 11:31
38

bang bang (!!) komutu, terminalinize girdiğiniz tekrarla ve önceki komutu çalıştırmak için bir kısayoldur. Bu komut, belirli bir işlem yapmak için yönetici haklarına ihtiyacınız olduğunu unuttuğunuzda ve yalnızca yazarak süper kullanıcı hakları ile tekrarlamanızı sağladığınızda çok yararlıdır.

sudo !!

!! , son çalıştırma komutunu alır.

Örneğin:

apt-get update

Çıkış,

olacak
  

E: Kilit dosyası açılamadı / var / lib / apt / lists / lock - açık (13: İzin reddedildi)
  E: Dizin / var / lib / apt / lists / kilitlenemedi /
  E: Kilit dosyası açılamadı / var / lib / dpkg / lock - açık (13: İzin reddedildi)
  E: Yönetim dizini kilitlenemiyor (/ var / lib / dpkg /), root musunuz?

Bundan sonra, sudo !! komutunu çalıştırırsak, çıkış

olacaktır.
Hit http://extras.ubuntu.com saucy/main amd64 Packages
Get:3 http://mirror.sov.uk.goscomb.net saucy-updates Release.gpg [933 B]
Hit http://ppa.launchpad.net saucy Release                                  
Hit http://extras.ubuntu.com saucy/main i386 Packages 
Hit http://mirror.sov.uk.goscomb.net saucy Release                             
99% [Waiting for headers] [Waiting for headers] [Waiting for headers]

Bu, !! kısmının önceki çalıştırma komutunu apt-get update ve önceki sudo kısmının komutun süper kullanıcı hakları ile çalışmasını sağladığı anlamına gelir.

Ve sudo !! bir önceki komutu superuser ayrıcalıkları ile çalıştırır, normalde terminalde girdiğimiz tüm komutlar command history 'da saklanır. history komutunu terminali, girdiğiniz tüm komutları gösterir. !! dizinindeki sudo !! bölümü, komut geçmişinde depolanan son komutu alır ve sudo !! ise yönetici ayrıcalıklarıyla son komutu çalıştırır.

Diğer bang komutları 'nda açıklanmıştır blog yayını .

    
verilen cevap Avinash Raj 18.11.2013 12:05
13

Yanıtın iki bölümü vardır: !! ve sudo

!! , kabuğun işlevselliğinin bir parçasıdır (Ubuntu örneğinde bu muhtemelen büyük bir olasılıktır, ancak zsh veya csh gibi diğer kabuklar da bunu desteklemektedir) "tarih açılımı" olarak adlandırılır. Kabuk, 'yer tutucuyu' bir kelime dizisine genişlettiğinde diğer genişlemelerle benzer şekilde davranır. % Co_de% 'foo' ile başlayan tüm dosyaların bir listesine genişletilirken, foo* önceki komut satırının içeriğine genişletilir.

$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar

Diğer genişletmeler gibi, bu tamamen kabuk tarafından yapılır, bu yüzden başka bir komuttan sonra !! yazarsanız, bu komut !! olduğunu bilmiyor, ancak yalnızca önceki komut satırını görecektir. (Diğer genişletmelerin aksine, tarih genişletme, bir komutun geçmişte kaydedilmesinden önce gerçekleşir, bunun yerine !! yerine değiştirilen komut satırı, geçmişe kaydedilir.)

!! komutu, güvenlik ilkesi tarafından izinler verildiği sürece komutları başka bir kullanıcı olarak çalıştırmaya izin verir (varsayılan sudo olarak yapılandırılır).

Varsayılan olarak, root şifresi Ubuntu'da ayarlanmamış kalır. Sistem yönetimi görevlerini gerçekleştirmek için, yükleme sırasında kullanıcının oluşturduğu sudo hakları verilir. Bu kullanıcı, kabuktaki herhangi bir komutu şimdi /etc/sudoers 'yi hazırlayarak root olarak çalıştırabilir. Bazı GUI programları da, örneğin paket yönetimi gibi sudo mekanizmasını kullanır.

sudo 'nin diğer komutları root (veya başka bir kullanıcı) olarak çalıştırmasının nedeni, sudo'nun ( sudo ) setuid bit'inin izniyle ayarlanmış ve root'a ait olmasıdır. Set setuid biti ile herhangi bir (ikili) yürütülebilir, sahibinin izinleriyle çalışır. Bu, sudo'nun hangi kullanıcının fiilen aradığı önemli değil, kök izinleriyle etkin bir şekilde çalıştığı anlamına gelir. Sadece sudo'nun iç güvenlik politikalarını yönetir, hangi kullanıcının keyfi kullanıcılara keyfi şeyler yapmasını engeller ve engeller.

Yani, /usr/bin/sudo durumunda bunun anlamı

$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!

temelde aynıdır

$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt

sadece daha az yazarak. Her iki durumda da sudo sudo !! değerini görür ve root izinleriyle çalıştırır.

    
verilen cevap Adaephon 21.11.2013 00:28
5

!! , geçmiş genişlemesi için sözdizimsel olarak en basit ve muhtemelen en yaygın ifadedir. .

Fark etmiş olabileceğiniz gibi, !! için çalıştırılan son komutu değiştirdikten sonra, bash iki şeyi (varsayılan yapılandırmasında) yapar:

  1. Değiştirilen metinle tam komut size gösterilir.

    Örneğin, komutunuz lshw -c video ise ve sonraki sudo !! komutunu çalıştırırsanız, tarih genişlemeden sonraki komut sudo lshw -c video olur.

  2. Bu komut çalıştırıldı.

Normalde, bu iki adım kesinti olmaksızın ve kullanıcı etkileşimi için herhangi bir fırsat olmadan ortaya çıkar, çünkü shopt histverify varsayılan olarak geçersizdir ( shopt -u histverify ).

Ancak, shopt histverify 'yi ( shopt -s histverify ) etkinleştirirseniz, tarih genişletme farklı şekilde çalışır:

  1. Genişletilmiş metin otomatik olarak girildiğinde yeni bir birincil istemi alırsınız. Sonunda imleci ile bu metni kendiniz yazmışsınız, ama henüz komutu çalıştırmamışsınız gibidir.
  2. Siz, kullanıcı, komutu çalıştırmak için Enter tuşuna basmanız gerekir. Ya da komutu düzenleyebilir, iptal edebilirsiniz ( Ctrl + C ), vb. Bunun özel bir istem olmadığını, ancak normal bir birincil komut olduğunu unutmayın. Metni kendin yazmışsın gibi.

( histverify kabuk seçeneğinin etkili olduğunu unutmayın. yalnızca readline kütüphanesi kullanılıyorsa - ancak etkileşimli olarak Ubuntu veya diğer GNU / Linux sistemi, bu aslında her zaman böyle.)

histverify kabuk seçeneğinin etkinleştirilip etkinleştirilmediği , geçmiş genişletme diğer birçok kabuk genişletme işleminden farklıdır. Diğer kabuk genişletmeleri, çalıştırılmadan önce genişletilmiş komutu göstermez. Hem etkileşimli hem de etkileşimli olmayan (örneğin, bir kabuk betiğinde) kullanılması amaçlanan diğer genişletmelerin aksine, tarih genişletme neredeyse her zaman etkileşimli olarak kullanılır.

    
verilen cevap Eliah Kagan 23.04.2015 19:47
3

! Linux'ta tarihle ilgili kısayollar için kullanılır. Yani, !! sadece, çalıştırdığınız önceki komutu çalıştıracaktır.

Sudo'yu gerektiren bir komutun önüne koymayı unuttuğunuz veya İzin Reddedildiğini ya da bunun gibi bir şeyi aldığınız durumlarda çok yardımcı olur.

sudo !!
ve işiniz bitti.     
verilen cevap tapananand 21.11.2013 20:09
0

!! önceki komutu tekrarlayıp çalıştıracak ve sudo ile root yetkisine komut verilecektir.   (Bu adam sayfasında değil mi? Ben orada göremiyorum.)

    
verilen cevap Farimah 18.11.2013 20:49

Etiketlerdeki diğer soruları oku