[위 에] Liux 시스템 데이터 파일 과 정보 - 유 닉 스 환경 고급 프로 그래 밍 독서 노트

Liux 시스템 의 데이터 파일 이 매우 많 습 니 다. 이 장 에서 소개 하 는 주요 내용 은 시스템 과 관련 된 일련의 파일 입 니 다. passwd, shadow, group, utmp, wtmp 와 일부 시스템 의 관련 정보 와 시간 에 관 한 조작 을 포함 합 니 다.
1. passwd 파일 (즉 구령 파일)
     암호 파일 은 디 렉 터 리/etc/passwd 파일 에 존재 합 니 다. 시스템 의 사용자 이름, 비밀번호, 사용자 ID, 소속 그룹 ID, 주석, 시작 작업 디 렉 터 리 와 기본 셸 을 저장 합 니 다.암 호 는 초기 에 이 파일 에 기록 되 어 있 었 고 단 방향 암호 화 알고리즘 을 사용 하여 암 호 를 13 개의 읽 을 수 있 는 ascii 문자 집합 으로 암호 화 했다. 즉, 이 13 개의 문자 집합 에 대해 역 연산 을 해서 원래 의 암 호 를 얻 을 수 없다 는 것 이다.그러나 이 파일 을 통 해 비밀 번 호 를 추측 할 수 있 기 때문에 여기 서 추측 하 는 것 은 비밀 번 호 를 지정 할 수 있 습 니 다. 이러한 암호 화 알고리즘 에 따라 암호 화 된 후 passwd 파일 의 암호 화 된 비밀번호 와 대조 할 수 있 습 니 다.그래서 안전 을 고려 하여 현재 Liux 시스템 은 비밀 번 호 를 다른 파일/etc/shadow 에 저장 합 니 다.이렇게 하면 shadow 파일 의 액세스 권한 을 제한 하여 시스템 의 안전성 을 확보 할 수 있 습 니 다.
     우 리 는 다음 과 같은 두 함 수 를 통 해 passwd 파일 의 정 보 를 얻 을 수 있 습 니 다. 다음 과 같 습 니 다.
struct passwd* getpwnam(const char* name);
struct passwd* getpwuid(uid_t uid);

이 두 함 수 는 모두 하나의 passwd 구조 체 를 되 돌려 줍 니 다. 이 구조 체 는 다음 과 같 습 니 다.
           struct passwd {
               char   *pw_name;       /* username */
               char   *pw_passwd;     /* user password */
               uid_t   pw_uid;        /* user ID */
               gid_t   pw_gid;        /* group ID */
               char   *pw_gecos;      /* user information */
               char   *pw_dir;        /* home directory */
               char   *pw_shell;      /* shell program */
           };

이것 은/etc/passwd 파일 의 각 필드 를 포함 합 니 다.첫 번 째 함 수 는 사용자 이름 을 지정 하고, 두 번 째 함 수 는 사용자 ID 를 지정 합 니 다.함수 가 성공 하면 바늘 을 되 돌려 줍 니 다. 이 바늘 은 정적 저장 영역 을 가리 키 고 있 습 니 다.그렇지 않 으 면 함수 실행 에 실패 하면 NULL 로 돌아 갑 니 다.
     passwd 파일 을 옮 겨 다 니 려 면 세 개의 함 수 를 사용 해 야 합 니 다:
       #include <sys/types.h>
       #include <pwd.h>

       struct passwd *getpwent(void);

       void setpwent(void);

       void endpwent(void);

getpwent 함 수 는 매번/etc/passwd 파일 에서 passwd 기록 을 읽 고 정적 저장 영역 에 저장 합 니 다.매번 호출 할 때마다 이 정적 저장 영역 을 다시 작성 합 니 다. 즉, 지난번 에 getpwent 를 호출 하여 돌아 온 값 이 덮어 집 니 다.getpwent 를 호출 할 때/etc/passwd 파일 이 열 리 지 않 으 면 자동 으로 파일 을 엽 니 다.setpwent 의 역할 은 이 파일 을 passwd 파일 의 첫 번 째 로 되 돌 리 는 것 입 니 다. 따라서 getpwent 함 수 를 호출 하면 첫 번 째 기록 으로 돌아 가 고 다시 호출 하면 두 번 째 기록 으로 돌아 갑 니 다. 등등.endpwent 함 수 는 열 린/etc/passwd 파일 을 닫 는 데 사 용 됩 니 다.이 세 가지 함 수 는 getpwnam 과 getpwuid 를 실현 하 는 데 사용 할 수 있다.
2. group 파일 (즉 그룹 파일)
     그룹 파일 은 그룹의 정 보 를 저장 하 는 데 사 용 됩 니 다. 이 파일 은/etc/group 파일 입 니 다.이 파일 에는 그룹 이름, 그룹 비밀번호, 그룹 ID, 그룹 구성원 목록 이 포함 되 어 있 습 니 다.passwd 에 대한 조작 과 유사 합 니 다. 그룹 에 대한 조작 도 다음 과 같은 함수 가 있 습 니 다.
       #include <sys/types.h>
       #include <grp.h>

       struct group *getgrnam(const char *name);

       struct group *getgrgid(gid_t gid);

