鳥哥的Linux基礎篇整理---1

1、在 Linux 這個系統當中,幾乎所有的硬件裝置文件都在/dev 這個目錄下。

2、幾個重要的存儲文件
      1)、 /etc/passwad :所有的系統上的賬號與一般身份使用者,還有那個 root 的相關信息
  1. root:x:0:0:root:/root:/bin/bash
  2. daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
  3. bin:x:2:2:bin:/bin:/usr/sbin/nologin
  4. sys:x:3:3:sys:/dev:/usr/sbin/nologin
  5. sync:x:4:65534:sync:/bin:/bin/sync
  6. ......
       passwd文件由許多條記錄組成,每條記錄佔一行,記錄了一個用戶帳號的所有信息。每條記錄由7個字段組
成,字段間用冒號“:”隔開,其格式如下:
      username:password:User ID:Group ID:comment:home directory:shell
      值得一提的 password 該帳號的密碼是經過加密處理的。daemon、bin等,這些帳號有着特殊的用途,一般用
於進行系統管理。這些帳號的口令大部分用(x)號表示,代表它們不能在登錄時使用。
      2)、/etc/shadow:存放賬戶的真是密碼,只有root用戶才能看
  1. whoopsie:*:16365:0:99999:7:::
  2. avahi:*:16365:0:99999:7:::
  3. lightdm:*:16365:0:99999:7:::
  4. pulse:*:16365:0:99999:7:::
  5. colord:*:16365:0:99999:7:::
  6. hplip:*:16365:0:99999:7:::
  7. joey:$6$enM1lo0k$xWyqfa5UhlDMQuaANeeiBUS.d0cqheaK0UOd4d4Iz1sEgPQr86QIc9QrHuMXBMS8rV
  8. pz/zQTGgQSrpvc6SNOt/:17261:0:99999:7:::
         可以看到都是經過加密的。它的每個條目有7個域,分別是名字:密碼:用戶id:組id:用戶信息:主目
錄:shell 
        3)、/etc/group:用戶組的配置文件,內容包括用戶和用戶組,並且能顯示出用戶是歸屬哪個用戶組或哪
幾個用戶組,因爲一個用戶可以歸屬一個或多個不同的用戶組。
  1. root:x:0:
  2. bluetooth:x:121:
  3. pulse:x:122:
  4. pulse-access:x:123:
  5. colord:x:124:
  6. joey:x:1000:
  7. sambashare:x:125:joey
         格式:group_name:passwd:GID:user_list.
         passwd密碼也是加密的;
         user_list 每個用戶之間用,號分割;本字段可以爲空;如果字段爲空表示用戶組爲GID的用戶名;
         新增加一個用戶並將其列入一個已有的用戶組中需要用到 useradd 命令。如果還沒有這個用戶組,可以先創建該用戶組 useradd -G {group-name} username
  1. root@Joey:/etc# cat group | grep "joey"
  2. joey:x:1000:zhaoyuan
  3. root@Joey:/etc# useradd -G joey liuyu
  4. root@Joey:/etc# cat group | grep "joey"
  5. joey:x:1000:zhaoyuan,liuyu

3、切換用戶的命令
      su/su -  用戶名。 需要密碼的輸入密碼即可。如果超級權限用戶root向普通或虛擬用戶切換不需要密碼.
  1. root@Joey:/etc# su joey
  2. joey@Joey:/etc$ su sambashare
  3. No passwd entry for user 'sambashare'
  4. joey@Joey:/etc$ su
  5. Password:
  6. root@Joey:/etc#
  1. root@Joey:/etc# su - joey
  2. joey@Joey:~$
         su命令和su -命令最大的本質區別就是:前者只是切換了root身份,但Shell環境仍然是普通用戶的Shell;
而後者連用戶和Shell環境一起切換成root身份了。只有切換了Shell環境纔不會出現PATH環境變量錯誤
        sudo 表示獲取臨時的root權限命令,命令執行完成後,直接退回到當前用戶。

