Soru Linux komut satırı en iyi uygulamaları ve ipuçları?


Linux komut satırı (CLI) en iyi uygulamaları ve ipuçlarını biriktirecek bir tartışma açmak istiyorum.

Aşağıdaki yorumu paylaşmak için böyle bir tartışma için arama yaptım, ancak bu yazıyı bulamadım.

Umarım hepimiz bundan öğrenebiliriz.

Bash ipuçlarını, grep, sed, AWK, / proc ve diğer tüm ilgili Linux / Unix sistem yönetimini, kabuk programlama en iyi uygulamalarını hepimizin yararına paylaşmaktan memnuniyet duyarız.


112
2018-03-02 21:23


Menşei


Neden sadece Linux? Birçok ipucu, Unix'in neredeyse tüm lezzetleri için yararlı olabilir. - mouviciel
Bu soru biraz geniş olabilir - tüm kitapları doldurmak için Linux / Unix komut satırı en iyi uygulamaları için yeterli var ... - Jonik
Linux'a uygulanabilecek unix ipuçlarının da çok hoş karşılandığına katılıyorum, Linux yazdım çünkü A. Burada işimiz bu. B. Çünkü son yıllarda daha geniş bir kamuoyu ve daha sonra unix kazanıyor. - Maxim Veksler
İnsanların kullandığı en kullanışlı ve ilginç komutların listesini birleştirmek harika bir fikir.
Bunlardan herhangi biri alakalı mı? refspecs.freestandards.org


Cevaplar:


kullanım ekranGNU Projesi tarafından geliştirilen ve birden fazla terminale sahip olmanızı sağlayacak ücretsiz bir terminal çoklayıcı.

Bir oturum başlatabilir ve bağlantılarınız kaybolduğunda bile terminalleriniz kaydedilir, böylece daha sonra veya evden devam edebilirsiniz.


111
2018-03-02 22:52



Kullandığım en yaygın anahtarlar, son ekran oturumumun ve ekranın aynı oturumu birden çok oturumdan görüntülemek için 'ekran -x' olarak kaldığı yerden çıkarılması ve ekrana getirilmesi için 'ekran -D -R' ekranıdır. Ayrıca, kendinize güzel bir ekran. dotfiles.org/.screenrc - Nick Devereaux
Ekranla ilgili bir başka güzel şey de, bir şey üzerinde işbirliği yapmak istediğinizde başkalarıyla bir terminali paylaşabilmenizdir. - gareth_bowles


SSH!
SSH tanrı komutanı - Bence öğrenmesi gereken en değerli komut buydu. Seçenekler oldukça göz korkutucu olabilir, fakat sürekli olarak gerekli olacağını düşündüğüm SSH için yeni komut satırı seçeneklerini kullanmayı öğreniyorum. Hepsini bu noktada kullanabilirdim.

Ne kadar çok kullanırsan, o kadar öğrenirsin. Bazı ŞAŞIRTICI şeyler yapmak için kullanabilirsiniz.

Not: Ssh sunucusunun çalışması dışında, TÜM bu şeyler sunucunuzda kurulum yapmadan uzaktan yapılabilir.

İnternet üzerinden bir dosya sistemi kurun 

SSHFS için ağı ara

İleri komutlar.

SVN + SSH protokolü uzak istemciden NO DEAMON üzerinde çalışan bir sunucuya Subversion! SVN komutu, sunucuyu ssh kabuğundan başlatır ve bilgileri mevcut borudan ileri ve geri iletir. Rsync programı aynı şeyi yapar, SSH ile bir tek başlayarak rsync deamon olmayan bir sunucuya karşı çalışır. Benzer hile yapmak için kendi bash dosyalarını yazmak kolaydır.

Güvenlik duvarlarından geçmek için zincir 

Bunu her zaman, linux sunucumdan evde macuma atlamak için kullanıyorum.

İleri bağlantı noktaları:
Evinizdeki güvenlik duvarından zıplayabildiğini ve evdeki işyerindeki yönlendiriciyi evdeki ağdan yaptığınız gibi yaptığınızı fark edinceye kadar sadece orta derecede yararlı görünüyor.

İleri X istekleri: 

