리눅스프로그래밍

우분투 리눅스 - 파일 다루기

헬로월드! 2020. 4. 10. 14:55

파일 사용 명령

 

파일의 종류 -> 일반 파일, 디렉터리, 심벌릭 링크, 장치파일

 

1. 파일 내용 보기   ->   cat , more , less ,tail 

 cat 

  • 기능 : 파일 내용을 출력한다. ( 파일 내용을 출력하는 명령은 기본적으로 텍스트 파일의 내용을 출력 , 실행 파일과 같은 바이너리 파일의 경우 일반적인 명령으로 확인할 수 없다!  )
  • 형식 : cat [옵션] 파일
  • 옵션 : -n : 행 번호를 붙여서 출력한다.
  • 사용 예 : cat file1    cat -n file1

more

  • 내용이 많을 경우 스크롤 되므로 내용을 확인하기가 어렵다. 이때 화면 단위로 파을 내용을 출력하는 명령
  • 기능 : 파일 내용을 화면 단위로 출력
  • 형식 : more [옵션] 파일
  • 옵션 : + 행번호 : 출력을 시작할 행 번호를 지정한다.
  • 사용 예 : more file1

more 명령으로 파일 내용이 출력된 후 Space Bar 누르면 -> 다음 화면이 출력

                                                              Enter 누르면 -> 한 줄씩 스크롤 

                                                             / 문자열 -> 해당 문자열을 찾아 이동

                                                            q 또는 ctrl+c 누르면 종료

less

  • more 명령으로 파일의 내용을 화면 단위로 출력할 때 한 가지 불편한 점은 이미 스크롤 되어 지나간 내용을 다시 볼 수 없다
  • less 명령을 사용하면 파일 내용을 앞뒤로 스크롤하며 이동할 수 있다.
  • 기능: 파일 내용을 화면 단위로 출력한다.
  • 형식 : less 파일
  • 사용 예: less file1 
  • 주요 키 
  •  
동작
j 한 줄씩 다음 행으로 스크롤한다.
k 한 줄씩 이전 행으로 스크롤한다.
space bar 다음 화면으로 이동한다.
ctrl + f find 명령 - > 찾기 
ctrl + b 이전 화면으로 이동한다.

 

tail 

  • tail 명령은 파일 뒷부분의 몇 행을 출력한다. 기본값은 10 으로 파일 뒷부분의 10 행이 출력된다.
  • 기능: 파일 뒷부분의 몇 행을 출력한다.
  • 형식: tail [옵션] 파일
  • 옵션 : + 행 번호: 지정한 행부터 끝까지 출력한다. 
  •         -숫자: 화면에 출력할 행의 수를 지정한다 (기본 :10)
  •         -f : 파일 출력을 종료하지 않고 주기적으로 계속 출력한다.  (프롬프트가 생기지 않고 계속  커서가 있음 -> 계속 대기상태, 다른 터미널에서 이 파일의 내용을 수정한다면 ? 수정된 내용이 보인다. )     종료시 ctrl+c (^C) 명령으로 종료

 

2. 파일 복사 . 이동. 삭제 -> cp, mv, rm 

cp

  • 파일을 복사할 때 cp (copy) 명령 사용 , cp 명령으로 디렉터리도 복사할 수 있다. 
  • 기능: 파일이나 디렉터리를 복사한다.
  • 형식: cp [ 옵션 ]  파일1 (디렉터리1) 파일2 (디렉터리2)
  • 옵션 : -i ) 파일 2가 존재하면 덮어쓸 것인지 물어본다.
  •           -r ) 디렉터리를 복사할 때 지정한다.
  • 사용 예: cp file 1 file2    cp f1 f2 f3 dir1    cp -r dir1 dir2 cp 명령의 첫 번째 인자로는 원본 파일이나 디렉터리를 지정하고, 두번째 인자로는 목적지 파일이나 디렉터리를 지정한다. 두 인자를 어떻게 구성하느냐에 따라서 다양한 결과가 나온다. 
  •  
두 인자가 모두 파일인 경우  파일을 다른 파일로 복사
두번째 인자가 디렉터인 경우 파일을 해당 디렉터리 아래에 복사, 원본과 다른 이름으로 복사, 쓰기 권한이 없는 디렉터리에 파일을 복사하려고 하면 오류 발생
인자를 여러개 지정할 경우 cp 명령에서 첫번째 인자 자리에 파일명을 여러 개 지정할 수 있는데, 두번째 인자는 반드시 디렉터리여야한다. 이럴경우 마지막에 지정한 디렉터리로 앞서 지정한 파일들이 모두 복사된다. 
-i 옵션 사용하기 두번째 인자로 지정한 파일이 이미 있는 경우 덮어서 복사할 것인지 확인
디렉터리 복사하기 디렉터리를 복사하려면 -r 옵션을 사용해야함 , 두번째 인자로 지정한 목적지 디렉터리가 존재하지 않는 경우 새로 생성, 디렉터리가 복사되면 원본 디렉터리 아래 있던 모든 내용도 함께 복사됨

