리눅스 표준입출력
리눅스에서 모든 프로세스는 세 가지 기본 파일 디스크립터를 사용합니다:
- 표준 입력 (stdin): 기본적으로 키보드에서 입력을 받는 채널입니다. 파일 디스크립터 번호는
0
입니다. - 표준 출력 (stdout): 기본적으로 터미널로 출력되는 채널입니다. 파일 디스크립터 번호는
1
입니다. - 표준 에러 (stderr): 오류 메시지가 출력되는 채널입니다. 파일 디스크립터 번호는
2
입니다.
리눅스의 파이프 (|
)
- 파이프(
|
)는 한 프로세스의 출력을 다른 프로세스의 입력으로 전달하는 데 사용됩니다. - 두 명령어를 연결하여 데이터를 처리할 때 매우 유용합니다.
사용 예제
ls
와grep
조합:ls
의 출력(현재 디렉터리의 파일 목록)을grep
에 전달하여.txt
가 포함된 파일만 출력합니다.
ls | grep txt
ps
와grep
조합:- 실행 중인 프로세스 목록에서
apache
와 관련된 프로세스를 필터링합니다.
- 실행 중인 프로세스 목록에서
ps aux | grep apache
리눅스의 리디렉션
- 리디렉션은 표준 입력, 표준 출력, 표준 에러를 파일로 저장하거나 다른 프로세스에 전달하는 방법입니다.
주요 리디렉션 기호
- 출력 리디렉션 (
>
또는>>
)>
: 기존 파일을 덮어씁니다.>>
: 기존 파일의 내용 뒤에 추가합니다.echo "Hello" > file.txt # file.txt에 Hello 저장 echo "World" >> file.txt # file.txt의 끝에 World 추가
- 입력 리디렉션 (
<
)- 파일 내용을 입력으로 사용합니다.
wc -l < file.txt # file.txt의 라인 수를 출력
- 파일 내용을 입력으로 사용합니다.
- 표준 에러 리디렉션 (
2>
)- 오류 메시지를 파일로 저장합니다.
ls invalid_dir 2> error.log # 오류 메시지를 error.log에 저장
- 오류 메시지를 파일로 저장합니다.
- 출력과 에러를 함께 리디렉션
command > output.txt 2>&1
리눅스의 백그라운드 실행
- 백그라운드 실행은 프로세스를 실행하는 동안 터미널이 작업을 기다리지 않고 다음 명령어를 받을 수 있게 합니다.
사용 방법
- 명령어 끝에
&
추가:sleep 60
명령어를 백그라운드에서 실행합니다.
sleep 60 &
- 백그라운드 작업 확인:
jobs
- 백그라운드 작업 포그라운드로 전환:
fg %job_id
- 작업 중단 후 백그라운드 전환:
command Ctrl + Z # 작업 중단 bg # 작업을 백그라운드로 실행
가비지 컬렉션 작동 방식
- 가비지 컬렉션은 메모리 관리를 자동으로 수행하는 기능으로, 사용되지 않는 객체를 탐지하여 메모리를 해제합니다.
동작 원리
- 참조 카운팅:
- 객체가 참조되고 있는 횟수를 추적합니다. 참조가 0이 되면 메모리를 해제합니다.
- 마크 앤 스위프 (Mark and Sweep):
- 사용 중인 객체(Reachable)를 마킹하고, 마킹되지 않은 객체(Unreachable)를 제거합니다.
- 세대별 관리:
- 새로 생성된 객체(Young Generation)와 오래된 객체(Old Generation)를 구분하여 효율적으로 관리합니다.
- Java, Python 등에서 사용됩니다.
cp
명령어
- 파일 및 디렉토리를 복사하는 명령어입니다.
- 기본 문법:
사용 예제cp [옵션] <원본> <대상>
- 파일 복사:
file1.txt
를file2.txt
로 복사합니다.
cp file1.txt file2.txt
- 디렉토리 복사:
dir1
디렉토리를dir2
디렉토리로 복사합니다.
cp -r dir1 dir2
- 복사 시 경고 메시지 방지:
- 덮어쓰기 전에 사용자에게 확인 메시지를 표시합니다.
cp -i file1.txt file2.txt
rm -r
명령어
- 디렉토리 및 파일을 재귀적으로 삭제합니다.
- 기본 문법:
사용 예제rm -r [옵션] <파일 또는 디렉토리>
- 디렉토리 삭제:
dir1
디렉토리와 그 안의 내용을 모두 삭제합니다.
rm -r dir1
- 강제 삭제:
- 확인 없이
dir1
디렉토리와 내용을 모두 삭제합니다.
- 확인 없이
rm -rf dir1
리눅스 대표 커맨드
- 파일 처리
ls
: 디렉토리 내용 보기cd
: 디렉토리 이동pwd
: 현재 디렉토리 출력cat
: 파일 내용 출력touch
: 빈 파일 생성
- 파일 관리
cp
: 파일 복사mv
: 파일 이동 또는 이름 변경rm
: 파일 삭제
- 시스템 정보
df
: 디스크 사용량 보기du
: 디렉토리 크기 보기top
: 실행 중인 프로세스 확인ps
: 현재 프로세스 상태 확인
- 네트워크
ping
: 네트워크 연결 확인curl
: URL 요청 및 데이터 전송wget
: 파일 다운로드
- 압축 및 아카이브
tar
: 파일 아카이브 및 압축gzip
: 파일 압축
- 사용자 관리
whoami
: 현재 사용자 이름 확인passwd
: 비밀번호 변경
위 명령어들을 활용하면 리눅스 시스템을 보다 효율적으로 사용할 수 있습니다. 필요 시 추가 설명을 요청하세요!