2、Linux賬戶權限和編程工具 - 看這一篇就夠了

二、Linux賬戶權限和編程工具

1、Linux文件類型(字符表示)

  • -:普通文件
  • d:目錄文件
  • l:鏈接文件
  • b:塊設備文件
  • c:字符設備文件
  • p:管道文件

2、Linux用戶類別

  • root:這是系統特權用戶類,他們都有訪問root登陸賬號的權限
  • owner:這是實際擁有文件的用戶
  • group:這是共享文件的組訪問權的用戶類的用戶組名稱
  • world:這是不屬於上面3類的所有其他用戶

3、etc/passwd文件

該文件是存放linux所有用戶信息文件

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WsXQAHEi-1587563295927)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200422175010623.png)]

文件格式

  • 賬號名稱:登陸的用戶名
  • 密碼:MD5加密的密碼
  • UID:用戶ID號。0是管理員帳號,1-499保留系統使用,500-65535給一般使用者
  • GID:用戶所屬組ID號
  • 使用者信息說明欄
  • 家目錄:用戶默認所在home目錄
  • shell名稱

4、/etc/shadow文件

存放linux所有用戶的密碼文件

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sON6061V-1587563295930)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200422175029896.png)]
文件格式

  • 帳號名稱:登陸的用戶名
  • 密碼:以MD5加密
  • 最近更動密碼日期
  • 密碼不可被更改的天數
  • 密碼需重新變更天數
  • 密碼變更期限前警告期限
  • 密碼過去恕限時間
  • 帳號失效日期
  • 保留

http://blog.sina.com.cn/s/blog_e75dc4090102x6gq.html Linux下 /etc/shadow 和/etc/passwd的含義

5、/etc/group文件

  • group文件格式:

    groupname:password:gid:user_list

  • groupname:組名稱

  • password:組密碼

  • gid:組識別號

  • user_list:該組用戶清單

6、組的創建與用戶的創建

  • 創建組
    • groupadd groupname
  • 創建用戶並設置默認組
    • useradd -g/G groundname username
    • useradd username
  • 向組添加刪除用戶
    • gpasswd -a/d username groupname
  • 給用戶設置密碼
    • passwd username
  • 刪除組
    • groupdel groupname
  • 刪除用戶
    • userdel -r username

7、Linux文件權限

  • 文件權限位的表示:-rwxrwxrwx r-4 w-2 x-1
  • 第一位表示文件的類型,-表示普通文件,d表示目錄文件,l表示符號鏈接文件
  • 接下來三位表示owner用戶的讀、寫、執行權限
  • 緊接着三位表示group用戶的讀,寫,執行權限
  • 最後三位表示world用戶的讀,寫,執行權限

Linux文件權限管理

  • 規劃用戶以及用戶所屬的組
  • 設置文件所屬的用戶以及所屬的組(chown,chgrp)
  • 給文件賦予相應的權限位(chmod)

chmod

參數 描述
u 該檔案的擁有者
g 與該檔案的擁有者屬於同一個羣體(group)者;
o 其他以外的人
a 所有
+/- 增加/去掉權限
= 設定權限
命令 功能
chmod 755 text 給text文件賦予rwxr-xr-x權限
chmod -R 755 text 給text及其子目錄底下所有文件賦予rwxr-xr-x權限
chmod g+rw abc 爲文件abc的組擁有者增加rw權限
chmod u-x abc 爲abc文件的用戶擁有者去除x權限
chmod o=rw- 爲指定文件abc的其他用戶權限爲rw-
chmod -R a+x abc 爲文件abc及其子目錄底下的所有文件的全體用戶增加x權限

目錄的內容認爲是文件,如果目錄是沒有w權限,則不能該目錄下進行增刪文件操作

chgrp

  • chgrp用來更改文件的組擁有者,其一般格式爲:
    chgrp [option] group file
  • 把文件abc的組擁有者改爲study:
    chgrp study abc
  • 把abc及其子目錄下的所有文件的組擁有者改爲study:
    chgrp -R study abc

chown

  • chown用來更改文件所有者與組擁有者,其一般格式爲:
    chown [option] owner[:group] file
  • 將abc及其子目錄下的所有文件的所有者改爲jjl:
    chown jjl abc
  • 將abc文件的所有者改爲jjl,組擁有者改爲study:
    chown jjl:study abc

特殊的權限

  • 考查/usr/bin/passwd與/etc/shadow的權限,分別爲:-r-s–x--x、-r--------
  • 我們發現/etc/shadow文件沒有寫的權限,那麼普通用戶要修改密碼如何做到修改/etc/shadow文件呢?
  • 這是通過s這個特殊權限實現的。當具有s權限的文件運行時,進程的擁有者不是執行程序的用戶,而是文件的擁有者。
  • 同樣如果文件組用戶執行權限位爲s,表示任何用戶執行該文件,都擁有該組的權限,就好像自己是組的成員一樣。
  • 用chmod命令來設置這些“特殊”的權限位。數值4表示設置文件擁有者的執行權,數值2表示設置文件用戶組的執行權。如:
    chmod 4755 test
    -rwsr-xr-x 1 study study 0 May 25 17:37 test
    chmod 2755 test
    -rwxr-sr-x 1 study study 0 May 25 17:37 test
    chmod 6755 test
    -rwsr-sr-x 1 study study 0 May 25 17:37 test

文件權限掩碼設置-umask

  • 考查root用戶的umask值爲0022

  • 這表示root用戶創建的文件對於組用戶與其他用戶都要去掉2即寫的權限,目的就是防止除root以外的用戶改寫root用戶的文件。

  • 設定了umask的文件權限計算公式:
    newmode = oldmode & ~umask

    文件基數爲666,目錄爲777,即文件無設x位,目錄可設x位。

8、vi/vim

vi是Linux/Unix底下最常用的文本編輯器。vim:vim是vi的升級版本,它不僅兼容vi的所有命令,而且還加入了一些新的特性。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-podULlvP-1587563295932)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200422204735908.png)]

編輯方式

  • 光標定位
    • M 移動光標到頁面中央
    • L移動光標到頁面尾處
    • H移動光標到頁面開始處
    • Ctrl+f向後翻頁
    • Ctrl+b向前翻頁
    • 0移動光標到行首
    • $移動光標到行尾
  • 複製 粘貼 刪
    • nyy 複製光標所在的向下n行內容
    • p在光標處粘貼- 複製的內容
    • ndd刪除光標所- 在向下n行的內容
  • 撤銷和重複
    • u復原前一個動作
    • . 重複前一個動作

插入方式

  • i和I鍵插入:在目前光標處輸入文字,已存在的文字會向後
  • A和a鍵:a爲從目前光標所在的下個字符處開始插入,A爲從光標所在行的最後一個字符開始插入
  • O和o:在目前光標所在下一行處插入新的一行.O爲在目前光標所在處的上一行插入新行
  • R和r 取代:r會取代光標所在的那個字符:R會一直取代光標所在的文字,直到按下ESC爲止

命令方式

  • 退出命令
    • q 退出vi
    • q! 不保存退出
    • wq 保存退出
  • 搜索字符串
    • 輸入/+要查找的字符串
    • 按n鍵重新查找下一個
  • shell切換
    • !+shell命令 如 !ls –l 在vi中使用ls命令
      
    • sp +filename 在同一個vi中編輯兩個文件
      

9、gcc

  • 什麼是gcc:gcc是GNU Compiler Collection的縮寫。最初是作爲C語言的編譯器,現在已經支持多種語言了,如C、C++、Java、Pascal、Ada、COBOL語言等。
  • gcc支持多種硬件平臺,甚至對Don Knuth 設計的 MMIX 這類不常見的計算機都提供了完善的支持

gcc編譯程序的過程

  • 預處理(Pre-Processing)
  • 編譯(Compiling)
  • 彙編(Assembling)
  • 鏈接(Linking)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WegUYNVK-1587563295934)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200422205737825.png)]

選項名 作用
-o 產生目標代碼或可執行文件
-c 通知gcc取消鏈接步驟,即編譯源碼並在最後生成目標文件
-E 只運行C預編譯器
-S **告訴編譯器產生彙編語言文件後停止編譯,產生的彙編語言文件擴展名爲s **
-Idir 將dir目錄加入搜索頭文件的目錄路徑
-Ldir 將dir目錄加入搜索庫的目錄路徑
-llib 鏈接lib庫
-g 在目標文件中嵌入調試信息,以便gdb之類的調試程序調試
-Wall 使gcc對源文件的代碼有問題的地方發出警告

gcc示例

  • gcc -E hello.c -o hello.i(預處理cpp)
  • gcc -S hello.i -o hello.s(編譯cc)
  • gcc -c hello.s -o hello.o(彙編as)
  • gcc hello.o -o hello(鏈接ld)
  • gcc hello.c -o hello(直接編譯鏈接成可執行文件)
  • gcc -c hello.c或gcc -c hello.c -o hello.o(編譯生成目標文件)

10、頭文件與庫文件

  • 在使用C語言和其他語言進行程序設計的時候,我們需要頭文件來提供對常數的定義和對系統及庫函數調用的聲明。
  • 庫文件是一些預先編譯好的函數集合,那些函數都是按照可重用原則編寫的。它們通常由一組互相關聯的用來完成某項常見工作的函數構成。比如用來處理屏幕顯示情況的函數(curses庫)和數據庫訪問例程(dbm庫)等。

頭文件與庫文件位置

  • /usr/include及其子目錄底下的include文件夾
  • /usr/local/include及其子目錄底下的include文件夾
  • /usr/lib
  • /usr/local/lib

11、靜態庫與共享庫

  • 靜態庫(.a):程序在編譯鏈接的時候把庫的代碼鏈接到可執行文件中。
  • 共享庫( .so或.sa ):程序在運行的時候纔去鏈接共享庫的代碼,多個程序共享使用庫的代碼。

生成和使用共享庫

  • 生成共享庫
    • 編譯選項
      • shared: 表示生成共享庫格式
      • fpic:產生位置無關碼(position independent code)
    • 庫名規則:lib+xxx+版本號.so
    • 示例:gcc –shared –fpic test.o –o libTest.so
  • 使用共享庫
    • 編譯選項
      • l:鏈接共享庫,只要庫名即可(去掉lib以及版本號)
      • L:鏈接庫所在的路徑.
    • 示例:
      gcc –o test –L./ -lTest

運行共享庫設置

  1. 拷貝.so文件到系統共享庫路徑下
  2. ldconfig
    1. ld.so.conf,將路徑寫入文件
    2. ldconfig,生效
    3. 更新ld.so.cache
  3. 更改LD_LIBRARY_PATH

12、gdb

什麼是gdb:gdb是GNU debugger的縮寫,是編程調試工具。

gdb功能

  • 啓動程序,可以按照用戶自定義的要求隨心所欲的運行程序。
  • 可讓被調試的程序在用戶所指定的調試的斷點處停住 (斷點可以是條件表達式)。
  • 當程序停住時,可以檢查此時程序中所發生的事。
  • 動態地改變程序的執行環境。

gdb用法

命令 含義
list(l) 列出源代碼
break(b) 設置斷點
info break 查看斷點信息 info functions
run® 運行
continue© 繼續程序運行,直到下一個斷點
step(s) 單步跟蹤,類似於VC中的step into
next(n) 單步跟蹤,類似於VC中的step over
finish 運行程序,直到當前函數返回
util(u) 退出循環
print(p) 查看運行時的變量以及表達式
watch 設置觀察點

設置斷點

  • break
    • info break 查看斷點
    • br linenum 設置某行斷點
    • br functions 設置某個函數斷點
    • br if 條件 根據條件設置斷點

多文件調試

  • 設置斷點
    • br 文件名:行數
    • br 文件名:函數功能名
  • 在多級目錄情況下,要爲gdb加入搜索路徑
    • directory 路徑名

注意:被調試的源文件,在編譯時必須都加-g調試選項

如果我的文章能夠幫到您,可以點個贊!
您的每次 點贊、關注、收藏 都是對我最大的鼓勵!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章