1. 쉘
1) 쉘
표준 입력으로 입력한 명령어와 스크립트 파일에서 읽어 들이는 명령어를 해석하여 사용자와 커널의 중계 역할을 담당한다.
쉘이 아니면 우리가 명령을 내려도 커널이 알아먹지를 못한다는 뜻!
쉘 유형에는 여러가지가 있지만 일반적으로 bash쉘을 가장 많이 쓴다.
2. 메타캐릭터
메타캐릭터란 쉘이 단순한 문자가 아닌 특별한 기능을 하는 의미로 해석하는 특수 문자나 기호를 말한다.
- | (파이프)
앞에 실행한 명령어 결과를 파이프 다음 명령어로 넘겨준다. 맊약, 따옴표, 소괄호 안에 있다면, OR 개념이다.
앞서 grep이나 egrep을 사용할 때 함께 많이 사용해봐서 익숙하다.
- ; (세미콜론)
여러개의 명령어를 순차적으로 수행하도록 한다.(앞에 명령이 실패되면, 뒤에 명령이 실행됨) - && (더블 엠퍼센트)
여러개의 명령어를 순차적으로 수행하도록 한다.(앞에 명령이 실패되면, 뒤에 명령이 실행 안됨) - || (더블 버티컬 바)
앞에 명령이 성공되면, 뒤에 명령이 수행 안된다. (앞에 명령이 실패되면, 뒤에 명령이 실행됨)
- * (애스터리스크)
전체를 의미한다.
- ^ (캐럿)
라인의 시작을 의미한다. - $ (달러)
라인의 끝을 의미한다.
- $ (달러)
문자를 변수 이름으로 처리한다.
- '' (작은따옴표)
쉘이 메타캐릭터를 해석할 수 없도록 처리한다. 즉, 메타캐릭터를 일반 문자로 처리한다
- "" (큰따옴표)
쉘이 메타캐릭터를 해석할 수 없도록 처리한다. 단, $, ``, \은 쉘이 해석한다
- \ (역슬래쉬)
역슬래쉬 다음에 나오는 메타캐릭터를 쉘이 해석할 수 없도록 처리한다.
3. 재지정(리다이렉션)
표준 입력 FD 0 키보드로부터 입력을 받는다.
표준 출력 FD 1 모니터로 결과 내용을 출력한다.
표준 에러 FD 2 모니터로 에러 내용을 출력한다.
쉽게 말해서 우리가 입력하는 내용이 표준 입력
그에 의해 나오는 결과가 표준 출력
우리가 입력한 내용에 오류가 있을 때 나오는 에러 내용이 표준 에러이다.
입력과 출력과 에러는 각각 재지정을 할 수 있다.
1) 출력 재지정
- >
출력 내용을 파일로 덮어쓰기하여 저장한다. - >>
출력 내용을 파일로 이어쓰기하여 저장한다.
2) 에러 재지정
- 2>
에러 내용을 파일로 덮어쓰기하여 저장한다. - 2>>
에러 내용을 파일로 이어쓰기하여 저장한다.
3) 입력 재지정
- <
인자값을 키보드 입력이 아닌 파일로 받는다. - <<
특정 문자열까지만 입력을 받는다.
4. 리눅스 계정
1) 리눅스 계정
- root
로그인이 가능한 관리자 계정, 모든 권한을 수행할 수 있다.
(현재 나는 루트 계정을 사용하며 공부하고 있지만 실제 작업중에 루트 계정을 사용하는 것은 굉장히 위험한 일이다.) - system
시스템 운영에 필요한 계정, 로그인이 불가능하다 - user
로그인이 가능한 일반 계정, 모든 권한을 수행할 수 없다.
(권한이 제한되어있다.)
2) 계정 관련 파일
- /etc/passwd
계정 전체 정보를 관리하는 파일 - /etc/shadow
계정 패스워드 정보 및 계정 사용 관련 기간을 관리하는 파일 - /etc/group
계정 그룹 정보를 관리하는 파일
- pwunconv
/etc/passwd 파일에 계정 패스워드 해시값을 출력한다.
또한 pwunconv 명령어를 실행하면, /etc/shadow파일은 사라지고 /etc/shadow- 백업 파일만 존재한다. - pwconv
/etc/passwd 파일에 계정 패스워드 해시값을 출력하지 않는다.
- /etc/default/sueradd 파일
계정 생성시 필요한 기본값 정보들이 설정되어있는 파일이다. - /etc/skel 디렉토리
- 계정 생성시 계정 홈 디렉토리에 복사되는 파일과 디렉토리를 관리하는 디렉토리이다.
3) 계정 생성
기본값으로 test1을 설정하고
홈 디렉토리를 /var/tset2로 설정한 test2 계정을 생성했다.
그 후 홈 디렉토리를 /var/test3 로 설정하고 sh쉘로 test3 계정을 생성했다.
계정 만료 날짜 및 주석을 설정하여 test4 계정을 생성했고
계정 식별자를 2000로 test5 계정을 생성했다.
cat /etc/passwd | grep test 명령어에 따른 결과로 각 계정들의 차이점을 볼 수 있다.
4) 계정 수정
test3 => 계정 쉘 변경
test4 => 계정 만료 기간 삭제 및 주석 변경
test5 => 계정 식별자 및 그룹 식별자 변경
5) 계정 삭제
-r 옵션을 사용하면 계정 홈 디렉토리 및 이메일 관련 파일까지 삭제한다.
-r 옵션을 사용하지 않으면 /etc/passwd 내에서만 삭제된다.
6) /etc/shadow 파일
- user1
계정 이름 - :$6
SHA-512 - $KjcU1hP9MqU2mx50
salt키 - $Opnz8U/819oi53ICKWcaZSsjXwBzF/HHX/5wp/XyVs/4Eeca0HPAP6TIO6qSHEbVRck0NwoWqjps9wUiLgq1I1
SHA-512 를 이용하여 솔트키+패스워드를 해시값으로 생성한 계정 패스워드 - :20060
최근에 패스워드를 설정, 변경한 날짜 ( 1970-01-01기준) - :99999
패스워드를 사용할 수 있는 기간 ( 99999는 무제한) - :7
패스워드 기간 만료 7일 전 알림 - ::
계정 만료 기간
7) group 추가, 변경, 삭제
일단 세개의 계정을 생성한다.
groupadd 명령어로 그룹을 생성할 수 있다.
groupmod 명령어와 -n 옵션으로 test 그룹의 이름을 testuser로 바꾼다.
여러 사용자를 하나의 그룹으로 구성하는 경우
사용자 계정을 여러개의 그룹으로 구성하는 경우
5. 파일 및 디렉토리 구조
1) 파일의 구조
리눅스 시스템에서 파일 구조는 filename, inode, data block 으로 구성되어 있다.
파일 이름은 중복되면 앆되고 대소문자를 구분한다. inode 는 파일의 속성 정보와 데이터 블럭을 포인트하는 정보가 들어가 있으며, 'ls -i' 명령을 이용하여 확인할 수 있다. Data Block 에는 실제 파일의 데이터가 저장되어 있다. 파일 유형로는 일반 파일, 디렉토리 파일, 링크 파일, 장치 파일 등이 있으며, 장치 파일 같은 경우에는 데이터를 저장하지 않고 장치를 접근 및 관리하기 위한 제어접근 기능만 제공한다.
'ls -l' 명령을 실시하여 맨 좌측 첫번째 문자를 보고 파일 유형을 알 수 있다.
- -
일반 파일 - d
디렉토리 파일 - l
심볼링 링크 파일 - b
블록 장치 파일 - c
캐릭터 장치 파일
2) 파일 유형
file 명령어로 파일 유형을 확인한다.
3) 일반파일
- 파일 이름
파일 이름은 해당 파일을 접근하기 위해서 사용한다. 파일은 inode와 함꼐 파일의 구성 요소이며 같은 디렉토리 안에서 파일 이름은 주옥되면 안된다. 또한, 같은 같은 디렉토리 안에서는 파일 이름과 디렉토리 이름이 동일하면 안된다. - inode
inode는 파일에 대한 정보를 갖고있으며, 각각의 파일 및 디렉토리마다 고유 번호가 할당된다. inode에는 다음과 같은 파일의 정보를 갖고있다. 'df -l'명령을 실행하면 현재 inode 용량을 확인할 수 있다.
- 파일의 종류(File Type)
- 파일의 퍼미션모드(File Permission Mode)
- 파일의 소유자, 그룹(File Ownership, Groupship) - 파일의 링크수(Hard Link Count)
- 파일의 마지막 접근 시간(Access Time), 수정시간(Modification Time), 수정시간(Changed Time)
- 파일의 크기(Bytes, 할당된 또는 사용중인 데이터블럭의 수)
- 두가지 형태의 포인터(Directe Pointers and Indirect Pointers) - data block
데이터 블록은 디스크 공간에 데이터를 저장하는 단위이다.
4) 디렉토리 파일
디렉토리 파일 데이터 블록 안에는 실제 디렉토리 안에 있는 파일 이름, 디렉토리의 이름, inode 정보를 저장한다.
5) 하드 링크 파일
원본 파일과 하드 링크 파일이 같은 데이터를 사용한다. 그렇기 때문에 inode 번호가 동일하며 원본 및 사본 개념이 없다. 하드 링크 파일은 'ln' 명령어를 이용하여 원본 파일을 통해서 생성할 수 있다.
- 원본 파일 'file1'과 하드 링크 파일 'file11'은 다음과 같이 동일한 inode 의 데이터를 사용한다.
6) 심볼릭 링크파일
심볼릭 링크 파일은 원본 파일에 연결되어 데이터를 사용한다. 그렇기 때문에 inode 번호가 다르다. 맊약, 원본 파일을 삭제하면 심볼릭 링크 파일은 'ls' 명령어로 확인은 되지맊, 존재하지 않는 파일로 처리한다. 심볼릭 링크 파일은 'ln' 명령어에서 '-s' 옵션을 이용하여 원본 파일을 통해서 생성할 수 있다.
- 심볼릭 링크 파일 'file22'는 원본 파일 'file2'에 연결되었기 때문에 원본 파일 'file2'의 데이터를 사용한다.
7) 블록 장치 파일
블록 단위로 I/O 를 발생시키며, 'ls -l' 명령을 실행했을때 맨 좌측 첫번째 문자가 'b'로 시작한다.
8) 캐릭터 장치 파일
바이트 단위로 I/O 를 발생시키며, 'ls -l' 명령을 실행했을때 맨 좌측 첫번째 문자가 'c'로 시작한다.
7. 압축 및 아카이빙
1) gzip(GNU zip)
- 파일 압축
압출 명령어를 사용하기 위해 파일들을 준비한다.
파일들을 각각 다른 옵션으로 압축했다.
file1 은 옵션을 붙이지 않았다. => 79.4% 압축
file2 는 -v 옵션을 붙였다. => 79.4% 압축
file3 는 -9v 옵션을 붙였다. => 79.5% 압축
file4 는 -1v 옵션을 붙였다. => 76.3% 압축
( 'cat' 명령어로 확인하면 압축 파일은 ASCII TEXT 파일이 아니기 때문에 읽을 수 없는 상태로 출력된다.)
- 압축 해지
-d 옵션으로 압축을 해지할 수 있다.
- 디렉토리 안에 있는 파일 압축
-r 옵션으로 디렉토리 안에 있는 파일을 압축할 수 있다.
마찬가지로 d 옵션을 추가하면 디렉토리 안에 있는 파일을 압축 해지할 수 있다.
- 현재 디렉토리 안에 있는 모든 파일 및 디렉토리 압축
압축 대상을 *로 지정함으로써 디렉토리 내의 모든 파일과 디렉토리를 압축했다.
디렉토리를 압축하는 데에는 -r 옵션이 필요하지만 파일을 압축하는 데에는 -r 옵션의 유무가 상관 없기 때문에
-r 옵션을 붙여줌으로써 파일과 디렉토리를 한 번에 압축할 수 있다.
(마찬가지로 d 옵션으로 압축을 해지할 수 있다.)
2) bzip2(Burrow-Wheeler trsnform zip)
압축 기능을 제공하며, 확장자는 '*.bz2'로 사용한다. 디렉토리 안에 있는 내용들에 대해서 압축 기능은 제공하지 않는다. 그렇기 때문에 디렉토리 안에 들어가서 압축을 실시해야한다. 관련 명령어와 옵션은 다음과 같다.
대부분의 기능의 gzip과 같다.
디데일한 옵션에만 약간의 차이가 있다.
3) TAR(Tape archive)
'tar' 명령어를 사용하여 다수의 파일/디렉토리를 하나의 묶음 파일로 생성한다. 대신, 압축은 실시하지 않기 때문에 gzip, bzip2 를 사용해야 한다.
4) zip
아카이빙과 압축을 동시에 지원한다.
unzip 명령어로 압축을 해지하고 -l 옵션을 붙일 경우 압축파일의 내용을 확인할 수 있다.