본문 바로가기
IT Security/LINUX Basic

4. LINUX - 파일 찾기, 내용 확인 및 파일 이동/이름 변경/복사/

by Rosmary 2019. 8. 10.
728x90
반응형

이전 포스팅에서는, vi 편집기를 이용해 리눅스에서 사용하는 문서를 만들고 저장해보았다. 이번 포스팅에서는, 이렇게 생성된 파일이 어느 폴더에 위치해있는지 찾아보고, 그 내용을 확인하고, 복사, 이동, 이름 변경하는 과정에 대해 알아보려 한다. 

 

 

1. find - 파일 찾기

 

vi 편집기를 통해 생성된 문서는, vi 편집기의 실행모드에서 단순 파일명으로 저장할 경우, vi 편집기를 실행했던 폴더 내에 저장이 된다. 그러나, w 뒤에 폴더 경로와 파일명을 동시에 명시하면(/etc/sysconfig/network/testfile과 같이), 이 폴더는 실행모드에서 언급한 경로에 testfile이라는 이름으로 저장된다. 

 

vi 편집기에 익숙하지 않은 상황이라면, 문서를 저장해야하는 디렉토리 외의 공간에서 vi 편집기를 실행하고 문서 작성 및 저장을 진행했다가, 나중에 파일을 찾지 못해 당황하는 경우가 생긴다. 윈도우처럼 그래픽 환경을 제공하지 않는 리눅스의 특징 때문에 발생하는 일인데, 다행히 명령어로 이 문제를 쉽게 해결할 수 있다. 

 

find 명령어는, 말 그대로 무언가를 찾아주는 명령어다. find 명령어의 포멧은 다음과 같다.

 

===============================

find 파일을_찾을_경로 -name 파일명

===============================

 

가장 기본적인 find 명령어의 형태로, 이름을 통해 파일을 찾는 방식이다. 지난번 vi 편집기를 통해 만들었던 testfile 파일을, 다음의 명령어를 입력하여 사용해보자.

 

============================

find / -name testfile

============================

 

 

결과가 /root/testfile로 제대로 나온 것을 확인할 수 있다. 

 

필자가 입력한 명령어에서 파일 경로가 최상위 폴더인 루트(/)로만 표기되어 있는데, 이 말은 최상위 폴더 및 하위 폴더 전체에서 testfile과 일치하는 파일명을 찾으라는 의미다. 컴퓨터가 최상위 폴더부터 하나씩 훑으면서 testfile을 검색하기 때문에, 시간이 오래 걸린다. 시간이 오래 걸리는 것이 싫다면, 검색하는 파일 경로를 최대한 하위 폴더로 들어가서 검색하는 것 외에는 방법이 없다. 그러나 이 명령어를 사용하는 이유가 자신이 원하는 파일을 리눅스의 폴더 계층 내에서 찾기 위함이기 때문에... 루트를 제외한 다른 경로를 find 명령어와 같이 사용할 일이 매우 드물다.

 

find는 이름 외에도, 몇 분전에 변경/접근된 파일만 찾거나, 내용이 없는 빈 파일을 찾는 옵션도 있지만, 현재의 단계에서는 그닥 쓸 일이 없다.(본격적으로 서버 보안을 해야 쓸까말까 한 옵션들이라...)

 

 

 

2. cat, head, tail - 파일의 내용 확인

 

지금까지는 만들어진 testfile의 내용을 보기 위해서, vi testfile이라는 명령어를 사용해야만 했다. 하지만, vi 편집기를 이용해 문서를 읽는 것 또한, CLI(Command Line Interface) 환경에서 매우 번거로운 일이다. 따라서 리눅스에서는 이러한 번거로움을 피하기 위해 cat이라는 명령어를 제공하는데, 사용법은 아래와 같다.

 

=======================

cat 보고자하는_파일명

=======================

 

필자는 지난 포스팅에서 작성한 testfile 파일을 cat으로 읽어보았다. 굳이 vi 편집기를 실행하지 않고도, 화면에 파일의 내용을 고스란히 출력할 수 있다.

 

만약, 화면에 출력되는 내용을 행 수와 함께 나타나게 하고 싶다면, cat 명령어 뒤에 옵션으로 -n을 붙이면 된다.

 

 

 

cat 명령어 외에도, head와 tail 명령어도 많이 사용되는데, 이들은 문서의 처음 또는 끝에서 일정 수의 행을 출력하는 명령어다. 따라서 head와 tail 명령어는 반드시 -n 옵션 + 숫자와 함께 사용해야한다. 다만, head와 tail 명령어의 -n 옵션은 행 수를 출력해주지는 않는다. testfile에서 처음 두 행과 마지막 두 행을 출력한 결과는 아래와 같다.

 

 

 

 

3. cp  - 파일의 복사

 

