1. 계정 및 그룹 생성
- 오늘날짜 변경
#date -s "2017-01-01 10:10:00"
- 계정명 : user10    - 패스워드 : 123
- UID : 808     - Home : /practice/user10
계정 유효기간 : 2017년 01월 7일
최초 설정한 암호는 최소 하루뒤에 변경 할 수 있으며, 암호는 5일에 한번씩 변경해야하고
최소 3일전에는 암호를 변경할 수 있도록 경고를 한다. 만약 암호가 만료된 10일 뒤에도
암호를 바꾸지 않으면 계정을 비활성화 시킨다.
#useradd -u 808 -d /practice/user10 user10
#chage -E 2017/01/07 -m 1 -M 5 -W 3 -I 10 user10

 


계정이 정상적으로 설정되었는지 date 및 chage 명령어를 이용해 확인 및 테스트 하기


1. 최소 암호 변경일 확인
   $su - user10  

   $passwd  암호변경을 위해 조금더 기다려야함 (최소1일 -m 1)
   #date -s "2017-01-01 10:10:00" date명령을 이용해 1일 이후로 변경
   $su - user10  $passwd  암호변경 가능

 

2. 최대 암호 변경일 및 경고 확인

변경일확인 하는법 : chage -l [계정명]

 

   #date -s "2017-01-04 10:10:00" 2일전 -->chage를 통해서 비밀번호 만료를 알 수 가 있다. 
   #date -s "2017-01-05 10:10:00" 1일전
   #date -s "2017-01-06 10:10:00" 0일전

   #date -s "2017-01-07 10:10:00" 암호 만료

 

3. 암호 만료 후 10일 뒤에도 변경 하지 않을 시 계정 잠금
 #date -s "2017-01-17 10:10:00" 계정 잠금

4. 계정 잠금 (계정 유효기간 : 2018년 02월 24일)
 #chage -d 2018-02-20 user10   //마지막 암호 날짜 변경
 #date -s "2018-02-25 10:10:00"  //2018년 02월 25일로 변경
    로그인 테스트
 암호와 상관없이 계정이 만료 확인

/etc/login.defs

MAIL_DIR
  - 사용자 계정의 메일 관련 파일이 위치할 경로
PASS_MAX_DAYS
  - 암호 변경 최대 일 수 (chage -M)
PASS_MIN_DAYS
  - 암호 변경 최소 일 수 (cahge-m)
PASS_MIN_LEN
  - 허용 할 수 있는 최소한의 패스워드 길이 지정
UID_MIN, GID_MIN
  - 시작되는 최소 UID, GID 범위 지정
UID_MAX, GID_MAX
  - 최대 UID, GID 범위 지정
CREATE_HOME
  - 사용자 계정을 생성 시 홈디렉 토리 생성 여부
UMASK
  - 사용자 계정이 가질 기본 접근 권한
USERGROUP_ENAB
  - 사용자 계정 제거 시 그룹도 함께 제거할지에 대한 여부
ENCRYPT_METHOD
  - 암호화 알고리즘 지정
---------------------------------------------------------------------------------------------
groupadd - 그룹 추가
groupmod - 그룹 수정
groupdel - 그룹 제거
---------------------------------------------------------------------------------------------
사용자 계정 특징과 생성과정
- 계정의 이름과 자신의 고유한 UID와 그룹을 나타내는 GID가 있다.
- /etc/default/useradd 와 /etc/login.defs에 정의한 내용을 바탕으로 사용자 계정의
  각종 정보와 암호 정책에 의해서 생성된다.
- 생성된 계정은 /etc/passwd, /etc/group 파일에 사용자 계정의 정보가 저장된다.
- 홈디렉토리 생성 시 /etc/skel 디렉토리에 파일을 홈 디렉토리로 복사 한다.
---------------------------------------------------------------------------------------------
그룹 생성 및 수정
- 특정 디렉토리 및 파일의 접근을 권한이 있는 계정만 허용하기 위해 해당 계정들을
  그룹 단위로 묶어 관리 할 수 있다.
 
#groupadd WEB_USER    // WEB_USER 그룹 생성
#cat /etc/group     // 마지막에 추가된 WEB_USER 그룹 확인

#groupmod -g 800 WEB_USER  // WEB_USER 그룹의 GID 변경
#cat /etc/group     // GID 변경 확인

#groupadd -g 900 WEB_ADMIN  // GID 900번인 WEB_ADMIN 그룹 생성
#cat /etc/group     // GID 900번 확인

#useradd -g WEB_USER web-user1 // web-user1 계정 생성 시 그룹을 지정하여 생성
#useradd -g 900 web-admin1  // web-admin1 계정의 GID를 900을 지정하여 생성
#cat /etc/passwd | tail -2  // passwd파일 확인, 4번째 필드가 800, 900 확인

#useradd -g 800 web-user2  // WEB_USER 그룹에 포함하여 web-user2 계정 생성
#cat /etc/passwd | tail -3  // 생성 확인
web-user1, 2 계정은 WEB_USER 그룹에 속한다. (GID가 같기때문에)

#groups [계정명] - 해당 계정이 속한 그룹을 출력
#groups web-user1
#groups web-user1 web-user2  //복수 지정 가능
#groups web-admin1

----------------------------------------------------------------------------------------------
디렉토리 및 파일의 권한과 소유권

- 시스템에 있는 모든 파일과 디렉토리는 접근할 수 있는 권한 및 소유권이 부여되어 있다.
- 파일이나 디렉토리의 접근을 제한 하는 것을 허가권 또는 퍼미션(Permission)이라 한다.
- 파일이나 디렉토리의 소유권한을 소유권(Ownership)이라고 한다.

---------------------------------------------------------------------------------------------
chown (change ownership) - 소유권 변경
chown [소유계정명]:[소유그룹명] [적용할파일명]

#cd /home
#ll     // web-admin1 계정의 홈디렉토리 소유자, 소유그룹 확인
     // 소유 계정 : web-admin1
     // 소유 그룹 : WEB_ADMIN
#cd /home/web-admin1
#touch test   // 테스트 파일 생성
#ll     // 방금 생성한 테스트 파일 소유자/소유그룹 확인
     // root root (현재 로그인 한 계정의 소유권을 따라감)
#su - webadmin1  // web-admin1 계정으로 스위칭
#pwd
/home/web-admin1
$touch test1  //test1 파일생성
$ll     //소유자, 소유 그룹 확인
     //web-admin1 WEB_ADMIN
#exit    //root 변경
#chown web-user1 test1    //test1 파일에 소유자를 web-admin1 -> web-user1로 변경
#ll        //변경 확인
#chown web-admin1 test1   //test1 파일에 소유자를 web-user1 -> web-admin1로 변경
#ll        //변경 확인
        //web-admin1 WEB_ADMIN
#chown web-user1:WEB_USER test1  //test1 파일에 소유자 소유그룹 동시에 변경
#chown web-admin1.WEB_ADMIN test1   //test1 파일에 소유자 소유그룹 동시에 변경

#chown :WEB_USER test1  // 구분자 기준으로 오른쪽(소유그룹)만 작성하여
#chown .WEB_ADMIN test1     // 소유 그룹만 변경이 가능
---------------------------------------------------------------------------------------------------------------------------
허가권 (Permission)
파일유형 필드에 퍼미션 구조
읽기 권한, 쓰기권한, 실행권한 등 세가지 필드로 구성

   -   r w x    r w x     r w x

파일유형   소유자/사용자(user) 소유그룹(Group)  기타사용자(Other)

rwx의 의미
r : 디렉토리/파일을 읽을 수 있는 권한 (Read)
w : 디렉토리/파일을 생성, 수정, 삭제 권한 (Write)
x : 디렉토리 접근, 파일의 실행권한 (Access/eXute)
- : 해당권한이 없는 경우 (bar)

rwx r-x r-x   : 소유자는 읽기,쓰기,실행 권한을 모두가지고 있다.
      그룹은 읽기, 실행 권한
      기타사용자는 읽기, 실행 권한
rw- --- ---  : 소유자는 읽기, 쓰기 권한이 있고, 그룹, 기타사용자는
                  권한이 없다.

#mkdir /home/real_madrid
#ll       //root root
#chown :RM real_madrid  //root RM
#ll
#su - ronaldo
$pwd       // /home/ronaldo
$cd ..       // /home
$ll       
-----------------------------------------------------------------------------
chmod - 허가권 변경 (change mode)

두가지 모드로 허가권을 변경 할 수 있다.
1. 기호모드 (상대값) (Symbolic Method) - 사람의 입장
2. 숫자모드 (절대값) (absolute Method) - 컴퓨터의 입장

 

기호모드
+ : 허가 권한 부여   u  : 사용자(소유자) 권한
- : 허가 권한 제거   g  : 그룹 권한
=   : 허가 권한 유지   o  : 기타 사용자
s   : SetUID, SetGID   a  : 사용자, 그룹, 기타 사용자 모두
t   : StickyBit

 

기호모드는 대상 (u, g, o, a)에 대하여 rwx권한을 부여할 것인가 제거할 것인가를
모두 기호로 설정 하는 것

ex) dongsam -> rwx  r-x  r-x

1. 기타사용자의 x권한을 제거
chmod o-x dongsam
2. 그룹사용자의 쓰기, 기타사용자 쓰기권한 추가
기존                  -> rwx  r-x  r--
chmod g+w,o+w dongsam -> rwx rwx rw-

 

기호모드
+ : 허가 권한 부여   u  : 사용자(소유자) 권한
- : 허가 권한 제거   g  : 그룹 권한
=   : 허가 권한 유지   o  : 기타 사용자
s   : SetUID, SetGID   a  : 사용자, 그룹, 기타 사용자 모두
t   : StickyBit

 

1. chmod_symbolic 파일의 소유자와 그룹과 기타 사용자에 실행권한 추가
#chmod a+x chmod_symbolic
#chmod u+x,g+x,o+x chmod_symbolic
#ll -> rwx r-x r-x

2. 그룹에 쓰기 권한 추가
#chmod g+w chmod_symbolic
#ll -> rwx rwx r-x

3. 그룹에 쓰기, 실행권한 제거, 읽기만 가능하게 설정
#chmod g-wx chmod_symbolic
------------------------------------------------------------------------------
숫자모드 - 각각의 허가권 필드를 3자리의 8진수로 표기
- 완전한 표기법은 4자리이나 일반적으로 3자리를 사용

2진수 표기 - 1 해당 권한 부여
          0 해당 권한 해제
   
사용자 필드   사용자   그룹  기타 사용자
허가권    r w x   r w x  r w x
자리수    4 2 1   4 2 1   4 2 1
2진수    1 1 1   1 1 1  1 1 1
8진수      7     7            7
    
     r w x   r - -  r - x
     1 1 1   1 0 0   1 0 1
       7                  4                 5
