[Linux] 파일, 디렉토리 조작의 기본 명령어 (mkdir, touch, rm, rmdir, cat, less, cp, mv, ln)

반응형

1. mkdir : 디렉토리 생성 명령어

◼︎ 디렉토리 생성 명령어

mkdir [옵션] <디렉토리이름>

 

홈 디렉토리에 study 디렉토리를 만들어보자.

※ 참고 : cd 명령어만 입력하면 홈 디렉토리로 이동한다.

※&nbsp;cd 명령어만 입력하면 홈 디렉토리로 이동한다.

ls 명령어로 파일리스트를 확인한다.

mkdir study 를 입력하여 study 디렉토리를 생성한다.

디렉토리임을 확인하기 위해 ls 명령어에 -F 옵션을 붙여 파일리스트를 확인한다.

study 뒤에 / 슬래시가 붙어있으므로 디렉토리가 생성되었음을 확인할 수 있다.

 

 

(1) 이미 디렉토리가 존재하는 경우

이미 해당하는 이름의 디렉토리가 존재하므로 디렉토리를 작성할 수 없다는 에러가 발생한다.

mkdir: cannot create directory 'study' : File exists

 

(2) 중첩 디렉토리 생성

중간경로도 모두 지정하여 생성하면 된다.

그러나 중간 경로가 존재하지 않으면 다음과 같은 에러가 발생한다.

mkdir: cannot create directory '디렉토리명' : No such file or directory

09 디렉터리까지 만들고 싶지만, 2023 디렉토리가 존재하지 않아 발생하는 에러이다.

이 경우에는 -p 옵션을 사용하면 된다.

-p 옵션을 지정하여 생성한 후

cd study/2023 으로 2023디렉토리까지 이동하여 09 디렉토리 생성을 확인했다.

 

 

2. touch : 파일 생성 명령어

◼︎ 파일 생성 명령어

touch <생성파일1> <생성파일2> ...

touch 명령어는 파일의 타임스탬프를 갱신하기위한 명령어이다. 이때 해당 파일이 존재하지 않으면 파일을 생성한다.

그래서 빈 파일을 생성하는 용도로도 사용된다.

즉, touch 명령어로 이미 존재하는 파일을 지정해도 내용이 삭제된다거나 하지 않는다.

touch 명령어로 fileA 와 fileB 2개를 생성했다.

ls -F 명령어로  / 슬래시가 붙지않은 fileA, fileB가 생성된 것을 확인할 수 있다.

 

 

 

3. rm : 파일 삭제 명령어

◼︎ 파일 삭제 명령어

rm [옵션] <삭제파일1> <삭제파일2> ...

삭제파일을 *.txt 와 같이 확장자를 지정하면 해당 확장자를 가진 모든 파일이 삭제된다.

rm fileA fileB 로 두 개의 파일을 삭제한 후 삭제된 결과를 확인할 수 있다.

 

 

 

 

 

4. rmdir : 디렉토리 삭제 명령어

◼︎ 디렉토리 삭제 명령어

이 명령어는 빈 디렉토리를 삭제하는 명령어 이다.

rmdir <디렉토리이름>

rmdir 명령어는 삭제하려는 디렉토리가 빈 디렉토리가 아니면 에러가 발생한다.

 

현재 디렉토리 상태는 다음과 같다

/study/2023/09

/study/test/

이 상태에서 2023을 rmdir로 삭제 시도 한다. 그러면 디렉토리가 비어있지 않아 삭제에 실패했다는 에러가 발생한다.

rmdir: failed to remove '디렉토리명' : Directory not empty

빈 디렉토리인 test 는 rmdir 명령어로 삭제할 수 있다.

비어있는 test 를 삭제하고 결과를 확인했다.

ls 의 -R 옵션은 위치한 디렉토리의 하위 디렉토리의 파일까지 모두 출력한다.

test 디렉토리가 삭제된 것을 볼 수 있다.

 

 

 

 

 

 

◼︎ rm 명령어로 디렉토리 삭제하기

rm 명령어로 디렉토리를 삭제하려고하면 에러메시지가 출력된다.

해당하는 파일이 디렉토리이므로 삭제할 수 없다는 내용의 에러메시지가 출력된다.

rm: cannot remove '대상파일명' : Is a directory

 

rm 명령어로 디렉토리를 삭제하려면 재귀적으로 디렉토리 트리를 삭제하는 -r 옵션을 지정해야 한다.

