Shell

지은·2023년 11월 12일

Shell

셸(Shell)

: 사용자와 운영 체제가 상호 작용할 수 있도록 사용자와 운영체제 커널 간의 인터페이스 역할(다리 역할)을 수행하는 텍스트 기반의 명령어 해석기

  • 사용자의 입력을 읽고 명령을 해석하고 실행한다.
  • 파일 및 시스템 관리 작업을 수행할 수 있다.

참고: 쉘(Shell, sh)에 대하여...(개요, 종류, Bash의 기본기능)


Bash(Bourne-Again Shell)

: Bourne Shell(sh)을 대체하는 유닉스 셸
명령어 해석 및 실행(명령어 인터프리터), 스크립트 작성(스크립팅 언어), 환경 변수 관리 등 다양한 작업을 지원하는 강력한 도구

  • Bourne Shell(sh)의 확장된 버전으로, Bourne Shell의 모든 기능을 포함하면서 추가적인 기능과 향상된 사용자 경험을 제공한다.
  • GNU, Linux, Mac OS, Darwin 등 다양한 운영 체제에 기본 셸로 탑재되어 광범위하게 배포되었다.

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 파일을 찾은 다음, 이 파일들을 압축한다.
profile
블로그 이전 -> https://janechun.tistory.com

2개의 댓글

comment-user-thumbnail
2023년 11월 15일

xargs 잘 쓰면 참 유용할 것 같은 친구네요 ㅎㅎ

답글 달기
comment-user-thumbnail
2023년 11월 19일

우오오 두고두고 다시 보겠숩니다 !

답글 달기