본문 바로가기
카테고리 없음

[리눅스] 1.4 파일과 디렉토리 조작 (이론)

by 준쓰_ 2023. 12. 31.

서론

리눅스 중에서 가장 빈번하게 사용되는 5가지의 명령어를 배워보고자 한다.

- cp : 파일 및 디렉토리 복사하기
- mv : 파일 및 디렉토리 이동 그리고 이름 바꾸기
- mkdir : 디렉토리 새로 만들기
- rm : 파일 및 디렉토리 삭제하기
- ln : 하드 링크 또는 심볼릭 링크 만들기

 

GUI에서도 충분히 복사, 삭제 등을 할 수 있지만, 명령어를 쓰는 이유는 커맨드라인의 강력함과 유연성 때문이다. 아주 복잡한 작업들은 커맨드라인 프로그램으로 하는 것이 더 쉽다

예컨대 어떤 디렉토리에서 저장된 모든 HTML 파일을 다른 디렉토리로 복사하는 명령어이다. 커맨드라인으로 치면 아주 간단하게 처리할 수 있다.

cp -u *.html destination

 

 

와일드카드

이러한 명령어들에 강력함을 더해주는 쉘의 특성에 대해 알아보고자 한다. 왜냐하면 쉘은 굉장히 많은 파일명을 사용하기 때문에 간단하게 파일명의 그룹을 지정할 수 있도록 특수한 문자들을 지원한다. 이러한 특수 문자들을 와일드카드라고 하는데, 이 와일드카드(글로빙, 정규표현식 등이라고도 함)를 이용하여 문자 패턴에 따라 파일명을 선택할 수 있다.

 

와일드카드 매칭 문자
* 모든 문자
? 모든 하나의 문자
[characters] characters 문자셋에 포함된 문자
[!문자] characters 문자셋에 포함되지 않 문자
[[:class:]] 지정된 문자 클래스에 포함된 문자

 

가장 흔히 사용되는 문자 클래스들은 아래와 같다.

문자 클래스 매칭 문자
[[:alnum:]] 모든 알파벳과 숫자 문자
[[:alpha:]] 모든 알파벳 문자
[[:digit:]] 모든 숫자
[[:lower:]] 모든 소문자
[[:upper:]] 모든 대문자

 

와일드카드를 이용하면 아주 복합한 선택 조건을 파일명에 사용한다 해도 가능해진다. 아래는 와일드카드 사용예시이다.

 

패턴 매칭 문자
* 모든 파일
g* g로 시작하는 모든 파일
b*.txt b로 시작하되 .txt형식인 파일
Data??? Data로 시작하면서 뒤에 정확히 세 개의 문자만 있는 파일
[abc]* a, b, c로 시작하는 모든 파일
BACKUP.[0-9][0-9] [0-9] BACKUP으로 시작하면서 뒤에 정확히 세 개의 숫자로 된 파일
[[:upper:]]* 대문자로 시작하는 모든 파일
[![:digit:]]* 숫자로 시작하지 않는 모든 파일
* [[:lower:]123] 파일명이 소문자로 끝나거나 1,2,3으로 끝나는 파일

 

만약 현재 다른 유닉스형 시스템을 사용하거 있다면 [A-Z] 또는 [a-z]와 같은 문자 범위를 지정한 기호를 쓰는 것을 본 적 있을 것이다. 이는 가장 전형적인 유닉스 표기법이면서 예전 버전의 리눅스 시스템에서도 작동한다. 하지만 리눅스 안에서는 적절한 설정 없이는 원하는 결과를 얻기 힘들 수도 있기 때문에 주의하여 사용해야 한다.

 

mkdir - 디렉토리 생성

mkdir 명령어는 디렉토리를 생성할 때 사용되는데 다음과 같이 입력하면 된다.

mkdir 디렉토리명

예컨대 mkdir dir1 이라고 입력하면 dir1 이라는 한 개의 디렉토리를 생성한다.

