본문 바로가기
Computer Science

시스템 프로그래밍 - 쉘 사용법

by 개발자 데이빗 2022. 1. 6.

  • 사용자와 컴퓨터 하드웨어 또는 운영체제간 인터페이스
    • 사용자의 명령을 해석해서 커널에 명령을 요청
    • 관련된 시스템콜을 사용해서 프로그래밍이 작성되어 있다.

쉘 종류

  • Bourne-Again Shell(bash): GNU 프로젝트의 일환으로 개발됨, 리눅스 디폴트
  • Bourne Shell (sh)
  • C Shell
  • Korn Shell (ksh): 유닉스에서 가장 많이 사용됨

 

다중 사용자 관련 명령어

whoami

로그인한 사용자 ID를 알려줌

$ whoami

ubuntu

 

passwd

로그인한 사용자 ID의 암호 변경

$ passwd

(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

 

useradd와 adduser

  • useradd는 사용자 기본 설정을 자동으로 하지 않는다.
  • adduser는 사용자 기본 설정을 자동으로 수행한다.
$ adduser david

 

su

사용자 변경

  • 보통 su -와 함께 사용
    • su root: 현재 사용자의 환경설정 기반 root로 변경
    • su -root 변경되는 사용자의 환경설정 기반으로 root로 변경

 

파일 및 권한 관련 명령어

sudo 명령어

  • root 계정으로 로그인 하지 않은 상태에서 root 권한이 필요한 명령어를 실행할때 사용
    • /etc/sudoers 설정 파일에서 다음과 같이 설정을 변경할 수 있음
    • visudo가 설치되어 있다면 해당 명령을 통해 설정 파일이 오픈되어 바로 수정 가능

 

$ sudo vi sudoers

#특정 사용자가 sudo를 사용할 수 있도록 설정
# User privilege specification
root    ALL=(ALL:ALL) ALL
david   ALL=(ALL:ALL) ALL

#패스워드 생략 설정
david   ALL=(ALL:ALL) NOPASSWORD: ALL

 

pwd

현재 디렉토리 위치

$ pwd

/home/ubuntu

 

cd

디렉토리 이동하는 명령어

# 홈 디렉토리로
$ cd ~

# 바로 전 디렉토리로
$ cd -

 

ls (dir)

파일 목록 출력

# 숨김 파일까지 모두 출력
$ ls -al

# 와일드 카드: * 는 임의 문자열, ? 는 문자 하나
$ ls host* 
$ ls host?

 

man

명령에 대한 옵션들

$ mas ls

 

ls와 파일 권한

  • 파일마다 소유자, 소유자 그룹, 모든 사용자에 대해
    • 읽고, 쓰고, 실행하는 권한 설정
    • 소유자 접근 권한 정보는 inode에 저장
    • 이 디렉토리가 파일(-)인지 디렉토리(d)인지 구분
    • 첫 세칸: 소유자의 권한
    • 2번째 세칸: 그룹의 권한
    • 3번째 세칸: 기타 사용자의 권한
권한 대표문자 파일일 때 폴더일 때
읽기 r 읽고 카피 ls 명령어 가능
쓰기 w 수정 파일 생성 가능
실행 x 실행 cd 접근 가능
$ ls debi* -al

-rw-r--r-- 1 root root 11 Jun 25  2017 debian_version

 

chmod

파일 권한 변경

  • 기호 문자 사용 방법
누구에게 줄것인지 무슨 권한
u: 사용자 + 더하기 r
g: 그룹 - 빼기 w
o: 기타 = 설정 x
a: 기타    
$ chmod g+rx test.c
$ chmod u=rwx,g=rx test.c
  • 숫자 사용 방법
    • 소유자, 그룹, 기타 순서
    • rwx = 7, r-x = 5, r = 4
rwxrwxrwx = 777
r-xr-xr-x = 555
r-------- = 400
rwx------ = 700

$ chmod 400 dabinkey.pem

주로 사용하는 옵션

  • -R: 하위 디렉토리 모두 변경
$ chmod -R 777 directory

 

chown 

소유자 변경

  • chown [옵션][소유자:소유그룹][파일]
  • chgrp: 소유자 그룹 변경
$ chown root:root file

 

cat

파일 내용 보기

  • head/tail: 앞 또는 뒷 내용만 보기 (default는 10줄)
  • more: 전체 내용보기 (space-다음페이지, enter-다음 한줄)
$ cat .bashrc

$ head .bashrc

$ tail .bashrc

$ more .bashrc

 

rm

파일 및 폴더 삭제

  • 주로 사용하는 명령어 형태: rm-rf 디렉토리
  • r: 하위 디렉토리를 포함한 모든 파일 삭제
  • f: 강제로 파일이나 디렉토리 삭제
$ rm test.c

 

리다이렉션과 파이프

Standard Stream (표준 입출력)

  • command로 실행되는 프로세스는 세가지 스트림을 가지고 있다.
    • 표준 입력 스트림 (Standard Input Stream) - stdin
    • 표준 출력 스트림 (Standard Output Stream) - stdout
    • 오류 출력 스트림 (Standard Error Stream) - stderr
  • 모든 스트림은 일반적인 plain text로 console에 출력하도록 되어 있음

 

리다이렉션 (redirection)

  • 표준 스트림 흐름을 바꿔줄 수 있다.
    • <, >를 사용함으로 명령어 표준 출력을 화면이 아닌 파일에 쓸 때
    • >> 또는 <<를 사용함으로 기존 파일 끝에 결과를 추가해줌
$ ls -al > filelist.txt

$ ls -al >> filelist.txt

 

파이프 (pipe)

  • 두 프로세스 사이에서 한 프로세스의 출력 스트림을 또 다른 프로세스의 입력 스트림으로 사용할 때 사용됨
    • 첫번째 프로세스 | 두번째 프로세스
    • 첫 번째 프로세스의 출력 스트림이 두번째 프로세스의 입력 스트림으로 사용된다.
    • ls 의 출력 내용을 grep issue의 입력 내용으로 사용 -> ls 출력 내용중 issue가 포함된 파일 또는 디렉토리를 출력
$ ls | grep issue

grep: 검색 명령

  • grep [-option][pattern][file or directory]
    • -i : 영문의 대소문자를 구별하지 않는다.
    • -v : pattern을 포함하지 않는 라인을 출력한다.
    • -n : 검색 결과의 각 행의 선두에 행 번호를 넣는다.
    • -l : 파일명만 출력한다.
    • -c : 패턴과 일치하는 라인의 개수만 출력한다.
    • -r : 하위 디렉토리까지 검색한다.
grep -c issue etc

 

 

프로세스 관련 명령어

프로세스 vs 바이너리

  • 코드 이미지 또는 바이너리: 실행파일
  • 실행중인 프로그램: 프로세스
    • 가상 메모리 및 물리 메모리 정보
    • 프로세스 상태 정보
    • 시스템 리소스 관련 정보
    • 스케줄링 단위

 

foreground process/ background process

 

foreground process

  • 실행한 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못하는 프로세스
  • CTRL + Z: foreground 프로세스를 실행 중지 상태(suspend)로 변경
  • jobs: 백그라운드 job들을 출력
  • bg: 가장 최근에 Stopped 된 job을 백그라운드 프로세스로 실행
  • bg 2: 2번 job을 백그라운드 프로세스로 실행
  • CTRL + C: 프로세스를 아예 종료함 (Stopped와 다름)

background process

  • 사용자 입력과 상관없이 실행되는 프로세스
    • 쉘에서 해당 프로세스 실행시 맨 뒤에 &을 붙여줌
    • 사용 예
    • $ find / -name '*.py' > list.txt &
      [1] 57
      
      #1 - job number, 57 - pid

ps [option(s)]

  • 프로세스 상태 확인
  • -a: 시스템을 사용하는 모든 사용자의 프로세스 출력
  • -u: 프로세스 소유자에 대한 상세 정보 출력
  • -l: 프로세스 관련 상세 정보 출력
  • -x: 터미널에 로그인한 후 실행한 프로세스가 아닌 프로세스들도 출력
    • 주로 데몬 프로세스까지 확인하기 위해 사용
    • 본래 ps 명령은 현재 쉘에서 실행한 프로세스들만 보여주기 때문에 이 옵션을 자주 사용한다.
  • -e: 해당 프로세스와 관련된 환경 변수 정보도 함께 출력
  • -f: 프로세스간 관계 정보도 출력

보통 aux가 함께 사용된다

ex) ps -aux

 

주요 ps 출력 항목

  • USER: 프로세스를 실행시킨 사용자 ID
  • PID: 프로세스 ID
  • %CPU: 마지막 1분동안 프로세스가 사용한 CPU시간의 백분율
  • %MEM: 마지막 1분동안 프로세스가 사용한 메모리 백분율
  • VSZ: 프로세스가 사용하는 가상 메모리 크기
  • RSS: 프로세스에서 사용하는 실제 메모르 크기
  • STAT: 프로세스 상태
  • START: 프로세스가 시작된 시간
  • TIME: 현재까지 사용된 CPU 시간(분:초)
  • COMMAND: 명령어

 

데몬 프로세스

사용자 모르게 시스템 관리를 위해 실행되는 프로세스로 보통 시스템이 부팅될 때 자동으로 실행된다.

 

kill 

  • 프로세스 중지 명령어
  • kill %작업번호(job number)
  • kill pid
  • kill -9 pid 
  • -9는 작업 강제 종료 옵션

 

파일 시스템 관련 명령어

cp (copy)

  • 파일, 디렉토리 복사 명령어
  • -rf: 디렉토리를 복사할때 내부 파일까지도 모두 함께 복사하는 옵션

rm (remove)

  • 삭제 명령어
  • -rf: 내부 파일까지 모두 삭제하는 옵션

ln (엘엔)

  • 하드링크
  • In [fileNameA] [fileNameB]
  • A와 B는 동일한 동일한 내용을 갖는다
  • 카피랑 다르게 동일한 파일을 가진 다른 이름의 파일을 만든 것
  • 그러므로 동일한 inode를 가진다.
  • rm으로 orginal link(원본파일)을 삭제하여도 하드링크된 파일은 접근이 가능하다.

ln -s

  • 소프트 링크
  • windows의 바로가기와 동일
  • 가리키는 inode 값이 다르다.
  • inode 구조에 원본 inode를 가리키는 주소가 있다.
  • ls -al 명령어 사용시 권한 정보 가장 앞에 l이 붙는다 (link)
  • 하드링크와 마찬가지로 원본파일이 바뀌면 링크된 파일도 바뀐다.
  • rm으로 원본파일을 삭제하는 경우 링크된 파일 접근이 불가능하다

'Computer Science' 카테고리의 다른 글

시스템 프로그래밍 - 프로세스 관리  (0) 2022.01.10
시스템 프로그래밍 핵심 기술  (0) 2022.01.09
시스템 프로그래밍 - 리눅스  (0) 2022.01.03
파일 시스템  (0) 2022.01.03
가상 메모리  (0) 2022.01.01

댓글