Linux
Linux(2)
char1ey
2022. 11. 28. 01:58
목차 |
1. Linux User 1.1. 접근권한 1.2. 그룹 1.3. 사용자 타입(UserType) 1.4. 사용자 관련 명령어 1.4.1. 사용자를 확인(조회)하는 명령어 1.4.2. 사용자를 생성, 수정, 조회를 위한 명령어 1.5. 사용자 그룹 1.5.1. 그룹 관련 명령어 |
2. 파일 접근 권한 설정 |
3. Shell 3.1. 패키지 매니저 |
1. Linux User(사용자 계정)
리눅스 구조 특징 중 하나인 멀티 유저
- 여러 사용자가 동시에 하나의 시스템에 접근
- 접근 권한, 그룹
리눅스에서 작동하는 모든 파일과 디렉토리는 사용자에서 시작된다. (모든 프로세스는 사용자로부터 실행된다.)
1.1 접근권한
ex) `A`라는 사용자가 있고, `B`라는 사용자가 있다고 가정한다.
`A`계정으로 로그인 된 상태에서, vi를 통해 hello.txt라는 파일을 생성한다.
이 파일의 소유자는 A이다.
- B계정이 hello.txt에 접근하려고 했을 때, 글을 볼 수 없도록 하거나 수정이 금지되도록, 접근에 대해 제한을 둘 수 있다.
- hello.txt는 A 계정이 만들었기 때문에, hello.txt의 소유자는 A라서 다른 계정이 해당 파일에 접근 못하게 할 수 있다.
- 하지만, B 계정은 권한만 존재한다면 파일 접근이 가능하다.
1.2 그룹
- 사용자가 많아질경우 개개인별로 권한을 주는 것이 귀찮기 때문에 그룹이라는 개념도 존재한다.
- ex) `A`의 모든 파일의 접근 권한을 [B, C, D, E] 각각에 주고 싶다면, 그룹으로 묶어 사용 권한을 부여할 수 있다.
1.3 사용자 타입(User Type)
- 리눅스에는 3가지 사용자 타입이 존재한다.
- 루트 사용자 - UID 0
- 시스템 사용자 - UIDs 1~999
- 일반 사용자
- 리눅스는 설치할 때 기본적으로 root 계정을 생성하고, 또 하나의 일반사용자도 생성한다.
- root 사용자만 사용하는 것은 위험하므로, 일반 사용자 계정도 생성
- 일반적으로 0번(루트)과 1000번(사용자)이 생기고 시작한다.
1.4 사용자 관련 명령어
1.4.1 사용자를 확인(조회)하는 명령어
id
- 현재 사용자의 아이디와 사용자가 속한 그룹의 아이디를 포함한 아이디 관련 정보를 보여줌.
# id `uid=1000(char1ey)`, `gid=1000(char1ey)`, `groups=1000(char1ey)`, ...
# 문법
$ id [사용자명]
# 현재 사용자의 아이디(숫자)를 출력한다.
$ id -u
# 현재 사용자의 이름(문자)을 출력한다.
$ id -un
# root 사용자에 대한 아이디를 출력
$ id -u root
# root 사용자에 대한 이름을 출력
$ id -un root
whoami
- 현재 사용자의 이름을 조회
$ whoami
# char1ey(현재 사용자)
users
- 현재 로그인되어 있는 전체 사용자의 정보를 조회한다.
$ users
1.4.2 사용자를 생성, 수정, 조회를 위한 명령어
- 사용자 생성, 수정 관련된 명령어들은 대부부 root 계정이 필요하다.
- root 계정에 접속해서 만드는 방법이 있다. (너무 위험해서 금기시된다.)
※ 일반 사용자에서 root 권한이 필요한 경우 - sudo
- root 권한이 필요한 파일에 접근할 때 사용한다.
- subtitle user do(다른 사용자의 권한으로 실행)
- 일반 사용자인데 관리자 계정을
- sudo가 필요한 명령어가 있다.
# passwd 파일을 수정한다. 루트 소유이기 때문에 sudo 없이는 불가하다.
$ sudo vi passwd
useradd
- sudo가 필요하다.
- 새로운 사용자를 생성한다.
# 문법
$ useradd [새로운 사용자명]
# user1 생성
$ useradd user1
*adduser
- sudo가 필요하다.
- 새로운 사용자를 생성한다.
# 문법
$ adduser [새로운 사용자명]
$ adduser user1
# user1 생성
# sudo를 사용하면 아래와 같은 출력이 되지 않는다.
# useradd : Permission denied.
# cannot lock/etc/paswd: try again later.
# sudo adduser tmp1
adduser, 왜 sudo 명령어가 필요한지 알아보기
- 기본적으로 Linux는 adduser를 쓰면 etc의 passwd라는 파일에 내용을 추가해준다.
# etc 파일에 들어간다.
$ cd /etc
# passwd를 수정한다.
$ sudo vi passwd
/etc/passwd
- 윗줄의 내용은 생략하고 맨 아랫줄을 보자.
- tmp1:x:1002:1004:,,,:/home/tmp1:/bin/bash
# tmp1 : 사용자이름
# 1002 : 사용자 ID
# 1004 : 그룹 ID
# ,,, : 코멘트 또는 풀네임
# /home/tmp1 : 사용자 디렉토리 / 홈 디렉토리
# /bin/bash : shell 경로
passwd
- sudo 권한이 필요
- 사용자의 패스워드를 설정할 때 사용한다.
- 기본적으로 adduser에서 입력하기 때문에 필요하진 않다.
# 문법
$ sudo passwd [사용자 이름]
usermod(수정)
- sudo 권한이 필요
- 사용자를 수정한다.
# 문법
$ sudo usermod [사용자이름]
tmp1:x:1002:1004:,,,:/home/tmp1:/bin/bash에서 수정을 진행한다.
# 옵션1
- s
- shell 경로를 변경할 경우
$ sudo usermod -s /bin/zsh tmp1(계정명)
# shell 경로 변경, 마지막은 usermod의 인자값
# 옵션 2
- G
- 그룹 아이디를 변경할 경우
$ sudo usermod -G blockchain tmp1(계정명)
userdel(삭제)
- sudo 권한이 필요
- 사용자를 삭제한다.
# 문법
$ sudo userdel [사용자이름]
- /etc/passwd에 해당하는 줄을 삭제할 뿐이다.
- 옵션 -r 사용해야 홈 디렉토리 안에 있는 폴더까지 삭제한다.
# 홈 디렉토리로 이동
$ cd ~
$ sudo userdel -r tmp1(계정명)
# tmp1 디렉토리까지 삭제된 것을 확인
1.5 사용자 그룹
- Linux에서 그룹을 통해서 파일에 관한 접근 권한을 제한 할 수 있다.
- 계정을 만들게 되면, 자신의 아이디로 그룹이 만들어 진다.
- 사용자를 만들면 최소한의 그룹이 하나를 가지고 있다.
1.5.1 그룹 관련 명령어
groups
- 현재 로그인된 사용자가 속한 그룹 리스트를 확인
# 문법
$ groups
# char1ey adm dialout cdrom floppy sudo audio dip video plugdev netdev
# 모두 그룹 이름이다.
$ groups [계정명]
$ groups char1ey
# char1ey : char1ey adm dialout cdrom floppy sudo audio dip video plugdev netdev
groupadd
- sudo 권한이 필요하다.
- 새로운 그룹을 생성할 수 있다.
# 문법
$ groupadd [그룹이름]
$ groupadd blockchain1
다음의 내용이 출력된다.
# groupadd : Permission denied.
# groupadd : cannot lock "/etc/group": try again later.
/etc/group 이라는 파일이 어떻게 생겼는지 알아보자.
# vi /etc/group
$ cd /etc
$ ls -al
#너무 많이 나온다.
$ ls -al | grep group
# root 계정이 출력된다.
# 따라서 sudo를 붙여야 사용이 가능하다.
$ cd~
$ pwd
# /home/char1ey
# /etc/group
- /etc/group 출력물 읽는법을 알아보자.
blockchain:x:1003:user1
# blockchain 그룹이름
# 1003 그룹 ID
# blockchain : 해당하는 유저 내용을 root, user1, char1ey
## 사용자와 같이 사용하기(예시)
# sudo adduser tmp1(계정명)
$ id tmp1
# /etc/passwd
$ sudo usermod -G blockchain tmp1
# cat /etc/passwd
# cat /etc/group
# id tmp1
groupmod
- 기존의 그룹을 수정할 수 있다.
# 문법
$ sudo groupmod -aG [그룹] [사용자]
# 그룹 blockchain에 tmp1을 넣는다.
$ sudo groupmod -aG blockchain tmp1
groupdel
- 기존의 그룹을 삭제할 수 있다.
# 문법
$ sudo groupdel [그룹명]
# /etc/group 안의 그룹명이 blockchain 이라는 녀석을 지운다.
$ sudo groupdel blockchain
2. 파일 접근 권한 설정
- 다음을 입력해보자.
$ cd ~ = /home/char1ey
$ ls -al
$ vi hello.txt
# hello world! 입력 후 저장
$ ls -al
# 출력물은 다음과 같다.
# -rw-r--r-- 1 char1ey char1ey 13 Nov 22 11:05 hello.txt
# [0]/[1]/[2]/[3]
# -/rw-/r--/r-- : 띄어서 보아야한다.
[0]에 대한 설명
- 파일 타입에 대한 설명
- 조회된 내용중에 파일인지, 폴더인지 구분 값
- - : normal file 일반파일
- d : directory
- l : link file 바로가기
- p : named pipe
- s : socket
- c : character device
- b : block device
[1], [2], [3]에 대한 설명
- 각각의 의미는 다음과 같다.
- r : 읽기 4
- w : 쓰기 2
- x : 실행 1
- [1] : 소유자에 대한 설정
- [2] : 그룹에 대한 설명
- [3] : 기타 사용자
chmod
- 해당 파일의 접근권한을 바꾸는 명령어
# rw- r-- r-- 해당파일에 접근권한을 바꾸는 명령어
# rwx r-x r-x 소유자 이외에는 읽고 실행가능, 수정은 불가
# 421 4-1 4-1 =>7 5 5 (합으로 읽는다)
# 문법
$ chmod [xxx] [해당파일]
$ chmod 755 ./hello.txt
$ ls -al | grep hello
# -rwxr-xr-x 1 char1ey char1ey 13 Nov 22 11:05 hello.txt
chown
- 해당 파일의 소유권을 바꾸는 명령어
# -rw-r--r-- 1 char1ey char1ey 13 Nov 22 11:05 hello.txt
# root root
# 문법
$ chown [사용자명]:[그룹명] [파일명]
# 소유권을 root에게 준다.
$ chown root:root ~/hello.txt
# 소유권이 root에게 있어 수정이 불가능하다.
$ ls -al | grep hello.txt
$ vi hello.txt
# W10: Warning: Changing a readonly file
sudo 권한주기
- 계정을 생성한 경우 sudo 권한이 없다.
- sudo라는 명령어를 사용하기 위해선 sudo 권한을 부여해야한다.
- /etc/sudoers에 접속한다.
(sudo) vi /etc/sudoers
root All=(ALL:ALL) ALL:로 설정해야한다.
char1ey All=(ALL:ALL) ALL:로 설정해야한다.
3. Shell
- 사람과 컴퓨터가 대화하기 위해서 사용한다.