mkdir dir1 dir2 dir3 라고 입력하면 dir1, dir2, dir3 라는 디렉토리를 한꺼번에 생성한다.

 

cd - 파일 및 디렉토리 복사

cp 명령어로 파일과 디렉토리를 복사한다. 복사하는 방법은 두 가지가 있다.

1) cp item1 item2
2) cp item ... directory

 

첫번째 방법은 item1이란 파일 또는 디렉토리를 item2라는 파일 또는 디렉토리로 복사하는 방법이며,

두번째 방법은 다수의 파일이나 디렉토리를 다른 디렉토리로 복사하는 방법이다.

cp 명령어와 함께 자주 사용하는 옵션들은 아리와 같다.

 

옵션 롱옵션 설명
-a --archive 파일 및 디렉토리뿐만 아니라 소유자 및 권한 정보와 같은 속성까지도 모두 복사한다. 반면, 일반적으로는 복사를 하는 사용자의 기본적인 속성을 복사한다.
-i --interactive 기존 파일을 덮어쓰기 전에 확인 메시지를 보여주는 옵션이다. 이 옵션 없이 cp명령어를 사용하면 확인 과정 없이 그대로 파일을 덮어쓰게 된다.
-r --recursive 디렉토리와 그 안의 내용까지 복사할 때 쓰는 옵션이다. 이 옵션은 디렉토리를 복사할 때 필요하다.
-u --update 어떤 디렉토리에 있는 파일을 다른 디렉토리로 복사할 때, 그 디렉토리에는 없거나 최신 버전인 파일만을 복사하기 위해서 이 옵션을 사용한다.
-v --verbose 복사가 완료되었다는 메시지를 보여주는 옵션이다.

 

cp 명령어를 사용하는 예시는 아래와 같다.

 

