CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
  • Week 1
    • 1.운영체제와 커널: 리눅스가 하는 일
    • 2.리눅스의 탄생: 유닉스에서 리누스까지
    • 3.자유 소프트웨어와 오픈소스: 라이선스가 정하는 것
    • 4.배포판: 커널과 도구를 하나로 묶어 파는 단위
    • 5.Week 1 종합 복습: 리눅스라는 이름의 정체
  • Week 2
  • Week 3
    • 1.셸 첫걸음: 명령 한 줄을 읽는 법
    • 2.디렉터리와 파일 다루기
    • 3.내용 보기와 찾기
    • 4.사용자와 계정 관리
    • 5.Week 3 종합 복습: 명령어 한 장 정리
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
리눅스마스터 1급 · 1급리눅스마스터 1급
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 2급/Week 3/Day 2

기준: 리눅스마스터 2급 출제 기준·오류 제보

리눅스마스터 2급· AssociateWeek 3 · Day 2읽기 약 9분
핵심 정리
  • 위치를 다루는 세 명령: pwd(어디에 있나) · cd(옮기기) · ls(무엇이 있나).
  • ls -a는 숨김 파일을, ls -l은 상세 정보를 보여준다. 리눅스의 숨김 파일은 이름이 .으로 시작하는 파일이다.
  • cp는 복사, mv는 이동이자 이름 변경이다. mv에 별도의 rename 명령이 없다.
  • 디렉터리를 다루려면 -r(재귀) 이 필요하다 — cp -r, rm -r.
  • rm에는 휴지통이 없다. 지우면 끝이다. rm -rf는 특히 위험하다.

Day 2 - 디렉터리와 파일 다루기

지금 어디에 있나

명령하는 일
pwd현재 디렉터리의 절대 경로를 출력 (print working directory)
cd 경로그 경로로 이동
cd 또는 cd ~홈 디렉터리로
cd ..상위 디렉터리로
cd -직전에 있던 디렉터리로
pwd            # /home/user
cd /etc        # 절대 경로로 이동
cd ..          # /  로 올라감
cd ~           # 홈으로 복귀
  • cd는 절대 경로와 상대 경로를 모두 받는다. /home/user에 있을 때 cd docs와 cd /home/user/docs는 같은 곳으로 간다.
  • cd -는 직전 위치를 기억해 두었다가 돌아가므로, 두 디렉터리를 오가며 작업할 때 편하다.
  • ~ 뒤에 사용자 이름을 붙이면 그 사용자의 홈을 뜻한다 — cd ~alice는 /home/alice로 간다.
[user@localhost ~]$ cd /var/log
[user@localhost log]$ cd /etc
[user@localhost etc]$ cd -
/var/log
[user@localhost log]$ pwd
/var/log

무엇이 있나 — ls

옵션뜻
-a숨김 파일 포함 (all)
-l상세 정보 (long) — 권한·소유자·크기·시간
-h크기를 사람이 읽기 쉽게 (human) — KB, MB
-t시간순 정렬
-r역순 정렬 (reverse)
-R하위 디렉터리까지 재귀적으로
-iinode 번호 표시
ls -l          # 상세히
ls -la         # 숨김 파일까지 상세히
ls -lh         # 크기를 KB/MB 로
ls -ltr        # 시간순 역순 — 최근 파일이 맨 아래

함께 알아 두면 문항의 보기를 가르기 쉬운 옵션이 몇 개 더 있다.

옵션뜻
-d디렉터리 안이 아니라 디렉터리 자체를 보여준다 (ls -ld /etc)
-S크기순 정렬 (큰 것부터)
-F이름 뒤에 종류 표시를 붙인다 — 디렉터리 /, 실행 파일 *, 심볼릭 링크 @
-A-a와 같되 .과 ..은 빼고 보여준다

⚠️ 대소문자가 다르면 다른 옵션이다. -r은 역순(reverse), -R은 재귀(recursive)다. -a는 .·..까지 전부, -A는 그 둘을 뺀다. -s는 블록 수 표시, -S는 크기순 정렬이다.

  • 옵션 없는 ls는 이름순으로 정렬한다. -t는 수정 시각이 최근인 것부터, -S는 큰 것부터이고 -r을 더하면 각각 뒤집힌다.
  • ls -a에 항상 보이는 .과 .. 는 현재 디렉터리와 상위 디렉터리를 가리키는 항목이다. 이름이 .으로 시작하므로 이들도 숨김 처리된다.

