[TIL] 실용적 유닉스 커맨드

Jeris·2023년 4월 9일
0

코드잇 부트캠프 0기

목록 보기
12/107

Topic

유닉스 커맨드의 기본 사용법



What I Learned

Unix Command

  1. 유닉스 커맨드란?
    • Unix: 1970년대 초반에 개발된 운영체제
      • 소프트웨어를 개발하고 실행할 수 있는 편리한 플랫폼
      • 쉽게 수정해서 다른 컴퓨터에 적용할 수 있었다
      • 유닉스 운영 체제: macOS, Linux, Ubuntu, ...
    • Unix Command: 유닉스 운영체제에서 사용하는 커맨드
      • Window command보다 개발에서 보편적으로 쓰인다
  2. 유닉스 운영 체제
    • 유닉스의 시작과 변형
      • 유닉스는 1970년대 초반, 미국 벨 연구소 직원 켄 톰슨과 데니스 리치의 주도로 개발자들이 소프트웨어를 개발하고 실행할 수 있는 편리한 플랫폼을 제공하기 위해 개발되었다
      • C로 대부분 작성되었기 때문에 수정해서 다른 컴퓨터에 적용하기 편했다.
      • 다양한 버전의 유닉스가 만들어져 변형에 제한을 두기 위해 POSIX라는 유닉스의 표준이 만들어졌다
    • 무료와 공유의 문화, 리눅스의 등장
      • 유닉스를 사용하거나 변형할 때, AT&T에 라이센스 비용을 지불해야 했다
      • 그래서 Free Software Foundation에서 유닉스의 코드를 하나도 사용하지 않고 유닉스와 유사한 운영 체제 GNU를 직접 만들어 무료로 배포했다
      • GNU: "GNU's Not Unix!"
      • 핀란드에서 헬싱키 대학교를 다니던 리누스 토발즈라는 학생이 Linux라는 커널을 완성했다
      • GNU 프로젝트에서 Linux를 가져다 쓰기로 했고, GNU/Linux가 완성됐다
      • 그 후 Ubuntu, Red hat, CentOS, Debian 등 GNU/Linux를 변형한 리눅스 배포판들이 많이 만들어졌다
    • macOS는?
      • 1978년 미국 UC 버클리 대학의 대학원생이었던 Bill Joy와 Chuck Haley는 기존의 유닉스를 개량하여 BSD(Berkerly Software Distribution)라는 운영체제를 개발했다
      • 스티브 잡스가 Apple 내에서 여러 갈등을 겪고 쫓겨난 후 세운 회사, NeXT라는 컴퓨터 회사에서 4.3BSD를 기반으로 NeXTStep이라는 운영 체제를 개발했다
      • Apple이 외부에서 개발된 좋은 운영 체제를 가져오려는 중, NeXTStep을 가져오고, NeXT를 인수하였다
      • NeXTStep을 Apple의 기기에 이식하기 위한 프로젝트를 시작했고, NeXTStep은 iOS, macOS, watchOS 등의 기초가 되었다
    • 이 모든 운영 체제의 공통점
      • POSIX라는 표준에 부합하여 공식적으로 인증을 받으면 Unix-certified, 공식 유닉스가 되고 인증받지 않고 기능적으로 거의 차이가 없는 정도라면 Unix-like, 유사 유닉스라고 부른다
      • Unix-certified: macOS, HP-UX, AIX, ...
      • Unix-like: ubuntu, Red hat, Centos, Debian, ...
      • 커맨드로 운영 체제를 사용하는 관점에서는 이 모든 운영 체제들이 거의 동일하다
      • 그러므로 유닉스와 관련된 수많은 운영 체제들에서 유닉스 커맨드를 공통으로 사용할 수 있다
  3. Terminal
    • Terminal: 인풋을 받고, 아웃풋을 출력해 주는 프로그램
    • shell prompt: 유저 인풋을 받을 준비가 됐을 때마다 보여지는 메세지
    • shell: 쉘 언어 인터프리터
      • bash(Bourne again shell)
        • 본 셸을 대체하는 자유소프트웨어로서 GNU 프로젝트를 위해 브라이언 폭스(Brian Fox)가 작성한 유닉스 셸이다
        • bash command의 문법은 거의 대부분이 sh와 호환되어 쓰일 수 있다
        • ksh, csh에서 많은 아이디어를 받아서 command history, directory stack, $RANDOM POSIX 형식 명령어 치환 등을 지원한다
        • 입력 중에 명령어나 파일 이름을 자동 완성해 주는 기능도 지원한다
        • macOS는 10.15 Catalina 이전 버전에서 bash를 기본으로 사용했다
      • zsh(Z shell)
        • 1990년에 프린스턴 대학교에 재학 중이던 Paul Falstad가 zsh의 최초 버전을 작성하였다
        • 상호작용 로그인 셸이자 셸 스크립트를 위한 강력한 명령 줄 인터프리터로 사용할 수 있는 유닉스 셸이다
        • bash, ksh, tcsh의 일부 기능을 포함하여 수많은 개선 사항이 갖추어진 확장형 본 셸이다
        • 커스텀이 비교적 자유로운 편이다
        • macOS는 10.15 버전 이후부터 zsh를 기본으로 사용한다
  4. 커맨드의 기본 형태
    • {command} -{options} {argument1} {argument2} ...
      • option: command가 동작하는 방식을 지정한다
      • argument: command가 동작할 대상을 지정한다
  5. 커맨드 매뉴얼: man
    • man {command}로 커맨드 매뉴얼을 볼 수 있다
  6. 단축키
    • Ctrl + A 줄 가장 앞으로 커서 이동
    • Ctrl + E 줄 가장 뒤로 커서 이동
    • Option + ← 이전 단어로 커서 이동
    • Option + → 다음 단어로 커서 이동
    • Ctrl + C 실행하고 있는 작업 취소
    • clear 커맨드 라인의 스크롤을 현재 라인까지 내리기
    • Tab 자동 완성

