유닉스 이론과 실습(03장)

유닉스 이론과 실습(03장)



01 파일 내용 보기 : cat/more/tail

유닉스에서도 파일 내용을 볼 수 있는 다양한 명령을 제공합니다. 명령별로 약간씩 차이가 있으므로 용도에 따라 알맞은 명령을 사용하면 됩니다. 이 절에서는 텍스트 파일의 내용을 화면에 출력하는 명령을 살펴봅니다. 소개된 명령을 이용하여 실행파일이나 기타 바이너리 파일을 보려고 하면 소음과 함께 화면에 깨진 글자가 출력되며, 키보드가 제대로 동작하지 않거나 서버와의 접속이 끊어질 수 있으므로 주의해야 합니다. 그러므로 파일의 내요을 보기 전, file명령으로 파일의 종류를 먼저 알아보는 것이 좋습니다.

05 파일 링크 :ln 부터 마지막 장의 요약 정리 하겠습니다... 너무 힘듦........😭


1 연속 출력 : cat

cat명령은 파일의 내용을 화면에 연속적으로 출력합니다.cat명령의 사용법은 다음과 같습니다.

  • cat 명령

    · 기능 ➡ 파일의 내용을 출력합니다.

    · 형식cat [옵션] 파일명...

    · 옵션-n : 행 번호를 붙여서 출력

    사용방법 : cat file1


cat 명령을 사용하면 파일이 화면보다 클 경우 앞부분은 스크롤되어서 올라가고, 화면에는 파일의 마지막 페이지만 보여줍니다. 파일의 앞부분을 보려면 ssh창 오른쪽의 스크롤 바를 사용해야 한다는 불편함이 있습니다.

  • cat 명령(-n옵션을 이용한 행 번호 출력)

    cat 명령에 -n 옵션을 사용하면 행 번호를 같이 출력합니다.

    이때, 행 번호는 화면에만 보일 뿐, 파일에 저장되지는 않습니다.


2 화면 단위로 출력 : more

cat명령은 파일의 내용을 화면에 연속적으로 출력해 파일 크기가 클 경우, 내용을 살펴보기 불편했습니다. 이런 불편을 없애고 화면 단위로 파일 내용을 출력하는 명령은 more입니다.

  • more 명령

    · 기능 ➡ 파일의 내용을 화면 단위로 출력합니다.

    · 형식more [옵션] 파일명...

    · 옵션+행번호 : 출력을 시작할 행 번호를 지정

    사용방법 : more file1

more명령은 화면 단위로 출력한 뒤 출력할 내용이 더 있으면 화면 하단에 --More--(00%)와 같이 나타내서 알려줍니다. 이 때, Space Bar 키와 Enter 키를 사용할 수 있습니다. Space Bar 키를 입력하면 다음 화면을 출력하고, Enter 키를 입력하면 행 단위로 스크롤됩니다. "/문자열"을 입력하면 해당 문자열을 찾을 수도 있습니다. 중간에 more 명령을 중지하려면 q를 입력하면 됩니다.


3 파일의 뒷부분 출력 : tail

tail명령은 파일의 뒷부분 몇 행을 출력합니다. 기본 값은 10으로, 파일의 뒷부분 10행이 출력됩니다. tail명령의 사용법은 다음과 같습니다.

  • tail 명령

    · 기능 ➡ 파일의 뒷부분 몇 행을 출력합니다.

    · 형식tail [옵션] 파일명...

    · 옵션+행번호 : 지정한 행부터 끝까지 출력

    -숫자 : 화면에 출력할 행의 수를 지정(기본 값은 10)

    -f : 파일 출력이 종료되지 않고, 주기적으로 계속 출력

tail 명령의 사용 예는 다음과 같습니다.


  • "-숫자" 옵션을 이용한 출력

    다음 예에서는 파일의 뒷부분 5행을 출력합니다.


  • -f옵션을 이용한 출력

    -f옵션을 사용하면 파일 출력이 종료되지 않고 대기 상태가 되며, 파일 내용이 주기적으로 반복 출력됩니다. 파일의 뒷부분에 내용이 추가되면 그내용이 자동으로 출력되므로 파일의 내용 변화를 확인할 때 사용하면 편리합니다. -f 옵션을 사용하려면 tail 명령이 무한히 반복되기 때문에 Ctrl + C 로 명령을 종료시켜야 합니다.



