Linux

Linux에서 부팅 시 스크립트 자동으로 실행하기

2017. 11. 3. 23:41

리눅스 사용자는 Windows 사용자들 보다는 커맨드를 사용한 프로그램 실행이 익숙할 것입니다. 리눅스에서는 커맨드의 비중이 비교적 큽니다.
그 중 셸 스크립트는 여러 커맨드를 연속으로 실행할 수 있게 해줍니다.
이러한 스크립트를 Linux가 부팅될 때 실행하도록 할 수 있습니다.

이 글은 Plex Server에 Google Drive를 마운트하는 강좌에서 연결되는 글이므로 Plex 위주로 설명합니다.

스크립트 만들기

  • 커맨드도 텍스트이기 때문에 스크립트도 텍스트로 만듭니다.
  • 파일 확장자는 .sh입니다.
  • 첫 줄은 항상 #!/bin/bash 로 시작합니다.(사용하는 터미널에 따라 다를 수 있습니다.)
  • 커맨드의 끝에 &을 넣으면 명령이 끝나기를 기다리지 않습니다.

예시

#!/bin/bash
bash /home/KollHong/rclone.sh &

반복문이 포함 된 스크립트를 실행하려고 한다고 가정할 때, &을 넣지 않으면 해당 스크립트가 끝나지 않기 때문에 다음 스크립트가 실행되지 않습니다.
보통 #은 실행하지 않는 주석 표현입니다. 하지만 #!는 실행파일이라는 것을 명시하는 표현입니다.

스크립트에서 실행하는 /home/KollHong/rclone.sh는 아래와 같습니다.

