it-swarm.asia

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

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

Aşağıdaki yorumu paylaşmak için böyle bir tartışma aradım ama bulamadım, bu nedenle bu yazı.

Umarım hepimiz bundan öğrenebiliriz.

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

112
Maxim Veksler

GNU Project tarafından geliştirilen ve birinde birden fazla terminal bulunmasını sağlayacak ücretsiz bir terminal çoklayıcı olan screen kullanın.

Bir oturum başlatabilirsiniz ve bağlantı kesilse bile terminalleriniz kaydedilir, böylece daha sonra veya evden devam edebilirsiniz.

111
jeneriz

SSH!
SSH tanrı emridir - sanırım öğrenilmesi gereken en değerli genel emirdir. Seçenekler oldukça ürkütücü olabilir, ancak SSH için sürekli gerekli olacağını düşünmediğim yeni komut satırı seçeneklerini kullanmayı sürekli öğreniyorum gibi görünüyor. Hepsini bu noktada kullanmış olabilirim.

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

Not: TÜM bu şeyler, ssh sunucusunun çalışması dışında sunucunuzda hiçbir kurulum yapılmadan uzaktan yapılabilir.

İnternet üzerinden bir dosya sistemi kurun

i̇nternette SSHFS ara

Komutları ilet.

SVN + SSH protokolü, uzak istemciden üzerinde NO DEAMON çalışan bir sunucuya Subversion! SVN komutu sunucuyu ssh Shell üzerinden başlatır ve bilgileri mevcut kanaldan ileri geri aktarır. Rsync programı aynı şeyi yapar, kendisini SSH ile başlatarak rsync deamon içermeyen bir sunucuya karşı çalışır. Benzer numaralar yapmak için kendi bash dosyalarınızı yazmak kolaydır.

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

Bunu her zaman evdeki linux sunucumdan mac'uma atlamak için kullanıyorum.

İleri bağlantı noktaları:
Ev güvenlik duvarınızdan geri dönebileceğinizi ve evdeki yönlendiricinizi ev ağınızdan yaptığınız gibi işten yapılandırabileceğinizi anlayana kadar yalnızca orta derecede yararlı görünüyor).

X isteklerini ilet:

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

Uzak sunucunuzda çalışan bir X sunucunuzun olması gerekmediğinden, sunucunuzdaki CPU etkisi minimumdur, Windows ve cygwin/X çalıştıran güçlü oyun PC'nize büyük uygulamalar sunan bir TINY Linux sunucunuz olabilir.

Tabii ki VI ve EMACS SSH üzerinde çalışıyor, ancak 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, GUI dizüstü bilgisayarınızda oturur, ancak derlemeler sunucunuzda yapılır, bu nedenle sistem yükü hakkında endişelenmeyin.

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

(diğer sistemlerde "işler yapan" bir yerel toplu iş dosyasını çalıştırmak anlamına gelir):

Bunu serinletmek için iki şey bir araya geliyor. Birincisi, (daha güvenli) şifreleme anahtarlarını kullanarak şifre istemlerini ortadan kaldırabilmenizdir. İkincisi, SSH CLI üzerinde bir komut belirtebilirsiniz. Bunu bazı ilginç şekillerde kullandım - Bir derleme uzak sunucuda başarısız olduğunda, bilgisayarımda SSH olurdu ve bir ses dosyası oynatır gibi).

Çıktıyı uzak komuttan yeniden yönlendirebileceğinizi ve yerel toplu iş dosyanızda kullanabileceğinizi unutmayın, böylece sunucunuzda çalışan bir derlemeyi de yerel olarak kuyruklayabilirsiniz.

Mac'te yerleşik olarak bulunur

Hem sunucu hem de istemci hem mac hem de linux içine yerleştirilmiştir. Mac ve Ubuntu için, bir sunucuyu etkinleştirmek doğru onay kutusunu bulmak kadar basittir.

PC'de cygwin veya cygwin/X kurulumu (cygwin/X, x-window çıktınızı Linux makinenizden Windows PC'nize iletmenizi sağlar - bir X sunucusu yükler)

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

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

Ssh komutlarınızı önemli ölçüde basitleştirmenizi sağlayan kapsamlı yapılandırma seçenekleri vardır. İşte benim işimden bir örnek:

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

Ben "ssh ev" (başka bir şey) yazdığınızda, ben yazmış gibi davranır:

ssh -p 12345 [email protected]

ve sonra yerel bağlantı noktanı 1025'i sistemdeki "mac" bilgisayarımıza iletir. Bunun nedeni, dosyamda başka bir giriş olması:

Host mac
    hostname localhost
    port=1025

bir kez "ssh ev" yaptım ve hala pencere açık var, ben "ssh mac" yazabilirsiniz ve iş yerinde bilgisayar aslında "mac" iletildi kendi bağlantı noktası 1025 bağlanmaya çalışacağız: 22 "komutunu girerek evdeki Mac bilgisayarıma güvenlik duvarı üzerinden bağlanacaktır.

Düzen - serin komut dosyası!

Sadece sevdiğim eski bir senaryoyu kazdım - geri gelip burada ilgilenebilecek herkes için postalamak zorunda kaldım. Komut dosyasına "authMe" adı verilir

#!/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

Ana dizininizde bu komut dosyası varsa ve bağlanabileceğiniz bir Ana Bilgisayar varsa (ssh aracılığıyla), "./authMe hostName" yazabilirsiniz.

Gerekirse sizin için genel/özel bir anahtar çifti oluşturacak, daha sonra diğer makineye ssh ve ortak anahtarınızı kopyalayacaktır (ssh komutu sizden bir şifre isteyecektir ...)

Bundan sonra, SSH komutu o uzak sisteme bağlanırken artık şifrenizi sormamalıdır, genel/özel anahtar çiftini kullanır.

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

Ayrıca ssh sunucusunu ek güvenlik için metin parolalarına (yalnızca anahtarlar) izin vermeyecek şekilde yapılandırmak isteyebilirsiniz.

101
Bill K

Kullanmayı severim

cd -

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

73
Fortyrunner

Son zamanlarda kedi gibi ama transfer detayları ile pv komutunu (boru görüntüleyici) keşfettim.

Yani 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

İşleminizin ne zaman biteceğini bilmemek yerine, artık bileceksiniz!

Peteris Krumins'in izniyle

69
Nick Devereaux
Sudo !!

Önceki komutu kök olarak yeniden çalıştırın.

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

53
codeinthehole

Ctrl-R tuşuna basın ve bir komut (veya herhangi bir bölümünü) yazmaya başlayın - komut geçmişini arar. Ctrl-R tuşlarına tekrar basmak bir sonraki eşleşmeye atlar, enter geçerli olarak görüntülenen komutu yürütür ve sağ ok (en azından) önce onu düzenlemenize izin verir.

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

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

