chmod

  • 각 파일/디렉토리의 접근권한을 설정하는 명령어
  • 총 9자로 이루어져 있으며, 각 파일마다 user/groups/others의 세 종류의 유저에 대한 권한을 설정한다.
  • 각 유저마다 읽기(read: r)/쓰기(write: w)/실행(execution: x)의 3개의 권한을 각각 판별한다.

권한 보기

ls -l
total 12
drwxr-x--- 4 root root 4096 Sep 10 01:47 cache
-rw------- 1 root root 5643 Sep 10 03:35 config
  • drwxr-x---를 쪼개면 d, rwx, r-x, ---로 나뉜다.
    • d는 폴더인지(d) 파일인지(-) 구분한다.
    • rwx소유자에 대한 권한으로 읽기, 쓰기, 실행의 세 권한을 모두 갖는다. 즉, vi,nano,cat 등으로 내용을 확인가능하며, 텍스트 편집기나 sed 모듈로 수정 가능하고, bash $FILE등의 인터프리터로 실행 가능하다는 뜻이다.
    • r-x소유자와 동일한 그룹에 위치한 다른 사용자에 관한 권한으로 읽기와 실행의 권한만 갖는다. 내용을 확인가능하고 실행할 수 있으나 수정은 불가능하다. 아마 vim 등의 편집기로 열면 좌측 하단에 [readonly]라고 떠있을 것이다.
    • ---소유자와 동일한 그룹이 아닌 다른 사용자에 대한 권한으로 아무런 권한도 갖지 않는다. 내용을 확인 불가능하고, 수정할 수 없고, 실행할 수도 없다.

파일 권한 수정하기

chmod PERMISSION FILENAME
  • PERMISSION은 권한을 의미한다. 각 권한값은 더하거나 뺄 수 있으며 연산자로는 +-를 사용한다.
  • 즉, chmod +x script.sh는 소유자, 그룹, 다른 사용자 모두에게 실행 권한(x)를 부여하겠다는 뜻이다. 반대로 chmod -w scipt.sh는 모든 실행자에게서 수정 권한을 뺏는다는 뜻이다.
  • 세 종류의 사용자 중 특정 사용자에게만 권한을 부여할 수도 있다. chmod u+x는 사용자에게만 실행 권한을 부여한다.

8진수로 권한 표시하기

  • 앞서 말한 r, w, x의 세 권한은 각각 8진수로 표현할 수도 있다. r=4, w=2, x=1의 값을 갖는다.
  • , chmod 777은 -rwxrwxrwx과 동일한 권한을 의미한다.
  • 예를 들어, 위에 쓴 대로 모든 소유자에 대해 실행 권한을 부여하고 싶다면 chmod 111로 선언하면 된다. 단, 이렇게 권한을 8진수로 설정하는 경우에는 권한을 추가로 부여하거나 박탈하는 것이 아니라, 아예 새로운 권한을 설정하는 것이기 때문에 특별한 경우가 아니라면 소유자에 대한 권한은 7로 설정하는 것이 옿다.
  • chmod 711==-rwx--x--x

OS에서 우리가 간단하게 python, java 등의 명령어로 인터프리터를 실행할 수 있는 것은 사실 환경변수 덕이라는 것을 모르는 개발자는 없을 것이다. 그 중에서도 PATH로 명명된 환경변수의 덕인데, 이 PATH라는 변수는 명령줄에서 우리가 입력하는 명령어를 PATH의 경로에 있는 모든 파일들을 검사하고(물론 실행하는 쉘은 동일해야 한다. 예를 들어, shebang이 /bin/bash로 지정된 파일은 sh에서 실행 불가능하다), 이름이 일치하는 스크립트가 있다면 실행시킨다.
###예를 들어,

  • $ echo "hello world!"를 입력
  • 앞의 프롬프트가 $이므로 이 쉘은 Bash shell이다. 따라서, PATH는 /bin/bash 쉘은 해당하는 PATH에 명시된 모든 경로를 돌며 echo라는 이름의 실행 스크립트를 찾는다.
  • echo는 /bin 위치에 있다. echo를 찾았다!
  • bash shell은 echo라는 스크립트를 실행한다. 즉, 위의 $ echo 라는 명령어는 /bin/bash /bin/echo로 다시 바꿔쓸 수 있는 것이다.
  • 우리가 입력한 $ echo "hello world!" 라는 명령어는 /bin/bash /bin/echo "hello world!"로 바뀌어 전달된다.
  • 해석된 명령어가 CPU에 더 낮은 레벨의 언어로 바뀌어 전달되고, 연산이 끝난 값을 돌려받아 stdout(standard out, 표준 출력)은 hello world!를 출력하게 된다.

