생각을 개발하자, 박진형

[CentOS] 리눅스 기본 #1 - 명령어, 유저 그룹 관리, 권한, 링크 본문

OS/CentOS

[CentOS] 리눅스 기본 #1 - 명령어, 유저 그룹 관리, 권한, 링크

imjinbro imjinbro 2017.07.02 14:10
[리눅스 기본 개념]
1) 리눅스는 기본적으로 멀티유저 그리고 부팅 명령어 : 가상콘솔, 런레벨 개념까지 알기
- 여러사람이 같이 접속해서 사용하는 개념 :  함부로 종료, 리부트 시키면 안됨, 로그아웃을 해야함
- 종료 관련 명령어
(1) 바로 종료하기 : shutdown -P now, halt -p, init 0
(2) 시간 예약하기(minutes) : shutdown -P +10
(3) 재부팅하기 + 시간 예약 : shutdow -r 23:00
(4) 시간 예약 취소하기 : shutdown -C
(5) 종료 메세지만 날리기(minutes, 실제 끄지않지만 모든 사용자에게 메세지만 날리기) : shutdown -K +10 

- 가상 콘솔 : 가상의 모니터, 총 6개 제공함, 새로운 접근으로 인식(여러 유저로 로그인한 뒤 옮겨다니면 다중 접속처럼)
- 키조합으로 모니터 변경가능 : ctrl + alt + F1~6
- 터미널에서 모니터 변경가능 : chvt 모니터번호
- 1 모니터에서 종료시키면 모두 접속 종료.... : 로그아웃을 사용해야함

- 런레벨 : 0 ~ 6까지 존재, 링크파일, 이 링크파일을 실행시키면 파워 관련 시스템 명령(init 으로 명령)
(1) 0 - Power Off
(2) 1 - Rescue
(3) 2 - Multi-User : 사용 x
(4) 3 - Multi-User : 텍스트 모드의 다중 사용자모드
(5) 4 - Multi-User : 사용 x
(6) 5 - Multi-User : 그래픽 모드의 다중 사용자모드
(7) 6 - Reboot

- 런레벨 링크 확인 : /lib/systemd/system > runlevel?.target 파일 확인

- 기본적으로 graphical target(run-level 5) 
- 변경하려면 : ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target 
                     (앞이 변경하려는 런레벨, 뒤가 default 링크, 결론은 디폴트 링크를 변경해주면 됨)


2) 명령어 작성 시 Tab 키를 1번 누르면 자동완성됨 : 비슷한 이름이 여러개일 경우 두번 누르면 보기가 주어짐


3) 터미널에서 상하 방향키를 누르면 이전 명령어 작성 history를 가져올 수 있음
- history를 입력하면 이전에 입력했던 명령어 리스트가 출력됨
- history -c 입력하면 히스토리 리스트가 클리어 됨


4) 에디터 : 텍스트 편집을 위한 프로그램
- x 윈도우 환경 : gedit
- 텍스트 환경 : vi 에디터, 다양한 단축키가 있음 - 구글링해서 사용방법 익힐 것


5) 명령어 메뉴얼 보기 : man 명령어, 한글 메뉴얼 지원


6) 마운트 : 물리적인 장치와 특정 디렉토리 연결시켜주는 과정
- 마운트 과정이 자동으로 되는 리눅스 배포판이 있지만 어떤 것은 아닐 수도 있음
- 텍스트 모드에서는 마운트가 자동으로 되지않음
- 텍스트모드에서 마운트 : cdrom과 마운트된 것부터 끊기

$ umount /dev/cdrom
$ mkdir /media/cdrom

$ mount /dev/cdrom /media/cdrom
- cdrom에 들어가있어야 실습진행할 수 있음(물리적 장치) : 가상머신 cd rom 설정은 첫번째 포스팅 참고
- dvd 장치 : /dev/cdrom
- 특정 디렉토리에 마운트 : 디렉토리는 마음대로 지정해도됨 - 일반적으로 /media/cdrom

- 마운트가 끊어지면 위의 파일들이 모두 사라짐 : cd 이미지X

- usb도 과정은 비슷함


[리눅스 기본 명령어]
1) ls 디렉토리(생략하면 현재 디렉토리) : 해당 디렉토리의 파일 목록 나열
- a 옵션 : 숨김 파일까지 리스트 출력, 숨길 파일, 폴더는 파일명 앞에 .(온점)이 앞에 붙음
- l 옵션 : 리스트 자세히 보기, 파일과 디렉토리 구분하기 - 맨 앞이 - 면(파일) / d 면(디렉토리)를 나타냄
- *.확장자 : 디렉토리 파일 중 특정 확장자를 가진 모든 파일 리스트 출력
- sys* : 디렉토리 파일 중 sys가 들어간 모든 파일 리스트 출력
- 옵션은 조합가능