Shell의 종류들
- bash Linux의 기본설정
- zsh Mac의 기본설정
bash에서 zsh로 설정을 변경해보자.
3.1 패키지 매니저
- 컴퓨터의 운영 체제를 위해 일정한 방식으로 컴퓨터 프로그램의 설치, 업그레이드, 구성, 제거 과정을 자동화하는 소프트웨어 도구들의 모임이다.
Q) CLI 환경에서 뭔가를 설치하고 싶다면?
A) Window GUI 환경과 설치방법이 다르다. 이는 패키지 매니저를 통해 가능하다.
- 패키지 관리는 새로운 소프트 웨어를 설치, 업데이트, 삭제하는 행위를 말한다.
- `install` 파일을 다운받는 행위
- `install` 파일 내부들도 결국 다 코드로 되어있다.
- 소스코스 하나의 아카이브 파일(tar), (=.zip파일) 즉, 압축파일이다.
- 패키지는 쉽게 말해서 폴더와 같다
여기서 의존성에 대해 알고 가야한다.
의존성
예시를 통해서 의존성에 대해 이해해보자.
다음은 프로그램("HelloWorld")을 설치하기 위해서 node.js에게 의존해야한다.
- javascript를 실행하기 위해서는 node.js가 필요하다고 가정해보자.
- 프로그램명 : "HelloWorld"라고 했을 때
- node.js까지 함께 설치해야한다.
- node.js는 하나의 패키지인셈이다.
- "HelloWorld"를 설치하게 될 때의 과정은 다음과 같다.
- node.js install 파일을 다운받는다.
- node.js 압축을 푼다.
- "HelloWorld"의 install 파일을 다운받는다.
- "HelloWorld" install의 압축을 푼다.
- "HelloWorld"를 실행할 수 있다.
패키지 관리 시스템
- dpkg : Linux
- dmg : macOs
apt-get 사이트(Linux)
- 다양한 install 파일들이 존재한다.(dpkg)
- # apt install [프로그램 이름] $ apt install zsh
homebrew 사이트(macOs)
- 다양한 install 파일들이 존재한다.(dmg)
- # brew install [프로그램 이름] $ brew install zsh