4、Linux中各個類型的文件的詳解。
  1. -rw-r--r-- 1 xp022430 domain_users 16246 May 15 10:32 AndroidManifest.xml
  2. -rw-r--r-- 1 xp022430 domain_users 1010 May 12 15:27 Android.mk
  3. drwxr-xr-x 2 xp022430 domain_users 4096 May 12 15:27 assets
  4. /dev下面的
  5. crw------- 1 root root 10, 234 May 18 16:50 btrfs-control
  6. drwxr-xr-x 3 root root 60 May 18 16:50 bus
  7. lrwxrwxrwx 1 root root 3 May 18 16:50 cdrom -> sr0
  8. brw-rw---- 1 root disk 7, 0 May 18 16:50 loop0
  9. brw-rw---- 1 root disk 7, 1 May 18 16:50 loop1
       第一 欄
              當是[ d ]則是目錄。
              當是[ - ]則是文件。
              當是[ l ]則表示爲連結檔(link file),類似 Windows 系統底下的快捷方式啦
              當是[ b ]則表示爲裝置文件裏面的可供儲存的接口設備(可隨機存取裝置);區塊(block)設備檔,就是一些
                            儲存數據, 以提供系統隨機存取的接口設備
              當是[ c ]則表示爲裝置文件裏面的串行端口設備,如鍵盤、鼠標等字符(character)設備文件。這些設備
                           的特色就是『一次性讀取』的,不能夠截斷輸出。 舉例來說,你不可能讓鼠標跳到另一個畫面。
              當是[ s ]則表示爲資料接口文件(sockets)。最常在/run 或/tmp 這些個目錄中看到這種文件類型了。
              當是[ p ]則表示爲數據輸送文件(FIFO, pipe):FIFO 也是一種特殊的文件類型,他主要的目的在解決多個
                           程序同時存取一個文件所造成的錯誤問題。 FIFO是 first-in-first-out 的縮寫。

      第二欄:
              表示有多少檔名連結到此節點(i-node):每個文件都會將他的權限與屬性記錄到文件系統的 i-node 中,
       不過,我們使用的目錄樹卻是使用文件名來記錄, 因此每個檔名就會連結到一個 i-node 囉!這個屬性記錄的,
      就是有多少不同的檔名連結到相同的一個 i-node 號碼去就是了。
 
      第三欄:表示這個文件(或目錄)的擁有者賬號。

     第四欄: 表示這個文件的所屬羣組

     第五欄:爲這個文件的容量大小,默認單位爲 bytes;

     第六欄:爲這個文件的建檔日期或者是最近的修改日期:

     第七欄:爲這個文件的檔名,這個字段就是檔名了。比較特殊的是:如果檔名之前多一個『 . 』,則代表這個
                    文件爲『隱藏檔』。
5、文件和目錄的權限的含義。
      目錄與文件的權限意義並不相同,這是因爲目錄與文件所記錄的數據內容不相同所致。(按照Linux裏面都因
該說是文件,目錄是目錄類型的文件)。
      1)、對於文件裏面存儲的是數據所以:
                 r: 代表當前文件可以被讀
                w:代表當前文件可以被修改,一定要注意它控制不了這個文件是否能被刪除。 還有個問題,你想修
                      改,必須有r不然丫的根本打不開!
                x:代表當前文件可以被執行,就是運行。在windows下通過後綴.exe等來判斷的這個是通過權限。
       2)、存放的文件或者目錄名列表結構。
                r:代表可以讀去當前目錄下都有哪些內容,就是 ls可以顯示。
                如下沒有可讀權限的時候,可以看到什麼也不顯示了。
  1. d--x--x--x 2 xp022430 domain_users 4096 May 26 15:10 TestMode
  2. cnbjlx24729:/media/$ cd TestMode/
  3. cnbjlx24729:/media/TestMode$ ls
  4. ls: cannot open directory .: Permission denied
                 w:代表可以去修改當前目錄下的文件結構,如:新建文件/目錄、刪除文件/目錄(和文件本身的權限
                        無關)、重命名等等
  1. dr-xr-xr-x 2 xp022430 domain_users 4096 May 26 15:10 TestMode
  2. cnbjlx24729:/media/TestMode$ rm TestFile.txt
  3. rm: cannot remove TestFile.txt’: Permission denied
                  即使文件本身就有w權限
  1. cnbjlx24729:/media/TestMode$ ls -l
  2. -rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt
  3. cnbjlx24729:/media/TestMode$ rm TestFile.txt
  4. rm: cannot remove TestFile.txt’: Permission denied
                   x:代表的是用戶能否進入該目錄成爲工作目錄,說白了就是能不能進去這個文件。
  1. dr--r--r-- 2 xp022430 domain_users 4096 May 26 15:10 TestMode
  2. drwxr-xr-x 3 xp022430 domain_users 4096 May 12 15:27 tests
  3. cnbjlx24729:/media/$ cd TestMode/
  4. bash: cd: TestMode/: Permission denied
          注意root用戶其實是不受任何權限影響的即使比如root是所有者,你把所有者的權限也改爲不可r,不起作
