Linux komutunu açıklayın - diğer ad gelişmiş kullanımı

Genel Bakış

Rm trajedisi her zaman kasıtsız olarak gerçekleşir, bu nedenle ister bir kabuk betiğinde ister etkileşimli bir bash ortamında olsun, rm komutunu çalıştırırken her zaman iki kez düşünmelisiniz. Bu nedenle, birçok kişi dosyaların yanlışlıkla silinmesini önlemek için elinden gelenin en iyisini yapmaya çalışır ve çeşitli yöntemler vardır. BT ile uğraşan bizler için, insan bilincine güvenmek yerine teknik olarak bundan nasıl kaçınacağımızı düşünmeliyiz.

1. Diğer adın temel kullanımı

1. Varsayılan rm, "rm -i" nin diğer adıdır ve ll, "ls -l" nin diğer adıdır.

Belirli komutları belirli seçeneklerle değiştirmek için takma adları özelleştirebilir veya birden çok komutu birleştirmek için takma adlar tanımlayabilirsiniz. Örneğin:

# alias ls = 'ls -lA'

Bu şekilde, dizinler listelenirken gizli dosyalar listelenecektir.

2. Diğer adları parametresiz kullanmak, geçerli kabuk ortamında tanımlanan tüm diğer adları listeler.

3. Takma ad ve komut aynı ada sahip olduğunda, önce takma ad çalıştırılacaktır.

Bu, aşağıdakilerin sonucundan görülebilir:

Tanımlanan adlandırma adı orijinal komutla aynıysa (örneğin, tanımlı ls = 'ls -l' takma adı), orijinal komutu açık bir şekilde kullanmak istiyorsanız, diğer adı silebilir veya mutlak bir yol kullanabilir veya komutu geri yüklemek için bir çıkış karakteri kullanabilirsiniz.

4. alias komutu geçici olarak takma adları tanımlamaktır

Uzun vadeli bir takma ad tanımlamak için, takma ad tanımı ifadesini / etc / profile veya ~ / .bash_profile veya ~ / .bashrc içine yazın.

5. Takma adı geçici olarak iptal etmek için takma ad kullanın.

2. Takma adın kusurları

Takma adın tanımı ve kullanımı biraz belirsizdir.Örnek olarak aşağıdaki alias komutunu alın.Bazı kabuk betik kitapları bu tanımı kullanır, ancak bu yanlıştır.

rmm = 'cp $ @ ~ / yedekleme; rm $ @'

Bu diğer adın amacı, dosyaları silmeden önce dosyaları bir dizine yedeklemektir. Man bash'daki talimatlara göre, rmm takma adı yalnızca ilk cp komutunun takma adıdır Noktalı virgülden sonraki rm, takma adın bir parçası değil, takma adı izleyen bir sonraki komut satırıdır. Rmm takma adını çalıştırırken, ilk önce noktalı virgül konumuna gelen takma adı okuyun, ardından takma ad genişletmesini gerçekleştirin, alias komutunu yürüttükten sonra noktalı virgülden sonra rm komutunu çalıştırın.

Yukarıdaki komutun yanlış komut olduğunun söylenmesinin nedeni, sorun cp parametresi "$ @" dedir. Bu değişken orijinal olarak sağlanan tüm parametreleri temsil eder, ancak cp komutu noktalı virgülle ayrıldığı ve başka bir komutu tanımladığı için bu, yürütmeyi yapar Aliias komutunda, parametre cp komutuna aktarılamaz, ancak yalnızca son komut olan rm'ye iletilebilir, bu, cp'den sonraki "$ @" değerinin boş bir değer olduğu anlamına gelir. Yani takma ad şuna eşdeğerdir:

rmm = 'cp ~ / yedekleme; rm $ @'

Yukarıdaki analizden bunu bilebiliriz Alias'ın eksiklikleri vardır.Sadece basit komut ve parametre değiştirme ve tamamlama için uygundur.Karmaşık komut ikamesini uygulamak biraz zordur. Bu nedenle, man bash'da takma adları değiştirmek için işlevlerin kullanılması önerilir (Neredeyse her amaç için takma adların yerini kabuk işlevleri alır).

3. Takma adın en iyi şekilde gerçekleştirilmesi

Hiç şüphe yok ki, bir kabuk komut dosyası yazmak, takma adlardan çok daha güvenli ve daha eksiksizdir.Bu, takma adlara bir alternatiftir. Kişisel önerim, takma adların eksikliklerinin üstesinden gelmek için takma ad tanım bildirimindeki işlevleri kullanmaktır.

