리눅스
파티션 실습
디스크
하드디스크의 물리적 구조
- 플래터와 헤드로 구성
- 플래터(platter)
실제 자료가 저장되는 매체
하나의 디스크에는 여러 장의 플래터가 들어있고, 하나로 묶여서 한 방향으로 회전
플래터가 손상되면 배드 섹터(bad sector)가 발생하거나 플래터 전체를 사용할 수 없음
-헤드(head)
플래터의 자료를 기록하는 펜
플래터의 데이터를 입력/수정/삭제할/수정/ 수 있도록 만들어주는 도구
하드디스크의 논리적 구조
- 플래터는 트랙과 실린더라는 개념으로 나누고 트랙과 실린더가 교차되는 영역을 섹터라고 부른다.
- 하나의 하드디스크를 여러 개의 논리적인 영역으로 분할한 파티션이라는 단위로 장치를 사용
> 경우에 따라 디스크 한 개 전체 용량을 하나의 파티션으로 생성하여 사용하기도 한다.
- 트랙(track)
플래터 전체 면적을 동심원을 기준으로 나눴을 때 나오는 영역
- 실린더(cylinder)
플래터 전체 면적을 반지름 선을 기준으로 나눴을 때 나오는 영역
- 섹터(sector)
트랙과 실린더가 교차되면서 나오는 영역
실제 자료가 저장되는 영역(1 sector = 512 byte)
- 파티션(partition)
연속된 섹터들의 집합체
실제로 사용되는 장치 영역(ex. c드라이브, d드라이브 등은 각각 하나의 파티션)
Partition Table
MBR의 경우 파티션 테이블은 총 4개로 구성되어 있고, 각각의 파티션 테이블은 16byte씩 정의 되어 있다. (총 64 byte)
(단, 확장 파티션을 이용할 경우 필요에 따라 마음대로 파티션을 생성할 수 있다.)
파티션의 종류
- primary partition(주 영역)
- 실제 데이터를 저장, 운영체제 설치가 가능한 Partition.
- Partition 생성 시 MBR Partition table 16byte가 소모.
- 최소 1개부터 최대 4개까지 생성 가능.
- extended partition(확장 영역)
- 실제 데이터 저장 불가, 부족한 Partition table 영역을 확장 시키는 용도로 사용.
- 논리 영역을 담는 바구니 역할.
- 1개만 생성 가능하며, MBR Partition Table 16byte가 소모.
- logical partition(논리 영역)
- 확장 영역을 갖는 범위 안에 생성되는 Partition
- 실제 데이터 저장 가능, 운영체제 설치 불가능.
- 제한 없이 생성 할 수 있음(확장 영역의 Disk 할당 용량만큼)
디스크/파티션 이름 붙는 방식
- 디스크가 추가되거나 파티션이 생성되어 운영체제가 그 장치를 인식하게 되면
/dev 디렉토리 내부에 장치 이름으로 된 파일이 자동으로 생성되고, 그 파일을 장치 파일이라고 부른다.
- 해당 장치를 다루기 위해 장치의 이름이 어떤 식으로 부여되는지 알아야 한다.
- 디스크
sd<?>
sd 뒤에 알파벳 한 글자가 붙어서 디스크의 이름 구성(ex. sda, sdb, sdc 등)
알파벳이 붙는 순서는 메인보드의 슬롯 번호를 따라서 system이 자동으로 할당
* CD-Rom : sr0
- 파티션
HDD이름<?>
디스크 이름 뒤에 숫자가 붙어서 파티션의 이름 구섬
> primary/extended : 1~4, 파티션 생성 과정에서 사용자가 지정
logical : 5~ , 파티션 생성 과정에서 system이 순차적으로 할당
MBR
- 종합적인 정보를 가지고 있는 레코드
- 부팅되면 운영체제를 Load
- 각 파티션의 BR(Boot Record)영역에 가서 모두 부팅해준다.
- 512byte 크기를 갖는다.
File System
- 파일의 물리적 위치를 저장하여 Data에 빠른 Access가 가능하도록 도와준다.
- Meta 영역 / Data 영역으로 구분된다.
- Meta 영역 : 데이터의 물리적 위치정보를 기억하는 영역
- Data 영역 : 실게 데이터가 저장되는 영역
Format
- 파일 시스템을 구성하거나 재구성하는 행위
- Hiigh-Level
> Quick : Meta영역 부분만 재구성
> Normal: Quick + 물리적 디스크 오류 검사 (Bad Sector 검사)
- Low-Level
> Factory Default : 공장 초기화 (모든 영역을 “0”이라는 값으로 채움)
권한
권한
- 파일/파일/디렉터리를 사용할 수 있는지 정하는 개념(or 값)
- 허가권과 소유권으로 구분
> 허가권 + 소유권 = 권한
허가권
- ls -l 명령을 입력했을 때 나오는 출력 내용 중 개체 형식을 나타내는 첫 글자 뒤에 오는 9개의 글자가 허가권
- 8가지 문자로 권한을 표현 : r, w, x, -, s, S, t, T
r, w, x, - : 일반 권한 표현 문자
s, S, t, T : 특수 권한 표현 문자
- 일반 권한 표현 문자의 의미
r : 읽기, w : 쓰기, x : 실행/접근, - : 권한 없음 | ||
r | 파일 | 파일 내용 읽기 ; cat, head, tail, more, less, vi로 열었을때 등 |
디렉터리 | 디렉토리 내부 목록 확인 ; ls, GUI환경에서 폴더 들어 갔을때 등 | |
w | 파일 | 파일 내용 수정 ; 문서 편집 후 저장, > 기호를 이용 하여 덮어쓰기/내용추가 등 |
디렉터리 | 디렉토리 내부 목록 수정 ; 디렉토리 내부 하위 파일/ 디렉토리 생성/삭제/수정 등 | |
x | 파일 | 실행 ; 파일에 x가 없으면 일반 문서 파일, x가 있으면 실행 파일 (ex. 명령어) |
디렉터리 | 접근 ; 디렉토리에 x가 없으면 디렉토리 자체 및 내부의 항목들을 사용할 수 없다. |
- 9자리의 권한 문자는 기본적으로 r w x 가 세 번 반복되는 형식이고, 없는 권한은 - 대체
9자리의 권한 문자를 3개씩 끊어서 Owner, Group, Other 영역으로 구분 | |
Owner | 소유자를 위한 권한(소유자 : 파일/디렉토리를 소유 중인 사용자) |
Group | 그룹 사용자를 위한 권한(그룹 사용자 : 파일/디렉토리를 소유 중인 그룹에 소속된 사용자) |
Other | 그 외 사용자를 위한 권한(그 외 사용자 : Owner, Group 둘 다 해 당되지 않는 사용자) |
* 3개의 영역중 어느 영역의 권한을 적용받는지에 대한 내용은 소유권에 서 결정
ex> Owner | Group | Other
r w x r - x r - x
- 권한 표현 방법
1. 문자를 이용한 방법
r, w, x, - : 문자를 차례대로 읽어주는 방법
2. 숫자를 이용한 방법
문자를 바탕으로 숫자 값을 계산
* 계산 방법
1) 영역 분리
2) r = 4, w = 2, x = 1, - = 0이라는 값을 각 문자에 대입 후 영역별로 합 계산
3) 각 영역에서 구한 합에 Owner : 100, Group : 10, Other : 1을 곱해 서 전체 합을 계산
ex)
1. rwx r-x r-x > 755
Owner | Group | Other | ||||||
r | w | x | r | - | x | r | - | x |
4 | 2 | 1 | 4 | 0 | 1 | 4 | 0 | 1 |
7 | 5 | 5 | ||||||
x100 | x10 | x1 | ||||||
700 | 50 | 5 |
2. rw- r-- r-- > 644
Owner | Group | Other | ||||||
r | w | - | r | - | - | r | - | - |
4 | 2 | 0 | 4 | 0 | 0 | 4 | 0 | 0 |
6 | 4 | 4 | ||||||
x100 | x10 | x1 | ||||||
600 | 40 | 4 |
- 허가권 변경
chmod [옵션] 권한값 대상 [대상] ... [대상]
* 권한 값을 숫자 or 문자로 입력
숫자는 전체 권한 값을 입력 > numeric method
문자는 영역을 의미하는 문자에 권한 문자를 +,- 연산 > symbolic method
** symbolic method에서 사용하는 영역 문자
u : owner
g : group
o : other
소유권
- 파일이나 디렉터리를 어느 사용자와 그룹이 소유하고 있는지 나타내는 권한
> ls -l 명령으로 출력되는 정보 중 링크 개수 뒤에 나오는 사용자명과 그룹명이 소유권
- 소유권을 두 개의 영역으로 구분
> 앞에 나오는 정보가 계정명(UID), 파일/파일/디렉터리를 소유하고 있는 사용자
뒤에 나오는 정보가 그룹명(GID), 파일/파일/디렉터리를 소유하고 있는 그룹
- 소유권 변경
chown [옵션] 권한 값 대상 [대상] ... [대상]
* 권한 값 작성 방식( : 기호 대신. 기호. 사용 가능)
UID >> 소유권의 UID 지정
UID:GID >> 소유권의 UID, GID 지정
UID: >> 소유권의 UID,GIDUID, GID를 특정 사용자의 UID, GID로 변경
:GID >> 소유권의 GID 지정
허가권과 소유권이 적용되는 방식(★★★★★)
1. 작업 주체와 작업 대상의 UID, GID확인
작업 주체: 작업을 수행하는(명령을 입력받은) 사용자 >> 사용자 정보 중 UID, GID(/etc/passwd 파일, id 명령)
작업 대상: 작업(명령)의 대상이 되는 파일/디렉터리/디렉터리>> 소유권 UID, GID(ls 명령의 -l 옵션이나 -n 옵션)
2. 작업 주체와 작업 대상의 UID, GID 비교
1) UID 비교 >> UID 일치하면 허가권의 owner 영역 권한 적용, 일치하지 않으면 GID 비교
2) GID 비교 >> GID 일치하면 허가권의 group 영역 권한 적용, 일치하지 않으면 허가권의 other영역 권한 적용
특수권한
- 특수한 동작을 하는 권한
> 특수한 목적으로 사용하는 권한
- setUID, setGID, sticky bit 3가지의 특수 권한이 있다.
4777 r w s r w x r w x : setUID (안 쓰는 걸 강추)
2777 r w x r w s r w x : setGID
1777 r w x r w x r w t : sticky bit
* x 위치의 문자가 s/t로 변경(x가 있는 상태였다면 소문자 s/t, x가 없는 상태였다면 대문자 S/T)
ex>
rws r-x r-x : 4755
rwS r-x r-x : 4655
sticky bit
- 디렉터리에 설정하는 특수 권한
- 디렉터리 내부에 파일/디렉터리 생성은 권한만 있으면 누구나 가능하지만
파일/디렉터리 삭제는 대상의 소유자(소유권의 UID)와 관리자만 가능
setUID
- 실행 파일에 설정하는 특수 권한
- 파일이 동작하는 동안 owner의 권한을 사용할 수 있도록 해주는 특수 권한
> 동작하는 동안 owner가 된다라고 생각해도 큰 차이가 없다.
rpm
- redhat package manager; 패키지를 이용한 프로그램/서비스 관리
* 패키지 : 프로그램을 나눠놓은 조각
- Linux는 kernel부터 시작하여 모든 구성이 패키지로 이루어져 있고 패키지는 다른 패키지와 의존 관계에 놓여있는 경우가 많다.
> 패키지 설치/삭제 과정에서 의존성 관련 오류가 굉장히 많이 나온다.
- rpm은 redhat에서 처음 만들어서 도입했고, redhat기반의 모든 Linux에서는 rpm명령어 사용
> debian 기반의 Linux에서는 rpm이 아닌 dpkg 명령 사용
- 형식
설치 : rpm -ivh 패키 지명-버전. 아키텍처. rpm
확인 : rpm -qa | grep 패키지명
삭제 : rpm -e 패키지명[-버전.아키텍처]
- 패키지 이름 구조
vim-filesystem-7.4.629-7.el7.x86_64
<----------------->|<----------->|<-------->
패키지명 버전 아키텍처
1. 패키지명
- 패키지명은 한 단어이거나 - 기호를 이용한 여러 단어의 조합으로 구성
(패키지명에 숫자만 단독으로 나오는 경우가 없기 때문에 버전과 구별 가능)
- 한 단어이면 해당 패키지로 설치되는 프로그램 or 서비스 이름을 나타낸다.
- 여러 단어이면 첫 단어가 설치되는 프로그램 or 서비스 이름이고 뒤에 이어지는 단어들이 세부 역할을 의미한다.
2. 버전
- 버전은 여러 가지 세부 버전으로 구성
7 | major |
4 | minor |
629 | patch |
7 | release |
el7 | OS |
* OS 버전 예시
el7 = CentOS 7 버전 전체
el7_9 = CentOS 7.9 버전
centos = 모든 버전의 CentOS
<생략> = 모든 종류/버전의 운영체제
3. 아키텍처
CPU의 bit와 관계되어서 특정 수준의 CPU이상에서 사용 가능하다 라는 의미
> CPU의 bit 수는 한 번에 처리 가능한 데이터의 bit 수
32 bit : i386, i586 ,i686 (잘 사용하지 않음)
64 bit : x86_64
공용 : noarch
- 의존성 오류
1. 확인 방법
A is needed by B : B에게 A가 필요하다.
1) 설치할 때
(설치하려는 패키지가 B 위치에 출력)
B를 설치하기 위해 A가 먼저 설치되어야 한다.
2) 삭제할 때
(삭제하려는 패키지가 A 위치에 출력)
B에게 A가 필요하기 때문에 A를 삭제할 수 없다.
2. 해결 방법
1) 의존성 오류 메시지를 읽고 해당 내용 해결
2) 의존성 오류를 무시하는 보조 옵션 --nodeps 사용
> 패키지를 확인했을 때 중요 패키지이거나(삭제할 때) 찾을 수 없는 패키지라 면(설치할 때) 의존성 오류를 무시한다.
3. 의존성 오류에서 패키지명이 아닌 다른 내용이 출력되면
1) 파일의 절대 경로
> 패키지에 해당 파일이 포함되어 있는 경우 (일반적으로 삭제할 때 출력)
파일명을 패키지 이름처럼 읽으면 된다.
2) lib~~~.so.숫자(~~~)
> ~~~ 부분이 패키지를 의미(설치/삭제 시 전부 출력)
해당 의존성 오류를 검색하여 패키지명 확인
3) pkgconfig(~~~)
> ~~~ 부분이 패키지를 의미(일반적으로 설치할 때 출력)
해당 의존성 오류를 검색하여 패키지명 확인
yum
- Internet을 이용한 자동 패키지 관리
> 반드시 Internet이 연결되어 있어야 사용 가능
- 의존성 오류까지 전부 해결
- 형식
yum [옵션] { install | update | remove } 패키지명 | |
intstall | 설치 |
update | 업데이트 |
remove | 삭제 |
history list | 스냅샷과 같은 기능 |
* 옵션
-y : y/N 물어볼 때 자동으로 y 입력
※ yum clean all : 캐시 메모리를 삭제하는 명령어
- 이전 작업이 중지되게 되면 캐시 메모리로 넘어가게 되는데 다른 명령어를 실행할 때 영향을 줄 수도 있기 때문에 캐시 메모리를 제거한 후 재연결을 한다.
사용자 계정 실습
# Useradd 실습
user1 계정은 아무 설정 없이 생성해주고 user2는 Test User라는 별칭을 넣고 계정을 생성 해준 후 tail을 사용하여 생성된 계정 정보를 확인
backup 디렉터리를 생성 후 user3 계정의 디렉터리를 backup으로 설정 후 쉘까지 설정한 후 계정 생성
유저를 생성 할 때 skel은 myskel에 있는 파일을 사용하여 user4를 생성했을 때 myskel안의 파일들이 같이 생성
# Usermod 실습
-m을 사용하지 않으면 passwd에서는 이동이 되지만 실제 디렉터리는 이동되지 않는다.
# Userdel 실습
-r을 사용하지 않으면 계정은 삭제되지만 잔여물이 남는다.
user4의 흔적이 남아있는 것 확인
# Groupadd 실습
그룹을 생성하고 유저를 생성할 때 그룹을 지정하면 그 그룹 권한이 들어가는 것 확인
사용자 계정
사용자 & 그룹
- 사용자 계정이랑?
> 사람이 장치를 사용하기 위해 로그인하는 계정
> 운영체제를 사용하는 사람 개개인에게 생성해주는 계정
(각종 작업을 누가 했는지 식별하기 위해 사용자 개개인에게 생성)
> 사용자 계정을 이용하여 파일/디렉터리의/ 사용 권한 설정이 가능
(같은 파일을 a사용자는 열고 b사용자는 열 수 없게 지정 가능)
- 그룹이란?
> 사용자 계정을 묶어주기 위한 객체
(사용자 계정의 논리적인 집합체)
> 관리자가 주로 제어
(그룹 생성/수정/삭제, 그룹에 사용자 계정을 소속시키는 등)
> 그룹에 권한을 부여하여 그룹에 소속된 사용자들이 동일한 권한을 적용받을 수 있다.
사용자 계정
- 사용자 계정에 관련된 파일
1. /etc/passwd : 사용자의 일반 정보가 들어있는 파일
* 파일 내용 보는 방법 (구분자 ‘:’)
itbank:x:1000:1000:asd:/home/itbank:/bin/bash | |
itbank | 사용자 ID, 뒤의 정보들이 어느 사용자의 정보인지 표시 |
x | 암호, passwd 파일에는 비밀번호를 표시하지 않음 |
1000(왼쪽) | UID, 이 사용자의 고유 번호 |
1000(오른쪽) | GID, 이 사용자가 소속된 주요 그룹의 고유 번호 |
asd | 사용자 별칭(계정명 혹은 ID로 사용 X, GUI환경에서 화면 에 표시 되는 이름) |
/home/itbank | 사용자의 홈 디렉토리의 경로와 이름을 절대경로로 저장 |
/bin/bash | 이 계정이 사용하는 shell |
* UID : User ID, 사용자에게 부여되는 고유번호
* GID : Group ID, 그룹에게 부여되는 고유번호
0 : root
1 ~ 199 : system or service
1000 ~ : 일반 사용자&그룹
* shell : 명령어 해독기, 사용자가 입력한 명령을 운영체제에 전달해주는 역할
shell에 따라 알지 못하는 명령어도 있다.
현재 시스템에 설치된 shell은 /etc/shells 파일에서 확인 가능
passwd 파일에 저장된 정보중 shell위치에 /sbin/nologin이 있다.
> 명령어 사용 shell X, 로그인을 하지 못하게 만드는 shell(system or service 계정에 부여)
2. /etc/shadow : 사용자의 고급 정보가 들어있는 파일
* 파일 내용 보는 방법
itbank:$6~~:18978:0:99999:7::: | |
itbank | 사용자 ID, 뒤의 정보들이 어느 사용자의 정보인지 표시 |
$6$~~$~~ | 암호, 사용자가 로그인 시 사용하는 비밀번호를 암호화하여 저장 (!! : 패스워드가 없다) |
18978 | 암호 생성 일자, 1970년 1월 1일을 기준으로 며칠째에 생 성된 암호인지 표시 (운영체제 설치 시 저장된 암호는 생성 일자가 표시 x) |
0 | 암호 최소 사용 일자 |
99999 | 암호 최대 사용 일자(= 암호 만료 일자) |
7 | 암호 만료 전 경고 일자 |
※ ** 이 뒤에 나오는 정보들은 거의 사용 X >> 생략
3. /etc/login.defs : 사용자 & 그룹 생성 및 삭제와 관련된 몇몇 정보들이 들어있는 파일
- 사용자 암호 변경
passwd : 명령어를 입력한 사용자의 암호 변경(모든 사용자)
passwd <계정명> : 해당 사용자의 암호 변경(관리자만 사용)
*옵션
-l : 패스워드 잠금 설정
-u : 패스워드 잠금해제
- 사용자 계정 생성
useradd [옵션] [값] ... [옵션] [값] 사용자명
옵션 | |
-u | UID 지정 |
-g | GID 지정(주요 그룸으 다른 그룸으로 지정) |
-c | 별칭 지정 |
-s | shell 지정 |
-d | 홈 디렉토리의 경로와 이름을 절대경로로 지정(홈 디렉토리가 만들 어질 경로는 미리 생성) /etc/login.defs 파일의 CREATE_HOME 설정이 없거나 no이면 –m 옵션과 함께 사용 |
-m | make directory |
-k | skel 지정(기본경로인 /etc/skel이 아닌 다른 디렉토리를 skel로 지 정) 반드시 -m 옵션과 함께 사용 |
-D | 사용자 생성 시 적용되는 기본 정보 확인 추가 옵션을 함께 사용하 여 기본 정보 변경(ex. -b 옵션을 함께 사용하면 홈 디렉토리 생성 위치 변경) -D 옵션을 사용하면 사용자 계정 생성 기능이 없어진다. |
* /etc/skel : 사용자 홈 디렉터리의 뼈대가 되는 디렉터리
사용자 생성 시 홈 디렉터리 내부에 /etc/skel/ 안에 있는 파 일/디렉터리들을 복사
> 사용자 홈 디렉토리 내부에 특정 파일/디렉터리를/ 자동으로 생성 가능
/etc/default/useradd
: 사용자 생성 시 적용되는 기본 정보가 저장된 파일
이 파일의 내용을 변경하면 useradd의 옵션을 사용하지 않아도 같 은효과 확인 가능
그룹
- 사용자 계정을 묶어주기 위한 객체
> 그룹에 권한을 부여해서 그룹에 소속된 모든 사용자가 동일한 권한을 적용 받음
- 사용자가 그룹에 소속되는 방법을 두 가지로 분류
1. 사용자가 그룹을 주요 그룹으로 사용(GID로 사용)
2. 사용자가 그룹에 일반 소속되어 사용
- 그룹에 관련된 파일
/etc/group : 그룹의 일반정보가 들어있는 파일
* 파일 내용 보는 방법
itbank:x:1000: | |
itbank | 그룹 이름, 뒤의 정보가 어느 그룹의 정보인지 알려준다. |
x | 암호, 그룹에는 별도의 암호를 지정하지 않는다. |
1000 | GID, 해당 그룹의 고유번호 |
<마지막 필드> | 그룹에 일반 소속된 사용자들의 목록 운영체제 설치과정에 서 생성된 사용자들은 주요 그룹의 일반소속 목록에 함께 출력 |
- 그룹 생성
groupadd [옵션] [값] ... [옵션] [값] 그룹명
* 옵션
-g : GID 지정
- 그룹 정보 수정
groupmod 옵션 값 [옵션] [값] ... [옵션] [값] 그룹명
* 옵션
-g : GID 지정
-n : 그룹 이름 지정
- 그룹 삭제
groupdel 그룹명
* 사용자가 주요그룹(GID)으로 사용중인 그룹은 삭제 X
사용자 + 그룹
- 사용자를 생성하면 동일한 이름의 그룹이 자동으로 생성
> 기본적으로 사용자는 함께 만들어진 그룹을 자신의 주요 그룹(GID)으로 사용
- 사용자가 일반 소속된 그룹과 사용자의 주요 그룹은 언제든지 변경 가능
> 주요 그룹
사용자 정보 수정(usermod)의 -g 옵션 사용
> 일반 소속된 그룹
사용자 정보 수정(usermod)의 -G 옵션 사용 >> 가급적 사용 X
gpasswd 명령어 >> 그룹을 기준으로 일반 소속된 사용자 목록을 편집
gpasswd
- 그룹에 소속된 일반 사용자 목록을 제어
- 형식
gpasswd 옵션 사용자명 그룹명
* 옵션
-a : 사용자를 그룹에 일반소속
-d : 그룹에 일반 소속된 사용자 목록에서 특정 사용자 제거
id
- 사용자의 UID, GID, 소속된 그룹의 목록 확인
- 형식
id 사용자명
VI 에디터
VI
- Linux에서 기본적으로 제공하는 문서 편집기(CLI 환경에서 사용)
사용 환경
1) 명령 모드
- 기본 사용 환경 : 커서 이동, 복사/잘라내기, 삭제, 입력/실행 모드 전환
2) 입력 모드
- 문서의 내용을 변경하기 위한 환경, 내용 추가/수정/삭제, 명령 모드 전환
3) 실행 모드
- 그 외 대부분의 기능들을 사용하기 위한 환경, 명령 모드 전환 (ex모드)
※ 입력 모드와 실행 모드 간의 전환은 불가능
vi 에디터 실행
vi : 빈파일 열기
vi <파일명> : 해당 파일 열기
# 명령 모드 사용 방법
1. 커서 이동
1) 글자단위 커서 이동 | |
h | 한 글자 왼쪽으로 이동 |
j | 한 글자 아래로 이동 |
k | 한 글자 위로 이동 |
l | 한 글자 오른쪽으로 이동 |
2) 단어 단위 커서 이동 > 소문자로 눌러주면 특수문자를 별개의 단어로 인식 대문자로 눌러주면 무조건 공백/엔터를 기준으로 단어 인식 |
|
w | 다음 단어의 첫 글자로 이동 |
b | 이전 단어의 첫 글자로 이동 |
e | 다음 단어의 마지막 글자로 이동 |
3) 줄 내부 커서 이동 | |
0 | 커서가 있는 줄 첫 글자로 이동 |
$ | 커서가 있는 줄 마지막 글자로 이동 |
4) 화면 내부 커서 이동 | |
L | 현재 화면의 마지막 줄로 이동 |
M | 현재 화면의 가운데 줄로 이동 |
H | 현재 화면의 첫 줄로 이동 |
5) 문서 내부 커서 이동 ( ★★★★★ ) | |
gg = [[ | 문서의 첫 줄로 이동 |
G = ]] | 문서의 마지막 줄로 이동 |
:숫자 | 숫자번째 줄로 이동 |
2. 입력 모드 전환
i | 커서 왼쪽으로 내용 입력 |
I | 커서가 있는 줄 왼쪽으로 내용 입력 |
a | 커서 오른쪽으로 내용 입력 |
A | 커서가 있는 줄 오른쪽으로 내용 입력 |
o | 커서 아래 빈 줄 삽입 후 내용 입력 |
O | 커서 위에 빈 줄 삽입 후 내용 입력 |
s | 커서가 있던 글자를 지우고 내용 입력 |
S | 커서가 있던 줄을 지우고 내용 입력 |
3. 실행 취소. 다시 실행 ( ★★★★★ )
u | 실행 취소 (되돌리기) |
ctrl + r | 다시 실행 |
4. 삭제
x | 커서 오른쪽 글자 삭제 ( =delete ) > 커서 오른쪽에 지울 글자가 더 없으면 커서 왼쪽 글자 삭제 ( = backspace ) |
X | 커서 왼쪽 글자 삭제 ( =backspace ) > 커서 왼쪽에 지울 글자가 더 없으면 그대로 기능 종료 |
5. 복사/잘라내기/붙여 넣기 ( ★★★★★ )
yy | 커서가 있는 줄 복사 |
숫자 + yy | 커서가 있는 줄부터 숫자 만큼의 줄 복사 |
dd | 커서가 있는 줄 잘라내기 |
숫자 + dd | 커서가 있는 줄부터 숫자만큼의 줄 잘라내기 |
p | 커서 아래로 붙여넣기 |
P | 커서 위로 붙여넣기 |
# 실행 모드 사용 방법
1. 줄 번호 출력/숨기기
:set nu | 줄 번호 출력 |
:set nonu | 줄 번호 숨기기 |
2. 검색
/Pattern | 위에서 아래로 Pattern검색 |
?Pattern | 아래에서 위로 Pattern검색 |
n | 검색 방향으로 다음 찾기 |
N | 검색 방향 반대로 다음 찾기 |
3. 찾아 바꾸기 (치환)
:[범위]s/찾을내용/바꿀내용/[옵션] | |
범위 | |
생략 | 커서가 있는 줄의 내용을 찾아서 변경 |
n1 | n번째 줄에 있는 내용을 찾아서 변경 |
n1,n2 | n1번째 줄부터 n2번째 줄까지의 내용을 찾아서 변경 |
% | 문서 전체에 있는 내용을 찾아서 변경 |
옵션 | |
g | 한 줄에 찾는 내용이 여러 개면 전체를 다 변경 |
4. 현재 사용 중인 파일 확인
:f | 현재 파일명과 커서 위치 확인 |
5. 리눅스 명령어 사용
:! <명령어> | vi를 잠시 멈추고 리눅스 명령어 동작 |
6. 문서에 내용 삽입
:.! <명령어> | 커서가 있던 줄의 내용을 지우고 명령어 동작 결과 입력 ( 화면에 결과가 출력되는 명령어를 사용 ) |
:r! <명령어> | 커서가 있던 줄 아래로 명령어 동작 결과 입력 ( 화면에 결과가 출력되는 명령어를 사용 ) |
:r <파일명> | 커서가 있던 줄 아래로 다른 파일의 내용 삽입 |
※ :r, :r!는 :과 r 사이에 숫자를 넣어서 특정 줄 아래로 삽입 가능
7. 저장/종료/불러오기
> !를 붙여주면 강제로 진행(ex. :q! = 강제 종료)
:w | 저장 |
:w <파일명> | 다른 이름으로 저장 |
:wq | 저장하고 종료 |
:wq <파일명> | 다른 이름으로 저장하고 종료 |
:q | 종료 |
:e <파일명> | 기존 문서를 종료하고 다른 파일 불러오기 |
:enew | 기존 문서를 종료하고 새 파일 열기 |
8. vi 화면 분할
ctrl + w + n | vi 화면 분할 |
ctrl + w + w | 분할 화면간 커서 이동 |
기초 명령어
- 형식
명령어 | 옵션 | 보조옵션 | 대상 |
pwd | |||
clear | |||
cd | directory | ||
mkdir | directory | ||
ls | -l |
pwd
- 내 현재 위치를 절대 경로로 출력
cd
- 내가 현재 위치한 디렉터리를 이동(변경)
- 대상
directory : 해당 디렉터리로 이동
. : 현재 디렉토리로 이동
.. : 상위 디렉토리
생략 : 명령어를 입력한 사용자의 홈 디렉터리(~)로 이동
~계정명 : 해당 사용자의 홈 디렉터리로 이동 (root 전용)
ls
- 대상이 파일인 경우와 디렉터리인 경우 각각 출력되는 정보가 다르다
> 파일 : 파일 자체의 정보를 확인
디렉터리 : 디렉터리 내부의 목록을 출력
생략 : 현재 위치한 디렉터리 내부의 목록을 출력
-옵션
-l : 자세한 정보를 출력
-a : 숨겨진 개체들까지 출력
-d : 대상이 디렉터리인 경우 대상 자체의 정보를 출력(file 대상으로는 적용 X)
-R : 대상이 디렉터리인 경우 하위 디렉터리가 있다며 그 내부까지 출력
* -l 옵션 정보
-rw-r--r--. 1 root root 511 10월 14 2020 /etc/inittab
- : 대상 개체의 형식(- : 일반 file, d : directory , l : symbolic link file 등 )
rw-r--r-- : 허가권
1 : link 개수
root : 소유권
511 : 크기(byte단위, directory의 경우 정확한 크기 출력 X)
10월 14 2020 : 최종 수정된 날짜와 시간
/etc/inittab : 대상의 경로와 이름
cp
- copy : 복사 + 붙여 넣기
- 기본적으로 파일만 복사가 가능
> 디렉터리의 복사는 별도의 옵션이 필요
- 원본 파일과 같은 이름으로 복사뿐만 아니라 원본 파일과 다른 이름으로 복사도 가능
> 이름을 바꾸면서 복사가 가능 ( 이때 원본은 하나만 입력; 1:1 복사만 가능 )
- 형식
cp [옵션] 원본 [원본] ... [원본] 복사할 위치[+이름]
- 옵션
-r : 디렉터리를 복사할 때 사용 ( 디렉터리 안의 파일까지 복사 )
-i : 중복된 파일일 경우 실행 여부를 물어봄. ( 기본값으로 포함된 옵션 )
-f : 강제로 복사
mv
- move; 잘라내기 + 붙여 넣기
- 파일/디렉터리 전부 이동 가능
- 원본 파일과 같은 이름으로 이동뿐만 아니라 원본 파일과 다른 이름으로 이동도 가능
> 이름을 바꾸면서 이동이 가능( 이때 원본은 하나만 입력; 1:1 이동만 가능 )
- 이름 바꾸기 명령어로 사용 가능
-형식
mv [옵션] 원본 [원본] ... [원본] 이동할 위치[+이름]
mkdir
- make directory
- 경로가 없으면 디렉터리 생성 불가능( 옵션 사용하면 가능 )
* 옵션
-p : 대상의 경로가 없는 경우 함께 생성
rmdir
- remove directory
- 디렉터리 내부에 다른 파일/디렉터리가 있다면 삭제 불가능
> 빈 디렉터리만 삭제 가능
* 옵션
-p : 대상 디렉터리는 삭제 후 상위 디렉터리가 비어있다면 함께 삭제
rm
- remove
- 기본적으로 파일 삭제 가능( 디렉터리는 옵션을 이용하여 삭제 )
* 옵션
-f : 물어보지 않고 삭제
-r : 디렉터리도 삭제
alias
- 임의의 키워드에 명령어 [+옵션] 등록
해당 키워드로 등록된 명령을 대체해서 사용
- 형식
alias : 등록된 키워드 확인
alias 키워드='명령어 [옵션]' : 키워드 등록
ex) [root@Linux-01 ~]# alias c='clear’
[root@Linux-01 ~]# unalias c
cat
- 형식
cat : 입력한 내용을 그대로 화면에 출력 ( 일반적으로 사용 X )
cat 파일명 : 파일의 내용을 출력
> : overwrite 덮어쓰기
>> : append 추가로 쓰기
# 자동으로 파일이 만들어지는 것을 확인 가능하다.
# cat 명령어를 사용해서 파일의 내용을 채우기도 가능하다.
touch
- 대상이 없으면 빈 파일 생성
- 대상이 있으면 최종 수정된 날짜와 시간 변경
head
- 파일의 첫 줄부터 10줄 출력
*옵션
-숫자 : 숫자만큼의 줄 출력
tail
- 파일의 마지막 줄부터 10줄10 출력
*옵션
-숫자 : 숫자만큼의 줄 출력
more
- 출력되는 내용이 너무 많을 때 화면 높이에 맞춰서 내용을 나누어 출력
- 동작 후 추가 입력 키
enter : 한 줄 넘어가기
spacebar: 한 화면 넘어가기
q : more 중간에 종료
- 지나간 내용을 다시 볼 수 없다.
- 디렉터리 대상으로 사용 X
- 일반적으로 | 기호를 사용하여 다른 명령어와 함께 사용
# ll 출력 결과물을 more 명령어로 출력하겠다.
‘|’ 기준으로 왼쪽은 만들고자 하는 결괏값에 해당하고 오른쪽은 결과물을 꾸며줄 수 있는 서식을 넣는다.
less
- more와 동일한 기능 + 지나간 내용을 다시 볼 수 있다.
- 동작 후 추가 입력 키
enter : 한 줄 넘어가기 ( = j, 아래 방향키 )
k : 한 줄 돌아가기 ( = 위 방향키 )
spacebar: 한 화면 넘어가기 ( = page down )
page up : 한 화면 돌아가기
g : 문서의 첫 줄로 이동
G : 문서의 마지막 줄로 이동
q : 종료
- 일반적으로 | 기호를 사용하여 다른 명령어와 함께 사용
nl
- 출력 내용에 줄 번호 붙여주는 명령
- 일반적으로 | 기호를 사용하여 다른 명령어와 함께 사용
wc
- 파일의 내용이 몇 줄, 몇 단어, 몇 글자인지 출력
* 옵션
-l : 몇 줄인 지 출력( 줄은 enter를 기준으로 구분 )
-w : 몇 단어인지 출력( 단어는 enter와 spacebar로 구분 )
-c : 몇 글자인지 출력 ( 공백 문자와 각 줄의 마지막에 있는 안 보이는 마침표도 한 글자로 취급 )
cal
- 형식
cal : 장치에 설정된 날짜를 기준으로 하여 현재 월의 달력을 출력
cal 숫자 : 숫자를 연도로 사용하여 해당 연도 전체의 달력을 출력
cal 숫자 1 숫자 2: 숫자 2를 연도로 숫자 1을 월로 사용하여 해당 년월의 달력을 출력
date
- 형식
date : 현재 장치에 설정된 날짜와 시간을 출력
date mmddHHMMyyyy : yyyy년 mm월 dd일 HH시 MM분으로 날짜와 시 간 변경
rdate
- 인터넷에 존재하는 Time 서버(서버(시간 값을 제공해주는 서버)의 날짜와 시간을 출력
- 형식
rdate [옵션] <Time서버 주소>
find
- 검색
- 형식
find 범위 [범위] ... [범위] 옵션 값 [옵션] [값] ... [옵션] [값]
* 옵션을 검색할 내용으로 사용
* 옵션
- name : 이름으로 검색
- type : 개체 형식으로 검색 ( d: directory, f: file 등 )
- newer : 기준이 되는 대상보다 늦게 수정된 개체 검색 ex.( find . -newer test )
- exec : 일반적으로 마지막 옵션으로 사용
검색 결과물들을 대상으로 특정 명령어를 적용
# root 소유자의 특수권한 setuid를 불러온다. 에러 발생 시 쓰레기통(/dev/null)에 버리는 명령어
man
- 명령어 or 파일에 대한 자세한 설명(매뉴얼)을 확인
- 동작 후 추가 입력 키
enter : 한 줄 넘어가기 ( = j, 아래방향키 )
k : 한 줄 돌아가기 ( = 위방향키 )
spacebar: 한 화면 넘어가기 ( = page down )
page up : 한 화면 돌아가기
g : 문서의 첫 줄로 이동
G : 문서의 마지막 줄로 이동
/Patten : Patten 검색( 검색 후 n 눌러서 다음 찾기 )
q : 종료
시스템 종료
- shutdown -h now
- poweroff
- halt
- init 0 (추천)
시스템 재부팅
- shutdown -r now
- reboot
- init 6 (추천)
※ 기호
- . : 현재 디렉터리
- .. : 상위 디렉터리
- ~ : 모든 것
- > : 기호 왼쪽에 입력한 명령어가 동작하여 나오는 출력 내용을 기호 오른쪽에 저장
- (> : 덮어쓰기. >> : 내용추가)
- | : 파이프(pipe), shift + \
CLI의 단점인 '한 줄에 명령어 하나'를 보완하는 기호
하나의 대상에 여러 명령어를 적용
- 사용 방식
A | B : B(A)
ls -l /etc/ | more : more ( ls -l /etc )
프롬프트 출력 내용, 디렉터리
[root@localhost ~]#
root : 접속한 계정의 ID
localhost : 접속한 장치의 이름
~ : 현재 위치한 디렉터리
※ 디렉터리 : CLI에서의 폴더 개념
# : 사용 권한(#: 관리자 권한, $: 일반 사용자 권한)
기본 디렉터리
- 모든 운영체제는 디렉터리들의tree구조로 구성
> Linux는 / 아래에 어딘가에 모든 파일과 디렉터리들이 존재
- 최초 설치 시 있는 디렉토리
* '->' 기호는 symbolic link file을 의미, 기호를 기준으로 왼쪽 이름이 오른쪽에 연결
( / 내부에 기본적으로 있는 /bin, /lib, /lib64, /sbin의 경우 예전 버전에 있던 디렉토리들이 다른 곳에 합쳐지면서 기존 버전을 사용하던 사용자나 서비스들이 잘못된 동작을 하지 않도록 사용자 편의성을 제공해주는 link)
/ : root dir, 모든 파일을 가지고 있는 디렉터리
/bin : 공용 명령어(관리자와 일반 사용자가 전부 사용하는 명령어)가
들어있는 디렉터리로 연결되는 링크 파일
/boot : 부팅에 필요한 이미지 파일, 설정 파일들이 들어있는 디렉토리
/dev : 운영체제가 장치를 인식하여 장치 파일을 만들어주는 디렉터리
/etc : 각종 환경 설정 파일들이 들어있는 디렉터리
/home : 일반 사용자들의 홈 디렉터리가 만들어지는 기본 위치
* 홈 디렉토리 : 사용자 개인 디렉토리
/lib : 시스템 및 프로그램 동작에 필요한 각종 라이브러리가 모여있는 디렉 토리, 32bit + 64bit 공용
/lib64: 64bit 전용 라이브러리가 모여있는 디렉토리
/media: local device(내 장치에 물리적으로 연결된 장치)를
사용할 수 있도록 연결해주는 디렉터리
/mnt : remote device(local 제외한 나머지)를 사용할 수 있도록 연결해주 는 디렉토리
/opt : 추가적인 어플리케이션(응용프로그램)들의 설치 경로로 사용되는
디렉토리(/usr에 들어가지 않는 프로그램)
/proc : 실행중인 프로세스의 정보와 CPU, 메모리 등의 시스템 정보가 가상 파일로 저장된 디렉토리
/run : 실행중인 서비스와 관련된 파일이 저장되는 디렉토리
/root : 관리자 root의 홈 디렉토리
/sbin : 시스템을 제어할 수 있는 명령어(관리자 전용 명령어)가 들어있는 디 렉토리로 연결되는 링크파일
/srb : 서버를 위한 디렉토리, 외부 사용자가 다른 디렉토리보다 비교적 쉽 게 접근이 가능
/sys : 시스템이 필요로 하는 각종 파일들(kernel 데이터에 대한 구조 속성 등)이 들어있는 디렉토리
/tmp : 각종 프로그램이 실행되면서 생성되는 임시 파일/디렉토리들이 만들 어지는 디렉토리
/usr : 일반 사용자들을 위한 대부분의 프로그램이 들어있는 디렉토리
/var : 자주 변경되는 시스템 파일들(log 등)이 모여있는 디렉토리