02 파일 복사 : cp

cp(copy)는 파일이나 디렉토리를 복사하는 명령입니다. cp명령의 사용법은 다음과 같습니다.

  • cp 명령

    · 기능 ➡ 파일이나 디렉토리를 복사합니다.

    · 형식cp [옵션] 파일명1/디렉토리명1 파일명2/디렉토리명2

    · 옵션-i : 대화식 복사 방법으로 파일명2가 기존에 존재할 경우 덮어쓸 것인지 물어봅니다.

    -r : 디렉토리를 복사할 때 지정

    사용방법 : cp file1 file2

    cp f1 f2 f3 dir1

    cp -r dir1 dir2

cp명령의 첫 번쨰 인자에는 원본 파일이나 디렉토리명을 지정하며, 두 번째 인자에는 목적지 파일이나 디렉토리명을 지정합니다. 첫 번째 인자와 두 번째 인자의 구성에 따라 cp명령의 사용 결과는 다음과 같이 다양해집니다.

  • 원본 파일을 새로운 이름의 파일로 복사
  • 원본 파일을 지정한 디렉토리 아래로 복사
  • 여러 원본 파일들을 지정한 디렉토리 아래로 복사

cp 명령을 이용하여 수행하는 방법을 각각 자세히 살펴보겠습니다.


1 파일을 파일로 복사

파일을 다른 파일로 복사하는 방법에 대해서 알아보겠습니다. 이 경우에는 첫 번째 인자와 두 번째 인자를 모두 파일명으로 지정합니다. 두 번째 인자에서 지정한 파일명이 존재하지 않는 파일인 경우 새로 생성되며, 이미 존재하는 파일명을 지정하면 겹쳐서 기록해 원래의 내용이 없어지고 복사된 내용만 남습니다.

다음은 /etc 디렉토리에 있는 hosts 팡리을 현재 디렉토리의 text1 이라는 파일로 복사하는 예입니다.

그리고 다음은 text1 파일을 text2 파일로 복사하는 예입니다. 다음과 같이 입력하면 text1과 같은 내용을 갖는 새로운 파일 text2가 생성됩니다.


2 파일을 디렉토리로 복사

파일을 디렉토리에 복사하는 경우에는 첫 번째 인자는 파일명이, 두 번째 인자는 디렉토리명이 됩니다. 다음은 /etc 디렉토리에 있는 hosts라는 파일을 현재 디렉토리(.) 아래에 같은 이름으로 복사하는 예입니다.

파일을 현재 디렉토리가 아닌 다른 디렉토리로 복사하려면 디렉토리 이름을 지정하면 됩니다. 다음은 현재 디렉토리에 있는 host 파일을 temp 디렉토리 아래 같은 이름으로 복사하는 예입니다.

이 때 파일 이름을 바꿔서 디렉토리에 저장하면 디렉토리명에 파일명도 함께 지정해야 합니다. 예를 들어, hosts파일을 temp 디렉토리에 host1 이라는 파일명으로 저장하려면 다음과 같이 해야 합니다.

파일을 디렉토리에 복사할 떄는 디렉토리에 대해 쓰기 권한이 있어야 합니다. 쓰기 권한이 없는 디렉토리에 파일을 복사하려고 하면 다음과 같이 오류가 발생합니다.


3 여러 개의 파일을 디렉토리에 복사

cp 명령에서 첫 번째 인자의 자리에 파일명을 여러 개 지정할 수 있습니다. 이 경우 마지막 인자는 반드시 디렉토리명이어야 합니다. 이렇게 사용하면 마지막에 지정한 디렉토리로 파일들이 모두 복사됩니다. 다음은 text1text2 라는 두 개의 파일을 temp 디렉토리에 복사하는 예입니다.


4 -i옵션의 사용

cp 명령에서 -i 옵션을 사용하면 두 번째 인자에 지정한 파일명이 기존에 있는 파일일 경우 겹쳐서 복사할 것인지를 물어봅니다. "y"로 대답하면 겹쳐서 복사하고, "n"으로 대답하면 복사하지 않습니다.


5 디렉토리를 복사

