Linux

Linux 3주차 과제 1 : 명령어 실습

kchabin 2022. 5. 6. 18:47

ps [옵션] : 현재 실행 중인 프로세스 정보를 출력한다. 프로세스 확인 및 관리를 위해 사용한다. 

 

-e : 시스템에 있는 모든 프로세스 출력

-f : 프로세스에 대한 자세한 식별 정보 출력

-u UID : 특정 사용자에 대한 모든 프로세스 출력

-o 항목 : 특정 프로세스 정보 항목에 대한 프로세스 정보 출력 ex) ps -o uid, ps -o pid

-p PID : 특정 프로세스 ID에 대한 프로세스 정보 출력

-ef : 프로세스의 식별 정보를 중점적으로 모든 프로세스 출력

 

ef 옵션은 굉장히 길게 출력이 되기 때문에 more을 사용해서 페이지 단위로 출력했다.

pgrep [옵션] 패턴

pgrep [옵션] 패턴 : 특정 프로세스 이름으로 찾아 정보 출력 = ps [옵션] | grep 패턴

 

pgrep은 특정 프로세스만 리스트로 출력하는 명령어이다. 

-x : 입력해준 패턴 sw와 정확히 일치하는 프로세스 정보가 출력된다.

-n : sw 패턴을 포함하고 있는 가장 최근의 프로세스 정보 출력 => 233

 

옵션 사용 시, 여러 개의 옵션을 붙여서 혹은 따로 사용 가능하다.

 

