pwd 는 지금 있는 폴더의 절대 경로를 출력합니다. cd 는 폴더를 옮깁니다.
| 명령 | 뜻 |
|---|---|
cd /opt/myapp |
절대 경로로 |
cd logs |
현재 폴더 아래로 |
cd .. |
한 단계 위로 |
cd |
홈으로 |
cd - |
직전 폴더로 |
cd ~/work |
홈 아래로 |
cd - 는 두 폴더를 오갈 때 씁니다. 프롬프트에 현재 폴더가 보이도록 설정돼 있어도 pwd 로 확인하는 습관이 안전합니다.
/ 로 시작하면 절대 경로, 아니면 현재 폴더 기준 상대 경로입니다. 특수 이름 셋을 기억합니다.
| 표기 | 뜻 |
|---|---|
. |
현재 폴더 |
.. |
상위 폴더 |
~ |
내 홈 폴더 |
스크립트나 cron 에서는 절대 경로를 씁니다. 실행 위치가 어디든 같은 파일을 가리키기 때문입니다. realpath 파일 이 상대 경로를 절대 경로로 바꿔 줍니다.
ls 는 가장 많이 치는 명령입니다. 옵션 다섯 개를 조합합니다.
| 옵션 | 뜻 |
|---|---|
-l |
권한·소유자·크기·시각 |
-a |
숨김 파일(.으로 시작) 포함 |
-h |
크기를 K·M·G 로 |
-t |
수정 시각 최신순 |
-R |
하위 폴더까지 |
ls -la 가 기본형이고 ls -lt | head 가 최근 바뀐 파일을 보는 형태입니다. ls -lh 의 첫 열 -rw-r--r-- 은 03 사용자·권한 레슨에서 읽는 법을 배웁니다.
mkdir docs # 폴더 하나
mkdir -p a/b/c # 중간 폴더까지, 이미 있어도 에러 없음
touch memo.txt # 빈 파일 만들기
touch memo.txt # 있으면 수정 시각만 갱신-p 없이 mkdir a 를 두 번 치면 "File exists" 에러입니다. 스크립트에서는 항상 -p 를 씁니다. touch 는 파일이 있는지 확인하는 용도로도 씁니다.
cp a.txt b.txt # 파일 복사
cp a.txt docs/ # 폴더 안으로
cp -r docs docs_backup # 폴더째 (-r 필수)
cp -p a.txt b.txt # 권한·시각 유지
cp -i a.txt b.txt # 덮어쓸 때 물어봄폴더는 -r 이 없으면 "omitting directory" 로 복사되지 않습니다. -p 는 백업할 때 원본 시각을 남기려고 씁니다. -i 는 실수 방지용으로 별칭에 넣어 두는 사람이 많습니다.
리눅스에는 "이름 변경" 명령이 따로 없습니다. mv 가 같은 폴더 안에서는 이름 변경, 다른 폴더로는 이동입니다.
mv old.txt new.txt # 이름 변경
mv new.txt docs/ # 이동
mv docs docs_old # 폴더 이름 변경같은 파티션 안 mv 는 데이터를 옮기지 않고 이름표만 바꿔 수 GB 도 즉시 끝납니다. 다른 파티션으로 가면 복사 후 삭제라 시간이 걸립니다.
rm a.txt # 파일
rm -r docs # 폴더째
rm -f 없는파일 # 없어도 에러 없음
rm -rf build/ # 폴더째, 묻지 않음
rmdir empty_dir # 빈 폴더만rm -rf 는 되돌릴 수 없습니다. 변수를 쓸 때는 rm -rf "$DIR"/* 에서 DIR 이 비면 어떻게 되는지를 항상 생각합니다. 운영 묶음 08 의 set -u 가 그 방어입니다.
cat small.txt # 전체 출력, 작은 파일만
head -n 20 app.log # 앞 20줄
tail -n 20 app.log # 뒤 20줄
tail -f app.log # 계속 따라가기, Ctrl+C 로 끝수백 MB 로그를 cat 하면 터미널이 멈춥니다. head·tail 로 일부만 보고, 전체를 넘겨 보려면 02 텍스트 레슨의 less 를 씁니다.
wc -l app.log # 줄 수
wc -c app.log # 바이트
wc -w memo.txt # 단어 수
file app.jar # Zip archive
file nums.txt # ASCII textfile 은 확장자가 아니라 내용을 보고 종류를 맞힙니다. 확장자 없는 파일이나 바이너리인지 텍스트인지 볼 때 씁니다.
find 시작폴더 조건 이 기본형입니다. 조건을 여러 개 이으면 모두 만족하는 것만 나옵니다.
| 조건 | 뜻 |
|---|---|
-name '*.log' |
이름 패턴 |
-iname |
대소문자 무시 |
-type f / -type d |
파일 / 폴더 |
-empty |
빈 것 |
-newer 파일 |
그 파일보다 최신 |
-mtime -1 |
하루 안에 수정 |
-size +10M |
10MB 초과 |
패턴은 따옴표로 감쌉니다. 감싸지 않으면 셸이 먼저 *.log 를 현재 폴더 기준으로 펼쳐 엉뚱한 결과가 나옵니다.
find . -name '*.txt' -exec wc -l {} + # 찾은 파일들에 wc
find . -name '*.tmp' -exec rm {} + # 지우기
find . -name '*.log' -delete # 지우기 전용{} 가 찾은 파일 자리이고 + 는 여러 개를 한 번에 넘깁니다. \; 로 끝내면 파일마다 한 번씩 실행돼 느립니다.
du -sh docs # 폴더 합계
du -sh */ | sort -rh # 하위 폴더별 큰 순서
stat -c '%n %s bytes %A %y' a.txt # 이름 크기 권한 수정시각
which bash # 명령의 실행 파일 위치du -sh */ 가 "어느 폴더가 큰가" 의 정답입니다. which 는 같은 이름의 명령이 여러 개일 때 어느 것이 실행되는지 알려 줍니다.