쉘에서`|`기호의 의미는 무엇입니까?


16

명령 에서 |기호는 무엇을 의미 sudo ps -ef | grep processname합니까?

누구든지이 명령을 설명해 주시겠습니까? PID를 가져 와서 프로세스를 죽이는 데에만이 명령을 사용했지만 이전에 생성 된 PID를 죽이는 것과 같은 sudo ps -ef | grep processname | grep -v grep인상을 -v grep받았습니다 grep. 그렇다면 어떻게 작동합니까?


4
당신은 sudo실행할 필요가 없습니다 ps -ef. 또한 세 번째 명령을 피하는 일반적인 방법은 프로세스 이름의 문자를 대괄호로 묶는 것입니다.ps -ef | grep [p]rocessname
kos

1
@kos이 명령은 안정적으로 작동하려면 따옴표가 필요합니다.ps -ef | grep '[p]rocessname'
kasperd

2
@kos을 쓰면 grep [p]rocessname현재 디렉토리에서 이름을 가진 파일을 찾고 processname패턴을 해당 파일의 이름으로 대체하도록 쉘에 지시 합니다. 이름 processname이 지정된 파일이 없으면 , 쉘은 문자 그대로 grep에 패턴을 전달할 수 있습니다. 그러나 설정에 따라 다릅니다. 라는 이름의 파일이있는 경우 버전이 중단됩니다 그래서 processname존재하거나 다음 쉘 옵션 중 하나가 활성화 된 경우 failglob, nullglob, nocaseglob.
kasperd

1
@kasperd 나는 당신의 마지막 코멘트를 잘못 읽었습니다. 그렇습니다. 당신은 모든 것에 대해 정확합니다. 나는 그것을 고려하지 않았다.
kos December

1
나는 이것이 복제본이 아니라고 믿을 수 없다.
Mast

답변:


13
ps -ef | grep processname

먼저 실행 sudo ps -ef되고 두 번째 명령으로 출력을 전달합니다.

두 번째 명령은 "processname"이라는 단어가 포함 된 모든 줄을 필터링합니다.

ps -ef | grep processname | grep -v grep포함 processname하고 포함하지 않는 모든 행을 나열합니다 grep.

에 따르면 man grep

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

에 따르면 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.

당신은 매개 변수를 결합 할 수 있습니다 -ef와 동일합니다 -e -f.

실제로 ps -ef | grep processname라는 프로세스의 모든 발생을 나열하십시오 processname.


설명 주셔서 감사합니다, ps -ef정확히 무엇을합니까 ??
Aamir

| grep processName터미널에서 실행할 때 grep의 출력을 얻습니다. 그 자체는 프로세스이므로 -v는이 출력을 죽입니다.
Aamir

당신이 올바른지.
Pilot6

35

이라고 pipe합니다. 첫 번째 명령의 출력을 두 번째 명령의 입력으로 제공합니다.

귀하의 경우 다음을 의미합니다 :
의 결과 sudo ps -efgrep processname

sudo ps -ef:
실행중인 모든 프로세스가 나열됩니다. man ps더 많은 것을 위해 터미널을 입력 하십시오.

grep processname
따라서이 프로세스 목록은에 의해 정의 된 프로그램을 검색하는 grep에 제공됩니다 programname.

sudo ps -ef | grep firefox터미널에 입력하면 다음 을 반환합니다.

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

좋아, -v grep은 무엇을합니까?
Aamir December

좋은 설명은하지만 난 방법에 대한 몇 가지 도움이 필요하십니까 -v grep 기능을 ...
아미르

아, 왜 grep -v사용 되는지 봅니다 . 마지막 줄을 걸러냅니다.
Pilot6

@Aamir 내 대답을 참조하십시오. grep -v패턴을 포함하는 OUT 라인을 필터링합니다.
Pilot6

1
여러 파이프를 사용할 수 있다고 추가 할 수도 있습니다. 예를 들어 에코 "foobar"| grep foo | grep bar
Michael

7

나는 간단한 실용 답변으로 이것을 시도하고 대답 할 것입니다 :

파이프를 |사용하면 쉘에서 멋진 일을 할 수 있습니다! 가장 유용하고 강력한 것으로 생각하는 것은 하나의 단일 연산자입니다.

디렉토리의 파일 수는 어떻습니까? 단순한:

ls | wc -l출력을 ..redirect lswc재치 파라미터 -l라인

또는 파일에서 줄을 세는 것?

cat someFile | wc -l

무언가를 검색하려면 어떻게해야합니까? 'grep'은 문자열의 발생을 검색 할 수 있습니다.

cat someFile | grep aRandomStringYouWantToSearchFor

파이프 왼쪽 명령의 출력을 파이프 오른쪽 명령으로 리디렉션하면됩니다.

한 단계 더 : 파일에서 어떤 일이 얼마나 자주 발생합니까?

cat someFile | grep aRandomStringYouWantToSearchFor | wc -l

당신은 | 거의 모든 것을 위해 :)

fortune | cowsay

여기에 이미지 설명을 입력하십시오


2
예, 파이프는 재미 있고 +1이지만 예제를 변경하십시오 : UUOC .
kos December

처럼 : grep -c "aRandomStringYouWantToSearchFor" "someFile";-)
Sadi

ofc. 그러나 단순성을 위해 ...
소유자

1
솔직히 많은 예제에는 파이프가 필요하지 않습니다. 데모에 대해 들어 보셨습니까? 많은 명령이 파일을 직접 매개 변수로 사용하는 경우 cat 및 pipe를 사용합니다. 예 : cat someFile | grep aRandomStringYouWantToSearchFor grep aRandomStringYouWantToSearchFor someFile
Captain Lepton

얘들 아 .. 알아 주석을 읽으면 선장님, 내 대답을 읽었을 것입니다. 질문을 한 사람은 파이프의 실제 적용을 이해하지 못합니다. 그는 grep이 무엇인지조차 모릅니다. 내가 그에게이 예를 보여 주겠습니까? kill $(ps aux | awk '/someString/ { print $2}' | sed -n '1p') 아니요, 목적에 전혀 영향을 미치지 않습니다.
Gewure

4

PID를 가져 와서 해당 프로세스를 종료하는 경우에만이 명령을 사용했습니다

다른 답변이 이미 귀하의 주요 질문에 답변했지만이 문제도 해결하고 싶습니다.

일반적으로 살해 하는 과정은 지저분한 상태에서 주변의 프로세스에 의해 할당 된 과잉과 잎 자원, 당신은 종종 단지 수 자주 종료 를;

이 외에도 pkill프로세스를 종료 / 종료하는 데 사용하십시오 . pkill정확한 프로세스 이름 또는 정규식 지정을 지원합니다.

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
kill -9다른 신호가 작동 하지 않는다는 것을 구체적으로 알지 않는 한 사용 하지 마십시오 . iki.fi/era/unix/award.html#kill
tripleee

@tripleee OP는 프로세스 를 죽이고 싶다고 말했습니다 .
kos December

그게 뭐야 kill. 지정 -9은 추가적이며 가장 비참한 추가 옵션입니다.
tripleee December

@tripleee 나는 용어 ​​때문에 혼란이 일어나고 있다고 생각합니다. 나에게 SIGTERM이 아니라 SIGKILL을 죽인다 .
kos December

대부분의 사람들에게 "킬"은 kill단순하고 단순함 을 의미 합니다. 어떤 용어도 제쳐두고, 당신의 대답은 -9당신이 고기에주의를 기울이지 않는 한 사람들에게 옵션 을 사용하도록 조언해서는 안됩니다 .
tripleee December
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.