用的。
          綜上:要開放目錄給任何人瀏覽時,應該至少也要給予 r 及 x 的權限,但 w 權限不可隨便給!因爲這樣它就
可以刪除你的文件了,即使不能修改文件內部的內容。

6、修改羣組、所有者、權限。
       1)、chgrp :改變文件所屬羣組,注意只有root用戶纔可以使用
              格式:chgrp (-R) groupname filename     -R遞歸
  1. root@Joey:/home/joey/Desktop# ls -l
  2. drwxrwxr-x 2 joey joey 4096 5 31 21:47 Test.txt
  1. root@Joey:/home/joey/Desktop# chgrp zhaoyuan haha.txt
  2. root@Joey:/home/joey/Desktop# ls -l
  3. -rw-rw-r-- 1 joey zhaoyuan 7 5 31 21:53 haha.txt
        2)、chown :改變文件擁有者,也是root用戶纔可以哦。
               chown [-R]   用戶名稱:[組名]    文件   組名字可以省略。
  1. root@Joey:/home/joey/Desktop# ls -l
  2. -rw-rw-r-- 1 joey zhaoyuan 7 5 31 21:53 haha.txt
  3. root@Joey:/home/joey/Desktop# chown zhaoyuan haha.txt
  4. root@Joey:/home/joey/Desktop# ls -l
  5. -rw-rw-r-- 1 zhaoyuan zhaoyuan 7 5 31 21:53 haha.txt
         3)、chmod :改變文件的權限, SUID, SGID, SBIT 等等的特性,root用戶使用。
                chmod兩種方式:(此處不介紹文件的權限描述位)
                    a、數字:
                          r  w  x 分別對應 4 2 1 ,也好記就是111二進制這種形式換算出來的數。
                          例子:chmod 754(權限) filename
                    b、字母:
                          u-----user, g-----group, o-----others,a------all。
                          +、-、=:分別對應宇添加、去掉某某權限。
                          例子:chmod u+x haha.txt  爲文件所有者添加x權限
  1. root@Joey:/home/joey/Desktop# ls -l
  2. -rw-rw-r-- 1 zhaoyuan zhaoyuan 7 5 31 21:53 haha.txt
  3. root@Joey:/home/joey/Desktop# chmod u+x haha.txt
  4. root@Joey:/home/joey/Desktop# ls -l
  5. -rwxrw-r-- 1 zhaoyuan zhaoyuan 7 5 31 21:53 haha.txt
  1. root@Joey:/home/joey/Desktop# chmod a+x haha.txt
  2. root@Joey:/home/joey/Desktop# ls -l
  3. -rwxrwxr-x 1 zhaoyuan zhaoyuan 7 5 31 21:53 haha.txt

7、Linux中的文件後綴。
      基本上,Linux 的文件是沒有所謂的擴展名的,我們剛剛就談過,一個 Linux 文件能不能被執行,與他的第一欄的
十個屬性有關, 與文件名根本一點關係也沒有。
      還有就算具有x可執行權限,但也不一定能執行,具有『可執行的權限』以及『具有可執行的程序代碼』是
兩回事!這個 x 代表這個文件具有可執行的能力, 但是能不能執行成功,當然就得要看該文件的內容。
      Linux 系統上的文件名真的只是讓你瞭解該文件可能的用途而已, 真正的執行與否仍然需要權限的規範纔行!
     *.sh : 腳本或批處理文件 (scripts),因爲批處理文件爲使用 shell 寫成的,所以擴展名就編成 .sh 囉;
     *Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮文件。這是因爲壓縮軟件分別爲 gunzip, tar 等等的,由於不
                                                       同的壓縮軟件,而取其相關的擴展名
     *.html, *.php:網頁相關文件,分別代表 HTML 語法與 PHP 語法的網頁文件。

8、Linux命令小發現。
      發現好多Linux命令都是     命令  來源處  目的地。
       如:cp   來源文件 目標文件。
      還有一個小技巧。當一個命令你不知道格式和參數的時候後  命令 --help。
      如:ls --help

9、Linux系統的目錄配置。
     Filesystem Hierarchy Standard (FHS)標準 FHS 的重點在於規範每個特定的目錄下應該要放置什麼樣子的數
而已。 這樣做好處非常多,因爲 Linux 操作系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨
特風格。
      FHS 所定義的三層主目錄爲:/, /var, /usr 三層而已。注意 usr是 Unix Software Resource 的縮寫, 也就是
