Unix & Linux

리눅스 쉘 과 명령어 기본

LEEHANDS 2021. 4. 26. 07:56
반응형

1. 쉘(Shell)

운영체제에서 제공하는 명령을 실행하는 프로그램,

운영체제의 관리하에 있는 파일, 프린팅, 하드웨어 장치, 애플리케이션과의 인터페이스를 제공한다

즉, 운영 체제에서 제공하는 각종 명령들을 쉘 인터페이스에서 실행하면 운영체제가 그 명령에 해당하는 일을 수행

 

2.쉘 스크립트

인터프리터로서 리눅스 시스템에서 지원하는 명령어들의 집합을 묶어서 프로그램화한

 

3. 리눅스 파일 시스템

리눅스에서 최상위(root) 디렉터리는 /로 표시하고 그 하위에 /root, /usr, /etc, /boot, /tmp 등으로 구분하며, 각 디렉터리들은 파티션으로 구성될 수 있음. 하나의 파티션이 하나의 디렉터리가 될 수 있음

파티션을 디렉터리에 매칭시키기 위해서 mount라는 개념을 사용

/dev 디렉터리는 여러 가지 디바이스 관련 파일이 있는 디렉터리

/dev/null 파일은 어떤 문자를 이 장치로 보내면 문자를 모두 지워버림

/dev/zero 파일은 새로운 파일을 생성할 때 0으로 채우기 위해 사용

/dev/tty : 프로그램이 실행되고 있는 터미널 윈도우 또는 콘솔

/dev/dsp : 사운드 카드에 AU 사운드 파일을 실행하는 인터페이스

/dev/fd0 : 첫 플로피 드라이버

/dev/hda1 : IDE 하드 디스크의 첫 파티션. hda2 처럼 하나의 하드 디스크에 여러개릐 파티션을 구성할 수 있음

/dev/sda1 : SCSI, S_ATA 하드 디스크의 첫 파티션

/dev/hda1 파티션을 /backup 디렉터리에 마운트 하려면 아래와 같이 입력

 

/ : 루트 디렉터리

/boot : 리눅스 커널과 부트로더가 위치하는 디렉터리

/etc : 시스템 환경 설정 파일이 위치한 디렉터리

/etc/passwd : 유저의 각종 정보 저장

/etc/shadow : 유저 패스워드를 암호화하여 저장

/etc/fstab : 시스템이 부팅될 때 참고하는 마운트할 디바이스 테이블을 저장

/etc/hosts : 네트워크 호스트 이름과 IP 주소

/etc/rc.d/init.d 또는 /etc/init.d : 부팅시 시작할 여러가지 시스템 서비스 스크립트

/etc/resolv.conf : 시스템에서 외부로 접속할 때 참고할 네임서버

/etc/sysconfig/i18n : 부팅시 언어셋 변수와 폰트 변수를 설정

/etc/sysconfig/iptables : 리눅스 방화벽 iptables 환경 설정

/etc/sysconfig/network : 부팅시 네트워크를 지우너할 것인지와 호스트명을 설정

/etc/sysconfig/network-scripts/ifcfg-eth0 : 부팅시 사용할 첫 이더넷 카드의 정보 저장

/bin, /usr/bin : 실행 프로그램들. /bin엔 기본적인 실행 프로그램, /usr/bin엔 사용자들이 사용할 실행 프로그램

/sbin, /usr/sbin : 시스템 관리자를 위한 프로그램. 대부분 root를 위한 프로그램

/usr : 사용자 애플리케이션을 지원하기 위한 다양한 파일이 위치

/usr/local : 소프트웨어 설치시 또는 로컬머신에서 사용할 파일들이 위치. 소스파일을 기본 옵션으로 컴파일하면 /usr/local 디렉터리에 기본 설치가 되며 이 때 실행 파일은 /usr/local/bin에 위치

/var : 운영 중인 시스템의 변화를 체크할 수 있는 로그 파일들이 위치

/var/log : 로그 파일이 위치하는 디렉터리

/var/spool : 메일 메세지와 프린트 작업과 같이 프로세스를 위한 큐를 잡아놓기 위해 사용되는 디렉터리

/lib : 공유 라이브러리 파일

/home : 유저별 홈디렉터리가 존재하는 개인 홈디렉터리. useradd(adduser) 명령을 사용해 유저를 생성하면 "/home/유저아이디 형식으로 유저 홈디렉터리가 생성. 이때 기본적으로 생성되는 파일들은 /etc/skel 디렉터리 아래의 파일들임

/tmp : 임시 파일들이 저장되는 디렉터리

/dev : 리눅스 시스템에서 사용하는 디바이스 장치 파일들

/proc : 이 디렉터리는 파일을 포함하지 않음. 현재 시스템 CPU 정보를 출력하기 위해 /proc/cpuinfo 파일을 출력

현재 프로세스의 정보가 저장되어 있음

ps -ef를 입력하고 나오는 pid 이름으로 되어있는 폴더를 들어가보면 다양한 정보들이 나와있음

해당 폴더에서 cat status를 입력하면 정보들이 나오는데 주로 봐야하는 것은 VmRSS, VmSwap 등이 있음. 스왑이 되면 어떻게 되는지 문서를 볼 것

/media, /mnt : 마운트 포인트를 위해 사용되는 디렉터리

마운트 : 디바이스 장치를 사용하기 위해 프로세스와 연결하는 것

 

 

5. 권한 

리눅스와 같은 멀티태스킹, 멀티유저를 지원하는 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)

 

6. JOB CONTROL

 

  • 리눅스 멀티 태스킹 : 여러 개의 프로세스를 동시에 사용하는 것
  • 리눅스 커널은 동시에 실행되는 각 프로세서들을 관리할 수 있도록 구성되어 있으며, 프로세스 통제 및 관리할 수 있음
  • 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 : 프로세스를 포그라운드로 가져오기
반응형