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將日曆時間變換成以年 月 日 時...