/*번외

-c : 조건에 맞는 프로세스 수를 출력한다. 

이건 피피티에는 없던 내용인데, 공부하다 보니까 알아두면 재밌을 것 같아서 해봤다. 

옵션 없이 pgrep sw를 했을 때 숫자 세개가 나오는데, -c를 붙여서 출력하면 3이 나온다.

 

-l : PID와 함께 일치하는 프로세스 이름 출력

옵션을 -lu로 했더니 -u만 입력했을 때 나오던 숫자 옆에 프로세스 이름이 함께 출력된다.

 

-u UID : 특정 사용자의 모든 프로세스 출력 

사용자 이름 kchabind으로 입력해서 모든 프로세스가 출력되도록 했다.

 

-t term : 특정 단말기와 관련된 프로세스 정보 출력, 특정 터미널에 실행 중인 프로세스의 PID 출력

term이 대체 뭘까 열심히 찾아보니까 terminal이었다. 이 옵션은 프로세스 중에 TTY 값이 일치하는 PID 목록만 출력한다.

-o는 일치하는 프로세스 중 가장 오래된 PID를 출력한다. -n과 반대.

 

시그널 : 특정 이벤트가 발생했을 때 신호를 보내서 알려주는 것, 프로세스에게 보내는 신호. 시그널을 수신하면 지정된 동작을 수행한다. 

 

<기본 응답이 종료인 시그널들>

 

1 SIGHUP : hang up의 약어. 로그아웃과 같이 터미널에서 접속이 끊겼을 떄 보내지는 시그널.

2 SIGINT : 키보드로부터 오는 실행 중지 시그널. 보통 Ctrl-C에 의해 발생한다.

9 SIGKILL : 무조건 종료. 프로세스를 강제로 종료시킨다. sigterm과 달리 무시할 수 없다.

15 SIGTERM : terminate의 약자. 정상 종료 시키는 시그널, 무시할 수도 있다. kill 명령의 기본 시그널.

 

프로세스 종료 

-사용자의 프로세스만 종료시킬 수 있다. 

-관리자는 모든 프로세스를 종료시킬 수 있다.

*jobs 명령어 

jobs [옵션] [작업번호] / 작업 목록을 출력해준다. 작업 번호 미지정시 백그라운드 작업을 모두 출력한다.

 

항목 출력 예시 의미
작업 번호 [1] [2] [3] .... 백그라운드 실행 시마다 순차적 증가
작업 순서 +, - + : 가장 최근에 접근한 작업
- : + 작업 바로 전 접근
공백 :  그 외
상태 running -작업 상태를 표시한다. 
running : 실행 중
done : 정상적 작업 종료
terminated :  비정상적 작업 종료
stopped : 작업 일시 중단
명령 sleep 100& 백그라운드로 실행 중인 명령

포그라운드(fore-ground) 처리 :  사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 다른 명령을 입력할 수 없는 처리 방법. 보통의 처리 방법.

Ctrl-C를 눌러서 종료.

 

백그라운드(back-ground) 처리 : 입력한 명령이 실행되는 동안 결과가 출력될 때까지 기다림없이 또 다른 명령을 입력할 수 있다. 명령어 뒤에 &를 붙여야한다. 보통 명령 실행 시간이 길거나 실행 중 다른 작업을 해야할 때 사용한다.

 

작업 전환 및 종료

Ctrl-Z : 작업 일시 중지

bg %[작업번호] : 백그라운드 작업으로 전환

fg %[작업번호] : 포그라운드 작업으로 전환

kill %[작업번호] : 해당 작업을 종료

 

pkill 실습 화면

pkill [시그널] 프로세스명

 프로세스의 명령이름으로 프로세스를 찾아 지정한 시그널을 보낸다.

 

 

<쉘 스크립트 프로그래밍>

 

: 사용자의 명령을 처리하고, 사용자와 운영체제 사이에서 중간자 역할을 한다.

쉘 스크립트

-명령어들을 모아놓은 텍스트 파일

-쉘이 쉘 스크립트 파일을 해석하여 한 줄 씩 실행한다.

 

1) bash kali.sh

2) ./kali.sh  => ./파일명

vi 편집기를 이용해서 kali.sh 스크립트 파일을 만들고 bash kali.sh로 실행시켰다. 

chmod로 모든 사용자에게 실행권한을 주도록 했더니 kali.sh의 파일 권한이 변경된 것을 볼 수 있다.

자꾸 왜 bash kali.sh를 할 때 명령어를 찾을 수 없다는 말이 나올까 이상해서 찾아보니 vi 편집기에서 스크립트를 작성해야하는 거였다. 다시 해보니까 제대로 Hello World가 출력됐다.

 

/etc/shells에는 사용 가능한 쉘 정보가 담겨있다.

쉘 변수 

1) 전역변수(환경변수) 

-모든 쉘에서 사용 가능.

-변수명 앞에 export 명령어를 붙여 선언한다.

 

*환경변수 예시

변수명 의미
$user 사용자 이름
$term 터미널 타입
$path 명령어를 검색할 디렉토리 리스트

2) 지역변수 : 현재의 쉘에서만 사용 가능

*공백 = 구분문자

변수 선언 시 앞 뒤에 공백이 있어서는 안된다. 

위 사진과 같은 경우 =과 " 사이에 공백이 있으므로 오류가 난다.

공백을 없애니까 제대로 출력된다.

큰 따옴표 " " : 공백을 보존한다. 

위 이미지를 보면 알 수 있듯이 sleeping mandu를 큰 따옴표 없이 입력하면 공백이 몇 자가 되든간에 출력은 항상 sleeping mandu 이다. 큰 따옴표 안에선 공백이 보존돼서 출력도 공백을 무시하지 않는다.

 

작은 따옴표 ' ' : $의 의미를 제거한다.

a를 변수로 선언했지만, '$a'라고 하면 $a가 그대로 출력된다. 

작은 따옴표 없이 $a라고 입력해야 1204가 출력된다. "$a"도 변수 값이 출력된다.

역따옴표 ` `: 실행 결과를 나타낸다. 소괄호로 감싸는 것과 같은 역할을 한다.

 

매개변수 

$0 : 쉘 스크립트 이름

$1, $2, $3, ..... : 매개변수 1, 2, 3,..

$# : 입력된 매개변수 들의 수

$* : 입력된 매개변수들의 목록

 

예제 실습

 

 

컬러 쉘 스크립트를 만들었다. 

 

 

 

 

read [옵션] 변수명 : 표준 입력으로 문자열을 입력받는다. C언어의 scanf 함수를 생각하면 될듯.

-p : 출력과 입력을 한 행에서 처리한다.

read -p는 한 행에서 입출력을 다 처리한다.

자동입력 처리

명령 << END

입력 내용

END 

END = 입력 종료 문자

END가 입력될 때까지 키보드 입력을 받아들인다.

 

case문, until문 예제 실습.

 

함수 호출 예제 실습

매개변수 세 개를 파일 실행 시 옆에 써줘야 한다.

 

비교 연산자

-산술 비교 연산자

연산자 의미
A -eq B
equal
A, B 같으면 참
A -ne B
not equal
A, B 다르면 참 
A -gt B
greater than
A가 B보다 크면 참
A -ge B
greater than or equal to
A가 B보다 크거나 같으면 참
A -lt B
less than
A가 B보다 작으면 참
A -le B
less than or equal to
A가 B보다 작거나 같으면

 

-문자열 비교 연산자

연산자 의미
문자열 A = 문자열 B 두 문자열이 같으면 참
문자열 A != 문자열 B 두 문자열이 다르면 참
-n 문자열 문자열이 null이 아니면 참
-z 문자열 문자열이 null이면 참

 

-파일 관련 연산자

연산자 의미
-e 파일명 파일이 존재하면 참
-d 파일명 파일이 디렉토리면 참
-f 파일명 파일이 일반 파일이면 참
-r 파일명 파일이 읽기 가능이면 참
-w 파일명 파일이 쓰기 가능이면 참
-x 파일명 파일이 실행 가능이면 참

'Linux' 카테고리의 다른 글

Linux 3주차 과제 2  (0) 2022.05.10
Linux 3주차 스터디 과제 3  (0) 2022.05.08
Linux study 2주차 실습 4  (0) 2022.04.01
Linux study 2주차 Pipe 실습  (0) 2022.04.01
Linux study 2주차 : cmp, diff, sort, split, paste  (0) 2022.04.01