『Unix 操作系統軟件資源』所放置的目錄,而不是users。
      常見的系統目錄。
      /etc/, /boot, /usr/bin, /bin, /usr/sbin, /sbin, /dev, /var/log, /run
     /etc/:幾乎系統的所有配置文件案均在此,尤其 passwd,shadow
     /boot:開機配置文件,也是預設擺放核心 vmlinuz 的地方
     /usr/bin, /bin:一般執行檔擺放的地方
     /usr/sbin, /sbin:系統管理員常用指令集
     /dev:擺放所有系統裝置文件的目錄
     /var/log:擺放系統註冊表文件的地方
     
 10、特殊的幾個符號代表的路徑。
         / 代表根目錄
         . 代表此層目錄
         .. 代表上一層目錄
         - 代表前一個工作目錄 (上一個工作目錄和上層目錄是有區別的,如下)
  1. cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2$ cd frameworks/base/core/
  2. cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2/frameworks/base/core$ cd -
  3. /media/xp022430/source/projects/pre-o-yoshino2
  4. cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2$
  5. 就到了你上次所在的目錄
  6. 再比如:你好可以實現往前跳。
  7. cnbjlx24729:~$ cd -
  8. /media/xp022430/source/projects/pre-o-yoshino2/frameworks/base
  9. cnbjlx24729:/media/xp022430/source/projects/pre-o-yoshino2/frameworks/base
          ~ 代表『目前用戶身份』所在的家目錄
          ~account 代表 account 這個用戶的家目錄(account 是個賬號名稱)
          根目錄的當前目錄和上層目錄是一樣的
  1. xp022430@cnbjlx24729:/$ ls -la
  2. total 116
  3. drwxr-xr-x 26 root root 4096 May 17 07:57 .
  4. drwxr-xr-x 26 root root 4096 May 17 07:57 ..
  5. drwxr-xr-x 2 root root 4096 May 18 07:56 bin
  6. 可以看到權限屬性一模一樣,它們其實是指向一塊的。
          一個查看路徑的命令   pwd:顯示當前目錄 顯示的絕對路徑。
         pwd [-P] -P:顯示出確實的路徑,而非使用鏈接 (link) 路徑。有時候是連接指向的,就直接把鏈接指向的那
                              個實際的地址顯示。
  1. root@Joey:/home/joey/Desktop# pwd
  2. /home/joey/Desktop
        如果僅輸入 cd 時,代表的就是『 cd ~ 』的意思~ 亦即是會回到自己的家目錄。

11、幾個常用的命令的縮寫。
  1. ls list
  2. pwd print working directory
  3. cd change directory
  4. chgrp change group
  5. chown change owner
  6. chmod change mode
  7. cp copy
  8. mv move
  9. rm remove

12、mkdir、cp
       mkdir (make directory) 創建新的目錄.目錄得一層一層的建立纔行。但是可通過添加參數-p(感覺應該是
patch的縮寫吧)慎用,不然萬一拼寫錯誤,很亂。參數-m 來強制給予一個新的目錄相關的權限, 例如上表當中,
我們給予 -m 711 來給予新的目錄 drwx--x--x 的權限。
  1. cnbjlx24729:/media/packages/apps/Nfc/TestMode$ mkdir home/bird/testing
  2. mkdir: cannot create directory home/bird/testing’: No such file or directory
  3. cnbjlx24729:/media/packages/apps/Nfc/TestMode$ mkdir -p home/bird/testing
  4. cnbjlx24729:/media/packages/apps/Nfc/TestMode$ ls -l
  5. drwxr-xr-x 3 xp022430 domain_users 4096 May 27 09:57 home
  6. cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cd home/bird/testing/
         要複製文件,請使用 cp (copy) (該文件你必須要有 read 的權限纔行啊!)
         格式:cp [-adfilprsu] 來源文件(source) 目標文件(destination)。
         此時你可以寫全路徑,如 :cp TestMode/TestFile.txt Testelse/haha.txt 這樣就會完成複製和改名,
         如果你:cp TestMode/TestFile.txt Testelse/ 那麼就會用以前的名字。
         複製文件的時候主要考慮如下:
                 1)、是否需要完整的保留來源文件的信息?
                 2)、 來源文件是否爲連結檔 (symbolic link file)?
                 3)、來源檔是否爲特殊的文件,例如 FIFO, socket 等?
                 4)、來源文件是否爲目錄?
          對應不同參數,到時候自己選!