46
Jonik

Komut satırı komik bir şey. Bence sadece kendi başınıza ve öğrendiğiniz geri kalanı bir komut satırı kullanarak başka birini izleyerek öğrenebilirsiniz.

Shell'i yıllarca özenle dizin isimlerini elle yazarak kullanıyordum. Bir gün bir sistemde bir arkadaşımın etrafındaki karışıklığı izliyordum ve sekme tuşuna basmaya devam etti. "Neden sekmeye vuruyorsun?" Diye sordum. Yanıt: dizini veya dosya adını tamamlamaya çalışır. Kim tahmin ederdi - sekme tamamlama! Dosya veya dizinin bir kısmını yazın, sekmeyi tıklayın ve yazdığınız şeyi bitirmeye çalışacaktır (davranış, hangi Kabuğa rağmen bağlıdır).

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

[email protected] ~/trunk/mozi $ pushd /etc
/etc ~/trunk/mozi
[email protected] /etc $ popd
~/trunk/mozi
[email protected] ~/trunk/mozi $

Kim tahmin ederdi ki? Asla popd/pushd hakkında bir şey bilmiyordu. Sanırım biz bile ...

45
Cory R. King

Vim öğrenin.

Bu (tartışmasız) en iyi editördür, ancak kesinlikle çıplak bir Linux sunucusunda bulunan en iyi editördür.

41
Ali A

Oturumu kapattıktan sonra bile bir programı çalışır durumda bırakmak bazen yararlı olabilir. Bu amaçla Nohup ve hatta ekran kullanan bazı çözümler gördüm. Bildiğim en basit şey:

$ your_command_here & disown

Çalışan bir programı da ayırabilirsiniz:

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

Bir takma ad değil gerçek komut kullandığımdan emin olmak istediğimde, önde gelen ters eğik çizgi kullanıyorum:

\rm -rf ~/tmp
38
mouviciel

Bu ipucu CLI'nizi daha rahat hale getirecektir (en azından benim için yapar):

aşağıdaki içeriklerle ~/.inputrc dosyası oluşturun:

"\e[A": history-search-backward
"\e[B": history-search-forward

Yeniden bash (örneğin "exec bash" yazarak). Bir komutun önekini yazıp yukarı oka bastığınızda, önekinizden başlayarak komutlara göz atacaksınız, örneğin ssh yazdıysanız, uzak kabuklarla önceki bağlantılarınızı gösterecektir. Bilgi İsteminiz boşsa, yukarı ok geçmişe normal şekilde göz atacaktır.

38
kyku

Aynı anda birden fazla komut yürütürken && Yerine ; Kullanın. Bir hata oluştuğunda durur ve diğer komutları yürütmez.

Klasik örnek:

./configure && make && make install
36
x-way

Bash'daki komut satırına döngüler yazarken genellikle 'echo' komutuyla riskli komutların önüne eklerim.

for item in items; do echo something-risky; done

Bu şekilde, çalıştırmayı taahhüt etmeden önce 'riskli bir şeyi' tam olarak görüyorum. Riskli komutunuz değişken genişletmeler ve globlar içerdiğinde yardımcı olur. Ve 'set -x' bash betikleri yazarken çok kullanışlıdır.

'set -x' hata ayıklamayı etkinleştirir. Bash hata ayıklaması hakkında bilgi için http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html adresine bakın.

32
Jonathon Watney

Gereklilik

2 sunucu arasındaki maksimum bant genişliğini test etmeniz gerekir.


Çözüm

SUNUCU1 şunları yapar:

nc -u -l 54321 > /dev/null

Açık SERVER2 şunları yapar:

dd if=/dev/zero bs=1MB | nc -u SERVER1 54321 &
pid=$(pidof dd)
while (( 1 )); do kill -USR1 $pid; sleep 2; done

Aşağıdaki gibi bir çıktı göreceksiniz:

182682000000 bytes (183 GB) copied, 1555.74 seconds, 117 MB/s
182920+0 records in
182919+0 records out

117 MB/sn. burada gerçek ağ aktarım bant genişliğini gösteren ilginç bir faktördür.

açıklama :

Paket ağ üzerinden akmaya başlayacağından, SERVER2'de bant genişliği istatistiklerini görebileceksiniz, bu da 2 sunucu arasındaki gerçek maksimum bant genişliğinin oldukça iyi bir tahminidir.

UDP ile kopyalama (TCP ek yükü önlemek için).

SERVER1'deki bellekten (/ dev/zero) belleğe kopyalama (/ dev/null) SERVER2 üzerinde çalışarak disk G/Ç'nin darboğaz olmasını önler.

31
Maxim Veksler

Renk dizini yapılarını görmek daha kolaydır.

alias ls="ls --color=tty"

Düzenle

alias ls="ls --color=auto"
23
Suroot

Günlük görüntüleme ile ilgili bazı küçük işaretçiler:

  1. Günlüğü kesildikten sonra izlemeye devam etmek için tail -F kullanabilirsiniz (örneğin log4j).
  2. Daha az kullanabilirsiniz: Daha az aç, kuyruk davranışını taklit etmek için ÜSTKRKT + F tuşlarına tıklayın. Ayrıca satır kaydırmayı devre dışı bırakmak için yararlı kombinasyon - S şeklindedir. daha azı günlüklerde arama yapmanızı sağlar.
20
Maxim Veksler

Bir dosyanın uzantısını kolayca değiştirmek için uzun bir süre bir arkadaş bir numara öğrendim:

mv my_filename.{old,new}

Kabuk genişletmesi bunu aşağıdakilere genişletir:

mv my_filename.old my_filename.new

Bu, bir dosyayı aşağıdakilere bir şey eklemek gibi başka şekillerde yeniden adlandırmak için de kullanılabilir:

mv my_{,cool_}filename
20
Scotty Allen

Sıkıştırılmış arşivleri ayıklamak için "tar xf" kullanın. Tar, arşivinizin dosya türünü algılayacağından, bzip2 için j ve gzip için z gerekli değildir. Bağımsız değişkenlerden önce '-' işareti de yoktur. Çok zaman kazandıracaksınız (binyıl ;-)).

Daha iyisi, gereksiz argümanlar olmadan tek bir komutla herhangi bir arşivi çıkarmak için nfoo kullanın.

19
kyku

Bash-tamamlama paketini yükleyin. Shell için önceden tanımlanmış bir dizi tamamlama kuralı içerir. Dağıtım sizin için yapmazsa "source/etc/bash_completion" yazarak etkinleştirin. Daha sonra, örneğin kpdf'den sonra her tamamladığınızda sadece bir dizin listesi ve PDF dosyaları) görürsünüz. Scp ssh: // server/XXX (eğer şifresiz girişleri etkinleştirdiniz).