얻 은 group 의 정 보 는 group 구조 체 의 정적 저장 영역 에 저 장 됩 니 다.이 구조 체 의 구 조 는 다음 과 같다.
           struct group {
               char   *gr_name;       /* group name */
               char   *gr_passwd;     /* group password */
               gid_t   gr_gid;        /* group ID */
               char  **gr_mem;        /* group members */
           };

첫 번 째 멤버 는 그룹 명, 두 번 째 멤버 는 그룹 비밀번호, 세 번 째 멤버 는 그룹 ID, 네 번 째 멤버 는 해당 그룹 에 속 하 는 멤버 다.그룹 을 조작 할 수 있 는 함수 가 세 개 더 있 습 니 다.
       #include <sys/types.h>
       #include <grp.h>

       struct group *getgrent(void);

       void setgrent(void);

       void endgrent(void);

이 세 가지 함 수 는 passwd 를 조작 하 는 세 가지 함수 와 매우 비슷 하 므 로 여기 서 는 말 하지 않 겠 습 니 다.
     그룹 ID 를 추가 하 는 것 은 한 사용자 에 게 그룹 을 추가 하 는 데 쓰 인 다.그룹 ID 추가 에 사용 할 동작 은 다음 과 같 습 니 다.
       #include <sys/types.h>
       #include <unistd.h>

       int getgroups(int size, gid_t list[]);

       #include <grp.h>

       int setgroups(size_t size, const gid_t *list);

3. utmp, wtmp, uname
     utmp 와 wtmp 두 파일 은 현재 시스템 에 로그 인 한 사용자 와 시스템 의 로그 인 및 로그아웃 사건 을 기록 하 는 데 사 용 됩 니 다.사용자 가 시스템 에 로그 인 할 때마다 utmp 기록 을 작성 하고 이 기록 을 utmp 파일 과 wtmp 파일 에 기록 합 니 다. 이 기록 은 다음 과 같 습 니 다.
struct utmp
{
  char ut_line[8];
  char ut_name[8];
  long ut_time;
}

utmp 는 현재 시스템 의 로그 인 사용 자 를 기록 하 는 데 사용 되 며, wtmp 파일 은 시스템 의 로그 인 과 로그아웃 기록 을 기록 하 는 데 사 용 됩 니 다.로그아웃 할 때마다 utmp 파일 에 해당 하 는 사용자 이름 을 삭제 하고 로그아웃 한 사용자 정 보 를 wtmp 에 추가 합 니 다.쓰다  who  명령 은 현재 시스템 에서 로그 인 한 사용 자 를 볼 수 있 습 니 다. 사용  who /var/log/wtmp 는 시스템 의 로그 인 및 로그아웃 이 벤트 를 보 거나 사용 할 수 있 습 니 다.  last  명령 도 시스템 로그 인과 로그아웃 이 벤트 를 볼 수 있 습 니 다.
     uname 이 함 수 는 시스템 과 관련 된 정 보 를 얻 는 데 사 용 됩 니 다. 함수 원형 은 다음 과 같 습 니 다.
       #include <sys/utsname.h>

       int uname(struct utsname *buf);

이 함수 가 성공 적 으로 실행 되면 매개 변수 buf 가 지정 한 ustname 구조 체 에 시스템 정 보 를 입력 합 니 다.ustname 구조 체 는 다음 과 같 습 니 다.
           struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* OS release (e.g., "2.6.28") */
               char version[];    /* OS version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

4. 시간 과 날짜
     Liux 에서 시간의 기록 은 1970 년 1 월 1 일 0 시 0 분 0 초부 터 지나 간 초 로 달력 시간 이 라 고 합 니 다.다음 함수 로 가 져 올 수 있 습 니 다:
       #include <time.h>

       time_t time(time_t *t);

함수 가 성공 하면 매개 변수 가 지정 한 내 에서 이 달력 시간 을 작성 하고 이 달력 시간 을 되 돌려 줍 니 다.달력 시간 을 함수 로 바 꿀 수 있 습 니 다. 읽 을 수 있 습 니 다.예 를 들 면:   localtime   화해시키다   gmtime   달력 시간 을 연월일 시 분 초 로 표시 하 는 시간 으로 바 꿀 수 있 습 니 다.시간 에 관 한 조작 함수 가 아직 많 기 때문에 여 기 는 열거 하지 않 고 필요 할 때 매 뉴 얼 을 찾 아 보면 됩 니 다.

좋은 웹페이지 즐겨찾기