常用參數:
  1. -r :遞歸持續複製,用於目錄的複製行爲;(常用)
  2. -s :複製成爲符號鏈接文件 (symbolic link),亦即『快捷方式』文件;
  3. -p :連同文件的屬性(權限、用戶、時間)一起復制過去,而非使用默認屬性(備份常用);
  4. -i :若目標文件(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用);
  5. -a :相當於 -dr --preserve=all 的意思,至於 dr 請參考下列說明;(常用) ,感覺比-p好用點,-a會遞歸!
  6. -u :destination source 舊才更新 destination,或 destination 不存在的情況下才複製。
          默認的賦值權限、文件所有者、羣組等等都會變的。
  1. cnbjlx24729:/media/packages/apps/Nfc/TestMode$ ls -l
  2. total 8
  3. drwxr-xr-x 3 xp022430 domain_users 4096 May 27 09:57 home
  4. -rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt (注意初始權限)
  5. cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cp TestFile.txt ../
  6. (複製當前目錄下的TestFile文件到上一個目錄,注意..的運用)
  7. cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cd ..
  8. cnbjlx24729:/media/packages/apps/Nfc$ ls -l
  9. (可以看到默認的權限修改時間已經改變)
  10. -rwxr-xr-x 1 xp022430 domain_users 19 May 27 11:13 TestFile.txt
          使用-p的參數
  1. cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cp -p TestFile.txt ../
  2. cnbjlx24729:/media/packages/apps/Nfc/TestMode$ cd ..
  3. cnbjlx24729:/media/packages/apps/Nfc$ ls -l
  4. -rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt
          使用-a 會遞歸的把入目下的所有的都複製過去,並且保留全部的屬性和時間
  1. cnbjlx24729:/media/packages/apps/Nfc$ cp -a TestMode/ Testelse/
  2. cnbjlx24729:/media/packages/apps/Nfc$ ls -l
  3. drwxr-xr-x 3 xp022430 domain_users 4096 May 27 11:28 Testelse
  4. drwxrwxrwx 4 xp022430 domain_users 4096 May 27 11:27 TestMode
  5. cnbjlx24729:/media/packages/apps/Nfc$ cd Testelse/
  6. cnbjlx24729:/media/packages/apps/Nfc/Testelse$ ls -l
  7. total 4
  8. drwxrwxrwx 4 xp022430 domain_users 4096 May 27 11:27 TestMode
  9. cnbjlx24729:/media/packages/apps/Nfc/Testelse$ cd TestMode/
  10. cnbjlx24729:/media/packages/apps/Nfc/Testelse/TestMode$ ls -l
  11. total 12
  12. drwxr-xr-x 3 xp022430 domain_users 4096 May 27 09:57 home
  13. -rwxrwxrwx 1 xp022430 domain_users 19 May 26 15:10 TestFile.txt
  14. drwxrwxrwx 3 xp022430 domain_users 4096 May 27 09:57 TestMode
         至於移動目錄與文件,重命名,則使用 mv (move)。
         至於移除嗎?那就是 rm (remove)
         rm [-fir] 文件或目錄
            選項與參數:
           下面這三個很常用啊!
  1. -f :就是 force 的意思,忽略不存在的文件,不會出現警告訊息;
  2. -i :互動模式,在刪除前會詢問使用者是否動作
  3. -r :遞歸刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!

13、對PATH變量的理解(PATH 還是有點理解不到,應該是操作系統這塊的概念)
        PATH的值是一系列目錄,當你運行一個程序時,Shell腳本在這些目錄下進行搜尋。
        格式:PATH=$PATH:<PATH1>:<PATH2>:<PATH3>:------:<PATHN>
        執行文件路徑的變量: $PATH
        比如我們在任何地方使用ls,但其實那ls是在/bin/ls 目錄下的,我們把/bin配置到PATH當中就可以在任何
地方執行了!
        查看PATH變量的值的命令: echo $PATH
  1. root@Joey:/home/joey/Desktop# echo $PATH
  2. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
          由一堆目錄所組成的,每個目錄中間用冒號(:)來隔開,有順序之分,有多個的時候先查詢到的就先執行。
          添加patch,添加到路徑PATH="${PATH}:/test"   “/test”是要添加的路徑。此時是根目錄下的test
  1. root@Joey:/home/joey/Desktop# PATH="${PATH}:/test"
  2. root@Joey:/home/joey/Desktop# echo $PATH
  3. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/test
         爲什麼 ${PATH} 搜尋的目錄不加入本目錄(.)?
         爲了安全起見,不建議將『.』加入 PATH 的搜尋目錄中。 比如我在當前目錄,寫了一個ls的程序,一旦你
使用的時候,優先用到了我的,我在這個ls中加入竊取用戶數據的程序!那麼可想而知很恐怖!
 

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