디렉토리를 복사할 때는 -r옵션을 사용합니다. 이떄, 첫 번쨰 이낮는 디렉토리 이름으로 지정해야합니다. 만약 다음 예처럼 temp 디렉토리를 tmp 디렉토리로 복사하는 경우에 -r옵션을 지정하지 않으면 오류가 발생합니다.

그러므로 temp 디렉토리를 tmp 디렉토리로 복사할 경우에는 다음과 같이 -r 옵션을 지정해주어야 합니다.

디렉토리를 복사하면 디렉토리 내에 있던 파일이나 하위 디렉토리도 모두 복사됩니다. 위의 예에서는 두 번째 인자인 tmp 디렉토리가 원래 없었기 때문에 원본 디렉토리와 같은 위치에 tmp라는 이름의 디렉토리가 새로 생성되었습니다. 그러나 두 번째 인자가 기존에 있던 디렉토리 이름이면, 원본 디렉토리는 두 번째 인자로 지정한 디렉토리 아래에 같은 이름으로 복사됩니다. 예를 들어 현재 현존하는 tmp 디렉토리를 두 번째 인자로 지정하면, temp 디렉토리가 tmp 디렉토리 아래 하위 디렉토리로 복사됩니다.


03 파일 삭제 : rm

파일과 디렉토리를 삭제할 때에는 rm(remove) 명령을 사용합니다. -r 옵션을 지정하면 디렉토리를 삭제합니다. rm명령의 사용법은 다음과 같습니다.

  • rm 명령

    · 기능 ➡ 파일을 삭제합니다.

    · 형식cp [옵션] 파일명/디렉토리명 ...

    · 옵션-i : 대화식으로 지정한 파일을 정말 삭제할 것인지 확인합니다.

    -r : 디렉토리를 삭제할 때 지정

    사용방법 : rm file

    rm -r dir


1 파일 기본 삭제

다음과 같이 인자를 파일로 지정하면 해당 파일이 삭제된다.

그런데 이때 -i 옵션을 지정하지 않으면 정말 삭제할 것인지 확인하지 않는다. 삭제된 파일이 "휴지통" 에 저장되는 윈도우와 달리, 유닉스에서 삭제된 파일은 복구할 수 없으므로 주의해야 합니다.


2 -i 옵션을 사용한 파일 삭제

rm 명령에서 -i 옵션을 사용하면 다음과 같이 지정한 파일을 정말 삭제할 것인지를 물어봅니다. "y"로 대답하면 삭제하고, "n"으로 대답할 경우 삭제하지 않습니다.

3 디렉토리 삭제

2장에서 살펴본 rmdir 명령은 빈 디렉토리가 아니면 삭제할 수 없었습니다. 그러나 rm 명령의 -r 옵션을 사용하면 지정한 디렉토리가 비어있는지의 여부와 상관없이 디렉토리와 그 아래 모든 파일을 삭제합니다.

물론 이 경우에도 한 번 삭제하면 복구할 수 없으므로 주의해야 합니다. 다음과 같이 디렉토리를 -r 옵션 없이 삭제하려고 하면 오류가 발생합니다.

mkdir 명령은 비어 있는 디렉토리만 삭제 가능하고, rm명령에 -r옵션을 사용하면 상관없이 전부 삭제합니다.


rm 명령의 재정의

rm 명령은 무조건 파일을 삭제하는 것이 아니라 파일의 하드 링크 수를 1 감소해 그 값이 0이 되면 파일의 이름과 inode, 파일의 내용이 들어있는 데이터 블록을 삭제합니다. 만약 하드 링크 수가 0이 되지 않은 경우에는 파일의 이름만 디렉토리에서 삭제합니다.



04 파일 이동 : mv



파일의 이름을 바꾸거나 다른 디렉토리로 이동시킬 때는 mv(move) 명령을 사용합니다. 또한 디렉토리의 이름을 바꾸거나 다른 디렉토리로 이동시킬 때도 mv 명령을 사용합니다. mv 명령의 사용법은 다음과 같습니다.

  • mv 명령

    · 기능 ➡ 파일을 이동합니다.

    · 형식mv [옵션] 파일명1/디렉토리명1 파일명2/디렉토리명2

    · 옵션-i : 파일명2/디렉토리명2가 존재하면 덮어쓸 것인지 물어봅니다.

    사용방법 : mv file1 file2

    mv file1 dir1

    mv file1 file2 file3 dir1