17
kyku

Bunları sürekli kullanıyorum

ALT-. (Bazı terminallerde ESC +.) Son kullanılan bağımsız değişkeni kopyalar (çok yararlı)

CTRL-W Word'ü siler

CTRL-L temiz terminal (temiz komut gibi ama daha hızlı)

ALT-B (bazı terminallerde ESC + B) bir Word'ü geri taşır

ALT-F (bazı terminallerde ESC + F) bir Word'ü ileriye taşır

CTRL-E EOL'ye atla

CTRL-A BOL'a sıçradı

Geçmişte CTRL-R araması

17
Álvaro

Bash'da ! $ çok kullanıyorum. Son komutun son argümanını tekrarlar:

ls /really/long/command/argument/that/you/dont/want/to/repeat.txt
vi !$

Ls çalışacaktır, o zaman düzenlemek istiyorsanız, yeniden yazmak zorunda değilsiniz, sadece! $ Kullanın. Bu, uzun yol/dosya adları için gerçekten yararlıdır. Ayrıca, ! * önceki komutun tüm argümanlarını tekrarlar. Bunu çok fazla kullanmıyorum, ama faydalı görünüyor.

Bahsedildiklerini biliyorum, ama vim, screen ve cd kullanıyorum.

Noclobber'ı unuttum:

set -o noclobber

man bash'tan :

Ayarlanırsa, bash,>,> & ve <> yeniden yönlendirme işleçleriyle varolan bir dosyanın üzerine yazmaz. Yeniden yönlendirme işleci kullanılarak çıktı dosyaları oluşturulurken bu geçersiz kılınabilir> | yerine>.

16
gpojd

Bash'tan zsh 'a geçin ve üretkenliğinizin iyileştiğini görün:

  • Gerçekten akıllı, yazılabilir sekme tamamlama. Sadece komut satırlarını değil, tüm seçenekleri, man sayfalarının isimlerini, paket isimlerini (apt-get/emerge vb. İçin) ve size neler olduğunu tamamlar. Ve tamamlama sırasında seçeneklerin yararlı bir açıklamasını sağlar. Tüm bunlar, komut verildikten sonra herhangi bir kaydırma alanı kullanmadan.
  • Joker karakterlerin sekme tamamlanması; cat * .txt yazın, sekmeye basın ve ifadeyle eşleşen dosyalar arasında seçim yapın.
  • Sadece adlarını yazarak dizinleri değiştirin.
  • Çeşitli satır editörü modları. İsterseniz vi veya emacs gibi davranabilir.
  • İstediğiniz her şeyi yapmak için özelleştirilebilir anahtar bağlamaları.
  • Ekranın sağ tarafına Bilgi İstemi bilgisi koyma ve uzun bir komut yazarken otomatik gizleme özelliği de dahil olmak üzere tematik istemler

Google size çok daha fazla fayda sağlayacaktır.

14
flodin

Eski okul, bir dizin ağacını bir yerden başka bir yere taşıyarak, sembolik bağlantıları, izinleri ve tüm bu iyi şeyleri koruyarak:

tar cBf - . | (cd /destination; tar xvBpf -)

veya ağ genelinde

tar cBf - . | rsh foo.com "cd /destination; tar xvBpf -)

Yeni okul:

rsync -urltv . /destination

veya ağ genelinde

rsync -urltv -e ssh . foo.com:/destination
13
Paul Tomblin

Gereksinim: Silmek istediğiniz dosyaların büyük bir listesini içeren bir dizininiz var. rm -r başarısız olur!

örnek

