2021-3-12 유닉스기초(4) 파일조회

6장 파일과 디렉터리의 생성, 이동, 이름 변경, 삭제

  • mkdir : 디렉터리 생성 명령어

    • $mkdir dir => 현재 디렉터리에 dir 디렉터리 생성
      $mkdir /path/dir => path에 디렉터리 생성
      
  • cp : 파일 복사, 윈도우나 맥에서는 파일을 불러오거나 이동할때 드래그앤드롭을 사용한다. => 파일의 위치가 동일한 하드웨어면 이동, 다른 하드웨어이면 복사. 반면 유닉스는 파일 이동과 복사를 구별한다.

    • 디렉터리는 cp로 안된다.

    • $cp 원본파일 복사본이름
      
      $cp login.copy profile.copy newDir // 파일들을 newDir에 복사
      
    • -R플래그를 이용하면 파일들과 디렉터리를 재귀적으로 복사할 수 있다.
  • mv : 파일, 디렉터리 위치를 변경, mv를 통해 파일이름을 변경할 수 있고, 디렉터리 이름은 변경할 수 없다.

    • $mv profile.copy login.copy
      
      $mv -i profile.cpoy login.copy
      overwrite login.copy? (y/n [n])
      
    • login.copy 파일이 존재하면 profile.copy가 login.copy를 덮어쓰고 아무런 경고를 하지 않는다. -i 플래그를 사용하면 무조건 덮어쓰기를 방지할 수 있다.
  • rmdir : 디렉터리 삭제, 비어있는 디렉터리만 삭제

  • rm : 파일삭제, 복구할 수 없도록 영원히 삭제 => 휴지통에도 없다. -i 플래그를 이용하면 삭제할지 묻는다. -r플래그를 이용하면 디렉터리 계층을 재귀적으로 내려가면서 파일을 삭제한다. -f플래그를 사용하면 경고메세지, 권한도 무시한다. rm -rf /* 사용하면 답이 없다.

7장 파일 들여다보기

  • file : 파일의 첫 몇줄을 보고, 어떤 파일인지를 사용자에게 가르쳐준다. 하지만 100% 정확한 결과를 못준다. 권한 정보와 파일의 이름, 저장된 내용의 앞줄을 분석하여 결과를 내는데, C프로그램 소스가 실행권한이 있으면 실행파일이라고 결론을 내려서 부정확하다.

    • $file 스크린샷\ 2021-03-10\ 오전\ 11.49.56.png
      스크린샷 2021-03-10 오전 11.49.56.png: PNG image data, 959 x 1035, 8-bit/color RGBA, non-interlaced
      
      $file build.gradle
      build.gradle: ASCII text
      
      $file *
      build.gradle:    ASCII text
      gradle:          directory
      gradlew:         a /usr/bin/env sh script text executable, ASCII text
      gradlew.bat:     DOS batch file text, ASCII text, with CRLF line terminators
      settings.gradle: ASCII text
      src:             directory
      
      $file *
      [:         Mach-O 64-bit executable x86_64
      bash:      Mach-O 64-bit executable x86_64
      
    • *를 붙이면 현재 디렉터리에 존재하는 모든 파일을 분석, *는 현재 디럭터리 내에 있는 모든 파일의 이름으로 대체

      • $ls
        build.gradle    gradlew         settings.gradle
        gradle          gradlew.bat     src
        
        $echo *
        build.gradle gradle gradlew gradlew.bat settings.gradle src
        
    • 개인적인 생각 : file 명령어에 대한 동작은 Linux 버전마다 살짝 다르고, 얼마나 유용한지, 정확한지 잘 모르겠다.

    • head : 파일의 앞 10줄만 보는 명령어 -[숫자] 옵션을 줘서 line 지정도 가능

      • $head build.gradle
        plugins {
        	id 'org.springframework.boot' version '2.4.2'
        	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        	id 'java'
        }
        
        group = 'me.jimmy'
        version = '0.0.1-SNAPSHOT'
        sourceCompatibility = '11'
        
        $head -5 build.gradle
        plugins {
        	id 'org.springframework.boot' version '2.4.2'
        	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        	id 'java'
        }
        
    • tail : 파일의 뒷 10줄을 보는 명령어, -[숫자] 옵션을 통해 뒤에 몇줄까지 출력할지 지정가능

    • $head ~/.zshrc | tail -3
      # load a random theme each time oh-my-zsh is loaded, in which case,
      # to know which specific one was loaded, run: echo $RANDOM_THEME
      # See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
      
    • 위의 명령어 처럼 head와 tail을 파이프라인을 이용하여 조합이 가능, head를 통해 .zshrc의 10줄까지 출력하고 그 결과의 마지막 3번째 줄을 출력해서 8,9,10번쨰 줄을 출력

    • : 파이프라인
    • cat 명령어 : 파일의 내용을 전부본다. -v를 주면 실행파일이여도 안전하게 출력, -s을 주면 빈줄이 여러개일때 1줄만 출력, -n플래그를 사용하면 출력할때 라인출력

    • $cat -n build.gradle
           1	plugins {
           2		id 'org.springframework.boot' version '2.4.2'
           3		id 'io.spring.dependency-management' version '1.0.11.RELEASE'
           4		id 'java'
           5	}
           6
           7	group = 'me.jimmy'
           8	version = '0.0.1-SNAPSHOT'
           9	sourceCompatibility = '11'
          10
      
      
      • 텍스트 양이 클 경우, cat 명령어를 이용하면 내용이 위로 올라가는 경우가 많다. 이때 more 명령어를 쓴다.
    • more 명령어 : 출력되는 내용을 페이지 단위로 확인

      • -s : 여러 빈줄을 하나로 합친다.

      • -d : 각 페이지의 마지막에 출력되는 프롬프트를 친수갛게 바꾼다.

      • -c : 페이지가 넘어갈때마다 이전 출력된 페이지를 화면에서 지운다.

      • $more -12 .zshrc // 12번째 줄부터 본다.
        
        $more +/source .zshrc // source 단어가 있는 줄부터 출력
        
    • more 프롬프트

      • [space] : 다음페이지 출력
      • n[return] 다음 n줄이 출력 그렇지 않으면 다음 한줄이 출력
      • h : more에서 사용할 수 있는 명령어목록
      • d : 아래쪽으로 반페이지 스크롤
      • q : more프로그램 종료
      • ns : 다음 n줄을 건너뛴다.
      • nf : 다음 n페이지를 건너뛴다
      • b : 이전페이지로 돌아간다
      • = : 현재 행 번호를 출력
      • /pattern : pattern이 등장하는 위치를 찾는다.
      • n : 앞서 지정한 패턴이 등장하는 다음 위치를 찾는다
      • v : 현재 줄에서 vi 에디터를 실행
      • Ctrl-i : 화면을 refresh한다.
      • f : 현재보고 있는 파일 이름과 행을 출력
Written on March 12, 2021