brunch

매거진 Linux Skill

You can make anything
by writing

C.S.Lewis

by Henry Sep 02. 2017

Linux Fundamental #1

Linux Basic

인프라 관련 업무를 하면서 리눅스를 다루지 못한다는 건 말이 안 된다...

이번에 좋은 기회가 있어서, 5일간 Linux에 대해 기초적인 내용에 대해 배웠다.

배우면서 정말 많은 도움이 된 것 같고, 리눅스라는 OS 운영체제에 대해 좀 더 알게 되었다.


많은 사람들이 도움이 되었으면 해서 블로그에 내용을 정리해서 공유하고자 한다.

리눅스를 배우기 위해서 준비하는 사람들이 내 글을 보고 많은 도움이 되었으면 좋겠다.


정보는 공유할수록 그 가치가 높아진다.


Linux의 경우 터미널을 통해서 대부분 모든 걸 한다. 그렇다고 터미널만 있느냐? 그건 아니다.

Window나 Mac OS처럼 화면이 존재한다.(GUI 화면 : GNOME)

그러나 대부분 Linux사용자는 GUI를 통하여 사용하지 않는다. 이유는 터미널 화면에서 모든 걸 다 할 수 있기도 하고, 일반 사용자보다는 시스템 관리자를 위한 OS여서, 좀 더 빠르고 안정적인 시스템 User에게 제공해야 하기 때문에 PC나 Server의 리소스를 많이 잡아먹는 GUI를 사용하지 않고, 그 리소스를 시스템을 관리하는 것에 투자하기 위함이다.


1. Linux Login 로그인(인증)

    system <- account(계정)/password 인증 접속 login이 허용된 후 여러 가지 명령을 지원 : $으로 표시된다. $으로 표시되면 user로 로그인한 것이고 #으로 표시되면 root 권한이다.


    리눅스 로그인

        User Login 시 [Login user name@Server host Directory]$

        Root Login 시 [Login user name@Server host Directory]#

Linux  User Login

    - Linux

        ssh  servername -------------> sshd(22)

        telnet --------------------------> telnet.d(23)

    - Linux system : local login

       Text login : 부팅 시에 자동으로 login 프로그램 실행  -> login

       GUI login: GNOME(gdm), KDE(kdm) ->  Graphic login    


    - Remote login

        Clinet    ---------------------------> Server

    - Windows --------------------------> linux/Unix

        윈도에서 리눅스로 연결하기 위해서는 프로그램을 사용해야 하며, 보통 아래와 같은 프로그램이 있다.

            Putty, SecureCRT, Netterm..     telnet.d(23)

        접속 방법

        server name(ip) : sshd(22)

            username : XXXXX

            password : XXXXXX



2. Command 실행

    리눅스에는 여러 가지 커맨드들이 존재한다. 터미널 텍스트로 명령어를 입력하여 실행을 하는 방식이다.

    $ command

    $ command  -options -options

    $ command argument1 argument2...    <- argument는 파일 이름/디렉터리 이름

    $ command -options arg arg2...


3. 로그인 정보 얻기

        $ whoami : 로그인한 유저 ID

            henry

        $ id -u : 로그인한 유저 넘버

            1000

        $ id -g : 로그인한 유저 그룹 넘버

            1000

      

    * 현재 로그인해서 작업하는 터미널 이름 확인

        $ tty

            /dev/tty1


4. 로그인된 유저 리스트 확인 명령어

    * $ users, $ who, $ w, $ finger, $ last...


5. System 정보

    * 커널 버전 : $ uname -r

    * 아키텍처 : $ arch

    * 메모리 : $ free -m   <- MB단위

    * 배포판 종류 :  cat /etc/os-release


5. Network 정보

    * hostname

        $ hostname

        $ uname -n

    * IP Address

        $ ip addr

        $ ifconfig

            - lo(localhost),   eno1(lan card) - IP

    * Gateway address

        $ ip route

        $ route

        $ netstat -nr

    * DNS server

        $ cat /etc/resolv.conf


7. CPU 사용량

    * $ uptime : 현재 시스템이 최근 1분, 5분, 15분까지의 사용량을 출력

    * $ w : 사용자별로 사용한 CPU 사용량


8. 일반 유저가 root 또는 다른 계정으로 변환하는 방법(많이 사용하게 되는 방법이다.)

    a. su - username(username으로 계정을 전환한다.)

        user$ su -root  

        user$ su root

        user$ su -l root

        user$ su -       

    b. sudo

        - 특정 관리용 명령어만 일반 유저에게 허용.

        - 허용 설정 : /etc/sudoers


# vim /etc/sudoers

...

