생활코딩 리눅스 요약 : 18 - 정기적으로 실행 (cron) ~ 23 - 권한 (permission)

Jeongtae Kim·2022년 7월 27일
0

서버

목록 보기
4/6
post-thumbnail

📒 생활코딩 리눅스 수업 소개

생활코딩의 운영자 이고잉 님이 2016년부터 2017년까지 만드신 리눅스 초보 수업으로 리눅스 뿐만 아니라 네트워크와 인터넷 등도 수업에 포함되어 있습니다. 이 글의 요약을 보는 것보다 동영상 수업을 듣는 것을 강력 추천합니다! 또한, 이고잉님이 작성하신 글들에 동영상의 추가 정보들을 더 적어 놓았습니다.
생활코딩 리눅스

📌 18 - 정기적으로 실행 (cron)

정기적으로 실행 (cron) 수업
크론(cron) : 정기적으로 명령을 실행시켜주는 도구 / 소프트웨어입니다.
명령을 쳐서 크론을 실행해보겠습니다.

crontab -e

처음 이 명령어를 실행하면 에디터를 선택하라고 나올 것입니다. 마음에 드는 에디터의 번호를 입력해주세요. 나중에 에디터를 바꾸고 싶다면 'select-editor' 라고 치면 됩니다. 파일 끝에는 다음과 같이 나와있습니다.

  • m : minute으로 몇 분인지를 의미함
  • h : hour로 몇 시인지를 의미함
  • dom : day of month로 몇 일인지를 의미함
  • mon : month로 몇 월인지를 의미함
  • dow : day of week로 몇 요일인지를 의미함

잠시 nano를 백그라운드에 보내고(Ctrl + Z, nano - Ctrl + T, Ctrl + Z) cron에 사용할 명령어를 보겠습니다.

date : 날짜와 시간을 알려주는 명령어입니다.

date 결과값을 리다이렉션 시켜 date.log에 넣거나 date.log 뒤에 추가할 수도 있습니다.
그럼 다시 'fg' 를 쳐서 nano로 돌아가서 이렇게 쳐봅시다.

  • * : 매 날짜나 시간마다 한다는 뜻입니다.

따라서 '*/1 * * * *' 은 매 분마다 명령을 실행한다는 것입니다. "crontab expression" 으로 검색하여 crontab 문법에 대해 더 알 수 있습니다. '&1' 은 표준 출력이라는 뜻으로 'date >> date.log 2>&1' 은 date의 결과값을 'date.log' 에 추가하고 에러가 발생했을 때 오류는 쉘로 출력해준다는 것입니다.
정리하면 매 분마다 날짜와 시간 값을 'date.log' 에 추가하고 에러가 발생했을 때는 오류를 쉘로 출력합니다.

nano를 저장하고 나옵시다. 잘 저장됐는지도 확인해보겠습니다.

crontab -l


잘 저장되었으니 home 디렉토리로 가서 잘 동작됐는지도 확인해봅시다.

tail -f date.log

tail 파일명 : 파일의 마지막 10줄을 보여주는 명령어입니다. -f 옵션을 사용하면 실시간으로 추가되는 내용도 볼 수 있습니다.


앞에서 테스트한 두 줄을 제외하면 모두 매 분마다 날짜와 시간을 출력하는 것을 볼 수 있습니다!

일일이 같은 작업을 해야할 때도 크론을 이용하면 사용자는 다른 업무를 볼 수 있을 것입니다.

📌 19 - 쉘을 시작할 때 실행

쉘을 시작할 때 실행 수업
Startup Script : 쉘이 시작했을 때 자동으로 명령어가 실행되도록 하는 것입니다.
bash 상에서 Startup Script는 .bashrc라는 파일입니다. nano를 통해 .bashrc를 열어봅시다.

nano .bashrc

여러 줄들을 지나가고 마지막 줄에 "Hello, Bash!"를 출력하는 명령어를 적어봅시다.

echo "Hello, Bash!"

이제 쉘을 다시 켜면 "Hello, Bash!"가 나올 것입니다.

.bashrc에서 alias라는 명렁어를 사용하는 것이 보입니다. alias라는 명렁어도 알아봅시다.

alias 대체 명령어 = '명령어' : 기존 명령어를 대체 명령어로 쓰는 것을 혀용합니다.
예를 들어 부모 디렉토리로 가는 명령어인 'cd ..' 를 '..' 로 쓰는 것을 허용해보겠습니다.

'..' 를 써도 부모 디렉토리로 가는 것을 볼 수 있습니다.
alias 활용 사이트

📌 20 - 다중 사용자

다중 사용자 수업
리눅스는 유닉스를 바탕으로 한 운영체제입니다. 그래서 다중 사용자 시스템을 지원하는데 다중 사용자 시스템은 여러 명이 함께 하나의 컴퓨터를 사용할 수 있게 합니다. 그러나 이것을 사용했을 때 시스템 복잡도는 올라가며 잘 활용하지 못 했을 때 오히려 낭패를 볼 수도 있습니다. 그러니 다중 사용자 시스템을 잘 익혀 유닉스/리눅스의 특징을 잘 이용해봅시다.

