Kabuktaki `| 'sembolünün anlamı nedir?


16

|Sembol sudo ps -ef | grep processnamekomutta ne anlama geliyor ?

Ayrıca lütfen herkes bu komutu açıklayabilir mi? Bu komutu sadece PID'yi almak ve bu işlemi öldürmek için kullandım, ama aynı zamanda gördüm sudo ps -ef | grep processname | grep -v grepve -v grepönceki oluşturulan PID'yi öldürmek gibi bir izlenim altındayım grep. Eğer öyleyse nasıl çalışır?


4
Buna gerek yok sudoçalıştırmak için ps -ef. Ayrıca üçüncü komuttan kaçınmak için yaygın bir hile, işlemin adının bir karakterini köşeli parantez içine ps -ef | grep [p]rocessname
almaktır

1
@kos Bu komutun güvenilir şekilde çalışması için tırnak işaretleri gerekiyor:ps -ef | grep '[p]rocessname'
kasperd

2
@kos Eğer yazarsanız grep [p]rocessname, kabuğa geçerli dizinde adıyla bir dosya aramasını processnameve kalıbı bu dosyanın adıyla değiştirmesini söylersiniz . Adında bir dosya processnameyoksa, kabuk deseni tam anlamıyla grep'e iletebilir. Ancak bu ayarlarınıza bağlıdır. Adlı bir dosya varsa Sürüm kıracak Yani processnamemevcut veya aşağıdaki kabuk seçeneklerinden herhangi birinin etkin olup olmadığını failglob, nullglob, nocaseglob.
kasperd

1
@kasperd Son yorumunuzu yanlış okudum, evet, her şey hakkında haklısınız. Ben bunu düşünmedim.
kos

1
Bunun bir kopya olmadığına inanamıyorum.
Mast

Yanıtlar:


13
ps -ef | grep processname

İlk önce sudo ps -efçıkışı çalıştırır ve ikinci komuta iletir.

İkinci komut "processname" kelimesini içeren tüm satırları filtreler.

ps -ef | grep processname | grep -v grepiçeren processnameve içermeyen tüm satırları listeler grep.

Göre man grep

-v, --invert-match
              Invert the sense of matching, to select non-matching lines.  (-v
              is specified by POSIX.)

Göre man ps

ps displays information about a selection of the active processes.

-e     Select all processes.  Identical to -A.

-f     Do full-format listing. This option can be combined with many
          other UNIX-style options to add additional columns.  It also
          causes the command arguments to be printed.  When used with -L,
          the NLWP (number of threads) and LWP (thread ID) columns will be
          added.  See the c option, the format keyword args, and the
          format keyword comm.

Parametreleri -efaynı şekilde birleştirebilirsiniz -e -f.

Aslında ps -ef | grep processnameçağrılan sürecin tüm oluşumlarını listeler processname.


açıklama için teşekkürler ps -ef, tam olarak ne yapar ??
Aamir

Ben | grep processNameterminalde çalıştırmak zaman biz de kendisi bir süreç yani -v bu çıktı öldürür grep çıktı almak
Aamir

Haklısın.
Pilot6

35

Denir pipe. İlk komutun çıkışını ikinci komutun girişi olarak verir.

Sizin durumunuzda şu anlama gelir:
sonucu sudo ps -ef,grep processname

sudo ps -ef:
Bu, çalışan tüm işlemleri listeler. Tip man psfazlası için termial içinde.

grep processname
Yani, bu süreç listesi sadece tarafından tanımlanan programı arayan grep'e beslenir programname.

Misal

sudo ps -ef | grep firefoxTerminalimi yazarak şunu döndürür:

parto     6501  3081 30 09:12 ?        01:52:11 /usr/lib/firefox/firefox
parto     8295  3081  4 15:14 ?        00:00:00 /usr/bin/python3 /usr/share/unity-scopes/scope-runner-dbus.py -s web/firefoxbookmarks.scope
parto     8360  8139  0 15:14 pts/24   00:00:00 grep --color=auto firefox

tamam, ne -v grep, ne işe yarar.
Aamir

iyi bir açıklama ama nasıl -v grep fonksiyonları hakkında biraz yardıma ihtiyacım var ..
Aamir

Oh, neden grep -vkullanıldığını anlıyorum . Son satırı filtrelemek için.
Pilot6

@Aamir Cevabımı görün. grep -vdesen içeren OUT satırlarını filtreler.
Pilot6

1
Ayrıca, birden fazla boru kullanabileceğinizi de ekleyebilirsiniz. Örneğin yankı "foobar" | grep foo | grep bar
Michael

7

Bunu basit bir pratik cevapla cevaplamaya çalışacağım:

Boru |, kabukta harika şeyler yapmanıza izin verir! En yararlı ve güçlü olduğunu düşündüğüm tek bir operatör.

bir dizindeki dosyaları saymaya ne dersiniz? basit:

ls | wc -l.. satırlar lsiçin wcwit parametresinin çıktısını yeniden yönlendir-l

veya bir dosyadaki satırların sayımı?

cat someFile | wc -l

bir şey aramak istersem ne olur? 'grep' dizelerin oluşumlarını arayabilir:

cat someFile | grep aRandomStringYouWantToSearchFor

sadece Pipo'nun sol komutunun çıkışını borunun sağ komutuna yönlendirirsiniz.

bir seviye daha: bir dosyada ne sıklıkta bir şey oluyor?

cat someFile | grep aRandomStringYouWantToSearchFor | wc -l

kullanabilirsiniz | neredeyse her şey için :)

fortune | cowsay

resim açıklamasını buraya girin


2
Evet, borular eğlenceli, +1, ancak lütfen örnekleri değiştirin: UUOC .
kos

Gibi: grep -c "aRandomStringYouWantToSearchFor" "someFile";-)
Sadi

ofc. ama basitlik amacıyla ... soru sahibi
grep'te

1
Açıkçası örneklerinizin çoğunun boruya ihtiyacı yoktur. Demografiyi duydunuz mu? Komutların çoğu dosyaları doğrudan parametre olarak alacağı zaman cat ve pipe kullanıyorsunuz: örneğin cat someFile | grep aRandomStringYouWantToSearchFor, grep aRandomStringYouWantToSearchFor someFile için olmalıdır
Captain Lepton

beyler .. biliyorum. yorumları okursanız, Kaptan, cevabımı okurdunuz. Soruları soran adam borunun GERÇEK uygulamalarını anlamayacak - grep'in ne olduğunu bile bilmiyor. ona bu örneği vereyim mi? kill $(ps aux | awk '/someString/ { print $2}' | sed -n '1p') Hayır, çünkü amaca hiç hizmet etmeyecekti.
Gewure

4

Bu komutu yalnızca PID'yi almak ve bu işlemi öldürmek için kullandım

Diğer yanıtlar zaten ana sorunuza cevap verdi, ancak ben de bunu ele almak istiyorum;

Genelde bir süreci öldürmek genellikle aşırıya kaçar ve dağınık bir durumda bir süreç tarafından tahsis edilen kaynakları bırakır, genellikle sadece sonlandırabilirsiniz ;

Bunun yanında, sadece pkillbir işlemi öldürmek / sonlandırmak için kullanın . pkillkesin bir işlem adı veya normal bir ifade belirtmeyi destekler:

pkill -x foo # Terminates process foo
pkill ^foo$ # Terminates process foo
pkill -9 -x foo # Kills process foo
pkill -9 ^foo$ # Kills process foo

1
Başka kill -9hiçbir sinyalin işe yaramayacağını bilmediğiniz sürece kullanmayın . Ayrıca bkz. İki.fi
era/

@tripleee OP süreci öldürmek istediklerini söyledi .
kos

İşte killböyle. Belirleme -9ek ve çoğu zaman felaketli bir ekstra seçenektir.
tripleee

@tripleee Ben terminoloji nedeniyle karışıklık doğuyor inanıyorum; benim için öldür = SIGKILL, SIGTERM değil.
kos

Çoğu insan için, "öldür" killün basit, basit ve basit olmasını beklerdim . Herhangi bir terminoloji bir yana, cevabınızı -9etli bir uyarı yapmadıkça insanlara seçeneği kullanmalarını tavsiye etmemelidir .
tripleee
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.