이때 대상이 되는 디렉토리의 하위 파일을 모두 삭제하므로 주의해야한다.

 

09 디렉토리안에 파일을 2개 만들고 확인해보자.

09 안에 fileA, fileB 생성한다.

생성된 파일을 확인하고,

rm -r 옵션으로 09를 삭제한다.

09 의 파일을 확인 시도한다.

 

09 디렉토리와 하위 파일이 모두 삭제되어 ls 명령어로 09에 접근을 시도하면 파일 또는 디렉토리가 없어 접근할 수 없다는 메시지가 출력된다.

ls: cannot access '파일/디렉토리명' : No such file or directory

 

◼︎ 삭제시의 주의점

윈도우나 맥에서는 파일을 삭제하면 '휴지통' 이라는 것이 존재하므로 바로 삭제되는 것이 아니라 복구가 가능하다. 하지만 리눅스에서는 파일이 바로 삭제된다. 

위에서 실습해봤듯이 rm 명령어를 실행하면 '정말 삭제하겠습니까?' 와 같은 확인 메시지도 나오지 않고 바로 삭제된다. 주어진 명령어를 그대로 실행한다는 리눅스 철학에 기반하는 것이다. 다만, rm 명령어를 실행할때 -i 옵션을 붙이면 확인메시지가 출력되기는 한다.

rm: remove regular empty file '파일명'?

여기서 y 또는 Y 를 입력하면 삭제된다.

 

5. cat : 파일 내용 출력 명령어

◼︎ 파일 내용 출력 명령어

cat [옵션] <파일명>

 

빈파일을 하나 만들어 출력해보자

fileA 를 생성해서 cat 명령어로 내용을 출력했지만 빈 파일이므로 아무것도 표시되지 않는다.

 

호스트명이 있는 텍스트 파일을 출력해보면 다음과같이 본인의 호스트명이 출력된다.

명령어 이름이 concatenate 이므로, 파일명을 공백으로 여러개 나열하면, 여러개를 연결해서 출력해준다.

 

-n 옵션으로 행 번호 표시도 가능하다.

 

(1) 파일명을 지정하지 않는 경우

 

cat 명령어에서 파일명을 지정하지 않으면, 입력한 내용을 그대로 출력한다.

이 상태에서는 ctrl + d 로 종료하면 된다.

 

 

 

 

 

 

6. less : 스크롤 표시 명령어

◼︎ 스크롤 표시 명령어

less [옵션] <파일명>

cat 명령어로 내용이 긴 파일을 출력하면 전부 출력되어 버린다. 따라서 파일이 길면 바로 전체가 출력되어 밑부분만 확인할 수 있게 된다. 이럴때 화면 단위로 출력되어 스크롤로 위아래를 볼 수 있게 해주는 명령어 less 를 사용하는 것이 좋다.

less /etc/bash.bashrc 로 파일을 출력하면 스크롤하며 내용을 확인할 수 있다.

(1) less에서 사용할 수 있는 단축키

명령어 내용
less 명령어 종료 q
한 행 아래로 스크롤 Enter , Ctrl + n , j
한 행 위로 스크롤 Ctrl + p , k
한 화면 아래로 스크롤 Space , Ctrl + v , f
한 화면 위로 스크롤 b , Alt(Option) + v
아래 방향으로 문자열 검색 /문자열
위 방향으로 문자열 검색 ?문자열
다음 검색결과로 이동 n
이전 검색결과로 이동 M

 

 

7. cp : 파일 / 디렉토리 복사 명령어

◼︎ 파일 및 디렉토리 복사 명령어

cp [옵션] <복사할파일> ... <복사할위치>

 

(1) 파일 복사

fileA 를 fileB 로 복사할 수 있다.

 

※ 동일한 이름의 파일이 존재하면 별도의 경고 없이 덮어쓰기 된다.

덮어쓰기 전에 확인하려면 -i 옵션을 사용해야 한다.

y 또는 Y 를 입력하면 덮어쓰기 된다.

 

(2) 디렉토리 복사

cp 명령어로 디렉토리 복사를 실행하면 에러가 발생한다.

cp: -r not specified; omitting directory '디렉토리명'

-r 옵션을 설정하여 재귀적으로 복사하도록 해야 디렉토리가 복사된다.

 

 

8. mv : 파일 이동 명령어

◼︎ 파일 이동  명령어

mv [옵션] <이동할파일> ... <이동할위치>