아마 /bin/echo 파일을 해석할 수 있으면 if ! [ -z "$1" ] ; then ~ 으로 이어지는 스크립트가 써져있겠지만, 아쉽게도 /bin, /sbin 내에 있는 파일들은 대개 일반적인 언어로는 읽을 수 없다.

즉, 환경변수란 우리가 원래 일일히 해당 경로를 찾아가 해당 파일을 실행시키는 수고를 줄여주는 아주 유용한 변수이다.
###linux의 환경변수 설정법
-- windows에서의 환경변수 설정은...적지 않겠다. 사진이 너무 많아..
linux에서 init folder들을 찾아 거기에 export라는 명령어와 함께 적으면 된다.

  • /etc/init.d/
  • /etc/profile
  • $HOME/.bashrc (bash의 경우. z shell의 경우 .zshrc인가 그런 이름으로 알고 있다.)
    위에서부터 init되는 순서이다. /etc/init.d 폴더의 경우 컴퓨터의 부팅이 끝나자 마자 시작되는 폴더들로, 먼저 이 안의 모든 스크립트들을 스윽 훑고 지나간다. 그다음 /etc/profile를 거치는데, /etc/profile에 선언되는 환경변수/alias들은 전부 전역변수로, root로 로그인하든 다른 일반사용자로 로그인하든 모두 동일하게 적용된다. 따라서 보통 환경변수를 설정할 경우 사용된다.
    $HOME/.bashrc의 경우 해당 사용자로 로그인할 경우 읽어들이는 파일로, 해당 사용자로 로그인하지 않으면 실행되지 않으므로, 보통 개인이 조금 더 편하기 위해 사용하는 간단한 별칭들을 저장한다. 예를 들어,
    docker exec -it test_container /bin/bash
    라는 긴 명령어를 $HOME/.bashrc에 alias vv="docker exec -it"로 저장하게 되면, 위의 명령어가 아래처럼 바뀌게 된다.
    vv test_container /bin/bash
    별거 아닌것 같아보이지만, 은근 손의 피로도를 줄여주고 개발속도를 늘려주는 좋은 녀석이다. 자주자주 애용하자.
FROM alpine
RUN set -x \
&& apk add --no-cache \
  openssh \
&& sed 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' -i /etc/ssh/sshd_config \
&& echo 'root:P@ssw0rd' | chpasswd \
&& ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa \
&& ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa \
&& mkdir -p /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
docker build -f $FILE -t $IMAGE:$TAG /path/to/dockerfile

급해서 호다닥 적어넣음.

'Development > linux' 카테고리의 다른 글

chmod 명령어  (0) 2021.09.10
환경변수에 관해...  (0) 2021.08.13
Ubuntu 컨테이너 미러사이트 한국 로컬로 지정  (0) 2021.05.31

컨테이너 환경을 사용하다 보면 맨 처음 컨테이너를 실행하고 apt 패키지 업데이트를 진행하는데 너무 느려서 답답한 경험을 한 사람이 꽤 있을 것이다. 느린 이유는 컨테이너 이미지가 참조하는 apt 저장소의 주소가 태평양 건너 아~주 먼 나라의 archieve.ubuntu.com을 참조하기 때문이다.

바로 저 archive.ubuntu.com들

이제 저걸 한국 미러 사이트인 kakao mirror로 바꿔보도록 하겠다. 먼저 필요한건 vim 패키지다. ubuntu desktop의 경우 vi모듈을 기본 제공하지만, 컨테이너 이미지의 경우 제공하지 않기 때문.

apt update && apt install -y vim

이제 apt이 참조하는 repository 위치를 변경해야 한다.

# vim /etc/apt/sources.list

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://archive.ubuntu.com/ubuntu/ bionic main restricted
...

바로 요놈들이다. 이제 혹시 모를 사태에 대비해 미리 백업해두고 변경을 진행하자.

cp /etc/apt/sources.list /etc/apt/sources.list.bak
# vim /etc/apt/sources.list

# deb http://archive.ubuntu.com/ubuntu/ bionic main restricted
deb http://mirror.kakao.com/ubuntu/ bionic main restricted

저런식으로 archive.ubuntu.com을 모두 mirror.kakao.com으로 바꿔주도록 하자.

그리고 모두 바꿨으면 apt update 실행.

속도도 훨씬 빠르다.

'Development > linux' 카테고리의 다른 글

chmod 명령어  (0) 2021.09.10
환경변수에 관해...  (0) 2021.08.13
alpine 컨테이너에서 ssh가 가능하도록 이미지 빌드하기  (0) 2021.07.25

+ Recent posts