find /var/spool/mqueue/ | wc -l
191545
rm -f /var/spool/mqueue/*
-bash: /bin/rm: Argument list too long

Çözüm:

find /var/spool/mqueue/ -xdev -exec command rm -f '{}' +

Açıklama:

Düzenleme: @ephemient yorumunun ardından açıklama düzeltildi.

find, rm'ye izin verilen maksimum bağımsız değişkenle bağımsız değişkenler sağlar. Bu, rm'nin bulmanın kendisini -delete işlemini kullanmadan bildiğim en hızlı teknik olan toplu işlerdeki dosyaları silmesine izin verecektir. Eşittir

find /var/spool/mqueue -xdev -print0 | xargs -0 rm -f

find öğeniz -exec ... +.

13
Maxim Veksler

Ben paylaşmak için iyi bir fikir olacağını düşündüm bu sık sık bu iki ipucu kullanın:

!foo

Geçmiş dosyasındaki son komutu "foo" ile başlatacak (derlerken sık sık kullanıyorum, !gcc Örneğin.)

Diğeri ise klavye kısayoludur (Return yerine Ctrl + O), bu komut yürütülür ve geçmiş dosyasındaki bir sonraki komutu görüntüler. Örneğin bir dosyayı derlediğimde ve test ettiğimde her zaman 3 veya 4 komutları yaparım, testin dizinine cd yapar, testi çalıştırır, makefile dizinine cd yapar. Ctrl + O kullanarak bu işlem çok daha kolay hale gelir :)

Umarım bu yardım!

11
claferri

Subversion'u Linux'ta bulunmayan süslü grafik arayüzler yardımı olmadan kullanma.

svn co <repo-url> . # Checks out project into current folder

svn update # Get latest changes from server

svn status # Shows what files have changed locally

svn add <path/filename> # Add some file to the repo

svn commit # Commit your changes to the repo

Bu, birçok geliştiricinin garip bir şekilde Linux kullanmasını engelliyor.

10
postfuturist

En çok gözden kaçan eski okul komutu: find

Dün bir brüt izin hatası düzelttim:

for u in nr dias simonpj; do
   Sudo -u $u find . -type d -exec chmod g+s '{}' ';'
done
10
Norman Ramsey

bash ve ksh gibi kabuklar için, komut satırının metin düzenleyiciniz gibi gezinme komutlarına yanıt vermesini sağlayabilirsiniz:

set -o emacs

veya

set -o vi

geçmişinizde arama yapmanıza ve komut dosyalarında alıştığınız şekilde metin dosyalarında (örneğin vi modunda, ESC tuşuna basıp /string önceki komutlarınızda "dize" arar - eşleşmeler arasında geçiş yapmak için n ve N kullanabilirsiniz)

8
Tim Whitcomb

grep benim arkadaşım. Ciddi anlamda.

Liste .rb metnini içeren dosyalar class foo:

grep -l "class foo" .rb

Liste .rb dosyaları yokclass foo:

grep -L "class foo" *.rb

Liste .rb dosyaları yok foo veya bar içerir (-e ile herhangi bir regexp kullanabilirsiniz, ancak işleçlerden kaçmanız gerekir):

grep -L -e "foo\|bar" *.rb
8
Sarah Mei

Kabuk değiştirme ^:

/home/eugene $ ls foo.txt
foo.txt
/home/eugene $ ^ls^rm
rm foo.txt
/home/eugene $ ls foo.txt
ls: cannot access foo.txt: No such file or directory
8
Eugene Morozov

$_ Önceki komuttan son bağımsız değişken için bir ortam değişkenidir

Yeni bir dizin oluşturursam

$ mkdir ~/newdir/

Girmek için gidiyorum

$ cd $_

URL'ler, dizinler, uzun dosya adları vb. Gibi karmaşık ve büyük metinler için kullanışlıdır.


!:{number} Kullanarak önceki komuttaki her bağımsız değişkene de başvurabilirsiniz.

$ echo !:0 !:1 !:2

Bash'ın yürütmeden önce bunu genişleteceğini unutmayın (geçmişinizi görmek için bu basının yukarı baktığını görmek için).

$ touch one two three
$ ls !:1 !:2 !:3 

Bir ortam değişkeni olan $_ 'Dan farklı olarak, bu' ls one two three '' e genişler, eylemi gerçekleştirir ve komutu Kabuğa yazdırır. Bu yöntemi (bence) kullanmak çok daha sık kullandığım $_ 'Dan daha zordur.

Not: $ _ yerine! $ Da kullanabilirsiniz, ancak ilki genişleyecektir

7
Nick Devereaux

Dizinleri hatırlamak için pushd/popd Kullanımı ile ilgili bir cevap vardı. Bir dizini geçici olarak ziyaret etmek isterseniz, aşağıdaki gibi cd - Komutunu kullanarak yazmayı kaydedebilirsiniz:

/home/eugene $ cd /etc
/etc $ cd -
/home/eugene $

Ayrıca, en sevdiğim komutlardan biri xargs. find ile çok sık kullanıyorum, ancak diğer durumlarda da kullanışlı olabilir. Örneğin, bir işlemi başlatmak için hangi komut satırı bağımsız değişkenlerinin kullanıldığını bulmak için linux'da aşağıdaki komutu kullanabilirsiniz:

 $ xargs -0 echo < /proc/[PID]/cmdline

Bazı durumlarda (özellikle kaynak kodla çalışırken) ackgrep 'dan daha kullanışlıdır çünkü otomatik olarak özyinelemeli olarak arama yapar ve yedekleme dosyalarını ve sürüm denetim dizinlerini (.svn, .hg gibi) yoksayar . Artık find . -name \*.c | xargs grep 'frobnicate' Gibi uzun komut satırları yazmanıza gerek yok.

6
Eugene Morozov

Bugün bir arkadaşımdan gördüğüm güzel.

Uygulamanın günlüğünü temizle (bir sonraki başlatma ve işbirliği için)

> /var/log/appname.log

(> komutunun bir parçası olduğunu unutmayın).

Bu yapmakla aynıdır:

echo '' > /var/log/appname.log
6
Maxim Veksler

Here bugün digg'de karşılaştığım mükemmel bir ipucu koleksiyonudur.

5
Satish

TuxRadar'da Her geek bilmeniz gereken Linux ipuçları okumayı bitirdim . Biraz bilmek ama daha fazla bilmek isteyenler için çok güzel makaleler.

5
matpie

kes ve grep düz metin dosyalarını yönetmenin çok güzel bir yoludur. İstediğinizi alabilirsiniz. cut dosyayı "dikey" bölmenizi sağlar ve grep dosyayı "yatay" bölmenizi sağlar.

Aşağıdaki cümle ; a yalnızca 1 ve 3'ü döndürür.

$cut -d ';' -f 1,3 hello.txt

grep (iyi bilinen bir komut) ile satırlar için de aynısını yapabilirsiniz. Aşağıdaki cümle ilginizi çekmeyen satırları göz ardı edecektir:

$grep error hello.txt

grep ayrıca ters için de olabilir: kalıpla eşleşmeyen satırları yoksay ve ayrıca normal ifadeler kullanabilirsiniz.

Ancak her ikisinin de en güçlü yanları boru kullanıyor. Örneğin:

$grep error hello.txt | cut d ':' -f1,3 | cut -d' ' -f1
5
FerranB

Hem stdout hem de stderr'i yeniden yönlendirmede birleştirmek istiyorsanız 2>&1, de olduğu gibi:

make > make.log 2>&1

4
Jared Oberhaus

İnternet Servis Sağlayıcımın bant genişliği sınırı var, ancak saat 2 veya 3'te başlayarak herkese açık bir pencere var. Bu pencere için at ile büyük indirmeler planlıyorum:

$ echo aptitude -d -y dist-upgrade | at 3am
$ echo wget http://example.com/bigfile | at 3am

Aslında at ile kafamı karıştıran şey, komut dosyasını komut satırında değil, stdin'de almasıdır.

4
bstpierre

Komutları tekrarlamak ve sonuçları gözlemlemek için watch komutunu kullanın. Desteklenmiyorsa (Solaris sistemlerinde olduğu gibi) aşağıdakileri deneyin (bash):

while [ 1 ] ; do
<cmd>
sleep <n> # n is # of seconds to repeat command
echo "" # meaningful output here can be helpful
        # I like to use ">>>>>>" `date` "<<<<<<<"
done
4
bedwyr
reset

veya

stty sane

yanlışlıkla bir ikili dosyayı yaratarak terminalinizi mahvederseniz!

4
dogbane

tail -f İle birden fazla dosyayı takip edebilirsiniz:

tail -f logfile1 logfile2

güncellemeler gerçekleşme sırasına bağlı olarak birbirine geçecektir:

==> logfile1 <==
event-a
event-b
==> logfile2 <==
event-p
event-q
==> logfile1 <==
event-c

Daha temiz bir görüntü istiyorsanız, saati kullanın ve tail öğesinden -f

watch tail logfile1 logfile2

Kişisel, tüm zamanların favorisi: CLI meta ve kalıcı takma adları .

bu takma adlarla, yeni Kabuk takma adlarını tanımlamak ve ilerletmek için basit bir komut (val). ek ad dosyaları veya takma adlarla daha küçük "modlara"/alan adlarına genişletilebilir.

~/.alias.sh (bunun Shell başlangıç ​​dosyalarınızda olduğundan emin olun)

# bash format example
alias sal='. ~/.alias.sh; echo ~/.alias.sh was sourced'
alias val='vi ~/.alias.sh; sal'

veya ~/.alias.csh ( csh biçimi - Shell başlangıç ​​dosyalarınıza eklendiğinden emin olun)

# csh format 
alias sal 'source ~/.alias.csh; echo ~/.alias.csh was sourced'
alias val 'vi ~/.alias.csh ; sal'
3
popcnt

En yaygın ls komutlarım

ls -lSr
ls -ltr

dosyaları sırasıyla artan boyut ve zaman sırasına göre sıralamak (en büyük veya en yeni dosyaları bulmak için). Ayrıca, herhangi bir nedenle bir renkli terminaliniz yoksa veya renkleri (benim gibi) sevmiyorsanız ls -F size renklerle aynı türde meta veri verir: '/' bir yönü gösterir, '*' çalıştırılabilir, vb.

Ayrıca, find ve xargs kullanmayı öğrenin: komut satırının gücü daha küçük komutları daha güçlü bir şeye birleştiriyor. Bu 2 komut bunun için vazgeçilmezdir!

3
KarstenF

here-docs biraz eğlencelidir:

cat << EOF > /tmp/file.txt

The ${speed} ${color} ${animal} jumped over the ${structure}

EOF

Veya, BASH kullanıyorsanız .. döngülerdeki burada dokümanlar ile eğlenceli:

cat << EOF > /tmp/file.txt

The ${speed[i]} ${color[i]} ${animal[i]} jumped over the ${structure[i]}

EOF

Bir Shell betiği içinde HTML, PHP, yapılandırma dosyaları veya lanet oluşturmak için kullanışlı .. diğer Shell betikleri bile :)

3
Tim Post

Bash'de kullandığım komut satırı düzenleme klavye kısayolları:

CTRL- - İmlecin bulunduğu yerden evine metin silin. Bir şifreyi yanlış yazdığınızda ve terminalinizin DELETE veya BACKSPACE'i destekleyip desteklemediğini hatırlamak için idealdir.

CTRL-A - Terminaliniz HOME'u doğru göndermese bile aynı HOME tuşu gibi.

CTRL-E - Tıpkı END gibi

ALT-F - İmleci bir Word ile ileri götür.

ALT-B - İmleci bir Word ile geriye doğru hareket ettirin.

3
Shalom Craimer

Kimse bash'ın yerleşik fc komutundan bahsetmediğine şaşırdım (fc Fix Command anlamına gelir).

Önceki komutunuzu komut satırı yerine bir düzenleyicide (yani vim) düzenlemek için kullanın ve düzenleyiciden çıktıktan sonra yürütün. Oldukça kullanışlı.

fc [-e ename] [-nlr] [first] [last]
fc -s [pat=rep] [command]

Bununla ilgili daha fazla bilgi edinin burada

3
ArtBIT

Bunu ~/.bashrc'e ekle

# expand things like !310:1 after spaces.
bind Space:magic-space

Kullanmak biraz korkutucu

  • !: 0 (son komutun 0. argümanı, yani program adı)
  • !: 2 (son komutun 2. argümanı)
  • !! (son komutun tamamı) (Sudo !!)
  • ! $ (son komutun son argümanı)
  • ! * (son komutun tüm argümanları)
  • ! ssh (ssh ile başlayan son komut)
  • ^ tıknaz ^ pastırma (ilk tıknaz hariç son komut pastırma ile değiştirilir)
  • !: gs\chunky\bacon (... tüm tıknaz yerine pastırma kullanılır)

komutu çalıştırmadan önce neyin değiştirildiğini kontrol etmeden.

* .Txt gibi joker karakterler veya merhaba. {Txt, org} gibi globs kullandığınızda, echo komutuyla neler yapıldığını önceden kontrol edebilirsiniz.

echo rm *.bak
rm *.bak

Fakat!: 0 gibi şeyler için echo kullanmazsınız, çünkü echo yapıldıktan sonra son komut echo komutudur. Bu fenomeni kuantum mekaniğinde "gözlem vidası şeyleri" prensibi olarak duymuş olabilirsiniz.

Bunun yerine, ~/.bashrc'nize "bind Space: magic-space" i eklersiniz ve sonra, her bastığınızda,!: 0 gibi şeyler orada genişletilir.

3
RamyenHead

Sıkıştırılmamış bir gzip dosyasında arama yapın:

gzcat someFile.gz | grep searchString
2
Millhouse

Birkaç yararlı olanlar:

rsync -av old_location new_location

bir dizin yapısını kopyalar ve izinleri ve bağlantıları korur.

Sudo updatedb && locate filename

dosyaları hızlı bir şekilde bulmak için (findutils gerektirir)

apropos term_or_terms

sayfaları arar.

2
rlbond
alias rm='rm -i'
2
VirtualDevil

Kendinizi "oh, Perl/Python/ne istersem yapacağım hakkında 15 satır yazabilirim" diye düşünürseniz, önce coreutils adresine bir göz atın.

2
Svante

cd ile 2 bağımsız değişken kullanarak dirs değiştirmek için yol değiştirme yapabilirsiniz:

$ pwd
/foo/bar/blah
$ cd bar bat
/foo/bat/blah
2
jpeacock

bekliyoruz kullanın! Bu, komut dosyası etkileşimli araçlarını çok daha kolaylaştırır. Örneğin telnet oturumu veya ftp oturumu komut dosyası oluşturabilirsiniz.

Çalışmanızı komut satırında yapın ve sonra komut dosyasını yazın. İşte size bir geliştirme kartı telnet, bir çekirdek görüntü almak ve flaş koymak için kaba bir örnek

#!/bin/bash
# scripted telnet
IP=$1
IMAGE="platform-AT91SAM9260/images/linuximage"
cp $IMAGE /home/cynove/public_html/
expect -b - <<EndOfTelnet
spawn telnet $IP
expect "login"
send "root\r"
expect "#"
set timeout -1
send "wget -O kimage http://192.168.10.2/~cynove/linuximage\r"
expect "#"
send "ls -al kimage\r"
expect "kimage"
send "flashcp -v kimage /dev/mtd1\r"
expect "Erasing"
expect "#"
send "exit\r"
EndOfTelnet
2
shodanex

Terminalde size Google ve Google kitaplarını veren aşağıdaki komutları beğendim

#!/bin/sh

q=$1
w=$2
e=$3
r=$4
t=$5

open "http://www.google.com/search?q=$q+$w+$e+$r+$t&ie=utf-8&oe=utf-8:en-GB:official&client=firefox-a"

ve terminaldeki Google kitapları

#!/bin/sh

q=$1
w=$2
e=$3
r=$4
t=$5

open "http://books.google.com/books?q=$q+$w+$e+$r+$t"

.Bashrc içinde aşağıdakiler var

alias gb='/Users/Mas/bin/googlebooks'                                                                               

alias g='/Users/Mas/bin/google'

/ Bin/googleScripts/adresindeki komut dosyaları için 777 iznim var.

Örnekler

gb Strang null space            // searches books which have the words

g Lordi Hard Rock Eurovision   // Googles websites which have the words

Harici bir tarayıcıya ihtiyaç duymamanız için terminalde kitap başlıklarının olması harika olurdu.

Benzer şekilde, Google'da arama yapan URL'lerin doğrudan Terminal'de bulunması, böylece Terminal'deki verileri işleyebilmeniz yararlı olur.

En sevdiğim hilelerden biri CLI'den çıkmak.

xdg-open .

Bu, geçerli dizine sahip bir GUI dosya tarayıcısı açar. Linux için. "BAŞLAT" seçeneğini kullanın. Windows ve "aç" için. OS X için)

Yankı kullanmayı öğrenmeden önce, jm'yi joker karakterlerle kullanmaktan korkuyordum, bu yüzden geçerli klasörü xdg-açıp GUI'deki dosyaları kaldıracağım. Ayrıca tar komutundan korktum, xdg-open kullanmanın başka bir nedeni.

CLI dünyasına geri dönmenin bir yolu ne olacak?

GUI dosya tarayıcınızın konum çubuğuna çift tıklayın (veya üç kez tıklayın) ve çalıştırın:

cd "$(xsel)"

buradan) . (veya nautilus ile burada açık terminal kullanın)

2
RamyenHead

Komut Satırında Güvenlik

Deneyimli sistem yöneticileri ilk başta tembel veya kendine özgü görünen şeyler yaparlar, ancak pastırmalarını mavi ayda bir kez saklarlar.

Yapabileceğiniz Herhangi Bir Şey Yazmayın

İster bir çalışma kitabından, ister manuel olarak veya terminal penceresinden daha yüksek bir yerden kopyalıyor olun, kopyalayıp yazarak yazmaya tercih edin. Özellikle argüman, anahtar, komut, dosya adı, vb. Yazmak, özellikle sistemlere aynı anda bakarken, konferans görüşmesindeki durumu bildirirken ve bir sorunun temel nedenini anlamaya çalışırken çok kolaydır.

Komut satırını yapıştırmak iyi bir alışkanlıktır. Bunu a) her şeyi yazılabilir hale getirerek ve b) ekran görüntüleri yerine kılavuzlara komutlar koyarak etkinleştirmeliyiz.

Windows'u Ayır

"Hata, yanlış Shell!" Ünlü son sözler. Farklı ortamlarda oturum açan pencereleri ayırmanın bir yolunu bulun. Üretim ortamlarına farklı bir arka plan rengi verin veya farklı bir monitöre koyun.

Yola Güvenmeyin

Bir ihtiyar, ama goodie, dizininizde "ls" adlı bir Shell betiği yapmaktır. Kendine ait gizli bir dizinde/bin/bash'ın bir suid kök kopyasını oluşturmasını sağlayın, sonra kendisini silin ve real/bin/ls komutunu çalıştırın. Tek yapmanız gereken dizininizde "ls -la" çalıştırmak için saf bir yönetici almak ve puf , bir kök Kabuk var.

Gerçek yöneticilerin asla "." tam da bu tür gizli saldırılardan kaçınmak için Sen de yapmamalısın. Yakındaki yürütülebilir dosyaların önüne "./" eklemek, içine girmek için iyi bir alışkanlıktır.

Dosyaları Taşımayın. Kopyala Sonra Sil

"mv oldname newname" tehlikeli. Aynı anda iki dosyayı yok edebilir. Bir dizi yapmak daha iyidir. Başlangıç ​​dosyasını hedefe kopyalayın, uygun olup olmadığını kontrol edin, ardından orijinali silin. Daha da iyisi, tüm işlemi tamamlayıncaya kadar bekleyin, ardından orijinal dosyayı kaldırın. Daha da iyisi, değiştirmek üzere olduğunuz dosyanın güvenli bir kopyasını oluşturun. Amaç, her şeyi tamamen geri dönüşümlü hale getirmektir, böylece her zaman bilinen bir duruma geri dönebilirsiniz.

2
user9495

Bazen terminalde çalışırken, pdf veya mp3 dosyaları gibi onunla ilişkili bazı GUI uygulamasını kullanarak bir dosya açmanız gerekir. Bu komutun tam adını hatırlamak zorunda değilsiniz, sadece şunu kullanın:

gnome-open some-file.pdf

BTW, kullandığım en kısa diğer ad:

alias o=gnome-open

Çok kullanışlı.

2
jackhab

Hızlı ve Basit veri bütünlüğü doğrulaması

bash & md5sum'dan başka bir şey kullanma

Bu, ikili dosyaları ağ üzerinden taşırken hata ayıklama sorunu açısından paha biçilmez olabilir ...% 100 veri bütünlüğü sağlamak için bu tekniği değerli verilerin her kopyası için ortak uygulama olarak kabul etmelisiniz.

Bazı test verilerini ayarlayın ...

mkdir -p /tmp/mdTest/dir{1,2,3}
for i in `seq 1 3`; do echo $RANDOM > /tmp/mdTest/dir$i/file$i ; done

test verilerinde md5 karma hesaplaması

cd /tmp/mdTest/
TMPMD5LIST=$(mktemp); (find  -type f -exec md5sum '{}' \;) > $TMPMD5LIST; mv $TMPMD5LIST list.md5sum

karmadan veri entegrasyonu doğrulaması

cd /tmp/mdTest/
md5sum --check list.md5sum
./dir3/file3: OK
./dir1/file1: OK
./dir2/file2: OK

Birim testi: Dosyalardan birini kıralım.

echo $RANDOM >> /tmp/mdTest/dir1/file1
md5sum --check list.md5sum
./dir3/file3: OK
./dir1/file1: FAILED
./dir2/file2: OK
md5sum: WARNING: 1 of 3 computed checksums did NOT match
2
Maxim Veksler

Bash parametre genişletmeleri mükemmeldir:

$ FOO=leading-trailing.txt

$ echo ${FOO#leading-} # remove leading match
trailing.txt

$ echo ${FOO%.txt} # remove trailing match
leading-trailing

$ echo ${FOO/-*/-following} # match a glob and substitute
leading-following.txt

