728x90
! 입출력 리다이렉션과 파이프
- 표준 출력
- 표준 출력 : 결과를 모니터에 출력. 파일 디스크립터 숫자값으로 1로 표기
- > 문자를 사용해 표준 출력을 파일로 리다이렉션해 저장할 수 있음
- ls > ls.txt
- >> : 파일에 추가(append)할 경우 사용
- cat test1.txt >> ls.txt
- 만약 텍스트 파일의 내용을 모두 삭제하고 싶다면 /dev/null로 읽어서 파일로 리다이렉션
- cat /dev/null > lsls.txt
- 표준 입력 - 키보드 : 파일 디스크립터 숫자로 0
- 표준 출력 - 모니터 : 파일 디스크립터 숫자로 1
- 표준 에러 - 모니터 : 파일 디스크립터 숫자로 2
- 2>&1 : 표준 출력이 전달되는 곳으로 표준 에러를 전달하는데, 마지막에 &를 사용해 현재 명령을 백그라운드로 실행표준 입력
- 표준 입력 : 키보드로부터 데이터를 입력받는 것. 파일 디스크립터 숫자값으로 0
- 키보드를 대신해 파일로부터 입력을 받는 경우 < 문자를 사용
- sort < ls.txt
- sort < ls.txt > sorted_lx.txt : ls.txt 파일의 정렬 결과를 sorted_ls.txt 파일로 저장
- 파이프
- | 문자를 사용해 두 명령어를 이어줌. 앞에서 실행한 명령의 결과값을 뒤에 적은 명령어의 입력으로 사용
- 즉, 파이프로 연결된 하나의 표준 출력을 다른 명령의 표준 입력으로 사용
- ls -lt | head
- find . -type f -print | wc -l : 현재 디렉터리에서 있느 파일을 출력해 출력 라운의 수를 카운트한 다음 화면에 출력되도록 한 파이프 예제
- 필터
- 파이프에는 여러 필터를 사용할 수 있는데, 필터는 표준 입력을 받아서 이 필터로 연산을 한 다음, 그 결과를 표준 출력으로 보냄
- sort, uniq, grep, fmt, pr, head, tail, tr, sed, awk 등
- 퍼미션
- 리눅스와 같은 멀티태스킹, 멀티유저를 지원하는 UNIX 시스템에서는 파일 및 디렉터리에 대해 퍼미션이라는 접근 권한을 사용
- chmod : 파일, 디렉터리에 대한 접근 권한 변경
- read, write, execute 권한 지칭
- rwx 3자리 문자는 2진수로 표시해 2^n으로 인식
- rwx rwx rwx = 111 111 111 = 777
- rw- rw- rw- = 110 110 110 = 666
- rwx --- --- = 111 000 000 = 700
- 리눅스에서 touch 또는 vi을 사용해 파일을 생성하면 기본 퍼미션이 644(rw-r–r–)로 설정됨. 기본 퍼미션은 umsk로 설정되어 있는데, 이 설정은 /etc/bashrc에 설정되어 있음
- su : 일시적으로 수퍼유저 또는 다른 유저로 전환
- chown : 파일, 디렉터리의 소유자를 변경(change file owner and group)
- chown 명령은 슈퍼 유저만 사용 가능
- chown multi.multi perm.txt
- chown root:root perm.txt
- chgrp : 파일, 디렉터리의 그룹 소유자 변경
- chgrp multi perm.txt
- lsattr, chattr : 파일들에 대한 특정한 속성을 부여할 수 있음
- lsattr : 파일들의 속성을 출력
- chattr : 파일들의 속성을 변경. chattr +i [파일명] 제거의 경우엔 -를 사용
- i : i속성은 슈퍼유저라도 변경, 삭제 등의 어떤 조작도 불가능 (immutable)
- a : a속성은 내용 추가는 가능하지만 슈퍼 유저라도 파일 삭제는 불가능 (append only)
- 잡 컨트롤
- 리눅스 멀티 태스킹 : 여러 개의 프로세스를 동시에 사용하는 것
- 리눅스 커널은 동시에 실행되는 각 프로세서들을 관리할 수 있도록 구성되어 있으며, 프로세스 통제 및 관리할 수 있음
- ps : 시스템에서 실행되고 있는 프로세스 목록 보기
- kill : 프로세스에게 kill 시그널 보내기
- 시그널 : 비동기식 이벤트 처리 메커니즘을 제공하는 소프트웨어 인터럽트
- SIGHUP : hangup, 로그아웃 또는 접속을 종료할 때 발생하는 시그널로 특정 프로세스가 이용하는 설정 파일을 변경시키고 변화된 내용을 곧바로 적용하고자 할 때 사용
- SIGINT : interrupt, 현재 작동 중인 프로세스의 동작을 멈출 때 사용. <Ctrl+C>
- SIGQUIT :quit, SIGINT와 같이 사용자가 터미널에서 종료키를 누를 때 커널에 의해 보내짐. 비정상적으로 종료하게 되므로 코어 파일을 생성하고 종료
- SIGKILL : kill, 해당 프로세스의 실행을 강제로 중지. 가장 많이 사용되는 시그널
- SIGSEGV : segmentation violation, 메모리 접근이 잘못되었을 때, 즉 프로세스가 포인터를 잘못 사용하여 정해진 영역 이외의 메모리 영역을 침범했을 때 발생
- SIGTERM : terminate, 정상적인 종료 프로세스에 정의되어 있는 정상적인 종료 방법에 의해 프로세스를 종료
- 파이썬에서도 signal 신호를 받을 수 있음. 특정 신호가 발생하면 ~~을 수행해! 라고 설정 가능. 링크 참고
- kill -l : kill 명령으로 OS에게 보낼 수 있는 시그널
- kill %[번호] : jobs에 나타난 프로세스 제거
- kill [PID 번호] : ps명령으로 출력된 프로세스 제거
- 시그널 : 비동기식 이벤트 처리 메커니즘을 제공하는 소프트웨어 인터럽트
- jobs : 현재 쉘에서 자신의 프로세스 목록 보기
- bg : 프로세스를 백그라운드로 보내기
- fg : 프로세스를 포그라운드로 가져오기
728x90
'IT_Engineer > DevOps_Unix & Linux (Bash)' 카테고리의 다른 글
[Linux] 리눅스의 부팅 과정과 로그인 쉘 #1 (0) | 2020.11.19 |
---|---|
[Linux] 쉘과 명령어 기초 #4 (0) | 2020.11.18 |
[Linux] 쉘과 명령어 기초 #2 (0) | 2020.11.16 |
[Linux] 쉘과 명령어 기초 #1 (0) | 2020.11.13 |
[LINUX] About Linux (0) | 2020.11.12 |