visitor   ALL=/usr/sbin/useradd, /usr/sbin/userdel

visitor$ sudo useradd username

visitor$ sudo userdel -r username



9. 도움말 확인 방법

    - $ command --help

    - $ info "keyword"

    - $ man "keyword"


h : more 명령어상태에서 사용할 수 있는 키 도움말 확인


    1. Filesystem

        * 디스크에 파일을 어떻게 저장하고 어떻게 읽어줄지 정의.

        * 종류:  msdos ntfs ext2 ext3 ext4 xfs btfs ufs....


    2. Filesystem Hierarchy Standard

        리눅스 시스템의 디렉토리 구조는 전체적으로 역 트리(tree) 구조를 하고 있습니다. 그리고 명령어의 종류와 성격, 사용권한등에 따라 각각의 디렉토리들로 구분됩니다. 리눅스 배포판들은 '리눅스 파일시스템 표준' 인 FSSTND(LINUX FILE System Standard) 라는 표준을 준수하므로 대부분의 리눅스 배포판들은 그 기본 골격이 같습니다.

    /(루트)

        최상의 디렉토리인 루트 디렉토리를 의미하며, 리눅스의 모든 디렉토리들의 시작점이다. 즉, 모든 디렉토리들을 절대경로로 표기할 때에 이 디렉토리로부터 시작해야 한다.


    /boot

        부팅에 관련된 프로그램/파일이 저장


    /bin

        기본적인 명령어가 저장된 디렉토리. 즉, 리눅스 시스템사용에 있어 가장 기본적이라고 할 수 있는 mv, cp, rm 등과 같은 명령어들이 이 디렉토리에 존재하며 root 사용자와 일반사용자가 함께 사용할 수 있는 명령어 디렉토리이다.


    /sbin

        system binary. 시스템 관리자들이 사용하는 리눅스 명령어들(halt, shutdown 등)이 모여있는 디렉토리.

 /sbin(바로가기) --> /usr/sbin   

 

    /lib

        커널모듈파일과 라이브러리파일 즉, 커널이 필요로하는 커널모듈파일들과 프로그램(C, C++ 등)에 필요한 각종 라이브러리 파일들이 존재하는 디렉토리.


    /root 

        root 사용자의 홈디렉토리 


    /home/username

        계정사용자들이 홈디렉토리


    /run

        동작중인 어플리케이션 프로그램들이 참조하는 디렉토리. 시스템종료시 /run 디렉토리의 내용은 모두 제거됨.


    /media

        USB, CDROM 등과 같이 탈부착이 가능한 장치들의 마운트포인트로 사용되는 디렉토리.

        /media/cdrom        : /dev/cdrom

        /media/usb-disk    : Usbdisk


    /dev

        시스템 디바이스(device)파일을 저장하고 있는 디렉토리. 하드디스크 /dev/sda, CDROM /dev/cdrom 등과 같은 장치파일이 이곳에 존재한다.


    /usr 

        시스템이 아닌 일반 사용자들이 주로 사용하는 디렉토리.


    /usr/bin

        일반 사용자들이 사용 가능한 명령어 파일들이 존재하는 디렉토리.

    /usr/sbin

        /bin에 제외된 명령어와 네트워크 관련 명령어들이 들어있는 디렉토리.  


    /usr/local/bin

        추가로 설치된 프로그램 명령어


    /usr/lib

        /lib 에 들어가지 않은 라이브러리 디렉토리.  


    /usr/share

        공유데이터


    /usr/tmp

        임시로 파일을 저장


    /tmp

        시스템 모든 사용자들이 공동으로 사용하는 디렉토리. 일반 사용자 또는 각종 프로세서에서 사용되는 파일들이 생성되는 곳이다.


    /var

        자주 변하는 파일들


    /var/log

        모든 시스템 로그파일은 /var/log에 저장


    /var/spool/mail

        메일 사서함.


    3. Navigating the Filesystem


        1) cd

            디렉토리 이동 명령어


        Absolute(절대경로) vs. Relative(상대경로)

        항상 /에서 시작             현재디렉토리에 시작 


            .

                현재 작업중인 디렉토리

            ~

                홈 디렉토리의 경로를 의미

            ..

                  현재 작업중인 디렉토리의 바로 상위 디렉토리

            $ cd ..

                상위 디렉토리로 이동.        


        2) pwd

            현재 디텍로리 위치 확인


        3) ls

            파일이다 디렉토리의 목록과 정보를 출력할때 사용하는 명령어

               * 사용법 :  $ ls [option] [file|dir]....

            ◦ ls 에서 자주 사용하는 명령어

                $ ls -a

                    숨겨진파일을 포함해서 모든 내용을 출력


                $ ls -l

                    자세한 내용을 표시


                $ ls -R

                    지정한 디렉토리이하에 있는 하부디렉토리와 파일들을 모두 포함한다.(Recursive)


                $ ls -S

                     파일 크기가 가장 큰 것부터 나열


                $ ls -h

                     파일크기를 용량단위(KB, MB, GB)를 붙여서 출력


            ◦ ls 혼합 명령어

                $ ls -lh

                    파일들을 자세히 나열하면서 파일사이즈를 붙여서 출력

                $ ls -lS

                    파일들은 자세히 나열하면서 파일사이즈가 가장 큰 것 부터 순서대로 출력

  

        4) df

            파일시스템 사용량을 알려주는 리눅스 명령어.


            $ df -h

                    -h 옵션(human-readable)을 주면 읽기 쉬운 단위로 표현됨

            $ df -i

                파일(inode) 사용량 : df -i


        5) du

            디렉토리/파일별로 사용량을 확인


                $ du -hs 폴더

                    해당 폴더 용량 확인


                $ du -hs *

                    현재폴더에 있는 폴더 및 파일 용량 확인


    4. File Ownership(소유권)


        chown 명령어

            파일/디렉토리의 소유권, 소유그룹을 변경

                $ chown [옵션] [소유자:소유그룹] [파일]

                $ chown [옵션] [소유자.소유그룹] [파일]
            ◦ 옵션

                -c: 변경된 파일만 자세하게 보여준다.

                -f: 변경되지 않은 파일에 대해서 오류 메시지를 보여주지 않는다.

                -v: 작업상태를 자세히 보여준다.

                -R: 경로와 그 하위 파일들을 모두 변경한다.

            ◦ 소유권 변경 : chown -R user  file

                - chown  user.group file

                - Only root 계정에서 가능하다.


            ◦ 소유그룹을 변경 : chgrp -R group file


            ◦ 속한 다른 그룹을 기본그룹으로 설정 : newgrp group_name(속한 다른 그룹)

                $ newgrp project

                $ touch file2

                $ ls -l file2


    5. File Permission(권한)


        ◦ ls -l

            Permission 확인 명령어.

        

            ◦ Symbolic : r w x

            ◦ Numeric : 0 ~ 7

                0  ---

                1  --x

                2  -w-

                3  -wx

                4  r--

                5  r-x

                6  rw-

                7  rwx


        ◦ umask

            default Permission 확인/설정

            - 기본으로 가지는 퍼미션

            - 확인 : umask or  umask -S

            - 변경 : umask 007


        ◦ chmod [ugoa][+-=][rwx] file/dir

            Permission 변경 명령어

            u=user, g=group, o=other, a=all

            +=추가, -=빼기, =전체 빼기 또는 설정에 따라 추가가능

                $ chmod u+x,g-w,o-r    file1    rwx r-- ---

                $ chmod ug=rw,o=        file1    rw- rw- ---

                $ chmod 640                  file1    rw- r-- ---

                $ chmod 000                  file1     --- --- ---

                $ chmod a=                    file1     --- --- ---


        ◦ Special permission

            * Set UID(SUID)

            일반적으로는 파일을 실행시키면, 실행시킨 사용자의 권한으로 실행이 되지만, SetUID가 설정된 파일을 실행하면 파일의 소유자 권한으로 실행이됨.

                    rws r-x  r-x  root   root  prog

                    -rwxr-xr-x   root root  /usr/bin/passwd 

                        # chmod u-s /usr/bin/passwd    

                        # chmod u+s /usr/bin/passwd    chmod  4755 /usr/bin/passwd


            * Set GID(SGID)

            일반적으로는 파일을 실행시키면, 실행시킨 소유그룹의 권한을 가지게 되지만, SetGID가 설정된 파일을 실행하면 파일의 소유그룹권한을 가지게됨.

                    rwx r-s  r-x  root   root  prog

                    # chmod g-s /usr/bin/passwd    

                    # chmod g+s /usr/bin/passwd    chmod  2755 /usr/bin/passwd

                        - 디렉토리에 SGID를 설정해 공유디렉토리 운영

                            rwxrwsr-x    user        project    dir1

                            rw-rw-r--    user        project     file2

                            rw-rw-r--    visitor     project    file3


            ◦ Sticky Bit

            공유디렉토리의 의미임. Stick Bit이 설정된 디렉토리에 파일을 생성하면생성한 사람의 소유로 생성됨. 삭제 또한 생성한 사람과 root만이 가능함. 한마디로 공유디렉토리로 사용하기 위한 용도임.

 

작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari