1. 程式人生 > >自學:Unix環境高級編程 第一章 Unix基礎知識

自學:Unix環境高級編程 第一章 Unix基礎知識

unix/linux 自學

1.2 Unix體系結構


  • 內核(kernel):控制計算機硬件資源,提供程序運行環境。

  • 系統調用(system call):內核的接口。

  • 公用函數庫構建在系統調用接口之上。

  • 應用程序既可使用公用函數庫,也可使用系統調用

  • shell是一個特殊的應用程序,為運行其他應用程序提供了一個接口。


1.3 登錄
1.登錄名


  • 系統在其口令文件(通常是/etc/passwd文件)中查看登錄名。

    • 例如:sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh

    • 口令文件中的登錄項由7個以冒號分隔的字段組成,依次是:登錄名,加密口令,數字用戶ID(205),數字組ID(105),註釋字段,起始目錄(/home/sar)以及shell程序(bin/ksh)


2.shell
shell是一個命令行解釋器,它讀取用戶輸入,然後執行命令。
shell的用戶輸入通常來自於終端(交互式shell),或者稱為shell腳本的文件。
1.4 文件和目錄
1.文件系統

  • Unix文件系統是目錄和文件的一種層次結構,所有東西的起點是稱為根(root)的目錄,這個目錄的名稱是一個字符"/"

  • 目錄(directory)是一個包含目錄項的文件。

  • 邏輯上來說,每個目錄項都包含:

    • 文件類型(普通文件還是目錄等)

    • 文件大小

    • 文件所有者

    • 文件權限(其他用戶能否訪問該文件)

    • 文件最後的修改時間

    • 一個文件名

    • 說明該文件屬性的信息

stat和fstat函數返回包含所有文件屬性的一個信息結構。

2.文件名
斜線(/)和空字符不能出現在文件名中。因為斜線用來分隔構成路徑名的各文件名,空字符則用來終止一個路徑名。
創建新目錄時會自動創建兩個文件名:. 和 ..。 . 指向當前目錄, .. 指向父目錄。在最高層次的根目錄中,..和.相同。

3.路徑名
以斜線開頭的路徑名為絕對路徑名(absolute pathname),否則稱為相對路徑名(relative pathname)。相對路徑名指向相對於當前目錄的文件。

例子:列出目錄中所有文件的名字

#include "apue.h"
#include <dirent.h>
int main(int argc, char *argv[])
{
    DIR *dp;
    struct dirent *dirp;
    if(argc != 2)
        err_quit("usage: ls directory_name");

    if((dp = opendir(argv[1])) == NULL)
        err_sys("can‘t open %s", argv[1]);
    while((dirp = readdir(dp)) != NULL)
        printf("%s\n", dirp->d_name);

    closedir(dp);
    exit(0); 
}

但是這個例子直接gcc編譯會出錯,有兩種解決辦法:
1. http://www.yjs001.cn/view/40600113873585292949.html
這個方法跟著做,應該是可以解決問題,但是我並沒有成功....技術分享

2. https://my.oschina.net/zhichi2011/blog/80402
這個方法相對簡單,只要去http://www.apuebook.com/code2e.html下載源代碼,找到apue.2e/lib/error.c,復制到保存例子代碼的文件夾,一起編譯就可以了。

另外:
linux下解壓tar.gz文件的命令是: tar zxvf 文件名.tar.gz
這個鏈接有匯總:http://www.centoscn.com/CentOS/help/2014/0613/3133.html
然後,運行編譯完成的文件時需要添加參數,比如編譯完成後的文件叫做example。
運行時:./example /home
上面的命令會列出home文件夾下的所有文件。

小結:這一章並沒有什麽太多的感想,只是覺得有滿多概念要記,Linux系統不太熟,很多命令不知道,需要現查現用。最後的例子也只能照著敲,裏面具體的原理也並不是很懂。今天就先這樣,睡去了。

自學:Unix環境高級編程 第一章 Unix基礎知識