Bir grup dosyayı yeniden adlandırmanız mı gerekiyor? Bir for döngüsü ile birleştirin:

$ for FILE in file*.txt; do mv -v $FILE ${FILE#file-}; done
file-01.txt -> 01.txt
file-02.txt -> 02.txt
file-03.txt -> 03.txt

Onları temel bir şekilde kavradığınızda, ne sıklıkta yararlı olduklarına şaşıracaksınız.

2
markdrayton

Favori ve Sık Kullanılanım:

tar.gz dosyasının içeriklerini listeleyin

tar -tzf dosyaadı.tar.gz

S1 OR S2 OR S3 OR) S4

grep 'S1. * S2. * S3. * S4' dosyası

Geçerli dizinin tüm alt dizinlerini listeler

ls -d * /

Toplam dizin boyut
du -sh

bir tarih bulun:

TIMESTAMP = date '+%y%m%d%H%M'

işlemi ön plandan arka plana taşı

Ctrl-z ve sonra bg

Tüm Word büyük harfe

yankı "Kelime" | awk '{yazdırıcı ($ 0)}'

Sayılar arasındaki eşitliği kontrol eder

x -eq y Kontrol x'in y'ye eşit olduğunu

x -ne y x'in y'ye eşit olup olmadığını kontrol edin