먼저, id라는 명령어를 쳐봅시다. id는 사용자의 정보(id, group)를 출력합니다.


메인 유저인 kjt의 아이디 번호는 1000번이고, 많은 그룹들에 속해 있습니다. 반면, 서브 유저인 dave의 아이디 번호는 1001번이고, 속해 있는 그룹들이 비교적 적습니다. 처음에 sudo도 사용하지 못해 sudo 권한을 부여하니 sudo 그룹에도 속해져있습니다. 그룹은 후속 수업에서 다룰 예정입니다.

다음으로 who라는 명령어를 쳐봅시다. who는 시스템에 로그인되어 있는 사용자들의 로그인 정보(이름, 터미널, 로그인 시간)를 출력합니다.

tmux 라는 터미널 세션에 접속 중이라서 kjt가 두 명 접속하고 있다고 나와 있습니다. 다른 유저가 접속한다면 who를 쳤을 때 다른 유저의 이름도 보일 것입니다.

📌 21 - 관리자와 일반 사용자

관리자와 일반 사용자 수업
유닉스 계열에서는 super(root) 유저와 일반 유저가 있습니다. 슈퍼 유저는 모든 권한을 가지고 있어 강력합니다. 특정 일반 유저는 슈퍼 유저의 권한으로 명령어 실행을 위해서 sudo를 사용합니다. sudo를 사용하는 것 대신에 직접 슈퍼 유저가 되는 방법도 있습니다.

su 사용자 : 다른 사용자로 전환됩니다.
이 명령어를 사용해서 슈퍼 유저가 되보겠습니다.

su - root

슈퍼 유저가 잠겨있다면 sudo passwd -u root를 통해 언락할 수 있고, 비밀번호를 모른다면 sudo passwd root를 통해 변경할 수 있습니다. 슈퍼 유저가 되면 이름 옆에 #이 붙을 것입니다.

passwd (사용자) : 사용자의 비밀번호를 변경합니다.

슈퍼 유저의 id를 보면 아이디 번호는 0이고, 그룹들 또한 0으로 나옵니다.

재밌는 점은 슈퍼 유저는 '/home/사용자' 가 홈 디렉토리가 아니라 '/root' 가 홈 디렉토리입니다. 일반 유저는 접근이 불가능한 곳이기도 합니다.

슈퍼 유저로 있는 것은 위험할 수 있으니 가급적 일반 유저로 있다가 sudo를 사용하는 것을 추천드립니다 4글자 차이지만. 슈퍼 유저를 잠그려면 sudo passwd -l root를 하면 됩니다.

📌 22 - 사용자의 추가

사용자의 추가 수업
useradd 사용자 : 사용자를 추가합니다.
일반 사용자는 당연히 사용자를 추가할 수 없으니 sudo를 이용하고 홈 디렉토리를 생성하기 위해 -m 옵션을 붙여야합니다.

sudo useradd -m why

저는 why라는 사용자를 추가해보겠습니다. 추가한 후에 '/home' 으로 와서 'ls' 를 하면 새로운 유저인 why의 홈 디렉토리가 생겼습니다.

새로 사용자를 만들었지만 접속하기 위해서는 비밀번호를 정해야합니다.

sudo passwd why

비밀번호를 정하고 'su - why' 를 통해 why 유저로 접속합니다. why 사용자를 통해 패키지 업데이트를 해보겠습니다.

실패했습니다. 이유는 비밀번호 설정만 해둔 일반 사용자여서 sudo를 사용할 수 없기 때문입니다. 인터넷 검색을 통해 sudo를 사용할 수 있는 방법을 찾아보니 다음과 같았습니다.

sudo usermod -a -G sudo why

이 명령어를 치고 패키지 업데이트를 한번 더 해보겠습니다.

이번엔 성공했네요! man을 통해 usermod가 뭔지 -a, -G 옵션이 뭔지 찾아봅시다.

usermod : 사용자의 계정 정보를 수정합니다.


-G를 통해 다음 인자값으로 그룹 이름을 받아내고 -a로 그룹에 사용자를 추가합니다. 아직 배우지 않았지만 sudo라는 그룹에 why 사용자를 추가한 것입니다.

📌 23 - 권한 (permission)

권한 (permission) 수업
다중 사용자 시스템에서 중요한 개념인 권한에 대해서 알아봅시다. 그래서 영상이 5개
리눅스(유닉스 시스템)에서 권한을 통해 제어하는 대상은 파일과 디렉토리고 그것들은 읽기(Read), 쓰기(Write), 실행(Execute) 권한이 있습니다. 저는 '/tmp' 에 'perm.txt' 를 만들고 "hi" 를 'perm.txt'에 쓰겠습니다.

그리고 다른 사용자가 'perm.txt' 에 hello를 쓰려 하니 에러가 발생합니다.

