master, slave VM의 터미널에서
yum -y update : 설치된 패키지들에 대한 업데이트 진행(-y 옵션은 y/n을 물을 때 모두 y 입력)
실습에 사용할 OS는 CentOS 8.
오늘은 리눅스상에서 사용하는 기초 명령어들을 먼저 나갈 예정.
뭔가 역사 관련 내용은 자격증 시험에나 필요한 것.
리눅스의 시작은 커널을 만든 것이다.
-> 0.00 개발 후 0.01 배포
리눅스에서 날짜 관련 기능들을 보면, 시작 날짜는 유닉스의 탄생일인 1970.01.01
- 리처드 스톨먼의 GNU 프로젝트 : GNU(General Public License) is Not Unix
-> 프로그램을 어떤 목적으로든 실행할 수 있는 자유
-> 소스 코드에 대한 접근을 자유롭게.
-> 개선과 발표의 자유, 재배포할 수 있는 자유
리눅스는 유닉스 계열의 OS : 리눅스 = 리누스 + 유닉스
- 리눅스 계열의 OS에는
1. Debian 계열 : Ubuntu, Kali linux
2. Slackware 계열 : 오픈 SUSE
3. Redhat 계열
- Fedora linux(상업적 배포 전 뿌리는 용도)
- CentOS linux(페도라 배포를 통해 수정된 버그들을 보완한 버전)
- Enterprise linux(보완 단계를 모두 거친 상업적 리눅스)
-> 요즘 페도라는 클라이언트 OS에 초점을 맞춰서 배포한다.
-> CentOS, Enterprise는 같은 버전에서 기능이 거의 흡사하다. 후자에는 레드햇 사의 서비스가 포함되어 있다.
-> CentOS도 상업적으로 사용하려면 라이선스 비용을 내야 한다.
중심의 커널, 그 밖의 쉘, 그 밖의 운영체제로 이루어진 것이 OS.
- 리눅스의 특징
-> 공개 SW. 무료 사용 가능.
-> 유닉스와의 완벽한 호환성을 유지
-> 서버용 OS로 많이 사용된다.
-> 편리한 GUI 환경 제공
- 리눅스의 구조
1. Kernel : 리눅스의 핵심
-> 프로세스/메모리/파일 시스템/장치 관리
-> 컴퓨터의 모든 자원 초기화 및 제어 기능
2. Shell : 사용자 인터페이스
-> 명령 해석/프로그래밍 기능
-> 리눅스 기본 쉘 : Bash Shell(Linux Shell)
3. Application Program(응용 프로그램)
-> 각종 프로그래밍 개발/문서 편집/네트워크 관련 도구 등
* Prompt : 사용자의 명령 입력을 기다리는 표시
-> 쉘에 따라 다르게 나타난다.
[root@master: ~]# (여기에 명령 입력)
root : 사용자 ID
master : host 이름
~ : 현재 내가 작업하고 있는 디렉터리. 기본값으로는 맨 마지막 경로만 표현된다.
-> ~ 표시는 해당 사용자의 홈 디렉터리를 나타내는 기호
-> 일반 사용자는 /home/[사용자 ID], root 사용자는 /root가 홈 디렉터리
-> 대충 사용자의 바탕화면이라고 생각하면 된다.
# : 관리자
-> $는 일반 사용자
루트 디렉터리는 ' / '
-> 예시 : /home : 루트 디렉터리( / )에 있는 home 디렉터리로 들어온 것
명령어 작성 시...
-> Ctrl + w : 커서 앞의 단어 지우기
-> Ctrl + u : 커서 앞의 전체 단어 지우기
-> Ctrl + a : 맨 앞으로 커서 이동
-> Ctrl + e : 맨 뒤로 커서 이동
* 명령의 기본 구조 : 명령어 [옵션] [인자]
- ls -l 입력 시 각 필드들의 의미
ls -l을 입력하면 아래와 같은 형식으로 나오는데,
-rw-------. 1 root root 1243 Aug 19 17:12 anaconda-ks.cfg
-> 첫 번째 필드(-rw-------)는 권한 관련. 맨 앞이 -면 파일, d면 디렉터리, l이면 링크.
그 뒤는 소유자, 그룹, 일반 사용자의 권한을 나타낸 것
-> 두 번째 필드(1)는 하드 링크 수
-> 세 번째 필드(root)는 이 파일을 만든 사람(소유자)의 ID
-> 네 번째 필드(root)는 이 파일을 소유하고 있는 그룹 ID
-> 다섯 번째 필드(1243)는 이 파일의 크기(바이트)
-> 여섯 번째 필드(Aug 19 17:12)는 이 파일을 생성/수정한 날짜
-> 일곱 번째 필드(anaconda-ks.cfg)는 이 파일의 명칭
* 일상적으로 쓰는 명령어
date : 날짜와 시간 출력
clear : 위에 출력한 내용 지우기. CentOS에서는 Ctrl + l로도 가능
man [명령어] : 명령어의 사용법을 화면에 출력
exit : 터미널 종료(코어 버전이라면 로그아웃)
* 리눅스는 파일을 '.파일명'으로 만들면 숨김 파일이 된다.
- 리눅스 파일의 종류와 특징
-> 리눅스는 모든 것을 파일의 형태로 인식한다.
1. 일반 파일 : 리눅스에서 사용하는 대부분의 파일
2. Directory : 하드디스크 상에서 분산된 파일들의 주소 값/리스트 정보 값을 가지고 있는 파일
3. Symbolic link : 대충 바로가기라고 생각하면 된다.
4. 장치 파일 : CPU, 메모리, 하드디스크 등도 파일로 인식한다.
file 파일명 : 어떤 종류의 파일인지 확인하는 명령어. 파일명은 확장자까지 전부 작성(풀네임으로)
-> 리눅스는 확장자가 의미가 없다. 파일의 종류가 중요할 뿐이다. 파일명에 확장자 붙어있는 건 그냥 구분을 위한 것.
-> Tab 키로 자동완성 가능
- 디렉터리 계층 구조
리눅스는 파일을 효율적으로 관리하기 위해 디렉터리를 계층적으로 구성
특정 디렉터리 밑의 디렉터리는 하위(서브) 디렉터리. 서브 디렉터리를 포함하고 있는 디렉터리는 상위(부모) 디렉터리
-> 상대적인 것이다.
-> 루트 디렉터리를 제외한 모든 디렉터리는 부모 디렉터리가 있다.
기억할 만한 것은
home, root, usr, boot, etc, mnt, tmp, var
- 라이브러리 파일
가끔 파일 중에 확장자가 .dll인 파일을 본 적이 있다. 이건 Windows에서 쓰는 라이브러리 확장자. 리눅스에서는 .lb 라는 확장자를 사용한다.
어떤 응용 프로그램 내부의 원시 코드가 컴파일을 거쳐 실행 파일이 되는데, 이런 실행 파일이 여러개가 연달아 작동하며 하나의 App이 된다. 그런데 실행 파일 하나하나마다 막대한 양의 코드를 매번 컴파일하면 App이 무거워진다. 그러니 실행 파일들에 공통적으로 있는 코드들을 뽑아서 소량의 코드로 이 공통 코드들을 불러올 수 있게 하면 편리할 것이다. 필요할 때 불러오는 이런 코드 파일이 라이브러리 파일이다.
이러한 라이브러리 파일들이 리눅스에서 저장되어 있는 위치가 usr 디렉터리다.
작업(현재) 디렉터리 : 현재 사용 중인 디렉터리
-> ' . ' 기호로 표시, pwd 명령어로 확인 가능
홈 디렉터리 : 처음 사용자를 만들 때 지정되는 각 사용자에게 할당된 디렉터리
-> 사용자는 홈 디렉터리 아래에 파일이나 서브 디렉터리를 만들어 작업 가능
-> ' ~ ' 기호로 표시.
-> 예시) user1의 홈 디렉터리로 이동 : cd ~user1
- 경로명 : 파일 시스템에서 디렉터리 계층 구조에 있는 특정 파일이나 디렉터리의 위치 표시.
1. 절대 경로 : 항상 루트 디렉터리 / 부터 시작
-> 반드시 / 로 시작
-> 루트 디렉터리부터 시작해 특정 파일이나 디렉터리의 위치까지 이동하며 거치는 모든 중간 디렉터리의 이름 표시
-> 특정 위치를 가리키는 절대 경로명은 항상 동일하다.
2. 상대 경로 : 현재 디렉터리를 기준으로 시작
-> / 이외의 문자로 시작
-> 현재 디렉터리를 기준으로 서브 디렉터리로 내려가면 그냥 서브 디렉터리명을 추가
-> 상위 디렉터리로 가려면 ' .. ' 추가
-> 상대 경로명은 현재 디렉터리가 어디냐에 따라 달라진다.
-> 작업 위치에 따라 특정 디렉터리로의 접근이 절대 경로보다 쉽다.
경로명 작성 시 몇몇 경우가 아니면 /root나 /root/나 똑같다.
상위 디렉터리로 갈 때 cd .. 이나 cd ../이나 똑같다는 것.
cd의 인자 값은 디렉터리다. 파일명이 들어가면 에러 발생.
pwd는 절대 경로 값을 보여준다.
- 파일/디렉터리 이름의 규칙
1. 파일과 디렉터리 이름에는 /를 사용할 수 없음
2. 파일과 디렉터리 이름에는 알파벳, 숫자, 붙임표(-), 밑줄(_), 점(.)만 사용
3. 파일과 디렉터리 이름에는 공백 문자, *, |, “, ‘, @, #, $, %, ^, & 등을 사용하면 안 됨
-> 이런 특수문자들은 이미 사용처가 있다.
4. 파일과 디렉터리 이름의 영문자는 대문자와 소문자를 구별하여 다른 글자로 취급
5. 파일과 디렉터리 이름이 . (마침표)로 시작하면 숨김 파일로 간주
- 홈 디렉터리 이동 방법 4종
1. 절대 경로명으로
2. 상대 경로명으로
3. 홈 디렉터리를 나타내는 기호 ~를 사용
4. 인자 값 없이 cd만 입력하면 홈 디렉터리로 이동
- ls : 디렉터리 내용 보기
-> 옵션들 기억하기
-a : 숨김 파일을 포함한 모든 파일의 목록
-d : 디렉터리 자체의 정보 출력
-i : 첫 번째 행에 inode 번호 출력
-l : 파일의 상세 정보 출력
-A : ' . '와 ' .. '를 제외한 모든 파일의 목록. 별로 필요 없다
-F : 파일의 종류 표시. *(실행 파일), @(심벌릭 링크), /(디렉터리)
-L : 심벌릭 링크 파일의 경우 원본 파일의 정보 출력
-R : 하위 디렉터리의 목록까지 출력
* inode 번호 : 리눅스는 파일을 이해할 때 inode 번호로 이해한다.
ls -l에서
' - '는 일반(정규) 파일, d는 디렉터리 파일, l는 심벌릭 링크 파일.
-> 나머지는 기억 안 해도 무방
-> 비슷한 명령으로는 dir과 vdir이 있다.
- mkdir : 디렉터리 만들기
mkdir [옵션] [디렉터리명]
옵션
-> -p : 하위 디렉터리를 계층적으로 생성할 때 중간 단계의 디렉터리가 없으면 자동으로 중간 단계의 디렉터리를 생성하며 전체 디렉터리 생성
-> 예시 : mkdir /home/user1/TEST/AAA/AAA를 실행할 때, 디렉터리 AAA가 없다면, 원래는 에러 발생. 하지만 -p 옵션을 사용하면 AAA가 자동 생성된다.
mkdir [디렉토리명 1] [디렉토리명 2] [디렉토리명 3]
-> 이런 식으로 여러 디렉터리를 한 번에 만들 수도 있다.
- rmdir : 디렉터리 삭제
rmdir [옵션] [디렉터리]
-> 해당 디렉터리가 비어 있어야만 사용 가능하기에, 잘 안 씀
-> 그래서 쓰는 게 rm -r(확인 메시지 없이 삭제하려면 -rf 옵션 사용)
- 실습
1. 루트 사용자 홈 디렉터리로 이동
2. linux_ex 디렉터리 생성
3. 생성된 linux_ex로 이동
4. ch2 디렉터리 생성
5. ch2 디렉터리로 이동
6. 동시에 one, two, three 디렉터리 생성
7. one/tmp/test 디렉터리 생성
8. two, three 디렉터리 동시에 삭제
- 파일 관련 명령어
1. cat : 파일의 내용을 보는 명령
-> cat [파일명]
-> -n : 행 번호를 붙여 출력하는 명령
-> 일반 파일 보는 용도. 디렉터리를 인자 값으로 넣으면 에러 발생.
-> 단점 : 코어 버전이라면 마우스가 없는데, 출력하는 파일의 양이 많으면 위 내용을 볼 수 없다. 행 개수가 많지 않을 때나 쓰는 명령어.
그래서 쓰는 명령어가 more [옵션] [파일]
-> 이러면 한 화면 단위로 내용이 끊어져서 나온다.
-> 스페이스바 : 다음 화면 출력, enter : 한 줄씩 스크롤, /문자열 : 문자열 검색, q : 종료
less [파일] : 파일 내용을 화면 단위로 출력. 스크롤되어 지나간 내용도 확인 가능.
-> j : 한 줄씩 다음 행으로 스크롤
k : 한 줄씩 이전 행으로 스크롤
스페이스바/ctrl+f : 다음 화면으로 이동
ctrl+b : 이전 화면으로 이동
-> 예전에 사용하던 서버용 키보드에서는 hjkl이 좌상 하우였다.
tail [옵션] [파일]
-> 옵션으로는
+행 번호 : 지정한 행부터 끝까지 출력
-숫자 : 화면에 출력할 행의 수 지정
-f : 파일 출력을 종료하지 않고 주기적으로 계속 출력
-> tail -f /var/log로 로그 실시간으로 보기 가능
! : /etc/hosts 파일에는 네트워크 정보가 있다.
2. cp : 파일을 복사하는 명령
-> cp [옵션] [파일 1] [파일 2] : 파일 대신 디렉터리도 가능. 앞이 복사할 대상, 뒤가 붙여 넣을 대상
-> cp /etc/hosts /root/test1 : test1이라는 파일에 덮어 씌우는 것
-> cp /etc/hosts /root/test1/ : test1 디렉터리 하위에 복사
-> 알아둘만한 옵션으로는
-i : 파일 2가 존재하면 덮어쓸 것인지 물어본다.
-r : 디렉터리를 통째로 복사할 때 지정
cp 인자 경우의 수
1) 파일-> 디렉터리 : 파일을 디렉터리로 복사하는 경우. 이름이 그대로인 상태로 복사된다.
2) 파일-> 파일 : 파일을 덮어 씌운다.
3) 인자를 여러 개 지정할 경우 : 일단 마지막 인자는 반드시 디렉터리여야 한다. 앞의 파일들을 전부 마지막 디렉터리에 복사한다는 의미
4) 디렉터리-> 디렉터리 : 붙여 넣을 디렉터리가 없는 디렉터리라면 현재 위치에 디렉터리를 만든다.
alias를 실행시켜 보면 특정 명령어를 실행할 때, 기본으로 붙는 옵션을 확인할 수 있다.
두 번째 인자가 ' . '이면 현재 디렉터리로 파일명 그대로 복사
3. 파일을 이동/삭제하는 명령
mv(같은 이름의 파일이 있을 경우 확인하는 -i 옵션이 자동 장착되어 있다.)
-> 파일을 이동 : 다른 디렉터리를 인자로 쓸 경우
-> 파일의 이름을 변경 : 같은 디렉터리를 인자로 쓸 경우
rm
실습
1. ch2 디렉터리로 이동
2. /etc/hosts 파일을 test.org 파일로 복사
3. test 디렉터리 생성
4. test.org 파일을 test 디렉터리로 복사
5. test 디렉터리에 있는 test.org 파일을 test.bak로 파일명을 변경
6. ch2/test.org 파일을 삭제
7. test 디렉터리에 있는 test.bak 파일을 ch2 디렉터리로 test.org로 복사
8. test 디렉터리 삭제
.bak는 백업 파일. 보통 설정 파일을 다른 경로에 백업 파일을 만들어놓고, 원본에 문제가 생기면 가져와서 복구하는 방식으로 사용한다.
4. 하드 링크와 심벌릭 링크를 생성하는 명령
ln [옵션] [원본 파일] [링크 파일(대상)]
-> 원본을 대상으로 링크를 걸어라
파일 링크 : 기존 파일에 새로운 파일명을 붙이는 것.
- 하드 링크 : 기존 파일에 새로운 파일명을 추가로 생성
-> 모든 디렉터리는 하드 링크가 최소 2개 이상.
-> 주목적은 백업
-> 복사와의 차이점 : 복사는 동기화가 안된다.
-> 원본과 inode 번호가 같다
-> 원본을 수정하면, 하드 링크 파일도 바뀐다
-> 대충 생각하면 동기화지만, 정확히는 아니다. 같은 데이터 블록을 가리키고 있는데 파일명만 다른 것.
-> 서로 위치가 어디 있든 동일한 데이터에 접근 가능
-> 원본과 용량 같다.
ln
- 심벌릭 링크 : 원본 파일을 가리키는 새로운 파일을 생성
-> 원본과 inode 다름.
-> 원본 파일의 inode 번호 주소를 가지고 있다.
-> 심볼릭 링크로 만들어진 새로운 파일을 수정하면, 원본 파일을 타고 디스크의 데이터를 수정한다.
-> 심볼릭 링크 파일을 수정하면, 원본도 수정된다
-> 원본 파일이 삭제되면 길을 잃는다
-> 다시 같은 이름으로 파일을 갖다 놓으면 다시 길을 찾는다.
-> 원본 파일보다 용량이 훨씬 적다. 원본의 inode 번호 주소만 갖고 있으면 되니까.
ln -s
- 리눅스 파일의 구성
파일 = 파일명 + inode + 데이터 블록
– 파일명 : 사용자가 파일에 접근할 때 사용하는 파일의 이름
– Inode : 파일에 대한 정보를 가진 특별한 구조체. 외부적으로는 번호로 표시, 내부적으로는 파일의 종류 및 크기,
소유자, 파일 변경 시간, 파일명 등 파일 상세 정보와 데이터 블록의 주소를 저장
같은 inode 번호를 가졌다는 것은 파일 상세 정보와 데이터 블록 주소가 같다는 의미. 즉 같은 파일이라는 것이다.
-> 같은 번호를 뭐하러 쓰는가? : 파일 백업 용도
5. 빈 파일을 만드는 명령
touch
-> 빈 파일 생성 : touch [파일명]
-> 존재하는 파일을 인자 값으로 사용하면 시간 값을 변경할 수 있다.
ls -l 하면 나오는 시간의 의미는
-> ctime : 파일 퍼미션 변경, 소유주/그룹 변경한 시간
-> atime : 마지막 접근 시간. 열거나 명령어로 접근했을 때
-> mtime : 마지막 수정 시간. 파일의 내용을 변경했을 때
grep : 파일 내용 검색
*** find : 지정한 위치에서 조건에 맞는 파일 검색
find [경로 검색 조건] [동작]
경로 검색 조건이 옵션이라고 보면 된다.
-name, -type, -user, -perm 등
동작은 찾은 파일에 실행할 동작
-exec, -ok, -print, -ls 등
find / -name test1 -exec rm -f {} \;
whereis, which : 명령어의 위치를 찾아 절대 경로 출력
-> whereis 명령은 지정한 명령을 고정된 특정 경로에서 탐색
-> whereis [-bms] [파일]
-> b(바이너리 파일만 검사), m(매뉴얼 파일만 검사), s(소스 파일만 검사)
-> which 명령은 alias나 PATH 환경 변수로 지정된 경로에서 파일을 찾는다
-> which [명령어]
명령어 입력 > 실제 실행 파일 위치를 검색 > 루트 디렉터리 밑의 모든 파일을 뒤질 수는 없다. "명령어는 여기에 있다"라고 명령어의 경로를 알려주는 것이 PATH 환경변수
-> 명령어가 작동을 안 한다면 환경변수부터 확인해야 한다.
3교시 중후반 다시 듣기(라이브러리 파일 설명 등)
6교시 후반 다시 듣기
7교시 중반 inode 설명 다시 듣기
'교육' 카테고리의 다른 글
[25일 차] 21.08.24 : Linux Server 4 (0) | 2021.08.24 |
---|---|
[24일 차] 21.08.23 : Linux Server 3 (0) | 2021.08.23 |
[22일 차] 21.08.19 : Windows Server 11, Linux Server 1 (0) | 2021.08.19 |
[21일 차] 21.08.19 : Windows Server 10 (0) | 2021.08.18 |
[20일 차] 21.08.17 : Windows Server 9 (0) | 2021.08.17 |
댓글