APUE筆記之系統資料檔案

2021-07-31 05:15:55 字數 2751 閱讀 7498

1. 口令檔案(/etc/passwd 644)

struct passwd

備註:通常有乙個使用者名為root的登陸項,其使用者id是0,也就是超級使用者;通常還有乙個使用者名為nobody的登陸項,其使用者id是65534,一般對該使用者不提供任何特權,只能訪問人人都可讀寫的檔案

加密口令欄位在這裡就是個佔位符"x",實際的加密口令放到了/etc/shadow中

使用者id和組id應該就是當前程序的實際使用者id和實際組id

某些字段可以為空,注釋欄位為空不產生任何影響

home目錄字段記錄的就是該使用者的家目錄

shell欄位一般指定了乙個shell程式用來登陸系統,這裡有多種方法來組織乙個特定使用者登陸系統,常見的有/dev/null、/bin/false、/bin/true、/usr/sbin/nologin等

2. 陰影口令(/etc/shadow 640)

陰影口令檔案主要記錄了使用者賬戶對應的加密口令,每一行中各欄位定義見,這裡不再展開

備註:除了root使用者,其他使用者對陰影口令檔案沒有訪問許可權,從而確保了加密口令不會被洩漏,而普通口令檔案是可以被各使用者自由讀取的

3. 組檔案(/etc/group 644)

組檔案記錄了linux使用者組以及相關資訊,每一行中個字段定義見,這裡不在展開

備註:組檔案的許可權以及訪問的c介面風格跟口令檔案基本相同

4. 賬戶新增/刪除命令

只有root許可權才能新增/刪除賬戶。

[1]. "# useradd 使用者名稱"     - 這條命令只是建立了乙個使用者,它並沒有在/home目錄下建立同名資料夾,也沒有建立密碼,所以使用該使用者名稱是無法登入系統的

[2]. "# useradd -m 使用者名稱"  - 這條命令不但建立了乙個使用者,還會在/home目錄下建立同名資料夾

[3]. "# passwd 使用者名稱"      - 這條命令用於對已經建立的使用者設定密碼,如果是針對本使用者操作則不需要root許可權

[4]. "# adduser 使用者名稱"     - 這條perl命令是對useradd、passwd等命令的封裝,所以簡單的使用該條命令就可以完成賬戶建立和密碼設定等

[5]. "# userdel -r 使用者名稱"  - 這條命令用於刪除乙個已經建立的使用者,其中-r表示同時刪除該使用者的home目錄等相關檔案

5. 其他系統資料檔案

/etc/hosts      - 主機名配置檔案

/etc/networks   - 用來記錄網路資訊

/etc/protocols  - 用來記錄協議資訊

/etc/services   - 用來記錄各網路伺服器所提供的服務

備註:這些檔案對具體linux系統來說不一定是必需的

6. utmp和wtmp檔案

/var/run/utmp檔案記錄了當前登入到系統的各個使用者;/var/log/wtmp檔案記錄了每一次登入和登出事件

who命令的實現就是基於utmp檔案,只是在內容的展現上根據登入終端進行了細分

last命令的實現基於wtmp檔案

7. 時間資訊總結

linux採用日曆時間(計算從2023年1月1日00:00:00以來經過的秒數,資料型別 time_t)來提供基本的時間服務

[1]. time_t time(time_t *time)      --

最基本的時間獲取函式,時間值既可以通過入參獲取,也可以通過返回值獲取

[2]. struct tm *localtime(const time_t *time)   --

struct tm *gmtime(const time_t *time)

time_t mktime(struct tm *time)

localtime是將日曆時間轉換為年月日時分秒格式的本地時間,要注意的是,轉換出來的年份值tm_year + 1900等於當前年份,月份值tm_mon + 1 等於當前月份;

gmtime也是將日曆時間轉換為年月日時分秒格式,但是沒有經過時區變換

mktime則是將年月日時分秒格式時間轉換為日曆時間

[3]. char *asctime(const struct tm *time)   --

char *ctime(const time_t *time)

asctime將struct tm格式的日期時間轉換成格式化的字串形式真實日期,轉換中自動處理了年份和月份的偏移量

ctime將time_t格式的秒數轉換為格式化的字串形式真實日期

[4]. int gettimeofday(struct timeval *tv,void *tz)  --

gettimeofday將日曆時間精確到微秒級別

tz唯一的合法值是null,其他值將產生不確定的結果

posix.1-2008指定該函式已經廢棄,由clock_gettime代替

[5]. int clock_gettime(clockid_t clock_id,struct timespec *time)   --

clock_gettime將獲取的時間進一步精確到納秒級別

clock_id用來選擇不同的時鐘基準,從而使該函式可以獲取不同的系統時間

clock_realtime  - 從1970-1-1 0:0:0開始計時,所以獲取的時間表示精確到納秒級別的日曆時間

clock_monotonic - 從系統啟動開始計時,所以獲取的時間表示系統執行時間

clock_process_cputime_id    - 從本程序啟動開始計時,所以表示本程序的執行時間

clock_thread_cputime_id     - 從本執行緒啟動開始計時,所以表示本執行緒的執行時間

APUE筆記 系統資料檔案和資訊

passwd結構體 include 這個結構體的字段也就是 ect passwd中看到的字段 root x 0 0 root root bin bash bin x 1 1 bin bin sbin nologin daemon x 2 2 daemon sbin sbin nologin etc ...

06 APUE 系統資料檔案和資訊

a getpwent setpwent endpwent include struct passwd getpwent void 成功返回指標,出錯或到過檔案末尾返回 null void setpwent void void endpwent void struct passwd b getpwui...

APUE筆記 第六章 系統資料檔案和資訊

功能 訪問口令檔案中資訊。功能 檢視整個口令檔案。功能 檢視組名或數值組id。功能 搜尋整個組檔案,則須使用另外幾個函式。這三個函式類似於針對口令檔案的三個函式。功能 訪問和設定新增組id。功能 返回與主機和作業系統有關的資訊。兩個函式localtime和gmtime將日曆時間變換成以年 月 日 時...