x -gt y x'in y'den büyük olup olmadığını kontrol edin

x -lt y x'in y'den küçük olup olmadığını kontrol edin

Dizeler arasındaki eşitliği kontrol eder

x = y x'in y ile aynı olup olmadığını kontrol edin

x! = y x'in y ile aynı olmadığını kontrol edin

-n x x boş değilse doğru olarak değerlendirilir

-z x x boşsa doğru olarak değerlendirilir

'test' için Komut Satırı Parametreleri

-d dosyanın bir dizin olup olmadığını kontrol edin

-e dosyanın var olup olmadığını kontrol edin

-f Dosyanın normal bir dosya olup olmadığını kontrol etme

-g Dosyanın SGID izinlerine sahip olup olmadığını kontrol edin

-r Dosyanın okunabilir olup olmadığını kontrol et

-s Dosyanın boyutunun 0 olup olmadığını kontrol eder

-u Dosyanın SUID izinleri olup olmadığını kontrol edin

-w dosyanın yazılabilir olup olmadığını kontrol et

-x dosyanın yürütülebilir olup olmadığını kontrol et

son satırın ilk alanını yazdır "

awk '{field = $ 1}; END {baskı alanı} '

değişkenlerde önemli yapı

$ # Komut satırı bağımsız değişkenlerinin sayısı. Test etmek için kullanışlıdır. komut dosyasında komut satırı bağımsız değişkenleri listesi.

