일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 주식매매
- Linear
- 흐름도
- python
- 재귀함수
- PyTorch
- 연습
- 기초
- Regression
- 가격맞히기
- 머신러닝
- 코딩
- 추천시스템
- 크롤링
- 주식연습
- 딥러닝
- 템플릿
- 주식
- 회귀
- 게임
- tensorflow
- 프로그래머스
- 주가예측
- DeepLearning
- CLI
- 선형회귀
- 알고리즘
- 파이썬
- 코딩테스트
- API
- Today
- Total
코딩걸음마
rinux shell (리눅스 쉘)과 CLI 명령어 본문
리디렉션 결과물을 다른 장치로 보냄 > , >>,2>,2>&
echo "Hello" > hello.txt 기존 파일을 덮어 씀
echo "Hello2" > hello.txt 기존 파일을 덮어 씀
echo "Hello_another" >> hello.txt 기존 파일에 추가함 (append)
echo는 입력장치로서 안좋은 echo를 cat으로 사용
cat "Hello" > hello.txt 기존 파일을 덮어 씀
cat "Hello2" > hello.txt 기존 파일을 덮어 씀
cat "Hello_another" >> hello.txt 기존 파일에 추가함 (append)
cat <<END> hello.txt "END"라고 입력 전까지 종료하지 않고 지속됨 ( delimeter)
파이프( | ) 동작을 연결하여 실행하도록 해줌
ls -l | grep hello 출력값 내에서 검색
단축명령어 (alias)
축약어 기능을 제공
예시) alias ..="cd.." ..로 cd..를 실행하도록 설정
물론 저장이 되지않아 재부팅시 초기화되지 않음
파일 검색 (find)
기본문법 find [option] [PATH] [expression]
find *.txt 확장자가 txt인 파일을 찾기
find . -name "*.txt" 현재 directory에서 확장자가 txt인 파일을 찾기
find . -name "hello*" type -f 현재 directory에서 이름이 hllo로 시작하는 파일만 찾기
find . -name "dir*" type -d 현재 directory에서 이름이 dir로 시작하는 directory만 찾기
find . -size +100000000c 파일이 100MB이상인 파일찾기 100000k 100M 사용가능
find / -size 100M -exec ls -l {}\; 2>/dev/null 루트디렉토리로부터 파일사이즈가 100M이상인 파일을 찾아ls로 상세표시
find / -name ".txt" -exec grep "HELP" {}|; print2 >/dev/null 루트디렉토리로부터 txt 파일을 찾아서 그안에 "HELP"라는 글자가 포함된 파일과 내용표시
find / [조건문] -print -exec cp {} [경로]\;2>/dev/null 루트디렉토리부터 특정 조건의 파일을 찾아서 특정 디렉토리로 복사하기
grep 필터링
기본문법 grep [option] PATTERN [FILE] 특정 PATTERN or 정규표현식 패턴 검색
grep "word" [FILE] 파일 내에서 word라는 단어 검색
grep -i "word" [FILE] 파일 내에서 word라는 단어 검색(대소문자 무시하고 검색 -ignore)
grep -r "word" [PATH] 하위 디렉토리 모두 검색
정규표현식
grep -n "PATTERN" /usr/share/doc/vim/copyright
^s 문장의 시작이 s로 시작하는 줄
e$ 문장의 끝이 e로 끝나는 줄
..e$ 문장의 끝이 3글자 중 e로 끝나는 줄
app* 문장의 시작/중간/끝이 ap와 p의 "0개 혹은 그 이상"의 개수를 갖고 있는 줄
^[at] 문장의 시작 첫 단어가 a 또는 t로 시작하는 줄
[0-9] 문장의 중간에 숫자 0~9까지를 포함하고 있는 줄
확장
grep -E "PATTERN" /usr/share/doc/vim/copyright
[p]{2} 문장 내 p라는 글자가 연속 두번 나오는 경우
^[a-zA-Z0-9]{3,9} 문장의 시작이 소문자/대문자/숫자로 시작하는 3~9길이
필터링(grep) 응용
ls -al | grep txt 파일 목록에서 특정 단어 검색
cat /var/log/syslog | grep -i "warn" 로그 파일에서 경고만 검색
ps x | grep "/bin" 프로세스 목록에서 특정 단어 검색
ps x | grep "/bin" | grep -v "grep" 프로세스 목록에서 특정 단어 검색 (특정 단어 예외)
netstat -a | grep 80 특정 포트가 열려있는지 확인
netstat -a | grep ":80" 특정 포트가 열려있는지 확인
정렬(sort) 명령어
ls -l | sort 디렉토리 목록을 정렬 (기본값 첫번째 컬럼)
ls -l | sort -k 2 디렉토리 목록을 두번째 컬럼을 기준으로 정렬 (기본값 :문자기준 정렬)
ls -l | sort -k 2 -n 디렉토리 목록을 두번째 컬럼을 기준으로 정렬 (기본값 :숫자기준 정렬)
ls -l | sort -k 5 -n 디렉토리 목록을 파일 크기별로 정렬 (기본값 :오름차순)
ls -l | sort -k 5 -n -r 디렉토리 목록을 파일 크기별로 정렬 (내림차순)
ls -l | sort -k 2n -k 5 2개 이상으로 정렬 (두번째 컬럼(숫자) & 다섯번째 컬럼 기준)
sort -k 2 -k 5 <dir.txt 인풋 리디렉션 응용 가능
내용검색/ 편집(awk) 명령어
awk
ls -l | awk '{print $1}' 디렉토리 목록 중 첫번째 컬럼만 출력
ls -l | awk '{print $9,$5}' 디렉토리 목록 중 사이즈와 파일명 출력
ls -l | awk '{print "FILENAME:"$9, "SIZE:":$5}'
ls -l | awk '{sum += $5} END {print sum}' 디렉토리 목록중 사이즈만 모두 더하여 결과만 출력
ls -l | sort -k 5 | awk '$5 >= 10000 {print}' 10000바이트 이상 크기의 파일만 출력
cat /etc/passwd | awk -F":" '{print $1}' 암호파일에서 " : "을 구분자로 하여 잘라서 첫번째 컬럼만 추출
sed
sed 's/PATTERN/변환/g'
cat /usr/share/doc/vim/copyright | sed 's/book/books/g' 파일 내 모든 book을 books로 변경
cat /usr/share/doc/vim/copyright | sed 's/.$/!/g' 모든 줄의 끝을 !로 끝나도록 변경
ls -l | sed 's/[a-z]/|U&/g' 출력문자를 소문자에서 대문자로 변경 Upper
cat /etc/passwd | sed 's/[A-Z]/|L&/g' 출력문자를 대문자에서 소문자로 변경 Lower
기타(uniq/ wc)
cat hello.txt | uniq 파일 내에 중복되는 줄 제거
wc hello.txt 라인수/ 단어수/ 문자수 출력
wc -l hello.txt 라인수만 출력
cat /var/log/auth.log | awk '$1=$2=$3=""; {print $0}' | sort | uniq 인증 로그 내에서 시간값을 제거하고 나머지 값에서 uniq 한 값만 가져오기
파일 용량 출력 (du)
기본 형태 du [OPTION] [FILE]
option
-k (KB 단위 출력) (기본값)
-m (MB 단위 출력)
-h 사용자 편의 용량
-H 사용자 편의 용량
-s 합계만 출력
-S 서브 디렉토리 용량을 합치지 않고 각각 계산
du -S | sort -n 디렉토리 용량을 오름차순으로 정렬해서 출력
du / -h 2>/dev/nell | grep [0-9]G 디렉토리 누적용량을 출력하여 GB이상의 디렉토리를 출력
du --max-depth=1 디렉토리 용량을 최대 1디렉토리 depth 까지만 출력
파일 압축 (tar) tape archive
기본 형태 tar [OPTION] [FILE] [PATH]
option
-c 생성 (create)
-x 해지 (extract)
-v 실행중 파일목록 출력 (verbose)
-f 저장될 파일명 지정 (file)
-t 목록 확인
-z 압축
-j 압축 bzip2
tar --max-depth=1 디렉토리 용량을 최대 1디렉토리 depth 까지만 출력
tar cvf myzip.tar dir1 tar 아카이브 만들기
tar tf myzip.tar tar 아카이브 내용 확인
tar xvf myzip.tar tar 아카이브 풀기
tar cvfz myzip.tgz dir1 tar.gz 아카이브 만들기
tar tf myzip.tgz tar 아카이브 내용 확인
tar xvfz myzip.tgz tar 아카이브 풀기
tar cvfj myzip.tar.bz2 dir1 tar.bz2 아카이브 만들기
tar tf myzip.tar.bz2 tar 아카이브 내용 확인
tar xvfj myzip.tar.bz2 tar 아카이브 풀기
압축 하기
gzip filename
bzip2 filename
xz filename
각각 filename.gz, filename.bz2, filename.xz 형태로 압축됨
압축 풀기
gzip d filename
gzip2 d filename
xz d filename