사용예제 결과
cp file1 file2 file1을 file2로 복사하기. file2라는 파일이 이미 있다면 file1 내용을 그대로 덮어쓰게 된다. file2가 없으면 새로 생성된다.
cp -i file1 file2 위와 같이 복사가 이루어지지만 만약 file2 파일이 있다면 덮어쓰기 여부에 대한 확인 메시지를 볼 수 있다.
cp file1 file2 dir1 file1과 file2를 dir1 이라는 디렉토리로 복사한다. 단 dir1 디렉토리는 먼저 존재해야 한다.
cp dir1/* dir2 와일드카드와 함께 사용해서 dir1 디렉토리에 있는 모든 파일을 dir2 디렉토리로 복사할 수 있다. 단 dir2 디렉토리는 먼저 존재해야 한다.
cp -r dir1 dir2 dir1 디렉토리와 그 안에 있는 모든 내용을 dir2 디렉토리로 복사한다. dir2 가 없으면 새로 생성될 것이고, dir1 디렉토리에 있는 모든 내용들이 복사된다.

 

mv -  파일 이동과 이름 변경

mv 명령어를 어떻게 사용하느냐에 따라 파일을 이동할 수도 있고 파일명을 수정할 수도 있따. mv 명령을 실행하면 두 경우 모두 기존 파일명은 더 이상 존재하지 않게 된다. 이 명령어 쓰임은 cp와 매우 비슷하다.

mv item1 item2

 

item1 파일 또는 디렉토리를 item2로 이동하거나 이름을 바꾼다.

mv item ... directory

 

하나 이상의 파일이나 디렉토리를 다른 디렉토리로 이동한다.

 

mv 명령어와 함께 쓰이는 옵션은 아래와 같다.

옵션 롱옵션 설명
-i --interactive 기존 파일을 덮어쓰기 전에 확인 메시지를 보여주는 옵션이다. 이 옵션없이 mv 명령어를 사용하면 확인 과정 없이 그대로 파일을 덮어쓰게 된다.
-u --update 파일을 다른 디렉토리로 이동하려고 할 때, 그 디렉토리에 없거나 또는 최신 버전인 파일만을 이동하기 위해서 이 옵션을 사용한다.
-v --verbose 이동이 완료되었다는 메시지를 보여주는 옵션이다.

 

mv 명령어를 사용한 예시는 아래와 같다.

사용 예제 결과
mv file1 file2 file1 파일을 file2 파일로 이동한다. file2라는 파일이 이미 있다면 file1 내용을 그대로 덮어쓰게 된다. file2가 없으면 새로 생성된다. 두 경우 file1은 사라진다.
mv -i file1 file2 위와 같이 이동이 이뤄지지만 만약 file2 가 있다면 사용자에게 덮어쓰기 여부를 확인한다.
mv file1 file2 dir1 file1과  file2를 dir2이라고 하는 디렉토리로 이동한다. 단 dir1 디렉토리는 미리 생성되어 있어야 한다.
mv dir1 dir2 dir1과 그 내용까지 모두 dir2로 이동한다. dir2 디렉토리가 기존에 없는 것이라면 새로 생성이 되고 dir1의 내용이 모두 그대로 이동한다. 그리고 dir1은 삭제된다.

 

 

rm - 파일 및 디렉토리 삭제

rm 명령어는 다음과 같이 삭제하기 위한 파일 및 디렉토리를 하나 이상 입력할 수 있다.

rm item ...

 

단 rm 명령어 사용 시 주의할 점이 있다. 리눅스처럼 유닉스 운영체제는 삭제를 취소할 수 있는 명령어가 없다. 특히 와일드카드와 함께 사용할 때는 정말 주의해야 한다. 예컨대 사용자가 어떤 디렉토리에서 html 파일을 모두 삭제하기 원한다. 그러면 다음과 같은 명령어가 입력될 것이다.

  • rm *.html

하지만 실수로 * 기호와 .html 기호 사이에 빈칸을 입력하면

  • rm * .html

그 디렉토리에 있는 모든 파일을 삭제하고, .html이라는 파일은 없다는 메시지를 보여줄 것이다. 이러한 실수를 피하기 위해서는 rm 명령어를 입력하기 전에 ls 명령어를 활용하여 미리 삭제할 파일을 확인하는 습관을 기르는 것이 좋다. 확인 뒤 ls 자리에 rm을 써서 명령을 실행하면 된다.

 

아래는 rm의 주요 옵션들이다.

옵션 롱옵션 설명
-i --interactive 기존 파일을 삭제하기 전에 확인 메시지를 보여주는 옵션이다. 이 옵션없이 rm 명령어를 사용하면 확인 과정 없이 그대로 파일을 삭제하게 된다.
-r --recursice 재귀적으로 디렉토리를 삭제한다. 즉 삭제된 디렉토리에 하위 디렉토리들이 있다 해도 모두 삭제된다는 뜻이다. 디렉토리를 완전히 삭제하려면 이 옵션들을 반드시 사용해야 한다.
-f --force 존재하지 않는 파일은 확인 메시지 없이 무시하라는 옵션이다. 이 옵션은 --interactive 옵션을 완전히 무시해버린다.
-v --verbose 삭제가 완료되었다는 메시지를 보여주는 옵션이다.

 

rm 사용 예제는 아래와 같다.

사용 예제 결과
rm file1 file1 파일을 완전히 삭제한다.
rm -i file1 file1 파일을 삭제하기 전에 사용자 확인 메시지를 보여준다.
rm -r file1 dir1 file1 파일과 dir1 디렉토리 및 하위 내용까지 모두 삭제한다.
rm -rf file1 dir1 위와 같이 file1과 dir1 모두 삭제하되 file1이나 dir1이 존재하지 않더라도 rm 명령어가 실행된다.

 

 

ln - 링크 생성

ln 명령어는 하드 링크와 심볼릭 링크를 만들 때 사용한다.

ln file link

위 명령어는 하드 링크를 만들 때 사용하는 것이다.

ln -s item link

이것은 item 파일 또는 디렉토리에 심볼릭 링크를 생성한 것이다.