생활코딩 - 리눅스(Linux)
    • 01
      디렉토리와 파일 관련 명령어
    • ls, pwd, mkdir
      cd, rm
    • 02
      리눅스 명령어 기초
    • --help와 man
      필요한 명령을 검색으로 찾는 법
      명령의 빈도수
      sudo
      파일편집 (nano)
      패키지 매니저
      다운로드 방법 (wget)
      다운로드 방법 (git)
    • 03
      Command Line Interface
    • GUI vs CLI
      순차적으로 실행
      파이프라인
    • 04
      IO Redirection
    • Output
      Input
      Append
    • 05
      쉘과 커널
    • 수업 소개
      bash vs zsh
      Shell Script 소개
      Shell Script 사례
      디렉토리의 구조 1
      디렉토리의 구조 2
    • 06
      프로세스의 개념
    • 컴퓨터의 구조
      프로세스 모니터링
    • 07
      파일을 찾는 법
    • locate와 find
      whereis와 $PATH
    • 08
      프로세스의 실행
    • 백그라운드 실행
      데몬의 개념
      service와 자동실행
      정기적으로 실행 (cron)
      cron 활용 사례
      쉘을 시작할 때 실행
    • 09
      사용자 관리
    • 다중 사용자 소개
      id와 who
      Root User
      Add User
    • 10
      사용자 권한
    • 권한 (Permission)
      권한 변경 (chmod)
      실행의 개념과 권한 설정
      directory의 권한
      chmod 사용법 정리
    • 11
      그룹
    • 그룹의 개념
      groupadd 명령어
    • 12
      인터넷, 네트워크 그리고 서버
    • 인터넷 1
      인터넷 2
    • 13
      웹서버 (아파치)
    • 소개
      설치
      설정
      로그
    • 14
      원격제어 (SSH)
    • SSH 소개
      SSH 활용
    • 15
      포트 (Port)
    • 포트란 무엇인가?
      포트 포워딩이란?
      포트 포워딩 실습
    • 16
      도메인 (Domain)
    • 도메인 기본
      hosts 파일
      도메인 구입
      서브 도메인
      DNS의 동작 원리
    • 17
      인터넷을 통한 서버간 동기화(rsync)
    • rsync 기본
      rsync 사용
    • 18
      로그인 없이 로그인 하기 (ssh key)
    • SSH Public, Private Key
      rsync
      RSA
    • 19
      수업을 마치며
    • 수업을 마치며
      부록 : 연속적으로 명령 실행시키기 (;과 &와 &&의 차이)
    부록 : 연속적으로 명령 실행시키기 (;과 &와 &&의 차이)
    19 수업을 마치며
    부록 : 연속적으로 명령 실행시키기 (;과 &와 &&의 차이)

    CLI의 가치

    명령을 통해서 컴퓨터를 제어하는 중요한 이유 중의 하나는 해야 할 일을 순서대로 배치해서 자동화된 처리를 할 수 있다는 점입니다. 정확한 작업을 위해서는 명령어와 명령어를 연결하는 구분자를 잘 이해하셔야 합니다. 언어로치면 접속사와 같은 역할을 하는 것입니다. 여기서는 이 접속사들을 정리해봅니다. 

     

     

    결론

    • ; - 앞의 명령어가 실패해도 다음 명령어가 실행
    • && - 앞의 명령어가 성공했을 때 다음 명령어가 실행
    • & - 앞의 명령어를 백그라운드로 돌리고 동시에 뒤의 명령어를 실행

    ; - 성공여부와 상관없이 다음 명령어 실행

    한 줄에 여러 명령어를 순서대로 배열할 때는 ;를 구분자로 사용합니다. 아래 명령어는 test를 만든 후에 test 디렉토리로 이동합니다. 

    1
    mkdir test;cd test

    && - 성공한 경우에 다음 명령어 실행

    &&의 의미

    &&는 앞의 명령어가 실행되었을 때 성공한 경우에 다음 명령어를 실행합니다. ;와는 다릅니다. 예를들어보죠. 아래와 같은 명령어가 있을 때

    1
    mkdir test; cd test; touch abc

    test 디렉토리가 이미 있어서 아래와 같은 상황이라고 해보죠. 

    mkdir test(실패); cd test; touch abc

    이 경우 cd test가 실행되고, touch abc도 실행됩니다. 

     

    반면에 아래의 경우는 cd test와 touch abc가 실행되지 않습니다. 

    mkdir test(실패) && cd test && touch abc

    성공&실패와 무관하게 연속적으로 실행해야 할 명령이 있을 때 ;를 씁니다. 이전 명령이 성공했을 때 다음 명령을 실행하려면 &&를 씁니다. 대체로 &&를 쓰는게 좋을 때가 많습니다. 좀 더 정확하게는 &&는 이전 명령어의 실행결과가 참(true)일 때만 다음 명령을 실행합니다. 아래 내용은 참고삼아 읽어보세요. 

    명령어의 반환값

    리눅스(유닉스)의 모든 명령어는 종료할 때 성공 여부를 알려줍니다. 예를들어보죠. 

    test 디렉토리가 없는 곳에서 아래 명령을 실행해보세요. 성공했을 때 어떻게 되는지 보시죠. 

    mkdir test

    그리고 아래 명령을 실행해보세요. 

    1
    echo $?

    이 명령어는 이전 명령어가 반환한 값을 알아내는 것입니다. 결과는 아래와 같습니다. 

    0

    반대로 test 디렉토리가 이미 있는데 mkdir test를 실행한 후에 echo $?를 실행하면 아래 값이 출력됩니다. 

    1

    또는 존재하지 않는 명령어를 실행하면 127이 출력될꺼예요. 즉 리눅스에서는 0이 아닌 값은 실패(false)를 의미합니다. 

     

     

     

     

    &와 &&는 다릅니다. 

    &는 명령어를 백그라운드로 동작시킬 때 사용합니다. 

    mkdir test & cd test를 실행하면 아래와 같은 결과가 나옵니다. 

    1
    2
    3
    [1] 19989
    cd: no such file or directory: test
    [1] + 19989 done mkdir test

    test 디렉토리를 백그라운드로 생성함과 동시에 test 디렉토리로 이동하려고 했기 때문에 cd test는 존재하지 않는 디렉토리로 진입하려고 시도하기 때문입니다. 한편, test 디렉토리는 생성됩니다. 

    명령의 그룹핑 {}

    명령을 그룹핑 할 수도 있습니다. 아래 명령은

    1
    mkdir test3 && { cd test3; touch abc; echo 'success!!' } || echo 'There is no dir';
    • mkdir test가
    • 성공했을 때 cd test2; touch abc를 실행하고 success!!를 출력합니다. 
    • 실패했을 때 echo 'There is no dir'를 실행합니다. 
    • 이때 실행되는 명령들은 현재 쉘의 컨텍스트에서 실행됩니다. 만약 서브 컨텍스트에서 실행하고 싶다면 '('와 ')'를 사용하시면 됩니다. (참고)

     

    Q&A