mv 명령의 첫 번째 인자로 원본 파일이나 디렉토리명을 지정하며, 두 번째 인자로 목적지 파일이나 디렉토리명을 지정합니다. 첫 번째 인자와 두 번째 인자의 구성에 따라 mv 명령을 다양하게 활용할 수 있습니다.


1 파일을 파일로 이동

첫 번째 인자와 두 번째 인자를 모두 파일명으로 지정하면 첫 번째 인자로 지정한 파일이 두 번째 파일로 이동합니다. 결과적으로는 첫 번째 인자로 지정한 파일의 이름이 두 번째 지정한 파일 이름으로 변경됩니다. 이 때 두 번째 인자로 이미 존재하는 파일명을 지정하면 첫 번째 파일이 덮어써서 원래 내용은 없어지고, 새로운 내용만 남게 됩니다.

mv text1 data1

2 파일을 디렉토리로 이동

두 번째 인자로 디렉토리를 지정할 경우 파일을 다른 디렉토리로 이동시키게 됩니다.

두 번째 인자에서 디렉토리명과 파일명을 한꺼번에 지정하면 지정한 디렉토리로 파일명을 바꿔서 이동시킵니다.

mv명령도 cp와 마찬가지로 쓰기 권한이 없는 디렉토리로 이동시키려고 할 경우, 오류가 발생합니다.


3 여러 개의 파일을 디렉토리로 이동

mv명령에서 첫 번째 인자의 자리에 파일명을 여러 개 지정하면 두 번째 인자는 반드시 디렉토리가 되어야 합니다. 이 경우 마지막에 지정한 디렉토리의 파일이 모두 이동됩니다. 다음은 tmp디렉토리에 있던 data1data2 파일을 현재 디렉토리(.)로 이동시키는 예입니다.


4 -i옵션을 사용한 이동

-i옵션을 사용하면 두 번째 인자에 지정한 파일명이 기존에 있는 파일인 경우 덮어쓸 것인지를 물어봅니다. "y"로 대답하면 덮어쓰고, "n"로 대답할 경우 파일을 이동시키지 않습니다.


5 디렉토리를 디렉토리로 이동

mv 명령에서 두 인자를 모두 디렉토리명으로 지정하면 첫 번째 인자인 디렉토리가 두 번째 인자 디렉토리 아래로 이동됩니다. 다음 예와 같습니다. 기존에 있는 tmp 디렉토리를 두 번째 인자로 지정하니 tmp2 디렉토리가 tmp 디렉토리 아래로 이동하였습니다.

만약 두 번째 인자가 새로운 이름이면 첫 번째 디렉토리의 이름이 새 이름으로 변경됩니다.




05 파일 링크 : ln



유닉스 시스템의 디렉토리 계층 구조를 보면 경로나 이름이 매우 길고 복잡한 파일이 많습니다. 이런 파일을 자주 사용해야 할 때 짧고 간단한 이름을 붙여서 작업의 효율성을 높일 수 있습니다. 기존의 파일에 새로운 이름을 붙이는 명령이 ln(link)입니다.

ln명령은 하드 링크 파일이나 심볼릭 링크 파일을 만들 때 사용합니다. 하드 링크는 원본 파일에 붙인 이름이고, 심볼릭 링크 파일은 윈도우의 바로가기 아이콘처럼 원본을 가리키는 특수한 파일입니다.

  • ln 명령

    · 기능 ➡ 파일의 링크를 생성합니다.

    · 형식mv [옵션] 원본 파일명 링크 파일명

    · 옵션-s : 심볼릭 링크 파일 생성

    사용방법 : ln test lntest

    ln -s test lntest


유닉스 파일 구조

엄밀히 말하면 하드 링크는 이름과 inode 사이의 연결입니다. 파일은 이름inode, 데이터 블록으로 구성됩니다. inode에는 데이터 블록의 위치 정보가 들어있고 디렉토리 파일에는 이름과 inode에 대한 정보가 들어있습니다. 이 때 디렉토리 파일에 들어있는 inode와 이름 사이의 연결 정보가 하드 링크입니다.