숨김 파일

  • 리눅스에서 숨김 파일은 이름이 .으로 시작하는 파일이다. 별도의 속성이 아니다.
  • .bashrc, .ssh, .profile 처럼 설정 파일이 대부분 여기 해당한다.
  • 그냥 ls로는 안 보이고 ls -a 를 써야 보인다.

ls -l 한 줄 읽기

   -rw-r--r--  1  user  group  1024  Sep  3 09:00  a.txt
   │        │  │   │      │      │        │          │
   │        │  │   │      │      │        │          └── 이름
   │        │  │   │      │      │        └───────────── 마지막 수정 시각
   │        │  │   │      │      └────────────────────── 크기(바이트)
   │        │  │   │      └───────────────────────────── 그룹
   │        │  │   └──────────────────────────────────── 소유자
   │        │  └──────────────────────────────────────── 하드 링크 수
   │        └─────────────────────────────────────────── 권한 (다음 주에 자세히)
   └──────────────────────────────────────────────────── 파일 종류

맨 앞 한 글자가 파일 종류다.

글자종류
-일반 파일
d디렉터리
l심볼릭 링크
b블록 장치 (디스크)
c문자 장치 (키보드)

실제 출력에서 종류별로 어떻게 보이는지 한 번에 본다.

$ ls -l /dev/sda /dev/tty /etc/passwd /bin /tmp -d
lrwxrwxrwx.  1 root root         7 Sep  3 09:00 /bin -> usr/bin
brw-rw----.  1 root disk    8,   0 Sep  3 09:00 /dev/sda
crw-rw-rw-.  1 root tty     5,   0 Sep  3 09:00 /dev/tty
-rw-r--r--.  1 root root      2104 Sep  3 09:00 /etc/passwd
drwxrwxrwt. 12 root root      4096 Sep  3 09:10 /tmp
  • 심볼릭 링크는 이름 뒤에 -> 원본 이 붙고, 크기는 가리키는 경로의 글자 수다(usr/bin은 7글자).
  • 장치 파일은 크기 자리에 숫자 두 개(주 번호, 부 번호)가 나온다. 디렉터리의 크기는 안에 든 파일의 합계가 아니라 디렉터리 항목 자체의 크기다.
  • ls -l이 보여 주는 시각은 마지막 수정 시각(mtime) 이다. 파일에는 시각이 세 가지 붙는다.
시각바뀌는 때보는 법
mtime (modify)파일 내용을 고쳤을 때ls -l
atime (access)파일을 읽었을 때ls -lu
ctime (change)권한·소유자 등 속성이 바뀌었을 때ls -lc

함정: ctime은 생성 시각(create)이 아니다. 상태가 바뀐(change) 시각이다. 내용을 고치면 mtime과 ctime이 함께 바뀌고, chmod만 하면 ctime만 바뀐다.

만들고 지우기

명령하는 일주의
mkdir 이름디렉터리 생성중간 경로가 없으면 실패
mkdir -p a/b/c중간 경로까지 한 번에 생성
rmdir 이름디렉터리 삭제비어 있어야만 지워진다
rm 파일파일 삭제되돌릴 수 없다
rm -r 디렉터리디렉터리를 내용째 삭제
rm -f확인 없이 강제 삭제
touch 파일빈 파일 생성 / 시간 갱신

⚠️ rm -rf는 리눅스에서 가장 위험한 명령이다. 휴지통이 없어 복구가 사실상 불가능하다. 경로를 지우기 전에 ls로 먼저 확인하는 습관이 안전하다.

직접 해 보면 오류 문구가 무엇을 요구하는지 보인다.

