성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • 문자열 나누기
  • MFC
  • Boot Code 분석
  • WINAPI
  • ARM Reverse Engineering

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

2013.09.02_4장 파일과 디렉터리
UNIX 프로그래밍

2013.09.02_4장 파일과 디렉터리

2013. 9. 2. 16:05


stat, fstat, lstat 함수 

  #include <sys/stat.h>

  

  int stat(const char *restrict pathname, struct stat *restrict buf);

 

  int fsat(int filedes, struct stat *buf);


  int lstat(const char *restrict pathname, struct stat *restrict buf);

 

  반환값 : 성공시 0 , 오류 시 -1


  ▶ 파일의 속성을 알려준다.

  #include "apue.h"


int main(int argc, char *argv[])
{
  int   i;
  struct  stat buf;
  char   *ptr;

  for( i = 1; i < argc ; i++ )
  {
    printf("%s : ", argv[i]);
    if( lstat(argv[i], &buf) < 0 )
    {
      err_ret("lstat error");
      continue;
    }
  }

  switch(buf.st_mode & __S_IFMT) 
  {
    case __S_IFREG:
      ptr = "regular";
      break;
    case __S_IFDIR:
      ptr = "directory";
      break;
    case __S_IFCHR:
      ptr = "character special";
      break;
    case __S_IFBLK: 
      ptr = "block special";
      break;
    case __S_IFIFO:
      ptr = "fifo";
      break;
    case __S_IFLNK:
      ptr = "symbolic link";
      break;
    case __S_IFSOCK:
      ptr = "sock";
      break;
    default :
      ptr = "** unknown mode **";
  }  
  printf("%s\n", ptr);
  
  return 0;
}



[ls 출력 설명]

   


 


 


  - /etc/vi passwd , 실제로 파일을 열어보면 ls 의 출력부분인 ID는 숫자로 저장되어있다.


 


        (1)     (2) (3)  (4)   (5)   (6)     (7)      (8) 

   -rw-r--r-- 1 root root 1999 9월 2 12:30 passwd



 -rw-r--r--

 첫 글자는 파일과 디렉토리,장치등을 구분하는 기호로 사용하고 나머지 9개 기호는 파일의 사용권한(permission)을 나타냄.(총 10글자)

 


  ▶ 첫번째 기호부분

     '-' 기호 : file

     'd' 기호 : directory

     'c' 기호 : Character device

     'b' 기호 : Block device

     'I'  기호 : link file


  사용권한(permission)을 나타내는 9 글자는 rwxrwxrwx와 같은 형태로 표시

  첫 번째 줄은 'rwxr-xr-x'의 형태로 표시. r 은 읽기(read), w 는 쓰기(write), x 는 실행(execute) 을 뜻함 

  첫번째 글자를 뺀 9개 글자는 각각 3개씩 User , Group, Others(User와 Group을 제외한 나머지) 의 사용권한(Permission) 을 나타낸다. 즉,

 

  ▶ User    : 읽기, 쓰기 허용

      Group  : 읽기 허용

      Others : 읽기 허용


 1

 하드링크 번호로 링크된 파일의 숫자를 뜻합니다. 1이 적혀 있으니 1개의 파일이 링크되었다는 것을 알 수있음.

 root 

 소유자 ID

 root 

 그룹 ID

 1999 

 파일의 크기를 바이트 단위로 표시

 9월2

 파일이 만들어지거나 수정된 날짜

 12:30

 파일이 만들어지거나 수정된 시간을 표시

 passwd

 파일 이름



 사용권한 설정하기

 chmod

 ▶ Permission 을 바꿔주는 커맨드

 

 - symbolic mode ( +기호나 - 기호 사용 )

  chmod u+w smart : User 쓰기허용 추가
  chmod o-wx smart : Others 쓰기, 실행 제외

 - absolute mode ( 8진법을 이용한 퍼미션 설정 )

   r => 4 , w => 2 , x => 1

 

  chmod 444 smart : 0100 0100 0100 => -r--r--r--

  chmod 777 smart : 0111 0111 0111 => -rwxrwxrwx

 

 chown, chgrp

 ▶ user와 group을 바꿔주는 커맨드

  

  chown는 해당 파일(디렉토리)의 user(owner)를 바꾸는 것

  chgrp는 group을 바꾸는 것

  

  chown smart linuxer

  chgrp smart mygroup

  



 /etc/passwd와 /etc/shadow 필드 설명

    /etc/passwd

    

    root:x:0:0:root:/root:/bin/bash

    ①  ②③④  ⑤      ⑥         ⑦


    /etc/shadow 


    uec:$1$WbVWBFex$LwvDKJ896fP92Exq/YwpP1:15950:0:99999:7 : : :

    ①                                  ②                             ③  ④   ⑤  ⑥⑦⑧⑨


① 필드 1 : 사용자명

② 필드 2 : 패스워드(/etc/shadow 파일에 암호화되어 있음)

③ 필드 3 : 사용자 계정 uid

④ 필드 4 : 사용자 계정 gid

⑤ 필드 5 : 사용자 계정 이름(정보)

⑥ 필드 6 : 사용자 계정 홈 디렉토리

⑦ 필드 7 : 사용자 계정 로그인 쉘

① 필드 1 : 사용자명

② 필드 2 : 패스워드 ( "$1$" + [salt] + "$" + [암호화 된 password] )

③ 필드 3 : 패스워드 파일 최종 수정일

④ 필드 4 : 패스워드 변경 최소일

⑤ 필드 5 : 패스워드 변경 최대일

⑥ 필드 6 : 패스워드 만료 경고기간

⑦ 필드 7 : 패스워드 파기 기간(패스워드 파기후 게정 비활성 기간)

⑧ 필드 8 : 계정 만료 기간

⑨ 필드 9 : 예약 필드


※ 참고(shadow의 최종수정일에 대한 세부설명)

15950 / 365 = 43.xxxxx... 

1970(컴퓨터에 내장되어있는 년도) + 43 = 2013 ( 년도 ) 


저작자표시 (새창열림)

'UNIX 프로그래밍' 카테고리의 다른 글

2013.09.10_UNIX_7.7(DLL)~setjmp,longjmp 함수  (0) 2013.09.10
2013.09.03_정리(수정중)  (0) 2013.09.04
2013.09.04_수정중_  (0) 2013.09.04
2013.08.30_UNIX_파일I/O_연산 및 함수  (0) 2013.08.30
2013.08.29_UNIX 프로그래밍_3장_파일 I/O  (2) 2013.08.29
    'UNIX 프로그래밍' 카테고리의 다른 글
    • 2013.09.03_정리(수정중)
    • 2013.09.04_수정중_
    • 2013.08.30_UNIX_파일I/O_연산 및 함수
    • 2013.08.29_UNIX 프로그래밍_3장_파일 I/O
    성엽이
    성엽이

    티스토리툴바