[위 에] Liux 시스템 데이터 파일 과 정보 - 유 닉 스 환경 고급 프로 그래 밍 독서 노트
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 달력 시간 을 연월일 시 분 초 로 표시 하 는 시간 으로 바 꿀 수 있 습 니 다.시간 에 관 한 조작 함수 가 아직 많 기 때문에 여 기 는 열거 하지 않 고 필요 할 때 매 뉴 얼 을 찾 아 보면 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.