-
[TIL #6] Linux 기초CodeStates_Backend/TIL (Today I Learned) 2022. 5. 2. 13:56
코드스테이츠 백엔드 부트캠프 39기 8일차
CLI 기초
CLI vs GUI
- CLI (Command Line Interface)
- 명령어 기반 인터페이스
- 그래픽 작업을 거치지 않아 컴퓨터의 자원을 적게 사용하며 더 빠르게 동작
- GUI (Graphic User Interface)
- 그래픽 기반 인터페이스
- 사용자가 쉽게 컴퓨터를 제어할 수 있지만 컴퓨터의 자원을 많이 사용하며 CLI 에 비해 느림
Linux
- 리눅스의 터미널은 키보드의 입력과 모니터의 출력으로 모든 작업을 할 수 있다.
- GUI 이전부터 CLI 가 존재했으므로 GUI 의 모든 작업은 CLI 로 할 수 있다.
- 아마존 웹 서비스(AWS)의 클라우딩 컴퓨팅처럼, 수십만개의 서버 컴퓨터를 사용할 때 모두 GUI 를 적용한다고 가정해보자. I/O 소스(키보드, 마우스, 모니터 등)와 컴퓨팅 자원소모(각 컴퓨터마다 그래픽 구현)가 감당이 될까?
- 현재까지도 자신의 모니터로 서버 컴퓨터에 접속하여 CLI 로 작업하는 경우가 대다수이다.
CLI 기본 명령어
1️⃣ pwd
✘ print working directory
✘ 현재 작업중인 폴더의 위치 출력
2️⃣ mkdir
✘ make directories
✘ 뒤에 생성할 폴더 이름 명시해야 함, 폴더(또는 파일)의 이름에 공백이나 특수문자가 있으면 백슬래시( \ )를 이용해 적용.
✘ CLI는 명령어와 폴더의 이름을 공백으로 구분
✘ 별다른 출력 없이 폴더 생성됨
mkdir helloWorld
3️⃣ ls
✘ list
✘ 특정 폴더에 포함된 파일이나 하위 폴더의 리스트를 출력
- [ ls -l ] : 파일의 포맷을 전부 표현
- [ ls -a ] : 숨어있는 폴더나 파일까지 출력
- [ ls -al ] 또는 [ ls -la ] : ' l ' 옵션과 ' a ' 옵션 둘 다 적용옵션
✘ 출력 결과 분석
[ ls - la ] 출력 결과 1 파일 / 디렉토리 소유자(파일을 만든 사람) 그룹 이외(파일은 만들지 않은 모든 사용자) 파일 : -
디렉토리 : dread write execute read write execute read write execute ✘ 예시 : [ drwxr-xr-x ]
"directory 이며 소유자는 read, write, execute / 그룹멤버는 read, execute / 이외사용자는 read, execute 권한을 가지고 있다."
[ ls - la ] 출력 결과 2 링크 수 소유자 소유그룹 용량(Byte) 최종수정시간 파일의 이름 23 khs staff 736 5 2 10:02 . 4️⃣ cd
✘ change directory
✘ 프롬프트의 현재 상호작용하는 폴더를 다른 폴더로 변경
5️⃣ touch
✘ 파일 생성
touch hi.txt
6️⃣ cat
✘ 파일 내용 터미널에 출력
✘ 원격 서버를 접속한 상태에서 너무 큰 파일을 출력 명령하면 골치 아플 수 있음..
7️⃣ rm
✘ remove
✘ 폴더나 파일 삭제
✘ 휴지통을 거치지 않음!
✘ 파일 삭제는 옵션이 필요하지 않지만, 폴더를 삭제할 때는 [ rm -rf ] 옵션 사용 필요, r = recursive / f = force
8️⃣ mv
✘ move
✘ 폴더나 파일을 이동
✘ 사용방법 : [ mv ] [ 옮길 파일 or 폴더명 ] [ 도착 폴더명 ]
mv bye.txt bye/
✘ 폴더나 파일의 이름 변경할 때도 사용가능
✘ 사용방법 : [ mv ] [ 이름 변경할 파일 or 폴더명 ] [ 변경할 이름 ]
9️⃣ cp
✘ copy
✘ 폴더나 파일을 복사
✘ 사용방법 : [ cp ] [ 원본 파일 이름 ] [ 새 이름 ] [ 복사할 위치 ] → [ 새 이름] , [ 복사할 위치 ] 중 1개 이상 필수(둘 다 가능)
✘ [ 복사할 위치 ] 없으면 현재 상호작용중인 폴더에 복사됨
✘ [ rm ] 과 마찬가지로 파일 복사 시에는 옵션이 필요하지 않지만, 폴더 복사 시에는 [ cp -rf ] 옵션이 필요
절대 경로, 상대 경로
✔︎ 절대 경로 : 기준점(루트폴더, ' / ' )으로부터 절대적인 위치
✔︎ 상대 경로 : 현재 위치(' . ')로부터의 상대적인 위치, 현재 위치의 상위 폴더는 ' .. ' 으로 표현
cd ../.. # 상위 폴더의 상위 폴더로 이동
✔︎ ' ~ ' 물결기호는 루트폴더로부터 사용자폴더(username)까지의 경로를 축약한 표현
SUDO
✔︎ 관리자 권한을 일시적으로 획득하는 명령어
✔︎ sudo 명령어를 입력하면 root 권한의 비밀번호를 입력해야 수행됨
[ sudo mkdir ] 결과 '소유자'가 root 로 나타난다. ✔︎ 사용자 권한으로는 사용자 폴더(khs) 안에서만 자유롭고, 그 밖에서는 root 권한 위해 sudo 명령어 써야함
텍스트 에디터 nano
CLI 텍스트 에디터는 다양하다. vim(vi), emacs, nano 등이 있으며 가장 쉬운 에디터가 nano이다. vim 에디터나 emacs 에디터는 매우 강력하고 다양한 기능을 제공하는 반면 따로 학습을 해야 할 정도로 진입장벽이 높다. vim 의 경우는 알아둘 필요는 있다.
nano 에디터 구조 설명
패키지 / 패키지 매니저
패키지(package; 묶음) 안에는 다음과 같은 것들이 포함되어있다.
- 프로그램 파일
- 프로그램 설치 파일
- 프로그램 설치 설명서
- 프로그램에 대한 정보를 담은 파일
패키지는 하나의 프로그램이 정상적으로 설치되고 동작하기 위한 모든 파일이 압축되어 있다. 프로그램 A를 설치하기 위해 프로그램 B가 필요하다는 연결 정보까지 담겨 있다. 패키지로 프로그램 A를 설치하는 명령을 한다면 자동으로 프로그램 B를 설치한 후 프로그램 A까지 설치하게 된다.
패키지 매니저는 패키지들의 설치, 변경, 삭제, 업데이트 등 관리를 편리하게 해주는 도구이다. 여러 패키지들은 분산되어 저장되어 있는데, 패키지 매니저가 없다면, 패키지들의 관리를 위해서는 각각의 위치를 다 알고 있어야 하고 주기적으로 직접 해당 위치에 방문해서 확인해야 한다. 현재에는 패키지 매니저 없이 각각 패키지들을 관리하는 것은 불가능에 가깝다.
패키지 매니저 brew (Mac OS)
📌 설치 과정
homebrew 설치 과정 1 homebrew 설치 과정 2 📌 brew 기본 명령어
- brew 자체 업데이트: brew update
- 업데이트 필요한 파일 조회: brew outdated
- 프로그램 업그레이드(업데이트): brew upgrade 프로그램 이름
- 프로그램 검색: brew search 검색어
- 프로그램 정보 확인: brew info 프로그램 이름
- 프로그램 설치: brew install 프로그램 이름
- 프로그램 삭제: brew uninstall 프로그램 이름
- 설치된 프로그램 보기: brew list
📌 애플 실리콘(M1) Mac 사용 시 주의 사항
chmod : 권한 변경 명령어
1. Symbolic method
Access class Operator Access Type u (user) + (add) r (read) g (group) - (remove) w (write) o (other) = (set exact) x (execute) a (all : u, g, o) chmod g-r filename # removes read permission from group chmod g+r filename # adds read permission to group chmod g-w filename # removes write permission from group chmod g+w filename # adds write permission to group chmod g-x filename # removes execute permission from group chmod g+x filename # adds execute permission to group chmod o-r filename # removes read permission from other chmod o+r filename # adds read permission to other chmod o-w filename # removes write permission from other chmod o+w filename # adds write permission to other chmod o-x filename # removes execute permission from other chmod o+x filename # adds execute permission to other chmod u+x filename # adds execute permission to user
chmod a=rw hello.java # -rw-rw-rw- chmod u= hello.java # ----rw-rw- chmod a+rx hello.java # -r-xrwxrwx chmod go-wx hello.java # -r-xr--r-- chmod a= hello.java # ---------- !주의! chmod u+rwx hello.java # -rwx------
2. Absolute form
숫자 7까지 나타내는 3 bits 의 합으로 표현
Permission Number r (read) 4 w (write) 2 x (execute) 1 # u=rwx (4 + 2 + 1 = 7), go=r (4 + 0 + 0 = 4) chmod 744 hello.java # -rwxr--r--
환경변수
Linux 기반 운영체제에서는 시스템 자체에 전역변수를 설정할 수 있다. 이 전역변수를 '환경변수'라고 한다.
환경변수는 지역 환경변수와 전역 환경변수로 분류된다. 지역 환경변수는 환경변수를 생성한 특정 사용자만 사용할 수 있는 환경변수이며, 전역 환경변수는 모든 사용자가 사용할 수 있는 환경변수이다.
❗️[export] 명령어로 현재 운영체제의 환경변수 목록을 확인할 수 있음.
📌 환경변수 임시적용
임시적용은 터미널을 종료하면 환경변수가 자동으로 삭제됨.
✔️ 지역 및 전역 환경변수 값 확인하기
ehco 명령어를 이용하며 환경변수 앞의 달러사인( $ )은 달러사인 뒤의 문자열이 환경변수라는 의미를 터미널에 전달하는 역할
echo $hello echo $urclass echo $bad_example
1. 지역 환경변수 임시적용
아래와 같이 등호 표시(=) 앞뒤에 반드시 공백이 없도록 하여 명령하면 된다. 저장하고자 하는 변수에 공백이 존재할 경우 값 전체를 따옴표로 감싸줘야 한다.
hello=codestates
2. 전역 환경변수 임시적용
지역변수와 마찬가지로 등호 표시(=) 앞뒤에 반드시 공백이 없어야 하며 저장하고자 하는 변수에 공백이 존재할 경우 값 전체를 따옴표로 감싸줘야 한다. [ export ] 명령어를 사용하여 새로운 변수를 추가할 수 있다.
export urclass="is good"
📌 환경변수 영구 적용
환경변수를 영구적으로 저장하여 터미널을 닫거나 재부팅해도 환경변숙가 사라지지 않음.
1. 지역 환경변수 영구적용
- [ ~/ ] 위치에서 ' .zshrc ' 또는 ' .bashrc ' 를 텍스트 에디터로 열고 [ export ] 명령어로 지역 환경변수를 작성한 후 저장한다.
- 이후 [ source .zshrc ] 커맨드를 입력하여 변경내용을 적용한다.
2. 전역 환경변수 영구적용
- [ /etc/ ] 위치의 ' profile ' 파일이 전역 환경변수를 저장하고 있는 파일이다.
- ' profile ' 파일은 기본적으로 권한이 r--r--r-- 로 설정되어 있어 수정이 불가한데, [sudo chmod 777 /etc/profile] 커맨드를 실행하여 권한을 부여한다.
- 지역 환경변수와 마찬가지로 에디터로 ' profile '을 연 후 [export] 명령어로 전역 환경변수를 작성한 후 저장한다.
export 명령어로 환경변수 작성 후 저장 - [source /etc/profile] 커맨드로 변경 내용을 적용한다.
적용 후 출력 'CodeStates_Backend > TIL (Today I Learned)' 카테고리의 다른 글
[TIL #8-1][Java] 자바 기초, JVM, JDK, 접근 제어자 etc.. (0) 2022.05.04 [TIL #7] Git (0) 2022.05.03 [TIL #5] HTML, CSS 이용한 웹페이지 구현 / 페어 프로그래밍 (2) 2022.05.02 [TIL #4] HTML/CSS Page Layout, 와이어 프레임 (0) 2022.05.01 [TIL #3] HTML, CSS (2) 2022.04.28 - CLI (Command Line Interface)