$ * Shell'e yapılan tüm argümanlar

$ @ Yukarıdaki ile aynı

$ - Shell'e sunulan seçenek

$$ Shell'in PID'si

, $! Son başlatılan arka plan işleminin PID'si (& ile başlayan)

1
Sasha

Komut İstemi'nde asla "rm" yazmaya doğru ilerliyorum. Bunun yerine, "ls" yazın ve kaldırılan dosyaların listesini beğenirsem komutu düzenlerim (bash ve ksh ile kolayca mümkündür).

Yorumlardan bir şeyler eklemek için düzenleyin: "rm -i" her silme işlemi için aynı amacı gerçekleştirir. Teşekkürler!

1
David Thornley

Bash ile basit bir ağ yapabilirsiniz (buna kredi sayfa ve man bash):

cat < /dev/tcp/time.nist.gov/13

Evet, aynı anda okuma ve yazma da mümkündür.

1
kyku

Her şeyden önce, geliştirme kutunuzda denemeden önce internette gördüğünüz her şeyi anlayın.

1
DFectuoso

Arada sırada her ikisi de:

find . -exec ...
find . -print0 | xargs ...
for i in *.png; do ... done

dosyaların bir listesini işlemek için çalışır, çünkü birleştirme gücüne, NULL ayrılmış dosya adlarına ve düz Shell döngülerine ihtiyaç duyulur. Çözüm bu biraz bash kodu:

find . -print0 | while read -r -d $'\0' filename; do echo $filename; done

Bu NULL ayrılmış dosyaları normal bir döngüde işlemek için izin verir.

1
Grumbel

Shell-f , komut satırı ipuçlarını ve püf noktalarını depolamak, denetlemek ve yaymak için bir yerdir. Biraz StackOverflow gibi, sadece Shell için. Orada bu soruya birçok cevap bulacaksınız.

1

Başka bir numara:

Bir bash takma adı oluşturmak istediğimde, sadece kullanıcı bin klasörümde bir bash betiği oluşturuyorum.

Örneğin, aşağıdaki satırı .bashrc'ye eklemek yerine,

alias make-symlink='ln -s -iv'

Aşağıdaki komut dosyasını yaparım ve ~/bin/make-symlink olarak kaydederim

#!/bin/bash                                                                     
ln -s -iv "[email protected]"

, komut dosyası çalıştırılabilir hale getirildiğinde (chmod + x), yeni bir takma adım var gibi.

Şimdi make-symlink xargs içinde kullanılabilir. Ayrıca farklı bir Kabuk (ZSH, FISH, IPYTHON, ...) kullandığınızda, make-symlink de oradadır.

Emacs kullanıyorsanız, emacs init dosyanıza aşağıdakileri eklemek isteyebilirsiniz.

;; Make scripts executable on save                                              
(add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)
1
RamyenHead

'Tee' komutu, bir dosyaya çıktı verirken ve aynı anda ilerlemeyi görmek istediğinizde gerçekten kullanışlıdır. Bu özellikle çıktıyı bir dosyaya kaydederken ve dosya ilerledikçe izlemeniz gerektiğinde yararlıdır.

Gibi bir şey yapmak yerine:

./program > file &
tail -f file

Tee komutunu bir satırda kullanabilirsiniz:

./program | tee file
1
Jeff Billimek

Git sürüm kontrolünü şu şekilde buldum:

  • Çabuk
  • Kullanmak bir zevk
  • Neredeyse her boyuttaki projeler için kullanışlıdır (100K - 100GB; 1 - 100k dosyalar)

İşte nasıl yaparım:

# Create new repository
# (for now, it will live in .git/ - a single directory)
git init

# Commit all I got so far
git add .
git commit

# Add new or modified files manually
git add *.c
git status
git commit

# Add all modified files
git status
git commit -a

# Redo last commit
git commit -a --amend

# View log
git log

# Reset everything (files and git history) back to 
# what it was at 96223554b3e3b787270b1f216c19ae38e6f83ca5
git branch this-was-a-mistake
git reset --hard 9622

# Everything is back in time
ls
git log
1

Awk ile kolay toplamlar/ortalamalar/gruplama:

cat tests
ABC 50
DEF 70
XYZ 20
DEF 100
MNP 60
ABC 30

cat tests | awk '{sums[$1] += $2; tot += $2; qty++}\
   END { for (i in sums) 
     printf("%s %s\n", i, sums[i]); 
     printf("Total: %d\nAverage: %0.2f\n", tot, tot/qty)} ' 
MNP 60
ABC 80
XYZ 20
DEF 170
Total: 330
Average: 55.00
1
ggiroux