필자가 testfile을, 같은 리눅스를 사용하는 user1 계정 사용자와 공유할 일이 생겼다고 가정해보자. 파일 공유를 위해, 필자는 필자의 홈 디렉토리인 루트폴더에 있는 testfile을, user1 계정의 홈 디렉토리(/home/user1)에 복사해주려고 한다. 이 때 사용하는 명령어는 cp (copy)이며, 명령어 포맷은 아래와 같다.

 

=============================

cp  원본_파일_경로  복사_폴더_경로[/파일명]

=============================

 

 

cp 명령어를 사용하기 전에 testfile이 존재하는 폴더는 단지 /root 뿐이었지만, cp 명령어 사용 후, 검색된 결과에는 /home/user1 도 추가된 것을 볼 수 있다. 참고로, 복사_폴더_경로 뒤에 파일명을 언급하지 않으면, 복사되는 파일 역시 원본 파일과 동일한 이름을 가지게 된다. 

 

다음 실습 진행을 위해, 복사한 testfile 파일을 rm /home/user1/testfile 명령어로 삭제하도록 하자.

 

 

 

4. mv - 파일의 이동 및 이름 변경

 

mv 명령어는 다른 명령어와 달리, 2가지 역할을 한다. 하나는 파일을 다른 폴더로 옮기는 역할, 또 다른 하나는 파일명을 변경하는 역할이다. 각각의 역할에 따라 명령어 포맷은 아래처럼 사용할 수 있다.

 

< 파일의 이동 >

===============================

mv 원본_파일_경로 이동할_폴더_경로

===============================

 

< 파일명 변경 >

===============================

mv 원본파일명[경로] 변경할_파일명[경로]

===============================

 

얼핏 봐서는 두 기능 사이에 명령어 차이가 크게 없어보인다. 하지만 자세히 살펴보면, 파일의 이동은 서로 다른 파일 사이에서 발생하고, 파일명의 변경은 동일한 폴더 내에서 발생한다는 차이점이 있다. 

 

다음의 출력 결과는 이 차이를 명확히 드러내 보인다. 필자는 기존에 /root 에 위치한 testfile 파일을 /home/user1으로 이동시킨 뒤, 이동한 파일 명을 바꾸는 작업을 진행했다.

 

지금까지 사용되는 폴더나 파일 경로는, 절대 경로나 상대 경로 중, 아무것이나 사용해도 문제되지 않는다 

 

일반적으로, mv 명령어를 이용해 파일명을 변경하는 행위는, cd 명령어로 파일이 위치한 폴더로 이동하는 사전 작업을 진행하는 경우가 대부분이다. 즉, "cd /home/user1 , mv testfile testfile300"으로 명령어를 작성하더라도, 위의 화면과 같은 결과를 보인다. 하지만 필자는 상대경로를 이용해서도 동일 폴더 내의 파일명을 변경할 수 있다는 것을 보여주기 위해, 조금 다른 명령어를 사용했다.

 

 

5. 원하는 단어를 파일에서 찾기.

 

mv 명령어로 파일명을 변경한 testfile300 파일에는 world라는 단어가 2번 들어가 있다. 그리고, 필자는 이 world가 포함된 행만 따로 조회하고 싶다. 이럴 때 사용하는 명령어가 바로 grep 이라는 명령어이며, 사용 방법은 아래와 같다.

 

========================

grep 검색단어 파일경로

========================

 

 

검색 결과, Hello, world와 It's a wonderful world 두 줄이 정확히 출력되었다.

 

grep 명령어를 사용해서 특정 단어를 검색할 때, 파일 내에 존재하지 않는 단어를 검색하면, 결과는 아무것도 나타나지 않는다. 만약, testfile300 파일 내에 존재하지 않는 단어를 grep 명령어와 함께 사용하면 다음과 같은 화면이 나타난다.

 

 

grep을 통해, 현재 리눅스 계정에 존재하는 ID를 찾는 것도 가능하다. 리눅스 계정 정보는 모두 /etc/passwd라는 파일에 모여있기 때문에, 검색어를 user1이라는 사용자 계정으로 grep 명령어를 사용하면, 해당 계정에 대한 정보를 조회할 수 있다.

 

 

마지막으로, 지금까지 언급한 명령어를 간략히 표로 정리하면서 이번 포스팅을 마친다.

 

파일 찾기/이동/복사/조회/단어검색/이름변경 등의 명령어
find 검색폴더경로 -name 파일명 검색폴더경로 내에서 파일명으로 된 파일 찾기
cp 원본파일경로 복사할폴더경로[/파일명2] 원본파일을 복사할폴더경로에 [파일명2]로 복사
mv 원본파일경로 "이동할 폴더"경로 원본파일을 "이동할 폴더"로 이동.
mv 원본파일명 변경파일명 원본파일의 이름 변경
cat [-n] 파일경로 파일의 내용 출력 [행 수 동시 출력]
head -n Num 파일경로 파일의 첫 Num행 출력
tail -n Num 파일경로 파일의 마지막 Num행 출력
grep 검색어 파일경로 파일 내 검색어가 포함된 행만 출력

 

FIN.

반응형

댓글