Örneğin, rm'nin güvenli bir şekilde çalışmasını sağlamak için, takma adları tanımlamak için aşağıdaki iki yöntemi kullanın:

rm = 'copy1 () {/ bin / cp -a $ @ ~ / backup; rm $ @;}; copy1 $ @' takma ad rm = 'hareket1 () {/ bin / mv -f $ @ ~ / yedekleme;}; hareket1 $ @'

Diğer adı çalıştırırken parametreler yalnızca son komuta, copy1 veya move1 işlevine aktarılabildiğinden, ancak "$ @" ile temsil edilen parametreler işleve aktarılabilir, böylece işlevdeki "$ @" doğru bir şekilde genişletilebilir, böylece tüm takma ad olabilir Makul ve doğru şekilde yapın.

Veya doğrudan rm yerine bir kabuk işlevi tanımlayın. Örneğin, /etc/profile.d/rm.sh dosyasına yazın:

function rm () { || mkdir ~ / rmbackup; / bin / mv -f $ @ ~ / rmbackup;} chmod + x /etc/profile.d/rm.sh kaynak /etc/profile.d/rm.sh

Rm komutunu bu şekilde çalıştırırken, burada tanımlanan rm işlevi çalıştırılacak ve rm'yi daha güvenli hale getirecektir. Bununla birlikte, bu tür işlevlerin, alt kabuklar tarafından miras alınabilmesi için işlevi dışa aktarmak için dışa aktar -f işlev_adı kullanmadığınız sürece, varsayılan olarak doğrudan komut dosyalarında kullanılamayacağını unutmayın. Bu nedenle, dışa aktarma ifadesi /etc/profile.d/rm.sh dosyasının sonuna eklenebilir:

function rm () { || mkdir ~ / rmbackup; / bin / mv -f $ @ ~ / rmbackup;} ihracat -f rm

İşlev adı ve komut adı aynıysa, komut tarafından açıkça belirtilmediği sürece, işlev varsayılan olarak ilk olarak çalıştırılacaktır. Örneğin, rm işlevi yukarıda tanımlanmıştır. Rm komutunu çalıştırmak istiyorsanız, / bin / rm kullanımına ek olarak aşağıdakileri de yapabilirsiniz:

komut rm a.txt

Eğer Eğer rm komutu kabuk betiğine dahilse, en azından "/" sembolü görünmeyecek şekilde, her rm'den önce o dizine cd ve sonra göreceli yolu rm yapmak daha önerilir. .

Daha sonra daha fazla devop ve DBA içeriği paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~

Huawei TV'yi yeniden tanımlıyor! Xiaomi'den korkuyor musunuz?
önceki
Xinhua Haber Ajansı bir arama motoru başlattı! Baidu'nun sonunda gidecek yeri kalmayacak mı?
Sonraki
Ayrıntılı önyükleme bloğu, süper blok, GDT, vb. İle Linux dosya sisteminin tüm yapısını açıklayın.
Kapanıyor! Xiamen Doğu Sporları Kongre ve Sergisi Yeni Şehri'nin en son planı ortaya çıktı! Büyük bir güzel resim dalgası geliyor
Ali 20 milyar yuan yatırım yaptı Merhaba seyahatinin "kara atı" nasıl ortaya çıktı?
On Adım-Bir veritabanı arızasıyla karşılaştıktan sonra DBA'nın yerini hızlı bir şekilde bulma
Jack Ma durup beklesin, el sıkıştı ve teşekkür etti Kim bunlar?
Mysql veritabanının WAL mekanizmasını ayrıntılı olarak açıklayın - önce günlüğü yazın, ardından diske yazın
Memur + iş baskısı! Hebeinin binlerce kişiden oluşan en son işe alımı, kaydolun
Bu teknoloji kötüye kullanımı önlemeli
Oracle veritabanının temelindeki depolamayı keşfedin - dayanıklılık ve karakter kümesi
70 Haziran'da şehir konut fiyatları açıklandı, üç acımasız gerçek bulduk
Üç genç doktor 10 gün içinde aniden öldü, arkasındaki nedenler utanç verici ...
Ayrıntılı mysql veritabanı tablo alanı yönetimi-paylaşılan tablo alanı ve bağımsız tablo alanı
To Top