[04] cp, mv, mkdir, rmdir, rm

|


- 2014.11.11 수업 내용




1. cp (copy)


파일 및 디렉토리에 관한 첫번째 명령이이기 때문에 최대한 많은 예제를 넣었다.



1) 명령어 설명

 

cp : 파일 및 디렉토리 복사, 이름 변경 가능 

        cp [-option] [source] [source] [source] .... [target]

 

* wild card : 모든 것을 의미한다. 

        -r : 디렉토리 복사, 하위디렉터리 및 파일 모두 복사 

        -p : 원본파일의 소유주, 그룹, 권한, 시간을 그대로 복사 


최상위 / 에 backup 디렉토리 생성

# mkdir /backup/


현재 있는 /home/samadal/ 의 디렉토리 내용 확인

# ls

a


폴더 생성된 것 확인

# ls -ld /backup/

drwxr-xr-x. 2 root root 4096 2014-11-11 12:43 /backup/  


/etc/inittab 파일을 /backup/ 디렉토리로 복사

# cp /etc/inittab /backup/

# ls -l /backup/  

합계 4  

-rw-r--r--. 1 root root 884 2014-11-11 12:44 inittab  


login.defs 파일 복사

# cp /etc/login.defs /backup/

# ls -l /backup/  

합계 8  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login.defs  


grub.conf 파일 복사

# cp /boot/grub/grub.conf /backup/


전체 확인

# ls -l /backup/

합계 12  

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login.defs



[실습1]  - /bakcup/ 디렉터리에 있는 파일을 /home/samadal 로 복사


항상 원본 소스와 대상 디렉터리가 있는지 확인하는 습관! 

# ls -l /backup/

합계 12  

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login.defs  


절대경로로 복사

# cp /backup/grub.conf /home/samadal/grub.conf

# ls -l /backup/

합계 12  

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login.defs  


# ls -l  

합계 4  

drwxr-xr-x. 3 root root 1024 2014-11-10 13:47 a  

-rw-------. 1 root root  739 2014-11-11 12:49 grub.conf  


상대경로로 복사 

# cp /backup/inittab ./

# ls -l

합계 6  

drwxr-xr-x. 3 root root 1024 2014-11-10 13:47 a  

-rw-------. 1 root root  739 2014-11-11 12:49 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:49 inittab


이름 변경해서 복사 가능.

# cp /backup/login.defs ./login 


확인

# ls -l  

합계 9  

drwxr-xr-x. 3 root root 1024 2014-11-10 13:47 a  

-rw-------. 1 root root  739 2014-11-11 12:49 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:49 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:50 login



*

디렉토리명 뒤에 / 붙이는 습관이 없다면 디렉토리로의 복사 중 오타가 났을 경우

해당 디렉토리로 복사가 되는 것이 아닌 변경된 파일 명으로 엉뚱한 곳에 저장이 될 수도 있다.



 

[실습2]  - saladal로 복사한 파일들을 /home/test/c/ 로 복사


원본, 상대 디렉터리 확인

# ls -l

합계 9  

drwxr-xr-x. 3 root root 1024 2014-11-10 13:47 a  

-rw-------. 1 root root  739 2014-11-11 12:49 grub.conf

-rw-r--r--. 1 root root  884 2014-11-11 12:49 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:50 login  


# ls -ld /home/test/c/

drwxr-xr-x. 3 root root 1024 2014-11-10 13:50 /home/test/c/


복사 시작

# cp ./grub.conf /home/test/c/

# ls -l /home/test/c/  

합계 4  

drwxr-xr-x. 2 root root 1024 2014-11-10 13:50 d  

-rw-------. 1 root root  739 2014-11-11 13:01 grub.conf  


# cp /home/samadal/inittab ../test/c/  

# ls -l /home/test/c/  

합계 6  

drwxr-xr-x. 2 root root 1024 2014-11-10 13:50 d  

