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만이 가능함. 한마디로 공유디렉토리로 사용하기 위한 용도임.

 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari