반응형
쉘
- 사용자와 컴퓨터 하드웨어 또는 운영체제간 인터페이스
- 사용자의 명령을 해석해서 커널에 명령을 요청
- 관련된 시스템콜을 사용해서 프로그래밍이 작성되어 있다.
쉘 종류
- 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 |
댓글