내가 보려고 정리한 터미널 함수 25선
항상 윈도우와 리눅스를 오가며 작업을 하다 보니, 명령어가 자주 헷갈려서 실수하는 경우가 많았습니다.
아오
rm -rf빠직 💢 PowerShell에서는 진짜 적응 안되는고만…
그래서 이번 기회에 리눅스와 Windows PowerShell 둘다 비슷하게/공통적으로 사용할 수 있는 명령어들을 한데 모아 포스팅 형식으로 정리해보았습니다.

저처럼 다양한 운영체제를 넘나들며 작업하시는 분들께도 유용한 쉘 명령어 참고서가 되기를 바랍니다 😎
-
ls
- list의 약자로 현재 폴더의 파일 목록을 출력합니다.
-a: 숨김 파일 포함-l: 상세 정보
linux
1
2
3
4
$ ls # 파일 목록만 출력
$ ls -a # 숨김 파일 포함 출력
$ ls -l # 상세 정보 출력
$ ls -al # 숨김 파일 + 상세 정보 출력
windows
- Windows PowerShell에서도 ls를 입력하면 작동합니다.
- 다만, PowerShell은 리눅스 명령어를 흉내내는 것처럼 보이지만,
- 실제론
Get-ChildItem이라는 명령어의 별칭(Alias) 으로ls가 매핑되어 있습니다.
1
2
> Get-ChildItem
> ls
- 문제는,
PowerShell에서는 옵션을 붙일 때- 리눅스 스타일
-l,-a식으로 안 됩니다. - PowerShell은
매개변수(Parameter)라는 방식을 사용합니다. - 즉, 리눅스처럼
ls -l하면 되는 게 아니라, 다른 문법이 필요한 것입니다.
- 리눅스 스타일
1
> ls | Format-List
OR
1
> Get-ChildItem | Format-List
💡 참고로, 위와 같이 함수를 돌리면 너무 TMI가 많이 나옴…
- 추가로 함수를 써야하는데, 아래와 같이 함수를 입력하여, 리눅스 ls -l처럼 “이름, 사이즈, 수정시간” 정보만을 출력할 수 있습니다.
1
2
# 이름, 길이(사이즈), 마지막 수정시간만 보기
> Get-ChildItem | Select-Object Name, Length, LastWriteTime | Format-Table
OR
1
> ls | Select-Object Name, Length, LastWriteTime | Format-Table
-
mkdir
- 디렉토리 생성
-p: 중첩 디렉토리 생성
linux
1
2
$ mkdir test
$ mkdir -p /home/test/test1/test2
windows
1
2
> mkdir test
> mkdir C:\Users\user\test1\test2
-
cd
- 디렉토리 이동
.: 현재 경로,..: 상위 폴더,-: 이전 경로 복귀
linux
1
2
3
$ cd test
$ cd ..
$ cd -
windows
1
2
3
> cd test
> cd ..
> cd -
-
cp
- 파일 복사
-r: 디렉토리 복사
linux
1
2
$ cp file1.txt file2.txt
$ cp -r test test_backup
windows
Copy-Item은 복사할 대상, 대상 경로를 별도 지정하는 구조입니다.- 정확한 복사(파일 이름 바꾸기)는
-Destination을 명시해야 합니다.
- 정확한 복사(파일 이름 바꾸기)는
1
2
> Copy-Item file1.txt -Destination file2.txt
> Copy-Item test -Recurse -Destination test_backup
-
mv
- 파일/디렉토리 이동 또는 이름 변경
-v: verbose 출력
linux
1
2
$ mv a.txt b.txt
$ mv -v a.txt folder/b.txt
windows
1
2
> Move-Item a.txt b.txt
> Move-Item -Verbose a.txt b.txt
-
rm
- 파일/디렉토리 삭제
-r: 폴더,-f: 강제
linux
1
2
$ rm file1.txt file2.txt
$ rm -rf folder/
windows
1
2
> Remove-Item file1.txt,file2.txt
> Remove-Item folder -Recurse -Force
-
pwd
- 현재 디렉토리 위치 출력
linux
1
$ pwd
windows
1
> pwd
-
cat
- 파일 내용 출력 또는 생성
linux
1
2
3
4
5
$ cat file.txt
$ cat > new.txt << EOF
Hello
World
EOF
windows
1
2
> Get-Content file.txt
> "Hello`nWorld" | Out-File new.txt
단, -Encoding 옵션을 주지 않으면 기본 UTF-16 LE 인코딩이 될 수 있습니다.
-Encoding utf8을 옵션 추가를 권장합니다.
1
> "Hello`nWorld" | Out-File new.txt -Encoding utf8
-
touch
- 빈 파일 생성
linux
1
$ touch file.txt
windows
1
> New-Item file.txt -ItemType File
-
whichwindows
- 명령어의 실행 경로 출력
linux
1
$ which mv
windows
1
2
> Get-Command notepad | Select-Object -ExpandProperty Definition
> gcm notepad
-
find
- 파일/디렉토리 검색
-type f: 파일,-type d: 디렉토리
linux
1
2
$ find /home/user/ -type f -name "*.txt"
$ find . -name "*.log" -exec rm {} \;
windows
1
> Get-ChildItem -Recurse -Filter *.txt
※ PowerShell에서 -Filter는 매우 빠른 검색을 지원합니다.
-
grep
- 문자열 포함 필터링
linux
1
2
$ ls | grep log
$ find . -name "*.txt" | grep sample
windows
1
> ls | Select-String log
-
df/du/lsblk
- 디스크 사용량 확인
linux
1
2
3
$ df -h
$ du -h --total | grep total
$ lsblk
windows
1
> Get-PSDrive
- PowerShell의
Get-PSDrive는 디스크 볼륨 정보를 가져오긴 하지만,- 리눅스
df -h처럼 사용/여유 공간을 명확히 보여주지는 않습니다.
- 리눅스
아래 함수는 Windows 10 이상에서 디스크 용량 및 사용량 정보를 더 명확히 표시합니다.
1
> Get-Volume
-
diff
- 두 파일 비교
linux
1
$ diff file1.txt file2.txt
windows
1
> Compare-Object (Get-Content file1.txt) (Get-Content file2.txt)
-
chmod/chown
- 권한 및 소유자 변경
linux
1
2
3
4
$ chmod 600 file.txt
$ chown user:group file.txt
$ chmod -R 755 folder/
$ chown -R user:group folder/
windows
1
2
# windowss는 icacls 또는 Set-Acl 명령어 사용
> icacls file.txt /grant user:F
-
jobs/pkill
- 백그라운드 작업 확인 및 종료
linux
1
2
$ jobs
$ pkill -9 vim
windows
1
2
> Get-Job
> Stop-Process -Name vim
🔵 PowerShell의
Get-Job은 PowerShell에서 실행한 백그라운드 Job만 보여줍니다. Stop-Process는 실제로 프로세스를 죽이는 거라 약간 다른 개념입니다.
- 리눅스
pkill(kill) = WindowsStop-Process - 리눅스
jobs= WindowsGet-Job
※ 프로세스 이름으로 죽일 때는 -Name, PID로 죽일 때는 -Id를 사용합니다.
-
ping
- 네트워크 연결 상태 확인
linux
1
$ ping google.com -a
windows
1
> ping google.com -a
※ -a 옵션은 Windows에서는 “IP를 호스트 이름으로 바꿔서 표시” 의미입니다.
-
wget
- URL을 통한 파일 다운로드
linux
1
$ wget http://example.com/file.zip
windows
1
> Invoke-WebRequest http://example.com/file.zip -OutFile file.zip
※ Invoke-WebRequest는 iwr 별칭으로도 사용 가능합니다.
-
top/htop
- 리소스 모니터링 (
htop은 설치 필요)
linux
1
2
$ top
$ htop
windows
1
> Get-Process
| *※ Get-Process | Out-GridView를 추가하면 GUI 기반으로도 볼 수 있습니다.* |
-
기타 유용한 단축키 / 명령어
clear: 화면 정리 (단축키Ctrl + L)Ctrl + C: 현재 작업 강제 종료Ctrl + Z: 작업 일시 중지fg: 중지된 작업 재개Tab: 자동완성↑: 이전 명령어 반복
※ Windows Terminal에서도 Ctrl+L, Ctrl+C, Ctrl+Z 잘 작동합니다.
-
alias
- 자주 사용하는 명령어를 간단한 이름으로 줄여서 등록할 수 있습니다.
linux
1
2
$ alias ll='ls -alF'
$ alias gs='git status'
windows
1
> Set-Alias ll Get-ChildItem
※ PowerShell은 Alias 등록 시 세션마다 초기화되기 때문에, 영구 저장은 $PROFILE 수정이 필요합니다.
-
xargs
- 표준 입력(STDIN)으로 받은 리스트를 명령어의 인자로 전달합니다.
- 대량의 파일, 문자열을 명령어 인자로 묶어 넘기는 데 특화되어 있습니다
linux
1
$ find . -name "*.log" | xargs rm
→ find로 찾은 파일 목록을 rm에 인자로 한꺼번에 넘겨서 빠르게 삭제.
windows
-
PowerShell은 기본적으로 “파이프라인 객체(Object)” 를 사용하기 때문에,
-
파이프( )로 넘기는 값이 단순 문자열(String) 이 아니라 오브젝트(Object) 입니다. - 그래서 xargs처럼 단순 “리스트 묶기”를 자동으로 해주지 않습니다.
-
-
그래서
xargs처럼 한 번에 여러 개를 한꺼번에 처리하지 못하지만,하나씩은 처리할 수 있습니다.
1
> Get-Content files.txt | ForEach-Object { Remove-Item $_ }
Get-Content→ 파일 목록을 한 줄씩 읽어오고ForEach-Object→ 한 줄씩 받아서 Remove-Item 실행
PowerShell 7 이상에서는
ForEach-Object -Parallel사용 가능
1
Get-Content files.txt | ForEach-Object -Parallel { Remove-Item $_ }
- PowerShell 7+ 부터 -Parallel을 지원합니다.
- 병렬로 처리해서 속도를 어느 정도 보완할 수 있습니다.
- 단, -Parallel은 별도의 쓰레드 워커(Worker) 를 만들어야 해서 약간 무겁습니다.
-
tee
- 명령어 출력을 화면에 보여주면서 동시에 파일로 저장합니다.
linux
1
$ echo "log message" | tee log.txt
windows
1
> "log message" | Tee-Object -FilePath log.txt
-
head/tail
- 파일의 앞부분이나 뒷부분을 출력하는 명령어입니다.
linux
1
2
3
$ head -n 10 file.txt
$ tail -n 20 file.txt
$ tail -f /var/log/syslog
windows
1
2
> Get-Content file.txt -TotalCount 10
> Get-Content file.txt | Select-Object -Last 20
-
history
- 사용자가 입력한 명령어들의 기록을 출력합니다.
linux
1
2
3
4
$ history
$ history | grep ssh
$ !45
$ !git
windows
1
> Get-History
이상으로 자주 쓰는 터미널 함수 25선 정리를 마칩니다!!
읽어주셔서 감사합니다 💻