$ mkdir project/src/lib
mkdir: cannot create directory 'project/src/lib': No such file or directory
$ mkdir -p project/src/lib
$ touch project/src/lib/a.c
$ rmdir project
rmdir: failed to remove 'project': Directory not empty
$ rm project
rm: cannot remove 'project': Is a directory
$ rm -r project
옵션뜻
rm -i지우기 전에 하나씩 물어본다 (interactive)
rm -f묻지 않고, 없는 파일이어도 오류를 내지 않는다 (force)
rm -r디렉터리를 하위 내용까지 (recursive)
rm -v지운 항목을 출력한다 (verbose)
rmdir -p a/b/cc를 지운 뒤 비게 된 상위 디렉터리도 차례로 지운다
  • -i와 -f를 함께 쓰면 뒤에 쓴 쪽이 이긴다. RedHat 계열은 root에게 rm을 rm -i로 별칭해 두는 경우가 많아, root가 rm을 치면 확인을 묻는 것이다.
  • touch는 파일이 없으면 빈 파일(0바이트)을 만들고, 있으면 내용은 그대로 둔 채 시각만 현재로 바꾼다. touch -t 202609031200 a.txt처럼 -t로 시각을 직접 지정할 수도 있다.

와일드카드 — 여러 파일을 한 번에 가리키기

기호일치하는 것예
*0글자 이상의 아무 문자열*.txt → a.txt, note.txt
?정확히 한 글자a?.txt → a1.txt (a10.txt는 아님)
[abc]괄호 안 글자 중 하나[ab].txt → a.txt, b.txt
[a-z]범위 안 글자 중 하나file[0-9] → file1
[!abc]괄호 안 글자가 아닌 한 글자[!a].txt → b.txt
ls *.txt             # .txt 로 끝나는 것 전부
rm report?.bak       # report1.bak, reportA.bak ...
cp [a-c]*.conf /tmp  # a, b, c 로 시작하는 .conf
  • 와일드카드는 명령이 아니라 셸이 먼저 풀어서 파일 이름 목록으로 바꾼 뒤 명령에 넘긴다. rm * 앞에서 ls *로 무엇이 걸리는지 확인할 수 있는 이유다.
  • *는 숨김 파일(.으로 시작)에는 일치하지 않는다. rm *을 해도 .bashrc는 남는다.

복사하고 옮기기

명령하는 일
cp 원본 사본복사
cp -r 디렉터리 대상디렉터리 복사 — -r 필수
cp -i덮어쓰기 전에 물어본다
cp -p권한·시간 정보를 보존하며 복사
mv 원본 대상이동
mv 옛이름 새이름이름 변경
  • mv 하나가 이동과 이름 변경을 겸한다. 리눅스에는 rename 전용 명령이 기본으로 없다.
  • 같은 디렉터리 안에서 mv a.txt b.txt 하면 이름이 바뀌고, 다른 디렉터리를 대상으로 주면 이동한다.
  • mv는 -r이 필요 없다. 디렉터리도 그냥 옮겨진다.
cp a.txt b.txt          # 파일 복사
cp -r docs backup       # 디렉터리 복사 (-r 없으면 오류)
mv a.txt /tmp/          # 이동
mv old.txt new.txt      # 이름 변경

대상이 이미 있을 때 결과가 달라진다

cp와 mv는 마지막 인자가 이미 있는 디렉터리인지에 따라 동작이 갈린다.

명령backup이 없을 때backup이 있는 디렉터리일 때
cp -r docs backupdocs의 사본이 backup이라는 이름으로 생긴다backup/docs로 안에 들어간다
mv docs backupdocs의 이름이 backup으로 바뀐다backup/docs로 이동한다
cp a.txt b.txt c.txt /tmp/     # 원본이 여러 개면 마지막은 반드시 디렉터리
mv *.log /var/backup/          # 여러 파일을 한 번에 이동
  • 대상에 같은 이름의 파일이 있으면 묻지 않고 덮어쓴다. 막으려면 -i를 쓴다.
옵션cpmv
-i덮어쓰기 전에 확인덮어쓰기 전에 확인
-f묻지 않고 강제묻지 않고 강제
-v처리한 내용을 출력처리한 내용을 출력
-u원본이 더 새로울 때만 복사원본이 더 새로울 때만 이동
-b덮어쓸 파일의 백업을 남김덮어쓸 파일의 백업을 남김
-r / -R디렉터리를 하위까지(필요 없음)
-p권한·소유자·시각 보존(이동은 원래 보존됨)
-a-r에 속성·링크 보존까지 더한 백업용 옵션—

cp와 mv의 근본 차이. cp는 새 파일을 만든다 — 그래서 사본의 소유자는 복사한 사람이 되고 시각은 지금이 된다(-p로 원본 것을 유지). mv는 같은 파일 시스템 안에서는 데이터를 옮기지 않고 이름표만 바꿔 단다. inode가 그대로라 큰 디렉터리도 순식간에 옮겨지고, 그래서 -r이 필요 없다.

