[Linux] 쉘과 명령어 기초 #3

IT_Engineer/Unix & Linux (Bash)|2020. 11. 17. 09:00
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

댓글()