2021-3-7 유닉스기초(1) 특징과 파일시스템

유닉스

특징

  • 유닉스 명령어 특징

    • 명령어 : 동사
    • 파일, 디렉토리 : 명사
    • 옵션 : 형용사
    • 명령어+옵션+파일 => 문장
  • 다중 사용 시스템

    • 모든 사용자가 자신만의 단독시스템을 사용하는 느낌.
    • 각 사용자는 계정이 부여, 각 계정에는 Home디렉토리가 부여되고 파일은 기본적으로 여기에 저장
  • 명령행 기반 사용자 인터페이스

    • 셸 : 사용자가 입력한 명령어를 해석하는 인터프리터 ex) bash, zsh
  • man : 메뉴얼명렁어, 9개의 section으로 구성

    • MKDIR(1)                  BSD General Commands Manual                 MKDIR(1)
      
      NAME
           mkdir -- make directories
      
      SYNOPSIS
           mkdir [-pv] [-m mode] directory_name ...
      
      DESCRIPTION
           The mkdir utility creates the directories named as operands, in the order
           specified, using mode rwxrwxrwx (0777) as modified by the current
           umask(2).
      
           The options are as follows:
      
           -m mode
                   Set the file permission bits of the final created directory to
                   the specified mode.  The mode argument can be in any of the for-
                   mats specified to the chmod(1) command.  If a symbolic mode is
                   specified, the operation characters ``+'' and ``-'' are inter-
                   preted relative to an initial mode of ``a=rwx''.
      
           -p      Create intermediate directories as required.  If this option is
                   not specified, the full path prefix of each operand must already
                   exist.  On the other hand, with this option specified, no error
                   will be reported if a directory given as an operand already
                   exists.  Intermediate directories are created with permission
                   bits of rwxrwxrwx (0777) as modified by the current umask, plus
                   write and search permission for the owner.
      
           -v      Be verbose when creating directories, listing them as they are
                   created.
      
           The user must have write permission in the parent directory.
      
      DIAGNOSTICS
           The mkdir utility exits 0 on success, and >0 if an error occurs.
      
      SEE ALSO
           rmdir(1)
      
      COMPATIBILITY
           The -v option is non-standard and its use in scripts is not recommended.
      
      STANDARDS
           The mkdir utility is expected to be IEEE Std 1003.2 (``POSIX.2'') compat-
           ible.
      
      HISTORY
           A mkdir command appeared in Version 1 AT&T UNIX.
      
      BSD                            January 25, 1994                            BSD
      
      • man mkdir을 하면 위와 같이 나온다. 9개절로 구성
      • NAME절 : 명렁어이름과 한줄 요약
      • SYNOPSIS : 명령어 사용법, 플래그 및 옵션
      • SEE ALSO : 관련 명령어
      • 마지막절 : 수덩된 날짜
    • whatis : 유닉스 명령어에 대한 간단한 설명

      • $whatis man
        mysqlman(1)              - default man page for mysql
        groff_man(7)             - groff `man' macros to support generation of man pages
        groffer(1)               - display groff files and man~pages on X and tty
        man(1)                   - format and display the on-line manual pages
        man.conf(5)              - configuration data for man
        zshall(1)                - the Z shell meta-man page
        

시스템접속

  • 유닉스 시스템을 사용하기 위해서는 로그인을 해야한다.

    • 터미널에서 로그인
    • GUI는 이미 로그인이 되어있다.
    • 터미널에서 %, >와 같은 표시가 있으면 명령어를 입력받을 준비가 되어있다라는 의미.
  • exit 명령어로 로그아웃

  • passwd : 패스워드 변경

  • whoami : 현재 시스템에 로그인해 있는 모든 사용자들의 목록조회 => 다중사용자기반이기 때문에

    • $whoami
      nhn
      
  • who am i : 컴퓨터자체이름, 자신의계정이름, 언제접속했는지

    • $who am i
      nhn      ttys000  Mar  5 10:19
      
  • id : 내가 누구인지, 어떤 그룹들에 속해있는지 할 수 있다.

  • users : 현재 시스템에 접속한 모든 계정

  • who : 현재 시스템에 로그인한 계정이 어떤 라인을 통해 접속했는지, 얼마나 오래 접속했는지

    • $who
      nhn      console  Mar  4 08:59
      nhn      ttys000  Mar  5 10:19
      
  • w : 현재 접속중인 사용자들이 어떤 작업을 하는지

    • $w
      10:56  up 1 day,  1:58, 2 users, load averages: 1.30 1.49 1.73
      USER     TTY      FROM              LOGIN@  IDLE WHAT
      nhn      console  -                목08   25:57 -
      nhn      s000     -                10:19       - w
      
    • 첫번째라인 : 시스템의상태와 현재 수행중인 프로그램의 수
  • time : shell이 사용한 시간, 시스템시간, CPU시간표시

    • $time
      shell  0.07s user 0.06s system 0% cpu 39:54.71 total
      children  0.32s user 0.46s system 0% cpu 39:54.71 total
      
  • date : 현재시각 => 컴퓨터가 꺼져도 내부적은 배터리가 있어서 측정가능.

파일시스템

  • 유닉스는 루트디렉토리를 기준으로 bin, dev, etc 등의 하위 디렉토리가 계층형으로 구성되어있고 유닉스의 모든것은 파일이다.
$jaeyeonkim@jaeyeonui-iMac ls -F
Applications/ Volumes/      etc@          sbin/         xarts/
Library/      bin/          home@         tmp@
System/       cores/        opt/          usr/
Users/        dev/          private/      var@

$jaeyeonkim@jaeyeonui-iMac ls -aF
./                .file             Library/          Volumes/          dev/              opt/              tmp@              xarts/
../               .vol/             System/           bin/              etc@              private/          usr/
.VolumeIcon.icns@ Applications/     Users/            cores/            home@             sbin/             var@
  • 뒤에 /가 붙으면 디렉토리, *가 붙은 것은 프래그램, @가 붙은 것들은 심볼릭링크로서 다른 파일이나 디렉토리에 대한 포인터

  • a옵션을 붙으면 숨긴파일을 볼 수 있다. 이때 ./과 ../디렉토리를 확인할 수 있는데, .디렉터리는 현재 위치를 가리키고, ..디렉터리는 부모디렉터리를 가리킨다.

  • bin 디렉터리

    • bin은 binary의 약자로 실행파일들 모음이다.

    • $ls -F        
      dash*      expr*      ln*        pwd*       sync*
      bash*      date*      hostname*  ls*        rm*        tcsh*
      ...
      
    • 실행파일들이라 ls -F로 출력을 해보면 끝에 *가 붙은것을 확인할 수 있다.

    • 유닉스 초기에는 모든 실행파일을 bin디렉토리에 보관했으나 크기가 방대해지면서 /bin, /sbin, /usr/bin 등으로 관리한다.
  • dev 디렉터리 : device driver의 약자로 장치관리자 폴더로서 장치들의 드라이버를 보관

  • etc 디렉터리 : 시스템 관리를 위한 파일들.

  • lib 디렉터리 : 함수나 라이브러리들의 모음. 다른 파일들에서 lib 디렉토리에 있는 파일들을 불러올 수 있다. 여기서 단독으로는 실행이 안된다.

  • lost+found 디렉터리 : 문제가 발생한 경우, 추후 복구된 파일들은 여이에 복원

  • mnt, sys 디렉터리

    • mnt : 하드디스크, USB 등 외부저장장치를 Unix에 마운트시킬때 마운트 지점으로 사용
    • sys : 시스템 구성정보를 담고 있는 디렉터리
  • tmp 디렉터리 : 실행되는 많은 프로그램들이 임시 파일을 저장하기 위한 위치.

  • usr 디렉터리 : 사용자 관점 명령어들을 넣었으나 오늘날은 애매해졌다.

  • home디렉터리 : 개별사용자의 파일들은 여기에 보관된다. /home에서 ls를 하면 각 사용자들에 맞는 디렉터리가 나온다.

env 명령어

  • env명령어를 입력하면 환경변수 저장된 목록을 볼 수 있다.

  • $env
    SHELL=/bin/zsh
    HOME=/Users/jaeyeonkim
    TERM=xterm-256color
    PATH=/Users/jaeyeonkim/.pyenv/shims:/usr/local/opt/node@10/bin:/usr/local/opt/mongodb-community@4.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/bin:/usr/local/maven-3.5.3/bin
    LOGNAME=jaeyeonkim
    
  • HOME : 사용자가 로그인하고 사용자 개인의 자료가 저장되는 디렉터리

  • SHELL : 현재 사용자의 인터프리터로 사용되는 셸 프로그램

  • TERM : 커서 그래픽을 제공하는데 필요한 에뮬레이션 종류

  • PATH : 명령행에서 실행되는 명령어에 대한 검색경로. 명령어가 저장되는 디렉터리

  • LOGNAME : 사용자 로그인이름

home, path 디렉터리

  • 홈디렉터리는 사용자가 Unix 시스템에 접속할때 최초로 만나게 되는 디렉터리의 이름이다.
  • path안에는 디렉터리들의 목록이 있는데, 사용자가 실행한 명령어를 찾기 위해 path에 저장된 디렉터리들을 왼쪽에서 오른쪽 순서로 검색한다.

느낀점

  • 개발을 하면서 brew install을 이용하여 라이브러리를 설치하면 /usr/local/Cellar 디렉토리에 설치가 되고, zsh의 설정을 바꿀때 .zshrc에 들어가서 다양한 변수들을 설정하고, TCP 포트설정을 위해 netstat와 같은 명령어들을 이용했었는데, 구글링을 한 결과였고 나는 어떤 의미인지 잘 알지 못했다. 늘 궁금했다. /usr 디렉터리의 역할과 bin, sbin 등 각 디렉터리가 어떤 역할을 하는지 궁금했었다. 이번에 유닉스 책을 공부하면서 대략적으로 각 디렉터리들이 어떤 역할을 하는지, 왜 home/user가 있는지 알 수 있었다. 계속 유닉스를 공부하면서 유닉스+리눅스+셸프로그래밍을 통해 좀 더 서버개발자로 성장해보고 싶다.
Written on March 7, 2021