코딩걸음마

rinux shell (리눅스 쉘)과 CLI 명령어 본문

카테고리 없음

rinux shell (리눅스 쉘)과 CLI 명령어

코딩걸음마 2022. 8. 10. 18:51
728x90

리디렉션  결과물을 다른 장치로 보냄  > , >>,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

 

 

728x90
Comments