: 사용자와 운영 체제가 상호 작용할 수 있도록 사용자와 운영체제 커널 간의 인터페이스 역할(다리 역할)을 수행하는 텍스트 기반의 명령어 해석기
참고: 쉘(Shell, sh)에 대하여...(개요, 종류, Bash의 기본기능)
: Bourne Shell(sh)을 대체하는 유닉스 셸
명령어 해석 및 실행(명령어 인터프리터), 스크립트 작성(스크립팅 언어), 환경 변수 관리 등 다양한 작업을 지원하는 강력한 도구
sh(Bourne Shell)
: Unix 버전 7의 기본 유닉스 셸
|): 두 개 이상의 명령어를 연결하여 하나의 명령어의 출력을 다른 명령어의 입력으로 전달(연결)하는 기능
파이프를 사용하면 명령어들을 연결하여 좀 더 복잡하고 유용한 작업을 수행할 수 있다.
ls | grep 'example' # ls로 현재 디렉토리의 파일과 폴더를 나열 -> grep으로 특정 파일/폴더명 찾기
ps aux | grep 'chrome' # 현재 실행중인 프로세스 목록을 보여주고 -> grep으로 특정 프로세스 찾기
echo: 변수, 텍스트을 화면에 출력
echo hi
hi
cat: 파일 내용을 터미널에 출력하거나 파일을 결합하는 데 사용
cat file1 file2 > combinedFile # 새로운 파일 생성, 이미 존재하는 파일이라면 덮어쓴다.
cat file[A-C] > combinedFile # 파일 A B C를 하나로 합친다.
grep: 텍스트에서 패턴을 검색
grep 'console' tree.js # tree.js 파일에서 'console' 찾기
console.info('tree', tree);
console.info('tree', tree);
console.info('findNode', tree.findNode(tree.root, 'C'))
grep '^[###]' data_structure.md
# 01. 자료구조
## 객체지향 프로그래밍
### 객체(Object)
#### 객체를 만드는 방법
### 객체 모델 (Model)
### 프로토타입
grep -r '#' .
./network.md:# 네트워크
./network.md:### 패킷
./data_structure.md:# 01. 자료구조
./data_structure.md:## 객체지향 프로그래밍
./data_structure.md:### 객체(Object)
./data_structure.md:#### 객체를 만드는 방법
./data_structure.md:### 객체 모델 (Model)
./data_structure.md:### 프로토타입
./database.md:# 데이터베이스
./database.md:## opensearch
./database.md:### query
egrep: grep의 확장된 버전( = grap -E), 더 강력한 정규 표현식을 지원
grep와의 차이점은 grep -E는 +, ?, {}와 같은 반복 및 수량 한정자를 사용할 때 이스케이프 \ 문자를 사용해야 한다는 점
grep 'apple\|banana' fruits.txt
egrep 'apple|banana' fruits.txt
⇒ 정규표현식을 사용하는 경우 egrep이 더 편리하다.
sed: stream editor, 텍스트 데이터의 스트림을 처리하고 편집
편집한 내용이 저장되진 않는다.
vi 에디터에서 사용하고 싶으면 %sed로 사용한다.
텍스트 치환
sed 's/apple/banana/g' fruits.txt # fruits.txt 파일에서 모든 apple을 banana로 바꾼다.
# s/ : 치환한다
# /g : 전역 매칭(매칭되는 모든 패턴 찾음)
sed '2d' fruits.txt # fruits.txt에서 2번째 줄 삭제
sed '/pp/d' fruits.txt # fruits.txt에서 pp를 가진 줄 삭제
awk : 복잡한 텍스트 처리액션을 줄 때는 중괄호로 감싸 구분해줘야 한다.
fruits.txt
apple 1
apple 2
apple 3 일 때,
awk '{print $2}' fruits.txt # 공백으로 구분하여 2번째 필드를 출력
1
2
3
awk '$2 > 2' fruits.txt # 2번째 필드가 2보다 큰 라인을 출력
apple 3
awk '{sum += $2} END {print sum}' fruits.txt # 2번째 필드를 sum에 합하고 출력
6
-F 옵션을 사용하여 필드 구분자를 지정할 수 있다.awk -F, '{print $2}' data.csv # data.csv를 ,로 분리해서 2번째 필드를 출력
awk /^문자열/ '{print $1}'
lst -alh | awk '{print $5}' # 이렇게도 사용 가능
find: 파일 및 디렉토리 검색
지정된 디렉토리 구조에서 원하는 파일이나 디렉토리를 찾는 데 사용한다.
find ./CODEKIN -name 'tree.js' # 현재 경로 안의 CODEKIN 디렉토리에서 name이 tree.js인 파일 검색
./CODEKIN/tree.js
find . -type f # 현재 경로에서 모든 파일을 찾아줌
./network.md
./test.js
./fruits.txt
./tree.js
./data_structure.md
./database.md
find . -type d # 현재 경로에서 모든 디렉토리를 찾아줌
find . -size +1k # 현재 경로에서 파일 크기가 1KB 이상인 파일 검색
./network.md
./test.js
./data_structure.md
xargs: 명령어 라인에서 입력을 받아서 다른 명령어를 실행하는 데 사용되는 유틸리티
반복 작업을 자동화하거나, 여러 파일 또는 디렉토리에서 일괄 작업을 수행할 때 사용하며, 주로 find와 함께 사용되어 파일에 대한 작업을 수행할 때 사용한다.
find . -name '*.txt' | xargs rm # 현재 경로에서 모든 .txt 파일을 찾아 삭제한다.
find /원본경로 -name '*.txt' | xargs I {} cp {} /대상경로
# /원본경로에서 모든 .txt 파일을 찾은 다음, 이 파일들을 /대상경로로 복사한다.
find /원본경로 -name '*.jpg' | xargs -I {} mv {} /대상경로
# /원본경로에서 모든 .jpg 파일을 찾은 다음, /대상경로로 이동한다.
find /경로 -name '*.log' | xargs gzip
# /경로에서 모든 .log 파일을 찾은 다음, 이 파일들을 압축한다.
xargs 잘 쓰면 참 유용할 것 같은 친구네요 ㅎㅎ