2) cd 디렉토리(생략하면 사용자 홈 디렉토리) : 디렉토리 이동
- 절대 경로 or 상대 경로 지정
- / 와 root 디렉토리 구분해야함 : / 가 최상위 디렉토리, root는 root 이름을 가진 사용자의 홈 디렉토리
- cd ~사용자명 : 특정 사용자의 home 디렉토리로 감
- 상대경로 : . (현재), .. (상위)

3) pwd : 현재 디렉토리 경로

4) touch : 비어있는 파일 생성

5) rm : 삭제하기
- rm 파일 : 삭제 전 묻고 삭제
- rm -f 파일명 : 묻지않고 삭제
- rm -rf 디렉토리명 : 디렉토리를 삭제할 때에는 -r을 붙여야함, 묻지않고 삭제(굉장히 위험ㅎ, /boot 디렉토리....)
- rmdir 디렉토리명 : 비어있는 디렉토리 삭제

6) cp : 파일이나 디렉토리 복사
- cp 복사대상 붙여넣기파일명
- cp -r 복사대상디렉토리 붙여넣기디렉토리명 : 디렉토리는 -r 옵션을 붙여야함

7) mv : 이름을 변경하거나 위치 이동 시 사용
- mv 현재있는파일or디렉토리명 변경할 파일or디렉토리명 
- mv 현재있는파일or디렉토리명 /디렉토리/파일or디렉토리명 : 옮기면서 이름 변경까지
 
8) mkdir 디렉토리명 : 디렉토리 생성
- p 옵션 : 디렉토리를 계층으로 생성할 수 있음

9) cat 파일명 : 텍스트로 작성된 파일을 화면에 출력

10) head/tails 파일명 : 위 혹은 아래로 10줄씩만 출력

11) more 파일명 : 페이지 단위(%)로 텍스트 파일 내용 출력, 스페이스 누르면 다음, b 누르면 이전, q 누르면 종료

12) file 디렉토리or파일 : 어떤 형태의 파일 혹은 디렉토리인지 알려줌


[리눅스 사용자와 그룹]
- 다중 이용자 시스템 : root(슈퍼유저, 모든 권한을 가짐), 일반 유저
- 사용자 정보 : /etc/passwd 에 정의 - 2번째 줄부터 40번째 줄까지는 일반적으로 사용하는 유저는 아님
$ centos:x:1000:1000:centos:/home/centos:/bin/bash


(1) centos : 사용자 이름

(2) x : 패스워드 (따로 관리 중임, x는 없다는 것이 아님)
(3) 첫번째 1000 : 사용자 번호
(4) 두번째 1000 : 사용자 그룹 번호, /etc/group 에 이름이 존재, 따로 그룹을 만들지않고 사용자를 만들면 사용자명을 그룹명으로
(5) /home/centos : 사용자 디렉토리
(6) /bin/bash : 사용자 기본 쉘

- 간단하게 유저 만들기 : 좋지않은 방식 - 그룹 만들고 유저 만들어야 좋음
(1) $ useradd 유저명
(2) 확인 : tail -3 /etc/passwd     ,    tail -3 /etc/group


- 관련 명령어 : 명령어의 옵션을 알고 싶을 때 커맨드라인에 명령어 -h
(1) useradd : 사용자 추가
- 옵션 u : ID 지정
- 옵션 g : 그룹 지정
- 옵션 d : 홈 디렉토리 지정
- 옵션 s : 쉘 지정

(2) passwd : 사용자의 비밀번호 지정 및 변경
- root는 모든 사용자 변경 가능, 일반 유저는 자기 것만
- /etc/shadow에 암호화되어 저장 : 지정하지않아도 암호화되어서 저장

(3) usermod : 사용자 속성 변경
- 옵션 u, g, d, s : add와 같음

(4) userdel : 사용자 삭제
- 옵션 r : 사용자 사용 디렉토리까지 삭제

(5) groups : 현재 사용자가 속한 그룹을 리턴(여러개일 수도 있음 - 주 그룹, 보조 그룹)

(6) groupadd : 새로운 그룹 생성

(7) groupmod : 그룹 속성 변경

(8) groupdel : 그룹 삭제

(9) gpasswd : 그룹 암호 설정, 관리 수행

(10) chage : 암호를 주기적으로 변경하도록 설정함


- 그룹 추가 후 유저 생성 
(1) $ groupadd 그룹명
(2) $ useradd -g 그룹명 유저명
(3) 확인 : $ tail -3 /etc/passwd    /  /etc/group   - 그룹 번호 일치하는지 확인하기
(4) 비밀번호 지정 : passwd 유저명 (같은 값을 입력하더라도 암호화 후 값은 다름)
(5) 사용자 디렉토리 추가 확인 : ls -l /home (home 아래 사용자명으로 된 디렉토리 생성 여부 확인)