mv

  • 파일을 다른 디렉터리로 이동하거나 파일명을 바꿀 때 mv (move) 명령 사용 
  • 디랙터리를 이동하거나 디렉터리 명을 바꿀때도 mv 명령 사용 
  • 기능 : 파일을 이동한다.
  • 형식 : mv [옵션] 파일1 (디렉터리1) 파일2 (디렉터리2)
  • 옵션 : -i ) 파일2(디렉터리2)가 존재하면 덮어쓸 것인지 물어본다.
  • 사용 예 : mv file1 file2 mv 명령의 첫번째 인자로는 원본 파일이나 디렉터리를 지정하고, 두번째 인자로는 목적지 파일이나 디렉터리를 지정한다. cp 명령처럼 첫번째 인자와 두번째 인자 구성에 따라 mv 사용의 결과도 다양하게 나타난다.
파일을 파일로 이동하기 ( 파일명 바꾸기)

파일을 다른파일로 이동하는 것은 결국 원본 파일의 파일명을 다른 파일명으로 바꾸는 것

만약 두번째 인자로 지정한 파일명이 이미 존재하는 파일이면 원본 파일의 내용으로 덮어쓰고 기존의 내용이 삭제

 

두번째 인자로 지정한 파일명이 존재하지 않는 파일이라면 

새로운 파일 생성 

파일을 다른 디렉터리로 이동하기

두번째 인자로 디렉터리를 지정할 경우 원본 파일을 지정한 디렉터리로 이동 

두번째 인자에 디렉터리와 파일명을 함께 지정할 경우, 파일이 지정한 디렉터리로 이동하면 파일명도 바뀌게 됨

mv text1 temp/data2 

 

쓰기 권한이 없는 디렉터리로 파일을 이동하려고 할 때 오류발생 

파일 여러 개를 디렉터리로 이동하기

mv 명령으로 파일 여러 개를 지정한 디렉터리로 한 번에 이동 가능 , 두번째 인자는 반드시 디렉터리여야함

 

mv temp/data1 temp/data2 .  

temp의 data1 파일과 temp의 data2 파일이 현재 디렉터리(.) 로 이동함 

-i 옵션 사용하기

두번째 인자에 지정한 파일이 기존에 있는 파일일 경우 덮어서 이동할 것인지 물어봄 

mv -i data1 data2

mv: 'data2'를 덮어쓸까요? y/n 

디렉터리를 디렉터리로 이동하기 (디렉터리명 바꾸기)

인자를 모두 디렉터리로 지정하면 디렉터리가 이동

두번째 인자가 기존에 있던 디렉터리가 아닐 경우에는 디렉터리명이 변경 

 

두번째 인자가 기존에 있던 디렉터리일 경우, 원본 디렉터리가 두 번째 인자로 지정된 디렉터리 아래로 이동 

 

rm 

    (remove)

  • 기능 : 파일을 삭제한다.
  • 형식 : rm [옵션] 파일 (디렉터리)
  • 옵션 : -i ) 파일을 정말 삭제할 것인지 물어본다. -r) 디렉터리를 삭제할 때 지정한다.( 비어있지 않아도 삭제 가능)
  • 사용 예 : rm file    rm -r dir
  • rm 명령으로 디렉터리도 삭제할 수 있다. (디렉터리도 파일이기 때문에)
  • rmdir 명령으로도 디렉터리는 삭제할 수 있는데, 이 경우 디렉터리가 비어 있어야한다. 
  • 그러나 rm 은 비어 있지 않아도 삭제가 가능하다. 
  • rm 명령으로 디렉터리를 삭제할 때는 -r 옵션을 지정하고, 삭제되면 복구가 불가능하다.

3. 하드 링크 . 심벌릭 링크 생성

1) 파일링크란? 기존에 있는 파일에 새로운 파일명을 붙이는 것으로 하드링크와 심벌릭 링크가 있다.

  • 하드링크: 기존 파일에 새로운 파일명을 추가로 생성
  • 심벌릭 링크: 원본 파일을 가리키는 새로운 파일을 생성 

2) 리눅스의 파일 구성 

파일 = 파일명 + inode + 데이터 블록 

파일명 : 사용자가 파일에 접근할 때 사용하는 파일의 이름
inode: 파일에 대한 정보를 가지고 있는 특별한 구조체로서 외부적으로는 번호로 표시되고 내부적으로는 파일의 종류, 크기, 소유자, 파일변경 시간 , 파일명 등 파일 상세 정보와 데이터 블록의 주소를 저장
파일의 inode 번호는 ls -i 명령으로 확인 할 수 있다. 
파일명 앞에 출력된 숫자가 inode 번호, 파일 이름은 다르지만 inode 번호가 같다면 같은 파일 

ln  - 하드링크 만들기 

  • 기능 : 파일의 링크를 생성한다.
  • 형식 : ln [옵션] 원본 파일 링크 파일
  • 옵션 : -s ) 심벌릭 링크 파일을 생성한다.
  • 사용 예 : ln test lntest1 
  •                ln -s test lntest
  • 리눅스에서는 파일에 여러 개의 이름을 붙일 수 있는데, 이때 붙이는 파일명을 하드링크 라고 한다. 

 

