2022 데이터 사이언스/Linux

05. 기초 명령어(2)

gool 2022. 5. 17. 23:53

 

mv, mkdir, rmdir, rm, alias, cat, head/tail, touch

 

 

 

기초 명령어 두 번째 포스팅이다.

 

 

 

mv

 

mv(move)는 잘라내기와 붙여넣기를 한 번에 처리하는 명령어로, cp와 비교해 이해하면 좋다.

cp와 달리 mv는 별도의 옵션 없이도 파일과 디렉토리 모두 이동이 가능하다.

 

cp와 마찬가지로 원본 파일의 이름을 유지 또는 변경하면서 이동할 수 있고,

이름을 변경하면서 이동할 때는 원본을 하나만 입력해야 한다.

 

 

mv 명령어의 형식도 cp 명령어의 형식과 동일하다.

 

mv     [옵션]     원본     [원본]     ...     [원본]     이동할 위치[변경할 이름]

 

 

 

먼저 mv 명령어로 파일을 이동시켜보자.

 

cd ~itbank/a/ 명령어로 작업 위치를 /home/itbank/a로 변경한다.

 

/backup/ 디렉토리와 /home/itbank/a/ 디렉토리의 현황

 

현재 위치에는 b 디렉토리만 존재하고, /backup/ 디렉토리 안에 세 개의 파일이 존재한다.

/backup/ 디렉토리에 위치한 세 개의 파일을 모두 현재 위치로 이동시키려고 한다.

 

grub.conf 파일 현재 위치로 이동

 

grub.conf 파일이 b 디렉토리만 존재하던 현재 위치로 이동한 것을 볼 수 있다.