.profile이라는 파일 내용을 보기 위해 $ cat .profile을 실행하는 경우를 생각해봅시다. 유닉스는 현재 디렉토리 파일을 열어 .profile 이름을 찾아 해당 파일의 inode번호를 알아냅니다. 그리고 inode 번호를 보고 inode를 찾아서 그 안에 저장된 데이터 블록 포인터를 따라가 데이터 블록에 저장된 데이터를 읽어서 화면에 출력합니다.



1 하드 링크

유닉스 시스템에서는 하나의 파일에 둘 이상의 다른 이름을 붙일 수 있습니다. 이 때 파일에 붙인 이름을 하드 링크라 하고, 이름이 부여진 파일을 하드 링크 파일이라고 합니다.



2 심볼릭 링크

심볼릭 링크 파일은 윈도우의 바로가기 아이콘과 같습니다. 원본 파일에 쉽게 접근하기 위해 생성한 특수한 파일로, 파일의 내용은 원본 파일의 경로입니다. 링크 파일을 복사하거나 내용을 출력하면 모든 작업이 원본 파일에 대해 수행됩니다. 그리고 원본 파일이 삭제되면 심볼릭 링크 파일이 남아있어도 그 파일을 사용할 수 없습니다.

생성된 심볼릭 링크 파일은 하드 링크와 비교해 다음 몇 가지 특징이 있습니다.

  • 파일 종류 : 1, 심볼릭 링크로 표시됨
  • 하드 링크 수 : 1, 이름 추가가 아님
  • 파일 이름 : 파일 이름 뒤에 원본 파일의 이름이 표시됨 (-> ln, hd)
  • inode 번호 : inode 번호가 다른 별개의 파일임

⚡하드 링크와 심볼릭 링크 파일의 공통점도 있는데, 심볼릭 파일을 수정하면 원본이 수정된다는 것입니다. 원본을 삭제하면 하드 링크는 새로운 이름을 사용할 수 있었으나, 심볼릭 링크는 사용이 불가능하다는 것과 하드 링크는 디렉토리에 설정할 수 없으나 심볼릭 링크는 설정이 가능하다는 것이 하드 링크와 심볼릭 링크의 차이점입니다.




06 파일 생성 및 수정 시간 변경 : toucch



touch는 새로운 파일을 생성하거나 파일 관련 시간을 변경하는 명령입니다. touch에 인자로 주어진 파일이 존재하지 않으면 내용이 없는 빈 파일을 생성하고 파일이 존재하면 현재 시간 또는 옵션에 지정한 시간으로 파일의 관련 시간을 변경합니다.


  • touch 명령

    · 기능 ➡ 빈 파일을 생성하거나 파일 관련 시간을 변경합니다.

    · 형식touch [-acm] [-r ref_file | -t time]파일

    · 옵션-a : 접근 시간만 변경

    -c : 지정된 파일이 없는 경우 새로 생성하지 않음

    -m : 수정 시간만 변경

    -r ref_file : 시간을 파일에서 읽음

    t [[CC]YY]MMDDhhmm[.ss] : 시간을 직접 입력

    사용방법 : touch test



  • 지정한 시간으로 변경하기 : -t

    · 형식[[CC]YY]MMDDhhmm[.ss]

    · 옵션CC : 연도의 첫 두 자리

    YY : 연도의 마지막 두 자리

    MM : 달(01~12 범위내 지정)

    hh : 시간(00~23 범위내 지정)

    mm : 분(00~59 범위내 지정)

    ss : 초(00~59 범위내 지정)

이 때 CC를 지정하지 않으면 [표3-1]과 같이 YY값에 따라 CC를 자동으로 인식합니다.

  • [표3-1]
YYCC
69 - 9919
00 - 3820
39 - 68ERROR



💯03장 요약


01 파일 명령의 기본 형식과 기능

02 파일 링크

  • 명령 사용법 : ln [-s] 원본 파일 링크 파일
  • 원본 파일에 새로운 이름을 붙이는 하드 링크와 원본 파일을 가리키는 심볼릭 링크 파일을 생성하는 명령으로, 복잡한 경로의 파일에 쉽게 접근할 수 있게 함

03 파일 정보 수정 명령

  • touch 명령 가능 : 파일의 최종 접근 시간, 최종 수정 시간을 변경, 지정한 파일이 존재하지 않으면 새로 생성함
  • touch 명령 사용 예 : touch -t 12311320 test_touch

좋은 웹페이지 즐겨찾기