티스토리 뷰

개요

플랫폼을 오가는 개발자라면, 윈도우 명령행을 쓰다 무심코 ls를 쳐놓곤 '아... dir 이지...' 하고 다시 쳐본 경험이 있을 것이다.

 

이외에 head, tail, grep, sort, uniq 등...

많은 경우 윈도우에도 유사한 명령어가 있지만, 일일히 찾고 외우는 건 귀찮다. 가끔 마땅한 대안이 없는 경우도 있다.

 

이럴 때에 간단히 Unix 명령어를 윈도우 명령행에서 사용하는 방법을 알아보자.

 

 

우린 이미 답을 알고 있다.

우리가 쓰려는 Unix 명령어들은 대부분 GNU core utilities에 해당된다. 리눅스 용으로 개발되었지만 윈도우로 포팅이 꾸준히 이루어졌고, 이 포팅판들을 찾아 설치하면 된다.

 

하지만 사실 설치하지 않아도 된다(???).

 

아마 이 글을 읽을 사람이라면 높은 확률로 윈도우에 Git이 깔려 있을 것이다. 그리고 Git에는 우리가 쓰려는 Unix 명령어들이 동봉되어 온다.

 

 

이제 이 실행파일들이 경로에 상관없이 실행되게끔 path 설정만 해주면 되는 것이다.

 

 

설정하기

스크린샷은 윈도11에서 찍었으며, 윈도10에서도 과정은 동일하다.

 

만일 Git이 깔려있지 않다면 일단 Git을 설치한다.

 

시작 메뉴에서 '환경 변수' 검색해서 '시스템 환경 변수 편집' 선택

 

'환경 변수...' 클릭

 

사용자 변수 목록의 'Path' 선택 후 '편집...'

 

'새로 만들기'를 눌러 목록 제일 아래에 아래 경로를 추가한다.

C:\Program Files\Git\usr\bin

 

이제 명령행을 새로 띄우고 Unix 명령어를 사용하면 된다.

 

사용해보기

대부분은 그냥 유닉스 쉘에서 쓰듯 쓰면 된다.

ls, head, wc, cat, sort, uniq 명령어 동작

 

한글 관련해서는 될 때도 있고 안될 때도 있다. 구체적으로는,

UTF-8로 된 파일은 정상적으로 처리한다.

하지만 윈도 내부 명령어는 CP949(≒ EUC-KR)를 사용하기 때문에 한글이 깨진다.

 

이럴 때는 아래처럼 인코딩을 수동으로 변환해주면 깨지지 않고 출력된다.

ipconfig | iconv -f cp949 -t utf-8 | head

 

주의사항 1: 명령어 중 일부(date, dir, echo, expand, find, hostname, timeout, whoami 등)는 윈도우 내부 명령어와 중복된다. 따라서 Path 설정을 꼭 후순위로 해서 명령어가 덮어써지지 않도록 해야 한다.

 

주의사항 2: 윈도우와 리눅스 쉘은 escaping 이나 path, wildcard를 해석하는데 있어 차이가 있다. \ 이나 *, ? 등이 포함된 복잡한 명령어는 주의해서 사용해야 한다. (복잡한 작업은 그냥 git bash나 wsl 들어가서 하자.)

 

 

부록

명령어 목록:
[, arch, awk, b2sum, base32, base64, basename, basenc, bash, bunzip2, bzcat, bzip2, bzip2recover, captoinfo, cat, chattr, chcon, chgrp, chmod, chown, chroot, cksum, clear, cmp, column, comm, cp, csplit, cut, cygcheck, cygpath, cygwin-console-helper, d2u, dash, date, dd, df, diff, diff3, dir, dircolors, dirmngr-client, dirmngr, dirname, dos2unix, du, dumpsexp, echo, env, ex, expand, expr, factor, false, file, find, fmt, fold, funzip, gawk-5.0.0, gawk, gencat, getconf, getfacl, getopt, gkill, gmondump, gpg-agent, gpg-card, gpg-connect-agent, gpg-error, gpg-wks-client, gpg-wks-server, gpg, gpgconf, gpgparsemail, gpgscm, gpgsm, gpgsplit, gpgtar, gpgv, grep, groups, gzip, head, hmac256, hostid, hostname, iconv, id, infocmp, infotocap, install, join, kbxutil, kill, ldd, ldh, less, lessecho, lesskey, link, ln, locale, locate, logname, ls, lsattr, mac2unix, md5sum, minidumper, mintty, mkdir, mkfifo, mkgroup, mknod, mkpasswd, mktemp, mount, mpicalc, mv, nano, nettle-hash, nettle-lfib-stream, nettle-pbkdf2, nice, nl, nohup, nproc, numfmt, od, openssl, p11-kit, passwd, paste, patch, pathchk, perl, pinentry-w32, pinentry, pinky, pkcs1-conv, pldd, pluginviewer, pr, printenv, printf, profiler, ps, psl, ptx, pwd, readlink, realpath, rebase, regtool, reset, rm, rmdir, rnano, runcon, rview, rvim, scp, sdiff, sed, seq, setfacl, setmetamode, sexp-conv, sftp, sh, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shred, shuf, sleep, sort, split, ssh-add, ssh-agent, ssh-keygen, ssh-keyscan, ssh-pageant, ssh, sshd, ssp, stat, stdbuf, strace, stty, sum, sync, tabs, tac, tail, tar, tee, test, tic, tig, timeout, toe, touch, tput, tr, true, truncate, trust, tset, tsort, tty, tzset, u2d, umount, uname, unexpand, uniq, unix2dos, unix2mac, unlink, unzip, unzipsfx, users, vdir, view, vim, vimdiff, watchgnupg, wc, which, who, whoami, xargs, xxd, yat2m, yes, zipinfo

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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 31
글 보관함