콘텐츠로 이동

Nushell - 현대적인 구조화된 셸 치트시트

Nushell - 현대적인 구조화된 셸 치트시트

섹션 제목: “Nushell - 현대적인 구조화된 셸 치트시트”

모든 것을 원시 텍스트 대신 구조화된 데이터로 취급하는 현대적인 셸. 파이프라인은 단순히 문자열이 아닌 테이블, 레코드 및 리스트와 함께 작동합니다. JSON, CSV, TOML 및 YAML을 기본적으로 이해하는 셸이라고 생각하세요.

플랫폼명령어
macOS (Homebrew)brew install nushell
Windows (Winget)winget install nushell
Windows (Chocolatey)choco install nushell
Windows (Scoop)scoop install nu
Ubuntu/Debiansudo apt install nushell (또는 GitHub 릴리스에서 다운로드)
Arch Linuxsudo pacman -S nushell
Fedora/RHELsudo dnf install nushell
Cargo (모든 플랫폼)cargo install nu
Nixnix-env -iA nixpkgs.nushell

실행: 모든 셸에서 nu를 실행하여 Nushell을 시작. 기본 셸로 설정: chsh -s $(which nu)

Nushell 파이프라인은 텍스트가 아닌 구조화된 데이터 (테이블, 레코드, 리스트)를 전달합니다:

# 전통적인 셸: text → grep → awk → text
# Nushell: table → where → select → table

ls | where size > 1mb | sort-by size --reverse | first 5

데이터 유형: 문자열, 정수, 부동소수점, 불린, 날짜, 기간, 파일 크기, 리스트, 레코드, 테이블

명령어설명
ls구조화된 테이블로 디렉토리 나열
ls -la긴 형식의 모든 파일 나열 (숨김 파일 포함)
cd path/to/dir디렉토리 변경
cp source dest파일 또는 디렉토리 복사
mv source dest파일 이동 또는 이름 변경
rm file파일 제거
mkdir dirname디렉토리 생성
open file.json구조화된 데이터로 파일 열기 (형식 자동 감지)
open file.csvCSV를 테이블로 열기
open file.tomlTOML을 레코드로 열기
save output.json파이프라인 출력을 파일에 저장
cat file.txt파일 내용을 텍스트로 표시
ps실행 중인 프로세스를 테이블로 표시
sys시스템 정보 표시
which command명령어 위치 찾기
help commands사용 가능한 모든 명령어 나열
help <command>특정 명령어의 도움말 표시
명령어설명
ls | where size > 10mb10MB보다 큰 파일 필터링
ls | where name =~ "\.rs$"파일명에 대한 정규식으로 필터링
ls | where type == "dir"디렉토리만 표시
ls | where modified > 2day지난 2일 동안 수정된 파일
ls | select name size이름과 크기 열만 표시
ls | reject typetype 열 제거
ls | get name이름 열만 리스트로 추출
ls | first 5처음 5개 항목 표시
ls | last 3마지막 3개 항목 표시
ls | skip 10처음 10개 항목 건너뛰기
ls | nth 0 2 4인덱스별로 항목 선택
ls | length항목 수 계산
ls | uniq중복 항목 제거
명령어설명
ls | sort-by size크기 오름차순 정렬
ls | sort-by size --reverse크기 내림차순 정렬
ls | sort-by name알파벳순 정렬
ls | group-by type유형별로 항목 그룹화
ls | group-by {get name | path parse | get extension}파일 확장자별로 그룹화
명령어설명
"hello world" | str upcase대문자로 변환
"HELLO" | str downcase소문자로 변환
" hello " | str trim공백 제거
"hello" | str contains "ell"문자열에 부분 문자열이 포함되어 있는지 확인
"hello" | str replace "l" "L"문자 바꾸기
"hello world" | split row " "문자열을 리스트로 분할
["hello" "world"] | str join ", "리스트를 문자열로 결합
"hello" | str length문자열 길이 가져오기
"hello" | str starts-with "he"문자열 접두사 확인
명령어설명
open data.json | get field_nameJSON의 필드 접근
open data.json | get nested.field중첩된 필드 접근
{name: "Alice", age: 30}레코드 생성
[1 2 3 4 5]리스트 생성
[[name age]; [Alice 30] [Bob 25]]테이블 생성
$data | to jsonJSON으로 변환
$data | to csvCSV로 변환
$data | to tomlTOML로 변환
$data | to yamlYAML로 변환
$data | to md마크다운 테이블로 변환
명령어설명
[1 2 3 4] | math sum값의 합계
[1 2 3 4] | math avg값의 평균
[1 2 3 4] | math max최대값
[1 2 3 4] | math min최소값
[1 2 3 4] | math median중간값
ls | get size | math sum나열된 파일의 총 크기
1 + 2기본 산술
10 / 3나누기
2 ** 8거듭제곱
명령어설명
http get https://api.example.com/dataURL을 가져와 응답 파싱
http post https://api.example.com/data {key: "value"}본문과 함께 POST 요청
fetch url | get field가져와서 특정 필드 추출
# 변수 (기본적으로 불변)
let name = "Alice"
let count = 42
let files = (ls | where size > 1mb)

# 가변 변수
mut counter = 0
$counter += 1

# If/else
if $count > 10 { "big" } else { "small" }

# 루프
for file in (ls) { print $file.name }
ls | each { |row| $row.name | str upcase }

# 사용자 정의 명령어 (함수)
def greet [name: string] { $"Hello, ($name)!" }
greet "World"
파일용도
$nu.config-path주 설정 (config.nu)
$nu.env-path환경 설정 (env.nu)
# 설정 파일 위치 표시
$nu.config-path

# 설정 편집
config nu    # config.nu를 편집기에서 열기
config env   # env.nu를 편집기에서 열기
# config.nu에서
$env.config = {
    show_banner: false           # 환영 배너 비활성화
    table: {
        mode: rounded            # 테이블 스타일: rounded, compact, thin, none
    }
    completions: {
        algorithm: "fuzzy"       # 퍼지 탭 자동완성
    }
    history: {
        max_size: 10000          # 보관할 히스토리 항목
        file_format: "sqlite"    # sqlite 또는 plaintext
    }
}
# 프로젝트에서 가장 큰 파일 찾기
ls **/* | where type == "file" | sort-by size --reverse | first 20

# JSON API 파싱 및 쿼리
http get https://api.github.com/repos/nushell/nushell | select stargazers_count forks_count

# 형식 간 변환
open data.csv | to json | save data.json

# 로그 파일 분석
open access.log | lines | parse "{ip} - - [{date}] \"{method} {path} {proto}\" {status} {size}"
| where status == "404" | group-by path | sort-by -r

# 빠른 시스템 개요
sys | get host
ps | sort-by cpu --reverse | first 10
기능Bash/ZshNushell
데이터 모델텍스트 스트림구조화된 테이블
출력 파싱grep, awk, sed내장 where, select, get
JSON 처리jq 필요기본 (open file.json)
오류 처리종료 코드풍부한 오류 메시지
탭 자동완성기본컨텍스트 인식
타입 시스템없음정수, 문자열, 날짜, 크기 등
학습 곡선익숙함새로운 구문 학습 필요
외부 명령어기본완전히 지원됨