- x window(그래픽)에서 사용자 관리 : system-config-users (에러난다면 yum으로 설치하기)


[리눅스 파일, 디렉토리 소유 / 권한]
- sample.txt 파일 기준으로 설명, touch로 빈 파일 생성
(1) - : 일반 파일, d 일 경우 - 디렉토리 / l 일 경우 - 링크 파일
(2) rw-r--r-- : 파일에 대한 허가된 권한 
(3) 0 : 링크 수 
(4) root : 파일 소유자 이름
(5) root : 파일 소유 그룹 이름
(6) 0 : 파일 크기(byte)
(7) 7월 2 12: 16 : 파일 생성 일자 및 시간
(8) sample.txt : 파일명 + 확장자


- 파일에 대한 허가된 권한 : 3개씩 끊어서 보면 됨
(1) 종류 : r(read, 2의 2승) / w(write, 2의 1승) / x(execute, 2의 0승) - 2진수
(2) 끊어서 보기 : 첫번째(소유자의 파일 접근 권한) / 두번째(그룹의 파일 접근 권한) / 세번째(그외 사용자 파일 접근 권한)
(3) 777 권한 : 2진수로 표현했을 때 3개 모두 rwx  권한 허가한 것


- 다시 sample.txt 허가된 권한 보기 : rw-r--r--
(1) 소유자 : 읽고 쓰기 가능
(2) 그룹 : 읽기 가능
(3) 그 외 사용자 : 읽기 가능


- 관련 명령어
(1) chmod : 허가권 변경, 2진수 / 심볼릭으로 지정, 자기 파일(root는 상관x)이라면 어떤 사용자나 사용가능
     예시 : chmod 777 sample.txt, chmod 644 sample.txt
     예시2 : chmod o-x sample.txt (sample.txt에 대한 다른 유저 실행 권한 빼기)
     예시3 : chmod ug-w sample.txt (소유주, 소유권한 쓰기 권한 빼기)
     예시4 : chmod u+rw sample.txt (소유주에게 읽기 쓰기 권한 더하기)

(2) chown : root 사용자가 다른 사용자에게 파일 소유를 넘길 때 사용(위험한 명령이기 때문에 root 사용자만)
     예시 : chown centos sample.txt (root 에서  centos라는 유저로 넘어감)
     예시2 : chown root.root sample.txt (chgrp 명령어 기능도 한꺼번에 사용 : 사용자, 그룹 모두 변경)

(3) chgrp : 다른 그룹에게 파일 소유를 넘길 때 사용
     예시 : chgrp centosGroup sample.txt ( root 그룹에서 centosGroup으로)
 

[리눅스 링크]
- 바로가기와 같음 
- 종류 : primitive와 reference type variable과 같음
- 원본 파일 생성 : inode 블록에 inode 생성, data 블록 생성(원본 파일 데이터 저장)
=> inode : 파일이나 디렉토리의 모든 정보를 가지고 있는 자료구조, 모든 파일과 디렉토리들은 각각의 1개 inode를 가짐(+ 고유 주소값)
=> inode 블록 : inode가 소속된 블록
=> data 블록 : 파일에서 데이터를 저장하는 블록으로 일반 파일이나 디렉토리의 파일의 데이터가 존재

(1) 심볼릭 링크(소프트 링크) : 심볼릭 링크 파일 생성 -> inode 생성 -> data 블록에 원본 파일 포인터 저장 -> 참조
(2) 하드 링크 : 하드 링크 파일 생성 -> 원본 파일의 inode 사용

- inode 고유값 보기 : $ls -il 파일/디렉토리이름


- 사용하기 
(1) 소프트링크 : $ ln -s 원본파일명 링크파일명
(2) 하드링크 : $ ln 원본파일명 링크파일명
(3) 확인하기 : $ ls -il 
- 하드링크파일은 같은 inode 고유값을 가짐 

(4) 원본파일 삭제
- 원본파일을 삭제하면 원본 파일과 같은 inode를 가리키던 하드링크는 아무이상x
- 소프트링크는 참조하는 방식이기때문에 파일 에러


[결론]
- 리눅스는 멀티유저 : 조심해서 사용할 것, 권한 중요
- 리눅스 파일 실행 : ./파일명.확장자 (현재 디렉토리 나타내고)
- 리눅스 사용자 변경 : su - 사용자명 ( - 는 환경변수까지 모두 변경하는 것 )
- 리눅스 사용자 홈디렉토리 : ~사용자명

- 리눅스 root 디렉토리(/root) 접근 불가 : root에는 사용할 파일을 만들지 않기를...