이동할파일과 이동할위치에 모두 파일명을 지정하면 결과적으로 파일명이 바뀌게 된다.

이동할 파일과 이동할 위치에 모두 파일명을 지정하여 mv fileA testFlile 을 실행했다.

결과를보면 fileA 는 사라지고, testFile 이 생성된것을 볼 수 있다. 파일명이 바뀐것이다.

 

 

(1) 디렉토리에 파일 복사 하기

실행전 리스트를 확인해보면 디렉토리 dirA, dirB 는 모두 비어있고, 파일은 fileB, testFile가 존재한다.

 

여기서 fileB 와 testFile 을 dirA로 모두 이동했다.

 

mv fileB testFile dirA 실행

 

결과를 확인하면 dirA 에 모두 이동되었다.

 

 

 

 

※ 이동할 위치에 동일한 이름의 파일이 존재하면 별도의 경고 없이 덮어쓰기 된다. 따라서 -i 옵션을 지정하면 확인메시지를 볼 수 있다.

 

 

(2) 디렉토리 복사하기

실행전 리스트를 확인하면 dirA 안에 fileB, testFile 파일이 존재하며, dirB는 비어있다.

이 상태에서 디렉토리 dirA 를 dirB 로 이동해본다.

 

mv dirA dirB 를 실행한다.

 

dirB 안에 dirA 가 모두 이동한 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

9. ln : 링크 생성 명령어

◼︎ 링크 생성  명령어

ln [옵션] <링크할이름> <링크명>

 

(1) 링크란?

리눅스의 파일 시스템에서는 파일에 별명을 붙이는 것이 가능한데 이를 링크라고 한다. 링크에는 하드 링크와 심볼릭 링크 두 종류가 존재한다. 보통 심볼릭 링크가 많이 사용된다. 윈도우의 바로가기를 생각하면 이해하기 쉽다.

 

(2) 하드 링크

원본 파일에 이름을 여러개 붙이는 기능이다.

cp /etc/crontab testFile1 으로 /etc/crontab 을 복사했다.

ln testFile1 testLink1 으로 하드링크를 생성했다.

 

 

 

이상태에서 cat testLink1 을 실행하면 testFile1 의 내용이 출력된다.

하드링크로 만든 파일은 어느 파일이 원본인지 복사본인지 구분하지 않는다. 모두 원본파일이기 때문이다.

 

하드링크로 작성된 파일 중 하나를 삭제하면 해당 파일만 삭제될 뿐, 원본파일이 삭제되는것은 아니다. 따라서 cat testLink1 으로 파일내용을 출력해보면 원본파일 testFile1 의 내용이 출력된다. 모든 하드링크가 없어져야 삭제된다.

 

(3) 심볼릭 링크

디렉토리는 하드링크할 수 없으며, 서로 다른 디스크에 걸쳐서 만들 수 없다는 단점이 있다. 심볼릭링크는 제한이 없다.

ln 명령어에 -s 옵션을 붙이면 심볼릭 링크를 만들수 있다.

ls 명령어에 -l 옵션으로 심볼릭 링크 여부를 확인할 수 있다. -> 화살표로 연결된 파일을 표시해준다.

심볼릭 링크 파일에 접근하면 링크로 연결된 파일에 접근할 수 있다.

원본파일에 대한 정보가 담긴 파일이며 원본과 구별된다. 윈도우의 바로가기 파일을 떠올리면 이해하기 쉽다.

 

따라서 심볼릭링크를 삭제하면 원본파일에 어떤 영향도 미치지 않는다.

심볼릭링크가 있는 상태에서 원본파일을 삭제하면 심볼릭링크가 깨져버린다. 원본파일이 없는 심볼릭링크에 접근하면 파일 또는 디렉토리를 찾을수 없다는 에러메시지가 출력된다. 

cat: 링크명: No such file or directory

linkA -> testFile1 의 심볼릭링크가 있다.

이상태에서 tm testFile1 을 실행하여 testFile1 을 삭제했다.

 

다시 ls -l 로 확인하면 심볼릭링크가 깨져있으며, cat linkA 를 실행하여 접근해보면 에러가 발생한다.

 

(4) 링크를 사용하는 이유

경로가 길어지는 경우, 경로를 짧게 줄이기 위해 링크를 사용하면 쉽게 이동가능해진다.

버전이 여러개 존재하는 프로그램이 있는 경우, 버전정보를 붙여 심볼릭링크로 관리하면 용이하다. 

 

 

반응형