리눅스 기본 명령어는 셸(shell)에 한 줄씩 쳐서 디렉터리를 옮겨 다니고, 파일을 복사·이동·삭제하고, 실행 중인 프로세스를 보고 끝내는 명령입니다. ls·cd·mkdir·cp·mv·rm·cat·ps·kill·nice가 기본이고, 이름마다 하는 일이 하나씩 정해져 있습니다.
서버는 아이콘을 눌러 다루는 그래픽 사용자 인터페이스(GUI, Graphical User Interface) 없이, 글자로 명령을 치는 명령 줄 인터페이스(CLI, Command Line Interface)로 다루는 일이 많습니다. 셸이 명령을 받아 커널에 일을 시키는 구조는 운영체제의 역할과 종류에서 봤습니다. 아래 그림은 명령 한 줄을 칠 때마다 디렉터리 나무와 프로세스 목록이 어떻게 바뀌는지 보입니다.
1디렉터리 옮겨 다니기 — ls·cd·pwd·mkdir
Linux의 파일은 맨 위 /(루트)에서 갈라지는 나무 모양의 디렉터리(directory, Windows의 폴더) 안에 있습니다. 셸은 늘 그 가운데 한 곳에 서 있고, 그곳을 현재 디렉터리라고 합니다. .은 현재 디렉터리, ..은 한 칸 위 디렉터리입니다.
| 명령 | 하는 일 | 쓰는 꼴 |
|---|---|---|
ls | 목록을 본다. -l은 권한·크기까지, -a는 숨긴 파일까지 | ls -l |
cd | 현재 디렉터리를 옮긴다 | cd docs · cd .. |
pwd | 현재 디렉터리의 경로를 찍는다 | pwd |
mkdir | 디렉터리를 만든다 | mkdir backup |
2파일 다루기 — cp·mv·rm·cat
cp·mv·rm은 원본이 어떻게 되는지로 가릅니다.
| 가르는 기준 | cp | mv | rm |
|---|---|---|---|
| 하는 일 | 복사 | 옮기기·이름 바꾸기 | 지우기 |
| 원본 | 남는다 — 하나가 둘 | 원래 자리에서 사라진다 | 사라진다 |
| 디렉터리를 다룰 때 | cp -r | 그대로 mv | rm -r |
mv로 같은 디렉터리 안에서 새 이름을 주면 자리는 그대로이고 이름만 바뀝니다(mv a.txt b.txt). rm은 휴지통을 거치지 않아 지운 파일을 되살릴 수 없습니다. 디렉터리는 -r(안에 든 것까지 차례로)을 붙여야 지워지고, 빈 디렉터리만 지우는 rmdir도 있습니다.
cat은 파일 내용을 화면에 찍습니다. 파일을 여럿 주면 이어 붙여(concatenate) 보입니다.
3프로세스 다루기 — ps·kill·nice
실행 중인 프로그램 하나하나를 프로세스(process)라고 하고, 운영체제는 프로세스마다 번호(PID, Process ID)를 붙입니다.
| 명령 | 하는 일 | 쓰는 꼴 |
|---|---|---|
ps | 실행 중인 프로세스와 PID를 본다. -ef는 모든 프로세스를 자세히 | ps -ef |
kill | PID로 가리킨 프로세스에 신호를 보내 끝낸다 | kill 2045 |
nice | 우선순위를 정해 명령을 실행한다 | nice -n 10 명령 |
kill은 신호를 적지 않으면 종료를 요청하는 신호(TERM, 15번)를 보냅니다. 프로그램이 요청에 답하지 않으면 kill -9로 강제 종료 신호(KILL)를 보냅니다.
nice가 정하는 값을 nice 값(niceness)이라고 합니다. -20부터 19까지이고, 작을수록 우선순위가 높아 CPU를 더 많이 받습니다. 보통 프로세스는 0으로 시작하고, nice -n 10 명령은 10만큼 양보해 실행합니다(-n을 빼도 10). 일반 사용자는 값을 올려 양보만 할 수 있고, 값을 내리는 것은 관리자(root)만 할 수 있습니다. 이미 실행 중인 프로세스의 값은 renice로 바꿉니다.
예제
시작할 때 현재 디렉터리에 memo.txt 파일과 docs 디렉터리가 있습니다. 그림의 명령을 차례로 치고 ls -R(하위 디렉터리까지 목록)로 확인합니다.
mkdir backup
cp memo.txt backup
mv memo.txt docs
ls -R
.:
backup docs
./backup:
memo.txt
./docs:
memo.txt
memo.txt는 현재 디렉터리에서 사라지고, backup에 복사본이, docs에 옮긴 원본이 있습니다.
이어서 backup을 지우고 원본의 내용을 봅니다.
rm -r backup
cat docs/memo.txt
회의는 3시
-r 없이 rm backup만 치면 Is a directory(디렉터리다) 오류가 나고 아무것도 지워지지 않습니다.
시험 포인트
- 필기: 명령과 하는 일을 짝짓는 문제가 나옵니다.
cp는 원본이 남고mv는 원래 자리가 비며, 같은 디렉터리 안에서는 이름을 바꿉니다.rm으로 디렉터리를 지우려면-r이 필요합니다.kill은 신호를 적지 않으면 15번(TERM)을 보내고,-9는 강제 종료입니다. nice 값은 -20~19이고 작을수록 우선순위가 높습니다. - 실기: 명령을 그대로 씁니다 — 목록 보기
ls, 디렉터리 옮기기cd, 디렉터리 만들기mkdir, 복사cp, 옮기기·이름 바꾸기mv, 지우기rm, 내용 보기cat, 프로세스 목록ps, 프로세스 끝내기kill, 우선순위를 정해 실행nice.
확인 문제
1. 현재 디렉터리에 report.txt 파일 하나만 있습니다. mv report.txt old.txt를 친 뒤의 모습으로 알맞은 것을 고르세요.
- ①
report.txt와old.txt가 둘 다 있습니다. - ②
old.txt만 있고, 내용은 원래report.txt의 내용입니다. - ③
old.txt디렉터리가 새로 생기고, 그 안에report.txt가 들어갑니다. - ④
old.txt라는 파일이 없어서 오류가 납니다.
정답
②입니다. 같은 디렉터리 안에서 mv에 새 이름을 주면 파일은 그 자리에 있고 이름만 바뀝니다.
- ① 원본이 남는 것은
cp입니다.mv는 원래 이름이 남지 않습니다. - ③
mv는 디렉터리를 만들지 않습니다.old.txt가 이미 있는 디렉터리였다면 그 안으로 옮겨집니다. - ④ 옮길 곳의 이름은 없어도 됩니다. 없는 이름을 주면 그 이름으로 바뀝니다.
2. 다음 일을 하는 명령을 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 사진을 모을
photo디렉터리를 새로 만듭니다. - (나)
a.jpg를 그대로 둔 채, 같은 파일을photo안에도 둡니다. - (다)
b.jpg를photo안으로 보내, 현재 디렉터리에는 남지 않게 합니다. - (라) 다 쓴
tmp디렉터리를 안에 든 파일까지 한꺼번에 없앱니다.
정답
받는 답: (가) mkdir photo · (나) cp a.jpg photo · (다) mv b.jpg photo · (라) rm -r tmp
(나)의 실마리는 '그대로 둔 채 같은 파일을 하나 더', (다)는 '현재 디렉터리에는 남지 않게', (라)는 '안에 든 파일까지'입니다.
- 틀리는 꼴
mv a.jpg photo— (나)에: 옮기면 현재 디렉터리의a.jpg가 남지 않습니다. - 틀리는 꼴
cp b.jpg photo— (다)에: 복사하면 원본이 현재 디렉터리에 남습니다. - 틀리는 꼴
rm tmp— (라)에:-r이 없으면 디렉터리라서 지울 수 없다는 오류가 납니다. - 틀리는 꼴
rmdir tmp— (라)에: 빈 디렉터리만 지웁니다. 안에 파일이 있으면 지우지 못합니다.
3. 다음 일을 하는 명령을 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 셸이 서 있는 곳을
/var/log디렉터리로 옮깁니다. - (나) 옮긴 곳에 어떤 파일들이 있는지 이름을 늘어놓아 봅니다.
- (다) 그 가운데
syslog파일의 내용을 화면에 찍습니다.
정답
받는 답: (가) cd /var/log · (나) ls 또는 ls -l · (다) cat syslog
(가)의 실마리는 '셸이 서 있는 곳을 옮긴다', (나)는 '이름을 늘어놓는다', (다)는 '내용을 화면에 찍는다'입니다.
- 같은 이름의 다른 꼴: (나)
ls -l— 이름과 함께 권한·크기까지 보이는 같은 명령이라 함께 받습니다. - 틀리는 꼴
mv /var/log— (가)에:mv는 파일을 옮기는 명령입니다. 셸이 서 있는 곳은cd로 옮깁니다. - 틀리는 꼴
pwd— (나)에: 지금 있는 곳의 경로를 찍을 뿐, 안에 든 파일을 늘어놓지 않습니다. - 틀리는 꼴
ls syslog— (다)에: 파일 이름만 찍고 내용은 보이지 않습니다.
4. 다음 일을 하는 명령을 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 지금 돌고 있는 프로세스와 그 번호를 늘어놓아 봅니다.
- (나) 번호가 3120인 프로세스가 끝내라는 요청에도 답하지 않아, 강제로 끝냅니다.
- (다) 오래 걸리는
sort big.txt를 다른 일에 양보하도록, nice 값을 15만큼 올려 실행합니다.
정답
받는 답: (가) ps 또는 ps -ef · (나) kill -9 3120 · (다) nice -n 15 sort big.txt
(나)의 실마리는 '요청에도 답하지 않아 강제로', (다)는 '양보하도록 값을 올려 실행'입니다.
- 틀리는 꼴
kill 3120— (나)에: 신호를 적지 않으면 종료를 요청하는 15번(TERM)이 갑니다. 요청에 답하지 않는 프로세스는-9로 끝냅니다. - 틀리는 꼴
nice -n -15 sort big.txt— (다)에: 값을 내리면 오히려 우선순위가 높아집니다. 일반 사용자는 내릴 수도 없습니다.
5. 시작할 때 현재 디렉터리에 a.txt 파일과 work 디렉터리가 있습니다. 다음을 친 뒤 마지막 ls -R이 찍는 결과를 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
mkdir old
cp a.txt work
mv a.txt old
rm work/a.txt
ls -R
정답
받는 답:
.:
old work
./old:
a.txt
./work:
a.txt는 old로 옮겨져 현재 디렉터리에 없습니다. work에 만든 복사본은 rm으로 지워, ./work: 머리 아래가 비어 있습니다.
- 틀리는 꼴
.:아래에a.txt가 남은 꼴:mv를cp처럼 읽었습니다. 옮긴 파일은 원래 자리에 남지 않습니다. - 틀리는 꼴
./old:아래가 빈 꼴:rm이 지운 것은work안의 복사본입니다.old로 옮긴 원본은 남습니다.