이유를 알아보기 위해 'perm.txt' 의 상세한 정보를 확인해봅시다. 권한에 관련된 부분만 살펴볼 것입니다.

  1. 액세스 모드
    Owner에 대한 권한(2 ~ 4번째) : 소유자에 대한 권한으로 2번째 문자는 읽기, 3번째 문자는 쓰기, 4번째 문자는 실행 권한입니다. 지금은 읽기와 쓰기 권한이 있습니다.
    Group에 대한 권한(5 ~ 7번째) : 그룹에 대한 권한으로 5번째 문자는 읽기, 6번째 문자는 쓰기, 7번째 문자는 실행 권한입니다. 지금은 읽기와 쓰기 권한이 있습니다.
    Other에 대한 권한(8 ~ 10번째) : 만든 사람과 그룹 이외의 사람에 대한 권한으로 8번째 문자는 읽기, 9번째 문자는 쓰기, 10번째 문자는 실행 권한입니다. 지금은 읽기 권한밖에 없습니다.
  2. 소유자
    Owner(현재 12 ~ 14번째) : 소유자를 나타냅니다. 지금은 만든 사람인 'kjt' 입니다.
  3. 그룹
    Group(현재 15 ~ 17번째) : 그룹을 나타냅니다. 지금은 만든 그룹인 'kjt' 입니다.

'dave' 는 Other에 속하기 때문에 읽기 권한이 없어 에러가 난 것입니다. 이번엔 'kjt' 가 'dave' 가 읽지도 못하게 읽기 권한을 빼겠습니다.

chmod 모드 파일/디렉토리 : 파일이나 디렉토리의 액세스 모드를 변경합니다.


모드는 'o-r' 인데 'o'는 Other, '-' 는 빼다, 'r' 은 읽는다는 뜻입니다. 이렇게 명령어를 치니 Other의 읽기 권한이 사라졌습니다. dave가 한번 cat으로 읽어보겠습니다.

읽을 때도 권한이 없다고 나오면서 원하는 대로 수정이 되었습니다.

참고 :

  • o+r : Other에 읽기 권한 부여
  • o+w : Other에 쓰기 권한 부여
  • u-r : Owner에 읽기 권한 빼앗음 ?

이제 실행 권한을 수정하기 위해 쉘 스크립트를 간단하게 작성해보겠습니다. 'nano hi-machine.sh' 라고 하고 다음과 같이 작성합니다.

#!bin/bash
echo hi hi hi hi hi

말그대로 hi 머신 스크립트를 작성했고 실행 권한은 작성자도 처음에 가지지 못하기 때문에 부여해주겠습니다.

chmod u+x hi-machine.sh

이렇게 하고 ls -l을 하면 색이 초록색으로 바뀌는 것을 보실 수 있습니다. 이것은 실행이 가능하다는 것을 나타냅니다.

이제 실행이 될 것입니다. 그러나 다른 사용자는 여전히 에러가 날 것입니다.

이제는 디렉토리의 권한을 보겠습니다. 디렉토리의 권한은 파일하고는 약간 다릅니다. perm이라는 폴더를 만들고 먼저 Other의 읽기 권한을 빼앗아 보겠습니다.

mkdir perm
chmod o-r perm


'ls' 로 폴더 안에 있는 것들을 읽으려니 에러가 난 모습입니다. 따라서 디렉토리의 읽기 권한은 디렉토리 안에 있는 것들을 보는 권한입니다. 다음으로 Other의 쓰기 권한을 빼앗아 보겠습니다. (기본적으로 빼앗겨 있습니다.)

chmod o-w perm


perm 안에서 파일을 만들고 파일 이름을 바꾸려니 에러가 난 모습입니다. 따라서 디렉토리의 쓰기 권한은 디렉토리 안에 있는 것들을 만들거나 수정하는 권한입니다. 다음으로 Other의 실행 권한을 빼앗아 보겠습니다.

chmod o-x perm


cd를 통해 perm 안으로 들어가지 못하게 되었습니다. 따라서 디렉토리의 실행 권한은 디렉토리 안으로 들어가는 권한을 말합니다. 참고로, -R(재귀적) 옵션을 사용하여 디렉토리 안에 있는 모든 파일과 디렉토리는 해당 모드를 받게 됩니다.

이런 식으로 권한을 부여하거나 빼앗을 수도 있지만 한번에 여러 모드를 바꿀 수도 있습니다.

위키백과 Chmod

이 8가지 숫자를 이용하여 권한을 한번에 바꿀 수 있습니다.

소유자는 7(rwx), 같은 그룹은 6(rw-), 그 외 사람들은 5(r-x)의 권한을 받은 모습입니다. 다른 방법또한 있습니다.

위키백과 Chmod

이것을 이용하여 모두에게 읽기, 쓰기, 실행 권한을 주겠습니다.

a는 all 그러니까 모두를 뜻하고, rwx는 각각 읽기, 쓰기, 실행 권한입니다. 외우지 않고 필요할 때 위키백과같은 곳을 참고하는 것이 좋을 것입니다.

다음 시간에 계속 ...

profile
유용할지도 모른다.

0개의 댓글