-rw-------. 1 root root  739 2014-11-11 13:01 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 13:02 inittab  


# cp ./login ../test/c/login.defs  

# ls -l /home/test/c/  

합계 9  

drwxr-xr-x. 2 root root 1024 2014-11-10 13:50 d  

-rw-------. 1 root root  739 2014-11-11 13:01 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 13:02 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 13:03 login.defs

 



[실습3]  - /bakcup/의 파일들을 /home/test/c/d/ 로 복사! 


- 생략




[연습문제]

 

/home/test/c/d/ 안에 있는 모든 내용을

/home/samadal/a/b/ 디렉터리에 복사


# ls -l /home/test/c/d/  

합계 7  

-rw-------. 1 root root  739 2014-11-11 13:05 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 13:06 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 13:06 login  


# ls -ld /home/samadal/a/b/  

drwxr-xr-x. 2 root root 1024 2014-11-10 13:47 /home/samadal/a/b/


# cp /home/test/c/d/grub.conf /home/samadal/a/b/  

# ls -l /home/samadal/a/b/  

합계 2  

-rw-------. 1 root root 739 2014-11-11 13:14 grub.conf


# cp /home/test/c/d/inittab ./a/b/  

# ls -l /home/samadal/a/b/ 

합계 4  

-rw-------. 1 root root 739 2014-11-11 13:14 grub.conf  

-rw-r--r--. 1 root root 884 2014-11-11 13:15 inittab  


# cp ../test/c/d/login ./a/b/  

# ls -l ./a/b/  

합계 7  

-rw-------. 1 root root  739 2014-11-11 13:14 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 13:15 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 13:15 login


*

복사할 대상이 많은 경우 - Wild card(*) 를 사용하면 된다.


ex)

# cp /home/test/c/d/* ./a/b/



2) cp 명령어 옵션

 

안되는 예)

# cp /backup/ ./

