Linux
- 리눅스 소개
- 리눅스는 1991년에 리누스 토르발스 (Linus Torvalds)에 의해 개발된 오픈소스 운영체제
- 리눅스는 유닉스를 모방하여 만들어진 운영체제
- 맥 OS, 리눅스 등 많은 운영체제가 유닉스에 영향을 받아 만들어짐
- 이로 인해 맥북과 리눅스는 유사한 운영체제 환경
- 이에 반해 윈도우는 비교적 독자적인 방향
- 안드로이드 운영체제는 리눅스 커널을 기반으로 개발(2000년대 중반)
- 이후 많은 운영체제가 무료로 배포된 리눅스에 영향을 받아 만들어졌고, 리눅스 운영체제를 기본으로 다양한 프로그램을 추가한 수많은 배포판이 나오게됨
- 리눅스 배포판
- 리눅스에는 수백개의 배포판이 존재
- 리눅스커널이라는 공통된 운영체제 커널을 사용하되 갖가지 다른 응용프로그램을 다르게 조합해 만든, 리눅스 운영체제
- 크게는 redhat계열, debian계열이 존재
- 데비안계열은 ubuntu, debian등이 대표적
- 레드헷계열은 redhat, centos등이 대표적인 배포판
- 도커에서 사용하는 가벼운 alphine리눅스도 존재
- 일반 웹서비스에서는 우분투가 1위
- 상업용 시장에서는 레드헷이 1위
- 리눅스 주요 개념
- 커널
- 커널(kernel)은 컴퓨터 시스템의 핵심적인 부분으로, 하드웨어와 소프트웨어 간의 상호작용을 관리
- 메모리 관리, 입출력관리, 프로세스 관리 등
- 프로세스는 컴퓨터에서 실행 중인 프로그램을 의미
- 파일 시스템 구조
- 파일 시스템은 계층적 구조를 가지며, 가장 상위에는 루트 디렉토리 (/)
- 주요 디렉토리로는 /bin, /etc, /home, /var, /usr 등
- /home은 사용자의 홈 디렉토리, /etc는 시스템 설정 파일을 저장
- 사용자와 그룹
- 리눅스에서 사용자는 여러 그룹에 속하게 하여 그룹으로 관리
- 권한 관리를 통해 특정 사용자나 그룹이 파일이나 디렉토리에 접근할 수 있는 권한을 지정
- 쉘 (Shell)
- 사용자와 운영체제 간의 인터페이스 프로그램. 쉘은 사용자의 명령을 해석하여 운영체제 커널에 전달
- 대표적인 쉘로는 bash, zsh 등
- 리눅스 실습 준비
- 가상환경에서 리눅스 설치
- vmware 가상환경 지원 프로그램 설치
- 우분투 이미지 다운로드
- 우분투 OS 설치
- 주요 쉘 명령어
- 디렉터리 관련
- pwd
- mkdir
- ls명령어
- cd
- 디렉토리 이동 명령어
- 절대경로 이동 cd /root/abc/cbd
- 상대경로 이동 cd ..
- cd만 치면 홈 경로로 이동
- cd / 를 치면 root경로로 이동
- .은 현재경로를 의미, ..은 상위경로를 의미
- 자동완성과 히스토리
- tap키를 눌러 자동완성
- history명령어로 이전 명령어 조회
- 도스키 사용(상하 화살표키)
- clear
- 파일 관련
- rm
- 파일이나 디렉토리 삭제
- rm, rm –f, rm -rf
- cp
- 파일이나 디렉토리를 복사
- cp –r 하면 디렉토리까지 모두 복사
- mv
- 파일이나 디렉토리를 이동
- 잘라내기와 같은 기능
- touch
- 용량 0인 파일을 생성
- 이미 존재할 경우에는 수정 시간을 변경
- cat
- 텍스트로 작성된 파일을 화면에 출력
- more 명령어는 페이지 단위로 출력
- head, tail
- 텍스트로 작성된 파일의 앞 10행, 마지막 10행 출력
- n 숫자 옵션을 주어 원하는 행숫자별로 출력 가능
- 리다이렉션( >, >>, |, < 등)의 활용
- echo는 터미널 화면에 출력하는 명령어
- echo와 > : 표준 출력의 결과를 덮어쓰기로 파일로 저장하는 기능
- echo와 >> : 표준 출력의 결과를 파일에 추가모드로 저장하는 기능
- sort와 < : 파일의 내용을 전달하여 정렬 후 출력
- | 은 왼쪽 실행문의 결과값을 오른쪽 실행문의 입력값으로 전달
- grep
- 파일 내에서 특정 패턴이나 문자열을 검색
- 기본 사용법
- grep [옵션][패턴] [파일명]
- -r옵션 : 디렉토리 내 모든 파일에서 검색
- -i옵션 : 대소문자 구분 없이 검색
- -n옵션 : 라인수 출력
- 예시)grep -rin "hello" mydir
- hello 문자열을 라인수와 함께 mydir폴더에서 대소문자 구분 없이 검색
- find
- 파일이나 디렉토리를 검색하여 위치 출력
- 기본사용법
- find [경로][옵션] [행동]
- -name옵션 : 파일명으로 검색
- -type: 타입으로 검색 (f는 파일, d 디렉토리 등 파일타입으로 검색)
- -exec, \, {}
- exec : find로 찾은 결과에 대해 실행명령.
- \ : exec의 종료지점을 의미
- {} : find로 찾은 대상이 담기는 공간을 의미
- 사용예시
- find . -type f -name ".txt" : 현재폴더에서 파일타입 중에 .txt로 끝나는 파일명 검색
- 활용예시
- find . -name ".txt" | xargs grep -n “hello”
- |(파이프라인)을 통해 그 다음 명령어로 전달
- xargs는 입력받은 파일을 한줄씩 읽는것을 의미
- find . -name ".txt" -exec echo {} \;
- find로 찾은 파일에 대해 echo명령어 실행
- find . -name "*.txt" -exec cp {} ./testFolder/ \;
- 사용자와 그룹
- 리눅스에서 super권한이 있는 root계정과 그외 계정으로 사용자는 구성
- 신규 사용자 생성 및 비밀번호 입력
- useradd newuser
- passwd newuser
- 사용자 교체후 파일권한 관련 테스트
- su - newuser 엔터 후 전환하고자 하는 계정의 비밀번호 입력
- 원래 사용자로 돌아오려면 exit
- root계정으로 교체하려면 su -
- sudo 키워드는 현재 계정에서 root 권한을 이용하여 명령어를 실행하는 프로그램(현재 사용자의 비밀번호를 입력)
- /etc/sudoers 파일에 sudo를 쓸수 있는 사용자와 명령어가 따로 정의돼 있어서 아무사용자가 아무명령어를 사용하는 것은 불가
- 파일권한
- chmod xxx test.txt
- test.txt파일에 대하여 소유자:소유그룹:그외(other)에 대해 권한을 부여
- 숫자 표기법
- 권한은 rwx(421) 권한으로 구성(Read, Write, Execute)
- 그러므로 chmod 777 test.txt 형식으로 변경
- test.txt파일의 소유자,그룹,other에게 rwxrwxrwx권한을 부여한다는 의미
- 기호적 표기법
- 권한을 변경할 때, 숫자 대신 기호를 사용하는 방법
- chmod u+x test.txt: 소유자에게 실행 권한 추가
- chmod g-w test.txt: 그룹의 쓰기 권한 제거
- chmod o=r test.txt: 다른 사용자의 권한을 읽기만 가능하게 설정
- 파일 소유자와 그룹
- chown 소유자:소유그룹 파일명
- 특정파일의 소유자와 그룹을 새롭게 부여하는 것
- 그외
- 프로세스 관련
- ps : 프로세스 목록조회
- kill -9 [PID] : 프로세스 종료
- 패키지 관련(yum, apt-get)
- yum은 레드헷 계열, apt-get는 데비안 계열의 패키지 관리 도구
- ex)sudo apt-get install openjdk-11-jdk
- 네트워크 관련
- ifconfig : IP정보 등 네트워크 설정정보 출력
- ping [hostname/IP] : 네트워크 연결상태 확인
- nc -zv 또는 telnet : 특정 port까지 열려있는지 확인
- netstat : 현재 서버에 연결된 네트워크 정보 출력
- ssh : 원격 호스트와의 터미널 세션을 제공 ex)ssh [username]@[hostname/IP]
- scp : 파일 전송 ex)scp [source][destination]
- 쉘 제어문
- if문(조건문)
- if [ 조건 ]; then
조건이 참일 때 실행할 명령
elif [ 다른 조건 ]; then첫 번째 조건이 거짓이고 다른 조건이 참일 때 실행할 명령
else모든 조건이 거짓일 때 실행할 명령
fi
- for문(반복문)
for 변수 in 항목들; do반복할 명령
done
- vi 에디터
- vi는 UNIX 기반 시스템에서 가장 오래된 텍스트 에디터 중 하나
- 리눅스에서 vi의 후속모델인 vim와 nano등의 에디터도 많이 사용
- vi는 명령모드와 입력모드로 구성
- 명령모드 : 텍스트를 편집하는 대신에 커서를 이동하거나 텍스트를 삭제/복사/붙여넣기 하는 등의 명령을 수행
- 입력모드 : 텍스트를 입력하거나 수정
- 주요 명령어
- 파일 열기
- 입력모드
- i : 현재 커서부터 입력
- o : 다음줄커서부터 입력
- x : 현재 커서가 위치한 단어 삭제
- dd : 현재 커서가 위치한 행 삭제
- yy : 현재 커서가 위치한 행 복사
- p : 현재 행 이후에 붙여넣기
- 명령모드
- esc
- :w
- :q
- :wq
- G
- gg
- Ctrl + f
- Ctrl + b
- /
- 검색하기
- 예를 들어, "hello"를 찾으려면 /hello 입력 후 엔터
- 쉘 명령어 스크립트 작성
- 쉘 명령어를 파일형태로 스크립트로 작성하고 실행하는 것이 가능
- 파일 확장자 .sh
- if, else 등 프로그래밍 언어 사용 가능
- 실행방법
- 실습1
- echo를 사용하여 script pratice1 start 출력
- 새 디렉터리 'mydir' 생성
- 'mydir'로 이동
- 'mydir' 안에 빈 파일 'file1.txt'와 'file2.txt' 생성
- 'file1.txt'에 echo를 사용하여 Hello from file1 메시지 작성
- 'file2.txt'에 echo를 사용하여 Hello from file2 메시지 작성
- 'file1.txt'를 'file1_backup.txt'로 복사
- 'file2.txt'를 file2_renamed.txt로 이름 변경
- Script completed 문구 출력
- 실습2
- 쉘 프로그래밍을 통해 if문을 활용해서 출력해보기
- 쉘 프로그래밍을 통해 100개의 파일을 만들어보기
- 실습3
- find와 grep을 사용하여 현재 폴더에서 txt로 끝나는 파일에서 hello 문자열 검색하여 어떤 파일의 몇번째 line에 해당 문자열이 있는지 결과 저장
- 결과가 저장된 파일을 cat을 이용하여 출력