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
- 동일 명령어 리스팅 ( → 명령어 + " " + "넘버링" 으로 실행 )
- -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 도 동일
- basic concept
- Pipeline
- Standard Input
- command1 | command2
- tee
- 현재 표준입출력에 buffer를 유지하면서, output에 내보내 줌 ( T pipe )
- Standard Input
- 문자 확장
- * , ?
- [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에서 할당한 갯수에 따라 )
- /f : 조건부 명령 처리 ( 입력값을 파일명이나 문자열을 받아서 파싱하는 등이 가능 )
- 옵션
- 변수명 replace
- set {변수명} = % {변수명} : {바꿀값}={바뀔값} %
- 문자열 파싱
- % {변수명} : ~ (int 시작지점), (int 문자갯수) %
- 앞에서부터 시작지점부터 출력 ( 12345:~3 → 345 )
- 시작지점이 음수면 총문자열갯수+시작지점번째부터 출력 ( 12345:~-2 → 45 )
- 시작지점부터 문자갯수만큼 출력
- % {변수명} : ~ (int 시작지점), (int 문자갯수) %
- 조건문
- if {조건문} {실행문}
- if exist "{파일경로}" ( {실행문} )
추가 팁
- mkdir : 최종 목적지만 입력하면 모든 중간경로 생성해줌
- delayed expansion
- 사용 조건
- setlocal enabledelayedexpansion을 선언해야 함
- 변수호출 시 %{변수명}% 이 아닌 !{변수명}!으로 호출해야 함 ( !!호출 시에 변수값을 갱신하는? )
- 개요
- "Delayed Expansion"은 Windows 배치 스크립트에서 사용되는 개념입니다. 이는 변수가 실행 시간(runtime)이 아니라 파싱 시간(parse time)에 확장되도록 하는 기능입니다. 이를 통해 스크립트가 실행되는 동안 변수의 값이 동적으로 변경될 수 있습니다.
- "Delayed Expansion"은 Windows 배치 스크립트에서 사용되는 개념입니다. 이는 변수가 실행 시간(runtime)이 아니라 파싱 시간(parse time)에 확장되도록 하는 기능입니다. 이를 통해 스크립트가 실행되는 동안 변수의 값이 동적으로 변경될 수 있습니다.
- 사용 조건