코딩하는 해맑은 거북이
[리눅스] Shell Command 본문
본 게시물의 내용은 '부스트캠프 AI Tech - 리눅스 (변성윤)' 강의를 듣고 작성하였다.
- 쉘 커맨드의 매뉴얼 문서 출력
man python # 종료 'q'
- 폴더 생성하기 (Make Directory)
mkdir linux-test
- 현재 접근한 폴더의 파일 확인 (List Segments)
-a : .으로 시작하는 파일, 폴더를 포함해서 전체 파일 출력 -l : 퍼미션, 소유자, 만든 날짜, 용량까지 출력 -h : 용량을 사람이 읽기 쉽도록 GB, MB 등 표현, '-l'과 같이 사용 |
ls
ls ~
ls -al
ls -lh
- 현재 폴더 경로를 절대 경로로 보여줌 : Print Working Directory
pwd
- 폴더 변경하기, 폴더로 이동하기 : Change Directory
cd linux-test
- 터미널에 텍스트 출력, `쉘 커맨드` 입력시 쉘 커맨드의 결과를 출력 ( ` : 1 왼쪽에 있는 backtick)
echo "hi"
echo `pwd`
- 파일 또는 폴더 복사하기 : Copy
-r : 디렉토리를 복사할 때 디렉토리 안에 파일이 있으면 recursive(재귀적)으로 모두 복사 -f : 복사할 때 강제로 실행 |
cp vi-test.sh vi-test2.sh
- vim 편집기로 파일 생성, INSERT 모드에서만 수정할 수 있음
(새로운 창이 뜨면) i를 불러서 INSERT 모드로 변경 ESC :wq : 저장하고 나가기, write and quit ESC :wq! : 강제로 저장하고 나오기 ESC :q : 그냥 나가기 |
vi vi-test.sh
1) Command Mode : vi 실행시 기본 Mode
- 방향키를 통해 커서를 이동할 수 있음
dd : 현재 위치한 한 줄 삭제
i : INSERT모드로 변경
x : 커서가 위치한 곳의 글자 1개 삭제 (5x: 문자 5개 삭제)
yy : 현재줄을 복사(1줄을ctrl+c)
p : 현재 커서가 있는 줄 바로 아래에 붙여넣기
k : 커서 위로
j : 커서 아래로
l : 커서 오른쪽으로
h : 커서 왼쪽으로
2) Insert Mode : 파일을 수정할 수 있는 Mode
만약 Command Mode로 다시 이동하고 싶다면 ESC 입
3) Last Line Mode : ESC를 누른 후 콜론(:)을 누르면 나오는 Mode
w : 현재 파일명으로 저장
q : vi 종료 (저장되지 않음)
q! : vi 강제종료 (!는 강제를 의미)
wq : 저장한 후 종료
/문자 : 문자탐색
- 탐색한 후 n을 누르면 계속 탐색 실행
set nu : vi 라인 번호 출력
- bash로 쉘 스크립트 실행, 터미널에서 Tab을 누르면 자동완성(지원하지 않는 쉘도 존재)
bash vi-test.sh
- 관리자 권한으로 실행하고 싶은 경우 커맨드 앞에 sudo를 붙임, 최고 권한을 가진 슈퍼 유저로 프로그램을 실행
"superuser do"에서 유래하고, 최근엔 "substitute user do" (다른 사용자의 권한으로 실행)의 줄임말로 해석
sudo (명령어)
- 파일, 폴더 이동하기(또는 이름 바꿀 때도 활용) : Move
mv vi-test.sh vi-test3.sh
- 특정 파일 내용 출력 : concatenate
cat vi-test.sh
# 여러 파일을 인자로 주면 합쳐서(CONCAT) 출력
cat vi-test2.sh vi-test3.sh
# 파일에 저장하고(OVERWRITE) 싶은 경우
cat vi-test2.sh vi-test3.sh > new_test.sh
# 파일에 추가하고(APPEND) 싶은 경우
cat vi-test2.sh vi-test3.sh >> new_test.sh
- 터미널 창을 깨끗하게 해줌
clear
- 최근에 입력한 쉘 커맨드 History 출력
History 결과에서 느낌표를 붙이고 숫자 입력시 그 커맨드를 다시 활용할 수 있음 (!30)
history
- 파일 및 디렉토리를 검색할 때 사용
find . -name "File" # 현재 폴더에서 File이라는 이름을 가지는 파일 및 디렉토리 검색
- export로 환경변수 설정
export water="물"
echo $water
단, 터미널이 꺼지면 사라지게 된다. 매번 쉘을 실행할 때마다 환경변수를 저장하고 싶으면 .bashrc, .zshrc에 저장하면 됨 (Linux) vi ~/ .bashrc 또는 vi ~/ .zshrc (자신이 사용하는 쉘에 따라 다름) 제일 하단에 export water="물" 을 저장하고 나옴 (ESC :wq) 그 후 source ~/ .bashrc 또는 source ~/ .zshrc Linux 환경 설정을 재로그인하지 않고 즉시 적용하고 싶은 경우 source 사용 |
- 터미널에 alias라고 치면 현재 별칭으로 설정된 것을 볼 수 있음
alias는 기본 명령어를 간단히 줄일 수 있는 것
alias
alias ll='ls -l' # ll을 입력하면 ls -l 이 동작함
- 폴더의 하위 구조를 계층적으로 표현, 프로젝트 소개에서 구조 설명할 때 유용
tree -L 1 : 1단계까지 보여주기 tree -L 2 : 2단계까지 보여주기 |
tree -L 레벨
- 파일의 앞/뒤 n행 출력
head -n 3 vi-test.sh
- 행 단위 정렬
-r : 내림차순으로 정렬 (Default : 오름차순) -n : Numeric Sort |
cat fruits.txt | sort
cat fruits.txt | sort -r
- 중복된 행이 연속으로 있는 경우 중복 제거, sort와 함께 사용
-c : 중복 행의 개수 출력 |
cat fruits.txt | sort | uniq
cat fruits.txt | sort | uniq | wc -l # 중복을 제거하고 남은 행 갯수
- 파일에 주어진 패턴 목록과 매칭되는 라인 검색
grep은 뒤에 나올 pipe와 같이 사용하곤 함
-i : Insensitively하게, 대소문자 구분 없이 찾기 -w : 정확히 그 단어만 찾기 -v : 특정 패턴 제외한 결과 출력 -E : 정규 표현식 사용 |
< 정규 표현식 패턴 > ^단어 : 단어로 시작하는 것 찾기 단어$ : 단어로 끝나는 것 찾기 . : 하나의 문자 매칭 |
grep 옵션 패턴 파일명
grep -i "a" grap_file # "a", "A" 가 포함되는 라인 출력
grep "a" grap_file # "a" 가 포함되는 라인 출력
grep "^a" grap_file # "a" 로 시작하는 라인 출력
grep "e$" grap_file # "e" 로 끝나는 라인 출력
- 파일에서 특정 필드 추출
-f : 잘라낼 필드 지정 -d : 필드를 구분하는 구분자. Default는 \t |
cat cut_file | cut -d : -f 1, 7 # 1, 7번째 값을 가져옴
* Redirection & Pipe - 표준 스트림(Stream)
Unix에서 동작하는 프로그램은 커맨드 실행시 3개의 Stream이 생성
stdin : 0으로 표현, 입력 (비밀번호, 커맨드 등) stdout : 1로 표현, 출력값(터미널에 나오는값) stderr : 2로 표현, 디버깅 정보나 에러 출력 |
Redirection : 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달
> : 덮어쓰기(Overwrite) 파일이 없으면 생성하고 저장 >> : 맨 아래에 추가하기(Append) |
echo "hi" > vi-test3.sh
echo "hello" >> vi-test3.sh
Pipe : 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우
A의 Output을 B의 Input으로 사용 (다양한 커맨드를 조합)
# 현재 폴더에 있는 파일명 중 vi가 들어간 단어를 찾고 싶은 경우
ls | grep "vi"
# 위 결과를 다시 output.txt에 저장하고 싶은 경우
ls | grep "vi" > output.txt
# 최근 입력한 커맨드 중 echo가 들어간 명령어를 찾고 싶은 경우
history | grep "echo"
- 현재 실행되고 있는 프로세스 출력하기 : Process Status
-e : 모든 프로세스 -f : Full Format으로 자세히 보여줌 |
ps
- Command Line 기반의 Data Transfer 커맨드 : Client URL
Request를 테스트할 수 있는 명령어
# 웹 서버를 작성한 후 요청이 제대로 실행되는지 확인할 수 있음
curl -X localhost:5000/ {data}
cf) curl 외에 httpie 등도 있음 (더 가독성있게 출력), 회사에선 Postman이라는 것도 활용
- 현재 사용 중인 디스크 용량 확인 : Disk Free
-h : 사람이 읽기 쉬운 형태로 Gi, Mi 형태로 출력 |
df
df -h
- SSH을 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어 : Secure Copy (Remote file copy program)
-r : 재귀적으로 복사 -P : ssh 포트 지정 -i : SSH 설정을 활용해 실행 |
# local => remote
scp local_path user@ip:remote_directory
# remote => local
scp user@ip:remote_directory local_path
# remote => remote
scp user@ip:remote_directory user2@ip2:target_remote_directory
- 터미널 종료 후에도 계속 작업이 유지하도록 실행(백그라운드 실행)
nohup으로 실행될 파일은 Permission이 755 여야
nohup python3 app.py &
< 종료하는 방법 > ps ef | grep app.py 한 후, pid(Process ID) 찾은 후 kill -9 pid 로 프로세스를 Kill 로그는 nohup.out에 저장됨 |
cf) nohup 외에도 screen이란 도구도 있음
- 파일의 권한을 변경하는 경우 사용 : Change Mode
유닉스에서 파일이나 디렉토리의 시스템 모드를 변경
< Permission > r = Read(읽기), 4 w = Write(쓰기), 2 x = eXecute(실행하기), 1 - = Denied r-x : 읽거나 실행할 수는 있지만 수정은 불가능 |
chmod 755 vi-test2.sh
'ETC' 카테고리의 다른 글
[기업탐색] 도움되는 사이트 (1) | 2023.11.12 |
---|---|
[프론트엔드] 쉽고 빠른 웹 개발 - Bootstrap (0) | 2023.07.18 |
[운영체제] Program, Process, Thread (0) | 2023.06.11 |
[Github] Github 명령어 모음 (0) | 2023.03.13 |