링크

종류명령성질
하드 링크ln 원본 링크같은 inode를 가리킨다. 원본을 지워도 데이터가 남는다
심볼릭 링크ln -s 원본 링크경로를 가리키는 바로가기. 원본을 지우면 깨진다
  • 심볼릭 링크는 ls -l에서 맨 앞이 l 로 표시되고 링크 -> 원본 형태로 보인다.
  • 하드 링크는 다른 파일 시스템끼리는 만들 수 없고, 디렉터리에는 걸 수 없다.

파일 이름은 사실 inode라는 번호에 붙은 이름표다. 실제 데이터와 권한·소유자·크기 정보는 inode가 갖고 있다. 두 링크의 차이는 여기서 나온다.

$ echo hello > a.txt
$ ln a.txt hard.txt
$ ln -s a.txt soft.txt
$ ls -li
131075 -rw-r--r--. 2 user user 6 Sep  3 09:00 a.txt
131075 -rw-r--r--. 2 user user 6 Sep  3 09:00 hard.txt
131090 lrwxrwxrwx. 1 user user 5 Sep  3 09:01 soft.txt -> a.txt
$ rm a.txt
$ cat hard.txt
hello
$ cat soft.txt
cat: soft.txt: No such file or directory
  • a.txt와 hard.txt는 inode 번호가 같고 링크 수가 2다. 둘은 원본·사본 관계가 아니라 같은 파일의 동등한 두 이름이다.
  • rm은 이름표 하나를 떼는 것이다. 링크 수가 0이 되어야 데이터가 지워지므로 a.txt를 지워도 hard.txt로 내용을 읽을 수 있다.
  • soft.txt는 inode가 따로 있고, 내용은 a.txt라는 경로 글자뿐이다. 원본이 사라지면 가리킬 곳이 없는 끊어진 링크가 된다.
비교하드 링크심볼릭 링크
inode원본과 같다따로 갖는다
ls -l 첫 글자- (일반 파일과 구분 안 됨)l
원본 삭제 시내용 유지끊어진다
다른 파일 시스템불가가능
디렉터리 대상불가가능
크기원본과 같다가리키는 경로의 글자 수

내일은 파일 안을 들여다보고 원하는 것을 찾아내는 명령들을 익힌다.

📖 용어

  • 작업 디렉터리 : 지금 셸이 위치한 디렉터리. pwd로 확인한다.
  • 숨김 파일 : 이름이 .으로 시작하는 파일. ls -a로만 보인다.
  • 재귀(-r) : 하위 디렉터리까지 훑는 옵션. cp·rm에서 디렉터리를 다루려면 필요하다.
  • 하드 링크 : 같은 inode를 가리키는 또 다른 이름.
  • 심볼릭 링크 : 다른 파일의 경로를 담은 바로가기 파일. ln -s로 만든다.
  • touch : 빈 파일을 만들거나 기존 파일의 시간 정보를 갱신하는 명령.
  • mkdir -p : 중간 경로가 없으면 함께 만들어 주는 옵션.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 숨김 파일을 포함해 파일 목록을 보려고 할 때 사용하는 옵션으로 알맞은 것은?

문제 2

다음 중 디렉터리를 통째로 복사할 때 반드시 필요한 옵션으로 알맞은 것은?

문제 3

다음 중 파일의 이름을 변경할 때 사용하는 명령으로 알맞은 것은?

문제 4

다음 중 ls -l 결과의 맨 앞 문자가 d일 때 의미하는 것으로 알맞은 것은?

문제 5

다음 중 여러 단계의 디렉터리를 한 번에 생성할 때 사용하는 명령으로 알맞은 것은?

이전셸 첫걸음: 명령 한 줄을 읽는 법Week 3 · Day 1다음 내용 보기와 찾기Week 3 · Day 3

참고 공식 자료

  • 리눅스마스터 2급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • 지금 어디에 있나
  • 무엇이 있나 — ls
  • 숨김 파일
  • ls -l` 한 줄 읽기
  • 만들고 지우기
  • 와일드카드 — 여러 파일을 한 번에 가리키기
  • 복사하고 옮기기
  • 대상이 이미 있을 때 결과가 달라진다
  • 링크
  • 용어
  • 연습 문제