#!/bin/bash
while :
do
    MOUNTTYPE=\`cat /proc/mounts | grep /home/KollHong/rclone/GoogleDrive | awp '{ print $3 }'

    if \[ $MOUNTTYPE \] && \[&MOUNTTYPE = "fuse.rclone" \]
    then echo '>> already mounted']

    else
        rclone mount kollhong: --allow-other --default-permission --no-modtime --writeback-cache -q /home/KollHong/rclone/GoogleDrive &
        ls /home/KollHong/rclone/GoogleDrive/
    fi

    sleep 60
done

while문은 반복문 입니다. 조건을 넣지 않으면 무한 반복합니다.
do 이하에서는 마운트되었는지 확인하고, else 이하에서는 마운트를 합니다. PlexDrive에서는 ls를 한 번 해야 한다고 해서 ls문도 넣었습니다.
혹시 마운트 해제될 때를 대비하여 60초 동안 쉬고 다시 반복합니다.

실행 권한 주기

chmod 755 ~/run.sh
chown root ~/run.sh
chmod 755 ~/rclone.sh

부팅 중 실행 될 스크립트의 소유자를 바꾸고 실행 권한을 줍니다.

권한 편에서 권한에 대해 자세히 알아보기

심볼릭 링크 만들기

Windows 에서의 시작 프로그램 폴더와 비슷한 방식입니다. Windows 에서 시작 프로그램 폴더에 프로그램을 넣어두면 부팅시에 프로그램이 함께 실행됩니다. 이 때, 보통은 프로그램 자체를 시작 프로그램 폴더에 넣지 않고 프로그램 바로가기를 시작 프로그램 폴더에 넣습니다.

리눅스도 마찬가지 입니다. 리눅스도 Windows 의 시작 프로그램 폴더와 같은 디렉토리가 있습니다. 그 디렉토리가 /etc/init.d입니다.

sudo ln -s /home/KollHong/run.sh /etc/init.d/run.sh

심볼릭 링크를 만듭니다. root 권한으로 실행해야 합니다. 앞으로는 /etc/init.d/run.sh에 접근하면 /home/KollHong/run.sh의 파일을 읽습니다.

이전에 Android를 사용할 때와 Qnap NAS에서는 /etc/init.d 디렉토리에 스크립트 파일을 넣으면 바로 실행이 가능했습니다.

하지만 우분투와 같은 리눅스는 /etc/init.d에 스크립트를 넣을 때는 시스템 업데이트를 해줘야 합니다.

sudo update-rc.d run.sh defaults

부팅 시에 스크립트를 실행하는 또 다른 방법이 있습니다.

/etc/rc.local 파일에 원하는 스크립트를 추가하는 방법입니다.

이 방법을 이용하면 시스템 업데이트를 해줄 필요가 없습니다.

다만 rc.local은 오류가 발생하면 종료되도록 되어 있기 때문에 추가한 스크립트가 실행되지 않을 수 있습니다.

ps. 음... 사실 Linux기반 데스크톱에서 이 방법은 사용하지 않습니다. Linux 기반 NAS들도 마찬가지구요.
-물론 사용은 가능합니다.

저는 옛날에 스마트폰에서 적용할 때 사용했던 방법입니다.
제가 이런 방법을 사용하는건 보안면에서 크게 중요하지 않기 때문이기도 하고, 옛날 방법이 익숙해서이기도 합니다.

  1. BlogIcon 친절한 콜홍 2018.12.20 00:56 신고

    음... 사실 Linux기반 데스크톱에서 이 방법은 사용하지 않습니다. Linux 기반 NAS들도 마찬가지구요.
    -물론 사용은 가능합니다.

    저는 옛날에 스마트폰에서 적용할 때 사용했던 방법입니다.
    제가 이런 방법을 사용하는건 보안면에서 크게 중요하지 않기 때문이기도 하고, 옛날 방법이 익숙해서이기도 합니다.

MacOS, Linux에서 파일 권한 변경하기

2017. 11. 3. 23:41

권한 변경

Windows에도 읽기/쓰기 권한을 변경할 수 있습니다. 보통은 적절하게 권한이 주어지기 때문에 Windows에서는 권한을 변경하는 일이 거의 없습니다.

하지만 MacOS나 Linux에는 실행 권한이 따로 있습니다.
디렉토리의 경우는 실행 권한이 있어야 하위 디렉토리와 파일들을 확인할 수 있습니다. 그렇기 때문에 디렉토리는 기본적으로 실행 권한이 주어집니다.
파일의 경우는 실행 권한이 있어야 터미널에서 실행할 수 있습니다. 터미널에서 실행하는 프로그램/스크립트는 실행 권한이 있어야 합니다. 하지만 파일의 경우 보안을 위해 기본적으로는 실행 권한이 주어지지 않습니다.

권한 설정

터미널에서 실행할 모든 프로그램은 실행 권한을 주어야 합니다.

chmod 755 ~/plexdrive
chmod 755 ./run.sh

~는 홈 디렉토리 입니다. 필자의 경우는 /home/KollHong입니다.
.는 현재 디렉토리 입니다. 기본 값은 홈 디렉토리 입니다. pwd 명령을 통해 현재 디렉토리의 위치를 알 수 있습니다.

755는 권한입니다.
첫째 칸은 소유자(Owner), 두번째 칸은 그룹(Group), 세번째 칸은 다른 사용자(Others)에 대한 권한을 나타냅니다.
여기서 그룹은 소유자가 포함된 그룹입니다.

권한은 읽기/쓰기/실행 세 가지 권한이 있습니다.
영어로 표현할 때는 r (Read), w (write), x(execute)로 표현합니다.
숫자로는 r=4, w=2, x=1를 각각 더한 값으로 표현합니다.

읽기/쓰기/실행 모든 권한을 가질 때는 숫자로는 7, 영어로는 rwx로 표현합니다.

읽기/실행 권한만을 가질 때는 숫자로는 5, 영어로는 r-x로 표현합니다.

다음 명령으로 plexdrive 의 권한을 변경합니다. 소유자는 모든 권한을, 그룹과 다른 사용자는 읽기/실행 권한만 갖게 됩니다.

chmod 755 ~/plexdrive

영어 표현은 ls 명령을 입력하면 볼 수 있습니다.

ls -l ~/plexdrive

plexdrive에 rwxr-xr-x를 권한이 주어진 것을 확인할 수 있습니다.

권한 추가

chmod a+x  ~/plexdrive
chmod u+x  ~/plexdrive

755나, 644와 같은 숫자 대신 문자와 +기호를 사용했습니다.

a+x는 모든 사용자에게 x(eXecute)권한을 주는 것이고, u+x는 유저에게 x권한을 주는 겁니다.

반대로 a-x도 가능하겠죠?

저는 보통 시스템 내부의 파일을 건드리기 때문에 기존에 설정된 권한을 알고 있어서 644나 755같은 권한 설정 방법을 이용합니다.

하지만 권한을 변경하려고 하는 파일이 원래 가지고 있던 권한을 모른다면 u+x와 같은 방법을 사용해야 합니다. 의도치 않게 제 3자에게 권한을 부여하거나, 관련된 사용자에게 권한이 없어질 수 있기 때문입니다.

ls 명령 예

ls에서 -a는 모든 파일 보기(숨겨진 파일 보기) 옵션입니다. -l은 자세한 정보 보기 입니다. 자세한 정보가 필요하지 않더라도 오히려 보기 편해서 -l 옵션은 항상 넣습니다.

SSH 서버 설치 및 접속하기

2017. 11. 3. 23:41

SSH

Linux나 서버 등은 디스플레이가 연결되지 않은 컴퓨터가 있습니다. 요즘은 개인이 NAS를 사용하는데, 이것도 디스플레이가 연결되지 않은 컴퓨터입니다. 이러한 컴퓨터에서 명령을 실행하기 위한 프로그램 또는 프로토콜이 SSH(Secure SHell)입니다.

SSH로 원격 컴퓨터에 접속하기 위해서는 원격 컴퓨터에는 SSH Server가 실행 중이어야 하고 Client에는 SSH Client가 설치되어 있어야 합니다.

SSH 서버 실행

우분투에 SSH 서버 설치하기

리눅스는 배포판에 따라 SSH 설치 방법이 다릅니다. 제가 가장 많이 이용하는 우분투의 경우는 아래와 같습니다.

우분투에 SSH Server 설치하기

  1. SSH Server 설치
    sudo apt-get install openssh-server

  2. SSH Server 포트 변경
    vi 사용 : sudo vi /etc/ssh/sshd\_config
    GUI 사용 : sudo gedit /etc/ssh/sshd\_config

  3. SSH Server 다시 시작
    sudo /etc/init.d/ssh restart

NAS에서 SSH Server 실행하기

NAS는 외부 모니터가 없고, 대부분 서버로 사용하기 때문에 SSH Server가 포함되어 있습니다. 따라서 SSH Server를 따로 설치할 필요가 없습니다.

  1. Synology NAS에서 SSH Server 실행하기

    Synology NAS

(출처 : papa.2ss.kr/13)

제어판으로 이동
터미널 및 SNMP메뉴로 이동
터미널 탭에서 SSH 서비스 활성화 체크
적용

  1. Qnap NAS에서 SSH Server 실행하기

    Qnap NAS

제어판으로 이동
Telnet / SSH 항목으로 이동
SSH 연결 허용 체크
적용

Client에서 SSH Server 접속하기

  1. Windows에서 SSH 접속하기

    Windows에는 SSH Client가 기본적으로 설치되어 있지 않습니다. 그래서 Windows에서는 SSH Client를 설치해야 합니다.

    일반적으로는 putty를 많이 사용합니다.
    putty 다운로드 하러 가기

    설치 후 putty를 실행합니다.

    (출처 : papa.2ss.kr/13)

    Host Name 칸에 원격 컴퓨터의 주소를 입력합니다. NAS 접속 주소를 입력하면 됩니다.
    Port를 입력합니다. 기본값이 22이기 때문에 22가 적혀 있습니다.
    Connection type에 SSH를 선택하고 Open을 누릅니다.

    그러면 아래와 같은 창이 나타납니다.


    (출처 : papa.2ss.kr/13)

    log in as: 에 관리자 계정을 입력합니다. 보통의 Linux System에서는 root입니다. Qnap NAS에서는 admin입니다.
    그리고 root의 비밀번호를 입력하면 SSH를 통해 원격 컴퓨터에 접속이 됩니다.

  2. MacOS나 Linux에서 SSH Server에 접속하기

    MacOS나 Linux에는 기본적으로 SSH 클라이언트가 설치되어 있습니다.

    MacOS나 Linux는 Terminal을 통해 바로 SSH를 실행하면 됩니다.

    (출처 : eapps.com)

터미널을 실행합니다.
ssh -p 22 root@ns.chcola.net 형식으로 입력합니다.
비밀번호를 물어보는 메시지에 비밀번호를 입력합니다. Server에 따라 RSA Key 경고메시지가 뜨는데 yes를 입력합니다.
그러면 SSH를 통해 원격 컴퓨터에 접속이 됩니다.

이제 원격 컴퓨터에 접속하여 커맨드를 입력할 수 있습니다.

+ Recent posts