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로 설정하는 것이 옿다.
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"로 저장하게 되면, 위의 명령어가 아래처럼 바뀌게 된다.
컨테이너 환경을 사용하다 보면 맨 처음 컨테이너를 실행하고 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으로 바꿔주도록 하자.