Bu komutlar yukarıdaki listede yok ... !!!

  1. bulmak. -adı .svn -tipi d | xargs rm -rf

    Tüm .svn klasörlerini kaldır

  2. bash -x script.sh

    satır yazdırın ve BASH'de çalıştırın

  3. Ctrl + [

    vim'deki [Esc] ile aynı

  4. shopt -s autocd

    Otomatik olarak dizine cd

  5. df -i

    Bir dosya sistemindeki geçerli boş/kullanılan düğüm sayısını görüntüleme

  6. Sudo !!

    Son komutu root olarak çalıştır

  7. python -m SimpleHTTPServer

    Geçerli dizin ağacına http: // $ HOSTNAME: 8000 /

  8. netstat -tlnp

    İlişkili işlemin PID'si ile birlikte tüm dinleme bağlantı noktalarını listeler

  9. İnput.txt dosyasını numaralandırmanın bazı yolları aşağıdadır:

    kedi -n

    $ cat -n input.txt 1 123 2 3456 4 5 789 6 7 8 abc 9 10 def 11 12 ghi

1
Jayakrishnan T
  • Tarama belgelerine sahip daha küçük dizin ağaçları için

    find .
    
  • Shell'den bir dosyayı boşaltmak için

    > file.txt
    
  • Giriş dizinime dönmek için

    cd
    
1
Dlf

Yaptığım her şeyi takip etmeyi seviyorum. Üniversitede öğrendiğim bir komut 'senaryo' idi. Bu, terminalinizdeki tüm çıktıları alır ve bir dosyaya kaydeder. Kolejde öğrendiğim her terminali bir senaryo haline getirmek. Şimdi bunu .login dosyamda var:

exec script ~/.TypeScript/`date +%Y%m%d%H%M%S`.$$

Bunu .login dosyanızın sonuna eklemeden önce ~/.TypeScript/öğesinin bulunduğundan emin olun. :)

1
toppledwagon

IMHO, * nix en önemli komut ... adam :)

İnsanın bilmesi gereken hemen hemen her şey insanda bulunabilir ve insanı kullanmak iş arkadaşlarımızı kesintiye uğratmamızı engeller. Ve kesintilerle uğraşmak en büyük endişelerimizden biridir ...

1
Marco Ramos

"X" karakterini ileriye doğru aramak için CTRL +] x ve geriye doğru arama için Meta, CTRL +] x. Çoğu sistemde Meta ESC veya ALT olabilir. ESC için, ESC tuşuna basıp bırakın, CTRL ve] tuşlarını birleştirin ve aramak için karaktere basın. ALT için CTRL + ALT +] tuşlarına aynı anda, ardından hedef karaktere basın.

Geçmiş komutunu düzenlerken faydalı buluyorum.

Çok uzun ve çok karmaşık komutlar için. Komut düzenlemek için vi (muhtemelen aslında vux üzerinde vim) açmak için fc kullanın.

0
zhaorufei

Çıkış Yönlendirme. Ek bir şey çalıştırdığınızda

daha sonra çıktı almak için. ekleme

> & hata_ve_log.text

for errors as well.

0
PaulHurleyuk

pushd ve popd geçici olarak farklı dizinlere geçmek için.

Yani

pushd ~/tmp

sizi bu dizine taşıyacaktır, ancak geçerli konumunuzu bir yığına itin (böylece yuvalanabilir).

Sonra

popd

önceki konuma dönmek için.

0
Unsliced

Bash için sekme tamamlama için satır içi modunu açın:

http://codesnippets.joyent.com/posts/show/169

0
bitshift

Yerel makinenizde uzak X uygulamasını açmak için şunları yapın:

ssh -X [email protected]
konsole

Bu, makinenizi grafik sunucusu olarak kullanan ancak uzak Ana Bilgisayarda çalışan grafik uygulamalarının hızla görüntülenmesine olanak tanır.

0
Maxim Veksler

Seçilen metni kopyala:

CTRL + SHIFT + C

... yapıştırın:

CTRL + SHIFT + V
0

Dosya tanımlayıcılarını kapatmak için bash'da: FD> & -

Stderr'ı kapatın:

$ function echostderr() { echo $1 >&2; }
$ echostderr "now you see me"
now you see me
$ echostderr "now you don't" 2>&-
$ 

Veya bir komut dosyasının içinde:

$ function echostderr() { exec 2>&-; echo $1 >&2; }
$ echostderr "now you don't"
$ 
0
aless

Birden çok dosyayı benzer bir şekilde yeniden adlandırmak için, aşağıdaki komut dosyasını yıllar içinde çok kullanışlı ve sağlam buldum.

ls çıktısını favori metin düzenleyicinize koyar. Sadece metni değiştirin, kaydedin, kapatın. Dosyalar yeniden adlandırılır.

Bunu Vi sütun düzenleme ile birleştirdiğinizde özellikle harikadır (Ctrl-v, bir blok seçin, önce eklemek için I veya sonra eklemek için A, metin yazın, Esc).

#!/usr/bin/Ruby

RM = '/bin/rm'
MV = '/bin/mv'

from = Dir.entries('.').sort; from.delete('.'); from.delete('..')
from.sort!

from.delete_if {|i| i =~ /^\./} # Hidden files

tmp = "/tmp/renamer.#{Time.now.to_i}.#{(Rand * 1000).to_i}"

File.open(tmp, 'w') do |f|
  from.each {|i| f.puts i}
end

ENV['EDITOR'] = 'vi' if ENV['EDITOR'].nil?
system("#{ENV['EDITOR']} #{tmp}")

to = File.open(tmp) {|f| f.readlines.collect{|l| l.chomp}}
`#{RM} #{tmp}`

if to.size != from.size
  STDERR.puts "renamer: ERROR: number of lines changed"
  exit(1)
end

from.each_with_index do |f, i|
  puts `#{MV} -v --interactive "#{f}" "#{to[i]}"` unless f == to[i]
end

Bu betiğe renamer diyorum.

0

İşte Linux Koleksiyonu, UNIX Kullanıcı Yönetimi Komutları http://www.linuxconfig.net/2009/11/16/linux-unix-user-management-commands.html

0
linuxconfig.net

Bir dosya sisteminin bir kısmını yeni bir sabit diske kopyalamak için

mkfs.ext4 /dev/sdb
mkdir /mnt/newhd
mount /dev/sdb /mnt/newhd/
rsync -av --hard-links --acls --one-file-system --xattrs /home/maxim/ /mnt/newhd/
echo '/dev/sdb /home/maxim ext4 defaults,user_xattr,noatime 0 1' >> /etc/fstab
0
Maxim Veksler

Meta +. önceki komutların son argümanında döngü için bash. Çeşitli kombinasyonlarda kuyruk ve grep çalıştırmak için harika.

0
Jeremy M

DAİMA herhangi bir komutu veya ardışık düzeni # (açıklama) ile başlatın ve komutu yazmayı bitirdiğinizde kaldırın. Rm -rf/like şeylerini tespit etmek için 2. bir şans verir.

0
user23312