🦁멋쟁이사자처럼 백엔드 부트캠프 13기 🦁
TIL 회고 - [70]일차
🚀70일차에는 도커를 이용해서 리눅스 명령어를 더 실습해볼 수 있었다.
학습 목표 : 권한부여 및 네트워크 명령, 검색 기능 등을 리눅스 명령어로 학습할 수 있음
학습 과정 : 회고를 통해 작성
Dockerfile - 필요 패키지 설정
- 매 docker-compose 마다 which, git 등의 패키지를 설치하지 않아도
- Dockerfile 에서 기본설정으로 필요패키지가 설치된채 가상환경이 실행되게 설정 가능
- RUN yum install -y [필요패키지] 를 넣어주면된다.
- 적용후에는 down을 시킨 후 docker-compose up -d --build --force-recreate
새로운 설정들을 반영해서 다시 실행
- 기초설정에서 패키지들을 정의해놓으면 자동으로 설치되는 것을 확인 가능
권한 부여
- d 로 시작 : 디렉토리 임을 나타냄
- d 가 아니면 : 파일을 나타냄
- 그 외 나머지 9자리인데 3개씩 묶어줄 수 있음
첫번째 3개는 소유자의 권한 >> RWX : 읽기 / 쓰기 / 실행
두번째 3개는 그룹의 권한
세번째 3개는 기타의 권한 - R(READ), W(WRITE), X(EXECUTE) 순서
➡️2진수를 나타내므로 R (2의 2제곱 = 4), W (2의 1제곱 = 1), X (2의 0제곱 = 1)
ex. -WX일 경우에는 읽기가 허용되지 않고 쓰기, 실행만 가능하다는 의미
(-) 로 허용하지 않음을 나타낼 수 있다. - 따라서 파일의 권한이 777이면 (4+2+1, 4+2+1, 4+2+1)
소유자, 그룹, 기타의 모든 권한이 읽기,쓰기,실행이 가능하다는 의미
ex. 700 이면 소유자만 읽기, 쓰기, 실행이 가능하다는 의미 - 세자리 숫자로 권한을 요약 가능
유저 추가와 패스워드 설정
- 첫 유저 생성에는 BAD PASSWORD라고 8자이상, 보안에 취약한 비밀번호이면 경고를 출력하긴 하지만
- 비밀번호를 재입력하면 비밀번호 설정이 완료
bash_profile 스타일 적용
- source로 .bash_profile을 실행했을때 echo로 설정했던 테스트할 코드가 출력되고
- export 명령으로 설정했던 스타일이 적용되어서 명령창 색 설정이 가능
echo "export PS1='\\033[01;31m[\\u[\\033[01;32m]@\\h [\\033[01;34m\\w][\\033[00m]$ '" >> .bash_profile
- vi 편집기로 직접작성해주어도되지만 echo 명령어와 >> 로 .bash_profile에 추가 가능
- vi편집기 입력 : i 입력
- gid =1002, groups=1002 처럼 그룹이 자동으로 만들어져서 그 그룹에 속해지는 것을 확인 가능
- cat /etc/passwd 로 확인해보면 계정정보가 어떻게 저장되어있는지도 확인 가능
- groupdadd liongroup : 그룹을 생성
- useradd -g liongroup lionuser : liongroup 그룹에 lionuser 유저를 추가할 수 있다.
이는 유저 생성 시 임의로 그룹이 만들어져서 추가된 것이아니라
useradd를 통해 그룹에 추가하면서 유저를 같이 생성하기때문에 이 lionuser는 liongroup에 속하게됨
- usermod -aG liongroup owen
➡️-aG : -a (append - 덧붙이기 기능) + -G(group - 지정한 그룹에 사용자를 추가)
usermod 명령어로 하나의 사용자가 여러 그룹을 가질 수 있게할 수 있다. - getent group liongroup
➡️getent 명령어로 group 의 liongroup 개체들을 얻어낼 수 있다. - gpasswd -d isak liongroup
➡️그룹에서 그룹원 제거
- userdel 로 유저를 삭제할 수 있는데 삭제하려는 유저의 그룹안에 그룹원이 존재하면 삭제가 되지 않음
이럴 경우 gpasswd -d 를 통해 그룹원을 먼저 제거한 후 유저를 삭제해주어야 함
- jjtest 유저를 삭제하더라도 jjtest 유저의 그룹인 jjtest은 삭제되지 않았다고 경고문
- getent group jjtest : jjtest의 그룹을 확인해보면 여전히 존재하는 그룹임을 확인가능
- cd ~ : 홈디렉토리로 이동하게됨 (~)
mkdir
- 디렉토리 생성 명령어
- test 디렉토리를 만들고 -p 옵션을 활용하면
test 디렉토리가 존재할 경우에는 그 하위디렉토리로 child, grandchild를 만들고
test 디렉토리가 존재하지 않으면 test 디렉토리를 포함하여 그 하위 디렉토리들을 생성
rmdir
- 디렉토리 삭제 명령어
- rmdir grandchild/ ➡️grandchild 하위디렉토리들은 모두 삭제
- rm -r test ➡️ -r 옵션을 사용하면 좀 더 강제적으로 삭제를 진행하므로
test 관련 하위디렉토리까지 모두 삭제하는 명령어로 수행도 가능 - mkdir sourcedir
- cp -r sourcedir backupdir ➡️sourcedir 디렉토리를 backgupdir 이름으로 디렉토리를 복사
파일 이동 및 이름 변경
- mv 명령어 사용
- mv source.txt newSource.txt ➡️이름변경
- mv backup.txt backdir/ ➡️파일 이동
grep 명령어
- grep명령어로 he가 포함된 것을 찾아낼 수도 있다.
- grep -i : 대소문자 구분 없이 검색
- grep -n : 결과에 줄 번호를 함께표시
- grep -in : 대소문자 구분없이 결과에 줄 번호를 함꼐 표시하여 검색
- grep -inv world newSource.txt : world가 없는 줄만 결과에 줄번호를 표시하여 대소문자 구분없이 검색
- grep -inv “^$” newSource.txt : 공백의 라인을 찾아낼 수 있음 (^ : 줄의 시작을 의미)
find 명령어
- yum install -y findutils
- -name : 파일이름으로 검색 가능
ex. find / -name “myconfig.conf”
- .txt 확장자인 모든 파일 탐색
- 타입이 (d) 디렉토리인 모든 것( . ) 을 찾아달라는 의미
- 타입이 (f) 파일인 모든 것( . ) 을 찾아줄 수도 있음 ➡️ find . -type f
- find / -size 1M ➡️1MB 크기의 파일을 찾는 것
find / -size -1M (음수 사용) : 1MB보다 작은 파일을 찾음
find / -size +1M (양수 사용) : 1MB보다 큰 파일을 찾음 - find / -mtime 1 ➡️1일 전에 수정된 파일을 찾음 (=1~2일 전에 수정된 파일을 의미)
find / -mtime -1 ➡️ 24시간 이내에 수정된 파일을 찾음
find / -mtime +1 ➡️ 48시간 이상 전에 수정된 파일을 찾음 - find . -type f -name "*.txt" -exec cp {} /tmp/ ;
➡️현재 디렉터리(.)에서 .txt 확장자를 가진 파일을 찾아서 /tmp/ 디렉토리로 복사
find . : 현재 디렉토리에서 검색
-type f : 파일만 찾음
-name "*.txt" : .txt 확장자를 가진 파일만 찾음
-exec cp {} /tmp/ \\; : 찾은 각 파일( { } )을 /tmp/로 복사 - find . -name file1.txt -delete ➡️file1.txt 를 찾아서 삭제
- find . -type f -name "*.sh" -exec grep "echo" {} \;
-exec grep "echo" {} \\; : 찾은 파일에서 "echo"가 포함된 줄 출력
mlocate
- yum install -y mlocate
- locate 명령어를 제공하는 패키지
- 사전에 만들어진 파일명 데이터베이스(인덱스)를 사용해 매우 빠르게 파일을 찾을 수 있는 명령어
- 시스템의 전체 파일 목록을 데이터베이스에 저장하고, 검색 시 이를 사용해 매우 빠르게 결과를 반환
- find보다 속도가 훨씬 빠름
- 그러나 새로운 파일이 추가되거나 삭제되어도 자동으로 반영되지 않음, 그래서 updatedb가 필요함
yum install -y mlocate
updatedb
locate "*.log"
- 파일을 빠르게 검색하기 위해 mlocate를 설치한 후
- 데이터베이스를 업데이트 후 특정 패턴(*.log)의 파일을 찾는 과정
🚀 locate vs find 차이점
빠른 검색이 필요할 때 locate 사용 (updatedb 실행이 필요) ➡️locate "*.log* 처럼 간단
실시간 파일 탐색이 필요할 때 find 사용 (항상 최신데이터 반영) ➡️find / -name "*.log" 처럼 복잡
- echo로 hello를 생성하고 바로 locate를 해보면 hello를 찾지 못하는데
- updatedb 한 시점부터 다시 locate hello를 해보면 /root/hello 처럼 hello를 찾게됨
procps-ng
- sudo yum install -y procps-ng
- procps-ng는 프로세스 관리 및 시스템 상태 확인을 위한 도구 모음
- y 옵션 : 자동 동의(Yes) 처리하여 사용자 입력 없이 설치 진행
- free : 시스템 메모리 사용량 확인
- uptime : 시스템 부팅 이후 경과 시간 확인
- watch : 특정 명령어를 주기적으로 실행하여 출력 확인
> (출력 리다이렉션)
ls -l > filelist.txt
- ls -l : 현재 디렉토리의 파일 목록을 자세히 출력
- > : 표준 출력을 filelist.txt 파일로 리다이렉트(출력 방향 변경)
- filelist.txt : 출력이 저장될 파일 (기존 내용이 있으면 덮어씀)
- >> (출력 추가 리다이렉션) : 기존 내용 뒤에 내용을 추가함
< (표준 입력 리다이렉션)
- 파일을 표준 입력으로 사용
- cat < input.txt
< input.txt : input.txt 파일을 표준 입력(stdin)으로 전달
(=cat input.txt와 같은 효과)
wc 명령어
- wc(Word Count)는 파일의 단어, 줄, 문자 개수를 세는 명령어
wc -l input.txt
wc -l < input.txt
- 이 두 명령은 결과가 동일
- wc -l input.txt : wc가 직접 파일을 엶
- wc -l < input.txt : input.txt의 내용을 표준 입력으로 전달해 처리
에디터 사용 - vi / vim 사용
vi (vim)
- 리눅스 환경의 터미널 기반 텍스트 편집기
- su -
➡️vi 패키지를 설치하기위해 su 명령어를 이용하여 루트계정으로 이동 후
yum install -y vi 로 vi패키지를 설치 - sudo 명령어 설치 또한 필요 : 루트권한으로 명령어를 수행할 수 있게 도와주는 패키지
(=루트권한으로 이동하여 명령어를 수행하지 않아도되는 장점)
Vim (Vi Improved)
- Vi의 개선판으로 호환성을 유지하면서도 다양한 추가 기능 제공
- yum install -y vim 으로 설치 가능
- i (Insert) : 현재 커서 앞에서 입력 (입력을 끝내려면 Esc 키를 누르면 다시 명령 모드로 돌아감)
- a (Append) : 현재 커서 다음 위치에서 입력
- o (Open) : 새로운 줄을 열어 입력
- vim은 코드 편집에 최적화되어 있고, 생산성을 높임
- 터미널 환경에서 강력한 플러그인 지원
- vi보다 편리한 검색, 복구, 자동완성 기능 제공
- 즉, vi는 최소한의 텍스트 편집을 할 때, vim은 전문적인 코드 작업이 필요할 때 사용
명령 모드에서 편집 명령
ESC 키: 어디서든 명령 모드로 복귀
x : 커서가 있는 위치의 문자를 삭제
dd : 현재 줄 삭제
yy : 현재 줄 복사
p : 복사/삭제한 내용 붙여넣기
u : 되돌리기(undo)
Ctrl + r : 다시 실행(redo)
비주얼 모드
- 텍스트 블록을 선택하여 복사, 삭제, 들여쓰기 등의 작업을 직관적으로 수행할 수 있는 모드
- 명령모드에서 v 를 입력 시 진입하고 화살표 키나 h, j, k, l 키로 영역 선택 후 명령 (y, d)를 적용 가능
네트워크 명령
- 리눅스에서 네트워크 연결상태를 점검하거나
HTTP요청을 보내고, DNS를 확인, 네트워크 인터페이스를 살펴보는데 자주 쓰이는 명령어들 - ping : 네트워크 연결 테스트
➡️ping google.com
➡️원격호스트 (google.com)와의 연결이 유효한지 왕복 시간(RTT)가 얼마나 되는지 등을 표시
ping 명령어는 Ctrl + C를 누를때까지 계속 실행됨
ex. ping -c 6 google.com : -c옵션으로 6 을 지정하면 6번까지 ping을 보내고 종료되도록 지정 가능 - curl 명령어
➡️GET요청등을 처리할 수 있는 명령어
ex. curl -O(대문자 O) https://example.com/file.zip
도메인으로부터 파일을 다운로드 받을 수 있음, URL 에 표시된 파일명을 그대로 저장 - 파일다운로드에는 wget이라는 명령어로 파일 다운로드 전용으로 사용할 수도 있다.
wget https://example.com/file.zip - 해당 URL의 파일을 현재 디렉토리에 다운로드 >> 이름은 서버가 반환하는 파일명대로 저장
wget은 주로 단순 다운로드 특화, curl은 다양한 HTTP/HTTPS 요청을 처리하는데 유용
nslookup
- DNS 서버를 조회하는 명령으로 example.com 같은 도메인에 대해 어떤 IP주소를 반환하는지 확인이 가능
- yum install -y bind-utils : 설치가 되어있지 않을 수 있으므로 yum 으로 설치 가능
ip addr 체크
- 네트워크 인터페이스 확인
- ip명령이 표준으로 자리잡았으므로
- ip addr 을 입력하면 (혹은 ip addr show)
- 컨테이너 내 활성화된 네트워크 인터페이스, IP주소, 서브넷 마스크 등을 확인 가능
- yum install iproute -y
ifconfig
- net-tools를 설치해야만 사용 가능
- yum install -y net-tools
- ifconfig 명령어를 사용하여 eth0등의 인터페이스에 할당된 IP, 패킷 전송량 등을 표시
Bash 스크립트 기초
- 리눅스에서 자동화작업이나 반복작업을 간단히 처리하기 위한 핵심도구
- Shebang (or hashbang) : 스크립트의 첫번쨰 줄에 들어가는 특별한 표기
- #!/bin/bash 가 그 예시 ➡️이 스크립트 실행 시 /bin/bash을 사용해 해석
▶️실습 - Bash스크립트
- vim script.sh
- touch script.sh 등으로 스크립트 파일을 생성
#!/bin/bash
echo "Hello from my script"
- 첫줄에 #!/bin/bash를 쓰고, 그 아래에 bash 명령들을 나열
한글 설정
- locale -a로 확인했을때 ko 로 시작하는 것이 없다는 것은 한글팩이 없다는 것
- 한글팩 설치 : yum install -y glibc-langpack-ko
- 설치 후 다시 확인해보면 한글팩이 추가되어있음
echo 'LANG=ko_KR.UTF-8' | tee /etc/locale.conf
echo 'LC_ALL=ko_KR.UTF-8' | tee -a /etc/locale.conf
- etc 디렉토리에 locale.conf 가 있는데 그 설정파일안에 한글 UTF-8설정을 넣어주겠다는 것
- LC_ALL 전체 설정에도 넣어줌
- 소유자도 실행에 대한 권한은 없는 것을 확인 가능
- bash로 실행을 한번해볼 수 있다.
- 권한이 없어도 가능 = bash를 script안에 써놨기때문에 bash로 실행하는 것은 수행하는 것
- chmod +x [파일명] : 권한 부여
➡️script.sh를 보면 rwx 로 x(execute)실행 권한이 부여된것을 확인 가능
- 권한을 부여하고나면 (./script.sh) 이처럼 바로 실행이 될 수 있게된다.
(=bash가 아니고서도 script.sh를 실행 가능)
🚀회고 결과 :
리눅스 명령어에 대해 실습을 더 해볼 수 있었고 가상환경 안에서 디렉토리 생성, 파일 생성, 권한 부여, 유저 생성 등을 회고 시간에 테스트해볼 수 있었다.
향후 계획 :
- 필요한 패키지들 공부
'Recording > 멋쟁이사자처럼 BE 13기' 카테고리의 다른 글
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_72일차_"Docker 네트워크" (0) | 2025.03.24 |
---|---|
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_71일차_"Docker + Linux (3)" (0) | 2025.03.21 |
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_69일차_"Docker + Linux" (0) | 2025.03.19 |
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_68일차_"Git / GitHub" (0) | 2025.03.18 |
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_67일차_"JUnit" (0) | 2025.03.17 |