쉘 (Shell)

tycode·2021년 4월 29일
0

C.S (Computer Science)

목록 보기
14/40
post-custom-banner

사용자와 컴퓨터 하드웨어 또는 운영체제간의 인터페이스

  • 사용자의 명령을 해석해서, 커널에 명령을 요청해주는 역할
  • 관련된 시스템콜을 사용해서 프로그래밍이 작성되어 있다

UNIX는 다중 사용자를 지원하는 시스템

sudo명령어

whoami: 로그인한 사용자 ID 알려줌
passwd: 로그인한 사용자 ID의 암호 변경

pwd: 현재 디렉토리가 위치가 나옴
아이디를 하나 만들면 home 디렉토리 안에 만들어진다.

useradd: 사용자 기본 설정 자동으로 하지 않음
adduser: 사용자 기본 설정을 자동으로 수행함
adduser kim:
일반 사용자가 시스템에 새로운 사용자의 권한을 준다?
다중 사용자 시스템에서 최고 권한자는 root다. 그래서 root라는 사용자로 해야 하는데,

dave2는 그냥 사용자 이름

sudo 명령어: root 권한으로 (잠깐 빌리 수 있는) 실행하기

  • root계정으로 로그인하지 않은 상태에서 root권한이 필요한 명령을 실행할 수 있도록 하는 프로그램
  • sudo를 쓰려면 해당 아이디가 sudo를 쓸 수 있도록 미리 설정이 되어야 한다.

su: 사용자 변경

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

.bashrc와 .profile 중점적으로 사용되는 환경설정 파일이다.

su root경우, 현재 사용자의 설정파일을 아이디만 바뀌는 셈이고
su - root는 해당 사용자의 홈 디렉토리로 가서 해당 사용자의 .bashrc .profile가서 설정을 재설정한다.

/etc/sudoers 설정 파일에서 다음과 같이 설정을 변경할 수 있음.
ㄴ이 설정 파일 안에 권한을 주려는 아이디를 넣어야함

  • visudo가 설치되어 있다면, 해당 명령을 통해 설정 파일이 오픈되어 바로 수정 가능

유저 권한 설정

w! 저장

tab을 누르면 해당 명령어 리스트가 나옴
예) cd s (tab)하면

shift+v, y 복사
p 붙여넣기

중간정리

  • 윈도우 같은 경우 파일을 삭제하면 휴지통에 들어가 듯, 그리고 휴지통에 가서 한 번 더 삭제해야 된다.
  • 리눅스에서는 휴지통 같은 인터페이스가 default로 제공되지 않는다. 그래서 설정을 변경/삭제할 경우 기존 내용이 사라져서 원상복구가 어렵다. 그래서 통상적으론 root라는 최고 관리자보단 아이디를 하나 만들어서 특정 아이디만 sudo명렁 또는 권한을 사용할 수 있도록 한다. 이런 방식으로 리눅스를 많이 사용한다.
  • 윈도우처럼 어떤 특정 파일만 관리자 권한으로 실행하는 것과 같다.

파일 관련 명령어

cd: 디렉토리 이동
cd ~ 본인 아이디의 홈 디렉토리로 이동
cd - 이동하기 전의 디렉토리로 이동

ls: 파일 목록 출력

. 현재 디렉토리
.. 상위 디렉토리 (상위 폴더)

ls와 와일드 카드

*는 임의 문자열
?는 문자 하나

참고: man 명령어 - 사용법 알아보기

manual이라는 의미. man rm을 입력력하면 메뉴얼이 나옴.
예) man ls

ls와 파일 권한

파일마다 소유자, 소유자 그룹, 모든 사용자에 대해
예) 1학년 1반의(그룹), 김철수(소유자)

  • 각각 읽고, 쓰고, 실행하는 권한 설정을 할 수 있고
  • 소유자 접근 권한 정보는 inode에 저장되어 있다

chmod: 파일 권한 변경

기호 문자를 사용하는 방법

예) chmod g+rx test.c
그룹 사용자에게 test.c라는 파일에 관해서 기존 권한에서 읽고(r) 쓰는(w) 권한을 추가해라

숫자를 사용하는 방법
예)

중요한 파일이니 mysecurity.pem에 대한 권한을 제한해 놓는다는 뜻.

  • 주로 사용하는 옵션:
    chmod -R 777 directory
    예) chmod 777 test.c
    디렉토리 안에 있는 모든 하위 파일들을 한번에 권한을 준다.

chown: 소유자 변경

  • chown [옵션][소유자:소유자그룹][파일]

    • root: (비어있음) 경우 소유자의 디폴트 그룹으로 설정되고
    • (비어있음): root 경우 그룹의 디폴트 사용자로 소유자가 설정됨
  • 주로 사용하는 옵션:

    • chown -R root:root directory
  • 참고: 소유자 그룹 변경

    • chgrp [옵션][그룹][파일]
    • 예) chgrp -R root directory