chmod 745 [파일명] - > rwx r-- r-x


     r - x   r - x  - - -
     1 0 1  1 0 1  0 0 0
     4   1        4 + 1          0
       5              5            0
      
     r w -  - - x  - w -
       6    1     2

rwx rwx rwx  -> 숫자모드 (777)
rwx r-x r-x     ->  숫자모드 (755)
rwx r-- ---  ->  숫자모드 (740)

/home/real_mardrid 
messi 계정은 접근 불가능
ronaldo 해당디렉토리 접근 가능, 파일 목록 출력 가능
ronaldo 계정이 chmod_symbolic 수정 가능하게 설정    
     
#chmod -R 000 /home/real_madrid     
#chown -R root:root /home/real_madrid

real_madrid 디렉토리 소유자 root 그룹 root
계정 : ronaldo (그룹:RM)
d --- --- --- real_madrid  root root
- --- --- --- chmod_symbolic  root root

#chown ronaldo: real_madrid
d --- --- --- real_madrid  ronaldo root
#chmod 500 real_madrid
d r-x --- --- real_madrid  ronaldo root
#chmod chmod_symbolic

#mkdir perm_test
#chmod 000 perm_test  // --- --- ---
#cd /perm_test
#touch test_file
#chmod 000 test_file  // --- --- ---
#mv perm_test /     //perm_test 디렉토리 최상위로 '/' 이동

세션 하나 추가 후, 일반 사용자 계정으로 로그인 (ronaldo)
#ll /perm_test    // d --- --- --- root root
ronaldo 계정이 /perm_test 디렉토리로 이동하기 위한 최소 권한 설정 (chmod 사용)
$cd /perm_test 명령이 실행이 되도록 설정
#chmod 001 /perm_test  // --- --- --x
       // 디렉토리 접근을 위해서는 최소 x 권한은 필요
$ls       // 파일 목록 출력 불가능
#chmod 005 /perm_test  // 디렉토리내 파일 목록 확인       
       // --- --- r-x
$ls       // 파일 목록 출력 가능
       // 디렉토리 파일을 보기위해서는 r 권한이 필요
$tocuh test1    // 해당 디렉토리 내에서 파일 생성 test
#chmod 007 /perm_test  // 쓰기 권한 추가
$touch test1    // 파일 생성 테스트       
       // 파일 생성을 위해서는 w 권한이 필요

'운영체제 > Linux' 카테고리의 다른 글

Linux 3 - vi 편집기 및 사용자 계정 생성 및 관리  (0) 2017.03.06
리눅스2  (0) 2017.03.06
리눅스 1  (0) 2017.03.06
리눅스6  (0) 2017.01.23
리눅스 5  (0) 2017.01.23

vi (VIsual editor) & vim (VI iMproved)
vim - vi 기능을 향상 시킨 모드형 편집기

- vim 설치
#yum -y install vim   //vim 설치

#alias vi='vim'    //alias 등록

alias는 한시적으로 저장이 되기 때문에 vi .bashrc를 통해서 영구적으로 vim을 vi로 영구적으로 설정을 할수가 있다.

vi [파일명]  파일이 있을때 : 해당 파일을 수정
             파일이 없을때 : 새로운 파일을 만들며 수정

명령모드 -> 입력모드  : i, a, o
입력모드 -> 명령모드  : ESC
명령모드 -> 실행모드    : ?, /, :

 

대표적인 명령어는 위와 같으며 명령어 vi편집기를 실행할때는 다음과 같이 실행된다.

 

 

실행모드
:w      :저장
:w!      :저장 (강제)
:q      :종료
:q!      :종료 (강제)
:wq      :저장 후 종료
:wq!     :저장 후 종료 (강제)
:[숫자]     :[숫자]라인으로 이동
:set number    :라인 번호를 출력
:set nu     :라인 번호를 출력
/[문자열]    :문자열 검색 (이동키 n, N)

명령모드
dd      :커서가위치한 라인삭제
[숫자]dd    :[숫자]라인만큼 삭제
yy      :복사
p      :붙여넣기
[숫자]yy    :[숫자]라인만큼 복사

gg      :문서 처음
G      :문서 마지막
[숫자]g     :[숫자]라인으로 이동

치환기능
:%s/[OLD]/[NEW]/g

정규표현식 메타문자

 

메타문자  의미
^    행의 시작
$    행의 끝
.    하나의 문자와 대응
[]    []사이의 문자 하나와 대응
[^]    []사이의 문자를 제외한 문자와 대응
A{N\}   A문자를 N번 반복
-----------------------------------------------------------
sort - 파일내의 내용을 알파벳 순서대로 정렬
형식 : #sort [옵션] [파일]
옵션  : -n 숫자를 기준으로 정렬
        : -r 역순으로 정렬

  : -u 중복행 제거 (#uniq)
  : -o 출력과를 파일로 저장

 

sort의 예시

#mkdir /practice/day1/sort_test
#cd /practice/day1/sort_test
#vi sort_test1    //공유폴더 sort_test1복사
#vi sort_test2    //공유폴더 sort_test2복사

#cat sort_test1    //내용확인 (파일내에 아무거나 정열되지 않고 아무렇게 쓰인다는것을 알수 있음.)
#cat sort_test2    //내용확인 (파일내에 아무거나 정열되지 않고 아무렇게 쓰인다는것을 알수 있음.)

 

#sort sort_test2   //영어 기준으로 정렬하여 출력

 

#sort -u sort_test2   //중복되는 문자는 제외하고 출력 -->아까 했던 내용과는 다르다는것을 알수 있음.

 

#sort -n sort_tset1   //숫자를 기준으로 정렬하여 출력


#sort -n sort_test1 -o test123 //숫자기준으로 정렬한 내용을 파일로 저장
#cat test123

 

wc (Word Count) 단어, 라인, 문자 수 계산
형식 : #wc [옵션] [파일]
옵션 -l 라인 수 출력
     -m 문자 수 출력
     -w 단어 수 출력
#wc /etc/resolv.conf
[라인] [단어] [문자]
#wc -l /etc/passwd    //passwd 파일의 라인수 출력

 

#nl /etc/passwd     //passwd 라인수 확인

 

#cat -n /etc/passwd    //passwd 라인수 확인

 


cut - 필드 잘라내기
형식 #cut [옵션] [파일]
옵션 -c 잘라낼 글자 위치를 지정
     -f 잘라낼 필드를 지정
  -d 필드와 필드를 구분하는 문자를 지정 (기본값 tab)
cut 예시

#vi cut_test --> vi로 파일생성 해당 내용 입력
aaa:bbb:ccc:ddd:eee:fff
123:456:678:111:222:333

#cut -c 1 cut_test

제일 앞에 해당되는 문자을 잘라서 보여준다.

 

#cut -c 2 cut_test
#cut -c 3 cut_test

해본결과 입력된 두번째,세번째 열을 출력해준다는 것을 알수가 있다.

 

#cut -c 1-3 cut_test 

#cut -c 1-6 cut_test

이와 마찬가지로 1번쨰부터 6번째 까지 지정해서 뽑아준다는 것을 알수가 있다.

 

#cut -d ":" -f 1 cut_test

필드폭을 지정하여서 출력해주는것을 알수가 있다.

 

#cut -d " " -f 1 /etc/passwd -> 현재 시스템에 존재하는 계정들

둘이 보면 /etc/passwd안에 있는 계정을 보여주는것은 같으나 좌측에 있는것은 필드폭을 지정하여 출력하는것이며, 우측에 있는것은 그런거 없이 그냥 출력하는것을 알 수 가 있다.

 

watch - 주기적으로 지정된 명령 재실행, 결과를 출력
형식 : #watch [옵션] '[명령]'
옵션 : -n [N] : N초 주기로 명령 결과 출력
       -d   : 변경된 부분에 음영 처리

#watch -n 10 ls -al

 

10초 마다 ls -al의 명령어를 결과 출력


파일 디스크립터 (File Discriptor, fd)
- 커널이 리눅스의 일반 파일과 장치 파일 포함한 모든 파일을 관리하는 방식
 
- 표준입력장치 (키보드) fd/0  stdin 
- 표준출력장치 (모니터) fd/1  stdout
- 표준에러장치 (모니터) fd/2  stderr

리다이렉션 (Redirection)
- 표준입력과 출력의 방향을 재 지정하는 방법

명령어 입력 (키보드/표준입력) -> 명령어의 결과 (모니터/표준출력)

출력 리다이렉션
[명령어] 1> [파일]  - 파일 생성 및 덮어쓰기

#cat resolv.conf     //표준입력과 표준 출력
#cat resolv.conf 1> resolv_test
//표준입력 후 결과를 표준 출력이 아닌 파일로 방향 재지정

#date > date_test
#cat date_test
#head -1 resolv.conf > head_test
#cat head_test

#cat > [새로운 파일]
내용 입력 후 + Enter   //내용 입력 후 개행
Ctrl + D       //저장

기존에 파일이 있다면 덮어쓰기
기존에 파일이 없다면 새로생성

Bash쉘에서 파일 덮어쓰기 방지하기 위한 설정
set -o noclobber  //덮어쓰기 방지 Enable
set +o noclobber   //덮어쓰기 방지 Disable

표준 추가 리다이렉션
[명령어] >> [파일] - 파일의 내용을 추가

#ls > ls_test
//ls 명령어의 출력결과를 ls_test파일로 리다이렉션

#date >> ls_test  //date의 출력결과를 ls_test아래 추가하여 저장
#pwd >> ls_test   
#cal >> ls_test
#ls >> ls_test

오류 리다이렉션
#ls error_test    //오류 메세지 발생
#ls error_test 1> err1  //생성 불가능   
#ls error_test 2> err2      //생성 가능

오류 메세지 출력 하지 않기
/dev/null - 리눅스 특수 파일로 파일의 내용을 지우거나
            오류메세지를 해당 파일로 리다이렉션하여 출력하지
   않을 수 있다.
   
#cat err10 1> /dev/null  //없는 파일, 오류 메세지 발생
#cat err10 2> /dev/null     //오류메세지를 출력하지 않음

#cat ls_test 1> /dev/null //표준출력(정상출럭)을 /dev/null로
                              방향을 재지정
       //출력결과 없음
#cat ls_test 2> /dev/null //에러메세지 결과를 /dev/null로 방향을
                              재지정
        
표준 입력 리다이렉션
[명령어] < [파일]
sort < test.txt  //test.txt의 내용을 srot 명령어의 입력으로 받는다.
 
sort < a.txt > b.txt

a.txt의 내용을 정렬한 출력 결과를 b.txt 안에 넣는다.
 

파이프 (pipe)
- 표존 입출력이아닌 프로세스간에 실행되는 입출력을 다음 프로세스에게
  전달하는 방식


[명령어1] | [명령어2]
ls -l | grep '^d' | wc -l  //디렉토리 개수
ls -l | grep '^-' | wc -l //파일 개수

다중 명령어
ERR - 에러 명령어
CMD - 정상 명령어

 

1. CMD1 ; CMD2
- 첫 번째 명령어 부터 순차적으로 실행
- 첫 번째 명령어 실패하여도 반드시 실행

#ls ; date ; cal ; pwd
#sfsef ; date ; pwd ; sdft ; ls

 

2. CMD1 && CMD2
- 첫번째 명령이 에러가 아닐 시 두번째 명령을 실행

[CMD1] && [CMD2] && [CMD3] -> CMD1, 2, 3 정상 출력
[ERR1] && [CMD2] && [CMD3] -> 오류 메시지 출력
[CMD1] && [ERR2] && [CMD3] -> CMD1만 출력 후 에러 메세지 출력
[CMD1] && [CMD2] && [ERR3] -> CMD1,2 출력 후 에러 메시지 출력
즉, 오류메세지 출력 시점에서 종료

 

3. CMD1 || CMD2
[CMD1] || [CMD2] -> CMD1 실행
[ERR1] || [CMD2] -> 에러메세지 후 CMD2 실행

[CMD1] || [CMD2] || [CMD3] -> CMD1만 실행
[CMD1] || [ERR2] || [CMD3] -> CMD1만 실행
[CMD1] || [CMD2] || [ERR3] -> CMD1만 실행
[ERR1] || [ERR2] || [CMD3] -> 오류메세지1, 2 출력 후 CMD3 실행

즉, 명령어가 정상으로 실행된 시점까지만 출력

 

쉘 환경 변수의 종류
1. 지역 환경 변수 (쉘 변수)
2. 전역 환경 변수 (환경변수)
----------------------------------------------------------------------
환경변수의 종류
$PATH   실행 파일을 찾을 경로
$HOME   현재 사용자의 홈디렉토리
$LANG   쉘에서 사용하는 언어
$SHELL      로그인 시 사용하는 쉘
$HISTSIZE  히스토리 파일에 저장되는 개수
$HISTFILE  히스토리 파일 경로
$HOSTNAME     호스트의 이름
$PS1   프롬프트
$SHLVL   쉘 레벨
----------------------------------------------------------------------
지역 환경 변수
- 현재 사용하는 쉘에서만 적용되는 변수
- 변수 선언 및 초기화
 변수명=값  (*주의사항 : 변수명 = 값 ) 공백X
- 변수 해제
 #unset 변수명
- 지역 변수 확인
 #set
- 변수 확인
 #echo $변수명
---------------------------------------------------------------------- 
전역 환경 변수 -모든 쉘에 적용되는 변수

- 변수 선언 및 초기화 
 #export 변수명=값
- 변수 해제
 #unset 변수명
- 전역 변수 확인 명령어
 #env

#LOCAL=test    //지역변수 LOCAL 에 test 대입
#set | grep LOCAL  //지역변수 LOCAL 설정 확인
#echo $LOCAL   //LOCAL 변수 값 확인
#echo $SHLVL   // 현재 쉘 레벨 - 1 
#/bin/bash    // Bash 실행
#echo $SHLVL   // 현재 쉘 레벨 - 2
#echo $LOCAL   // 지역 변수 LOCAL 출력값
#exit
#echo $SHLVL   // 현재 쉘 레벨 - 1
#echo $LOCAL   // test 정상 출력
#unset LOCAL   // 지역 변수 LOCAL 해제
#set | grep LOCAL  // 변수해제 확인
----------------------------------------------------------------------
전역 환경 변수 테스트
#export GLOBAL=test
#env | grep GLOBAL   //전역 변수 설정확인
#/bin/bash     //bin/bash 실행
#echo $GLOBAL    //전역 변수 GLOBAL 확인
#GLOBAL=test2    //2번째 쉘에서 지역변수 GLOBAL
#echo $GLOBAL    //지역변수가 우선 (test2)
#exit      //1번째 쉘로 이동
#echo $GLOBAL    //원래 GLOBAL값인 test

include <stdio.h>
int a=1;
int main(){
 int a=1;

 return 0;
}
#echo $PATH (실행파일있는경로=명령어)

명령어 입력 -> $PATH 변수 확인하여 $PATH에 나열된 경로에서
해당 파일을 순차적으로 찾는다. 이때 파일이 있다면 실행,
없으면 Command Not Found 를 출력

]#./[파일명]

