NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    기타 1부 - 유용한 리눅스 명령어 모음. (A collection of useful Linux commands.)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 서버 개발을 하게되면 어쩔 수 없이 리눅스 환경에서 로그를 트레이스해야 하는 일이 많이 발생합니다. 요즘은 원격 디버거를 연결해서 로컬에서 직접 디버깅을 해볼수도 있지만~ 보안 문제로 다이렉트 접속이 안되는 경우에는 어쩔 수 없이 터미널로 들어가서 확인해야 합니다. 초중급 개발자분들은 아래에 설명하는 기초적인 리눅스 명령어들을 숙지하고 있으면 많은 도움이 될겁니다.

     

    1. pwd (print working directory)

    pwd는 현재 작업중인 디렉토리 위치를 확인할 때 사용합니다. 모든 사용자 계정 디렉토리는 "/home/계정명"에 존재합니다. 리눅스 쉘이 작업 디렉토리를 표시하지 않으면 pwd로 확인할 수 있으며, Windows는 cd 명령으로 동일한 작업이 가능합니다. cd 명령은 리눅스도 사용하기 때문에 뒤에서 좀 더 자세하게 알아볼께요.

    NlklojX.png

     

     

    2. ls (list segments)

    파일의 목록을 표시할 때 ls 명령을 사용합니다. Windows는 dir 명령을 사용합니다. 아래 그림과 같이 ls 명령은 폴더와 파일을 나열해서 보여줍니다. 이렇게 폴더 구조를 보는게 불편하기 때문에 ls -l을 사용합니다. 항목을 한줄로 표시해주고, 좀 더 자세한 내용을 출력해줍니다.

    2uNu6iB.png

     

     

    추가로, ls -al을 사용하면 숨겨진 파일을 모두 표시해줍니다. 여기서 알 수 있는것은 a 옵션과 l 옵션을 같이 사용했다는 것입니다. 이 명령은 ls -a를 사용해도 숨겨진 파일이 표시되는건 동일합니다. 다만, l 옵션이 더 붙어있기 때문에 아래 그림에서는 목록으료 표시되고 있습니다. 리눅스에서 .으로 시작하는 폴더나 파일은 숨겨져 있다는 뜻입니다. 

    etVv1ge.png

     

     

    리눅스에서부터 시작된 프로젝트가 윈도우로 넘어오면서 동일한 방식을 사용하고 있습니다. 물론, 윈도우에서 출발한것들은 예외입니다. 아무튼, 아래 그림과 같이 윈도우에서도 .으로 시작하는 많은 폴더와 파일들을 확인할 수 있습니다. 여기에서 설명할 내용은 아니지만~ 자바 프로젝트를 형상관리할 때 .m2를 제외합니다. 보통 넥서스에서 패키지를 설치하는데요. 특수한 환경에서 넥서스 계정에 접속할 수 없으면 개발 환경이 구축된 개발자 컴퓨터의 .m2 폴더를 복사해오면 임시로 처리가 가능합니다^^

    TRDRqnf.png

     

     

    ls -l로 알 수 있는 정보들은 아래와 같습니다.

    1. 폴더 또는 파일의 권한입니다. 아래에 추가 설명 내용을 참고하세요.
    2. 폴더 또는 파일을 소유한 계정 이름입니다.
    3. 계정이 속한 그룹 이름입니다. 참고로, 그룹을 생성하지 않고 계정을 만들었으면 계정명과 동일하게 설정됩니다.
    4. 폴더나 파일의 크기입니다.
    5. 폴더 또는 파일이 생성되거나 최종 수정된 시간입니다.
    6. 폴더 또는 파일명입니다.

    GMPWKRb.png

     

     

    위 1번은 사용자가 각각의 디렉토리와 파일을 읽고 쓰고 실행할 수 있는 권한을 나타냅니다. 쉽게 설명하기 위해 아래와 같이 구분해두었습니다.

    • - rwx rwx rwx (파일에 대해 모든 권한)
    • d rwx r-x r-x (디렉토리에 대해 사용자는 모든 권한을 가지고, 그룹과 다른 사용자는 읽기와 실행만 가능)
    • l rwx r-- r-- (링크에 대해 사용자는 모든 권한을 가지고, 그룹과 다른 사용자는 읽기만 가능)

     

    첫줄은 - 파일, d는 디렉토리(폴더), l은 링크를 말합니다. 링크에 대한건 아래에서 다시 자세하게 알아보겠습니다. 위에서 보면 첫줄을 제외한 나머지는 3자리의 문자로 3번 나오는것을 알 수 있습니다. 첫번째는 사용자에 대한 권한이고, 두번째는 그룹에 대한 권한입니다. 마지막 세번째는 다른 사용자에게 부여되는 권한입니다. rwx의 의미는 다음과 같습니다.

    • r: read (폴더 또는 파일을 읽을 수 있습니다.)
    • w: write (폴더 또는 파일을 쓰거나 수정할 수 있습니다.)
    • x: execute (파일을 실행할 수 있습니다.)

     

    프로젝트를 진행하다보면 FTP로 작업할 때도 있습니다. 아무래도 로그 파일들은 윈도우에서 제공하는 막강한 에디터를 사용하는게 효과적이기 때문입니다. 아무튼, 리눅스 서버에 접속해서 파일 권한을 변경할 때 자주 보는 화면인데요. 아래 그림에서는 권한 숫자값이 666으로 되어 있지만, 대부분 개발 환경을 셋팅할때는 777로 변경해둡니다. 여러 개발자가 동시에 접근해서 작업하다보면 소유자에 대한 권한 문제가 자주 발생하기 때문입니다.

    Wmx6h1X.png

     

     

    rwx는 3비트 공간을 차지합니다. 그러므로 rwx는 1 1 1이고, ---은 0 0 0입니다. r은 2² 이므로 4이고, w는 2¹ 이므로 2입니다. x는 2의 0승이라서 1입니다. 왜 2의 0승이 1일까 의문을 가질 수 있을겁니다. 수학적으로 정리가 되어 있으므로 궁금하신 분들은 구글에서 관련 내용을 찾아보세요^^; 자~ 그래서 rwx는 4+2+1이기 때문에 7과 같습니다. 위 스샷처럼 6은 4+2라서 읽기와 쓰기 권한만 있다는 뜻입니다. 최대한 간단하게 명령어 위주로 알아보려고 했는데... 글을 작성하다보니 점점 길어지네요-_-;

     

    3. chmod (change mode)

    권한 설정을 확인하기 위해 간단한 c 프로그램을 하나 작성하도록 하겠습니다. 먼저 ngm.c 파일을 추가 해줍니다.

    [admin@a6cb3ce57d23 ~]$ touch ngm.c

     

    vi 문서 편집기를 실행하고, 아래와 같이 코딩 해줍니다. vi 사용법은 알고 있다는 가정하에~ 작성하도록 하겠습니다.

    #include <stdio.h>
    
    void main()
    {
      printf("Hello NGMsoftware!!\n");
    }

     

    코딩이 완료되었으면 컴파일 해주세요.

    [admin@a6cb3ce57d23 ~]$ gcc ngm.c

     

    컴파일이 완료되면 a.out 파일이 생성됩니다. gcc 에 대한 자세한 내용은 직접 검색해서 확인해보시기 바랍니다. 이 글은 c에 대한건 아니니까요^^

    sUHdP7j.png

     

     

    ./a.out 를 입력하고 엔터를 치면 프로그램이 잘 실행되는걸 확인할 수 있습니다. a.out 파일에 대한 권한을 보면 소유자가 root이고, 마지막 다른 사용자 권한에 x 실행 권한이 있는걸 확인할 수 있습니다. 실행 권한을 제거하면 admin 계정은 더이상 a.out 파일을 실행할 수 없게 됩니다. 우선, 권한을 설정하기 위해 소유권자를 변경해줘야 합니다.

    z7XKBbl.png

     

     

    exit 명령으로 루트(root) 계정으로 나갑니다.

    1ciNPt0.png

     

     

    아래 명령으로 파일의 소유권자를 변경할 수 있습니다.

    chown admin:ngmsoftware a.out

     

    a.out 파일이 root 계정에서 admin 계정으로 소유권이 정상적으로 변경 되었습니다.

    HVvJ8fy.png

     

     

    다시 admin 계정으로 전환합니다.

    sh-4.2# su admin

     

    현재 파일의 권한은 755였습니다. 아래 명령으로 실행 권한만 제거해줍니다.

    chmod 644 a.out

    XntpxGk.png

     

     

    a.out 파일을 다시 실행해보면 아래 그림과 같이 Permission denied(퍼미션 드나이드)가 발생합니다.

    J1YJMhP.png

     

     

    위 그림에서 a.out는 흰색으로 실행할 수 없는 파일인걸 미리 알 수 있습니다. 사용자에게 실행 권한을 주고 다시 확인 해보면 녹색으로 변경된걸 확인할 수 있습니다.

    PxtqgZW.png

     

     

    참고로, chmod는 아래와 같이 실행할수도 있습니다. a.out 파일의 사용자 권한에서 실행 권한을 다시 삭제 해보겠습니다. 아래 명령을 수행하고, 그림을 보면 a.out 파일에 사용자 실행 권한이 사라진걸 확인할 수 있습니다. a.out 파일의 색상도 다시 흰색이 되었습니다.

    [admin@a6cb3ce57d23 ~]$ chmod u-x a.out

    8pqgN1h.png

     

     

    chmod의 뒤에 u(사용자) g(그룹) o(다른 사용자)를 입력하고 권한을 추가하려면 +, 권한을 제거하려면 -를 입력해줍니다. 그다음에 추가하거나 뺄 rwx 권한을 적고 파일을 적어줍니다. 위 명령은 a.out 파일에서 사용자의 실행 권한을 제거한다는 의미로 해석하시면 됩니다. 참고로, 저는 숫자 값으로 처리하는게 더 익숙합니다.

     

    4. mkdir (make directory)

    위에서 간단한 c 프로그램을 하나 만들었습니다. 자세하게 설명하진 않았으나 이 부분에서 같이 연동해서 설명하면 좋을듯 하군요. 우선, 이름에서 알 수 있듯이 디렉토리를 만드는 명령입니다. 이 명령은 윈도우에서도 동일합니다. c 코드를 작성할 파일들을 모아둬야 하기 때문에 source 폴더를 하나 추가하겠습니다.

    [admin@a6cb3ce57d23 ~]$ mkdir source
    [admin@a6cb3ce57d23 ~]$ ls -l
    total 28
    -rw-r--r-- 1 admin ngmsoftware 8440 Aug 21 08:45 a.out
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 editor.exe
    -rw-r--r-- 1 admin ngmsoftware   71 Aug 21 08:42 ngm.c
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 06:48 NGM_Editor
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 06:49 NGM_Player
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 player.exe
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 09:18 source
    [admin@a6cb3ce57d23 ~]$

     

    새로 생성한 source 폴더로 이동하기 위해 cd 명령을 사용합니다.

    [admin@a6cb3ce57d23 ~]$ cd source
    [admin@a6cb3ce57d23 source]$

     

    5. touch

    터치는 파일의 날짜와 시간을 수정하는 명령어이긴 하지만, 0바이트 파일을 생성하기 위해 자주 사용되는 명령어입니다. 빈 파일을 생성하려면 현재 위치에 존재하지 않는 파일명을 입력해주면 됩니다.  참고로, 리눅스에는 3종류의 TimeStamp가 있습니다.

    • atime: access time (접근 시간)
    • ctime: change time (상태 변경 시간)
    • mtime: modify time (수정 시간)

     

    3번 권한 예제와 같이 ngm.c 파일을 하나 추가 해줍니다.

    [admin@a6cb3ce57d23 source]$ touch ngm.c
    [admin@a6cb3ce57d23 source]$ ls -l
    total 0
    -rw-r--r-- 1 admin ngmsoftware 0 Aug 21 09:23 ngm.c
    [admin@a6cb3ce57d23 source]$

     

    6. rm (remove)

    5번 예제에서 추가한 파일을 삭제하려면 아래 명령과 -f 옵션을 사용합니다.

    [admin@a6cb3ce57d23 source]$ rm -f ngm.c
    [admin@a6cb3ce57d23 source]$ ls -l
    total 0
    [admin@a6cb3ce57d23 source]$

     

    디렉토리를 삭제하기 위해 상위 폴더로 올라가야합니다. 위에서 cd source 명령으로 source 폴더로 이동한걸 기억하세요. 상위 폴더로 이동할 때는 cd .. 입니다. 상위 폴더로 이동했으므로 rm -r source로 폴더를 삭제 하세요. ls -l로 확인하면 source 폴더가 삭제된 것을 확인할 수 있습니다.

    [admin@a6cb3ce57d23 source]$ cd ..
    [admin@a6cb3ce57d23 ~]$ rm -r source
    [admin@a6cb3ce57d23 ~]$ ls -l
    total 24
    -rw-r--r-- 1 admin ngmsoftware 8440 Aug 21 08:45 a.out
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 editor.exe
    -rw-r--r-- 1 admin ngmsoftware   71 Aug 21 08:42 ngm.c
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 06:48 NGM_Editor
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 06:49 NGM_Player
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 player.exe
    [admin@a6cb3ce57d23 ~]$

     

    참고로, rmdir을 사용하면 옵션 없이 폴더명만으로 삭제할 수 있습니다. 한번에 여러개를 삭제도 가능합니다.

    [admin@a6cb3ce57d23 ~]$ rmdir dir1 dir2 dir3

     

    7. cd (change directory)

    앞서 여러번 cd 명령을 사용 했었습니다. 윈도우에서도 디렉토리를 이동할 때 동일하게 사용하는 명령으로 상당히 친숙한 명령중 하나입니다. 리눅스는 윈도우와 약간 다른 방식으로 동작하게 되는데요. 일단, 절대 경로와 상대 경로에 대해 이해하고 넘어가야 합니다.

    • /     절대 위치 기준
    • ./    현재 위치
    • ../   현재 위치 상위
    • ~/    Home 위치 기준

     

    현재 NGM_Editor와 NGM_Player 폴더가 존재하고 있습니다.

    OrZyanI.png

     

     

    NGM_Editor 폴더로 이동하는 방법은 크게 3가지가 존재합니다.

    • cd /home/admin/NGM_Editor
    • cd ./NGM_Editor
    • cd ~/NGM_Editor

     

    일반적으로 현재 위치에서 ls를 통해 구조를 확인합니다. 그리고, 하위 폴더로 이동하기 때문에 "cd NGM_Editor"를 가장 많이 사용합니다. ./ 현재 위치는 기본 값이므로 생략해도 동일하게 동작합니다. 폴더를 이동한 후 pwd로 경로를 확인 해보세요.

    [admin@a6cb3ce57d23 ~]$ cd NGM_Editor
    [admin@a6cb3ce57d23 NGM_Editor]$ pwd
    /home/admin/NGM_Editor
    [admin@a6cb3ce57d23 NGM_Editor]$

     

    다시 상위 폴더로 이동하려면 cd ../를 입력하면 됩니다. 하지만, 여기서도 마지막 슬래시(/)는 생략해도 됩니다.

    [admin@a6cb3ce57d23 NGM_Editor]$ cd ..
    [admin@a6cb3ce57d23 ~]$ pwd
    /home/admin
    [admin@a6cb3ce57d23 ~]$

     

    슬래시만 입력하여 절대 경로로 이동해볼까요?

    [admin@a6cb3ce57d23 ~]$ cd /
    [admin@a6cb3ce57d23 /]$ pwd
    /
    [admin@a6cb3ce57d23 /]$

     

    이제 home 폴더의 NGM_Editor 경로로 이동해볼까요? cd ~/ 까지만 입력하고 탭을 두번 눌러보세요. 아래 설명에도 있지만, 경로를 이동하거나 파일을 선택할 때 탭은 상당히 자주 사용되는 키입니다. 대부분은 A~Z까지 타이핑을 하거나 마우스로 드래그 후 우클릭해서 복사합니다. 그리고, 붙여넣기 할 위치에 커서를 위치시키고 다시 우클릭하면 붙여넣기가 동작합니다. 여러가지 편의 기능들이 많은데요. 하나씩 이런것들도 설명하도록 하겠습니다.

    # 탭을 두번 누르면 해당 경로의 ls를 실행해줍니다.
    [admin@a6cb3ce57d23 /]$ cd ~/
    a.out          .bash_profile  editor.exe     NGM_Player/
    .bash_history  .bashrc        ngm.c          player.exe
    .bash_logout   .cache/        NGM_Editor/
    # NGM_E 까지만 입력하고 탭을 한번 눌러보세요. 유니크한 하나의 폴더 또는 파일이 자동 입력됩니다.
    [admin@a6cb3ce57d23 /]$ cd ~/NGM_Editor/
    [admin@a6cb3ce57d23 NGM_Editor]$

     

    8. mv (move)

    mv 명령은 파일 또는 디렉토리를 이동할 때 사용하는 명령입니다. 그런데 리눅스에서는 이름을 변경할 때도 이 명령을 사용합니다. 물론, 윈도우도 동일합니다. NGM_Editor 폴더명을 ngm_editor로 변경 해보겠습니다. 이 매커니즘은 source 폴더 또는 파일을 target 폴더 또는 파일로 이동시키기 때문에 근본적으로는 복사+삭제와 같습니다. 실제로 c를 비롯한 대부분의 언어들이 이와 동일한 방식으로 처리하고 있습니다.

    [admin@a6cb3ce57d23 ~]$ mv NGM_Editor ngm_editor
    [admin@a6cb3ce57d23 ~]$ ls -l
    total 24
    -rw-r--r-- 1 admin ngmsoftware 8440 Aug 21 08:45 a.out
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 editor.exe
    -rw-r--r-- 1 admin ngmsoftware   71 Aug 21 08:42 ngm.c
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 06:48 ngm_editor
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 06:49 NGM_Player
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 player.exe
    [admin@a6cb3ce57d23 ~]$

     

    ngm_editor 폴더를 NGM_Player 폴더 아래로 이동시켜 보겠습니다.

    [admin@a6cb3ce57d23 ~]$ mv ngm_editor NGM_Player
    [admin@a6cb3ce57d23 ~]$ ls -l
    total 20
    -rw-r--r-- 1 admin ngmsoftware 8440 Aug 21 08:45 a.out
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 editor.exe
    -rw-r--r-- 1 admin ngmsoftware   71 Aug 21 08:42 ngm.c
    drwxr-xr-x 3 admin ngmsoftware 4096 Aug 21 10:45 NGM_Player
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 player.exe
    [admin@a6cb3ce57d23 ~]$ cd NGM_Player/
    [admin@a6cb3ce57d23 NGM_Player]$ ls -l
    total 4
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 06:48 ngm_editor
    [admin@a6cb3ce57d23 NGM_Player]$

     

    9. cp (copy)

    cp 명령은 폴더 또는 파일을 복사할 때 사용하는 명령입니다. 현재 위치에 복사할수도 있고, 앞서 배운 경로를 입력함으로써 다른 디렉토리 위치에 복사할수도 있습니다. NGM_Player 폴더에 이동시킨 ngm_eidtor 폴더를 다시 원래 위치로 되돌립니다. 파일은 -r 옵션을 추가하지 않습니다. 폴더를 복사하려면 -r 옵션을 추가해야 합니다.

    [admin@a6cb3ce57d23 NGM_Player]$ pwd
    /home/admin/NGM_Player
    [admin@a6cb3ce57d23 NGM_Player]$ cp -r ngm_editor ../
    [admin@a6cb3ce57d23 NGM_Player]$ cd ..
    [admin@a6cb3ce57d23 ~]$ ls -l
    total 24
    -rw-r--r-- 1 admin ngmsoftware 8440 Aug 21 08:45 a.out
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 editor.exe
    -rw-r--r-- 1 admin ngmsoftware   71 Aug 21 08:42 ngm.c
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 10:52 ngm_editor
    drwxr-xr-x 3 admin ngmsoftware 4096 Aug 21 10:45 NGM_Player
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 player.exe
    [admin@a6cb3ce57d23 ~]$

     

    다시 NGM_Player 폴더안에 ngm_editor 폴더가 존재하는지 확인 해보세요. 복사 명령이기 때문에 그대로 남아 있어야 합니다.

    -rw-r--r-- 1 admin ngmsoftware 8440 Aug 21 08:45 a.out
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 editor.exe
    -rw-r--r-- 1 admin ngmsoftware   71 Aug 21 08:42 ngm.c
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 10:52 ngm_editor
    drwxr-xr-x 3 admin ngmsoftware 4096 Aug 21 10:45 NGM_Player
    -rw-r--r-- 1 admin ngmsoftware    0 Aug 21 06:51 player.exe
    [admin@a6cb3ce57d23 ~]$ cd NGM_Player/
    [admin@a6cb3ce57d23 NGM_Player]$ ls -l
    total 4
    drwxr-xr-x 2 admin ngmsoftware 4096 Aug 21 06:48 ngm_editor
    [admin@a6cb3ce57d23 NGM_Player]$

     

    다음 내용은 [ 2부 ]에서...

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.