cat: 파일 보기

  • 해당 파일에 대한 내용 보고 싶을 때

    • cat mysql.cnf
  • head/tail: head는 파일 시작부분 10줄, tail은 끝 부분 10줄을 보여줌

    • head mysql.cnf
    • tail mysql.cnf
  • more: 한 화면이 넘어가기 전까지 파일 내용 출력됨

    • more mysql.cnf
      엔터치면 다음 내용 보여줌
  • rm: 파일 및 폴더 삭제 (remove의 약자)

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

기본적으로 리눅스에는 휴지통이 없기에 파일 지울 때 조심해야함.


리눅스 리다이렉션(redirection)과 파이프(pipe)

Standard Stream (표준 입출력)

  • command로 실행되는 프로세스는 세 가지 스트림을 가지고 있음

    • 표준 입력 스트림 (Standard Input Stream) - stdin
      ㄴ옵션,인자,파일 등 해당프로세스에 줄 수 있는 통로
      예) ls -al
    • 표준 출력 스트림 (Standard Output Stream) - stdout
      ㄴ화면에 출력되는
      예) -rw-rw---- ubuntu ubutnu ~~
    • 오류 출력 스트림 (Standard Error Stream) - stderr
  • 모든 스트림은 일반적인 plain text로 console에 출력하도록 되어 있음

리다이렉션 (redirection)

  • 표준 스트림 흐름을 바꿔줄 수 있다
    • > , < 을 사용함
    • 주로 명령어 표준 출력을 화면이 아닌 파일에 쓸 때

예) 꺽쇠 방향으로..
(1) ls > files.txt (꺽쇠가 가능하게 해줌)

  • ls로 출력되는 표준 출력 스트림의 방향을 files.txt로 바꿔줌
    (files.txt에 ls로 출력되는 결과가 저장됨)

(2) head < files.txt

  • files.txt의 파일 내용이 head라는 파일의 처음부터 10라인까지 출력해주는 명령으로 넣어짐
    (files.txt의 앞 10라인이 출력됨)

(3) head < files.txt > files2.txt

  • files.txt의 파일 내용이 head로 들어가서, files.txt의 앞 10라인을 출력
  • head의 출력 스트림은 다시 files2.txt로 들어감
  • head는 files.txt내용을 출력하지 않고, 해당 출력 내용이 다시 files2.txt에 저장됨
    (결과적으로 files.txt의 앞 10라인이 files2.txt에 저장됨)

(4) 기존 파일에 추가는 >> 또는 << 사용

  • ls >> files.txt
  • 기존에 있는 files.txt 파일 끝에, ls 출력 결과를 추가해줌 (덮어쓰기가 아닌 추가)

파이프 (pipe)

두 프로세스 사이에서 한 프로세스의 출력 스트림을 또 다른 프로세스의 입력 스트림으로 사용할 때 사용됨

예)
(1) ls | grep file

  • ls 명령을 통한 출력 내용이 grep 명령의 입력 스트림으로 들어감
  • grep files는 grep명령의 입력 스트림을 검색해서 file이라는 문구가 들어 있는 입력 내용만 출력해줌
  • 따라서, ls명령으로 해당 디렉토리 또는 파일명에 file이라는 문구가 있는지 출력해줌

참고: grep 명령어

grep: 검색 명령
- grep [-option] [pattern] [file or directory name]

예) issue 관련된 건 0개라는 결과가 나옴.

사용 예)
- grep python files.txt 👉 files.txt라는 파일에서 python라는 문구가 들어간 모든 행을 출력
- grep -n python files.txt 👉 files.txt라는 파일에서 python라는 문구가 들어간 모든 행을 라인까지 출력
- grep -r python foldername 👉 foldername라는 폴더내의 하위 폴더를 포함한 모든 파일 중 python라는 문구가 들어간 행을 출력
- grep -i python files.txt 👉 files.txt라는 파일에서 python라는 문구를 대,소문자 구분 없이 검색해서 출력
- grep -E "go|java|python"files.txt 👉 files.txt라는 파일에서 go, java, 또는 python이 있는 모든 행을 출력


프로세스 vs 바이너리

  • 코드 이미지 도는 바이너리: 실행파일
    ㄴ저장매체에 파일이 있고 메모리에 읽혀서 CPU에서 실행함
  • 실행 중인 프로그램: 프로세스
    • 가상 메모리 및 물리 메모리 정보 (상태 정보)
      ㄴ모든 실행파일이 물리메모리가 감당 못함, 그래서 가상메모리 사용. 그 중에 일부 필요한 것만 물리메모리에 올려서 실행함.
    • 시스템 리소스 관련 정보
    • 스케쥴링 단위
  • 리눅스는 기본적으로 다양한 프로세스가 실행되는 환경임.
    • 유닉스 철학: 여러 프로그램이 서로 유기적으로 각자의 일을 수행하면서 전체 시스템이 동작하도록 하는 모델

foreground process / background process

  • foreground process: 쉘(shell)에서 해당 프로세스 실행을 명령한 후, 해당 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못하는 프로세스
    (그런데 요즘엔 컴퓨터가 빨라서 왠만한 명령어는 바로됨)
  • background process: 사용자 입력과 상관없이 실행되는 프로세스
    (뒤에서 프로세스를 실행 시키는 방법 - alt+tab같은 느낌)
    • 쉘(shell)에서 해당 프로세스 실행 시, 맨 뒤에 & 를 붙여줌
    • 사용 예)
    • [1]은 작업 번호 (job number), 57은 pid(process ID)를 나타냄

foreground process 제어하기

단축키!

  • [CTRL] + z : foreground프로세스를 실행 중지 상태(suspend모드)로 변경
  • 맨 마지막 [CTRL] + z로 중지된 프로세스는 bg 명령으로 background프로세스로 실행될 수 있음 (예: bg 3 번호로 재실행 가능)
  • jobs 명령어 : 백그라운드 진행 또는 중지된 상태로 있는 프로세스를 보여줌

  • [CTRL] + c : 프로세스 작업 취소 (해당 프로세스는 완전히 종료된다)

    운영체제 소프트웨어 인터럽트가 해당 프로세스에 보내짐 - 그래서 프로세스 제어 가능함

프로세스 상태 확인 -ps 명령어

  • 사용법: ps [option(s)] 내가 실행한 프로세스가 뜸

  • option(s)

  • 데몬 프로세스(daemon proces): daemon은 악마를 의미함. 사용자 모르게 시스템 관리를 위해 실행되는 프로세스로 보통 시스템이 부팅될 때 자동 실행 (예: ftpd, inetd 등)

  • 주요 ps출력 정보 항목

참고: ps명령어 사이트

참고 사이트1
참고 사이트2

프로세스 중지시키기

  • kill 명령어
    • 사용법
      a. kill %작업 번호(job number)
      b. kill 프로세스 ID(pid)
      c. 작업 강제 종료 옵션 -9
      예)

주로 사용하는 프로세스 명령

  • ps aux | grep 프로세스명: 프로세스가 실행 중인지를 확인하고, 관련 프로세스에 대한 정보 출력
  • kill -9 프로세스 ID(pid): 해당 프로세스를 강제로 죽임
  • 명령 &: 터미널에서 다른 작업을 해야하거나, 프로세스 실행에 오랜 시간이 걸릴 경우 background로 실행
  • [CTRL] + z: 프로세스 중지
  • [CTRL] + c: 프로세스 종료(실행 취소)

가상 파일 시스템

  • 파일 네임스페이스
    • 전역 네임프세이스 사용
      • /media/floofy/kim.jpg
      • 예: cat tty
        ㄴtty ← 가상파일 시스템 인터페이스 (가상 터미널 환경/디바이스에 연결되어 있음) ← 키보드로 input

리눅스 파일 시스템 (ext file system)과 inode

리눅스는 ext 알고리즘으로 구현한 파일 시스템을 사용
예) 윈도우는 fat32

참고: 리눅스 파일 구조


하드 링크와 소프트 링크

  • cp명령: 파일 복사 (copy의 약자)
    • 1MB사이즈를 가지고 있는 A파일을 B파일로 복사
      • cp A B → A와 B는 각각 불리적으로 10MB파일로 저장
  • rm명령: 파일 삭제 (remove)
    • 위와 동일한 방법으로 사용

하드 링크와 inode

  • 하드 링크: ln A B

    • A와 B는 동일한 10MB파일을 가리킴

    • 즉, 동일한 파일을 가진 이름을 하나 더 만든 것일뿐

      • 그래서, inode는 동일
      • 전체 파일 용량은 달라지지 않음 (하드링크 사용하는 이유)
      • 파일A를 수정하면 하드 링크된 파일B에도 똑같이 수정됨
    • ls -i (파일 inode확인하기)

    • ls -al (완전 동일한 파일)

    • rm A로 A를 삭제하면? B는 그래도 해당 파일 접근 가능

      • 'A:해당 inode'이 정보만 삭제되고, inode를 가진 실제 파일은 그대로 남음

소프트 링크와 inode

ㄴredirected path 원본 파일에 대한 정보 가지고 있음

  • 소프트(심볼릭) 링크: ln -s A B
    • Windows OS의 바로가기와 동일 (본 파일 삭제되면 이용 못함)
    • ls -al하면, 소프트 링크 확인 가능
    • rm A로 A를 삭제하면? B는 해당 파일 접근 불가
    • 원본 파일과 소프트 링크된 파일은 inode값이 다름

하드 링크/ 소프트 링크 둘다 어느 하나 파일을 수정하면, 각 파일이름으로 동일한 내용 접근 가능

특수 파일

  • 디바이스
    • 블록 디바이스(Block Device) - 32byte/64byte(블록)
      :HDD, CD/DVD와 같이 블록 또는 섹터 등 정해진 단위로 데이터 전송, IO송수신 속도가 높음
    • 캐릭터 디바이스(Character Device)
      :키보드, 마우스등 byte 단위 데이터 전송, IO송수진 속도가 낮음
    • cd /dev, cat tty
post-custom-banner

0개의 댓글