mv /backup/* ./ 명령어를 사용해 나머지 두 개의 파일을 모두 현재 위치로 이동시킨다.

(사실 처음부터 * 기호로 세 개의 파일을 한 번에 이동시킬 수 있다.)

 

inittab, login.defs 파일까지 모두 현재 위치로 이동

 

 

다음은 디렉토리의 이동이다.

 

backup 디렉토리의 이름을 'back'으로 변경하면서 현재 위치 아래로 이동시키려고 한다.

 

/backup/ 디렉토리가 'back' 이름으로 현재 위치 아래로 이동

 

mv /backup/ ./back/ 명령어가 이동과 동시에 이름을 변경하는 동작을 취하는 이유는,

현재 위치한 a 디렉토리 아래에 'back'이라는 디렉토리가 존재하지 않기 때문이다.

 

/home/itbank/a/back/ 디렉토리가 존재한다면,

같은 명령어 입력 시 /backup/ 디렉토리가 이름을 유지한 채 ./back/ 디렉토리 안으로 이동한다.

 

 

mv 명령어는 이동 없이 파일이나 디렉토리의 이름을 변경하는 명령어로 기능하기도 한다.

아래 그림에서 ./back/ 디렉토리가 ./backup/ 디렉토리로 변경된 것을 확인할 수 있다.

 

back/ 디렉토리의 이름을 backup/ 디렉토리로 변경

 

mv ./back/ ./backup/ 명령어를 직역하면,

현재 위치의 back/ 디렉토리를 'backup'으로 변경해 현재 위치로 이동시킨다는 의미인데,

같은 위치로의 이동은 의미가 없으므로 디렉토리의 이름만 변경된다.

 

 

 

실습 예제 1)

앞서 이동한 파일과 디렉토리를 모두 원래 위치로 되돌리시오.

 

 

(풀이)

 

디렉토리를 이동할 경우 디렉토리 안의 파일도 함께 이동하는 속성을 이용한다.

 

먼저 파일을 모두 backup 디렉토리 안으로 이동시킨 후,

backup 디렉토리를 한 번에 / 디렉토리로 아래로 옮긴다.

 

파일을 ./backup/ 디렉토리 안으로 이동

 

현재 위치의 모든 파일이 다시 backup 디렉토리 안으로 옮겨진 것을 확인할 수 있다.

알파벳과 * 기호가 혼용된 g* i* l* 는 각각 g, i, l 로 시작하는 모든 것을 의미한다.

파일 이름이 길어 입력하기 번거롭거나 특정 문구가 들어간 파일을 대상으로 할 때 사용된다.

 

현재 위치 아래의 backup/ 디렉토리를 다시 root(/ 디렉토리) 아래로 옮겨준다.

 

backup/ 디렉토리를 / 디렉토리 아래로 이동

 

 

 

mkdir

 

mkdir(make directory)는 디렉토리를 생성하는 명령어이다.

 

mkdir 명령어는 경로가 없다면 디렉토리 생성이 불가능하다는 특징이 있다.

다음 예시를 살펴보자.

 

 

a 디렉토리에서 한 단계 상위 디렉토리로 이동해 현재 위치는 ~itbank/ 이다.

./a/b/ 아래 세 개의 파일이 존재하는 것을 확인할 수 있다.

 

a/b/ 디렉토리 안에 e 디렉토리 생성

 

앞서 확인했듯이 상위에 a/b/ 라는 경로가 분명히 존재한다.

따라서 mkdir a/b/e/ 명령어로 b 디렉토리 아래 e 디렉토리가 성공적으로 생성되었다.

 

 

반면, 아래 명령어를 입력했을 때는 디렉토리 생성이 불가능하다는 오류 메시지를 받게 된다.

 

경로가 존재하지 않아 발생하는 오류

 

트리 구조에서 g 디렉토리의 부모 노드(바로 상위 노드)인 f 디렉토리가 존재하지 않기 때문이다.

즉, a/b/e/f/ 라는 경로가 없어 그 아래 g 디렉토리를 생성할 수 없다.

 

 

e 디렉토리 내부는 여전히 비어 있다.

a/b/e/ 경로는 존재하지만, g 디렉토리 생성 과정에서의 오류로 f 디렉토리도 생성되지 않았다.

 

 

단, -p 옵션을 사용하면 상위 디렉토리가 없는 경우 상위 디렉토리까지 한 번에 생성이 가능하다.

 

-p 옵션을 사용해 f, g 디렉토리 동시에 생성

 

 

 

rmdir

 

rmdir(remove directory)는 mkdir과 반대로 디렉토리를 삭제하는 명령어이다.

단, 빈 디렉토리만 삭제가 가능하며, 하위 파일이나 디렉토리가 있으면 삭제할 수 없다.

 

예를 들어, 앞서 생성한 ~itbank/a/b/e/f/g 경로에서 g 디렉토리는 바로 삭제가 가능하지만,

e 디렉토리는 g 디렉토리를 삭제한 후에도 하위에 f 디렉토리가 남아있어 삭제가 불가능하다.

 

f 디렉토리 하위의 g 디렉토리 삭제

 

하위에 f 디렉토리가 있는 e 디렉토리는 삭제 불가능

 

 

rmdir 명령어에도 -p 옵션이 존재한다.

-p 옵션을 사용하면 상위 디렉토리가 존재할 경우 상위 디렉토리까지 삭제를 시도한다.

삭제가 아닌 삭제 시도라는 점을 주의해야 한다.

 

 

여기서는 가장 하위 디렉토리인 f 디렉토리부터 그 상위 디렉토리까지 삭제를 시도한다.

빈 디렉토리인 f, e는 삭제되었지만, b 디렉토리 내부에는 파일이 남아있다.

b 디렉토리와 그 상위 디렉토리는 삭제할 수 없다.

 

 

 

rm

 

rm(remove)은 파일을 삭제하는 명령어이다.

디렉토리도 삭제하는 옵션이 있지만, 기본적으로는 파일만 삭제가 가능하다.

 

CLI 환경에는 Windows의 휴지통 개념이 없다.

따라서 rm 명령어로 삭제를 시도할 경우 삭제 전에 확인 과정을 거친다.

 

아래 예시를 보면 파일 삭제를 확인하는 질문에 'y'를 입력해주어야 삭제가 된다.

 

삭제 확인 후 삭제 완료

 

모두 삭제를 시도하면 디렉토리는 삭제되지 않고, 파일만 삭제 확인 과정을 거친다.

 

디렉토리는 삭제되지 않고 파일만 삭제

 

rm * 명령어는 rm ./* 에서 현재 디렉토리를 의미하는 ./ 가 생략된 것으로,

현재 디렉토리인 /home/itbank/ 아래 모든 파일과 디렉토리를 삭제하라는 의미이다.

 

 

rm 명령어 파트에서는 두 가지 옵션을 살펴본다.

 

먼저 -r 옵션이다.

-r 옵션을 사용하면 파일 뿐 아니라 디렉토리도 삭제할지 여부를 물어본다.

 

 

하위 디렉토리가 존재하는 경우 하위 디렉토리 진입 여부를 먼저 물어본 후,

파일에 도달하면 파일 삭제 확인 과정을 거친다.

파일 먼저 물어본 뒤 순차적으로 상위 디렉토리로 올라오면서 삭제 여부를 확인한다.

 

 

다음은 -f 옵션이다.

-f 옵션을 사용하면 파일 삭제 시 확인 과정을 거치지 않는다.

디렉토리가 지워지지 않는 것은 동일하다.

 

확인 과정을 거치지 않고 파일이 삭제된 모습

 

 

-rf 옵션을 동시에 사용하면 삭제 확인 과정 없이 파일과 디렉토리를 모두 삭제할 수 있다.

 

 

-rf 옵션을 사용할 때 주의할 점이 있다.

rm -rf ./* 명령어는 현재 위치에 있는 모든 파일과 디렉토리를 삭제하라는 의미이다.

여기서 . 을 빠뜨리면 rm -rf /* 가 되는데, 이는 root 내부의 모든 것을 삭제하는 명령어이다.

최상위 노드인 root 아래 모든 것을 삭제하라는 말은 곧 Linux 전체를 삭제하라는 말과 같다.

 

삭제 확인 과정 없이 현재 위치 내 모든 파일과 디렉토리를 삭제하고자 하는 경우,

이와 같은 위험을 방지하기 위해 ./ 을 생략하고 rm -rf * 명령어를 사용하는 것이 좋다.

 

 

 

alias

 

alias는 특정 키워드에 명령어와 옵션을 등록하여 키워드로 해당 명령어를 대체할 수 있게 해준다.

 

alias 명령어를 단독으로 입력하면 등록된 키워드를 확인할 수 있다.

 

기존에 등록된 키워드 확인

 

예를 들면, 자주 사용하는 ls -l 명령어는 ll 키워드로 대체할 수 있다.

 

alias 키워드='명령어 [옵션]' 형태로 입력하면 새로운 키워드를 등록할 수 있다.

단, 등호 기호 좌우로 공백이 있어서는 안된다.

 

새로운 키워드 등록

 

위의 경우 cl 키워드를 등록했으므로, 터미널에 cl 키워드 입력 시 clear와 같은 작업을 수행한다.

등록된 키워드는 해당 터미널에서만 작동하며, 다른 터미널에서는 cl 키워드를 확인할 수 없다.

즉, alias 키워드 등록은 일회성 등록이다.

 

 

 

cat

 

cat 명령어는 파일 내용 출력, 파일 생성 등 다양한 용도로 사용된다.

단독으로 사용할 경우 입력한 내용을 그대로 출력해주기도 하지만 단독으로는 잘 쓰이지 않는다.

주로 리디렉션 기호 '/' 와 결합해 파일을 생성하고 합치는 역할을 한다.

 

 

(1) 단독 사용

 

cat을 단독으로 입력할 경우 빈 화면에 커서가 생긴다.

임의로 itbank를 입력하고 enter를 누르면 입력한 itbank를 똑같이 출력해준다.

 

cat으로 커서 활성화

 

입력한 내용을 그대로 출력

 

ctrl + d로 빠져나오기

 

 

(2) cat 파일명

 

cat 뒤에 파일명을 입력하면 파일의 내용을 출력해볼 수 있다.

 

/etc/ 안의 inittab 파일 내용 출력

 

 

(3) 파일 생성

 

cat 명령어는 파일을 생성할 때 사용되기도 한다.

 

파일을 생성할 때는 cat 명령어와 '리디렉션 기호(>)'가 함께 쓰인다. 

리디렉션 기호는 기호 왼쪽 명령어가 동작하여 출력되어야 할 내용을 기호 오른쪽에 저장해준다.

기호 오른쪽에 저장할 파일명을 입력하면 왼쪽 명령어의 역할을 하는 새로운 파일을 생성한다.

 

현재 위치에 /etc/inittab의 내용을 담은 testfile 생성

 

ll (ls -l) 명령어로 현재 위치에 testfile 파일이 생성된 것을 확인할 수 있다.

리디렉션 기호 오른쪽의 testfile 앞에 ./ 이 생략된 것이기 때문에 현재 위치에 파일이 생성된다.

cat testfile 입력 시 cat /etc/inittab 입력 때와 같이 inittab 파일을 출력한 화면이 나온다.

 

 

ls -l 명령어 역시 내용을 출력해주는 명령어이므로 리디렉션 기호로 파일 생성이 가능하다.

 

현재 위치에 ls -l /의 내용을 담은 rootlist.txt 생성

 

cat rootlist.txt로 ls -l /의 내용 출력

 

 

cat 명령어와 > 기호로 다른 파일의 내용을 가져오지 않고 직접 내용 있는 파일을 만들 수도 있다.

'cat > 파일명'의 경우, cat을 단독 사용했을 때와 다르게 입력한 내용이 바로 출력되지 않는다.

 

생성될 파일 a의 내용 입력

 

대신, 입력한 내용이 새로 만들어지는 파일의 내용으로 삽입된다.

 

현재 위치에 'itbank'를 내용으로 하는 파일 a 생성

 

마찬가지로 ctrl + d를 사용해 밖으로 빠져나오면 현재 위치에 a파일에 생긴 것을 확인할 수 있다.

cat에서 입출력되어야 할 내용을 a로 리디렉션 했기 때문에 cat a를 실행 시 itbank가 출력된다.

 

리디렉션 기호를 두 번(>>) 사용해도 결과는 같다.

 

>>를 활용해 같은 내용의 파일 b 생성

 

'>'를 사용하는 것과 '>>'를 사용하는 것은 내용을 덮어쓰는지 여부에서 차이를 보인다.

리디렉션 기호를 한 번 사용하면 새로운 내용이 기존의 내용을 덮어쓴다. (overwrite)

반면, 리디렉션 기호를 두 번 사용하면 새로운 내용이 기존의 내용에 추가된다. (append)

 

따라서, 특별한 경우가 아니라면 대부분 내용 추가 방식(>>)을 사용한다.

 

 

(4) 파일 합치기

 

cat 명령어를 활용해 존재하는 두 개 이상의 파일의 내용을 합칠 수 있다.

 

파일 a, b를 합친 파일 c 생성

 

cat a b로 합쳐진 파일 c의 경우 파일 a, 파일 b의 순서로 내용이 합쳐진 것을 볼 수 있다.

반대로 cat b a 명령어를 사용할 경우 파일 b의 내용이 먼저 출력된다.

 

a, b의 순서로 합쳐진 파일 c

 

파일 b의 내용이 먼저 출력

 

 

 

head, tail

 

cat 명령어가 파일 내용 전체를 출력해서 보여준다면,

head, tail은 파일의 내용이 너무 길 때 내용을 잘라서 보여주는 명령어이다.

기본값은 10줄로, 각각 파일의 처음과 마지막 10줄을 출력해준다.

 

숫자 옵션을 사용하면 10줄이 아닌 숫자만큼의 줄을 출력해서 볼 수 있다.

예를 들면, head -3 /etc/inittab 이런 형식이다.

 

 

 

touch

 

touch 명령어는 'touch 대상(파일명)'의 형태로 사용되는데,

대상이 존재하지 않으면 빈 파일을 생성하고,

대상이 존재하면 내용은 그대로 두고 마지막으로 수정된 날짜와 시간을 변경한다.

 

새로운 빈 파일 test 생성

 

새로 생성된 test 파일은 파일 크기가 0인 빈 파일임을 확인할 수 있다.

 

이미 존재하는 testfile의 최종 수정 날짜와 시간 변경

 

현재 위치에 이미 존재하는 testfile을 대상으로 사용하면 수정 시간만 변경된 것을 볼 수 있다.

 

내용 변경 없이 수정 날짜와 시간만 바꾸는 기능은 관리용으로 쓰인다.

예를 들어 특정 시간 이후에 수정된 것만 보거나, 특정 시간 이전에 수정된 것은 삭제하는 것이다.

touch 명령어로 날짜와 시간을 변경해 파일 관리에 사용할 수 있다.

 

 

 

'2022 데이터 사이언스 > Linux' 카테고리의 다른 글

07. FTP 서버 구축  (0) 2022.05.20
06. 기초 명령어(3)  (0) 2022.05.19
04. 기초 명령어(1)  (0) 2022.05.16
03. 기본 디렉토리와 경로  (0) 2022.05.14
02. 서버 컴퓨터 원격 조종  (0) 2022.05.12