PATH=$PATH:/practice/day7
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin
:/usr/bin:/root/bin:/practice/day7
----------------------------------------------------------------------
Login시 실행되는 파일의 순서
/etc/profile -> /etc/profile.d/*  (모든파일)
~/.bash_profile
~/.bashrc
/etc/bashrc
--------------------------------------------------------------------------------------
/etc/profile - 환경 변수와 bash shell 수행될 때 실행되는 프로그램을
      제어하는 전역적인 시스템 설정과 관련된 파일

/etc/profile.d/* - 디렉토리아래 스크립트가 실행이되면 여러가지
                   변수들이 동작하며 쉘 환경을 제공

~/.bash_profile - 환경 변수와 bash가 수행될 때 실행되는 프로그램을
                  제어하는 지역적인 시스템 설정과 관련된 파일이다.

 ~/.bashrc - 사용자에게 기본으로 적용할 alias 정보가 담겨져 있다.

/etc/bashrc - 사용자가 로그인 하였을때 사용자의 계정에 있는
              .bashrc 파일에 의해서 실행되는 파일이며, 전역적으로
        적용할 alias 및 쉘 환경값 을 설정하고 있는 파일
    
#alias c='clear'   //알리아스 등록
#alias     //알리아스 등록 확인
#c      //알리아스 동작 테스트
#exit 혹은 다른세션 연결 후  //연결해제
다시 로그인 후 c 입력 //알리아스 사라짐
#vi /etc/bashrc
 alias c='clear'  //전역 설정파일에 알리아스 등록
#exit
다시 로그인 후 c 입력 //알리아스 적용 확인
------------------------------------------------------------------------------
사용자 계정 관리
------------------------------------------------------------------------------
/etc/passwd - 사용자 기본 정보 파일 (계정명, UID, GID, 홈디렉토리 SHELL 등)
/etc/shadow - 사용자 패스워드가 암호화되어 담기는 파일 + 패스워드 정책
/etc/group - 그룹의 기본 정보 파일
/etc/gshadow - 그룹의 패스워드가 암호화되어 저장되는 파일

/etc/default/useradd - 사용자 계정 생성 시 기본 정보가 되는 내용을 가지고
                       있는 파일
/etc/login.defs - 시스템 사용자의 전체를 제한하기 위해 사용하는 설정 파일
/etc/skel (디렉토리) 사용자 계정 생성 시 홈디렉토리에 기본적으로 생성되는
                     파일이 있는 디렉토리
------------------------------------------------------------------------------
사용자 계정 생성 과정
(1) useradd 명령어 실행
(2) /etc/default/useradd /etc/login.defs 파일에설정을 참고하여
(3) /etc/passwd, /etc/group 파일에 계정을 추가
(4) 홈디렉토리에 사용자 계정명으로된 디렉토리 생성하고
(5) /etc/skel에 있는 파일들을 사용자 홈디렉토리에 복사
(6) /var/spol/mail 디렉토리에 메일 관련 파일 생성
------------------------------------------------------------------------------
/etc/passwd
[사용자계정명]:[패스워드]:[UID]:[GID]:[코멘트]:[홈디렉토리]:[쉘]

1. 사용자 계정명
 - 사용자 계정명을 나타내며 사용자 정보를 가지고 있는 여러 파일에서
   사용자에 대한 정보를 찾는 기준이된다.
 - 사용자의 이름은 중복되지 않아야 한다.
 
2. 패스워드
 - 'x'의 의미는 패스워드가 암호화되어 /etc/shadow파일에 저장되어 있음을
   나타낸다.

3. UID (User IDentification)
 - 사용자 개인을 숫자로 구별하는 고유 ID이며, root는 0번, 0~99번은 시스템
   관리 계정을위해 예약되어 있으며, 일반 사용자는 보통 500번 부터 시작한다.

4. GID (Group IDentification)
 - 각 사용자 계정은 고유한 그룹ID를 가지고 있다.
 - 사용자 계정 생성 시 그룹을 지정하지 않으면 사용자 계정명과 동일한
   이름으로 그룹도 함께 생성이된다.
 - 그룹번호와 함게 /etc/group 파일에 저장된다.
 - 한사용자는 여러 그룹에 속할 수 있다.

5. 사용자 정보 (Comment)
 - 사용자에대한 정보를 표시하는 필드로 시스템에 영향을 주지 않는 필드이다.
 - 반드시 기록해야하는 것은 아니며, 주로 실제 이름을 기록한다.
 
6. 홈디렉토리
 - 사용자의 홈디렉토리 위치
 - 일반 사용자일 경우 /home 경로에 홈디렉토리가 위치한다.
 - 사용자가 로그인 시 가장 처음에 위치한 디렉토리
 - 반드시 절대경로로 기록
 
7. 로그인 쉘
 - 사용자의 쉘을 정의한다 (기본설정은 /bin/bash)
------------------------------------------------------------------------------
useradd - 사용자 계정 추가
useradd [옵션] [계정명]
옵션  -c : 코멘트
      -d : 홈디렉토리
   -e : 사용종료일자 지정
   -f : 패스워드 유효일자
   -g : 주 그룹
   -G : 보조 그룹
   -s : 쉘 지정
   -u : UID 지정
   -m -k : skel 디렉토리 지정
------------------------------------------------------------------------------
su (Substitute User / Switching User)
su [계정명]   //해당 계정으로 전환하나 환경변수는 바꾸지 않음
su - [계정명]    //해당 계정으로 전환하며 환경변수도 함께 변경
------------------------------------------------------------------------------
계정생성 과정
계정명      : test-user8
계정UID     : 888
사용하는 쉘 : /bin/dash

#useradd -u 888 -s /bin/dash test-user8
#cat /etc/passwd | tail -1

 


passwd - 패스워드 설정
passwd [계정명]   // 해당 [계정명] 의 패스워드 변경 및 설정
passwd      // 현재 로그인한 계정의 패스워드 변경 및 설정
암호 설정
계정명 : test-user7
암호   : 1234
#passwd test-user8
계정명 : test-user8
암호   : 1234
#passwd test-user8

#su - test-user7  //test-user7 계정으로 스위칭 root라 암호없이 가능
$su - test-user8  //암호 입력해야 스위칭 가능
암호입력 1234

$exit     //현재 test-user8 -> test-user7
$exit     //test-user7 -> root
#passwd     //현재 로그인한 계정의 암호를 변경 혹은 설정
암호 password1!
암호 password1!

#passwd test-user7
암호 : 456
암호 : 456

#su - test-user7
$su - test-user8
암호 : 1234
$passwd      //현재 test-user8
현재 암호 입력
새로운 입력 -> 1234 -> password1! -> 쉽게 만들면 암호 설정을 할수 없음

 

'운영체제 > Linux' 카테고리의 다른 글

리눅스4  (0) 2017.03.27
리눅스2  (0) 2017.03.06
리눅스 1  (0) 2017.03.06
리눅스6  (0) 2017.01.23
리눅스 5  (0) 2017.01.23

□ Login
 - 사용자 계정 및 암호를 통해 사용자 인증을 거치는 과정
 - 파일 및 디렉토리에 대해 접근권한 및 사용권한을 얻어 시스템을 사용할
   수 있게 되는 과정
 - 입력한 password는 출력되지 않는다. (GUI제외)

 (1) /etc/passwd 파일에 존재 하는 쉘 환경 확인
 (2) /etc//bashrc와 /etc/profile 파일을 읽음
 (3) 사용자 홈디렉토리에 위치한 .bashrc, .bash_profile 파일을 읽음
 
□ Logout
 xshell : Ctrl + d (연결해제)
 Console : Ctrl + d
     #exit, #logout
 Console에서는 총 6개의 작업창이 제공된다.
 Ctrl + Alt + F1 ~ F6
 
□ 파일의 종류

파일(file) - 관련있는 정보들의 집합
- 파일을 효과적으로 관리하기 위해 디렉토리를 사용
- 파일은 사용목적에 따라 일반 파일, 디렉토리, 심볼릭링크, 장치 파일로 구분

 

(1)일반파일 : 데이터를 저장하는데 주로 사용, 각종 텍스트 파일, 실행 파일, 이미지 파일등 리눅스에서 사용하는 대부분의 파일은 일반파일에 해당

(2)디렉토리 : 리눅스에서는 디렉토리도 파일로 취급, 디렉토리 파일에는 해당 디렉토리에 저장된 파일이나 하위 디렉토리에 대한 정보가 저장

(3)링크파일 : 원본 파일을 대신하여 다른이름으로 파일명을 지정한 것

(4)장치파일 : 리눅스에서는 하드디스크나 키보드 같은 각종 장치도 파일로 취급, 리눅스 시스템에 연결된 장치들을 관리하기 위한 특수파일


□ 디렉토리 계층 구조
- 리눅스에서는 파일을 효율적으로 관리하기 위해 디렉토리를 계층적으로 구성

최상위 디렉토리
- '/'로 표시하며 모든 디렉토리에 상위 디렉토리

하위 디렉토리(서브 디렉토리)
- 디렉토리 아래 있는 디렉토리

상위 디렉토리(부모 디렉토리)
- '..'으로 표시하며 '/' 디렉토리를 제외한 모든 디렉토리는
  상위 디렉토리가 있다.
 
□ 작업 디렉토리(현재 디렉토리)
- 현재 위치한 디렉토리이며 '.'으로 표시

홈 디렉토리
- '~' 물결로 표시하며 각 사용자에게 할당된 디렉토리로 처음 사용자 계정 생성 시 지정

파일과 디렉토리 이름의 규칙
 - 파일과 디렉토리에는 경로명의 구분자로 사용하느 '/'을 사용 할 수 없다.
 - '-', '_' '.'만 사용하며 그외 공백이나 특수기호 사용하면 안된다.
 - 대소문자를 구별하며 '.'으로 시작하면 숨김파일로 간주한다.
 
--------------------------------------------------------------------------
□ 명령어의 구조
1. #[CMD] + [OPTION]
   #[CMD] + [ARGUMENT]
   #[CMD] + [OPTAION] + [ARGUMENT]
2. 대, 소문자 구분
3. 명령어의 도움말
 - 명령어 뒤에 --help 인자를 사용하여 사용방법 및 옵션을 확인 할 수
   있다.
 
 #[CMD] --help
 #[CMD] -h  or  #[CMD] -help
 -man 패키지 설치 후 #man [CMD]
 
 man 패키지 설치
 (1) #yum -y install man
--------------------------------------------------------------------------
□ 기본 명령어

pwd - (Print Working Directory)
- 현재 위치한 경로 확인 (절대 경로)

 

ls - (List Segment)
 -파일 및 디렉토리 목록 출력 

 ※ ls를 통해서 현재 위치에 해당하는 파일 및 디렉토리등을 확인 할 수가 있다.

#ls [option] [file/directory]
 -a 숨김파일을 포함한 경로안에 모든 내용 출력
 -l 리스트형태로 출력 (#ll)
  출력결과 가장첫번째 필드 부분을 확인하여 해당 파일의 종류를 알 수 있음 (- 일반파일, d 디렉토리)
 -F 파일의 형식을 알 수 있는 문자를 추가
 -t 수정된 날짜를 기준으로 출력
 -R 현재 위치를 기준으로 하위 디렉토리 및 파일을 출력
 -h -l과 함께 사용하여 파일 크기를 사람이 보기 쉽게 출력
 -S -l과 함께 사용하여 파일 크기를 기준으로 정렬하여 출력
 
 / : 디렉토리
 * : 실행파일
 @ : 링크파일
 
cd (Change Directory) - 디렉토리 변경
- #cd [디렉토리명]
- 디렉토리 나타내는 특수문자
- #cd / #cd ~  : 로그인한 사용자 홈디렉토리
- #cd ~[계정명]  : 해당 계정의 홈디렉토리로 이동
- #cd -    : 바로 이전의 작업 디렉토리 이동
- #cd ..   : 상위 디렉토리로 이동
- #cd /    : 최상의 디렉토리로 이동

 ※ 현재 디렉토리를 확인한 후 최상위 root로 이동한것

 

□ 절대 경로
 - 최상위 디렉토리 '/' 부터 시작하는 위치
 - 반드시 '/' 으로 시작
 - 루트 디렉토리로 부터 시작하여 특정 파일이나 디렉토리의 위치까지
   이동하면서 거치는 모든 중간 디렉토리의 이름을 표시
 - 특정 위치를 가리키는 절대 경로명은 항상 동일하다
 
□ 상대 경로
 - 현재 작업하고 있는 디렉토리에서의 상대적인 위치
 - '.' 현재 디렉토리 '..' 상위디렉토리
 - '/' 이외에 문자로 시작
 - 상대 경로명은 현재 디렉토리가 어디냐에 따라 달라진다
 
 절대 경로  : cd /windows/10/enterpise
 상대 경로  : cd ../../windows/10/enterpise
 
□ mkdir (Make Directory) - 디렉토리 생성
  mkdir [디렉토리명]
  mkdir [옵션] [디렉토리명]

  옵션 : -p 하위 디렉토리까지 한번에 생성
    -m 기본 권한을 주면서 디렉토리 생성 // 사용X
    복수 지정 가능

#mkdir test       //현재 디렉토리에 test 디렉토리 생성

#mkdir test1 test2 test3 test4  //현재 디렉토리에 test1~4 디렉토리 생성

 
□ rmdir (Remove Directory)
 - 디렉토리 삭제
 - 디렉토리에 파일이 있는 경우 삭제가 되지 않는다.
   빈 디렉토리만 삭제 가능

#rmdir [디렉토리명]

 

 

□ cp (copy) 파일 혹은 디렉토리 복사
   cp [option] [source] [target]
  -i 만약 복사할 대상이 기존에 있다면 사용자에게 덮어쓸지 물어보는 옵션
 -f 기존에 중복된 파일이 있다면 물어보지 않고 강제로 덮어쓰는 옵션
 -v 복사 과정 출력
 -R, -r 디렉토리를 복사할 경우 하위 디렉토리 및 파일을 포함하여 모두 복사
 

cp [option] [source] [target] 
복사 시 두인자가 모두 파일인 경우

#cp /bin/ls /practice/day1/ls_backup  // /bin/ls 파일을 ls_backup으로 복사
- ls_backup 파일이 존재하면 원본파일 덮어쓴다.
- ls_backup 파일이 존재하지 않을 경우 새로 생성이 된다.

복사 시 두번째 인자가 디렉토리 인경우
#cp /bin/ls /practice/day1/
- /practice/day1/ 디렉토리 ls 파일 복사

복사 시 인자를 여러개 지정할 경우
#cp /bin/ls /bin/cp /practice/day1/
- 마지막 인자 [/practice/day1/]는 무조건 디렉토리여야한다.

 

디렉토리 복사하기

#cp -r /bin /practice/day1/bin_backup
- 목적지 디렉토리가 없을 경우 생성된다.
- 디렉토리 내부에 파일도 함께 복사된다.

 

□ mv (move) - 파일 및 디렉토리 이동
  #mv [source] [target]
 -v 실행과정
 -i 중복될 경우 덮어쓸지 물어본다.
 -f 강제로 덮어쓴다.
 
□ mv [file1] [file2] [file3] ... [directory]
-----------------------------------------------------------------------------------
□ rm (Remove) - 파일 및 디렉토리 삭제
  rm [option] [file/directory]

 -f 삭제시 물어보지 않고 강제 삭제
 -r 디렉토리 삭제시 하위 디렉토리 및 파일을 포함하여 삭제
 -i 삭제여부 사용자에게 확인
-----------------------------------------------------------------------------------
□ cat (conCATenate)
- 파일보기 (일반 파일 중 텍스트파일 내용 출력)
cat [옵션] [파일명]
-n 라인번호 포함하여 출력
-b 라인번호 출력, 공백은 제외하고 출력
-----------------------------------------------------------------------------------
touch - 빈파일 생성 및 파일의 생성 시간을 변경
touch [파일명]  // [파일명] 으로된 빈 파일 생성
touch -t YYYYMMDDhhmm [파일명]  //기존 파일일 경우 해당 시간으로 생성 시간 변경
                                //없을 경우 해당 시간으로 생성시간을 정하여 파일
          생성
-----------------------------------------------------------------------------------
□ file - 파일의 형식을 확인
 형식 : file [파일명]
#file /bin/ls  // 실행 파일
#file /etc/passwd // 아스키코드로 구성된 일반 텍스트 파일
#file /root   // 디렉토리
-----------------------------------------------------------------------------------
□ type - 명령어 파일의 위치, bash 내장 명령 여부, alias등의 정보를 확인
#type [파일명]
-----------------------------------------------------------------------------------
□ whereis - 명령어에 대한 바이너리, 소스, (man)메뉴얼 페이지의 위치 확인
#whereis [파일명]
#whereis ls
#whereis file
-----------------------------------------------------------------------------------
□ which - 실행파일 위치 및 alias 여부 확인
  which [파일명]
-----------------------------------------------------------------------------------
□ more - 화면 단위로 파일 내용 출력
  형식 : more [파일]
  space bar - 다음화면출력
  enter key - 한 라인씩 스크롤
q  - 종료

ctrl + f 다음화면으로 이동
ctrl + b    이전화면으로 이동
-----------------------------------------------------------------------------------
□ head - 파일 내용의 첫 10줄만 출력
   head [옵션] [파일명]
 -n [행번호]
 -  [행번호]
 
#head /etc/services   // 처음 10줄만 출력
#head -n 5 /etc/services // 처음부터 5줄만 출력
#head -5 /etc/services  // 처음부터 5줄만 출력
-----------------------------------------------------------------------------------
□ tail - 파일 내용의 마지막 10줄만 출력
  tail [옵션] [파일명]
 -n [행번호]   
 -  [행번호]
 
 ★-f 실시간으로 파일 마지막 내용을 출력★
 
 tail -f /var/log/secure
#tail /etc/services   //마지막 10줄만 출력
#tail -1 /etc/services  //마지막 1줄만 출력
#tail -n 1 /etc/services //마지막 1줄만 출력
-----------------------------------------------------------------------------------
□ nl (number line) - 파일의 각 라인에 번호를 표시
#nl /etc/services
-----------------------------------------------------------------------------------
□ grep  (Globally find Regular-Expression and Print)
- 문자열 검색
grep [옵션] [패턴] [파일]

-i : 대소문자를 구별하지 않는다.
-n : 행번호를 함께 보여준다.
-v : [패턴]을 제외한 나머지를 출력

/etc/service --> filenet

ls abc*

 

□ cal [달력출력]
cal
cal [년도]
cal [월] [년도]

date - 현재시간 확인
date -s "hh:mm:ss"
date -s "YYYY-MM-DD hh:mm:ss"

 

□ 파일링크
파일시스템상에 존재하는 파일이나 디렉토리에 대한 바로가기를 만들때
사용되는 파일

 

1.심볼릭 링크
파일을 가르키는 포인터가 있는 작은 파일을 생성(바로가기)
- 원본 파일을 가리키는 새로운 파일을 생성

ln -s [대상파일명] [링크파일명]

2. 하드 링크
ln [대상파일명] [링크파일명]
 - 기존파일에 새로운 파일명을 추가로 생성
 - 디렉토리 링킹 할수 없으면 같은 파일시스템에 존재 해야한다.

정규 표현식 메타문자

메타문자
^ - 행의시작
$ - 행의마지막
. - 하나의 문자와 대응
[] - 사이에 문자하나와대응
[^] - []사이의 문자를 제외한 문자와 대응

sort - 파일내의 내용을 알파벳 순서대로 정렬
형식 : sort [옵션] [파일]
-n 숫자지준으로 정렬
-r 역순으로 정렬
-u 중복행 제거
-o 출력결과를 파일로 저장

wc - 단어,라인,문자 수를 계산
wc [옵션] [파일]
-l 라인수 출력
-m 문자수
-w 단어수

출력필드 의미 [라인][단어][문자]

'운영체제 > Linux' 카테고리의 다른 글

리눅스4  (0) 2017.03.27
Linux 3 - vi 편집기 및 사용자 계정 생성 및 관리  (0) 2017.03.06
리눅스 1  (0) 2017.03.06
리눅스6  (0) 2017.01.23
리눅스 5  (0) 2017.01.23

리눅스란?
- Unix를 모델로 만든 운영체제
- 정확한 의미는 운영체제의 핵심인 커널(Kernel)을 의미
- 리눅스 커널과 GNU 시스템이 결합된 운영체제

 

리눅스 발전 핵심인물
- 리누즈 토발즈 : Linux Kernl 개발
- 리차드 스톨만 : GNU Project, FSF(Free Software Foundatoin)설립
- 데니스 리치   : C언어와 Unix 개발

 

리눅스 특징
- 오픈소스 운영체제
- 완벽한 멀티태스킹과, 멀티 유저 시스템
- 가상 메모리 지원

 

리눅스 구조
- 커널(Kernel)과 쉘(Shell)

Kernel - 좁은의미의 운영체제, 하드웨어를 제어하는 코드를 통해서 소프트웨어와
         커뮤니케이션을 하며 시스템의 모든 자원을 통제/관리하는 역할


커널 버전 확인 명령어

버전 확인
2.6.32-642.el6.x86_64
<Major>.<Minor>.<Patch>-<update>.el6.x86_64
el6 - RedHat Enterprise Linux 6의 커널을 의미
x86_64 인텔CPU를 사용하는 64bit 운영체제 용

 

최신 커널 다운로드
https://www.kernel.org/

 

- 쉘(Shell)
 - 명령어 해석기라고도 불리우며, 사용자가 입력한 명령어를 커널에게 전달하는 역할을 한다.
 - 사용자에게 편리한 기능을 제공하며, 프로그래밍 기능 (Shell Script)이 내장되어 있다.

 - 어떤 이름의 쉘이건 기본적으로 하는 일은 같다. 다만 변수의 사용방법, 사용되어지는 문법, 그밖의 추가적인 기능들에 있어서 차이가 있을 뿐이다.

그러핚 이유로 하나의 쉘을 사용핛수 있다면, 다른 쉘도 그리 어렵지 않게 사용가능하다.

 

리눅의 구조

  
 Bash (Bourne Again Shell)
 - 본쉘(Bourne Shell) 개량하여 만들었다.
 - 대부분의 리눅에서 Bash Shell을 사용한다.
 
 사용하고 있는 쉘 확인

#echo $SHELL을 통해서 현재 사용가능한 쉘 확인
 /etc/shell
 로그인 시 사용할 Shell 설정
 /etc/passwd
 
- 리눅스 배포판

https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg

여기서 리눅스의 어떤 종류가있는지 확인할 수 가 있다.

RHEL (RedHat Enterprise Linux)
 래드햇이 개발하여 판매하고 있는 상용 리눅스 배포판

CentOS (Community ENTprise Operating System)
 RHEL의 소스코드를 그대로 가져와 로고 변경 후 무료 기업용 컴퓨팅 플랫폼을
 제공할 목적으로 만들어진 운영체제
 
- Xshell
 SSH (Secure Shell) 원격 접속 클라이언트 프로그램

프롬프트 (prompt)
 컴퓨터가 입력을 기다리고 있음을 가리키위 해 화면 나타나는 표시

 - root   : 쉘에 로그인 중인 사용자 계정명
 - @    : 사용자 계정명과 호스트명을 구별하는 구분자
 - Server-A-110 : 호스트명
 - ~    : 현재 작업위치
 - #/$   : # - root 계정을 의미
       $ - 일반 사용자 계정을 의미
--------------------------------------------------------------------------
명령어 및 단축키
 명령어의 형태
  #[명령어] [옵션] [인자]
 단축키
  문자 지우기 - Backspace, delete
  라인 지우기 - Ctrl + u
 
 *주의 사항
 - 명령어 입력전 작업 위치 및 로그인 계정, 서버 확인 후 작업
 - 리눅스는 대소문자 구별 철저히
 
Bash Shell 특징
- 탭 완성 (tab comletion)
 (1)사용하려는 명령의 일부만 입력하고, tab키를 이용하여 완성
 (2)중복되는 문자열/명령어가 있을 경우 한번 더 눌르면 중복되는 목록을 표시

 

- 명령행 히스토리 (history)
 (1)커서 키를 이용하여 이전에 실행했던 명령어를 다시 불러 낼 수 있다.
 (2)긴 명령어 입력 시 오타가 났을때 이전 명령어를 불러와 오타만 수정하여 사용 할 수 있다.
 키보드 방향키 UP, DOWN

 

- alias 기능
 (1) bash shell 내장된 명령어로서 명령어에 별명을 지정하고, 이를 실행
      할 수 있는 기능
  
 #alias      //현재 시스템에 등록된 alias 확인
 #alias [name]='[vaule]'  //[vaule]의[name] 별칭을 지정
 #unailas [name]             //등록된 alias중에 [name] alias 해제
 
- 중괄호 확장 (brace expansion)
 (1) bash에만 있는 기능으로 임의의 문자열을 생성하고 이를 실행 할 수 있는 기능
 (2) 괄호 기반으로 명령어를 확장할 문자열을 콤마(,)로 구분해서 기술 하고 중괄호 앞뒤에는 치환되지 않는 패턴을 적는다.
 
- for loop
 (1) 명령어를 여러번 실행할때 혹은 증가하는 패턴을 처리할 대 유용한 기능
  
- 줄 편집 (Line-Editing) 기능
 (1)bash 명령줄을 편집해서 쓸 수 있는 기능으로, 익숙해지면 작업 효율이 상승된다.
 C\ : Ctrl 키
 C\ + a   //줄의 처음으로 가기
 C\ + e   //줄의 마지막으로 가기
 C\ + r   //역점진 탐색 (Reverse Increment Search)
 C\ + l   //화면에 출력된 내용 지우기 (clear)
 C\ + u   //현재 커서 위치로 부터 그 줄 처음 부분까지 지우기
 C\ + k   //현재 커서 위치로 부터 그 줄 마지막까지 지우기
--------------------------------------------------------------------------
Clear    //화면 지우기
shutdown - 시스템 종료
형식 : #shutdown [옵션] [시간]
-r : 재부팅      (reboot)
-h : 시스템 종료 (halt)
-c : 셧다운 예약 취소 (Cancel)

시간 인자 유형
now : 지금 즉시
+m    : m분후 실행
hh:mm : 몇시:몇분에 실행

시스템 종료    : #shutdown -h now  
시스템 재부팅    : #shutdown -r now
1분 후에 시스템 종료  : #shutdown -h +1

시스템종료 명령어
#halt
#shutdown -h now
#init 0
#poweroff
시스템재부팅 명령어
#reboot
#shutdown -r now
#init 6

'운영체제 > Linux' 카테고리의 다른 글

리눅스4  (0) 2017.03.27
Linux 3 - vi 편집기 및 사용자 계정 생성 및 관리  (0) 2017.03.06
리눅스2  (0) 2017.03.06
리눅스6  (0) 2017.01.23
리눅스 5  (0) 2017.01.23

Crontab 명령 사용 제한하기

- /etc/cron.allow, /etc/cron.deny 파일로 사용자의 접근을 허용/차단 할 수 있다.
- /etc/cron.deny 파일은 기본적으로 생성되어있지만, cron.allow파일은 관리자가
  집적 생성해야한다.
 
/etc/cron.allow 파일이 있을 경우
-> 해당 파일에 명시된 사용자만 사용 가능
1. cron.allow 파일 생성 후 내용에 사용자계정(1) 추가
2. 사용자 계정(1), (2) crontab -e 명령어 실행 테스트

/etc/cron.allow 파일이 없고, cron.deny 파일이 있을 경우
-> cron.deny 파일에 명시되지 않은 사용자만 사용 가능
1. cron.allow 파일 삭제 후 사용자계정(2)를 deny에 추가
2. 사용자 계정(1), (2) crontab -e 명령어 실행 테스트 

/etc/cron.allow, /etc/cron.deny 파일 둘다 없을 경우
-> root 만 사용이 가능
1. /etc/cron.deny 파일의 이름을 /etc/cron/.deny_bk로 변경 후
   사용자 계정(1), (2) crontab -e 명령어 실행 테스트
   root만 실행 가능해야함
  
------------------------------------------------------------------------------
데몬이란?
- 실제 서비스를 제공하는 프로세스의 집합
- xinetd 모드와 standalone 모드로 동작
------------------------------------------------------------------------------
xinitd (eXtended internet server daemon)
- 슈퍼데몬이라고도 하며, 데몬들을 관리하는 데몬
- 외부의 요청이 있을때만 반응하기 때문에 반응속도가 느리지만,
  리소스 소모는 적다.

standalone
- 데몬이 독립적으로 커널상에서 백그라운드 상태로 동작하는 형태
- 슈퍼데몬에 의지하지 않아 외부 요청이 있을때 신속하게 반응 할수있지만,
  동작하지 않을때에도 커널에 상주하기때문에 리소스 소모가 비교적 많다.
------------------------------------------------------------------------------
crond - 지정한 명령이나 스크립트를 특정 시간에 주기적으로 실행할 수 있도록
        해주는 데몬
------------------------------------------------------------------------------
리눅스 마스터 1,2 급 시험용 데몬
ALSA - 사운드 카드 관련 데몬
CUPS - 프린터 관련 데몬
SANE - 스캐너, 비디오 캠 데몬
-----------------------------------------------------------------------------
파일 시스템 관리 I

파일 시스템이란?
- 파일이나 자료를 쉽게 발견 및 접근 할 수 있도록 보관 또는 조직하는 체제
- 파일 저장 및 검색을 용이하도록 유지/관리하며 빠르게 읽고 사용 할 수 있도록
  만들어 놓은 규칙

파일 시스템의 종류
- EXT3, EXT4, XFS, ISO9660

EXT4 (Extended 4 File System)
- 1EB의 최대 파일 시스템 사이즈와 16TB의 최대 파일 사이즈 지원
  서브디렉토리 64000개, 지원 파일은 약 40억개

EXT4 파일 시스템 구조
-크게 Boot Sector와 Block Group으로 구분

Boot Sector
- 부트로더(GRUB)가 저장된다.

Block Group
 슈퍼블록
 그룹 디스크립터 테이블
 블록 비트맵
 아이노드 비트맵
 아이노드 테이블
 데이터 블록
 
inode
 소유자, 소유그룹 정보 - 파일을 소유한 계정 및 그룹정보
 파일 접근 권한 정보 - 파일의 읽기,쓰기,실행 권한에 대한정보
 타임 스탬프 정보 - 파일의 접근, 변경, 수정시간 정보
 파일의 종류, 크기 및 하드링크 수
 파일이 위치한 데이터 블록의 주소
------------------------------------------------------------------------------
Disk의 종류
1. IDE
2. SATA
3. SCSI
4. SAS (Serial Attached SCSI)
------------------------------------------------------------------------------
파티션 (Partition)
하나의 물리적인 하드디스크를 여러 개의 논리적인 디스크로 나누는것

SWAP 파티션
하드디스크 영역을 메모리 처럼 사용하기 위해 만든 파티션
메모리의 용량이 부족할경우 하드디스크를 사용하여 메모리 예비 공간 역할을 함

래드햇 권고
RAM 용량   스왑 용량
2G 이하    RAM2배
2~8 GB    RAM 동일
8~64GB    4G 이상
64GB초과   4G 이상
------------------------------------------------------------------------------
리눅스 파티션
 - 파티션은 주 파티션(Praimary)과 확장(eXtended)파티션, 그리고 논리(logical)
   파티션으로 구분된다.
  
   디스크 하나당 주파티션 4개까지 생성이 가능
   그 이상 파티션이 필요할 경우 확장 파티션을 생성
   확장 파티션은 다시 논리 파티션으로 나누어 지고, 최대 12개까지 생성이 가능
  
파티션 명칭
1번 Disk -> /dev/sda
2번 Disk -> /dev/sdb
3번 Disk -> /dev/sdc

1번 Disk의 1개의 주파티션으로 구성
/dev/sda1

1번 Disk의 2개의 주파티션으로 구성 
/dev/sda1
/dev/sda2

3개의 disk 각각 3개의 주파티션으로 구성
/dev/sda1, /dev/sda2, /dev/sda3 
/dev/sdb1, /dev/sdb2, /dev/sdb3
/dev/sdc1, /dev/sdc2, /dev/sdc3
  
1개의 disk, 6개의 파티션 구성
1번 disk : /dev/sda  
/dev/sda1 (주)
/dev/sda2 (주)
/dev/sda3 (주)
/dev/sda5 (확장)  //데이터 저장 X
/dev/sda6 (논리)
/dev/sda7 (논리)
/dev/sda8 (논리)

-----------------------------------------------------------------------------
df (DiskFree) - 파일 시스템 및 파티션별 자세한 용량 확인
-a 모든 파일 시스템 출력
-i inode 정보 출력
-h 용량을 읽기 쉽게 출력
------------------------------------------------------------------------------
du (Disk Usage) - 특정 디렉토리나 파일의 용량을 확인
-h 용량을 읽기 쉽게 출력
-s 요약
------------------------------------------------------------------------------
fdisk - 파티션 생성, 수정
fdisk [옵션]
fdisk [옵션] [Disk명]
-l 디스크 파티션 정보 출력

 

d   delete a partition    // 파티션 삭제
n   add a new partition    // 파티션 추가
p   print the partition table  // 파티션 정보 출력
t   change a partition's system id  // 파티션 타입 변경
w   write table to disk and exit    // 저장 후 종료

1. Disk 1GB 3개 추가

추가한 disk1 주파티션 100M
    주파티션 나머지 전부
   
추가한 Disk2 주파티션 100M
    주파티션 100M
    주파티션 100M
    주파티션 나머지전부
   
추가한 Disk3 주파티션 100M
    확장파티션 나머지전부
    논리 파티션 100M
    논리 파티션 나머지 전부
-----------------------------------------------------------------------------
mkfs (make filesystem) 파일 시스템 생성
mkfs [옵션] [장치명]
-t 파일 시스템의 타입을 지정

ex) /dev/sdb1 파티션을 ext4 파일 시스템으로 사용
   
추가한 Disk3 주파티션 100M
    확장파티션 나머지전부
    논리 파티션 100M
    논리 파티션 나머지 전부

/dev/sde1  주파티션
/dev/sde5   논리 파티션
/dev/sde6   논리 파티션
3개의 파티션을 ext4 파일 시스템으로 포맷 시작!

디스크추가 -> 파티션생성(fdisk) -> 파일 시스템 생성(mkfs)

mount 특정 디렉토리에 파일 시스템을 탑재 하는 것
- 리눅스는 파일단위로 모든 장치를 관리하기때문에 새롭게 만든 파일시스템을
사용하기위하여 생성된 디스크장치를 임의의 디렉토리 마운트 시켜 사용해야한다.

마운트 포인트 - 파일시스템을 디렉토리 연결시켜야하는데 이때 연결되는
                디렉토리를 의미

mount - 현재 시스템에 마운트된 파티션 정보 확인
#mount       //현재 시스템에 마운트된 파티션 정보 확인
#mount [파티션이름] [마운트 포인트]
#mount -t [유형] -o [옵션] [파티션이름] [마운트 포인트]


마운트 과정
1. 마운트 포인트 생성 (mkdir)

 

/dev/sde1  주파티션
/dev/sde5   논리 파티션
/dev/sde6   논리 파티션
/etc/fstab - 부팅시 마운트할 파일시스템의 위치 및 설정 정보가 정의된 파일
- /etc/fstab파일에 기록되어있는 순서대로 마운트되어 디렉토리 구조가 만들어
  진다.
 
/etc/fstab 필드
1번 필드 - 파일시스템 장치 이름
 - 파일시스템 장치명은 곧 파티들의 위치이며, 장치명 혹은 Label, UUID
   를 사용한다.
  
2번 필드 - 마운트 포인트
 - 등록할 파티션이 어디에 위치한 디렉토리에 연결한것인지 설정하는 필드
 - 마운트할 디렉토리 경로
 
3번 필드 - 파일시스템의 종류
 - 파티션 생성 후 만들었던 파일시스템의 종류를 써주는 필드
 - ex) ext4
 
4번 필드 - 마운트 옵션
 - default - rw, suid, dev, exec, auto , nouser, async 를 적용한다
 
5번 필드 - 덤프 생성 유무
 - 덤프(백업)가 실행 유무 설정하는 필드
 - 옵션 0, 1
 - 0 덤프 기능 DISABLE
 - 1 덤프 기능 ENABLE

6번 필드 - 파일 시스템 체크
 - fsck에 의한 무결성 검사 우선순위를 정하는 필드
 - 0, 1, 2 총가지의 옵션이 존재
 0 : 무결성 검사 안함
 1 : 우선순위 1위를 뜻하며, 대부분 root 파티션에 설정
 2 : 우선순위 2위를 뜻하며, 1순위 검사후 진행할 파티션에 설정
UUID  (Universally Unique IDentifier) - 범용 고유 식별자 
- 하드 디스크 추가 시 혹은 제거 Disk 장치명이 종종 변경될때가
  있는데 이때 /etc/fstab 장치명으로 명시하게되면 해당 장치명이
  변경됬을때 인식하지 못하여 부팅이 안되는 경우 있다.
- 각 Disk의 파티션마다 고유한 ID값으로 명시해주면, 장치명이
  바뀌어도 인식하는데 문제가 없다.
 
#blkid - UUID 확인

/dev/sdb1: UUID=fa1aac02-9424-4bea-858f-5f22bf72f498
/dev/sdb2: UUID=564f2f38-88dc-4685-8d9d-04418e6cf992
/dev/sdb3: UUID=9b5a8e5a-eb0e-41fc-af3b-48b236d0facc
/dev/sdb5: UUID=17e9511b-a775-4dd0-8fcd-c0f2b1810da6
/dev/sdb6: UUID=d4f005c7-379e-4979-897d-59c4f0b585d7
/proc 파일 시스템
- 부팅될때 커널에 의해 생성되는 가상 파일 시스템
- 각종 시스템과 네트워크에 관련된 정보를 포함
- 메모리, 파티션, CPU등 다양한 정보가 있다.
cpuinfo - cpu정보
version - 커널버전
kmsg - 커널 메세지
meminfo - 메모리 정보
mounts - 마운트 정보
--------------------------------------------------------------------------
free - 시스템의 메모리 및 swap 메모리 출력
-m 메가 바이트 단위 출력
-g 기가 바이트 단위 출력
--------------------------------------------------------------------------
swap 파티션 추가
1. 기존에 swap 파티션 장치명 확인
 #fdisk -l     //  장치명 확인 /dev/sda2
2. #swapoff [장치명]  //  스왑해제
3. Disk 추가 후, fdisk를이용하여 파티션 생성
4. 파티션타입(t)을 SWAP으로 지정(82)
5. 설정 출력(P)하여 ID 및 SYSTEM 필드 값 확인
 82 Linux swap / Solaris
6. mkswap [장치명]   //UUID 복사
7. vi /etc/fstab  //기존 swap 필드 주석 혹은 삭제 후
   새롭게 만든 SWAP의 정보를 설정
8. swapon [장치명]  // swap 메모리 활성
9. reboot    // fstab 설정 및 swap 마운트 확인
-----------------------------------------------------------------------------------
RAID (Redundant Array of Inexpensive/Independent Disk)
- 초기에는 disk의 용량이 크지 않고 업그레이드 후 폐기하기에는 아깝고, 그렇다고
  단독으로 쓰기에는 성능이 부족한(Inexpensive) 저장장치를 재활용할 목적으로
  사용.
 
  현재는 Inexpensive 보다는 저장장치 기술이 발전하여 디스크의 용량이 점차 커지
  면서 저장 용량을 늘리는 방식이아닌 데이터 보호 또는 디스크 성능을 개선하기위해
  Independent로 해석을 한다.

  비용절감도 하면서 신뢰성을 높이고, 성능을 향상 시킬 수 있다.
 

Linear RAID
- 선형 RAID는 여러개의 디스크를 연결해 하나의 큰 가상 디스크를 만든다.
- 첫 번째 디스크가 완전히 채워지면 순차적으로 다음 디스크에 데이터를 저장한다.
- 여러개의 디스크가아닌 한개의 디스크에서 입/출력 작업을 실행한다.
- 성능면에서는 별다른 장점이 없으며, 하나의 디크에 오류가 나면
  묶여있는 볼륨 전체에 오류가 나기때문에 안정성이 떨어진다.
- 선형 RAID의 용량은 모든 디스크의 총 용량과 같다.
- 최소 2개 이상의 디스크를 필요한다.
 
VMware 초기화 시킨후에
0.25GB 디스크 9개 추가
----------------------------------------------------------------------------------
Linear RAID 구성
#fdisk -l  //dev/sda를 제외한 /dev/sdb ~ /dev/sdj 까지 9개의 disk 추가 확인

RAID 구성
mdadm

RAID 생성 : mdadm --create [생성할 장치명] --level [레이드레벨] --raid-devices=[디스크 수][disk 장치명들]
RAID 확인 : mdadm --detail --scan
            mdadm --detail [생성할 장치명]
RAID 구성 후 설정 파일 적용
mdadm --detail --scan > /etc/mdadm.conf

linear raid 구성
파티션 생성(fdisk, 타입 fd) /dev/sdb /dev/sdc

RAID0
- 스트라이핑 (striping) RAID라고도 불린다.
- 데이터를 여러 개의 디스크 나누어서 쓰고, 읽어 들임으로서 데이터를 중복해서
  기록하지 않기 때문에 가장 높은 입출력 성능을 제공한다. (가장 큰 장점)
- RAID 0의 용량은 모드 디스크의 총량과 같다.
- 최소 2개의 이상의 Disk를 필요로 한다.
- 데이터 보호기능 없다 ( Fault Tolerant 기능 X)

Fault Tolerant - 결함 감내/장애 내성
- 결함(Fault) 또는 고장 (Failure)이 발생하여도 정상적 혹은 부분적으로
  기능을 수행 할 수 있는 능력/환경

"Linux!" - 한글자 저장하는데 1초라고 가정
Linear RAID - 6초
RAID 0 - 3초

예) 1TB 짜리와 10TB Disk 를 두개 구성
Linear RAID - 총용량 11TB
RAID 0   - 총용량 2TB

Linear RAID를 제외한 RAID 구성 시 동일한 회사의 동일한 용량을 가진 모델로
RAID 구성을하는 것이 안정적
----------------------------------------------------------------------------------
RAID 0
fdisk -l     //RAID0에 사용할 디스크의 장치명 확인
  /dev/sdd, /dev/sde
fdisk /dev/sdd  -> 주파티션 1, 용량 처음부터 끝까지 사용, fd
      /dev/sde  -> 주파티션 1, 용량 처음부터 끝까지 사용, fd
  
fdisk -l /dev/sdd   //타입 Linux Raid Auto Detect 확인
fdisk -l /dev/sde   //타입 Linux Raid Auto Detect 확인
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdd1 /dev/sde1
mkfs -t ext4 /dev/md0
mkdir /RAID-0
blkid      // UUID 확인
vi /etc/fstab     // UUID 및 RAID0 정보 등록
mount /dev/md0 /RAID-0   //마운트
df -h        //마운트 확인
mdadm --detail /dev/md0   //마운트 정보 확인

/proc/mdstat  // RAID 정보 파일
----------------------------------------------------------------------------------
RAID1
- 미러링 (Mirroring) RAID
- 총 Disk 용량 50%만 사용
- 데이터를 여러 번 기록하면서 걸리는 시간때문에 성능이 감소
- 한개의 디스크가 고장이나면 볼륨에서 다른 디스크에 데이터를 사용
- Fault Tolerant기능 제공
- 보통 짝수개의 Disk가 필요

RAID1
/dev/sdf, /dev/sdg를 fdisk 진행 타입 fd로 변경
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdf1 /dev/sdg1
부팅 장치로 사용할 수 없다는 경고 무시 (y입력)
mdadm --detail --scan   //정보 확인
mkfs -t ext4 /dev/md1
mkdir /RAID-1
mount /dev/md1 /RAID-1
df -h      //용량 절반으로 줄어든 것 확인 (Disk 1개의 용량)
blkid   //uuid 확인
vi /etc/fstab   //fstab등록
mdadm --detail --scan > /etc/mdadm.conf

RAID 5
- RAID1처럼 데이터의 안정성도 보장되면서, RAID0처럼 공간 효율성도 좋은 방식
- 최소 3개의 이상의 Disk가 필요하며 보통 5개 이상을 사용한다.
- Disk 오류 발생시 Paraty를 이용하여 데이터 복구한다.
- 각 Disk 용량이 1TB일때 4개의 Disk RAID5 구성 시 3TB만 사용이 가능하다.
  (하드 디크스 개수 - 1 만큼의 공간)
  (Disk 개수가 많을 수록 저장 공간의 효율이 높다)

패리티 (Parity)
- 디스크 장애시 데이터를 재구축하는데 사용 할 수 있는 계산된 값 

RAID5에서 패리티 사용
- 디스크 장애가 발생하면 정상 디스크의 패리티 정보를 사용하여 오류가 발생한
  디스크의 데이터를 재생성 하는데 사용
 
- 대체 하드 디스크에 데이터를 복구하기전에 또 다른 디스크가 고장나면 어레이(RAID)
  의 모든 데이터가 손실된다.
 
EX) 4개의 Disk 구성된 RAID5 저장 방식
    데이터 정보 : 000 111 101 010
 저장 방향 ->
 □ : 패리티
 A  B  C  D
 0   0   0  □
 1   1   □ 1
 1   □  0  1
 □  0   1  0
 
1. D-Disk 부터 A-Disk 까지 각 행에 하나 씩 패리티 데이터를 사용
2. 짝수 패리티를 사용하여 각 디스크 패리티 데이터 값을 계산

 A  B   C   D
 0   0   0  (0)
 1   1  (1)  1
 1  (0   0   1
(1)  0   1   0

  각 행의 0과 1의 값이 짝수.
 
 
  A  B  C  D
 0   0   X  (0)
 1   1   X  1
 1  (0)  X  1
(1)  0   X  0

   첫 번째 행 : 0 0 X 0
   두 번째 행 : 1 1 X 1
   세 번째 행 : 1 0 X 1
   네 번째 행 : 1 0 X 0
  
   각행의 값이 짝수이야 하므로 C-Disk 데이터 예측 가능
   C-disk의 값 : 0 1 0 1

'운영체제 > Linux' 카테고리의 다른 글

리눅스4  (0) 2017.03.27
Linux 3 - vi 편집기 및 사용자 계정 생성 및 관리  (0) 2017.03.06
리눅스2  (0) 2017.03.06
리눅스 1  (0) 2017.03.06
리눅스 5  (0) 2017.01.23

*SetGID
- 프로세스가 실행한 사용자의 그룹소유자가 아닌 파일의 그룹소유자 권한으로 실행된다.
- SetGID가 디렉토리에 설정되어 있는 경우,디렉토리에서 만들어지는 파일이 모두 해당 디렉토리의
  소유권을 갖는다.

 

- SetGID
- 기호모드 (g+s)
- 숫자모드 (2000)

--------------------------------------------------------------------------------------------------------------------------

*StickBit
- 모든 사용자가 생성/수정/삭제가 능한 디렉토리에 적용하며, StickyBit 설정 후에는 해당 파일의 소유자만
  해당 파일을 삭제할 수 있다.
- 삭제만 못하게 만듬.

- StickyBit 설정 방법
- 기호모드 (o+t)
- 숫자모드 (1000)

--------------------------------------------------------------------------------------------------------------------------

*umask - 새로운 파일/디렉토리 생성 시 기본 허가권을 결정하는 기준이 되는 값 (0022)
 디렉토리의 기본 허가권 777
 파일의 기본 허가권 666
 해당 값에서 UMASK 값을 빼고 남은 값으로 기본 허가권이 결정된다.

  디렉토리  파일
기본값  777  666

UMASK  022  022
결정된 허가권 755  644
기호모드  RWX R-X R-X RW- R-- R--

#umask  //현재 설정된 umask 값 확인
#umask [Value] //UMASK 값 변경

- UMASK 값이 높으면 허가권은 낮아진다.

 

*속성 (Attribution)
- 특정 파일이나 디렉토리에 속성을 설정하여 권한과는 다른 개념의 파일을 관리 할 수 있다.

lsattr - 특정 파일에 속성을 확인하고자 할 때 사용
#lsattr -d [디렉토리] //디렉토리 속성 확인
#lsattr -R [디렉토리] //하위 파일까지 확인

 

chattr - 특정 파일에 속성을 변경하고자 할 때 사용

 

속성의 종류

i  속성 (Immutable)
 - 해당파일의 변경, 삭제, 이름변경 뿐 아니라 파일추가, 링크 파일도
  생성 할 수 없다.

a 속성 (Append Only)
 - 해당 파일의 기존 내용에서 추가만 가능하며, 그 외에는 i속성과
  동일하다.

e 속성
 - ext4 포맷을 ext3 포맷으로 변형시켜 주는 것

--------------------------------------------------------------------------------------------------------------------------
#chattr [옵션] [기호+속성] [파일/디렉토리명]

기호
+ 지정한 속성을 추가
- 지정한 속성을 제거
= 기존 속성을 초기화 한 후 지정한 속성만 부여

옵션
-R : 디렉토리내의 서브디렉토리 및 파일을 포함하여 일괄 적용

--------------------------------------------------------------------------------------------------------------------------

*ACL (Access Control List / 접근 제어 목록)
- 디렉토리 및 파일에 특정 사용자/그룹에 ACL이라고 하는 권한을 부여하는 기능이다.

getfacl - 파일과 디렉토리에 ACL 설정 확인
          - ACL이 설정되어 있으면 앞쪽 권한 끝에 + 표시가 생김
#getfacl [옵션] [파일/디렉토리명]
 - d 기본 정보에 대해 확인
 - R 하위 디렉토리 및 파일의 내용 확인

setfacl - 파일과 디렉토리에 ACl 설정
#setfacl [옵션] [규칙] [파일/디렉토리명]

 --------------------------------------------------------------------------------------------------------------------------

[옵션]
 -m (modify) 권한을 수정할 때 사용
 -x 권한을 삭제할 때 사용
 -R 하위 디렉토리 및 파일의 권한을 변경
 -b 권한 및 mask 등 지정한 권한을 전부 제거

  [규칙]
  [u|User]:[Uid|Username]:[rwx|7] - 사용자에 대한 ACL 설정
  [g|grop]:[GID|Groupname]:[rwx|7] - 그룹에 대한 ACL 설정
  [o|other]:[rwx|7] - 기타 사용자에 대한 ACL 설정

 

ex1) #setfacl -m user:I-USER1:rwx S-LV01
=ex2) #setfacl -m u:I-USER1:7 S-LV01

*Default ACL
- 디렉토리는 디폴트 ACL을 설정할 수 있으며, 해당 디렉토리 내에서 생성되는 파일이나 하위 디렉토리의
 기본 ACL이 된다.

ex1)
#setfacl -m default:user::rwx,default:group::rwx,default:other:rwx S-LV03
=ex2)
 #setfacl -m d:u::7, d:g::7, o:7 S-LV03
- 해당 디렉토리내에 생성되는 디렉토리에 대해서 rwx rwx rwx 허가권 설정

*ACL MASK
- 추가되는 허가권을 제어하는 값
  ACL 마스크를 r-- 설정하면, 일치하는 모든 ACL은 자신이 갖고 있는 허가권(rw-)이 효력을 잃게 되어
  r--로 설정이된다.
- 설정된 MASK 값이 우선시 된다. 기존 설정 무효화.

설정된 ACL : rwx rwx rwx
ACL MASK : r-- rw- rwx
적용된 ACL : r-- rw- rwx

--------------------------------------------------------------------------------------------------------------------------

* 프로세스 관리
- 시스템 초기화 프로세스
init - 부팅 시 가장 먼저 실행되는 시스템 초기화 프로세스

프로세스 (Process)
- 커널의 관리 하에 현재 시스템에서 동작중인 프로그램이다.
- 커널은 프로세스 관리를 위해 각 프로세스에게 PCB를 할당한다.
- init을 제외한 모든 프로세스는 부모-자식 관계를 가지고 있다.

PCB (Process Control Block)
- 고유번호 (PID, Process IDentification Nmber)
 커널이 할당하는 프로세스마다 부여되는 고유의 번호
- 우선순위 (Priority)
 운영체제가 스케줄링 하기 위한 정보
- 현재상태 (Current State)
 할당받은 자원 및 프로세스의 상태를 나타내는 정보
- 할당받은 자원의 포인터
- 문맥 저장 영역 (Context Save Area)

--------------------------------------------------------------------------------------------------------------------------

프로세스 종류
1. 데몬 (daemon) 프로세스
  커널에 의해서 실행되고 특정 서비스를 제공한다.

2.부모 (parent) 프로세스
  부모 프로세스는 다른 프로세스를 만들며, init을 제외한 모든 프로세스는
  부모 프로세스를 가지고 있다.
3.자식 (child) 프로세스
  부모 프로세스에 의해서 만들어지는 프로세스이다.
  자식 프로세스는 종료 시 부모 프로세스에게 결과를 전달하고 종료된다.
 

4.고아 (orphan) 프로세스
  자식 프로세스 보다 먼저 부모프로세스가 종료되었을때 해당 자식 프로세스는
  고아 프로세스가되어 init 프로세스가 부모 프로세스가 된다.
 

5.좀비 (Zombie, defunct)
  자식 프로세스의 종료 신호를 부모프로세스가 처리하지 못할 경우, 자식 프로세스는
  좀비 프로세스가 된다.

 

*ps (Processor Status) - 시스템에 동작중인 프로세스 확인
 -e 모든 프로세스 대한 리스트 출력
 -f full format 으로 출력

 -a 다른 사용자들의 프로세스도 출력
 -u 사용자 이름, 시간 등 자세한 정보를 출력
 -x 지금 사용되고 이는 모든 프로세스 출력

 

#ps -ef
UID - 프로세스를 실행 시킨 프로세스의 소유자를 의미
PID - 실행된 프로세스에 부여된 숫자를 의미
PPID - Parents Process ID, 프로세스를 생성한 부모 프로세스의 PID
C - 프로세스 스케줄링을 위한 CPU 사용량, 현재는 사용되지 않는 필드
STIME - 프로세스가 시작된 시간
TTY (Teletype) - 프로세스가 연결된 제어 터미널을 표시 '?' 는 터미널에 연결 되어 있지 않음을 나타낸다.
TIME - 프로세스에 의해 사용된 CPU 사용 시간
CMD - 실행된 프로세스 명 (실행된 명령어)

*kill - 프로세스 종료 명령 (프로세스 신호를 전달하는 명령어)
#kill -[시그널번호/시그널명] [PID]
#kill -l : 시그널 종류 확인

 

*자주 사용하는 시그널
2) SIGINT - 프로세스 종료 (인터럽트)
9) SIGKILL - 프로세스강제 종료
15) SIGTERM - 프로세스 종료
18) SIGCONT - 프로세스 재시작
19) SIGSTOP - 프로세스 정지

ex) #kill -9 [해당 명령어의 PID번호]

 

*프로세스 동작 형태

포어 그라운드 (Foreground Process)
 - 프롬프트에서 입력한 대부분의 명령어는 포어 그라운드 동작
 - 명령어의 실행 과정이나 결과를 화면에 출력
 - 포어 그라운드로 실행되는 프로세스가 종료되길 기다렸다가 종료되면 다시 프롬프트 보여주어
   명령대기 상태로 변환

백 그라운드 (Background Process)
 - 프로세스의 종료 여부에 관계 없이 즉시 명령 대기 상태가 되어
   다른 명령을 실행 할 수 있다.
 - 백그라운드로 실행 시키기 위해 '&'를 붙여 사용
 - 장시간 실행되어야 하는 작업, 프로세스에 주로 사용
 ex) 명령어 &
 작업 번호와 PID 번호를 출력하면서 백그라운드 동작

#sleep [숫자] - 해당 숫자만큼 대기  //빠져나가려면 Ctrl+c
#kill -9 [sleep PID]    //프로세스 강제 종료
#ps -ef | grep sleep   //종료 확인

#jobs - 백그라운드에서 동작하는 프로세스를 확인
#bg - 포어그라운드 작업을 백그라운드로 변경
 #bg %[작업번호]
fg - 백그라운드 작업을 포어 그라운드로 변경
 #fg%[작업번호]

*root 패스워드 분실 시 변경 방법

1. 재부팅
2. grub timeout 카운트가 없어지기 전에 아무 키 입력하여 grub 부팅 메뉴로 진입
3. 부팅 메뉴 수정 (e)
4. 커널이미지(2번째) 옵션 수정 (e)
5. 옵션란에 single 혹은 1 입력 후 Enter
6. b (Booting) 키를 눌러 부팅 시작

*grub 부팅 메뉴에 패스워드 설정 (쉽게 싱글모드(복구모드)로 진입하지 못하게 설정)
1. #grub 입력
2. > 엽에 md5crypt 입력
3. password: 패스워드 입력
4. Encrypted: 내용 복사 $1$Wh4x8/$ohwxcTVSOTnKtcvK0WWDx.
5. quit 입력 - 원래 프롬프트로 나오기
6. #vi /boot/grub/grub.conf 열기
7. boot 밑에(10번행) password --md5 $1$Wh4x8/$ohwxcTVSOTnKtcvK0WWDx. 입력

8. 재부팅
9. grub timeout 카운트가 없어지기 전에 아무 키 입력하여 grub 부팅 메뉴로 진입
10. p 키를 눌러 password 입력 후에부팅 옵션 수정 가능

 

★top★

*프로세스 스케쥴링 데몬
at & cron

cron
- 기능 crontab 파일을 관리
#crontab [옵션]
 -e 사용자의 crontab 편집
 -l crontab 파일의 내용을 출력
 -r crontab 삭제
 -u 사용자 지정

ex) #crontab -u [계정명] -e  // 해당 계정의 crontab 수정
     #crontab -e   // 현재 로그인한 계정의 crontab 수정

crontab 파일의 형식
- crontab 파일은 사용자 별로 생성되며, 해당 파일에 반복할 작업의 내용이 있다.
- 여러개의 작업도 저장할 수 있으며, 한 행에 하나의 작업을 설정한다.

#cat /etc/crontab  // 크론탭 설정 파일 및 형식에 대한 정보를 담고있는 파일

 분 시 일 월 요일 작업 내용
 0~59 0~23 1~31 1~12 0~6 반복할 내용

- 일요일(0), 월요일(1), 토요일(6), 각 항목은 공백으로 구분한다.
- 항목의 갑이 asterisk(*)일 경우 해당 항목의 모든 값을 의미한다.
- ' - ' (hyphen) 두 숫자 사이 포함된 범위 ex) 1-5 (1,2,3,4,5)
- ' , ' (comma)로 구분하여 나열된 숫자 중 일치하는 경우를 뜻한다.
- ' / ' (slash)로 시간 간격을 지정 할 수 있다.

'운영체제 > Linux' 카테고리의 다른 글

리눅스4  (0) 2017.03.27
Linux 3 - vi 편집기 및 사용자 계정 생성 및 관리  (0) 2017.03.06
리눅스2  (0) 2017.03.06
리눅스 1  (0) 2017.03.06
리눅스6  (0) 2017.01.23

+ Recent posts

티스토리 친구하기