cp: omitting directory `/backup/'

 


* -r


안에 있는 모든 것을 복사하는 옵션


# cp -r /backup/ ./ 

# ls -l  

합계 11  

drwxr-xr-x. 3 root root 1024 2014-11-10 13:47 a  

drwxr-xr-x. 2 root root 1024 2014-11-11 13:27 backup  

-rw-------. 1 root root  739 2014-11-11 12:49 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:49 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:50 login  


# ls -l ./backup/ 

합계 7  

-rw-------. 1 root root  739 2014-11-11 13:27 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 13:27 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 13:27 login.defs 



* -p


소유자 및 시간도 그대로 복사하는 옵션

복사를 하게 되면 복사한 계정으로 새로운 소유권이 지정되며 시간도 복사한 시간으로 변경된다.


소유권 및 시간까지 그대로 복사.

# cp -p ./.kshrc ./ksh

# ls -al ./.kshrc

-rw-r--r--. 1 samadal samadal  171 2014-10-16 01:02 .kshrc  


# ls -l

-rw-r--r--. 1 samadal samadal  171 2014-10-16 01:02 ksh

-rw-r--r--. 1 root    root    1816 2014-11-11 12:50 login




 

2. mv (move)



1) 명령어 설명


mv [source] [source] [source] [target]


파일 및 디렉토리 이동, 이름 변경 가능. 옵션 있긴 하지만 사용할일 거의 없다.




[실습1]


/backup/ 에 있는 파일을 /home/samadal/a/ 로 이동

 

# ls -l /backup/

합계 12  

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login.defs


# ls -l ./a/  

합계 2  

drwxr-xr-x. 2 root root 1024 2014-11-11 13:15 b  


# mv /backup/grub.conf ./a/  


ls 명령으로 동시에 2개를 볼 수 있다.

# ls -l /backup/ ./a/ 

./a/:  

합계 4  

drwxr-xr-x. 2 root root 1024 2014-11-11 13:15 b  

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf

  

/backup/:  

합계 8  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login.defs 

...  


이동 + 이름 변경

# mv /backup/login.defs ./a/login

# ls -l /backup/ ./a/

  

./a/:  

합계 9  

drwxr-xr-x. 2 root root 1024 2014-11-11 13:15 b  

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login


/backup/:  

합계 0




[문제]

 

./a/ 디렉토리에 있는 3개의 파일(grub.conf, inittab, login)을 /backup/ 디렉토리로 이동

 

# ls -l /backup/ ./a/  

./a/:  

합계 9  

drwxr-xr-x. 2 root root 1024 2014-11-11 13:15 b  

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login  

  

/backup/:  

합계 0


와일드카드 (*)는 조심히 써야한다.

# mv ./a/* /backup/

# ls -l /backup/ ./a/  

./a/:  

합 0


원본 디렉터리에 있던 /b/ 디렉터리도 함께 옮겨졌다.. *는 조심히 쓸 것!  

/backup/:  

합계 16  

drwxr-xr-x. 2 root root 4096 2014-11-11 13:15 b

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login  


mv는 옵션 없이도 디렉터리를 자유롭게 이동 가능하다. 

# mv /backup/b/ ./a/

# ls -l /backup/ ./a/  

./a/:  

합계 2  

drwxr-xr-x. 2 root root 1024 2014-11-11 13:15 b

  

/backup/:  

합계 12  

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login


# ls -l /backup/  

합계 12  

-rw-------. 1 root root  739 2014-11-11 12:45 grub.conf

-rw-r--r--. 1 root root  884 2014-11-11 12:44 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 12:45 login  





3. mkdir (make directory)


1) 명령어 설명

 

디렉토리 생성


mkdir [option] [target]

        -p : 하위디렉터리 생성 시 상위디렉터리 생성


ex)

# mkdir /backup/





4. rmdir (remove directory)


1) 명령어 설명


디렉토리 삭제(빈 디렉터리만 삭제)

 

rmdir [option] [source] 

        -p : 디렉터리 삭제시 상위디렉터리도 삭제(단, 빈 디렉터리만 삭제 가능)


ex) 

상위 디렉터리까지 생성

# mkdir -p /a/b/c/d/e/f/g/

# ls -ld /a/b/c/d/e/f/g/  

drwxr-xr-x. 2 root root 4096 2014-11-11 14:22 /a/b/c/d/e/f/g/  


최상위인 / 까지 삭제 시도함

# rmdir -p /a/b/c/d/e/f/g/

rmdir: failed to remove directory `/': 장치나 자원이 동작 중 


a 부터는 빈 디렉터리였기 때문에 a 부터 모두 삭제 됨

# ls -l /a/

ls: cannot access /a/: 그런 파일이나 디렉터리가 없습니다





5. rm (remove)


1) 명령어 설명


파일 및 디렉터리 삭제(삭제 시 사용자에게 물어보며 삭제)


rm [option] [source] 

        -f : 삭제 시 사용자에게 물어보지 않고 삭제 

        -r : 디렉터리 삭제 및 하위 디렉털, 파일 삭제 

              (단, 삭제시 사용자에게 물어보며 삭제)

 

ex) 

# ls -l /home/test/c/d/  

합계 7  

-rw-------. 1 root root  739 2014-11-11 13:05 grub.conf  

-rw-r--r--. 1 root root  884 2014-11-11 13:06 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 13:06 login  


# rm /home/test/c/d/grub.conf  

rm: remove 일반 파일 `/home/test/c/d/grub.conf'?  


y 혹은 yes 를 눌러야만 삭제 됨

# rm /home/test/c/d/grub.conf 

rm: remove 일반 파일 `/home/test/c/d/grub.conf'? y

# ls -l /home/test/c/d/

합계 5  

-rw-r--r--. 1 root root  884 2014-11-11 13:06 inittab  

-rw-r--r--. 1 root root 1816 2014-11-11 13:06 login



* 해커들이 맨 마지막에 하는 명령어 : rm -rf /




And