Bu başka bir şaşırtıcı olanı. Uzak sisteminizde çalışan bir X sunucusu ile veya olmadan, bir x-windows programını çalıştırabilirsiniz ve pencere yerel ekranınızda görünecektir. Sadece -X anahtarını kullan, hepsi bu!

Uzak sunucunuzda çalışan bir X sunucusuna sahip olmanız gerekmediğinden, sunucunuzdaki CPU etkisi minimum düzeydedir; Windows ve cygwin / X çalıştıran güçlü oyun PC'nize büyük uygulamalar sunan bir TINY Linux sunucusuna sahip olabilirsiniz.

Tabii ki VI ve EMACS, SSH üzerinde çalışıyor, ama evde koşarken, bazen daha fazlasını istiyorum. Eclipse'in bir kopyasını başlatmak için ssh -X kullanıyorum! Sunucunuz dizüstü bilgisayarınızdan daha güçlü ise, orada dizüstü bilgisayarınızda GUI oturumu var, ancak derlemeler sunucunuzda yapıldı, bu yüzden sistem yükü hakkında endişelenmeyin.

Toplu iş dosyalarında çalıştır 

(anlamı diğer sistemlerde "şeyler yapar" yerel bir toplu iş dosyası çalıştırır):

Bunu yapmak için iki şey bir araya geliyor. Birisi (daha güvenli) şifreleme anahtarlarını kullanarak şifre uyarılarını ortadan kaldırabilirsiniz. İkincisi, SSH CLI üzerinde bir komut belirtebilirsiniz. Bunu bazı ilginç yollarla kullandım - Uzak sunucuda bir derleme başarısız olduğunda, bilgisayarıma SSH veriyorum ve bir ses dosyası çalıyorum).

Çıktının uzak komuttan yeniden yönlendirilebileceğini ve yerel toplu iş dosyasında kullanabildiğinizi unutmayın, böylece sunucunuzda çalışan bir derlemeyi yerel olarak da tarayabilirsiniz.

Mac’te yerleşik

Hem sunucu hem de istemci hem mac hem de linux olarak yerleşiktir. Mac ve Ubuntu durumunda, bir sunucuyu etkinleştirmek, doğru onay kutusunu bulmak kadar basittir.