-s 옵션  - 심벌릭 링크 만들기

  • data1 파일의 심벌릭 링크로 data1.sl 을 생성
  • 심벌릭 링크의 inode 번호를 보면 원본 파일과 다른 번호
  • ls -l 명령으로 확인해보면 파일의 종류가 l 로 표시되고 파일명도 -> 를 사용하여 원본파일이 무엇인지 알려줌 
  • 심벌릭 링크는 윈도의 바로가기 처럼 원본 파일을 가가리키는 파일이다. 

심벌릭 링크와 하드 링크의 차이는?????

  • 파일의 종류가 l (L) 로 표시된다. (심벌릭 링크)
  • 하드 링크의 개수가 증가하지 않는다. 즉 , 원본 파일에 이름을 추가하는 것이 아니다.
  • 파일명 뒤에 원본 파일명이 표시된다. (->data1)
  • inode 번호가 원본 파일과 다르다. 즉 원본 파일과 심벌릭 링크 파일은 별개의 파일이다. 

4. 빈 파일 생성 

touch - 빈 파일 생성하기, 수정 시간 변경하기

  • 빈 파일을 새로 생성하거나 파일의 마지막 접근 시간 또는 수정 시간을 변경할 수 있다.
  • 인자로 지정한 파일이 존재X -> 내용이 없는 빈 파일을 생성
  • 인자로 지정한 파일이 존재O-> 현재 시간 또는 옵션에 지정한 시간으로 파일의 관련 시간을 변경한다.
  • 형식: touch [-acm] [-r ref_file | -t time] 파일
  • 옵션 :  - a) 접근 시간만 변경한다. -m) 수정 시간만 변경한다. -t) 시간을 직접 입력한다.
  • 사용 예 : touch test

5. 파일 내용 검색

grep 명령

  • grep 명령은 파일 내에서 특정 문자열을 검색할 때 사용한다. 
  • grep 명령은 정규 표현식을 이용하여 복잡한 검색도 가능하다.
  • 자세한건 man grep 검색 후 보기!
  • 기능: 지정한 패턴이 포함된 행을 찾는다.
  • 형식: grep [옵션] 패턴파일
  • 옵션: -i ) 대문자, 소문자를 모두 검색한다. -l ) 지정한 패턴이 포함된 파일명을 출력한다. -n ) 행 번호를 출력한다.
  • 사용 예: grep root /etc/passwd 
  •               grep -l hello *.c
  •               grep -n unix ~/*.txt 

 

6. 파일 검색

 find 명령 

  • find 명령은 리눅스의 디렉터리 계층 구조에서 특정 파일이 어느 디렉터리에 있는지 찾아준다.
  • grep 은 파일 내용을 검색하는데 반해 find 는 파일의 생성 일자와 이름 , 소유자 등 다양한 조건에 맞는 파일을 찾는다.
  • 기능 : 지정한 위치에서 조건에 맞는 파일을 찾는다.
  • 형식 : find [경로 검색 조건] [동작]
  • 옵션 : -name filename: 파일명으로 검색한다.
  •            -type 파일 종류: 파일 종류로 검색한다.
  •            - user loginID: 지정한 소유가자 소유한 모든 파일을 검색한다.
  •            - perm 접근 권한: 지정한 사용 권한과 일치하는 파일을 검색한다.
  • 동작: -exec 명령 {}\;  ) 검색된 파일에 명령을 실행한다.
  •          -ok 명령 {} \; ) 사용자의 확인을 받아서 명령을 실행한다.
  •          -print ) 검색된 파일의 절대 경로명을 화면에 출력한다 ( 기본 동작)
  •         -ls ) 검색 겨결과를 긴 목록 형식으로 출력한다.
  • 사용 예 : find ~ -name hello.c
  •                find /tmp -user user10 -exec rm {}\; 

whereis  - 명령의 위치 찾기

  • whereis 나 which 명령은 특정 명령이 있는 위치를 찾아서 절대 경로를 출력한다. 
  • whereis 명령은 지정한 명령을 고정된 특정 경로에서 검색한다.
  • 기능: 지정한 경로에서 명령의 바이너리 파일이나 매뉴얼 파일의 위치를 찾는다.
  • 형식: whereis [ 옵션] 파일
  • 옵션 : -b) 바이너리 파일만 검색한다. -m) 매뉴얼 파일만 검색한다.  -s ) 소스 파일만 검색한다.
  • 사용 예 : whereis ls

which

  • 에일리어스나 PATH 환경 변수로 지정된 경로에서 파일을 찾는다.
  • PATH 환경 변수는 시스템과 사용자마다 다르게 지정되어 있기 때문에 검색 결과가 다를 수 있다.
  • 기능 : 명령어 파일의 위치를 찾아서 그 경로나 에일리어스를 출력한다.
  • 형식 : which 명령
  • 사용 예 : which ls