basic flow

basic flow

application ( esp terminal ) → shell ( ex. bash, powershell ) → os ( esp kernel ) → hardware

  • wsl
    • window nt 커널(window 후기버전들에 사용된 커널?)에 탑재된 서브시스템
    • window 시스템을 사용하기 위한 linux interface 같은 느낌?

 

  • 보편규칙
    • help 기능
    • man ( manual ) 기능
      • -k
        • 동일 명령어 리스팅 ( → 명령어 + " " + "넘버링" 으로 실행 )

 

  • redirectionn
    • basic concept
      • 0< std in / 1> std out / 2> std err
      • > write
      • >> add
    • pseudo
      • keywrod param ( string ) 
      • keyword < param ( source file )
      • keyward  param > output file
      • keyward < param ( source file ) > output file
        • 작동순서는 ( keyward < param ) > output file
      • keyward param 2> error log file
        • keyward param > output 2> error
      • keyward param > output 2>&1
        • error발생시 output에 에러를 넣음 ( &1이 1번(std out)의 대상참조를 가져온다는 뜻? )
        • keyward param &> output 도 동일

 

  • Pipeline
    • Standard Input
      • command1 | command2
    • tee
      • 현재 표준입출력에 buffer를 유지하면서, output에 내보내 줌 ( T pipe )

 

  • 문자 확장
    • * , ?
    • [range] : ex. 1-9 A-Z a-z 등등
      • ^는 not(!)
    • 중괄호 확장
      • {리스트} : 리스트의 각 요소단위로 명령 실행 ( 반점으로 구분 )
        • ex. touch samplefile{A,B,C,D,E} 
        • 공백 안생기게 조심. 공백은 터미널에서 기본적으로 parameter 구분자로 사용됨
        • ..으로 생략가능 ( {a..e} = a b c d e )
    • $ 명령어 치환
      • 일반기능 : $( 기능 )
      • 산술확장 : $(( 수식 )) 
      • = ` 기능 `
    • " contents " : 공백을 string으로 받아서 하나의 뭉텅이로 받음. but 특수문자 ( $, \, ` ) 는 인식
    • ' contents ' : 모든 문자를 string으로 받아들임

 

기본 명령어 리스트

기본 명령어 리스트

  • who : 사용자 컴퓨터 이름
  • man [function] : 기능 메뉴얼
  • echo [contents] : 혼잣말
  • mkdir [folderaddress/foldername] : 폴더생성 ( -p, 직렬단계상의 여러폴더 동시생성가능 )
  • touch [folderaddress/filename] : 파일생성
  • nano [filename] : text edit
  • less [filename] : file 읽기
  • alias [name] ['기능플로우'] : 기존 기능의 매크로 또는 상용구
  • pwd : 현재 경로
  • bash [bin파일] : 내부명령어 bash 규칙으로 실행
  • explorer . : 현재 경로에 대한 탐색기 실행

 

  • which [filename]
    • 실행파일 경로

 

  • type [function]
    • binary 실행파일
    • shell 빌트인
    • 기능함수
    • alias(별칭)

 

  • ls : dir 내 파일 / 폴더 리스트
    • -l : 상세정보
    • -h : num to human scale ( 1,000 → 1k )
    • -R : 모든 하위폴더내용물 표기

 

  • sort [filename] : 정렬
    • default : 알파벳
    • -n : number
    • -k[num][h] : num열 기준 정렬, human scale 기준

 

  • head / tail [-num] : 문서의 앞/뒤부터 num개만큼만 출력 ( 개행 기준 )

 

  • wc : 갯수 카운트
    • -l : 라인수
    • -w : 단어수

 

  • find : 대상의 하위디렉토리의 모든 파일/폴더 리스팅
    • -name "string" : 이름이 string인 문자 탐색 ( 부위일치는 와일드카드 사용 )
    • -iname "string" : 동일하되, 대소문자 구분 안함
    • -size +-[num][scale] : 1G 이상 이런식
    • -type f : 파일
    • -exce 이후의 기능 실행 ( 마지막에 세미콜론 )

 

  • grep : 파일 내 검색
    • -i : 대소문자 무시
    • -f : 파일타입

 

  • xargs : std out을 std in param으로 패키징?

 

주요 용법

shell script

 

for문 - txt파일 읽어서 출력하기

# cat은 파일 내용물을 \t와 \r \n 전부 구분자로 사용해서 읽어버림
for i in $(cat {filename})
do
echo $i
done

 

tr 문자열 수정

a ="my string"
# tr은 translate 명령어, -d 는 delete 플래그
# 아마 echo로 표준출력스트림에 올리고 tr에서 변환한 다음 다음스트림으로 넘기는 형태
echo $(echo $a | tr -d "str")

 

find 현재 디렉토리 하위 모든파일 접근

# -type f 파일타입
# cp -v는 복사이력을 출력하는 플래그
# {} 는 find에 의해 입력된 표준출력
# . 은 현재경로에 복사 ( 파일명 보존 )
# \ 는 종료구분자인듯..?
find -type f -exec cp -v {} . \;

 

while IFS 문으로 txt내용 세부 제어

# 타겟파일을 읽되, 각 줄을 루프하며, \t(탭)을 구분자로 사용하여 0번 요소를 paramA에, 1번요소를 paramB에 할당
while IFS=$"\t" read -r paramA paramB
do
# paramA와 B에서 \r ( 개행문자. txt파일에서 엔터는 \n가 아닌 \r로 취급하는듯 )를 제거하고 출력
echo $(echo $paramA | tr -d '\r')
echo $(echo $paramB | tr -d '\r')
done < {파일이름}

 

파일명 변경

for file in *; do
  mv "$file" "${file%2}.png"
done

 

소문자로 변경

find . -type f -exec bash -c 'mv "$0" "${0,,}"' {} \;

 

 

Batch 파일 문법

  • 공백문자도 구분자로 취급하니 조심..
  • @echo off : 에코 오프
  • setlocal (EnableDelayedExpansion) : 로컬변수명 개시. 이 이후에 호출/생성하는 모든 변수는 해당 스코프에 종속 ( ~ endlocal )
    • EnableDelayedExpansion이 포함되어있으면, !{변수명}! 형태의 확장변수 사용가능 ( not const, 동적으로 변경되는 변수 값을 읽기위해 써야하는 듯..? )
  • REM {내용} : 주석
  • set {변수명}={값} : 변수명에 값 할당
    • set /a {변수명} : number형으로 변수 선언 ( 사칙연산 가능 )
    • set /p {변수명} : input받아서 변수명에 데이터 입력
  • %{변수명}% : 변수명 접근
  • "%{변수명}%" : 변수 내 데이터 string으로 사용
  • for {옵션} {구분자} {값 넣을 변수} in (배열(입력값)) do ( 실행문 )
    • 옵션
      • /f : 조건부 명령 처리 ( 입력값을 파일명이나 문자열을 받아서 파싱하는 등이 가능 )
        • 구분자에 usebackq, tokens, delims등 사용 가능
        • 값넣을 변수는 output이 여러개일 경우 자동으로 다음 알파벳자에 할당
          • ex. 값넣을변수가 %%a면, %%b, %%c 등에 알아서 부여 ( token에서 할당한 갯수에 따라 )
  • 변수명 replace
    • set {변수명} = % {변수명} : {바꿀값}={바뀔값} %
  • 문자열 파싱
    • % {변수명} : ~ (int 시작지점), (int 문자갯수) %
      • 앞에서부터 시작지점부터 출력 ( 12345:~3 → 345 )
      • 시작지점이 음수면 총문자열갯수+시작지점번째부터 출력 ( 12345:~-2 → 45 )
      • 시작지점부터 문자갯수만큼 출력
  • 조건문
    • if {조건문} {실행문}
    • if exist "{파일경로}" ( {실행문} )

 

추가 팁

  • mkdir : 최종 목적지만 입력하면 모든 중간경로 생성해줌
  • delayed expansion
    • 사용 조건
      • setlocal enabledelayedexpansion을 선언해야 함
      • 변수호출 시 %{변수명}% 이 아닌 !{변수명}!으로 호출해야 함 ( !!호출 시에 변수값을 갱신하는? )
    • 개요
      • "Delayed Expansion"은 Windows 배치 스크립트에서 사용되는 개념입니다. 이는 변수가 실행 시간(runtime)이 아니라 파싱 시간(parse time)에 확장되도록 하는 기능입니다. 이를 통해 스크립트가 실행되는 동안 변수의 값이 동적으로 변경될 수 있습니다.

'프로그래밍' 카테고리의 다른 글

win api  (0) 2024.05.21
네트워크  (0) 2024.05.21
어셈블리 & 기계어 & OS와 HW  (0) 2024.05.21
Kotlin  (0) 2024.05.21
C  (0) 2024.05.21

+ Recent posts