PC'de cygwin veya cygwin / X'i kurun (cygwin / X, x-pencere çıktınızı Linux makinenizden Windows PC'nize iletmenize izin verir - bir X sunucusu kurar)

Önemli İpuçları / yapılandırma dosyası

Güvenlik duvarınızda 22 numaralı bağlantı noktasını kullanmayın. Çok fazla saldırı denemesi alacaksınız, buna değmez. Sadece güvenlik duvarınızın sunucunuza farklı bir bağlantı noktası iletmesini sağlayın.

Ssh komutlarınızı önemli ölçüde basitleştirmenize olanak tanıyan kapsamlı yapılandırma seçenekleri vardır. İşte işte benim bir örneği:

Host home
    hostname billshome.hopto.org
    Port=12345
    user=bill
    LocalForward=localhost:1025 mac:22

"Ssh home" yazdığımda (başka bir şey yok), yazdığım gibi davranıyor:

ssh -p 12345 bill@billshome.hopto.org

ve sonra yerel portum 1025'i sistemimde "mac" sistemime iletir. Bunun nedeni dosyamda başka bir giriş var:

Host mac
    hostname localhost
    port=1025

Bu yüzden bir kez "ssh home" yaptım ve pencereye hala sahip olacağım, "ssh mac" yazabilirim ve işte bilgisayar aslında "mac: 'a iletilen kendi portuna 1025 bağlanmaya çalışacaktır. 22 "diğer komutla, bu yüzden Mac'ime güvenlik duvarından bağlanacak.

Düzenle - harika komut dosyası!

Ben sadece sevdiğim eski bir senaryoyu kazdım - geri gelip, ilgilenebilecek herkes için buraya göndermek zorunda kaldım. Betiğe "authMe" denir

#!/bin/bash
if [ ! -f ~/.ssh/id_dsa.pub ]
then
    echo 'id_dsa.pub does not exist, creating'
    ssh-keygen -tdsa
fi
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub

Eğer ev dizininizde bu betik varsa ve (ssh ile) bağlayabileceğiniz bir ana bilgisayar varsa, "./authMe hostName" yazabilirsiniz.

Gerekirse sizin için bir kamu / özel anahtarlık oluşturacak, sonra diğer makineye geçecek ve genel anahtarınızı kopyalayacaktır (ssh komutu size bir şifre soracaktır ...)

Bundan sonra, SSH komutu, bu uzak sisteme bağlanırken şifrenizi artık istememeli, kamu / özel anahtar kutusunu kullanacaktır.

Uzak bilgisayarınız her zaman güvenli değilse, istendiğinde bir "parola" ayarlamayı düşünmelisiniz.

Ek güvenlik için metin şifrelerine (yalnızca tuşlara) izin vermemek için uzaktaki ssh sunucusunu da yapılandırmak isteyebilirsiniz.


101



+1 çok güzel ve kompakt bir yazı - Karsten
22 numaralı bağlantı noktası üzerinden SSH ile ilgili küçük bir not: İyi bir kök şifreniz olması ve kullanıcılarınızın korkunç şifreleri olmaması koşuluyla, sadece fail2ban (veya benzer bir şey) çalıştırmanız, çatlatma girişimlerini sürdürmek için yeterlidir. SSH'yi başka bir limanda tutmak gerçekten can sıkıcı buldum. - David Wolever
Bazen rahatsız edici olabilir, ancak bağların hacmi sadece korkunçtu. Onların geçmemesi gerektiğini biliyorum, ama birilerinin evine doğru yürüdüğünü ve kapı tokmağıyla her dakika uğraştığını sanki - sadece sinir bozucu.
Günümüzde ssh'in çoğunda son komutunuzun yerleşik bir sürümü var. ssh-copy-idve bu kadar basit ssh-copy-id user@someserver - JamesHannah
'Ssh mac' hile yapmak için başka bir yolu .ssh / config dosyanızda bir ProxyCommand yönergesi kullanmaktır. Host mac ProxyCommand ssh -q home "nc% h% p" Bu, netcat (nc) 'yi evinizde çalıştıracak ve ssh bağlantınızı doğrudan mac'a yönlendirecektir. Zincirlemeyi daha kolay buluyorum (örneğin 'web sunucusuna' erişmek için 'iş bul' a gitmek için 'ev' bağlantısına ihtiyacınız varsa. - toppledwagon


Kullanmayı severim

cd -

önceki dizine geçmek için Çok kullanışlı!


73



Bunu hiç bilemedim! Teşekkürler! İlgili bir notta, pushd ve popd benzer bir şey yapar, bir yığın direk oluşturarak. Bu tür hileler, derin bir dizin yapısı çevresinde gezinirken yardımcı olur.
Bu çok aydınlatıcı. - Manuel Ferreria


Yakın zamanda keşfettim pv kedi gibi ama transfer detayları ile komut (boru görüntüleyici).

Yerine

$ gzip -c access.log > access.log.gz

Kullanabilirsiniz

$ pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=>      ] 15% ETA 0:00:59

Operasyonunuz bittiğinde hiçbir fikrin olmamasına rağmen, şimdi bileceksiniz!

Peteris Krumins'in izniyle 


69



$ gzip -c access.log> access.log.gz Neden sadece: $ gzip access.log
Oh bu işe yarıyor :) Ben sadece örnek Peteris 'web sitesinden aldı. - Nick Devereaux
Bu eski gibi görünüyor tee(1). - Daniel C. Sobral
Son derece yararlı bir yardımcı program, her zaman unutuyorum biri :-( - Patrick


sudo !!

Önceki komutu root olarak tekrar çalıştırın.

[Sitede mevcut üst komut http://www.commandlinefu.com, bu sorunun satırları boyunca temalı bir site.]


53



Açıklama - Ben commandlinefu.com'u çalıştırıyorum - codeinthehole
Bu adamı 16 karakterden kurtarırdı: xkcd.com/149


Basın Ctrl-R ve bir komutu (ya da herhangi bir bölümünü) yazmaya başlayın - komut geçmişini arar. Ctrl-R tekrar vurmak bir sonraki maça atlar, girilen geçerli komutu çalıştırır ve sağdaki ok (en azından) önce düzenlemenizi sağlar.

$ (reverse-i-search)`svn': svn status

Bunu öğrenmeden önce Linux'u ana işletim sistemim olarak 7 yıl gibi bir şey için kullandım, ama şimdi bunu biliyorum, oldukça kullanışlı.


46



Teşekkürler. Ters arama kullanıyordum, ancak bir sonraki maça nasıl atlayacağımı anlayamadık. - Adam
Ctrl-S bir sonraki maça atlar. Yapmak zorunda olabilirsin stty -ixon ilk olarak XON / XOFF akış-kontrol anlamını kapatmak (bu ayrıca Ctrl-Q’nın kullanılabilir olmasını sağlar, varsayılan olarak Ctrl-V ile alıntılanan-insert ile eşleştirilir, ancak bunu başka bir şeye dönüştürebilirsiniz). Görmek man stty ve man readline Daha fazla bilgi için. stty komut eklenebilir ~/.bashrc - Dennis Williamson


Komut satırı komik bir şey. Kendi başınıza bir şeyler öğrenebildiğinizi ve kazayla öğrendiğiniz diğerlerini bir komut satırı kullanarak başkalarını izleyebileceğinizi düşünüyorum.

Kabuğu yıllardır el ile dizin isimlerini özenle yazarak kullanıyordum. Bir gün bir arkadaşımın bir sistemle uğraştığını izliyordum ve sekme tuşuna basmaya devam ediyordu. "Neden sekmeye basıyorsun?" Diye sordum. Cevap: dizin veya dosya ismini tamamlamaya çalışır. Kim tahmin ederdi - tab tamamlama! Dosya veya dizinin bir kısmını yazın, isabet sekmesini tıklatın ve yazdıklarınızı bitirmeye çalışın (davranış, hangi kabukta olsa da).

Bir gün, arkadaşım beni komut satırında izliyordu ve bana şöyle bir şey yazmıştı:

coryking@cory ~/trunk/mozi $ pushd /etc
/etc ~/trunk/mozi
coryking@cory /etc $ popd
~/trunk/mozi
coryking@cory ~/trunk/mozi $

Kim tahmin ederdi? O asla bilmiyordu popd / pushd. Sanırım biz bile ...


45



Benim için tamamlanma sekmesi "açık", çok basit bir şey gibi görünüyor, ama ben de popd / pushd hakkında bir şey bilmiyordum. Gerçekten çok komik. :) - Jonik
Komut, dosya ve dizinlerden çok daha fazlasını tamamlayabilmek için bu cevaba bakın: stackoverflow.com/questions/603696//603919#603919 - Jonik
Bu çok doğru. Bash'ın geriye dönük tarih-arayışını (ctrl-r) birini izleyerek öğrendim. Daha sonra bunun bir readline özelliği olduğunu fark ettim ve readline'ı (mysql, gdb, python -i, clisp vb.) İçeren diğer programlarda da aynı şekilde çalıştı. - sigjuice
"Kabuğu" yıllarca nasıl kullanırsınız ve sekme tamamlandığını bilmiyor musunuz? - prestomation
Pushd / popd ile uğraşırken komutadan bahsetmeyi unutma dirs. Bu, pushd / popd yığınında ne olduğunu gösterir. - slm


Vim öğrenin.

Bu (tartışmasız) en iyi editör, ama kesinlikle bir Linux sunucusunda bulunan en iyi editör.


41



gvim ayrıca windows'ta en iyi dosya tarayıcısıdır;)
Bu, aynı zamanda vim'i bildiğinizde, kabukların çoğunu vi-mode'a koyabildiğiniz ve navigasyonun son derece kolay ve hızlı bir hale geldiği için son derece kullanışlıdır. - Patrick


Oturum açtıktan sonra bile bir programın çalışmasını bırakmak bazen yararlıdır. Bu amaçla nohup ve hatta ekran kullanan bazı çözümler gördüm. Bildiğim en basit şey:

$ your_command_here & disown

Ayrıca çalışan bir programı ayırabilirsiniz:

$ your_command_here
# Press <Control-Z> to stop the program and bring it to background:
$ bg
$ disown

38



Ekranı kullanmak harikadır çünkü daha sonra herhangi bir yerden bu uygulamaya "yeniden bağlanabilirsiniz". - prestomation
+1, reddedildiğini duymamıştım. - user18911
benimle aynı şeyi yapsam da, yine de reddediyorum - Andy