CS 공부/AI
Linux 쉘 스크립트
imsmile2000
2023. 4. 25. 20:01
- 서버에서 자주 사용하는 OS
- 무료, 오픈소스
- 안정성, 신뢰성
- 쉘 커맨드, 쉘 스크립트
- CLI: Command Line Interface
- GUI: Graphic User Interface
대표적인 Linux 배포판
- Debian: 온라인 커뮤니티에서 제작해 배포
- Ubuntu: 영국 회사에서 만든 배포판, 쉽고 편한 설치, 초보자들이 접근하기 쉬움
- Redhat
- CentOs: Redhat이 공개한 버전 가져와서 브랜드 로고 제거하고 배포
Shell Command
쉘의 종류
- 쉘: 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
- 터미널/콘솔: 쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달
- sh: 최초의 쉘
- bash: linux 표준 쉘
- zsh: Mac 카탈리나 OS 기본 쉘
- 쉘 UX: username@hostname:current_folder
기본 쉘 커맨드
- man python: 쉘 커맨드의 매뉴얼 문서를 보고 싶은 경우
- mkdir: 폴더 생성하기
- ls: 현재 접근한 폴더의 파일 확인
- pwd: 현재 폴더 경로를 절대 경로로 보여줌
- cd: 폴더로 이동하기
- echo: 터미널에 텍스트 출력
- cp: 파일 또는 폴더 복사하기 (-r 모두 복사, -f 강제로 실행)
- vi: vim 편집기로 파일 생성 (vi test.sh)
- command mode: 방향키를 통해 커서를 이동할 수 있음
- insert mode: 파일을 수정할 수 있는 mode
- last line mode: ESC를 누른 후 : 를 누르면 나오는 모드
- bash: bash로 쉘 스크립트 실행
- sudo: 관리자 권한으로 실행하고 싶은 경우 커맨드 앞에 붙임
- mv: 파일, 폴더 이동하기
- cat: 특정 파일 내용 출력
- 파일에 overwrite 하고 싶은 경우 cat vi-test2.sh vi-test3.sh > new_test.sh
- 파일에 append 하고 싶은 경우 cat vi-test2.sh vi-test3.sh >> new_test.sh
- clear: 터미널 창 내용 clear
- history: 최근 입력한 쉘 커맨드 history 출력
- find: 파일 및 디렉토리 검색할 때 사용
- export: 환경 변수 설정 (export water="물")
- alias: 기본 명령어를 간단히 줄일 수 있는 것
- ex. alias ll2='ls -l'
- tree: 폴더의 하위 구조를 계층적으로 표현 (tree -L)
- head, tail: 파일의 앞/뒤 n행 출력
- sort: 행 단위 정렬
- -r: 정렬을 내림차순으로 정렬 (default: 오름차순)
- -n: numeric sort
- ex. cat fruits.txt | sort
- uniq: 중복된 행이 연속으로 있는 경우 중복 제거 (sort와 함께 사용)
- grep: 파일에 주어진 패턴 목록과 매칭되는 라인 검색
- grep 옵션 패턴 파일명
- cut: 파일에서 특정 필드 추출
- -f: 잘라낼 필드 지정
- -d: 필드를 구분하는 구분자 (default: \t)
- ps: 현재 실행되고 있는 프로세스
- -e: 모든 프로세스
- -f: full format으로 보여줌
- curl: data transfer 커맨드
- df: 현재 사용 중인 디스크 용량 확인
- scp: ssh을 이용해 네트워크로 연결된 호스트 간 파일을 주고 받음
- -r: 재귀적으로 복사
- -P: ssh 포트 지정
- -i: ssh 설정을 활용해 실행
- local에서 remote로 옮길 때: scp local_path user @ ip:remote_directory
- remote에서 remote로 옮길 때: scp user @ ip:direc user2 @ ip2: target_direc
- nohup: 백그라운드 실행 (nohup python3 app.py&)
- 종료할 때 ps ef | grep app.py로 pid 찾고 kill -9 pid
- chmod: 파일 권한을 변경하는 경우 r(read), w(write), x(실행), -(denied)
- #!/bin/bash: Shebang (이 스크립트를 Bash 쉘로 해석하겠다는 뜻)
Redirection & Pipe
- 표준 스트림: Unix에서 동작하는 프로그램은 커맨드 실행시 3개의 stream 생성
- stdin(0,입력), stdout(1,출력), stderr(2,에러)
- Redirection: 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달
- > : overwrite
- >>: append
- Pipe: 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶을 때 ('|')
- 최근 입력한 커맨드 중 echo가 들어간 명령어 찾고 싶을 때 : history | grep "echo"
- test.txt 파일에 "Hi!!!" 입력하기: echo Hi!!! > test.txt
- test.txt 파일 맨 아래에 "kkkk" 입력: echo kkkk >> test.txt
- test.txt의 라인 수 구하기: wc -l > test.txt