[Linux] 생활코딩 리눅스 : 다운로드, 파이프, IO Redirection, shell & kernal, shell script
1. 다운로드
✔️ 출처 : https://opentutorials.org/module/1588/12591
1.1. wget
root@(생략):/# wget -O image_sample.png https://(이미지 URL)/image_sample.png # image_sample.png라는 파일명으로 현재 경로에 다운로드
1.2. git
root@(생략):/# git clone https://github.com/facebook/react.git react_src # react_src 폴더에 리액트 소스 코드 클론
2. 파이프
✔️ 출처 : https://www.opentutorials.org/course/2598/14190
파이프(|)를 이용해 앞선 명령어의 출력을 이용한다.
root@(생략):/# grep CLI linux.txt # linux.txt 내에서 CLI 키워드가 있는 행을 찾는다.
root@(생략):/# ls --help | grep sort # ls --help에서 출력되는 내용 중에서 sort 키워드가 있는 행을 찾는다.
root@(생략):/# ls --help | grep sort | grep file # ls --help에서 출력되는 내용 중에서 sort 키워드가 있는 행 중 file 키워드가 있는 행을 찾는다.
3. IO Redirection
✔️ 출처 : https://www.opentutorials.org/course/2598/14199
">"를 이용해서 모니터에 출력되는 결과를 리다이렉션 해서 파일에 저장(덮어쓰기)한다.
root@(생략):/# ls -l > result.txt # ls -l 출력 결과를 result.txt 파일로 저장
root@(생략):/# ls -l 1> result.txt # 상동
root@(생략):/# rm result2.txt 2> error.log # 에러 로그를 error.log 파일로 저장
root@(생략):/# rm result2.txt 1> result.txt 2> error.log # 실행 결과 result.txt에 저장, 에러 발생시 error.log에 저장
root@(생략):/# head -n3 nohup.out > one.txt # nohup.out의 첫 3줄을 one.txt 파일로 저장
root@(생략):/# ls -al > /dev/null # /dev/null은 리눅스에서 휴지통 같은 개념. 출력 결과가 버려짐
😉 ">>"는 출력결과를 기존 파일에 추가한다.
4. shell & kernel
✔️ 출처 : https://www.opentutorials.org/course/2598/14203
shell과 kernel은 분리되어 있다. kernel은 하드웨어 제어하고, shell은 kernel에 명령을 전달한다. shell은 다양한 종류가 있다(bash, zsh ).
root@(생략):/# echo $0 # echo는 따라오는 내용을 화면에 출력한다. $0는 현재 shell을 의미한다.
-bash
5. shell script
✔️ 출처 : https://www.opentutorials.org/course/2598/14204
쉘 스크립트는 리눅스와 유닉스 기반 시스템에서 사용되는 스크립트 언어이다. 텍스트 기반의 명령어를 사용하여 시스템 작업을 자동화한다. 쉘 스크립트는 파일로 저장되며, 실행 가능한 권한을 갖추어야 한다.
5.1. nano로 backup 파일을 작성한다.
root@(생략):/# nano backup
5.2. backup 파일에 작성하는 스크립트는 다음과 같다.
if ! [ -d bak ]; then
mkdir bak
fi
cp *.log bak
- -d는 디렉터리를 말하며 bak 디렉터리가 존재하지 않으면 then 아래의 명령어인 mkdir bak를 실행한다.
- fi는 if 블록을 닫는 용도이다.
- 마지막으로 cp 명령어를 실행한다.
5.3. 실행 권한 부여
생성한 backup 파일에 실행 권한을 부여한다.
root@(생략):/# chmod +x backup
5.4. 실행
root@(실행):/# ./backup
6. 프로세스
✔️ 출처 : https://www.opentutorials.org/course/2598/14210
프로세스는 메모리에 올라간 프로그램이며 프로세서(CPU)가 처리한다.
6.1. 프로세스 확인
root@(생략):~# ps aux | grep java # 실행 중인 자바 프로세스 확인
6.2. htop을 이용한 확인
😉 htop 설치 방법 : https://postforty.tistory.com/449
- 0~15는 CPU 코어수를 말한다.
- Load average의 숫자는 CPU 부하 평균을 말하며 왼쪽부터 1분, 5분, 15분이다. 싱글 코어라면 1.0이고 CPU 전체 부하율이 100%라는 뜻이다. 최대치를 넘을 수도 있는데 불특정 프로세스가 CPU를 점유하기 위해 대기 중이라는 뜻이다.
- 초록색의 각 컬럼 헤드를 클릭하면 해당 칼럼을 기준으로 오름차순/내림차순 정렬을 할 수 있다.
2025-06-19 추가 내용
Htop에서 16코어 시스템의 Load Average 이해하기([그림 1]에 대한 설명)
Htop에서 0번부터 15번까지의 CPU 코어(총 16개의 코어)가 보이고, Load Average가 3.52 3.45 3.50으로 나타나는 상황은 시스템의 부하를 이해하는 데 중요한 정보를 제공한다. 이 값들을 통해 현재 시스템의 작업 처리 상태와 여유 자원을 파악할 수 있다.
1. Load Average 분석
Load Average는 특정 시간 동안 시스템에서 실행 중이거나 실행을 기다리는 프로세스의 평균 개수를 나타낸다. 즉, 시스템에 얼마나 많은 작업이 처리 대기 중인지 보여주는 지표이다.
- 세 가지 숫자: Load Average는 1분, 5분, 15분 동안의 평균 부하를 순서대로 보여준다.
- 3.52: 최근 1분간의 평균 부하이다.
- 3.45: 최근 5분간의 평균 부하이다.
- 3.50: 최근 15분간의 평균 부하이다.
2. 16코어 시스템에서 Load Average 해석
16코어 시스템에서 Load Average가 3점대라는 것은 시스템에 충분한 여유가 있음을 의미한다.
- 코어 수 대비 부하: Load Average를 CPU 코어 수로 나누어 각 코어가 얼마나 바쁜지 가늠할 수 있다.
- 1분 부하: 3.52 / 16 ≈ 0.22
- 5분 부하: 3.45 / 16 ≈ 0.21
- 15분 부하: 3.50 / 16 ≈ 0.22
- 해석: 각 코어는 평균적으로 21~22% 정도의 작업 부하를 처리하고 있다는 뜻이다. 16개의 코어 중 34개의 코어만 활발히 사용되고 있고, 나머지 코어들은 유휴 상태이거나 대기 중인 작업을 기다리고 있다.
- 결론: Load Average가 16개의 코어 수보다 훨씬 낮은 3점대이므로, 현재 시스템은 부하가 낮은 상태이며, 많은 추가 작업을 처리할 수 있는 충분한 여유 자원을 가지고 있다.
3. 추가 확인 및 고려 사항
현재 시스템은 여유로운 상태이지만, 시스템 관점에서 다음과 같은 점들을 추가로 확인할 수 있다.
- 개별 코어 사용률: Htop 화면에서 개별 CPU 코어의 사용률을 시각적으로 확인해 볼 수 있다. 특정 코어만 과도하게 사용되는지, 아니면 전체 코어가 고르게 활용되는지 보면 좋다.
- 프로세스 확인: 어떤 프로세스들이 현재 활성화되어 Load Average에 기여하고 있는지 Htop 하단 목록에서 확인할 수 있다. 혹시라도 불필요한 프로세스가 높은 자원을 사용하고 있는지 점검할 수 있다.
- 메모리 및 디스크 I/O: CPU Load Average가 낮더라도, 메모리 부족이나 디스크 I/O 병목 현상으로 인해 시스템 성능이 저하될 수 있다. Htop에서 메모리 사용량과
iostat
와 같은 도구를 통해 디스크 I/O 상태도 함께 확인해 보면 좋다.
종합적으로 볼 때, 16코어 시스템에서 Load Average 3점대는 매우 안정적이고 여유로운 상태라고 판단할 수 있다.