디렉토리와 파일 다루기

  1. Unix directory structure and file path
  2. Directory 관련 커맨드
    • pwd(print working directroy)
    • cd(change directory) {path}
      • path에 빈 값을 주면 ~으로 이동
      • path에 '-' 값을 주면 /으로 이동
    • ls(list) {path}
      • path에 빈 값을 주면 working directory의 list 출력
  3. Absolute path and relative path
    • Absolute path: root('/')나 home directory('~')를 기준으로 하는 경로
    • Relative path: ./(working directory) 또는 ../(parent directory)를 사용한 경로
      • ./은 생략할 수 있다
    • 폴더나 파일 이름에 공백이 들어있을 때는 따옴표나 역슬래시를 활용해야 한다
  4. ls의 중요한 옵션들
    • -a(all): 숨김 파일 표시
    • -l(long format): 자세한 정보 표시
      • total: 디렉토리에 사용하고 있는 블럭(MB)의 크기
      • 1 번째 column의 첫 글자는 파일의 종류를 나타낸다
        • d: directory
        • -: regular file
        • l: symoblic link
        • p: FIFO (named pipe)
        • s: socket
        • b,c: device file (block, charcter)
        • D: door
      • 1 번째 column의 나머지 글자는 permission 관련 내용이다
      • 2 번째 column은 이 파일과 연결된 링크의 개수
      • 3 번째 column은 파일의 소유자
      • 4 번째 column은 소유자가 속한 그룹
      • 5 번째 column은 파일의 크기(Byte)
      • 6 번째 column은 파일의 마지막 수정 날짜와 시간
      • 7 번째 column은 파일 이름
  5. Root 디렉토리 하위 파일
    • /bin(binaries): 유닉스 커맨드의 기본 커맨드들
    • /sbin: 관리자 전용 프로그램들
    • /etc: 각종 프로그램의 설정 파일, 관리자 권한 설정 파일 등
    • /home 또는 /Users: 사용자의 홈 디렉토리(~)
    • /usr: user에게 필요한 파일들을 저장
      • /usr/bin: 사용자가 필요한 커맨드들
      • /usr/local: 사용자가 직접 설치한 프로그램과 관련된 파일들
  6. 디렉토리와 파일 만들기: mkdir, touch
    • mkdir {path/dir2} {path/dir1} ...
    • touch {path/file1} {path/file2} ...
      • touch는 파일의 마지막 접근 시간을 업데이트 하는 커맨드이다
      • 파일이 존재하지 않으면 생성한다
  7. vim으로 파일 작성하기
    • vim {path/file}
      • 파일을 만들거나 vim으로 파일을 연다
    • vim의 4가지 사용 모드
      • Normal Mode
      • Insert Mode
      • Visual Mode
      • Command Mode
    • 단축키
      • i 입력 모드
      • esc 일반 모드
      • v, V 비주얼 모드(글자 단위, 줄 단위)
      • : 명령 모드
      • yy 일반 모드에서 한 줄 복사
      • dd 일반 모드에서 한 줄 잘라내기
      • y 비주얼 모드에서 지정된 영역 복사
      • d 비주얼 모드에서 지정된 영역 잘라내기
      • p 일반 모드에서 커서 위치에 붙여넣기
      • w+enter 명령 모드에서 파일 저장
      • wq+enter 명령 모드에서 파일 저장과 종료
      • q!+enter 명령 모드에서 파일 저장하지 않고 종료
  8. 파일 내용 살펴보기: cat, less, head, tail
    • cat {path/file1} {path/file2} ...
      • concatenate의 줄임말
      • 파일들의 내용을 출력한다
      • 파일이 여러 개인 경우 내용을 모두 붙여서 출력한다
    • less {path/file}
      • 파일의 내용을 페이지 단위로 다눠서 보여준다
      • 단축키
        • 줄 이동: 위쪽 / 아래쪽 방향키
        • 다음 페이지: space 아니면 f
        • 이전 페이지: b
        • 마지막 페이지: G
        • 처음 페이지: g
    • head/tail [-n count] PATH
      • 파일의 첫/마지막 10줄을 출력한다
      • n 옵션은 출력되는 줄 개수를 바꿔준다
  9. 디렉토리와 파일 옮기기, 이름 변경하기: mv
    • mv [-i] SOURCE_PATH DEST_PATH
      • DEST_PATH가 이미 존재하는 디렉토리의 경로일 경우 SOURCE_PATH를 그 안으로 이동시키고, 그렇지 않으면 DEST_PATH로 이름을 변경한다
      • i 옵션: 같은 이름의 파일이 있을 경우 덮어씌울지 확인하면서 이동하기
  10. 디렉토리와 파일 복사 붙여넣기: cp
    • cp [-ri] SOURCE_PATH DEST_PATH
      • DEST_PATH가 이미 존재하는 디렉토리의 경로일 경우 SOURCE_PATH를 그 안으로 복사하고, 그렇지 않으면 DEST_PATH라는 이름으로 복사한다
      • r 옵션: 디렉토리를 복사할 때 필수 옵션
      • i 옵션: 같은 이름의 파일이 있을 경우 덮어씌울지 확인하면서 복사하기
  11. 디렉토리와 파일 삭제하기: rm
    • rm [-rif] PATH1 PATH2 ...
      • 경로에 해당하는 파일/디렉토리들을 지워준다
      • r 옵션: 디렉토리를 삭제할 때 필수 옵션
      • i 옵션: 확인하면서 삭제하기
      • f 옵션: 확인하지 않고 삭제하기

외부 프로그램 설치하기

  1. Ubuntu에서 외부 프로그램 설치하기: apt
    • apt update를 하고 사용해야 한다
    • 관리자 권한이 필요하면 sudo 커맨드를 사용한다
    • sudo apt install program 설치
    • sudo apt remove program 삭제
  2. macOS에서 외부 프로그램 설치하기: homebrew
    • homebrew 홈페이지에서 가이드대로 설치
    • brew help 설명
    • brew install program 설치
    • brew uninstall program 삭제
      • 남아있는 설정 파일들도 지울 수 있도록 Warning이 출력됩니다.



Feedback

  • 포스팅할 때 앞으로 외부 링크의 이미지보다는 가지고 있는 이미지를 사용하는 것이 좋겠다
  • 글의 가독성을 높여야 겠다
  • 터미널을 자주 쓰다보면 커맨드와 단축키들은 자연스럽게 외워질 것 같다
  • 다음으로 'Git' 코드잇 콘텐츠를 수강할 예정이다



Reference

profile
job's done

0개의 댓글